@polkadot-api/substrate-client 0.1.0 → 0.1.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.
package/dist/index.d.mts CHANGED
@@ -23,7 +23,7 @@ interface Subscriber<T> {
23
23
  error: (e: Error) => void;
24
24
  }
25
25
 
26
- type FollowSubscriptionCb<T> = (methodName: string, subscriptionId: string, cb: Subscriber<T>) => UnsubscribeFn;
26
+ type FollowSubscriptionCb<T> = (subscriptionId: string, cb: Subscriber<T>) => UnsubscribeFn;
27
27
  type ClientRequestCb<T, TT> = {
28
28
  onSuccess: (result: T, followSubscription: FollowSubscriptionCb<TT>) => void;
29
29
  onError: (e: Error) => void;
package/dist/index.d.ts CHANGED
@@ -23,7 +23,7 @@ interface Subscriber<T> {
23
23
  error: (e: Error) => void;
24
24
  }
25
25
 
26
- type FollowSubscriptionCb<T> = (methodName: string, subscriptionId: string, cb: Subscriber<T>) => UnsubscribeFn;
26
+ type FollowSubscriptionCb<T> = (subscriptionId: string, cb: Subscriber<T>) => UnsubscribeFn;
27
27
  type ClientRequestCb<T, TT> = {
28
28
  onSuccess: (result: T, followSubscription: FollowSubscriptionCb<TT>) => void;
29
29
  onError: (e: Error) => void;
package/dist/index.js CHANGED
@@ -189,43 +189,49 @@ var OperationInaccessibleError = class extends Error {
189
189
 
190
190
  // src/chainhead/operation-promise.ts
191
191
  var createOperationPromise = (operationName, factory) => (request) => abortablePromiseFn((res, rej, ...args) => {
192
+ let isRunning = true;
193
+ let cancel = () => {
194
+ isRunning = false;
195
+ };
192
196
  const [requestArgs, logicCb] = factory(...args);
193
- let cancel = request(operationName(), requestArgs, {
197
+ request(operationName, requestArgs, {
194
198
  onSuccess: (response, followSubscription) => {
195
- if (response.result === "limitReached") {
196
- cancel = noop2;
199
+ if (response.result === "limitReached")
197
200
  return rej(new OperationLimitError());
198
- }
199
- let isOperationGoing = true;
201
+ const { operationId } = response;
202
+ const stopOperation = () => {
203
+ request(chainHead.stopOperation, [operationId]);
204
+ };
205
+ if (!isRunning)
206
+ return stopOperation();
200
207
  let done = noop2;
201
208
  const _res = (x) => {
202
- isOperationGoing = false;
209
+ isRunning = false;
203
210
  done();
204
211
  res(x);
205
212
  };
206
213
  const _rej = (x) => {
207
- isOperationGoing = false;
214
+ isRunning = false;
208
215
  done();
209
216
  rej(x);
210
217
  };
211
- done = followSubscription(response.operationId, {
218
+ done = followSubscription(operationId, {
212
219
  next: (e) => {
213
220
  const _e = e;
214
- if (_e.event === "operationError") {
221
+ if (_e.event === "operationError")
215
222
  rej(new OperationError(_e.error));
216
- } else if (_e.event === "operationInaccessible") {
223
+ else if (_e.event === "operationInaccessible")
217
224
  rej(new OperationInaccessibleError());
218
- } else {
225
+ else
219
226
  logicCb(e, _res, _rej);
220
- }
221
227
  },
222
228
  error: _rej
223
229
  });
224
230
  cancel = () => {
225
- if (!isOperationGoing)
226
- return;
227
- done();
228
- request(chainHead.stopOperation, [response.operationId]);
231
+ if (isRunning) {
232
+ done();
233
+ stopOperation();
234
+ }
229
235
  };
230
236
  },
231
237
  onError: rej
@@ -237,7 +243,7 @@ var createOperationPromise = (operationName, factory) => (request) => abortableP
237
243
 
238
244
  // src/chainhead/body.ts
239
245
  var createBodyFn = createOperationPromise(
240
- () => chainHead.body,
246
+ chainHead.body,
241
247
  (hash) => [
242
248
  [hash],
243
249
  (e, res) => {
@@ -248,7 +254,7 @@ var createBodyFn = createOperationPromise(
248
254
 
249
255
  // src/chainhead/call.ts
250
256
  var createCallFn = createOperationPromise(
251
- () => chainHead.call,
257
+ chainHead.call,
252
258
  (hash, fnName, callParameters) => [
253
259
  [hash, fnName, callParameters],
254
260
  (e, res) => {
@@ -272,10 +278,20 @@ var createStorageCb = (request) => (hash, inputs, childTrie, onItems, onError, o
272
278
  onDone();
273
279
  return import_utils2.noop;
274
280
  }
275
- let cancel = request(chainHead.storage, [hash, inputs, childTrie], {
281
+ let isRunning = true;
282
+ let cancel = () => {
283
+ isRunning = false;
284
+ };
285
+ request(chainHead.storage, [hash, inputs, childTrie], {
276
286
  onSuccess: (response, followSubscription) => {
277
287
  if (response.result === "limitReached" || response.discardedItems === inputs.length)
278
288
  return onError(new OperationLimitError());
289
+ const { operationId } = response;
290
+ const stopOperation = () => {
291
+ request(chainHead.stopOperation, [operationId]);
292
+ };
293
+ if (!isRunning)
294
+ return stopOperation();
279
295
  const doneListening = followSubscription(response.operationId, {
280
296
  next: (event) => {
281
297
  switch (event.event) {
@@ -412,7 +428,7 @@ function getChainHead(request) {
412
428
  unfollow(!(error instanceof DestroyedError));
413
429
  };
414
430
  const onFollowRequestSuccess = (subscriptionId, follow) => {
415
- const done = follow(chainHead.followEvent, subscriptionId, {
431
+ const done = follow(subscriptionId, {
416
432
  next: onAllFollowEventsNext,
417
433
  error: onAllFollowEventsError
418
434
  });
@@ -549,8 +565,8 @@ var createClient = (gProvider) => {
549
565
  if (!cb)
550
566
  return;
551
567
  responses.delete(id);
552
- return error ? cb.onError(new RpcError(error)) : cb.onSuccess(result, (methodName, opaqueId, subscriber) => {
553
- const subscriptionId2 = methodName + opaqueId;
568
+ return error ? cb.onError(new RpcError(error)) : cb.onSuccess(result, (opaqueId, subscriber) => {
569
+ const subscriptionId2 = opaqueId;
554
570
  subscriptions.subscribe(subscriptionId2, subscriber);
555
571
  return () => {
556
572
  subscriptions.unsubscribe(subscriptionId2);
@@ -561,7 +577,7 @@ var createClient = (gProvider) => {
561
577
  ({ subscription, result, error } = params);
562
578
  if (!subscription || !error && !Object.hasOwn(params, "result"))
563
579
  throw 0;
564
- const subscriptionId = parsed.method + subscription;
580
+ const subscriptionId = subscription;
565
581
  if (error) {
566
582
  subscriptions.error(subscriptionId, new RpcError(error));
567
583
  } else {
@@ -621,6 +637,7 @@ var createGetChainSpec = (clientRequest) => {
621
637
 
622
638
  // src/request-compatibility-enhancer.ts
623
639
  var getCompatibilityEnhancer = (rpcMethodsP, request) => (methods) => {
640
+ let translations = {};
624
641
  let enhancedRequest = null;
625
642
  return (method, ...rest) => {
626
643
  if (enhancedRequest)
@@ -630,7 +647,8 @@ var getCompatibilityEnhancer = (rpcMethodsP, request) => (methods) => {
630
647
  isRunning = false;
631
648
  };
632
649
  rpcMethodsP.then((rpcMethods) => {
633
- enhancedRequest = (method2, ...iRest) => {
650
+ enhancedRequest = (method_, ...iRest) => {
651
+ const method2 = translations[method_] ?? method_;
634
652
  if (rpcMethods.has(method2))
635
653
  return request(method2, ...iRest);
636
654
  iRest[1]?.onError(new Error(`Unsupported method ${method2}`));
@@ -642,10 +660,9 @@ var getCompatibilityEnhancer = (rpcMethodsP, request) => (methods) => {
642
660
  if (parts[1] !== "v1")
643
661
  return;
644
662
  parts[1] = "unstable";
645
- method = parts.join("_");
646
- if (rpcMethods.has(method))
647
- Object.entries(methods).forEach(([key, value]) => {
648
- methods[key] = value.replace("_v1_", "_unstable_");
663
+ if (rpcMethods.has(parts.join("_")))
664
+ Object.values(methods).forEach((value) => {
665
+ translations[value] = value.replace("_v1_", "_unstable_");
649
666
  });
650
667
  else if (parts[0] === "transaction") {
651
668
  let unwatch;
@@ -659,8 +676,8 @@ var getCompatibilityEnhancer = (rpcMethodsP, request) => (methods) => {
659
676
  }
660
677
  );
661
678
  if (txGroup) {
662
- methods.broadcast = `${txGroup}_${version}_submitAndWatch`;
663
- methods.stop = unwatch;
679
+ translations[methods.broadcast] = `${txGroup}_${version}_submitAndWatch`;
680
+ translations[methods.stop] = unwatch;
664
681
  }
665
682
  }
666
683
  }).then(() => {
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.ts","../src/internal-utils/abortablePromiseFn.ts","../src/internal-utils/deferred-promise.ts","../src/internal-utils/noop.ts","../src/internal-utils/subscriptions-manager.ts","../src/methods.ts","../src/transaction/transaction.ts","../src/chainhead/errors.ts","../src/chainhead/operation-promise.ts","../src/chainhead/body.ts","../src/chainhead/call.ts","../src/chainhead/header.ts","../src/chainhead/storage-subscription.ts","../src/chainhead/storage.ts","../src/chainhead/unpin.ts","../src/client/DestroyedError.ts","../src/chainhead/chainhead.ts","../src/client/RpcError.ts","../src/client/createClient.ts","../src/chainspec.ts","../src/request-compatibility-enhancer.ts"],"sourcesContent":["import type { JsonRpcProvider } from \"@polkadot-api/json-rpc-provider\"\nimport { getTransaction } from \"./transaction/transaction\"\nimport { getChainHead } from \"./chainhead\"\nimport {\n ClientRequest,\n ClientRequestCb,\n createClient as createRawClient,\n} from \"./client\"\nimport type { ChainHead } from \"./chainhead\"\nimport type { Transaction } from \"./transaction\"\nimport { UnsubscribeFn } from \"./common-types\"\nimport { abortablePromiseFn } from \"./internal-utils\"\nimport { ChainSpecData, createGetChainSpec } from \"./chainspec\"\nimport { getCompatibilityEnhancer } from \"./request-compatibility-enhancer\"\nimport { chainHead, chainSpec, transaction } from \"./methods\"\n\nexport type * from \"./common-types\"\nexport type * from \"./client\"\nexport type * from \"./transaction\"\nexport type * from \"./chainhead\"\nexport type * from \"./chainspec\"\n\nexport { RpcError, DestroyedError } from \"./client\"\nexport {\n StopError,\n DisjointError,\n OperationError,\n OperationInaccessibleError,\n OperationLimitError,\n} from \"./chainhead\"\n\nexport interface SubstrateClient {\n chainHead: ChainHead\n transaction: Transaction\n destroy: UnsubscribeFn\n getChainSpecData: () => Promise<ChainSpecData>\n request: <T>(\n method: string,\n params: any[],\n abortSignal?: AbortSignal,\n ) => Promise<T>\n _request: <Reply, Notification>(\n method: string,\n params: any[],\n cb?: ClientRequestCb<Reply, Notification>,\n ) => UnsubscribeFn\n}\n\nexport const createClient = (provider: JsonRpcProvider): SubstrateClient => {\n const client = createRawClient(provider)\n\n const request = abortablePromiseFn(\n <T>(\n onSuccess: (value: T) => void,\n onError: (e: any) => void,\n method: string,\n params: any[],\n ) => client.request(method, params, { onSuccess, onError }),\n )\n\n const rpcMethods: Promise<Set<string>> = request<\n { methods: Array<string> } | Array<string>\n >(\"rpc_methods\", []).then(\n (x) => new Set(Array.isArray(x) ? x : x.methods),\n () => new Set(),\n )\n\n const compatibilityEnhancer = getCompatibilityEnhancer(\n rpcMethods,\n client.request,\n )\n\n return {\n chainHead: getChainHead(\n compatibilityEnhancer(chainHead) as ClientRequest<any, any>,\n ),\n transaction: getTransaction(\n compatibilityEnhancer(transaction) as ClientRequest<string, any>,\n ),\n getChainSpecData: createGetChainSpec(\n compatibilityEnhancer(chainSpec) as ClientRequest<any, any>,\n ),\n destroy: () => {\n client.disconnect()\n },\n request,\n _request: client.request,\n }\n}\n","import { AbortError, noop } from \"@polkadot-api/utils\"\nimport { AbortablePromiseFn } from \"../common-types\"\n\nexport const abortablePromiseFn =\n <T, A extends Array<any>>(\n fn: (\n ...args: [...[res: (x: T) => void, rej: (e: any) => void], ...A]\n ) => () => void,\n ): AbortablePromiseFn<A, T> =>\n (...args): Promise<T> =>\n new Promise((res, rej) => {\n let cancel = noop\n\n const [actualArgs, abortSignal] =\n args[args.length - 1] instanceof AbortSignal\n ? ([args.slice(0, args.length - 1), args[args.length - 1]] as [\n A,\n AbortSignal,\n ])\n : ([args] as unknown as [A])\n\n const onAbort = () => {\n cancel()\n rej(new AbortError())\n }\n\n abortSignal?.addEventListener(\"abort\", onAbort, { once: true })\n\n const withCleanup =\n <T>(fn: (x: T) => void): ((x: T) => void) =>\n (x) => {\n cancel = noop\n abortSignal?.removeEventListener(\"abort\", onAbort)\n fn(x)\n }\n\n cancel = fn(...[withCleanup(res), withCleanup(rej), ...actualArgs])\n })\n","export interface DeferredPromise<T> {\n promise: Promise<T>\n res: (value: T) => void\n rej: (err: Error) => void\n}\n\nexport function deferred<T>(): DeferredPromise<T> {\n let res: (value: T) => void = () => {}\n let rej: (err: Error) => void = () => {}\n\n const promise = new Promise<T>((_res, _rej) => {\n res = _res\n rej = _rej\n })\n\n return { promise, res, rej }\n}\n","export const noop = (): void => {}\n","export interface Subscriber<T> {\n next: (data: T) => void\n error: (e: Error) => void\n}\n\nexport const getSubscriptionsManager = <T>() => {\n const subscriptions = new Map<string, Subscriber<T>>()\n\n return {\n has: subscriptions.has.bind(subscriptions),\n subscribe(id: string, subscriber: Subscriber<T>) {\n subscriptions.set(id, subscriber)\n },\n unsubscribe(id: string) {\n subscriptions.delete(id)\n },\n next(id: string, data: T) {\n subscriptions.get(id)?.next(data)\n },\n error(id: string, e: Error) {\n const subscriber = subscriptions.get(id)\n if (subscriber) {\n subscriptions.delete(id)\n subscriber.error(e)\n }\n },\n errorAll(e: Error) {\n const subscribers = [...subscriptions.values()]\n subscriptions.clear()\n subscribers.forEach((s) => {\n s.error(e)\n })\n },\n }\n}\n\nexport type SubscriptionManager<T> = ReturnType<\n typeof getSubscriptionsManager<T>\n>\n","export const chainHead = {\n body: \"\",\n call: \"\",\n continue: \"\",\n follow: \"\",\n header: \"\",\n stopOperation: \"\",\n storage: \"\",\n unfollow: \"\",\n unpin: \"\",\n followEvent: \"\",\n}\n\nexport const chainSpec = {\n chainName: \"\",\n genesisHash: \"\",\n properties: \"\",\n}\n\nexport const transaction = {\n broadcast: \"\",\n stop: \"\",\n}\n\nexport const transactionWatch = {\n submitAndWatch: \"\",\n unwatch: \"\",\n}\n\nObject.entries({ chainHead, chainSpec, transaction, transactionWatch }).forEach(\n ([fnGroupName, methods]) => {\n Object.keys(methods).forEach((methodName) => {\n ;(methods as any)[methodName] = `${fnGroupName}_v1_${methodName}`\n })\n },\n)\n","import { noop } from \"@/internal-utils\"\nimport { type ClientRequest } from \"../client\"\nimport { transaction } from \"@/methods\"\n\nexport const getTransaction =\n (request: ClientRequest<string, any>) =>\n (tx: string, error: (e: Error) => void) => {\n let cancel = request(transaction.broadcast, [tx], {\n onSuccess: (subscriptionId) => {\n cancel =\n subscriptionId === null\n ? noop\n : () => {\n request(transaction.stop, [subscriptionId])\n }\n\n if (subscriptionId === null) {\n error(new Error(\"Max # of broadcasted transactions has been reached\"))\n }\n },\n onError: error,\n })\n\n return () => {\n cancel()\n }\n }\n","export class StopError extends Error {\n constructor() {\n super(\"ChainHead stopped\")\n this.name = \"StopError\"\n }\n}\n\nexport class DisjointError extends Error {\n constructor() {\n super(\"ChainHead disjointed\")\n this.name = \"DisjointError\"\n }\n}\n\nexport class OperationLimitError extends Error {\n constructor() {\n super(\"ChainHead operations limit reached\")\n this.name = \"OperationLimitError\"\n }\n}\n\nexport class OperationError extends Error {\n constructor(error: string) {\n super(error)\n this.name = \"OperationError\"\n }\n}\n\nexport class OperationInaccessibleError extends Error {\n constructor() {\n super(\"ChainHead operation inaccessible\")\n this.name = \"OperationInaccessibleError\"\n }\n}\n","import { abortablePromiseFn, noop } from \"@/internal-utils\"\nimport {\n CommonOperationEventsRpc,\n OperationResponseRpc,\n} from \"./json-rpc-types\"\nimport {\n OperationError,\n OperationInaccessibleError,\n OperationLimitError,\n} from \"./errors\"\nimport { ClientInnerRequest } from \"./public-types\"\nimport { chainHead } from \"@/methods\"\n\nexport const createOperationPromise =\n <I extends { operationId: string; event: string }, O, A extends Array<any>>(\n operationName: () => string,\n factory: (\n ...args: A\n ) => [\n Array<any>,\n (e: I, res: (x: O) => void, rej: (e: Error) => void) => void,\n ],\n ) =>\n (\n request: ClientInnerRequest<\n OperationResponseRpc,\n I | CommonOperationEventsRpc\n >,\n ) =>\n abortablePromiseFn<O, A>((res, rej, ...args) => {\n const [requestArgs, logicCb] = factory(...args)\n let cancel = request(operationName(), requestArgs, {\n onSuccess: (response, followSubscription) => {\n if (response.result === \"limitReached\") {\n cancel = noop\n return rej(new OperationLimitError())\n }\n\n let isOperationGoing = true\n let done = noop\n const _res = (x: O) => {\n isOperationGoing = false\n done()\n res(x)\n }\n const _rej = (x: Error) => {\n isOperationGoing = false\n done()\n rej(x)\n }\n\n done = followSubscription(response.operationId, {\n next: (e) => {\n const _e = e as CommonOperationEventsRpc\n if (_e.event === \"operationError\") {\n rej(new OperationError(_e.error))\n } else if (_e.event === \"operationInaccessible\") {\n rej(new OperationInaccessibleError())\n } else {\n logicCb(e as I, _res, _rej)\n }\n },\n error: _rej,\n })\n\n cancel = () => {\n if (!isOperationGoing) return\n done()\n request(chainHead.stopOperation, [response.operationId])\n }\n },\n onError: rej,\n })\n\n return () => {\n cancel()\n }\n })\n","import { chainHead } from \"@/methods\"\nimport type { OperationBodyDoneRpc } from \"./json-rpc-types\"\nimport { createOperationPromise } from \"./operation-promise\"\n\nexport const createBodyFn = createOperationPromise(\n () => chainHead.body,\n (hash: string) => [\n [hash],\n (e: OperationBodyDoneRpc, res: (x: Array<string>) => void) => {\n res(e.value)\n },\n ],\n)\n","import { chainHead } from \"@/methods\"\nimport type { OperationCallDoneRpc } from \"./json-rpc-types\"\nimport { createOperationPromise } from \"./operation-promise\"\n\nexport const createCallFn = createOperationPromise(\n () => chainHead.call,\n (hash: string, fnName: string, callParameters: string) => [\n [hash, fnName, callParameters],\n (e: OperationCallDoneRpc, res: (output: string) => void) => {\n res(e.output)\n },\n ],\n)\n","import { chainHead } from \"@/methods\"\nimport { ClientInnerRequest } from \"./public-types\"\n\nexport const createHeaderFn =\n (request: ClientInnerRequest<string, unknown>) => (hash: string) =>\n new Promise<string>((res, rej) => {\n request(chainHead.header, [hash], {\n onSuccess: res,\n onError: rej,\n })\n })\n","import { noop } from \"@polkadot-api/utils\"\nimport {\n ClientInnerRequest,\n FollowResponse,\n OperationError,\n OperationInaccessibleError,\n OperationLimitError,\n} from \"..\"\nimport {\n CommonOperationEventsRpc,\n LimitReachedRpc,\n OperationStorageDoneRpc,\n OperationStorageItemsRpc,\n OperationWaitingForContinueRpc,\n OperationStorageStartedRpc,\n} from \"./json-rpc-types\"\nimport { chainHead } from \"@/methods\"\n\nexport const createStorageCb =\n (\n request: ClientInnerRequest<\n OperationStorageStartedRpc | LimitReachedRpc,\n | CommonOperationEventsRpc\n | OperationStorageItemsRpc\n | OperationStorageDoneRpc\n | OperationWaitingForContinueRpc\n >,\n ): FollowResponse[\"storageSubscription\"] =>\n (hash, inputs, childTrie, onItems, onError, onDone, onDiscardedItems) => {\n if (inputs.length === 0) {\n onDone()\n return noop\n }\n\n let cancel = request(chainHead.storage, [hash, inputs, childTrie], {\n onSuccess: (response, followSubscription) => {\n if (\n response.result === \"limitReached\" ||\n response.discardedItems === inputs.length\n )\n return onError(new OperationLimitError())\n\n const doneListening = followSubscription(response.operationId, {\n next: (event) => {\n switch (event.event) {\n case \"operationStorageItems\": {\n onItems(event.items)\n break\n }\n case \"operationStorageDone\": {\n _onDone()\n break\n }\n case \"operationError\": {\n _onError(new OperationError(event.error))\n break\n }\n case \"operationInaccessible\": {\n _onError(new OperationInaccessibleError())\n break\n }\n default:\n request(chainHead.continue, [event.operationId])\n }\n },\n error: onError,\n })\n\n cancel = () => {\n doneListening()\n request(chainHead.stopOperation, [response.operationId])\n }\n\n const _onError = (e: Error) => {\n cancel = noop\n doneListening()\n onError(e)\n }\n\n const _onDone = () => {\n cancel = noop\n doneListening()\n onDone()\n }\n\n onDiscardedItems(response.discardedItems)\n },\n onError,\n })\n\n return () => {\n cancel()\n }\n }\n","import { ClientInnerRequest, FollowResponse, OperationLimitError } from \"..\"\nimport type {\n CommonOperationEventsRpc,\n LimitReachedRpc,\n OperationStorageDoneRpc,\n OperationStorageItemsRpc,\n OperationWaitingForContinueRpc,\n OperationStorageStartedRpc,\n} from \"./json-rpc-types\"\nimport { abortablePromiseFn } from \"@/internal-utils\"\nimport { createStorageCb } from \"./storage-subscription\"\n\nexport const createStorageFn = (\n request: ClientInnerRequest<\n OperationStorageStartedRpc | LimitReachedRpc,\n | CommonOperationEventsRpc\n | OperationStorageItemsRpc\n | OperationStorageDoneRpc\n | OperationWaitingForContinueRpc\n >,\n): FollowResponse[\"storage\"] => {\n const cbStore = createStorageCb(request)\n return abortablePromiseFn((resolve, reject, hash, type, key, childTrie) => {\n const isDescendants = type.startsWith(\"descendants\")\n let result: any = isDescendants ? [] : null\n\n const onItems: Parameters<typeof cbStore>[3] = isDescendants\n ? (items) => {\n result.push(items)\n }\n : (items) => {\n result = items[0]?.[type as \"value\"]\n }\n\n const cancel = cbStore(\n hash,\n [{ key, type }],\n childTrie ?? null,\n onItems,\n reject,\n () => {\n try {\n resolve(isDescendants ? result.flat() : result)\n } catch (e) {\n reject(e)\n }\n },\n (nDiscarded) => {\n if (nDiscarded > 0) {\n cancel()\n reject(new OperationLimitError())\n }\n },\n )\n return cancel\n })\n}\n","import { chainHead } from \"@/methods\"\nimport { ClientInnerRequest } from \"./public-types\"\n\nexport const createUnpinFn =\n (request: ClientInnerRequest<null, unknown>) => (hashes: string[]) =>\n hashes.length > 0\n ? new Promise<void>((res, rej) => {\n request(chainHead.unpin, [hashes], {\n onSuccess() {\n res()\n },\n onError: rej,\n })\n })\n : Promise.resolve()\n","export class DestroyedError extends Error {\n constructor() {\n super(\"Client destroyed\")\n this.name = \"DestroyedError\"\n }\n}\n","import type { ClientRequest, FollowSubscriptionCb } from \"@/client\"\nimport type {\n FollowEventWithRuntimeRpc,\n FollowEventWithoutRuntimeRpc,\n OperationEventsRpc,\n StopRpc,\n} from \"./json-rpc-types\"\nimport type {\n ChainHead,\n ClientInnerRequest,\n FollowEventWithoutRuntime,\n FollowEventWithRuntime,\n FollowResponse,\n} from \"./public-types\"\nimport {\n Subscriber,\n getSubscriptionsManager,\n noop,\n deferred,\n} from \"@/internal-utils\"\nimport { createBodyFn } from \"./body\"\nimport { createCallFn } from \"./call\"\nimport { createHeaderFn } from \"./header\"\nimport { createStorageFn } from \"./storage\"\nimport { createUnpinFn } from \"./unpin\"\nimport { DisjointError, StopError } from \"./errors\"\nimport { createStorageCb } from \"./storage-subscription\"\nimport { DestroyedError } from \"@/client/DestroyedError\"\nimport { chainHead } from \"@/methods\"\n\ntype FollowEventRpc =\n | FollowEventWithRuntimeRpc\n | FollowEventWithoutRuntimeRpc\n | OperationEventsRpc\n | StopRpc\n\nfunction isOperationEvent(event: FollowEventRpc): event is OperationEventsRpc {\n return (event as OperationEventsRpc).operationId !== undefined\n}\n\nexport function getChainHead(\n request: ClientRequest<string, FollowEventRpc>,\n): ChainHead {\n return (\n withRuntime: boolean,\n onFollowEvent:\n | ((event: FollowEventWithoutRuntime) => void)\n | ((event: FollowEventWithRuntime) => void),\n onFollowError: (e: Error) => void,\n ): FollowResponse => {\n const subscriptions = getSubscriptionsManager<OperationEventsRpc>()\n\n const ongoingRequests = new Set<() => void>()\n const deferredFollow = deferred<string | Error>()\n let followSubscription: Promise<string | Error> | string | null =\n deferredFollow.promise\n\n const onAllFollowEventsNext = (event: FollowEventRpc) => {\n if (isOperationEvent(event)) {\n if (!subscriptions.has(event.operationId))\n console.warn(\"Uknown operationId on\", event)\n\n return subscriptions.next(event.operationId, event)\n }\n\n if (event.event !== \"stop\") {\n if (event.event === \"initialized\") {\n return onFollowEvent({\n type: event.event,\n finalizedBlockHashes:\n \"finalizedBlockHash\" in event\n ? [event.finalizedBlockHash]\n : event.finalizedBlockHashes,\n finalizedBlockRuntime: (event as any).finalizedBlockRuntime,\n })\n }\n\n const { event: type, ...rest } = event\n // This is kinda dangerous, but YOLO\n return onFollowEvent({ type, ...rest } as any)\n }\n\n onFollowError(new StopError())\n unfollow(false)\n }\n\n const onAllFollowEventsError = (error: Error) => {\n onFollowError(error)\n unfollow(!(error instanceof DestroyedError))\n }\n\n const onFollowRequestSuccess = (\n subscriptionId: string,\n follow: FollowSubscriptionCb<FollowEventRpc>,\n ) => {\n const done = follow(chainHead.followEvent, subscriptionId, {\n next: onAllFollowEventsNext,\n error: onAllFollowEventsError,\n })\n\n unfollow = (sendUnfollow = true) => {\n followSubscription = null\n unfollow = noop\n done()\n sendUnfollow && request(chainHead.unfollow, [subscriptionId])\n subscriptions.errorAll(new DisjointError())\n ongoingRequests.forEach((cb) => {\n cb()\n })\n ongoingRequests.clear()\n }\n\n followSubscription = subscriptionId\n deferredFollow.res(subscriptionId)\n }\n\n const onFollowRequestError = (e: Error) => {\n if (e instanceof DestroyedError) {\n unfollow(false)\n } else {\n onFollowError(e)\n }\n followSubscription = null\n deferredFollow.res(e)\n }\n\n let unfollow: (internal?: boolean) => void = request(\n chainHead.follow,\n [withRuntime],\n { onSuccess: onFollowRequestSuccess, onError: onFollowRequestError },\n )\n\n const fRequest: ClientInnerRequest<any, any> = (method, params, cb) => {\n const disjoint = () => {\n cb?.onError(new DisjointError())\n }\n\n if (followSubscription === null) {\n disjoint()\n return noop\n }\n\n const onSubscription = (subscription: string) => {\n if (!cb) return request(method, [subscription, ...params])\n\n ongoingRequests.add(disjoint)\n\n const onSubscribeOperation = (\n operationId: string,\n subscriber: Subscriber<any>,\n ) => {\n if (followSubscription === null) {\n subscriber.error(new DisjointError())\n return noop\n }\n\n subscriptions.subscribe(operationId, subscriber)\n\n return () => {\n subscriptions.unsubscribe(operationId)\n }\n }\n\n const cleanup = request(method, [subscription, ...params], {\n onSuccess: (response) => {\n ongoingRequests.delete(disjoint)\n cb.onSuccess(response, onSubscribeOperation)\n },\n onError: (e) => {\n ongoingRequests.delete(disjoint)\n cb.onError(e)\n },\n })\n\n return () => {\n ongoingRequests.delete(disjoint)\n cleanup()\n }\n }\n\n if (typeof followSubscription === \"string\")\n return onSubscription(followSubscription)\n\n let onCancel = noop\n followSubscription.then((x) => {\n if (x instanceof Error) return disjoint()\n if (followSubscription) onCancel = onSubscription(x)\n })\n\n return () => {\n onCancel()\n }\n }\n\n return {\n unfollow() {\n unfollow()\n followSubscription = null\n },\n body: createBodyFn(fRequest),\n call: createCallFn(fRequest),\n header: createHeaderFn(fRequest),\n storage: createStorageFn(fRequest),\n storageSubscription: createStorageCb(fRequest),\n unpin: createUnpinFn(fRequest),\n _request: fRequest,\n }\n }\n}\n","export interface IRpcError {\n code: number\n message: string\n data?: any\n}\n\nexport class RpcError extends Error implements IRpcError {\n code\n data\n constructor(e: IRpcError) {\n super(e.message)\n this.code = e.code\n this.data = e.data\n this.name = \"RpcError\"\n }\n}\n","import {\n JsonRpcConnection,\n JsonRpcProvider,\n} from \"@polkadot-api/json-rpc-provider\"\nimport { UnsubscribeFn } from \"../common-types\"\nimport { RpcError, IRpcError } from \"./RpcError\"\nimport { getSubscriptionsManager, Subscriber } from \"@/internal-utils\"\nimport { DestroyedError } from \"./DestroyedError\"\n\nexport type FollowSubscriptionCb<T> = (\n methodName: string,\n subscriptionId: string,\n cb: Subscriber<T>,\n) => UnsubscribeFn\n\nexport type ClientRequestCb<T, TT> = {\n onSuccess: (result: T, followSubscription: FollowSubscriptionCb<TT>) => void\n onError: (e: Error) => void\n}\n\nexport type ClientRequest<T, TT> = (\n method: string,\n params: Array<any>,\n cb?: ClientRequestCb<T, TT>,\n) => UnsubscribeFn\n\nexport interface Client {\n disconnect: () => void\n request: ClientRequest<any, any>\n}\n\nlet nextClientId = 1\nexport const createClient = (gProvider: JsonRpcProvider): Client => {\n let clientId = nextClientId++\n const responses = new Map<string, ClientRequestCb<any, any>>()\n const subscriptions = getSubscriptionsManager()\n\n let connection: JsonRpcConnection | null = null\n\n const send = (\n id: string,\n method: string,\n params: Array<boolean | string | number | null>,\n ) => {\n connection!.send(\n JSON.stringify({\n jsonrpc: \"2.0\",\n id,\n method,\n params,\n }),\n )\n }\n\n function onMessage(message: string): void {\n try {\n let id: string,\n result,\n error: IRpcError | undefined,\n params: { subscription: any; result: any; error?: IRpcError },\n subscription: string\n\n const parsed = JSON.parse(message)\n ;({ id, result, error, params } = parsed)\n\n if (id) {\n const cb = responses.get(id)\n if (!cb) return\n\n responses.delete(id)\n\n return error\n ? cb.onError(new RpcError(error))\n : cb.onSuccess(result, (methodName, opaqueId, subscriber) => {\n const subscriptionId = methodName + opaqueId\n subscriptions.subscribe(subscriptionId, subscriber)\n return () => {\n subscriptions.unsubscribe(subscriptionId)\n }\n })\n }\n\n // at this point, it means that it should be a notification\n ;({ subscription, result, error } = params)\n if (!subscription || (!error && !Object.hasOwn(params, \"result\"))) throw 0\n\n const subscriptionId = parsed.method + subscription\n\n if (error) {\n subscriptions.error(subscriptionId, new RpcError(error!))\n } else {\n subscriptions.next(subscriptionId, result)\n }\n } catch (e) {\n console.warn(\"Error parsing incomming message: \" + message)\n console.error(e)\n }\n }\n connection = gProvider(onMessage)\n\n const disconnect = () => {\n connection?.disconnect()\n connection = null\n subscriptions.errorAll(new DestroyedError())\n responses.forEach((r) => r.onError(new DestroyedError()))\n responses.clear()\n }\n\n let nextId = 1\n const request = <T, TT>(\n method: string,\n params: Array<any>,\n cb?: ClientRequestCb<T, TT>,\n ): UnsubscribeFn => {\n if (!connection) throw new Error(\"Not connected\")\n const id = `${clientId}-${nextId++}`\n\n if (cb) responses.set(id, cb)\n send(id, method, params)\n\n return (): void => {\n responses.delete(id)\n }\n }\n\n return {\n request,\n disconnect,\n }\n}\n","import { ClientRequest } from \"./client\"\nimport { abortablePromiseFn } from \"./internal-utils\"\nimport { chainSpec } from \"./methods\"\n\nexport interface ChainSpecData {\n name: string\n genesisHash: string\n properties: any\n}\n\nexport const createGetChainSpec = (clientRequest: ClientRequest<any, any>) => {\n const request = abortablePromiseFn(\n <T>(\n onSuccess: (value: T) => void,\n onError: (e: any) => void,\n method: string,\n params: any[],\n ) => clientRequest(method, params, { onSuccess, onError }),\n )\n let cachedPromise: null | Promise<ChainSpecData> = null\n\n return async (): Promise<ChainSpecData> => {\n if (cachedPromise) return cachedPromise\n return (cachedPromise = Promise.all([\n request<string>(chainSpec.chainName, []),\n request<string>(chainSpec.genesisHash, []),\n request<any>(chainSpec.properties, []),\n ]).then(([name, genesisHash, properties]) => ({\n name,\n genesisHash,\n properties,\n })))\n }\n}\n","import type { ClientRequest } from \"@/client\"\nimport { UnsubscribeFn } from \"./common-types\"\nimport { noop } from \"./internal-utils\"\n\nexport const getCompatibilityEnhancer =\n <T, E>(rpcMethodsP: Promise<Set<string>>, request: ClientRequest<T, E>) =>\n (methods: Record<string, string>): ClientRequest<T, E> => {\n let enhancedRequest: ClientRequest<T, E> | null = null\n\n return ((method, ...rest) => {\n if (enhancedRequest) return enhancedRequest(method, ...rest)\n\n let isRunning = true\n let cleanup: UnsubscribeFn = () => {\n isRunning = false\n }\n\n rpcMethodsP\n .then((rpcMethods) => {\n enhancedRequest = (method, ...iRest) => {\n if (rpcMethods.has(method)) return request(method, ...iRest)\n iRest[1]?.onError(new Error(`Unsupported method ${method}`))\n return noop\n }\n\n if (rpcMethods.has(method)) return\n\n const parts = method.split(\"_\")\n if (parts[1] !== \"v1\") return\n\n parts[1] = \"unstable\"\n method = parts.join(\"_\")\n\n if (rpcMethods.has(method))\n Object.entries(methods).forEach(([key, value]) => {\n methods[key] = value.replace(\"_v1_\", \"_unstable_\")\n })\n else if (parts[0] === \"transaction\") {\n // old versions of smoldot and Polkadot-SDK don't support transaction_xx_broadcast\n // some old versions have `transactions_unstable_submitAndWatch` while others have `transaction_xx_submitAndWatch`\n // if we find any of this options, then we will can use them as if they were broadast/stop\n let unwatch: string | undefined\n let version: string | undefined\n\n const txGroup = [\"transactionWatch\", \"transaction\"].find(\n (group) => {\n version = [\"v1\", \"unstable\"].find((v) =>\n rpcMethods.has((unwatch = `${group}_${v}_unwatch`)),\n )\n return !!version\n },\n )\n\n if (txGroup) {\n methods.broadcast = `${txGroup}_${version}_submitAndWatch`\n methods.stop = unwatch!\n }\n }\n })\n .then(() => {\n if (isRunning) cleanup = enhancedRequest!(method, ...rest)\n })\n\n return () => {\n cleanup()\n }\n }) as ClientRequest<T, E>\n }\n"],"mappings":"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","names":["createClient","fn","noop","noop","noop","import_utils","noop","subscriptionId","method","noop","createClient"]}
1
+ {"version":3,"sources":["../src/index.ts","../src/internal-utils/abortablePromiseFn.ts","../src/internal-utils/deferred-promise.ts","../src/internal-utils/noop.ts","../src/internal-utils/subscriptions-manager.ts","../src/methods.ts","../src/transaction/transaction.ts","../src/chainhead/errors.ts","../src/chainhead/operation-promise.ts","../src/chainhead/body.ts","../src/chainhead/call.ts","../src/chainhead/header.ts","../src/chainhead/storage-subscription.ts","../src/chainhead/storage.ts","../src/chainhead/unpin.ts","../src/client/DestroyedError.ts","../src/chainhead/chainhead.ts","../src/client/RpcError.ts","../src/client/createClient.ts","../src/chainspec.ts","../src/request-compatibility-enhancer.ts"],"sourcesContent":["import type { JsonRpcProvider } from \"@polkadot-api/json-rpc-provider\"\nimport { getTransaction } from \"./transaction/transaction\"\nimport { getChainHead } from \"./chainhead\"\nimport {\n ClientRequest,\n ClientRequestCb,\n createClient as createRawClient,\n} from \"./client\"\nimport type { ChainHead } from \"./chainhead\"\nimport type { Transaction } from \"./transaction\"\nimport { UnsubscribeFn } from \"./common-types\"\nimport { abortablePromiseFn } from \"./internal-utils\"\nimport { ChainSpecData, createGetChainSpec } from \"./chainspec\"\nimport { getCompatibilityEnhancer } from \"./request-compatibility-enhancer\"\nimport { chainHead, chainSpec, transaction } from \"./methods\"\n\nexport type * from \"./common-types\"\nexport type * from \"./client\"\nexport type * from \"./transaction\"\nexport type * from \"./chainhead\"\nexport type * from \"./chainspec\"\n\nexport { RpcError, DestroyedError } from \"./client\"\nexport {\n StopError,\n DisjointError,\n OperationError,\n OperationInaccessibleError,\n OperationLimitError,\n} from \"./chainhead\"\n\nexport interface SubstrateClient {\n chainHead: ChainHead\n transaction: Transaction\n destroy: UnsubscribeFn\n getChainSpecData: () => Promise<ChainSpecData>\n request: <T>(\n method: string,\n params: any[],\n abortSignal?: AbortSignal,\n ) => Promise<T>\n _request: <Reply, Notification>(\n method: string,\n params: any[],\n cb?: ClientRequestCb<Reply, Notification>,\n ) => UnsubscribeFn\n}\n\nexport const createClient = (provider: JsonRpcProvider): SubstrateClient => {\n const client = createRawClient(provider)\n\n const request = abortablePromiseFn(\n <T>(\n onSuccess: (value: T) => void,\n onError: (e: any) => void,\n method: string,\n params: any[],\n ) => client.request(method, params, { onSuccess, onError }),\n )\n\n const rpcMethods: Promise<Set<string>> = request<\n { methods: Array<string> } | Array<string>\n >(\"rpc_methods\", []).then(\n (x) => new Set(Array.isArray(x) ? x : x.methods),\n () => new Set(),\n )\n\n const compatibilityEnhancer = getCompatibilityEnhancer(\n rpcMethods,\n client.request,\n )\n\n return {\n chainHead: getChainHead(\n compatibilityEnhancer(chainHead) as ClientRequest<any, any>,\n ),\n transaction: getTransaction(\n compatibilityEnhancer(transaction) as ClientRequest<string, any>,\n ),\n getChainSpecData: createGetChainSpec(\n compatibilityEnhancer(chainSpec) as ClientRequest<any, any>,\n ),\n destroy: () => {\n client.disconnect()\n },\n request,\n _request: client.request,\n }\n}\n","import { AbortError, noop } from \"@polkadot-api/utils\"\nimport { AbortablePromiseFn } from \"../common-types\"\n\nexport const abortablePromiseFn =\n <T, A extends Array<any>>(\n fn: (\n ...args: [...[res: (x: T) => void, rej: (e: any) => void], ...A]\n ) => () => void,\n ): AbortablePromiseFn<A, T> =>\n (...args): Promise<T> =>\n new Promise((res, rej) => {\n let cancel = noop\n\n const [actualArgs, abortSignal] =\n args[args.length - 1] instanceof AbortSignal\n ? ([args.slice(0, args.length - 1), args[args.length - 1]] as [\n A,\n AbortSignal,\n ])\n : ([args] as unknown as [A])\n\n const onAbort = () => {\n cancel()\n rej(new AbortError())\n }\n\n abortSignal?.addEventListener(\"abort\", onAbort, { once: true })\n\n const withCleanup =\n <T>(fn: (x: T) => void): ((x: T) => void) =>\n (x) => {\n cancel = noop\n abortSignal?.removeEventListener(\"abort\", onAbort)\n fn(x)\n }\n\n cancel = fn(...[withCleanup(res), withCleanup(rej), ...actualArgs])\n })\n","export interface DeferredPromise<T> {\n promise: Promise<T>\n res: (value: T) => void\n rej: (err: Error) => void\n}\n\nexport function deferred<T>(): DeferredPromise<T> {\n let res: (value: T) => void = () => {}\n let rej: (err: Error) => void = () => {}\n\n const promise = new Promise<T>((_res, _rej) => {\n res = _res\n rej = _rej\n })\n\n return { promise, res, rej }\n}\n","export const noop = (): void => {}\n","export interface Subscriber<T> {\n next: (data: T) => void\n error: (e: Error) => void\n}\n\nexport const getSubscriptionsManager = <T>() => {\n const subscriptions = new Map<string, Subscriber<T>>()\n\n return {\n has: subscriptions.has.bind(subscriptions),\n subscribe(id: string, subscriber: Subscriber<T>) {\n subscriptions.set(id, subscriber)\n },\n unsubscribe(id: string) {\n subscriptions.delete(id)\n },\n next(id: string, data: T) {\n subscriptions.get(id)?.next(data)\n },\n error(id: string, e: Error) {\n const subscriber = subscriptions.get(id)\n if (subscriber) {\n subscriptions.delete(id)\n subscriber.error(e)\n }\n },\n errorAll(e: Error) {\n const subscribers = [...subscriptions.values()]\n subscriptions.clear()\n subscribers.forEach((s) => {\n s.error(e)\n })\n },\n }\n}\n\nexport type SubscriptionManager<T> = ReturnType<\n typeof getSubscriptionsManager<T>\n>\n","export const chainHead = {\n body: \"\",\n call: \"\",\n continue: \"\",\n follow: \"\",\n header: \"\",\n stopOperation: \"\",\n storage: \"\",\n unfollow: \"\",\n unpin: \"\",\n followEvent: \"\",\n}\n\nexport const chainSpec = {\n chainName: \"\",\n genesisHash: \"\",\n properties: \"\",\n}\n\nexport const transaction = {\n broadcast: \"\",\n stop: \"\",\n}\n\nexport const transactionWatch = {\n submitAndWatch: \"\",\n unwatch: \"\",\n}\n\nObject.entries({ chainHead, chainSpec, transaction, transactionWatch }).forEach(\n ([fnGroupName, methods]) => {\n Object.keys(methods).forEach((methodName) => {\n ;(methods as any)[methodName] = `${fnGroupName}_v1_${methodName}`\n })\n },\n)\n","import { noop } from \"@/internal-utils\"\nimport { type ClientRequest } from \"../client\"\nimport { transaction } from \"@/methods\"\n\nexport const getTransaction =\n (request: ClientRequest<string, any>) =>\n (tx: string, error: (e: Error) => void) => {\n let cancel = request(transaction.broadcast, [tx], {\n onSuccess: (subscriptionId) => {\n cancel =\n subscriptionId === null\n ? noop\n : () => {\n request(transaction.stop, [subscriptionId])\n }\n\n if (subscriptionId === null) {\n error(new Error(\"Max # of broadcasted transactions has been reached\"))\n }\n },\n onError: error,\n })\n\n return () => {\n cancel()\n }\n }\n","export class StopError extends Error {\n constructor() {\n super(\"ChainHead stopped\")\n this.name = \"StopError\"\n }\n}\n\nexport class DisjointError extends Error {\n constructor() {\n super(\"ChainHead disjointed\")\n this.name = \"DisjointError\"\n }\n}\n\nexport class OperationLimitError extends Error {\n constructor() {\n super(\"ChainHead operations limit reached\")\n this.name = \"OperationLimitError\"\n }\n}\n\nexport class OperationError extends Error {\n constructor(error: string) {\n super(error)\n this.name = \"OperationError\"\n }\n}\n\nexport class OperationInaccessibleError extends Error {\n constructor() {\n super(\"ChainHead operation inaccessible\")\n this.name = \"OperationInaccessibleError\"\n }\n}\n","import { abortablePromiseFn, noop } from \"@/internal-utils\"\nimport {\n CommonOperationEventsRpc,\n OperationResponseRpc,\n} from \"./json-rpc-types\"\nimport {\n OperationError,\n OperationInaccessibleError,\n OperationLimitError,\n} from \"./errors\"\nimport { ClientInnerRequest } from \"./public-types\"\nimport { chainHead } from \"@/methods\"\n\nexport const createOperationPromise =\n <I extends { operationId: string; event: string }, O, A extends Array<any>>(\n operationName: string,\n factory: (\n ...args: A\n ) => [\n Array<any>,\n (e: I, res: (x: O) => void, rej: (e: Error) => void) => void,\n ],\n ) =>\n (\n request: ClientInnerRequest<\n OperationResponseRpc,\n I | CommonOperationEventsRpc\n >,\n ) =>\n abortablePromiseFn<O, A>((res, rej, ...args) => {\n let isRunning = true\n let cancel = () => {\n isRunning = false\n }\n\n const [requestArgs, logicCb] = factory(...args)\n request(operationName, requestArgs, {\n onSuccess: (response, followSubscription) => {\n if (response.result === \"limitReached\")\n return rej(new OperationLimitError())\n\n const { operationId } = response\n const stopOperation = () => {\n request(chainHead.stopOperation, [operationId])\n }\n\n if (!isRunning) return stopOperation()\n\n let done = noop\n const _res = (x: O) => {\n isRunning = false\n done()\n res(x)\n }\n const _rej = (x: Error) => {\n isRunning = false\n done()\n rej(x)\n }\n\n done = followSubscription(operationId, {\n next: (e) => {\n const _e = e as CommonOperationEventsRpc\n if (_e.event === \"operationError\")\n rej(new OperationError(_e.error))\n else if (_e.event === \"operationInaccessible\")\n rej(new OperationInaccessibleError())\n else logicCb(e as I, _res, _rej)\n },\n error: _rej,\n })\n\n cancel = () => {\n if (isRunning) {\n done()\n stopOperation()\n }\n }\n },\n onError: rej,\n })\n\n return () => {\n cancel()\n }\n })\n","import { chainHead } from \"@/methods\"\nimport type { OperationBodyDoneRpc } from \"./json-rpc-types\"\nimport { createOperationPromise } from \"./operation-promise\"\n\nexport const createBodyFn = createOperationPromise(\n chainHead.body,\n (hash: string) => [\n [hash],\n (e: OperationBodyDoneRpc, res: (x: Array<string>) => void) => {\n res(e.value)\n },\n ],\n)\n","import { chainHead } from \"@/methods\"\nimport type { OperationCallDoneRpc } from \"./json-rpc-types\"\nimport { createOperationPromise } from \"./operation-promise\"\n\nexport const createCallFn = createOperationPromise(\n chainHead.call,\n (hash: string, fnName: string, callParameters: string) => [\n [hash, fnName, callParameters],\n (e: OperationCallDoneRpc, res: (output: string) => void) => {\n res(e.output)\n },\n ],\n)\n","import { chainHead } from \"@/methods\"\nimport { ClientInnerRequest } from \"./public-types\"\n\nexport const createHeaderFn =\n (request: ClientInnerRequest<string, unknown>) => (hash: string) =>\n new Promise<string>((res, rej) => {\n request(chainHead.header, [hash], {\n onSuccess: res,\n onError: rej,\n })\n })\n","import { noop } from \"@polkadot-api/utils\"\nimport {\n ClientInnerRequest,\n FollowResponse,\n OperationError,\n OperationInaccessibleError,\n OperationLimitError,\n} from \"..\"\nimport {\n CommonOperationEventsRpc,\n LimitReachedRpc,\n OperationStorageDoneRpc,\n OperationStorageItemsRpc,\n OperationWaitingForContinueRpc,\n OperationStorageStartedRpc,\n} from \"./json-rpc-types\"\nimport { chainHead } from \"@/methods\"\n\nexport const createStorageCb =\n (\n request: ClientInnerRequest<\n OperationStorageStartedRpc | LimitReachedRpc,\n | CommonOperationEventsRpc\n | OperationStorageItemsRpc\n | OperationStorageDoneRpc\n | OperationWaitingForContinueRpc\n >,\n ): FollowResponse[\"storageSubscription\"] =>\n (hash, inputs, childTrie, onItems, onError, onDone, onDiscardedItems) => {\n if (inputs.length === 0) {\n onDone()\n return noop\n }\n\n let isRunning = true\n let cancel = () => {\n isRunning = false\n }\n\n request(chainHead.storage, [hash, inputs, childTrie], {\n onSuccess: (response, followSubscription) => {\n if (\n response.result === \"limitReached\" ||\n response.discardedItems === inputs.length\n )\n return onError(new OperationLimitError())\n\n const { operationId } = response\n const stopOperation = () => {\n request(chainHead.stopOperation, [operationId])\n }\n\n if (!isRunning) return stopOperation()\n\n const doneListening = followSubscription(response.operationId, {\n next: (event) => {\n switch (event.event) {\n case \"operationStorageItems\": {\n onItems(event.items)\n break\n }\n case \"operationStorageDone\": {\n _onDone()\n break\n }\n case \"operationError\": {\n _onError(new OperationError(event.error))\n break\n }\n case \"operationInaccessible\": {\n _onError(new OperationInaccessibleError())\n break\n }\n default:\n request(chainHead.continue, [event.operationId])\n }\n },\n error: onError,\n })\n\n cancel = () => {\n doneListening()\n request(chainHead.stopOperation, [response.operationId])\n }\n\n const _onError = (e: Error) => {\n cancel = noop\n doneListening()\n onError(e)\n }\n\n const _onDone = () => {\n cancel = noop\n doneListening()\n onDone()\n }\n\n onDiscardedItems(response.discardedItems)\n },\n onError,\n })\n\n return () => {\n cancel()\n }\n }\n","import { ClientInnerRequest, FollowResponse, OperationLimitError } from \"..\"\nimport type {\n CommonOperationEventsRpc,\n LimitReachedRpc,\n OperationStorageDoneRpc,\n OperationStorageItemsRpc,\n OperationWaitingForContinueRpc,\n OperationStorageStartedRpc,\n} from \"./json-rpc-types\"\nimport { abortablePromiseFn } from \"@/internal-utils\"\nimport { createStorageCb } from \"./storage-subscription\"\n\nexport const createStorageFn = (\n request: ClientInnerRequest<\n OperationStorageStartedRpc | LimitReachedRpc,\n | CommonOperationEventsRpc\n | OperationStorageItemsRpc\n | OperationStorageDoneRpc\n | OperationWaitingForContinueRpc\n >,\n): FollowResponse[\"storage\"] => {\n const cbStore = createStorageCb(request)\n return abortablePromiseFn((resolve, reject, hash, type, key, childTrie) => {\n const isDescendants = type.startsWith(\"descendants\")\n let result: any = isDescendants ? [] : null\n\n const onItems: Parameters<typeof cbStore>[3] = isDescendants\n ? (items) => {\n result.push(items)\n }\n : (items) => {\n result = items[0]?.[type as \"value\"]\n }\n\n const cancel = cbStore(\n hash,\n [{ key, type }],\n childTrie ?? null,\n onItems,\n reject,\n () => {\n try {\n resolve(isDescendants ? result.flat() : result)\n } catch (e) {\n reject(e)\n }\n },\n (nDiscarded) => {\n if (nDiscarded > 0) {\n cancel()\n reject(new OperationLimitError())\n }\n },\n )\n return cancel\n })\n}\n","import { chainHead } from \"@/methods\"\nimport { ClientInnerRequest } from \"./public-types\"\n\nexport const createUnpinFn =\n (request: ClientInnerRequest<null, unknown>) => (hashes: string[]) =>\n hashes.length > 0\n ? new Promise<void>((res, rej) => {\n request(chainHead.unpin, [hashes], {\n onSuccess() {\n res()\n },\n onError: rej,\n })\n })\n : Promise.resolve()\n","export class DestroyedError extends Error {\n constructor() {\n super(\"Client destroyed\")\n this.name = \"DestroyedError\"\n }\n}\n","import type { ClientRequest, FollowSubscriptionCb } from \"@/client\"\nimport type {\n FollowEventWithRuntimeRpc,\n FollowEventWithoutRuntimeRpc,\n OperationEventsRpc,\n StopRpc,\n} from \"./json-rpc-types\"\nimport type {\n ChainHead,\n ClientInnerRequest,\n FollowEventWithoutRuntime,\n FollowEventWithRuntime,\n FollowResponse,\n} from \"./public-types\"\nimport {\n Subscriber,\n getSubscriptionsManager,\n noop,\n deferred,\n} from \"@/internal-utils\"\nimport { createBodyFn } from \"./body\"\nimport { createCallFn } from \"./call\"\nimport { createHeaderFn } from \"./header\"\nimport { createStorageFn } from \"./storage\"\nimport { createUnpinFn } from \"./unpin\"\nimport { DisjointError, StopError } from \"./errors\"\nimport { createStorageCb } from \"./storage-subscription\"\nimport { DestroyedError } from \"@/client/DestroyedError\"\nimport { chainHead } from \"@/methods\"\n\ntype FollowEventRpc =\n | FollowEventWithRuntimeRpc\n | FollowEventWithoutRuntimeRpc\n | OperationEventsRpc\n | StopRpc\n\nfunction isOperationEvent(event: FollowEventRpc): event is OperationEventsRpc {\n return (event as OperationEventsRpc).operationId !== undefined\n}\n\nexport function getChainHead(\n request: ClientRequest<string, FollowEventRpc>,\n): ChainHead {\n return (\n withRuntime: boolean,\n onFollowEvent:\n | ((event: FollowEventWithoutRuntime) => void)\n | ((event: FollowEventWithRuntime) => void),\n onFollowError: (e: Error) => void,\n ): FollowResponse => {\n const subscriptions = getSubscriptionsManager<OperationEventsRpc>()\n\n const ongoingRequests = new Set<() => void>()\n const deferredFollow = deferred<string | Error>()\n let followSubscription: Promise<string | Error> | string | null =\n deferredFollow.promise\n\n const onAllFollowEventsNext = (event: FollowEventRpc) => {\n if (isOperationEvent(event)) {\n if (!subscriptions.has(event.operationId))\n console.warn(\"Uknown operationId on\", event)\n\n return subscriptions.next(event.operationId, event)\n }\n\n if (event.event !== \"stop\") {\n if (event.event === \"initialized\") {\n return onFollowEvent({\n type: event.event,\n finalizedBlockHashes:\n \"finalizedBlockHash\" in event\n ? [event.finalizedBlockHash]\n : event.finalizedBlockHashes,\n finalizedBlockRuntime: (event as any).finalizedBlockRuntime,\n })\n }\n\n const { event: type, ...rest } = event\n // This is kinda dangerous, but YOLO\n return onFollowEvent({ type, ...rest } as any)\n }\n\n onFollowError(new StopError())\n unfollow(false)\n }\n\n const onAllFollowEventsError = (error: Error) => {\n onFollowError(error)\n unfollow(!(error instanceof DestroyedError))\n }\n\n const onFollowRequestSuccess = (\n subscriptionId: string,\n follow: FollowSubscriptionCb<FollowEventRpc>,\n ) => {\n const done = follow(subscriptionId, {\n next: onAllFollowEventsNext,\n error: onAllFollowEventsError,\n })\n\n unfollow = (sendUnfollow = true) => {\n followSubscription = null\n unfollow = noop\n done()\n sendUnfollow && request(chainHead.unfollow, [subscriptionId])\n subscriptions.errorAll(new DisjointError())\n ongoingRequests.forEach((cb) => {\n cb()\n })\n ongoingRequests.clear()\n }\n\n followSubscription = subscriptionId\n deferredFollow.res(subscriptionId)\n }\n\n const onFollowRequestError = (e: Error) => {\n if (e instanceof DestroyedError) {\n unfollow(false)\n } else {\n onFollowError(e)\n }\n followSubscription = null\n deferredFollow.res(e)\n }\n\n let unfollow: (internal?: boolean) => void = request(\n chainHead.follow,\n [withRuntime],\n { onSuccess: onFollowRequestSuccess, onError: onFollowRequestError },\n )\n\n const fRequest: ClientInnerRequest<any, any> = (method, params, cb) => {\n const disjoint = () => {\n cb?.onError(new DisjointError())\n }\n\n if (followSubscription === null) {\n disjoint()\n return noop\n }\n\n const onSubscription = (subscription: string) => {\n if (!cb) return request(method, [subscription, ...params])\n\n ongoingRequests.add(disjoint)\n\n const onSubscribeOperation = (\n operationId: string,\n subscriber: Subscriber<any>,\n ) => {\n if (followSubscription === null) {\n subscriber.error(new DisjointError())\n return noop\n }\n\n subscriptions.subscribe(operationId, subscriber)\n\n return () => {\n subscriptions.unsubscribe(operationId)\n }\n }\n\n const cleanup = request(method, [subscription, ...params], {\n onSuccess: (response) => {\n ongoingRequests.delete(disjoint)\n cb.onSuccess(response, onSubscribeOperation)\n },\n onError: (e) => {\n ongoingRequests.delete(disjoint)\n cb.onError(e)\n },\n })\n\n return () => {\n ongoingRequests.delete(disjoint)\n cleanup()\n }\n }\n\n if (typeof followSubscription === \"string\")\n return onSubscription(followSubscription)\n\n let onCancel = noop\n followSubscription.then((x) => {\n if (x instanceof Error) return disjoint()\n if (followSubscription) onCancel = onSubscription(x)\n })\n\n return () => {\n onCancel()\n }\n }\n\n return {\n unfollow() {\n unfollow()\n followSubscription = null\n },\n body: createBodyFn(fRequest),\n call: createCallFn(fRequest),\n header: createHeaderFn(fRequest),\n storage: createStorageFn(fRequest),\n storageSubscription: createStorageCb(fRequest),\n unpin: createUnpinFn(fRequest),\n _request: fRequest,\n }\n }\n}\n","export interface IRpcError {\n code: number\n message: string\n data?: any\n}\n\nexport class RpcError extends Error implements IRpcError {\n code\n data\n constructor(e: IRpcError) {\n super(e.message)\n this.code = e.code\n this.data = e.data\n this.name = \"RpcError\"\n }\n}\n","import {\n JsonRpcConnection,\n JsonRpcProvider,\n} from \"@polkadot-api/json-rpc-provider\"\nimport { UnsubscribeFn } from \"../common-types\"\nimport { RpcError, IRpcError } from \"./RpcError\"\nimport { getSubscriptionsManager, Subscriber } from \"@/internal-utils\"\nimport { DestroyedError } from \"./DestroyedError\"\n\nexport type FollowSubscriptionCb<T> = (\n subscriptionId: string,\n cb: Subscriber<T>,\n) => UnsubscribeFn\n\nexport type ClientRequestCb<T, TT> = {\n onSuccess: (result: T, followSubscription: FollowSubscriptionCb<TT>) => void\n onError: (e: Error) => void\n}\n\nexport type ClientRequest<T, TT> = (\n method: string,\n params: Array<any>,\n cb?: ClientRequestCb<T, TT>,\n) => UnsubscribeFn\n\nexport interface Client {\n disconnect: () => void\n request: ClientRequest<any, any>\n}\n\nlet nextClientId = 1\nexport const createClient = (gProvider: JsonRpcProvider): Client => {\n let clientId = nextClientId++\n const responses = new Map<string, ClientRequestCb<any, any>>()\n const subscriptions = getSubscriptionsManager()\n\n let connection: JsonRpcConnection | null = null\n\n const send = (\n id: string,\n method: string,\n params: Array<boolean | string | number | null>,\n ) => {\n connection!.send(\n JSON.stringify({\n jsonrpc: \"2.0\",\n id,\n method,\n params,\n }),\n )\n }\n\n function onMessage(message: string): void {\n try {\n let id: string,\n result,\n error: IRpcError | undefined,\n params: { subscription: any; result: any; error?: IRpcError },\n subscription: string\n\n const parsed = JSON.parse(message)\n ;({ id, result, error, params } = parsed)\n\n if (id) {\n const cb = responses.get(id)\n if (!cb) return\n\n responses.delete(id)\n\n return error\n ? cb.onError(new RpcError(error))\n : cb.onSuccess(result, (opaqueId, subscriber) => {\n const subscriptionId = opaqueId\n subscriptions.subscribe(subscriptionId, subscriber)\n return () => {\n subscriptions.unsubscribe(subscriptionId)\n }\n })\n }\n\n // at this point, it means that it should be a notification\n ;({ subscription, result, error } = params)\n if (!subscription || (!error && !Object.hasOwn(params, \"result\"))) throw 0\n\n const subscriptionId = subscription\n\n if (error) {\n subscriptions.error(subscriptionId, new RpcError(error!))\n } else {\n subscriptions.next(subscriptionId, result)\n }\n } catch (e) {\n console.warn(\"Error parsing incomming message: \" + message)\n console.error(e)\n }\n }\n connection = gProvider(onMessage)\n\n const disconnect = () => {\n connection?.disconnect()\n connection = null\n subscriptions.errorAll(new DestroyedError())\n responses.forEach((r) => r.onError(new DestroyedError()))\n responses.clear()\n }\n\n let nextId = 1\n const request = <T, TT>(\n method: string,\n params: Array<any>,\n cb?: ClientRequestCb<T, TT>,\n ): UnsubscribeFn => {\n if (!connection) throw new Error(\"Not connected\")\n const id = `${clientId}-${nextId++}`\n\n if (cb) responses.set(id, cb)\n send(id, method, params)\n\n return (): void => {\n responses.delete(id)\n }\n }\n\n return {\n request,\n disconnect,\n }\n}\n","import { ClientRequest } from \"./client\"\nimport { abortablePromiseFn } from \"./internal-utils\"\nimport { chainSpec } from \"./methods\"\n\nexport interface ChainSpecData {\n name: string\n genesisHash: string\n properties: any\n}\n\nexport const createGetChainSpec = (clientRequest: ClientRequest<any, any>) => {\n const request = abortablePromiseFn(\n <T>(\n onSuccess: (value: T) => void,\n onError: (e: any) => void,\n method: string,\n params: any[],\n ) => clientRequest(method, params, { onSuccess, onError }),\n )\n let cachedPromise: null | Promise<ChainSpecData> = null\n\n return async (): Promise<ChainSpecData> => {\n if (cachedPromise) return cachedPromise\n return (cachedPromise = Promise.all([\n request<string>(chainSpec.chainName, []),\n request<string>(chainSpec.genesisHash, []),\n request<any>(chainSpec.properties, []),\n ]).then(([name, genesisHash, properties]) => ({\n name,\n genesisHash,\n properties,\n })))\n }\n}\n","import type { ClientRequest } from \"@/client\"\nimport { UnsubscribeFn } from \"./common-types\"\nimport { noop } from \"./internal-utils\"\n\nexport const getCompatibilityEnhancer =\n <T, E>(rpcMethodsP: Promise<Set<string>>, request: ClientRequest<T, E>) =>\n (methods: Record<string, string>): ClientRequest<T, E> => {\n let translations: Record<string, string> = {}\n let enhancedRequest: ClientRequest<T, E> | null = null\n\n return ((method, ...rest) => {\n if (enhancedRequest) return enhancedRequest(method, ...rest)\n\n let isRunning = true\n let cleanup: UnsubscribeFn = () => {\n isRunning = false\n }\n\n rpcMethodsP\n .then((rpcMethods) => {\n enhancedRequest = (method_, ...iRest) => {\n const method = translations[method_] ?? method_\n if (rpcMethods.has(method)) return request(method, ...iRest)\n iRest[1]?.onError(new Error(`Unsupported method ${method}`))\n return noop\n }\n\n if (rpcMethods.has(method)) return\n\n const parts = method.split(\"_\")\n if (parts[1] !== \"v1\") return\n\n parts[1] = \"unstable\"\n\n if (rpcMethods.has(parts.join(\"_\")))\n Object.values(methods).forEach((value) => {\n translations[value] = value.replace(\"_v1_\", \"_unstable_\")\n })\n else if (parts[0] === \"transaction\") {\n // old versions of smoldot and Polkadot-SDK don't support transaction_xx_broadcast\n // some old versions have `transactions_unstable_submitAndWatch` while others have `transaction_xx_submitAndWatch`\n // if we find any of this options, then we will can use them as if they were broadast/stop\n let unwatch: string | undefined\n let version: string | undefined\n\n const txGroup = [\"transactionWatch\", \"transaction\"].find(\n (group) => {\n version = [\"v1\", \"unstable\"].find((v) =>\n rpcMethods.has((unwatch = `${group}_${v}_unwatch`)),\n )\n return !!version\n },\n )\n\n if (txGroup) {\n translations[methods.broadcast] =\n `${txGroup}_${version}_submitAndWatch`\n translations[methods.stop] = unwatch!\n }\n }\n })\n .then(() => {\n if (isRunning) cleanup = enhancedRequest!(method, ...rest)\n })\n\n return () => {\n cleanup()\n }\n }) as ClientRequest<T, E>\n }\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,sBAAAA;AAAA;AAAA;;;ACAA,mBAAiC;AAG1B,IAAM,qBACX,CACE,OAIF,IAAI,SACF,IAAI,QAAQ,CAAC,KAAK,QAAQ;AACxB,MAAI,SAAS;AAEb,QAAM,CAAC,YAAY,WAAW,IAC5B,KAAK,KAAK,SAAS,CAAC,aAAa,cAC5B,CAAC,KAAK,MAAM,GAAG,KAAK,SAAS,CAAC,GAAG,KAAK,KAAK,SAAS,CAAC,CAAC,IAItD,CAAC,IAAI;AAEZ,QAAM,UAAU,MAAM;AACpB,WAAO;AACP,QAAI,IAAI,wBAAW,CAAC;AAAA,EACtB;AAEA,eAAa,iBAAiB,SAAS,SAAS,EAAE,MAAM,KAAK,CAAC;AAE9D,QAAM,cACJ,CAAIC,QACJ,CAAC,MAAM;AACL,aAAS;AACT,iBAAa,oBAAoB,SAAS,OAAO;AACjD,IAAAA,IAAG,CAAC;AAAA,EACN;AAEF,WAAS,GAAG,GAAG,CAAC,YAAY,GAAG,GAAG,YAAY,GAAG,GAAG,GAAG,UAAU,CAAC;AACpE,CAAC;;;AC/BE,SAAS,WAAkC;AAChD,MAAI,MAA0B,MAAM;AAAA,EAAC;AACrC,MAAI,MAA4B,MAAM;AAAA,EAAC;AAEvC,QAAM,UAAU,IAAI,QAAW,CAAC,MAAM,SAAS;AAC7C,UAAM;AACN,UAAM;AAAA,EACR,CAAC;AAED,SAAO,EAAE,SAAS,KAAK,IAAI;AAC7B;;;AChBO,IAAMC,QAAO,MAAY;AAAC;;;ACK1B,IAAM,0BAA0B,MAAS;AAC9C,QAAM,gBAAgB,oBAAI,IAA2B;AAErD,SAAO;AAAA,IACL,KAAK,cAAc,IAAI,KAAK,aAAa;AAAA,IACzC,UAAU,IAAY,YAA2B;AAC/C,oBAAc,IAAI,IAAI,UAAU;AAAA,IAClC;AAAA,IACA,YAAY,IAAY;AACtB,oBAAc,OAAO,EAAE;AAAA,IACzB;AAAA,IACA,KAAK,IAAY,MAAS;AACxB,oBAAc,IAAI,EAAE,GAAG,KAAK,IAAI;AAAA,IAClC;AAAA,IACA,MAAM,IAAY,GAAU;AAC1B,YAAM,aAAa,cAAc,IAAI,EAAE;AACvC,UAAI,YAAY;AACd,sBAAc,OAAO,EAAE;AACvB,mBAAW,MAAM,CAAC;AAAA,MACpB;AAAA,IACF;AAAA,IACA,SAAS,GAAU;AACjB,YAAM,cAAc,CAAC,GAAG,cAAc,OAAO,CAAC;AAC9C,oBAAc,MAAM;AACpB,kBAAY,QAAQ,CAAC,MAAM;AACzB,UAAE,MAAM,CAAC;AAAA,MACX,CAAC;AAAA,IACH;AAAA,EACF;AACF;;;AClCO,IAAM,YAAY;AAAA,EACvB,MAAM;AAAA,EACN,MAAM;AAAA,EACN,UAAU;AAAA,EACV,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,eAAe;AAAA,EACf,SAAS;AAAA,EACT,UAAU;AAAA,EACV,OAAO;AAAA,EACP,aAAa;AACf;AAEO,IAAM,YAAY;AAAA,EACvB,WAAW;AAAA,EACX,aAAa;AAAA,EACb,YAAY;AACd;AAEO,IAAM,cAAc;AAAA,EACzB,WAAW;AAAA,EACX,MAAM;AACR;AAEO,IAAM,mBAAmB;AAAA,EAC9B,gBAAgB;AAAA,EAChB,SAAS;AACX;AAEA,OAAO,QAAQ,EAAE,WAAW,WAAW,aAAa,iBAAiB,CAAC,EAAE;AAAA,EACtE,CAAC,CAAC,aAAa,OAAO,MAAM;AAC1B,WAAO,KAAK,OAAO,EAAE,QAAQ,CAAC,eAAe;AAC3C;AAAC,MAAC,QAAgB,UAAU,IAAI,GAAG,WAAW,OAAO,UAAU;AAAA,IACjE,CAAC;AAAA,EACH;AACF;;;AC/BO,IAAM,iBACX,CAAC,YACD,CAAC,IAAY,UAA8B;AACzC,MAAI,SAAS,QAAQ,YAAY,WAAW,CAAC,EAAE,GAAG;AAAA,IAChD,WAAW,CAAC,mBAAmB;AAC7B,eACE,mBAAmB,OACfC,QACA,MAAM;AACJ,gBAAQ,YAAY,MAAM,CAAC,cAAc,CAAC;AAAA,MAC5C;AAEN,UAAI,mBAAmB,MAAM;AAC3B,cAAM,IAAI,MAAM,oDAAoD,CAAC;AAAA,MACvE;AAAA,IACF;AAAA,IACA,SAAS;AAAA,EACX,CAAC;AAED,SAAO,MAAM;AACX,WAAO;AAAA,EACT;AACF;;;AC1BK,IAAM,YAAN,cAAwB,MAAM;AAAA,EACnC,cAAc;AACZ,UAAM,mBAAmB;AACzB,SAAK,OAAO;AAAA,EACd;AACF;AAEO,IAAM,gBAAN,cAA4B,MAAM;AAAA,EACvC,cAAc;AACZ,UAAM,sBAAsB;AAC5B,SAAK,OAAO;AAAA,EACd;AACF;AAEO,IAAM,sBAAN,cAAkC,MAAM;AAAA,EAC7C,cAAc;AACZ,UAAM,oCAAoC;AAC1C,SAAK,OAAO;AAAA,EACd;AACF;AAEO,IAAM,iBAAN,cAA6B,MAAM;AAAA,EACxC,YAAY,OAAe;AACzB,UAAM,KAAK;AACX,SAAK,OAAO;AAAA,EACd;AACF;AAEO,IAAM,6BAAN,cAAyC,MAAM;AAAA,EACpD,cAAc;AACZ,UAAM,kCAAkC;AACxC,SAAK,OAAO;AAAA,EACd;AACF;;;ACpBO,IAAM,yBACX,CACE,eACA,YAOF,CACE,YAKA,mBAAyB,CAAC,KAAK,QAAQ,SAAS;AAC9C,MAAI,YAAY;AAChB,MAAI,SAAS,MAAM;AACjB,gBAAY;AAAA,EACd;AAEA,QAAM,CAAC,aAAa,OAAO,IAAI,QAAQ,GAAG,IAAI;AAC9C,UAAQ,eAAe,aAAa;AAAA,IAClC,WAAW,CAAC,UAAU,uBAAuB;AAC3C,UAAI,SAAS,WAAW;AACtB,eAAO,IAAI,IAAI,oBAAoB,CAAC;AAEtC,YAAM,EAAE,YAAY,IAAI;AACxB,YAAM,gBAAgB,MAAM;AAC1B,gBAAQ,UAAU,eAAe,CAAC,WAAW,CAAC;AAAA,MAChD;AAEA,UAAI,CAAC;AAAW,eAAO,cAAc;AAErC,UAAI,OAAOC;AACX,YAAM,OAAO,CAAC,MAAS;AACrB,oBAAY;AACZ,aAAK;AACL,YAAI,CAAC;AAAA,MACP;AACA,YAAM,OAAO,CAAC,MAAa;AACzB,oBAAY;AACZ,aAAK;AACL,YAAI,CAAC;AAAA,MACP;AAEA,aAAO,mBAAmB,aAAa;AAAA,QACrC,MAAM,CAAC,MAAM;AACX,gBAAM,KAAK;AACX,cAAI,GAAG,UAAU;AACf,gBAAI,IAAI,eAAe,GAAG,KAAK,CAAC;AAAA,mBACzB,GAAG,UAAU;AACpB,gBAAI,IAAI,2BAA2B,CAAC;AAAA;AACjC,oBAAQ,GAAQ,MAAM,IAAI;AAAA,QACjC;AAAA,QACA,OAAO;AAAA,MACT,CAAC;AAED,eAAS,MAAM;AACb,YAAI,WAAW;AACb,eAAK;AACL,wBAAc;AAAA,QAChB;AAAA,MACF;AAAA,IACF;AAAA,IACA,SAAS;AAAA,EACX,CAAC;AAED,SAAO,MAAM;AACX,WAAO;AAAA,EACT;AACF,CAAC;;;ACjFE,IAAM,eAAe;AAAA,EAC1B,UAAU;AAAA,EACV,CAAC,SAAiB;AAAA,IAChB,CAAC,IAAI;AAAA,IACL,CAAC,GAAyB,QAAoC;AAC5D,UAAI,EAAE,KAAK;AAAA,IACb;AAAA,EACF;AACF;;;ACRO,IAAM,eAAe;AAAA,EAC1B,UAAU;AAAA,EACV,CAAC,MAAc,QAAgB,mBAA2B;AAAA,IACxD,CAAC,MAAM,QAAQ,cAAc;AAAA,IAC7B,CAAC,GAAyB,QAAkC;AAC1D,UAAI,EAAE,MAAM;AAAA,IACd;AAAA,EACF;AACF;;;ACTO,IAAM,iBACX,CAAC,YAAiD,CAAC,SACjD,IAAI,QAAgB,CAAC,KAAK,QAAQ;AAChC,UAAQ,UAAU,QAAQ,CAAC,IAAI,GAAG;AAAA,IAChC,WAAW;AAAA,IACX,SAAS;AAAA,EACX,CAAC;AACH,CAAC;;;ACVL,IAAAC,gBAAqB;AAkBd,IAAM,kBACX,CACE,YAQF,CAAC,MAAM,QAAQ,WAAW,SAAS,SAAS,QAAQ,qBAAqB;AACvE,MAAI,OAAO,WAAW,GAAG;AACvB,WAAO;AACP,WAAO;AAAA,EACT;AAEA,MAAI,YAAY;AAChB,MAAI,SAAS,MAAM;AACjB,gBAAY;AAAA,EACd;AAEA,UAAQ,UAAU,SAAS,CAAC,MAAM,QAAQ,SAAS,GAAG;AAAA,IACpD,WAAW,CAAC,UAAU,uBAAuB;AAC3C,UACE,SAAS,WAAW,kBACpB,SAAS,mBAAmB,OAAO;AAEnC,eAAO,QAAQ,IAAI,oBAAoB,CAAC;AAE1C,YAAM,EAAE,YAAY,IAAI;AACxB,YAAM,gBAAgB,MAAM;AAC1B,gBAAQ,UAAU,eAAe,CAAC,WAAW,CAAC;AAAA,MAChD;AAEA,UAAI,CAAC;AAAW,eAAO,cAAc;AAErC,YAAM,gBAAgB,mBAAmB,SAAS,aAAa;AAAA,QAC7D,MAAM,CAAC,UAAU;AACf,kBAAQ,MAAM,OAAO;AAAA,YACnB,KAAK,yBAAyB;AAC5B,sBAAQ,MAAM,KAAK;AACnB;AAAA,YACF;AAAA,YACA,KAAK,wBAAwB;AAC3B,sBAAQ;AACR;AAAA,YACF;AAAA,YACA,KAAK,kBAAkB;AACrB,uBAAS,IAAI,eAAe,MAAM,KAAK,CAAC;AACxC;AAAA,YACF;AAAA,YACA,KAAK,yBAAyB;AAC5B,uBAAS,IAAI,2BAA2B,CAAC;AACzC;AAAA,YACF;AAAA,YACA;AACE,sBAAQ,UAAU,UAAU,CAAC,MAAM,WAAW,CAAC;AAAA,UACnD;AAAA,QACF;AAAA,QACA,OAAO;AAAA,MACT,CAAC;AAED,eAAS,MAAM;AACb,sBAAc;AACd,gBAAQ,UAAU,eAAe,CAAC,SAAS,WAAW,CAAC;AAAA,MACzD;AAEA,YAAM,WAAW,CAAC,MAAa;AAC7B,iBAAS;AACT,sBAAc;AACd,gBAAQ,CAAC;AAAA,MACX;AAEA,YAAM,UAAU,MAAM;AACpB,iBAAS;AACT,sBAAc;AACd,eAAO;AAAA,MACT;AAEA,uBAAiB,SAAS,cAAc;AAAA,IAC1C;AAAA,IACA;AAAA,EACF,CAAC;AAED,SAAO,MAAM;AACX,WAAO;AAAA,EACT;AACF;;;AC7FK,IAAM,kBAAkB,CAC7B,YAO8B;AAC9B,QAAM,UAAU,gBAAgB,OAAO;AACvC,SAAO,mBAAmB,CAAC,SAAS,QAAQ,MAAM,MAAM,KAAK,cAAc;AACzE,UAAM,gBAAgB,KAAK,WAAW,aAAa;AACnD,QAAI,SAAc,gBAAgB,CAAC,IAAI;AAEvC,UAAM,UAAyC,gBAC3C,CAAC,UAAU;AACT,aAAO,KAAK,KAAK;AAAA,IACnB,IACA,CAAC,UAAU;AACT,eAAS,MAAM,CAAC,IAAI,IAAe;AAAA,IACrC;AAEJ,UAAM,SAAS;AAAA,MACb;AAAA,MACA,CAAC,EAAE,KAAK,KAAK,CAAC;AAAA,MACd,aAAa;AAAA,MACb;AAAA,MACA;AAAA,MACA,MAAM;AACJ,YAAI;AACF,kBAAQ,gBAAgB,OAAO,KAAK,IAAI,MAAM;AAAA,QAChD,SAAS,GAAG;AACV,iBAAO,CAAC;AAAA,QACV;AAAA,MACF;AAAA,MACA,CAAC,eAAe;AACd,YAAI,aAAa,GAAG;AAClB,iBAAO;AACP,iBAAO,IAAI,oBAAoB,CAAC;AAAA,QAClC;AAAA,MACF;AAAA,IACF;AACA,WAAO;AAAA,EACT,CAAC;AACH;;;ACrDO,IAAM,gBACX,CAAC,YAA+C,CAAC,WAC/C,OAAO,SAAS,IACZ,IAAI,QAAc,CAAC,KAAK,QAAQ;AAC9B,UAAQ,UAAU,OAAO,CAAC,MAAM,GAAG;AAAA,IACjC,YAAY;AACV,UAAI;AAAA,IACN;AAAA,IACA,SAAS;AAAA,EACX,CAAC;AACH,CAAC,IACD,QAAQ,QAAQ;;;ACdjB,IAAM,iBAAN,cAA6B,MAAM;AAAA,EACxC,cAAc;AACZ,UAAM,kBAAkB;AACxB,SAAK,OAAO;AAAA,EACd;AACF;;;AC+BA,SAAS,iBAAiB,OAAoD;AAC5E,SAAQ,MAA6B,gBAAgB;AACvD;AAEO,SAAS,aACd,SACW;AACX,SAAO,CACL,aACA,eAGA,kBACmB;AACnB,UAAM,gBAAgB,wBAA4C;AAElE,UAAM,kBAAkB,oBAAI,IAAgB;AAC5C,UAAM,iBAAiB,SAAyB;AAChD,QAAI,qBACF,eAAe;AAEjB,UAAM,wBAAwB,CAAC,UAA0B;AACvD,UAAI,iBAAiB,KAAK,GAAG;AAC3B,YAAI,CAAC,cAAc,IAAI,MAAM,WAAW;AACtC,kBAAQ,KAAK,yBAAyB,KAAK;AAE7C,eAAO,cAAc,KAAK,MAAM,aAAa,KAAK;AAAA,MACpD;AAEA,UAAI,MAAM,UAAU,QAAQ;AAC1B,YAAI,MAAM,UAAU,eAAe;AACjC,iBAAO,cAAc;AAAA,YACnB,MAAM,MAAM;AAAA,YACZ,sBACE,wBAAwB,QACpB,CAAC,MAAM,kBAAkB,IACzB,MAAM;AAAA,YACZ,uBAAwB,MAAc;AAAA,UACxC,CAAC;AAAA,QACH;AAEA,cAAM,EAAE,OAAO,MAAM,GAAG,KAAK,IAAI;AAEjC,eAAO,cAAc,EAAE,MAAM,GAAG,KAAK,CAAQ;AAAA,MAC/C;AAEA,oBAAc,IAAI,UAAU,CAAC;AAC7B,eAAS,KAAK;AAAA,IAChB;AAEA,UAAM,yBAAyB,CAAC,UAAiB;AAC/C,oBAAc,KAAK;AACnB,eAAS,EAAE,iBAAiB,eAAe;AAAA,IAC7C;AAEA,UAAM,yBAAyB,CAC7B,gBACA,WACG;AACH,YAAM,OAAO,OAAO,gBAAgB;AAAA,QAClC,MAAM;AAAA,QACN,OAAO;AAAA,MACT,CAAC;AAED,iBAAW,CAAC,eAAe,SAAS;AAClC,6BAAqB;AACrB,mBAAWC;AACX,aAAK;AACL,wBAAgB,QAAQ,UAAU,UAAU,CAAC,cAAc,CAAC;AAC5D,sBAAc,SAAS,IAAI,cAAc,CAAC;AAC1C,wBAAgB,QAAQ,CAAC,OAAO;AAC9B,aAAG;AAAA,QACL,CAAC;AACD,wBAAgB,MAAM;AAAA,MACxB;AAEA,2BAAqB;AACrB,qBAAe,IAAI,cAAc;AAAA,IACnC;AAEA,UAAM,uBAAuB,CAAC,MAAa;AACzC,UAAI,aAAa,gBAAgB;AAC/B,iBAAS,KAAK;AAAA,MAChB,OAAO;AACL,sBAAc,CAAC;AAAA,MACjB;AACA,2BAAqB;AACrB,qBAAe,IAAI,CAAC;AAAA,IACtB;AAEA,QAAI,WAAyC;AAAA,MAC3C,UAAU;AAAA,MACV,CAAC,WAAW;AAAA,MACZ,EAAE,WAAW,wBAAwB,SAAS,qBAAqB;AAAA,IACrE;AAEA,UAAM,WAAyC,CAAC,QAAQ,QAAQ,OAAO;AACrE,YAAM,WAAW,MAAM;AACrB,YAAI,QAAQ,IAAI,cAAc,CAAC;AAAA,MACjC;AAEA,UAAI,uBAAuB,MAAM;AAC/B,iBAAS;AACT,eAAOA;AAAA,MACT;AAEA,YAAM,iBAAiB,CAAC,iBAAyB;AAC/C,YAAI,CAAC;AAAI,iBAAO,QAAQ,QAAQ,CAAC,cAAc,GAAG,MAAM,CAAC;AAEzD,wBAAgB,IAAI,QAAQ;AAE5B,cAAM,uBAAuB,CAC3B,aACA,eACG;AACH,cAAI,uBAAuB,MAAM;AAC/B,uBAAW,MAAM,IAAI,cAAc,CAAC;AACpC,mBAAOA;AAAA,UACT;AAEA,wBAAc,UAAU,aAAa,UAAU;AAE/C,iBAAO,MAAM;AACX,0BAAc,YAAY,WAAW;AAAA,UACvC;AAAA,QACF;AAEA,cAAM,UAAU,QAAQ,QAAQ,CAAC,cAAc,GAAG,MAAM,GAAG;AAAA,UACzD,WAAW,CAAC,aAAa;AACvB,4BAAgB,OAAO,QAAQ;AAC/B,eAAG,UAAU,UAAU,oBAAoB;AAAA,UAC7C;AAAA,UACA,SAAS,CAAC,MAAM;AACd,4BAAgB,OAAO,QAAQ;AAC/B,eAAG,QAAQ,CAAC;AAAA,UACd;AAAA,QACF,CAAC;AAED,eAAO,MAAM;AACX,0BAAgB,OAAO,QAAQ;AAC/B,kBAAQ;AAAA,QACV;AAAA,MACF;AAEA,UAAI,OAAO,uBAAuB;AAChC,eAAO,eAAe,kBAAkB;AAE1C,UAAI,WAAWA;AACf,yBAAmB,KAAK,CAAC,MAAM;AAC7B,YAAI,aAAa;AAAO,iBAAO,SAAS;AACxC,YAAI;AAAoB,qBAAW,eAAe,CAAC;AAAA,MACrD,CAAC;AAED,aAAO,MAAM;AACX,iBAAS;AAAA,MACX;AAAA,IACF;AAEA,WAAO;AAAA,MACL,WAAW;AACT,iBAAS;AACT,6BAAqB;AAAA,MACvB;AAAA,MACA,MAAM,aAAa,QAAQ;AAAA,MAC3B,MAAM,aAAa,QAAQ;AAAA,MAC3B,QAAQ,eAAe,QAAQ;AAAA,MAC/B,SAAS,gBAAgB,QAAQ;AAAA,MACjC,qBAAqB,gBAAgB,QAAQ;AAAA,MAC7C,OAAO,cAAc,QAAQ;AAAA,MAC7B,UAAU;AAAA,IACZ;AAAA,EACF;AACF;;;AC1MO,IAAM,WAAN,cAAuB,MAA2B;AAAA,EAGvD,YAAY,GAAc;AACxB,UAAM,EAAE,OAAO;AAHjB;AACA;AAGE,SAAK,OAAO,EAAE;AACd,SAAK,OAAO,EAAE;AACd,SAAK,OAAO;AAAA,EACd;AACF;;;ACeA,IAAI,eAAe;AACZ,IAAM,eAAe,CAAC,cAAuC;AAClE,MAAI,WAAW;AACf,QAAM,YAAY,oBAAI,IAAuC;AAC7D,QAAM,gBAAgB,wBAAwB;AAE9C,MAAI,aAAuC;AAE3C,QAAM,OAAO,CACX,IACA,QACA,WACG;AACH,eAAY;AAAA,MACV,KAAK,UAAU;AAAA,QACb,SAAS;AAAA,QACT;AAAA,QACA;AAAA,QACA;AAAA,MACF,CAAC;AAAA,IACH;AAAA,EACF;AAEA,WAAS,UAAU,SAAuB;AACxC,QAAI;AACF,UAAI,IACF,QACA,OACA,QACA;AAEF,YAAM,SAAS,KAAK,MAAM,OAAO;AAChC,OAAC,EAAE,IAAI,QAAQ,OAAO,OAAO,IAAI;AAElC,UAAI,IAAI;AACN,cAAM,KAAK,UAAU,IAAI,EAAE;AAC3B,YAAI,CAAC;AAAI;AAET,kBAAU,OAAO,EAAE;AAEnB,eAAO,QACH,GAAG,QAAQ,IAAI,SAAS,KAAK,CAAC,IAC9B,GAAG,UAAU,QAAQ,CAAC,UAAU,eAAe;AAC7C,gBAAMC,kBAAiB;AACvB,wBAAc,UAAUA,iBAAgB,UAAU;AAClD,iBAAO,MAAM;AACX,0BAAc,YAAYA,eAAc;AAAA,UAC1C;AAAA,QACF,CAAC;AAAA,MACP;AAGA;AAAC,OAAC,EAAE,cAAc,QAAQ,MAAM,IAAI;AACpC,UAAI,CAAC,gBAAiB,CAAC,SAAS,CAAC,OAAO,OAAO,QAAQ,QAAQ;AAAI,cAAM;AAEzE,YAAM,iBAAiB;AAEvB,UAAI,OAAO;AACT,sBAAc,MAAM,gBAAgB,IAAI,SAAS,KAAM,CAAC;AAAA,MAC1D,OAAO;AACL,sBAAc,KAAK,gBAAgB,MAAM;AAAA,MAC3C;AAAA,IACF,SAAS,GAAG;AACV,cAAQ,KAAK,sCAAsC,OAAO;AAC1D,cAAQ,MAAM,CAAC;AAAA,IACjB;AAAA,EACF;AACA,eAAa,UAAU,SAAS;AAEhC,QAAM,aAAa,MAAM;AACvB,gBAAY,WAAW;AACvB,iBAAa;AACb,kBAAc,SAAS,IAAI,eAAe,CAAC;AAC3C,cAAU,QAAQ,CAAC,MAAM,EAAE,QAAQ,IAAI,eAAe,CAAC,CAAC;AACxD,cAAU,MAAM;AAAA,EAClB;AAEA,MAAI,SAAS;AACb,QAAM,UAAU,CACd,QACA,QACA,OACkB;AAClB,QAAI,CAAC;AAAY,YAAM,IAAI,MAAM,eAAe;AAChD,UAAM,KAAK,GAAG,QAAQ,IAAI,QAAQ;AAElC,QAAI;AAAI,gBAAU,IAAI,IAAI,EAAE;AAC5B,SAAK,IAAI,QAAQ,MAAM;AAEvB,WAAO,MAAY;AACjB,gBAAU,OAAO,EAAE;AAAA,IACrB;AAAA,EACF;AAEA,SAAO;AAAA,IACL;AAAA,IACA;AAAA,EACF;AACF;;;ACtHO,IAAM,qBAAqB,CAAC,kBAA2C;AAC5E,QAAM,UAAU;AAAA,IACd,CACE,WACA,SACA,QACA,WACG,cAAc,QAAQ,QAAQ,EAAE,WAAW,QAAQ,CAAC;AAAA,EAC3D;AACA,MAAI,gBAA+C;AAEnD,SAAO,YAAoC;AACzC,QAAI;AAAe,aAAO;AAC1B,WAAQ,gBAAgB,QAAQ,IAAI;AAAA,MAClC,QAAgB,UAAU,WAAW,CAAC,CAAC;AAAA,MACvC,QAAgB,UAAU,aAAa,CAAC,CAAC;AAAA,MACzC,QAAa,UAAU,YAAY,CAAC,CAAC;AAAA,IACvC,CAAC,EAAE,KAAK,CAAC,CAAC,MAAM,aAAa,UAAU,OAAO;AAAA,MAC5C;AAAA,MACA;AAAA,MACA;AAAA,IACF,EAAE;AAAA,EACJ;AACF;;;AC7BO,IAAM,2BACX,CAAO,aAAmC,YAC1C,CAAC,YAAyD;AACxD,MAAI,eAAuC,CAAC;AAC5C,MAAI,kBAA8C;AAElD,SAAQ,CAAC,WAAW,SAAS;AAC3B,QAAI;AAAiB,aAAO,gBAAgB,QAAQ,GAAG,IAAI;AAE3D,QAAI,YAAY;AAChB,QAAI,UAAyB,MAAM;AACjC,kBAAY;AAAA,IACd;AAEA,gBACG,KAAK,CAAC,eAAe;AACpB,wBAAkB,CAAC,YAAY,UAAU;AACvC,cAAMC,UAAS,aAAa,OAAO,KAAK;AACxC,YAAI,WAAW,IAAIA,OAAM;AAAG,iBAAO,QAAQA,SAAQ,GAAG,KAAK;AAC3D,cAAM,CAAC,GAAG,QAAQ,IAAI,MAAM,sBAAsBA,OAAM,EAAE,CAAC;AAC3D,eAAOC;AAAA,MACT;AAEA,UAAI,WAAW,IAAI,MAAM;AAAG;AAE5B,YAAM,QAAQ,OAAO,MAAM,GAAG;AAC9B,UAAI,MAAM,CAAC,MAAM;AAAM;AAEvB,YAAM,CAAC,IAAI;AAEX,UAAI,WAAW,IAAI,MAAM,KAAK,GAAG,CAAC;AAChC,eAAO,OAAO,OAAO,EAAE,QAAQ,CAAC,UAAU;AACxC,uBAAa,KAAK,IAAI,MAAM,QAAQ,QAAQ,YAAY;AAAA,QAC1D,CAAC;AAAA,eACM,MAAM,CAAC,MAAM,eAAe;AAInC,YAAI;AACJ,YAAI;AAEJ,cAAM,UAAU,CAAC,oBAAoB,aAAa,EAAE;AAAA,UAClD,CAAC,UAAU;AACT,sBAAU,CAAC,MAAM,UAAU,EAAE;AAAA,cAAK,CAAC,MACjC,WAAW,IAAK,UAAU,GAAG,KAAK,IAAI,CAAC,UAAW;AAAA,YACpD;AACA,mBAAO,CAAC,CAAC;AAAA,UACX;AAAA,QACF;AAEA,YAAI,SAAS;AACX,uBAAa,QAAQ,SAAS,IAC5B,GAAG,OAAO,IAAI,OAAO;AACvB,uBAAa,QAAQ,IAAI,IAAI;AAAA,QAC/B;AAAA,MACF;AAAA,IACF,CAAC,EACA,KAAK,MAAM;AACV,UAAI;AAAW,kBAAU,gBAAiB,QAAQ,GAAG,IAAI;AAAA,IAC3D,CAAC;AAEH,WAAO,MAAM;AACX,cAAQ;AAAA,IACV;AAAA,EACF;AACF;;;ApBrBK,IAAMC,gBAAe,CAAC,aAA+C;AAC1E,QAAM,SAAS,aAAgB,QAAQ;AAEvC,QAAM,UAAU;AAAA,IACd,CACE,WACA,SACA,QACA,WACG,OAAO,QAAQ,QAAQ,QAAQ,EAAE,WAAW,QAAQ,CAAC;AAAA,EAC5D;AAEA,QAAM,aAAmC,QAEvC,eAAe,CAAC,CAAC,EAAE;AAAA,IACnB,CAAC,MAAM,IAAI,IAAI,MAAM,QAAQ,CAAC,IAAI,IAAI,EAAE,OAAO;AAAA,IAC/C,MAAM,oBAAI,IAAI;AAAA,EAChB;AAEA,QAAM,wBAAwB;AAAA,IAC5B;AAAA,IACA,OAAO;AAAA,EACT;AAEA,SAAO;AAAA,IACL,WAAW;AAAA,MACT,sBAAsB,SAAS;AAAA,IACjC;AAAA,IACA,aAAa;AAAA,MACX,sBAAsB,WAAW;AAAA,IACnC;AAAA,IACA,kBAAkB;AAAA,MAChB,sBAAsB,SAAS;AAAA,IACjC;AAAA,IACA,SAAS,MAAM;AACb,aAAO,WAAW;AAAA,IACpB;AAAA,IACA;AAAA,IACA,UAAU,OAAO;AAAA,EACnB;AACF;","names":["createClient","fn","noop","noop","noop","import_utils","noop","subscriptionId","method","noop","createClient"]}
package/dist/index.mjs CHANGED
@@ -158,43 +158,49 @@ var OperationInaccessibleError = class extends Error {
158
158
 
159
159
  // src/chainhead/operation-promise.ts
160
160
  var createOperationPromise = (operationName, factory) => (request) => abortablePromiseFn((res, rej, ...args) => {
161
+ let isRunning = true;
162
+ let cancel = () => {
163
+ isRunning = false;
164
+ };
161
165
  const [requestArgs, logicCb] = factory(...args);
162
- let cancel = request(operationName(), requestArgs, {
166
+ request(operationName, requestArgs, {
163
167
  onSuccess: (response, followSubscription) => {
164
- if (response.result === "limitReached") {
165
- cancel = noop2;
168
+ if (response.result === "limitReached")
166
169
  return rej(new OperationLimitError());
167
- }
168
- let isOperationGoing = true;
170
+ const { operationId } = response;
171
+ const stopOperation = () => {
172
+ request(chainHead.stopOperation, [operationId]);
173
+ };
174
+ if (!isRunning)
175
+ return stopOperation();
169
176
  let done = noop2;
170
177
  const _res = (x) => {
171
- isOperationGoing = false;
178
+ isRunning = false;
172
179
  done();
173
180
  res(x);
174
181
  };
175
182
  const _rej = (x) => {
176
- isOperationGoing = false;
183
+ isRunning = false;
177
184
  done();
178
185
  rej(x);
179
186
  };
180
- done = followSubscription(response.operationId, {
187
+ done = followSubscription(operationId, {
181
188
  next: (e) => {
182
189
  const _e = e;
183
- if (_e.event === "operationError") {
190
+ if (_e.event === "operationError")
184
191
  rej(new OperationError(_e.error));
185
- } else if (_e.event === "operationInaccessible") {
192
+ else if (_e.event === "operationInaccessible")
186
193
  rej(new OperationInaccessibleError());
187
- } else {
194
+ else
188
195
  logicCb(e, _res, _rej);
189
- }
190
196
  },
191
197
  error: _rej
192
198
  });
193
199
  cancel = () => {
194
- if (!isOperationGoing)
195
- return;
196
- done();
197
- request(chainHead.stopOperation, [response.operationId]);
200
+ if (isRunning) {
201
+ done();
202
+ stopOperation();
203
+ }
198
204
  };
199
205
  },
200
206
  onError: rej
@@ -206,7 +212,7 @@ var createOperationPromise = (operationName, factory) => (request) => abortableP
206
212
 
207
213
  // src/chainhead/body.ts
208
214
  var createBodyFn = createOperationPromise(
209
- () => chainHead.body,
215
+ chainHead.body,
210
216
  (hash) => [
211
217
  [hash],
212
218
  (e, res) => {
@@ -217,7 +223,7 @@ var createBodyFn = createOperationPromise(
217
223
 
218
224
  // src/chainhead/call.ts
219
225
  var createCallFn = createOperationPromise(
220
- () => chainHead.call,
226
+ chainHead.call,
221
227
  (hash, fnName, callParameters) => [
222
228
  [hash, fnName, callParameters],
223
229
  (e, res) => {
@@ -241,10 +247,20 @@ var createStorageCb = (request) => (hash, inputs, childTrie, onItems, onError, o
241
247
  onDone();
242
248
  return noop3;
243
249
  }
244
- let cancel = request(chainHead.storage, [hash, inputs, childTrie], {
250
+ let isRunning = true;
251
+ let cancel = () => {
252
+ isRunning = false;
253
+ };
254
+ request(chainHead.storage, [hash, inputs, childTrie], {
245
255
  onSuccess: (response, followSubscription) => {
246
256
  if (response.result === "limitReached" || response.discardedItems === inputs.length)
247
257
  return onError(new OperationLimitError());
258
+ const { operationId } = response;
259
+ const stopOperation = () => {
260
+ request(chainHead.stopOperation, [operationId]);
261
+ };
262
+ if (!isRunning)
263
+ return stopOperation();
248
264
  const doneListening = followSubscription(response.operationId, {
249
265
  next: (event) => {
250
266
  switch (event.event) {
@@ -381,7 +397,7 @@ function getChainHead(request) {
381
397
  unfollow(!(error instanceof DestroyedError));
382
398
  };
383
399
  const onFollowRequestSuccess = (subscriptionId, follow) => {
384
- const done = follow(chainHead.followEvent, subscriptionId, {
400
+ const done = follow(subscriptionId, {
385
401
  next: onAllFollowEventsNext,
386
402
  error: onAllFollowEventsError
387
403
  });
@@ -518,8 +534,8 @@ var createClient = (gProvider) => {
518
534
  if (!cb)
519
535
  return;
520
536
  responses.delete(id);
521
- return error ? cb.onError(new RpcError(error)) : cb.onSuccess(result, (methodName, opaqueId, subscriber) => {
522
- const subscriptionId2 = methodName + opaqueId;
537
+ return error ? cb.onError(new RpcError(error)) : cb.onSuccess(result, (opaqueId, subscriber) => {
538
+ const subscriptionId2 = opaqueId;
523
539
  subscriptions.subscribe(subscriptionId2, subscriber);
524
540
  return () => {
525
541
  subscriptions.unsubscribe(subscriptionId2);
@@ -530,7 +546,7 @@ var createClient = (gProvider) => {
530
546
  ({ subscription, result, error } = params);
531
547
  if (!subscription || !error && !Object.hasOwn(params, "result"))
532
548
  throw 0;
533
- const subscriptionId = parsed.method + subscription;
549
+ const subscriptionId = subscription;
534
550
  if (error) {
535
551
  subscriptions.error(subscriptionId, new RpcError(error));
536
552
  } else {
@@ -590,6 +606,7 @@ var createGetChainSpec = (clientRequest) => {
590
606
 
591
607
  // src/request-compatibility-enhancer.ts
592
608
  var getCompatibilityEnhancer = (rpcMethodsP, request) => (methods) => {
609
+ let translations = {};
593
610
  let enhancedRequest = null;
594
611
  return (method, ...rest) => {
595
612
  if (enhancedRequest)
@@ -599,7 +616,8 @@ var getCompatibilityEnhancer = (rpcMethodsP, request) => (methods) => {
599
616
  isRunning = false;
600
617
  };
601
618
  rpcMethodsP.then((rpcMethods) => {
602
- enhancedRequest = (method2, ...iRest) => {
619
+ enhancedRequest = (method_, ...iRest) => {
620
+ const method2 = translations[method_] ?? method_;
603
621
  if (rpcMethods.has(method2))
604
622
  return request(method2, ...iRest);
605
623
  iRest[1]?.onError(new Error(`Unsupported method ${method2}`));
@@ -611,10 +629,9 @@ var getCompatibilityEnhancer = (rpcMethodsP, request) => (methods) => {
611
629
  if (parts[1] !== "v1")
612
630
  return;
613
631
  parts[1] = "unstable";
614
- method = parts.join("_");
615
- if (rpcMethods.has(method))
616
- Object.entries(methods).forEach(([key, value]) => {
617
- methods[key] = value.replace("_v1_", "_unstable_");
632
+ if (rpcMethods.has(parts.join("_")))
633
+ Object.values(methods).forEach((value) => {
634
+ translations[value] = value.replace("_v1_", "_unstable_");
618
635
  });
619
636
  else if (parts[0] === "transaction") {
620
637
  let unwatch;
@@ -628,8 +645,8 @@ var getCompatibilityEnhancer = (rpcMethodsP, request) => (methods) => {
628
645
  }
629
646
  );
630
647
  if (txGroup) {
631
- methods.broadcast = `${txGroup}_${version}_submitAndWatch`;
632
- methods.stop = unwatch;
648
+ translations[methods.broadcast] = `${txGroup}_${version}_submitAndWatch`;
649
+ translations[methods.stop] = unwatch;
633
650
  }
634
651
  }
635
652
  }).then(() => {
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/internal-utils/abortablePromiseFn.ts","../src/internal-utils/deferred-promise.ts","../src/internal-utils/noop.ts","../src/internal-utils/subscriptions-manager.ts","../src/methods.ts","../src/transaction/transaction.ts","../src/chainhead/errors.ts","../src/chainhead/operation-promise.ts","../src/chainhead/body.ts","../src/chainhead/call.ts","../src/chainhead/header.ts","../src/chainhead/storage-subscription.ts","../src/chainhead/storage.ts","../src/chainhead/unpin.ts","../src/client/DestroyedError.ts","../src/chainhead/chainhead.ts","../src/client/RpcError.ts","../src/client/createClient.ts","../src/chainspec.ts","../src/request-compatibility-enhancer.ts","../src/index.ts"],"sourcesContent":["import { AbortError, noop } from \"@polkadot-api/utils\"\nimport { AbortablePromiseFn } from \"../common-types\"\n\nexport const abortablePromiseFn =\n <T, A extends Array<any>>(\n fn: (\n ...args: [...[res: (x: T) => void, rej: (e: any) => void], ...A]\n ) => () => void,\n ): AbortablePromiseFn<A, T> =>\n (...args): Promise<T> =>\n new Promise((res, rej) => {\n let cancel = noop\n\n const [actualArgs, abortSignal] =\n args[args.length - 1] instanceof AbortSignal\n ? ([args.slice(0, args.length - 1), args[args.length - 1]] as [\n A,\n AbortSignal,\n ])\n : ([args] as unknown as [A])\n\n const onAbort = () => {\n cancel()\n rej(new AbortError())\n }\n\n abortSignal?.addEventListener(\"abort\", onAbort, { once: true })\n\n const withCleanup =\n <T>(fn: (x: T) => void): ((x: T) => void) =>\n (x) => {\n cancel = noop\n abortSignal?.removeEventListener(\"abort\", onAbort)\n fn(x)\n }\n\n cancel = fn(...[withCleanup(res), withCleanup(rej), ...actualArgs])\n })\n","export interface DeferredPromise<T> {\n promise: Promise<T>\n res: (value: T) => void\n rej: (err: Error) => void\n}\n\nexport function deferred<T>(): DeferredPromise<T> {\n let res: (value: T) => void = () => {}\n let rej: (err: Error) => void = () => {}\n\n const promise = new Promise<T>((_res, _rej) => {\n res = _res\n rej = _rej\n })\n\n return { promise, res, rej }\n}\n","export const noop = (): void => {}\n","export interface Subscriber<T> {\n next: (data: T) => void\n error: (e: Error) => void\n}\n\nexport const getSubscriptionsManager = <T>() => {\n const subscriptions = new Map<string, Subscriber<T>>()\n\n return {\n has: subscriptions.has.bind(subscriptions),\n subscribe(id: string, subscriber: Subscriber<T>) {\n subscriptions.set(id, subscriber)\n },\n unsubscribe(id: string) {\n subscriptions.delete(id)\n },\n next(id: string, data: T) {\n subscriptions.get(id)?.next(data)\n },\n error(id: string, e: Error) {\n const subscriber = subscriptions.get(id)\n if (subscriber) {\n subscriptions.delete(id)\n subscriber.error(e)\n }\n },\n errorAll(e: Error) {\n const subscribers = [...subscriptions.values()]\n subscriptions.clear()\n subscribers.forEach((s) => {\n s.error(e)\n })\n },\n }\n}\n\nexport type SubscriptionManager<T> = ReturnType<\n typeof getSubscriptionsManager<T>\n>\n","export const chainHead = {\n body: \"\",\n call: \"\",\n continue: \"\",\n follow: \"\",\n header: \"\",\n stopOperation: \"\",\n storage: \"\",\n unfollow: \"\",\n unpin: \"\",\n followEvent: \"\",\n}\n\nexport const chainSpec = {\n chainName: \"\",\n genesisHash: \"\",\n properties: \"\",\n}\n\nexport const transaction = {\n broadcast: \"\",\n stop: \"\",\n}\n\nexport const transactionWatch = {\n submitAndWatch: \"\",\n unwatch: \"\",\n}\n\nObject.entries({ chainHead, chainSpec, transaction, transactionWatch }).forEach(\n ([fnGroupName, methods]) => {\n Object.keys(methods).forEach((methodName) => {\n ;(methods as any)[methodName] = `${fnGroupName}_v1_${methodName}`\n })\n },\n)\n","import { noop } from \"@/internal-utils\"\nimport { type ClientRequest } from \"../client\"\nimport { transaction } from \"@/methods\"\n\nexport const getTransaction =\n (request: ClientRequest<string, any>) =>\n (tx: string, error: (e: Error) => void) => {\n let cancel = request(transaction.broadcast, [tx], {\n onSuccess: (subscriptionId) => {\n cancel =\n subscriptionId === null\n ? noop\n : () => {\n request(transaction.stop, [subscriptionId])\n }\n\n if (subscriptionId === null) {\n error(new Error(\"Max # of broadcasted transactions has been reached\"))\n }\n },\n onError: error,\n })\n\n return () => {\n cancel()\n }\n }\n","export class StopError extends Error {\n constructor() {\n super(\"ChainHead stopped\")\n this.name = \"StopError\"\n }\n}\n\nexport class DisjointError extends Error {\n constructor() {\n super(\"ChainHead disjointed\")\n this.name = \"DisjointError\"\n }\n}\n\nexport class OperationLimitError extends Error {\n constructor() {\n super(\"ChainHead operations limit reached\")\n this.name = \"OperationLimitError\"\n }\n}\n\nexport class OperationError extends Error {\n constructor(error: string) {\n super(error)\n this.name = \"OperationError\"\n }\n}\n\nexport class OperationInaccessibleError extends Error {\n constructor() {\n super(\"ChainHead operation inaccessible\")\n this.name = \"OperationInaccessibleError\"\n }\n}\n","import { abortablePromiseFn, noop } from \"@/internal-utils\"\nimport {\n CommonOperationEventsRpc,\n OperationResponseRpc,\n} from \"./json-rpc-types\"\nimport {\n OperationError,\n OperationInaccessibleError,\n OperationLimitError,\n} from \"./errors\"\nimport { ClientInnerRequest } from \"./public-types\"\nimport { chainHead } from \"@/methods\"\n\nexport const createOperationPromise =\n <I extends { operationId: string; event: string }, O, A extends Array<any>>(\n operationName: () => string,\n factory: (\n ...args: A\n ) => [\n Array<any>,\n (e: I, res: (x: O) => void, rej: (e: Error) => void) => void,\n ],\n ) =>\n (\n request: ClientInnerRequest<\n OperationResponseRpc,\n I | CommonOperationEventsRpc\n >,\n ) =>\n abortablePromiseFn<O, A>((res, rej, ...args) => {\n const [requestArgs, logicCb] = factory(...args)\n let cancel = request(operationName(), requestArgs, {\n onSuccess: (response, followSubscription) => {\n if (response.result === \"limitReached\") {\n cancel = noop\n return rej(new OperationLimitError())\n }\n\n let isOperationGoing = true\n let done = noop\n const _res = (x: O) => {\n isOperationGoing = false\n done()\n res(x)\n }\n const _rej = (x: Error) => {\n isOperationGoing = false\n done()\n rej(x)\n }\n\n done = followSubscription(response.operationId, {\n next: (e) => {\n const _e = e as CommonOperationEventsRpc\n if (_e.event === \"operationError\") {\n rej(new OperationError(_e.error))\n } else if (_e.event === \"operationInaccessible\") {\n rej(new OperationInaccessibleError())\n } else {\n logicCb(e as I, _res, _rej)\n }\n },\n error: _rej,\n })\n\n cancel = () => {\n if (!isOperationGoing) return\n done()\n request(chainHead.stopOperation, [response.operationId])\n }\n },\n onError: rej,\n })\n\n return () => {\n cancel()\n }\n })\n","import { chainHead } from \"@/methods\"\nimport type { OperationBodyDoneRpc } from \"./json-rpc-types\"\nimport { createOperationPromise } from \"./operation-promise\"\n\nexport const createBodyFn = createOperationPromise(\n () => chainHead.body,\n (hash: string) => [\n [hash],\n (e: OperationBodyDoneRpc, res: (x: Array<string>) => void) => {\n res(e.value)\n },\n ],\n)\n","import { chainHead } from \"@/methods\"\nimport type { OperationCallDoneRpc } from \"./json-rpc-types\"\nimport { createOperationPromise } from \"./operation-promise\"\n\nexport const createCallFn = createOperationPromise(\n () => chainHead.call,\n (hash: string, fnName: string, callParameters: string) => [\n [hash, fnName, callParameters],\n (e: OperationCallDoneRpc, res: (output: string) => void) => {\n res(e.output)\n },\n ],\n)\n","import { chainHead } from \"@/methods\"\nimport { ClientInnerRequest } from \"./public-types\"\n\nexport const createHeaderFn =\n (request: ClientInnerRequest<string, unknown>) => (hash: string) =>\n new Promise<string>((res, rej) => {\n request(chainHead.header, [hash], {\n onSuccess: res,\n onError: rej,\n })\n })\n","import { noop } from \"@polkadot-api/utils\"\nimport {\n ClientInnerRequest,\n FollowResponse,\n OperationError,\n OperationInaccessibleError,\n OperationLimitError,\n} from \"..\"\nimport {\n CommonOperationEventsRpc,\n LimitReachedRpc,\n OperationStorageDoneRpc,\n OperationStorageItemsRpc,\n OperationWaitingForContinueRpc,\n OperationStorageStartedRpc,\n} from \"./json-rpc-types\"\nimport { chainHead } from \"@/methods\"\n\nexport const createStorageCb =\n (\n request: ClientInnerRequest<\n OperationStorageStartedRpc | LimitReachedRpc,\n | CommonOperationEventsRpc\n | OperationStorageItemsRpc\n | OperationStorageDoneRpc\n | OperationWaitingForContinueRpc\n >,\n ): FollowResponse[\"storageSubscription\"] =>\n (hash, inputs, childTrie, onItems, onError, onDone, onDiscardedItems) => {\n if (inputs.length === 0) {\n onDone()\n return noop\n }\n\n let cancel = request(chainHead.storage, [hash, inputs, childTrie], {\n onSuccess: (response, followSubscription) => {\n if (\n response.result === \"limitReached\" ||\n response.discardedItems === inputs.length\n )\n return onError(new OperationLimitError())\n\n const doneListening = followSubscription(response.operationId, {\n next: (event) => {\n switch (event.event) {\n case \"operationStorageItems\": {\n onItems(event.items)\n break\n }\n case \"operationStorageDone\": {\n _onDone()\n break\n }\n case \"operationError\": {\n _onError(new OperationError(event.error))\n break\n }\n case \"operationInaccessible\": {\n _onError(new OperationInaccessibleError())\n break\n }\n default:\n request(chainHead.continue, [event.operationId])\n }\n },\n error: onError,\n })\n\n cancel = () => {\n doneListening()\n request(chainHead.stopOperation, [response.operationId])\n }\n\n const _onError = (e: Error) => {\n cancel = noop\n doneListening()\n onError(e)\n }\n\n const _onDone = () => {\n cancel = noop\n doneListening()\n onDone()\n }\n\n onDiscardedItems(response.discardedItems)\n },\n onError,\n })\n\n return () => {\n cancel()\n }\n }\n","import { ClientInnerRequest, FollowResponse, OperationLimitError } from \"..\"\nimport type {\n CommonOperationEventsRpc,\n LimitReachedRpc,\n OperationStorageDoneRpc,\n OperationStorageItemsRpc,\n OperationWaitingForContinueRpc,\n OperationStorageStartedRpc,\n} from \"./json-rpc-types\"\nimport { abortablePromiseFn } from \"@/internal-utils\"\nimport { createStorageCb } from \"./storage-subscription\"\n\nexport const createStorageFn = (\n request: ClientInnerRequest<\n OperationStorageStartedRpc | LimitReachedRpc,\n | CommonOperationEventsRpc\n | OperationStorageItemsRpc\n | OperationStorageDoneRpc\n | OperationWaitingForContinueRpc\n >,\n): FollowResponse[\"storage\"] => {\n const cbStore = createStorageCb(request)\n return abortablePromiseFn((resolve, reject, hash, type, key, childTrie) => {\n const isDescendants = type.startsWith(\"descendants\")\n let result: any = isDescendants ? [] : null\n\n const onItems: Parameters<typeof cbStore>[3] = isDescendants\n ? (items) => {\n result.push(items)\n }\n : (items) => {\n result = items[0]?.[type as \"value\"]\n }\n\n const cancel = cbStore(\n hash,\n [{ key, type }],\n childTrie ?? null,\n onItems,\n reject,\n () => {\n try {\n resolve(isDescendants ? result.flat() : result)\n } catch (e) {\n reject(e)\n }\n },\n (nDiscarded) => {\n if (nDiscarded > 0) {\n cancel()\n reject(new OperationLimitError())\n }\n },\n )\n return cancel\n })\n}\n","import { chainHead } from \"@/methods\"\nimport { ClientInnerRequest } from \"./public-types\"\n\nexport const createUnpinFn =\n (request: ClientInnerRequest<null, unknown>) => (hashes: string[]) =>\n hashes.length > 0\n ? new Promise<void>((res, rej) => {\n request(chainHead.unpin, [hashes], {\n onSuccess() {\n res()\n },\n onError: rej,\n })\n })\n : Promise.resolve()\n","export class DestroyedError extends Error {\n constructor() {\n super(\"Client destroyed\")\n this.name = \"DestroyedError\"\n }\n}\n","import type { ClientRequest, FollowSubscriptionCb } from \"@/client\"\nimport type {\n FollowEventWithRuntimeRpc,\n FollowEventWithoutRuntimeRpc,\n OperationEventsRpc,\n StopRpc,\n} from \"./json-rpc-types\"\nimport type {\n ChainHead,\n ClientInnerRequest,\n FollowEventWithoutRuntime,\n FollowEventWithRuntime,\n FollowResponse,\n} from \"./public-types\"\nimport {\n Subscriber,\n getSubscriptionsManager,\n noop,\n deferred,\n} from \"@/internal-utils\"\nimport { createBodyFn } from \"./body\"\nimport { createCallFn } from \"./call\"\nimport { createHeaderFn } from \"./header\"\nimport { createStorageFn } from \"./storage\"\nimport { createUnpinFn } from \"./unpin\"\nimport { DisjointError, StopError } from \"./errors\"\nimport { createStorageCb } from \"./storage-subscription\"\nimport { DestroyedError } from \"@/client/DestroyedError\"\nimport { chainHead } from \"@/methods\"\n\ntype FollowEventRpc =\n | FollowEventWithRuntimeRpc\n | FollowEventWithoutRuntimeRpc\n | OperationEventsRpc\n | StopRpc\n\nfunction isOperationEvent(event: FollowEventRpc): event is OperationEventsRpc {\n return (event as OperationEventsRpc).operationId !== undefined\n}\n\nexport function getChainHead(\n request: ClientRequest<string, FollowEventRpc>,\n): ChainHead {\n return (\n withRuntime: boolean,\n onFollowEvent:\n | ((event: FollowEventWithoutRuntime) => void)\n | ((event: FollowEventWithRuntime) => void),\n onFollowError: (e: Error) => void,\n ): FollowResponse => {\n const subscriptions = getSubscriptionsManager<OperationEventsRpc>()\n\n const ongoingRequests = new Set<() => void>()\n const deferredFollow = deferred<string | Error>()\n let followSubscription: Promise<string | Error> | string | null =\n deferredFollow.promise\n\n const onAllFollowEventsNext = (event: FollowEventRpc) => {\n if (isOperationEvent(event)) {\n if (!subscriptions.has(event.operationId))\n console.warn(\"Uknown operationId on\", event)\n\n return subscriptions.next(event.operationId, event)\n }\n\n if (event.event !== \"stop\") {\n if (event.event === \"initialized\") {\n return onFollowEvent({\n type: event.event,\n finalizedBlockHashes:\n \"finalizedBlockHash\" in event\n ? [event.finalizedBlockHash]\n : event.finalizedBlockHashes,\n finalizedBlockRuntime: (event as any).finalizedBlockRuntime,\n })\n }\n\n const { event: type, ...rest } = event\n // This is kinda dangerous, but YOLO\n return onFollowEvent({ type, ...rest } as any)\n }\n\n onFollowError(new StopError())\n unfollow(false)\n }\n\n const onAllFollowEventsError = (error: Error) => {\n onFollowError(error)\n unfollow(!(error instanceof DestroyedError))\n }\n\n const onFollowRequestSuccess = (\n subscriptionId: string,\n follow: FollowSubscriptionCb<FollowEventRpc>,\n ) => {\n const done = follow(chainHead.followEvent, subscriptionId, {\n next: onAllFollowEventsNext,\n error: onAllFollowEventsError,\n })\n\n unfollow = (sendUnfollow = true) => {\n followSubscription = null\n unfollow = noop\n done()\n sendUnfollow && request(chainHead.unfollow, [subscriptionId])\n subscriptions.errorAll(new DisjointError())\n ongoingRequests.forEach((cb) => {\n cb()\n })\n ongoingRequests.clear()\n }\n\n followSubscription = subscriptionId\n deferredFollow.res(subscriptionId)\n }\n\n const onFollowRequestError = (e: Error) => {\n if (e instanceof DestroyedError) {\n unfollow(false)\n } else {\n onFollowError(e)\n }\n followSubscription = null\n deferredFollow.res(e)\n }\n\n let unfollow: (internal?: boolean) => void = request(\n chainHead.follow,\n [withRuntime],\n { onSuccess: onFollowRequestSuccess, onError: onFollowRequestError },\n )\n\n const fRequest: ClientInnerRequest<any, any> = (method, params, cb) => {\n const disjoint = () => {\n cb?.onError(new DisjointError())\n }\n\n if (followSubscription === null) {\n disjoint()\n return noop\n }\n\n const onSubscription = (subscription: string) => {\n if (!cb) return request(method, [subscription, ...params])\n\n ongoingRequests.add(disjoint)\n\n const onSubscribeOperation = (\n operationId: string,\n subscriber: Subscriber<any>,\n ) => {\n if (followSubscription === null) {\n subscriber.error(new DisjointError())\n return noop\n }\n\n subscriptions.subscribe(operationId, subscriber)\n\n return () => {\n subscriptions.unsubscribe(operationId)\n }\n }\n\n const cleanup = request(method, [subscription, ...params], {\n onSuccess: (response) => {\n ongoingRequests.delete(disjoint)\n cb.onSuccess(response, onSubscribeOperation)\n },\n onError: (e) => {\n ongoingRequests.delete(disjoint)\n cb.onError(e)\n },\n })\n\n return () => {\n ongoingRequests.delete(disjoint)\n cleanup()\n }\n }\n\n if (typeof followSubscription === \"string\")\n return onSubscription(followSubscription)\n\n let onCancel = noop\n followSubscription.then((x) => {\n if (x instanceof Error) return disjoint()\n if (followSubscription) onCancel = onSubscription(x)\n })\n\n return () => {\n onCancel()\n }\n }\n\n return {\n unfollow() {\n unfollow()\n followSubscription = null\n },\n body: createBodyFn(fRequest),\n call: createCallFn(fRequest),\n header: createHeaderFn(fRequest),\n storage: createStorageFn(fRequest),\n storageSubscription: createStorageCb(fRequest),\n unpin: createUnpinFn(fRequest),\n _request: fRequest,\n }\n }\n}\n","export interface IRpcError {\n code: number\n message: string\n data?: any\n}\n\nexport class RpcError extends Error implements IRpcError {\n code\n data\n constructor(e: IRpcError) {\n super(e.message)\n this.code = e.code\n this.data = e.data\n this.name = \"RpcError\"\n }\n}\n","import {\n JsonRpcConnection,\n JsonRpcProvider,\n} from \"@polkadot-api/json-rpc-provider\"\nimport { UnsubscribeFn } from \"../common-types\"\nimport { RpcError, IRpcError } from \"./RpcError\"\nimport { getSubscriptionsManager, Subscriber } from \"@/internal-utils\"\nimport { DestroyedError } from \"./DestroyedError\"\n\nexport type FollowSubscriptionCb<T> = (\n methodName: string,\n subscriptionId: string,\n cb: Subscriber<T>,\n) => UnsubscribeFn\n\nexport type ClientRequestCb<T, TT> = {\n onSuccess: (result: T, followSubscription: FollowSubscriptionCb<TT>) => void\n onError: (e: Error) => void\n}\n\nexport type ClientRequest<T, TT> = (\n method: string,\n params: Array<any>,\n cb?: ClientRequestCb<T, TT>,\n) => UnsubscribeFn\n\nexport interface Client {\n disconnect: () => void\n request: ClientRequest<any, any>\n}\n\nlet nextClientId = 1\nexport const createClient = (gProvider: JsonRpcProvider): Client => {\n let clientId = nextClientId++\n const responses = new Map<string, ClientRequestCb<any, any>>()\n const subscriptions = getSubscriptionsManager()\n\n let connection: JsonRpcConnection | null = null\n\n const send = (\n id: string,\n method: string,\n params: Array<boolean | string | number | null>,\n ) => {\n connection!.send(\n JSON.stringify({\n jsonrpc: \"2.0\",\n id,\n method,\n params,\n }),\n )\n }\n\n function onMessage(message: string): void {\n try {\n let id: string,\n result,\n error: IRpcError | undefined,\n params: { subscription: any; result: any; error?: IRpcError },\n subscription: string\n\n const parsed = JSON.parse(message)\n ;({ id, result, error, params } = parsed)\n\n if (id) {\n const cb = responses.get(id)\n if (!cb) return\n\n responses.delete(id)\n\n return error\n ? cb.onError(new RpcError(error))\n : cb.onSuccess(result, (methodName, opaqueId, subscriber) => {\n const subscriptionId = methodName + opaqueId\n subscriptions.subscribe(subscriptionId, subscriber)\n return () => {\n subscriptions.unsubscribe(subscriptionId)\n }\n })\n }\n\n // at this point, it means that it should be a notification\n ;({ subscription, result, error } = params)\n if (!subscription || (!error && !Object.hasOwn(params, \"result\"))) throw 0\n\n const subscriptionId = parsed.method + subscription\n\n if (error) {\n subscriptions.error(subscriptionId, new RpcError(error!))\n } else {\n subscriptions.next(subscriptionId, result)\n }\n } catch (e) {\n console.warn(\"Error parsing incomming message: \" + message)\n console.error(e)\n }\n }\n connection = gProvider(onMessage)\n\n const disconnect = () => {\n connection?.disconnect()\n connection = null\n subscriptions.errorAll(new DestroyedError())\n responses.forEach((r) => r.onError(new DestroyedError()))\n responses.clear()\n }\n\n let nextId = 1\n const request = <T, TT>(\n method: string,\n params: Array<any>,\n cb?: ClientRequestCb<T, TT>,\n ): UnsubscribeFn => {\n if (!connection) throw new Error(\"Not connected\")\n const id = `${clientId}-${nextId++}`\n\n if (cb) responses.set(id, cb)\n send(id, method, params)\n\n return (): void => {\n responses.delete(id)\n }\n }\n\n return {\n request,\n disconnect,\n }\n}\n","import { ClientRequest } from \"./client\"\nimport { abortablePromiseFn } from \"./internal-utils\"\nimport { chainSpec } from \"./methods\"\n\nexport interface ChainSpecData {\n name: string\n genesisHash: string\n properties: any\n}\n\nexport const createGetChainSpec = (clientRequest: ClientRequest<any, any>) => {\n const request = abortablePromiseFn(\n <T>(\n onSuccess: (value: T) => void,\n onError: (e: any) => void,\n method: string,\n params: any[],\n ) => clientRequest(method, params, { onSuccess, onError }),\n )\n let cachedPromise: null | Promise<ChainSpecData> = null\n\n return async (): Promise<ChainSpecData> => {\n if (cachedPromise) return cachedPromise\n return (cachedPromise = Promise.all([\n request<string>(chainSpec.chainName, []),\n request<string>(chainSpec.genesisHash, []),\n request<any>(chainSpec.properties, []),\n ]).then(([name, genesisHash, properties]) => ({\n name,\n genesisHash,\n properties,\n })))\n }\n}\n","import type { ClientRequest } from \"@/client\"\nimport { UnsubscribeFn } from \"./common-types\"\nimport { noop } from \"./internal-utils\"\n\nexport const getCompatibilityEnhancer =\n <T, E>(rpcMethodsP: Promise<Set<string>>, request: ClientRequest<T, E>) =>\n (methods: Record<string, string>): ClientRequest<T, E> => {\n let enhancedRequest: ClientRequest<T, E> | null = null\n\n return ((method, ...rest) => {\n if (enhancedRequest) return enhancedRequest(method, ...rest)\n\n let isRunning = true\n let cleanup: UnsubscribeFn = () => {\n isRunning = false\n }\n\n rpcMethodsP\n .then((rpcMethods) => {\n enhancedRequest = (method, ...iRest) => {\n if (rpcMethods.has(method)) return request(method, ...iRest)\n iRest[1]?.onError(new Error(`Unsupported method ${method}`))\n return noop\n }\n\n if (rpcMethods.has(method)) return\n\n const parts = method.split(\"_\")\n if (parts[1] !== \"v1\") return\n\n parts[1] = \"unstable\"\n method = parts.join(\"_\")\n\n if (rpcMethods.has(method))\n Object.entries(methods).forEach(([key, value]) => {\n methods[key] = value.replace(\"_v1_\", \"_unstable_\")\n })\n else if (parts[0] === \"transaction\") {\n // old versions of smoldot and Polkadot-SDK don't support transaction_xx_broadcast\n // some old versions have `transactions_unstable_submitAndWatch` while others have `transaction_xx_submitAndWatch`\n // if we find any of this options, then we will can use them as if they were broadast/stop\n let unwatch: string | undefined\n let version: string | undefined\n\n const txGroup = [\"transactionWatch\", \"transaction\"].find(\n (group) => {\n version = [\"v1\", \"unstable\"].find((v) =>\n rpcMethods.has((unwatch = `${group}_${v}_unwatch`)),\n )\n return !!version\n },\n )\n\n if (txGroup) {\n methods.broadcast = `${txGroup}_${version}_submitAndWatch`\n methods.stop = unwatch!\n }\n }\n })\n .then(() => {\n if (isRunning) cleanup = enhancedRequest!(method, ...rest)\n })\n\n return () => {\n cleanup()\n }\n }) as ClientRequest<T, E>\n }\n","import type { JsonRpcProvider } from \"@polkadot-api/json-rpc-provider\"\nimport { getTransaction } from \"./transaction/transaction\"\nimport { getChainHead } from \"./chainhead\"\nimport {\n ClientRequest,\n ClientRequestCb,\n createClient as createRawClient,\n} from \"./client\"\nimport type { ChainHead } from \"./chainhead\"\nimport type { Transaction } from \"./transaction\"\nimport { UnsubscribeFn } from \"./common-types\"\nimport { abortablePromiseFn } from \"./internal-utils\"\nimport { ChainSpecData, createGetChainSpec } from \"./chainspec\"\nimport { getCompatibilityEnhancer } from \"./request-compatibility-enhancer\"\nimport { chainHead, chainSpec, transaction } from \"./methods\"\n\nexport type * from \"./common-types\"\nexport type * from \"./client\"\nexport type * from \"./transaction\"\nexport type * from \"./chainhead\"\nexport type * from \"./chainspec\"\n\nexport { RpcError, DestroyedError } from \"./client\"\nexport {\n StopError,\n DisjointError,\n OperationError,\n OperationInaccessibleError,\n OperationLimitError,\n} from \"./chainhead\"\n\nexport interface SubstrateClient {\n chainHead: ChainHead\n transaction: Transaction\n destroy: UnsubscribeFn\n getChainSpecData: () => Promise<ChainSpecData>\n request: <T>(\n method: string,\n params: any[],\n abortSignal?: AbortSignal,\n ) => Promise<T>\n _request: <Reply, Notification>(\n method: string,\n params: any[],\n cb?: ClientRequestCb<Reply, Notification>,\n ) => UnsubscribeFn\n}\n\nexport const createClient = (provider: JsonRpcProvider): SubstrateClient => {\n const client = createRawClient(provider)\n\n const request = abortablePromiseFn(\n <T>(\n onSuccess: (value: T) => void,\n onError: (e: any) => void,\n method: string,\n params: any[],\n ) => client.request(method, params, { onSuccess, onError }),\n )\n\n const rpcMethods: Promise<Set<string>> = request<\n { methods: Array<string> } | Array<string>\n >(\"rpc_methods\", []).then(\n (x) => new Set(Array.isArray(x) ? x : x.methods),\n () => new Set(),\n )\n\n const compatibilityEnhancer = getCompatibilityEnhancer(\n rpcMethods,\n client.request,\n )\n\n return {\n chainHead: getChainHead(\n compatibilityEnhancer(chainHead) as ClientRequest<any, any>,\n ),\n transaction: getTransaction(\n compatibilityEnhancer(transaction) as ClientRequest<string, any>,\n ),\n getChainSpecData: createGetChainSpec(\n compatibilityEnhancer(chainSpec) as ClientRequest<any, any>,\n ),\n destroy: () => {\n client.disconnect()\n },\n request,\n _request: client.request,\n }\n}\n"],"mappings":"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","names":["fn","noop","noop","noop","noop","noop","noop","subscriptionId","method","noop","createClient"]}
1
+ {"version":3,"sources":["../src/internal-utils/abortablePromiseFn.ts","../src/internal-utils/deferred-promise.ts","../src/internal-utils/noop.ts","../src/internal-utils/subscriptions-manager.ts","../src/methods.ts","../src/transaction/transaction.ts","../src/chainhead/errors.ts","../src/chainhead/operation-promise.ts","../src/chainhead/body.ts","../src/chainhead/call.ts","../src/chainhead/header.ts","../src/chainhead/storage-subscription.ts","../src/chainhead/storage.ts","../src/chainhead/unpin.ts","../src/client/DestroyedError.ts","../src/chainhead/chainhead.ts","../src/client/RpcError.ts","../src/client/createClient.ts","../src/chainspec.ts","../src/request-compatibility-enhancer.ts","../src/index.ts"],"sourcesContent":["import { AbortError, noop } from \"@polkadot-api/utils\"\nimport { AbortablePromiseFn } from \"../common-types\"\n\nexport const abortablePromiseFn =\n <T, A extends Array<any>>(\n fn: (\n ...args: [...[res: (x: T) => void, rej: (e: any) => void], ...A]\n ) => () => void,\n ): AbortablePromiseFn<A, T> =>\n (...args): Promise<T> =>\n new Promise((res, rej) => {\n let cancel = noop\n\n const [actualArgs, abortSignal] =\n args[args.length - 1] instanceof AbortSignal\n ? ([args.slice(0, args.length - 1), args[args.length - 1]] as [\n A,\n AbortSignal,\n ])\n : ([args] as unknown as [A])\n\n const onAbort = () => {\n cancel()\n rej(new AbortError())\n }\n\n abortSignal?.addEventListener(\"abort\", onAbort, { once: true })\n\n const withCleanup =\n <T>(fn: (x: T) => void): ((x: T) => void) =>\n (x) => {\n cancel = noop\n abortSignal?.removeEventListener(\"abort\", onAbort)\n fn(x)\n }\n\n cancel = fn(...[withCleanup(res), withCleanup(rej), ...actualArgs])\n })\n","export interface DeferredPromise<T> {\n promise: Promise<T>\n res: (value: T) => void\n rej: (err: Error) => void\n}\n\nexport function deferred<T>(): DeferredPromise<T> {\n let res: (value: T) => void = () => {}\n let rej: (err: Error) => void = () => {}\n\n const promise = new Promise<T>((_res, _rej) => {\n res = _res\n rej = _rej\n })\n\n return { promise, res, rej }\n}\n","export const noop = (): void => {}\n","export interface Subscriber<T> {\n next: (data: T) => void\n error: (e: Error) => void\n}\n\nexport const getSubscriptionsManager = <T>() => {\n const subscriptions = new Map<string, Subscriber<T>>()\n\n return {\n has: subscriptions.has.bind(subscriptions),\n subscribe(id: string, subscriber: Subscriber<T>) {\n subscriptions.set(id, subscriber)\n },\n unsubscribe(id: string) {\n subscriptions.delete(id)\n },\n next(id: string, data: T) {\n subscriptions.get(id)?.next(data)\n },\n error(id: string, e: Error) {\n const subscriber = subscriptions.get(id)\n if (subscriber) {\n subscriptions.delete(id)\n subscriber.error(e)\n }\n },\n errorAll(e: Error) {\n const subscribers = [...subscriptions.values()]\n subscriptions.clear()\n subscribers.forEach((s) => {\n s.error(e)\n })\n },\n }\n}\n\nexport type SubscriptionManager<T> = ReturnType<\n typeof getSubscriptionsManager<T>\n>\n","export const chainHead = {\n body: \"\",\n call: \"\",\n continue: \"\",\n follow: \"\",\n header: \"\",\n stopOperation: \"\",\n storage: \"\",\n unfollow: \"\",\n unpin: \"\",\n followEvent: \"\",\n}\n\nexport const chainSpec = {\n chainName: \"\",\n genesisHash: \"\",\n properties: \"\",\n}\n\nexport const transaction = {\n broadcast: \"\",\n stop: \"\",\n}\n\nexport const transactionWatch = {\n submitAndWatch: \"\",\n unwatch: \"\",\n}\n\nObject.entries({ chainHead, chainSpec, transaction, transactionWatch }).forEach(\n ([fnGroupName, methods]) => {\n Object.keys(methods).forEach((methodName) => {\n ;(methods as any)[methodName] = `${fnGroupName}_v1_${methodName}`\n })\n },\n)\n","import { noop } from \"@/internal-utils\"\nimport { type ClientRequest } from \"../client\"\nimport { transaction } from \"@/methods\"\n\nexport const getTransaction =\n (request: ClientRequest<string, any>) =>\n (tx: string, error: (e: Error) => void) => {\n let cancel = request(transaction.broadcast, [tx], {\n onSuccess: (subscriptionId) => {\n cancel =\n subscriptionId === null\n ? noop\n : () => {\n request(transaction.stop, [subscriptionId])\n }\n\n if (subscriptionId === null) {\n error(new Error(\"Max # of broadcasted transactions has been reached\"))\n }\n },\n onError: error,\n })\n\n return () => {\n cancel()\n }\n }\n","export class StopError extends Error {\n constructor() {\n super(\"ChainHead stopped\")\n this.name = \"StopError\"\n }\n}\n\nexport class DisjointError extends Error {\n constructor() {\n super(\"ChainHead disjointed\")\n this.name = \"DisjointError\"\n }\n}\n\nexport class OperationLimitError extends Error {\n constructor() {\n super(\"ChainHead operations limit reached\")\n this.name = \"OperationLimitError\"\n }\n}\n\nexport class OperationError extends Error {\n constructor(error: string) {\n super(error)\n this.name = \"OperationError\"\n }\n}\n\nexport class OperationInaccessibleError extends Error {\n constructor() {\n super(\"ChainHead operation inaccessible\")\n this.name = \"OperationInaccessibleError\"\n }\n}\n","import { abortablePromiseFn, noop } from \"@/internal-utils\"\nimport {\n CommonOperationEventsRpc,\n OperationResponseRpc,\n} from \"./json-rpc-types\"\nimport {\n OperationError,\n OperationInaccessibleError,\n OperationLimitError,\n} from \"./errors\"\nimport { ClientInnerRequest } from \"./public-types\"\nimport { chainHead } from \"@/methods\"\n\nexport const createOperationPromise =\n <I extends { operationId: string; event: string }, O, A extends Array<any>>(\n operationName: string,\n factory: (\n ...args: A\n ) => [\n Array<any>,\n (e: I, res: (x: O) => void, rej: (e: Error) => void) => void,\n ],\n ) =>\n (\n request: ClientInnerRequest<\n OperationResponseRpc,\n I | CommonOperationEventsRpc\n >,\n ) =>\n abortablePromiseFn<O, A>((res, rej, ...args) => {\n let isRunning = true\n let cancel = () => {\n isRunning = false\n }\n\n const [requestArgs, logicCb] = factory(...args)\n request(operationName, requestArgs, {\n onSuccess: (response, followSubscription) => {\n if (response.result === \"limitReached\")\n return rej(new OperationLimitError())\n\n const { operationId } = response\n const stopOperation = () => {\n request(chainHead.stopOperation, [operationId])\n }\n\n if (!isRunning) return stopOperation()\n\n let done = noop\n const _res = (x: O) => {\n isRunning = false\n done()\n res(x)\n }\n const _rej = (x: Error) => {\n isRunning = false\n done()\n rej(x)\n }\n\n done = followSubscription(operationId, {\n next: (e) => {\n const _e = e as CommonOperationEventsRpc\n if (_e.event === \"operationError\")\n rej(new OperationError(_e.error))\n else if (_e.event === \"operationInaccessible\")\n rej(new OperationInaccessibleError())\n else logicCb(e as I, _res, _rej)\n },\n error: _rej,\n })\n\n cancel = () => {\n if (isRunning) {\n done()\n stopOperation()\n }\n }\n },\n onError: rej,\n })\n\n return () => {\n cancel()\n }\n })\n","import { chainHead } from \"@/methods\"\nimport type { OperationBodyDoneRpc } from \"./json-rpc-types\"\nimport { createOperationPromise } from \"./operation-promise\"\n\nexport const createBodyFn = createOperationPromise(\n chainHead.body,\n (hash: string) => [\n [hash],\n (e: OperationBodyDoneRpc, res: (x: Array<string>) => void) => {\n res(e.value)\n },\n ],\n)\n","import { chainHead } from \"@/methods\"\nimport type { OperationCallDoneRpc } from \"./json-rpc-types\"\nimport { createOperationPromise } from \"./operation-promise\"\n\nexport const createCallFn = createOperationPromise(\n chainHead.call,\n (hash: string, fnName: string, callParameters: string) => [\n [hash, fnName, callParameters],\n (e: OperationCallDoneRpc, res: (output: string) => void) => {\n res(e.output)\n },\n ],\n)\n","import { chainHead } from \"@/methods\"\nimport { ClientInnerRequest } from \"./public-types\"\n\nexport const createHeaderFn =\n (request: ClientInnerRequest<string, unknown>) => (hash: string) =>\n new Promise<string>((res, rej) => {\n request(chainHead.header, [hash], {\n onSuccess: res,\n onError: rej,\n })\n })\n","import { noop } from \"@polkadot-api/utils\"\nimport {\n ClientInnerRequest,\n FollowResponse,\n OperationError,\n OperationInaccessibleError,\n OperationLimitError,\n} from \"..\"\nimport {\n CommonOperationEventsRpc,\n LimitReachedRpc,\n OperationStorageDoneRpc,\n OperationStorageItemsRpc,\n OperationWaitingForContinueRpc,\n OperationStorageStartedRpc,\n} from \"./json-rpc-types\"\nimport { chainHead } from \"@/methods\"\n\nexport const createStorageCb =\n (\n request: ClientInnerRequest<\n OperationStorageStartedRpc | LimitReachedRpc,\n | CommonOperationEventsRpc\n | OperationStorageItemsRpc\n | OperationStorageDoneRpc\n | OperationWaitingForContinueRpc\n >,\n ): FollowResponse[\"storageSubscription\"] =>\n (hash, inputs, childTrie, onItems, onError, onDone, onDiscardedItems) => {\n if (inputs.length === 0) {\n onDone()\n return noop\n }\n\n let isRunning = true\n let cancel = () => {\n isRunning = false\n }\n\n request(chainHead.storage, [hash, inputs, childTrie], {\n onSuccess: (response, followSubscription) => {\n if (\n response.result === \"limitReached\" ||\n response.discardedItems === inputs.length\n )\n return onError(new OperationLimitError())\n\n const { operationId } = response\n const stopOperation = () => {\n request(chainHead.stopOperation, [operationId])\n }\n\n if (!isRunning) return stopOperation()\n\n const doneListening = followSubscription(response.operationId, {\n next: (event) => {\n switch (event.event) {\n case \"operationStorageItems\": {\n onItems(event.items)\n break\n }\n case \"operationStorageDone\": {\n _onDone()\n break\n }\n case \"operationError\": {\n _onError(new OperationError(event.error))\n break\n }\n case \"operationInaccessible\": {\n _onError(new OperationInaccessibleError())\n break\n }\n default:\n request(chainHead.continue, [event.operationId])\n }\n },\n error: onError,\n })\n\n cancel = () => {\n doneListening()\n request(chainHead.stopOperation, [response.operationId])\n }\n\n const _onError = (e: Error) => {\n cancel = noop\n doneListening()\n onError(e)\n }\n\n const _onDone = () => {\n cancel = noop\n doneListening()\n onDone()\n }\n\n onDiscardedItems(response.discardedItems)\n },\n onError,\n })\n\n return () => {\n cancel()\n }\n }\n","import { ClientInnerRequest, FollowResponse, OperationLimitError } from \"..\"\nimport type {\n CommonOperationEventsRpc,\n LimitReachedRpc,\n OperationStorageDoneRpc,\n OperationStorageItemsRpc,\n OperationWaitingForContinueRpc,\n OperationStorageStartedRpc,\n} from \"./json-rpc-types\"\nimport { abortablePromiseFn } from \"@/internal-utils\"\nimport { createStorageCb } from \"./storage-subscription\"\n\nexport const createStorageFn = (\n request: ClientInnerRequest<\n OperationStorageStartedRpc | LimitReachedRpc,\n | CommonOperationEventsRpc\n | OperationStorageItemsRpc\n | OperationStorageDoneRpc\n | OperationWaitingForContinueRpc\n >,\n): FollowResponse[\"storage\"] => {\n const cbStore = createStorageCb(request)\n return abortablePromiseFn((resolve, reject, hash, type, key, childTrie) => {\n const isDescendants = type.startsWith(\"descendants\")\n let result: any = isDescendants ? [] : null\n\n const onItems: Parameters<typeof cbStore>[3] = isDescendants\n ? (items) => {\n result.push(items)\n }\n : (items) => {\n result = items[0]?.[type as \"value\"]\n }\n\n const cancel = cbStore(\n hash,\n [{ key, type }],\n childTrie ?? null,\n onItems,\n reject,\n () => {\n try {\n resolve(isDescendants ? result.flat() : result)\n } catch (e) {\n reject(e)\n }\n },\n (nDiscarded) => {\n if (nDiscarded > 0) {\n cancel()\n reject(new OperationLimitError())\n }\n },\n )\n return cancel\n })\n}\n","import { chainHead } from \"@/methods\"\nimport { ClientInnerRequest } from \"./public-types\"\n\nexport const createUnpinFn =\n (request: ClientInnerRequest<null, unknown>) => (hashes: string[]) =>\n hashes.length > 0\n ? new Promise<void>((res, rej) => {\n request(chainHead.unpin, [hashes], {\n onSuccess() {\n res()\n },\n onError: rej,\n })\n })\n : Promise.resolve()\n","export class DestroyedError extends Error {\n constructor() {\n super(\"Client destroyed\")\n this.name = \"DestroyedError\"\n }\n}\n","import type { ClientRequest, FollowSubscriptionCb } from \"@/client\"\nimport type {\n FollowEventWithRuntimeRpc,\n FollowEventWithoutRuntimeRpc,\n OperationEventsRpc,\n StopRpc,\n} from \"./json-rpc-types\"\nimport type {\n ChainHead,\n ClientInnerRequest,\n FollowEventWithoutRuntime,\n FollowEventWithRuntime,\n FollowResponse,\n} from \"./public-types\"\nimport {\n Subscriber,\n getSubscriptionsManager,\n noop,\n deferred,\n} from \"@/internal-utils\"\nimport { createBodyFn } from \"./body\"\nimport { createCallFn } from \"./call\"\nimport { createHeaderFn } from \"./header\"\nimport { createStorageFn } from \"./storage\"\nimport { createUnpinFn } from \"./unpin\"\nimport { DisjointError, StopError } from \"./errors\"\nimport { createStorageCb } from \"./storage-subscription\"\nimport { DestroyedError } from \"@/client/DestroyedError\"\nimport { chainHead } from \"@/methods\"\n\ntype FollowEventRpc =\n | FollowEventWithRuntimeRpc\n | FollowEventWithoutRuntimeRpc\n | OperationEventsRpc\n | StopRpc\n\nfunction isOperationEvent(event: FollowEventRpc): event is OperationEventsRpc {\n return (event as OperationEventsRpc).operationId !== undefined\n}\n\nexport function getChainHead(\n request: ClientRequest<string, FollowEventRpc>,\n): ChainHead {\n return (\n withRuntime: boolean,\n onFollowEvent:\n | ((event: FollowEventWithoutRuntime) => void)\n | ((event: FollowEventWithRuntime) => void),\n onFollowError: (e: Error) => void,\n ): FollowResponse => {\n const subscriptions = getSubscriptionsManager<OperationEventsRpc>()\n\n const ongoingRequests = new Set<() => void>()\n const deferredFollow = deferred<string | Error>()\n let followSubscription: Promise<string | Error> | string | null =\n deferredFollow.promise\n\n const onAllFollowEventsNext = (event: FollowEventRpc) => {\n if (isOperationEvent(event)) {\n if (!subscriptions.has(event.operationId))\n console.warn(\"Uknown operationId on\", event)\n\n return subscriptions.next(event.operationId, event)\n }\n\n if (event.event !== \"stop\") {\n if (event.event === \"initialized\") {\n return onFollowEvent({\n type: event.event,\n finalizedBlockHashes:\n \"finalizedBlockHash\" in event\n ? [event.finalizedBlockHash]\n : event.finalizedBlockHashes,\n finalizedBlockRuntime: (event as any).finalizedBlockRuntime,\n })\n }\n\n const { event: type, ...rest } = event\n // This is kinda dangerous, but YOLO\n return onFollowEvent({ type, ...rest } as any)\n }\n\n onFollowError(new StopError())\n unfollow(false)\n }\n\n const onAllFollowEventsError = (error: Error) => {\n onFollowError(error)\n unfollow(!(error instanceof DestroyedError))\n }\n\n const onFollowRequestSuccess = (\n subscriptionId: string,\n follow: FollowSubscriptionCb<FollowEventRpc>,\n ) => {\n const done = follow(subscriptionId, {\n next: onAllFollowEventsNext,\n error: onAllFollowEventsError,\n })\n\n unfollow = (sendUnfollow = true) => {\n followSubscription = null\n unfollow = noop\n done()\n sendUnfollow && request(chainHead.unfollow, [subscriptionId])\n subscriptions.errorAll(new DisjointError())\n ongoingRequests.forEach((cb) => {\n cb()\n })\n ongoingRequests.clear()\n }\n\n followSubscription = subscriptionId\n deferredFollow.res(subscriptionId)\n }\n\n const onFollowRequestError = (e: Error) => {\n if (e instanceof DestroyedError) {\n unfollow(false)\n } else {\n onFollowError(e)\n }\n followSubscription = null\n deferredFollow.res(e)\n }\n\n let unfollow: (internal?: boolean) => void = request(\n chainHead.follow,\n [withRuntime],\n { onSuccess: onFollowRequestSuccess, onError: onFollowRequestError },\n )\n\n const fRequest: ClientInnerRequest<any, any> = (method, params, cb) => {\n const disjoint = () => {\n cb?.onError(new DisjointError())\n }\n\n if (followSubscription === null) {\n disjoint()\n return noop\n }\n\n const onSubscription = (subscription: string) => {\n if (!cb) return request(method, [subscription, ...params])\n\n ongoingRequests.add(disjoint)\n\n const onSubscribeOperation = (\n operationId: string,\n subscriber: Subscriber<any>,\n ) => {\n if (followSubscription === null) {\n subscriber.error(new DisjointError())\n return noop\n }\n\n subscriptions.subscribe(operationId, subscriber)\n\n return () => {\n subscriptions.unsubscribe(operationId)\n }\n }\n\n const cleanup = request(method, [subscription, ...params], {\n onSuccess: (response) => {\n ongoingRequests.delete(disjoint)\n cb.onSuccess(response, onSubscribeOperation)\n },\n onError: (e) => {\n ongoingRequests.delete(disjoint)\n cb.onError(e)\n },\n })\n\n return () => {\n ongoingRequests.delete(disjoint)\n cleanup()\n }\n }\n\n if (typeof followSubscription === \"string\")\n return onSubscription(followSubscription)\n\n let onCancel = noop\n followSubscription.then((x) => {\n if (x instanceof Error) return disjoint()\n if (followSubscription) onCancel = onSubscription(x)\n })\n\n return () => {\n onCancel()\n }\n }\n\n return {\n unfollow() {\n unfollow()\n followSubscription = null\n },\n body: createBodyFn(fRequest),\n call: createCallFn(fRequest),\n header: createHeaderFn(fRequest),\n storage: createStorageFn(fRequest),\n storageSubscription: createStorageCb(fRequest),\n unpin: createUnpinFn(fRequest),\n _request: fRequest,\n }\n }\n}\n","export interface IRpcError {\n code: number\n message: string\n data?: any\n}\n\nexport class RpcError extends Error implements IRpcError {\n code\n data\n constructor(e: IRpcError) {\n super(e.message)\n this.code = e.code\n this.data = e.data\n this.name = \"RpcError\"\n }\n}\n","import {\n JsonRpcConnection,\n JsonRpcProvider,\n} from \"@polkadot-api/json-rpc-provider\"\nimport { UnsubscribeFn } from \"../common-types\"\nimport { RpcError, IRpcError } from \"./RpcError\"\nimport { getSubscriptionsManager, Subscriber } from \"@/internal-utils\"\nimport { DestroyedError } from \"./DestroyedError\"\n\nexport type FollowSubscriptionCb<T> = (\n subscriptionId: string,\n cb: Subscriber<T>,\n) => UnsubscribeFn\n\nexport type ClientRequestCb<T, TT> = {\n onSuccess: (result: T, followSubscription: FollowSubscriptionCb<TT>) => void\n onError: (e: Error) => void\n}\n\nexport type ClientRequest<T, TT> = (\n method: string,\n params: Array<any>,\n cb?: ClientRequestCb<T, TT>,\n) => UnsubscribeFn\n\nexport interface Client {\n disconnect: () => void\n request: ClientRequest<any, any>\n}\n\nlet nextClientId = 1\nexport const createClient = (gProvider: JsonRpcProvider): Client => {\n let clientId = nextClientId++\n const responses = new Map<string, ClientRequestCb<any, any>>()\n const subscriptions = getSubscriptionsManager()\n\n let connection: JsonRpcConnection | null = null\n\n const send = (\n id: string,\n method: string,\n params: Array<boolean | string | number | null>,\n ) => {\n connection!.send(\n JSON.stringify({\n jsonrpc: \"2.0\",\n id,\n method,\n params,\n }),\n )\n }\n\n function onMessage(message: string): void {\n try {\n let id: string,\n result,\n error: IRpcError | undefined,\n params: { subscription: any; result: any; error?: IRpcError },\n subscription: string\n\n const parsed = JSON.parse(message)\n ;({ id, result, error, params } = parsed)\n\n if (id) {\n const cb = responses.get(id)\n if (!cb) return\n\n responses.delete(id)\n\n return error\n ? cb.onError(new RpcError(error))\n : cb.onSuccess(result, (opaqueId, subscriber) => {\n const subscriptionId = opaqueId\n subscriptions.subscribe(subscriptionId, subscriber)\n return () => {\n subscriptions.unsubscribe(subscriptionId)\n }\n })\n }\n\n // at this point, it means that it should be a notification\n ;({ subscription, result, error } = params)\n if (!subscription || (!error && !Object.hasOwn(params, \"result\"))) throw 0\n\n const subscriptionId = subscription\n\n if (error) {\n subscriptions.error(subscriptionId, new RpcError(error!))\n } else {\n subscriptions.next(subscriptionId, result)\n }\n } catch (e) {\n console.warn(\"Error parsing incomming message: \" + message)\n console.error(e)\n }\n }\n connection = gProvider(onMessage)\n\n const disconnect = () => {\n connection?.disconnect()\n connection = null\n subscriptions.errorAll(new DestroyedError())\n responses.forEach((r) => r.onError(new DestroyedError()))\n responses.clear()\n }\n\n let nextId = 1\n const request = <T, TT>(\n method: string,\n params: Array<any>,\n cb?: ClientRequestCb<T, TT>,\n ): UnsubscribeFn => {\n if (!connection) throw new Error(\"Not connected\")\n const id = `${clientId}-${nextId++}`\n\n if (cb) responses.set(id, cb)\n send(id, method, params)\n\n return (): void => {\n responses.delete(id)\n }\n }\n\n return {\n request,\n disconnect,\n }\n}\n","import { ClientRequest } from \"./client\"\nimport { abortablePromiseFn } from \"./internal-utils\"\nimport { chainSpec } from \"./methods\"\n\nexport interface ChainSpecData {\n name: string\n genesisHash: string\n properties: any\n}\n\nexport const createGetChainSpec = (clientRequest: ClientRequest<any, any>) => {\n const request = abortablePromiseFn(\n <T>(\n onSuccess: (value: T) => void,\n onError: (e: any) => void,\n method: string,\n params: any[],\n ) => clientRequest(method, params, { onSuccess, onError }),\n )\n let cachedPromise: null | Promise<ChainSpecData> = null\n\n return async (): Promise<ChainSpecData> => {\n if (cachedPromise) return cachedPromise\n return (cachedPromise = Promise.all([\n request<string>(chainSpec.chainName, []),\n request<string>(chainSpec.genesisHash, []),\n request<any>(chainSpec.properties, []),\n ]).then(([name, genesisHash, properties]) => ({\n name,\n genesisHash,\n properties,\n })))\n }\n}\n","import type { ClientRequest } from \"@/client\"\nimport { UnsubscribeFn } from \"./common-types\"\nimport { noop } from \"./internal-utils\"\n\nexport const getCompatibilityEnhancer =\n <T, E>(rpcMethodsP: Promise<Set<string>>, request: ClientRequest<T, E>) =>\n (methods: Record<string, string>): ClientRequest<T, E> => {\n let translations: Record<string, string> = {}\n let enhancedRequest: ClientRequest<T, E> | null = null\n\n return ((method, ...rest) => {\n if (enhancedRequest) return enhancedRequest(method, ...rest)\n\n let isRunning = true\n let cleanup: UnsubscribeFn = () => {\n isRunning = false\n }\n\n rpcMethodsP\n .then((rpcMethods) => {\n enhancedRequest = (method_, ...iRest) => {\n const method = translations[method_] ?? method_\n if (rpcMethods.has(method)) return request(method, ...iRest)\n iRest[1]?.onError(new Error(`Unsupported method ${method}`))\n return noop\n }\n\n if (rpcMethods.has(method)) return\n\n const parts = method.split(\"_\")\n if (parts[1] !== \"v1\") return\n\n parts[1] = \"unstable\"\n\n if (rpcMethods.has(parts.join(\"_\")))\n Object.values(methods).forEach((value) => {\n translations[value] = value.replace(\"_v1_\", \"_unstable_\")\n })\n else if (parts[0] === \"transaction\") {\n // old versions of smoldot and Polkadot-SDK don't support transaction_xx_broadcast\n // some old versions have `transactions_unstable_submitAndWatch` while others have `transaction_xx_submitAndWatch`\n // if we find any of this options, then we will can use them as if they were broadast/stop\n let unwatch: string | undefined\n let version: string | undefined\n\n const txGroup = [\"transactionWatch\", \"transaction\"].find(\n (group) => {\n version = [\"v1\", \"unstable\"].find((v) =>\n rpcMethods.has((unwatch = `${group}_${v}_unwatch`)),\n )\n return !!version\n },\n )\n\n if (txGroup) {\n translations[methods.broadcast] =\n `${txGroup}_${version}_submitAndWatch`\n translations[methods.stop] = unwatch!\n }\n }\n })\n .then(() => {\n if (isRunning) cleanup = enhancedRequest!(method, ...rest)\n })\n\n return () => {\n cleanup()\n }\n }) as ClientRequest<T, E>\n }\n","import type { JsonRpcProvider } from \"@polkadot-api/json-rpc-provider\"\nimport { getTransaction } from \"./transaction/transaction\"\nimport { getChainHead } from \"./chainhead\"\nimport {\n ClientRequest,\n ClientRequestCb,\n createClient as createRawClient,\n} from \"./client\"\nimport type { ChainHead } from \"./chainhead\"\nimport type { Transaction } from \"./transaction\"\nimport { UnsubscribeFn } from \"./common-types\"\nimport { abortablePromiseFn } from \"./internal-utils\"\nimport { ChainSpecData, createGetChainSpec } from \"./chainspec\"\nimport { getCompatibilityEnhancer } from \"./request-compatibility-enhancer\"\nimport { chainHead, chainSpec, transaction } from \"./methods\"\n\nexport type * from \"./common-types\"\nexport type * from \"./client\"\nexport type * from \"./transaction\"\nexport type * from \"./chainhead\"\nexport type * from \"./chainspec\"\n\nexport { RpcError, DestroyedError } from \"./client\"\nexport {\n StopError,\n DisjointError,\n OperationError,\n OperationInaccessibleError,\n OperationLimitError,\n} from \"./chainhead\"\n\nexport interface SubstrateClient {\n chainHead: ChainHead\n transaction: Transaction\n destroy: UnsubscribeFn\n getChainSpecData: () => Promise<ChainSpecData>\n request: <T>(\n method: string,\n params: any[],\n abortSignal?: AbortSignal,\n ) => Promise<T>\n _request: <Reply, Notification>(\n method: string,\n params: any[],\n cb?: ClientRequestCb<Reply, Notification>,\n ) => UnsubscribeFn\n}\n\nexport const createClient = (provider: JsonRpcProvider): SubstrateClient => {\n const client = createRawClient(provider)\n\n const request = abortablePromiseFn(\n <T>(\n onSuccess: (value: T) => void,\n onError: (e: any) => void,\n method: string,\n params: any[],\n ) => client.request(method, params, { onSuccess, onError }),\n )\n\n const rpcMethods: Promise<Set<string>> = request<\n { methods: Array<string> } | Array<string>\n >(\"rpc_methods\", []).then(\n (x) => new Set(Array.isArray(x) ? x : x.methods),\n () => new Set(),\n )\n\n const compatibilityEnhancer = getCompatibilityEnhancer(\n rpcMethods,\n client.request,\n )\n\n return {\n chainHead: getChainHead(\n compatibilityEnhancer(chainHead) as ClientRequest<any, any>,\n ),\n transaction: getTransaction(\n compatibilityEnhancer(transaction) as ClientRequest<string, any>,\n ),\n getChainSpecData: createGetChainSpec(\n compatibilityEnhancer(chainSpec) as ClientRequest<any, any>,\n ),\n destroy: () => {\n client.disconnect()\n },\n request,\n _request: client.request,\n }\n}\n"],"mappings":"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","names":["fn","noop","noop","noop","noop","noop","noop","subscriptionId","method","noop","createClient"]}
@@ -23,7 +23,7 @@ interface Subscriber<T> {
23
23
  error: (e: Error) => void;
24
24
  }
25
25
 
26
- type FollowSubscriptionCb<T> = (methodName: string, subscriptionId: string, cb: Subscriber<T>) => UnsubscribeFn;
26
+ type FollowSubscriptionCb<T> = (subscriptionId: string, cb: Subscriber<T>) => UnsubscribeFn;
27
27
  type ClientRequestCb<T, TT> = {
28
28
  onSuccess: (result: T, followSubscription: FollowSubscriptionCb<TT>) => void;
29
29
  onError: (e: Error) => void;
package/dist/min/index.js CHANGED
@@ -1,2 +1,2 @@
1
- "use strict";var W=Object.defineProperty;var re=Object.getOwnPropertyDescriptor;var te=Object.getOwnPropertyNames;var ne=Object.prototype.hasOwnProperty;var oe=(r,e,t)=>e in r?W(r,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):r[e]=t;var ie=(r,e)=>{for(var t in e)W(r,t,{get:e[t],enumerable:!0})},se=(r,e,t,o)=>{if(e&&typeof e=="object"||typeof e=="function")for(let n of te(e))!ne.call(r,n)&&n!==t&&W(r,n,{get:()=>e[n],enumerable:!(o=re(e,n))||o.enumerable});return r};var ae=r=>se(W({},"__esModule",{value:!0}),r);var $=(r,e,t)=>(oe(r,typeof e!="symbol"?e+"":e,t),t);var me={};ie(me,{DestroyedError:()=>C,DisjointError:()=>w,OperationError:()=>x,OperationInaccessibleError:()=>O,OperationLimitError:()=>y,RpcError:()=>q,StopError:()=>P,createClient:()=>ue});module.exports=ae(me);var H=require("@polkadot-api/utils"),v=r=>(...e)=>new Promise((t,o)=>{let n=H.noop,[a,f]=e[e.length-1]instanceof AbortSignal?[e.slice(0,e.length-1),e[e.length-1]]:[e],p=()=>{n(),o(new H.AbortError)};f?.addEventListener("abort",p,{once:!0});let l=d=>u=>{n=H.noop,f?.removeEventListener("abort",p),d(u)};n=r(l(t),l(o),...a)});function z(){let r=()=>{},e=()=>{};return{promise:new Promise((o,n)=>{r=o,e=n}),res:r,rej:e}}var h=()=>{};var k=()=>{let r=new Map;return{has:r.has.bind(r),subscribe(e,t){r.set(e,t)},unsubscribe(e){r.delete(e)},next(e,t){r.get(e)?.next(t)},error(e,t){let o=r.get(e);o&&(r.delete(e),o.error(t))},errorAll(e){let t=[...r.values()];r.clear(),t.forEach(o=>{o.error(e)})}}};var b={body:"",call:"",continue:"",follow:"",header:"",stopOperation:"",storage:"",unfollow:"",unpin:"",followEvent:""},F={chainName:"",genesisHash:"",properties:""},A={broadcast:"",stop:""},ce={submitAndWatch:"",unwatch:""};Object.entries({chainHead:b,chainSpec:F,transaction:A,transactionWatch:ce}).forEach(([r,e])=>{Object.keys(e).forEach(t=>{e[t]=`${r}_v1_${t}`})});var M=r=>(e,t)=>{let o=r(A.broadcast,[e],{onSuccess:n=>{o=n===null?h:()=>{r(A.stop,[n])},n===null&&t(new Error("Max # of broadcasted transactions has been reached"))},onError:t});return()=>{o()}};var P=class extends Error{constructor(){super("ChainHead stopped"),this.name="StopError"}},w=class extends Error{constructor(){super("ChainHead disjointed"),this.name="DisjointError"}},y=class extends Error{constructor(){super("ChainHead operations limit reached"),this.name="OperationLimitError"}},x=class extends Error{constructor(e){super(e),this.name="OperationError"}},O=class extends Error{constructor(){super("ChainHead operation inaccessible"),this.name="OperationInaccessibleError"}};var j=(r,e)=>t=>v((o,n,...a)=>{let[f,p]=e(...a),l=t(r(),f,{onSuccess:(d,u)=>{if(d.result==="limitReached")return l=h,n(new y);let c=!0,s=h,m=g=>{c=!1,s(),o(g)},i=g=>{c=!1,s(),n(g)};s=u(d.operationId,{next:g=>{let R=g;R.event==="operationError"?n(new x(R.error)):R.event==="operationInaccessible"?n(new O):p(g,m,i)},error:i}),l=()=>{c&&(s(),t(b.stopOperation,[d.operationId]))}},onError:n});return()=>{l()}});var G=j(()=>b.body,r=>[[r],(e,t)=>{t(e.value)}]);var K=j(()=>b.call,(r,e,t)=>[[r,e,t],(o,n)=>{n(o.output)}]);var Q=r=>e=>new Promise((t,o)=>{r(b.header,[e],{onSuccess:t,onError:o})});var U=require("@polkadot-api/utils");var L=r=>(e,t,o,n,a,f,p)=>{if(t.length===0)return f(),U.noop;let l=r(b.storage,[e,t,o],{onSuccess:(d,u)=>{if(d.result==="limitReached"||d.discardedItems===t.length)return a(new y);let c=u(d.operationId,{next:i=>{switch(i.event){case"operationStorageItems":{n(i.items);break}case"operationStorageDone":{m();break}case"operationError":{s(new x(i.error));break}case"operationInaccessible":{s(new O);break}default:r(b.continue,[i.operationId])}},error:a});l=()=>{c(),r(b.stopOperation,[d.operationId])};let s=i=>{l=U.noop,c(),a(i)},m=()=>{l=U.noop,c(),f()};p(d.discardedItems)},onError:a});return()=>{l()}};var V=r=>{let e=L(r);return v((t,o,n,a,f,p)=>{let l=a.startsWith("descendants"),d=l?[]:null,c=e(n,[{key:f,type:a}],p??null,l?s=>{d.push(s)}:s=>{d=s[0]?.[a]},o,()=>{try{t(l?d.flat():d)}catch(s){o(s)}},s=>{s>0&&(c(),o(new y))});return c})};var X=r=>e=>e.length>0?new Promise((t,o)=>{r(b.unpin,[e],{onSuccess(){t()},onError:o})}):Promise.resolve();var C=class extends Error{constructor(){super("Client destroyed"),this.name="DestroyedError"}};function pe(r){return r.operationId!==void 0}function J(r){return(e,t,o)=>{let n=k(),a=new Set,f=z(),p=f.promise,l=i=>{if(pe(i))return n.has(i.operationId)||console.warn("Uknown operationId on",i),n.next(i.operationId,i);if(i.event!=="stop"){if(i.event==="initialized")return t({type:i.event,finalizedBlockHashes:"finalizedBlockHash"in i?[i.finalizedBlockHash]:i.finalizedBlockHashes,finalizedBlockRuntime:i.finalizedBlockRuntime});let{event:g,...R}=i;return t({type:g,...R})}o(new P),s(!1)},d=i=>{o(i),s(!(i instanceof C))},u=(i,g)=>{let R=g(b.followEvent,i,{next:l,error:d});s=(E=!0)=>{p=null,s=h,R(),E&&r(b.unfollow,[i]),n.errorAll(new w),a.forEach(S=>{S()}),a.clear()},p=i,f.res(i)},c=i=>{i instanceof C?s(!1):o(i),p=null,f.res(i)},s=r(b.follow,[e],{onSuccess:u,onError:c}),m=(i,g,R)=>{let E=()=>{R?.onError(new w)};if(p===null)return E(),h;let S=T=>{if(!R)return r(i,[T,...g]);a.add(E);let B=(I,N)=>p===null?(N.error(new w),h):(n.subscribe(I,N),()=>{n.unsubscribe(I)}),_=r(i,[T,...g],{onSuccess:I=>{a.delete(E),R.onSuccess(I,B)},onError:I=>{a.delete(E),R.onError(I)}});return()=>{a.delete(E),_()}};if(typeof p=="string")return S(p);let D=h;return p.then(T=>{if(T instanceof Error)return E();p&&(D=S(T))}),()=>{D()}};return{unfollow(){s(),p=null},body:G(m),call:K(m),header:Q(m),storage:V(m),storageSubscription:L(m),unpin:X(m),_request:m}}}var q=class extends Error{constructor(t){super(t.message);$(this,"code");$(this,"data");this.code=t.code,this.data=t.data,this.name="RpcError"}};var le=1,Y=r=>{let e=le++,t=new Map,o=k(),n=null,a=(u,c,s)=>{n.send(JSON.stringify({jsonrpc:"2.0",id:u,method:c,params:s}))};function f(u){try{let c,s,m,i,g,R=JSON.parse(u);if({id:c,result:s,error:m,params:i}=R,c){let S=t.get(c);return S?(t.delete(c),m?S.onError(new q(m)):S.onSuccess(s,(D,T,B)=>{let _=D+T;return o.subscribe(_,B),()=>{o.unsubscribe(_)}})):void 0}if({subscription:g,result:s,error:m}=i,!g||!m&&!Object.hasOwn(i,"result"))throw 0;let E=R.method+g;m?o.error(E,new q(m)):o.next(E,s)}catch(c){console.warn("Error parsing incomming message: "+u),console.error(c)}}n=r(f);let p=()=>{n?.disconnect(),n=null,o.errorAll(new C),t.forEach(u=>u.onError(new C)),t.clear()},l=1;return{request:(u,c,s)=>{if(!n)throw new Error("Not connected");let m=`${e}-${l++}`;return s&&t.set(m,s),a(m,u,c),()=>{t.delete(m)}},disconnect:p}};var Z=r=>{let e=v((o,n,a,f)=>r(a,f,{onSuccess:o,onError:n})),t=null;return async()=>t||(t=Promise.all([e(F.chainName,[]),e(F.genesisHash,[]),e(F.properties,[])]).then(([o,n,a])=>({name:o,genesisHash:n,properties:a})))};var ee=(r,e)=>t=>{let o=null;return(n,...a)=>{if(o)return o(n,...a);let f=!0,p=()=>{f=!1};return r.then(l=>{if(o=(u,...c)=>l.has(u)?e(u,...c):(c[1]?.onError(new Error(`Unsupported method ${u}`)),h),l.has(n))return;let d=n.split("_");if(d[1]==="v1"){if(d[1]="unstable",n=d.join("_"),l.has(n))Object.entries(t).forEach(([u,c])=>{t[u]=c.replace("_v1_","_unstable_")});else if(d[0]==="transaction"){let u,c,s=["transactionWatch","transaction"].find(m=>(c=["v1","unstable"].find(i=>l.has(u=`${m}_${i}_unwatch`)),!!c));s&&(t.broadcast=`${s}_${c}_submitAndWatch`,t.stop=u)}}}).then(()=>{f&&(p=o(n,...a))}),()=>{p()}}};var ue=r=>{let e=Y(r),t=v((a,f,p,l)=>e.request(p,l,{onSuccess:a,onError:f})),o=t("rpc_methods",[]).then(a=>new Set(Array.isArray(a)?a:a.methods),()=>new Set),n=ee(o,e.request);return{chainHead:J(n(b)),transaction:M(n(A)),getChainSpecData:Z(n(F)),destroy:()=>{e.disconnect()},request:t,_request:e.request}};
1
+ "use strict";var W=Object.defineProperty;var re=Object.getOwnPropertyDescriptor;var te=Object.getOwnPropertyNames;var ne=Object.prototype.hasOwnProperty;var oe=(r,e,t)=>e in r?W(r,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):r[e]=t;var ie=(r,e)=>{for(var t in e)W(r,t,{get:e[t],enumerable:!0})},se=(r,e,t,o)=>{if(e&&typeof e=="object"||typeof e=="function")for(let n of te(e))!ne.call(r,n)&&n!==t&&W(r,n,{get:()=>e[n],enumerable:!(o=re(e,n))||o.enumerable});return r};var ae=r=>se(W({},"__esModule",{value:!0}),r);var B=(r,e,t)=>(oe(r,typeof e!="symbol"?e+"":e,t),t);var me={};ie(me,{DestroyedError:()=>S,DisjointError:()=>w,OperationError:()=>x,OperationInaccessibleError:()=>O,OperationLimitError:()=>C,RpcError:()=>I,StopError:()=>P,createClient:()=>ue});module.exports=ae(me);var H=require("@polkadot-api/utils"),v=r=>(...e)=>new Promise((t,o)=>{let n=H.noop,[s,m]=e[e.length-1]instanceof AbortSignal?[e.slice(0,e.length-1),e[e.length-1]]:[e],u=()=>{n(),o(new H.AbortError)};m?.addEventListener("abort",u,{once:!0});let R=f=>p=>{n=H.noop,m?.removeEventListener("abort",u),f(p)};n=r(R(t),R(o),...s)});function z(){let r=()=>{},e=()=>{};return{promise:new Promise((o,n)=>{r=o,e=n}),res:r,rej:e}}var y=()=>{};var k=()=>{let r=new Map;return{has:r.has.bind(r),subscribe(e,t){r.set(e,t)},unsubscribe(e){r.delete(e)},next(e,t){r.get(e)?.next(t)},error(e,t){let o=r.get(e);o&&(r.delete(e),o.error(t))},errorAll(e){let t=[...r.values()];r.clear(),t.forEach(o=>{o.error(e)})}}};var b={body:"",call:"",continue:"",follow:"",header:"",stopOperation:"",storage:"",unfollow:"",unpin:"",followEvent:""},F={chainName:"",genesisHash:"",properties:""},A={broadcast:"",stop:""},ce={submitAndWatch:"",unwatch:""};Object.entries({chainHead:b,chainSpec:F,transaction:A,transactionWatch:ce}).forEach(([r,e])=>{Object.keys(e).forEach(t=>{e[t]=`${r}_v1_${t}`})});var M=r=>(e,t)=>{let o=r(A.broadcast,[e],{onSuccess:n=>{o=n===null?y:()=>{r(A.stop,[n])},n===null&&t(new Error("Max # of broadcasted transactions has been reached"))},onError:t});return()=>{o()}};var P=class extends Error{constructor(){super("ChainHead stopped"),this.name="StopError"}},w=class extends Error{constructor(){super("ChainHead disjointed"),this.name="DisjointError"}},C=class extends Error{constructor(){super("ChainHead operations limit reached"),this.name="OperationLimitError"}},x=class extends Error{constructor(e){super(e),this.name="OperationError"}},O=class extends Error{constructor(){super("ChainHead operation inaccessible"),this.name="OperationInaccessibleError"}};var j=(r,e)=>t=>v((o,n,...s)=>{let m=!0,u=()=>{m=!1},[R,f]=e(...s);return t(r,R,{onSuccess:(p,l)=>{if(p.result==="limitReached")return n(new C);let{operationId:a}=p,c=()=>{t(b.stopOperation,[a])};if(!m)return c();let i=y,g=d=>{m=!1,i(),o(d)},h=d=>{m=!1,i(),n(d)};i=l(a,{next:d=>{let E=d;E.event==="operationError"?n(new x(E.error)):E.event==="operationInaccessible"?n(new O):f(d,g,h)},error:h}),u=()=>{m&&(i(),c())}},onError:n}),()=>{u()}});var N=j(b.body,r=>[[r],(e,t)=>{t(e.value)}]);var G=j(b.call,(r,e,t)=>[[r,e,t],(o,n)=>{n(o.output)}]);var K=r=>e=>new Promise((t,o)=>{r(b.header,[e],{onSuccess:t,onError:o})});var U=require("@polkadot-api/utils");var L=r=>(e,t,o,n,s,m,u)=>{if(t.length===0)return m(),U.noop;let R=!0,f=()=>{R=!1};return r(b.storage,[e,t,o],{onSuccess:(p,l)=>{if(p.result==="limitReached"||p.discardedItems===t.length)return s(new C);let{operationId:a}=p,c=()=>{r(b.stopOperation,[a])};if(!R)return c();let i=l(p.operationId,{next:d=>{switch(d.event){case"operationStorageItems":{n(d.items);break}case"operationStorageDone":{h();break}case"operationError":{g(new x(d.error));break}case"operationInaccessible":{g(new O);break}default:r(b.continue,[d.operationId])}},error:s});f=()=>{i(),r(b.stopOperation,[p.operationId])};let g=d=>{f=U.noop,i(),s(d)},h=()=>{f=U.noop,i(),m()};u(p.discardedItems)},onError:s}),()=>{f()}};var Q=r=>{let e=L(r);return v((t,o,n,s,m,u)=>{let R=s.startsWith("descendants"),f=R?[]:null,l=e(n,[{key:m,type:s}],u??null,R?a=>{f.push(a)}:a=>{f=a[0]?.[s]},o,()=>{try{t(R?f.flat():f)}catch(a){o(a)}},a=>{a>0&&(l(),o(new C))});return l})};var V=r=>e=>e.length>0?new Promise((t,o)=>{r(b.unpin,[e],{onSuccess(){t()},onError:o})}):Promise.resolve();var S=class extends Error{constructor(){super("Client destroyed"),this.name="DestroyedError"}};function pe(r){return r.operationId!==void 0}function $(r){return(e,t,o)=>{let n=k(),s=new Set,m=z(),u=m.promise,R=i=>{if(pe(i))return n.has(i.operationId)||console.warn("Uknown operationId on",i),n.next(i.operationId,i);if(i.event!=="stop"){if(i.event==="initialized")return t({type:i.event,finalizedBlockHashes:"finalizedBlockHash"in i?[i.finalizedBlockHash]:i.finalizedBlockHashes,finalizedBlockRuntime:i.finalizedBlockRuntime});let{event:g,...h}=i;return t({type:g,...h})}o(new P),a(!1)},f=i=>{o(i),a(!(i instanceof S))},p=(i,g)=>{let h=g(i,{next:R,error:f});a=(d=!0)=>{u=null,a=y,h(),d&&r(b.unfollow,[i]),n.errorAll(new w),s.forEach(E=>{E()}),s.clear()},u=i,m.res(i)},l=i=>{i instanceof S?a(!1):o(i),u=null,m.res(i)},a=r(b.follow,[e],{onSuccess:p,onError:l}),c=(i,g,h)=>{let d=()=>{h?.onError(new w)};if(u===null)return d(),y;let E=T=>{if(!h)return r(i,[T,...g]);s.add(d);let _=(q,J)=>u===null?(J.error(new w),y):(n.subscribe(q,J),()=>{n.unsubscribe(q)}),ee=r(i,[T,...g],{onSuccess:q=>{s.delete(d),h.onSuccess(q,_)},onError:q=>{s.delete(d),h.onError(q)}});return()=>{s.delete(d),ee()}};if(typeof u=="string")return E(u);let D=y;return u.then(T=>{if(T instanceof Error)return d();u&&(D=E(T))}),()=>{D()}};return{unfollow(){a(),u=null},body:N(c),call:G(c),header:K(c),storage:Q(c),storageSubscription:L(c),unpin:V(c),_request:c}}}var I=class extends Error{constructor(t){super(t.message);B(this,"code");B(this,"data");this.code=t.code,this.data=t.data,this.name="RpcError"}};var le=1,X=r=>{let e=le++,t=new Map,o=k(),n=null,s=(p,l,a)=>{n.send(JSON.stringify({jsonrpc:"2.0",id:p,method:l,params:a}))};function m(p){try{let l,a,c,i,g;if({id:l,result:a,error:c,params:i}=JSON.parse(p),l){let E=t.get(l);return E?(t.delete(l),c?E.onError(new I(c)):E.onSuccess(a,(D,T)=>{let _=D;return o.subscribe(_,T),()=>{o.unsubscribe(_)}})):void 0}if({subscription:g,result:a,error:c}=i,!g||!c&&!Object.hasOwn(i,"result"))throw 0;let d=g;c?o.error(d,new I(c)):o.next(d,a)}catch(l){console.warn("Error parsing incomming message: "+p),console.error(l)}}n=r(m);let u=()=>{n?.disconnect(),n=null,o.errorAll(new S),t.forEach(p=>p.onError(new S)),t.clear()},R=1;return{request:(p,l,a)=>{if(!n)throw new Error("Not connected");let c=`${e}-${R++}`;return a&&t.set(c,a),s(c,p,l),()=>{t.delete(c)}},disconnect:u}};var Y=r=>{let e=v((o,n,s,m)=>r(s,m,{onSuccess:o,onError:n})),t=null;return async()=>t||(t=Promise.all([e(F.chainName,[]),e(F.genesisHash,[]),e(F.properties,[])]).then(([o,n,s])=>({name:o,genesisHash:n,properties:s})))};var Z=(r,e)=>t=>{let o={},n=null;return(s,...m)=>{if(n)return n(s,...m);let u=!0,R=()=>{u=!1};return r.then(f=>{if(n=(l,...a)=>{let c=o[l]??l;return f.has(c)?e(c,...a):(a[1]?.onError(new Error(`Unsupported method ${c}`)),y)},f.has(s))return;let p=s.split("_");if(p[1]==="v1"){if(p[1]="unstable",f.has(p.join("_")))Object.values(t).forEach(l=>{o[l]=l.replace("_v1_","_unstable_")});else if(p[0]==="transaction"){let l,a,c=["transactionWatch","transaction"].find(i=>(a=["v1","unstable"].find(g=>f.has(l=`${i}_${g}_unwatch`)),!!a));c&&(o[t.broadcast]=`${c}_${a}_submitAndWatch`,o[t.stop]=l)}}}).then(()=>{u&&(R=n(s,...m))}),()=>{R()}}};var ue=r=>{let e=X(r),t=v((s,m,u,R)=>e.request(u,R,{onSuccess:s,onError:m})),o=t("rpc_methods",[]).then(s=>new Set(Array.isArray(s)?s:s.methods),()=>new Set),n=Z(o,e.request);return{chainHead:$(n(b)),transaction:M(n(A)),getChainSpecData:Y(n(F)),destroy:()=>{e.disconnect()},request:t,_request:e.request}};
2
2
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/index.ts","../../src/internal-utils/abortablePromiseFn.ts","../../src/internal-utils/deferred-promise.ts","../../src/internal-utils/noop.ts","../../src/internal-utils/subscriptions-manager.ts","../../src/methods.ts","../../src/transaction/transaction.ts","../../src/chainhead/errors.ts","../../src/chainhead/operation-promise.ts","../../src/chainhead/body.ts","../../src/chainhead/call.ts","../../src/chainhead/header.ts","../../src/chainhead/storage-subscription.ts","../../src/chainhead/storage.ts","../../src/chainhead/unpin.ts","../../src/client/DestroyedError.ts","../../src/chainhead/chainhead.ts","../../src/client/RpcError.ts","../../src/client/createClient.ts","../../src/chainspec.ts","../../src/request-compatibility-enhancer.ts"],"sourcesContent":["import type { JsonRpcProvider } from \"@polkadot-api/json-rpc-provider\"\nimport { getTransaction } from \"./transaction/transaction\"\nimport { getChainHead } from \"./chainhead\"\nimport {\n ClientRequest,\n ClientRequestCb,\n createClient as createRawClient,\n} from \"./client\"\nimport type { ChainHead } from \"./chainhead\"\nimport type { Transaction } from \"./transaction\"\nimport { UnsubscribeFn } from \"./common-types\"\nimport { abortablePromiseFn } from \"./internal-utils\"\nimport { ChainSpecData, createGetChainSpec } from \"./chainspec\"\nimport { getCompatibilityEnhancer } from \"./request-compatibility-enhancer\"\nimport { chainHead, chainSpec, transaction } from \"./methods\"\n\nexport type * from \"./common-types\"\nexport type * from \"./client\"\nexport type * from \"./transaction\"\nexport type * from \"./chainhead\"\nexport type * from \"./chainspec\"\n\nexport { RpcError, DestroyedError } from \"./client\"\nexport {\n StopError,\n DisjointError,\n OperationError,\n OperationInaccessibleError,\n OperationLimitError,\n} from \"./chainhead\"\n\nexport interface SubstrateClient {\n chainHead: ChainHead\n transaction: Transaction\n destroy: UnsubscribeFn\n getChainSpecData: () => Promise<ChainSpecData>\n request: <T>(\n method: string,\n params: any[],\n abortSignal?: AbortSignal,\n ) => Promise<T>\n _request: <Reply, Notification>(\n method: string,\n params: any[],\n cb?: ClientRequestCb<Reply, Notification>,\n ) => UnsubscribeFn\n}\n\nexport const createClient = (provider: JsonRpcProvider): SubstrateClient => {\n const client = createRawClient(provider)\n\n const request = abortablePromiseFn(\n <T>(\n onSuccess: (value: T) => void,\n onError: (e: any) => void,\n method: string,\n params: any[],\n ) => client.request(method, params, { onSuccess, onError }),\n )\n\n const rpcMethods: Promise<Set<string>> = request<\n { methods: Array<string> } | Array<string>\n >(\"rpc_methods\", []).then(\n (x) => new Set(Array.isArray(x) ? x : x.methods),\n () => new Set(),\n )\n\n const compatibilityEnhancer = getCompatibilityEnhancer(\n rpcMethods,\n client.request,\n )\n\n return {\n chainHead: getChainHead(\n compatibilityEnhancer(chainHead) as ClientRequest<any, any>,\n ),\n transaction: getTransaction(\n compatibilityEnhancer(transaction) as ClientRequest<string, any>,\n ),\n getChainSpecData: createGetChainSpec(\n compatibilityEnhancer(chainSpec) as ClientRequest<any, any>,\n ),\n destroy: () => {\n client.disconnect()\n },\n request,\n _request: client.request,\n }\n}\n","import { AbortError, noop } from \"@polkadot-api/utils\"\nimport { AbortablePromiseFn } from \"../common-types\"\n\nexport const abortablePromiseFn =\n <T, A extends Array<any>>(\n fn: (\n ...args: [...[res: (x: T) => void, rej: (e: any) => void], ...A]\n ) => () => void,\n ): AbortablePromiseFn<A, T> =>\n (...args): Promise<T> =>\n new Promise((res, rej) => {\n let cancel = noop\n\n const [actualArgs, abortSignal] =\n args[args.length - 1] instanceof AbortSignal\n ? ([args.slice(0, args.length - 1), args[args.length - 1]] as [\n A,\n AbortSignal,\n ])\n : ([args] as unknown as [A])\n\n const onAbort = () => {\n cancel()\n rej(new AbortError())\n }\n\n abortSignal?.addEventListener(\"abort\", onAbort, { once: true })\n\n const withCleanup =\n <T>(fn: (x: T) => void): ((x: T) => void) =>\n (x) => {\n cancel = noop\n abortSignal?.removeEventListener(\"abort\", onAbort)\n fn(x)\n }\n\n cancel = fn(...[withCleanup(res), withCleanup(rej), ...actualArgs])\n })\n","export interface DeferredPromise<T> {\n promise: Promise<T>\n res: (value: T) => void\n rej: (err: Error) => void\n}\n\nexport function deferred<T>(): DeferredPromise<T> {\n let res: (value: T) => void = () => {}\n let rej: (err: Error) => void = () => {}\n\n const promise = new Promise<T>((_res, _rej) => {\n res = _res\n rej = _rej\n })\n\n return { promise, res, rej }\n}\n","export const noop = (): void => {}\n","export interface Subscriber<T> {\n next: (data: T) => void\n error: (e: Error) => void\n}\n\nexport const getSubscriptionsManager = <T>() => {\n const subscriptions = new Map<string, Subscriber<T>>()\n\n return {\n has: subscriptions.has.bind(subscriptions),\n subscribe(id: string, subscriber: Subscriber<T>) {\n subscriptions.set(id, subscriber)\n },\n unsubscribe(id: string) {\n subscriptions.delete(id)\n },\n next(id: string, data: T) {\n subscriptions.get(id)?.next(data)\n },\n error(id: string, e: Error) {\n const subscriber = subscriptions.get(id)\n if (subscriber) {\n subscriptions.delete(id)\n subscriber.error(e)\n }\n },\n errorAll(e: Error) {\n const subscribers = [...subscriptions.values()]\n subscriptions.clear()\n subscribers.forEach((s) => {\n s.error(e)\n })\n },\n }\n}\n\nexport type SubscriptionManager<T> = ReturnType<\n typeof getSubscriptionsManager<T>\n>\n","export const chainHead = {\n body: \"\",\n call: \"\",\n continue: \"\",\n follow: \"\",\n header: \"\",\n stopOperation: \"\",\n storage: \"\",\n unfollow: \"\",\n unpin: \"\",\n followEvent: \"\",\n}\n\nexport const chainSpec = {\n chainName: \"\",\n genesisHash: \"\",\n properties: \"\",\n}\n\nexport const transaction = {\n broadcast: \"\",\n stop: \"\",\n}\n\nexport const transactionWatch = {\n submitAndWatch: \"\",\n unwatch: \"\",\n}\n\nObject.entries({ chainHead, chainSpec, transaction, transactionWatch }).forEach(\n ([fnGroupName, methods]) => {\n Object.keys(methods).forEach((methodName) => {\n ;(methods as any)[methodName] = `${fnGroupName}_v1_${methodName}`\n })\n },\n)\n","import { noop } from \"@/internal-utils\"\nimport { type ClientRequest } from \"../client\"\nimport { transaction } from \"@/methods\"\n\nexport const getTransaction =\n (request: ClientRequest<string, any>) =>\n (tx: string, error: (e: Error) => void) => {\n let cancel = request(transaction.broadcast, [tx], {\n onSuccess: (subscriptionId) => {\n cancel =\n subscriptionId === null\n ? noop\n : () => {\n request(transaction.stop, [subscriptionId])\n }\n\n if (subscriptionId === null) {\n error(new Error(\"Max # of broadcasted transactions has been reached\"))\n }\n },\n onError: error,\n })\n\n return () => {\n cancel()\n }\n }\n","export class StopError extends Error {\n constructor() {\n super(\"ChainHead stopped\")\n this.name = \"StopError\"\n }\n}\n\nexport class DisjointError extends Error {\n constructor() {\n super(\"ChainHead disjointed\")\n this.name = \"DisjointError\"\n }\n}\n\nexport class OperationLimitError extends Error {\n constructor() {\n super(\"ChainHead operations limit reached\")\n this.name = \"OperationLimitError\"\n }\n}\n\nexport class OperationError extends Error {\n constructor(error: string) {\n super(error)\n this.name = \"OperationError\"\n }\n}\n\nexport class OperationInaccessibleError extends Error {\n constructor() {\n super(\"ChainHead operation inaccessible\")\n this.name = \"OperationInaccessibleError\"\n }\n}\n","import { abortablePromiseFn, noop } from \"@/internal-utils\"\nimport {\n CommonOperationEventsRpc,\n OperationResponseRpc,\n} from \"./json-rpc-types\"\nimport {\n OperationError,\n OperationInaccessibleError,\n OperationLimitError,\n} from \"./errors\"\nimport { ClientInnerRequest } from \"./public-types\"\nimport { chainHead } from \"@/methods\"\n\nexport const createOperationPromise =\n <I extends { operationId: string; event: string }, O, A extends Array<any>>(\n operationName: () => string,\n factory: (\n ...args: A\n ) => [\n Array<any>,\n (e: I, res: (x: O) => void, rej: (e: Error) => void) => void,\n ],\n ) =>\n (\n request: ClientInnerRequest<\n OperationResponseRpc,\n I | CommonOperationEventsRpc\n >,\n ) =>\n abortablePromiseFn<O, A>((res, rej, ...args) => {\n const [requestArgs, logicCb] = factory(...args)\n let cancel = request(operationName(), requestArgs, {\n onSuccess: (response, followSubscription) => {\n if (response.result === \"limitReached\") {\n cancel = noop\n return rej(new OperationLimitError())\n }\n\n let isOperationGoing = true\n let done = noop\n const _res = (x: O) => {\n isOperationGoing = false\n done()\n res(x)\n }\n const _rej = (x: Error) => {\n isOperationGoing = false\n done()\n rej(x)\n }\n\n done = followSubscription(response.operationId, {\n next: (e) => {\n const _e = e as CommonOperationEventsRpc\n if (_e.event === \"operationError\") {\n rej(new OperationError(_e.error))\n } else if (_e.event === \"operationInaccessible\") {\n rej(new OperationInaccessibleError())\n } else {\n logicCb(e as I, _res, _rej)\n }\n },\n error: _rej,\n })\n\n cancel = () => {\n if (!isOperationGoing) return\n done()\n request(chainHead.stopOperation, [response.operationId])\n }\n },\n onError: rej,\n })\n\n return () => {\n cancel()\n }\n })\n","import { chainHead } from \"@/methods\"\nimport type { OperationBodyDoneRpc } from \"./json-rpc-types\"\nimport { createOperationPromise } from \"./operation-promise\"\n\nexport const createBodyFn = createOperationPromise(\n () => chainHead.body,\n (hash: string) => [\n [hash],\n (e: OperationBodyDoneRpc, res: (x: Array<string>) => void) => {\n res(e.value)\n },\n ],\n)\n","import { chainHead } from \"@/methods\"\nimport type { OperationCallDoneRpc } from \"./json-rpc-types\"\nimport { createOperationPromise } from \"./operation-promise\"\n\nexport const createCallFn = createOperationPromise(\n () => chainHead.call,\n (hash: string, fnName: string, callParameters: string) => [\n [hash, fnName, callParameters],\n (e: OperationCallDoneRpc, res: (output: string) => void) => {\n res(e.output)\n },\n ],\n)\n","import { chainHead } from \"@/methods\"\nimport { ClientInnerRequest } from \"./public-types\"\n\nexport const createHeaderFn =\n (request: ClientInnerRequest<string, unknown>) => (hash: string) =>\n new Promise<string>((res, rej) => {\n request(chainHead.header, [hash], {\n onSuccess: res,\n onError: rej,\n })\n })\n","import { noop } from \"@polkadot-api/utils\"\nimport {\n ClientInnerRequest,\n FollowResponse,\n OperationError,\n OperationInaccessibleError,\n OperationLimitError,\n} from \"..\"\nimport {\n CommonOperationEventsRpc,\n LimitReachedRpc,\n OperationStorageDoneRpc,\n OperationStorageItemsRpc,\n OperationWaitingForContinueRpc,\n OperationStorageStartedRpc,\n} from \"./json-rpc-types\"\nimport { chainHead } from \"@/methods\"\n\nexport const createStorageCb =\n (\n request: ClientInnerRequest<\n OperationStorageStartedRpc | LimitReachedRpc,\n | CommonOperationEventsRpc\n | OperationStorageItemsRpc\n | OperationStorageDoneRpc\n | OperationWaitingForContinueRpc\n >,\n ): FollowResponse[\"storageSubscription\"] =>\n (hash, inputs, childTrie, onItems, onError, onDone, onDiscardedItems) => {\n if (inputs.length === 0) {\n onDone()\n return noop\n }\n\n let cancel = request(chainHead.storage, [hash, inputs, childTrie], {\n onSuccess: (response, followSubscription) => {\n if (\n response.result === \"limitReached\" ||\n response.discardedItems === inputs.length\n )\n return onError(new OperationLimitError())\n\n const doneListening = followSubscription(response.operationId, {\n next: (event) => {\n switch (event.event) {\n case \"operationStorageItems\": {\n onItems(event.items)\n break\n }\n case \"operationStorageDone\": {\n _onDone()\n break\n }\n case \"operationError\": {\n _onError(new OperationError(event.error))\n break\n }\n case \"operationInaccessible\": {\n _onError(new OperationInaccessibleError())\n break\n }\n default:\n request(chainHead.continue, [event.operationId])\n }\n },\n error: onError,\n })\n\n cancel = () => {\n doneListening()\n request(chainHead.stopOperation, [response.operationId])\n }\n\n const _onError = (e: Error) => {\n cancel = noop\n doneListening()\n onError(e)\n }\n\n const _onDone = () => {\n cancel = noop\n doneListening()\n onDone()\n }\n\n onDiscardedItems(response.discardedItems)\n },\n onError,\n })\n\n return () => {\n cancel()\n }\n }\n","import { ClientInnerRequest, FollowResponse, OperationLimitError } from \"..\"\nimport type {\n CommonOperationEventsRpc,\n LimitReachedRpc,\n OperationStorageDoneRpc,\n OperationStorageItemsRpc,\n OperationWaitingForContinueRpc,\n OperationStorageStartedRpc,\n} from \"./json-rpc-types\"\nimport { abortablePromiseFn } from \"@/internal-utils\"\nimport { createStorageCb } from \"./storage-subscription\"\n\nexport const createStorageFn = (\n request: ClientInnerRequest<\n OperationStorageStartedRpc | LimitReachedRpc,\n | CommonOperationEventsRpc\n | OperationStorageItemsRpc\n | OperationStorageDoneRpc\n | OperationWaitingForContinueRpc\n >,\n): FollowResponse[\"storage\"] => {\n const cbStore = createStorageCb(request)\n return abortablePromiseFn((resolve, reject, hash, type, key, childTrie) => {\n const isDescendants = type.startsWith(\"descendants\")\n let result: any = isDescendants ? [] : null\n\n const onItems: Parameters<typeof cbStore>[3] = isDescendants\n ? (items) => {\n result.push(items)\n }\n : (items) => {\n result = items[0]?.[type as \"value\"]\n }\n\n const cancel = cbStore(\n hash,\n [{ key, type }],\n childTrie ?? null,\n onItems,\n reject,\n () => {\n try {\n resolve(isDescendants ? result.flat() : result)\n } catch (e) {\n reject(e)\n }\n },\n (nDiscarded) => {\n if (nDiscarded > 0) {\n cancel()\n reject(new OperationLimitError())\n }\n },\n )\n return cancel\n })\n}\n","import { chainHead } from \"@/methods\"\nimport { ClientInnerRequest } from \"./public-types\"\n\nexport const createUnpinFn =\n (request: ClientInnerRequest<null, unknown>) => (hashes: string[]) =>\n hashes.length > 0\n ? new Promise<void>((res, rej) => {\n request(chainHead.unpin, [hashes], {\n onSuccess() {\n res()\n },\n onError: rej,\n })\n })\n : Promise.resolve()\n","export class DestroyedError extends Error {\n constructor() {\n super(\"Client destroyed\")\n this.name = \"DestroyedError\"\n }\n}\n","import type { ClientRequest, FollowSubscriptionCb } from \"@/client\"\nimport type {\n FollowEventWithRuntimeRpc,\n FollowEventWithoutRuntimeRpc,\n OperationEventsRpc,\n StopRpc,\n} from \"./json-rpc-types\"\nimport type {\n ChainHead,\n ClientInnerRequest,\n FollowEventWithoutRuntime,\n FollowEventWithRuntime,\n FollowResponse,\n} from \"./public-types\"\nimport {\n Subscriber,\n getSubscriptionsManager,\n noop,\n deferred,\n} from \"@/internal-utils\"\nimport { createBodyFn } from \"./body\"\nimport { createCallFn } from \"./call\"\nimport { createHeaderFn } from \"./header\"\nimport { createStorageFn } from \"./storage\"\nimport { createUnpinFn } from \"./unpin\"\nimport { DisjointError, StopError } from \"./errors\"\nimport { createStorageCb } from \"./storage-subscription\"\nimport { DestroyedError } from \"@/client/DestroyedError\"\nimport { chainHead } from \"@/methods\"\n\ntype FollowEventRpc =\n | FollowEventWithRuntimeRpc\n | FollowEventWithoutRuntimeRpc\n | OperationEventsRpc\n | StopRpc\n\nfunction isOperationEvent(event: FollowEventRpc): event is OperationEventsRpc {\n return (event as OperationEventsRpc).operationId !== undefined\n}\n\nexport function getChainHead(\n request: ClientRequest<string, FollowEventRpc>,\n): ChainHead {\n return (\n withRuntime: boolean,\n onFollowEvent:\n | ((event: FollowEventWithoutRuntime) => void)\n | ((event: FollowEventWithRuntime) => void),\n onFollowError: (e: Error) => void,\n ): FollowResponse => {\n const subscriptions = getSubscriptionsManager<OperationEventsRpc>()\n\n const ongoingRequests = new Set<() => void>()\n const deferredFollow = deferred<string | Error>()\n let followSubscription: Promise<string | Error> | string | null =\n deferredFollow.promise\n\n const onAllFollowEventsNext = (event: FollowEventRpc) => {\n if (isOperationEvent(event)) {\n if (!subscriptions.has(event.operationId))\n console.warn(\"Uknown operationId on\", event)\n\n return subscriptions.next(event.operationId, event)\n }\n\n if (event.event !== \"stop\") {\n if (event.event === \"initialized\") {\n return onFollowEvent({\n type: event.event,\n finalizedBlockHashes:\n \"finalizedBlockHash\" in event\n ? [event.finalizedBlockHash]\n : event.finalizedBlockHashes,\n finalizedBlockRuntime: (event as any).finalizedBlockRuntime,\n })\n }\n\n const { event: type, ...rest } = event\n // This is kinda dangerous, but YOLO\n return onFollowEvent({ type, ...rest } as any)\n }\n\n onFollowError(new StopError())\n unfollow(false)\n }\n\n const onAllFollowEventsError = (error: Error) => {\n onFollowError(error)\n unfollow(!(error instanceof DestroyedError))\n }\n\n const onFollowRequestSuccess = (\n subscriptionId: string,\n follow: FollowSubscriptionCb<FollowEventRpc>,\n ) => {\n const done = follow(chainHead.followEvent, subscriptionId, {\n next: onAllFollowEventsNext,\n error: onAllFollowEventsError,\n })\n\n unfollow = (sendUnfollow = true) => {\n followSubscription = null\n unfollow = noop\n done()\n sendUnfollow && request(chainHead.unfollow, [subscriptionId])\n subscriptions.errorAll(new DisjointError())\n ongoingRequests.forEach((cb) => {\n cb()\n })\n ongoingRequests.clear()\n }\n\n followSubscription = subscriptionId\n deferredFollow.res(subscriptionId)\n }\n\n const onFollowRequestError = (e: Error) => {\n if (e instanceof DestroyedError) {\n unfollow(false)\n } else {\n onFollowError(e)\n }\n followSubscription = null\n deferredFollow.res(e)\n }\n\n let unfollow: (internal?: boolean) => void = request(\n chainHead.follow,\n [withRuntime],\n { onSuccess: onFollowRequestSuccess, onError: onFollowRequestError },\n )\n\n const fRequest: ClientInnerRequest<any, any> = (method, params, cb) => {\n const disjoint = () => {\n cb?.onError(new DisjointError())\n }\n\n if (followSubscription === null) {\n disjoint()\n return noop\n }\n\n const onSubscription = (subscription: string) => {\n if (!cb) return request(method, [subscription, ...params])\n\n ongoingRequests.add(disjoint)\n\n const onSubscribeOperation = (\n operationId: string,\n subscriber: Subscriber<any>,\n ) => {\n if (followSubscription === null) {\n subscriber.error(new DisjointError())\n return noop\n }\n\n subscriptions.subscribe(operationId, subscriber)\n\n return () => {\n subscriptions.unsubscribe(operationId)\n }\n }\n\n const cleanup = request(method, [subscription, ...params], {\n onSuccess: (response) => {\n ongoingRequests.delete(disjoint)\n cb.onSuccess(response, onSubscribeOperation)\n },\n onError: (e) => {\n ongoingRequests.delete(disjoint)\n cb.onError(e)\n },\n })\n\n return () => {\n ongoingRequests.delete(disjoint)\n cleanup()\n }\n }\n\n if (typeof followSubscription === \"string\")\n return onSubscription(followSubscription)\n\n let onCancel = noop\n followSubscription.then((x) => {\n if (x instanceof Error) return disjoint()\n if (followSubscription) onCancel = onSubscription(x)\n })\n\n return () => {\n onCancel()\n }\n }\n\n return {\n unfollow() {\n unfollow()\n followSubscription = null\n },\n body: createBodyFn(fRequest),\n call: createCallFn(fRequest),\n header: createHeaderFn(fRequest),\n storage: createStorageFn(fRequest),\n storageSubscription: createStorageCb(fRequest),\n unpin: createUnpinFn(fRequest),\n _request: fRequest,\n }\n }\n}\n","export interface IRpcError {\n code: number\n message: string\n data?: any\n}\n\nexport class RpcError extends Error implements IRpcError {\n code\n data\n constructor(e: IRpcError) {\n super(e.message)\n this.code = e.code\n this.data = e.data\n this.name = \"RpcError\"\n }\n}\n","import {\n JsonRpcConnection,\n JsonRpcProvider,\n} from \"@polkadot-api/json-rpc-provider\"\nimport { UnsubscribeFn } from \"../common-types\"\nimport { RpcError, IRpcError } from \"./RpcError\"\nimport { getSubscriptionsManager, Subscriber } from \"@/internal-utils\"\nimport { DestroyedError } from \"./DestroyedError\"\n\nexport type FollowSubscriptionCb<T> = (\n methodName: string,\n subscriptionId: string,\n cb: Subscriber<T>,\n) => UnsubscribeFn\n\nexport type ClientRequestCb<T, TT> = {\n onSuccess: (result: T, followSubscription: FollowSubscriptionCb<TT>) => void\n onError: (e: Error) => void\n}\n\nexport type ClientRequest<T, TT> = (\n method: string,\n params: Array<any>,\n cb?: ClientRequestCb<T, TT>,\n) => UnsubscribeFn\n\nexport interface Client {\n disconnect: () => void\n request: ClientRequest<any, any>\n}\n\nlet nextClientId = 1\nexport const createClient = (gProvider: JsonRpcProvider): Client => {\n let clientId = nextClientId++\n const responses = new Map<string, ClientRequestCb<any, any>>()\n const subscriptions = getSubscriptionsManager()\n\n let connection: JsonRpcConnection | null = null\n\n const send = (\n id: string,\n method: string,\n params: Array<boolean | string | number | null>,\n ) => {\n connection!.send(\n JSON.stringify({\n jsonrpc: \"2.0\",\n id,\n method,\n params,\n }),\n )\n }\n\n function onMessage(message: string): void {\n try {\n let id: string,\n result,\n error: IRpcError | undefined,\n params: { subscription: any; result: any; error?: IRpcError },\n subscription: string\n\n const parsed = JSON.parse(message)\n ;({ id, result, error, params } = parsed)\n\n if (id) {\n const cb = responses.get(id)\n if (!cb) return\n\n responses.delete(id)\n\n return error\n ? cb.onError(new RpcError(error))\n : cb.onSuccess(result, (methodName, opaqueId, subscriber) => {\n const subscriptionId = methodName + opaqueId\n subscriptions.subscribe(subscriptionId, subscriber)\n return () => {\n subscriptions.unsubscribe(subscriptionId)\n }\n })\n }\n\n // at this point, it means that it should be a notification\n ;({ subscription, result, error } = params)\n if (!subscription || (!error && !Object.hasOwn(params, \"result\"))) throw 0\n\n const subscriptionId = parsed.method + subscription\n\n if (error) {\n subscriptions.error(subscriptionId, new RpcError(error!))\n } else {\n subscriptions.next(subscriptionId, result)\n }\n } catch (e) {\n console.warn(\"Error parsing incomming message: \" + message)\n console.error(e)\n }\n }\n connection = gProvider(onMessage)\n\n const disconnect = () => {\n connection?.disconnect()\n connection = null\n subscriptions.errorAll(new DestroyedError())\n responses.forEach((r) => r.onError(new DestroyedError()))\n responses.clear()\n }\n\n let nextId = 1\n const request = <T, TT>(\n method: string,\n params: Array<any>,\n cb?: ClientRequestCb<T, TT>,\n ): UnsubscribeFn => {\n if (!connection) throw new Error(\"Not connected\")\n const id = `${clientId}-${nextId++}`\n\n if (cb) responses.set(id, cb)\n send(id, method, params)\n\n return (): void => {\n responses.delete(id)\n }\n }\n\n return {\n request,\n disconnect,\n }\n}\n","import { ClientRequest } from \"./client\"\nimport { abortablePromiseFn } from \"./internal-utils\"\nimport { chainSpec } from \"./methods\"\n\nexport interface ChainSpecData {\n name: string\n genesisHash: string\n properties: any\n}\n\nexport const createGetChainSpec = (clientRequest: ClientRequest<any, any>) => {\n const request = abortablePromiseFn(\n <T>(\n onSuccess: (value: T) => void,\n onError: (e: any) => void,\n method: string,\n params: any[],\n ) => clientRequest(method, params, { onSuccess, onError }),\n )\n let cachedPromise: null | Promise<ChainSpecData> = null\n\n return async (): Promise<ChainSpecData> => {\n if (cachedPromise) return cachedPromise\n return (cachedPromise = Promise.all([\n request<string>(chainSpec.chainName, []),\n request<string>(chainSpec.genesisHash, []),\n request<any>(chainSpec.properties, []),\n ]).then(([name, genesisHash, properties]) => ({\n name,\n genesisHash,\n properties,\n })))\n }\n}\n","import type { ClientRequest } from \"@/client\"\nimport { UnsubscribeFn } from \"./common-types\"\nimport { noop } from \"./internal-utils\"\n\nexport const getCompatibilityEnhancer =\n <T, E>(rpcMethodsP: Promise<Set<string>>, request: ClientRequest<T, E>) =>\n (methods: Record<string, string>): ClientRequest<T, E> => {\n let enhancedRequest: ClientRequest<T, E> | null = null\n\n return ((method, ...rest) => {\n if (enhancedRequest) return enhancedRequest(method, ...rest)\n\n let isRunning = true\n let cleanup: UnsubscribeFn = () => {\n isRunning = false\n }\n\n rpcMethodsP\n .then((rpcMethods) => {\n enhancedRequest = (method, ...iRest) => {\n if (rpcMethods.has(method)) return request(method, ...iRest)\n iRest[1]?.onError(new Error(`Unsupported method ${method}`))\n return noop\n }\n\n if (rpcMethods.has(method)) return\n\n const parts = method.split(\"_\")\n if (parts[1] !== \"v1\") return\n\n parts[1] = \"unstable\"\n method = parts.join(\"_\")\n\n if (rpcMethods.has(method))\n Object.entries(methods).forEach(([key, value]) => {\n methods[key] = value.replace(\"_v1_\", \"_unstable_\")\n })\n else if (parts[0] === \"transaction\") {\n // old versions of smoldot and Polkadot-SDK don't support transaction_xx_broadcast\n // some old versions have `transactions_unstable_submitAndWatch` while others have `transaction_xx_submitAndWatch`\n // if we find any of this options, then we will can use them as if they were broadast/stop\n let unwatch: string | undefined\n let version: string | undefined\n\n const txGroup = [\"transactionWatch\", \"transaction\"].find(\n (group) => {\n version = [\"v1\", \"unstable\"].find((v) =>\n rpcMethods.has((unwatch = `${group}_${v}_unwatch`)),\n )\n return !!version\n },\n )\n\n if (txGroup) {\n methods.broadcast = `${txGroup}_${version}_submitAndWatch`\n methods.stop = unwatch!\n }\n }\n })\n .then(() => {\n if (isRunning) cleanup = enhancedRequest!(method, ...rest)\n })\n\n return () => {\n cleanup()\n }\n }) as ClientRequest<T, E>\n }\n"],"mappings":"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","names":["src_exports","__export","DestroyedError","DisjointError","OperationError","OperationInaccessibleError","OperationLimitError","RpcError","StopError","createClient","__toCommonJS","import_utils","abortablePromiseFn","fn","args","res","rej","cancel","actualArgs","abortSignal","onAbort","withCleanup","x","deferred","res","rej","_res","_rej","noop","getSubscriptionsManager","subscriptions","id","subscriber","data","e","subscribers","s","chainHead","chainSpec","transaction","transactionWatch","fnGroupName","methods","methodName","getTransaction","request","tx","error","cancel","transaction","subscriptionId","noop","StopError","DisjointError","OperationLimitError","OperationError","error","OperationInaccessibleError","createOperationPromise","operationName","factory","request","abortablePromiseFn","res","rej","args","requestArgs","logicCb","cancel","response","followSubscription","noop","OperationLimitError","isOperationGoing","done","_res","x","_rej","e","_e","OperationError","OperationInaccessibleError","chainHead","createBodyFn","createOperationPromise","chainHead","hash","res","createCallFn","createOperationPromise","chainHead","hash","fnName","callParameters","e","res","createHeaderFn","request","hash","res","rej","chainHead","import_utils","createStorageCb","request","hash","inputs","childTrie","onItems","onError","onDone","onDiscardedItems","cancel","chainHead","response","followSubscription","OperationLimitError","doneListening","event","_onDone","_onError","OperationError","OperationInaccessibleError","e","createStorageFn","request","cbStore","createStorageCb","abortablePromiseFn","resolve","reject","hash","type","key","childTrie","isDescendants","result","cancel","items","e","nDiscarded","OperationLimitError","createUnpinFn","request","hashes","res","rej","chainHead","DestroyedError","isOperationEvent","event","getChainHead","request","withRuntime","onFollowEvent","onFollowError","subscriptions","getSubscriptionsManager","ongoingRequests","deferredFollow","deferred","followSubscription","onAllFollowEventsNext","type","rest","StopError","unfollow","onAllFollowEventsError","error","DestroyedError","onFollowRequestSuccess","subscriptionId","follow","done","chainHead","sendUnfollow","noop","DisjointError","cb","onFollowRequestError","e","fRequest","method","params","disjoint","onSubscription","subscription","onSubscribeOperation","operationId","subscriber","cleanup","response","onCancel","x","createBodyFn","createCallFn","createHeaderFn","createStorageFn","createStorageCb","createUnpinFn","RpcError","e","__publicField","nextClientId","createClient","gProvider","clientId","responses","subscriptions","getSubscriptionsManager","connection","send","id","method","params","onMessage","message","result","error","subscription","parsed","cb","RpcError","methodName","opaqueId","subscriber","subscriptionId","e","disconnect","DestroyedError","r","nextId","createGetChainSpec","clientRequest","request","abortablePromiseFn","onSuccess","onError","method","params","cachedPromise","chainSpec","name","genesisHash","properties","getCompatibilityEnhancer","rpcMethodsP","request","methods","enhancedRequest","method","rest","isRunning","cleanup","rpcMethods","iRest","noop","parts","key","value","unwatch","version","txGroup","group","v","createClient","provider","client","request","abortablePromiseFn","onSuccess","onError","method","params","rpcMethods","x","compatibilityEnhancer","getCompatibilityEnhancer","getChainHead","chainHead","getTransaction","transaction","createGetChainSpec","chainSpec"]}
1
+ {"version":3,"sources":["../../src/index.ts","../../src/internal-utils/abortablePromiseFn.ts","../../src/internal-utils/deferred-promise.ts","../../src/internal-utils/noop.ts","../../src/internal-utils/subscriptions-manager.ts","../../src/methods.ts","../../src/transaction/transaction.ts","../../src/chainhead/errors.ts","../../src/chainhead/operation-promise.ts","../../src/chainhead/body.ts","../../src/chainhead/call.ts","../../src/chainhead/header.ts","../../src/chainhead/storage-subscription.ts","../../src/chainhead/storage.ts","../../src/chainhead/unpin.ts","../../src/client/DestroyedError.ts","../../src/chainhead/chainhead.ts","../../src/client/RpcError.ts","../../src/client/createClient.ts","../../src/chainspec.ts","../../src/request-compatibility-enhancer.ts"],"sourcesContent":["import type { JsonRpcProvider } from \"@polkadot-api/json-rpc-provider\"\nimport { getTransaction } from \"./transaction/transaction\"\nimport { getChainHead } from \"./chainhead\"\nimport {\n ClientRequest,\n ClientRequestCb,\n createClient as createRawClient,\n} from \"./client\"\nimport type { ChainHead } from \"./chainhead\"\nimport type { Transaction } from \"./transaction\"\nimport { UnsubscribeFn } from \"./common-types\"\nimport { abortablePromiseFn } from \"./internal-utils\"\nimport { ChainSpecData, createGetChainSpec } from \"./chainspec\"\nimport { getCompatibilityEnhancer } from \"./request-compatibility-enhancer\"\nimport { chainHead, chainSpec, transaction } from \"./methods\"\n\nexport type * from \"./common-types\"\nexport type * from \"./client\"\nexport type * from \"./transaction\"\nexport type * from \"./chainhead\"\nexport type * from \"./chainspec\"\n\nexport { RpcError, DestroyedError } from \"./client\"\nexport {\n StopError,\n DisjointError,\n OperationError,\n OperationInaccessibleError,\n OperationLimitError,\n} from \"./chainhead\"\n\nexport interface SubstrateClient {\n chainHead: ChainHead\n transaction: Transaction\n destroy: UnsubscribeFn\n getChainSpecData: () => Promise<ChainSpecData>\n request: <T>(\n method: string,\n params: any[],\n abortSignal?: AbortSignal,\n ) => Promise<T>\n _request: <Reply, Notification>(\n method: string,\n params: any[],\n cb?: ClientRequestCb<Reply, Notification>,\n ) => UnsubscribeFn\n}\n\nexport const createClient = (provider: JsonRpcProvider): SubstrateClient => {\n const client = createRawClient(provider)\n\n const request = abortablePromiseFn(\n <T>(\n onSuccess: (value: T) => void,\n onError: (e: any) => void,\n method: string,\n params: any[],\n ) => client.request(method, params, { onSuccess, onError }),\n )\n\n const rpcMethods: Promise<Set<string>> = request<\n { methods: Array<string> } | Array<string>\n >(\"rpc_methods\", []).then(\n (x) => new Set(Array.isArray(x) ? x : x.methods),\n () => new Set(),\n )\n\n const compatibilityEnhancer = getCompatibilityEnhancer(\n rpcMethods,\n client.request,\n )\n\n return {\n chainHead: getChainHead(\n compatibilityEnhancer(chainHead) as ClientRequest<any, any>,\n ),\n transaction: getTransaction(\n compatibilityEnhancer(transaction) as ClientRequest<string, any>,\n ),\n getChainSpecData: createGetChainSpec(\n compatibilityEnhancer(chainSpec) as ClientRequest<any, any>,\n ),\n destroy: () => {\n client.disconnect()\n },\n request,\n _request: client.request,\n }\n}\n","import { AbortError, noop } from \"@polkadot-api/utils\"\nimport { AbortablePromiseFn } from \"../common-types\"\n\nexport const abortablePromiseFn =\n <T, A extends Array<any>>(\n fn: (\n ...args: [...[res: (x: T) => void, rej: (e: any) => void], ...A]\n ) => () => void,\n ): AbortablePromiseFn<A, T> =>\n (...args): Promise<T> =>\n new Promise((res, rej) => {\n let cancel = noop\n\n const [actualArgs, abortSignal] =\n args[args.length - 1] instanceof AbortSignal\n ? ([args.slice(0, args.length - 1), args[args.length - 1]] as [\n A,\n AbortSignal,\n ])\n : ([args] as unknown as [A])\n\n const onAbort = () => {\n cancel()\n rej(new AbortError())\n }\n\n abortSignal?.addEventListener(\"abort\", onAbort, { once: true })\n\n const withCleanup =\n <T>(fn: (x: T) => void): ((x: T) => void) =>\n (x) => {\n cancel = noop\n abortSignal?.removeEventListener(\"abort\", onAbort)\n fn(x)\n }\n\n cancel = fn(...[withCleanup(res), withCleanup(rej), ...actualArgs])\n })\n","export interface DeferredPromise<T> {\n promise: Promise<T>\n res: (value: T) => void\n rej: (err: Error) => void\n}\n\nexport function deferred<T>(): DeferredPromise<T> {\n let res: (value: T) => void = () => {}\n let rej: (err: Error) => void = () => {}\n\n const promise = new Promise<T>((_res, _rej) => {\n res = _res\n rej = _rej\n })\n\n return { promise, res, rej }\n}\n","export const noop = (): void => {}\n","export interface Subscriber<T> {\n next: (data: T) => void\n error: (e: Error) => void\n}\n\nexport const getSubscriptionsManager = <T>() => {\n const subscriptions = new Map<string, Subscriber<T>>()\n\n return {\n has: subscriptions.has.bind(subscriptions),\n subscribe(id: string, subscriber: Subscriber<T>) {\n subscriptions.set(id, subscriber)\n },\n unsubscribe(id: string) {\n subscriptions.delete(id)\n },\n next(id: string, data: T) {\n subscriptions.get(id)?.next(data)\n },\n error(id: string, e: Error) {\n const subscriber = subscriptions.get(id)\n if (subscriber) {\n subscriptions.delete(id)\n subscriber.error(e)\n }\n },\n errorAll(e: Error) {\n const subscribers = [...subscriptions.values()]\n subscriptions.clear()\n subscribers.forEach((s) => {\n s.error(e)\n })\n },\n }\n}\n\nexport type SubscriptionManager<T> = ReturnType<\n typeof getSubscriptionsManager<T>\n>\n","export const chainHead = {\n body: \"\",\n call: \"\",\n continue: \"\",\n follow: \"\",\n header: \"\",\n stopOperation: \"\",\n storage: \"\",\n unfollow: \"\",\n unpin: \"\",\n followEvent: \"\",\n}\n\nexport const chainSpec = {\n chainName: \"\",\n genesisHash: \"\",\n properties: \"\",\n}\n\nexport const transaction = {\n broadcast: \"\",\n stop: \"\",\n}\n\nexport const transactionWatch = {\n submitAndWatch: \"\",\n unwatch: \"\",\n}\n\nObject.entries({ chainHead, chainSpec, transaction, transactionWatch }).forEach(\n ([fnGroupName, methods]) => {\n Object.keys(methods).forEach((methodName) => {\n ;(methods as any)[methodName] = `${fnGroupName}_v1_${methodName}`\n })\n },\n)\n","import { noop } from \"@/internal-utils\"\nimport { type ClientRequest } from \"../client\"\nimport { transaction } from \"@/methods\"\n\nexport const getTransaction =\n (request: ClientRequest<string, any>) =>\n (tx: string, error: (e: Error) => void) => {\n let cancel = request(transaction.broadcast, [tx], {\n onSuccess: (subscriptionId) => {\n cancel =\n subscriptionId === null\n ? noop\n : () => {\n request(transaction.stop, [subscriptionId])\n }\n\n if (subscriptionId === null) {\n error(new Error(\"Max # of broadcasted transactions has been reached\"))\n }\n },\n onError: error,\n })\n\n return () => {\n cancel()\n }\n }\n","export class StopError extends Error {\n constructor() {\n super(\"ChainHead stopped\")\n this.name = \"StopError\"\n }\n}\n\nexport class DisjointError extends Error {\n constructor() {\n super(\"ChainHead disjointed\")\n this.name = \"DisjointError\"\n }\n}\n\nexport class OperationLimitError extends Error {\n constructor() {\n super(\"ChainHead operations limit reached\")\n this.name = \"OperationLimitError\"\n }\n}\n\nexport class OperationError extends Error {\n constructor(error: string) {\n super(error)\n this.name = \"OperationError\"\n }\n}\n\nexport class OperationInaccessibleError extends Error {\n constructor() {\n super(\"ChainHead operation inaccessible\")\n this.name = \"OperationInaccessibleError\"\n }\n}\n","import { abortablePromiseFn, noop } from \"@/internal-utils\"\nimport {\n CommonOperationEventsRpc,\n OperationResponseRpc,\n} from \"./json-rpc-types\"\nimport {\n OperationError,\n OperationInaccessibleError,\n OperationLimitError,\n} from \"./errors\"\nimport { ClientInnerRequest } from \"./public-types\"\nimport { chainHead } from \"@/methods\"\n\nexport const createOperationPromise =\n <I extends { operationId: string; event: string }, O, A extends Array<any>>(\n operationName: string,\n factory: (\n ...args: A\n ) => [\n Array<any>,\n (e: I, res: (x: O) => void, rej: (e: Error) => void) => void,\n ],\n ) =>\n (\n request: ClientInnerRequest<\n OperationResponseRpc,\n I | CommonOperationEventsRpc\n >,\n ) =>\n abortablePromiseFn<O, A>((res, rej, ...args) => {\n let isRunning = true\n let cancel = () => {\n isRunning = false\n }\n\n const [requestArgs, logicCb] = factory(...args)\n request(operationName, requestArgs, {\n onSuccess: (response, followSubscription) => {\n if (response.result === \"limitReached\")\n return rej(new OperationLimitError())\n\n const { operationId } = response\n const stopOperation = () => {\n request(chainHead.stopOperation, [operationId])\n }\n\n if (!isRunning) return stopOperation()\n\n let done = noop\n const _res = (x: O) => {\n isRunning = false\n done()\n res(x)\n }\n const _rej = (x: Error) => {\n isRunning = false\n done()\n rej(x)\n }\n\n done = followSubscription(operationId, {\n next: (e) => {\n const _e = e as CommonOperationEventsRpc\n if (_e.event === \"operationError\")\n rej(new OperationError(_e.error))\n else if (_e.event === \"operationInaccessible\")\n rej(new OperationInaccessibleError())\n else logicCb(e as I, _res, _rej)\n },\n error: _rej,\n })\n\n cancel = () => {\n if (isRunning) {\n done()\n stopOperation()\n }\n }\n },\n onError: rej,\n })\n\n return () => {\n cancel()\n }\n })\n","import { chainHead } from \"@/methods\"\nimport type { OperationBodyDoneRpc } from \"./json-rpc-types\"\nimport { createOperationPromise } from \"./operation-promise\"\n\nexport const createBodyFn = createOperationPromise(\n chainHead.body,\n (hash: string) => [\n [hash],\n (e: OperationBodyDoneRpc, res: (x: Array<string>) => void) => {\n res(e.value)\n },\n ],\n)\n","import { chainHead } from \"@/methods\"\nimport type { OperationCallDoneRpc } from \"./json-rpc-types\"\nimport { createOperationPromise } from \"./operation-promise\"\n\nexport const createCallFn = createOperationPromise(\n chainHead.call,\n (hash: string, fnName: string, callParameters: string) => [\n [hash, fnName, callParameters],\n (e: OperationCallDoneRpc, res: (output: string) => void) => {\n res(e.output)\n },\n ],\n)\n","import { chainHead } from \"@/methods\"\nimport { ClientInnerRequest } from \"./public-types\"\n\nexport const createHeaderFn =\n (request: ClientInnerRequest<string, unknown>) => (hash: string) =>\n new Promise<string>((res, rej) => {\n request(chainHead.header, [hash], {\n onSuccess: res,\n onError: rej,\n })\n })\n","import { noop } from \"@polkadot-api/utils\"\nimport {\n ClientInnerRequest,\n FollowResponse,\n OperationError,\n OperationInaccessibleError,\n OperationLimitError,\n} from \"..\"\nimport {\n CommonOperationEventsRpc,\n LimitReachedRpc,\n OperationStorageDoneRpc,\n OperationStorageItemsRpc,\n OperationWaitingForContinueRpc,\n OperationStorageStartedRpc,\n} from \"./json-rpc-types\"\nimport { chainHead } from \"@/methods\"\n\nexport const createStorageCb =\n (\n request: ClientInnerRequest<\n OperationStorageStartedRpc | LimitReachedRpc,\n | CommonOperationEventsRpc\n | OperationStorageItemsRpc\n | OperationStorageDoneRpc\n | OperationWaitingForContinueRpc\n >,\n ): FollowResponse[\"storageSubscription\"] =>\n (hash, inputs, childTrie, onItems, onError, onDone, onDiscardedItems) => {\n if (inputs.length === 0) {\n onDone()\n return noop\n }\n\n let isRunning = true\n let cancel = () => {\n isRunning = false\n }\n\n request(chainHead.storage, [hash, inputs, childTrie], {\n onSuccess: (response, followSubscription) => {\n if (\n response.result === \"limitReached\" ||\n response.discardedItems === inputs.length\n )\n return onError(new OperationLimitError())\n\n const { operationId } = response\n const stopOperation = () => {\n request(chainHead.stopOperation, [operationId])\n }\n\n if (!isRunning) return stopOperation()\n\n const doneListening = followSubscription(response.operationId, {\n next: (event) => {\n switch (event.event) {\n case \"operationStorageItems\": {\n onItems(event.items)\n break\n }\n case \"operationStorageDone\": {\n _onDone()\n break\n }\n case \"operationError\": {\n _onError(new OperationError(event.error))\n break\n }\n case \"operationInaccessible\": {\n _onError(new OperationInaccessibleError())\n break\n }\n default:\n request(chainHead.continue, [event.operationId])\n }\n },\n error: onError,\n })\n\n cancel = () => {\n doneListening()\n request(chainHead.stopOperation, [response.operationId])\n }\n\n const _onError = (e: Error) => {\n cancel = noop\n doneListening()\n onError(e)\n }\n\n const _onDone = () => {\n cancel = noop\n doneListening()\n onDone()\n }\n\n onDiscardedItems(response.discardedItems)\n },\n onError,\n })\n\n return () => {\n cancel()\n }\n }\n","import { ClientInnerRequest, FollowResponse, OperationLimitError } from \"..\"\nimport type {\n CommonOperationEventsRpc,\n LimitReachedRpc,\n OperationStorageDoneRpc,\n OperationStorageItemsRpc,\n OperationWaitingForContinueRpc,\n OperationStorageStartedRpc,\n} from \"./json-rpc-types\"\nimport { abortablePromiseFn } from \"@/internal-utils\"\nimport { createStorageCb } from \"./storage-subscription\"\n\nexport const createStorageFn = (\n request: ClientInnerRequest<\n OperationStorageStartedRpc | LimitReachedRpc,\n | CommonOperationEventsRpc\n | OperationStorageItemsRpc\n | OperationStorageDoneRpc\n | OperationWaitingForContinueRpc\n >,\n): FollowResponse[\"storage\"] => {\n const cbStore = createStorageCb(request)\n return abortablePromiseFn((resolve, reject, hash, type, key, childTrie) => {\n const isDescendants = type.startsWith(\"descendants\")\n let result: any = isDescendants ? [] : null\n\n const onItems: Parameters<typeof cbStore>[3] = isDescendants\n ? (items) => {\n result.push(items)\n }\n : (items) => {\n result = items[0]?.[type as \"value\"]\n }\n\n const cancel = cbStore(\n hash,\n [{ key, type }],\n childTrie ?? null,\n onItems,\n reject,\n () => {\n try {\n resolve(isDescendants ? result.flat() : result)\n } catch (e) {\n reject(e)\n }\n },\n (nDiscarded) => {\n if (nDiscarded > 0) {\n cancel()\n reject(new OperationLimitError())\n }\n },\n )\n return cancel\n })\n}\n","import { chainHead } from \"@/methods\"\nimport { ClientInnerRequest } from \"./public-types\"\n\nexport const createUnpinFn =\n (request: ClientInnerRequest<null, unknown>) => (hashes: string[]) =>\n hashes.length > 0\n ? new Promise<void>((res, rej) => {\n request(chainHead.unpin, [hashes], {\n onSuccess() {\n res()\n },\n onError: rej,\n })\n })\n : Promise.resolve()\n","export class DestroyedError extends Error {\n constructor() {\n super(\"Client destroyed\")\n this.name = \"DestroyedError\"\n }\n}\n","import type { ClientRequest, FollowSubscriptionCb } from \"@/client\"\nimport type {\n FollowEventWithRuntimeRpc,\n FollowEventWithoutRuntimeRpc,\n OperationEventsRpc,\n StopRpc,\n} from \"./json-rpc-types\"\nimport type {\n ChainHead,\n ClientInnerRequest,\n FollowEventWithoutRuntime,\n FollowEventWithRuntime,\n FollowResponse,\n} from \"./public-types\"\nimport {\n Subscriber,\n getSubscriptionsManager,\n noop,\n deferred,\n} from \"@/internal-utils\"\nimport { createBodyFn } from \"./body\"\nimport { createCallFn } from \"./call\"\nimport { createHeaderFn } from \"./header\"\nimport { createStorageFn } from \"./storage\"\nimport { createUnpinFn } from \"./unpin\"\nimport { DisjointError, StopError } from \"./errors\"\nimport { createStorageCb } from \"./storage-subscription\"\nimport { DestroyedError } from \"@/client/DestroyedError\"\nimport { chainHead } from \"@/methods\"\n\ntype FollowEventRpc =\n | FollowEventWithRuntimeRpc\n | FollowEventWithoutRuntimeRpc\n | OperationEventsRpc\n | StopRpc\n\nfunction isOperationEvent(event: FollowEventRpc): event is OperationEventsRpc {\n return (event as OperationEventsRpc).operationId !== undefined\n}\n\nexport function getChainHead(\n request: ClientRequest<string, FollowEventRpc>,\n): ChainHead {\n return (\n withRuntime: boolean,\n onFollowEvent:\n | ((event: FollowEventWithoutRuntime) => void)\n | ((event: FollowEventWithRuntime) => void),\n onFollowError: (e: Error) => void,\n ): FollowResponse => {\n const subscriptions = getSubscriptionsManager<OperationEventsRpc>()\n\n const ongoingRequests = new Set<() => void>()\n const deferredFollow = deferred<string | Error>()\n let followSubscription: Promise<string | Error> | string | null =\n deferredFollow.promise\n\n const onAllFollowEventsNext = (event: FollowEventRpc) => {\n if (isOperationEvent(event)) {\n if (!subscriptions.has(event.operationId))\n console.warn(\"Uknown operationId on\", event)\n\n return subscriptions.next(event.operationId, event)\n }\n\n if (event.event !== \"stop\") {\n if (event.event === \"initialized\") {\n return onFollowEvent({\n type: event.event,\n finalizedBlockHashes:\n \"finalizedBlockHash\" in event\n ? [event.finalizedBlockHash]\n : event.finalizedBlockHashes,\n finalizedBlockRuntime: (event as any).finalizedBlockRuntime,\n })\n }\n\n const { event: type, ...rest } = event\n // This is kinda dangerous, but YOLO\n return onFollowEvent({ type, ...rest } as any)\n }\n\n onFollowError(new StopError())\n unfollow(false)\n }\n\n const onAllFollowEventsError = (error: Error) => {\n onFollowError(error)\n unfollow(!(error instanceof DestroyedError))\n }\n\n const onFollowRequestSuccess = (\n subscriptionId: string,\n follow: FollowSubscriptionCb<FollowEventRpc>,\n ) => {\n const done = follow(subscriptionId, {\n next: onAllFollowEventsNext,\n error: onAllFollowEventsError,\n })\n\n unfollow = (sendUnfollow = true) => {\n followSubscription = null\n unfollow = noop\n done()\n sendUnfollow && request(chainHead.unfollow, [subscriptionId])\n subscriptions.errorAll(new DisjointError())\n ongoingRequests.forEach((cb) => {\n cb()\n })\n ongoingRequests.clear()\n }\n\n followSubscription = subscriptionId\n deferredFollow.res(subscriptionId)\n }\n\n const onFollowRequestError = (e: Error) => {\n if (e instanceof DestroyedError) {\n unfollow(false)\n } else {\n onFollowError(e)\n }\n followSubscription = null\n deferredFollow.res(e)\n }\n\n let unfollow: (internal?: boolean) => void = request(\n chainHead.follow,\n [withRuntime],\n { onSuccess: onFollowRequestSuccess, onError: onFollowRequestError },\n )\n\n const fRequest: ClientInnerRequest<any, any> = (method, params, cb) => {\n const disjoint = () => {\n cb?.onError(new DisjointError())\n }\n\n if (followSubscription === null) {\n disjoint()\n return noop\n }\n\n const onSubscription = (subscription: string) => {\n if (!cb) return request(method, [subscription, ...params])\n\n ongoingRequests.add(disjoint)\n\n const onSubscribeOperation = (\n operationId: string,\n subscriber: Subscriber<any>,\n ) => {\n if (followSubscription === null) {\n subscriber.error(new DisjointError())\n return noop\n }\n\n subscriptions.subscribe(operationId, subscriber)\n\n return () => {\n subscriptions.unsubscribe(operationId)\n }\n }\n\n const cleanup = request(method, [subscription, ...params], {\n onSuccess: (response) => {\n ongoingRequests.delete(disjoint)\n cb.onSuccess(response, onSubscribeOperation)\n },\n onError: (e) => {\n ongoingRequests.delete(disjoint)\n cb.onError(e)\n },\n })\n\n return () => {\n ongoingRequests.delete(disjoint)\n cleanup()\n }\n }\n\n if (typeof followSubscription === \"string\")\n return onSubscription(followSubscription)\n\n let onCancel = noop\n followSubscription.then((x) => {\n if (x instanceof Error) return disjoint()\n if (followSubscription) onCancel = onSubscription(x)\n })\n\n return () => {\n onCancel()\n }\n }\n\n return {\n unfollow() {\n unfollow()\n followSubscription = null\n },\n body: createBodyFn(fRequest),\n call: createCallFn(fRequest),\n header: createHeaderFn(fRequest),\n storage: createStorageFn(fRequest),\n storageSubscription: createStorageCb(fRequest),\n unpin: createUnpinFn(fRequest),\n _request: fRequest,\n }\n }\n}\n","export interface IRpcError {\n code: number\n message: string\n data?: any\n}\n\nexport class RpcError extends Error implements IRpcError {\n code\n data\n constructor(e: IRpcError) {\n super(e.message)\n this.code = e.code\n this.data = e.data\n this.name = \"RpcError\"\n }\n}\n","import {\n JsonRpcConnection,\n JsonRpcProvider,\n} from \"@polkadot-api/json-rpc-provider\"\nimport { UnsubscribeFn } from \"../common-types\"\nimport { RpcError, IRpcError } from \"./RpcError\"\nimport { getSubscriptionsManager, Subscriber } from \"@/internal-utils\"\nimport { DestroyedError } from \"./DestroyedError\"\n\nexport type FollowSubscriptionCb<T> = (\n subscriptionId: string,\n cb: Subscriber<T>,\n) => UnsubscribeFn\n\nexport type ClientRequestCb<T, TT> = {\n onSuccess: (result: T, followSubscription: FollowSubscriptionCb<TT>) => void\n onError: (e: Error) => void\n}\n\nexport type ClientRequest<T, TT> = (\n method: string,\n params: Array<any>,\n cb?: ClientRequestCb<T, TT>,\n) => UnsubscribeFn\n\nexport interface Client {\n disconnect: () => void\n request: ClientRequest<any, any>\n}\n\nlet nextClientId = 1\nexport const createClient = (gProvider: JsonRpcProvider): Client => {\n let clientId = nextClientId++\n const responses = new Map<string, ClientRequestCb<any, any>>()\n const subscriptions = getSubscriptionsManager()\n\n let connection: JsonRpcConnection | null = null\n\n const send = (\n id: string,\n method: string,\n params: Array<boolean | string | number | null>,\n ) => {\n connection!.send(\n JSON.stringify({\n jsonrpc: \"2.0\",\n id,\n method,\n params,\n }),\n )\n }\n\n function onMessage(message: string): void {\n try {\n let id: string,\n result,\n error: IRpcError | undefined,\n params: { subscription: any; result: any; error?: IRpcError },\n subscription: string\n\n const parsed = JSON.parse(message)\n ;({ id, result, error, params } = parsed)\n\n if (id) {\n const cb = responses.get(id)\n if (!cb) return\n\n responses.delete(id)\n\n return error\n ? cb.onError(new RpcError(error))\n : cb.onSuccess(result, (opaqueId, subscriber) => {\n const subscriptionId = opaqueId\n subscriptions.subscribe(subscriptionId, subscriber)\n return () => {\n subscriptions.unsubscribe(subscriptionId)\n }\n })\n }\n\n // at this point, it means that it should be a notification\n ;({ subscription, result, error } = params)\n if (!subscription || (!error && !Object.hasOwn(params, \"result\"))) throw 0\n\n const subscriptionId = subscription\n\n if (error) {\n subscriptions.error(subscriptionId, new RpcError(error!))\n } else {\n subscriptions.next(subscriptionId, result)\n }\n } catch (e) {\n console.warn(\"Error parsing incomming message: \" + message)\n console.error(e)\n }\n }\n connection = gProvider(onMessage)\n\n const disconnect = () => {\n connection?.disconnect()\n connection = null\n subscriptions.errorAll(new DestroyedError())\n responses.forEach((r) => r.onError(new DestroyedError()))\n responses.clear()\n }\n\n let nextId = 1\n const request = <T, TT>(\n method: string,\n params: Array<any>,\n cb?: ClientRequestCb<T, TT>,\n ): UnsubscribeFn => {\n if (!connection) throw new Error(\"Not connected\")\n const id = `${clientId}-${nextId++}`\n\n if (cb) responses.set(id, cb)\n send(id, method, params)\n\n return (): void => {\n responses.delete(id)\n }\n }\n\n return {\n request,\n disconnect,\n }\n}\n","import { ClientRequest } from \"./client\"\nimport { abortablePromiseFn } from \"./internal-utils\"\nimport { chainSpec } from \"./methods\"\n\nexport interface ChainSpecData {\n name: string\n genesisHash: string\n properties: any\n}\n\nexport const createGetChainSpec = (clientRequest: ClientRequest<any, any>) => {\n const request = abortablePromiseFn(\n <T>(\n onSuccess: (value: T) => void,\n onError: (e: any) => void,\n method: string,\n params: any[],\n ) => clientRequest(method, params, { onSuccess, onError }),\n )\n let cachedPromise: null | Promise<ChainSpecData> = null\n\n return async (): Promise<ChainSpecData> => {\n if (cachedPromise) return cachedPromise\n return (cachedPromise = Promise.all([\n request<string>(chainSpec.chainName, []),\n request<string>(chainSpec.genesisHash, []),\n request<any>(chainSpec.properties, []),\n ]).then(([name, genesisHash, properties]) => ({\n name,\n genesisHash,\n properties,\n })))\n }\n}\n","import type { ClientRequest } from \"@/client\"\nimport { UnsubscribeFn } from \"./common-types\"\nimport { noop } from \"./internal-utils\"\n\nexport const getCompatibilityEnhancer =\n <T, E>(rpcMethodsP: Promise<Set<string>>, request: ClientRequest<T, E>) =>\n (methods: Record<string, string>): ClientRequest<T, E> => {\n let translations: Record<string, string> = {}\n let enhancedRequest: ClientRequest<T, E> | null = null\n\n return ((method, ...rest) => {\n if (enhancedRequest) return enhancedRequest(method, ...rest)\n\n let isRunning = true\n let cleanup: UnsubscribeFn = () => {\n isRunning = false\n }\n\n rpcMethodsP\n .then((rpcMethods) => {\n enhancedRequest = (method_, ...iRest) => {\n const method = translations[method_] ?? method_\n if (rpcMethods.has(method)) return request(method, ...iRest)\n iRest[1]?.onError(new Error(`Unsupported method ${method}`))\n return noop\n }\n\n if (rpcMethods.has(method)) return\n\n const parts = method.split(\"_\")\n if (parts[1] !== \"v1\") return\n\n parts[1] = \"unstable\"\n\n if (rpcMethods.has(parts.join(\"_\")))\n Object.values(methods).forEach((value) => {\n translations[value] = value.replace(\"_v1_\", \"_unstable_\")\n })\n else if (parts[0] === \"transaction\") {\n // old versions of smoldot and Polkadot-SDK don't support transaction_xx_broadcast\n // some old versions have `transactions_unstable_submitAndWatch` while others have `transaction_xx_submitAndWatch`\n // if we find any of this options, then we will can use them as if they were broadast/stop\n let unwatch: string | undefined\n let version: string | undefined\n\n const txGroup = [\"transactionWatch\", \"transaction\"].find(\n (group) => {\n version = [\"v1\", \"unstable\"].find((v) =>\n rpcMethods.has((unwatch = `${group}_${v}_unwatch`)),\n )\n return !!version\n },\n )\n\n if (txGroup) {\n translations[methods.broadcast] =\n `${txGroup}_${version}_submitAndWatch`\n translations[methods.stop] = unwatch!\n }\n }\n })\n .then(() => {\n if (isRunning) cleanup = enhancedRequest!(method, ...rest)\n })\n\n return () => {\n cleanup()\n }\n }) as ClientRequest<T, E>\n }\n"],"mappings":"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","names":["src_exports","__export","DestroyedError","DisjointError","OperationError","OperationInaccessibleError","OperationLimitError","RpcError","StopError","createClient","__toCommonJS","import_utils","abortablePromiseFn","fn","args","res","rej","cancel","actualArgs","abortSignal","onAbort","withCleanup","x","deferred","res","rej","_res","_rej","noop","getSubscriptionsManager","subscriptions","id","subscriber","data","e","subscribers","s","chainHead","chainSpec","transaction","transactionWatch","fnGroupName","methods","methodName","getTransaction","request","tx","error","cancel","transaction","subscriptionId","noop","StopError","DisjointError","OperationLimitError","OperationError","error","OperationInaccessibleError","createOperationPromise","operationName","factory","request","abortablePromiseFn","res","rej","args","isRunning","cancel","requestArgs","logicCb","response","followSubscription","OperationLimitError","operationId","stopOperation","chainHead","done","noop","_res","x","_rej","e","_e","OperationError","OperationInaccessibleError","createBodyFn","createOperationPromise","chainHead","hash","res","createCallFn","createOperationPromise","chainHead","hash","fnName","callParameters","e","res","createHeaderFn","request","hash","res","rej","chainHead","import_utils","createStorageCb","request","hash","inputs","childTrie","onItems","onError","onDone","onDiscardedItems","isRunning","cancel","chainHead","response","followSubscription","OperationLimitError","operationId","stopOperation","doneListening","event","_onDone","_onError","OperationError","OperationInaccessibleError","e","createStorageFn","request","cbStore","createStorageCb","abortablePromiseFn","resolve","reject","hash","type","key","childTrie","isDescendants","result","cancel","items","e","nDiscarded","OperationLimitError","createUnpinFn","request","hashes","res","rej","chainHead","DestroyedError","isOperationEvent","event","getChainHead","request","withRuntime","onFollowEvent","onFollowError","subscriptions","getSubscriptionsManager","ongoingRequests","deferredFollow","deferred","followSubscription","onAllFollowEventsNext","type","rest","StopError","unfollow","onAllFollowEventsError","error","DestroyedError","onFollowRequestSuccess","subscriptionId","follow","done","sendUnfollow","noop","chainHead","DisjointError","cb","onFollowRequestError","e","fRequest","method","params","disjoint","onSubscription","subscription","onSubscribeOperation","operationId","subscriber","cleanup","response","onCancel","x","createBodyFn","createCallFn","createHeaderFn","createStorageFn","createStorageCb","createUnpinFn","RpcError","e","__publicField","nextClientId","createClient","gProvider","clientId","responses","subscriptions","getSubscriptionsManager","connection","send","id","method","params","onMessage","message","result","error","subscription","cb","RpcError","opaqueId","subscriber","subscriptionId","e","disconnect","DestroyedError","r","nextId","createGetChainSpec","clientRequest","request","abortablePromiseFn","onSuccess","onError","method","params","cachedPromise","chainSpec","name","genesisHash","properties","getCompatibilityEnhancer","rpcMethodsP","request","methods","translations","enhancedRequest","method","rest","isRunning","cleanup","rpcMethods","method_","iRest","noop","parts","value","unwatch","version","txGroup","group","v","createClient","provider","client","request","abortablePromiseFn","onSuccess","onError","method","params","rpcMethods","x","compatibilityEnhancer","getCompatibilityEnhancer","getChainHead","chainHead","getTransaction","transaction","createGetChainSpec","chainSpec"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@polkadot-api/substrate-client",
3
- "version": "0.1.0",
3
+ "version": "0.1.2",
4
4
  "author": "Josep M Sobrepere (https://github.com/josepot)",
5
5
  "repository": {
6
6
  "type": "git",
@@ -34,14 +34,9 @@
34
34
  "files": [
35
35
  "dist"
36
36
  ],
37
- "prettier": {
38
- "printWidth": 80,
39
- "semi": false,
40
- "trailingComma": "all"
41
- },
42
37
  "devDependencies": {
43
38
  "@polkadot-api/json-rpc-provider": "0.0.1",
44
- "@polkadot-api/utils": "0.0.1"
39
+ "@polkadot-api/utils": "0.1.0"
45
40
  },
46
41
  "scripts": {
47
42
  "build": "tsc --noEmit && tsup-node src/index.ts --clean --sourcemap --platform neutral --target=es2020 --format esm,cjs --dts && tsup-node src/index.ts --clean --sourcemap --platform neutral --target=es2020 --format cjs --dts --minify --out-dir dist/min",