polkadot-api 1.4.0 → 1.5.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.
package/bin/cli.mjs CHANGED
@@ -1,10 +1,11 @@
1
1
  #!/usr/bin/env node
2
- import { getCli, add, generate, remove, update } from '@polkadot-api/cli';
2
+ import { getCli, add, generate, remove, update, ink } from '@polkadot-api/cli';
3
3
 
4
4
  getCli({
5
5
  add,
6
6
  generate,
7
7
  remove,
8
- update
8
+ update,
9
+ ink
9
10
  }).parse();
10
11
  //# sourceMappingURL=cli.mjs.map
package/bin/cli.mjs.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"cli.mjs","sources":["../src/cli.ts"],"sourcesContent":["#!/usr/bin/env node\n\nimport { add, generate, getCli, remove, update } from \"@polkadot-api/cli\"\n\ngetCli({\n add,\n generate,\n remove,\n update,\n}).parse()\n"],"names":[],"mappings":";;;AAIA,MAAO,CAAA;AAAA,EACL,GAAA;AAAA,EACA,QAAA;AAAA,EACA,MAAA;AAAA,EACA,MAAA;AACF,CAAC,EAAE,KAAM,EAAA"}
1
+ {"version":3,"file":"cli.mjs","sources":["../src/cli.ts"],"sourcesContent":["#!/usr/bin/env node\n\nimport { add, generate, getCli, remove, update, ink } from \"@polkadot-api/cli\"\n\ngetCli({\n add,\n generate,\n remove,\n update,\n ink,\n}).parse()\n"],"names":[],"mappings":";;;AAIA,MAAO,CAAA;AAAA,EACL,GAAA;AAAA,EACA,QAAA;AAAA,EACA,MAAA;AAAA,EACA,MAAA;AAAA,EACA,GAAA;AACF,CAAC,EAAE,KAAM,EAAA"}
@@ -0,0 +1,2 @@
1
+ export { getInkClient } from '@polkadot-api/ink-contracts';
2
+ //# sourceMappingURL=ink.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ink.mjs","sources":[],"sourcesContent":[],"names":[],"mappings":""}
@@ -1,4 +1,4 @@
1
- import { take, mergeMap, combineLatest, of } from 'rxjs';
1
+ import { of, take, mergeMap, combineLatest } from 'rxjs';
2
2
  import { ChargeTransactionPayment } from './signed-extensions/user/ChargeTransactionPayment.mjs';
3
3
  import { CheckMortality } from './signed-extensions/user/CheckMortality.mjs';
4
4
  import { ChargeAssetTxPayment } from './signed-extensions/user/ChargeAssetTxPayment.mjs';
@@ -7,7 +7,24 @@ import { _void } from '@polkadot-api/substrate-bindings';
7
7
  import { empty } from './signed-extensions/utils.mjs';
8
8
  import { getNonce } from './signed-extensions/chain/CheckNonce.mjs';
9
9
 
