polkadot-api 1.15.0 → 1.15.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/bin/cli.mjs +1 -1
- package/dist/esm/runtime-call.mjs +2 -1
- package/dist/esm/runtime-call.mjs.map +1 -1
- package/dist/esm/storage.mjs +33 -28
- package/dist/esm/storage.mjs.map +1 -1
- package/dist/esm/viewFns.mjs +2 -1
- package/dist/esm/viewFns.mjs.map +1 -1
- package/dist/index.js +37 -30
- package/dist/index.js.map +1 -1
- package/dist/umd/index.min.js +2 -2
- package/dist/umd/ink.min.js +1 -1
- package/dist/umd/signer.min.js +1 -1
- package/package.json +12 -12
package/bin/cli.mjs
CHANGED
|
@@ -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\"\nimport { PullOptions } from \"./types\"\n\ntype WithCallOptions<Args extends Array<any>> = Args[\"length\"] extends 0\n ? [options?: PullOptions]\n : [...args: Args, options?: PullOptions]\n\nexport type RuntimeCall<Unsafe, D, Args extends Array<any>, Payload> = {\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} & (Unsafe extends true ? {} : CompatibilityFunctions<D>)\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, 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 }: PullOptions = 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":";;;;;;;;AAsBO,MAAM,sBAAA,GAAyB,CACpC,GAAA,EACA,MAAA,EACA,SAAA,EACA;AAAA,EACE,YAAA;AAAA,EACA,qBAAA;AAAA,EACA,kBAAA;AAAA,EACA,iBAAA;AAAA,EACA;AACF,CAAA,KACoC;AACpC,EAAA,MAAM,QAAA,GAAW,CAAA,EAAG,GAAG,CAAA,CAAA,EAAI,MAAM,CAAA,CAAA;AACjC,EAAA,MAAM,qBAAqB,MACzB,IAAI,KAAA,CAAM,CAAA,uCAAA,EAA0C,QAAQ,CAAA,CAAA,CAAG,CAAA;AAEjE,EAAA,MAAM,EAAA,GAAK,IAAI,IAAA,KAAqB;AAClC,IAAA,MAAM,OAAA,GAAU,IAAA,CAAK,IAAA,CAAK,MAAA,GAAS,CAAC,CAAA;AACpC,IAAA,MAAM,iBAAA,GAAoB,cAAc,OAAO,CAAA;AAC/C,IAAA,MAAM,EAAE,MAAA,EAAQ,EAAA,EAAI,KAAI,GAAiB,iBAAA,GAAoB,UAAU,EAAC;AACxE,IAAA,MAAM,KAAK,GAAA,IAAO,IAAA;AAElB,IAAA,MAAM,OAAA,GAAU,kBAAA,CAAmB,SAAA,EAAW,EAAE,CAAA,CAAE,IAAA;AAAA,MAChD,QAAA,CAAS,CAAC,CAAC,OAAA,EAAS,GAAG,CAAA,KAAM;AAC3B,QAAA,IAAI,MAAA;AACJ,QAAA,IAAI;AACF,UAAA,MAAA,GAAS,GAAA,CAAI,cAAA,CAAe,gBAAA,CAAiB,GAAA,EAAK,MAAM,CAAA;AAAA,QAC1D,CAAA,CAAA,MAAQ;AACN,UAAA,MAAM,IAAI,KAAA,CAAM,CAAA,0BAAA,EAA6B,QAAQ,CAAA,WAAA,CAAa,CAAA;AAAA,QACpE;AACA,QAAA,IAAI,CAAC,iBAAA,CAAkB,OAAA,EAAS,KAAK,IAAI,CAAA,QAAS,kBAAA,EAAmB;AACrE,QAAA,OAAO,SAAA,CAAU,KAAA,CAAM,EAAA,EAAI,QAAA,EAAU,KAAA,CAAM,MAAA,CAAO,IAAA,CAAK,GAAA,CAAI,IAAI,CAAC,CAAC,CAAA,CAAE,IAAA;AAAA,UACjE,GAAA,CAAI,MAAA,CAAO,KAAA,CAAM,GAAG,CAAA;AAAA,UACpB,GAAA,CAAI,CAAC,KAAA,KAAU;AACb,YAAA,IAAI,CAAC,mBAAA,CAAoB,OAAA,EAAS,GAAA,EAAK,KAAK,CAAA;AAC1C,cAAA,MAAM,kBAAA,EAAmB;AAC3B,YAAA,OAAO,KAAA;AAAA,UACT,CAAC;AAAA,SACH;AAAA,MACF,CAAC;AAAA,
|
|
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\"\nimport { PullOptions } from \"./types\"\n\ntype WithCallOptions<Args extends Array<any>> = Args[\"length\"] extends 0\n ? [options?: PullOptions]\n : [...args: Args, options?: PullOptions]\n\nexport type RuntimeCall<Unsafe, D, Args extends Array<any>, Payload> = {\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} & (Unsafe extends true ? {} : CompatibilityFunctions<D>)\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, 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 }: PullOptions = 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 chainHead.withHodl(at),\n )\n\n return firstValueFromWithSignal(result$, signal)\n }\n\n return Object.assign(fn, { getCompatibilityLevel, isCompatible })\n}\n"],"names":[],"mappings":";;;;;;;;AAsBO,MAAM,sBAAA,GAAyB,CACpC,GAAA,EACA,MAAA,EACA,SAAA,EACA;AAAA,EACE,YAAA;AAAA,EACA,qBAAA;AAAA,EACA,kBAAA;AAAA,EACA,iBAAA;AAAA,EACA;AACF,CAAA,KACoC;AACpC,EAAA,MAAM,QAAA,GAAW,CAAA,EAAG,GAAG,CAAA,CAAA,EAAI,MAAM,CAAA,CAAA;AACjC,EAAA,MAAM,qBAAqB,MACzB,IAAI,KAAA,CAAM,CAAA,uCAAA,EAA0C,QAAQ,CAAA,CAAA,CAAG,CAAA;AAEjE,EAAA,MAAM,EAAA,GAAK,IAAI,IAAA,KAAqB;AAClC,IAAA,MAAM,OAAA,GAAU,IAAA,CAAK,IAAA,CAAK,MAAA,GAAS,CAAC,CAAA;AACpC,IAAA,MAAM,iBAAA,GAAoB,cAAc,OAAO,CAAA;AAC/C,IAAA,MAAM,EAAE,MAAA,EAAQ,EAAA,EAAI,KAAI,GAAiB,iBAAA,GAAoB,UAAU,EAAC;AACxE,IAAA,MAAM,KAAK,GAAA,IAAO,IAAA;AAElB,IAAA,MAAM,OAAA,GAAU,kBAAA,CAAmB,SAAA,EAAW,EAAE,CAAA,CAAE,IAAA;AAAA,MAChD,QAAA,CAAS,CAAC,CAAC,OAAA,EAAS,GAAG,CAAA,KAAM;AAC3B,QAAA,IAAI,MAAA;AACJ,QAAA,IAAI;AACF,UAAA,MAAA,GAAS,GAAA,CAAI,cAAA,CAAe,gBAAA,CAAiB,GAAA,EAAK,MAAM,CAAA;AAAA,QAC1D,CAAA,CAAA,MAAQ;AACN,UAAA,MAAM,IAAI,KAAA,CAAM,CAAA,0BAAA,EAA6B,QAAQ,CAAA,WAAA,CAAa,CAAA;AAAA,QACpE;AACA,QAAA,IAAI,CAAC,iBAAA,CAAkB,OAAA,EAAS,KAAK,IAAI,CAAA,QAAS,kBAAA,EAAmB;AACrE,QAAA,OAAO,SAAA,CAAU,KAAA,CAAM,EAAA,EAAI,QAAA,EAAU,KAAA,CAAM,MAAA,CAAO,IAAA,CAAK,GAAA,CAAI,IAAI,CAAC,CAAC,CAAA,CAAE,IAAA;AAAA,UACjE,GAAA,CAAI,MAAA,CAAO,KAAA,CAAM,GAAG,CAAA;AAAA,UACpB,GAAA,CAAI,CAAC,KAAA,KAAU;AACb,YAAA,IAAI,CAAC,mBAAA,CAAoB,OAAA,EAAS,GAAA,EAAK,KAAK,CAAA;AAC1C,cAAA,MAAM,kBAAA,EAAmB;AAC3B,YAAA,OAAO,KAAA;AAAA,UACT,CAAC;AAAA,SACH;AAAA,MACF,CAAC,CAAA;AAAA,MACD,SAAA,CAAU,SAAS,EAAE;AAAA,KACvB;AAEA,IAAA,OAAO,wBAAA,CAAyB,SAAS,MAAM,CAAA;AAAA,EACjD,CAAA;AAEA,EAAA,OAAO,OAAO,MAAA,CAAO,EAAA,EAAI,EAAE,qBAAA,EAAuB,cAAc,CAAA;AAClE;;;;"}
|
package/dist/esm/storage.mjs
CHANGED
|
@@ -81,7 +81,8 @@ const createStorageEntry = (pallet, name, chainHead, getWatchEntries, {
|
|
|
81
81
|
return { raw: data, mapped };
|
|
82
82
|
}
|
|
83
83
|
)
|
|
84
|
-
)
|
|
84
|
+
),
|
|
85
|
+
chainHead.withHodl(at)
|
|
85
86
|
);
|
|
86
87
|
if (isSystemNumber)
|
|
87
88
|
return chainHead.pinnedBlocks$.pipe(
|
|
@@ -119,33 +120,37 @@ const createStorageEntry = (pallet, name, chainHead, getWatchEntries, {
|
|
|
119
120
|
const isLastArgOptional = isOptionalArg(lastArg);
|
|
120
121
|
const { signal, at: _at } = isLastArgOptional ? lastArg : {};
|
|
121
122
|
const at = _at ?? null;
|
|
122
|
-
const
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
123
|
+
const result$ = from(descriptorsPromise).pipe(
|
|
124
|
+
mergeMap(
|
|
125
|
+
(descriptors) => chainHead.storage$(
|
|
126
|
+
at,
|
|
127
|
+
"descendantsValues",
|
|
128
|
+
(ctx) => {
|
|
129
|
+
const codecs = getCodec(ctx);
|
|
130
|
+
if (minCompatLevel(getCompatibilityLevels(descriptors, ctx)) === CompatibilityLevel.Incompatible)
|
|
131
|
+
throw incompatibleError();
|
|
132
|
+
if (args.length > codecs.len) throw invalidArgs(args);
|
|
133
|
+
const actualArgs = args.length > 0 && isLastArgOptional ? args.slice(0, -1) : args;
|
|
134
|
+
if (args.length === codecs.len && actualArgs === args)
|
|
135
|
+
throw invalidArgs(args);
|
|
136
|
+
return codecs.keys.enc(...actualArgs);
|
|
137
|
+
},
|
|
138
|
+
null,
|
|
139
|
+
(values, ctx) => {
|
|
140
|
+
const codecs = getCodec(ctx);
|
|
141
|
+
const decodedValues = values.map(({ key, value }) => ({
|
|
142
|
+
keyArgs: codecs.keys.dec(key),
|
|
143
|
+
value: codecs.value.dec(value)
|
|
144
|
+
}));
|
|
145
|
+
if (decodedValues.some(
|
|
146
|
+
({ value }) => !valuesAreCompatible(descriptors, ctx, value)
|
|
147
|
+
))
|
|
148
|
+
throw incompatibleError();
|
|
149
|
+
return decodedValues;
|
|
150
|
+
}
|
|
151
|
+
)
|
|
152
|
+
),
|
|
153
|
+
chainHead.withHodl(at)
|
|
149
154
|
);
|
|
150
155
|
return firstValueFromWithSignal(result$, signal);
|
|
151
156
|
};
|
package/dist/esm/storage.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"storage.mjs","sources":["../../src/storage.ts"],"sourcesContent":["import {\n firstValueFromWithSignal,\n isOptionalArg,\n lossLessExhaustMap,\n} from \"@/utils\"\nimport { CompatibilityLevel } from \"@polkadot-api/metadata-compatibility\"\nimport {\n BlockInfo,\n BlockNotPinnedError,\n ChainHead$,\n RuntimeContext,\n} from \"@polkadot-api/observable-client\"\nimport { FixedSizeBinary, HexString } from \"@polkadot-api/substrate-bindings\"\nimport { StorageItemInput, StorageResult } from \"@polkadot-api/substrate-client\"\nimport {\n Observable,\n OperatorFunction,\n catchError,\n combineLatestWith,\n distinctUntilChanged,\n filter,\n from,\n identity,\n map,\n mergeMap,\n pipe,\n shareReplay,\n take,\n} from \"rxjs\"\nimport {\n CompatibilityFunctions,\n CompatibilityHelper,\n CompatibilityToken,\n getCompatibilityApi,\n minCompatLevel,\n RuntimeToken,\n} from \"./compatibility\"\nimport { createWatchEntries } from \"./watch-entries\"\nimport { PullOptions } from \"./types\"\n\ntype WithCallOptions<Args extends Array<any>> = [\n ...args: Args,\n options?: PullOptions,\n]\n\ntype WithWatchOptions<Args extends Array<any>> = [\n ...args: Args,\n options?: { at: \"best\" },\n]\n\ntype PossibleParents<A extends Array<any>> = A extends [...infer Left, any]\n ? Left | PossibleParents<Left>\n : ArrayPossibleParents<A>\n\ntype AllPermutations<A extends Array<any>> = PossibleParents<A> | 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 GetKey<Args extends Array<any>, Unsafe> = Unsafe extends true\n ? {\n /**\n * Get the storage-key for this storage entry.\n *\n * @param args All keys needed for that storage entry.\n * @returns Promise that will resolve the hexadecimal value of the\n * storage key.\n */\n (...args: AllPermutations<Args>): Promise<HexString>\n /**\n * Get the storage-key for this storage entry.\n *\n * @param ...args All keys needed for that storage entry.\n * @param runtimeToken Token from got with `await\n * typedApi.runtimeToken`\n * @returns Synchronously returns the hexadecimal value of the\n * storage key.\n */\n (\n ...args: [...AllPermutations<Args>, runtimeToken: RuntimeToken]\n ): HexString\n }\n : {\n /**\n * Get the storage-key for this storage entry.\n *\n * @param args All keys needed for that storage entry.\n * @returns Promise that will resolve the hexadecimal value of the\n * storage key.\n */\n (...args: AllPermutations<Args>): Promise<HexString>\n /**\n * Get the storage-key for this storage entry.\n *\n * @param ...args All keys needed for that storage entry.\n * @param compatibilityToken Token from got with `await\n * typedApi.compatibilityToken`\n * @returns Synchronously returns the hexadecimal value of the\n * storage key.\n */\n (\n ...args: [\n ...AllPermutations<Args>,\n compatibilityToken: CompatibilityToken,\n ]\n ): HexString\n }\n\ntype StorageEntryWithoutKeys<Unsafe, 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?: PullOptions) => 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 getKey: GetKey<[], Unsafe>\n} & (Unsafe extends true ? {} : CompatibilityFunctions<D>)\n\nexport type StorageEntryWithKeys<\n Unsafe,\n D,\n Args extends Array<any>,\n Payload,\n ArgsOut extends Array<any>,\n> = {\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?: PullOptions,\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: ArgsOut; value: NonNullable<Payload> }>>\n /**\n * Watch changes (Observable-based) for the storage entries with a subset of\n * `Args`.\n *\n * @param args Subset of keys needed for the storage entry.\n * At the end, optionally set whether to watch against the\n * `best` block.\n * By default watches changes against the finalized block.\n * When watching changes against the \"best\" block, this API\n * gratiously handles the re-orgs and provides the deltas\n * based on the latest emission.\n * The observed value contains the following properties:\n * - `block`: the block in where the `deltas` took place -\n * `deltas`: `null` indicates that nothing has changed from\n * the latest emission.\n * If the value is not `null` then the `deleted` and `upsrted`\n * properties indicate the entries that have changed.\n * - `entries`: it's an immutable data-structure with the\n * latest entries.\n * @example\n *\n * typedApi.query.Staking.Nominators.watchEntries()\n * typedApi.query.Staking.Nominators.watchEntries({ at: \"best\" })\n *\n */\n watchEntries: (\n ...args: WithWatchOptions<PossibleParents<Args>>\n ) => Observable<{\n block: BlockInfo\n deltas: null | {\n deleted: Array<{ args: ArgsOut; value: NonNullable<Payload> }>\n upserted: Array<{ args: ArgsOut; value: NonNullable<Payload> }>\n }\n entries: Array<{ args: ArgsOut; value: NonNullable<Payload> }>\n }>\n\n getKey: GetKey<Args, Unsafe>\n} & (Unsafe extends true ? {} : CompatibilityFunctions<D>)\n\nexport type StorageEntry<\n Unsafe,\n D,\n Args extends Array<any>,\n ArgsOut extends Array<any>,\n Payload,\n> = Args extends []\n ? StorageEntryWithoutKeys<Unsafe, D, Payload>\n : StorageEntryWithKeys<Unsafe, D, Args, Payload, ArgsOut>\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\nconst toMapped = map(<T>(x: { mapped: T }) => x.mapped)\nexport const createStorageEntry = (\n pallet: string,\n name: string,\n chainHead: ChainHead$,\n getWatchEntries: ReturnType<typeof createWatchEntries>,\n {\n isCompatible,\n getCompatibilityLevel,\n getCompatibilityLevels,\n descriptors: descriptorsPromise,\n argsAreCompatible,\n valuesAreCompatible,\n }: CompatibilityHelper,\n): StorageEntry<any, any, any, any, any> => {\n const isSystemNumber = pallet === \"System\" && name === \"Number\"\n const isBlockHash = pallet === \"System\" && name === \"BlockHash\"\n const sysNumberMapper$ = chainHead.runtime$.pipe(\n filter(Boolean),\n take(1),\n map(({ dynamicBuilder }) =>\n typeof dynamicBuilder\n .buildStorage(\"System\", \"Number\")\n .value.dec(new Uint8Array(32)) === \"bigint\"\n ? BigInt\n : identity,\n ),\n shareReplay(),\n )\n const bigIntOrNumber: OperatorFunction<number, number | bigint> = pipe(\n combineLatestWith(sysNumberMapper$),\n map(([input, mapper]) => mapper(input)),\n )\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 (e: any) {\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 isBest = target === \"best\"\n const actualArgs =\n isBest || target === \"finalized\" ? args.slice(0, -1) : args\n\n return chainHead[isBest ? \"best$\" : \"finalized$\"].pipe(\n lossLessExhaustMap(() =>\n getRawValue$(...actualArgs, isBest ? { at: \"best\" } : {}),\n ),\n distinctUntilChanged((a, b) => a.raw === b.raw),\n toMapped,\n )\n }\n\n const getRawValue$ = (\n ...args: Array<any>\n ): Observable<{ raw: string | null; mapped: any }> => {\n const lastArg = args[args.length - 1]\n const isLastArgOptional = isOptionalArg(lastArg)\n const { at: _at }: PullOptions = isLastArgOptional ? lastArg : {}\n const at = _at ?? null\n\n const result$ = from(descriptorsPromise).pipe(\n mergeMap((descriptors) =>\n 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)\n throw invalidArgs(args)\n if (!argsAreCompatible(descriptors, ctx, actualArgs))\n throw incompatibleError()\n return codecs.keys.enc(...actualArgs)\n },\n null,\n (data, ctx) => {\n const codecs = getCodec(ctx)\n const mapped =\n data === null ? codecs.fallback : codecs.value.dec(data)\n if (!valuesAreCompatible(descriptors, ctx, mapped))\n throw incompatibleError()\n return { raw: data, mapped }\n },\n ),\n ),\n )\n\n if (isSystemNumber)\n return chainHead.pinnedBlocks$.pipe(\n map((blocks) => {\n const hash =\n at === \"finalized\" || !at\n ? blocks.finalized\n : at === \"best\"\n ? blocks.best\n : at\n const block = blocks.blocks.get(hash)\n if (!block) {\n throw new BlockNotPinnedError(hash, \"System.Number\")\n }\n return block.number\n }),\n distinctUntilChanged(),\n bigIntOrNumber,\n map((mapped) => ({ raw: mapped.toString(), mapped })),\n catchError((e) => {\n if (e instanceof BlockNotPinnedError) return result$\n throw e\n }),\n )\n\n return isBlockHash && Number(args[0]) === 0\n ? chainHead.genesis$.pipe(\n map((raw) => ({ raw, mapped: FixedSizeBinary.fromHex(raw) })),\n )\n : result$\n }\n\n const getValue = async (...args: Array<any>) => {\n const lastArg = args[args.length - 1]\n const isLastArgOptional = isOptionalArg(lastArg)\n const { signal }: PullOptions = isLastArgOptional ? lastArg : {}\n\n return firstValueFromWithSignal(\n getRawValue$(...args).pipe(toMapped),\n signal,\n )\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 }: PullOptions = isLastArgOptional ? lastArg : {}\n const at = _at ?? null\n\n const descriptors = await descriptorsPromise\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.keys.enc(...actualArgs)\n },\n null,\n (values, ctx) => {\n const codecs = getCodec(ctx)\n const decodedValues = values.map(({ key, value }) => ({\n keyArgs: codecs.keys.dec(key),\n value: codecs.value.dec(value),\n }))\n if (\n decodedValues.some(\n ({ value }) => !valuesAreCompatible(descriptors, ctx, value),\n )\n )\n throw incompatibleError()\n return decodedValues\n },\n )\n return firstValueFromWithSignal(result$, signal)\n }\n\n const getValues = (keyArgs: Array<Array<any>>, options?: PullOptions) =>\n Promise.all(\n keyArgs.map((args) => getValue(...(options ? [...args, options] : args))),\n )\n\n const watchEntries: any = (...args: Array<any>) => {\n const lastArg = args.at(-1)\n const isLastArgOptional = isOptionalArg(lastArg)\n\n return getWatchEntries(\n pallet,\n name,\n isLastArgOptional ? args.slice(0, -1) : args,\n isLastArgOptional && lastArg.at === \"best\",\n )\n }\n\n const getKey = (...args: Array<any>): Promise<string> | string => {\n const token = args.at(-1)\n if (token instanceof CompatibilityToken || token instanceof RuntimeToken) {\n const actualArgs = args.slice(0, -1)\n const ctx = getCompatibilityApi(token).runtime()\n if (!argsAreCompatible(token, ctx, actualArgs)) throw incompatibleError()\n return getCodec(ctx).keys.enc(...actualArgs)\n }\n return descriptorsPromise.then((x) => getKey(...args, x))\n }\n\n return {\n isCompatible,\n getCompatibilityLevel,\n getKey: getKey as GetKey<any, any>,\n getValue,\n getValues,\n getEntries,\n watchValue,\n watchEntries,\n }\n}\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"storage.mjs","sources":["../../src/storage.ts"],"sourcesContent":["import {\n firstValueFromWithSignal,\n isOptionalArg,\n lossLessExhaustMap,\n} from \"@/utils\"\nimport { CompatibilityLevel } from \"@polkadot-api/metadata-compatibility\"\nimport {\n BlockInfo,\n BlockNotPinnedError,\n ChainHead$,\n RuntimeContext,\n} from \"@polkadot-api/observable-client\"\nimport { FixedSizeBinary, HexString } from \"@polkadot-api/substrate-bindings\"\nimport { StorageItemInput, StorageResult } from \"@polkadot-api/substrate-client\"\nimport {\n Observable,\n OperatorFunction,\n catchError,\n combineLatestWith,\n distinctUntilChanged,\n filter,\n from,\n identity,\n map,\n mergeMap,\n pipe,\n shareReplay,\n take,\n} from \"rxjs\"\nimport {\n CompatibilityFunctions,\n CompatibilityHelper,\n CompatibilityToken,\n getCompatibilityApi,\n minCompatLevel,\n RuntimeToken,\n} from \"./compatibility\"\nimport { createWatchEntries } from \"./watch-entries\"\nimport { PullOptions } from \"./types\"\n\ntype WithCallOptions<Args extends Array<any>> = [\n ...args: Args,\n options?: PullOptions,\n]\n\ntype WithWatchOptions<Args extends Array<any>> = [\n ...args: Args,\n options?: { at: \"best\" },\n]\n\ntype PossibleParents<A extends Array<any>> = A extends [...infer Left, any]\n ? Left | PossibleParents<Left>\n : ArrayPossibleParents<A>\n\ntype AllPermutations<A extends Array<any>> = PossibleParents<A> | 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 GetKey<Args extends Array<any>, Unsafe> = Unsafe extends true\n ? {\n /**\n * Get the storage-key for this storage entry.\n *\n * @param args All keys needed for that storage entry.\n * @returns Promise that will resolve the hexadecimal value of the\n * storage key.\n */\n (...args: AllPermutations<Args>): Promise<HexString>\n /**\n * Get the storage-key for this storage entry.\n *\n * @param ...args All keys needed for that storage entry.\n * @param runtimeToken Token from got with `await\n * typedApi.runtimeToken`\n * @returns Synchronously returns the hexadecimal value of the\n * storage key.\n */\n (\n ...args: [...AllPermutations<Args>, runtimeToken: RuntimeToken]\n ): HexString\n }\n : {\n /**\n * Get the storage-key for this storage entry.\n *\n * @param args All keys needed for that storage entry.\n * @returns Promise that will resolve the hexadecimal value of the\n * storage key.\n */\n (...args: AllPermutations<Args>): Promise<HexString>\n /**\n * Get the storage-key for this storage entry.\n *\n * @param ...args All keys needed for that storage entry.\n * @param compatibilityToken Token from got with `await\n * typedApi.compatibilityToken`\n * @returns Synchronously returns the hexadecimal value of the\n * storage key.\n */\n (\n ...args: [\n ...AllPermutations<Args>,\n compatibilityToken: CompatibilityToken,\n ]\n ): HexString\n }\n\ntype StorageEntryWithoutKeys<Unsafe, 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?: PullOptions) => 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 getKey: GetKey<[], Unsafe>\n} & (Unsafe extends true ? {} : CompatibilityFunctions<D>)\n\nexport type StorageEntryWithKeys<\n Unsafe,\n D,\n Args extends Array<any>,\n Payload,\n ArgsOut extends Array<any>,\n> = {\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?: PullOptions,\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: ArgsOut; value: NonNullable<Payload> }>>\n /**\n * Watch changes (Observable-based) for the storage entries with a subset of\n * `Args`.\n *\n * @param args Subset of keys needed for the storage entry.\n * At the end, optionally set whether to watch against the\n * `best` block.\n * By default watches changes against the finalized block.\n * When watching changes against the \"best\" block, this API\n * gratiously handles the re-orgs and provides the deltas\n * based on the latest emission.\n * The observed value contains the following properties:\n * - `block`: the block in where the `deltas` took place -\n * `deltas`: `null` indicates that nothing has changed from\n * the latest emission.\n * If the value is not `null` then the `deleted` and `upsrted`\n * properties indicate the entries that have changed.\n * - `entries`: it's an immutable data-structure with the\n * latest entries.\n * @example\n *\n * typedApi.query.Staking.Nominators.watchEntries()\n * typedApi.query.Staking.Nominators.watchEntries({ at: \"best\" })\n *\n */\n watchEntries: (\n ...args: WithWatchOptions<PossibleParents<Args>>\n ) => Observable<{\n block: BlockInfo\n deltas: null | {\n deleted: Array<{ args: ArgsOut; value: NonNullable<Payload> }>\n upserted: Array<{ args: ArgsOut; value: NonNullable<Payload> }>\n }\n entries: Array<{ args: ArgsOut; value: NonNullable<Payload> }>\n }>\n\n getKey: GetKey<Args, Unsafe>\n} & (Unsafe extends true ? {} : CompatibilityFunctions<D>)\n\nexport type StorageEntry<\n Unsafe,\n D,\n Args extends Array<any>,\n ArgsOut extends Array<any>,\n Payload,\n> = Args extends []\n ? StorageEntryWithoutKeys<Unsafe, D, Payload>\n : StorageEntryWithKeys<Unsafe, D, Args, Payload, ArgsOut>\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\nconst toMapped = map(<T>(x: { mapped: T }) => x.mapped)\nexport const createStorageEntry = (\n pallet: string,\n name: string,\n chainHead: ChainHead$,\n getWatchEntries: ReturnType<typeof createWatchEntries>,\n {\n isCompatible,\n getCompatibilityLevel,\n getCompatibilityLevels,\n descriptors: descriptorsPromise,\n argsAreCompatible,\n valuesAreCompatible,\n }: CompatibilityHelper,\n): StorageEntry<any, any, any, any, any> => {\n const isSystemNumber = pallet === \"System\" && name === \"Number\"\n const isBlockHash = pallet === \"System\" && name === \"BlockHash\"\n const sysNumberMapper$ = chainHead.runtime$.pipe(\n filter(Boolean),\n take(1),\n map(({ dynamicBuilder }) =>\n typeof dynamicBuilder\n .buildStorage(\"System\", \"Number\")\n .value.dec(new Uint8Array(32)) === \"bigint\"\n ? BigInt\n : identity,\n ),\n shareReplay(),\n )\n const bigIntOrNumber: OperatorFunction<number, number | bigint> = pipe(\n combineLatestWith(sysNumberMapper$),\n map(([input, mapper]) => mapper(input)),\n )\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 (e: any) {\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 isBest = target === \"best\"\n const actualArgs =\n isBest || target === \"finalized\" ? args.slice(0, -1) : args\n\n return chainHead[isBest ? \"best$\" : \"finalized$\"].pipe(\n lossLessExhaustMap(() =>\n getRawValue$(...actualArgs, isBest ? { at: \"best\" } : {}),\n ),\n distinctUntilChanged((a, b) => a.raw === b.raw),\n toMapped,\n )\n }\n\n const getRawValue$ = (\n ...args: Array<any>\n ): Observable<{ raw: string | null; mapped: any }> => {\n const lastArg = args[args.length - 1]\n const isLastArgOptional = isOptionalArg(lastArg)\n const { at: _at }: PullOptions = isLastArgOptional ? lastArg : {}\n const at = _at ?? null\n\n const result$ = from(descriptorsPromise).pipe(\n mergeMap((descriptors) =>\n 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)\n throw invalidArgs(args)\n if (!argsAreCompatible(descriptors, ctx, actualArgs))\n throw incompatibleError()\n return codecs.keys.enc(...actualArgs)\n },\n null,\n (data, ctx) => {\n const codecs = getCodec(ctx)\n const mapped =\n data === null ? codecs.fallback : codecs.value.dec(data)\n if (!valuesAreCompatible(descriptors, ctx, mapped))\n throw incompatibleError()\n return { raw: data, mapped }\n },\n ),\n ),\n chainHead.withHodl(at),\n )\n\n if (isSystemNumber)\n return chainHead.pinnedBlocks$.pipe(\n map((blocks) => {\n const hash =\n at === \"finalized\" || !at\n ? blocks.finalized\n : at === \"best\"\n ? blocks.best\n : at\n const block = blocks.blocks.get(hash)\n if (!block) {\n throw new BlockNotPinnedError(hash, \"System.Number\")\n }\n return block.number\n }),\n distinctUntilChanged(),\n bigIntOrNumber,\n map((mapped) => ({ raw: mapped.toString(), mapped })),\n catchError((e) => {\n if (e instanceof BlockNotPinnedError) return result$\n throw e\n }),\n )\n\n return isBlockHash && Number(args[0]) === 0\n ? chainHead.genesis$.pipe(\n map((raw) => ({ raw, mapped: FixedSizeBinary.fromHex(raw) })),\n )\n : result$\n }\n\n const getValue = async (...args: Array<any>) => {\n const lastArg = args[args.length - 1]\n const isLastArgOptional = isOptionalArg(lastArg)\n const { signal }: PullOptions = isLastArgOptional ? lastArg : {}\n\n return firstValueFromWithSignal(\n getRawValue$(...args).pipe(toMapped),\n signal,\n )\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 }: PullOptions = isLastArgOptional ? lastArg : {}\n const at = _at ?? null\n\n const result$ = from(descriptorsPromise).pipe(\n mergeMap((descriptors) =>\n 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.keys.enc(...actualArgs)\n },\n null,\n (values, ctx) => {\n const codecs = getCodec(ctx)\n const decodedValues = values.map(({ key, value }) => ({\n keyArgs: codecs.keys.dec(key),\n value: codecs.value.dec(value),\n }))\n if (\n decodedValues.some(\n ({ value }) => !valuesAreCompatible(descriptors, ctx, value),\n )\n )\n throw incompatibleError()\n return decodedValues\n },\n ),\n ),\n chainHead.withHodl(at),\n )\n return firstValueFromWithSignal(result$, signal)\n }\n\n const getValues = (keyArgs: Array<Array<any>>, options?: PullOptions) =>\n Promise.all(\n keyArgs.map((args) => getValue(...(options ? [...args, options] : args))),\n )\n\n const watchEntries: any = (...args: Array<any>) => {\n const lastArg = args.at(-1)\n const isLastArgOptional = isOptionalArg(lastArg)\n\n return getWatchEntries(\n pallet,\n name,\n isLastArgOptional ? args.slice(0, -1) : args,\n isLastArgOptional && lastArg.at === \"best\",\n )\n }\n\n const getKey = (...args: Array<any>): Promise<string> | string => {\n const token = args.at(-1)\n if (token instanceof CompatibilityToken || token instanceof RuntimeToken) {\n const actualArgs = args.slice(0, -1)\n const ctx = getCompatibilityApi(token).runtime()\n if (!argsAreCompatible(token, ctx, actualArgs)) throw incompatibleError()\n return getCodec(ctx).keys.enc(...actualArgs)\n }\n return descriptorsPromise.then((x) => getKey(...args, x))\n }\n\n return {\n isCompatible,\n getCompatibilityLevel,\n getKey: getKey as GetKey<any, any>,\n getValue,\n getValues,\n getEntries,\n watchValue,\n watchEntries,\n }\n}\n"],"names":[],"mappings":"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"}
|
package/dist/esm/viewFns.mjs
CHANGED
package/dist/esm/viewFns.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"viewFns.mjs","sources":["../../src/viewFns.ts"],"sourcesContent":["import { firstValueFromWithSignal, isOptionalArg } from \"@/utils\"\nimport { ChainHead$ } from \"@polkadot-api/observable-client\"\nimport { fromHex, mergeUint8, toHex } from \"@polkadot-api/utils\"\nimport { map, mergeMap } from \"rxjs\"\nimport { CompatibilityFunctions, CompatibilityHelper } from \"./compatibility\"\nimport { compactNumber, _void } from \"@polkadot-api/substrate-bindings\"\nimport { PullOptions } from \"./types\"\n\ntype WithCallOptions<Args extends Array<any>> = Args[\"length\"] extends 0\n ? [options?: PullOptions]\n : [...args: Args, options?: PullOptions]\n\nexport type ViewFn<Unsafe, D, Args extends Array<any>, Payload> = {\n /**\n * Get `Payload` (Promise-based) for the view function.\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} & (Unsafe extends true ? {} : CompatibilityFunctions<D>)\n\nconst RUNTIME_NAMESPACE = \"RuntimeViewFunction\"\nconst RUNTIME_METHOD = \"execute_view_function\"\nconst RUNTIME_CALL_NAME = RUNTIME_NAMESPACE + \"_\" + RUNTIME_METHOD\n\nexport const createViewFnEntry = (\n pallet: string,\n entry: string,\n chainHead: ChainHead$,\n {\n isCompatible,\n getCompatibilityLevel,\n compatibleRuntime$,\n argsAreCompatible,\n valuesAreCompatible,\n }: CompatibilityHelper,\n): ViewFn<any, any, any, any> => {\n const compatibilityError = () =>\n new Error(`Incompatible runtime entry ViewFn(${pallet}.${entry})`)\n\n const fn = (...args: Array<any>) => {\n const lastArg = args[args.length - 1]\n const isLastArgOptional = isOptionalArg(lastArg)\n const { signal, at: _at }: PullOptions = isLastArgOptional ? lastArg : {}\n const at = _at ?? null\n\n const result$ = compatibleRuntime$(chainHead, at).pipe(\n mergeMap(([runtime, ctx]) => {\n let apiCodec\n try {\n apiCodec = ctx.dynamicBuilder.buildRuntimeCall(\n RUNTIME_NAMESPACE,\n RUNTIME_METHOD,\n )\n } catch {\n throw new Error(\n `Runtime entry RuntimeCall(${RUNTIME_CALL_NAME}) not found`,\n )\n }\n let viewCodec\n try {\n viewCodec = ctx.dynamicBuilder.buildViewFn(pallet, entry)\n } catch {\n throw new Error(`Runtime entry ViewFn(${pallet}.${entry}) not found`)\n }\n if (!argsAreCompatible(runtime, ctx, args)) throw compatibilityError()\n const viewArgs = viewCodec.args.enc(args)\n const arg = mergeUint8([\n fromHex(\n ctx.lookup.metadata.pallets\n .find(({ name }) => name === pallet)!\n .viewFns.find(({ name }) => name === entry)!.id,\n ),\n compactNumber.enc(viewArgs.length),\n viewArgs,\n ])\n\n return chainHead.call$(at, RUNTIME_CALL_NAME, toHex(arg)).pipe(\n map((v) => {\n try {\n const decoded = apiCodec.value.dec(v)\n if (\n !(\"success\" in decoded && \"value\" in decoded) ||\n (!(\"type\" in decoded.value) && !(\"asBytes\" in decoded.value))\n )\n throw null\n return decoded\n } catch {\n throw new Error(\n `Unexpected RuntimeCall(${RUNTIME_CALL_NAME}) type`,\n )\n }\n }),\n map(({ success, value }) => {\n if (!success) throw new Error(`ViewFn API Error: ${value.type}`)\n const decoded = viewCodec.value.dec(value.asBytes())\n if (!valuesAreCompatible(runtime, ctx, decoded))\n throw compatibilityError()\n return decoded\n }),\n )\n }),\n )\n\n return firstValueFromWithSignal(result$, signal)\n }\n\n return Object.assign(fn, { getCompatibilityLevel, isCompatible })\n}\n"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"viewFns.mjs","sources":["../../src/viewFns.ts"],"sourcesContent":["import { firstValueFromWithSignal, isOptionalArg } from \"@/utils\"\nimport { ChainHead$ } from \"@polkadot-api/observable-client\"\nimport { fromHex, mergeUint8, toHex } from \"@polkadot-api/utils\"\nimport { map, mergeMap } from \"rxjs\"\nimport { CompatibilityFunctions, CompatibilityHelper } from \"./compatibility\"\nimport { compactNumber, _void } from \"@polkadot-api/substrate-bindings\"\nimport { PullOptions } from \"./types\"\n\ntype WithCallOptions<Args extends Array<any>> = Args[\"length\"] extends 0\n ? [options?: PullOptions]\n : [...args: Args, options?: PullOptions]\n\nexport type ViewFn<Unsafe, D, Args extends Array<any>, Payload> = {\n /**\n * Get `Payload` (Promise-based) for the view function.\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} & (Unsafe extends true ? {} : CompatibilityFunctions<D>)\n\nconst RUNTIME_NAMESPACE = \"RuntimeViewFunction\"\nconst RUNTIME_METHOD = \"execute_view_function\"\nconst RUNTIME_CALL_NAME = RUNTIME_NAMESPACE + \"_\" + RUNTIME_METHOD\n\nexport const createViewFnEntry = (\n pallet: string,\n entry: string,\n chainHead: ChainHead$,\n {\n isCompatible,\n getCompatibilityLevel,\n compatibleRuntime$,\n argsAreCompatible,\n valuesAreCompatible,\n }: CompatibilityHelper,\n): ViewFn<any, any, any, any> => {\n const compatibilityError = () =>\n new Error(`Incompatible runtime entry ViewFn(${pallet}.${entry})`)\n\n const fn = (...args: Array<any>) => {\n const lastArg = args[args.length - 1]\n const isLastArgOptional = isOptionalArg(lastArg)\n const { signal, at: _at }: PullOptions = isLastArgOptional ? lastArg : {}\n const at = _at ?? null\n\n const result$ = compatibleRuntime$(chainHead, at).pipe(\n mergeMap(([runtime, ctx]) => {\n let apiCodec\n try {\n apiCodec = ctx.dynamicBuilder.buildRuntimeCall(\n RUNTIME_NAMESPACE,\n RUNTIME_METHOD,\n )\n } catch {\n throw new Error(\n `Runtime entry RuntimeCall(${RUNTIME_CALL_NAME}) not found`,\n )\n }\n let viewCodec\n try {\n viewCodec = ctx.dynamicBuilder.buildViewFn(pallet, entry)\n } catch {\n throw new Error(`Runtime entry ViewFn(${pallet}.${entry}) not found`)\n }\n if (!argsAreCompatible(runtime, ctx, args)) throw compatibilityError()\n const viewArgs = viewCodec.args.enc(args)\n const arg = mergeUint8([\n fromHex(\n ctx.lookup.metadata.pallets\n .find(({ name }) => name === pallet)!\n .viewFns.find(({ name }) => name === entry)!.id,\n ),\n compactNumber.enc(viewArgs.length),\n viewArgs,\n ])\n\n return chainHead.call$(at, RUNTIME_CALL_NAME, toHex(arg)).pipe(\n map((v) => {\n try {\n const decoded = apiCodec.value.dec(v)\n if (\n !(\"success\" in decoded && \"value\" in decoded) ||\n (!(\"type\" in decoded.value) && !(\"asBytes\" in decoded.value))\n )\n throw null\n return decoded\n } catch {\n throw new Error(\n `Unexpected RuntimeCall(${RUNTIME_CALL_NAME}) type`,\n )\n }\n }),\n map(({ success, value }) => {\n if (!success) throw new Error(`ViewFn API Error: ${value.type}`)\n const decoded = viewCodec.value.dec(value.asBytes())\n if (!valuesAreCompatible(runtime, ctx, decoded))\n throw compatibilityError()\n return decoded\n }),\n )\n }),\n chainHead.withHodl(at),\n )\n\n return firstValueFromWithSignal(result$, signal)\n }\n\n return Object.assign(fn, { getCompatibilityLevel, isCompatible })\n}\n"],"names":[],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -433,7 +433,8 @@ const createRuntimeCallEntry = (api, method, chainHead, {
|
|
|
433
433
|
return value;
|
|
434
434
|
})
|
|
435
435
|
);
|
|
436
|
-
})
|
|
436
|
+
}),
|
|
437
|
+
chainHead.withHodl(at)
|
|
437
438
|
);
|
|
438
439
|
return firstValueFromWithSignal(result$, signal);
|
|
439
440
|
};
|
|
@@ -512,7 +513,8 @@ const createStorageEntry = (pallet, name, chainHead, getWatchEntries, {
|
|
|
512
513
|
return { raw: data, mapped };
|
|
513
514
|
}
|
|
514
515
|
)
|
|
515
|
-
)
|
|
516
|
+
),
|
|
517
|
+
chainHead.withHodl(at)
|
|
516
518
|
);
|
|
517
519
|
if (isSystemNumber)
|
|
518
520
|
return chainHead.pinnedBlocks$.pipe(
|
|
@@ -550,33 +552,37 @@ const createStorageEntry = (pallet, name, chainHead, getWatchEntries, {
|
|
|
550
552
|
const isLastArgOptional = isOptionalArg(lastArg);
|
|
551
553
|
const { signal, at: _at } = isLastArgOptional ? lastArg : {};
|
|
552
554
|
const at = _at ?? null;
|
|
553
|
-
const
|
|
554
|
-
|
|
555
|
-
|
|
556
|
-
|
|
557
|
-
|
|
558
|
-
|
|
559
|
-
|
|
560
|
-
|
|
561
|
-
|
|
562
|
-
|
|
563
|
-
|
|
564
|
-
|
|
565
|
-
|
|
566
|
-
|
|
567
|
-
|
|
568
|
-
|
|
569
|
-
|
|
570
|
-
|
|
571
|
-
|
|
572
|
-
|
|
573
|
-
|
|
574
|
-
|
|
575
|
-
|
|
576
|
-
|
|
577
|
-
|
|
578
|
-
|
|
579
|
-
|
|
555
|
+
const result$ = rxjs.from(descriptorsPromise).pipe(
|
|
556
|
+
rxjs.mergeMap(
|
|
557
|
+
(descriptors) => chainHead.storage$(
|
|
558
|
+
at,
|
|
559
|
+
"descendantsValues",
|
|
560
|
+
(ctx) => {
|
|
561
|
+
const codecs = getCodec(ctx);
|
|
562
|
+
if (minCompatLevel(getCompatibilityLevels(descriptors, ctx)) === metadataCompatibility.CompatibilityLevel.Incompatible)
|
|
563
|
+
throw incompatibleError();
|
|
564
|
+
if (args.length > codecs.len) throw invalidArgs(args);
|
|
565
|
+
const actualArgs = args.length > 0 && isLastArgOptional ? args.slice(0, -1) : args;
|
|
566
|
+
if (args.length === codecs.len && actualArgs === args)
|
|
567
|
+
throw invalidArgs(args);
|
|
568
|
+
return codecs.keys.enc(...actualArgs);
|
|
569
|
+
},
|
|
570
|
+
null,
|
|
571
|
+
(values, ctx) => {
|
|
572
|
+
const codecs = getCodec(ctx);
|
|
573
|
+
const decodedValues = values.map(({ key, value }) => ({
|
|
574
|
+
keyArgs: codecs.keys.dec(key),
|
|
575
|
+
value: codecs.value.dec(value)
|
|
576
|
+
}));
|
|
577
|
+
if (decodedValues.some(
|
|
578
|
+
({ value }) => !valuesAreCompatible(descriptors, ctx, value)
|
|
579
|
+
))
|
|
580
|
+
throw incompatibleError();
|
|
581
|
+
return decodedValues;
|
|
582
|
+
}
|
|
583
|
+
)
|
|
584
|
+
),
|
|
585
|
+
chainHead.withHodl(at)
|
|
580
586
|
);
|
|
581
587
|
return firstValueFromWithSignal(result$, signal);
|
|
582
588
|
};
|
|
@@ -1512,7 +1518,8 @@ const createViewFnEntry = (pallet, entry, chainHead, {
|
|
|
1512
1518
|
return decoded;
|
|
1513
1519
|
})
|
|
1514
1520
|
);
|
|
1515
|
-
})
|
|
1521
|
+
}),
|
|
1522
|
+
chainHead.withHodl(at)
|
|
1516
1523
|
);
|
|
1517
1524
|
return firstValueFromWithSignal(result$, signal);
|
|
1518
1525
|
};
|