polkadot-api 0.11.2 → 0.12.0

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/chains/paseo_asset_hub/package.json +8 -0
  2. package/chains/polkadot_people/package.json +8 -0
  3. package/dist/esm/compatibility.mjs +15 -3
  4. package/dist/esm/compatibility.mjs.map +1 -1
  5. package/dist/esm/constants.mjs +2 -1
  6. package/dist/esm/constants.mjs.map +1 -1
  7. package/dist/esm/event.mjs +2 -1
  8. package/dist/esm/event.mjs.map +1 -1
  9. package/dist/esm/index.mjs +2 -0
  10. package/dist/esm/index.mjs.map +1 -1
  11. package/dist/esm/reexports/chains_paseo_asset_hub.mjs +2 -0
  12. package/dist/esm/reexports/chains_paseo_asset_hub.mjs.map +1 -0
  13. package/dist/esm/reexports/chains_polkadot_people.mjs +2 -0
  14. package/dist/esm/reexports/chains_polkadot_people.mjs.map +1 -0
  15. package/dist/esm/runtime-call.mjs +2 -1
  16. package/dist/esm/runtime-call.mjs.map +1 -1
  17. package/dist/esm/storage.mjs +2 -0
  18. package/dist/esm/storage.mjs.map +1 -1
  19. package/dist/esm/tx/submit-fns.mjs +39 -12
  20. package/dist/esm/tx/submit-fns.mjs.map +1 -1
  21. package/dist/esm/tx/tx.mjs +6 -1
  22. package/dist/esm/tx/tx.mjs.map +1 -1
  23. package/dist/index.d.ts +36 -45
  24. package/dist/index.js +66 -17
  25. package/dist/index.js.map +1 -1
  26. package/dist/reexports/chains.d.ts +2 -0
  27. package/dist/reexports/chains_paseo_asset_hub.d.ts +1 -0
  28. package/dist/reexports/chains_paseo_asset_hub.js +13 -0
  29. package/dist/reexports/chains_paseo_asset_hub.js.map +1 -0
  30. package/dist/reexports/chains_polkadot_people.d.ts +1 -0
  31. package/dist/reexports/chains_polkadot_people.js +13 -0
  32. package/dist/reexports/chains_polkadot_people.js.map +1 -0
  33. package/package.json +38 -15
