@polkadot-api/smoldot 0.3.0 → 0.3.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,15 +1,39 @@
1
+ const chainIds = /* @__PURE__ */ new WeakMap();
1
2
  const startFromWorker = (worker, options = {}) => {
3
+ worker.setMaxListeners(0);
2
4
  sendToWorker(worker, {
3
5
  type: "start",
4
6
  value: options
5
7
  });
6
8
  return {
7
9
  async addChain(options2) {
10
+ const { potentialRelayChains, ...addChainOptions } = options2;
8
11
  const id = await sendToWorker(worker, {
9
12
  type: "add-chain",
10
- value: options2
13
+ value: {
14
+ ...addChainOptions,
15
+ potentialRelayChainIds: potentialRelayChains?.map((chain2) => {
16
+ const id2 = chainIds.get(chain2);
17
+ if (id2 == null) {
18
+ throw new Error("Only chains created with `addChain` can be used");
19
+ }
20
+ return id2;
21
+ })
22
+ }
11
23
  });
12
- return {
24
+ const chain = {
25
+ jsonRpcResponses: {
26
+ next: async () => sendToWorker(worker, {
27
+ type: "chain",
28
+ value: {
29
+ id,
30
+ type: "receiveIterable"
31
+ }
32
+ }),
33
+ [Symbol.asyncIterator]() {
34
+ return this;
35
+ }
36
+ },
13
37
  nextJsonRpcResponse() {
14
38
  return sendToWorker(worker, {
15
39
  type: "chain",
@@ -39,6 +63,8 @@ const startFromWorker = (worker, options = {}) => {
39
63
  });
40
64
  }
41
65
  };
66
+ chainIds.set(chain, id);
67
+ return chain;
42
68
  },
43
69
  async terminate() {
44
70
  await sendToWorker(worker, {
@@ -1 +1 @@
1
- {"version":3,"file":"from-node-worker.mjs","sources":["../../../src/from-node-worker.ts"],"sourcesContent":["import { Worker } from \"node:worker_threads\"\nimport type { Client } from \"smoldot\"\nimport type { RequestMessage, SmoldotOptions } from \"./node-worker\"\n\nexport const startFromWorker = (\n worker: Worker,\n options: SmoldotOptions = {},\n): Client => {\n sendToWorker(worker, {\n type: \"start\",\n value: options,\n })\n\n return {\n async addChain(options) {\n const id = await sendToWorker(worker, {\n type: \"add-chain\",\n value: options,\n })\n return {\n nextJsonRpcResponse() {\n return sendToWorker(worker, {\n type: \"chain\",\n value: {\n id,\n type: \"receive\",\n },\n })\n },\n remove() {\n return sendToWorker(worker, {\n type: \"chain\",\n value: {\n id,\n type: \"remove\",\n },\n })\n },\n sendJsonRpc(value) {\n return sendToWorker(worker, {\n type: \"chain\",\n value: {\n id,\n type: \"send\",\n value,\n },\n })\n },\n }\n },\n async terminate() {\n await sendToWorker(worker, {\n type: \"terminate\",\n })\n },\n }\n}\n\nlet msgId = 0\nfunction sendToWorker(worker: Worker, msg: RequestMessage): Promise<any> {\n const id = msgId++\n worker.postMessage({ ...msg, id })\n return new Promise((resolve) => {\n const msgHandler = (response: any) => {\n if (response.id === id) {\n resolve(response.value)\n worker.off(\"message\", msgHandler)\n }\n }\n worker.on(\"message\", msgHandler)\n })\n}\n"],"names":["options"],"mappings":"AAIO,MAAM,eAAkB,GAAA,CAC7B,MACA,EAAA,OAAA,GAA0B,EACf,KAAA;AACX,EAAA,YAAA,CAAa,MAAQ,EAAA;AAAA,IACnB,IAAM,EAAA,OAAA;AAAA,IACN,KAAO,EAAA,OAAA;AAAA,GACR,CAAA,CAAA;AAED,EAAO,OAAA;AAAA,IACL,MAAM,SAASA,QAAS,EAAA;AACtB,MAAM,MAAA,EAAA,GAAK,MAAM,YAAA,CAAa,MAAQ,EAAA;AAAA,QACpC,IAAM,EAAA,WAAA;AAAA,QACN,KAAOA,EAAAA,QAAAA;AAAA,OACR,CAAA,CAAA;AACD,MAAO,OAAA;AAAA,QACL,mBAAsB,GAAA;AACpB,UAAA,OAAO,aAAa,MAAQ,EAAA;AAAA,YAC1B,IAAM,EAAA,OAAA;AAAA,YACN,KAAO,EAAA;AAAA,cACL,EAAA;AAAA,cACA,IAAM,EAAA,SAAA;AAAA,aACR;AAAA,WACD,CAAA,CAAA;AAAA,SACH;AAAA,QACA,MAAS,GAAA;AACP,UAAA,OAAO,aAAa,MAAQ,EAAA;AAAA,YAC1B,IAAM,EAAA,OAAA;AAAA,YACN,KAAO,EAAA;AAAA,cACL,EAAA;AAAA,cACA,IAAM,EAAA,QAAA;AAAA,aACR;AAAA,WACD,CAAA,CAAA;AAAA,SACH;AAAA,QACA,YAAY,KAAO,EAAA;AACjB,UAAA,OAAO,aAAa,MAAQ,EAAA;AAAA,YAC1B,IAAM,EAAA,OAAA;AAAA,YACN,KAAO,EAAA;AAAA,cACL,EAAA;AAAA,cACA,IAAM,EAAA,MAAA;AAAA,cACN,KAAA;AAAA,aACF;AAAA,WACD,CAAA,CAAA;AAAA,SACH;AAAA,OACF,CAAA;AAAA,KACF;AAAA,IACA,MAAM,SAAY,GAAA;AAChB,MAAA,MAAM,aAAa,MAAQ,EAAA;AAAA,QACzB,IAAM,EAAA,WAAA;AAAA,OACP,CAAA,CAAA;AAAA,KACH;AAAA,GACF,CAAA;AACF,EAAA;AAEA,IAAI,KAAQ,GAAA,CAAA,CAAA;AACZ,SAAS,YAAA,CAAa,QAAgB,GAAmC,EAAA;AACvE,EAAA,MAAM,EAAK,GAAA,KAAA,EAAA,CAAA;AACX,EAAA,MAAA,CAAO,WAAY,CAAA,EAAE,GAAG,GAAA,EAAK,IAAI,CAAA,CAAA;AACjC,EAAO,OAAA,IAAI,OAAQ,CAAA,CAAC,OAAY,KAAA;AAC9B,IAAM,MAAA,UAAA,GAAa,CAAC,QAAkB,KAAA;AACpC,MAAI,IAAA,QAAA,CAAS,OAAO,EAAI,EAAA;AACtB,QAAA,OAAA,CAAQ,SAAS,KAAK,CAAA,CAAA;AACtB,QAAO,MAAA,CAAA,GAAA,CAAI,WAAW,UAAU,CAAA,CAAA;AAAA,OAClC;AAAA,KACF,CAAA;AACA,IAAO,MAAA,CAAA,EAAA,CAAG,WAAW,UAAU,CAAA,CAAA;AAAA,GAChC,CAAA,CAAA;AACH;;;;"}
1
+ {"version":3,"file":"from-node-worker.mjs","sources":["../../../src/from-node-worker.ts"],"sourcesContent":["import { Worker } from \"node:worker_threads\"\nimport type { Chain, Client } from \"smoldot\"\nimport type { RequestMessage, SmoldotOptions } from \"./node-worker\"\n\nconst chainIds = new WeakMap<Chain, number>()\nexport const startFromWorker = (\n worker: Worker,\n options: SmoldotOptions = {},\n): Client => {\n worker.setMaxListeners(0)\n sendToWorker(worker, {\n type: \"start\",\n value: options,\n })\n\n return {\n async addChain(options) {\n const { potentialRelayChains, ...addChainOptions } = options\n const id = await sendToWorker(worker, {\n type: \"add-chain\",\n value: {\n ...addChainOptions,\n potentialRelayChainIds: potentialRelayChains?.map((chain) => {\n const id = chainIds.get(chain)\n if (id == null) {\n throw new Error(\"Only chains created with `addChain` can be used\")\n }\n return id\n }),\n },\n })\n\n const chain: Chain = {\n jsonRpcResponses: {\n next: async () =>\n sendToWorker(worker, {\n type: \"chain\",\n value: {\n id,\n type: \"receiveIterable\",\n },\n }),\n [Symbol.asyncIterator]() {\n return this\n },\n },\n nextJsonRpcResponse() {\n return sendToWorker(worker, {\n type: \"chain\",\n value: {\n id,\n type: \"receive\",\n },\n })\n },\n remove() {\n return sendToWorker(worker, {\n type: \"chain\",\n value: {\n id,\n type: \"remove\",\n },\n })\n },\n sendJsonRpc(value) {\n return sendToWorker(worker, {\n type: \"chain\",\n value: {\n id,\n type: \"send\",\n value,\n },\n })\n },\n }\n chainIds.set(chain, id)\n\n return chain\n },\n async terminate() {\n await sendToWorker(worker, {\n type: \"terminate\",\n })\n },\n }\n}\n\nlet msgId = 0\nfunction sendToWorker(worker: Worker, msg: RequestMessage): Promise<any> {\n const id = msgId++\n worker.postMessage({ ...msg, id })\n return new Promise((resolve) => {\n const msgHandler = (response: any) => {\n if (response.id === id) {\n resolve(response.value)\n worker.off(\"message\", msgHandler)\n }\n }\n worker.on(\"message\", msgHandler)\n })\n}\n"],"names":["options","chain","id"],"mappings":"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"}
@@ -1,17 +1,41 @@
1
1
  'use strict';
2
2
 
3
+ const chainIds = /* @__PURE__ */ new WeakMap();
3
4
  const startFromWorker = (worker, options = {}) => {
5
+ worker.setMaxListeners(0);
4
6
  sendToWorker(worker, {
5
7
  type: "start",
6
8
  value: options
7
9
  });
8
10
  return {
9
11
  async addChain(options2) {
12
+ const { potentialRelayChains, ...addChainOptions } = options2;
10
13
  const id = await sendToWorker(worker, {
11
14
  type: "add-chain",
12
- value: options2
15
+ value: {
16
+ ...addChainOptions,
17
+ potentialRelayChainIds: potentialRelayChains?.map((chain2) => {
18
+ const id2 = chainIds.get(chain2);
19
+ if (id2 == null) {
20
+ throw new Error("Only chains created with `addChain` can be used");
21
+ }
22
+ return id2;
23
+ })
24
+ }
13
25
  });
14
- return {
26
+ const chain = {
27
+ jsonRpcResponses: {
28
+ next: async () => sendToWorker(worker, {
29
+ type: "chain",
30
+ value: {
31
+ id,
32
+ type: "receiveIterable"
33
+ }
34
+ }),
35
+ [Symbol.asyncIterator]() {
36
+ return this;
37
+ }
38
+ },
15
39
  nextJsonRpcResponse() {
16
40
  return sendToWorker(worker, {
17
41
  type: "chain",
@@ -41,6 +65,8 @@ const startFromWorker = (worker, options = {}) => {
41
65
  });
42
66
  }
43
67
  };
68
+ chainIds.set(chain, id);
69
+ return chain;
44
70
  },
45
71
  async terminate() {
46
72
  await sendToWorker(worker, {
@@ -1 +1 @@
1
- {"version":3,"file":"from-node-worker.js","sources":["../../src/from-node-worker.ts"],"sourcesContent":["import { Worker } from \"node:worker_threads\"\nimport type { Client } from \"smoldot\"\nimport type { RequestMessage, SmoldotOptions } from \"./node-worker\"\n\nexport const startFromWorker = (\n worker: Worker,\n options: SmoldotOptions = {},\n): Client => {\n sendToWorker(worker, {\n type: \"start\",\n value: options,\n })\n\n return {\n async addChain(options) {\n const id = await sendToWorker(worker, {\n type: \"add-chain\",\n value: options,\n })\n return {\n nextJsonRpcResponse() {\n return sendToWorker(worker, {\n type: \"chain\",\n value: {\n id,\n type: \"receive\",\n },\n })\n },\n remove() {\n return sendToWorker(worker, {\n type: \"chain\",\n value: {\n id,\n type: \"remove\",\n },\n })\n },\n sendJsonRpc(value) {\n return sendToWorker(worker, {\n type: \"chain\",\n value: {\n id,\n type: \"send\",\n value,\n },\n })\n },\n }\n },\n async terminate() {\n await sendToWorker(worker, {\n type: \"terminate\",\n })\n },\n }\n}\n\nlet msgId = 0\nfunction sendToWorker(worker: Worker, msg: RequestMessage): Promise<any> {\n const id = msgId++\n worker.postMessage({ ...msg, id })\n return new Promise((resolve) => {\n const msgHandler = (response: any) => {\n if (response.id === id) {\n resolve(response.value)\n worker.off(\"message\", msgHandler)\n }\n }\n worker.on(\"message\", msgHandler)\n })\n}\n"],"names":["options"],"mappings":";;AAIO,MAAM,eAAkB,GAAA,CAC7B,MACA,EAAA,OAAA,GAA0B,EACf,KAAA;AACX,EAAA,YAAA,CAAa,MAAQ,EAAA;AAAA,IACnB,IAAM,EAAA,OAAA;AAAA,IACN,KAAO,EAAA,OAAA;AAAA,GACR,CAAA,CAAA;AAED,EAAO,OAAA;AAAA,IACL,MAAM,SAASA,QAAS,EAAA;AACtB,MAAM,MAAA,EAAA,GAAK,MAAM,YAAA,CAAa,MAAQ,EAAA;AAAA,QACpC,IAAM,EAAA,WAAA;AAAA,QACN,KAAOA,EAAAA,QAAAA;AAAA,OACR,CAAA,CAAA;AACD,MAAO,OAAA;AAAA,QACL,mBAAsB,GAAA;AACpB,UAAA,OAAO,aAAa,MAAQ,EAAA;AAAA,YAC1B,IAAM,EAAA,OAAA;AAAA,YACN,KAAO,EAAA;AAAA,cACL,EAAA;AAAA,cACA,IAAM,EAAA,SAAA;AAAA,aACR;AAAA,WACD,CAAA,CAAA;AAAA,SACH;AAAA,QACA,MAAS,GAAA;AACP,UAAA,OAAO,aAAa,MAAQ,EAAA;AAAA,YAC1B,IAAM,EAAA,OAAA;AAAA,YACN,KAAO,EAAA;AAAA,cACL,EAAA;AAAA,cACA,IAAM,EAAA,QAAA;AAAA,aACR;AAAA,WACD,CAAA,CAAA;AAAA,SACH;AAAA,QACA,YAAY,KAAO,EAAA;AACjB,UAAA,OAAO,aAAa,MAAQ,EAAA;AAAA,YAC1B,IAAM,EAAA,OAAA;AAAA,YACN,KAAO,EAAA;AAAA,cACL,EAAA;AAAA,cACA,IAAM,EAAA,MAAA;AAAA,cACN,KAAA;AAAA,aACF;AAAA,WACD,CAAA,CAAA;AAAA,SACH;AAAA,OACF,CAAA;AAAA,KACF;AAAA,IACA,MAAM,SAAY,GAAA;AAChB,MAAA,MAAM,aAAa,MAAQ,EAAA;AAAA,QACzB,IAAM,EAAA,WAAA;AAAA,OACP,CAAA,CAAA;AAAA,KACH;AAAA,GACF,CAAA;AACF,EAAA;AAEA,IAAI,KAAQ,GAAA,CAAA,CAAA;AACZ,SAAS,YAAA,CAAa,QAAgB,GAAmC,EAAA;AACvE,EAAA,MAAM,EAAK,GAAA,KAAA,EAAA,CAAA;AACX,EAAA,MAAA,CAAO,WAAY,CAAA,EAAE,GAAG,GAAA,EAAK,IAAI,CAAA,CAAA;AACjC,EAAO,OAAA,IAAI,OAAQ,CAAA,CAAC,OAAY,KAAA;AAC9B,IAAM,MAAA,UAAA,GAAa,CAAC,QAAkB,KAAA;AACpC,MAAI,IAAA,QAAA,CAAS,OAAO,EAAI,EAAA;AACtB,QAAA,OAAA,CAAQ,SAAS,KAAK,CAAA,CAAA;AACtB,QAAO,MAAA,CAAA,GAAA,CAAI,WAAW,UAAU,CAAA,CAAA;AAAA,OAClC;AAAA,KACF,CAAA;AACA,IAAO,MAAA,CAAA,EAAA,CAAG,WAAW,UAAU,CAAA,CAAA;AAAA,GAChC,CAAA,CAAA;AACH;;;;"}
1
+ {"version":3,"file":"from-node-worker.js","sources":["../../src/from-node-worker.ts"],"sourcesContent":["import { Worker } from \"node:worker_threads\"\nimport type { Chain, Client } from \"smoldot\"\nimport type { RequestMessage, SmoldotOptions } from \"./node-worker\"\n\nconst chainIds = new WeakMap<Chain, number>()\nexport const startFromWorker = (\n worker: Worker,\n options: SmoldotOptions = {},\n): Client => {\n worker.setMaxListeners(0)\n sendToWorker(worker, {\n type: \"start\",\n value: options,\n })\n\n return {\n async addChain(options) {\n const { potentialRelayChains, ...addChainOptions } = options\n const id = await sendToWorker(worker, {\n type: \"add-chain\",\n value: {\n ...addChainOptions,\n potentialRelayChainIds: potentialRelayChains?.map((chain) => {\n const id = chainIds.get(chain)\n if (id == null) {\n throw new Error(\"Only chains created with `addChain` can be used\")\n }\n return id\n }),\n },\n })\n\n const chain: Chain = {\n jsonRpcResponses: {\n next: async () =>\n sendToWorker(worker, {\n type: \"chain\",\n value: {\n id,\n type: \"receiveIterable\",\n },\n }),\n [Symbol.asyncIterator]() {\n return this\n },\n },\n nextJsonRpcResponse() {\n return sendToWorker(worker, {\n type: \"chain\",\n value: {\n id,\n type: \"receive\",\n },\n })\n },\n remove() {\n return sendToWorker(worker, {\n type: \"chain\",\n value: {\n id,\n type: \"remove\",\n },\n })\n },\n sendJsonRpc(value) {\n return sendToWorker(worker, {\n type: \"chain\",\n value: {\n id,\n type: \"send\",\n value,\n },\n })\n },\n }\n chainIds.set(chain, id)\n\n return chain\n },\n async terminate() {\n await sendToWorker(worker, {\n type: \"terminate\",\n })\n },\n }\n}\n\nlet msgId = 0\nfunction sendToWorker(worker: Worker, msg: RequestMessage): Promise<any> {\n const id = msgId++\n worker.postMessage({ ...msg, id })\n return new Promise((resolve) => {\n const msgHandler = (response: any) => {\n if (response.id === id) {\n resolve(response.value)\n worker.off(\"message\", msgHandler)\n }\n }\n worker.on(\"message\", msgHandler)\n })\n}\n"],"names":["options","chain","id"],"mappings":"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"}
@@ -61,6 +61,12 @@ async function handleChainMessage(msg, id) {
61
61
  value: await chain.nextJsonRpcResponse()
62
62
  });
63
63
  break;
64
+ case "receiveIterable":
65
+ parentPort?.postMessage({
66
+ id,
67
+ value: await chain.jsonRpcResponses.next()
68
+ });
69
+ break;
64
70
  case "send":
65
71
  chain.sendJsonRpc(msg.value.value);
66
72
  break;
@@ -1 +1 @@
1
- {"version":3,"file":"node-worker.mjs","sources":["../../../src/node-worker.ts"],"sourcesContent":["import { parentPort } from \"node:worker_threads\"\nimport { AddChainOptions, Chain, Client, ClientOptions, start } from \"smoldot\"\n\nexport type SmoldotOptions = Omit<ClientOptions, \"portToWorker\">\nexport interface StartMsg {\n type: \"start\"\n value: SmoldotOptions\n}\nexport interface AddChainMsg {\n type: \"add-chain\"\n value: Omit<AddChainOptions, \"potentialRelayChains\"> & {\n potentialRelayChainIds?: number[]\n }\n}\nexport interface TerminateMsg {\n type: \"terminate\"\n}\nexport interface ChainMsg {\n type: \"chain\"\n value: {\n id: number\n } & (\n | {\n type: \"remove\" | \"receive\"\n }\n | {\n type: \"send\"\n value: string\n }\n )\n}\nexport type RequestMessage = StartMsg | AddChainMsg | TerminateMsg | ChainMsg\nexport type CorrelatedRequestMessage = { id: number } & RequestMessage\n\nlet smoldot: Client | null = null\n\nlet chainId = 0\nconst chains = new Map<number, Chain>()\n\nparentPort!.on(\"message\", async (msg: CorrelatedRequestMessage) => {\n if (msg.type === \"start\") {\n if (smoldot !== null) {\n throw new Error(\"Can't call start on a client already started\")\n }\n smoldot = start(msg.value)\n return parentPort?.postMessage({\n id: msg.id,\n })\n }\n\n if (smoldot === null) {\n throw new Error(\"Smoldot not started\")\n }\n\n switch (msg.type) {\n case \"add-chain\": {\n const potentialRelayChains = msg.value.potentialRelayChainIds?.map(\n (id) => {\n const chain = chains.get(id)\n if (!chain) throw new Error(\"Can't reference removed chain\")\n return chain\n },\n )\n const chain = await smoldot.addChain({\n ...msg.value,\n potentialRelayChains,\n })\n const id = chainId++\n chains.set(id, chain)\n parentPort?.postMessage({\n id: msg.id,\n value: id,\n })\n break\n }\n case \"terminate\":\n await smoldot.terminate()\n parentPort?.postMessage({\n id: msg.id,\n })\n smoldot = null\n chains.clear()\n break\n case \"chain\":\n handleChainMessage(msg, msg.id)\n break\n }\n})\n\nasync function handleChainMessage(msg: ChainMsg, id: number) {\n const chain = chains.get(msg.value.id)\n if (!chain) throw new Error(\"Can't reference removed chain\")\n\n switch (msg.value.type) {\n case \"receive\":\n parentPort?.postMessage({\n id,\n value: await chain.nextJsonRpcResponse(),\n })\n break\n case \"send\":\n chain.sendJsonRpc(msg.value.value)\n break\n case \"remove\":\n chain.remove()\n chains.delete(msg.value.id)\n break\n }\n}\n"],"names":["id","chain"],"mappings":"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"}
1
+ {"version":3,"file":"node-worker.mjs","sources":["../../../src/node-worker.ts"],"sourcesContent":["import { parentPort } from \"node:worker_threads\"\nimport { AddChainOptions, Chain, Client, ClientOptions, start } from \"smoldot\"\n\nexport type SmoldotOptions = Omit<ClientOptions, \"portToWorker\">\nexport interface StartMsg {\n type: \"start\"\n value: SmoldotOptions\n}\nexport interface AddChainMsg {\n type: \"add-chain\"\n value: Omit<AddChainOptions, \"potentialRelayChains\"> & {\n potentialRelayChainIds?: number[]\n }\n}\nexport interface TerminateMsg {\n type: \"terminate\"\n}\nexport interface ChainMsg {\n type: \"chain\"\n value: {\n id: number\n } & (\n | {\n type: \"remove\" | \"receive\" | \"receiveIterable\"\n }\n | {\n type: \"send\"\n value: string\n }\n )\n}\nexport type RequestMessage = StartMsg | AddChainMsg | TerminateMsg | ChainMsg\nexport type CorrelatedRequestMessage = { id: number } & RequestMessage\n\nlet smoldot: Client | null = null\n\nlet chainId = 0\nconst chains = new Map<number, Chain>()\n\nparentPort!.on(\"message\", async (msg: CorrelatedRequestMessage) => {\n if (msg.type === \"start\") {\n if (smoldot !== null) {\n throw new Error(\"Can't call start on a client already started\")\n }\n smoldot = start(msg.value)\n return parentPort?.postMessage({\n id: msg.id,\n })\n }\n\n if (smoldot === null) {\n throw new Error(\"Smoldot not started\")\n }\n\n switch (msg.type) {\n case \"add-chain\": {\n const potentialRelayChains = msg.value.potentialRelayChainIds?.map(\n (id) => {\n const chain = chains.get(id)\n if (!chain) throw new Error(\"Can't reference removed chain\")\n return chain\n },\n )\n const chain = await smoldot.addChain({\n ...msg.value,\n potentialRelayChains,\n })\n const id = chainId++\n chains.set(id, chain)\n parentPort?.postMessage({\n id: msg.id,\n value: id,\n })\n break\n }\n case \"terminate\":\n await smoldot.terminate()\n parentPort?.postMessage({\n id: msg.id,\n })\n smoldot = null\n chains.clear()\n break\n case \"chain\":\n handleChainMessage(msg, msg.id)\n break\n }\n})\n\nasync function handleChainMessage(msg: ChainMsg, id: number) {\n const chain = chains.get(msg.value.id)\n if (!chain) throw new Error(\"Can't reference removed chain\")\n\n switch (msg.value.type) {\n case \"receive\":\n parentPort?.postMessage({\n id,\n value: await chain.nextJsonRpcResponse(),\n })\n break\n case \"receiveIterable\":\n parentPort?.postMessage({\n id,\n value: await chain.jsonRpcResponses.next(),\n })\n break\n case \"send\":\n chain.sendJsonRpc(msg.value.value)\n break\n case \"remove\":\n chain.remove()\n chains.delete(msg.value.id)\n break\n }\n}\n"],"names":["id","chain"],"mappings":"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"}
@@ -19,7 +19,7 @@ interface ChainMsg {
19
19
  value: {
20
20
  id: number;
21
21
  } & ({
22
- type: "remove" | "receive";
22
+ type: "remove" | "receive" | "receiveIterable";
23
23
  } | {
24
24
  type: "send";
25
25
  value: string;
@@ -63,6 +63,12 @@ async function handleChainMessage(msg, id) {
63
63
  value: await chain.nextJsonRpcResponse()
64
64
  });
65
65
  break;
66
+ case "receiveIterable":
67
+ node_worker_threads.parentPort?.postMessage({
68
+ id,
69
+ value: await chain.jsonRpcResponses.next()
70
+ });
71
+ break;
66
72
  case "send":
67
73
  chain.sendJsonRpc(msg.value.value);
68
74
  break;
@@ -1 +1 @@
1
- {"version":3,"file":"node-worker.js","sources":["../../src/node-worker.ts"],"sourcesContent":["import { parentPort } from \"node:worker_threads\"\nimport { AddChainOptions, Chain, Client, ClientOptions, start } from \"smoldot\"\n\nexport type SmoldotOptions = Omit<ClientOptions, \"portToWorker\">\nexport interface StartMsg {\n type: \"start\"\n value: SmoldotOptions\n}\nexport interface AddChainMsg {\n type: \"add-chain\"\n value: Omit<AddChainOptions, \"potentialRelayChains\"> & {\n potentialRelayChainIds?: number[]\n }\n}\nexport interface TerminateMsg {\n type: \"terminate\"\n}\nexport interface ChainMsg {\n type: \"chain\"\n value: {\n id: number\n } & (\n | {\n type: \"remove\" | \"receive\"\n }\n | {\n type: \"send\"\n value: string\n }\n )\n}\nexport type RequestMessage = StartMsg | AddChainMsg | TerminateMsg | ChainMsg\nexport type CorrelatedRequestMessage = { id: number } & RequestMessage\n\nlet smoldot: Client | null = null\n\nlet chainId = 0\nconst chains = new Map<number, Chain>()\n\nparentPort!.on(\"message\", async (msg: CorrelatedRequestMessage) => {\n if (msg.type === \"start\") {\n if (smoldot !== null) {\n throw new Error(\"Can't call start on a client already started\")\n }\n smoldot = start(msg.value)\n return parentPort?.postMessage({\n id: msg.id,\n })\n }\n\n if (smoldot === null) {\n throw new Error(\"Smoldot not started\")\n }\n\n switch (msg.type) {\n case \"add-chain\": {\n const potentialRelayChains = msg.value.potentialRelayChainIds?.map(\n (id) => {\n const chain = chains.get(id)\n if (!chain) throw new Error(\"Can't reference removed chain\")\n return chain\n },\n )\n const chain = await smoldot.addChain({\n ...msg.value,\n potentialRelayChains,\n })\n const id = chainId++\n chains.set(id, chain)\n parentPort?.postMessage({\n id: msg.id,\n value: id,\n })\n break\n }\n case \"terminate\":\n await smoldot.terminate()\n parentPort?.postMessage({\n id: msg.id,\n })\n smoldot = null\n chains.clear()\n break\n case \"chain\":\n handleChainMessage(msg, msg.id)\n break\n }\n})\n\nasync function handleChainMessage(msg: ChainMsg, id: number) {\n const chain = chains.get(msg.value.id)\n if (!chain) throw new Error(\"Can't reference removed chain\")\n\n switch (msg.value.type) {\n case \"receive\":\n parentPort?.postMessage({\n id,\n value: await chain.nextJsonRpcResponse(),\n })\n break\n case \"send\":\n chain.sendJsonRpc(msg.value.value)\n break\n case \"remove\":\n chain.remove()\n chains.delete(msg.value.id)\n break\n }\n}\n"],"names":["parentPort","start","id","chain"],"mappings":"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"}
1
+ {"version":3,"file":"node-worker.js","sources":["../../src/node-worker.ts"],"sourcesContent":["import { parentPort } from \"node:worker_threads\"\nimport { AddChainOptions, Chain, Client, ClientOptions, start } from \"smoldot\"\n\nexport type SmoldotOptions = Omit<ClientOptions, \"portToWorker\">\nexport interface StartMsg {\n type: \"start\"\n value: SmoldotOptions\n}\nexport interface AddChainMsg {\n type: \"add-chain\"\n value: Omit<AddChainOptions, \"potentialRelayChains\"> & {\n potentialRelayChainIds?: number[]\n }\n}\nexport interface TerminateMsg {\n type: \"terminate\"\n}\nexport interface ChainMsg {\n type: \"chain\"\n value: {\n id: number\n } & (\n | {\n type: \"remove\" | \"receive\" | \"receiveIterable\"\n }\n | {\n type: \"send\"\n value: string\n }\n )\n}\nexport type RequestMessage = StartMsg | AddChainMsg | TerminateMsg | ChainMsg\nexport type CorrelatedRequestMessage = { id: number } & RequestMessage\n\nlet smoldot: Client | null = null\n\nlet chainId = 0\nconst chains = new Map<number, Chain>()\n\nparentPort!.on(\"message\", async (msg: CorrelatedRequestMessage) => {\n if (msg.type === \"start\") {\n if (smoldot !== null) {\n throw new Error(\"Can't call start on a client already started\")\n }\n smoldot = start(msg.value)\n return parentPort?.postMessage({\n id: msg.id,\n })\n }\n\n if (smoldot === null) {\n throw new Error(\"Smoldot not started\")\n }\n\n switch (msg.type) {\n case \"add-chain\": {\n const potentialRelayChains = msg.value.potentialRelayChainIds?.map(\n (id) => {\n const chain = chains.get(id)\n if (!chain) throw new Error(\"Can't reference removed chain\")\n return chain\n },\n )\n const chain = await smoldot.addChain({\n ...msg.value,\n potentialRelayChains,\n })\n const id = chainId++\n chains.set(id, chain)\n parentPort?.postMessage({\n id: msg.id,\n value: id,\n })\n break\n }\n case \"terminate\":\n await smoldot.terminate()\n parentPort?.postMessage({\n id: msg.id,\n })\n smoldot = null\n chains.clear()\n break\n case \"chain\":\n handleChainMessage(msg, msg.id)\n break\n }\n})\n\nasync function handleChainMessage(msg: ChainMsg, id: number) {\n const chain = chains.get(msg.value.id)\n if (!chain) throw new Error(\"Can't reference removed chain\")\n\n switch (msg.value.type) {\n case \"receive\":\n parentPort?.postMessage({\n id,\n value: await chain.nextJsonRpcResponse(),\n })\n break\n case \"receiveIterable\":\n parentPort?.postMessage({\n id,\n value: await chain.jsonRpcResponses.next(),\n })\n break\n case \"send\":\n chain.sendJsonRpc(msg.value.value)\n break\n case \"remove\":\n chain.remove()\n chains.delete(msg.value.id)\n break\n }\n}\n"],"names":["parentPort","start","id","chain"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@polkadot-api/smoldot",
3
- "version": "0.3.0",
3
+ "version": "0.3.2",
4
4
  "author": "Josep M Sobrepere (https://github.com/josepot)",
5
5
  "repository": {
6
6
  "type": "git",
@@ -76,7 +76,7 @@
76
76
  ],
77
77
  "dependencies": {
78
78
  "@types/node": "^22.2.0",
79
- "smoldot": "2.0.29"
79
+ "smoldot": "2.0.30"
80
80
  },
81
81
  "scripts": {
82
82
  "build-core": "tsc --noEmit && rollup -c",