@polkadot-api/substrate-client 0.1.1 → 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.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
@@ -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) {
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(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":["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
@@ -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) {
@@ -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(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"]}
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"]}
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 B=(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,d]=e[e.length-1]instanceof AbortSignal?[e.slice(0,e.length-1),e[e.length-1]]:[e],l=()=>{n(),o(new H.AbortError)};d?.addEventListener("abort",l,{once:!0});let u=m=>f=>{n=H.noop,d?.removeEventListener("abort",l),m(f)};n=r(u(t),u(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[d,l]=e(...a),u=t(r,d,{onSuccess:(m,f)=>{if(m.result==="limitReached")return u=h,n(new y);let c=!0,s=h,p=g=>{c=!1,s(),o(g)},i=g=>{c=!1,s(),n(g)};s=f(m.operationId,{next:g=>{let R=g;R.event==="operationError"?n(new x(R.error)):R.event==="operationInaccessible"?n(new O):l(g,p,i)},error:i}),u=()=>{c&&(s(),t(b.stopOperation,[m.operationId]))}},onError:n});return()=>{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,a,d,l)=>{if(t.length===0)return d(),U.noop;let u=r(b.storage,[e,t,o],{onSuccess:(m,f)=>{if(m.result==="limitReached"||m.discardedItems===t.length)return a(new y);let c=f(m.operationId,{next:i=>{switch(i.event){case"operationStorageItems":{n(i.items);break}case"operationStorageDone":{p();break}case"operationError":{s(new x(i.error));break}case"operationInaccessible":{s(new O);break}default:r(b.continue,[i.operationId])}},error:a});u=()=>{c(),r(b.stopOperation,[m.operationId])};let s=i=>{u=U.noop,c(),a(i)},p=()=>{u=U.noop,c(),d()};l(m.discardedItems)},onError:a});return()=>{u()}};var Q=r=>{let e=L(r);return v((t,o,n,a,d,l)=>{let u=a.startsWith("descendants"),m=u?[]:null,c=e(n,[{key:d,type:a}],l??null,u?s=>{m.push(s)}:s=>{m=s[0]?.[a]},o,()=>{try{t(u?m.flat():m)}catch(s){o(s)}},s=>{s>0&&(c(),o(new y))});return c})};var V=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 $(r){return(e,t,o)=>{let n=k(),a=new Set,d=z(),l=d.promise,u=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)},m=i=>{o(i),s(!(i instanceof C))},f=(i,g)=>{let R=g(i,{next:u,error:m});s=(E=!0)=>{l=null,s=h,R(),E&&r(b.unfollow,[i]),n.errorAll(new w),a.forEach(S=>{S()}),a.clear()},l=i,d.res(i)},c=i=>{i instanceof C?s(!1):o(i),l=null,d.res(i)},s=r(b.follow,[e],{onSuccess:f,onError:c}),p=(i,g,R)=>{let E=()=>{R?.onError(new w)};if(l===null)return E(),h;let S=T=>{if(!R)return r(i,[T,...g]);a.add(E);let _=(I,J)=>l===null?(J.error(new w),h):(n.subscribe(I,J),()=>{n.unsubscribe(I)}),ee=r(i,[T,...g],{onSuccess:I=>{a.delete(E),R.onSuccess(I,_)},onError:I=>{a.delete(E),R.onError(I)}});return()=>{a.delete(E),ee()}};if(typeof l=="string")return S(l);let D=h;return l.then(T=>{if(T instanceof Error)return E();l&&(D=S(T))}),()=>{D()}};return{unfollow(){s(),l=null},body:N(p),call:G(p),header:K(p),storage:Q(p),storageSubscription:L(p),unpin:V(p),_request:p}}}var q=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,a=(f,c,s)=>{n.send(JSON.stringify({jsonrpc:"2.0",id:f,method:c,params:s}))};function d(f){try{let c,s,p,i,g;if({id:c,result:s,error:p,params:i}=JSON.parse(f),c){let S=t.get(c);return S?(t.delete(c),p?S.onError(new q(p)):S.onSuccess(s,(D,T)=>{let _=D;return o.subscribe(_,T),()=>{o.unsubscribe(_)}})):void 0}if({subscription:g,result:s,error:p}=i,!g||!p&&!Object.hasOwn(i,"result"))throw 0;let E=g;p?o.error(E,new q(p)):o.next(E,s)}catch(c){console.warn("Error parsing incomming message: "+f),console.error(c)}}n=r(d);let l=()=>{n?.disconnect(),n=null,o.errorAll(new C),t.forEach(f=>f.onError(new C)),t.clear()},u=1;return{request:(f,c,s)=>{if(!n)throw new Error("Not connected");let p=`${e}-${u++}`;return s&&t.set(p,s),a(p,f,c),()=>{t.delete(p)}},disconnect:l}};var Y=r=>{let e=v((o,n,a,d)=>r(a,d,{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 Z=(r,e)=>t=>{let o={},n=null;return(a,...d)=>{if(n)return n(a,...d);let l=!0,u=()=>{l=!1};return r.then(m=>{if(n=(c,...s)=>{let p=o[c]??c;return m.has(p)?e(p,...s):(s[1]?.onError(new Error(`Unsupported method ${p}`)),h)},m.has(a))return;let f=a.split("_");if(f[1]==="v1"){if(f[1]="unstable",m.has(f.join("_")))Object.values(t).forEach(c=>{o[c]=c.replace("_v1_","_unstable_")});else if(f[0]==="transaction"){let c,s,p=["transactionWatch","transaction"].find(i=>(s=["v1","unstable"].find(g=>m.has(c=`${i}_${g}_unwatch`)),!!s));p&&(o[t.broadcast]=`${p}_${s}_submitAndWatch`,o[t.stop]=c)}}}).then(()=>{l&&(u=n(a,...d))}),()=>{u()}}};var ue=r=>{let e=X(r),t=v((a,d,l,u)=>e.request(l,u,{onSuccess:a,onError:d})),o=t("rpc_methods",[]).then(a=>new Set(Array.isArray(a)?a:a.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}};
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(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","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","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"]}
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.1",
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",