@@ -1 +1 @@
1
- {"version":3,"file":"tx.mjs","sources":["../../../src/tx/tx.ts"],"sourcesContent":["import { BlockInfo, getObservableClient } from \"@polkadot-api/observable-client\"\nimport { PolkadotSigner } from \"@polkadot-api/polkadot-signer\"\nimport { getPolkadotSigner } from \"@polkadot-api/signer\"\nimport {\n AccountId,\n Binary,\n Enum,\n SS58String,\n Tuple,\n compact,\n u128,\n u32,\n u8,\n} from \"@polkadot-api/substrate-bindings\"\nimport { fromHex, mergeUint8, toHex } from \"@polkadot-api/utils\"\nimport {\n Observable,\n firstValueFrom,\n map,\n mergeMap,\n take,\n throwError,\n} from \"rxjs\"\nimport { PlainDescriptor } from \"@/descriptors\"\nimport {\n CompatibilityHelper,\n CompatibilityToken,\n getCompatibilityApi,\n} from \"../compatibility\"\nimport { createTx } from \"./create-tx\"\nimport { submit, submit$ } from \"./submit-fns\"\nimport {\n TxCall,\n TxEntry,\n TxObservable,\n TxOptions,\n TxPromise,\n TxSignFn,\n} from \"./types\"\nimport {\n isCompatible,\n mapLookupToTypedef,\n} from \"@polkadot-api/metadata-compatibility\"\n\nexport { submit, submit$ }\n\nconst accountIdEnc = AccountId().enc\nconst queryInfoRawDec = Tuple(compact, compact, u8, u128).dec\nconst queryInfoDec = (input: string): bigint => queryInfoRawDec(input)[3]\nconst fakeSignature = new Uint8Array(64)\nconst getFakeSignature = () => fakeSignature\n\nexport const createTxEntry = <\n D,\n Arg extends {} | undefined,\n Pallet extends string,\n Name extends string,\n Asset extends PlainDescriptor<any>,\n>(\n pallet: Pallet,\n name: Name,\n chainHead: ReturnType<ReturnType<typeof getObservableClient>[\"chainHead$\"]>,\n broadcast: (tx: string) => Observable<never>,\n {\n getCompatibilityLevel,\n compatibleRuntime$,\n argsAreCompatible,\n getRuntimeTypedef,\n }: CompatibilityHelper,\n): TxEntry<D, Arg, Pallet, Name, Asset> => {\n const fn = (arg?: Arg): any => {\n const getCallDataWithContext = (\n runtime: CompatibilityToken,\n arg: any,\n txOptions: Partial<{ asset: any }> = {},\n ) => {\n const ctx = getCompatibilityApi(runtime).runtime()\n if (!argsAreCompatible(runtime, ctx, arg))\n throw new Error(`Incompatible runtime entry Tx(${pallet}.${name})`)\n\n const { dynamicBuilder, assetId, lookup } = ctx\n let returnOptions = txOptions\n if (txOptions.asset) {\n if (\n assetId == null ||\n !isCompatible(\n txOptions.asset,\n mapLookupToTypedef(lookup(assetId)),\n (id) => getRuntimeTypedef(ctx, id),\n )\n )\n throw new Error(`Incompatible runtime asset`)\n returnOptions = {\n ...txOptions,\n asset: dynamicBuilder.buildDefinition(assetId).enc(txOptions.asset),\n }\n }\n\n const { location, codec } = dynamicBuilder.buildCall(pallet, name)\n return {\n callData: Binary.fromBytes(\n mergeUint8(new Uint8Array(location), codec.enc(arg)),\n ),\n options: returnOptions,\n }\n }\n\n const getCallData$ = (arg: any, options: Partial<{ asset: any }> = {}) =>\n compatibleRuntime$(chainHead, null).pipe(\n map(([runtime]) => getCallDataWithContext(runtime, arg, options)),\n )\n\n const getEncodedData: TxCall = (\n compatibilityToken?: CompatibilityToken,\n ): any => {\n if (!compatibilityToken)\n return firstValueFrom(getCallData$(arg).pipe(map((x) => x.callData)))\n\n return getCallDataWithContext(compatibilityToken, arg).callData\n }\n\n const sign$ = (\n from: PolkadotSigner,\n { ..._options }: Omit<TxOptions<{}>, \"at\">,\n atBlock: BlockInfo,\n ) =>\n getCallData$(arg, _options).pipe(\n mergeMap(({ callData, options }) =>\n createTx(chainHead, from, callData.asBytes(), atBlock, options),\n ),\n )\n\n const _sign = (\n from: PolkadotSigner,\n { at, ..._options }: TxOptions<{}> = {},\n ) => {\n return (\n !at || at === \"finalized\"\n ? chainHead.finalized$\n : at === \"best\"\n ? chainHead.best$\n : chainHead.bestBlocks$.pipe(\n map((x) => x.find((b) => b.hash === at)),\n )\n ).pipe(\n take(1),\n mergeMap((atBlock) =>\n atBlock\n ? sign$(from, _options, atBlock).pipe(\n map((signed) => ({\n tx: toHex(signed),\n block: atBlock,\n })),\n )\n : throwError(() => new Error(`Uknown block ${at}`)),\n ),\n )\n }\n\n const sign: TxSignFn<Asset> = (from, options) =>\n firstValueFrom(_sign(from, options)).then((x) => x.tx)\n\n const signAndSubmit: TxPromise<Asset> = (from, _options) =>\n firstValueFrom(_sign(from, _options)).then(({ tx, block }) =>\n submit(chainHead, broadcast, tx, block.hash),\n )\n\n const signSubmitAndWatch: TxObservable<Asset> = (from, _options) =>\n _sign(from, _options).pipe(\n mergeMap(({ tx, block }) =>\n submit$(chainHead, broadcast, tx, block.hash, true),\n ),\n )\n\n const getEstimatedFees = async (\n from: Uint8Array | SS58String,\n _options?: any,\n ) => {\n const fakeSigner = getPolkadotSigner(\n from instanceof Uint8Array ? from : accountIdEnc(from),\n \"Sr25519\",\n getFakeSignature,\n )\n const encoded = fromHex(await sign(fakeSigner, _options))\n const args = toHex(mergeUint8(encoded, u32.enc(encoded.length)))\n\n return firstValueFrom(\n chainHead\n .call$(null, \"TransactionPaymentApi_query_info\", args)\n .pipe(map(queryInfoDec)),\n )\n }\n\n return {\n getEstimatedFees,\n decodedCall: {\n type: pallet,\n value: Enum(name, arg as any),\n },\n getEncodedData,\n sign,\n signSubmitAndWatch,\n signAndSubmit,\n }\n }\n\n return Object.assign(fn, { getCompatibilityLevel })\n}\n"],"names":["arg"],"mappings":"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"}
1
+ {"version":3,"file":"tx.mjs","sources":["../../../src/tx/tx.ts"],"sourcesContent":["import { BlockInfo, getObservableClient } from \"@polkadot-api/observable-client\"\nimport { PolkadotSigner } from \"@polkadot-api/polkadot-signer\"\nimport { getPolkadotSigner } from \"@polkadot-api/signer\"\nimport {\n AccountId,\n Binary,\n Enum,\n SS58String,\n Tuple,\n compact,\n u128,\n u32,\n u8,\n} from \"@polkadot-api/substrate-bindings\"\nimport { fromHex, mergeUint8, toHex } from \"@polkadot-api/utils\"\nimport {\n Observable,\n firstValueFrom,\n map,\n mergeMap,\n take,\n throwError,\n} from \"rxjs\"\nimport { PlainDescriptor } from \"@/descriptors\"\nimport {\n CompatibilityHelper,\n CompatibilityToken,\n getCompatibilityApi,\n} from \"../compatibility\"\nimport { createTx } from \"./create-tx\"\nimport { InvalidTxError, submit, submit$ } from \"./submit-fns\"\nimport {\n TxCall,\n TxEntry,\n TxObservable,\n TxOptions,\n TxPromise,\n TxSignFn,\n} from \"./types\"\nimport {\n isCompatible,\n mapLookupToTypedef,\n} from \"@polkadot-api/metadata-compatibility\"\n\nexport { submit, submit$, InvalidTxError }\n\nconst accountIdEnc = AccountId().enc\nconst queryInfoRawDec = Tuple(compact, compact, u8, u128).dec\nconst queryInfoDec = (input: string): bigint => queryInfoRawDec(input)[3]\nconst fakeSignature = new Uint8Array(64)\nconst getFakeSignature = () => fakeSignature\n\nexport const createTxEntry = <\n D,\n Arg extends {} | undefined,\n Pallet extends string,\n Name extends string,\n Asset extends PlainDescriptor<any>,\n>(\n pallet: Pallet,\n name: Name,\n chainHead: ReturnType<ReturnType<typeof getObservableClient>[\"chainHead$\"]>,\n broadcast: (tx: string) => Observable<never>,\n {\n isCompatible: isCompatibleHelper,\n getCompatibilityLevel,\n compatibleRuntime$,\n argsAreCompatible,\n getRuntimeTypedef,\n }: CompatibilityHelper,\n): TxEntry<D, Arg, Pallet, Name, Asset> => {\n const fn = (arg?: Arg): any => {\n const getCallDataWithContext = (\n runtime: CompatibilityToken,\n arg: any,\n txOptions: Partial<{ asset: any }> = {},\n ) => {\n const ctx = getCompatibilityApi(runtime).runtime()\n if (!argsAreCompatible(runtime, ctx, arg))\n throw new Error(`Incompatible runtime entry Tx(${pallet}.${name})`)\n\n const { dynamicBuilder, assetId, lookup } = ctx\n let returnOptions = txOptions\n if (txOptions.asset) {\n if (\n assetId == null ||\n !isCompatible(\n txOptions.asset,\n mapLookupToTypedef(lookup(assetId)),\n (id) => getRuntimeTypedef(ctx, id),\n )\n )\n throw new Error(`Incompatible runtime asset`)\n returnOptions = {\n ...txOptions,\n asset: dynamicBuilder.buildDefinition(assetId).enc(txOptions.asset),\n }\n }\n\n const { location, codec } = dynamicBuilder.buildCall(pallet, name)\n return {\n callData: Binary.fromBytes(\n mergeUint8(new Uint8Array(location), codec.enc(arg)),\n ),\n options: returnOptions,\n }\n }\n\n const getCallData$ = (arg: any, options: Partial<{ asset: any }> = {}) =>\n compatibleRuntime$(chainHead, null).pipe(\n map(([runtime]) => getCallDataWithContext(runtime, arg, options)),\n )\n\n const getEncodedData: TxCall = (\n compatibilityToken?: CompatibilityToken,\n ): any => {\n if (!compatibilityToken)\n return firstValueFrom(getCallData$(arg).pipe(map((x) => x.callData)))\n\n return getCallDataWithContext(compatibilityToken, arg).callData\n }\n\n const sign$ = (\n from: PolkadotSigner,\n { ..._options }: Omit<TxOptions<{}>, \"at\">,\n atBlock: BlockInfo,\n ) =>\n getCallData$(arg, _options).pipe(\n mergeMap(({ callData, options }) =>\n createTx(chainHead, from, callData.asBytes(), atBlock, options),\n ),\n )\n\n const _sign = (\n from: PolkadotSigner,\n { at, ..._options }: TxOptions<{}> = {},\n ) => {\n return (\n !at || at === \"finalized\"\n ? chainHead.finalized$\n : at === \"best\"\n ? chainHead.best$\n : chainHead.bestBlocks$.pipe(\n map((x) => x.find((b) => b.hash === at)),\n )\n ).pipe(\n take(1),\n mergeMap((atBlock) =>\n atBlock\n ? sign$(from, _options, atBlock).pipe(\n map((signed) => ({\n tx: toHex(signed),\n block: atBlock,\n })),\n )\n : throwError(() => new Error(`Uknown block ${at}`)),\n ),\n )\n }\n\n const sign: TxSignFn<Asset> = (from, options) =>\n firstValueFrom(_sign(from, options)).then((x) => x.tx)\n\n const signAndSubmit: TxPromise<Asset> = (from, _options) =>\n firstValueFrom(_sign(from, _options)).then(({ tx, block }) =>\n submit(chainHead, broadcast, tx, block.hash),\n )\n\n const signSubmitAndWatch: TxObservable<Asset> = (from, _options) =>\n _sign(from, _options).pipe(\n mergeMap(({ tx, block }) =>\n submit$(chainHead, broadcast, tx, block.hash, true),\n ),\n )\n\n const getEstimatedFees = async (\n from: Uint8Array | SS58String,\n _options?: any,\n ) => {\n const fakeSigner = getPolkadotSigner(\n from instanceof Uint8Array ? from : accountIdEnc(from),\n \"Sr25519\",\n getFakeSignature,\n )\n const encoded = fromHex(await sign(fakeSigner, _options))\n const args = toHex(mergeUint8(encoded, u32.enc(encoded.length)))\n\n return firstValueFrom(\n chainHead\n .call$(null, \"TransactionPaymentApi_query_info\", args)\n .pipe(map(queryInfoDec)),\n )\n }\n\n return {\n getEstimatedFees,\n decodedCall: {\n type: pallet,\n value: Enum(name, arg as any),\n },\n getEncodedData,\n sign,\n signSubmitAndWatch,\n signAndSubmit,\n }\n }\n\n return Object.assign(fn, {\n getCompatibilityLevel,\n isCompatible: isCompatibleHelper,\n })\n}\n"],"names":["arg"],"mappings":"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"}
package/dist/index.d.ts CHANGED
@@ -1,10 +1,10 @@
1
1
  import { JsonRpcProvider } from '@polkadot-api/json-rpc-provider';
