polkadot-api 2.1.8 → 3.0.0-rc.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.
Files changed (33) hide show
  1. package/bin/cli.js +1 -1
  2. package/dist/reexports/ws.d.ts +1 -1
  3. package/dist/src/client.js +79 -7
  4. package/dist/src/client.js.map +1 -1
  5. package/dist/src/compatibility/compat-ctx.js +3 -8
  6. package/dist/src/compatibility/compat-ctx.js.map +1 -1
  7. package/dist/src/compatibility/compatibility.js +1 -2
  8. package/dist/src/compatibility/compatibility.js.map +1 -1
  9. package/dist/src/index.d.ts +5 -4
  10. package/dist/src/offline.js +71 -22
  11. package/dist/src/offline.js.map +1 -1
  12. package/dist/src/static-apis.js +3 -3
  13. package/dist/src/static-apis.js.map +1 -1
  14. package/dist/src/storage.js.map +1 -1
  15. package/dist/src/tx/tx.js +50 -66
  16. package/dist/src/tx/tx.js.map +1 -1
  17. package/dist/{types-BJAMtGIT.d.ts → types-CoK0ySKE.d.ts} +72 -204
  18. package/dist/umd/index.min.js +2 -2
  19. package/dist/umd/ink.min.js +1 -1
  20. package/dist/umd/pjs-signer.min.js +3 -1
  21. package/dist/umd/signer.min.js +3 -1
  22. package/dist/umd/ws.min.js +3 -3
  23. package/package.json +16 -15
  24. package/dist/src/tx/create-tx.js +0 -125
  25. package/dist/src/tx/create-tx.js.map +0 -1
  26. package/dist/src/tx/signed-extensions/charge-asset-tx-enc.js +0 -9
  27. package/dist/src/tx/signed-extensions/charge-asset-tx-enc.js.map +0 -1
  28. package/dist/src/tx/signed-extensions/mortal-enc.js +0 -25
  29. package/dist/src/tx/signed-extensions/mortal-enc.js.map +0 -1
  30. package/dist/src/tx/signed-extensions/sign-extensions.js +0 -107
  31. package/dist/src/tx/signed-extensions/sign-extensions.js.map +0 -1
  32. package/dist/src/tx/signed-extensions/system-version.js +0 -10
  33. package/dist/src/tx/signed-extensions/system-version.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"storage.js","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 { HexString } from \"@polkadot-api/substrate-bindings\"\nimport { StorageItemInput, StorageResult } from \"@polkadot-api/substrate-client\"\nimport {\n Observable,\n catchError,\n combineLatest,\n combineLatestWith,\n distinctUntilChanged,\n filter,\n firstValueFrom,\n from,\n identity,\n map,\n mergeMap,\n scan,\n shareReplay,\n take,\n} from \"rxjs\"\nimport { InOutCompat } from \"./compatibility\"\nimport { PullOptions } from \"./types\"\nimport { stgGetKey } from \"./utils/stg-get-key\"\nimport { createWatchEntries } from \"./watch-entries\"\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>> = {\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\ntype StorageEntryWithoutKeys<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 options Optionally choose which block to watch changes, `best`\n * or `finalized` (default)\n */\n watchValue: (options?: { at: \"best\" | \"finalized\" }) => Observable<{\n block: BlockInfo\n value: Payload\n }>\n getKey: GetKey<[]>\n}\n\nexport type StorageEntryWithKeys<\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 watch changes,\n * `best` or `finalized` (default).\n */\n watchValue: (\n ...args: [...Args, options?: { at: \"best\" | \"finalized\" }]\n ) => Observable<{\n block: BlockInfo\n value: Payload\n }>\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 choose which block to watch changes,\n * `best` or `finalized` (default)\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\n * `upserted`\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>\n}\n\nexport type StorageEntry<\n Args extends Array<any>,\n ArgsOut extends Array<any>,\n Payload,\n> = Args extends []\n ? StorageEntryWithoutKeys<Payload>\n : StorageEntryWithKeys<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\nexport const createStorageEntry = (\n pallet: string,\n name: string,\n chainHead: ChainHead$,\n getWatchEntries: ReturnType<typeof createWatchEntries>,\n compatibility: InOutCompat,\n): StorageEntry<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\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 lastArg = args.at(-1)\n const isLastArgOptional = isOptionalArg(lastArg)\n\n const [actualArgs, isBest] = isLastArgOptional\n ? ([args.slice(0, -1), args.at(-1).at === \"best\"] as const)\n : ([args, false] as const)\n\n return chainHead[isBest ? \"best$\" : \"finalized$\"].pipe(\n lossLessExhaustMap(() =>\n getRawValue$(...actualArgs, isBest ? { at: \"best\" } : {}),\n ),\n scan(\n (\n acc: {\n block: BlockInfo\n value: { raw: HexString | null; mapped: unknown }\n } | null,\n { value, block },\n ) =>\n acc\n ? {\n block,\n value: acc.value.raw === value.raw ? acc.value : value,\n }\n : { block, value },\n null,\n ),\n map((evt) => ({ block: evt!.block, value: evt!.value.mapped })),\n )\n }\n\n const getRawValue$ = (\n ...args: Array<any>\n ): Observable<{\n value: { raw: string | null; mapped: any }\n block: BlockInfo\n }> => {\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(compatibility).pipe(\n mergeMap((getCompatibility) =>\n chainHead.storage$(\n at,\n \"value\",\n (ctx) => {\n const codecs = getCodec(ctx)\n const compat = getCompatibility(ctx)\n const actualArgs =\n args.length === codecs.len ? args : args.slice(0, -1)\n if (args !== actualArgs && !isLastArgOptional)\n throw invalidArgs(args)\n\n if (!compat.args.isValueCompatible(actualArgs))\n throw incompatibleError()\n\n return codecs.keys.enc(...actualArgs)\n },\n null,\n (data, ctx) => {\n const codecs = getCodec(ctx)\n const {\n value: { isValueCompatible: isCompat },\n } = getCompatibility(ctx)\n const mapped =\n data === null ? codecs.fallback : codecs.value.dec(data)\n if (!isCompat(mapped)) 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\n }),\n distinctUntilChanged((a, b) => a.number === b.number),\n combineLatestWith(sysNumberMapper$),\n map(([block, mapper]) => ({\n block,\n value: { raw: block.number.toString(), mapped: mapper(block.number) },\n })),\n catchError((e) => {\n if (e instanceof BlockNotPinnedError) return result$\n throw e\n }),\n )\n\n return isBlockHash && Number(args[0]) === 0\n ? combineLatest([\n chainHead.genesis$,\n 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.BlockHash\")\n }\n return block\n }),\n take(1),\n ),\n ]).pipe(\n map(([raw, block]) => ({\n block,\n value: { raw, mapped: raw },\n })),\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(map((v) => v.value.mapped)),\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(compatibility).pipe(\n mergeMap((getCompatibility) =>\n chainHead.storage$(\n at,\n \"descendantsValues\",\n (ctx) => {\n const compat = getCompatibility(ctx)\n const codecs = getCodec(ctx)\n if (!compat.isCompatible(CompatibilityLevel.Partial))\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\n // TODO: check for partial args\n // if (!compat.args.isValueCompatible(args)) throw incompatibleError\n\n return codecs.keys.enc(...actualArgs)\n },\n null,\n (values, ctx) => {\n const codecs = getCodec(ctx)\n const compat = getCompatibility(ctx)\n const decodedValues = values.map(({ key, value }) => ({\n keyArgs: codecs.keys.dec(key),\n value: codecs.value.dec(value),\n }))\n // TODO: check args compatibility with user\n if (\n compat.value.level === CompatibilityLevel.Partial &&\n decodedValues.some(\n ({ value }) => !compat.value.isValueCompatible(value),\n )\n )\n throw incompatibleError()\n return decodedValues\n },\n ),\n ),\n map((v) => v.value),\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> =>\n firstValueFrom(\n combineLatest([chainHead.getRuntimeContext$(null), compatibility]).pipe(\n map(([ctx, getCompat]) =>\n stgGetKey(\n ctx,\n pallet,\n name,\n getCompat(ctx).args.isValueCompatible,\n )(...args),\n ),\n ),\n )\n\n return {\n getKey: getKey as GetKey<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.js","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 { HexString } from \"@polkadot-api/substrate-bindings\"\nimport {\n Observable,\n catchError,\n combineLatest,\n combineLatestWith,\n distinctUntilChanged,\n filter,\n firstValueFrom,\n from,\n identity,\n map,\n mergeMap,\n scan,\n shareReplay,\n take,\n} from \"rxjs\"\nimport { InOutCompat } from \"./compatibility\"\nimport { PullOptions } from \"./types\"\nimport { stgGetKey } from \"./utils/stg-get-key\"\nimport { createWatchEntries } from \"./watch-entries\"\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>> = {\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\ntype StorageEntryWithoutKeys<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 options Optionally choose which block to watch changes, `best`\n * or `finalized` (default)\n */\n watchValue: (options?: { at: \"best\" | \"finalized\" }) => Observable<{\n block: BlockInfo\n value: Payload\n }>\n getKey: GetKey<[]>\n}\n\nexport type StorageEntryWithKeys<\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 watch changes,\n * `best` or `finalized` (default).\n */\n watchValue: (\n ...args: [...Args, options?: { at: \"best\" | \"finalized\" }]\n ) => Observable<{\n block: BlockInfo\n value: Payload\n }>\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 choose which block to watch changes,\n * `best` or `finalized` (default)\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\n * `upserted`\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>\n}\n\nexport type StorageEntry<\n Args extends Array<any>,\n ArgsOut extends Array<any>,\n Payload,\n> = Args extends []\n ? StorageEntryWithoutKeys<Payload>\n : StorageEntryWithKeys<Args, Payload, ArgsOut>\n\nexport const createStorageEntry = (\n pallet: string,\n name: string,\n chainHead: ChainHead$,\n getWatchEntries: ReturnType<typeof createWatchEntries>,\n compatibility: InOutCompat,\n): StorageEntry<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\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 lastArg = args.at(-1)\n const isLastArgOptional = isOptionalArg(lastArg)\n\n const [actualArgs, isBest] = isLastArgOptional\n ? ([args.slice(0, -1), args.at(-1).at === \"best\"] as const)\n : ([args, false] as const)\n\n return chainHead[isBest ? \"best$\" : \"finalized$\"].pipe(\n lossLessExhaustMap(() =>\n getRawValue$(...actualArgs, isBest ? { at: \"best\" } : {}),\n ),\n scan(\n (\n acc: {\n block: BlockInfo\n value: { raw: HexString | null; mapped: unknown }\n } | null,\n { value, block },\n ) =>\n acc\n ? {\n block,\n value: acc.value.raw === value.raw ? acc.value : value,\n }\n : { block, value },\n null,\n ),\n map((evt) => ({ block: evt!.block, value: evt!.value.mapped })),\n )\n }\n\n const getRawValue$ = (\n ...args: Array<any>\n ): Observable<{\n value: { raw: string | null; mapped: any }\n block: BlockInfo\n }> => {\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(compatibility).pipe(\n mergeMap((getCompatibility) =>\n chainHead.storage$(\n at,\n \"value\",\n (ctx) => {\n const codecs = getCodec(ctx)\n const compat = getCompatibility(ctx)\n const actualArgs =\n args.length === codecs.len ? args : args.slice(0, -1)\n if (args !== actualArgs && !isLastArgOptional)\n throw invalidArgs(args)\n\n if (!compat.args.isValueCompatible(actualArgs))\n throw incompatibleError()\n\n return codecs.keys.enc(...actualArgs)\n },\n null,\n (data, ctx) => {\n const codecs = getCodec(ctx)\n const {\n value: { isValueCompatible: isCompat },\n } = getCompatibility(ctx)\n const mapped =\n data === null ? codecs.fallback : codecs.value.dec(data)\n if (!isCompat(mapped)) 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\n }),\n distinctUntilChanged((a, b) => a.number === b.number),\n combineLatestWith(sysNumberMapper$),\n map(([block, mapper]) => ({\n block,\n value: { raw: block.number.toString(), mapped: mapper(block.number) },\n })),\n catchError((e) => {\n if (e instanceof BlockNotPinnedError) return result$\n throw e\n }),\n )\n\n return isBlockHash && Number(args[0]) === 0\n ? combineLatest([\n chainHead.genesis$,\n 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.BlockHash\")\n }\n return block\n }),\n take(1),\n ),\n ]).pipe(\n map(([raw, block]) => ({\n block,\n value: { raw, mapped: raw },\n })),\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(map((v) => v.value.mapped)),\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(compatibility).pipe(\n mergeMap((getCompatibility) =>\n chainHead.storage$(\n at,\n \"descendantsValues\",\n (ctx) => {\n const compat = getCompatibility(ctx)\n const codecs = getCodec(ctx)\n if (!compat.isCompatible(CompatibilityLevel.Partial))\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\n // TODO: check for partial args\n // if (!compat.args.isValueCompatible(args)) throw incompatibleError\n\n return codecs.keys.enc(...actualArgs)\n },\n null,\n (values, ctx) => {\n const codecs = getCodec(ctx)\n const compat = getCompatibility(ctx)\n const decodedValues = values.map(({ key, value }) => ({\n keyArgs: codecs.keys.dec(key),\n value: codecs.value.dec(value),\n }))\n // TODO: check args compatibility with user\n if (\n compat.value.level === CompatibilityLevel.Partial &&\n decodedValues.some(\n ({ value }) => !compat.value.isValueCompatible(value),\n )\n )\n throw incompatibleError()\n return decodedValues\n },\n ),\n ),\n map((v) => v.value),\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> =>\n firstValueFrom(\n combineLatest([chainHead.getRuntimeContext$(null), compatibility]).pipe(\n map(([ctx, getCompat]) =>\n stgGetKey(\n ctx,\n pallet,\n name,\n getCompat(ctx).args.isValueCompatible,\n )(...args),\n ),\n ),\n )\n\n return {\n getKey: getKey as GetKey<any>,\n getValue,\n getValues,\n getEntries,\n watchValue,\n watchEntries,\n }\n}\n"],"names":[],"mappings":"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"}