10
- const createTx = (chainHead, signer, callData, atBlock, hinted = {}) => chainHead.getRuntimeContext$(atBlock.hash).pipe(
10
+ const empty$ = of({
11
+ value: empty,
12
+ additionalSigned: empty
13
+ });
14
+ const getCustomSignExt = (obj, key, encoder) => {
15
+ if (!(key in obj)) return empty;
16
+ const x = obj[key];
17
+ return x instanceof Uint8Array ? x : encoder(x);
18
+ };
19
+ const getEncodedSignExtFromCustom = (custom, valueEnc, additionalSignedEnc) => of({
20
+ value: getCustomSignExt(custom, "value", valueEnc),
21
+ additionalSigned: getCustomSignExt(
22
+ custom,
23
+ "additionalSigned",
24
+ additionalSignedEnc
25
+ )
26
+ });
27
+ const createTx = (chainHead, signer, callData, atBlock, customSignedExtensions, hinted = {}) => chainHead.getRuntimeContext$(atBlock.hash).pipe(
11
28
  take(1),
12
29
  mergeMap((ctx) => {
13
30
  const signedExtensionsCtx = {
@@ -19,28 +36,24 @@ const createTx = (chainHead, signer, callData, atBlock, hinted = {}) => chainHea
19
36
  };
20
37
  const mortality = !hinted.mortality ? { period: 64, blockNumber: atBlock.number } : hinted.mortality.mortal ? { period: hinted.mortality.period, blockNumber: atBlock.number } : void 0;
21
38
  return combineLatest(
22
- ctx.lookup.metadata.extrinsic.signedExtensions.map(
23
- ({ identifier, type, additionalSigned }) => {
24
- if (identifier === "CheckMortality")
25
- return CheckMortality(mortality, signedExtensionsCtx);
26
- if (identifier === "ChargeTransactionPayment")
27
- return ChargeTransactionPayment(hinted.tip ?? 0n);
28
- if (identifier === "ChargeAssetTxPayment")
29
- return ChargeAssetTxPayment(hinted.tip ?? 0n, hinted.asset);
30
- if (identifier === "CheckNonce" && "nonce" in hinted)
31
- return getNonce(hinted.nonce);
32
- const fn = index[identifier];
33
- if (!fn) {
34
- if (ctx.dynamicBuilder.buildDefinition(type) === _void && ctx.dynamicBuilder.buildDefinition(additionalSigned) === _void)
35
- return of({
36
- value: empty,
37
- additionalSigned: empty
38
- });
39
- throw new Error(`Unsupported signed-extension: ${identifier}`);
40
- }
41
- return fn(signedExtensionsCtx);
42
- }
43
- )
39
+ ctx.lookup.metadata.extrinsic.signedExtensions.map(({ identifier, type, additionalSigned }) => {
40
+ if (identifier === "CheckMortality")
41
+ return CheckMortality(mortality, signedExtensionsCtx);
42
+ if (identifier === "ChargeTransactionPayment")
43
+ return ChargeTransactionPayment(hinted.tip ?? 0n);
44
+ if (identifier === "ChargeAssetTxPayment")
45
+ return ChargeAssetTxPayment(hinted.tip ?? 0n, hinted.asset);
46
+ if (identifier === "CheckNonce" && "nonce" in hinted)
47
+ return getNonce(hinted.nonce);
48
+ const fn = index[identifier];
49
+ const [valueEnc] = ctx.dynamicBuilder.buildDefinition(type);
50
+ const [additionalSignedEnc] = ctx.dynamicBuilder.buildDefinition(additionalSigned);
51
+ return fn ? fn(signedExtensionsCtx) : valueEnc === _void[0] && additionalSignedEnc === _void[0] ? empty$ : identifier in customSignedExtensions ? getEncodedSignExtFromCustom(
52
+ customSignedExtensions[identifier],
53
+ valueEnc,
54
+ additionalSignedEnc
55
+ ) : null;
56
+ }).filter((x) => !!x)
44
57
  ).pipe(
45
58
  mergeMap(
46
59
  (signedExtensions) => signer.signTx(
@@ -1 +1 @@
1
- {"version":3,"file":"create-tx.mjs","sources":["../../../src/tx/create-tx.ts"],"sourcesContent":["import { Observable, combineLatest, mergeMap, of, take } from \"rxjs\"\nimport { BlockInfo, ChainHead$ } from \"@polkadot-api/observable-client\"\nimport {\n ChargeAssetTxPayment,\n ChargeTransactionPayment,\n CheckMortality,\n} from \"./signed-extensions/user\"\nimport * as chainSignedExtensions from \"./signed-extensions/chain\"\nimport type { PolkadotSigner } from \"@polkadot-api/polkadot-signer\"\nimport { _void } from \"@polkadot-api/substrate-bindings\"\nimport { empty } from \"./signed-extensions/utils\"\n\ntype HintedSignedExtensions = Partial<{\n tip: bigint\n mortality: { mortal: false } | { mortal: true; period: number }\n asset: Uint8Array\n nonce: number\n}>\n\nexport const createTx: (\n chainHead: ChainHead$,\n signer: PolkadotSigner,\n callData: Uint8Array,\n atBlock: BlockInfo,\n hinted?: HintedSignedExtensions,\n) => Observable<Uint8Array> = (\n chainHead,\n signer,\n callData,\n atBlock,\n hinted = {},\n) =>\n chainHead.getRuntimeContext$(atBlock.hash).pipe(\n take(1),\n mergeMap((ctx) => {\n const signedExtensionsCtx = {\n lookupFn: ctx.lookup,\n chainHead: chainHead,\n callData: callData,\n at: atBlock.hash,\n from: signer.publicKey,\n }\n\n const mortality: Parameters<typeof CheckMortality>[0] = !hinted.mortality\n ? { period: 64, blockNumber: atBlock.number }\n : hinted.mortality.mortal\n ? { period: hinted.mortality.period, blockNumber: atBlock.number }\n : undefined // immortal\n\n return combineLatest(\n ctx.lookup.metadata.extrinsic.signedExtensions.map(\n ({ identifier, type, additionalSigned }) => {\n if (identifier === \"CheckMortality\")\n return CheckMortality(mortality, signedExtensionsCtx)\n\n if (identifier === \"ChargeTransactionPayment\")\n return ChargeTransactionPayment(hinted.tip ?? 0n)\n\n if (identifier === \"ChargeAssetTxPayment\")\n return ChargeAssetTxPayment(hinted.tip ?? 0n, hinted.asset)\n\n if (identifier === \"CheckNonce\" && \"nonce\" in hinted)\n return chainSignedExtensions.getNonce(hinted.nonce!)\n\n const fn = chainSignedExtensions[identifier as \"CheckGenesis\"]\n if (!fn) {\n if (\n ctx.dynamicBuilder.buildDefinition(type) === _void &&\n ctx.dynamicBuilder.buildDefinition(additionalSigned) === _void\n )\n return of({\n value: empty,\n additionalSigned: empty,\n })\n\n throw new Error(`Unsupported signed-extension: ${identifier}`)\n }\n return fn(signedExtensionsCtx)\n },\n ),\n ).pipe(\n mergeMap((signedExtensions) =>\n signer.signTx(\n callData,\n Object.fromEntries(\n ctx.lookup.metadata.extrinsic.signedExtensions.map(\n ({ identifier }, idx) => [\n identifier,\n { identifier, ...signedExtensions[idx] },\n ],\n ),\n ),\n ctx.metadataRaw,\n atBlock.number,\n ),\n ),\n )\n }),\n )\n"],"names":["chainSignedExtensions.getNonce","chainSignedExtensions"],"mappings":";;;;;;;;;AAmBO,MAAM,QAMiB,GAAA,CAC5B,SACA,EAAA,MAAA,EACA,QACA,EAAA,OAAA,EACA,MAAS,GAAA,EAET,KAAA,SAAA,CAAU,kBAAmB,CAAA,OAAA,CAAQ,IAAI,CAAE,CAAA,IAAA;AAAA,EACzC,KAAK,CAAC,CAAA;AAAA,EACN,QAAA,CAAS,CAAC,GAAQ,KAAA;AAChB,IAAA,MAAM,mBAAsB,GAAA;AAAA,MAC1B,UAAU,GAAI,CAAA,MAAA;AAAA,MACd,SAAA;AAAA,MACA,QAAA;AAAA,MACA,IAAI,OAAQ,CAAA,IAAA;AAAA,MACZ,MAAM,MAAO,CAAA,SAAA;AAAA,KACf,CAAA;AAEA,IAAM,MAAA,SAAA,GAAkD,CAAC,MAAO,CAAA,SAAA,GAC5D,EAAE,MAAQ,EAAA,EAAA,EAAI,WAAa,EAAA,OAAA,CAAQ,MAAO,EAAA,GAC1C,OAAO,SAAU,CAAA,MAAA,GACf,EAAE,MAAQ,EAAA,MAAA,CAAO,UAAU,MAAQ,EAAA,WAAA,EAAa,OAAQ,CAAA,MAAA,EACxD,GAAA,KAAA,CAAA,CAAA;AAEN,IAAO,OAAA,aAAA;AAAA,MACL,GAAI,CAAA,MAAA,CAAO,QAAS,CAAA,SAAA,CAAU,gBAAiB,CAAA,GAAA;AAAA,QAC7C,CAAC,EAAE,UAAY,EAAA,IAAA,EAAM,kBAAuB,KAAA;AAC1C,UAAA,IAAI,UAAe,KAAA,gBAAA;AACjB,YAAO,OAAA,cAAA,CAAe,WAAW,mBAAmB,CAAA,CAAA;AAEtD,UAAA,IAAI,UAAe,KAAA,0BAAA;AACjB,YAAO,OAAA,wBAAA,CAAyB,MAAO,CAAA,GAAA,IAAO,EAAE,CAAA,CAAA;AAElD,UAAA,IAAI,UAAe,KAAA,sBAAA;AACjB,YAAA,OAAO,oBAAqB,CAAA,MAAA,CAAO,GAAO,IAAA,EAAA,EAAI,OAAO,KAAK,CAAA,CAAA;AAE5D,UAAI,IAAA,UAAA,KAAe,gBAAgB,OAAW,IAAA,MAAA;AAC5C,YAAO,OAAAA,QAA+B,CAAA,MAAA,CAAO,KAAM,CAAA,CAAA;AAErD,UAAM,MAAA,EAAA,GAAKC,MAAsB,UAA4B,CAAA,CAAA;AAC7D,UAAA,IAAI,CAAC,EAAI,EAAA;AACP,YACE,IAAA,GAAA,CAAI,cAAe,CAAA,eAAA,CAAgB,IAAI,CAAA,KAAM,SAC7C,GAAI,CAAA,cAAA,CAAe,eAAgB,CAAA,gBAAgB,CAAM,KAAA,KAAA;AAEzD,cAAA,OAAO,EAAG,CAAA;AAAA,gBACR,KAAO,EAAA,KAAA;AAAA,gBACP,gBAAkB,EAAA,KAAA;AAAA,eACnB,CAAA,CAAA;AAEH,YAAA,MAAM,IAAI,KAAA,CAAM,CAAiC,8BAAA,EAAA,UAAU,CAAE,CAAA,CAAA,CAAA;AAAA,WAC/D;AACA,UAAA,OAAO,GAAG,mBAAmB,CAAA,CAAA;AAAA,SAC/B;AAAA,OACF;AAAA,KACA,CAAA,IAAA;AAAA,MACA,QAAA;AAAA,QAAS,CAAC,qBACR,MAAO,CAAA,MAAA;AAAA,UACL,QAAA;AAAA,UACA,MAAO,CAAA,WAAA;AAAA,YACL,GAAI,CAAA,MAAA,CAAO,QAAS,CAAA,SAAA,CAAU,gBAAiB,CAAA,GAAA;AAAA,cAC7C,CAAC,EAAE,UAAW,EAAA,EAAG,GAAQ,KAAA;AAAA,gBACvB,UAAA;AAAA,gBACA,EAAE,UAAA,EAAY,GAAG,gBAAA,CAAiB,GAAG,CAAE,EAAA;AAAA,eACzC;AAAA,aACF;AAAA,WACF;AAAA,UACA,GAAI,CAAA,WAAA;AAAA,UACJ,OAAQ,CAAA,MAAA;AAAA,SACV;AAAA,OACF;AAAA,KACF,CAAA;AAAA,GACD,CAAA;AACH;;;;"}
1
+ {"version":3,"file":"create-tx.mjs","sources":["../../../src/tx/create-tx.ts"],"sourcesContent":["import { Observable, combineLatest, mergeMap, of, take } from \"rxjs\"\nimport { BlockInfo, ChainHead$ } from \"@polkadot-api/observable-client\"\nimport {\n ChargeAssetTxPayment,\n ChargeTransactionPayment,\n CheckMortality,\n} from \"./signed-extensions/user\"\nimport * as chainSignedExtensions from \"./signed-extensions/chain\"\nimport type { PolkadotSigner } from \"@polkadot-api/polkadot-signer\"\nimport { _void, Encoder } from \"@polkadot-api/substrate-bindings\"\nimport { empty } from \"./signed-extensions/utils\"\nimport { CustomSignedExtensionValues } from \"./types\"\n\ntype HintedSignedExtensions = Partial<{\n tip: bigint\n mortality: { mortal: false } | { mortal: true; period: number }\n asset: Uint8Array\n nonce: number\n}>\n\nconst empty$ = of({\n value: empty,\n additionalSigned: empty,\n})\n\nconst getCustomSignExt = <T extends Record<string, any>>(\n obj: T,\n key: string,\n encoder: Encoder<any>,\n) => {\n if (!(key in obj)) return empty\n const x = obj[key] as any\n return x instanceof Uint8Array ? x : encoder(x)\n}\n\nconst getEncodedSignExtFromCustom = (\n custom: CustomSignedExtensionValues,\n valueEnc: Encoder<any>,\n additionalSignedEnc: Encoder<any>,\n) =>\n of({\n value: getCustomSignExt(custom, \"value\", valueEnc),\n additionalSigned: getCustomSignExt(\n custom,\n \"additionalSigned\",\n additionalSignedEnc,\n ),\n })\n\nexport const createTx: (\n chainHead: ChainHead$,\n signer: PolkadotSigner,\n callData: Uint8Array,\n atBlock: BlockInfo,\n customSignExt: Record<string, CustomSignedExtensionValues>,\n hinted?: HintedSignedExtensions,\n) => Observable<Uint8Array> = (\n chainHead,\n signer,\n callData,\n atBlock,\n customSignedExtensions,\n hinted = {},\n) =>\n chainHead.getRuntimeContext$(atBlock.hash).pipe(\n take(1),\n mergeMap((ctx) => {\n const signedExtensionsCtx = {\n lookupFn: ctx.lookup,\n chainHead: chainHead,\n callData: callData,\n at: atBlock.hash,\n from: signer.publicKey,\n }\n\n const mortality: Parameters<typeof CheckMortality>[0] = !hinted.mortality\n ? { period: 64, blockNumber: atBlock.number }\n : hinted.mortality.mortal\n ? { period: hinted.mortality.period, blockNumber: atBlock.number }\n : undefined // immortal\n\n return combineLatest(\n ctx.lookup.metadata.extrinsic.signedExtensions\n .map(({ identifier, type, additionalSigned }) => {\n if (identifier === \"CheckMortality\")\n return CheckMortality(mortality, signedExtensionsCtx)\n\n if (identifier === \"ChargeTransactionPayment\")\n return ChargeTransactionPayment(hinted.tip ?? 0n)\n\n if (identifier === \"ChargeAssetTxPayment\")\n return ChargeAssetTxPayment(hinted.tip ?? 0n, hinted.asset)\n\n if (identifier === \"CheckNonce\" && \"nonce\" in hinted)\n return chainSignedExtensions.getNonce(hinted.nonce!)\n\n const fn = chainSignedExtensions[identifier as \"CheckGenesis\"]\n const [valueEnc] = ctx.dynamicBuilder.buildDefinition(type)\n const [additionalSignedEnc] =\n ctx.dynamicBuilder.buildDefinition(additionalSigned)\n return fn\n ? fn(signedExtensionsCtx)\n : valueEnc === _void[0] && additionalSignedEnc === _void[0]\n ? empty$\n : identifier in customSignedExtensions\n ? getEncodedSignExtFromCustom(\n customSignedExtensions[identifier],\n valueEnc,\n additionalSignedEnc,\n )\n : null\n })\n .filter((x) => !!x),\n ).pipe(\n mergeMap((signedExtensions) =>\n signer.signTx(\n callData,\n Object.fromEntries(\n ctx.lookup.metadata.extrinsic.signedExtensions.map(\n ({ identifier }, idx) => [\n identifier,\n { identifier, ...signedExtensions[idx] },\n ],\n ),\n ),\n ctx.metadataRaw,\n atBlock.number,\n ),\n ),\n )\n }),\n )\n"],"names":["chainSignedExtensions.getNonce","chainSignedExtensions"],"mappings":"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"}
@@ -61,7 +61,14 @@ const createTxEntry = (pallet, name, chainHead, broadcast, {
61
61
  };
62
62
  const sign$ = (from, { ..._options }, atBlock) => getCallData$(arg, _options).pipe(
63
63
  mergeMap(
64
- ({ callData, options }) => createTx(chainHead, from, callData.asBytes(), atBlock, options)
64
+ ({ callData, options }) => createTx(
65
+ chainHead,
66
+ from,
67
+ callData.asBytes(),
68
+ atBlock,
69
+ _options.customSignedExtensions || {},
70
+ options
71
+ )
65
72
  )
66
73
  );
67
74
  const _sign = (from, { at, ..._options } = {}) => {
@@ -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 Decoder,\n Enum,\n SS58String,\n u32,\n} from \"@polkadot-api/substrate-bindings\"\nimport { fromHex, mergeUint8, toHex } from \"@polkadot-api/utils\"\nimport {\n Observable,\n combineLatest,\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 RuntimeToken,\n} from \"../compatibility\"\nimport { createTx } from \"./create-tx\"\nimport { InvalidTxError, submit, submit$ } from \"./submit-fns\"\nimport {\n PaymentInfo,\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 fakeSignature = new Uint8Array(64)\nconst getFakeSignature = () => fakeSignature\n\nexport const createTxEntry = <\n D,\n Arg extends {} | undefined,\n Pallet extends string,\n Name extends string,\n Asset extends PlainDescriptor<any>,\n>(\n pallet: Pallet,\n name: Name,\n chainHead: ReturnType<ReturnType<typeof getObservableClient>[\"chainHead$\"]>,\n broadcast: (tx: string) => Observable<never>,\n {\n isCompatible: isCompatibleHelper,\n getCompatibilityLevel,\n compatibleRuntime$,\n argsAreCompatible,\n getRuntimeTypedef,\n }: CompatibilityHelper,\n checkCompatibility: boolean,\n): TxEntry<D, Arg, Pallet, Name, Asset> => {\n const fn = (arg?: Arg): any => {\n const getCallDataWithContext = (\n runtime: CompatibilityToken | RuntimeToken,\n arg: any,\n txOptions: Partial<{ asset: any }> = {},\n ) => {\n const ctx = getCompatibilityApi(runtime).runtime()\n const { dynamicBuilder, assetId, lookup } = ctx\n let codecs\n try {\n codecs = dynamicBuilder.buildCall(pallet, name)\n } catch {\n throw new Error(`Runtime entry Tx(${pallet}.${name}) not found`)\n }\n if (checkCompatibility && !argsAreCompatible(runtime, ctx, arg))\n throw new Error(`Incompatible runtime entry Tx(${pallet}.${name})`)\n\n let returnOptions = txOptions\n if (txOptions.asset) {\n if (\n assetId == null ||\n !isCompatible(\n txOptions.asset,\n mapLookupToTypedef(lookup(assetId)),\n (id) => getRuntimeTypedef(ctx, id),\n )\n )\n throw new Error(`Incompatible runtime asset`)\n returnOptions = {\n ...txOptions,\n asset: dynamicBuilder.buildDefinition(assetId).enc(txOptions.asset),\n }\n }\n\n const { location, codec } = codecs\n return {\n callData: Binary.fromBytes(\n mergeUint8(new Uint8Array(location), codec.enc(arg)),\n ),\n options: returnOptions,\n }\n }\n\n const getCallData$ = (arg: any, options: Partial<{ asset: any }> = {}) =>\n compatibleRuntime$(chainHead, null).pipe(\n map(([runtime]) => getCallDataWithContext(runtime, arg, options)),\n )\n\n const getEncodedData: TxCall = (\n token?: CompatibilityToken | RuntimeToken,\n ): any => {\n if (!token)\n return firstValueFrom(getCallData$(arg).pipe(map((x) => x.callData)))\n\n return getCallDataWithContext(token, 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 getPaymentInfo = 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 const decoder$: Observable<Decoder<PaymentInfo>> = chainHead\n .getRuntimeContext$(null)\n .pipe(\n map(\n ({ dynamicBuilder: { buildRuntimeCall } }) =>\n buildRuntimeCall(\"TransactionPaymentApi\", \"query_info\").value[1],\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 getEstimatedFees = async (\n from: Uint8Array | SS58String,\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 as any),\n },\n getEncodedData,\n sign,\n signSubmitAndWatch,\n signAndSubmit,\n }\n }\n\n return Object.assign(fn, {\n getCompatibilityLevel,\n isCompatible: isCompatibleHelper,\n })\n}\n"],"names":["arg"],"mappings":"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"}
1
+ {"version":3,"file":"tx.mjs","sources":["../../../src/tx/tx.ts"],"sourcesContent":["import { BlockInfo, getObservableClient } from \"@polkadot-api/observable-client\"\nimport { PolkadotSigner } from \"@polkadot-api/polkadot-signer\"\nimport { getPolkadotSigner } from \"@polkadot-api/signer\"\nimport {\n AccountId,\n Binary,\n Decoder,\n Enum,\n SS58String,\n u32,\n} from \"@polkadot-api/substrate-bindings\"\nimport { fromHex, mergeUint8, toHex } from \"@polkadot-api/utils\"\nimport {\n Observable,\n combineLatest,\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 RuntimeToken,\n} from \"../compatibility\"\nimport { createTx } from \"./create-tx\"\nimport { InvalidTxError, submit, submit$ } from \"./submit-fns\"\nimport {\n PaymentInfo,\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 fakeSignature = new Uint8Array(64)\nconst getFakeSignature = () => fakeSignature\n\nexport const createTxEntry = <\n D,\n Arg extends {} | undefined,\n Pallet extends string,\n Name extends string,\n Asset extends PlainDescriptor<any>,\n>(\n pallet: Pallet,\n name: Name,\n chainHead: ReturnType<ReturnType<typeof getObservableClient>[\"chainHead$\"]>,\n broadcast: (tx: string) => Observable<never>,\n {\n isCompatible: isCompatibleHelper,\n getCompatibilityLevel,\n compatibleRuntime$,\n argsAreCompatible,\n getRuntimeTypedef,\n }: CompatibilityHelper,\n checkCompatibility: boolean,\n): TxEntry<D, Arg, Pallet, Name, Asset> => {\n const fn = (arg?: Arg): any => {\n const getCallDataWithContext = (\n runtime: CompatibilityToken | RuntimeToken,\n arg: any,\n txOptions: Partial<{ asset: any }> = {},\n ) => {\n const ctx = getCompatibilityApi(runtime).runtime()\n const { dynamicBuilder, assetId, lookup } = ctx\n let codecs\n try {\n codecs = dynamicBuilder.buildCall(pallet, name)\n } catch {\n throw new Error(`Runtime entry Tx(${pallet}.${name}) not found`)\n }\n if (checkCompatibility && !argsAreCompatible(runtime, ctx, arg))\n throw new Error(`Incompatible runtime entry Tx(${pallet}.${name})`)\n\n let returnOptions = txOptions\n if (txOptions.asset) {\n if (\n assetId == null ||\n !isCompatible(\n txOptions.asset,\n mapLookupToTypedef(lookup(assetId)),\n (id) => getRuntimeTypedef(ctx, id),\n )\n )\n throw new Error(`Incompatible runtime asset`)\n returnOptions = {\n ...txOptions,\n asset: dynamicBuilder.buildDefinition(assetId).enc(txOptions.asset),\n }\n }\n\n const { location, codec } = codecs\n return {\n callData: Binary.fromBytes(\n mergeUint8(new Uint8Array(location), codec.enc(arg)),\n ),\n options: returnOptions,\n }\n }\n\n const getCallData$ = (arg: any, options: Partial<{ asset: any }> = {}) =>\n compatibleRuntime$(chainHead, null).pipe(\n map(([runtime]) => getCallDataWithContext(runtime, arg, options)),\n )\n\n const getEncodedData: TxCall = (\n token?: CompatibilityToken | RuntimeToken,\n ): any => {\n if (!token)\n return firstValueFrom(getCallData$(arg).pipe(map((x) => x.callData)))\n\n return getCallDataWithContext(token, 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(\n chainHead,\n from,\n callData.asBytes(),\n atBlock,\n _options.customSignedExtensions || {},\n options,\n ),\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 getPaymentInfo = 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 const decoder$: Observable<Decoder<PaymentInfo>> = chainHead\n .getRuntimeContext$(null)\n .pipe(\n map(\n ({ dynamicBuilder: { buildRuntimeCall } }) =>\n buildRuntimeCall(\"TransactionPaymentApi\", \"query_info\").value[1],\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 getEstimatedFees = async (\n from: Uint8Array | SS58String,\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 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
@@ -359,6 +359,14 @@ type TxFinalized = {
359
359
  type TxFinalizedPayload = {
360
360
  txHash: HexString;
361
361
  } & TxEventsPayload;
362
+ type CustomSignedExtensionValues = {
363
+ value: any;
364
+ additionalSigned: any;
365
+ } | {
366
+ value: any;
367
+ } | {
368
+ additionalSigned: any;
369
+ };
362
370
  type TxOptions<Asset> = Partial<void extends Asset ? {
363
371
  /**
364
372
  * Block to target the transaction against. Default: `"finalized"`
@@ -382,6 +390,17 @@ type TxOptions<Asset> = Partial<void extends Asset ? {
382
390
  * finalized block.
383
391
  */
384
392
  nonce: number;
393
+ /**
394
+ * Custom values for chains that have custom signed-extensions.
395
+ * The key of the Object should be the signed-extension name and the
396
+ * value is an Object that accepts 2 possible keys: one for `value`
397
+ * and the other one for `additionallySigned`. They both receive either
398
+ * the encoded value as a `Uint8Array` that should be used for the
399
+ * signed-extension, or the decoded value that PAPI will encode using
400
+ * its dynamic codecs. At least one of the 2 values must be included
401
+ * into the signed-extension Object.
402
+ */
403
+ customSignedExtensions: Record<string, CustomSignedExtensionValues>;
385
404
  } : {
386
405
  /**
387
406
  * Block to target the transaction against. Default: `"finalized"`
@@ -410,6 +429,17 @@ type TxOptions<Asset> = Partial<void extends Asset ? {
410
429
  * finalized block.
411
430
  */
412
431
  nonce: number;
432
+ /**
433
+ * Custom values for chains that have custom signed-extensions.
434
+ * The key of the Object should be the signed-extension name and the
435
+ * value is an Object that accepts 2 possible keys: one for `value`
436
+ * and the other one for `additionallySigned`. They both receive either
437
+ * the encoded value as a `Uint8Array` that should be used for the
438
+ * signed-extension, or the decoded value that PAPI will encode using
439
+ * its dynamic codecs. At least one of the 2 values must be included
440
+ * into the signed-extension Object.
441
+ */
442
+ customSignedExtensions: Record<string, CustomSignedExtensionValues>;
413
443
  }>;
414
444
  type TxPromise<Asset> = (from: PolkadotSigner, txOptions?: TxOptions<Asset>) => Promise<TxFinalizedPayload>;
415
445
  type TxObservable<Asset> = (from: PolkadotSigner, txOptions?: TxOptions<Asset>) => Observable<TxEvent>;
@@ -798,4 +828,4 @@ type TxCallData = {
798
828
  */
799
829
  declare function createClient(provider: JsonRpcProvider): PolkadotClient;
800
830
 
801
- export { type ApisTypedef, type ChainDefinition, CompatibilityToken, 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 TxCallData, 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, type UnsafeTransaction, type UnsafeTxCall, type UnsafeTxEntry, createClient };
831
+ export { type ApisTypedef, type ChainDefinition, CompatibilityToken, type ConstFromPalletsDef, type DescriptorEntry, type ErrorsFromPalletsDef, type EventPhase, type EventsFromPalletsDef, type FixedSizeArray, InvalidTxError, type PalletsTypedef, type PlainDescriptor, type PolkadotClient, type QueryFromPalletsDef, type RuntimeDescriptor, RuntimeToken, type StorageDescriptor, type Transaction, type TransactionValidityError, type TxBestBlocksState, type TxBroadcastEvent, type TxBroadcasted, type TxCall, type TxCallData, 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, type UnsafeTransaction, type UnsafeTxCall, type UnsafeTxEntry, createClient };
package/dist/index.js CHANGED
@@ -741,7 +741,24 @@ var chainSignedExtensions = /*#__PURE__*/Object.freeze({
741
741
  getNonce: getNonce
742
742
  });
743
743
 
744
- const createTx = (chainHead, signer, callData, atBlock, hinted = {}) => chainHead.getRuntimeContext$(atBlock.hash).pipe(
744
+ const empty$ = rxjs.of({
745
+ value: empty,
746
+ additionalSigned: empty
747
+ });
748
+ const getCustomSignExt = (obj, key, encoder) => {
749
+ if (!(key in obj)) return empty;
750
+ const x = obj[key];
751
+ return x instanceof Uint8Array ? x : encoder(x);
752
+ };
753
+ const getEncodedSignExtFromCustom = (custom, valueEnc, additionalSignedEnc) => rxjs.of({
754
+ value: getCustomSignExt(custom, "value", valueEnc),
755
+ additionalSigned: getCustomSignExt(
756
+ custom,
757
+ "additionalSigned",
758
+ additionalSignedEnc
759
+ )
760
+ });
761
+ const createTx = (chainHead, signer, callData, atBlock, customSignedExtensions, hinted = {}) => chainHead.getRuntimeContext$(atBlock.hash).pipe(
745
762
  rxjs.take(1),
746
763
  rxjs.mergeMap((ctx) => {
747
764
  const signedExtensionsCtx = {
@@ -753,28 +770,24 @@ const createTx = (chainHead, signer, callData, atBlock, hinted = {}) => chainHea
753
770
  };
754
771
  const mortality = !hinted.mortality ? { period: 64, blockNumber: atBlock.number } : hinted.mortality.mortal ? { period: hinted.mortality.period, blockNumber: atBlock.number } : void 0;
755
772
  return rxjs.combineLatest(
756
- ctx.lookup.metadata.extrinsic.signedExtensions.map(
757
- ({ identifier, type, additionalSigned }) => {
758
- if (identifier === "CheckMortality")
759
- return CheckMortality(mortality, signedExtensionsCtx);
760
- if (identifier === "ChargeTransactionPayment")
761
- return ChargeTransactionPayment(hinted.tip ?? 0n);
762
- if (identifier === "ChargeAssetTxPayment")
763
- return ChargeAssetTxPayment(hinted.tip ?? 0n, hinted.asset);
764
- if (identifier === "CheckNonce" && "nonce" in hinted)
765
- return getNonce(hinted.nonce);
766
- const fn = chainSignedExtensions[identifier];
767
- if (!fn) {
768
- if (ctx.dynamicBuilder.buildDefinition(type) === substrateBindings._void && ctx.dynamicBuilder.buildDefinition(additionalSigned) === substrateBindings._void)
769
- return rxjs.of({
770
- value: empty,
771
- additionalSigned: empty
772
- });
773
- throw new Error(`Unsupported signed-extension: ${identifier}`);
774
- }
775
- return fn(signedExtensionsCtx);
776
- }
777
- )
773
+ ctx.lookup.metadata.extrinsic.signedExtensions.map(({ identifier, type, additionalSigned }) => {
774
+ if (identifier === "CheckMortality")
775
+ return CheckMortality(mortality, signedExtensionsCtx);
776
+ if (identifier === "ChargeTransactionPayment")
777
+ return ChargeTransactionPayment(hinted.tip ?? 0n);
778
+ if (identifier === "ChargeAssetTxPayment")
779
+ return ChargeAssetTxPayment(hinted.tip ?? 0n, hinted.asset);
780
+ if (identifier === "CheckNonce" && "nonce" in hinted)
781
+ return getNonce(hinted.nonce);
782
+ const fn = chainSignedExtensions[identifier];
783
+ const [valueEnc] = ctx.dynamicBuilder.buildDefinition(type);
784
+ const [additionalSignedEnc] = ctx.dynamicBuilder.buildDefinition(additionalSigned);
785
+ return fn ? fn(signedExtensionsCtx) : valueEnc === substrateBindings._void[0] && additionalSignedEnc === substrateBindings._void[0] ? empty$ : identifier in customSignedExtensions ? getEncodedSignExtFromCustom(
786
+ customSignedExtensions[identifier],
787
+ valueEnc,
788
+ additionalSignedEnc
789
+ ) : null;
790
+ }).filter((x) => !!x)
778
791
  ).pipe(
779
792
  rxjs.mergeMap(
780
793
  (signedExtensions) => signer.signTx(
@@ -1019,7 +1032,14 @@ const createTxEntry = (pallet, name, chainHead, broadcast, {
1019
1032
  };
1020
1033
  const sign$ = (from, { ..._options }, atBlock) => getCallData$(arg, _options).pipe(
1021
1034
  rxjs.mergeMap(
1022
- ({ callData, options }) => createTx(chainHead, from, callData.asBytes(), atBlock, options)
1035
+ ({ callData, options }) => createTx(
1036
+ chainHead,
1037
+ from,
1038
+ callData.asBytes(),
1039
+ atBlock,
1040
+ _options.customSignedExtensions || {},
1041
+ options
1042
+ )
1023
1043
  )
1024
1044
  );
1025
1045
  const _sign = (from, { at, ..._options } = {}) => {