2
- import { RuntimeContext, ChainHead$, BlockInfo, SystemEvent as SystemEvent$1, getObservableClient } from '@polkadot-api/observable-client';
2
+ import { BlockInfo, SystemEvent as SystemEvent$1 } from '@polkadot-api/observable-client';
3
3
  import { HexString, Binary, SS58String, Enum, BlockHeader } from '@polkadot-api/substrate-bindings';
4
4
  export { AccountId, Binary, Codec, Enum, EnumVariant, FixedSizeBinary, GetEnum, HexString, ResultPayload, SS58AddressInfo, SS58String, _Enum, getSs58AddressInfo } from '@polkadot-api/substrate-bindings';
5
5
  import { ChainSpecData } from '@polkadot-api/substrate-client';
6
6
  import { Observable } from 'rxjs';
7
- import { CompatibilityLevel, EntryPoint, TypedefNode } from '@polkadot-api/metadata-compatibility';
7
+ import { CompatibilityLevel } from '@polkadot-api/metadata-compatibility';
8
8
  export { CompatibilityLevel } from '@polkadot-api/metadata-compatibility';
9
9
  import { DescriptorValues } from '@polkadot-api/codegen';
10
10
  export { DescriptorValues } from '@polkadot-api/codegen';
@@ -67,52 +67,40 @@ type ErrorsFromPalletsDef<T extends PalletsTypedef<any, any, any, any, any>> = E
67
67
  type ConstFromPalletsDef<T extends PalletsTypedef<any, any, any, any, any>> = ExtractPlain<T["__const"]>;