package/dist/src/tx/tx.js CHANGED
@@ -1,16 +1,10 @@
1
1
  import { getCallData } from '../utils/get-call-data.js';
2
- import { getPolkadotSigner } from '@polkadot-api/signer';
3
- import { AccountId, Struct, u128, Variant, _void, compactBn, Enum, u32, compact } from '@polkadot-api/substrate-bindings';
4
- import { fromHex, toHex, mergeUint8 } from '@polkadot-api/utils';
5
- import { firstValueFrom, map, mergeMap, combineLatest, throwError, of, take } from 'rxjs';
6
- import { createTx } from './create-tx.js';
2
+ import { Struct, u128, Variant, _void, compactBn, Enum, compact, u32 } from '@polkadot-api/substrate-bindings';
3
+ import { mergeUint8, toHex, fromHex } from '@polkadot-api/utils';
4
+ import { firstValueFrom, map, mergeMap, combineLatest, switchMap, of, take } from 'rxjs';
7
5
  import { submit, submit$ } from './submit-fns.js';
8
6
  export { InvalidTxError } from './submit-fns.js';
9
7
 
10
- const accountIdEnc = AccountId().enc;
11
- const fakeSignature = new Uint8Array(64);
12
- const fakeSignatureEth = new Uint8Array(65);
13
- const getFakeSignature = (isEth) => () => isEth ? fakeSignatureEth : fakeSignature;
14
8
  const [, queryInfoDecFallback] = Struct({
15
9
  weight: Struct({
16
10
  ref_time: compactBn,
@@ -23,13 +17,9 @@ const [, queryInfoDecFallback] = Struct({
23
17
  }),
24
18
  partial_fee: u128
25
19
  });
26
- const createTxEntry = (pallet, name, chainHead, broadcast, compatibility, getIsAssetCompat) => {
20
+ const createTxEntry = (bindings, pallet, name, chainHead, broadcast, compatibility) => {
27
21
  const getCompatCtx$ = (at) => combineLatest([chainHead.getRuntimeContext$(at), compatibility]).pipe(
28
- map(([ctx, getCompat]) => ({
29
- ctx,
30
- isAssetCompat: getIsAssetCompat(ctx),
31
- ...getCompat(ctx)
32
- }))
22
+ map(([ctx, getCompat]) => ({ ctx, ...getCompat(ctx) }))
33
23
  );
34
24
  const getCallData$ = (arg, at) => getCompatCtx$(at).pipe(
35
25
  map(
@@ -55,59 +45,52 @@ const createTxEntry = (pallet, name, chainHead, broadcast, compatibility, getIsA
55
45
  }
56
46
  )
57
47
  );
58
- const getEncodedAsset$ = (asset, at) => asset === void 0 ? of(void 0) : getCompatCtx$(at).pipe(
59
- map(({ ctx, isAssetCompat }) => {
60
- if (!isAssetCompat(asset))
61
- throw new Error(`Incompatible runtime asset`);
62
- const { dynamicBuilder, assetId } = ctx;
63
- if (!assetId) return void 0;
64
- return dynamicBuilder.buildDefinition(assetId).enc(asset);
65
- })
66
- );
67
48
  return (arg) => {
68
- const sign$ = (from, { ..._options }, atBlock) => combineLatest([
69
- getCallData$(arg, atBlock.hash),
70
- getEncodedAsset$(_options.asset, atBlock.hash)
49
+ const create$ = (creator, opts, mockedSignature) => combineLatest([
50
+ chainHead.genesis$,
51
+ chainHead.best$.pipe(
52
+ switchMap(
53
+ (best) => combineLatest([
54
+ of(best),
55
+ chainHead.getRuntimeContext$(best.hash),
56
+ getCallData$(arg, best.hash)
57
+ ])
58
+ )
59
+ )
71
60
  ]).pipe(
61
+ take(1),
72
62
  mergeMap(
73
- ([callData, asset]) => createTx(
74
- chainHead,
75
- from,
76
- callData.callData,
77
- atBlock,
78
- _options.customSignedExtensions || {},
79
- { ..._options, asset }
63
+ ([genesisHash, [best, ctx, { callData }]]) => creator(
64
+ {
65
+ callData: toHex(callData),
66
+ context: {
67
+ metadata: toHex(ctx.metadataRaw),
68
+ bestBlockHash: best.hash,
69
+ bestBlockHeight: best.number,
70
+ genesisHash,
71
+ token: null
72
+ },
73
+ extensions: [],
74
+ signer: null,
75
+ txExtVersion: null,
76
+ version: 1
77
+ },
78
+ opts ?? {},
79
+ bindings,
80
+ mockedSignature
80
81
  )
81
- )
82
+ ),
83
+ map(fromHex)
82
84
  );
83
- const _sign = (from, { at, ..._options } = {}) => {
84
- const atBlock = chainHead.pinnedBlocks$.state.blocks.get(at);
85
- if (at && !atBlock)
86
- return throwError(() => new Error(`Uknown block ${at}`));
87
- return (atBlock ? of(atBlock) : chainHead.finalized$).pipe(
88
- take(1),
89
- mergeMap(
90
- (block) => sign$(from, _options, block).pipe(map((tx) => ({ tx, block })))
91
- )
92
- );
93
- };
94
- const sign = (from, options) => firstValueFrom(_sign(from, options)).then((x) => x.tx);
95
- const signAndSubmit = (from, _options) => firstValueFrom(_sign(from, _options)).then(
96
- ({ tx, block }) => submit(chainHead, broadcast, tx, block.hash)
85
+ const create = (creator, ...[options]) => firstValueFrom(create$(creator, options, false));
86
+ const createAndSubmit = (creator, ...[options]) => firstValueFrom(create$(creator, options, false)).then(
87
+ (tx) => submit(chainHead, broadcast, tx)
97
88
  );
98
- const signSubmitAndWatch = (from, _options) => _sign(from, _options).pipe(
99
- mergeMap(({ tx }) => submit$(chainHead, broadcast, tx, true))
89
+ const createSubmitAndWatch = (creator, ...[options]) => create$(creator, options, false).pipe(
90
+ mergeMap((tx) => submit$(chainHead, broadcast, tx, true))
100
91
  );
101
- const getPaymentInfo = async (from, _options) => {
102
- if (typeof from === "string")
103
- from = from.startsWith("0x") ? fromHex(from) : accountIdEnc(from);
104
- const isEth = from.length === 20;
105
- const fakeSigner = getPolkadotSigner(
106
- from,
107
- isEth ? "Ecdsa" : "Sr25519",
108
- getFakeSignature(isEth)
109
- );
110
- const encoded = await sign(fakeSigner, _options);
92
+ const getPaymentInfoWithOptions = async (creator, options) => {
93
+ const encoded = await firstValueFrom(create$(creator, options, true));
111
94
  const args = toHex(mergeUint8([encoded, u32.enc(encoded.length)]));
112
95
  const decoder$ = chainHead.getRuntimeContext$(null).pipe(
113
96
  map((ctx) => {
@@ -115,7 +98,7 @@ const createTxEntry = (pallet, name, chainHead, broadcast, compatibility, getIsA
115
98
  return ctx.dynamicBuilder.buildRuntimeCall(
116
99
  "TransactionPaymentApi",
117
100
  "query_info"
118
- ).value[1];
101
+ ).value.dec;
119
102
  } catch {
120
103
  return queryInfoDecFallback;
121
104
  }
@@ -132,10 +115,11 @@ const createTxEntry = (pallet, name, chainHead, broadcast, compatibility, getIsA
132
115
  )
133
116
  );
134
117
  };
118
+ const getPaymentInfo = async (creator, ...[options]) => getPaymentInfoWithOptions(creator, options);
135
119
  const getEncodedData = () => firstValueFrom(
136
120
  getCallData$(arg, null).pipe(map(({ callData }) => callData))
137
121
  );
138
- const getEstimatedFees = async (from, _options) => (await getPaymentInfo(from, _options)).partial_fee;
122
+ const getEstimatedFees = async (creator, ...[options]) => (await getPaymentInfoWithOptions(creator, options)).partial_fee;
139
123
  return {
140
124
  getPaymentInfo,
141
125
  getEstimatedFees,
@@ -145,9 +129,9 @@ const createTxEntry = (pallet, name, chainHead, broadcast, compatibility, getIsA
145
129
  },
146
130
  getEncodedData,
147
131
  getBareTx: () => firstValueFrom(getCallData$(arg, null).pipe(map(({ bare }) => bare))),
148
- sign,
149
- signSubmitAndWatch,
150
- signAndSubmit
132
+ create,
133
+ createSubmitAndWatch,
134
+ createAndSubmit
151
135
  };
152
136
  };
153
137
  };
@@ -1 +1 @@
1
- {"version":3,"file":"tx.js","sources":["../../../src/tx/tx.ts"],"sourcesContent":["import { ValueCompat } from \"@/compatibility\"\nimport { PlainDescriptor } from \"@/descriptors\"\nimport { getCallData } from \"@/utils/get-call-data\"\nimport type {\n BlockInfo,\n ChainHead$,\n RuntimeContext,\n} from \"@polkadot-api/observable-client\"\nimport { PolkadotSigner } from \"@polkadot-api/polkadot-signer\"\nimport { getPolkadotSigner } from \"@polkadot-api/signer\"\nimport {\n _void,\n AccountId,\n compact,\n compactBn,\n Decoder,\n Enum,\n HexString,\n Struct,\n u128,\n u32,\n Variant,\n} from \"@polkadot-api/substrate-bindings\"\nimport { fromHex, mergeUint8, toHex } from \"@polkadot-api/utils\"\nimport {\n combineLatest,\n firstValueFrom,\n map,\n mergeMap,\n Observable,\n of,\n take,\n throwError,\n} from \"rxjs\"\nimport { createTx } from \"./create-tx\"\nimport { InvalidTxError, submit, submit$ } from \"./submit-fns\"\nimport {\n Extensions,\n PaymentInfo,\n Transaction,\n TxEntry,\n TxOptions,\n} from \"./types\"\n\nexport { InvalidTxError, submit, submit$ }\n\nconst accountIdEnc = AccountId().enc\nconst fakeSignature = new Uint8Array(64)\nconst fakeSignatureEth = new Uint8Array(65)\nconst getFakeSignature = (isEth: boolean) => () =>\n isEth ? fakeSignatureEth : fakeSignature\n\nconst [, queryInfoDecFallback] = Struct({\n weight: Struct({\n ref_time: compactBn,\n proof_size: compactBn,\n }),\n class: Variant({\n Normal: _void,\n Operational: _void,\n Mandatory: _void,\n }),\n partial_fee: u128,\n})\n\nexport const createTxEntry = <\n Arg extends {} | undefined,\n Asset extends PlainDescriptor<any>,\n E,\n>(\n pallet: string,\n name: string,\n chainHead: ChainHead$,\n broadcast: (tx: Uint8Array) => Observable<never>,\n compatibility: ValueCompat,\n getIsAssetCompat: (ctx: RuntimeContext) => (asset: any) => Boolean,\n): TxEntry<Arg, E, Asset> => {\n type Ext = Extensions<E>\n\n const getCompatCtx$ = (at: HexString | null) =>\n combineLatest([chainHead.getRuntimeContext$(at), compatibility]).pipe(\n map(([ctx, getCompat]) => ({\n ctx,\n isAssetCompat: getIsAssetCompat(ctx),\n ...getCompat(ctx),\n })),\n )\n\n const getCallData$ = (arg: any, at: HexString | null) =>\n getCompatCtx$(at).pipe(\n map(\n ({\n ctx: { dynamicBuilder, extVersions },\n isValueCompatible: isCompat,\n }) => {\n const callData = getCallData(\n dynamicBuilder,\n isCompat,\n pallet,\n name,\n arg,\n )\n return {\n callData,\n bare: mergeUint8([\n compact.enc(callData.length + 1),\n new Uint8Array(extVersions.slice(-1)),\n callData,\n ]),\n }\n },\n ),\n )\n\n const getEncodedAsset$ = (\n asset: any,\n at: HexString | null,\n ): Observable<Uint8Array | undefined> =>\n asset === undefined\n ? of(undefined)\n : getCompatCtx$(at).pipe(\n map(({ ctx, isAssetCompat }) => {\n if (!isAssetCompat(asset))\n throw new Error(`Incompatible runtime asset`)\n\n const { dynamicBuilder, assetId } = ctx\n if (!assetId) return undefined\n return dynamicBuilder.buildDefinition(assetId).enc(asset)\n }),\n )\n\n return (arg?: Arg): Transaction<Asset, Ext> => {\n const sign$ = (\n from: PolkadotSigner,\n { ..._options }: Omit<TxOptions<{}, Ext>, \"at\">,\n atBlock: BlockInfo,\n ) =>\n combineLatest([\n getCallData$(arg, atBlock.hash),\n getEncodedAsset$(_options.asset, atBlock.hash),\n ]).pipe(\n mergeMap(([callData, asset]) =>\n createTx(\n chainHead,\n from,\n callData.callData,\n atBlock,\n (_options.customSignedExtensions as any) || {},\n { ..._options, asset },\n ),\n ),\n )\n\n const _sign = (\n from: PolkadotSigner,\n { at, ..._options }: TxOptions<{}, Ext> = {},\n ) => {\n const atBlock = chainHead.pinnedBlocks$.state.blocks.get(at!)\n if (at && !atBlock)\n return throwError(() => new Error(`Uknown block ${at}`))\n\n return (atBlock ? of(atBlock) : chainHead.finalized$).pipe(\n take(1),\n mergeMap((block) =>\n sign$(from, _options, block).pipe(map((tx) => ({ tx, block }))),\n ),\n )\n }\n\n const sign: Transaction<Asset, Ext>[\"sign\"] = (from, options) =>\n firstValueFrom(_sign(from, options)).then((x) => x.tx)\n\n const signAndSubmit: Transaction<Asset, Ext>[\"signAndSubmit\"] = (\n from,\n _options,\n ) =>\n firstValueFrom(_sign(from, _options)).then(({ tx, block }) =>\n submit(chainHead, broadcast, tx, block.hash),\n )\n\n const signSubmitAndWatch: Transaction<Asset, Ext>[\"signSubmitAndWatch\"] = (\n from,\n _options,\n ) =>\n _sign(from, _options).pipe(\n mergeMap(({ tx }) => submit$(chainHead, broadcast, tx, true)),\n )\n\n const getPaymentInfo = async (\n from: Uint8Array | string,\n _options?: any,\n ) => {\n if (typeof from === \"string\")\n from = from.startsWith(\"0x\") ? fromHex(from) : accountIdEnc(from)\n const isEth = from.length === 20\n const fakeSigner = getPolkadotSigner(\n from,\n isEth ? \"Ecdsa\" : \"Sr25519\",\n getFakeSignature(isEth),\n )\n const encoded = await sign(fakeSigner, _options)\n const args = toHex(mergeUint8([encoded, u32.enc(encoded.length)]))\n\n const decoder$: Observable<Decoder<PaymentInfo>> = chainHead\n .getRuntimeContext$(null)\n .pipe(\n map((ctx) => {\n try {\n return ctx.dynamicBuilder.buildRuntimeCall(\n \"TransactionPaymentApi\",\n \"query_info\",\n ).value[1]\n } catch {\n return queryInfoDecFallback\n }\n }),\n )\n\n const call$ = chainHead.call$(\n null,\n \"TransactionPaymentApi_query_info\",\n args,\n )\n\n return firstValueFrom(\n combineLatest([call$, decoder$]).pipe(\n map(([result, decoder]) => decoder(result)),\n ),\n )\n }\n\n const getEncodedData = () =>\n firstValueFrom(\n getCallData$(arg, null).pipe(map(({ callData }) => callData)),\n )\n\n const getEstimatedFees = async (\n from: Uint8Array | string,\n _options?: any,\n ) => (await getPaymentInfo(from, _options)).partial_fee\n\n return {\n getPaymentInfo,\n getEstimatedFees,\n decodedCall: {\n type: pallet,\n value: Enum(name, arg),\n },\n getEncodedData,\n getBareTx: () =>\n firstValueFrom(getCallData$(arg, null).pipe(map(({ bare }) => bare))),\n sign,\n signSubmitAndWatch,\n signAndSubmit,\n }\n }\n}\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"tx.js","sources":["../../../src/tx/tx.ts"],"sourcesContent":["import { ValueCompat } from \"@/compatibility\"\nimport { getCallData } from \"@/utils/get-call-data\"\nimport type { ChainHead$ } from \"@polkadot-api/observable-client\"\nimport { TxCreator, TxCreatorBindings } from \"@polkadot-api/polkadot-signer\"\nimport {\n _void,\n compact,\n compactBn,\n Decoder,\n Enum,\n HexString,\n Struct,\n u128,\n u32,\n Variant,\n} from \"@polkadot-api/substrate-bindings\"\nimport { fromHex, mergeUint8, toHex } from \"@polkadot-api/utils\"\nimport {\n combineLatest,\n firstValueFrom,\n map,\n mergeMap,\n Observable,\n of,\n switchMap,\n take,\n} from \"rxjs\"\nimport { InvalidTxError, submit, submit$ } from \"./submit-fns\"\nimport {\n ExtensionConstraints,\n PaymentInfo,\n Transaction,\n TxCreatorOptions,\n TxEntry,\n} from \"./types\"\n\nexport { InvalidTxError, submit, submit$ }\n\nconst [, queryInfoDecFallback] = Struct({\n weight: Struct({\n ref_time: compactBn,\n proof_size: compactBn,\n }),\n class: Variant({\n Normal: _void,\n Operational: _void,\n Mandatory: _void,\n }),\n partial_fee: u128,\n})\n\nexport const createTxEntry = <\n Arg extends {} | undefined,\n EC extends ExtensionConstraints,\n>(\n bindings: TxCreatorBindings,\n pallet: string,\n name: string,\n chainHead: ChainHead$,\n broadcast: (tx: Uint8Array) => Observable<never>,\n compatibility: ValueCompat,\n): TxEntry<Arg, EC> => {\n const getCompatCtx$ = (at: HexString | null) =>\n combineLatest([chainHead.getRuntimeContext$(at), compatibility]).pipe(\n map(([ctx, getCompat]) => ({ ctx, ...getCompat(ctx) })),\n )\n\n const getCallData$ = (arg: any, at: HexString | null) =>\n getCompatCtx$(at).pipe(\n map(\n ({\n ctx: { dynamicBuilder, extVersions },\n isValueCompatible: isCompat,\n }) => {\n const callData = getCallData(\n dynamicBuilder,\n isCompat,\n pallet,\n name,\n arg,\n )\n return {\n callData,\n bare: mergeUint8([\n compact.enc(callData.length + 1),\n new Uint8Array(extVersions.slice(-1)),\n callData,\n ]),\n }\n },\n ),\n )\n\n return (arg?: Arg): Transaction<EC> => {\n const create$ = <T extends TxCreator<any>>(\n creator: T,\n opts: TxCreatorOptions<T, EC> | undefined,\n mockedSignature: boolean,\n ) =>\n combineLatest([\n chainHead.genesis$,\n chainHead.best$.pipe(\n switchMap((best) =>\n combineLatest([\n of(best),\n chainHead.getRuntimeContext$(best.hash),\n getCallData$(arg, best.hash),\n ]),\n ),\n ),\n ]).pipe(\n take(1),\n mergeMap(([genesisHash, [best, ctx, { callData }]]) =>\n creator(\n {\n callData: toHex(callData),\n context: {\n metadata: toHex(ctx.metadataRaw),\n bestBlockHash: best.hash,\n bestBlockHeight: best.number,\n genesisHash,\n token: null,\n },\n extensions: [],\n signer: null,\n txExtVersion: null,\n version: 1,\n },\n opts ?? {},\n bindings,\n mockedSignature,\n ),\n ),\n map(fromHex),\n )\n\n const create: Transaction<EC>[\"create\"] = (creator, ...[options]) =>\n firstValueFrom(create$(creator, options, false))\n\n const createAndSubmit: Transaction<EC>[\"createAndSubmit\"] = (\n creator,\n ...[options]\n ) =>\n firstValueFrom(create$(creator, options, false)).then((tx) =>\n submit(chainHead, broadcast, tx),\n )\n\n const createSubmitAndWatch: Transaction<EC>[\"createSubmitAndWatch\"] = (\n creator,\n ...[options]\n ) =>\n create$(creator, options, false).pipe(\n mergeMap((tx) => submit$(chainHead, broadcast, tx, true)),\n )\n\n const getPaymentInfoWithOptions = async <T extends TxCreator<any>>(\n creator: T,\n options: TxCreatorOptions<T, EC> | undefined,\n ) => {\n const encoded = await firstValueFrom(create$(creator, options, true))\n const args = toHex(mergeUint8([encoded, u32.enc(encoded.length)]))\n\n const decoder$: Observable<Decoder<PaymentInfo>> = chainHead\n .getRuntimeContext$(null)\n .pipe(\n map((ctx) => {\n try {\n return ctx.dynamicBuilder.buildRuntimeCall(\n \"TransactionPaymentApi\",\n \"query_info\",\n ).value.dec\n } catch {\n return queryInfoDecFallback\n }\n }),\n )\n\n const call$ = chainHead.call$(\n null,\n \"TransactionPaymentApi_query_info\",\n args,\n )\n\n return firstValueFrom(\n combineLatest([call$, decoder$]).pipe(\n map(([result, decoder]) => decoder(result)),\n ),\n )\n }\n\n const getPaymentInfo: Transaction<EC>[\"getPaymentInfo\"] = async (\n creator,\n ...[options]\n ) => getPaymentInfoWithOptions(creator, options)\n\n const getEncodedData = () =>\n firstValueFrom(\n getCallData$(arg, null).pipe(map(({ callData }) => callData)),\n )\n\n const getEstimatedFees: Transaction<EC>[\"getEstimatedFees\"] = async (\n creator,\n ...[options]\n ) => (await getPaymentInfoWithOptions(creator, options)).partial_fee\n\n return {\n getPaymentInfo,\n getEstimatedFees,\n decodedCall: {\n type: pallet,\n value: Enum(name, arg),\n },\n getEncodedData,\n getBareTx: () =>\n firstValueFrom(getCallData$(arg, null).pipe(map(({ bare }) => bare))),\n create,\n createSubmitAndWatch,\n createAndSubmit,\n }\n }\n}\n"],"names":[],"mappings":"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"}