*update to use new rpc and swarm system
*remove un-used query types for now
This commit is contained in:
parent
216542f902
commit
51bc9ccb32
24
package.json
24
package.json
|
@ -9,25 +9,15 @@
|
||||||
"build": "npm run compile && node ./dist-build/build.mjs dev"
|
"build": "npm run compile && node ./dist-build/build.mjs dev"
|
||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@lumeweb/dht-rpc-client": "https://github.com/LumeWeb/dht-rpc-client.git",
|
"@lumeweb/interface-relay": "git+https://git.lumeweb.com/LumeWeb/interface-relay.git",
|
||||||
"@lumeweb/kernel-dht-client": "https://github.com/LumeWeb/kernel-dht-client.git",
|
"@lumeweb/kernel-swarm-client": "git+https://git.lumeweb.com/LumeWeb/kernel-swarm-client.git",
|
||||||
"@lumeweb/relay-types": "https://github.com/LumeWeb/relay-types.git",
|
"@lumeweb/rpc-client": "git+https://git.lumeweb.com/LumeWeb/rpc-client.git",
|
||||||
"libkmodule": "^0.2.46"
|
"libkmodule": "^0.2.53"
|
||||||
},
|
|
||||||
"devDependencies": {
|
|
||||||
"@scure/bip39": "^1.1.0",
|
|
||||||
"@types/events": "^3.0.0",
|
|
||||||
"@types/node": "^18.7.14",
|
|
||||||
"@types/read": "^0.0.29",
|
|
||||||
"esbuild": "^0.14.49",
|
|
||||||
"libskynetnode": "^0.1.3",
|
|
||||||
"prettier": "^2.7.1",
|
|
||||||
"read": "^1.0.7",
|
|
||||||
"timers-browserify": "^2.0.12",
|
|
||||||
"tslib": "^2.4.0",
|
|
||||||
"typescript": "^4.7.4"
|
|
||||||
},
|
},
|
||||||
"browser": {
|
"browser": {
|
||||||
"timers": "timers-browserify"
|
"timers": "timers-browserify"
|
||||||
|
},
|
||||||
|
"devDependencies": {
|
||||||
|
"@types/node": "^18.15.3"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
180
src/index.ts
180
src/index.ts
|
@ -1,12 +1,8 @@
|
||||||
import { addHandler, handleMessage } from "libkmodule";
|
import { addHandler, handleMessage } from "libkmodule";
|
||||||
import type { ActiveQuery } from "libkmodule";
|
import type { ActiveQuery } from "libkmodule";
|
||||||
import { DHT } from "@lumeweb/kernel-dht-client";
|
import { SwarmClient } from "@lumeweb/kernel-swarm-client";
|
||||||
import {
|
import { RpcNetwork, RpcQueryOptions } from "@lumeweb/rpc-client";
|
||||||
RpcNetwork,
|
import type { RPCRequest, RPCResponse } from "@lumeweb/interface-relay";
|
||||||
RpcQueryOptions,
|
|
||||||
StreamingRpcQueryOptions,
|
|
||||||
} from "@lumeweb/dht-rpc-client";
|
|
||||||
import type { RPCRequest, RPCResponse } from "@lumeweb/relay-types";
|
|
||||||
|
|
||||||
onmessage = handleMessage;
|
onmessage = handleMessage;
|
||||||
|
|
||||||
|
@ -33,12 +29,7 @@ const networkInstances = new Map<number, RpcNetwork>();
|
||||||
|
|
||||||
addHandler("presentSeed", handlePresentSeed);
|
addHandler("presentSeed", handlePresentSeed);
|
||||||
addHandler("createNetwork", handleCreateNetwork);
|
addHandler("createNetwork", handleCreateNetwork);
|
||||||
addHandler("addRelay", handleAddRelay);
|
|
||||||
addHandler("removeRelay", handleRemoveRelay);
|
|
||||||
addHandler("clearRelays", handleClearRelays);
|
|
||||||
addHandler("simpleQuery", handleSimpleQuery);
|
addHandler("simpleQuery", handleSimpleQuery);
|
||||||
addHandler("streamingQuery", handleStreamingQuery, { receiveUpdates: true });
|
|
||||||
addHandler("wisdomQuery", handleWisdomQuery);
|
|
||||||
addHandler("ready", handleReady);
|
addHandler("ready", handleReady);
|
||||||
|
|
||||||
async function handlePresentSeed() {
|
async function handlePresentSeed() {
|
||||||
|
@ -51,48 +42,10 @@ async function handlePresentSeed() {
|
||||||
async function handleCreateNetwork(aq: ActiveQuery) {
|
async function handleCreateNetwork(aq: ActiveQuery) {
|
||||||
aq.respond(await createNetwork(false));
|
aq.respond(await createNetwork(false));
|
||||||
}
|
}
|
||||||
|
|
||||||
async function handleAddRelay(aq: ActiveQuery) {
|
|
||||||
const { pubkey = null } = aq.callerInput;
|
|
||||||
|
|
||||||
if (!pubkey) {
|
|
||||||
aq.reject("invalid pubkey");
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
const network = await getNetwork(aq);
|
|
||||||
|
|
||||||
network.addRelay(pubkey);
|
|
||||||
try {
|
|
||||||
await network.dht.addRelay(pubkey);
|
|
||||||
} catch (e: any) {}
|
|
||||||
|
|
||||||
aq.respond();
|
|
||||||
}
|
|
||||||
|
|
||||||
async function handleRemoveRelay(aq: ActiveQuery) {
|
|
||||||
const { pubkey = null } = aq.callerInput;
|
|
||||||
|
|
||||||
if (!pubkey) {
|
|
||||||
aq.reject("invalid pubkey");
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
aq.respond((await getNetwork(aq)).removeRelay(pubkey));
|
|
||||||
}
|
|
||||||
|
|
||||||
async function handleClearRelays(aq: ActiveQuery) {
|
|
||||||
const network = await getNetwork(aq);
|
|
||||||
network.clearRelays();
|
|
||||||
|
|
||||||
await network.dht.clearRelays();
|
|
||||||
aq.respond();
|
|
||||||
}
|
|
||||||
|
|
||||||
async function handleSimpleQuery(aq: ActiveQuery) {
|
async function handleSimpleQuery(aq: ActiveQuery) {
|
||||||
const {
|
const {
|
||||||
query = null,
|
query = undefined,
|
||||||
relay = null,
|
relay = undefined,
|
||||||
options = undefined,
|
options = undefined,
|
||||||
} = aq.callerInput as {
|
} = aq.callerInput as {
|
||||||
query: RPCRequest;
|
query: RPCRequest;
|
||||||
|
@ -105,127 +58,16 @@ async function handleSimpleQuery(aq: ActiveQuery) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!relay) {
|
|
||||||
aq.reject("relay required");
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
const network = await getNetwork(aq);
|
const network = await getNetwork(aq);
|
||||||
|
|
||||||
let resp: RPCResponse | null = null;
|
let resp: RPCResponse | null = null;
|
||||||
|
|
||||||
try {
|
try {
|
||||||
const rpcQuery = network.simpleQuery(
|
const rpcQuery = network.factory.simple({
|
||||||
relay as Buffer | string,
|
relay,
|
||||||
query.method,
|
query,
|
||||||
query.module,
|
options,
|
||||||
query.data,
|
|
||||||
query.bypassCache,
|
|
||||||
options
|
|
||||||
);
|
|
||||||
resp = await rpcQuery.result;
|
|
||||||
} catch (e: any) {
|
|
||||||
aq.reject(e);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (resp?.error) {
|
|
||||||
aq.reject(resp?.error);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
aq.respond(resp);
|
|
||||||
}
|
|
||||||
|
|
||||||
async function handleStreamingQuery(aq: ActiveQuery) {
|
|
||||||
const {
|
|
||||||
query = null,
|
|
||||||
relay = null,
|
|
||||||
options = undefined,
|
|
||||||
} = aq.callerInput as {
|
|
||||||
query: RPCRequest;
|
|
||||||
options: StreamingRpcQueryOptions;
|
|
||||||
relay: Buffer | string;
|
|
||||||
};
|
|
||||||
|
|
||||||
if (!query) {
|
|
||||||
aq.reject("RPCRequest query required");
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!relay) {
|
|
||||||
aq.reject("relay required");
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!options || !options?.streamHandler) {
|
|
||||||
aq.reject("RPCRequest query required");
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
const network = await getNetwork(aq);
|
|
||||||
|
|
||||||
let resp: RPCResponse | null = null;
|
|
||||||
|
|
||||||
let canceled = false;
|
|
||||||
|
|
||||||
try {
|
|
||||||
const rpcQuery = network.streamingQuery(
|
|
||||||
relay as Buffer | string,
|
|
||||||
query.method,
|
|
||||||
query.module,
|
|
||||||
(data) => {
|
|
||||||
if (!canceled) {
|
|
||||||
aq.sendUpdate?.(data);
|
|
||||||
}
|
|
||||||
},
|
|
||||||
query.data,
|
|
||||||
{ ...options }
|
|
||||||
);
|
|
||||||
|
|
||||||
aq.setReceiveUpdate?.((message: any) => {
|
|
||||||
if (message && message.cancel) {
|
|
||||||
rpcQuery.cancel();
|
|
||||||
canceled = true;
|
|
||||||
}
|
|
||||||
});
|
});
|
||||||
|
|
||||||
resp = await rpcQuery.result;
|
|
||||||
} catch (e: any) {
|
|
||||||
aq.reject(e);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (resp?.error) {
|
|
||||||
aq.reject(resp?.error);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
aq.respond(resp);
|
|
||||||
}
|
|
||||||
|
|
||||||
async function handleWisdomQuery(aq: ActiveQuery) {
|
|
||||||
const { query = null, options = undefined } = aq.callerInput as {
|
|
||||||
query: RPCRequest;
|
|
||||||
options: RpcQueryOptions;
|
|
||||||
relay: Buffer | string;
|
|
||||||
};
|
|
||||||
|
|
||||||
if (!query) {
|
|
||||||
aq.reject("RPCRequest query required");
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
const network = await getNetwork(aq);
|
|
||||||
|
|
||||||
let resp: RPCResponse | null = null;
|
|
||||||
|
|
||||||
try {
|
|
||||||
const rpcQuery = network.wisdomQuery(
|
|
||||||
query.method,
|
|
||||||
query.module,
|
|
||||||
query.data,
|
|
||||||
query.bypassCache ?? undefined,
|
|
||||||
options
|
|
||||||
);
|
|
||||||
resp = await rpcQuery.result;
|
resp = await rpcQuery.result;
|
||||||
} catch (e: any) {
|
} catch (e: any) {
|
||||||
aq.reject(e);
|
aq.reject(e);
|
||||||
|
@ -242,11 +84,11 @@ async function handleWisdomQuery(aq: ActiveQuery) {
|
||||||
async function handleReady(aq: ActiveQuery) {
|
async function handleReady(aq: ActiveQuery) {
|
||||||
await (
|
await (
|
||||||
await getNetwork(aq)
|
await getNetwork(aq)
|
||||||
).ready;
|
).readyWithRelays;
|
||||||
aq.respond();
|
aq.respond();
|
||||||
}
|
}
|
||||||
async function createNetwork(def = true): Promise<number> {
|
async function createNetwork(def = true): Promise<number> {
|
||||||
const dhtInstance = new RpcNetwork(new DHT(def));
|
const dhtInstance = new RpcNetwork(new SwarmClient(def));
|
||||||
const id = nextId();
|
const id = nextId();
|
||||||
networkInstances.set(id, dhtInstance);
|
networkInstances.set(id, dhtInstance);
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue