polkadot-api 1.21.2 → 1.23.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,7 +1,7 @@
1
1
  #!/usr/bin/env node
2
2
  import { getCli, ink, update, remove, generate, add } from '@polkadot-api/cli';
3
3
 
4
- var version = "1.21.2";
4
+ var version = "1.23.0";
5
5
 
6
6
  getCli({
7
7
  add,
@@ -1,5 +1,5 @@
1
1
  import { getPolkadotSigner } from '@polkadot-api/signer';
2
- import { AccountId, Struct, u128, Variant, _void, compactBn, Enum, u32, Binary } from '@polkadot-api/substrate-bindings';
2
+ import { AccountId, Struct, u128, Variant, _void, compactBn, Enum, u32, Binary, compact } from '@polkadot-api/substrate-bindings';
3
3
  import { toHex, fromHex, mergeUint8 } from '@polkadot-api/utils';
4
4
  import { firstValueFrom, mergeMap, map, take, throwError, combineLatest } from 'rxjs';
5
5
  import { getCompatibilityApi } from '../compatibility.mjs';
@@ -34,7 +34,7 @@ const createTxEntry = (pallet, name, chainHead, broadcast, {
34
34
  const fn = (arg) => {
35
35
  const getCallDataWithContext = (runtime, arg2, txOptions = {}) => {
36
36
  const ctx = getCompatibilityApi(runtime).runtime();
37
- const { dynamicBuilder, assetId, lookup } = ctx;
37
+ const { dynamicBuilder, assetId, lookup, extVersions } = ctx;
38
38
  let codecs;
39
39
  try {
40
40
  codecs = dynamicBuilder.buildCall(pallet, name);
@@ -57,9 +57,15 @@ const createTxEntry = (pallet, name, chainHead, broadcast, {
57
57
  };
58
58
  }
59
59
  const { location, codec } = codecs;
60
+ const callData = mergeUint8([new Uint8Array(location), codec.enc(arg2)]);
60
61
  return {
61
- callData: Binary.fromBytes(
62
- mergeUint8([new Uint8Array(location), codec.enc(arg2)])
62
+ callData: Binary.fromBytes(callData),
63
+ bare: toHex(
64
+ mergeUint8(
65
+ compact.enc(callData.length + 1),
66
+ new Uint8Array(extVersions.slice(-1)),
67
+ callData
68
+ )
63
69
  ),
64
70
  options: returnOptions
65
71
  };
@@ -72,6 +78,11 @@ const createTxEntry = (pallet, name, chainHead, broadcast, {
72
78
  return firstValueFrom(getCallData$(arg).pipe(map((x) => x.callData)));
73
79
  return getCallDataWithContext(token, arg).callData;
74
80
  };
81
+ const getBareTx = (token) => {
82
+ if (!token)
83
+ return firstValueFrom(getCallData$(arg).pipe(map((x) => x.bare)));
84
+ return getCallDataWithContext(token, arg).bare;
85
+ };
75
86
  const sign$ = (from, { ..._options }, atBlock) => getCallData$(arg, _options).pipe(
76
87
  mergeMap(
77
88
  ({ callData, options }) => createTx(
@@ -149,6 +160,7 @@ const createTxEntry = (pallet, name, chainHead, broadcast, {
149
160
  value: Enum(name, arg)
150
161
  },
151
162
  getEncodedData,
163
+ getBareTx,
152
164
  sign,
153
165
  signSubmitAndWatch,
154
166
  signAndSubmit
@@ -1 +1 @@
1
- {"version":3,"file":"tx.mjs","sources":["../../../src/tx/tx.ts"],"sourcesContent":["import type { BlockInfo, ChainHead$ } from \"@polkadot-api/observable-client\"\nimport { PolkadotSigner } from \"@polkadot-api/polkadot-signer\"\nimport { getPolkadotSigner } from \"@polkadot-api/signer\"\nimport {\n _void,\n AccountId,\n Binary,\n compactBn,\n Decoder,\n Enum,\n Struct,\n u128,\n u32,\n Variant,\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 Extensions,\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 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 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: 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 type Ext = Extensions<D>\n\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<{}, Ext>, \"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<{}, Ext> = {},\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, Ext> = (from, options) =>\n firstValueFrom(_sign(from, options)).then((x) => x.tx)\n\n const signAndSubmit: TxPromise<Asset, Ext> = (from, _options) =>\n firstValueFrom(_sign(from, _options)).then(({ tx, block }) =>\n submit(chainHead, broadcast, tx, block.hash),\n )\n\n const signSubmitAndWatch: TxObservable<Asset, Ext> = (from, _options) =>\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 = 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((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 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 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 type { BlockInfo, ChainHead$ } from \"@polkadot-api/observable-client\"\nimport { PolkadotSigner } from \"@polkadot-api/polkadot-signer\"\nimport { getPolkadotSigner } from \"@polkadot-api/signer\"\nimport {\n _void,\n AccountId,\n Binary,\n compact,\n compactBn,\n Decoder,\n Enum,\n Struct,\n u128,\n u32,\n Variant,\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 Extensions,\n PaymentInfo,\n TxBare,\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 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 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: 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 type Ext = Extensions<D>\n\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, extVersions } = 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 const callData = mergeUint8([new Uint8Array(location), codec.enc(arg)])\n return {\n callData: Binary.fromBytes(callData),\n bare: toHex(\n mergeUint8(\n compact.enc(callData.length + 1),\n new Uint8Array(extVersions.slice(-1)),\n callData,\n ),\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 getBareTx: TxBare = (\n token?: CompatibilityToken | RuntimeToken,\n ): any => {\n if (!token)\n return firstValueFrom(getCallData$(arg).pipe(map((x) => x.bare)))\n\n return getCallDataWithContext(token, arg).bare\n }\n\n const sign$ = (\n from: PolkadotSigner,\n { ..._options }: Omit<TxOptions<{}, Ext>, \"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<{}, Ext> = {},\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, Ext> = (from, options) =>\n firstValueFrom(_sign(from, options)).then((x) => x.tx)\n\n const signAndSubmit: TxPromise<Asset, Ext> = (from, _options) =>\n firstValueFrom(_sign(from, _options)).then(({ tx, block }) =>\n submit(chainHead, broadcast, tx, block.hash),\n )\n\n const signSubmitAndWatch: TxObservable<Asset, Ext> = (from, _options) =>\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 = 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((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 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 as any),\n },\n getEncodedData,\n getBareTx,\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,6 +1,6 @@
1
1
  import { Observable } from 'rxjs';
2
2
 
3
- const EMPTY_VALUE = Symbol("EMPTY_VALUE");
3
+ const EMPTY_VALUE = /* @__PURE__ */ Symbol("EMPTY_VALUE");
4
4
  const lossLessExhaustMap = (mapper) => (source$) => new Observable((observer) => {
5
5
  let idx = 0;
6
6
  let innerSubscription = null;
@@ -1 +1 @@
1
- {"version":3,"file":"lossLessExhaustMap.mjs","sources":["../../../src/utils/lossLessExhaustMap.ts"],"sourcesContent":["import { Observable, Subscription } from \"rxjs\"\n\nconst EMPTY_VALUE = Symbol(\"EMPTY_VALUE\")\ntype EMPTY_VALUE = typeof EMPTY_VALUE\n\nexport const lossLessExhaustMap =\n <I, O>(mapper: (x: I, idx: number) => Observable<O>) =>\n (source$: Observable<I>): Observable<O> =>\n new Observable((observer) => {\n let idx = 0\n let innerSubscription: Subscription | null = null\n let queuedValue: I | EMPTY_VALUE = EMPTY_VALUE\n let isOutterDone = false\n\n const setInnerSubscription = () => {\n const observable = mapper(queuedValue as I, idx++)\n queuedValue = EMPTY_VALUE\n innerSubscription = observable.subscribe({\n next(vv) {\n observer.next(vv)\n },\n error(ee) {\n observer.error(ee)\n },\n complete() {\n if (queuedValue !== EMPTY_VALUE) setInnerSubscription()\n else {\n innerSubscription = null\n if (isOutterDone) observer.complete()\n }\n },\n })\n }\n\n const subscription = source$.subscribe({\n next(v) {\n queuedValue = v\n if (!innerSubscription) setInnerSubscription()\n },\n error(e) {\n observer.error(e)\n },\n complete() {\n if (!innerSubscription) observer.complete()\n isOutterDone = true\n },\n })\n\n return () => {\n innerSubscription?.unsubscribe()\n subscription.unsubscribe()\n }\n })\n"],"names":[],"mappings":";;AAEA,MAAM,WAAA,GAAc,OAAO,aAAa,CAAA;AAGjC,MAAM,kBAAA,GACX,CAAO,MAAA,KACP,CAAC,YACC,IAAI,UAAA,CAAW,CAAC,QAAA,KAAa;AAC3B,EAAA,IAAI,GAAA,GAAM,CAAA;AACV,EAAA,IAAI,iBAAA,GAAyC,IAAA;AAC7C,EAAA,IAAI,WAAA,GAA+B,WAAA;AACnC,EAAA,IAAI,YAAA,GAAe,KAAA;AAEnB,EAAA,MAAM,uBAAuB,MAAM;AACjC,IAAA,MAAM,UAAA,GAAa,MAAA,CAAO,WAAA,EAAkB,GAAA,EAAK,CAAA;AACjD,IAAA,WAAA,GAAc,WAAA;AACd,IAAA,iBAAA,GAAoB,WAAW,SAAA,CAAU;AAAA,MACvC,KAAK,EAAA,EAAI;AACP,QAAA,QAAA,CAAS,KAAK,EAAE,CAAA;AAAA,MAClB,CAAA;AAAA,MACA,MAAM,EAAA,EAAI;AACR,QAAA,QAAA,CAAS,MAAM,EAAE,CAAA;AAAA,MACnB,CAAA;AAAA,MACA,QAAA,GAAW;AACT,QAAA,IAAI,WAAA,KAAgB,aAAa,oBAAA,EAAqB;AAAA,aACjD;AACH,UAAA,iBAAA,GAAoB,IAAA;AACpB,UAAA,IAAI,YAAA,WAAuB,QAAA,EAAS;AAAA,QACtC;AAAA,MACF;AAAA,KACD,CAAA;AAAA,EACH,CAAA;AAEA,EAAA,MAAM,YAAA,GAAe,QAAQ,SAAA,CAAU;AAAA,IACrC,KAAK,CAAA,EAAG;AACN,MAAA,WAAA,GAAc,CAAA;AACd,MAAA,IAAI,CAAC,mBAAmB,oBAAA,EAAqB;AAAA,IAC/C,CAAA;AAAA,IACA,MAAM,CAAA,EAAG;AACP,MAAA,QAAA,CAAS,MAAM,CAAC,CAAA;AAAA,IAClB,CAAA;AAAA,IACA,QAAA,GAAW;AACT,MAAA,IAAI,CAAC,iBAAA,EAAmB,QAAA,CAAS,QAAA,EAAS;AAC1C,MAAA,YAAA,GAAe,IAAA;AAAA,IACjB;AAAA,GACD,CAAA;AAED,EAAA,OAAO,MAAM;AACX,IAAA,iBAAA,EAAmB,WAAA,EAAY;AAC/B,IAAA,YAAA,CAAa,WAAA,EAAY;AAAA,EAC3B,CAAA;AACF,CAAC;;;;"}
1
+ {"version":3,"file":"lossLessExhaustMap.mjs","sources":["../../../src/utils/lossLessExhaustMap.ts"],"sourcesContent":["import { Observable, Subscription } from \"rxjs\"\n\nconst EMPTY_VALUE = Symbol(\"EMPTY_VALUE\")\ntype EMPTY_VALUE = typeof EMPTY_VALUE\n\nexport const lossLessExhaustMap =\n <I, O>(mapper: (x: I, idx: number) => Observable<O>) =>\n (source$: Observable<I>): Observable<O> =>\n new Observable((observer) => {\n let idx = 0\n let innerSubscription: Subscription | null = null\n let queuedValue: I | EMPTY_VALUE = EMPTY_VALUE\n let isOutterDone = false\n\n const setInnerSubscription = () => {\n const observable = mapper(queuedValue as I, idx++)\n queuedValue = EMPTY_VALUE\n innerSubscription = observable.subscribe({\n next(vv) {\n observer.next(vv)\n },\n error(ee) {\n observer.error(ee)\n },\n complete() {\n if (queuedValue !== EMPTY_VALUE) setInnerSubscription()\n else {\n innerSubscription = null\n if (isOutterDone) observer.complete()\n }\n },\n })\n }\n\n const subscription = source$.subscribe({\n next(v) {\n queuedValue = v\n if (!innerSubscription) setInnerSubscription()\n },\n error(e) {\n observer.error(e)\n },\n complete() {\n if (!innerSubscription) observer.complete()\n isOutterDone = true\n },\n })\n\n return () => {\n innerSubscription?.unsubscribe()\n subscription.unsubscribe()\n }\n })\n"],"names":[],"mappings":";;AAEA,MAAM,WAAA,0BAAqB,aAAa,CAAA;AAGjC,MAAM,kBAAA,GACX,CAAO,MAAA,KACP,CAAC,YACC,IAAI,UAAA,CAAW,CAAC,QAAA,KAAa;AAC3B,EAAA,IAAI,GAAA,GAAM,CAAA;AACV,EAAA,IAAI,iBAAA,GAAyC,IAAA;AAC7C,EAAA,IAAI,WAAA,GAA+B,WAAA;AACnC,EAAA,IAAI,YAAA,GAAe,KAAA;AAEnB,EAAA,MAAM,uBAAuB,MAAM;AACjC,IAAA,MAAM,UAAA,GAAa,MAAA,CAAO,WAAA,EAAkB,GAAA,EAAK,CAAA;AACjD,IAAA,WAAA,GAAc,WAAA;AACd,IAAA,iBAAA,GAAoB,WAAW,SAAA,CAAU;AAAA,MACvC,KAAK,EAAA,EAAI;AACP,QAAA,QAAA,CAAS,KAAK,EAAE,CAAA;AAAA,MAClB,CAAA;AAAA,MACA,MAAM,EAAA,EAAI;AACR,QAAA,QAAA,CAAS,MAAM,EAAE,CAAA;AAAA,MACnB,CAAA;AAAA,MACA,QAAA,GAAW;AACT,QAAA,IAAI,WAAA,KAAgB,aAAa,oBAAA,EAAqB;AAAA,aACjD;AACH,UAAA,iBAAA,GAAoB,IAAA;AACpB,UAAA,IAAI,YAAA,WAAuB,QAAA,EAAS;AAAA,QACtC;AAAA,MACF;AAAA,KACD,CAAA;AAAA,EACH,CAAA;AAEA,EAAA,MAAM,YAAA,GAAe,QAAQ,SAAA,CAAU;AAAA,IACrC,KAAK,CAAA,EAAG;AACN,MAAA,WAAA,GAAc,CAAA;AACd,MAAA,IAAI,CAAC,mBAAmB,oBAAA,EAAqB;AAAA,IAC/C,CAAA;AAAA,IACA,MAAM,CAAA,EAAG;AACP,MAAA,QAAA,CAAS,MAAM,CAAC,CAAA;AAAA,IAClB,CAAA;AAAA,IACA,QAAA,GAAW;AACT,MAAA,IAAI,CAAC,iBAAA,EAAmB,QAAA,CAAS,QAAA,EAAS;AAC1C,MAAA,YAAA,GAAe,IAAA;AAAA,IACjB;AAAA,GACD,CAAA;AAED,EAAA,OAAO,MAAM;AACX,IAAA,iBAAA,EAAmB,WAAA,EAAY;AAC/B,IAAA,YAAA,CAAa,WAAA,EAAY;AAAA,EAC3B,CAAA;AACF,CAAC;;;;"}
package/dist/index.d.ts CHANGED
@@ -636,6 +636,37 @@ interface TxCall {
636
636
  */
637
637
  (compatibilityToken: CompatibilityToken): Binary;
638
638
  }
639
+ interface TxBare {
640
+ /**
641
+ * SCALE-encoded Bare (aka Unsigned) transaction ready to be broadcasted.
642
+ *
643
+ * @returns Promise resolving in a Bare transaction (it falls back to an
644
+ * unsigned transaction if only v4 is available)
645
+ */
646
+ (): Promise<HexString>;
647
+ /**
648
+ * @param compatibilityToken Token from got with `await
649
+ * typedApi.compatibilityToken`
650
+ * @returns Synchronously returns a Bare transaction (it falls back to an
651
+ * unsigned transaction if only v4 is available)
652
+ */
653
+ (compatibilityToken: CompatibilityToken): HexString;
654
+ }
655
+ interface UnsafeTxBare {
656
+ /**
657
+ * SCALE-encoded Bare (aka Unsigned) transaction ready to be broadcasted.
658
+ *
659
+ * @returns Promise resolving in a Bare transaction (it falls back to an
660
+ * unsigned transaction if only v4 is available)
661
+ */
662
+ (): Promise<HexString>;
663
+ /**
664
+ * @param runtimeToken Token from got with `await typedApi.runtimeToken`
665
+ * @returns Synchronously returns a Bare transaction (it falls back to an
666
+ * unsigned transaction if only v4 is available)
667
+ */
668
+ (runtimeToken: RuntimeToken): HexString;
669
+ }
639
670
  interface UnsafeTxCall {
640
671
  /**
641
672
  * SCALE-encoded callData of the transaction.
@@ -701,6 +732,10 @@ type InnerTransaction<Unsafe, Arg extends {} | undefined, Pallet extends string,
701
732
  * SCALE-encoded callData of the transaction.
702
733
  */
703
734
  getEncodedData: Unsafe extends true ? UnsafeTxCall : TxCall;
735
+ /**
736
+ * SCALE-encoded Bare (aka Unsigned) transaction ready to be broadcasted.
737
+ */
738
+ getBareTx: Unsafe extends true ? UnsafeTxBare : TxBare;
704
739
  /**
705
740
  * Estimate fees against the latest known `finalizedBlock`
706
741
  *
@@ -976,6 +1011,12 @@ interface PolkadotClient {
976
1011
  getBestBlocks: () => Promise<BlockInfo[]>;
977
1012
  /**
978
1013
  * Observable of new blocks that have been discovered by the client.
1014
+ * There is the strong guarantee that for every block emitted its parent has
1015
+ * been emitted already in the subscription (except the first block).
1016
+ * After subscription, the latest finalized block and all of its known
1017
+ * descendants will be emitted synchronously.
1018
+ * The Observable will complete if the continuity of the blocks cannot be
1019
+ * guaranteed.
979
1020
  */
980
1021
  blocks$: Observable<BlockInfo>;
981
1022
  /**
package/dist/index.js CHANGED
@@ -273,7 +273,7 @@ function firstValueFromWithSignal(source, signal) {
273
273
  });
274
274
  }
275
275
 
276
- const EMPTY_VALUE = Symbol("EMPTY_VALUE");
276
+ const EMPTY_VALUE = /* @__PURE__ */ Symbol("EMPTY_VALUE");
277
277
  const lossLessExhaustMap = (mapper) => (source$) => new rxjs.Observable((observer) => {
278
278
  let idx = 0;
279
279
  let innerSubscription = null;
@@ -1105,7 +1105,7 @@ const createTxEntry = (pallet, name, chainHead, broadcast, {
1105
1105
  const fn = (arg) => {
1106
1106
  const getCallDataWithContext = (runtime, arg2, txOptions = {}) => {
1107
1107
  const ctx = getCompatibilityApi(runtime).runtime();
1108
- const { dynamicBuilder, assetId, lookup } = ctx;
1108
+ const { dynamicBuilder, assetId, lookup, extVersions } = ctx;
1109
1109
  let codecs;
1110
1110
  try {
1111
1111
  codecs = dynamicBuilder.buildCall(pallet, name);
@@ -1128,9 +1128,15 @@ const createTxEntry = (pallet, name, chainHead, broadcast, {
1128
1128
  };
1129
1129
  }
1130
1130
  const { location, codec } = codecs;
1131
+ const callData = utils.mergeUint8([new Uint8Array(location), codec.enc(arg2)]);
1131
1132
  return {
1132
- callData: substrateBindings.Binary.fromBytes(
1133
- utils.mergeUint8([new Uint8Array(location), codec.enc(arg2)])
1133
+ callData: substrateBindings.Binary.fromBytes(callData),
1134
+ bare: utils.toHex(
1135
+ utils.mergeUint8(
1136
+ substrateBindings.compact.enc(callData.length + 1),
1137
+ new Uint8Array(extVersions.slice(-1)),
1138
+ callData
1139
+ )
1134
1140
  ),
1135
1141
  options: returnOptions
1136
1142
  };
@@ -1143,6 +1149,11 @@ const createTxEntry = (pallet, name, chainHead, broadcast, {
1143
1149
  return rxjs.firstValueFrom(getCallData$(arg).pipe(rxjs.map((x) => x.callData)));
1144
1150
  return getCallDataWithContext(token, arg).callData;
1145
1151
  };
1152
+ const getBareTx = (token) => {
1153
+ if (!token)
1154
+ return rxjs.firstValueFrom(getCallData$(arg).pipe(rxjs.map((x) => x.bare)));
1155
+ return getCallDataWithContext(token, arg).bare;
1156
+ };
1146
1157
  const sign$ = (from, { ..._options }, atBlock) => getCallData$(arg, _options).pipe(
1147
1158
  rxjs.mergeMap(
1148
1159
  ({ callData, options }) => createTx(
@@ -1220,6 +1231,7 @@ const createTxEntry = (pallet, name, chainHead, broadcast, {
1220
1231
  value: substrateBindings.Enum(name, arg)
1221
1232
  },
1222
1233
  getEncodedData,
1234
+ getBareTx,
1223
1235
  sign,
1224
1236
  signSubmitAndWatch,
1225
1237
  signAndSubmit