polkadot-api 1.2.0 → 1.2.1

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.
@@ -15,7 +15,6 @@ var OpType = /* @__PURE__ */ ((OpType2) => {
15
15
  OpType2["Storage"] = "storage";
16
16
  OpType2["Tx"] = "tx";
17
17
  OpType2["Event"] = "events";
18
- OpType2["Error"] = "errors";
19
18
  OpType2["Const"] = "constants";
20
19
  return OpType2;
21
20
  })(OpType || {});
@@ -1 +1 @@
1
- {"version":3,"file":"compatibility.mjs","sources":["../../src/compatibility.ts"],"sourcesContent":["import { MetadataLookup } from \"@polkadot-api/metadata-builders\"\nimport {\n CompatibilityCache,\n CompatibilityLevel,\n EntryPoint,\n EntryPointCodec,\n TypedefCodec,\n TypedefNode,\n entryPointsAreCompatible,\n mapLookupToTypedef,\n valueIsCompatibleWithDest,\n} from \"@polkadot-api/metadata-compatibility\"\nimport {\n ChainHead$,\n getObservableClient,\n RuntimeContext,\n} from \"@polkadot-api/observable-client\"\nimport { Tuple, Vector } from \"@polkadot-api/substrate-bindings\"\nimport { Observable, combineLatest, filter, firstValueFrom, map } from \"rxjs\"\nimport { ChainDefinition } from \"./descriptors\"\n\nexport class CompatibilityToken<D = unknown> {\n private constructor() {}\n\n // @ts-ignore\n protected _phantom(value: D) {}\n}\n\ninterface CompatibilityTokenApi {\n runtime: () => RuntimeContext\n typedefNodes: TypedefNode[]\n getPalletEntryPoint: (\n opType: OpType,\n pallet: string,\n name: string,\n ) => EntryPoint\n getApiEntryPoint: (name: string, method: string) => EntryPoint\n}\nconst compatibilityTokenApi = new WeakMap<\n CompatibilityToken,\n CompatibilityTokenApi\n>()\nexport const getCompatibilityApi = (token: CompatibilityToken) =>\n compatibilityTokenApi.get(token)!\n\nexport const enum OpType {\n Storage = \"storage\",\n Tx = \"tx\",\n Event = \"events\",\n Error = \"errors\",\n Const = \"constants\",\n}\n\nconst EntryPointsCodec = Vector(EntryPointCodec)\nconst TypedefsCodec = Vector(TypedefCodec)\nconst TypesCodec = Tuple(EntryPointsCodec, TypedefsCodec)\n\nexport const createCompatibilityToken = <D extends ChainDefinition>(\n chainDefinition: D,\n chainHead: ReturnType<ReturnType<typeof getObservableClient>[\"chainHead$\"]>,\n): Promise<CompatibilityToken<D>> => {\n const awaitedRuntime = new Promise<() => RuntimeContext>(async (resolve) => {\n const loadedRuntime$ = chainHead.runtime$.pipe(filter((v) => v != null))\n\n let latest = await firstValueFrom(loadedRuntime$)\n loadedRuntime$.subscribe((v) => (latest = v))\n\n resolve(() => latest)\n })\n\n const promise = Promise.all([\n chainDefinition.metadataTypes.then(TypesCodec.dec),\n chainDefinition.descriptors,\n awaitedRuntime,\n ]).then(([[entryPoints, typedefNodes], descriptors, runtime]) => {\n const token = new (CompatibilityToken as any)()\n compatibilityTokenApi.set(token, {\n runtime,\n getPalletEntryPoint(opType, pallet, name) {\n return entryPoints[descriptors[opType][pallet][name]]\n },\n getApiEntryPoint(name, method) {\n return entryPoints[descriptors.apis[name][method]]\n },\n typedefNodes,\n })\n\n return token\n })\n\n return promise\n}\n\n// metadataRaw -> cache\nconst metadataCache = new WeakMap<\n Uint8Array,\n {\n compat: CompatibilityCache\n lookup: MetadataLookup\n typeNodes: (TypedefNode | null)[]\n }\n>()\nconst getMetadataCache = (ctx: RuntimeContext) => {\n if (!metadataCache.has(ctx.metadataRaw)) {\n metadataCache.set(ctx.metadataRaw, {\n compat: new Map(),\n lookup: ctx.lookup,\n typeNodes: [],\n })\n }\n return metadataCache.get(ctx.metadataRaw)!\n}\nexport const compatibilityHelper = (\n descriptors: Promise<CompatibilityToken>,\n getDescriptorEntryPoint: (descriptorApi: CompatibilityTokenApi) => EntryPoint,\n getRuntimeEntryPoint: (ctx: RuntimeContext) => EntryPoint,\n) => {\n const getRuntimeTypedef = (ctx: RuntimeContext, id: number) => {\n const cache = getMetadataCache(ctx)\n return (cache.typeNodes[id] ||= mapLookupToTypedef(cache.lookup(id)))\n }\n\n function getCompatibilityLevels(\n descriptors: CompatibilityToken,\n /**\n * The `Runtime` of runtimeWithDescriptors already has a RuntimeContext,\n * which is the runtime of the finalized block.\n * But on some cases, the user wants to perform an action on a specific\n * block hash, which has a different RuntimeContext.\n */\n ctx?: RuntimeContext,\n ) {\n const compatibilityApi = compatibilityTokenApi.get(descriptors)!\n ctx ||= compatibilityApi.runtime()\n const descriptorEntryPoint = getDescriptorEntryPoint(compatibilityApi)\n const runtimeEntryPoint = getRuntimeEntryPoint(ctx)\n const descriptorNodes = compatibilityApi.typedefNodes\n\n const cache = getMetadataCache(ctx)\n\n return entryPointsAreCompatible(\n descriptorEntryPoint,\n (id) => descriptorNodes[id],\n runtimeEntryPoint,\n (id) => getRuntimeTypedef(ctx, id),\n cache.compat,\n )\n }\n\n const getCompatibilityLevel = withOptionalToken(descriptors, (runtime) =>\n minCompatLevel(getCompatibilityLevels(runtime)),\n )\n const isCompatible = withOptionalToken(\n descriptors,\n (threshold: CompatibilityLevel, runtime) =>\n getCompatibilityLevel(runtime) >= threshold,\n )\n\n const waitDescriptors = () => descriptors\n const compatibleRuntime$ = (chainHead: ChainHead$, hash: string | null) =>\n combineLatest([waitDescriptors(), chainHead.getRuntimeContext$(hash)])\n\n const withCompatibleRuntime =\n <T>(chainHead: ChainHead$, mapper: (x: T) => string) =>\n (\n source$: Observable<T>,\n ): Observable<[T, CompatibilityToken, RuntimeContext]> =>\n combineLatest([\n source$.pipe(chainHead.withRuntime(mapper)),\n waitDescriptors(),\n ]).pipe(map(([[x, ctx], descriptors]) => [x, descriptors, ctx]))\n\n const argsAreCompatible = (\n descriptors: CompatibilityToken,\n ctx: RuntimeContext,\n args: unknown,\n ) => {\n const levels = getCompatibilityLevels(descriptors, ctx)\n if (levels.args === CompatibilityLevel.Incompatible) return false\n if (levels.args > CompatibilityLevel.Partial) return true\n // Although technically args could still be compatible, if the output will be incompatible we might as well just return false to skip sending the request.\n if (levels.values === CompatibilityLevel.Incompatible) return false\n\n const entryPoint = getRuntimeEntryPoint(ctx)\n\n return valueIsCompatibleWithDest(\n entryPoint.args,\n (id) => getRuntimeTypedef(ctx, id),\n args,\n )\n }\n const valuesAreCompatible = (\n descriptors: CompatibilityToken,\n ctx: RuntimeContext,\n values: unknown,\n ) => {\n const level = getCompatibilityLevels(descriptors, ctx).values\n if (level === CompatibilityLevel.Incompatible) return false\n if (level > CompatibilityLevel.Partial) return true\n\n const compatibilityApi = compatibilityTokenApi.get(descriptors)!\n\n const entryPoint = getDescriptorEntryPoint(compatibilityApi)\n\n return valueIsCompatibleWithDest(\n entryPoint.values,\n (id) => compatibilityApi.typedefNodes[id],\n values,\n )\n }\n\n return {\n isCompatible,\n getCompatibilityLevel,\n getCompatibilityLevels,\n waitDescriptors,\n withCompatibleRuntime,\n compatibleRuntime$,\n argsAreCompatible,\n valuesAreCompatible,\n getRuntimeTypedef,\n }\n}\nexport type CompatibilityHelper = ReturnType<typeof compatibilityHelper>\n\nexport const minCompatLevel = (levels: {\n args: CompatibilityLevel\n values: CompatibilityLevel\n}) => Math.min(levels.args, levels.values)\n\nconst withOptionalToken =\n <T, D, A extends [...any[], CompatibilityToken]>(\n compatibilityToken: Promise<CompatibilityToken<D>>,\n fn: (...args: A) => T,\n ): WithOptionalRuntime<T, D, A extends [...infer R, any] ? R : []> =>\n (...args: any): any => {\n const lastElement = args.at(-1)\n if (lastElement instanceof CompatibilityToken) {\n return fn(...args)\n }\n return compatibilityToken.then((token) => (fn as any)(...args, token))\n }\n\nexport type WithOptionalRuntime<T, D, A extends any[]> = {\n /**\n * Returns the result after waiting for the runtime to load.\n */\n (...args: A): Promise<T>\n /**\n * Returns the result synchronously with the loaded runtime.\n */\n (...args: [...A, runtime: CompatibilityToken<D>]): T\n}\n\nexport interface CompatibilityFunctions<D> {\n /**\n * Returns the `CompatibilityLevel` for this call comparing the descriptors\n * generated on dev time with the current live metadata.\n */\n getCompatibilityLevel(): Promise<CompatibilityLevel>\n /**\n * Returns the `CompatibilityLevel` for this call comparing the descriptors\n * generated on dev time with the current live metadata.\n *\n * @param compatibilityToken CompatibilityToken awaited from\n * typedApi.compatibilityToken.\n */\n getCompatibilityLevel(\n compatibilityToken: CompatibilityToken<D>,\n ): CompatibilityLevel\n\n /**\n * Returns whether this call is compatible based on the CompatibilityLevel\n * threshold.\n *\n * @param threshold CompatibilityLevel threshold to use, inclusive.\n */\n isCompatible(threshold: CompatibilityLevel): Promise<boolean>\n\n /**\n * Returns whether this call is compatible based on the CompatibilityLevel\n * threshold.\n *\n * @param threshold CompatibilityLevel threshold to use,\n * inclusive.\n * @param compatibilityToken CompatibilityToken awaited from\n * typedApi.compatibilityToken.\n */\n isCompatible(\n threshold: CompatibilityLevel,\n compatibilityToken: CompatibilityToken<D>,\n ): boolean\n}\n"],"names":["OpType","descriptors"],"mappings":"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"}
1
+ {"version":3,"file":"compatibility.mjs","sources":["../../src/compatibility.ts"],"sourcesContent":["import { MetadataLookup } from \"@polkadot-api/metadata-builders\"\nimport {\n CompatibilityCache,\n CompatibilityLevel,\n EntryPoint,\n EntryPointCodec,\n TypedefCodec,\n TypedefNode,\n entryPointsAreCompatible,\n mapLookupToTypedef,\n valueIsCompatibleWithDest,\n} from \"@polkadot-api/metadata-compatibility\"\nimport {\n ChainHead$,\n getObservableClient,\n RuntimeContext,\n} from \"@polkadot-api/observable-client\"\nimport { Tuple, Vector } from \"@polkadot-api/substrate-bindings\"\nimport { Observable, combineLatest, filter, firstValueFrom, map } from \"rxjs\"\nimport { ChainDefinition } from \"./descriptors\"\n\nexport class CompatibilityToken<D = unknown> {\n private constructor() {}\n\n // @ts-ignore\n protected _phantom(value: D) {}\n}\n\ninterface CompatibilityTokenApi {\n runtime: () => RuntimeContext\n typedefNodes: TypedefNode[]\n getPalletEntryPoint: (\n opType: OpType,\n pallet: string,\n name: string,\n ) => EntryPoint\n getApiEntryPoint: (name: string, method: string) => EntryPoint\n}\nconst compatibilityTokenApi = new WeakMap<\n CompatibilityToken,\n CompatibilityTokenApi\n>()\nexport const getCompatibilityApi = (token: CompatibilityToken) =>\n compatibilityTokenApi.get(token)!\n\nexport const enum OpType {\n Storage = \"storage\",\n Tx = \"tx\",\n Event = \"events\",\n Const = \"constants\",\n}\n\nconst EntryPointsCodec = Vector(EntryPointCodec)\nconst TypedefsCodec = Vector(TypedefCodec)\nconst TypesCodec = Tuple(EntryPointsCodec, TypedefsCodec)\n\nexport const createCompatibilityToken = <D extends ChainDefinition>(\n chainDefinition: D,\n chainHead: ReturnType<ReturnType<typeof getObservableClient>[\"chainHead$\"]>,\n): Promise<CompatibilityToken<D>> => {\n const awaitedRuntime = new Promise<() => RuntimeContext>(async (resolve) => {\n const loadedRuntime$ = chainHead.runtime$.pipe(filter((v) => v != null))\n\n let latest = await firstValueFrom(loadedRuntime$)\n loadedRuntime$.subscribe((v) => (latest = v))\n\n resolve(() => latest)\n })\n\n const promise = Promise.all([\n chainDefinition.metadataTypes.then(TypesCodec.dec),\n chainDefinition.descriptors,\n awaitedRuntime,\n ]).then(([[entryPoints, typedefNodes], descriptors, runtime]) => {\n const token = new (CompatibilityToken as any)()\n compatibilityTokenApi.set(token, {\n runtime,\n getPalletEntryPoint(opType, pallet, name) {\n return entryPoints[descriptors[opType][pallet][name]]\n },\n getApiEntryPoint(name, method) {\n return entryPoints[descriptors.apis[name][method]]\n },\n typedefNodes,\n })\n\n return token\n })\n\n return promise\n}\n\n// metadataRaw -> cache\nconst metadataCache = new WeakMap<\n Uint8Array,\n {\n compat: CompatibilityCache\n lookup: MetadataLookup\n typeNodes: (TypedefNode | null)[]\n }\n>()\nconst getMetadataCache = (ctx: RuntimeContext) => {\n if (!metadataCache.has(ctx.metadataRaw)) {\n metadataCache.set(ctx.metadataRaw, {\n compat: new Map(),\n lookup: ctx.lookup,\n typeNodes: [],\n })\n }\n return metadataCache.get(ctx.metadataRaw)!\n}\nexport const compatibilityHelper = (\n descriptors: Promise<CompatibilityToken>,\n getDescriptorEntryPoint: (descriptorApi: CompatibilityTokenApi) => EntryPoint,\n getRuntimeEntryPoint: (ctx: RuntimeContext) => EntryPoint,\n) => {\n const getRuntimeTypedef = (ctx: RuntimeContext, id: number) => {\n const cache = getMetadataCache(ctx)\n return (cache.typeNodes[id] ||= mapLookupToTypedef(cache.lookup(id)))\n }\n\n function getCompatibilityLevels(\n descriptors: CompatibilityToken,\n /**\n * The `Runtime` of runtimeWithDescriptors already has a RuntimeContext,\n * which is the runtime of the finalized block.\n * But on some cases, the user wants to perform an action on a specific\n * block hash, which has a different RuntimeContext.\n */\n ctx?: RuntimeContext,\n ) {\n const compatibilityApi = compatibilityTokenApi.get(descriptors)!\n ctx ||= compatibilityApi.runtime()\n const descriptorEntryPoint = getDescriptorEntryPoint(compatibilityApi)\n const runtimeEntryPoint = getRuntimeEntryPoint(ctx)\n const descriptorNodes = compatibilityApi.typedefNodes\n\n const cache = getMetadataCache(ctx)\n\n return entryPointsAreCompatible(\n descriptorEntryPoint,\n (id) => descriptorNodes[id],\n runtimeEntryPoint,\n (id) => getRuntimeTypedef(ctx, id),\n cache.compat,\n )\n }\n\n const getCompatibilityLevel = withOptionalToken(descriptors, (runtime) =>\n minCompatLevel(getCompatibilityLevels(runtime)),\n )\n const isCompatible = withOptionalToken(\n descriptors,\n (threshold: CompatibilityLevel, runtime) =>\n getCompatibilityLevel(runtime) >= threshold,\n )\n\n const waitDescriptors = () => descriptors\n const compatibleRuntime$ = (chainHead: ChainHead$, hash: string | null) =>\n combineLatest([waitDescriptors(), chainHead.getRuntimeContext$(hash)])\n\n const withCompatibleRuntime =\n <T>(chainHead: ChainHead$, mapper: (x: T) => string) =>\n (\n source$: Observable<T>,\n ): Observable<[T, CompatibilityToken, RuntimeContext]> =>\n combineLatest([\n source$.pipe(chainHead.withRuntime(mapper)),\n waitDescriptors(),\n ]).pipe(map(([[x, ctx], descriptors]) => [x, descriptors, ctx]))\n\n const argsAreCompatible = (\n descriptors: CompatibilityToken,\n ctx: RuntimeContext,\n args: unknown,\n ) => {\n const levels = getCompatibilityLevels(descriptors, ctx)\n if (levels.args === CompatibilityLevel.Incompatible) return false\n if (levels.args > CompatibilityLevel.Partial) return true\n // Although technically args could still be compatible, if the output will be incompatible we might as well just return false to skip sending the request.\n if (levels.values === CompatibilityLevel.Incompatible) return false\n\n const entryPoint = getRuntimeEntryPoint(ctx)\n\n return valueIsCompatibleWithDest(\n entryPoint.args,\n (id) => getRuntimeTypedef(ctx, id),\n args,\n )\n }\n const valuesAreCompatible = (\n descriptors: CompatibilityToken,\n ctx: RuntimeContext,\n values: unknown,\n ) => {\n const level = getCompatibilityLevels(descriptors, ctx).values\n if (level === CompatibilityLevel.Incompatible) return false\n if (level > CompatibilityLevel.Partial) return true\n\n const compatibilityApi = compatibilityTokenApi.get(descriptors)!\n\n const entryPoint = getDescriptorEntryPoint(compatibilityApi)\n\n return valueIsCompatibleWithDest(\n entryPoint.values,\n (id) => compatibilityApi.typedefNodes[id],\n values,\n )\n }\n\n return {\n isCompatible,\n getCompatibilityLevel,\n getCompatibilityLevels,\n waitDescriptors,\n withCompatibleRuntime,\n compatibleRuntime$,\n argsAreCompatible,\n valuesAreCompatible,\n getRuntimeTypedef,\n }\n}\nexport type CompatibilityHelper = ReturnType<typeof compatibilityHelper>\n\nexport const minCompatLevel = (levels: {\n args: CompatibilityLevel\n values: CompatibilityLevel\n}) => Math.min(levels.args, levels.values)\n\nconst withOptionalToken =\n <T, D, A extends [...any[], CompatibilityToken]>(\n compatibilityToken: Promise<CompatibilityToken<D>>,\n fn: (...args: A) => T,\n ): WithOptionalRuntime<T, D, A extends [...infer R, any] ? R : []> =>\n (...args: any): any => {\n const lastElement = args.at(-1)\n if (lastElement instanceof CompatibilityToken) {\n return fn(...args)\n }\n return compatibilityToken.then((token) => (fn as any)(...args, token))\n }\n\nexport type WithOptionalRuntime<T, D, A extends any[]> = {\n /**\n * Returns the result after waiting for the runtime to load.\n */\n (...args: A): Promise<T>\n /**\n * Returns the result synchronously with the loaded runtime.\n */\n (...args: [...A, runtime: CompatibilityToken<D>]): T\n}\n\nexport interface CompatibilityFunctions<D> {\n /**\n * Returns the `CompatibilityLevel` for this call comparing the descriptors\n * generated on dev time with the current live metadata.\n */\n getCompatibilityLevel(): Promise<CompatibilityLevel>\n /**\n * Returns the `CompatibilityLevel` for this call comparing the descriptors\n * generated on dev time with the current live metadata.\n *\n * @param compatibilityToken CompatibilityToken awaited from\n * typedApi.compatibilityToken.\n */\n getCompatibilityLevel(\n compatibilityToken: CompatibilityToken<D>,\n ): CompatibilityLevel\n\n /**\n * Returns whether this call is compatible based on the CompatibilityLevel\n * threshold.\n *\n * @param threshold CompatibilityLevel threshold to use, inclusive.\n */\n isCompatible(threshold: CompatibilityLevel): Promise<boolean>\n\n /**\n * Returns whether this call is compatible based on the CompatibilityLevel\n * threshold.\n *\n * @param threshold CompatibilityLevel threshold to use,\n * inclusive.\n * @param compatibilityToken CompatibilityToken awaited from\n * typedApi.compatibilityToken.\n */\n isCompatible(\n threshold: CompatibilityLevel,\n compatibilityToken: CompatibilityToken<D>,\n ): boolean\n}\n"],"names":["OpType","descriptors"],"mappings":"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"}
@@ -15,6 +15,8 @@ const createConstantEntry = (palletName, name, {
15
15
  (p) => p.name === palletName
16
16
  );
17
17
  const constant = pallet?.constants.find((c) => c.name === name);
18
+ if (constant == null)
19
+ throw new Error(`Runtime entry Constant(${palletName}.${name}) not found`);
18
20
  const result = ctx.dynamicBuilder.buildConstant(palletName, name).dec(constant.value);
19
21
  cachedResults.set(ctx, result);
20
22
  return result;
@@ -1 +1 @@
1
- {"version":3,"file":"constants.mjs","sources":["../../src/constants.ts"],"sourcesContent":["import { RuntimeContext } from \"@polkadot-api/observable-client\"\nimport {\n CompatibilityFunctions,\n CompatibilityHelper,\n CompatibilityToken,\n getCompatibilityApi,\n} from \"./compatibility\"\n\nexport interface ConstantEntry<D, T> extends CompatibilityFunctions<D> {\n /**\n * Constants are simple key-value structures found in the runtime metadata.\n *\n * @returns Promise that will resolve in the value of the constant.\n */\n (): Promise<T>\n /**\n * @param compatibilityToken Token from got with `await\n * typedApi.compatibilityToken`\n * @returns Synchronously returns value of the constant.\n */\n (compatibilityToken: CompatibilityToken): T\n}\n\nexport const createConstantEntry = <D, T>(\n palletName: string,\n name: string,\n {\n valuesAreCompatible,\n waitDescriptors,\n isCompatible,\n getCompatibilityLevel,\n }: CompatibilityHelper,\n): ConstantEntry<D, T> => {\n const cachedResults = new WeakMap<RuntimeContext, T>()\n const getValueWithContext = (ctx: RuntimeContext) => {\n if (cachedResults.has(ctx)) {\n return cachedResults.get(ctx)!\n }\n\n const pallet = ctx.lookup.metadata.pallets.find(\n (p) => p.name === palletName,\n )\n const constant = pallet?.constants.find((c) => c.name === name)!\n const result = ctx.dynamicBuilder\n .buildConstant(palletName, name)\n .dec(constant.value)\n cachedResults.set(ctx, result)\n return result\n }\n\n const fn = (compatibilityToken?: CompatibilityToken): any => {\n if (compatibilityToken) {\n const ctx = getCompatibilityApi(compatibilityToken).runtime()\n const value = getValueWithContext(ctx)\n if (!valuesAreCompatible(compatibilityToken, ctx, value))\n throw new Error(\n `Incompatible runtime entry Constant(${palletName}.${name})`,\n )\n return value\n }\n return waitDescriptors().then(fn)\n }\n\n return Object.assign(fn, { isCompatible, getCompatibilityLevel })\n}\n"],"names":[],"mappings":";;AAuBa,MAAA,mBAAA,GAAsB,CACjC,UAAA,EACA,IACA,EAAA;AAAA,EACE,mBAAA;AAAA,EACA,eAAA;AAAA,EACA,YAAA;AAAA,EACA,qBAAA;AACF,CACwB,KAAA;AACxB,EAAM,MAAA,aAAA,uBAAoB,OAA2B,EAAA,CAAA;AACrD,EAAM,MAAA,mBAAA,GAAsB,CAAC,GAAwB,KAAA;AACnD,IAAI,IAAA,aAAA,CAAc,GAAI,CAAA,GAAG,CAAG,EAAA;AAC1B,MAAO,OAAA,aAAA,CAAc,IAAI,GAAG,CAAA,CAAA;AAAA,KAC9B;AAEA,IAAA,MAAM,MAAS,GAAA,GAAA,CAAI,MAAO,CAAA,QAAA,CAAS,OAAQ,CAAA,IAAA;AAAA,MACzC,CAAC,CAAM,KAAA,CAAA,CAAE,IAAS,KAAA,UAAA;AAAA,KACpB,CAAA;AACA,IAAM,MAAA,QAAA,GAAW,QAAQ,SAAU,CAAA,IAAA,CAAK,CAAC,CAAM,KAAA,CAAA,CAAE,SAAS,IAAI,CAAA,CAAA;AAC9D,IAAM,MAAA,MAAA,GAAS,IAAI,cAChB,CAAA,aAAA,CAAc,YAAY,IAAI,CAAA,CAC9B,GAAI,CAAA,QAAA,CAAS,KAAK,CAAA,CAAA;AACrB,IAAc,aAAA,CAAA,GAAA,CAAI,KAAK,MAAM,CAAA,CAAA;AAC7B,IAAO,OAAA,MAAA,CAAA;AAAA,GACT,CAAA;AAEA,EAAM,MAAA,EAAA,GAAK,CAAC,kBAAiD,KAAA;AAC3D,IAAA,IAAI,kBAAoB,EAAA;AACtB,MAAA,MAAM,GAAM,GAAA,mBAAA,CAAoB,kBAAkB,CAAA,CAAE,OAAQ,EAAA,CAAA;AAC5D,MAAM,MAAA,KAAA,GAAQ,oBAAoB,GAAG,CAAA,CAAA;AACrC,MAAA,IAAI,CAAC,mBAAA,CAAoB,kBAAoB,EAAA,GAAA,EAAK,KAAK,CAAA;AACrD,QAAA,MAAM,IAAI,KAAA;AAAA,UACR,CAAA,oCAAA,EAAuC,UAAU,CAAA,CAAA,EAAI,IAAI,CAAA,CAAA,CAAA;AAAA,SAC3D,CAAA;AACF,MAAO,OAAA,KAAA,CAAA;AAAA,KACT;AACA,IAAO,OAAA,eAAA,EAAkB,CAAA,IAAA,CAAK,EAAE,CAAA,CAAA;AAAA,GAClC,CAAA;AAEA,EAAA,OAAO,OAAO,MAAO,CAAA,EAAA,EAAI,EAAE,YAAA,EAAc,uBAAuB,CAAA,CAAA;AAClE;;;;"}
1
+ {"version":3,"file":"constants.mjs","sources":["../../src/constants.ts"],"sourcesContent":["import { RuntimeContext } from \"@polkadot-api/observable-client\"\nimport {\n CompatibilityFunctions,\n CompatibilityHelper,\n CompatibilityToken,\n getCompatibilityApi,\n} from \"./compatibility\"\n\nexport interface ConstantEntry<D, T> extends CompatibilityFunctions<D> {\n /**\n * Constants are simple key-value structures found in the runtime metadata.\n *\n * @returns Promise that will resolve in the value of the constant.\n */\n (): Promise<T>\n /**\n * @param compatibilityToken Token from got with `await\n * typedApi.compatibilityToken`\n * @returns Synchronously returns value of the constant.\n */\n (compatibilityToken: CompatibilityToken): T\n}\n\nexport const createConstantEntry = <D, T>(\n palletName: string,\n name: string,\n {\n valuesAreCompatible,\n waitDescriptors,\n isCompatible,\n getCompatibilityLevel,\n }: CompatibilityHelper,\n): ConstantEntry<D, T> => {\n const cachedResults = new WeakMap<RuntimeContext, T>()\n const getValueWithContext = (ctx: RuntimeContext) => {\n if (cachedResults.has(ctx)) {\n return cachedResults.get(ctx)!\n }\n\n const pallet = ctx.lookup.metadata.pallets.find(\n (p) => p.name === palletName,\n )\n const constant = pallet?.constants.find((c) => c.name === name)\n if (constant == null)\n throw new Error(`Runtime entry Constant(${palletName}.${name}) not found`)\n const result = ctx.dynamicBuilder\n .buildConstant(palletName, name)\n .dec(constant.value)\n cachedResults.set(ctx, result)\n return result\n }\n\n const fn = (compatibilityToken?: CompatibilityToken): any => {\n if (compatibilityToken) {\n const ctx = getCompatibilityApi(compatibilityToken).runtime()\n const value = getValueWithContext(ctx)\n if (!valuesAreCompatible(compatibilityToken, ctx, value))\n throw new Error(\n `Incompatible runtime entry Constant(${palletName}.${name})`,\n )\n return value\n }\n return waitDescriptors().then(fn)\n }\n\n return Object.assign(fn, { isCompatible, getCompatibilityLevel })\n}\n"],"names":[],"mappings":";;AAuBa,MAAA,mBAAA,GAAsB,CACjC,UAAA,EACA,IACA,EAAA;AAAA,EACE,mBAAA;AAAA,EACA,eAAA;AAAA,EACA,YAAA;AAAA,EACA,qBAAA;AACF,CACwB,KAAA;AACxB,EAAM,MAAA,aAAA,uBAAoB,OAA2B,EAAA,CAAA;AACrD,EAAM,MAAA,mBAAA,GAAsB,CAAC,GAAwB,KAAA;AACnD,IAAI,IAAA,aAAA,CAAc,GAAI,CAAA,GAAG,CAAG,EAAA;AAC1B,MAAO,OAAA,aAAA,CAAc,IAAI,GAAG,CAAA,CAAA;AAAA,KAC9B;AAEA,IAAA,MAAM,MAAS,GAAA,GAAA,CAAI,MAAO,CAAA,QAAA,CAAS,OAAQ,CAAA,IAAA;AAAA,MACzC,CAAC,CAAM,KAAA,CAAA,CAAE,IAAS,KAAA,UAAA;AAAA,KACpB,CAAA;AACA,IAAM,MAAA,QAAA,GAAW,QAAQ,SAAU,CAAA,IAAA,CAAK,CAAC,CAAM,KAAA,CAAA,CAAE,SAAS,IAAI,CAAA,CAAA;AAC9D,IAAA,IAAI,QAAY,IAAA,IAAA;AACd,MAAA,MAAM,IAAI,KAAM,CAAA,CAAA,uBAAA,EAA0B,UAAU,CAAA,CAAA,EAAI,IAAI,CAAa,WAAA,CAAA,CAAA,CAAA;AAC3E,IAAM,MAAA,MAAA,GAAS,IAAI,cAChB,CAAA,aAAA,CAAc,YAAY,IAAI,CAAA,CAC9B,GAAI,CAAA,QAAA,CAAS,KAAK,CAAA,CAAA;AACrB,IAAc,aAAA,CAAA,GAAA,CAAI,KAAK,MAAM,CAAA,CAAA;AAC7B,IAAO,OAAA,MAAA,CAAA;AAAA,GACT,CAAA;AAEA,EAAM,MAAA,EAAA,GAAK,CAAC,kBAAiD,KAAA;AAC3D,IAAA,IAAI,kBAAoB,EAAA;AACtB,MAAA,MAAM,GAAM,GAAA,mBAAA,CAAoB,kBAAkB,CAAA,CAAE,OAAQ,EAAA,CAAA;AAC5D,MAAM,MAAA,KAAA,GAAQ,oBAAoB,GAAG,CAAA,CAAA;AACrC,MAAA,IAAI,CAAC,mBAAA,CAAoB,kBAAoB,EAAA,GAAA,EAAK,KAAK,CAAA;AACrD,QAAA,MAAM,IAAI,KAAA;AAAA,UACR,CAAA,oCAAA,EAAuC,UAAU,CAAA,CAAA,EAAI,IAAI,CAAA,CAAA,CAAA;AAAA,SAC3D,CAAA;AACF,MAAO,OAAA,KAAA,CAAA;AAAA,KACT;AACA,IAAO,OAAA,eAAA,EAAkB,CAAA,IAAA,CAAK,EAAE,CAAA,CAAA;AAAA,GAClC,CAAA;AAEA,EAAA,OAAO,OAAO,MAAO,CAAA,EAAA,EAAI,EAAE,YAAA,EAAc,uBAAuB,CAAA,CAAA;AAClE;;;;"}
@@ -14,6 +14,13 @@ const createEventEntry = (pallet, name, chainHead, {
14
14
  const shared$ = chainHead.finalized$.pipe(
15
15
  withCompatibleRuntime(chainHead, (x) => x.hash),
16
16
  map(([block, runtime, ctx]) => {
17
+ const eventsIdx = ctx.lookup.metadata.pallets.find(
18
+ (p) => p.name === pallet
19
+ )?.events;
20
+ if (eventsIdx == null || ctx.lookup.metadata.lookup[eventsIdx].def.tag !== "variant" || ctx.lookup.metadata.lookup[eventsIdx].def.value.find(
21
+ (ev) => ev.name === name
22
+ ) == null)
23
+ throw new Error(`Runtime entry Event(${pallet}.${name}) not found`);
17
24
  if (!argsAreCompatible(runtime, ctx, null)) throw compatibilityError();
18
25
  return [block, runtime, ctx];
19
26
  }),
@@ -1 +1 @@
1
- {"version":3,"file":"event.mjs","sources":["../../src/event.ts"],"sourcesContent":["import { Observable, firstValueFrom, map, mergeMap } from \"rxjs\"\nimport { BlockInfo, ChainHead$ } from \"@polkadot-api/observable-client\"\nimport { CompatibilityFunctions, CompatibilityHelper } from \"./compatibility\"\nimport { concatMapEager, shareLatest } from \"./utils\"\n\nexport type EventPhase =\n | { type: \"ApplyExtrinsic\"; value: number }\n | { type: \"Finalization\" }\n | { type: \"Initialization\" }\n\nexport type EvWatch<T> = (filter?: (value: T) => boolean) => Observable<{\n meta: {\n block: BlockInfo\n phase: EventPhase\n }\n payload: T\n}>\n\nexport type EvPull<T> = () => Promise<\n Array<{\n meta: {\n block: BlockInfo\n phase: EventPhase\n }\n payload: T\n }>\n>\n\nexport type EvFilter<T> = (collection: SystemEvent[\"event\"][]) => Array<T>\n\nexport type EvClient<D, T> = {\n /**\n * Multicast and stateful Observable watching for new events (matching the\n * event kind chosen) in the latest known `finalized` block.\n *\n * @param filter Optional filter function to only emit events complying\n * with the function.\n */\n watch: EvWatch<T>\n /**\n * Fetch (Promise-based) all events (matching the event kind chosen) available\n * in the latest known `finalized` block.\n */\n pull: EvPull<T>\n /**\n * Filter a bunch of `SystemEvent` and return the decoded `payload` of every\n * of them.\n *\n * @param collection Array of `SystemEvent` to filter.\n */\n filter: EvFilter<T>\n} & CompatibilityFunctions<D>\n\ntype SystemEvent = {\n phase: EventPhase\n event: {\n type: string\n value: {\n type: string\n value: any\n }\n }\n topics: Array<any>\n}\n\nexport const createEventEntry = <D, T>(\n pallet: string,\n name: string,\n chainHead: ChainHead$,\n {\n isCompatible,\n getCompatibilityLevel,\n withCompatibleRuntime,\n argsAreCompatible,\n valuesAreCompatible,\n }: CompatibilityHelper,\n): EvClient<D, T> => {\n const compatibilityError = () =>\n new Error(`Incompatible runtime entry Event(${pallet}.${name})`)\n\n const shared$ = chainHead.finalized$.pipe(\n withCompatibleRuntime(chainHead, (x) => x.hash),\n map(([block, runtime, ctx]) => {\n if (!argsAreCompatible(runtime, ctx, null)) throw compatibilityError()\n return [block, runtime, ctx] as const\n }),\n concatMapEager(([block, runtime, ctx]) =>\n chainHead.eventsAt$(block.hash).pipe(\n map((events) => {\n const winners = events.filter(\n (e) => e.event.type === pallet && e.event.value.type === name,\n )\n return winners.map((x) => {\n if (!valuesAreCompatible(runtime, ctx, x.event.value.value))\n throw compatibilityError()\n return {\n meta: {\n phase: x.phase,\n block,\n },\n payload: x.event.value.value,\n }\n })\n }),\n ),\n ),\n shareLatest,\n )\n\n const watch: EvWatch<T> = (f) =>\n shared$.pipe(mergeMap((x) => (f ? x.filter((d) => f(d.payload)) : x)))\n\n const pull: EvPull<T> = () => firstValueFrom(shared$)\n\n const filter: EvFilter<T> = (events) =>\n events\n .filter((e) => e.type === pallet && e.value.type === name)\n .map((x) => x.value.value)\n\n return { watch, pull, filter, getCompatibilityLevel, isCompatible }\n}\n"],"names":[],"mappings":";;;;;AAiEO,MAAM,gBAAmB,GAAA,CAC9B,MACA,EAAA,IAAA,EACA,SACA,EAAA;AAAA,EACE,YAAA;AAAA,EACA,qBAAA;AAAA,EACA,qBAAA;AAAA,EACA,iBAAA;AAAA,EACA,mBAAA;AACF,CACmB,KAAA;AACnB,EAAM,MAAA,kBAAA,GAAqB,MACzB,IAAI,KAAA,CAAM,oCAAoC,MAAM,CAAA,CAAA,EAAI,IAAI,CAAG,CAAA,CAAA,CAAA,CAAA;AAEjE,EAAM,MAAA,OAAA,GAAU,UAAU,UAAW,CAAA,IAAA;AAAA,IACnC,qBAAsB,CAAA,SAAA,EAAW,CAAC,CAAA,KAAM,EAAE,IAAI,CAAA;AAAA,IAC9C,IAAI,CAAC,CAAC,KAAO,EAAA,OAAA,EAAS,GAAG,CAAM,KAAA;AAC7B,MAAA,IAAI,CAAC,iBAAkB,CAAA,OAAA,EAAS,KAAK,IAAI,CAAA,QAAS,kBAAmB,EAAA,CAAA;AACrE,MAAO,OAAA,CAAC,KAAO,EAAA,OAAA,EAAS,GAAG,CAAA,CAAA;AAAA,KAC5B,CAAA;AAAA,IACD,cAAA;AAAA,MAAe,CAAC,CAAC,KAAA,EAAO,OAAS,EAAA,GAAG,MAClC,SAAU,CAAA,SAAA,CAAU,KAAM,CAAA,IAAI,CAAE,CAAA,IAAA;AAAA,QAC9B,GAAA,CAAI,CAAC,MAAW,KAAA;AACd,UAAA,MAAM,UAAU,MAAO,CAAA,MAAA;AAAA,YACrB,CAAC,MAAM,CAAE,CAAA,KAAA,CAAM,SAAS,MAAU,IAAA,CAAA,CAAE,KAAM,CAAA,KAAA,CAAM,IAAS,KAAA,IAAA;AAAA,WAC3D,CAAA;AACA,UAAO,OAAA,OAAA,CAAQ,GAAI,CAAA,CAAC,CAAM,KAAA;AACxB,YAAA,IAAI,CAAC,mBAAoB,CAAA,OAAA,EAAS,KAAK,CAAE,CAAA,KAAA,CAAM,MAAM,KAAK,CAAA;AACxD,cAAA,MAAM,kBAAmB,EAAA,CAAA;AAC3B,YAAO,OAAA;AAAA,cACL,IAAM,EAAA;AAAA,gBACJ,OAAO,CAAE,CAAA,KAAA;AAAA,gBACT,KAAA;AAAA,eACF;AAAA,cACA,OAAA,EAAS,CAAE,CAAA,KAAA,CAAM,KAAM,CAAA,KAAA;AAAA,aACzB,CAAA;AAAA,WACD,CAAA,CAAA;AAAA,SACF,CAAA;AAAA,OACH;AAAA,KACF;AAAA,IACA,WAAA;AAAA,GACF,CAAA;AAEA,EAAA,MAAM,QAAoB,CAAC,CAAA,KACzB,QAAQ,IAAK,CAAA,QAAA,CAAS,CAAC,CAAO,KAAA,CAAA,GAAI,EAAE,MAAO,CAAA,CAAC,MAAM,CAAE,CAAA,CAAA,CAAE,OAAO,CAAC,CAAA,GAAI,CAAE,CAAC,CAAA,CAAA;AAEvE,EAAM,MAAA,IAAA,GAAkB,MAAM,cAAA,CAAe,OAAO,CAAA,CAAA;AAEpD,EAAM,MAAA,MAAA,GAAsB,CAAC,MAC3B,KAAA,MAAA,CACG,OAAO,CAAC,CAAA,KAAM,EAAE,IAAS,KAAA,MAAA,IAAU,EAAE,KAAM,CAAA,IAAA,KAAS,IAAI,CACxD,CAAA,GAAA,CAAI,CAAC,CAAM,KAAA,CAAA,CAAE,MAAM,KAAK,CAAA,CAAA;AAE7B,EAAA,OAAO,EAAE,KAAA,EAAO,IAAM,EAAA,MAAA,EAAQ,uBAAuB,YAAa,EAAA,CAAA;AACpE;;;;"}
1
+ {"version":3,"file":"event.mjs","sources":["../../src/event.ts"],"sourcesContent":["import { Observable, firstValueFrom, map, mergeMap } from \"rxjs\"\nimport { BlockInfo, ChainHead$ } from \"@polkadot-api/observable-client\"\nimport { CompatibilityFunctions, CompatibilityHelper } from \"./compatibility\"\nimport { concatMapEager, shareLatest } from \"./utils\"\n\nexport type EventPhase =\n | { type: \"ApplyExtrinsic\"; value: number }\n | { type: \"Finalization\" }\n | { type: \"Initialization\" }\n\nexport type EvWatch<T> = (filter?: (value: T) => boolean) => Observable<{\n meta: {\n block: BlockInfo\n phase: EventPhase\n }\n payload: T\n}>\n\nexport type EvPull<T> = () => Promise<\n Array<{\n meta: {\n block: BlockInfo\n phase: EventPhase\n }\n payload: T\n }>\n>\n\nexport type EvFilter<T> = (collection: SystemEvent[\"event\"][]) => Array<T>\n\nexport type EvClient<D, T> = {\n /**\n * Multicast and stateful Observable watching for new events (matching the\n * event kind chosen) in the latest known `finalized` block.\n *\n * @param filter Optional filter function to only emit events complying\n * with the function.\n */\n watch: EvWatch<T>\n /**\n * Fetch (Promise-based) all events (matching the event kind chosen) available\n * in the latest known `finalized` block.\n */\n pull: EvPull<T>\n /**\n * Filter a bunch of `SystemEvent` and return the decoded `payload` of every\n * of them.\n *\n * @param collection Array of `SystemEvent` to filter.\n */\n filter: EvFilter<T>\n} & CompatibilityFunctions<D>\n\ntype SystemEvent = {\n phase: EventPhase\n event: {\n type: string\n value: {\n type: string\n value: any\n }\n }\n topics: Array<any>\n}\n\nexport const createEventEntry = <D, T>(\n pallet: string,\n name: string,\n chainHead: ChainHead$,\n {\n isCompatible,\n getCompatibilityLevel,\n withCompatibleRuntime,\n argsAreCompatible,\n valuesAreCompatible,\n }: CompatibilityHelper,\n): EvClient<D, T> => {\n const compatibilityError = () =>\n new Error(`Incompatible runtime entry Event(${pallet}.${name})`)\n\n const shared$ = chainHead.finalized$.pipe(\n withCompatibleRuntime(chainHead, (x) => x.hash),\n map(([block, runtime, ctx]) => {\n const eventsIdx = ctx.lookup.metadata.pallets.find(\n (p) => p.name === pallet,\n )?.events\n if (\n eventsIdx == null ||\n ctx.lookup.metadata.lookup[eventsIdx].def.tag !== \"variant\" ||\n ctx.lookup.metadata.lookup[eventsIdx].def.value.find(\n (ev) => ev.name === name,\n ) == null\n )\n throw new Error(`Runtime entry Event(${pallet}.${name}) not found`)\n\n if (!argsAreCompatible(runtime, ctx, null)) throw compatibilityError()\n return [block, runtime, ctx] as const\n }),\n concatMapEager(([block, runtime, ctx]) =>\n chainHead.eventsAt$(block.hash).pipe(\n map((events) => {\n const winners = events.filter(\n (e) => e.event.type === pallet && e.event.value.type === name,\n )\n return winners.map((x) => {\n if (!valuesAreCompatible(runtime, ctx, x.event.value.value))\n throw compatibilityError()\n return {\n meta: {\n phase: x.phase,\n block,\n },\n payload: x.event.value.value,\n }\n })\n }),\n ),\n ),\n shareLatest,\n )\n\n const watch: EvWatch<T> = (f) =>\n shared$.pipe(mergeMap((x) => (f ? x.filter((d) => f(d.payload)) : x)))\n\n const pull: EvPull<T> = () => firstValueFrom(shared$)\n\n const filter: EvFilter<T> = (events) =>\n events\n .filter((e) => e.type === pallet && e.value.type === name)\n .map((x) => x.value.value)\n\n return { watch, pull, filter, getCompatibilityLevel, isCompatible }\n}\n"],"names":[],"mappings":"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"}
@@ -20,8 +20,13 @@ const createRuntimeCallEntry = (api, method, chainHead, {
20
20
  const at = _at ?? null;
21
21
  const result$ = compatibleRuntime$(chainHead, at).pipe(
22
22
  mergeMap(([runtime, ctx]) => {
23
+ let codecs;
24
+ try {
25
+ codecs = ctx.dynamicBuilder.buildRuntimeCall(api, method);
26
+ } catch {
27
+ throw new Error(`Runtime entry RuntimeCall(${callName}) not found`);
28
+ }
23
29
  if (!argsAreCompatible(runtime, ctx, args)) throw compatibilityError();
24
- const codecs = ctx.dynamicBuilder.buildRuntimeCall(api, method);
25
30
  return chainHead.call$(at, callName, toHex(codecs.args.enc(args))).pipe(
26
31
  map(codecs.value.dec),
27
32
  map((value) => {
@@ -1 +1 @@
1
- {"version":3,"file":"runtime-call.mjs","sources":["../../src/runtime-call.ts"],"sourcesContent":["import { firstValueFromWithSignal, isOptionalArg } from \"@/utils\"\nimport { ChainHead$ } from \"@polkadot-api/observable-client\"\nimport { toHex } from \"@polkadot-api/utils\"\nimport { map, mergeMap } from \"rxjs\"\nimport { CompatibilityFunctions, CompatibilityHelper } from \"./compatibility\"\n\ntype CallOptions = Partial<{\n at: string\n signal: AbortSignal\n}>\n\ntype WithCallOptions<Args extends Array<any>> = Args[\"length\"] extends 0\n ? [options?: CallOptions]\n : [...args: Args, options?: CallOptions]\n\nexport interface RuntimeCall<D, Args extends Array<any>, Payload>\n extends CompatibilityFunctions<D> {\n /**\n * Get `Payload` (Promise-based) for the runtime call.\n *\n * @param args All keys needed for that runtime call.\n * At the end, optionally set which block to target (latest\n * known finalized is the default) and an AbortSignal.\n */\n (...args: WithCallOptions<Args>): Promise<Payload>\n}\n\nexport const createRuntimeCallEntry = (\n api: string,\n method: string,\n chainHead: ChainHead$,\n {\n isCompatible,\n getCompatibilityLevel,\n compatibleRuntime$,\n argsAreCompatible,\n valuesAreCompatible,\n }: CompatibilityHelper,\n): RuntimeCall<any, any, any> => {\n const callName = `${api}_${method}`\n const compatibilityError = () =>\n new Error(`Incompatible runtime entry RuntimeCall(${callName})`)\n\n const fn = (...args: Array<any>) => {\n const lastArg = args[args.length - 1]\n const isLastArgOptional = isOptionalArg(lastArg)\n const { signal, at: _at }: CallOptions = isLastArgOptional ? lastArg : {}\n const at = _at ?? null\n\n const result$ = compatibleRuntime$(chainHead, at).pipe(\n mergeMap(([runtime, ctx]) => {\n if (!argsAreCompatible(runtime, ctx, args)) throw compatibilityError()\n const codecs = ctx.dynamicBuilder.buildRuntimeCall(api, method)\n return chainHead.call$(at, callName, toHex(codecs.args.enc(args))).pipe(\n map(codecs.value.dec),\n map((value) => {\n if (!valuesAreCompatible(runtime, ctx, value))\n throw compatibilityError()\n return value\n }),\n )\n }),\n )\n\n return firstValueFromWithSignal(result$, signal)\n }\n\n return Object.assign(fn, { getCompatibilityLevel, isCompatible })\n}\n"],"names":[],"mappings":";;;;;;AA2BO,MAAM,sBAAyB,GAAA,CACpC,GACA,EAAA,MAAA,EACA,SACA,EAAA;AAAA,EACE,YAAA;AAAA,EACA,qBAAA;AAAA,EACA,kBAAA;AAAA,EACA,iBAAA;AAAA,EACA,mBAAA;AACF,CAC+B,KAAA;AAC/B,EAAA,MAAM,QAAW,GAAA,CAAA,EAAG,GAAG,CAAA,CAAA,EAAI,MAAM,CAAA,CAAA,CAAA;AACjC,EAAA,MAAM,qBAAqB,MACzB,IAAI,KAAM,CAAA,CAAA,uCAAA,EAA0C,QAAQ,CAAG,CAAA,CAAA,CAAA,CAAA;AAEjE,EAAM,MAAA,EAAA,GAAK,IAAI,IAAqB,KAAA;AAClC,IAAA,MAAM,OAAU,GAAA,IAAA,CAAK,IAAK,CAAA,MAAA,GAAS,CAAC,CAAA,CAAA;AACpC,IAAM,MAAA,iBAAA,GAAoB,cAAc,OAAO,CAAA,CAAA;AAC/C,IAAA,MAAM,EAAE,MAAQ,EAAA,EAAA,EAAI,KAAqB,GAAA,iBAAA,GAAoB,UAAU,EAAC,CAAA;AACxE,IAAA,MAAM,KAAK,GAAO,IAAA,IAAA,CAAA;AAElB,IAAA,MAAM,OAAU,GAAA,kBAAA,CAAmB,SAAW,EAAA,EAAE,CAAE,CAAA,IAAA;AAAA,MAChD,QAAS,CAAA,CAAC,CAAC,OAAA,EAAS,GAAG,CAAM,KAAA;AAC3B,QAAA,IAAI,CAAC,iBAAkB,CAAA,OAAA,EAAS,KAAK,IAAI,CAAA,QAAS,kBAAmB,EAAA,CAAA;AACrE,QAAA,MAAM,MAAS,GAAA,GAAA,CAAI,cAAe,CAAA,gBAAA,CAAiB,KAAK,MAAM,CAAA,CAAA;AAC9D,QAAO,OAAA,SAAA,CAAU,KAAM,CAAA,EAAA,EAAI,QAAU,EAAA,KAAA,CAAM,MAAO,CAAA,IAAA,CAAK,GAAI,CAAA,IAAI,CAAC,CAAC,CAAE,CAAA,IAAA;AAAA,UACjE,GAAA,CAAI,MAAO,CAAA,KAAA,CAAM,GAAG,CAAA;AAAA,UACpB,GAAA,CAAI,CAAC,KAAU,KAAA;AACb,YAAA,IAAI,CAAC,mBAAA,CAAoB,OAAS,EAAA,GAAA,EAAK,KAAK,CAAA;AAC1C,cAAA,MAAM,kBAAmB,EAAA,CAAA;AAC3B,YAAO,OAAA,KAAA,CAAA;AAAA,WACR,CAAA;AAAA,SACH,CAAA;AAAA,OACD,CAAA;AAAA,KACH,CAAA;AAEA,IAAO,OAAA,wBAAA,CAAyB,SAAS,MAAM,CAAA,CAAA;AAAA,GACjD,CAAA;AAEA,EAAA,OAAO,OAAO,MAAO,CAAA,EAAA,EAAI,EAAE,qBAAA,EAAuB,cAAc,CAAA,CAAA;AAClE;;;;"}
1
+ {"version":3,"file":"runtime-call.mjs","sources":["../../src/runtime-call.ts"],"sourcesContent":["import { firstValueFromWithSignal, isOptionalArg } from \"@/utils\"\nimport { ChainHead$ } from \"@polkadot-api/observable-client\"\nimport { toHex } from \"@polkadot-api/utils\"\nimport { map, mergeMap } from \"rxjs\"\nimport { CompatibilityFunctions, CompatibilityHelper } from \"./compatibility\"\n\ntype CallOptions = Partial<{\n at: string\n signal: AbortSignal\n}>\n\ntype WithCallOptions<Args extends Array<any>> = Args[\"length\"] extends 0\n ? [options?: CallOptions]\n : [...args: Args, options?: CallOptions]\n\nexport interface RuntimeCall<D, Args extends Array<any>, Payload>\n extends CompatibilityFunctions<D> {\n /**\n * Get `Payload` (Promise-based) for the runtime call.\n *\n * @param args All keys needed for that runtime call.\n * At the end, optionally set which block to target (latest\n * known finalized is the default) and an AbortSignal.\n */\n (...args: WithCallOptions<Args>): Promise<Payload>\n}\n\nexport const createRuntimeCallEntry = (\n api: string,\n method: string,\n chainHead: ChainHead$,\n {\n isCompatible,\n getCompatibilityLevel,\n compatibleRuntime$,\n argsAreCompatible,\n valuesAreCompatible,\n }: CompatibilityHelper,\n): RuntimeCall<any, any, any> => {\n const callName = `${api}_${method}`\n const compatibilityError = () =>\n new Error(`Incompatible runtime entry RuntimeCall(${callName})`)\n\n const fn = (...args: Array<any>) => {\n const lastArg = args[args.length - 1]\n const isLastArgOptional = isOptionalArg(lastArg)\n const { signal, at: _at }: CallOptions = isLastArgOptional ? lastArg : {}\n const at = _at ?? null\n\n const result$ = compatibleRuntime$(chainHead, at).pipe(\n mergeMap(([runtime, ctx]) => {\n let codecs\n try {\n codecs = ctx.dynamicBuilder.buildRuntimeCall(api, method)\n } catch {\n throw new Error(`Runtime entry RuntimeCall(${callName}) not found`)\n }\n if (!argsAreCompatible(runtime, ctx, args)) throw compatibilityError()\n return chainHead.call$(at, callName, toHex(codecs.args.enc(args))).pipe(\n map(codecs.value.dec),\n map((value) => {\n if (!valuesAreCompatible(runtime, ctx, value))\n throw compatibilityError()\n return value\n }),\n )\n }),\n )\n\n return firstValueFromWithSignal(result$, signal)\n }\n\n return Object.assign(fn, { getCompatibilityLevel, isCompatible })\n}\n"],"names":[],"mappings":";;;;;;AA2BO,MAAM,sBAAyB,GAAA,CACpC,GACA,EAAA,MAAA,EACA,SACA,EAAA;AAAA,EACE,YAAA;AAAA,EACA,qBAAA;AAAA,EACA,kBAAA;AAAA,EACA,iBAAA;AAAA,EACA,mBAAA;AACF,CAC+B,KAAA;AAC/B,EAAA,MAAM,QAAW,GAAA,CAAA,EAAG,GAAG,CAAA,CAAA,EAAI,MAAM,CAAA,CAAA,CAAA;AACjC,EAAA,MAAM,qBAAqB,MACzB,IAAI,KAAM,CAAA,CAAA,uCAAA,EAA0C,QAAQ,CAAG,CAAA,CAAA,CAAA,CAAA;AAEjE,EAAM,MAAA,EAAA,GAAK,IAAI,IAAqB,KAAA;AAClC,IAAA,MAAM,OAAU,GAAA,IAAA,CAAK,IAAK,CAAA,MAAA,GAAS,CAAC,CAAA,CAAA;AACpC,IAAM,MAAA,iBAAA,GAAoB,cAAc,OAAO,CAAA,CAAA;AAC/C,IAAA,MAAM,EAAE,MAAQ,EAAA,EAAA,EAAI,KAAqB,GAAA,iBAAA,GAAoB,UAAU,EAAC,CAAA;AACxE,IAAA,MAAM,KAAK,GAAO,IAAA,IAAA,CAAA;AAElB,IAAA,MAAM,OAAU,GAAA,kBAAA,CAAmB,SAAW,EAAA,EAAE,CAAE,CAAA,IAAA;AAAA,MAChD,QAAS,CAAA,CAAC,CAAC,OAAA,EAAS,GAAG,CAAM,KAAA;AAC3B,QAAI,IAAA,MAAA,CAAA;AACJ,QAAI,IAAA;AACF,UAAA,MAAA,GAAS,GAAI,CAAA,cAAA,CAAe,gBAAiB,CAAA,GAAA,EAAK,MAAM,CAAA,CAAA;AAAA,SAClD,CAAA,MAAA;AACN,UAAA,MAAM,IAAI,KAAA,CAAM,CAA6B,0BAAA,EAAA,QAAQ,CAAa,WAAA,CAAA,CAAA,CAAA;AAAA,SACpE;AACA,QAAA,IAAI,CAAC,iBAAkB,CAAA,OAAA,EAAS,KAAK,IAAI,CAAA,QAAS,kBAAmB,EAAA,CAAA;AACrE,QAAO,OAAA,SAAA,CAAU,KAAM,CAAA,EAAA,EAAI,QAAU,EAAA,KAAA,CAAM,MAAO,CAAA,IAAA,CAAK,GAAI,CAAA,IAAI,CAAC,CAAC,CAAE,CAAA,IAAA;AAAA,UACjE,GAAA,CAAI,MAAO,CAAA,KAAA,CAAM,GAAG,CAAA;AAAA,UACpB,GAAA,CAAI,CAAC,KAAU,KAAA;AACb,YAAA,IAAI,CAAC,mBAAA,CAAoB,OAAS,EAAA,GAAA,EAAK,KAAK,CAAA;AAC1C,cAAA,MAAM,kBAAmB,EAAA,CAAA;AAC3B,YAAO,OAAA,KAAA,CAAA;AAAA,WACR,CAAA;AAAA,SACH,CAAA;AAAA,OACD,CAAA;AAAA,KACH,CAAA;AAEA,IAAO,OAAA,wBAAA,CAAyB,SAAS,MAAM,CAAA,CAAA;AAAA,GACjD,CAAA;AAEA,EAAA,OAAO,OAAO,MAAO,CAAA,EAAA,EAAI,EAAE,qBAAA,EAAuB,cAAc,CAAA,CAAA;AAClE;;;;"}
@@ -19,6 +19,13 @@ const createStorageEntry = (pallet, name, chainHead, {
19
19
  const isSystemNumber = pallet === "System" && name === "Number";
20
20
  const incompatibleError = () => new Error(`Incompatible runtime entry Storage(${pallet}.${name})`);
21
21
  const invalidArgs = (args) => new Error(`Invalid Arguments calling ${pallet}.${name}(${args})`);
22
+ const getCodec = (ctx) => {
23
+ try {
24
+ return ctx.dynamicBuilder.buildStorage(pallet, name);
25
+ } catch {
26
+ throw new Error(`Runtime entry Storage(${pallet}.${name}) not found`);
27
+ }
28
+ };
22
29
  const watchValue = (...args) => {
23
30
  const target = args[args.length - 1];
24
31
  const actualArgs = target === "best" || target === "finalized" ? args.slice(0, -1) : args;
@@ -31,9 +38,9 @@ const createStorageEntry = (pallet, name, chainHead, {
31
38
  debounceTime(0),
32
39
  withCompatibleRuntime(chainHead, (x) => x.hash),
33
40
  raceMap(([block, runtime, ctx]) => {
41
+ const codecs = getCodec(ctx);
34
42
  if (!argsAreCompatible(runtime, ctx, actualArgs))
35
43
  throw incompatibleError();
36
- const codecs = ctx.dynamicBuilder.buildStorage(pallet, name);
37
44
  return chainHead.storage$(block.hash, "value", () => codecs.enc(...actualArgs)).pipe(
38
45
  map((val) => {
39
46
  if (!valuesAreCompatible(runtime, ctx, val))
@@ -73,7 +80,7 @@ const createStorageEntry = (pallet, name, chainHead, {
73
80
  at,
74
81
  "value",
75
82
  (ctx) => {
76
- const codecs = ctx.dynamicBuilder.buildStorage(pallet, name);
83
+ const codecs = getCodec(ctx);
77
84
  const actualArgs = args.length === codecs.len ? args : args.slice(0, -1);
78
85
  if (args !== actualArgs && !isLastArgOptional) throw invalidArgs(args);
79
86
  if (!argsAreCompatible(descriptors, ctx, actualArgs))
@@ -82,7 +89,7 @@ const createStorageEntry = (pallet, name, chainHead, {
82
89
  },
83
90
  null,
84
91
  (data, ctx) => {
85
- const codecs = ctx.dynamicBuilder.buildStorage(pallet, name);
92
+ const codecs = getCodec(ctx);
86
93
  const value = data === null ? codecs.fallback : codecs.dec(data);
87
94
  if (!valuesAreCompatible(descriptors, ctx, value))
88
95
  throw incompatibleError();
@@ -102,9 +109,9 @@ const createStorageEntry = (pallet, name, chainHead, {
102
109
  at,
103
110
  "descendantsValues",
104
111
  (ctx) => {
112
+ const codecs = getCodec(ctx);
105
113
  if (minCompatLevel(getCompatibilityLevels(descriptors, ctx)) === CompatibilityLevel.Incompatible)
106
114
  throw incompatibleError();
107
- const codecs = ctx.dynamicBuilder.buildStorage(pallet, name);
108
115
  if (args.length > codecs.len) throw invalidArgs(args);
109
116
  const actualArgs = args.length > 0 && isLastArgOptional ? args.slice(0, -1) : args;
110
117
  if (args.length === codecs.len && actualArgs === args)
@@ -113,7 +120,7 @@ const createStorageEntry = (pallet, name, chainHead, {
113
120
  },
114
121
  null,
115
122
  (values, ctx) => {
116
- const codecs = ctx.dynamicBuilder.buildStorage(pallet, name);
123
+ const codecs = getCodec(ctx);
117
124
  if (values.some(
118
125
  ({ value }) => !valuesAreCompatible(descriptors, ctx, value)
119
126
  ))
@@ -1 +1 @@
1
- {"version":3,"file":"storage.mjs","sources":["../../src/storage.ts"],"sourcesContent":["import { firstValueFromWithSignal, isOptionalArg, raceMap } from \"@/utils\"\nimport { ChainHead$, NotBestBlockError } from \"@polkadot-api/observable-client\"\nimport { StorageItemInput, StorageResult } from \"@polkadot-api/substrate-client\"\nimport { Observable, debounceTime, distinctUntilChanged, map } from \"rxjs\"\nimport {\n CompatibilityFunctions,\n CompatibilityHelper,\n minCompatLevel,\n} from \"./compatibility\"\nimport { CompatibilityLevel } from \"@polkadot-api/metadata-compatibility\"\n\ntype CallOptions = Partial<{\n /**\n * `at` could be a blockHash, `best`, or `finalized` (default)\n */\n at: string\n /**\n * `signal` allows you to abort an ongoing Promise. See [MDN\n * docs](https://developer.mozilla.org/en-US/docs/Web/API/AbortSignal) for\n * more information\n */\n signal: AbortSignal\n}>\n\ntype WithCallOptions<Args extends Array<any>> = [\n ...args: Args,\n options?: CallOptions,\n]\n\ntype PossibleParents<A extends Array<any>> = A extends [...infer Left, any]\n ? Left | PossibleParents<Left>\n : ArrayPossibleParents<A>\n\n// Fixed-size arrays values can't be extracted one-by-one, so that's a specific case\ntype ArrayPossibleParents<\n A extends Array<any>,\n Count extends Array<any> = [],\n R = [],\n> = A extends Array<infer T> & { length: infer L }\n ? number extends L\n ? Array<T> // Case variable-size array it's an unknown amount of entries\n : L extends Count[\"length\"]\n ? R\n : ArrayPossibleParents<A, [...Count, T], R | Count>\n : never\n\ntype StorageEntryWithoutKeys<D, Payload> = {\n /**\n * Get `Payload` (Promise-based) for the storage entry.\n *\n * @param options Optionally set which block to target (latest known\n * finalized is the default) and an AbortSignal.\n */\n getValue: (options?: CallOptions) => Promise<Payload>\n /**\n * Watch changes in `Payload` (observable-based) for the storage entry.\n *\n * @param bestOrFinalized Optionally choose which block to query and watch\n * changes, `best` or `finalized` (default)\n */\n watchValue: (bestOrFinalized?: \"best\" | \"finalized\") => Observable<Payload>\n} & CompatibilityFunctions<D>\n\ntype StorageEntryWithKeys<D, Args extends Array<any>, Payload> = {\n /**\n * Get `Payload` (Promise-based) for the storage entry with a specific set of\n * `Args`.\n *\n * @param args All keys needed for that storage entry.\n * At the end, optionally set which block to target (latest\n * known finalized is the default) and an AbortSignal.\n */\n getValue: (...args: [...WithCallOptions<Args>]) => Promise<Payload>\n /**\n * Watch changes in `Payload` (observable-based) for the storage entry.\n *\n * @param args All keys needed for that storage entry.\n * At the end, optionally choose which block to query and\n * watch changes, `best` or `finalized` (default)\n */\n watchValue: (\n ...args: [...Args, bestOrFinalized?: \"best\" | \"finalized\"]\n ) => Observable<Payload>\n /**\n * Get an Array of `Payload` (Promise-based) for the storage entry with\n * several sets of `Args`.\n *\n * @param keys Array of sets of keys needed for the storage entry.\n * @param options Optionally set which block to target (latest known\n * finalized is the default) and an AbortSignal.\n */\n getValues: (\n keys: Array<[...Args]>,\n options?: CallOptions,\n ) => Promise<Array<Payload>>\n /**\n * Get an Array of `Payload` (Promise-based) for the storage entry with a\n * subset of `Args`.\n *\n * @param args Subset of keys needed for the storage entry.\n * At the end, optionally set which block to target (latest\n * known finalized is the default) and an AbortSignal.\n * @example\n *\n * // this is a query with 3 keys\n * typedApi.query.Pallet.Query.getEntries({ at: \"best\" }) // no keys\n * typedApi.query.Pallet.Query.getEntries(arg1, { at: \"finalized\" }) // 1/3 keys\n * typedApi.query.Pallet.Query.getEntries(arg1, arg2, { at: \"0x12345678\" }) // 2/3 keys\n *\n */\n getEntries: (\n ...args: WithCallOptions<PossibleParents<Args>>\n ) => Promise<Array<{ keyArgs: Args; value: NonNullable<Payload> }>>\n} & CompatibilityFunctions<D>\n\nexport type StorageEntry<D, Args extends Array<any>, Payload> = Args extends []\n ? StorageEntryWithoutKeys<D, Payload>\n : StorageEntryWithKeys<D, Args, Payload>\n\nexport type Storage$ = <Type extends StorageItemInput[\"type\"]>(\n hash: string | null,\n type: Type,\n key: string,\n childTrie: string | null,\n) => Observable<StorageResult<Type>>\n\nexport const createStorageEntry = (\n pallet: string,\n name: string,\n chainHead: ChainHead$,\n {\n isCompatible,\n getCompatibilityLevel,\n getCompatibilityLevels,\n waitDescriptors,\n withCompatibleRuntime,\n argsAreCompatible,\n valuesAreCompatible,\n }: CompatibilityHelper,\n): StorageEntry<any, any, any> => {\n const isSystemNumber = pallet === \"System\" && name === \"Number\"\n\n const incompatibleError = () =>\n new Error(`Incompatible runtime entry Storage(${pallet}.${name})`)\n const invalidArgs = (args: Array<any>) =>\n new Error(`Invalid Arguments calling ${pallet}.${name}(${args})`)\n\n const watchValue = (...args: Array<any>) => {\n const target = args[args.length - 1]\n const actualArgs =\n target === \"best\" || target === \"finalized\" ? args.slice(0, -1) : args\n\n if (isSystemNumber)\n return chainHead.bestBlocks$.pipe(\n map((blocks) => blocks.at(target === \"best\" ? 0 : -1)!.number),\n distinctUntilChanged(),\n )\n\n return chainHead[target === \"best\" ? \"best$\" : \"finalized$\"].pipe(\n debounceTime(0),\n withCompatibleRuntime(chainHead, (x) => x.hash),\n raceMap(([block, runtime, ctx]) => {\n if (!argsAreCompatible(runtime, ctx, actualArgs))\n throw incompatibleError()\n const codecs = ctx.dynamicBuilder.buildStorage(pallet, name)\n return chainHead\n .storage$(block.hash, \"value\", () => codecs.enc(...actualArgs))\n .pipe(\n map((val) => {\n if (!valuesAreCompatible(runtime, ctx, val))\n throw incompatibleError()\n return { val, codecs }\n }),\n )\n }, 4),\n distinctUntilChanged((a, b) => a.val === b.val),\n map(({ val, codecs }) =>\n val === null ? codecs.fallback : codecs.dec(val),\n ),\n )\n }\n\n const getValue = async (...args: Array<any>) => {\n const lastArg = args[args.length - 1]\n const isLastArgOptional = isOptionalArg(lastArg)\n const { signal, at: _at }: CallOptions = isLastArgOptional ? lastArg : {}\n const at = _at ?? null\n\n let result$: Observable<any>\n if (isSystemNumber) {\n result$ = chainHead.bestBlocks$.pipe(\n map((blocks) => {\n if (at === \"finalized\" || !at) return blocks.at(-1)\n if (at === \"best\") return blocks.at(0)\n return blocks.find((block) => block.hash === at)\n }),\n map((block) => {\n if (!block) throw new NotBestBlockError()\n return block.number\n }),\n distinctUntilChanged(),\n )\n } else {\n const descriptors = await waitDescriptors()\n result$ = chainHead.storage$(\n at,\n \"value\",\n (ctx) => {\n const codecs = ctx.dynamicBuilder.buildStorage(pallet, name)\n const actualArgs =\n args.length === codecs.len ? args : args.slice(0, -1)\n if (args !== actualArgs && !isLastArgOptional) throw invalidArgs(args)\n if (!argsAreCompatible(descriptors, ctx, actualArgs))\n throw incompatibleError()\n return codecs.enc(...actualArgs)\n },\n null,\n (data, ctx) => {\n const codecs = ctx.dynamicBuilder.buildStorage(pallet, name)\n const value = data === null ? codecs.fallback : codecs.dec(data)\n if (!valuesAreCompatible(descriptors, ctx, value))\n throw incompatibleError()\n return value\n },\n )\n }\n\n return firstValueFromWithSignal(result$, signal)\n }\n\n const getEntries = async (...args: Array<any>) => {\n const lastArg = args[args.length - 1]\n const isLastArgOptional = isOptionalArg(lastArg)\n const { signal, at: _at }: CallOptions = isLastArgOptional ? lastArg : {}\n const at = _at ?? null\n\n const descriptors = await waitDescriptors()\n const result$ = chainHead.storage$(\n at,\n \"descendantsValues\",\n (ctx) => {\n // TODO partial compatibility check for args that become optional\n if (\n minCompatLevel(getCompatibilityLevels(descriptors, ctx)) ===\n CompatibilityLevel.Incompatible\n )\n throw incompatibleError()\n\n const codecs = ctx.dynamicBuilder.buildStorage(pallet, name)\n if (args.length > codecs.len) throw invalidArgs(args)\n const actualArgs =\n args.length > 0 && isLastArgOptional ? args.slice(0, -1) : args\n if (args.length === codecs.len && actualArgs === args)\n throw invalidArgs(args)\n return codecs.enc(...actualArgs)\n },\n null,\n (values, ctx) => {\n const codecs = ctx.dynamicBuilder.buildStorage(pallet, name)\n if (\n values.some(\n ({ value }) => !valuesAreCompatible(descriptors, ctx, value),\n )\n )\n throw incompatibleError()\n return values.map(({ key, value }) => ({\n keyArgs: codecs.keyDecoder(key),\n value: codecs.dec(value),\n }))\n },\n )\n return firstValueFromWithSignal(result$, signal)\n }\n\n const getValues = (keyArgs: Array<Array<any>>, options?: CallOptions) =>\n Promise.all(\n keyArgs.map((args) => getValue(...(options ? [...args, options] : args))),\n )\n\n return {\n isCompatible,\n getCompatibilityLevel,\n getValue,\n getValues,\n getEntries,\n watchValue,\n }\n}\n"],"names":[],"mappings":";;;;;;;;;AA8HO,MAAM,kBAAqB,GAAA,CAChC,MACA,EAAA,IAAA,EACA,SACA,EAAA;AAAA,EACE,YAAA;AAAA,EACA,qBAAA;AAAA,EACA,sBAAA;AAAA,EACA,eAAA;AAAA,EACA,qBAAA;AAAA,EACA,iBAAA;AAAA,EACA,mBAAA;AACF,CACgC,KAAA;AAChC,EAAM,MAAA,cAAA,GAAiB,MAAW,KAAA,QAAA,IAAY,IAAS,KAAA,QAAA,CAAA;AAEvD,EAAM,MAAA,iBAAA,GAAoB,MACxB,IAAI,KAAA,CAAM,sCAAsC,MAAM,CAAA,CAAA,EAAI,IAAI,CAAG,CAAA,CAAA,CAAA,CAAA;AACnE,EAAM,MAAA,WAAA,GAAc,CAAC,IAAA,KACnB,IAAI,KAAA,CAAM,CAA6B,0BAAA,EAAA,MAAM,CAAI,CAAA,EAAA,IAAI,CAAI,CAAA,EAAA,IAAI,CAAG,CAAA,CAAA,CAAA,CAAA;AAElE,EAAM,MAAA,UAAA,GAAa,IAAI,IAAqB,KAAA;AAC1C,IAAA,MAAM,MAAS,GAAA,IAAA,CAAK,IAAK,CAAA,MAAA,GAAS,CAAC,CAAA,CAAA;AACnC,IAAM,MAAA,UAAA,GACJ,WAAW,MAAU,IAAA,MAAA,KAAW,cAAc,IAAK,CAAA,KAAA,CAAM,CAAG,EAAA,CAAA,CAAE,CAAI,GAAA,IAAA,CAAA;AAEpE,IAAI,IAAA,cAAA;AACF,MAAA,OAAO,UAAU,WAAY,CAAA,IAAA;AAAA,QAC3B,GAAA,CAAI,CAAC,MAAA,KAAW,MAAO,CAAA,EAAA,CAAG,WAAW,MAAS,GAAA,CAAA,GAAI,CAAE,CAAA,CAAA,CAAG,MAAM,CAAA;AAAA,QAC7D,oBAAqB,EAAA;AAAA,OACvB,CAAA;AAEF,IAAA,OAAO,SAAU,CAAA,MAAA,KAAW,MAAS,GAAA,OAAA,GAAU,YAAY,CAAE,CAAA,IAAA;AAAA,MAC3D,aAAa,CAAC,CAAA;AAAA,MACd,qBAAsB,CAAA,SAAA,EAAW,CAAC,CAAA,KAAM,EAAE,IAAI,CAAA;AAAA,MAC9C,QAAQ,CAAC,CAAC,KAAO,EAAA,OAAA,EAAS,GAAG,CAAM,KAAA;AACjC,QAAA,IAAI,CAAC,iBAAA,CAAkB,OAAS,EAAA,GAAA,EAAK,UAAU,CAAA;AAC7C,UAAA,MAAM,iBAAkB,EAAA,CAAA;AAC1B,QAAA,MAAM,MAAS,GAAA,GAAA,CAAI,cAAe,CAAA,YAAA,CAAa,QAAQ,IAAI,CAAA,CAAA;AAC3D,QAAO,OAAA,SAAA,CACJ,QAAS,CAAA,KAAA,CAAM,IAAM,EAAA,OAAA,EAAS,MAAM,MAAA,CAAO,GAAI,CAAA,GAAG,UAAU,CAAC,CAC7D,CAAA,IAAA;AAAA,UACC,GAAA,CAAI,CAAC,GAAQ,KAAA;AACX,YAAA,IAAI,CAAC,mBAAA,CAAoB,OAAS,EAAA,GAAA,EAAK,GAAG,CAAA;AACxC,cAAA,MAAM,iBAAkB,EAAA,CAAA;AAC1B,YAAO,OAAA,EAAE,KAAK,MAAO,EAAA,CAAA;AAAA,WACtB,CAAA;AAAA,SACH,CAAA;AAAA,SACD,CAAC,CAAA;AAAA,MACJ,qBAAqB,CAAC,CAAA,EAAG,MAAM,CAAE,CAAA,GAAA,KAAQ,EAAE,GAAG,CAAA;AAAA,MAC9C,GAAA;AAAA,QAAI,CAAC,EAAE,GAAA,EAAK,MAAO,EAAA,KACjB,GAAQ,KAAA,IAAA,GAAO,MAAO,CAAA,QAAA,GAAW,MAAO,CAAA,GAAA,CAAI,GAAG,CAAA;AAAA,OACjD;AAAA,KACF,CAAA;AAAA,GACF,CAAA;AAEA,EAAM,MAAA,QAAA,GAAW,UAAU,IAAqB,KAAA;AAC9C,IAAA,MAAM,OAAU,GAAA,IAAA,CAAK,IAAK,CAAA,MAAA,GAAS,CAAC,CAAA,CAAA;AACpC,IAAM,MAAA,iBAAA,GAAoB,cAAc,OAAO,CAAA,CAAA;AAC/C,IAAA,MAAM,EAAE,MAAQ,EAAA,EAAA,EAAI,KAAqB,GAAA,iBAAA,GAAoB,UAAU,EAAC,CAAA;AACxE,IAAA,MAAM,KAAK,GAAO,IAAA,IAAA,CAAA;AAElB,IAAI,IAAA,OAAA,CAAA;AACJ,IAAA,IAAI,cAAgB,EAAA;AAClB,MAAA,OAAA,GAAU,UAAU,WAAY,CAAA,IAAA;AAAA,QAC9B,GAAA,CAAI,CAAC,MAAW,KAAA;AACd,UAAA,IAAI,OAAO,WAAe,IAAA,CAAC,IAAW,OAAA,MAAA,CAAO,GAAG,CAAE,CAAA,CAAA,CAAA;AAClD,UAAA,IAAI,EAAO,KAAA,MAAA,EAAe,OAAA,MAAA,CAAO,GAAG,CAAC,CAAA,CAAA;AACrC,UAAA,OAAO,OAAO,IAAK,CAAA,CAAC,KAAU,KAAA,KAAA,CAAM,SAAS,EAAE,CAAA,CAAA;AAAA,SAChD,CAAA;AAAA,QACD,GAAA,CAAI,CAAC,KAAU,KAAA;AACb,UAAA,IAAI,CAAC,KAAA,EAAa,MAAA,IAAI,iBAAkB,EAAA,CAAA;AACxC,UAAA,OAAO,KAAM,CAAA,MAAA,CAAA;AAAA,SACd,CAAA;AAAA,QACD,oBAAqB,EAAA;AAAA,OACvB,CAAA;AAAA,KACK,MAAA;AACL,MAAM,MAAA,WAAA,GAAc,MAAM,eAAgB,EAAA,CAAA;AAC1C,MAAA,OAAA,GAAU,SAAU,CAAA,QAAA;AAAA,QAClB,EAAA;AAAA,QACA,OAAA;AAAA,QACA,CAAC,GAAQ,KAAA;AACP,UAAA,MAAM,MAAS,GAAA,GAAA,CAAI,cAAe,CAAA,YAAA,CAAa,QAAQ,IAAI,CAAA,CAAA;AAC3D,UAAM,MAAA,UAAA,GACJ,KAAK,MAAW,KAAA,MAAA,CAAO,MAAM,IAAO,GAAA,IAAA,CAAK,KAAM,CAAA,CAAA,EAAG,CAAE,CAAA,CAAA,CAAA;AACtD,UAAA,IAAI,SAAS,UAAc,IAAA,CAAC,iBAAmB,EAAA,MAAM,YAAY,IAAI,CAAA,CAAA;AACrE,UAAA,IAAI,CAAC,iBAAA,CAAkB,WAAa,EAAA,GAAA,EAAK,UAAU,CAAA;AACjD,YAAA,MAAM,iBAAkB,EAAA,CAAA;AAC1B,UAAO,OAAA,MAAA,CAAO,GAAI,CAAA,GAAG,UAAU,CAAA,CAAA;AAAA,SACjC;AAAA,QACA,IAAA;AAAA,QACA,CAAC,MAAM,GAAQ,KAAA;AACb,UAAA,MAAM,MAAS,GAAA,GAAA,CAAI,cAAe,CAAA,YAAA,CAAa,QAAQ,IAAI,CAAA,CAAA;AAC3D,UAAA,MAAM,QAAQ,IAAS,KAAA,IAAA,GAAO,OAAO,QAAW,GAAA,MAAA,CAAO,IAAI,IAAI,CAAA,CAAA;AAC/D,UAAA,IAAI,CAAC,mBAAA,CAAoB,WAAa,EAAA,GAAA,EAAK,KAAK,CAAA;AAC9C,YAAA,MAAM,iBAAkB,EAAA,CAAA;AAC1B,UAAO,OAAA,KAAA,CAAA;AAAA,SACT;AAAA,OACF,CAAA;AAAA,KACF;AAEA,IAAO,OAAA,wBAAA,CAAyB,SAAS,MAAM,CAAA,CAAA;AAAA,GACjD,CAAA;AAEA,EAAM,MAAA,UAAA,GAAa,UAAU,IAAqB,KAAA;AAChD,IAAA,MAAM,OAAU,GAAA,IAAA,CAAK,IAAK,CAAA,MAAA,GAAS,CAAC,CAAA,CAAA;AACpC,IAAM,MAAA,iBAAA,GAAoB,cAAc,OAAO,CAAA,CAAA;AAC/C,IAAA,MAAM,EAAE,MAAQ,EAAA,EAAA,EAAI,KAAqB,GAAA,iBAAA,GAAoB,UAAU,EAAC,CAAA;AACxE,IAAA,MAAM,KAAK,GAAO,IAAA,IAAA,CAAA;AAElB,IAAM,MAAA,WAAA,GAAc,MAAM,eAAgB,EAAA,CAAA;AAC1C,IAAA,MAAM,UAAU,SAAU,CAAA,QAAA;AAAA,MACxB,EAAA;AAAA,MACA,mBAAA;AAAA,MACA,CAAC,GAAQ,KAAA;AAEP,QAAA,IACE,eAAe,sBAAuB,CAAA,WAAA,EAAa,GAAG,CAAC,MACvD,kBAAmB,CAAA,YAAA;AAEnB,UAAA,MAAM,iBAAkB,EAAA,CAAA;AAE1B,QAAA,MAAM,MAAS,GAAA,GAAA,CAAI,cAAe,CAAA,YAAA,CAAa,QAAQ,IAAI,CAAA,CAAA;AAC3D,QAAA,IAAI,KAAK,MAAS,GAAA,MAAA,CAAO,GAAK,EAAA,MAAM,YAAY,IAAI,CAAA,CAAA;AACpD,QAAM,MAAA,UAAA,GACJ,KAAK,MAAS,GAAA,CAAA,IAAK,oBAAoB,IAAK,CAAA,KAAA,CAAM,CAAG,EAAA,CAAA,CAAE,CAAI,GAAA,IAAA,CAAA;AAC7D,QAAA,IAAI,IAAK,CAAA,MAAA,KAAW,MAAO,CAAA,GAAA,IAAO,UAAe,KAAA,IAAA;AAC/C,UAAA,MAAM,YAAY,IAAI,CAAA,CAAA;AACxB,QAAO,OAAA,MAAA,CAAO,GAAI,CAAA,GAAG,UAAU,CAAA,CAAA;AAAA,OACjC;AAAA,MACA,IAAA;AAAA,MACA,CAAC,QAAQ,GAAQ,KAAA;AACf,QAAA,MAAM,MAAS,GAAA,GAAA,CAAI,cAAe,CAAA,YAAA,CAAa,QAAQ,IAAI,CAAA,CAAA;AAC3D,QAAA,IACE,MAAO,CAAA,IAAA;AAAA,UACL,CAAC,EAAE,KAAM,EAAA,KAAM,CAAC,mBAAoB,CAAA,WAAA,EAAa,KAAK,KAAK,CAAA;AAAA,SAC7D;AAEA,UAAA,MAAM,iBAAkB,EAAA,CAAA;AAC1B,QAAA,OAAO,OAAO,GAAI,CAAA,CAAC,EAAE,GAAA,EAAK,OAAa,MAAA;AAAA,UACrC,OAAA,EAAS,MAAO,CAAA,UAAA,CAAW,GAAG,CAAA;AAAA,UAC9B,KAAA,EAAO,MAAO,CAAA,GAAA,CAAI,KAAK,CAAA;AAAA,SACvB,CAAA,CAAA,CAAA;AAAA,OACJ;AAAA,KACF,CAAA;AACA,IAAO,OAAA,wBAAA,CAAyB,SAAS,MAAM,CAAA,CAAA;AAAA,GACjD,CAAA;AAEA,EAAA,MAAM,SAAY,GAAA,CAAC,OAA4B,EAAA,OAAA,KAC7C,OAAQ,CAAA,GAAA;AAAA,IACN,OAAQ,CAAA,GAAA,CAAI,CAAC,IAAA,KAAS,QAAS,CAAA,GAAI,OAAU,GAAA,CAAC,GAAG,IAAA,EAAM,OAAO,CAAA,GAAI,IAAK,CAAC,CAAA;AAAA,GAC1E,CAAA;AAEF,EAAO,OAAA;AAAA,IACL,YAAA;AAAA,IACA,qBAAA;AAAA,IACA,QAAA;AAAA,IACA,SAAA;AAAA,IACA,UAAA;AAAA,IACA,UAAA;AAAA,GACF,CAAA;AACF;;;;"}
1
+ {"version":3,"file":"storage.mjs","sources":["../../src/storage.ts"],"sourcesContent":["import { firstValueFromWithSignal, isOptionalArg, raceMap } from \"@/utils\"\nimport {\n ChainHead$,\n NotBestBlockError,\n RuntimeContext,\n} from \"@polkadot-api/observable-client\"\nimport { StorageItemInput, StorageResult } from \"@polkadot-api/substrate-client\"\nimport { Observable, debounceTime, distinctUntilChanged, map } from \"rxjs\"\nimport {\n CompatibilityFunctions,\n CompatibilityHelper,\n minCompatLevel,\n} from \"./compatibility\"\nimport { CompatibilityLevel } from \"@polkadot-api/metadata-compatibility\"\n\ntype CallOptions = Partial<{\n /**\n * `at` could be a blockHash, `best`, or `finalized` (default)\n */\n at: string\n /**\n * `signal` allows you to abort an ongoing Promise. See [MDN\n * docs](https://developer.mozilla.org/en-US/docs/Web/API/AbortSignal) for\n * more information\n */\n signal: AbortSignal\n}>\n\ntype WithCallOptions<Args extends Array<any>> = [\n ...args: Args,\n options?: CallOptions,\n]\n\ntype PossibleParents<A extends Array<any>> = A extends [...infer Left, any]\n ? Left | PossibleParents<Left>\n : ArrayPossibleParents<A>\n\n// Fixed-size arrays values can't be extracted one-by-one, so that's a specific case\ntype ArrayPossibleParents<\n A extends Array<any>,\n Count extends Array<any> = [],\n R = [],\n> = A extends Array<infer T> & { length: infer L }\n ? number extends L\n ? Array<T> // Case variable-size array it's an unknown amount of entries\n : L extends Count[\"length\"]\n ? R\n : ArrayPossibleParents<A, [...Count, T], R | Count>\n : never\n\ntype StorageEntryWithoutKeys<D, Payload> = {\n /**\n * Get `Payload` (Promise-based) for the storage entry.\n *\n * @param options Optionally set which block to target (latest known\n * finalized is the default) and an AbortSignal.\n */\n getValue: (options?: CallOptions) => Promise<Payload>\n /**\n * Watch changes in `Payload` (observable-based) for the storage entry.\n *\n * @param bestOrFinalized Optionally choose which block to query and watch\n * changes, `best` or `finalized` (default)\n */\n watchValue: (bestOrFinalized?: \"best\" | \"finalized\") => Observable<Payload>\n} & CompatibilityFunctions<D>\n\ntype StorageEntryWithKeys<D, Args extends Array<any>, Payload> = {\n /**\n * Get `Payload` (Promise-based) for the storage entry with a specific set of\n * `Args`.\n *\n * @param args All keys needed for that storage entry.\n * At the end, optionally set which block to target (latest\n * known finalized is the default) and an AbortSignal.\n */\n getValue: (...args: [...WithCallOptions<Args>]) => Promise<Payload>\n /**\n * Watch changes in `Payload` (observable-based) for the storage entry.\n *\n * @param args All keys needed for that storage entry.\n * At the end, optionally choose which block to query and\n * watch changes, `best` or `finalized` (default)\n */\n watchValue: (\n ...args: [...Args, bestOrFinalized?: \"best\" | \"finalized\"]\n ) => Observable<Payload>\n /**\n * Get an Array of `Payload` (Promise-based) for the storage entry with\n * several sets of `Args`.\n *\n * @param keys Array of sets of keys needed for the storage entry.\n * @param options Optionally set which block to target (latest known\n * finalized is the default) and an AbortSignal.\n */\n getValues: (\n keys: Array<[...Args]>,\n options?: CallOptions,\n ) => Promise<Array<Payload>>\n /**\n * Get an Array of `Payload` (Promise-based) for the storage entry with a\n * subset of `Args`.\n *\n * @param args Subset of keys needed for the storage entry.\n * At the end, optionally set which block to target (latest\n * known finalized is the default) and an AbortSignal.\n * @example\n *\n * // this is a query with 3 keys\n * typedApi.query.Pallet.Query.getEntries({ at: \"best\" }) // no keys\n * typedApi.query.Pallet.Query.getEntries(arg1, { at: \"finalized\" }) // 1/3 keys\n * typedApi.query.Pallet.Query.getEntries(arg1, arg2, { at: \"0x12345678\" }) // 2/3 keys\n *\n */\n getEntries: (\n ...args: WithCallOptions<PossibleParents<Args>>\n ) => Promise<Array<{ keyArgs: Args; value: NonNullable<Payload> }>>\n} & CompatibilityFunctions<D>\n\nexport type StorageEntry<D, Args extends Array<any>, Payload> = Args extends []\n ? StorageEntryWithoutKeys<D, Payload>\n : StorageEntryWithKeys<D, Args, Payload>\n\nexport type Storage$ = <Type extends StorageItemInput[\"type\"]>(\n hash: string | null,\n type: Type,\n key: string,\n childTrie: string | null,\n) => Observable<StorageResult<Type>>\n\nexport const createStorageEntry = (\n pallet: string,\n name: string,\n chainHead: ChainHead$,\n {\n isCompatible,\n getCompatibilityLevel,\n getCompatibilityLevels,\n waitDescriptors,\n withCompatibleRuntime,\n argsAreCompatible,\n valuesAreCompatible,\n }: CompatibilityHelper,\n): StorageEntry<any, any, any> => {\n const isSystemNumber = pallet === \"System\" && name === \"Number\"\n\n const incompatibleError = () =>\n new Error(`Incompatible runtime entry Storage(${pallet}.${name})`)\n const invalidArgs = (args: Array<any>) =>\n new Error(`Invalid Arguments calling ${pallet}.${name}(${args})`)\n\n const getCodec = (ctx: RuntimeContext) => {\n try {\n return ctx.dynamicBuilder.buildStorage(pallet, name)\n } catch {\n throw new Error(`Runtime entry Storage(${pallet}.${name}) not found`)\n }\n }\n\n const watchValue = (...args: Array<any>) => {\n const target = args[args.length - 1]\n const actualArgs =\n target === \"best\" || target === \"finalized\" ? args.slice(0, -1) : args\n\n if (isSystemNumber)\n return chainHead.bestBlocks$.pipe(\n map((blocks) => blocks.at(target === \"best\" ? 0 : -1)!.number),\n distinctUntilChanged(),\n )\n\n return chainHead[target === \"best\" ? \"best$\" : \"finalized$\"].pipe(\n debounceTime(0),\n withCompatibleRuntime(chainHead, (x) => x.hash),\n raceMap(([block, runtime, ctx]) => {\n const codecs = getCodec(ctx)\n if (!argsAreCompatible(runtime, ctx, actualArgs))\n throw incompatibleError()\n return chainHead\n .storage$(block.hash, \"value\", () => codecs.enc(...actualArgs))\n .pipe(\n map((val) => {\n if (!valuesAreCompatible(runtime, ctx, val))\n throw incompatibleError()\n return { val, codecs }\n }),\n )\n }, 4),\n distinctUntilChanged((a, b) => a.val === b.val),\n map(({ val, codecs }) =>\n val === null ? codecs.fallback : codecs.dec(val),\n ),\n )\n }\n\n const getValue = async (...args: Array<any>) => {\n const lastArg = args[args.length - 1]\n const isLastArgOptional = isOptionalArg(lastArg)\n const { signal, at: _at }: CallOptions = isLastArgOptional ? lastArg : {}\n const at = _at ?? null\n\n let result$: Observable<any>\n if (isSystemNumber) {\n result$ = chainHead.bestBlocks$.pipe(\n map((blocks) => {\n if (at === \"finalized\" || !at) return blocks.at(-1)\n if (at === \"best\") return blocks.at(0)\n return blocks.find((block) => block.hash === at)\n }),\n map((block) => {\n if (!block) throw new NotBestBlockError()\n return block.number\n }),\n distinctUntilChanged(),\n )\n } else {\n const descriptors = await waitDescriptors()\n result$ = chainHead.storage$(\n at,\n \"value\",\n (ctx) => {\n const codecs = getCodec(ctx)\n const actualArgs =\n args.length === codecs.len ? args : args.slice(0, -1)\n if (args !== actualArgs && !isLastArgOptional) throw invalidArgs(args)\n if (!argsAreCompatible(descriptors, ctx, actualArgs))\n throw incompatibleError()\n return codecs.enc(...actualArgs)\n },\n null,\n (data, ctx) => {\n const codecs = getCodec(ctx)\n const value = data === null ? codecs.fallback : codecs.dec(data)\n if (!valuesAreCompatible(descriptors, ctx, value))\n throw incompatibleError()\n return value\n },\n )\n }\n\n return firstValueFromWithSignal(result$, signal)\n }\n\n const getEntries = async (...args: Array<any>) => {\n const lastArg = args[args.length - 1]\n const isLastArgOptional = isOptionalArg(lastArg)\n const { signal, at: _at }: CallOptions = isLastArgOptional ? lastArg : {}\n const at = _at ?? null\n\n const descriptors = await waitDescriptors()\n const result$ = chainHead.storage$(\n at,\n \"descendantsValues\",\n (ctx) => {\n const codecs = getCodec(ctx)\n // TODO partial compatibility check for args that become optional\n if (\n minCompatLevel(getCompatibilityLevels(descriptors, ctx)) ===\n CompatibilityLevel.Incompatible\n )\n throw incompatibleError()\n\n if (args.length > codecs.len) throw invalidArgs(args)\n const actualArgs =\n args.length > 0 && isLastArgOptional ? args.slice(0, -1) : args\n if (args.length === codecs.len && actualArgs === args)\n throw invalidArgs(args)\n return codecs.enc(...actualArgs)\n },\n null,\n (values, ctx) => {\n const codecs = getCodec(ctx)\n if (\n values.some(\n ({ value }) => !valuesAreCompatible(descriptors, ctx, value),\n )\n )\n throw incompatibleError()\n return values.map(({ key, value }) => ({\n keyArgs: codecs.keyDecoder(key),\n value: codecs.dec(value),\n }))\n },\n )\n return firstValueFromWithSignal(result$, signal)\n }\n\n const getValues = (keyArgs: Array<Array<any>>, options?: CallOptions) =>\n Promise.all(\n keyArgs.map((args) => getValue(...(options ? [...args, options] : args))),\n )\n\n return {\n isCompatible,\n getCompatibilityLevel,\n getValue,\n getValues,\n getEntries,\n watchValue,\n }\n}\n"],"names":[],"mappings":"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"}
@@ -23,9 +23,15 @@ const createTxEntry = (pallet, name, chainHead, broadcast, {
23
23
  const fn = (arg) => {
24
24
  const getCallDataWithContext = (runtime, arg2, txOptions = {}) => {
25
25
  const ctx = getCompatibilityApi(runtime).runtime();
26
+ const { dynamicBuilder, assetId, lookup } = ctx;
27
+ let codecs;
28
+ try {
29
+ codecs = dynamicBuilder.buildCall(pallet, name);
30
+ } catch {
31
+ throw new Error(`Runtime entry Tx(${pallet}.${name}) not found`);
32
+ }
26
33
  if (checkCompatibility && !argsAreCompatible(runtime, ctx, arg2))
27
34
  throw new Error(`Incompatible runtime entry Tx(${pallet}.${name})`);
28
- const { dynamicBuilder, assetId, lookup } = ctx;
29
35
  let returnOptions = txOptions;
30
36
  if (txOptions.asset) {
31
37
  if (assetId == null || !isCompatible(
@@ -39,7 +45,7 @@ const createTxEntry = (pallet, name, chainHead, broadcast, {
39
45
  asset: dynamicBuilder.buildDefinition(assetId).enc(txOptions.asset)
40
46
  };
41
47
  }
42
- const { location, codec } = dynamicBuilder.buildCall(pallet, name);
48
+ const { location, codec } = codecs;
43
49
  return {
44
50
  callData: Binary.fromBytes(
45
51
  mergeUint8(new Uint8Array(location), codec.enc(arg2))
@@ -1 +1 @@
1
- {"version":3,"file":"tx.mjs","sources":["../../../src/tx/tx.ts"],"sourcesContent":["import { BlockInfo, getObservableClient } from \"@polkadot-api/observable-client\"\nimport { PolkadotSigner } from \"@polkadot-api/polkadot-signer\"\nimport { getPolkadotSigner } from \"@polkadot-api/signer\"\nimport {\n AccountId,\n Binary,\n Enum,\n SS58String,\n Tuple,\n compact,\n u128,\n u32,\n u8,\n} from \"@polkadot-api/substrate-bindings\"\nimport { fromHex, mergeUint8, toHex } from \"@polkadot-api/utils\"\nimport {\n Observable,\n firstValueFrom,\n map,\n mergeMap,\n take,\n throwError,\n} from \"rxjs\"\nimport { PlainDescriptor } from \"@/descriptors\"\nimport {\n CompatibilityHelper,\n CompatibilityToken,\n getCompatibilityApi,\n} from \"../compatibility\"\nimport { createTx } from \"./create-tx\"\nimport { InvalidTxError, submit, submit$ } from \"./submit-fns\"\nimport {\n TxCall,\n TxEntry,\n TxObservable,\n TxOptions,\n TxPromise,\n TxSignFn,\n} from \"./types\"\nimport {\n isCompatible,\n mapLookupToTypedef,\n} from \"@polkadot-api/metadata-compatibility\"\n\nexport { submit, submit$, InvalidTxError }\n\nconst accountIdEnc = AccountId().enc\nconst queryInfoRawDec = Tuple(compact, compact, u8, u128).dec\nconst queryInfoDec = (input: string): bigint => queryInfoRawDec(input)[3]\nconst fakeSignature = new Uint8Array(64)\nconst getFakeSignature = () => fakeSignature\n\nexport const createTxEntry = <\n D,\n Arg extends {} | undefined,\n Pallet extends string,\n Name extends string,\n Asset extends PlainDescriptor<any>,\n>(\n pallet: Pallet,\n name: Name,\n chainHead: ReturnType<ReturnType<typeof getObservableClient>[\"chainHead$\"]>,\n broadcast: (tx: string) => Observable<never>,\n {\n isCompatible: isCompatibleHelper,\n getCompatibilityLevel,\n compatibleRuntime$,\n argsAreCompatible,\n getRuntimeTypedef,\n }: CompatibilityHelper,\n checkCompatibility: boolean,\n): TxEntry<D, Arg, Pallet, Name, Asset> => {\n const fn = (arg?: Arg): any => {\n const getCallDataWithContext = (\n runtime: CompatibilityToken,\n arg: any,\n txOptions: Partial<{ asset: any }> = {},\n ) => {\n const ctx = getCompatibilityApi(runtime).runtime()\n if (checkCompatibility && !argsAreCompatible(runtime, ctx, arg))\n throw new Error(`Incompatible runtime entry Tx(${pallet}.${name})`)\n\n const { dynamicBuilder, assetId, lookup } = ctx\n let returnOptions = txOptions\n if (txOptions.asset) {\n if (\n assetId == null ||\n !isCompatible(\n txOptions.asset,\n mapLookupToTypedef(lookup(assetId)),\n (id) => getRuntimeTypedef(ctx, id),\n )\n )\n throw new Error(`Incompatible runtime asset`)\n returnOptions = {\n ...txOptions,\n asset: dynamicBuilder.buildDefinition(assetId).enc(txOptions.asset),\n }\n }\n\n const { location, codec } = dynamicBuilder.buildCall(pallet, name)\n return {\n callData: Binary.fromBytes(\n mergeUint8(new Uint8Array(location), codec.enc(arg)),\n ),\n options: returnOptions,\n }\n }\n\n const getCallData$ = (arg: any, options: Partial<{ asset: any }> = {}) =>\n compatibleRuntime$(chainHead, null).pipe(\n map(([runtime]) => getCallDataWithContext(runtime, arg, options)),\n )\n\n const getEncodedData: TxCall = (\n compatibilityToken?: CompatibilityToken,\n ): any => {\n if (!compatibilityToken)\n return firstValueFrom(getCallData$(arg).pipe(map((x) => x.callData)))\n\n return getCallDataWithContext(compatibilityToken, arg).callData\n }\n\n const sign$ = (\n from: PolkadotSigner,\n { ..._options }: Omit<TxOptions<{}>, \"at\">,\n atBlock: BlockInfo,\n ) =>\n getCallData$(arg, _options).pipe(\n mergeMap(({ callData, options }) =>\n createTx(chainHead, from, callData.asBytes(), atBlock, options),\n ),\n )\n\n const _sign = (\n from: PolkadotSigner,\n { at, ..._options }: TxOptions<{}> = {},\n ) => {\n return (\n !at || at === \"finalized\"\n ? chainHead.finalized$\n : at === \"best\"\n ? chainHead.best$\n : chainHead.bestBlocks$.pipe(\n map((x) => x.find((b) => b.hash === at)),\n )\n ).pipe(\n take(1),\n mergeMap((atBlock) =>\n atBlock\n ? sign$(from, _options, atBlock).pipe(\n map((signed) => ({\n tx: toHex(signed),\n block: atBlock,\n })),\n )\n : throwError(() => new Error(`Uknown block ${at}`)),\n ),\n )\n }\n\n const sign: TxSignFn<Asset> = (from, options) =>\n firstValueFrom(_sign(from, options)).then((x) => x.tx)\n\n const signAndSubmit: TxPromise<Asset> = (from, _options) =>\n firstValueFrom(_sign(from, _options)).then(({ tx, block }) =>\n submit(chainHead, broadcast, tx, block.hash),\n )\n\n const signSubmitAndWatch: TxObservable<Asset> = (from, _options) =>\n _sign(from, _options).pipe(\n mergeMap(({ tx, block }) =>\n submit$(chainHead, broadcast, tx, block.hash, true),\n ),\n )\n\n const getEstimatedFees = async (\n from: Uint8Array | SS58String,\n _options?: any,\n ) => {\n const fakeSigner = getPolkadotSigner(\n from instanceof Uint8Array ? from : accountIdEnc(from),\n \"Sr25519\",\n getFakeSignature,\n )\n const encoded = fromHex(await sign(fakeSigner, _options))\n const args = toHex(mergeUint8(encoded, u32.enc(encoded.length)))\n\n return firstValueFrom(\n chainHead\n .call$(null, \"TransactionPaymentApi_query_info\", args)\n .pipe(map(queryInfoDec)),\n )\n }\n\n return {\n getEstimatedFees,\n decodedCall: {\n type: pallet,\n value: Enum(name, arg as any),\n },\n getEncodedData,\n sign,\n signSubmitAndWatch,\n signAndSubmit,\n }\n }\n\n return Object.assign(fn, {\n getCompatibilityLevel,\n isCompatible: isCompatibleHelper,\n })\n}\n"],"names":["arg"],"mappings":"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"}
1
+ {"version":3,"file":"tx.mjs","sources":["../../../src/tx/tx.ts"],"sourcesContent":["import { BlockInfo, getObservableClient } from \"@polkadot-api/observable-client\"\nimport { PolkadotSigner } from \"@polkadot-api/polkadot-signer\"\nimport { getPolkadotSigner } from \"@polkadot-api/signer\"\nimport {\n AccountId,\n Binary,\n Enum,\n SS58String,\n Tuple,\n compact,\n u128,\n u32,\n u8,\n} from \"@polkadot-api/substrate-bindings\"\nimport { fromHex, mergeUint8, toHex } from \"@polkadot-api/utils\"\nimport {\n Observable,\n firstValueFrom,\n map,\n mergeMap,\n take,\n throwError,\n} from \"rxjs\"\nimport { PlainDescriptor } from \"@/descriptors\"\nimport {\n CompatibilityHelper,\n CompatibilityToken,\n getCompatibilityApi,\n} from \"../compatibility\"\nimport { createTx } from \"./create-tx\"\nimport { InvalidTxError, submit, submit$ } from \"./submit-fns\"\nimport {\n TxCall,\n TxEntry,\n TxObservable,\n TxOptions,\n TxPromise,\n TxSignFn,\n} from \"./types\"\nimport {\n isCompatible,\n mapLookupToTypedef,\n} from \"@polkadot-api/metadata-compatibility\"\n\nexport { submit, submit$, InvalidTxError }\n\nconst accountIdEnc = AccountId().enc\nconst queryInfoRawDec = Tuple(compact, compact, u8, u128).dec\nconst queryInfoDec = (input: string): bigint => queryInfoRawDec(input)[3]\nconst fakeSignature = new Uint8Array(64)\nconst getFakeSignature = () => fakeSignature\n\nexport const createTxEntry = <\n D,\n Arg extends {} | undefined,\n Pallet extends string,\n Name extends string,\n Asset extends PlainDescriptor<any>,\n>(\n pallet: Pallet,\n name: Name,\n chainHead: ReturnType<ReturnType<typeof getObservableClient>[\"chainHead$\"]>,\n broadcast: (tx: string) => Observable<never>,\n {\n isCompatible: isCompatibleHelper,\n getCompatibilityLevel,\n compatibleRuntime$,\n argsAreCompatible,\n getRuntimeTypedef,\n }: CompatibilityHelper,\n checkCompatibility: boolean,\n): TxEntry<D, Arg, Pallet, Name, Asset> => {\n const fn = (arg?: Arg): any => {\n const getCallDataWithContext = (\n runtime: CompatibilityToken,\n arg: any,\n txOptions: Partial<{ asset: any }> = {},\n ) => {\n const ctx = getCompatibilityApi(runtime).runtime()\n const { dynamicBuilder, assetId, lookup } = ctx\n let codecs\n try {\n codecs = dynamicBuilder.buildCall(pallet, name)\n } catch {\n throw new Error(`Runtime entry Tx(${pallet}.${name}) not found`)\n }\n if (checkCompatibility && !argsAreCompatible(runtime, ctx, arg))\n throw new Error(`Incompatible runtime entry Tx(${pallet}.${name})`)\n\n let returnOptions = txOptions\n if (txOptions.asset) {\n if (\n assetId == null ||\n !isCompatible(\n txOptions.asset,\n mapLookupToTypedef(lookup(assetId)),\n (id) => getRuntimeTypedef(ctx, id),\n )\n )\n throw new Error(`Incompatible runtime asset`)\n returnOptions = {\n ...txOptions,\n asset: dynamicBuilder.buildDefinition(assetId).enc(txOptions.asset),\n }\n }\n\n const { location, codec } = codecs\n return {\n callData: Binary.fromBytes(\n mergeUint8(new Uint8Array(location), codec.enc(arg)),\n ),\n options: returnOptions,\n }\n }\n\n const getCallData$ = (arg: any, options: Partial<{ asset: any }> = {}) =>\n compatibleRuntime$(chainHead, null).pipe(\n map(([runtime]) => getCallDataWithContext(runtime, arg, options)),\n )\n\n const getEncodedData: TxCall = (\n compatibilityToken?: CompatibilityToken,\n ): any => {\n if (!compatibilityToken)\n return firstValueFrom(getCallData$(arg).pipe(map((x) => x.callData)))\n\n return getCallDataWithContext(compatibilityToken, arg).callData\n }\n\n const sign$ = (\n from: PolkadotSigner,\n { ..._options }: Omit<TxOptions<{}>, \"at\">,\n atBlock: BlockInfo,\n ) =>\n getCallData$(arg, _options).pipe(\n mergeMap(({ callData, options }) =>\n createTx(chainHead, from, callData.asBytes(), atBlock, options),\n ),\n )\n\n const _sign = (\n from: PolkadotSigner,\n { at, ..._options }: TxOptions<{}> = {},\n ) => {\n return (\n !at || at === \"finalized\"\n ? chainHead.finalized$\n : at === \"best\"\n ? chainHead.best$\n : chainHead.bestBlocks$.pipe(\n map((x) => x.find((b) => b.hash === at)),\n )\n ).pipe(\n take(1),\n mergeMap((atBlock) =>\n atBlock\n ? sign$(from, _options, atBlock).pipe(\n map((signed) => ({\n tx: toHex(signed),\n block: atBlock,\n })),\n )\n : throwError(() => new Error(`Uknown block ${at}`)),\n ),\n )\n }\n\n const sign: TxSignFn<Asset> = (from, options) =>\n firstValueFrom(_sign(from, options)).then((x) => x.tx)\n\n const signAndSubmit: TxPromise<Asset> = (from, _options) =>\n firstValueFrom(_sign(from, _options)).then(({ tx, block }) =>\n submit(chainHead, broadcast, tx, block.hash),\n )\n\n const signSubmitAndWatch: TxObservable<Asset> = (from, _options) =>\n _sign(from, _options).pipe(\n mergeMap(({ tx, block }) =>\n submit$(chainHead, broadcast, tx, block.hash, true),\n ),\n )\n\n const getEstimatedFees = async (\n from: Uint8Array | SS58String,\n _options?: any,\n ) => {\n const fakeSigner = getPolkadotSigner(\n from instanceof Uint8Array ? from : accountIdEnc(from),\n \"Sr25519\",\n getFakeSignature,\n )\n const encoded = fromHex(await sign(fakeSigner, _options))\n const args = toHex(mergeUint8(encoded, u32.enc(encoded.length)))\n\n return firstValueFrom(\n chainHead\n .call$(null, \"TransactionPaymentApi_query_info\", args)\n .pipe(map(queryInfoDec)),\n )\n }\n\n return {\n getEstimatedFees,\n decodedCall: {\n type: pallet,\n value: Enum(name, arg as any),\n },\n getEncodedData,\n sign,\n signSubmitAndWatch,\n signAndSubmit,\n }\n }\n\n return Object.assign(fn, {\n getCompatibilityLevel,\n isCompatible: isCompatibleHelper,\n })\n}\n"],"names":["arg"],"mappings":"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"}
package/dist/index.js CHANGED
@@ -22,7 +22,6 @@ var OpType = /* @__PURE__ */ ((OpType2) => {
22
22
  OpType2["Storage"] = "storage";
23
23
  OpType2["Tx"] = "tx";
24
24
  OpType2["Event"] = "events";
25
- OpType2["Error"] = "errors";
26
25
  OpType2["Const"] = "constants";
27
26
  return OpType2;
28
27
  })(OpType || {});
@@ -162,6 +161,8 @@ const createConstantEntry = (palletName, name, {
162
161
  (p) => p.name === palletName
163
162
  );
164
163
  const constant = pallet?.constants.find((c) => c.name === name);
164
+ if (constant == null)
165
+ throw new Error(`Runtime entry Constant(${palletName}.${name}) not found`);
165
166
  const result = ctx.dynamicBuilder.buildConstant(palletName, name).dec(constant.value);
166
167
  cachedResults.set(ctx, result);
167
168
  return result;
@@ -377,6 +378,13 @@ const createEventEntry = (pallet, name, chainHead, {
377
378
  const shared$ = chainHead.finalized$.pipe(
378
379
  withCompatibleRuntime(chainHead, (x) => x.hash),
379
380
  rxjs.map(([block, runtime, ctx]) => {
381
+ const eventsIdx = ctx.lookup.metadata.pallets.find(
382
+ (p) => p.name === pallet
383
+ )?.events;
384
+ if (eventsIdx == null || ctx.lookup.metadata.lookup[eventsIdx].def.tag !== "variant" || ctx.lookup.metadata.lookup[eventsIdx].def.value.find(
385
+ (ev) => ev.name === name
386
+ ) == null)
387
+ throw new Error(`Runtime entry Event(${pallet}.${name}) not found`);
380
388
  if (!argsAreCompatible(runtime, ctx, null)) throw compatibilityError();
381
389
  return [block, runtime, ctx];
382
390
  }),
@@ -424,8 +432,13 @@ const createRuntimeCallEntry = (api, method, chainHead, {
424
432
  const at = _at ?? null;
425
433
  const result$ = compatibleRuntime$(chainHead, at).pipe(
426
434
  rxjs.mergeMap(([runtime, ctx]) => {
435
+ let codecs;
436
+ try {
437
+ codecs = ctx.dynamicBuilder.buildRuntimeCall(api, method);
438
+ } catch {
439
+ throw new Error(`Runtime entry RuntimeCall(${callName}) not found`);
440
+ }
427
441
  if (!argsAreCompatible(runtime, ctx, args)) throw compatibilityError();
428
- const codecs = ctx.dynamicBuilder.buildRuntimeCall(api, method);
429
442
  return chainHead.call$(at, callName, utils.toHex(codecs.args.enc(args))).pipe(
430
443
  rxjs.map(codecs.value.dec),
431
444
  rxjs.map((value) => {
@@ -453,6 +466,13 @@ const createStorageEntry = (pallet, name, chainHead, {
453
466
  const isSystemNumber = pallet === "System" && name === "Number";
454
467
  const incompatibleError = () => new Error(`Incompatible runtime entry Storage(${pallet}.${name})`);
455
468
  const invalidArgs = (args) => new Error(`Invalid Arguments calling ${pallet}.${name}(${args})`);
469
+ const getCodec = (ctx) => {
470
+ try {
471
+ return ctx.dynamicBuilder.buildStorage(pallet, name);
472
+ } catch {
473
+ throw new Error(`Runtime entry Storage(${pallet}.${name}) not found`);
474
+ }
475
+ };
456
476
  const watchValue = (...args) => {
457
477
  const target = args[args.length - 1];
458
478
  const actualArgs = target === "best" || target === "finalized" ? args.slice(0, -1) : args;
@@ -465,9 +485,9 @@ const createStorageEntry = (pallet, name, chainHead, {
465
485
  rxjs.debounceTime(0),
466
486
  withCompatibleRuntime(chainHead, (x) => x.hash),
467
487
  raceMap(([block, runtime, ctx]) => {
488
+ const codecs = getCodec(ctx);
468
489
  if (!argsAreCompatible(runtime, ctx, actualArgs))
469
490
  throw incompatibleError();
470
- const codecs = ctx.dynamicBuilder.buildStorage(pallet, name);
471
491
  return chainHead.storage$(block.hash, "value", () => codecs.enc(...actualArgs)).pipe(
472
492
  rxjs.map((val) => {
473
493
  if (!valuesAreCompatible(runtime, ctx, val))
@@ -507,7 +527,7 @@ const createStorageEntry = (pallet, name, chainHead, {
507
527
  at,
508
528
  "value",
509
529
  (ctx) => {
510
- const codecs = ctx.dynamicBuilder.buildStorage(pallet, name);
530
+ const codecs = getCodec(ctx);
511
531
  const actualArgs = args.length === codecs.len ? args : args.slice(0, -1);
512
532
  if (args !== actualArgs && !isLastArgOptional) throw invalidArgs(args);
513
533
  if (!argsAreCompatible(descriptors, ctx, actualArgs))
@@ -516,7 +536,7 @@ const createStorageEntry = (pallet, name, chainHead, {
516
536
  },
517
537
  null,
518
538
  (data, ctx) => {
519
- const codecs = ctx.dynamicBuilder.buildStorage(pallet, name);
539
+ const codecs = getCodec(ctx);
520
540
  const value = data === null ? codecs.fallback : codecs.dec(data);
521
541
  if (!valuesAreCompatible(descriptors, ctx, value))
522
542
  throw incompatibleError();
@@ -536,9 +556,9 @@ const createStorageEntry = (pallet, name, chainHead, {
536
556
  at,
537
557
  "descendantsValues",
538
558
  (ctx) => {
559
+ const codecs = getCodec(ctx);
539
560
  if (minCompatLevel(getCompatibilityLevels(descriptors, ctx)) === metadataCompatibility.CompatibilityLevel.Incompatible)
540
561
  throw incompatibleError();
541
- const codecs = ctx.dynamicBuilder.buildStorage(pallet, name);
542
562
  if (args.length > codecs.len) throw invalidArgs(args);
543
563
  const actualArgs = args.length > 0 && isLastArgOptional ? args.slice(0, -1) : args;
544
564
  if (args.length === codecs.len && actualArgs === args)
@@ -547,7 +567,7 @@ const createStorageEntry = (pallet, name, chainHead, {
547
567
  },
548
568
  null,
549
569
  (values, ctx) => {
550
- const codecs = ctx.dynamicBuilder.buildStorage(pallet, name);
570
+ const codecs = getCodec(ctx);
551
571
  if (values.some(
552
572
  ({ value }) => !valuesAreCompatible(descriptors, ctx, value)
553
573
  ))
@@ -929,9 +949,15 @@ const createTxEntry = (pallet, name, chainHead, broadcast, {
929
949
  const fn = (arg) => {
930
950
  const getCallDataWithContext = (runtime, arg2, txOptions = {}) => {
931
951
  const ctx = getCompatibilityApi(runtime).runtime();
952
+ const { dynamicBuilder, assetId, lookup } = ctx;
953
+ let codecs;
954
+ try {
955
+ codecs = dynamicBuilder.buildCall(pallet, name);
956
+ } catch {
957
+ throw new Error(`Runtime entry Tx(${pallet}.${name}) not found`);
958
+ }
932
959
  if (checkCompatibility && !argsAreCompatible(runtime, ctx, arg2))
933
960
  throw new Error(`Incompatible runtime entry Tx(${pallet}.${name})`);
934
- const { dynamicBuilder, assetId, lookup } = ctx;
935
961
  let returnOptions = txOptions;
936
962
  if (txOptions.asset) {
937
963
  if (assetId == null || !metadataCompatibility.isCompatible(
@@ -945,7 +971,7 @@ const createTxEntry = (pallet, name, chainHead, broadcast, {
945
971
  asset: dynamicBuilder.buildDefinition(assetId).enc(txOptions.asset)
946
972
  };
947
973
  }
948
- const { location, codec } = dynamicBuilder.buildCall(pallet, name);
974
+ const { location, codec } = codecs;
949
975
  return {
950
976
  callData: substrateBindings.Binary.fromBytes(
951
977
  utils.mergeUint8(new Uint8Array(location), codec.enc(arg2))
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../src/compatibility.ts","../src/constants.ts","../src/utils/shareLatest.ts","../src/utils/firstValueFromWithSignal.ts","../src/utils/concatMapEager.ts","../src/utils/raceMap.ts","../src/utils/continue-with.ts","../src/utils/optional-arg.ts","../src/event.ts","../src/runtime-call.ts","../src/storage.ts","../src/tx/signed-extensions/utils.ts","../src/tx/signed-extensions/user/ChargeTransactionPayment.ts","../src/tx/signed-extensions/user/CheckMortality.ts","../src/tx/signed-extensions/user/ChargeAssetTxPayment.ts","../src/tx/signed-extensions/chain/CheckGenesis.ts","../src/tx/signed-extensions/chain/CheckMetadataHash.ts","../src/tx/signed-extensions/chain/CheckNonce.ts","../src/tx/signed-extensions/chain/CheckSpecVersion.ts","../src/tx/signed-extensions/chain/CheckTxVersion.ts","../src/tx/create-tx.ts","../src/tx/submit-fns.ts","../src/tx/tx.ts","../src/client.ts"],"sourcesContent":["import { MetadataLookup } from \"@polkadot-api/metadata-builders\"\nimport {\n CompatibilityCache,\n CompatibilityLevel,\n EntryPoint,\n EntryPointCodec,\n TypedefCodec,\n TypedefNode,\n entryPointsAreCompatible,\n mapLookupToTypedef,\n valueIsCompatibleWithDest,\n} from \"@polkadot-api/metadata-compatibility\"\nimport {\n ChainHead$,\n getObservableClient,\n RuntimeContext,\n} from \"@polkadot-api/observable-client\"\nimport { Tuple, Vector } from \"@polkadot-api/substrate-bindings\"\nimport { Observable, combineLatest, filter, firstValueFrom, map } from \"rxjs\"\nimport { ChainDefinition } from \"./descriptors\"\n\nexport class CompatibilityToken<D = unknown> {\n private constructor() {}\n\n // @ts-ignore\n protected _phantom(value: D) {}\n}\n\ninterface CompatibilityTokenApi {\n runtime: () => RuntimeContext\n typedefNodes: TypedefNode[]\n getPalletEntryPoint: (\n opType: OpType,\n pallet: string,\n name: string,\n ) => EntryPoint\n getApiEntryPoint: (name: string, method: string) => EntryPoint\n}\nconst compatibilityTokenApi = new WeakMap<\n CompatibilityToken,\n CompatibilityTokenApi\n>()\nexport const getCompatibilityApi = (token: CompatibilityToken) =>\n compatibilityTokenApi.get(token)!\n\nexport const enum OpType {\n Storage = \"storage\",\n Tx = \"tx\",\n Event = \"events\",\n Error = \"errors\",\n Const = \"constants\",\n}\n\nconst EntryPointsCodec = Vector(EntryPointCodec)\nconst TypedefsCodec = Vector(TypedefCodec)\nconst TypesCodec = Tuple(EntryPointsCodec, TypedefsCodec)\n\nexport const createCompatibilityToken = <D extends ChainDefinition>(\n chainDefinition: D,\n chainHead: ReturnType<ReturnType<typeof getObservableClient>[\"chainHead$\"]>,\n): Promise<CompatibilityToken<D>> => {\n const awaitedRuntime = new Promise<() => RuntimeContext>(async (resolve) => {\n const loadedRuntime$ = chainHead.runtime$.pipe(filter((v) => v != null))\n\n let latest = await firstValueFrom(loadedRuntime$)\n loadedRuntime$.subscribe((v) => (latest = v))\n\n resolve(() => latest)\n })\n\n const promise = Promise.all([\n chainDefinition.metadataTypes.then(TypesCodec.dec),\n chainDefinition.descriptors,\n awaitedRuntime,\n ]).then(([[entryPoints, typedefNodes], descriptors, runtime]) => {\n const token = new (CompatibilityToken as any)()\n compatibilityTokenApi.set(token, {\n runtime,\n getPalletEntryPoint(opType, pallet, name) {\n return entryPoints[descriptors[opType][pallet][name]]\n },\n getApiEntryPoint(name, method) {\n return entryPoints[descriptors.apis[name][method]]\n },\n typedefNodes,\n })\n\n return token\n })\n\n return promise\n}\n\n// metadataRaw -> cache\nconst metadataCache = new WeakMap<\n Uint8Array,\n {\n compat: CompatibilityCache\n lookup: MetadataLookup\n typeNodes: (TypedefNode | null)[]\n }\n>()\nconst getMetadataCache = (ctx: RuntimeContext) => {\n if (!metadataCache.has(ctx.metadataRaw)) {\n metadataCache.set(ctx.metadataRaw, {\n compat: new Map(),\n lookup: ctx.lookup,\n typeNodes: [],\n })\n }\n return metadataCache.get(ctx.metadataRaw)!\n}\nexport const compatibilityHelper = (\n descriptors: Promise<CompatibilityToken>,\n getDescriptorEntryPoint: (descriptorApi: CompatibilityTokenApi) => EntryPoint,\n getRuntimeEntryPoint: (ctx: RuntimeContext) => EntryPoint,\n) => {\n const getRuntimeTypedef = (ctx: RuntimeContext, id: number) => {\n const cache = getMetadataCache(ctx)\n return (cache.typeNodes[id] ||= mapLookupToTypedef(cache.lookup(id)))\n }\n\n function getCompatibilityLevels(\n descriptors: CompatibilityToken,\n /**\n * The `Runtime` of runtimeWithDescriptors already has a RuntimeContext,\n * which is the runtime of the finalized block.\n * But on some cases, the user wants to perform an action on a specific\n * block hash, which has a different RuntimeContext.\n */\n ctx?: RuntimeContext,\n ) {\n const compatibilityApi = compatibilityTokenApi.get(descriptors)!\n ctx ||= compatibilityApi.runtime()\n const descriptorEntryPoint = getDescriptorEntryPoint(compatibilityApi)\n const runtimeEntryPoint = getRuntimeEntryPoint(ctx)\n const descriptorNodes = compatibilityApi.typedefNodes\n\n const cache = getMetadataCache(ctx)\n\n return entryPointsAreCompatible(\n descriptorEntryPoint,\n (id) => descriptorNodes[id],\n runtimeEntryPoint,\n (id) => getRuntimeTypedef(ctx, id),\n cache.compat,\n )\n }\n\n const getCompatibilityLevel = withOptionalToken(descriptors, (runtime) =>\n minCompatLevel(getCompatibilityLevels(runtime)),\n )\n const isCompatible = withOptionalToken(\n descriptors,\n (threshold: CompatibilityLevel, runtime) =>\n getCompatibilityLevel(runtime) >= threshold,\n )\n\n const waitDescriptors = () => descriptors\n const compatibleRuntime$ = (chainHead: ChainHead$, hash: string | null) =>\n combineLatest([waitDescriptors(), chainHead.getRuntimeContext$(hash)])\n\n const withCompatibleRuntime =\n <T>(chainHead: ChainHead$, mapper: (x: T) => string) =>\n (\n source$: Observable<T>,\n ): Observable<[T, CompatibilityToken, RuntimeContext]> =>\n combineLatest([\n source$.pipe(chainHead.withRuntime(mapper)),\n waitDescriptors(),\n ]).pipe(map(([[x, ctx], descriptors]) => [x, descriptors, ctx]))\n\n const argsAreCompatible = (\n descriptors: CompatibilityToken,\n ctx: RuntimeContext,\n args: unknown,\n ) => {\n const levels = getCompatibilityLevels(descriptors, ctx)\n if (levels.args === CompatibilityLevel.Incompatible) return false\n if (levels.args > CompatibilityLevel.Partial) return true\n // Although technically args could still be compatible, if the output will be incompatible we might as well just return false to skip sending the request.\n if (levels.values === CompatibilityLevel.Incompatible) return false\n\n const entryPoint = getRuntimeEntryPoint(ctx)\n\n return valueIsCompatibleWithDest(\n entryPoint.args,\n (id) => getRuntimeTypedef(ctx, id),\n args,\n )\n }\n const valuesAreCompatible = (\n descriptors: CompatibilityToken,\n ctx: RuntimeContext,\n values: unknown,\n ) => {\n const level = getCompatibilityLevels(descriptors, ctx).values\n if (level === CompatibilityLevel.Incompatible) return false\n if (level > CompatibilityLevel.Partial) return true\n\n const compatibilityApi = compatibilityTokenApi.get(descriptors)!\n\n const entryPoint = getDescriptorEntryPoint(compatibilityApi)\n\n return valueIsCompatibleWithDest(\n entryPoint.values,\n (id) => compatibilityApi.typedefNodes[id],\n values,\n )\n }\n\n return {\n isCompatible,\n getCompatibilityLevel,\n getCompatibilityLevels,\n waitDescriptors,\n withCompatibleRuntime,\n compatibleRuntime$,\n argsAreCompatible,\n valuesAreCompatible,\n getRuntimeTypedef,\n }\n}\nexport type CompatibilityHelper = ReturnType<typeof compatibilityHelper>\n\nexport const minCompatLevel = (levels: {\n args: CompatibilityLevel\n values: CompatibilityLevel\n}) => Math.min(levels.args, levels.values)\n\nconst withOptionalToken =\n <T, D, A extends [...any[], CompatibilityToken]>(\n compatibilityToken: Promise<CompatibilityToken<D>>,\n fn: (...args: A) => T,\n ): WithOptionalRuntime<T, D, A extends [...infer R, any] ? R : []> =>\n (...args: any): any => {\n const lastElement = args.at(-1)\n if (lastElement instanceof CompatibilityToken) {\n return fn(...args)\n }\n return compatibilityToken.then((token) => (fn as any)(...args, token))\n }\n\nexport type WithOptionalRuntime<T, D, A extends any[]> = {\n /**\n * Returns the result after waiting for the runtime to load.\n */\n (...args: A): Promise<T>\n /**\n * Returns the result synchronously with the loaded runtime.\n */\n (...args: [...A, runtime: CompatibilityToken<D>]): T\n}\n\nexport interface CompatibilityFunctions<D> {\n /**\n * Returns the `CompatibilityLevel` for this call comparing the descriptors\n * generated on dev time with the current live metadata.\n */\n getCompatibilityLevel(): Promise<CompatibilityLevel>\n /**\n * Returns the `CompatibilityLevel` for this call comparing the descriptors\n * generated on dev time with the current live metadata.\n *\n * @param compatibilityToken CompatibilityToken awaited from\n * typedApi.compatibilityToken.\n */\n getCompatibilityLevel(\n compatibilityToken: CompatibilityToken<D>,\n ): CompatibilityLevel\n\n /**\n * Returns whether this call is compatible based on the CompatibilityLevel\n * threshold.\n *\n * @param threshold CompatibilityLevel threshold to use, inclusive.\n */\n isCompatible(threshold: CompatibilityLevel): Promise<boolean>\n\n /**\n * Returns whether this call is compatible based on the CompatibilityLevel\n * threshold.\n *\n * @param threshold CompatibilityLevel threshold to use,\n * inclusive.\n * @param compatibilityToken CompatibilityToken awaited from\n * typedApi.compatibilityToken.\n */\n isCompatible(\n threshold: CompatibilityLevel,\n compatibilityToken: CompatibilityToken<D>,\n ): boolean\n}\n","import { RuntimeContext } from \"@polkadot-api/observable-client\"\nimport {\n CompatibilityFunctions,\n CompatibilityHelper,\n CompatibilityToken,\n getCompatibilityApi,\n} from \"./compatibility\"\n\nexport interface ConstantEntry<D, T> extends CompatibilityFunctions<D> {\n /**\n * Constants are simple key-value structures found in the runtime metadata.\n *\n * @returns Promise that will resolve in the value of the constant.\n */\n (): Promise<T>\n /**\n * @param compatibilityToken Token from got with `await\n * typedApi.compatibilityToken`\n * @returns Synchronously returns value of the constant.\n */\n (compatibilityToken: CompatibilityToken): T\n}\n\nexport const createConstantEntry = <D, T>(\n palletName: string,\n name: string,\n {\n valuesAreCompatible,\n waitDescriptors,\n isCompatible,\n getCompatibilityLevel,\n }: CompatibilityHelper,\n): ConstantEntry<D, T> => {\n const cachedResults = new WeakMap<RuntimeContext, T>()\n const getValueWithContext = (ctx: RuntimeContext) => {\n if (cachedResults.has(ctx)) {\n return cachedResults.get(ctx)!\n }\n\n const pallet = ctx.lookup.metadata.pallets.find(\n (p) => p.name === palletName,\n )\n const constant = pallet?.constants.find((c) => c.name === name)!\n const result = ctx.dynamicBuilder\n .buildConstant(palletName, name)\n .dec(constant.value)\n cachedResults.set(ctx, result)\n return result\n }\n\n const fn = (compatibilityToken?: CompatibilityToken): any => {\n if (compatibilityToken) {\n const ctx = getCompatibilityApi(compatibilityToken).runtime()\n const value = getValueWithContext(ctx)\n if (!valuesAreCompatible(compatibilityToken, ctx, value))\n throw new Error(\n `Incompatible runtime entry Constant(${palletName}.${name})`,\n )\n return value\n }\n return waitDescriptors().then(fn)\n }\n\n return Object.assign(fn, { isCompatible, getCompatibilityLevel })\n}\n","import { Observable, ReplaySubject, share } from \"rxjs\"\n\nexport const shareLatest: <T>(base: Observable<T>) => Observable<T> = share({\n connector: () => new ReplaySubject(1),\n resetOnError: true,\n resetOnComplete: true,\n resetOnRefCountZero: true,\n})\n","import { AbortError } from \"@polkadot-api/utils\"\nimport { Observable, Subscription, noop } from \"rxjs\"\n\nexport function firstValueFromWithSignal<T>(\n source: Observable<T>,\n signal?: AbortSignal,\n): Promise<T> {\n return new Promise((resolve, reject) => {\n let subscription: Subscription | null = null\n let isDone = false\n\n const onAbort = signal\n ? () => {\n subscription?.unsubscribe()\n reject(new AbortError())\n }\n : noop\n\n subscription = source.subscribe({\n next: (value) => {\n resolve(value)\n subscription?.unsubscribe()\n isDone = true\n },\n error: (e) => {\n signal?.removeEventListener(\"abort\", onAbort)\n reject(e)\n },\n complete: () => {\n signal?.removeEventListener(\"abort\", onAbort)\n reject(new Error(\"Observable completed without emitting\"))\n },\n })\n\n // the observable could have emitted synchronously\n if (!isDone) signal?.addEventListener(\"abort\", onAbort)\n })\n}\n","import { defer, Observable, ObservableInput, Subscription } from \"rxjs\"\n\nexport const concatMapEager =\n <I, O>(\n mapper: (outterValue: I, index: number) => ObservableInput<O>,\n concurrent = Infinity,\n ) =>\n (source$: Observable<I>) =>\n new Observable<O>((observer) => {\n let topSubscription: Subscription\n const queues = new Map<number, Observable<O>>()\n const innerSubscriptions = new Map<number, Subscription>()\n const results = new Map<number, O[]>()\n\n let mapperIdx = 0\n let subscriptionIdx = 0\n let observerIdx = 0\n\n const nextSubscription = () => {\n const inner$ = queues.get(subscriptionIdx)\n if (!inner$) {\n if (\n innerSubscriptions.size === 0 &&\n (typeof topSubscription === \"undefined\" || topSubscription.closed)\n ) {\n observer.complete()\n }\n return\n }\n const idx = subscriptionIdx++\n queues.delete(idx)\n if (observerIdx !== idx) {\n results.set(idx, [])\n }\n innerSubscriptions.set(\n idx,\n inner$.subscribe({\n next(x: O) {\n if (observerIdx === idx) {\n observer.next(x)\n } else {\n results.get(idx)!.push(x)\n }\n },\n complete() {\n innerSubscriptions.delete(idx)\n if (idx === observerIdx) {\n observerIdx++\n while (results.has(observerIdx)) {\n results.get(observerIdx)!.forEach((x) => observer.next(x))\n results.delete(observerIdx)\n if (innerSubscriptions.has(observerIdx)) {\n break\n }\n observerIdx++\n }\n }\n nextSubscription()\n },\n error(e: any) {\n observer.error(e)\n },\n }),\n )\n }\n\n topSubscription = source$.subscribe({\n next(outterValue: I) {\n const idx = mapperIdx++\n queues.set(\n idx,\n defer(() => mapper(outterValue, idx)),\n )\n if (innerSubscriptions.size < concurrent) {\n nextSubscription()\n }\n },\n error(e: any) {\n observer.error(e)\n },\n complete() {\n if (innerSubscriptions.size === 0) {\n observer.complete()\n }\n },\n })\n\n return () => {\n innerSubscriptions.forEach((subscription) => subscription.unsubscribe())\n topSubscription.unsubscribe()\n queues.clear()\n results.clear()\n }\n })\n","import { Observable, Subscription } from \"rxjs\"\n\nexport const raceMap =\n <I, O>(mapper: (x: I) => Observable<O>, concurrent: number) =>\n (source$: Observable<I>) =>\n new Observable<O>((observer) => {\n let innerSubscriptions = new Array<Subscription>()\n let isOuterDone = false\n\n const createSubscription = (value: I) => {\n const sub = new Subscription()\n innerSubscriptions.push(sub)\n if (innerSubscriptions.length > concurrent) {\n innerSubscriptions[0].unsubscribe()\n innerSubscriptions = innerSubscriptions.slice(1)\n }\n\n const subscription = mapper(value).subscribe({\n next(value) {\n const index = innerSubscriptions.indexOf(sub)\n innerSubscriptions.slice(0, index).forEach((s) => s.unsubscribe())\n innerSubscriptions = innerSubscriptions.slice(index)\n\n observer.next(value)\n },\n error(error) {\n observer.error(error)\n },\n complete() {\n const index = innerSubscriptions.indexOf(sub)\n innerSubscriptions.splice(index, 1)\n\n if (innerSubscriptions.length === 0 && isOuterDone)\n observer.complete()\n },\n })\n sub.add(subscription)\n }\n\n const outerSubscription = source$.subscribe({\n next(value) {\n createSubscription(value)\n },\n error(err) {\n observer.error(err)\n },\n complete() {\n if (innerSubscriptions.length === 0) observer.complete()\n isOuterDone = true\n },\n })\n\n return () => {\n outerSubscription.unsubscribe()\n innerSubscriptions.forEach((sub) => sub.unsubscribe())\n }\n })\n","import { Observable } from \"rxjs\"\n\nlet NOTIN = {}\nexport const continueWith =\n <I, O>(\n mapper: (input: I) => Observable<O>,\n ): ((source: Observable<I>) => Observable<I | O>) =>\n (source) =>\n new Observable((observer) => {\n let latestValue: I = NOTIN as I\n let subscription = source.subscribe({\n next(v) {\n observer.next((latestValue = v))\n },\n error(e) {\n observer.error(e)\n },\n complete() {\n if (latestValue === NOTIN) observer.complete()\n else subscription = mapper(latestValue).subscribe(observer)\n },\n })\n\n return () => {\n subscription.unsubscribe()\n }\n })\n","export const isOptionalArg = (lastArg: unknown) =>\n typeof lastArg === \"object\" &&\n lastArg !== null &&\n Object.entries(lastArg).every(\n ([k, v]) =>\n (k === \"at\" && (v === undefined || typeof v === \"string\")) ||\n (k === \"signal\" && (v === undefined || v instanceof AbortSignal)),\n )\n","import { Observable, firstValueFrom, map, mergeMap } from \"rxjs\"\nimport { BlockInfo, ChainHead$ } from \"@polkadot-api/observable-client\"\nimport { CompatibilityFunctions, CompatibilityHelper } from \"./compatibility\"\nimport { concatMapEager, shareLatest } from \"./utils\"\n\nexport type EventPhase =\n | { type: \"ApplyExtrinsic\"; value: number }\n | { type: \"Finalization\" }\n | { type: \"Initialization\" }\n\nexport type EvWatch<T> = (filter?: (value: T) => boolean) => Observable<{\n meta: {\n block: BlockInfo\n phase: EventPhase\n }\n payload: T\n}>\n\nexport type EvPull<T> = () => Promise<\n Array<{\n meta: {\n block: BlockInfo\n phase: EventPhase\n }\n payload: T\n }>\n>\n\nexport type EvFilter<T> = (collection: SystemEvent[\"event\"][]) => Array<T>\n\nexport type EvClient<D, T> = {\n /**\n * Multicast and stateful Observable watching for new events (matching the\n * event kind chosen) in the latest known `finalized` block.\n *\n * @param filter Optional filter function to only emit events complying\n * with the function.\n */\n watch: EvWatch<T>\n /**\n * Fetch (Promise-based) all events (matching the event kind chosen) available\n * in the latest known `finalized` block.\n */\n pull: EvPull<T>\n /**\n * Filter a bunch of `SystemEvent` and return the decoded `payload` of every\n * of them.\n *\n * @param collection Array of `SystemEvent` to filter.\n */\n filter: EvFilter<T>\n} & CompatibilityFunctions<D>\n\ntype SystemEvent = {\n phase: EventPhase\n event: {\n type: string\n value: {\n type: string\n value: any\n }\n }\n topics: Array<any>\n}\n\nexport const createEventEntry = <D, T>(\n pallet: string,\n name: string,\n chainHead: ChainHead$,\n {\n isCompatible,\n getCompatibilityLevel,\n withCompatibleRuntime,\n argsAreCompatible,\n valuesAreCompatible,\n }: CompatibilityHelper,\n): EvClient<D, T> => {\n const compatibilityError = () =>\n new Error(`Incompatible runtime entry Event(${pallet}.${name})`)\n\n const shared$ = chainHead.finalized$.pipe(\n withCompatibleRuntime(chainHead, (x) => x.hash),\n map(([block, runtime, ctx]) => {\n if (!argsAreCompatible(runtime, ctx, null)) throw compatibilityError()\n return [block, runtime, ctx] as const\n }),\n concatMapEager(([block, runtime, ctx]) =>\n chainHead.eventsAt$(block.hash).pipe(\n map((events) => {\n const winners = events.filter(\n (e) => e.event.type === pallet && e.event.value.type === name,\n )\n return winners.map((x) => {\n if (!valuesAreCompatible(runtime, ctx, x.event.value.value))\n throw compatibilityError()\n return {\n meta: {\n phase: x.phase,\n block,\n },\n payload: x.event.value.value,\n }\n })\n }),\n ),\n ),\n shareLatest,\n )\n\n const watch: EvWatch<T> = (f) =>\n shared$.pipe(mergeMap((x) => (f ? x.filter((d) => f(d.payload)) : x)))\n\n const pull: EvPull<T> = () => firstValueFrom(shared$)\n\n const filter: EvFilter<T> = (events) =>\n events\n .filter((e) => e.type === pallet && e.value.type === name)\n .map((x) => x.value.value)\n\n return { watch, pull, filter, getCompatibilityLevel, isCompatible }\n}\n","import { firstValueFromWithSignal, isOptionalArg } from \"@/utils\"\nimport { ChainHead$ } from \"@polkadot-api/observable-client\"\nimport { toHex } from \"@polkadot-api/utils\"\nimport { map, mergeMap } from \"rxjs\"\nimport { CompatibilityFunctions, CompatibilityHelper } from \"./compatibility\"\n\ntype CallOptions = Partial<{\n at: string\n signal: AbortSignal\n}>\n\ntype WithCallOptions<Args extends Array<any>> = Args[\"length\"] extends 0\n ? [options?: CallOptions]\n : [...args: Args, options?: CallOptions]\n\nexport interface RuntimeCall<D, Args extends Array<any>, Payload>\n extends CompatibilityFunctions<D> {\n /**\n * Get `Payload` (Promise-based) for the runtime call.\n *\n * @param args All keys needed for that runtime call.\n * At the end, optionally set which block to target (latest\n * known finalized is the default) and an AbortSignal.\n */\n (...args: WithCallOptions<Args>): Promise<Payload>\n}\n\nexport const createRuntimeCallEntry = (\n api: string,\n method: string,\n chainHead: ChainHead$,\n {\n isCompatible,\n getCompatibilityLevel,\n compatibleRuntime$,\n argsAreCompatible,\n valuesAreCompatible,\n }: CompatibilityHelper,\n): RuntimeCall<any, any, any> => {\n const callName = `${api}_${method}`\n const compatibilityError = () =>\n new Error(`Incompatible runtime entry RuntimeCall(${callName})`)\n\n const fn = (...args: Array<any>) => {\n const lastArg = args[args.length - 1]\n const isLastArgOptional = isOptionalArg(lastArg)\n const { signal, at: _at }: CallOptions = isLastArgOptional ? lastArg : {}\n const at = _at ?? null\n\n const result$ = compatibleRuntime$(chainHead, at).pipe(\n mergeMap(([runtime, ctx]) => {\n if (!argsAreCompatible(runtime, ctx, args)) throw compatibilityError()\n const codecs = ctx.dynamicBuilder.buildRuntimeCall(api, method)\n return chainHead.call$(at, callName, toHex(codecs.args.enc(args))).pipe(\n map(codecs.value.dec),\n map((value) => {\n if (!valuesAreCompatible(runtime, ctx, value))\n throw compatibilityError()\n return value\n }),\n )\n }),\n )\n\n return firstValueFromWithSignal(result$, signal)\n }\n\n return Object.assign(fn, { getCompatibilityLevel, isCompatible })\n}\n","import { firstValueFromWithSignal, isOptionalArg, raceMap } from \"@/utils\"\nimport { ChainHead$, NotBestBlockError } from \"@polkadot-api/observable-client\"\nimport { StorageItemInput, StorageResult } from \"@polkadot-api/substrate-client\"\nimport { Observable, debounceTime, distinctUntilChanged, map } from \"rxjs\"\nimport {\n CompatibilityFunctions,\n CompatibilityHelper,\n minCompatLevel,\n} from \"./compatibility\"\nimport { CompatibilityLevel } from \"@polkadot-api/metadata-compatibility\"\n\ntype CallOptions = Partial<{\n /**\n * `at` could be a blockHash, `best`, or `finalized` (default)\n */\n at: string\n /**\n * `signal` allows you to abort an ongoing Promise. See [MDN\n * docs](https://developer.mozilla.org/en-US/docs/Web/API/AbortSignal) for\n * more information\n */\n signal: AbortSignal\n}>\n\ntype WithCallOptions<Args extends Array<any>> = [\n ...args: Args,\n options?: CallOptions,\n]\n\ntype PossibleParents<A extends Array<any>> = A extends [...infer Left, any]\n ? Left | PossibleParents<Left>\n : ArrayPossibleParents<A>\n\n// Fixed-size arrays values can't be extracted one-by-one, so that's a specific case\ntype ArrayPossibleParents<\n A extends Array<any>,\n Count extends Array<any> = [],\n R = [],\n> = A extends Array<infer T> & { length: infer L }\n ? number extends L\n ? Array<T> // Case variable-size array it's an unknown amount of entries\n : L extends Count[\"length\"]\n ? R\n : ArrayPossibleParents<A, [...Count, T], R | Count>\n : never\n\ntype StorageEntryWithoutKeys<D, Payload> = {\n /**\n * Get `Payload` (Promise-based) for the storage entry.\n *\n * @param options Optionally set which block to target (latest known\n * finalized is the default) and an AbortSignal.\n */\n getValue: (options?: CallOptions) => Promise<Payload>\n /**\n * Watch changes in `Payload` (observable-based) for the storage entry.\n *\n * @param bestOrFinalized Optionally choose which block to query and watch\n * changes, `best` or `finalized` (default)\n */\n watchValue: (bestOrFinalized?: \"best\" | \"finalized\") => Observable<Payload>\n} & CompatibilityFunctions<D>\n\ntype StorageEntryWithKeys<D, Args extends Array<any>, Payload> = {\n /**\n * Get `Payload` (Promise-based) for the storage entry with a specific set of\n * `Args`.\n *\n * @param args All keys needed for that storage entry.\n * At the end, optionally set which block to target (latest\n * known finalized is the default) and an AbortSignal.\n */\n getValue: (...args: [...WithCallOptions<Args>]) => Promise<Payload>\n /**\n * Watch changes in `Payload` (observable-based) for the storage entry.\n *\n * @param args All keys needed for that storage entry.\n * At the end, optionally choose which block to query and\n * watch changes, `best` or `finalized` (default)\n */\n watchValue: (\n ...args: [...Args, bestOrFinalized?: \"best\" | \"finalized\"]\n ) => Observable<Payload>\n /**\n * Get an Array of `Payload` (Promise-based) for the storage entry with\n * several sets of `Args`.\n *\n * @param keys Array of sets of keys needed for the storage entry.\n * @param options Optionally set which block to target (latest known\n * finalized is the default) and an AbortSignal.\n */\n getValues: (\n keys: Array<[...Args]>,\n options?: CallOptions,\n ) => Promise<Array<Payload>>\n /**\n * Get an Array of `Payload` (Promise-based) for the storage entry with a\n * subset of `Args`.\n *\n * @param args Subset of keys needed for the storage entry.\n * At the end, optionally set which block to target (latest\n * known finalized is the default) and an AbortSignal.\n * @example\n *\n * // this is a query with 3 keys\n * typedApi.query.Pallet.Query.getEntries({ at: \"best\" }) // no keys\n * typedApi.query.Pallet.Query.getEntries(arg1, { at: \"finalized\" }) // 1/3 keys\n * typedApi.query.Pallet.Query.getEntries(arg1, arg2, { at: \"0x12345678\" }) // 2/3 keys\n *\n */\n getEntries: (\n ...args: WithCallOptions<PossibleParents<Args>>\n ) => Promise<Array<{ keyArgs: Args; value: NonNullable<Payload> }>>\n} & CompatibilityFunctions<D>\n\nexport type StorageEntry<D, Args extends Array<any>, Payload> = Args extends []\n ? StorageEntryWithoutKeys<D, Payload>\n : StorageEntryWithKeys<D, Args, Payload>\n\nexport type Storage$ = <Type extends StorageItemInput[\"type\"]>(\n hash: string | null,\n type: Type,\n key: string,\n childTrie: string | null,\n) => Observable<StorageResult<Type>>\n\nexport const createStorageEntry = (\n pallet: string,\n name: string,\n chainHead: ChainHead$,\n {\n isCompatible,\n getCompatibilityLevel,\n getCompatibilityLevels,\n waitDescriptors,\n withCompatibleRuntime,\n argsAreCompatible,\n valuesAreCompatible,\n }: CompatibilityHelper,\n): StorageEntry<any, any, any> => {\n const isSystemNumber = pallet === \"System\" && name === \"Number\"\n\n const incompatibleError = () =>\n new Error(`Incompatible runtime entry Storage(${pallet}.${name})`)\n const invalidArgs = (args: Array<any>) =>\n new Error(`Invalid Arguments calling ${pallet}.${name}(${args})`)\n\n const watchValue = (...args: Array<any>) => {\n const target = args[args.length - 1]\n const actualArgs =\n target === \"best\" || target === \"finalized\" ? args.slice(0, -1) : args\n\n if (isSystemNumber)\n return chainHead.bestBlocks$.pipe(\n map((blocks) => blocks.at(target === \"best\" ? 0 : -1)!.number),\n distinctUntilChanged(),\n )\n\n return chainHead[target === \"best\" ? \"best$\" : \"finalized$\"].pipe(\n debounceTime(0),\n withCompatibleRuntime(chainHead, (x) => x.hash),\n raceMap(([block, runtime, ctx]) => {\n if (!argsAreCompatible(runtime, ctx, actualArgs))\n throw incompatibleError()\n const codecs = ctx.dynamicBuilder.buildStorage(pallet, name)\n return chainHead\n .storage$(block.hash, \"value\", () => codecs.enc(...actualArgs))\n .pipe(\n map((val) => {\n if (!valuesAreCompatible(runtime, ctx, val))\n throw incompatibleError()\n return { val, codecs }\n }),\n )\n }, 4),\n distinctUntilChanged((a, b) => a.val === b.val),\n map(({ val, codecs }) =>\n val === null ? codecs.fallback : codecs.dec(val),\n ),\n )\n }\n\n const getValue = async (...args: Array<any>) => {\n const lastArg = args[args.length - 1]\n const isLastArgOptional = isOptionalArg(lastArg)\n const { signal, at: _at }: CallOptions = isLastArgOptional ? lastArg : {}\n const at = _at ?? null\n\n let result$: Observable<any>\n if (isSystemNumber) {\n result$ = chainHead.bestBlocks$.pipe(\n map((blocks) => {\n if (at === \"finalized\" || !at) return blocks.at(-1)\n if (at === \"best\") return blocks.at(0)\n return blocks.find((block) => block.hash === at)\n }),\n map((block) => {\n if (!block) throw new NotBestBlockError()\n return block.number\n }),\n distinctUntilChanged(),\n )\n } else {\n const descriptors = await waitDescriptors()\n result$ = chainHead.storage$(\n at,\n \"value\",\n (ctx) => {\n const codecs = ctx.dynamicBuilder.buildStorage(pallet, name)\n const actualArgs =\n args.length === codecs.len ? args : args.slice(0, -1)\n if (args !== actualArgs && !isLastArgOptional) throw invalidArgs(args)\n if (!argsAreCompatible(descriptors, ctx, actualArgs))\n throw incompatibleError()\n return codecs.enc(...actualArgs)\n },\n null,\n (data, ctx) => {\n const codecs = ctx.dynamicBuilder.buildStorage(pallet, name)\n const value = data === null ? codecs.fallback : codecs.dec(data)\n if (!valuesAreCompatible(descriptors, ctx, value))\n throw incompatibleError()\n return value\n },\n )\n }\n\n return firstValueFromWithSignal(result$, signal)\n }\n\n const getEntries = async (...args: Array<any>) => {\n const lastArg = args[args.length - 1]\n const isLastArgOptional = isOptionalArg(lastArg)\n const { signal, at: _at }: CallOptions = isLastArgOptional ? lastArg : {}\n const at = _at ?? null\n\n const descriptors = await waitDescriptors()\n const result$ = chainHead.storage$(\n at,\n \"descendantsValues\",\n (ctx) => {\n // TODO partial compatibility check for args that become optional\n if (\n minCompatLevel(getCompatibilityLevels(descriptors, ctx)) ===\n CompatibilityLevel.Incompatible\n )\n throw incompatibleError()\n\n const codecs = ctx.dynamicBuilder.buildStorage(pallet, name)\n if (args.length > codecs.len) throw invalidArgs(args)\n const actualArgs =\n args.length > 0 && isLastArgOptional ? args.slice(0, -1) : args\n if (args.length === codecs.len && actualArgs === args)\n throw invalidArgs(args)\n return codecs.enc(...actualArgs)\n },\n null,\n (values, ctx) => {\n const codecs = ctx.dynamicBuilder.buildStorage(pallet, name)\n if (\n values.some(\n ({ value }) => !valuesAreCompatible(descriptors, ctx, value),\n )\n )\n throw incompatibleError()\n return values.map(({ key, value }) => ({\n keyArgs: codecs.keyDecoder(key),\n value: codecs.dec(value),\n }))\n },\n )\n return firstValueFromWithSignal(result$, signal)\n }\n\n const getValues = (keyArgs: Array<Array<any>>, options?: CallOptions) =>\n Promise.all(\n keyArgs.map((args) => getValue(...(options ? [...args, options] : args))),\n )\n\n return {\n isCompatible,\n getCompatibilityLevel,\n getValue,\n getValues,\n getEntries,\n watchValue,\n }\n}\n","import {\n getDynamicBuilder,\n MetadataLookup,\n} from \"@polkadot-api/metadata-builders\"\nimport { Storage, Twox64Concat, u32 } from \"@polkadot-api/substrate-bindings\"\nimport { fromHex } from \"@polkadot-api/utils\"\nimport { map, noop, of } from \"rxjs\"\nimport type { ChainExtensionCtx } from \"./internal-types\"\n\nexport const empty = new Uint8Array()\n\nconst genesisHashStorageKey = Storage(\"System\")(\"BlockHash\", noop, [\n u32,\n Twox64Concat,\n]).enc(0)\n\nexport const genesisHashFromCtx = (ctx: ChainExtensionCtx) =>\n ctx.chainHead\n .storage$(ctx.at, \"value\", () => genesisHashStorageKey, null)\n .pipe(map((result) => fromHex(result!)))\n\nexport const systemVersionProp$ = (\n propName: string,\n lookupFn: MetadataLookup,\n) => {\n const dynamicBuilder = getDynamicBuilder(lookupFn)\n\n const constant = lookupFn.metadata.pallets\n .find((x) => x.name === \"System\")!\n .constants!.find((s) => s.name === \"Version\")!\n\n const systemVersion = lookupFn(constant.type)\n const systemVersionDec = dynamicBuilder.buildDefinition(constant.type).dec\n\n if (systemVersion.type !== \"struct\") throw new Error(\"not a struct\")\n\n const valueEnc = dynamicBuilder.buildDefinition(\n systemVersion.value[propName].id,\n ).enc\n\n return of(valueEnc(systemVersionDec(constant.value)[propName]))\n}\n","import { compactBn } from \"@polkadot-api/substrate-bindings\"\nimport { of } from \"rxjs\"\nimport { empty } from \"../utils\"\nimport { SignedExtension } from \"../internal-types\"\n\nexport const ChargeTransactionPayment = (tip: bigint): SignedExtension =>\n of({\n value: compactBn.enc(tip),\n additionalSigned: empty,\n })\n","import { map, of } from \"rxjs\"\nimport { Bytes, enhanceEncoder, u16 } from \"@polkadot-api/substrate-bindings\"\nimport { fromHex } from \"@polkadot-api/utils\"\nimport { genesisHashFromCtx } from \"../utils\"\nimport { ChainExtensionCtx, SignedExtension } from \"../internal-types\"\n\nfunction trailingZeroes(n: number) {\n let i = 0\n while (!(n & 1)) {\n i++\n n >>= 1\n }\n return i\n}\n\nconst mortal = enhanceEncoder(\n Bytes(2).enc,\n (value: { period: number; phase: number }) => {\n const factor = Math.max(value.period >> 12, 1)\n const left = Math.min(Math.max(trailingZeroes(value.period) - 1, 1), 15)\n const right = (value.phase / factor) << 4\n return u16.enc(left | right)\n },\n)\n\nconst zero = new Uint8Array([0])\nexport const CheckMortality = (\n input: { period: number; blockNumber: number } | undefined,\n ctx: ChainExtensionCtx,\n): SignedExtension => {\n if (!input)\n return genesisHashFromCtx(ctx).pipe(\n map((additionalSigned) => ({\n additionalSigned,\n value: zero,\n })),\n )\n\n const { period, blockNumber } = input\n return of({\n additionalSigned: fromHex(ctx.at),\n value: mortal({\n period,\n phase: blockNumber % period,\n }),\n })\n}\n","import { of } from \"rxjs\"\nimport {\n Bytes,\n Option,\n Struct,\n compact,\n} from \"@polkadot-api/substrate-bindings\"\nimport { empty } from \"../utils\"\nimport { SignedExtension } from \"../internal-types\"\n\nconst encoder = Struct({\n tip: compact,\n asset: Option(Bytes(Infinity)),\n}).enc\n\nexport const ChargeAssetTxPayment = (\n tip: number | bigint,\n asset: Uint8Array | undefined,\n): SignedExtension =>\n of({\n value: encoder({\n tip,\n asset,\n }),\n additionalSigned: empty,\n })\n","import { map } from \"rxjs\"\nimport type { GetChainSignedExtension } from \"../internal-types\"\nimport { empty, genesisHashFromCtx } from \"../utils\"\n\nexport const CheckGenesis: GetChainSignedExtension = (ctx) =>\n genesisHashFromCtx(ctx).pipe(\n map((additionalSigned) => ({ value: empty, additionalSigned })),\n )\n","import { of } from \"rxjs\"\nimport type { GetChainSignedExtension } from \"../internal-types\"\n\nexport const CheckMetadataHash: GetChainSignedExtension = () =>\n of({\n value: Uint8Array.from([0]),\n additionalSigned: Uint8Array.from([0]),\n })\n","import { mergeMap, of } from \"rxjs\"\nimport { compact, u16, u32, u64, u8 } from \"@polkadot-api/substrate-bindings\"\nimport type {\n GetChainSignedExtension,\n SignedExtension,\n} from \"../internal-types\"\nimport { empty } from \"../utils\"\nimport { fromHex, toHex } from \"@polkadot-api/utils\"\n\nconst NONCE_RUNTIME_CALL = \"AccountNonceApi_account_nonce\"\nconst lenToDecoder = {\n 1: u8.dec,\n 2: u16.dec,\n 4: u32.dec,\n 8: u64.dec,\n}\n\nexport const getNonce = (input: number | bigint): SignedExtension =>\n of({ value: compact.enc(input), additionalSigned: empty })\n\nexport const CheckNonce: GetChainSignedExtension = (ctx) =>\n ctx.chainHead.call$(ctx.at, NONCE_RUNTIME_CALL, toHex(ctx.from)).pipe(\n mergeMap((result) => {\n const bytes = fromHex(result)\n const decoder = lenToDecoder[bytes.length as 2 | 4 | 8]\n if (!decoder)\n throw new Error(`${NONCE_RUNTIME_CALL} retrieved wrong data`)\n return getNonce(decoder(bytes))\n }),\n )\n","import { map } from \"rxjs\"\nimport type { GetChainSignedExtension } from \"../internal-types\"\nimport { empty, systemVersionProp$ } from \"../utils\"\n\nexport const CheckSpecVersion: GetChainSignedExtension = ({ lookupFn }) =>\n systemVersionProp$(\"spec_version\", lookupFn).pipe(\n map((additionalSigned) => ({ additionalSigned, value: empty })),\n )\n","import { map } from \"rxjs\"\nimport type { GetChainSignedExtension } from \"../internal-types\"\nimport { empty, systemVersionProp$ } from \"../utils\"\n\nexport const CheckTxVersion: GetChainSignedExtension = ({ lookupFn }) =>\n systemVersionProp$(\"transaction_version\", lookupFn).pipe(\n map((additionalSigned) => ({ additionalSigned, value: empty })),\n )\n","import { Observable, combineLatest, mergeMap, of, take } from \"rxjs\"\nimport { BlockInfo, ChainHead$ } from \"@polkadot-api/observable-client\"\nimport {\n ChargeAssetTxPayment,\n ChargeTransactionPayment,\n CheckMortality,\n} from \"./signed-extensions/user\"\nimport * as chainSignedExtensions from \"./signed-extensions/chain\"\nimport type { PolkadotSigner } from \"@polkadot-api/polkadot-signer\"\nimport { _void } from \"@polkadot-api/substrate-bindings\"\nimport { empty } from \"./signed-extensions/utils\"\n\ntype HintedSignedExtensions = Partial<{\n tip: bigint\n mortality: { mortal: false } | { mortal: true; period: number }\n asset: Uint8Array\n nonce: number\n}>\n\nexport const createTx: (\n chainHead: ChainHead$,\n signer: PolkadotSigner,\n callData: Uint8Array,\n atBlock: BlockInfo,\n hinted?: HintedSignedExtensions,\n) => Observable<Uint8Array> = (\n chainHead,\n signer,\n callData,\n atBlock,\n hinted = {},\n) =>\n chainHead.getRuntimeContext$(atBlock.hash).pipe(\n take(1),\n mergeMap((ctx) => {\n const signedExtensionsCtx = {\n lookupFn: ctx.lookup,\n chainHead: chainHead,\n callData: callData,\n at: atBlock.hash,\n from: signer.publicKey,\n }\n\n const mortality: Parameters<typeof CheckMortality>[0] = !hinted.mortality\n ? { period: 64, blockNumber: atBlock.number }\n : hinted.mortality.mortal\n ? { period: hinted.mortality.period, blockNumber: atBlock.number }\n : undefined // immortal\n\n return combineLatest(\n ctx.lookup.metadata.extrinsic.signedExtensions.map(\n ({ identifier, type, additionalSigned }) => {\n if (identifier === \"CheckMortality\")\n return CheckMortality(mortality, signedExtensionsCtx)\n\n if (identifier === \"ChargeTransactionPayment\")\n return ChargeTransactionPayment(hinted.tip ?? 0n)\n\n if (identifier === \"ChargeAssetTxPayment\")\n return ChargeAssetTxPayment(hinted.tip ?? 0n, hinted.asset)\n\n if (identifier === \"CheckNonce\" && \"nonce\" in hinted)\n return chainSignedExtensions.getNonce(hinted.nonce!)\n\n const fn = chainSignedExtensions[identifier as \"CheckGenesis\"]\n if (!fn) {\n if (\n ctx.dynamicBuilder.buildDefinition(type) === _void &&\n ctx.dynamicBuilder.buildDefinition(additionalSigned) === _void\n )\n return of({\n value: empty,\n additionalSigned: empty,\n })\n\n throw new Error(`Unsupported signed-extension: ${identifier}`)\n }\n return fn(signedExtensionsCtx)\n },\n ),\n ).pipe(\n mergeMap((signedExtensions) =>\n signer.signTx(\n callData,\n Object.fromEntries(\n ctx.lookup.metadata.extrinsic.signedExtensions.map(\n ({ identifier }, idx) => [\n identifier,\n { identifier, ...signedExtensions[idx] },\n ],\n ),\n ),\n ctx.metadataRaw,\n atBlock.number,\n ),\n ),\n )\n }),\n )\n","import {\n Binary,\n Blake2256,\n HexString,\n ResultPayload,\n} from \"@polkadot-api/substrate-bindings\"\nimport {\n EMPTY,\n Observable,\n concat,\n distinctUntilChanged,\n filter,\n lastValueFrom,\n map,\n mergeMap,\n of,\n take,\n} from \"rxjs\"\nimport {\n ChainHead$,\n PinnedBlocks,\n SystemEvent,\n} from \"@polkadot-api/observable-client\"\nimport { AnalyzedBlock } from \"@polkadot-api/observable-client\"\nimport { TxEvent, TxEventsPayload, TxFinalizedPayload } from \"./types\"\nimport { continueWith } from \"@/utils\"\nimport { fromHex, toHex } from \"@polkadot-api/utils\"\n\n// TODO: make it dynamic based on the tx-function of the client\nconst hashFromTx = (tx: HexString) => toHex(Blake2256(fromHex(tx)))\n\nconst computeState = (\n analized$: Observable<AnalyzedBlock>,\n blocks$: Observable<PinnedBlocks>,\n) =>\n new Observable<\n | {\n found: true\n hash: string\n number: number\n index: number\n events: any\n }\n | { found: false; validity: ResultPayload<any, any> | null }\n >((observer) => {\n const analyzedBlocks = new Map<string, AnalyzedBlock>()\n let pinnedBlocks: PinnedBlocks\n let latestState:\n | {\n found: true\n hash: string\n number: number\n index: number\n events: any\n }\n | { found: false; validity: ResultPayload<any, any> | null }\n\n const computeNextState = () => {\n let current: string = pinnedBlocks.best\n let analyzed: AnalyzedBlock | undefined = analyzedBlocks.get(current)\n let analyzedNumber = pinnedBlocks.blocks.get(current)!.number\n\n while (!analyzed) {\n const block = pinnedBlocks.blocks.get(current)\n if (!block) break\n analyzed = analyzedBlocks.get((current = block.parent))\n analyzedNumber--\n }\n\n if (!analyzed) return // this shouldn't happen, though\n\n const isFinalized =\n analyzedNumber <=\n pinnedBlocks.blocks.get(pinnedBlocks.finalized)!.number\n\n const found = analyzed.found.type\n if (found && latestState?.found && latestState.hash === analyzed.hash) {\n if (isFinalized) observer.complete()\n return\n }\n\n observer.next(\n (latestState = analyzed.found.type\n ? {\n found: found as true,\n hash: analyzed.hash,\n number: analyzedNumber,\n index: analyzed.found.index,\n events: analyzed.found.events,\n }\n : {\n found: found as false,\n validity: analyzed.found.validity,\n }),\n )\n\n if (isFinalized) {\n if (found) observer.complete()\n else if (analyzed.found.validity?.success === false)\n observer.error(new InvalidTxError(analyzed.found.validity.value))\n }\n }\n\n const subscription = blocks$\n .pipe(\n distinctUntilChanged(\n (a, b) => a.finalized === b.finalized && a.best === b.best,\n ),\n )\n .subscribe({\n next: (pinned: PinnedBlocks) => {\n pinnedBlocks = pinned\n if (analyzedBlocks.size === 0) return\n computeNextState()\n },\n error(e) {\n observer.error(e)\n },\n })\n\n subscription.add(\n analized$.subscribe({\n next: (block) => {\n analyzedBlocks.set(block.hash, block)\n computeNextState()\n },\n error(e) {\n observer.error(e)\n },\n }),\n )\n\n return subscription\n }).pipe(distinctUntilChanged((a, b) => a === b))\n\nconst getTxSuccessFromSystemEvents = (\n systemEvents: Array<SystemEvent>,\n txIdx: number,\n): Omit<TxEventsPayload, \"block\"> => {\n const events = systemEvents\n .filter((x) => x.phase.type === \"ApplyExtrinsic\" && x.phase.value === txIdx)\n .map((x) => x.event)\n\n const lastEvent = events[events.length - 1]\n if (\n lastEvent.type === \"System\" &&\n lastEvent.value.type === \"ExtrinsicFailed\"\n ) {\n return {\n ok: false,\n events,\n dispatchError: lastEvent.value.value.dispatch_error,\n }\n }\n\n return { ok: true, events }\n}\n\n/*\ntype TransactionValidityError = Enum<{\n Invalid: Enum<{\n Call: undefined\n Payment: undefined\n Future: undefined\n Stale: undefined\n BadProof: undefined\n AncientBirthBlock: undefined\n ExhaustsResources: undefined\n Custom: number\n BadMandatory: undefined\n MandatoryValidation: undefined\n BadSigner: undefined\n }>\n Unknown: Enum<{\n CannotLookup: undefined\n NoUnsignedValidator: undefined\n Custom: number\n }>\n}>\n*/\n\nexport class InvalidTxError extends Error {\n error: any // likely to be a `TransactionValidityError`\n constructor(e: any) {\n super(\n JSON.stringify(\n e,\n (_, value) => {\n if (typeof value === \"bigint\") return value.toString()\n return value instanceof Binary ? value.asHex() : value\n },\n 2,\n ),\n )\n this.name = \"InvalidTxError\"\n this.error = e\n }\n}\n\nexport const submit$ = (\n chainHead: ChainHead$,\n broadcastTx$: (tx: string) => Observable<never>,\n tx: HexString,\n at?: HexString,\n emitSign = false,\n): Observable<TxEvent> => {\n const txHash = hashFromTx(tx)\n const getTxEvent = <\n Type extends TxEvent[\"type\"],\n Rest extends Omit<TxEvent & { type: Type }, \"type\" | \"txHash\">,\n >(\n type: Type,\n rest: Rest,\n ): TxEvent & { type: Type } =>\n ({\n type,\n txHash,\n ...rest,\n }) as any\n\n const at$ = chainHead.pinnedBlocks$.pipe(\n take(1),\n map((blocks) => {\n const block = blocks.blocks.get(at!)\n return block && !block.unpinned ? block.hash : blocks.finalized\n }),\n )\n\n const validate$: Observable<never> = at$.pipe(\n mergeMap((at) =>\n chainHead.validateTx$(at, tx).pipe(\n filter((x) => !x.success),\n map((x) => {\n throw new InvalidTxError(x.value)\n }),\n ),\n ),\n )\n\n const track$ = new Observable<AnalyzedBlock>((observer) => {\n const subscription = chainHead.trackTx$(tx).subscribe(observer)\n subscription.add(\n broadcastTx$(tx).subscribe({\n error(e) {\n observer.error(e)\n },\n }),\n )\n return subscription\n })\n\n const bestBlockState$ = computeState(track$, chainHead.pinnedBlocks$).pipe(\n map((x) => {\n if (!x.found)\n return getTxEvent(\"txBestBlocksState\", {\n found: false,\n isValid: x.validity?.success !== false,\n })\n\n return getTxEvent(\"txBestBlocksState\", {\n found: true,\n block: {\n index: x.index,\n number: x.number,\n hash: x.hash,\n },\n ...getTxSuccessFromSystemEvents(x.events, x.index),\n })\n }),\n )\n\n return concat(\n emitSign ? of(getTxEvent(\"signed\", {})) : EMPTY,\n validate$,\n of(getTxEvent(\"broadcasted\", {})),\n bestBlockState$.pipe(\n continueWith(({ found, type, ...rest }) =>\n found ? of(getTxEvent(\"finalized\", rest as any)) : EMPTY,\n ),\n ),\n )\n}\n\nexport const submit = async (\n chainHead: ChainHead$,\n broadcastTx$: (tx: string) => Observable<never>,\n transaction: HexString,\n at?: HexString,\n): Promise<TxFinalizedPayload> =>\n lastValueFrom(submit$(chainHead, broadcastTx$, transaction, at)).then((x) => {\n if (x.type !== \"finalized\") throw null\n const result: TxFinalizedPayload = { ...x }\n delete (result as any).type\n return result\n })\n","import { BlockInfo, getObservableClient } from \"@polkadot-api/observable-client\"\nimport { PolkadotSigner } from \"@polkadot-api/polkadot-signer\"\nimport { getPolkadotSigner } from \"@polkadot-api/signer\"\nimport {\n AccountId,\n Binary,\n Enum,\n SS58String,\n Tuple,\n compact,\n u128,\n u32,\n u8,\n} from \"@polkadot-api/substrate-bindings\"\nimport { fromHex, mergeUint8, toHex } from \"@polkadot-api/utils\"\nimport {\n Observable,\n firstValueFrom,\n map,\n mergeMap,\n take,\n throwError,\n} from \"rxjs\"\nimport { PlainDescriptor } from \"@/descriptors\"\nimport {\n CompatibilityHelper,\n CompatibilityToken,\n getCompatibilityApi,\n} from \"../compatibility\"\nimport { createTx } from \"./create-tx\"\nimport { InvalidTxError, submit, submit$ } from \"./submit-fns\"\nimport {\n TxCall,\n TxEntry,\n TxObservable,\n TxOptions,\n TxPromise,\n TxSignFn,\n} from \"./types\"\nimport {\n isCompatible,\n mapLookupToTypedef,\n} from \"@polkadot-api/metadata-compatibility\"\n\nexport { submit, submit$, InvalidTxError }\n\nconst accountIdEnc = AccountId().enc\nconst queryInfoRawDec = Tuple(compact, compact, u8, u128).dec\nconst queryInfoDec = (input: string): bigint => queryInfoRawDec(input)[3]\nconst fakeSignature = new Uint8Array(64)\nconst getFakeSignature = () => fakeSignature\n\nexport const createTxEntry = <\n D,\n Arg extends {} | undefined,\n Pallet extends string,\n Name extends string,\n Asset extends PlainDescriptor<any>,\n>(\n pallet: Pallet,\n name: Name,\n chainHead: ReturnType<ReturnType<typeof getObservableClient>[\"chainHead$\"]>,\n broadcast: (tx: string) => Observable<never>,\n {\n isCompatible: isCompatibleHelper,\n getCompatibilityLevel,\n compatibleRuntime$,\n argsAreCompatible,\n getRuntimeTypedef,\n }: CompatibilityHelper,\n checkCompatibility: boolean,\n): TxEntry<D, Arg, Pallet, Name, Asset> => {\n const fn = (arg?: Arg): any => {\n const getCallDataWithContext = (\n runtime: CompatibilityToken,\n arg: any,\n txOptions: Partial<{ asset: any }> = {},\n ) => {\n const ctx = getCompatibilityApi(runtime).runtime()\n if (checkCompatibility && !argsAreCompatible(runtime, ctx, arg))\n throw new Error(`Incompatible runtime entry Tx(${pallet}.${name})`)\n\n const { dynamicBuilder, assetId, lookup } = ctx\n let returnOptions = txOptions\n if (txOptions.asset) {\n if (\n assetId == null ||\n !isCompatible(\n txOptions.asset,\n mapLookupToTypedef(lookup(assetId)),\n (id) => getRuntimeTypedef(ctx, id),\n )\n )\n throw new Error(`Incompatible runtime asset`)\n returnOptions = {\n ...txOptions,\n asset: dynamicBuilder.buildDefinition(assetId).enc(txOptions.asset),\n }\n }\n\n const { location, codec } = dynamicBuilder.buildCall(pallet, name)\n return {\n callData: Binary.fromBytes(\n mergeUint8(new Uint8Array(location), codec.enc(arg)),\n ),\n options: returnOptions,\n }\n }\n\n const getCallData$ = (arg: any, options: Partial<{ asset: any }> = {}) =>\n compatibleRuntime$(chainHead, null).pipe(\n map(([runtime]) => getCallDataWithContext(runtime, arg, options)),\n )\n\n const getEncodedData: TxCall = (\n compatibilityToken?: CompatibilityToken,\n ): any => {\n if (!compatibilityToken)\n return firstValueFrom(getCallData$(arg).pipe(map((x) => x.callData)))\n\n return getCallDataWithContext(compatibilityToken, arg).callData\n }\n\n const sign$ = (\n from: PolkadotSigner,\n { ..._options }: Omit<TxOptions<{}>, \"at\">,\n atBlock: BlockInfo,\n ) =>\n getCallData$(arg, _options).pipe(\n mergeMap(({ callData, options }) =>\n createTx(chainHead, from, callData.asBytes(), atBlock, options),\n ),\n )\n\n const _sign = (\n from: PolkadotSigner,\n { at, ..._options }: TxOptions<{}> = {},\n ) => {\n return (\n !at || at === \"finalized\"\n ? chainHead.finalized$\n : at === \"best\"\n ? chainHead.best$\n : chainHead.bestBlocks$.pipe(\n map((x) => x.find((b) => b.hash === at)),\n )\n ).pipe(\n take(1),\n mergeMap((atBlock) =>\n atBlock\n ? sign$(from, _options, atBlock).pipe(\n map((signed) => ({\n tx: toHex(signed),\n block: atBlock,\n })),\n )\n : throwError(() => new Error(`Uknown block ${at}`)),\n ),\n )\n }\n\n const sign: TxSignFn<Asset> = (from, options) =>\n firstValueFrom(_sign(from, options)).then((x) => x.tx)\n\n const signAndSubmit: TxPromise<Asset> = (from, _options) =>\n firstValueFrom(_sign(from, _options)).then(({ tx, block }) =>\n submit(chainHead, broadcast, tx, block.hash),\n )\n\n const signSubmitAndWatch: TxObservable<Asset> = (from, _options) =>\n _sign(from, _options).pipe(\n mergeMap(({ tx, block }) =>\n submit$(chainHead, broadcast, tx, block.hash, true),\n ),\n )\n\n const getEstimatedFees = async (\n from: Uint8Array | SS58String,\n _options?: any,\n ) => {\n const fakeSigner = getPolkadotSigner(\n from instanceof Uint8Array ? from : accountIdEnc(from),\n \"Sr25519\",\n getFakeSignature,\n )\n const encoded = fromHex(await sign(fakeSigner, _options))\n const args = toHex(mergeUint8(encoded, u32.enc(encoded.length)))\n\n return firstValueFrom(\n chainHead\n .call$(null, \"TransactionPaymentApi_query_info\", args)\n .pipe(map(queryInfoDec)),\n )\n }\n\n return {\n getEstimatedFees,\n decodedCall: {\n type: pallet,\n value: Enum(name, arg as any),\n },\n getEncodedData,\n sign,\n signSubmitAndWatch,\n signAndSubmit,\n }\n }\n\n return Object.assign(fn, {\n getCompatibilityLevel,\n isCompatible: isCompatibleHelper,\n })\n}\n","import { JsonRpcProvider } from \"@polkadot-api/json-rpc-provider\"\nimport {\n enumValueEntryPointNode,\n runtimeCallEntryPoint,\n singleValueEntryPoint,\n storageEntryPoint,\n voidEntryPointNode,\n} from \"@polkadot-api/metadata-compatibility\"\nimport {\n RuntimeContext,\n getObservableClient,\n} from \"@polkadot-api/observable-client\"\nimport {\n SubstrateClient,\n createClient as createRawClient,\n} from \"@polkadot-api/substrate-client\"\nimport { Observable, firstValueFrom } from \"rxjs\"\nimport {\n CompatibilityToken,\n OpType,\n compatibilityHelper,\n createCompatibilityToken,\n getCompatibilityApi,\n} from \"./compatibility\"\nimport { createConstantEntry } from \"./constants\"\nimport { ChainDefinition } from \"./descriptors\"\nimport { createEventEntry } from \"./event\"\nimport { createRuntimeCallEntry } from \"./runtime-call\"\nimport { createStorageEntry } from \"./storage\"\nimport { createTxEntry, submit, submit$ } from \"./tx\"\nimport { PolkadotClient, TypedApi } from \"./types\"\nimport { Binary } from \"@polkadot-api/substrate-bindings\"\n\nconst createTypedApi = <D extends ChainDefinition>(\n compatibilityToken: Promise<CompatibilityToken>,\n chainHead: ReturnType<ReturnType<typeof getObservableClient>[\"chainHead$\"]>,\n broadcast$: (tx: string) => Observable<never>,\n): TypedApi<D> => {\n const target = {}\n const createProxy = (propCall: (prop: string) => unknown) =>\n new Proxy(target, {\n get(_, prop) {\n return propCall(prop as string)\n },\n })\n const createProxyPath = <T>(pathCall: (a: string, b: string) => T) => {\n const cache: Record<string, Record<string, T>> = {}\n return createProxy((a) => {\n if (!cache[a]) cache[a] = {}\n return createProxy((b) => {\n if (!cache[a][b]) cache[a][b] = pathCall(a, b)\n return cache[a][b]\n })\n }) as Record<string, Record<string, T>>\n }\n\n const getPallet = (ctx: RuntimeContext, name: string) =>\n ctx.lookup.metadata.pallets.find((p) => p.name === name)!\n const query = createProxyPath((pallet, name) =>\n createStorageEntry(\n pallet,\n name,\n chainHead,\n compatibilityHelper(\n compatibilityToken,\n (r) => r.getPalletEntryPoint(OpType.Storage, pallet, name),\n // TODO this is way sub-optimal. Needs some rethought - maybe a builder for entry points?.\n (ctx) =>\n storageEntryPoint(\n getPallet(ctx, pallet).storage!.items.find((s) => s.name === name)!,\n ),\n ),\n ),\n )\n\n const getEnumEntry = (\n ctx: RuntimeContext,\n side: \"args\" | \"values\",\n id: number,\n name: string,\n ) => {\n const entry = ctx.lookup(id)\n if (entry.type !== \"enum\") throw new Error(\"Expected enum\")\n\n const node = enumValueEntryPointNode(entry.value[name])\n return {\n args: side === \"args\" ? node : voidEntryPointNode,\n values: side === \"args\" ? voidEntryPointNode : node,\n }\n }\n const tx = createProxyPath((pallet, name) =>\n createTxEntry(\n pallet,\n name,\n chainHead,\n broadcast$,\n compatibilityHelper(\n compatibilityToken,\n (r) => r.getPalletEntryPoint(OpType.Tx, pallet, name),\n (ctx) => getEnumEntry(ctx, \"args\", getPallet(ctx, pallet).calls!, name),\n ),\n true,\n ),\n )\n\n const event = createProxyPath((pallet, name) =>\n createEventEntry(\n pallet,\n name,\n chainHead,\n compatibilityHelper(\n compatibilityToken,\n (r) => r.getPalletEntryPoint(OpType.Event, pallet, name),\n (ctx) =>\n getEnumEntry(ctx, \"values\", getPallet(ctx, pallet).events!, name),\n ),\n ),\n )\n\n const constants = createProxyPath((pallet, name) =>\n createConstantEntry(\n pallet,\n name,\n compatibilityHelper(\n compatibilityToken,\n (r) => r.getPalletEntryPoint(OpType.Const, pallet, name),\n (ctx) =>\n singleValueEntryPoint(\n getPallet(ctx, pallet).constants.find((c) => c.name === name)!.type,\n ),\n ),\n ),\n )\n\n const apis = createProxyPath((api, method) =>\n createRuntimeCallEntry(\n api,\n method,\n chainHead,\n compatibilityHelper(\n compatibilityToken,\n (r) => r.getApiEntryPoint(api, method),\n (ctx) =>\n runtimeCallEntryPoint(\n ctx.lookup.metadata.apis\n .find((a) => a.name === api)!\n .methods.find((m) => m.name === method)!,\n ),\n ),\n ),\n )\n\n const _callDataTx = (callData: Binary, token: CompatibilityToken) => {\n const { lookup, dynamicBuilder } = getCompatibilityApi(token).runtime()\n try {\n const decoded = dynamicBuilder\n .buildDefinition(lookup.call!)\n .dec(callData.asBytes())\n const pallet = decoded.type\n const call = decoded.value.type\n const args = decoded.value.value\n\n return createTxEntry(\n pallet,\n call,\n chainHead,\n broadcast$,\n compatibilityHelper(\n compatibilityToken,\n (r) => r.getPalletEntryPoint(OpType.Tx, pallet, call),\n (ctx) =>\n getEnumEntry(ctx, \"args\", getPallet(ctx, pallet).calls!, call),\n ),\n false,\n )(args)\n } catch {\n throw new Error(\"createTx: invalid call data\")\n }\n }\n\n return {\n query,\n txFromCallData: (callData: Binary, token?: CompatibilityToken) =>\n token\n ? _callDataTx(callData, token)\n : compatibilityToken.then((t) => _callDataTx(callData, t)),\n tx,\n event,\n apis,\n constants,\n compatibilityToken,\n } as any\n}\n\n/**\n * This is the top-level export for `polkadot-api`.\n *\n * @param provider A `JsonRpcProvider` compliant with the [JSON-RPC\n * spec](https://paritytech.github.io/json-rpc-interface-spec/),\n * which must support the `chainHead`, `transaction` and\n * `chainSpec` groups.\n * @example\n *\n * import { createClient } from \"polkadot-api\"\n * import { getSmProvider } from \"polkadot-api/sm-provider\"\n * import { chainSpec } from \"polkadot-api/chains/polkadot\"\n * import { start } from \"polkadot-api/smoldot\"\n *\n * const smoldot = start()\n * const chain = await smoldot.addChain({ chainSpec })\n *\n * // Connect to the polkadot relay chain.\n * const client = createClient(getSmProvider(chain))\n *\n */\nexport function createClient(provider: JsonRpcProvider): PolkadotClient {\n const rawClient: SubstrateClient = createRawClient(provider)\n const client = getObservableClient(rawClient)\n const chainHead = client.chainHead$()\n\n const { getChainSpecData } = rawClient\n\n const _request: <Reply = any, Params extends Array<any> = any[]>(\n method: string,\n params: Params,\n ) => Promise<Reply> = rawClient.request\n\n const compatibilityToken = new WeakMap<\n ChainDefinition,\n Promise<CompatibilityToken<any>>\n >()\n const getChainToken = (chainDefinition: ChainDefinition) => {\n const result =\n compatibilityToken.get(chainDefinition) ||\n createCompatibilityToken(chainDefinition, chainHead)\n compatibilityToken.set(chainDefinition, result)\n return result\n }\n\n const { broadcastTx$ } = client\n return {\n getChainSpecData,\n\n finalizedBlock$: chainHead.finalized$,\n getFinalizedBlock: () => firstValueFrom(chainHead.finalized$),\n\n bestBlocks$: chainHead.bestBlocks$,\n getBestBlocks: () => firstValueFrom(chainHead.bestBlocks$),\n\n watchBlockBody: chainHead.body$,\n getBlockBody: (hash: string) => firstValueFrom(chainHead.body$(hash)),\n\n getBlockHeader: (hash?: string) =>\n firstValueFrom(chainHead.header$(hash ?? null)),\n\n submit: (...args) => submit(chainHead, broadcastTx$, ...args),\n submitAndWatch: (...args) => submit$(chainHead, broadcastTx$, ...args),\n\n getTypedApi: <D extends ChainDefinition>(chainDefinition: D) =>\n createTypedApi(getChainToken(chainDefinition), chainHead, broadcastTx$),\n\n destroy: () => {\n chainHead.unfollow()\n client.destroy()\n },\n\n _request,\n }\n}\n"],"names":["OpType","Vector","EntryPointCodec","TypedefCodec","Tuple","filter","firstValueFrom","mapLookupToTypedef","descriptors","entryPointsAreCompatible","combineLatest","map","CompatibilityLevel","valueIsCompatibleWithDest","share","ReplaySubject","AbortError","noop","Observable","defer","Subscription","value","mergeMap","toHex","distinctUntilChanged","debounceTime","NotBestBlockError","Storage","u32","Twox64Concat","fromHex","getDynamicBuilder","of","compactBn","enhanceEncoder","Bytes","u16","Struct","compact","Option","u8","u64","take","chainSignedExtensions.getNonce","_void","Blake2256","Binary","at","concat","EMPTY","lastValueFrom","AccountId","u128","arg","isCompatible","mergeUint8","throwError","getPolkadotSigner","Enum","storageEntryPoint","enumValueEntryPointNode","voidEntryPointNode","singleValueEntryPoint","runtimeCallEntryPoint","createRawClient","getObservableClient"],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sources":["../src/compatibility.ts","../src/constants.ts","../src/utils/shareLatest.ts","../src/utils/firstValueFromWithSignal.ts","../src/utils/concatMapEager.ts","../src/utils/raceMap.ts","../src/utils/continue-with.ts","../src/utils/optional-arg.ts","../src/event.ts","../src/runtime-call.ts","../src/storage.ts","../src/tx/signed-extensions/utils.ts","../src/tx/signed-extensions/user/ChargeTransactionPayment.ts","../src/tx/signed-extensions/user/CheckMortality.ts","../src/tx/signed-extensions/user/ChargeAssetTxPayment.ts","../src/tx/signed-extensions/chain/CheckGenesis.ts","../src/tx/signed-extensions/chain/CheckMetadataHash.ts","../src/tx/signed-extensions/chain/CheckNonce.ts","../src/tx/signed-extensions/chain/CheckSpecVersion.ts","../src/tx/signed-extensions/chain/CheckTxVersion.ts","../src/tx/create-tx.ts","../src/tx/submit-fns.ts","../src/tx/tx.ts","../src/client.ts"],"sourcesContent":["import { MetadataLookup } from \"@polkadot-api/metadata-builders\"\nimport {\n CompatibilityCache,\n CompatibilityLevel,\n EntryPoint,\n EntryPointCodec,\n TypedefCodec,\n TypedefNode,\n entryPointsAreCompatible,\n mapLookupToTypedef,\n valueIsCompatibleWithDest,\n} from \"@polkadot-api/metadata-compatibility\"\nimport {\n ChainHead$,\n getObservableClient,\n RuntimeContext,\n} from \"@polkadot-api/observable-client\"\nimport { Tuple, Vector } from \"@polkadot-api/substrate-bindings\"\nimport { Observable, combineLatest, filter, firstValueFrom, map } from \"rxjs\"\nimport { ChainDefinition } from \"./descriptors\"\n\nexport class CompatibilityToken<D = unknown> {\n private constructor() {}\n\n // @ts-ignore\n protected _phantom(value: D) {}\n}\n\ninterface CompatibilityTokenApi {\n runtime: () => RuntimeContext\n typedefNodes: TypedefNode[]\n getPalletEntryPoint: (\n opType: OpType,\n pallet: string,\n name: string,\n ) => EntryPoint\n getApiEntryPoint: (name: string, method: string) => EntryPoint\n}\nconst compatibilityTokenApi = new WeakMap<\n CompatibilityToken,\n CompatibilityTokenApi\n>()\nexport const getCompatibilityApi = (token: CompatibilityToken) =>\n compatibilityTokenApi.get(token)!\n\nexport const enum OpType {\n Storage = \"storage\",\n Tx = \"tx\",\n Event = \"events\",\n Const = \"constants\",\n}\n\nconst EntryPointsCodec = Vector(EntryPointCodec)\nconst TypedefsCodec = Vector(TypedefCodec)\nconst TypesCodec = Tuple(EntryPointsCodec, TypedefsCodec)\n\nexport const createCompatibilityToken = <D extends ChainDefinition>(\n chainDefinition: D,\n chainHead: ReturnType<ReturnType<typeof getObservableClient>[\"chainHead$\"]>,\n): Promise<CompatibilityToken<D>> => {\n const awaitedRuntime = new Promise<() => RuntimeContext>(async (resolve) => {\n const loadedRuntime$ = chainHead.runtime$.pipe(filter((v) => v != null))\n\n let latest = await firstValueFrom(loadedRuntime$)\n loadedRuntime$.subscribe((v) => (latest = v))\n\n resolve(() => latest)\n })\n\n const promise = Promise.all([\n chainDefinition.metadataTypes.then(TypesCodec.dec),\n chainDefinition.descriptors,\n awaitedRuntime,\n ]).then(([[entryPoints, typedefNodes], descriptors, runtime]) => {\n const token = new (CompatibilityToken as any)()\n compatibilityTokenApi.set(token, {\n runtime,\n getPalletEntryPoint(opType, pallet, name) {\n return entryPoints[descriptors[opType][pallet][name]]\n },\n getApiEntryPoint(name, method) {\n return entryPoints[descriptors.apis[name][method]]\n },\n typedefNodes,\n })\n\n return token\n })\n\n return promise\n}\n\n// metadataRaw -> cache\nconst metadataCache = new WeakMap<\n Uint8Array,\n {\n compat: CompatibilityCache\n lookup: MetadataLookup\n typeNodes: (TypedefNode | null)[]\n }\n>()\nconst getMetadataCache = (ctx: RuntimeContext) => {\n if (!metadataCache.has(ctx.metadataRaw)) {\n metadataCache.set(ctx.metadataRaw, {\n compat: new Map(),\n lookup: ctx.lookup,\n typeNodes: [],\n })\n }\n return metadataCache.get(ctx.metadataRaw)!\n}\nexport const compatibilityHelper = (\n descriptors: Promise<CompatibilityToken>,\n getDescriptorEntryPoint: (descriptorApi: CompatibilityTokenApi) => EntryPoint,\n getRuntimeEntryPoint: (ctx: RuntimeContext) => EntryPoint,\n) => {\n const getRuntimeTypedef = (ctx: RuntimeContext, id: number) => {\n const cache = getMetadataCache(ctx)\n return (cache.typeNodes[id] ||= mapLookupToTypedef(cache.lookup(id)))\n }\n\n function getCompatibilityLevels(\n descriptors: CompatibilityToken,\n /**\n * The `Runtime` of runtimeWithDescriptors already has a RuntimeContext,\n * which is the runtime of the finalized block.\n * But on some cases, the user wants to perform an action on a specific\n * block hash, which has a different RuntimeContext.\n */\n ctx?: RuntimeContext,\n ) {\n const compatibilityApi = compatibilityTokenApi.get(descriptors)!\n ctx ||= compatibilityApi.runtime()\n const descriptorEntryPoint = getDescriptorEntryPoint(compatibilityApi)\n const runtimeEntryPoint = getRuntimeEntryPoint(ctx)\n const descriptorNodes = compatibilityApi.typedefNodes\n\n const cache = getMetadataCache(ctx)\n\n return entryPointsAreCompatible(\n descriptorEntryPoint,\n (id) => descriptorNodes[id],\n runtimeEntryPoint,\n (id) => getRuntimeTypedef(ctx, id),\n cache.compat,\n )\n }\n\n const getCompatibilityLevel = withOptionalToken(descriptors, (runtime) =>\n minCompatLevel(getCompatibilityLevels(runtime)),\n )\n const isCompatible = withOptionalToken(\n descriptors,\n (threshold: CompatibilityLevel, runtime) =>\n getCompatibilityLevel(runtime) >= threshold,\n )\n\n const waitDescriptors = () => descriptors\n const compatibleRuntime$ = (chainHead: ChainHead$, hash: string | null) =>\n combineLatest([waitDescriptors(), chainHead.getRuntimeContext$(hash)])\n\n const withCompatibleRuntime =\n <T>(chainHead: ChainHead$, mapper: (x: T) => string) =>\n (\n source$: Observable<T>,\n ): Observable<[T, CompatibilityToken, RuntimeContext]> =>\n combineLatest([\n source$.pipe(chainHead.withRuntime(mapper)),\n waitDescriptors(),\n ]).pipe(map(([[x, ctx], descriptors]) => [x, descriptors, ctx]))\n\n const argsAreCompatible = (\n descriptors: CompatibilityToken,\n ctx: RuntimeContext,\n args: unknown,\n ) => {\n const levels = getCompatibilityLevels(descriptors, ctx)\n if (levels.args === CompatibilityLevel.Incompatible) return false\n if (levels.args > CompatibilityLevel.Partial) return true\n // Although technically args could still be compatible, if the output will be incompatible we might as well just return false to skip sending the request.\n if (levels.values === CompatibilityLevel.Incompatible) return false\n\n const entryPoint = getRuntimeEntryPoint(ctx)\n\n return valueIsCompatibleWithDest(\n entryPoint.args,\n (id) => getRuntimeTypedef(ctx, id),\n args,\n )\n }\n const valuesAreCompatible = (\n descriptors: CompatibilityToken,\n ctx: RuntimeContext,\n values: unknown,\n ) => {\n const level = getCompatibilityLevels(descriptors, ctx).values\n if (level === CompatibilityLevel.Incompatible) return false\n if (level > CompatibilityLevel.Partial) return true\n\n const compatibilityApi = compatibilityTokenApi.get(descriptors)!\n\n const entryPoint = getDescriptorEntryPoint(compatibilityApi)\n\n return valueIsCompatibleWithDest(\n entryPoint.values,\n (id) => compatibilityApi.typedefNodes[id],\n values,\n )\n }\n\n return {\n isCompatible,\n getCompatibilityLevel,\n getCompatibilityLevels,\n waitDescriptors,\n withCompatibleRuntime,\n compatibleRuntime$,\n argsAreCompatible,\n valuesAreCompatible,\n getRuntimeTypedef,\n }\n}\nexport type CompatibilityHelper = ReturnType<typeof compatibilityHelper>\n\nexport const minCompatLevel = (levels: {\n args: CompatibilityLevel\n values: CompatibilityLevel\n}) => Math.min(levels.args, levels.values)\n\nconst withOptionalToken =\n <T, D, A extends [...any[], CompatibilityToken]>(\n compatibilityToken: Promise<CompatibilityToken<D>>,\n fn: (...args: A) => T,\n ): WithOptionalRuntime<T, D, A extends [...infer R, any] ? R : []> =>\n (...args: any): any => {\n const lastElement = args.at(-1)\n if (lastElement instanceof CompatibilityToken) {\n return fn(...args)\n }\n return compatibilityToken.then((token) => (fn as any)(...args, token))\n }\n\nexport type WithOptionalRuntime<T, D, A extends any[]> = {\n /**\n * Returns the result after waiting for the runtime to load.\n */\n (...args: A): Promise<T>\n /**\n * Returns the result synchronously with the loaded runtime.\n */\n (...args: [...A, runtime: CompatibilityToken<D>]): T\n}\n\nexport interface CompatibilityFunctions<D> {\n /**\n * Returns the `CompatibilityLevel` for this call comparing the descriptors\n * generated on dev time with the current live metadata.\n */\n getCompatibilityLevel(): Promise<CompatibilityLevel>\n /**\n * Returns the `CompatibilityLevel` for this call comparing the descriptors\n * generated on dev time with the current live metadata.\n *\n * @param compatibilityToken CompatibilityToken awaited from\n * typedApi.compatibilityToken.\n */\n getCompatibilityLevel(\n compatibilityToken: CompatibilityToken<D>,\n ): CompatibilityLevel\n\n /**\n * Returns whether this call is compatible based on the CompatibilityLevel\n * threshold.\n *\n * @param threshold CompatibilityLevel threshold to use, inclusive.\n */\n isCompatible(threshold: CompatibilityLevel): Promise<boolean>\n\n /**\n * Returns whether this call is compatible based on the CompatibilityLevel\n * threshold.\n *\n * @param threshold CompatibilityLevel threshold to use,\n * inclusive.\n * @param compatibilityToken CompatibilityToken awaited from\n * typedApi.compatibilityToken.\n */\n isCompatible(\n threshold: CompatibilityLevel,\n compatibilityToken: CompatibilityToken<D>,\n ): boolean\n}\n","import { RuntimeContext } from \"@polkadot-api/observable-client\"\nimport {\n CompatibilityFunctions,\n CompatibilityHelper,\n CompatibilityToken,\n getCompatibilityApi,\n} from \"./compatibility\"\n\nexport interface ConstantEntry<D, T> extends CompatibilityFunctions<D> {\n /**\n * Constants are simple key-value structures found in the runtime metadata.\n *\n * @returns Promise that will resolve in the value of the constant.\n */\n (): Promise<T>\n /**\n * @param compatibilityToken Token from got with `await\n * typedApi.compatibilityToken`\n * @returns Synchronously returns value of the constant.\n */\n (compatibilityToken: CompatibilityToken): T\n}\n\nexport const createConstantEntry = <D, T>(\n palletName: string,\n name: string,\n {\n valuesAreCompatible,\n waitDescriptors,\n isCompatible,\n getCompatibilityLevel,\n }: CompatibilityHelper,\n): ConstantEntry<D, T> => {\n const cachedResults = new WeakMap<RuntimeContext, T>()\n const getValueWithContext = (ctx: RuntimeContext) => {\n if (cachedResults.has(ctx)) {\n return cachedResults.get(ctx)!\n }\n\n const pallet = ctx.lookup.metadata.pallets.find(\n (p) => p.name === palletName,\n )\n const constant = pallet?.constants.find((c) => c.name === name)\n if (constant == null)\n throw new Error(`Runtime entry Constant(${palletName}.${name}) not found`)\n const result = ctx.dynamicBuilder\n .buildConstant(palletName, name)\n .dec(constant.value)\n cachedResults.set(ctx, result)\n return result\n }\n\n const fn = (compatibilityToken?: CompatibilityToken): any => {\n if (compatibilityToken) {\n const ctx = getCompatibilityApi(compatibilityToken).runtime()\n const value = getValueWithContext(ctx)\n if (!valuesAreCompatible(compatibilityToken, ctx, value))\n throw new Error(\n `Incompatible runtime entry Constant(${palletName}.${name})`,\n )\n return value\n }\n return waitDescriptors().then(fn)\n }\n\n return Object.assign(fn, { isCompatible, getCompatibilityLevel })\n}\n","import { Observable, ReplaySubject, share } from \"rxjs\"\n\nexport const shareLatest: <T>(base: Observable<T>) => Observable<T> = share({\n connector: () => new ReplaySubject(1),\n resetOnError: true,\n resetOnComplete: true,\n resetOnRefCountZero: true,\n})\n","import { AbortError } from \"@polkadot-api/utils\"\nimport { Observable, Subscription, noop } from \"rxjs\"\n\nexport function firstValueFromWithSignal<T>(\n source: Observable<T>,\n signal?: AbortSignal,\n): Promise<T> {\n return new Promise((resolve, reject) => {\n let subscription: Subscription | null = null\n let isDone = false\n\n const onAbort = signal\n ? () => {\n subscription?.unsubscribe()\n reject(new AbortError())\n }\n : noop\n\n subscription = source.subscribe({\n next: (value) => {\n resolve(value)\n subscription?.unsubscribe()\n isDone = true\n },\n error: (e) => {\n signal?.removeEventListener(\"abort\", onAbort)\n reject(e)\n },\n complete: () => {\n signal?.removeEventListener(\"abort\", onAbort)\n reject(new Error(\"Observable completed without emitting\"))\n },\n })\n\n // the observable could have emitted synchronously\n if (!isDone) signal?.addEventListener(\"abort\", onAbort)\n })\n}\n","import { defer, Observable, ObservableInput, Subscription } from \"rxjs\"\n\nexport const concatMapEager =\n <I, O>(\n mapper: (outterValue: I, index: number) => ObservableInput<O>,\n concurrent = Infinity,\n ) =>\n (source$: Observable<I>) =>\n new Observable<O>((observer) => {\n let topSubscription: Subscription\n const queues = new Map<number, Observable<O>>()\n const innerSubscriptions = new Map<number, Subscription>()\n const results = new Map<number, O[]>()\n\n let mapperIdx = 0\n let subscriptionIdx = 0\n let observerIdx = 0\n\n const nextSubscription = () => {\n const inner$ = queues.get(subscriptionIdx)\n if (!inner$) {\n if (\n innerSubscriptions.size === 0 &&\n (typeof topSubscription === \"undefined\" || topSubscription.closed)\n ) {\n observer.complete()\n }\n return\n }\n const idx = subscriptionIdx++\n queues.delete(idx)\n if (observerIdx !== idx) {\n results.set(idx, [])\n }\n innerSubscriptions.set(\n idx,\n inner$.subscribe({\n next(x: O) {\n if (observerIdx === idx) {\n observer.next(x)\n } else {\n results.get(idx)!.push(x)\n }\n },\n complete() {\n innerSubscriptions.delete(idx)\n if (idx === observerIdx) {\n observerIdx++\n while (results.has(observerIdx)) {\n results.get(observerIdx)!.forEach((x) => observer.next(x))\n results.delete(observerIdx)\n if (innerSubscriptions.has(observerIdx)) {\n break\n }\n observerIdx++\n }\n }\n nextSubscription()\n },\n error(e: any) {\n observer.error(e)\n },\n }),\n )\n }\n\n topSubscription = source$.subscribe({\n next(outterValue: I) {\n const idx = mapperIdx++\n queues.set(\n idx,\n defer(() => mapper(outterValue, idx)),\n )\n if (innerSubscriptions.size < concurrent) {\n nextSubscription()\n }\n },\n error(e: any) {\n observer.error(e)\n },\n complete() {\n if (innerSubscriptions.size === 0) {\n observer.complete()\n }\n },\n })\n\n return () => {\n innerSubscriptions.forEach((subscription) => subscription.unsubscribe())\n topSubscription.unsubscribe()\n queues.clear()\n results.clear()\n }\n })\n","import { Observable, Subscription } from \"rxjs\"\n\nexport const raceMap =\n <I, O>(mapper: (x: I) => Observable<O>, concurrent: number) =>\n (source$: Observable<I>) =>\n new Observable<O>((observer) => {\n let innerSubscriptions = new Array<Subscription>()\n let isOuterDone = false\n\n const createSubscription = (value: I) => {\n const sub = new Subscription()\n innerSubscriptions.push(sub)\n if (innerSubscriptions.length > concurrent) {\n innerSubscriptions[0].unsubscribe()\n innerSubscriptions = innerSubscriptions.slice(1)\n }\n\n const subscription = mapper(value).subscribe({\n next(value) {\n const index = innerSubscriptions.indexOf(sub)\n innerSubscriptions.slice(0, index).forEach((s) => s.unsubscribe())\n innerSubscriptions = innerSubscriptions.slice(index)\n\n observer.next(value)\n },\n error(error) {\n observer.error(error)\n },\n complete() {\n const index = innerSubscriptions.indexOf(sub)\n innerSubscriptions.splice(index, 1)\n\n if (innerSubscriptions.length === 0 && isOuterDone)\n observer.complete()\n },\n })\n sub.add(subscription)\n }\n\n const outerSubscription = source$.subscribe({\n next(value) {\n createSubscription(value)\n },\n error(err) {\n observer.error(err)\n },\n complete() {\n if (innerSubscriptions.length === 0) observer.complete()\n isOuterDone = true\n },\n })\n\n return () => {\n outerSubscription.unsubscribe()\n innerSubscriptions.forEach((sub) => sub.unsubscribe())\n }\n })\n","import { Observable } from \"rxjs\"\n\nlet NOTIN = {}\nexport const continueWith =\n <I, O>(\n mapper: (input: I) => Observable<O>,\n ): ((source: Observable<I>) => Observable<I | O>) =>\n (source) =>\n new Observable((observer) => {\n let latestValue: I = NOTIN as I\n let subscription = source.subscribe({\n next(v) {\n observer.next((latestValue = v))\n },\n error(e) {\n observer.error(e)\n },\n complete() {\n if (latestValue === NOTIN) observer.complete()\n else subscription = mapper(latestValue).subscribe(observer)\n },\n })\n\n return () => {\n subscription.unsubscribe()\n }\n })\n","export const isOptionalArg = (lastArg: unknown) =>\n typeof lastArg === \"object\" &&\n lastArg !== null &&\n Object.entries(lastArg).every(\n ([k, v]) =>\n (k === \"at\" && (v === undefined || typeof v === \"string\")) ||\n (k === \"signal\" && (v === undefined || v instanceof AbortSignal)),\n )\n","import { Observable, firstValueFrom, map, mergeMap } from \"rxjs\"\nimport { BlockInfo, ChainHead$ } from \"@polkadot-api/observable-client\"\nimport { CompatibilityFunctions, CompatibilityHelper } from \"./compatibility\"\nimport { concatMapEager, shareLatest } from \"./utils\"\n\nexport type EventPhase =\n | { type: \"ApplyExtrinsic\"; value: number }\n | { type: \"Finalization\" }\n | { type: \"Initialization\" }\n\nexport type EvWatch<T> = (filter?: (value: T) => boolean) => Observable<{\n meta: {\n block: BlockInfo\n phase: EventPhase\n }\n payload: T\n}>\n\nexport type EvPull<T> = () => Promise<\n Array<{\n meta: {\n block: BlockInfo\n phase: EventPhase\n }\n payload: T\n }>\n>\n\nexport type EvFilter<T> = (collection: SystemEvent[\"event\"][]) => Array<T>\n\nexport type EvClient<D, T> = {\n /**\n * Multicast and stateful Observable watching for new events (matching the\n * event kind chosen) in the latest known `finalized` block.\n *\n * @param filter Optional filter function to only emit events complying\n * with the function.\n */\n watch: EvWatch<T>\n /**\n * Fetch (Promise-based) all events (matching the event kind chosen) available\n * in the latest known `finalized` block.\n */\n pull: EvPull<T>\n /**\n * Filter a bunch of `SystemEvent` and return the decoded `payload` of every\n * of them.\n *\n * @param collection Array of `SystemEvent` to filter.\n */\n filter: EvFilter<T>\n} & CompatibilityFunctions<D>\n\ntype SystemEvent = {\n phase: EventPhase\n event: {\n type: string\n value: {\n type: string\n value: any\n }\n }\n topics: Array<any>\n}\n\nexport const createEventEntry = <D, T>(\n pallet: string,\n name: string,\n chainHead: ChainHead$,\n {\n isCompatible,\n getCompatibilityLevel,\n withCompatibleRuntime,\n argsAreCompatible,\n valuesAreCompatible,\n }: CompatibilityHelper,\n): EvClient<D, T> => {\n const compatibilityError = () =>\n new Error(`Incompatible runtime entry Event(${pallet}.${name})`)\n\n const shared$ = chainHead.finalized$.pipe(\n withCompatibleRuntime(chainHead, (x) => x.hash),\n map(([block, runtime, ctx]) => {\n const eventsIdx = ctx.lookup.metadata.pallets.find(\n (p) => p.name === pallet,\n )?.events\n if (\n eventsIdx == null ||\n ctx.lookup.metadata.lookup[eventsIdx].def.tag !== \"variant\" ||\n ctx.lookup.metadata.lookup[eventsIdx].def.value.find(\n (ev) => ev.name === name,\n ) == null\n )\n throw new Error(`Runtime entry Event(${pallet}.${name}) not found`)\n\n if (!argsAreCompatible(runtime, ctx, null)) throw compatibilityError()\n return [block, runtime, ctx] as const\n }),\n concatMapEager(([block, runtime, ctx]) =>\n chainHead.eventsAt$(block.hash).pipe(\n map((events) => {\n const winners = events.filter(\n (e) => e.event.type === pallet && e.event.value.type === name,\n )\n return winners.map((x) => {\n if (!valuesAreCompatible(runtime, ctx, x.event.value.value))\n throw compatibilityError()\n return {\n meta: {\n phase: x.phase,\n block,\n },\n payload: x.event.value.value,\n }\n })\n }),\n ),\n ),\n shareLatest,\n )\n\n const watch: EvWatch<T> = (f) =>\n shared$.pipe(mergeMap((x) => (f ? x.filter((d) => f(d.payload)) : x)))\n\n const pull: EvPull<T> = () => firstValueFrom(shared$)\n\n const filter: EvFilter<T> = (events) =>\n events\n .filter((e) => e.type === pallet && e.value.type === name)\n .map((x) => x.value.value)\n\n return { watch, pull, filter, getCompatibilityLevel, isCompatible }\n}\n","import { firstValueFromWithSignal, isOptionalArg } from \"@/utils\"\nimport { ChainHead$ } from \"@polkadot-api/observable-client\"\nimport { toHex } from \"@polkadot-api/utils\"\nimport { map, mergeMap } from \"rxjs\"\nimport { CompatibilityFunctions, CompatibilityHelper } from \"./compatibility\"\n\ntype CallOptions = Partial<{\n at: string\n signal: AbortSignal\n}>\n\ntype WithCallOptions<Args extends Array<any>> = Args[\"length\"] extends 0\n ? [options?: CallOptions]\n : [...args: Args, options?: CallOptions]\n\nexport interface RuntimeCall<D, Args extends Array<any>, Payload>\n extends CompatibilityFunctions<D> {\n /**\n * Get `Payload` (Promise-based) for the runtime call.\n *\n * @param args All keys needed for that runtime call.\n * At the end, optionally set which block to target (latest\n * known finalized is the default) and an AbortSignal.\n */\n (...args: WithCallOptions<Args>): Promise<Payload>\n}\n\nexport const createRuntimeCallEntry = (\n api: string,\n method: string,\n chainHead: ChainHead$,\n {\n isCompatible,\n getCompatibilityLevel,\n compatibleRuntime$,\n argsAreCompatible,\n valuesAreCompatible,\n }: CompatibilityHelper,\n): RuntimeCall<any, any, any> => {\n const callName = `${api}_${method}`\n const compatibilityError = () =>\n new Error(`Incompatible runtime entry RuntimeCall(${callName})`)\n\n const fn = (...args: Array<any>) => {\n const lastArg = args[args.length - 1]\n const isLastArgOptional = isOptionalArg(lastArg)\n const { signal, at: _at }: CallOptions = isLastArgOptional ? lastArg : {}\n const at = _at ?? null\n\n const result$ = compatibleRuntime$(chainHead, at).pipe(\n mergeMap(([runtime, ctx]) => {\n let codecs\n try {\n codecs = ctx.dynamicBuilder.buildRuntimeCall(api, method)\n } catch {\n throw new Error(`Runtime entry RuntimeCall(${callName}) not found`)\n }\n if (!argsAreCompatible(runtime, ctx, args)) throw compatibilityError()\n return chainHead.call$(at, callName, toHex(codecs.args.enc(args))).pipe(\n map(codecs.value.dec),\n map((value) => {\n if (!valuesAreCompatible(runtime, ctx, value))\n throw compatibilityError()\n return value\n }),\n )\n }),\n )\n\n return firstValueFromWithSignal(result$, signal)\n }\n\n return Object.assign(fn, { getCompatibilityLevel, isCompatible })\n}\n","import { firstValueFromWithSignal, isOptionalArg, raceMap } from \"@/utils\"\nimport {\n ChainHead$,\n NotBestBlockError,\n RuntimeContext,\n} from \"@polkadot-api/observable-client\"\nimport { StorageItemInput, StorageResult } from \"@polkadot-api/substrate-client\"\nimport { Observable, debounceTime, distinctUntilChanged, map } from \"rxjs\"\nimport {\n CompatibilityFunctions,\n CompatibilityHelper,\n minCompatLevel,\n} from \"./compatibility\"\nimport { CompatibilityLevel } from \"@polkadot-api/metadata-compatibility\"\n\ntype CallOptions = Partial<{\n /**\n * `at` could be a blockHash, `best`, or `finalized` (default)\n */\n at: string\n /**\n * `signal` allows you to abort an ongoing Promise. See [MDN\n * docs](https://developer.mozilla.org/en-US/docs/Web/API/AbortSignal) for\n * more information\n */\n signal: AbortSignal\n}>\n\ntype WithCallOptions<Args extends Array<any>> = [\n ...args: Args,\n options?: CallOptions,\n]\n\ntype PossibleParents<A extends Array<any>> = A extends [...infer Left, any]\n ? Left | PossibleParents<Left>\n : ArrayPossibleParents<A>\n\n// Fixed-size arrays values can't be extracted one-by-one, so that's a specific case\ntype ArrayPossibleParents<\n A extends Array<any>,\n Count extends Array<any> = [],\n R = [],\n> = A extends Array<infer T> & { length: infer L }\n ? number extends L\n ? Array<T> // Case variable-size array it's an unknown amount of entries\n : L extends Count[\"length\"]\n ? R\n : ArrayPossibleParents<A, [...Count, T], R | Count>\n : never\n\ntype StorageEntryWithoutKeys<D, Payload> = {\n /**\n * Get `Payload` (Promise-based) for the storage entry.\n *\n * @param options Optionally set which block to target (latest known\n * finalized is the default) and an AbortSignal.\n */\n getValue: (options?: CallOptions) => Promise<Payload>\n /**\n * Watch changes in `Payload` (observable-based) for the storage entry.\n *\n * @param bestOrFinalized Optionally choose which block to query and watch\n * changes, `best` or `finalized` (default)\n */\n watchValue: (bestOrFinalized?: \"best\" | \"finalized\") => Observable<Payload>\n} & CompatibilityFunctions<D>\n\ntype StorageEntryWithKeys<D, Args extends Array<any>, Payload> = {\n /**\n * Get `Payload` (Promise-based) for the storage entry with a specific set of\n * `Args`.\n *\n * @param args All keys needed for that storage entry.\n * At the end, optionally set which block to target (latest\n * known finalized is the default) and an AbortSignal.\n */\n getValue: (...args: [...WithCallOptions<Args>]) => Promise<Payload>\n /**\n * Watch changes in `Payload` (observable-based) for the storage entry.\n *\n * @param args All keys needed for that storage entry.\n * At the end, optionally choose which block to query and\n * watch changes, `best` or `finalized` (default)\n */\n watchValue: (\n ...args: [...Args, bestOrFinalized?: \"best\" | \"finalized\"]\n ) => Observable<Payload>\n /**\n * Get an Array of `Payload` (Promise-based) for the storage entry with\n * several sets of `Args`.\n *\n * @param keys Array of sets of keys needed for the storage entry.\n * @param options Optionally set which block to target (latest known\n * finalized is the default) and an AbortSignal.\n */\n getValues: (\n keys: Array<[...Args]>,\n options?: CallOptions,\n ) => Promise<Array<Payload>>\n /**\n * Get an Array of `Payload` (Promise-based) for the storage entry with a\n * subset of `Args`.\n *\n * @param args Subset of keys needed for the storage entry.\n * At the end, optionally set which block to target (latest\n * known finalized is the default) and an AbortSignal.\n * @example\n *\n * // this is a query with 3 keys\n * typedApi.query.Pallet.Query.getEntries({ at: \"best\" }) // no keys\n * typedApi.query.Pallet.Query.getEntries(arg1, { at: \"finalized\" }) // 1/3 keys\n * typedApi.query.Pallet.Query.getEntries(arg1, arg2, { at: \"0x12345678\" }) // 2/3 keys\n *\n */\n getEntries: (\n ...args: WithCallOptions<PossibleParents<Args>>\n ) => Promise<Array<{ keyArgs: Args; value: NonNullable<Payload> }>>\n} & CompatibilityFunctions<D>\n\nexport type StorageEntry<D, Args extends Array<any>, Payload> = Args extends []\n ? StorageEntryWithoutKeys<D, Payload>\n : StorageEntryWithKeys<D, Args, Payload>\n\nexport type Storage$ = <Type extends StorageItemInput[\"type\"]>(\n hash: string | null,\n type: Type,\n key: string,\n childTrie: string | null,\n) => Observable<StorageResult<Type>>\n\nexport const createStorageEntry = (\n pallet: string,\n name: string,\n chainHead: ChainHead$,\n {\n isCompatible,\n getCompatibilityLevel,\n getCompatibilityLevels,\n waitDescriptors,\n withCompatibleRuntime,\n argsAreCompatible,\n valuesAreCompatible,\n }: CompatibilityHelper,\n): StorageEntry<any, any, any> => {\n const isSystemNumber = pallet === \"System\" && name === \"Number\"\n\n const incompatibleError = () =>\n new Error(`Incompatible runtime entry Storage(${pallet}.${name})`)\n const invalidArgs = (args: Array<any>) =>\n new Error(`Invalid Arguments calling ${pallet}.${name}(${args})`)\n\n const getCodec = (ctx: RuntimeContext) => {\n try {\n return ctx.dynamicBuilder.buildStorage(pallet, name)\n } catch {\n throw new Error(`Runtime entry Storage(${pallet}.${name}) not found`)\n }\n }\n\n const watchValue = (...args: Array<any>) => {\n const target = args[args.length - 1]\n const actualArgs =\n target === \"best\" || target === \"finalized\" ? args.slice(0, -1) : args\n\n if (isSystemNumber)\n return chainHead.bestBlocks$.pipe(\n map((blocks) => blocks.at(target === \"best\" ? 0 : -1)!.number),\n distinctUntilChanged(),\n )\n\n return chainHead[target === \"best\" ? \"best$\" : \"finalized$\"].pipe(\n debounceTime(0),\n withCompatibleRuntime(chainHead, (x) => x.hash),\n raceMap(([block, runtime, ctx]) => {\n const codecs = getCodec(ctx)\n if (!argsAreCompatible(runtime, ctx, actualArgs))\n throw incompatibleError()\n return chainHead\n .storage$(block.hash, \"value\", () => codecs.enc(...actualArgs))\n .pipe(\n map((val) => {\n if (!valuesAreCompatible(runtime, ctx, val))\n throw incompatibleError()\n return { val, codecs }\n }),\n )\n }, 4),\n distinctUntilChanged((a, b) => a.val === b.val),\n map(({ val, codecs }) =>\n val === null ? codecs.fallback : codecs.dec(val),\n ),\n )\n }\n\n const getValue = async (...args: Array<any>) => {\n const lastArg = args[args.length - 1]\n const isLastArgOptional = isOptionalArg(lastArg)\n const { signal, at: _at }: CallOptions = isLastArgOptional ? lastArg : {}\n const at = _at ?? null\n\n let result$: Observable<any>\n if (isSystemNumber) {\n result$ = chainHead.bestBlocks$.pipe(\n map((blocks) => {\n if (at === \"finalized\" || !at) return blocks.at(-1)\n if (at === \"best\") return blocks.at(0)\n return blocks.find((block) => block.hash === at)\n }),\n map((block) => {\n if (!block) throw new NotBestBlockError()\n return block.number\n }),\n distinctUntilChanged(),\n )\n } else {\n const descriptors = await waitDescriptors()\n result$ = chainHead.storage$(\n at,\n \"value\",\n (ctx) => {\n const codecs = getCodec(ctx)\n const actualArgs =\n args.length === codecs.len ? args : args.slice(0, -1)\n if (args !== actualArgs && !isLastArgOptional) throw invalidArgs(args)\n if (!argsAreCompatible(descriptors, ctx, actualArgs))\n throw incompatibleError()\n return codecs.enc(...actualArgs)\n },\n null,\n (data, ctx) => {\n const codecs = getCodec(ctx)\n const value = data === null ? codecs.fallback : codecs.dec(data)\n if (!valuesAreCompatible(descriptors, ctx, value))\n throw incompatibleError()\n return value\n },\n )\n }\n\n return firstValueFromWithSignal(result$, signal)\n }\n\n const getEntries = async (...args: Array<any>) => {\n const lastArg = args[args.length - 1]\n const isLastArgOptional = isOptionalArg(lastArg)\n const { signal, at: _at }: CallOptions = isLastArgOptional ? lastArg : {}\n const at = _at ?? null\n\n const descriptors = await waitDescriptors()\n const result$ = chainHead.storage$(\n at,\n \"descendantsValues\",\n (ctx) => {\n const codecs = getCodec(ctx)\n // TODO partial compatibility check for args that become optional\n if (\n minCompatLevel(getCompatibilityLevels(descriptors, ctx)) ===\n CompatibilityLevel.Incompatible\n )\n throw incompatibleError()\n\n if (args.length > codecs.len) throw invalidArgs(args)\n const actualArgs =\n args.length > 0 && isLastArgOptional ? args.slice(0, -1) : args\n if (args.length === codecs.len && actualArgs === args)\n throw invalidArgs(args)\n return codecs.enc(...actualArgs)\n },\n null,\n (values, ctx) => {\n const codecs = getCodec(ctx)\n if (\n values.some(\n ({ value }) => !valuesAreCompatible(descriptors, ctx, value),\n )\n )\n throw incompatibleError()\n return values.map(({ key, value }) => ({\n keyArgs: codecs.keyDecoder(key),\n value: codecs.dec(value),\n }))\n },\n )\n return firstValueFromWithSignal(result$, signal)\n }\n\n const getValues = (keyArgs: Array<Array<any>>, options?: CallOptions) =>\n Promise.all(\n keyArgs.map((args) => getValue(...(options ? [...args, options] : args))),\n )\n\n return {\n isCompatible,\n getCompatibilityLevel,\n getValue,\n getValues,\n getEntries,\n watchValue,\n }\n}\n","import {\n getDynamicBuilder,\n MetadataLookup,\n} from \"@polkadot-api/metadata-builders\"\nimport { Storage, Twox64Concat, u32 } from \"@polkadot-api/substrate-bindings\"\nimport { fromHex } from \"@polkadot-api/utils\"\nimport { map, noop, of } from \"rxjs\"\nimport type { ChainExtensionCtx } from \"./internal-types\"\n\nexport const empty = new Uint8Array()\n\nconst genesisHashStorageKey = Storage(\"System\")(\"BlockHash\", noop, [\n u32,\n Twox64Concat,\n]).enc(0)\n\nexport const genesisHashFromCtx = (ctx: ChainExtensionCtx) =>\n ctx.chainHead\n .storage$(ctx.at, \"value\", () => genesisHashStorageKey, null)\n .pipe(map((result) => fromHex(result!)))\n\nexport const systemVersionProp$ = (\n propName: string,\n lookupFn: MetadataLookup,\n) => {\n const dynamicBuilder = getDynamicBuilder(lookupFn)\n\n const constant = lookupFn.metadata.pallets\n .find((x) => x.name === \"System\")!\n .constants!.find((s) => s.name === \"Version\")!\n\n const systemVersion = lookupFn(constant.type)\n const systemVersionDec = dynamicBuilder.buildDefinition(constant.type).dec\n\n if (systemVersion.type !== \"struct\") throw new Error(\"not a struct\")\n\n const valueEnc = dynamicBuilder.buildDefinition(\n systemVersion.value[propName].id,\n ).enc\n\n return of(valueEnc(systemVersionDec(constant.value)[propName]))\n}\n","import { compactBn } from \"@polkadot-api/substrate-bindings\"\nimport { of } from \"rxjs\"\nimport { empty } from \"../utils\"\nimport { SignedExtension } from \"../internal-types\"\n\nexport const ChargeTransactionPayment = (tip: bigint): SignedExtension =>\n of({\n value: compactBn.enc(tip),\n additionalSigned: empty,\n })\n","import { map, of } from \"rxjs\"\nimport { Bytes, enhanceEncoder, u16 } from \"@polkadot-api/substrate-bindings\"\nimport { fromHex } from \"@polkadot-api/utils\"\nimport { genesisHashFromCtx } from \"../utils\"\nimport { ChainExtensionCtx, SignedExtension } from \"../internal-types\"\n\nfunction trailingZeroes(n: number) {\n let i = 0\n while (!(n & 1)) {\n i++\n n >>= 1\n }\n return i\n}\n\nconst mortal = enhanceEncoder(\n Bytes(2).enc,\n (value: { period: number; phase: number }) => {\n const factor = Math.max(value.period >> 12, 1)\n const left = Math.min(Math.max(trailingZeroes(value.period) - 1, 1), 15)\n const right = (value.phase / factor) << 4\n return u16.enc(left | right)\n },\n)\n\nconst zero = new Uint8Array([0])\nexport const CheckMortality = (\n input: { period: number; blockNumber: number } | undefined,\n ctx: ChainExtensionCtx,\n): SignedExtension => {\n if (!input)\n return genesisHashFromCtx(ctx).pipe(\n map((additionalSigned) => ({\n additionalSigned,\n value: zero,\n })),\n )\n\n const { period, blockNumber } = input\n return of({\n additionalSigned: fromHex(ctx.at),\n value: mortal({\n period,\n phase: blockNumber % period,\n }),\n })\n}\n","import { of } from \"rxjs\"\nimport {\n Bytes,\n Option,\n Struct,\n compact,\n} from \"@polkadot-api/substrate-bindings\"\nimport { empty } from \"../utils\"\nimport { SignedExtension } from \"../internal-types\"\n\nconst encoder = Struct({\n tip: compact,\n asset: Option(Bytes(Infinity)),\n}).enc\n\nexport const ChargeAssetTxPayment = (\n tip: number | bigint,\n asset: Uint8Array | undefined,\n): SignedExtension =>\n of({\n value: encoder({\n tip,\n asset,\n }),\n additionalSigned: empty,\n })\n","import { map } from \"rxjs\"\nimport type { GetChainSignedExtension } from \"../internal-types\"\nimport { empty, genesisHashFromCtx } from \"../utils\"\n\nexport const CheckGenesis: GetChainSignedExtension = (ctx) =>\n genesisHashFromCtx(ctx).pipe(\n map((additionalSigned) => ({ value: empty, additionalSigned })),\n )\n","import { of } from \"rxjs\"\nimport type { GetChainSignedExtension } from \"../internal-types\"\n\nexport const CheckMetadataHash: GetChainSignedExtension = () =>\n of({\n value: Uint8Array.from([0]),\n additionalSigned: Uint8Array.from([0]),\n })\n","import { mergeMap, of } from \"rxjs\"\nimport { compact, u16, u32, u64, u8 } from \"@polkadot-api/substrate-bindings\"\nimport type {\n GetChainSignedExtension,\n SignedExtension,\n} from \"../internal-types\"\nimport { empty } from \"../utils\"\nimport { fromHex, toHex } from \"@polkadot-api/utils\"\n\nconst NONCE_RUNTIME_CALL = \"AccountNonceApi_account_nonce\"\nconst lenToDecoder = {\n 1: u8.dec,\n 2: u16.dec,\n 4: u32.dec,\n 8: u64.dec,\n}\n\nexport const getNonce = (input: number | bigint): SignedExtension =>\n of({ value: compact.enc(input), additionalSigned: empty })\n\nexport const CheckNonce: GetChainSignedExtension = (ctx) =>\n ctx.chainHead.call$(ctx.at, NONCE_RUNTIME_CALL, toHex(ctx.from)).pipe(\n mergeMap((result) => {\n const bytes = fromHex(result)\n const decoder = lenToDecoder[bytes.length as 2 | 4 | 8]\n if (!decoder)\n throw new Error(`${NONCE_RUNTIME_CALL} retrieved wrong data`)\n return getNonce(decoder(bytes))\n }),\n )\n","import { map } from \"rxjs\"\nimport type { GetChainSignedExtension } from \"../internal-types\"\nimport { empty, systemVersionProp$ } from \"../utils\"\n\nexport const CheckSpecVersion: GetChainSignedExtension = ({ lookupFn }) =>\n systemVersionProp$(\"spec_version\", lookupFn).pipe(\n map((additionalSigned) => ({ additionalSigned, value: empty })),\n )\n","import { map } from \"rxjs\"\nimport type { GetChainSignedExtension } from \"../internal-types\"\nimport { empty, systemVersionProp$ } from \"../utils\"\n\nexport const CheckTxVersion: GetChainSignedExtension = ({ lookupFn }) =>\n systemVersionProp$(\"transaction_version\", lookupFn).pipe(\n map((additionalSigned) => ({ additionalSigned, value: empty })),\n )\n","import { Observable, combineLatest, mergeMap, of, take } from \"rxjs\"\nimport { BlockInfo, ChainHead$ } from \"@polkadot-api/observable-client\"\nimport {\n ChargeAssetTxPayment,\n ChargeTransactionPayment,\n CheckMortality,\n} from \"./signed-extensions/user\"\nimport * as chainSignedExtensions from \"./signed-extensions/chain\"\nimport type { PolkadotSigner } from \"@polkadot-api/polkadot-signer\"\nimport { _void } from \"@polkadot-api/substrate-bindings\"\nimport { empty } from \"./signed-extensions/utils\"\n\ntype HintedSignedExtensions = Partial<{\n tip: bigint\n mortality: { mortal: false } | { mortal: true; period: number }\n asset: Uint8Array\n nonce: number\n}>\n\nexport const createTx: (\n chainHead: ChainHead$,\n signer: PolkadotSigner,\n callData: Uint8Array,\n atBlock: BlockInfo,\n hinted?: HintedSignedExtensions,\n) => Observable<Uint8Array> = (\n chainHead,\n signer,\n callData,\n atBlock,\n hinted = {},\n) =>\n chainHead.getRuntimeContext$(atBlock.hash).pipe(\n take(1),\n mergeMap((ctx) => {\n const signedExtensionsCtx = {\n lookupFn: ctx.lookup,\n chainHead: chainHead,\n callData: callData,\n at: atBlock.hash,\n from: signer.publicKey,\n }\n\n const mortality: Parameters<typeof CheckMortality>[0] = !hinted.mortality\n ? { period: 64, blockNumber: atBlock.number }\n : hinted.mortality.mortal\n ? { period: hinted.mortality.period, blockNumber: atBlock.number }\n : undefined // immortal\n\n return combineLatest(\n ctx.lookup.metadata.extrinsic.signedExtensions.map(\n ({ identifier, type, additionalSigned }) => {\n if (identifier === \"CheckMortality\")\n return CheckMortality(mortality, signedExtensionsCtx)\n\n if (identifier === \"ChargeTransactionPayment\")\n return ChargeTransactionPayment(hinted.tip ?? 0n)\n\n if (identifier === \"ChargeAssetTxPayment\")\n return ChargeAssetTxPayment(hinted.tip ?? 0n, hinted.asset)\n\n if (identifier === \"CheckNonce\" && \"nonce\" in hinted)\n return chainSignedExtensions.getNonce(hinted.nonce!)\n\n const fn = chainSignedExtensions[identifier as \"CheckGenesis\"]\n if (!fn) {\n if (\n ctx.dynamicBuilder.buildDefinition(type) === _void &&\n ctx.dynamicBuilder.buildDefinition(additionalSigned) === _void\n )\n return of({\n value: empty,\n additionalSigned: empty,\n })\n\n throw new Error(`Unsupported signed-extension: ${identifier}`)\n }\n return fn(signedExtensionsCtx)\n },\n ),\n ).pipe(\n mergeMap((signedExtensions) =>\n signer.signTx(\n callData,\n Object.fromEntries(\n ctx.lookup.metadata.extrinsic.signedExtensions.map(\n ({ identifier }, idx) => [\n identifier,\n { identifier, ...signedExtensions[idx] },\n ],\n ),\n ),\n ctx.metadataRaw,\n atBlock.number,\n ),\n ),\n )\n }),\n )\n","import {\n Binary,\n Blake2256,\n HexString,\n ResultPayload,\n} from \"@polkadot-api/substrate-bindings\"\nimport {\n EMPTY,\n Observable,\n concat,\n distinctUntilChanged,\n filter,\n lastValueFrom,\n map,\n mergeMap,\n of,\n take,\n} from \"rxjs\"\nimport {\n ChainHead$,\n PinnedBlocks,\n SystemEvent,\n} from \"@polkadot-api/observable-client\"\nimport { AnalyzedBlock } from \"@polkadot-api/observable-client\"\nimport { TxEvent, TxEventsPayload, TxFinalizedPayload } from \"./types\"\nimport { continueWith } from \"@/utils\"\nimport { fromHex, toHex } from \"@polkadot-api/utils\"\n\n// TODO: make it dynamic based on the tx-function of the client\nconst hashFromTx = (tx: HexString) => toHex(Blake2256(fromHex(tx)))\n\nconst computeState = (\n analized$: Observable<AnalyzedBlock>,\n blocks$: Observable<PinnedBlocks>,\n) =>\n new Observable<\n | {\n found: true\n hash: string\n number: number\n index: number\n events: any\n }\n | { found: false; validity: ResultPayload<any, any> | null }\n >((observer) => {\n const analyzedBlocks = new Map<string, AnalyzedBlock>()\n let pinnedBlocks: PinnedBlocks\n let latestState:\n | {\n found: true\n hash: string\n number: number\n index: number\n events: any\n }\n | { found: false; validity: ResultPayload<any, any> | null }\n\n const computeNextState = () => {\n let current: string = pinnedBlocks.best\n let analyzed: AnalyzedBlock | undefined = analyzedBlocks.get(current)\n let analyzedNumber = pinnedBlocks.blocks.get(current)!.number\n\n while (!analyzed) {\n const block = pinnedBlocks.blocks.get(current)\n if (!block) break\n analyzed = analyzedBlocks.get((current = block.parent))\n analyzedNumber--\n }\n\n if (!analyzed) return // this shouldn't happen, though\n\n const isFinalized =\n analyzedNumber <=\n pinnedBlocks.blocks.get(pinnedBlocks.finalized)!.number\n\n const found = analyzed.found.type\n if (found && latestState?.found && latestState.hash === analyzed.hash) {\n if (isFinalized) observer.complete()\n return\n }\n\n observer.next(\n (latestState = analyzed.found.type\n ? {\n found: found as true,\n hash: analyzed.hash,\n number: analyzedNumber,\n index: analyzed.found.index,\n events: analyzed.found.events,\n }\n : {\n found: found as false,\n validity: analyzed.found.validity,\n }),\n )\n\n if (isFinalized) {\n if (found) observer.complete()\n else if (analyzed.found.validity?.success === false)\n observer.error(new InvalidTxError(analyzed.found.validity.value))\n }\n }\n\n const subscription = blocks$\n .pipe(\n distinctUntilChanged(\n (a, b) => a.finalized === b.finalized && a.best === b.best,\n ),\n )\n .subscribe({\n next: (pinned: PinnedBlocks) => {\n pinnedBlocks = pinned\n if (analyzedBlocks.size === 0) return\n computeNextState()\n },\n error(e) {\n observer.error(e)\n },\n })\n\n subscription.add(\n analized$.subscribe({\n next: (block) => {\n analyzedBlocks.set(block.hash, block)\n computeNextState()\n },\n error(e) {\n observer.error(e)\n },\n }),\n )\n\n return subscription\n }).pipe(distinctUntilChanged((a, b) => a === b))\n\nconst getTxSuccessFromSystemEvents = (\n systemEvents: Array<SystemEvent>,\n txIdx: number,\n): Omit<TxEventsPayload, \"block\"> => {\n const events = systemEvents\n .filter((x) => x.phase.type === \"ApplyExtrinsic\" && x.phase.value === txIdx)\n .map((x) => x.event)\n\n const lastEvent = events[events.length - 1]\n if (\n lastEvent.type === \"System\" &&\n lastEvent.value.type === \"ExtrinsicFailed\"\n ) {\n return {\n ok: false,\n events,\n dispatchError: lastEvent.value.value.dispatch_error,\n }\n }\n\n return { ok: true, events }\n}\n\n/*\ntype TransactionValidityError = Enum<{\n Invalid: Enum<{\n Call: undefined\n Payment: undefined\n Future: undefined\n Stale: undefined\n BadProof: undefined\n AncientBirthBlock: undefined\n ExhaustsResources: undefined\n Custom: number\n BadMandatory: undefined\n MandatoryValidation: undefined\n BadSigner: undefined\n }>\n Unknown: Enum<{\n CannotLookup: undefined\n NoUnsignedValidator: undefined\n Custom: number\n }>\n}>\n*/\n\nexport class InvalidTxError extends Error {\n error: any // likely to be a `TransactionValidityError`\n constructor(e: any) {\n super(\n JSON.stringify(\n e,\n (_, value) => {\n if (typeof value === \"bigint\") return value.toString()\n return value instanceof Binary ? value.asHex() : value\n },\n 2,\n ),\n )\n this.name = \"InvalidTxError\"\n this.error = e\n }\n}\n\nexport const submit$ = (\n chainHead: ChainHead$,\n broadcastTx$: (tx: string) => Observable<never>,\n tx: HexString,\n at?: HexString,\n emitSign = false,\n): Observable<TxEvent> => {\n const txHash = hashFromTx(tx)\n const getTxEvent = <\n Type extends TxEvent[\"type\"],\n Rest extends Omit<TxEvent & { type: Type }, \"type\" | \"txHash\">,\n >(\n type: Type,\n rest: Rest,\n ): TxEvent & { type: Type } =>\n ({\n type,\n txHash,\n ...rest,\n }) as any\n\n const at$ = chainHead.pinnedBlocks$.pipe(\n take(1),\n map((blocks) => {\n const block = blocks.blocks.get(at!)\n return block && !block.unpinned ? block.hash : blocks.finalized\n }),\n )\n\n const validate$: Observable<never> = at$.pipe(\n mergeMap((at) =>\n chainHead.validateTx$(at, tx).pipe(\n filter((x) => !x.success),\n map((x) => {\n throw new InvalidTxError(x.value)\n }),\n ),\n ),\n )\n\n const track$ = new Observable<AnalyzedBlock>((observer) => {\n const subscription = chainHead.trackTx$(tx).subscribe(observer)\n subscription.add(\n broadcastTx$(tx).subscribe({\n error(e) {\n observer.error(e)\n },\n }),\n )\n return subscription\n })\n\n const bestBlockState$ = computeState(track$, chainHead.pinnedBlocks$).pipe(\n map((x) => {\n if (!x.found)\n return getTxEvent(\"txBestBlocksState\", {\n found: false,\n isValid: x.validity?.success !== false,\n })\n\n return getTxEvent(\"txBestBlocksState\", {\n found: true,\n block: {\n index: x.index,\n number: x.number,\n hash: x.hash,\n },\n ...getTxSuccessFromSystemEvents(x.events, x.index),\n })\n }),\n )\n\n return concat(\n emitSign ? of(getTxEvent(\"signed\", {})) : EMPTY,\n validate$,\n of(getTxEvent(\"broadcasted\", {})),\n bestBlockState$.pipe(\n continueWith(({ found, type, ...rest }) =>\n found ? of(getTxEvent(\"finalized\", rest as any)) : EMPTY,\n ),\n ),\n )\n}\n\nexport const submit = async (\n chainHead: ChainHead$,\n broadcastTx$: (tx: string) => Observable<never>,\n transaction: HexString,\n at?: HexString,\n): Promise<TxFinalizedPayload> =>\n lastValueFrom(submit$(chainHead, broadcastTx$, transaction, at)).then((x) => {\n if (x.type !== \"finalized\") throw null\n const result: TxFinalizedPayload = { ...x }\n delete (result as any).type\n return result\n })\n","import { BlockInfo, getObservableClient } from \"@polkadot-api/observable-client\"\nimport { PolkadotSigner } from \"@polkadot-api/polkadot-signer\"\nimport { getPolkadotSigner } from \"@polkadot-api/signer\"\nimport {\n AccountId,\n Binary,\n Enum,\n SS58String,\n Tuple,\n compact,\n u128,\n u32,\n u8,\n} from \"@polkadot-api/substrate-bindings\"\nimport { fromHex, mergeUint8, toHex } from \"@polkadot-api/utils\"\nimport {\n Observable,\n firstValueFrom,\n map,\n mergeMap,\n take,\n throwError,\n} from \"rxjs\"\nimport { PlainDescriptor } from \"@/descriptors\"\nimport {\n CompatibilityHelper,\n CompatibilityToken,\n getCompatibilityApi,\n} from \"../compatibility\"\nimport { createTx } from \"./create-tx\"\nimport { InvalidTxError, submit, submit$ } from \"./submit-fns\"\nimport {\n TxCall,\n TxEntry,\n TxObservable,\n TxOptions,\n TxPromise,\n TxSignFn,\n} from \"./types\"\nimport {\n isCompatible,\n mapLookupToTypedef,\n} from \"@polkadot-api/metadata-compatibility\"\n\nexport { submit, submit$, InvalidTxError }\n\nconst accountIdEnc = AccountId().enc\nconst queryInfoRawDec = Tuple(compact, compact, u8, u128).dec\nconst queryInfoDec = (input: string): bigint => queryInfoRawDec(input)[3]\nconst fakeSignature = new Uint8Array(64)\nconst getFakeSignature = () => fakeSignature\n\nexport const createTxEntry = <\n D,\n Arg extends {} | undefined,\n Pallet extends string,\n Name extends string,\n Asset extends PlainDescriptor<any>,\n>(\n pallet: Pallet,\n name: Name,\n chainHead: ReturnType<ReturnType<typeof getObservableClient>[\"chainHead$\"]>,\n broadcast: (tx: string) => Observable<never>,\n {\n isCompatible: isCompatibleHelper,\n getCompatibilityLevel,\n compatibleRuntime$,\n argsAreCompatible,\n getRuntimeTypedef,\n }: CompatibilityHelper,\n checkCompatibility: boolean,\n): TxEntry<D, Arg, Pallet, Name, Asset> => {\n const fn = (arg?: Arg): any => {\n const getCallDataWithContext = (\n runtime: CompatibilityToken,\n arg: any,\n txOptions: Partial<{ asset: any }> = {},\n ) => {\n const ctx = getCompatibilityApi(runtime).runtime()\n const { dynamicBuilder, assetId, lookup } = ctx\n let codecs\n try {\n codecs = dynamicBuilder.buildCall(pallet, name)\n } catch {\n throw new Error(`Runtime entry Tx(${pallet}.${name}) not found`)\n }\n if (checkCompatibility && !argsAreCompatible(runtime, ctx, arg))\n throw new Error(`Incompatible runtime entry Tx(${pallet}.${name})`)\n\n let returnOptions = txOptions\n if (txOptions.asset) {\n if (\n assetId == null ||\n !isCompatible(\n txOptions.asset,\n mapLookupToTypedef(lookup(assetId)),\n (id) => getRuntimeTypedef(ctx, id),\n )\n )\n throw new Error(`Incompatible runtime asset`)\n returnOptions = {\n ...txOptions,\n asset: dynamicBuilder.buildDefinition(assetId).enc(txOptions.asset),\n }\n }\n\n const { location, codec } = codecs\n return {\n callData: Binary.fromBytes(\n mergeUint8(new Uint8Array(location), codec.enc(arg)),\n ),\n options: returnOptions,\n }\n }\n\n const getCallData$ = (arg: any, options: Partial<{ asset: any }> = {}) =>\n compatibleRuntime$(chainHead, null).pipe(\n map(([runtime]) => getCallDataWithContext(runtime, arg, options)),\n )\n\n const getEncodedData: TxCall = (\n compatibilityToken?: CompatibilityToken,\n ): any => {\n if (!compatibilityToken)\n return firstValueFrom(getCallData$(arg).pipe(map((x) => x.callData)))\n\n return getCallDataWithContext(compatibilityToken, arg).callData\n }\n\n const sign$ = (\n from: PolkadotSigner,\n { ..._options }: Omit<TxOptions<{}>, \"at\">,\n atBlock: BlockInfo,\n ) =>\n getCallData$(arg, _options).pipe(\n mergeMap(({ callData, options }) =>\n createTx(chainHead, from, callData.asBytes(), atBlock, options),\n ),\n )\n\n const _sign = (\n from: PolkadotSigner,\n { at, ..._options }: TxOptions<{}> = {},\n ) => {\n return (\n !at || at === \"finalized\"\n ? chainHead.finalized$\n : at === \"best\"\n ? chainHead.best$\n : chainHead.bestBlocks$.pipe(\n map((x) => x.find((b) => b.hash === at)),\n )\n ).pipe(\n take(1),\n mergeMap((atBlock) =>\n atBlock\n ? sign$(from, _options, atBlock).pipe(\n map((signed) => ({\n tx: toHex(signed),\n block: atBlock,\n })),\n )\n : throwError(() => new Error(`Uknown block ${at}`)),\n ),\n )\n }\n\n const sign: TxSignFn<Asset> = (from, options) =>\n firstValueFrom(_sign(from, options)).then((x) => x.tx)\n\n const signAndSubmit: TxPromise<Asset> = (from, _options) =>\n firstValueFrom(_sign(from, _options)).then(({ tx, block }) =>\n submit(chainHead, broadcast, tx, block.hash),\n )\n\n const signSubmitAndWatch: TxObservable<Asset> = (from, _options) =>\n _sign(from, _options).pipe(\n mergeMap(({ tx, block }) =>\n submit$(chainHead, broadcast, tx, block.hash, true),\n ),\n )\n\n const getEstimatedFees = async (\n from: Uint8Array | SS58String,\n _options?: any,\n ) => {\n const fakeSigner = getPolkadotSigner(\n from instanceof Uint8Array ? from : accountIdEnc(from),\n \"Sr25519\",\n getFakeSignature,\n )\n const encoded = fromHex(await sign(fakeSigner, _options))\n const args = toHex(mergeUint8(encoded, u32.enc(encoded.length)))\n\n return firstValueFrom(\n chainHead\n .call$(null, \"TransactionPaymentApi_query_info\", args)\n .pipe(map(queryInfoDec)),\n )\n }\n\n return {\n getEstimatedFees,\n decodedCall: {\n type: pallet,\n value: Enum(name, arg as any),\n },\n getEncodedData,\n sign,\n signSubmitAndWatch,\n signAndSubmit,\n }\n }\n\n return Object.assign(fn, {\n getCompatibilityLevel,\n isCompatible: isCompatibleHelper,\n })\n}\n","import { JsonRpcProvider } from \"@polkadot-api/json-rpc-provider\"\nimport {\n enumValueEntryPointNode,\n runtimeCallEntryPoint,\n singleValueEntryPoint,\n storageEntryPoint,\n voidEntryPointNode,\n} from \"@polkadot-api/metadata-compatibility\"\nimport {\n RuntimeContext,\n getObservableClient,\n} from \"@polkadot-api/observable-client\"\nimport {\n SubstrateClient,\n createClient as createRawClient,\n} from \"@polkadot-api/substrate-client\"\nimport { Observable, firstValueFrom } from \"rxjs\"\nimport {\n CompatibilityToken,\n OpType,\n compatibilityHelper,\n createCompatibilityToken,\n getCompatibilityApi,\n} from \"./compatibility\"\nimport { createConstantEntry } from \"./constants\"\nimport { ChainDefinition } from \"./descriptors\"\nimport { createEventEntry } from \"./event\"\nimport { createRuntimeCallEntry } from \"./runtime-call\"\nimport { createStorageEntry } from \"./storage\"\nimport { createTxEntry, submit, submit$ } from \"./tx\"\nimport { PolkadotClient, TypedApi } from \"./types\"\nimport { Binary } from \"@polkadot-api/substrate-bindings\"\n\nconst createTypedApi = <D extends ChainDefinition>(\n compatibilityToken: Promise<CompatibilityToken>,\n chainHead: ReturnType<ReturnType<typeof getObservableClient>[\"chainHead$\"]>,\n broadcast$: (tx: string) => Observable<never>,\n): TypedApi<D> => {\n const target = {}\n const createProxy = (propCall: (prop: string) => unknown) =>\n new Proxy(target, {\n get(_, prop) {\n return propCall(prop as string)\n },\n })\n const createProxyPath = <T>(pathCall: (a: string, b: string) => T) => {\n const cache: Record<string, Record<string, T>> = {}\n return createProxy((a) => {\n if (!cache[a]) cache[a] = {}\n return createProxy((b) => {\n if (!cache[a][b]) cache[a][b] = pathCall(a, b)\n return cache[a][b]\n })\n }) as Record<string, Record<string, T>>\n }\n\n const getPallet = (ctx: RuntimeContext, name: string) =>\n ctx.lookup.metadata.pallets.find((p) => p.name === name)!\n const query = createProxyPath((pallet, name) =>\n createStorageEntry(\n pallet,\n name,\n chainHead,\n compatibilityHelper(\n compatibilityToken,\n (r) => r.getPalletEntryPoint(OpType.Storage, pallet, name),\n // TODO this is way sub-optimal. Needs some rethought - maybe a builder for entry points?.\n (ctx) =>\n storageEntryPoint(\n getPallet(ctx, pallet).storage!.items.find((s) => s.name === name)!,\n ),\n ),\n ),\n )\n\n const getEnumEntry = (\n ctx: RuntimeContext,\n side: \"args\" | \"values\",\n id: number,\n name: string,\n ) => {\n const entry = ctx.lookup(id)\n if (entry.type !== \"enum\") throw new Error(\"Expected enum\")\n\n const node = enumValueEntryPointNode(entry.value[name])\n return {\n args: side === \"args\" ? node : voidEntryPointNode,\n values: side === \"args\" ? voidEntryPointNode : node,\n }\n }\n const tx = createProxyPath((pallet, name) =>\n createTxEntry(\n pallet,\n name,\n chainHead,\n broadcast$,\n compatibilityHelper(\n compatibilityToken,\n (r) => r.getPalletEntryPoint(OpType.Tx, pallet, name),\n (ctx) => getEnumEntry(ctx, \"args\", getPallet(ctx, pallet).calls!, name),\n ),\n true,\n ),\n )\n\n const event = createProxyPath((pallet, name) =>\n createEventEntry(\n pallet,\n name,\n chainHead,\n compatibilityHelper(\n compatibilityToken,\n (r) => r.getPalletEntryPoint(OpType.Event, pallet, name),\n (ctx) =>\n getEnumEntry(ctx, \"values\", getPallet(ctx, pallet).events!, name),\n ),\n ),\n )\n\n const constants = createProxyPath((pallet, name) =>\n createConstantEntry(\n pallet,\n name,\n compatibilityHelper(\n compatibilityToken,\n (r) => r.getPalletEntryPoint(OpType.Const, pallet, name),\n (ctx) =>\n singleValueEntryPoint(\n getPallet(ctx, pallet).constants.find((c) => c.name === name)!.type,\n ),\n ),\n ),\n )\n\n const apis = createProxyPath((api, method) =>\n createRuntimeCallEntry(\n api,\n method,\n chainHead,\n compatibilityHelper(\n compatibilityToken,\n (r) => r.getApiEntryPoint(api, method),\n (ctx) =>\n runtimeCallEntryPoint(\n ctx.lookup.metadata.apis\n .find((a) => a.name === api)!\n .methods.find((m) => m.name === method)!,\n ),\n ),\n ),\n )\n\n const _callDataTx = (callData: Binary, token: CompatibilityToken) => {\n const { lookup, dynamicBuilder } = getCompatibilityApi(token).runtime()\n try {\n const decoded = dynamicBuilder\n .buildDefinition(lookup.call!)\n .dec(callData.asBytes())\n const pallet = decoded.type\n const call = decoded.value.type\n const args = decoded.value.value\n\n return createTxEntry(\n pallet,\n call,\n chainHead,\n broadcast$,\n compatibilityHelper(\n compatibilityToken,\n (r) => r.getPalletEntryPoint(OpType.Tx, pallet, call),\n (ctx) =>\n getEnumEntry(ctx, \"args\", getPallet(ctx, pallet).calls!, call),\n ),\n false,\n )(args)\n } catch {\n throw new Error(\"createTx: invalid call data\")\n }\n }\n\n return {\n query,\n txFromCallData: (callData: Binary, token?: CompatibilityToken) =>\n token\n ? _callDataTx(callData, token)\n : compatibilityToken.then((t) => _callDataTx(callData, t)),\n tx,\n event,\n apis,\n constants,\n compatibilityToken,\n } as any\n}\n\n/**\n * This is the top-level export for `polkadot-api`.\n *\n * @param provider A `JsonRpcProvider` compliant with the [JSON-RPC\n * spec](https://paritytech.github.io/json-rpc-interface-spec/),\n * which must support the `chainHead`, `transaction` and\n * `chainSpec` groups.\n * @example\n *\n * import { createClient } from \"polkadot-api\"\n * import { getSmProvider } from \"polkadot-api/sm-provider\"\n * import { chainSpec } from \"polkadot-api/chains/polkadot\"\n * import { start } from \"polkadot-api/smoldot\"\n *\n * const smoldot = start()\n * const chain = await smoldot.addChain({ chainSpec })\n *\n * // Connect to the polkadot relay chain.\n * const client = createClient(getSmProvider(chain))\n *\n */\nexport function createClient(provider: JsonRpcProvider): PolkadotClient {\n const rawClient: SubstrateClient = createRawClient(provider)\n const client = getObservableClient(rawClient)\n const chainHead = client.chainHead$()\n\n const { getChainSpecData } = rawClient\n\n const _request: <Reply = any, Params extends Array<any> = any[]>(\n method: string,\n params: Params,\n ) => Promise<Reply> = rawClient.request\n\n const compatibilityToken = new WeakMap<\n ChainDefinition,\n Promise<CompatibilityToken<any>>\n >()\n const getChainToken = (chainDefinition: ChainDefinition) => {\n const result =\n compatibilityToken.get(chainDefinition) ||\n createCompatibilityToken(chainDefinition, chainHead)\n compatibilityToken.set(chainDefinition, result)\n return result\n }\n\n const { broadcastTx$ } = client\n return {\n getChainSpecData,\n\n finalizedBlock$: chainHead.finalized$,\n getFinalizedBlock: () => firstValueFrom(chainHead.finalized$),\n\n bestBlocks$: chainHead.bestBlocks$,\n getBestBlocks: () => firstValueFrom(chainHead.bestBlocks$),\n\n watchBlockBody: chainHead.body$,\n getBlockBody: (hash: string) => firstValueFrom(chainHead.body$(hash)),\n\n getBlockHeader: (hash?: string) =>\n firstValueFrom(chainHead.header$(hash ?? null)),\n\n submit: (...args) => submit(chainHead, broadcastTx$, ...args),\n submitAndWatch: (...args) => submit$(chainHead, broadcastTx$, ...args),\n\n getTypedApi: <D extends ChainDefinition>(chainDefinition: D) =>\n createTypedApi(getChainToken(chainDefinition), chainHead, broadcastTx$),\n\n destroy: () => {\n chainHead.unfollow()\n client.destroy()\n },\n\n _request,\n }\n}\n"],"names":["OpType","Vector","EntryPointCodec","TypedefCodec","Tuple","filter","firstValueFrom","mapLookupToTypedef","descriptors","entryPointsAreCompatible","combineLatest","map","CompatibilityLevel","valueIsCompatibleWithDest","share","ReplaySubject","AbortError","noop","Observable","defer","Subscription","value","mergeMap","toHex","distinctUntilChanged","debounceTime","NotBestBlockError","Storage","u32","Twox64Concat","fromHex","getDynamicBuilder","of","compactBn","enhanceEncoder","Bytes","u16","Struct","compact","Option","u8","u64","take","chainSignedExtensions.getNonce","_void","Blake2256","Binary","at","concat","EMPTY","lastValueFrom","AccountId","u128","arg","isCompatible","mergeUint8","throwError","getPolkadotSigner","Enum","storageEntryPoint","enumValueEntryPointNode","voidEntryPointNode","singleValueEntryPoint","runtimeCallEntryPoint","createRawClient","getObservableClient"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "polkadot-api",
3
- "version": "1.2.0",
3
+ "version": "1.2.1",
4
4
  "author": "Josep M Sobrepere (https://github.com/josepot)",
5
5
  "repository": {
6
6
  "type": "git",
@@ -431,18 +431,18 @@
431
431
  "rxjs": ">=7.8.0"
432
432
  },
433
433
  "dependencies": {
434
+ "@polkadot-api/cli": "0.8.2",
434
435
  "@polkadot-api/json-rpc-provider": "0.0.3",
435
436
  "@polkadot-api/logs-provider": "0.0.5",
436
- "@polkadot-api/cli": "0.8.1",
437
437
  "@polkadot-api/polkadot-sdk-compat": "2.1.0",
438
- "@polkadot-api/metadata-compatibility": "0.1.4",
439
- "@polkadot-api/observable-client": "0.5.3",
440
438
  "@polkadot-api/metadata-builders": "0.7.0",
439
+ "@polkadot-api/observable-client": "0.5.3",
440
+ "@polkadot-api/metadata-compatibility": "0.1.5",
441
441
  "@polkadot-api/pjs-signer": "0.4.2",
442
- "@polkadot-api/polkadot-signer": "0.1.4",
443
- "@polkadot-api/sm-provider": "0.1.1",
444
442
  "@polkadot-api/signer": "0.1.4",
445
443
  "@polkadot-api/substrate-bindings": "0.7.0",
444
+ "@polkadot-api/polkadot-signer": "0.1.4",
445
+ "@polkadot-api/sm-provider": "0.1.1",
446
446
  "@polkadot-api/substrate-client": "0.2.1",
447
447
  "@polkadot-api/ws-provider": "0.2.0",
448
448
  "@polkadot-api/utils": "0.1.1",
@@ -451,7 +451,7 @@
451
451
  },
452
452
  "devDependencies": {
453
453
  "rxjs": "^7.8.1",
454
- "@polkadot-api/codegen": "0.10.0"
454
+ "@polkadot-api/codegen": "0.11.0"
455
455
  },
456
456
  "scripts": {
457
457
  "build-core": "tsc --noEmit && rollup -c",