68
68
 
69
69
  declare class CompatibilityToken<D = unknown> {
70
- protected _descriptors: D;
71
70
  private constructor();
71
+ protected _phantom(value: D): void;
72
72
  }
73
- interface CompatibilityTokenApi {
74
- runtime: () => RuntimeContext;
75
- typedefNodes: TypedefNode[];
76
- getPalletEntryPoint: (opType: OpType, pallet: string, name: string) => EntryPoint;
77
- getApiEntryPoint: (name: string, method: string) => EntryPoint;
78
- }
79
- declare const enum OpType {
80
- Storage = "storage",
81
- Tx = "tx",
82
- Event = "events",
83
- Error = "errors",
84
- Const = "constants"
85
- }
86
- declare const compatibilityHelper: (descriptors: Promise<CompatibilityToken>, getDescriptorEntryPoint: (descriptorApi: CompatibilityTokenApi) => EntryPoint, getRuntimeEntryPoint: (ctx: RuntimeContext) => EntryPoint) => {
87
- getCompatibilityLevel: WithOptionalRuntime<number, unknown>;
88
- getCompatibilityLevels: (descriptors: CompatibilityToken, ctx?: RuntimeContext) => {
89
- args: CompatibilityLevel;
90
- values: CompatibilityLevel;
91
- };
92
- waitDescriptors: () => Promise<CompatibilityToken<unknown>>;
93
- withCompatibleRuntime: <T>(chainHead: ChainHead$, mapper: (x: T) => string) => (source$: Observable<T>) => Observable<[T, CompatibilityToken, RuntimeContext]>;
94
- compatibleRuntime$: (chainHead: ChainHead$, hash: string | null) => Observable<[CompatibilityToken<unknown>, RuntimeContext]>;
95
- argsAreCompatible: (descriptors: CompatibilityToken, ctx: RuntimeContext, args: unknown) => boolean;
96
- valuesAreCompatible: (descriptors: CompatibilityToken, ctx: RuntimeContext, values: unknown) => boolean;
97
- getRuntimeTypedef: (ctx: RuntimeContext, id: number) => TypedefNode;
98
- };
99
- type CompatibilityHelper = ReturnType<typeof compatibilityHelper>;
100
- type WithOptionalRuntime<T, D> = {
73
+ interface CompatibilityFunctions<D> {
101
74
  /**
102
- * Returns the result after waiting for the runtime to load.
75
+ * Returns the `CompatibilityLevel` for this call comparing the descriptors
76
+ * generated on dev time with the current live metadata.
103
77
  */
104
- (): Promise<T>;
105
- /**
106
- * Returns the result synchronously with the loaded runtime.
107
- */
108
- (runtime: CompatibilityToken<D>): T;
109
- };
110
- interface CompatibilityFunctions<D> {
78
+ getCompatibilityLevel(): Promise<CompatibilityLevel>;
111
79
  /**
112
80
  * Returns the `CompatibilityLevel` for this call comparing the descriptors
113
81
  * generated on dev time with the current live metadata.
82
+ *
83
+ * @param compatibilityToken CompatibilityToken awaited from
84
+ * typedApi.compatibilityToken.
85
+ */
86
+ getCompatibilityLevel(compatibilityToken: CompatibilityToken<D>): CompatibilityLevel;
87
+ /**
88
+ * Returns whether this call is compatible based on the CompatibilityLevel
89
+ * threshold.
90
+ *
91
+ * @param threshold CompatibilityLevel threshold to use, inclusive.
114
92
  */
115
- getCompatibilityLevel: WithOptionalRuntime<CompatibilityLevel, D>;
93
+ isCompatible(threshold: CompatibilityLevel): Promise<boolean>;
94
+ /**
95
+ * Returns whether this call is compatible based on the CompatibilityLevel
96
+ * threshold.
97
+ *
98
+ * @param threshold CompatibilityLevel threshold to use,
99
+ * inclusive.
100
+ * @param compatibilityToken CompatibilityToken awaited from
101
+ * typedApi.compatibilityToken.
102
+ */
103
+ isCompatible(threshold: CompatibilityLevel, compatibilityToken: CompatibilityToken<D>): boolean;
116
104
  }
117
105
 
118
106
  interface ConstantEntry<D, T> extends CompatibilityFunctions<D> {
@@ -472,10 +460,10 @@ interface TxEntry<D, Arg extends {} | undefined, Pallet extends string, Name ext
472
460
  (...args: Arg extends undefined ? [] : [data: Arg]): Transaction<Arg, Pallet, Name, Asset>;
473
461
  }
474
462
 
475
- declare const submit$: (chainHead: ChainHead$, broadcastTx$: (tx: string) => Observable<never>, tx: HexString, at?: HexString, emitSign?: boolean) => Observable<TxEvent>;
476
- declare const submit: (chainHead: ChainHead$, broadcastTx$: (tx: string) => Observable<never>, transaction: HexString, at?: HexString) => Promise<TxFinalizedPayload>;
477
-
478
- declare const createTxEntry: <D, Arg extends {} | undefined, Pallet extends string, Name extends string, Asset extends PlainDescriptor<any>>(pallet: Pallet, name: Name, chainHead: ReturnType<ReturnType<typeof getObservableClient>["chainHead$"]>, broadcast: (tx: string) => Observable<never>, { getCompatibilityLevel, compatibleRuntime$, argsAreCompatible, getRuntimeTypedef, }: CompatibilityHelper) => TxEntry<D, Arg, Pallet, Name, Asset>;
463
+ declare class InvalidTxError extends Error {
464
+ error: any;
465
+ constructor(e: any);
466
+ }
479
467
 
480
468
  type StorageApi<D, A extends Record<string, Record<string, {
481
469
  KeyArgs: Array<any>;
@@ -518,6 +506,9 @@ type TypedApi<D extends ChainDefinition> = {
518
506
  constants: ConstApi<D, ConstFromPalletsDef<D["descriptors"]["pallets"]>>;
519
507
  compatibilityToken: Promise<CompatibilityToken<D>>;
520
508
  };
509
+ type TransactionValidityError<D extends ChainDefinition> = (D["descriptors"]["apis"]["TaggedTransactionQueue"]["validate_transaction"][1] & {
510
+ success: false;
511
+ })["value"];
521
512
  interface PolkadotClient {
522
513
  /**
523
514
  * Retrieve the ChainSpecData as it comes from the [JSON-RPC
@@ -654,4 +645,4 @@ type FixedSizeArray<L extends number, T> = Array<T> & {
654
645
  */
655
646
  declare function createClient(provider: JsonRpcProvider): PolkadotClient;
656
647
 
657
- export { type ApisTypedef, type ChainDefinition, type ConstFromPalletsDef, type DescriptorEntry, type ErrorsFromPalletsDef, type EventPhase, type EventsFromPalletsDef, type FixedSizeArray, type PalletsTypedef, type PlainDescriptor, type PolkadotClient, type QueryFromPalletsDef, type RuntimeDescriptor, type StorageDescriptor, type Transaction, type TxBestBlocksState, type TxBroadcastEvent, type TxBroadcasted, type TxCall, type TxDescriptor, type TxEntry, type TxEvent, type TxEventsPayload, type TxFinalized, type TxFinalizedPayload, type TxFromPalletsDef, type TxInBestBlocksFound, type TxInBestBlocksNotFound, type TxObservable, type TxOptions, type TxPromise, type TxSignFn, type TxSigned, type TypedApi, createClient, createTxEntry, submit, submit$ };
648
+ export { type ApisTypedef, type ChainDefinition, type ConstFromPalletsDef, type DescriptorEntry, type ErrorsFromPalletsDef, type EventPhase, type EventsFromPalletsDef, type FixedSizeArray, InvalidTxError, type PalletsTypedef, type PlainDescriptor, type PolkadotClient, type QueryFromPalletsDef, type RuntimeDescriptor, type StorageDescriptor, type Transaction, type TransactionValidityError, type TxBestBlocksState, type TxBroadcastEvent, type TxBroadcasted, type TxCall, type TxDescriptor, type TxEntry, type TxEvent, type TxEventsPayload, type TxFinalized, type TxFinalizedPayload, type TxFromPalletsDef, type TxInBestBlocksFound, type TxInBestBlocksNotFound, type TxObservable, type TxOptions, type TxPromise, type TxSignFn, type TxSigned, type TypedApi, createClient };
package/dist/index.js CHANGED
@@ -10,9 +10,10 @@ var signer = require('@polkadot-api/signer');
10
10
  var metadataBuilders = require('@polkadot-api/metadata-builders');
11
11
 
12
12
  class CompatibilityToken {
13
+ constructor() {
14
+ }
13
15
  // @ts-ignore
14
- constructor(_descriptors) {
15
- this._descriptors = _descriptors;
16
+ _phantom(value) {
16
17
  }
17
18
  }
18
19
  const compatibilityTokenApi = /* @__PURE__ */ new WeakMap();
@@ -91,6 +92,10 @@ const compatibilityHelper = (descriptors, getDescriptorEntryPoint, getRuntimeEnt
91
92
  descriptors,
92
93
  (runtime) => minCompatLevel(getCompatibilityLevels(runtime))
93
94
  );
95
+ const isCompatible = withOptionalToken(
96
+ descriptors,
97
+ (threshold, runtime) => getCompatibilityLevel(runtime) >= threshold
98
+ );
94
99
  const waitDescriptors = () => descriptors;
95
100
  const compatibleRuntime$ = (chainHead, hash) => rxjs.combineLatest([waitDescriptors(), chainHead.getRuntimeContext$(hash)]);
96
101
  const withCompatibleRuntime = (chainHead, mapper) => (source$) => rxjs.combineLatest([
@@ -122,6 +127,7 @@ const compatibilityHelper = (descriptors, getDescriptorEntryPoint, getRuntimeEnt
122
127
  );
123
128
  };
124
129
  return {
130
+ isCompatible,
125
131
  getCompatibilityLevel,
126
132
  getCompatibilityLevels,
127
133
  waitDescriptors,
@@ -133,11 +139,18 @@ const compatibilityHelper = (descriptors, getDescriptorEntryPoint, getRuntimeEnt
133
139
  };
134
140
  };
135
141
  const minCompatLevel = (levels) => Math.min(levels.args, levels.values);
136
- const withOptionalToken = (compatibilityToken, fn) => (runtime) => runtime ? fn(runtime) : compatibilityToken.then(fn);
142
+ const withOptionalToken = (compatibilityToken, fn) => (...args) => {
143
+ const lastElement = args.at(-1);
144
+ if (lastElement instanceof CompatibilityToken) {
145
+ return fn(...args);
146
+ }
147
+ return compatibilityToken.then((token) => fn(...args, token));
148
+ };
137
149
 
138
150
  const createConstantEntry = (palletName, name, {
139
151
  valuesAreCompatible,
140
152
  waitDescriptors,
153
+ isCompatible,
141
154
  getCompatibilityLevel
142
155
  }) => {
143
156
  const cachedResults = /* @__PURE__ */ new WeakMap();
@@ -165,7 +178,7 @@ const createConstantEntry = (palletName, name, {
165
178
  }
166
179
  return waitDescriptors().then(fn);
167
180
  };
168
- return Object.assign(fn, { getCompatibilityLevel });
181
+ return Object.assign(fn, { isCompatible, getCompatibilityLevel });
169
182
  };
170
183
 
171
184
  const shareLatest = rxjs.share({
@@ -350,6 +363,7 @@ const continueWith = (mapper) => (source) => new rxjs.Observable((observer) => {
350
363
  });
351
364
 
352
365
  const createEventEntry = (pallet, name, chainHead, {
366
+ isCompatible,
353
367
  getCompatibilityLevel,
354
368
  withCompatibleRuntime,
355
369
  argsAreCompatible,
@@ -387,7 +401,7 @@ const createEventEntry = (pallet, name, chainHead, {
387
401
  const watch = (f) => shared$.pipe(rxjs.mergeMap((x) => f ? x.filter((d) => f(d.payload)) : x));
388
402
  const pull = () => rxjs.firstValueFrom(shared$);
389
403
  const filter = (events) => events.filter((e) => e.type === pallet && e.value.type === name).map((x) => x.value.value);
390
- return { watch, pull, filter, getCompatibilityLevel };
404
+ return { watch, pull, filter, getCompatibilityLevel, isCompatible };
391
405
  };
392
406
 
393
407
  const isOptionalArg$1 = (lastArg) => {
@@ -397,6 +411,7 @@ const isOptionalArg$1 = (lastArg) => {
397
411
  );
398
412
  };
399
413
  const createRuntimeCallEntry = (api, method, chainHead, {
414
+ isCompatible,
400
415
  getCompatibilityLevel,
401
416
  compatibleRuntime$,
402
417
  argsAreCompatible,
@@ -425,7 +440,7 @@ const createRuntimeCallEntry = (api, method, chainHead, {
425
440
  );
426
441
  return firstValueFromWithSignal(result$, signal);
427
442
  };
428
- return Object.assign(fn, { getCompatibilityLevel });
443
+ return Object.assign(fn, { getCompatibilityLevel, isCompatible });
429
444
  };
430
445
 
431
446
  const isOptionalArg = (lastArg) => {
@@ -435,6 +450,7 @@ const isOptionalArg = (lastArg) => {
435
450
  );
436
451
  };
437
452
  const createStorageEntry = (pallet, name, chainHead, {
453
+ isCompatible,
438
454
  getCompatibilityLevel,
439
455
  getCompatibilityLevels,
440
456
  waitDescriptors,
@@ -556,6 +572,7 @@ const createStorageEntry = (pallet, name, chainHead, {
556
572
  keyArgs.map((args) => getValue(...options ? [...args, options] : args))
557
573
  );
558
574
  return {
575
+ isCompatible,
559
576
  getCompatibilityLevel,
560
577
  getValue,
561
578
  getValues,
@@ -734,6 +751,9 @@ const createTx = (chainHead, signer, callData, atBlock, hinted = {}) => chainHea
734
751
  })
735
752
  );
736
753
 
754
+ var __defProp = Object.defineProperty;
755
+ var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
756
+ var __publicField = (obj, key, value) => __defNormalProp(obj, key + "" , value);
737
757
  const hashFromTx = (tx) => utils.toHex(substrateBindings.Blake2256(utils.fromHex(tx)));
738
758
  const computeState = (analized$, blocks$) => new rxjs.Observable((observer) => {
739
759
  const analyzedBlocks = /* @__PURE__ */ new Map();
@@ -751,20 +771,26 @@ const computeState = (analized$, blocks$) => new rxjs.Observable((observer) => {
751
771
  const analyzedNumber = pinnedBlocks.blocks.get(analyzed.hash).number;
752
772
  const isFinalized = analyzedNumber <= pinnedBlocks.blocks.get(pinnedBlocks.finalized).number;
753
773
  const found = analyzed.found.type;
754
- if (found && typeof latestState === "object" && latestState.hash === analyzed.hash) {
774
+ if (found && latestState?.found && latestState.hash === analyzed.hash) {
755
775
  if (isFinalized) observer.complete();
756
776
  return;
757
777
  }
758
778
  observer.next(
759
- latestState = found ? {
779
+ latestState = analyzed.found.type ? {
780
+ found,
760
781
  hash: analyzed.hash,
761
782
  number: analyzedNumber,
762
- ...analyzed.found
763
- } : analyzed.found.isValid
783
+ index: analyzed.found.index,
784
+ events: analyzed.found.events
785
+ } : {
786
+ found,
787
+ validity: analyzed.found.validity
788
+ }
764
789
  );
765
790
  if (isFinalized) {
766
791
  if (found) observer.complete();
767
- else if (!analyzed.found.isValid) observer.error(new Error("Invalid"));
792
+ else if (analyzed.found.validity?.success === false)
793
+ observer.error(new InvalidTxError(analyzed.found.validity.value));
768
794
  }
769
795
  };
770
796
  const subscription = blocks$.pipe(
@@ -800,6 +826,24 @@ const getTxSuccessFromSystemEvents = (systemEvents, txIdx) => {
800
826
  const ok = lastEvent.type === "System" && lastEvent.value.type === "ExtrinsicSuccess";
801
827
  return { ok, events };
802
828
  };
829
+ class InvalidTxError extends Error {
830
+ // likely to be a `TransactionValidityError`
831
+ constructor(e) {
832
+ super(
833
+ JSON.stringify(
834
+ e,
835
+ (_, value) => {
836
+ if (typeof value === "bigint") return value.toString();
837
+ return value instanceof substrateBindings.Binary ? value.asHex() : value;
838
+ },
839
+ 2
840
+ )
841
+ );
842
+ __publicField(this, "error");
843
+ this.name = "InvalidTxError";
844
+ this.error = e;
845
+ }
846
+ }
803
847
  const submit$ = (chainHead, broadcastTx$, tx, at, emitSign = false) => {
804
848
  const txHash = hashFromTx(tx);
805
849
  const getTxEvent = (type, rest) => ({
@@ -814,9 +858,9 @@ const submit$ = (chainHead, broadcastTx$, tx, at, emitSign = false) => {
814
858
  const validate$ = at$.pipe(
815
859
  rxjs.mergeMap(
816
860
  (at2) => chainHead.validateTx$(at2, tx).pipe(
817
- rxjs.filter((x) => !x),
818
- rxjs.map(() => {
819
- throw new Error("Invalid");
861
+ rxjs.filter((x) => !x.success),
862
+ rxjs.map((x) => {
863
+ throw new InvalidTxError(x.value);
820
864
  })
821
865
  )
822
866
  )
@@ -834,10 +878,10 @@ const submit$ = (chainHead, broadcastTx$, tx, at, emitSign = false) => {
834
878
  });
835
879
  const bestBlockState$ = computeState(track$, chainHead.pinnedBlocks$).pipe(
836
880
  rxjs.map((x) => {
837
- if (x === true || x === false)
881
+ if (!x.found)
838
882
  return getTxEvent("txBestBlocksState", {
839
883
  found: false,
840
- isValid: x
884
+ isValid: x.validity?.success !== false
841
885
  });
842
886
  return getTxEvent("txBestBlocksState", {
843
887
  found: true,
@@ -874,6 +918,7 @@ const queryInfoDec = (input) => queryInfoRawDec(input)[3];
874
918
  const fakeSignature = new Uint8Array(64);
875
919
  const getFakeSignature = () => fakeSignature;
876
920
  const createTxEntry = (pallet, name, chainHead, broadcast, {
921
+ isCompatible: isCompatibleHelper,
877
922
  getCompatibilityLevel,
878
923
  compatibleRuntime$,
879
924
  argsAreCompatible,
@@ -967,7 +1012,10 @@ const createTxEntry = (pallet, name, chainHead, broadcast, {
967
1012
  signAndSubmit
968
1013
  };
969
1014
  };
970
- return Object.assign(fn, { getCompatibilityLevel });
1015
+ return Object.assign(fn, {
1016
+ getCompatibilityLevel,
1017
+ isCompatible: isCompatibleHelper
1018
+ });
971
1019
  };
972
1020
 
973
1021
  const createTypedApi = (compatibilityToken, chainHead, broadcast$) => {
@@ -1134,5 +1182,6 @@ Object.defineProperty(exports, "getSs58AddressInfo", {
1134
1182
  enumerable: true,
1135
1183
  get: function () { return substrateBindings.getSs58AddressInfo; }
1136
1184
  });
1185
+ exports.InvalidTxError = InvalidTxError;
1137
1186
  exports.createClient = createClient;
1138
1187
  //# sourceMappingURL=index.js.map