polkadot-api 2.1.6 → 2.1.7-canary.78aac72
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/dist/reexports/ws.d.ts +1 -1
- package/dist/src/client.js +79 -7
- package/dist/src/client.js.map +1 -1
- package/dist/src/compatibility/compat-ctx.js +3 -8
- package/dist/src/compatibility/compat-ctx.js.map +1 -1
- package/dist/src/compatibility/compatibility.js +1 -2
- package/dist/src/compatibility/compatibility.js.map +1 -1
- package/dist/src/index.d.ts +5 -4
- package/dist/src/offline.js +71 -22
- package/dist/src/offline.js.map +1 -1
- package/dist/src/static-apis.js +3 -3
- package/dist/src/static-apis.js.map +1 -1
- package/dist/src/storage.js.map +1 -1
- package/dist/src/tx/tx.js +50 -66
- package/dist/src/tx/tx.js.map +1 -1
- package/dist/{types-BJAMtGIT.d.ts → types-CoK0ySKE.d.ts} +72 -204
- package/dist/umd/index.min.js +2 -2
- package/dist/umd/ink.min.js +1 -1
- package/dist/umd/pjs-signer.min.js +3 -1
- package/dist/umd/signer.min.js +3 -1
- package/dist/umd/ws.min.js +3 -3
- package/package.json +21 -20
- package/dist/src/tx/create-tx.js +0 -125
- package/dist/src/tx/create-tx.js.map +0 -1
- package/dist/src/tx/signed-extensions/charge-asset-tx-enc.js +0 -9
- package/dist/src/tx/signed-extensions/charge-asset-tx-enc.js.map +0 -1
- package/dist/src/tx/signed-extensions/mortal-enc.js +0 -25
- package/dist/src/tx/signed-extensions/mortal-enc.js.map +0 -1
- package/dist/src/tx/signed-extensions/sign-extensions.js +0 -107
- package/dist/src/tx/signed-extensions/sign-extensions.js.map +0 -1
- package/dist/src/tx/signed-extensions/system-version.js +0 -10
- package/dist/src/tx/signed-extensions/system-version.js.map +0 -1
package/dist/reexports/ws.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { P as PolkadotClient } from '../types-
|
|
1
|
+
import { P as PolkadotClient } from '../types-CoK0ySKE.js';
|
|
2
2
|
import * as _polkadot_api_ws_provider from '@polkadot-api/ws-provider';
|
|
3
3
|
import { StatusChange, WebSocketClass, SocketLoggerFn } from '@polkadot-api/ws-provider';
|
|
4
4
|
export { SocketEvents, SocketLoggerFn, StatusChange, WebSocketClass, WsClose, WsConnected, WsConnecting, WsError, WsEvent, WsJsonRpcProvider } from '@polkadot-api/ws-provider';
|
package/dist/src/client.js
CHANGED
|
@@ -2,7 +2,7 @@ import { getObservableClient, withArchive } from '@polkadot-api/observable-clien
|
|
|
2
2
|
import { Binary } from '@polkadot-api/substrate-bindings';
|
|
3
3
|
import { createClient as createClient$1 } from '@polkadot-api/substrate-client';
|
|
4
4
|
import { toHex } from '@polkadot-api/utils';
|
|
5
|
-
import { from, defer, map, catchError, shareReplay, Observable, combineLatest, firstValueFrom } from 'rxjs';
|
|
5
|
+
import { from, defer, map, catchError, shareReplay, Observable, combineLatest, firstValueFrom, scan, mergeAll, distinctUntilChanged } from 'rxjs';
|
|
6
6
|
import { createCompatHelpers } from './compatibility/compatibility.js';
|
|
7
7
|
import { createConstantEntry } from './constants.js';
|
|
8
8
|
import { createEventEntry } from './event.js';
|
|
@@ -20,9 +20,81 @@ import { submit$, submit } from './tx/submit-fns.js';
|
|
|
20
20
|
|
|
21
21
|
const HEX_REGEX = /^(?:0x)?((?:[0-9a-fA-F][0-9a-fA-F])+)$/;
|
|
22
22
|
const createApi = (chainHead, broadcast$, chainDefinition) => {
|
|
23
|
+
const txCreatorBindings = {
|
|
24
|
+
hasher: (payload) => chainHead.hasher$.pipe(map((h) => h(payload))),
|
|
25
|
+
blocks: chainHead.pinnedBlocks$.pipe(
|
|
26
|
+
scan((acc, { finalized, blocks }) => {
|
|
27
|
+
let prev = acc.at(-1);
|
|
28
|
+
if (!prev) {
|
|
29
|
+
const blockAndChildren = (hash) => {
|
|
30
|
+
const block = blocks.get(hash);
|
|
31
|
+
return block ? [block, ...Array.from(block.children).flatMap(blockAndChildren)] : [];
|
|
32
|
+
};
|
|
33
|
+
const allBlocks = blockAndChildren(finalized);
|
|
34
|
+
const tipEmissions = allBlocks.reduce((emissions2, next) => {
|
|
35
|
+
const emission = emissions2.at(-1);
|
|
36
|
+
emissions2.push({
|
|
37
|
+
type: "newTip",
|
|
38
|
+
finalized: emission?.finalized ?? next,
|
|
39
|
+
tips: [
|
|
40
|
+
...emission?.tips.filter(({ hash }) => hash !== next.parent) ?? [],
|
|
41
|
+
next
|
|
42
|
+
],
|
|
43
|
+
newTip: next
|
|
44
|
+
});
|
|
45
|
+
return emissions2;
|
|
46
|
+
}, []);
|
|
47
|
+
const last = tipEmissions.at(-1);
|
|
48
|
+
return [
|
|
49
|
+
...tipEmissions,
|
|
50
|
+
{
|
|
51
|
+
type: "finalized",
|
|
52
|
+
finalized: last.finalized,
|
|
53
|
+
tips: last.tips
|
|
54
|
+
}
|
|
55
|
+
];
|
|
56
|
+
}
|
|
57
|
+
const emissions = [];
|
|
58
|
+
if (prev.finalized.hash !== finalized) {
|
|
59
|
+
const tipsWithoutPruned = prev.tips.filter(({ hash }) => {
|
|
60
|
+
const block = blocks.get(hash);
|
|
61
|
+
return block && !block.pruned;
|
|
62
|
+
});
|
|
63
|
+
const next = {
|
|
64
|
+
type: "finalized",
|
|
65
|
+
finalized: blocks.get(finalized),
|
|
66
|
+
tips: tipsWithoutPruned.length === prev.tips.length ? prev.tips : tipsWithoutPruned
|
|
67
|
+
};
|
|
68
|
+
emissions.push(next);
|
|
69
|
+
prev = next;
|
|
70
|
+
}
|
|
71
|
+
Array.from(blocks.values()).filter(
|
|
72
|
+
(b) => b.children.size === 0 && !b.pruned && prev.tips.every(({ hash }) => hash !== b.hash)
|
|
73
|
+
).forEach((b) => {
|
|
74
|
+
const next = {
|
|
75
|
+
type: "newTip",
|
|
76
|
+
finalized: prev.finalized,
|
|
77
|
+
tips: [...prev.tips.filter(({ hash }) => hash !== b.parent), b],
|
|
78
|
+
newTip: b
|
|
79
|
+
};
|
|
80
|
+
prev = next;
|
|
81
|
+
emissions.push(next);
|
|
82
|
+
});
|
|
83
|
+
return emissions.length === 0 ? [prev] : emissions;
|
|
84
|
+
}, []),
|
|
85
|
+
mergeAll(),
|
|
86
|
+
distinctUntilChanged()
|
|
87
|
+
),
|
|
88
|
+
call: (call, args, at) => chainHead.call$(at, call, toHex(args))
|
|
89
|
+
};
|
|
23
90
|
const compatHelpers = createCompatHelpers(chainDefinition);
|
|
24
|
-
const { getClientCompat
|
|
25
|
-
const getStaticApis = createStaticApis(
|
|
91
|
+
const { getClientCompat } = compatHelpers;
|
|
92
|
+
const getStaticApis = createStaticApis(
|
|
93
|
+
txCreatorBindings,
|
|
94
|
+
chainHead,
|
|
95
|
+
broadcast$,
|
|
96
|
+
compatHelpers
|
|
97
|
+
);
|
|
26
98
|
const getWatchEntries = createWatchEntries(
|
|
27
99
|
chainHead.pinnedBlocks$,
|
|
28
100
|
chainHead.storage$,
|
|
@@ -39,12 +111,12 @@ const createApi = (chainHead, broadcast$, chainDefinition) => {
|
|
|
39
111
|
);
|
|
40
112
|
const tx = createProxyPath(
|
|
41
113
|
(pallet, name) => createTxEntry(
|
|
114
|
+
txCreatorBindings,
|
|
42
115
|
pallet,
|
|
43
116
|
name,
|
|
44
117
|
chainHead,
|
|
45
118
|
broadcast$,
|
|
46
|
-
getClientCompat("tx", pallet, name)
|
|
47
|
-
getIsAsssetCompat
|
|
119
|
+
getClientCompat("tx", pallet, name)
|
|
48
120
|
)
|
|
49
121
|
);
|
|
50
122
|
const event = createProxyPath(
|
|
@@ -88,12 +160,12 @@ const createApi = (chainHead, broadcast$, chainDefinition) => {
|
|
|
88
160
|
value: { type: name, value: args }
|
|
89
161
|
} = dynamicBuilder.buildDefinition(lookup.call).dec(callData);
|
|
90
162
|
return createTxEntry(
|
|
163
|
+
txCreatorBindings,
|
|
91
164
|
pallet,
|
|
92
165
|
name,
|
|
93
166
|
chainHead,
|
|
94
167
|
broadcast$,
|
|
95
|
-
getClientCompat("tx", pallet, name)
|
|
96
|
-
getIsAsssetCompat
|
|
168
|
+
getClientCompat("tx", pallet, name)
|
|
97
169
|
)(args);
|
|
98
170
|
} catch {
|
|
99
171
|
throw new Error("createTx: invalid call data");
|
package/dist/src/client.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.js","sources":["../../src/client.ts"],"sourcesContent":["import { JsonRpcProvider } from \"@polkadot-api/json-rpc-provider\"\nimport {\n BlockInfo,\n ChainHead$,\n getObservableClient,\n withArchive,\n} from \"@polkadot-api/observable-client\"\nimport { Binary, HexString } from \"@polkadot-api/substrate-bindings\"\nimport {\n SubstrateClient,\n UnsubscribeFn,\n createClient as createRawClient,\n} from \"@polkadot-api/substrate-client\"\nimport { toHex } from \"@polkadot-api/utils\"\nimport {\n Observable,\n catchError,\n combineLatest,\n defer,\n firstValueFrom,\n from,\n map,\n shareReplay,\n} from \"rxjs\"\nimport { createCompatHelpers } from \"./compatibility\"\nimport { createConstantEntry } from \"./constants\"\nimport { ChainDefinition } from \"./descriptors\"\nimport { createEventEntry } from \"./event\"\nimport { createRuntimeCallEntry } from \"./runtime-call\"\nimport { createStaticApis } from \"./static-apis\"\nimport { createStorageEntry } from \"./storage\"\nimport { createTxEntry, submit, submit$ } from \"./tx\"\nimport type { PolkadotClient, TypedApi } from \"./types\"\nimport { createProxyPath, firstValueFromWithSignal } from \"./utils\"\nimport { createViewFnEntry } from \"./viewFns\"\nimport { createWatchEntries } from \"./watch-entries\"\n\nconst HEX_REGEX = /^(?:0x)?((?:[0-9a-fA-F][0-9a-fA-F])+)$/\n\nconst createApi = <D extends ChainDefinition>(\n chainHead: ChainHead$,\n broadcast$: (tx: Uint8Array) => Observable<never>,\n chainDefinition?: ChainDefinition,\n): TypedApi<D> => {\n const compatHelpers = createCompatHelpers(chainDefinition)\n const { getClientCompat, getIsAsssetCompat } = compatHelpers\n\n const getStaticApis = createStaticApis(chainHead, broadcast$, compatHelpers)\n\n const getWatchEntries = createWatchEntries(\n chainHead.pinnedBlocks$,\n chainHead.storage$,\n chainHead.withRuntime,\n )\n\n const query = createProxyPath((pallet, name) =>\n createStorageEntry(\n pallet,\n name,\n chainHead,\n getWatchEntries,\n getClientCompat(\"query\", pallet, name),\n ),\n )\n\n const tx = createProxyPath((pallet, name) =>\n createTxEntry(\n pallet,\n name,\n chainHead,\n broadcast$,\n getClientCompat(\"tx\", pallet, name),\n getIsAsssetCompat,\n ),\n )\n\n const event = createProxyPath((pallet, name) =>\n createEventEntry(\n pallet,\n name,\n chainHead,\n getClientCompat(\"event\", pallet, name),\n ),\n )\n\n const constants = createProxyPath((pallet, name) =>\n createConstantEntry(\n pallet,\n name,\n chainHead,\n getClientCompat(\"constants\", pallet, name),\n ),\n )\n\n const apis = createProxyPath((api, method) =>\n createRuntimeCallEntry(\n api,\n method,\n chainHead,\n getClientCompat(\"apis\", api, method),\n ),\n )\n\n const view = createProxyPath((pallet, entry) =>\n createViewFnEntry(\n pallet,\n entry,\n chainHead,\n getClientCompat(\"view\", pallet, entry),\n ),\n )\n\n const txFromCallData = (\n callData: Uint8Array,\n { at, signal }: Partial<{ at: string; signal: AbortSignal }> = {},\n ) =>\n firstValueFromWithSignal(\n chainHead.getRuntimeContext$(at ?? null).pipe(\n map(({ dynamicBuilder, lookup }) => {\n try {\n const {\n type: pallet,\n value: { type: name, value: args },\n } = dynamicBuilder.buildDefinition(lookup.call!).dec(callData)\n\n return createTxEntry(\n pallet,\n name,\n chainHead,\n broadcast$,\n getClientCompat(\"tx\", pallet, name),\n getIsAsssetCompat,\n )(args)\n } catch {\n throw new Error(\"createTx: invalid call data\")\n }\n }),\n ),\n signal,\n )\n\n return {\n tx,\n constants,\n apis,\n view,\n query,\n event,\n txFromCallData,\n getStaticApis,\n } as any\n}\n\nexport type CreateClientOptions = Partial<{\n getMetadata: (codeHash: HexString) => Promise<Uint8Array | null>\n setMetadata: (codeHash: HexString, metadata: Uint8Array) => void\n}>\n\n/**\n * This is the top-level export for `polkadot-api`.\n *\n * @param provider A `JsonRpcProvider` compliant with the [JSON-RPC\n * spec](https://paritytech.github.io/json-rpc-interface-spec/),\n * which must support the `chainHead`, `transaction` and\n * `chainSpec` groups.\n * @param options - *(Optional)* An object that allows customization of\n * metadata handling.\n * You can supply functions to retrieve and/or persist the\n * metadata associated with runtime `codeHash` values:\n *\n * - `getMetadata`: A function that, given a `codeHash` (the\n * `:code:` hash),\n * returns a `Promise` resolving to a `Uint8Array`\n * representing the metadata,\n * or `null` if unavailable.\n * - `setMetadata`: A function that accepts a `codeHash` and\n * its associated `Uint8Array` metadata,\n * allowing you to persist the metadata (e.g., in a cache or\n * local store).\n * @example\n *\n * import { getMetadata } from \"@polkadot-api/descriptors\"\n * import { createClient } from \"polkadot-api\"\n * import { getSmProvider } from \"polkadot-api/sm-provider\"\n * import { chainSpec } from \"polkadot-api/chains/polkadot\"\n * import { start } from \"polkadot-api/smoldot\"\n *\n * const smoldot = start()\n * const chain = await smoldot.addChain({ chainSpec })\n *\n * // Connect to the polkadot relay chain.\n * const client = createClient(getSmProvider(chain), { getMetadata })\n *\n */\nexport function createClient(\n provider: JsonRpcProvider,\n { getMetadata, setMetadata }: CreateClientOptions = {},\n): PolkadotClient {\n const rawClient: SubstrateClient = createRawClient(provider)\n const client = getObservableClient(rawClient, {\n getMetadata: getMetadata\n ? (codeHash: string) => from(getMetadata(codeHash))\n : undefined,\n setMetadata,\n })\n const { getChainSpecData } = rawClient\n\n const withArchiveBlock =\n <T extends any[], R>(\n fn: (blockHash: string, ...args: T) => Observable<R>,\n ) =>\n (\n blockHash: string,\n ...args: T\n ): Observable<{ value: R; block: BlockInfo }> =>\n combineLatest([\n fn(blockHash, ...args),\n archive.header$(blockHash).pipe(\n map(({ number, parentHash }) => ({\n hash: blockHash,\n number,\n parent: parentHash,\n // Not correct, but it would be overkill to fix. Only relevant on chainHead, not on archive.\n hasNewRuntime: false,\n })),\n ),\n ]).pipe(map(([value, block]) => ({ value, block })))\n\n const { genesis$, ..._chainHead } = client.chainHead$()\n const archive = client.archive(_chainHead.getRuntime$)\n const chainHead: ChainHead$ = {\n ..._chainHead,\n genesis$: defer(getChainSpecData).pipe(\n map(({ genesisHash }) => genesisHash),\n catchError(() => genesis$),\n shareReplay(1),\n ),\n storage$: withArchive(\n _chainHead.storage$,\n withArchiveBlock(archive.storage$),\n ),\n body$: withArchive(_chainHead.body$, archive.body$),\n call$: withArchive(_chainHead.call$, archive.call$),\n header$: withArchive(_chainHead.header$, archive.header$),\n eventsAt$: withArchive(_chainHead.eventsAt$, archive.eventsAt$),\n storageQueries$: withArchive(\n _chainHead.storageQueries$,\n archive.storageQueries$,\n ),\n getRuntimeContext$: withArchive(\n _chainHead.getRuntimeContext$,\n archive.getRuntimeContext$,\n ),\n }\n\n const _request: <Reply = any, Params extends Array<any> = any[]>(\n method: string,\n params: Params,\n ) => Promise<Reply> = rawClient.request\n\n const _subscribe: PolkadotClient[\"_subscribe\"] = (\n method,\n unsubscribeMethod,\n params,\n ) =>\n new Observable((obs) => {\n let unsubInner: UnsubscribeFn | null = null\n let subId: string | null = null\n\n const sendUnsubscribe = () => {\n // Fire-and-forget\n subId != null && rawClient.request(unsubscribeMethod, [subId])\n }\n\n rawClient._request(method, params, {\n onSuccess: (res: string, follow) => {\n subId = res\n if (obs.closed) {\n sendUnsubscribe()\n return\n }\n unsubInner = follow(subId, {\n next: (data: any) => obs.next(data),\n error: (e) => obs.error(e),\n })\n },\n onError(e) {\n obs.error(e)\n },\n })\n\n return () => {\n sendUnsubscribe()\n unsubInner?.()\n }\n })\n\n let unsafeApi: TypedApi<any, false>\n const typedApis = new WeakMap<ChainDefinition, TypedApi<any, true>>()\n\n const { broadcastTx$ } = client\n\n const getMetadata$ = (at: HexString) =>\n chainHead.getRuntimeContext$(at).pipe(map((ctx) => ctx.metadataRaw))\n\n const {\n holdBlock,\n finalized$,\n bestBlocks$,\n body$,\n header$,\n storage$,\n unfollow,\n } = chainHead\n\n const result: PolkadotClient = {\n getChainSpecData,\n\n getMetadata$,\n getMetadata: (atBlock: HexString, signal?: AbortSignal) =>\n firstValueFromWithSignal(getMetadata$(atBlock), signal),\n\n blocks$: chainHead.newBlocks$,\n hodlBlock: (block: HexString) => holdBlock(block, true),\n\n finalizedBlock$: finalized$,\n getFinalizedBlock: () => firstValueFrom(finalized$),\n\n bestBlocks$: chainHead.bestBlocks$,\n getBestBlocks: () => firstValueFrom(bestBlocks$),\n\n getBlockBody$: body$,\n getBlockBody: (hash: HexString, signal?: AbortSignal) =>\n firstValueFromWithSignal(body$(hash), signal),\n\n getBlockHeader$: header$,\n getBlockHeader: (hash: HexString, signal?: AbortSignal) =>\n firstValueFromWithSignal(header$(hash), signal),\n\n submit: (...args) => submit(chainHead, broadcastTx$, ...args),\n submitAndWatch: (tx) => submit$(chainHead, broadcastTx$, tx),\n\n getTypedApi: <D extends ChainDefinition>(chainDefinition: D) => {\n if (typedApis.has(chainDefinition)) return typedApis.get(chainDefinition)!\n const api = createApi<D>(chainHead, broadcastTx$, chainDefinition)\n\n typedApis.set(chainDefinition, api)\n return api\n },\n\n getUnsafeApi: <D extends ChainDefinition>() => {\n unsafeApi ??= createApi<D>(chainHead, broadcastTx$)\n return unsafeApi\n },\n\n rawQuery: (key, { at, signal } = {}) =>\n firstValueFromWithSignal(\n storage$(at ?? null, \"value\", () => {\n const hex = key.match(HEX_REGEX)?.[1]\n return hex ? `0x${hex}` : toHex(Binary.fromText(key))\n }).pipe(map((v) => v.value)),\n signal,\n ),\n\n destroy: () => {\n unfollow()\n client.destroy()\n },\n\n _request,\n _subscribe,\n }\n\n ;(result as any).___INTERNAL_DO_NOT_USE = chainHead\n\n return result\n}\n"],"names":["createRawClient"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"client.js","sources":["../../src/client.ts"],"sourcesContent":["import { JsonRpcProvider } from \"@polkadot-api/json-rpc-provider\"\nimport {\n BlockInfo,\n ChainHead$,\n getObservableClient,\n withArchive,\n} from \"@polkadot-api/observable-client\"\nimport { TxCreatorBindings } from \"@polkadot-api/polkadot-signer\"\nimport { Binary, HexString } from \"@polkadot-api/substrate-bindings\"\nimport {\n SubstrateClient,\n UnsubscribeFn,\n createClient as createRawClient,\n} from \"@polkadot-api/substrate-client\"\nimport { toHex } from \"@polkadot-api/utils\"\nimport {\n Observable,\n ObservedValueOf,\n catchError,\n combineLatest,\n defer,\n distinctUntilChanged,\n firstValueFrom,\n from,\n map,\n mergeAll,\n scan,\n shareReplay,\n} from \"rxjs\"\nimport { createCompatHelpers } from \"./compatibility\"\nimport { createConstantEntry } from \"./constants\"\nimport { ChainDefinition } from \"./descriptors\"\nimport { createEventEntry } from \"./event\"\nimport { createRuntimeCallEntry } from \"./runtime-call\"\nimport { createStaticApis } from \"./static-apis\"\nimport { createStorageEntry } from \"./storage\"\nimport { createTxEntry, submit, submit$ } from \"./tx\"\nimport type { PolkadotClient, TypedApi } from \"./types\"\nimport { createProxyPath, firstValueFromWithSignal } from \"./utils\"\nimport { createViewFnEntry } from \"./viewFns\"\nimport { createWatchEntries } from \"./watch-entries\"\n\nconst HEX_REGEX = /^(?:0x)?((?:[0-9a-fA-F][0-9a-fA-F])+)$/\n\ntype Blocks = ObservedValueOf<TxCreatorBindings[\"blocks\"]>\nconst createApi = <D extends ChainDefinition>(\n chainHead: ChainHead$,\n broadcast$: (tx: Uint8Array) => Observable<never>,\n chainDefinition?: ChainDefinition,\n): TypedApi<D> => {\n const txCreatorBindings: TxCreatorBindings = {\n hasher: (payload) => chainHead.hasher$.pipe(map((h) => h(payload))),\n blocks: chainHead.pinnedBlocks$.pipe(\n scan((acc, { finalized, blocks }) => {\n let prev = acc.at(-1)!\n // means it will be the first emission, we emit all tree as tips\n if (!prev) {\n const blockAndChildren = (hash: string): BlockInfo[] => {\n const block = blocks.get(hash)\n return block\n ? [block, ...Array.from(block.children).flatMap(blockAndChildren)]\n : []\n }\n const allBlocks = blockAndChildren(finalized)\n const tipEmissions = allBlocks.reduce<Blocks[]>((emissions, next) => {\n const emission = emissions.at(-1)\n emissions.push({\n type: \"newTip\",\n finalized: emission?.finalized ?? next,\n tips: [\n ...(emission?.tips.filter(({ hash }) => hash !== next.parent) ??\n []),\n next,\n ],\n newTip: next,\n })\n return emissions\n }, [])\n const last = tipEmissions.at(-1)! // at least one finalized block\n return [\n ...tipEmissions,\n {\n type: \"finalized\" as const,\n finalized: last.finalized,\n tips: last.tips,\n },\n ]\n }\n const emissions: Blocks[] = []\n // clear change in finalized case\n if (prev.finalized.hash !== finalized) {\n const tipsWithoutPruned = prev.tips.filter(({ hash }) => {\n const block = blocks.get(hash)\n return block && !block.pruned\n })\n const next: Blocks = {\n type: \"finalized\",\n finalized: blocks.get(finalized)!,\n tips:\n tipsWithoutPruned.length === prev.tips.length\n ? prev.tips\n : tipsWithoutPruned,\n }\n emissions.push(next)\n prev = next\n }\n\n Array.from(blocks.values())\n .filter(\n (b) =>\n b.children.size === 0 &&\n !b.pruned &&\n prev.tips.every(({ hash }) => hash !== b.hash),\n )\n .forEach((b) => {\n const next: Blocks = {\n type: \"newTip\",\n finalized: prev.finalized,\n tips: [...prev.tips.filter(({ hash }) => hash !== b.parent), b],\n newTip: b,\n }\n prev = next\n emissions.push(next)\n })\n return emissions.length === 0 ? [prev] : emissions\n }, [] as Blocks[]),\n mergeAll(),\n distinctUntilChanged(),\n ),\n call: (call, args, at) => chainHead.call$(at, call, toHex(args)),\n }\n const compatHelpers = createCompatHelpers(chainDefinition)\n const { getClientCompat } = compatHelpers\n\n const getStaticApis = createStaticApis(\n txCreatorBindings,\n chainHead,\n broadcast$,\n compatHelpers,\n )\n\n const getWatchEntries = createWatchEntries(\n chainHead.pinnedBlocks$,\n chainHead.storage$,\n chainHead.withRuntime,\n )\n\n const query = createProxyPath((pallet, name) =>\n createStorageEntry(\n pallet,\n name,\n chainHead,\n getWatchEntries,\n getClientCompat(\"query\", pallet, name),\n ),\n )\n\n const tx = createProxyPath((pallet, name) =>\n createTxEntry(\n txCreatorBindings,\n pallet,\n name,\n chainHead,\n broadcast$,\n getClientCompat(\"tx\", pallet, name),\n ),\n )\n\n const event = createProxyPath((pallet, name) =>\n createEventEntry(\n pallet,\n name,\n chainHead,\n getClientCompat(\"event\", pallet, name),\n ),\n )\n\n const constants = createProxyPath((pallet, name) =>\n createConstantEntry(\n pallet,\n name,\n chainHead,\n getClientCompat(\"constants\", pallet, name),\n ),\n )\n\n const apis = createProxyPath((api, method) =>\n createRuntimeCallEntry(\n api,\n method,\n chainHead,\n getClientCompat(\"apis\", api, method),\n ),\n )\n\n const view = createProxyPath((pallet, entry) =>\n createViewFnEntry(\n pallet,\n entry,\n chainHead,\n getClientCompat(\"view\", pallet, entry),\n ),\n )\n\n const txFromCallData = (\n callData: Uint8Array,\n { at, signal }: Partial<{ at: string; signal: AbortSignal }> = {},\n ) =>\n firstValueFromWithSignal(\n chainHead.getRuntimeContext$(at ?? null).pipe(\n map(({ dynamicBuilder, lookup }) => {\n try {\n const {\n type: pallet,\n value: { type: name, value: args },\n } = dynamicBuilder.buildDefinition(lookup.call!).dec(callData)\n\n return createTxEntry(\n txCreatorBindings,\n pallet,\n name,\n chainHead,\n broadcast$,\n getClientCompat(\"tx\", pallet, name),\n )(args)\n } catch {\n throw new Error(\"createTx: invalid call data\")\n }\n }),\n ),\n signal,\n )\n\n return {\n tx,\n constants,\n apis,\n view,\n query,\n event,\n txFromCallData,\n getStaticApis,\n } as any\n}\n\nexport type CreateClientOptions = Partial<{\n getMetadata: (codeHash: HexString) => Promise<Uint8Array | null>\n setMetadata: (codeHash: HexString, metadata: Uint8Array) => void\n}>\n\n/**\n * This is the top-level export for `polkadot-api`.\n *\n * @param provider A `JsonRpcProvider` compliant with the [JSON-RPC\n * spec](https://paritytech.github.io/json-rpc-interface-spec/),\n * which must support the `chainHead`, `transaction` and\n * `chainSpec` groups.\n * @param options - *(Optional)* An object that allows customization of\n * metadata handling.\n * You can supply functions to retrieve and/or persist the\n * metadata associated with runtime `codeHash` values:\n *\n * - `getMetadata`: A function that, given a `codeHash` (the\n * `:code:` hash),\n * returns a `Promise` resolving to a `Uint8Array`\n * representing the metadata,\n * or `null` if unavailable.\n * - `setMetadata`: A function that accepts a `codeHash` and\n * its associated `Uint8Array` metadata,\n * allowing you to persist the metadata (e.g., in a cache or\n * local store).\n * @example\n *\n * import { getMetadata } from \"@polkadot-api/descriptors\"\n * import { createClient } from \"polkadot-api\"\n * import { getSmProvider } from \"polkadot-api/sm-provider\"\n * import { chainSpec } from \"polkadot-api/chains/polkadot\"\n * import { start } from \"polkadot-api/smoldot\"\n *\n * const smoldot = start()\n * const chain = await smoldot.addChain({ chainSpec })\n *\n * // Connect to the polkadot relay chain.\n * const client = createClient(getSmProvider(chain), { getMetadata })\n *\n */\nexport function createClient(\n provider: JsonRpcProvider,\n { getMetadata, setMetadata }: CreateClientOptions = {},\n): PolkadotClient {\n const rawClient: SubstrateClient = createRawClient(provider)\n const client = getObservableClient(rawClient, {\n getMetadata: getMetadata\n ? (codeHash: string) => from(getMetadata(codeHash))\n : undefined,\n setMetadata,\n })\n const { getChainSpecData } = rawClient\n\n const withArchiveBlock =\n <T extends any[], R>(\n fn: (blockHash: string, ...args: T) => Observable<R>,\n ) =>\n (\n blockHash: string,\n ...args: T\n ): Observable<{ value: R; block: BlockInfo }> =>\n combineLatest([\n fn(blockHash, ...args),\n archive.header$(blockHash).pipe(\n map(({ number, parentHash }) => ({\n hash: blockHash,\n number,\n parent: parentHash,\n // Not correct, but it would be overkill to fix. Only relevant on chainHead, not on archive.\n hasNewRuntime: false,\n })),\n ),\n ]).pipe(map(([value, block]) => ({ value, block })))\n\n const { genesis$, ..._chainHead } = client.chainHead$()\n const archive = client.archive(_chainHead.getRuntime$)\n const chainHead: ChainHead$ = {\n ..._chainHead,\n genesis$: defer(getChainSpecData).pipe(\n map(({ genesisHash }) => genesisHash),\n catchError(() => genesis$),\n shareReplay(1),\n ),\n storage$: withArchive(\n _chainHead.storage$,\n withArchiveBlock(archive.storage$),\n ),\n body$: withArchive(_chainHead.body$, archive.body$),\n call$: withArchive(_chainHead.call$, archive.call$),\n header$: withArchive(_chainHead.header$, archive.header$),\n eventsAt$: withArchive(_chainHead.eventsAt$, archive.eventsAt$),\n storageQueries$: withArchive(\n _chainHead.storageQueries$,\n archive.storageQueries$,\n ),\n getRuntimeContext$: withArchive(\n _chainHead.getRuntimeContext$,\n archive.getRuntimeContext$,\n ),\n }\n\n const _request: <Reply = any, Params extends Array<any> = any[]>(\n method: string,\n params: Params,\n ) => Promise<Reply> = rawClient.request\n\n const _subscribe: PolkadotClient[\"_subscribe\"] = (\n method,\n unsubscribeMethod,\n params,\n ) =>\n new Observable((obs) => {\n let unsubInner: UnsubscribeFn | null = null\n let subId: string | null = null\n\n const sendUnsubscribe = () => {\n // Fire-and-forget\n subId != null && rawClient.request(unsubscribeMethod, [subId])\n }\n\n rawClient._request(method, params, {\n onSuccess: (res: string, follow) => {\n subId = res\n if (obs.closed) {\n sendUnsubscribe()\n return\n }\n unsubInner = follow(subId, {\n next: (data: any) => obs.next(data),\n error: (e) => obs.error(e),\n })\n },\n onError(e) {\n obs.error(e)\n },\n })\n\n return () => {\n sendUnsubscribe()\n unsubInner?.()\n }\n })\n\n let unsafeApi: TypedApi<any, false>\n const typedApis = new WeakMap<ChainDefinition, TypedApi<any, true>>()\n\n const { broadcastTx$ } = client\n\n const getMetadata$ = (at: HexString) =>\n chainHead.getRuntimeContext$(at).pipe(map((ctx) => ctx.metadataRaw))\n\n const {\n holdBlock,\n finalized$,\n bestBlocks$,\n body$,\n header$,\n storage$,\n unfollow,\n } = chainHead\n\n const result: PolkadotClient = {\n getChainSpecData,\n\n getMetadata$,\n getMetadata: (atBlock: HexString, signal?: AbortSignal) =>\n firstValueFromWithSignal(getMetadata$(atBlock), signal),\n\n blocks$: chainHead.newBlocks$,\n hodlBlock: (block: HexString) => holdBlock(block, true),\n\n finalizedBlock$: finalized$,\n getFinalizedBlock: () => firstValueFrom(finalized$),\n\n bestBlocks$: chainHead.bestBlocks$,\n getBestBlocks: () => firstValueFrom(bestBlocks$),\n\n getBlockBody$: body$,\n getBlockBody: (hash: HexString, signal?: AbortSignal) =>\n firstValueFromWithSignal(body$(hash), signal),\n\n getBlockHeader$: header$,\n getBlockHeader: (hash: HexString, signal?: AbortSignal) =>\n firstValueFromWithSignal(header$(hash), signal),\n\n submit: (...args) => submit(chainHead, broadcastTx$, ...args),\n submitAndWatch: (tx) => submit$(chainHead, broadcastTx$, tx),\n\n getTypedApi: <D extends ChainDefinition>(chainDefinition: D) => {\n if (typedApis.has(chainDefinition)) return typedApis.get(chainDefinition)!\n const api = createApi<D>(chainHead, broadcastTx$, chainDefinition)\n\n typedApis.set(chainDefinition, api)\n return api\n },\n\n getUnsafeApi: <D extends ChainDefinition>() => {\n unsafeApi ??= createApi<D>(chainHead, broadcastTx$)\n return unsafeApi\n },\n\n rawQuery: (key, { at, signal } = {}) =>\n firstValueFromWithSignal(\n storage$(at ?? null, \"value\", () => {\n const hex = key.match(HEX_REGEX)?.[1]\n return hex ? `0x${hex}` : toHex(Binary.fromText(key))\n }).pipe(map((v) => v.value)),\n signal,\n ),\n\n destroy: () => {\n unfollow()\n client.destroy()\n },\n\n _request,\n _subscribe,\n }\n\n ;(result as any).___INTERNAL_DO_NOT_USE = chainHead\n\n return result\n}\n"],"names":["emissions","createRawClient"],"mappings":"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"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { EntryPointCodec, TypedefCodec,
|
|
1
|
+
import { EntryPointCodec, TypedefCodec, singleValueEntryPoint, runtimeCallEntryPoint, storageEntryPoint, mapLookupToTypedef, enumValueEntryPointNode, voidEntryPointNode } from '@polkadot-api/metadata-compatibility';
|
|
2
2
|
import { Vector, Tuple } from '@polkadot-api/substrate-bindings';
|
|
3
3
|
import { withWeakCache } from '../utils/with-weak-cache.js';
|
|
4
4
|
|
|
@@ -36,11 +36,7 @@ const getEnumEntry = (entry, side) => {
|
|
|
36
36
|
return { args, values };
|
|
37
37
|
};
|
|
38
38
|
const getDestCompatCtx = withWeakCache(
|
|
39
|
-
({
|
|
40
|
-
lookup,
|
|
41
|
-
assetId,
|
|
42
|
-
mappedMeta: { pallets, api }
|
|
43
|
-
}) => {
|
|
39
|
+
({ lookup, mappedMeta: { pallets, api } }) => {
|
|
44
40
|
const typeNodesCache = /* @__PURE__ */ new Map();
|
|
45
41
|
const getTypeDefNode = (id) => {
|
|
46
42
|
let result = typeNodesCache.get(id);
|
|
@@ -77,8 +73,7 @@ const getDestCompatCtx = withWeakCache(
|
|
|
77
73
|
return entry && singleValueEntryPoint(entry.type);
|
|
78
74
|
}
|
|
79
75
|
}
|
|
80
|
-
}
|
|
81
|
-
isAssetCompat: (asset) => assetId == null || isCompatible(asset, getTypeDefNode(assetId), getTypeDefNode)
|
|
76
|
+
}
|
|
82
77
|
};
|
|
83
78
|
}
|
|
84
79
|
);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"compat-ctx.js","sources":["../../../src/compatibility/compat-ctx.ts"],"sourcesContent":["import { ChainDefinition } from \"@/descriptors\"\nimport {\n EntryPoint,\n EntryPointCodec,\n enumValueEntryPointNode,\n
|
|
1
|
+
{"version":3,"file":"compat-ctx.js","sources":["../../../src/compatibility/compat-ctx.ts"],"sourcesContent":["import { ChainDefinition } from \"@/descriptors\"\nimport {\n EntryPoint,\n EntryPointCodec,\n enumValueEntryPointNode,\n mapLookupToTypedef,\n runtimeCallEntryPoint,\n singleValueEntryPoint,\n storageEntryPoint,\n TypedefCodec,\n TypedefNode,\n voidEntryPointNode,\n} from \"@polkadot-api/metadata-compatibility\"\nimport { Tuple, Vector } from \"@polkadot-api/substrate-bindings\"\nimport { RuntimeContext, type EnumEntry } from \"@polkadot-api/observable-client\"\nimport { withWeakCache } from \"@/utils/with-weak-cache\"\n\nconst EntryPointsCodec = Vector(EntryPointCodec)\nconst TypedefsCodec = Vector(TypedefCodec)\nconst [, typesDec] = Tuple(EntryPointsCodec, TypedefsCodec)\n\nexport const enum OpType {\n Storage = \"storage\",\n Tx = \"tx\",\n Event = \"events\",\n Const = \"constants\",\n ViewFns = \"viewFns\",\n Api = \"apis\",\n}\n\nexport interface CompatCtx {\n getTypeDefNode: (id: number) => TypedefNode\n getEntryPointNode: (\n type: OpType,\n group: string,\n name: string,\n ) => EntryPoint | undefined\n}\n\nexport const getUserCompatCtx = async ({\n metadataTypes,\n descriptors: awaitedDescriptors,\n}: ChainDefinition): Promise<CompatCtx> => {\n const [[entryPoints, typeDefNodes], descriptors] = await Promise.all([\n metadataTypes.then(typesDec),\n awaitedDescriptors,\n ])\n\n return {\n getTypeDefNode: (id) => typeDefNodes[id],\n getEntryPointNode: (type, group, name) => {\n const idx = descriptors[type]?.[group]?.[name]\n return idx == null ? idx : entryPoints[idx]\n },\n }\n}\n\nconst getEnumEntry = (entry: EnumEntry, side: \"args\" | \"values\") => {\n const node = enumValueEntryPointNode(entry)\n const [args, values] =\n side === \"args\" ? [node, voidEntryPointNode] : [voidEntryPointNode, node]\n return { args, values }\n}\n\nexport const getDestCompatCtx = withWeakCache(\n ({ lookup, mappedMeta: { pallets, api } }: RuntimeContext): CompatCtx => {\n const typeNodesCache = new Map<number, TypedefNode>()\n const getTypeDefNode = (id: number) => {\n let result = typeNodesCache.get(id)\n if (result) return result\n typeNodesCache.set(id, (result = mapLookupToTypedef(lookup(id))))\n return result\n }\n\n return {\n getTypeDefNode,\n getEntryPointNode: (type, group, name) => {\n switch (type) {\n case OpType.Storage: {\n const entry = pallets[group]?.storage.get(name)\n return entry && storageEntryPoint(entry)\n }\n case OpType.Tx: {\n const entry = pallets[group]?.call.get(name)\n return entry && getEnumEntry(entry, \"args\")\n }\n case OpType.Event: {\n const entry = pallets[group]?.event.get(name)\n return entry && getEnumEntry(entry, \"values\")\n }\n case OpType.ViewFns: {\n const entry = pallets[group]?.view.get(name)\n return entry && runtimeCallEntryPoint(entry)\n }\n case OpType.Api: {\n const entry = api[group]?.get(name)\n return entry && runtimeCallEntryPoint(entry)\n }\n case OpType.Const: {\n const entry = pallets[group]?.const.get(name)\n return entry && singleValueEntryPoint(entry.type)\n }\n }\n },\n }\n },\n)\n\nexport const getEntryAndGetter = <T extends CompatCtx | null>(\n compatCtx: T,\n type: OpType,\n group: string,\n name: string,\n): null extends T\n ? null\n : {\n entry?: EntryPoint\n getter: (id: number) => TypedefNode\n } => {\n if (!compatCtx) return null as any\n const { getEntryPointNode, getTypeDefNode: getter } = compatCtx\n return {\n entry: getEntryPointNode(type, group, name),\n getter,\n } as any\n}\n"],"names":["OpType"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"compatibility.js","sources":["../../../src/compatibility/compatibility.ts"],"sourcesContent":["import { RuntimeContext } from \"@polkadot-api/observable-client\"\nimport {\n CompatibilityCache,\n CompatibilityLevel,\n EntryPoint,\n entryPointsAreCompatible,\n TypedefNode,\n valueIsCompatibleWithDest,\n} from \"@polkadot-api/metadata-compatibility\"\nimport { ChainDefinition } from \"@/descriptors\"\nimport {\n CompatCtx,\n getDestCompatCtx,\n getEntryAndGetter,\n getUserCompatCtx,\n OpType,\n} from \"./compat-ctx\"\nimport { createProxyPath } from \"@/utils\"\nimport { withWeakCache } from \"@/utils/with-weak-cache\"\n\nexport type CompatApi<T> = Promise<(ctx: RuntimeContext) => T>\nexport type CompatHelper<T = any> = {\n level: CompatibilityLevel\n isCompatible: (from?: CompatibilityLevel) => boolean\n isValueCompatible: (dest: T) => boolean\n}\nexport type ArgsValueCompatHelper<Args = any, Value = any> = {\n args: CompatHelper<Args>\n value: CompatHelper<Value>\n isCompatible: (from?: CompatibilityLevel) => boolean\n}\nexport type ValueCompat = CompatApi<CompatHelper>\nexport type InOutCompat = CompatApi<ArgsValueCompatHelper>\
|
|
1
|
+
{"version":3,"file":"compatibility.js","sources":["../../../src/compatibility/compatibility.ts"],"sourcesContent":["import { RuntimeContext } from \"@polkadot-api/observable-client\"\nimport {\n CompatibilityCache,\n CompatibilityLevel,\n EntryPoint,\n entryPointsAreCompatible,\n TypedefNode,\n valueIsCompatibleWithDest,\n} from \"@polkadot-api/metadata-compatibility\"\nimport { ChainDefinition } from \"@/descriptors\"\nimport {\n CompatCtx,\n getDestCompatCtx,\n getEntryAndGetter,\n getUserCompatCtx,\n OpType,\n} from \"./compat-ctx\"\nimport { createProxyPath } from \"@/utils\"\nimport { withWeakCache } from \"@/utils/with-weak-cache\"\n\nexport type CompatApi<T> = Promise<(ctx: RuntimeContext) => T>\nexport type CompatHelper<T = any> = {\n level: CompatibilityLevel\n isCompatible: (from?: CompatibilityLevel) => boolean\n isValueCompatible: (dest: T) => boolean\n}\nexport type ArgsValueCompatHelper<Args = any, Value = any> = {\n args: CompatHelper<Args>\n value: CompatHelper<Value>\n isCompatible: (from?: CompatibilityLevel) => boolean\n}\nexport type ValueCompat = CompatApi<CompatHelper>\nexport type InOutCompat = CompatApi<ArgsValueCompatHelper>\n\nconst incompatible: CompatHelper = {\n level: CompatibilityLevel.Incompatible,\n isCompatible: () => false,\n isValueCompatible: () => false,\n}\nconst inOutIncompat: ArgsValueCompatHelper = {\n args: incompatible,\n value: incompatible,\n isCompatible: () => false,\n}\n\nconst identical: CompatHelper = {\n level: CompatibilityLevel.Identical,\n isCompatible: () => true,\n isValueCompatible: () => true,\n}\n\nconst getIsApiCompatible =\n (currentLevel: CompatibilityLevel) =>\n (target = CompatibilityLevel.BackwardsCompatible) =>\n currentLevel >= target\n\nconst getCompatibilityHelper = <K extends OpType>(\n kind: OpType,\n cache: CompatibilityCache,\n user: {\n entry?: EntryPoint\n getter: (id: number) => TypedefNode\n } | null,\n dest: {\n entry?: EntryPoint\n getter: (id: number) => TypedefNode\n },\n): K extends OpType.Tx | OpType.Event | OpType.Const\n ? CompatHelper\n : ArgsValueCompatHelper => {\n let result: { args: CompatHelper; value: CompatHelper }\n\n if (!dest.entry) result = inOutIncompat\n else {\n const { args } = dest.entry\n\n const _isCompat = (value: any) =>\n valueIsCompatibleWithDest(args, dest.getter, value)\n const isValueCompatible =\n kind === OpType.Storage\n ? (value: any[]) => _isCompat(value.length === 1 ? value[0] : value)\n : _isCompat\n\n if (!user?.entry) {\n const level = CompatibilityLevel.Partial\n result = {\n args: {\n level,\n isValueCompatible,\n isCompatible: getIsApiCompatible(level),\n },\n value: user ? incompatible : identical,\n }\n } else {\n const { values: userValues } = user.entry\n\n const { args, values } = entryPointsAreCompatible(\n user.entry,\n user.getter,\n dest.entry,\n dest.getter,\n cache,\n )\n\n result = {\n args: {\n level: args.level,\n isValueCompatible,\n isCompatible: getIsApiCompatible(args.level),\n },\n value:\n values.level === CompatibilityLevel.Incompatible\n ? incompatible\n : {\n level: values.level,\n isValueCompatible:\n values.level > CompatibilityLevel.Partial\n ? () => true\n : (val) =>\n valueIsCompatibleWithDest(userValues, user.getter, val),\n isCompatible: getIsApiCompatible(values.level),\n },\n }\n }\n }\n\n if (kind === OpType.Storage || kind === OpType.Api || kind === OpType.ViewFns)\n return Object.assign(result, {\n isCompatible: getIsApiCompatible(\n Math.min(result.args.level, result.value.level),\n ),\n }) as any\n\n return (kind === OpType.Tx ? result.args : result.value) as any\n}\n\nexport const createCompatHelpers = withWeakCache(\n (descriptors?: ChainDefinition) => {\n let userCtx: CompatCtx | null = null\n const awaitedUserCtx: Promise<CompatCtx | null> = (\n descriptors ? getUserCompatCtx(descriptors) : Promise.resolve(null)\n ).then((x) => (userCtx = x))\n\n // before calling this function we must await on `awaitedUserCtx`\n const getHelpers = withWeakCache((runtimeCtx: RuntimeContext) => {\n const cache = new Map()\n const destCtx = getDestCompatCtx(runtimeCtx)\n const getCompat = <K extends OpType>(kind: K) =>\n createProxyPath(\n (\n group: string,\n name: string,\n ): K extends OpType.Tx | OpType.Event | OpType.Const\n ? CompatHelper\n : ArgsValueCompatHelper =>\n getCompatibilityHelper(\n kind,\n cache,\n getEntryAndGetter(userCtx, kind, group, name),\n getEntryAndGetter(destCtx, kind, group, name),\n ),\n )\n\n return {\n tx: getCompat(OpType.Tx),\n constants: getCompat(OpType.Const),\n apis: getCompat(OpType.Api),\n view: getCompat(OpType.ViewFns),\n query: getCompat(OpType.Storage),\n event: getCompat(OpType.Event),\n }\n })\n\n const getClientCompat = async <\n K extends \"tx\" | \"constants\" | \"apis\" | \"view\" | \"query\" | \"event\",\n >(\n kind: K,\n group: string,\n name: string,\n ): CompatApi<\n K extends \"tx\" | \"event\" | \"constants\"\n ? CompatHelper\n : ArgsValueCompatHelper\n > => {\n await awaitedUserCtx\n return (ctx: RuntimeContext) => getHelpers(ctx)[kind][group][name] as any\n }\n\n return {\n getSyncHelpers: async (ctx: RuntimeContext) => {\n await awaitedUserCtx\n return getHelpers(ctx)\n },\n getClientCompat,\n }\n },\n)\n\nexport type CompatHelpers = ReturnType<typeof createCompatHelpers>\n"],"names":["args"],"mappings":"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"}
|
package/dist/src/index.d.ts
CHANGED
|
@@ -2,14 +2,14 @@ import { JsonRpcProvider } from '@polkadot-api/json-rpc-provider';
|
|
|
2
2
|
export { JsonRpcProvider } from '@polkadot-api/json-rpc-provider';
|
|
3
3
|
import { HexString, Codec, ResultPayload } from '@polkadot-api/substrate-bindings';
|
|
4
4
|
export { AccountId, Binary, BlockHeader, Codec, Enum, EnumVariant, GetEnum, HexString, ResultPayload, SS58AddressInfo, SS58String, SizedHex, _Enum, getSs58AddressInfo } from '@polkadot-api/substrate-bindings';
|
|
5
|
-
import { P as PolkadotClient, C as ChainDefinition, O as OfflineApi, D as DescriptorEntry, S as StorageDescriptor, T as TxDescriptor, a as PlainDescriptor, R as RuntimeDescriptor } from '../types-
|
|
6
|
-
export { A as ApisFromDef, b as ApisTypedef, c as ConstFromPalletsDef, E as ErrorsFromPalletsDef, d as EventPhase, e as EventsFromPalletsDef, F as FixedSizeArray, f as PalletsTypedef, Q as QueryFromPalletsDef, g as Transaction, h as TransactionValidityError, i as TxBestBlocksState, j as TxBroadcastEvent, k as TxBroadcasted, l as TxCallData, m as TxEntry, n as TxEvent, o as TxEventsPayload, p as TxFinalized, q as TxFinalizedPayload, r as TxFromPalletsDef, s as TxInBestBlocksFound, t as TxInBestBlocksNotFound, u as
|
|
5
|
+
import { P as PolkadotClient, C as ChainDefinition, O as OfflineApi, D as DescriptorEntry, S as StorageDescriptor, T as TxDescriptor, a as PlainDescriptor, R as RuntimeDescriptor } from '../types-CoK0ySKE.js';
|
|
6
|
+
export { A as ApisFromDef, b as ApisTypedef, c as ConstFromPalletsDef, E as ErrorsFromPalletsDef, d as EventPhase, e as EventsFromPalletsDef, F as FixedSizeArray, f as PalletsTypedef, Q as QueryFromPalletsDef, g as Transaction, h as TransactionValidityError, i as TxBestBlocksState, j as TxBroadcastEvent, k as TxBroadcasted, l as TxCallData, m as TxEntry, n as TxEvent, o as TxEventsPayload, p as TxFinalized, q as TxFinalizedPayload, r as TxFromPalletsDef, s as TxInBestBlocksFound, t as TxInBestBlocksNotFound, u as TxSigned, v as TypedApi, V as ViewFnsFromPalletsDef } from '../types-CoK0ySKE.js';
|
|
7
7
|
export { CompatibilityLevel } from '@polkadot-api/metadata-compatibility';
|
|
8
8
|
export { BlockInfo, BlockNotPinnedError } from '@polkadot-api/observable-client';
|
|
9
|
-
export { PolkadotSigner } from '@polkadot-api/polkadot-signer';
|
|
10
9
|
export { DescriptorValues } from '@polkadot-api/codegen';
|
|
11
10
|
import '@polkadot-api/substrate-client';
|
|
12
11
|
import 'rxjs';
|
|
12
|
+
import '@polkadot-api/polkadot-signer';
|
|
13
13
|
|
|
14
14
|
declare class InvalidTxError extends Error {
|
|
15
15
|
error: any;
|
|
@@ -64,8 +64,9 @@ declare function createClient(provider: JsonRpcProvider, { getMetadata, setMetad
|
|
|
64
64
|
*
|
|
65
65
|
* @param chainDefinition Pass descriptors from `@polkadot-api/descriptors`
|
|
66
66
|
* generated by `papi` CLI.
|
|
67
|
+
* @param hasher Blockchain's hasher. Defaults to `Blake2256`
|
|
67
68
|
*/
|
|
68
|
-
declare const getOfflineApi: <D extends ChainDefinition>(chainDefinition: D) => Promise<OfflineApi<D>>;
|
|
69
|
+
declare const getOfflineApi: <D extends ChainDefinition>(chainDefinition: D, hasher?: (payload: Uint8Array) => Uint8Array) => Promise<OfflineApi<D>>;
|
|
69
70
|
|
|
70
71
|
type Tuple<T> = [T, ...T[]];
|
|
71
72
|
type UnionToIntersection<U> = (U extends any ? (k: U) => void : never) extends (k: infer I) => void ? I : never;
|
package/dist/src/offline.js
CHANGED
|
@@ -1,9 +1,21 @@
|
|
|
1
1
|
import { getLookupFn, getDynamicBuilder } from '@polkadot-api/metadata-builders';
|
|
2
|
-
import { unifyMetadata,
|
|
3
|
-
import { fromHex,
|
|
4
|
-
import {
|
|
2
|
+
import { Blake2256, unifyMetadata, decAnyMetadata, Enum } from '@polkadot-api/substrate-bindings';
|
|
3
|
+
import { mergeUint8, fromHex, toHex } from '@polkadot-api/utils';
|
|
4
|
+
import { concat, of, NEVER } from 'rxjs';
|
|
5
5
|
|
|
6
|
-
const
|
|
6
|
+
const getOfflineExtensions = (genesis, lookupFn, builder, { nonce, mortality }) => {
|
|
7
|
+
const nonceType = lookupFn.metadata.extrinsic.extensions["CheckNonce"]?.type;
|
|
8
|
+
const nonceExt = nonceType != null ? [
|
|
9
|
+
{
|
|
10
|
+
id: "CheckNonce",
|
|
11
|
+
extra: toHex(builder.buildDefinition(nonceType).enc(nonce)),
|
|
12
|
+
additionalSigned: "0x"
|
|
13
|
+
}
|
|
14
|
+
] : [];
|
|
15
|
+
const mortalityExt = mortality == null && lookupFn.metadata.extrinsic.extensions["CheckMortality"] ? [{ id: "CheckMortality", extra: "0x00", additionalSigned: genesis }] : [];
|
|
16
|
+
return [...mortalityExt, ...nonceExt];
|
|
17
|
+
};
|
|
18
|
+
const createOfflineTxEntry = (bindings, pallet, name, genesisHex, metadataRaw, lookupFn, dynamicBuilder) => {
|
|
7
19
|
let codecs;
|
|
8
20
|
try {
|
|
9
21
|
codecs = dynamicBuilder.buildCall(pallet, name);
|
|
@@ -17,28 +29,44 @@ const createOfflineTxEntry = (pallet, name, metadataRaw, dynamicBuilder, signExt
|
|
|
17
29
|
return {
|
|
18
30
|
encodedData,
|
|
19
31
|
decodedCall: Enum(pallet, Enum(name, arg)),
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
32
|
+
create: async (creator, txOptions) => {
|
|
33
|
+
return fromHex(
|
|
34
|
+
await creator(
|
|
35
|
+
{
|
|
36
|
+
callData: toHex(encodedData),
|
|
37
|
+
context: {
|
|
38
|
+
metadata: toHex(metadataRaw),
|
|
39
|
+
bestBlockHash: genesisHex,
|
|
40
|
+
bestBlockHeight: 0,
|
|
41
|
+
genesisHash: genesisHex,
|
|
42
|
+
token: null
|
|
43
|
+
},
|
|
44
|
+
extensions: getOfflineExtensions(
|
|
45
|
+
genesisHex,
|
|
46
|
+
lookupFn,
|
|
47
|
+
dynamicBuilder,
|
|
48
|
+
txOptions
|
|
49
|
+
),
|
|
50
|
+
signer: null,
|
|
51
|
+
txExtVersion: null,
|
|
52
|
+
version: 1
|
|
53
|
+
},
|
|
54
|
+
txOptions,
|
|
55
|
+
bindings,
|
|
56
|
+
false
|
|
57
|
+
)
|
|
58
|
+
);
|
|
59
|
+
}
|
|
26
60
|
};
|
|
27
61
|
};
|
|
28
62
|
};
|
|
29
|
-
const getOfflineApi = async ({ genesis: genesisHex, getMetadata }) => {
|
|
63
|
+
const getOfflineApi = async ({ genesis: genesisHex, getMetadata }, hasher = Blake2256) => {
|
|
30
64
|
if (!genesisHex) throw new Error("Missing genesis hash");
|
|
31
|
-
const genesis = fromHex(genesisHex);
|
|
32
65
|
const metadataRaw = await getMetadata();
|
|
33
|
-
const metadata
|
|
34
|
-
const lookupFn = getLookupFn(metadata
|
|
66
|
+
const metadata = unifyMetadata(decAnyMetadata(metadataRaw));
|
|
67
|
+
const lookupFn = getLookupFn(metadata);
|
|
35
68
|
const dynamicBuilder = getDynamicBuilder(lookupFn);
|
|
36
|
-
const
|
|
37
|
-
genesis,
|
|
38
|
-
lookupFn,
|
|
39
|
-
dynamicBuilder
|
|
40
|
-
);
|
|
41
|
-
const getPallet = (name) => metadata$1.pallets.find((p) => p.name === name);
|
|
69
|
+
const getPallet = (name) => metadata.pallets.find((p) => p.name === name);
|
|
42
70
|
const target = {};
|
|
43
71
|
const createProxy = (propCall) => new Proxy(target, {
|
|
44
72
|
get(_, prop) {
|
|
@@ -61,13 +89,34 @@ const getOfflineApi = async ({ genesis: genesisHex, getMetadata }) => {
|
|
|
61
89
|
throw new Error(`Runtime entry Constant(${pallet}.${name}) not found`);
|
|
62
90
|
return dynamicBuilder.buildConstant(pallet, name).dec(constant.value);
|
|
63
91
|
});
|
|
92
|
+
const finalized = {
|
|
93
|
+
hash: genesisHex,
|
|
94
|
+
parent: "0x" + "0".repeat(64),
|
|
95
|
+
number: 0
|
|
96
|
+
};
|
|
97
|
+
const tips = [finalized];
|
|
98
|
+
const txCreatorBindings = {
|
|
99
|
+
hasher: (payload) => of(hasher(payload)),
|
|
100
|
+
blocks: concat(
|
|
101
|
+
of(
|
|
102
|
+
{ type: "newTip", finalized, tips, newTip: finalized },
|
|
103
|
+
{ type: "finalized", finalized, tips }
|
|
104
|
+
),
|
|
105
|
+
NEVER
|
|
106
|
+
),
|
|
107
|
+
call: () => {
|
|
108
|
+
throw new Error("OfflineApi cannot perform runtime calls");
|
|
109
|
+
}
|
|
110
|
+
};
|
|
64
111
|
const tx = createProxyPath(
|
|
65
112
|
(pallet, name) => createOfflineTxEntry(
|
|
113
|
+
txCreatorBindings,
|
|
66
114
|
pallet,
|
|
67
115
|
name,
|
|
116
|
+
genesisHex,
|
|
68
117
|
metadataRaw,
|
|
69
|
-
|
|
70
|
-
|
|
118
|
+
lookupFn,
|
|
119
|
+
dynamicBuilder
|
|
71
120
|
)
|
|
72
121
|
);
|
|
73
122
|
return { constants, tx };
|
package/dist/src/offline.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"offline.js","sources":["../../src/offline.ts"],"sourcesContent":["import {
|
|
1
|
+
{"version":3,"file":"offline.js","sources":["../../src/offline.ts"],"sourcesContent":["import {\n getDynamicBuilder,\n getLookupFn,\n MetadataLookup,\n} from \"@polkadot-api/metadata-builders\"\nimport { TxCreatorBindings, TxPayloadV1 } from \"@polkadot-api/polkadot-signer\"\nimport {\n Blake2256,\n decAnyMetadata,\n Enum,\n unifyMetadata,\n} from \"@polkadot-api/substrate-bindings\"\nimport { fromHex, mergeUint8, toHex } from \"@polkadot-api/utils\"\nimport { concat, NEVER, of } from \"rxjs\"\nimport type { ChainDefinition } from \"./descriptors\"\nimport type { ExtensionConstraints, OfflineTxEntry } from \"./tx\"\nimport type { OfflineApi } from \"./types\"\n\nconst getOfflineExtensions = (\n genesis: string,\n lookupFn: MetadataLookup,\n builder: ReturnType<typeof getDynamicBuilder>,\n { nonce, mortality }: { nonce: number; mortality?: any },\n): TxPayloadV1[\"extensions\"] => {\n const nonceType = lookupFn.metadata.extrinsic.extensions[\"CheckNonce\"]?.type\n const nonceExt =\n nonceType != null\n ? [\n {\n id: \"CheckNonce\",\n extra: toHex(builder.buildDefinition(nonceType).enc(nonce)),\n additionalSigned: \"0x\",\n },\n ]\n : []\n // only set mortality if not set by the user\n const mortalityExt =\n mortality == null &&\n lookupFn.metadata.extrinsic.extensions[\"CheckMortality\"]\n ? [{ id: \"CheckMortality\", extra: \"0x00\", additionalSigned: genesis }]\n : []\n return [...mortalityExt, ...nonceExt]\n}\n\nconst createOfflineTxEntry = <\n Arg extends {} | undefined,\n EC extends ExtensionConstraints,\n>(\n bindings: TxCreatorBindings,\n pallet: string,\n name: string,\n genesisHex: string,\n metadataRaw: Uint8Array,\n lookupFn: MetadataLookup,\n dynamicBuilder: ReturnType<typeof getDynamicBuilder>,\n): OfflineTxEntry<Arg, EC> => {\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 const { location, codec } = codecs\n const locationBytes = new Uint8Array(location)\n\n return (arg: Arg) => {\n const encodedData = mergeUint8([locationBytes, codec.enc(arg)])\n\n return {\n encodedData,\n decodedCall: Enum(pallet, Enum(name, arg)),\n create: async (creator, txOptions) => {\n return fromHex(\n await creator(\n {\n callData: toHex(encodedData),\n context: {\n metadata: toHex(metadataRaw),\n bestBlockHash: genesisHex,\n bestBlockHeight: 0,\n genesisHash: genesisHex,\n token: null,\n },\n extensions: getOfflineExtensions(\n genesisHex,\n lookupFn,\n dynamicBuilder,\n txOptions,\n ),\n signer: null,\n txExtVersion: null,\n version: 1,\n },\n txOptions,\n bindings,\n false,\n ),\n )\n },\n }\n }\n}\n\n/**\n * Asynchronously create an instance of `OfflineApi`.\n * OfflineApi allows to create and sign transactions and access chain constants.\n *\n * @param chainDefinition Pass descriptors from `@polkadot-api/descriptors`\n * generated by `papi` CLI.\n * @param hasher Blockchain's hasher. Defaults to `Blake2256`\n */\nexport const getOfflineApi: <D extends ChainDefinition>(\n chainDefinition: D,\n hasher?: (payload: Uint8Array) => Uint8Array,\n) => Promise<OfflineApi<D>> = async (\n { genesis: genesisHex, getMetadata },\n hasher = Blake2256,\n) => {\n if (!genesisHex) throw new Error(\"Missing genesis hash\")\n const metadataRaw = await getMetadata()\n const metadata = unifyMetadata(decAnyMetadata(metadataRaw))\n const lookupFn = getLookupFn(metadata)\n const dynamicBuilder = getDynamicBuilder(lookupFn)\n\n const getPallet = (name: string) =>\n metadata.pallets.find((p) => p.name === name)\n\n const target = {}\n const createProxy = (propCall: (prop: string) => unknown) =>\n new Proxy(target, {\n get(_, prop) {\n return propCall(prop as string)\n },\n })\n\n const createProxyPath = <T>(pathCall: (a: string, b: string) => T) => {\n const cache: Record<string, Record<string, T>> = {}\n return createProxy((a) => {\n if (!cache[a]) cache[a] = {}\n return createProxy((b) => {\n if (!cache[a][b]) cache[a][b] = pathCall(a, b)\n return cache[a][b]\n })\n }) as Record<string, Record<string, T>>\n }\n\n const constants = createProxyPath((pallet, name) => {\n const constant = getPallet(pallet)?.constants.find((c) => c.name === name)\n if (!constant)\n throw new Error(`Runtime entry Constant(${pallet}.${name}) not found`)\n return dynamicBuilder.buildConstant(pallet, name).dec(constant.value)\n })\n\n const finalized = {\n hash: genesisHex,\n parent: \"0x\" + \"0\".repeat(64),\n number: 0,\n }\n const tips = [finalized]\n const txCreatorBindings: TxCreatorBindings = {\n hasher: (payload) => of(hasher(payload)),\n blocks: concat(\n of(\n { type: \"newTip\" as const, finalized, tips, newTip: finalized },\n { type: \"finalized\" as const, finalized, tips },\n ),\n NEVER,\n ),\n call: () => {\n throw new Error(\"OfflineApi cannot perform runtime calls\")\n },\n }\n\n const tx = createProxyPath((pallet, name) =>\n createOfflineTxEntry(\n txCreatorBindings,\n pallet,\n name,\n genesisHex,\n metadataRaw,\n lookupFn,\n dynamicBuilder,\n ),\n )\n\n return { constants, tx } as any\n}\n"],"names":[],"mappings":"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"}
|
package/dist/src/static-apis.js
CHANGED
|
@@ -10,7 +10,7 @@ import { stgGetKey } from './utils/stg-get-key.js';
|
|
|
10
10
|
import { createTxEntry } from './tx/tx.js';
|
|
11
11
|
import { withWeakCache } from './utils/with-weak-cache.js';
|
|
12
12
|
|
|
13
|
-
const createStaticApis = (chainHead, broadcast$, { getClientCompat, getSyncHelpers
|
|
13
|
+
const createStaticApis = (bindings, chainHead, broadcast$, { getClientCompat, getSyncHelpers }) => {
|
|
14
14
|
const txFromCallData = ({ dynamicBuilder, lookup }) => (callData) => {
|
|
15
15
|
try {
|
|
16
16
|
const {
|
|
@@ -18,12 +18,12 @@ const createStaticApis = (chainHead, broadcast$, { getClientCompat, getSyncHelpe
|
|
|
18
18
|
value: { type: name, value: args }
|
|
19
19
|
} = dynamicBuilder.buildDefinition(lookup.call).dec(callData);
|
|
20
20
|
return createTxEntry(
|
|
21
|
+
bindings,
|
|
21
22
|
pallet,
|
|
22
23
|
name,
|
|
23
24
|
chainHead,
|
|
24
25
|
broadcast$,
|
|
25
|
-
getClientCompat("tx", pallet, name)
|
|
26
|
-
getIsAsssetCompat
|
|
26
|
+
getClientCompat("tx", pallet, name)
|
|
27
27
|
)(args);
|
|
28
28
|
} catch {
|
|
29
29
|
throw new Error("Invalid call data");
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"static-apis.js","sources":["../../src/static-apis.ts"],"sourcesContent":["import { CompatHelpers } from \"@/compatibility\"\nimport { PullOptions } from \"@/types\"\nimport { createProxyPath, firstValueFromWithSignal } from \"@/utils\"\nimport { constFromCtx } from \"@/utils/const-from-ctx\"\nimport { getCallData } from \"@/utils/get-call-data\"\nimport { stgGetKey } from \"@/utils/stg-get-key\"\nimport { ChainHead$, RuntimeContext } from \"@polkadot-api/observable-client\"\nimport { mergeMap, Observable } from \"rxjs\"\nimport { createTxEntry, Transaction } from \"./tx\"\nimport { withWeakCache } from \"./utils/with-weak-cache\"\n\nexport const createStaticApis = (\n chainHead: ChainHead$,\n broadcast$: (tx: Uint8Array) => Observable<never>,\n { getClientCompat, getSyncHelpers
|
|
1
|
+
{"version":3,"file":"static-apis.js","sources":["../../src/static-apis.ts"],"sourcesContent":["import { CompatHelpers } from \"@/compatibility\"\nimport { PullOptions } from \"@/types\"\nimport { createProxyPath, firstValueFromWithSignal } from \"@/utils\"\nimport { constFromCtx } from \"@/utils/const-from-ctx\"\nimport { getCallData } from \"@/utils/get-call-data\"\nimport { stgGetKey } from \"@/utils/stg-get-key\"\nimport { ChainHead$, RuntimeContext } from \"@polkadot-api/observable-client\"\nimport { TxCreatorBindings } from \"@polkadot-api/polkadot-signer\"\nimport { mergeMap, Observable } from \"rxjs\"\nimport { createTxEntry, ExtensionConstraints, Transaction } from \"./tx\"\nimport { withWeakCache } from \"./utils/with-weak-cache\"\n\nexport const createStaticApis = <EC extends ExtensionConstraints>(\n bindings: TxCreatorBindings,\n chainHead: ChainHead$,\n broadcast$: (tx: Uint8Array) => Observable<never>,\n { getClientCompat, getSyncHelpers }: CompatHelpers,\n) => {\n const txFromCallData =\n ({ dynamicBuilder, lookup }: RuntimeContext) =>\n (callData: Uint8Array): Transaction<EC> => {\n try {\n const {\n type: pallet,\n value: { type: name, value: args },\n } = dynamicBuilder.buildDefinition(lookup.call!).dec(callData)\n\n return createTxEntry(\n bindings,\n pallet,\n name,\n chainHead,\n broadcast$,\n getClientCompat(\"tx\", pallet, name),\n )(args)\n } catch {\n throw new Error(\"Invalid call data\")\n }\n }\n\n return ({ at, signal }: PullOptions = {}) =>\n firstValueFromWithSignal(\n chainHead.getRuntimeContext$(at ?? null).pipe(\n mergeMap(\n withWeakCache(async (ctx) => {\n const compat = await getSyncHelpers(ctx)\n return {\n id: ctx.codeHash,\n txFromCallData: txFromCallData(ctx),\n constants: createProxyPath((pallet, name) =>\n constFromCtx(ctx, pallet, name),\n ),\n query: createProxyPath((pallet, name) => ({\n getKey: stgGetKey(\n ctx,\n pallet,\n name,\n compat.query[pallet][name].args.isValueCompatible,\n ),\n })),\n tx: createProxyPath((pallet, name) => ({\n getEncodedData: (arg: any) =>\n getCallData(\n ctx.dynamicBuilder,\n compat.tx[pallet][name].isValueCompatible,\n pallet,\n name,\n arg,\n ),\n })),\n compat,\n }\n }),\n ),\n ),\n signal,\n )\n}\n"],"names":[],"mappings":";;;;;;;;;;;;AAYO,MAAM,gBAAA,GAAmB,CAC9B,QAAA,EACA,SAAA,EACA,YACA,EAAE,eAAA,EAAiB,gBAAe,KAC/B;AACH,EAAA,MAAM,iBACJ,CAAC,EAAE,gBAAgB,MAAA,EAAO,KAC1B,CAAC,QAAA,KAA0C;AACzC,IAAA,IAAI;AACF,MAAA,MAAM;AAAA,QACJ,IAAA,EAAM,MAAA;AAAA,QACN,KAAA,EAAO,EAAE,IAAA,EAAM,IAAA,EAAM,OAAO,IAAA;AAAK,UAC/B,cAAA,CAAe,eAAA,CAAgB,OAAO,IAAK,CAAA,CAAE,IAAI,QAAQ,CAAA;AAE7D,MAAA,OAAO,aAAA;AAAA,QACL,QAAA;AAAA,QACA,MAAA;AAAA,QACA,IAAA;AAAA,QACA,SAAA;AAAA,QACA,UAAA;AAAA,QACA,eAAA,CAAgB,IAAA,EAAM,MAAA,EAAQ,IAAI;AAAA,QAClC,IAAI,CAAA;AAAA,IACR,CAAA,CAAA,MAAQ;AACN,MAAA,MAAM,IAAI,MAAM,mBAAmB,CAAA;AAAA,IACrC;AAAA,EACF,CAAA;AAEF,EAAA,OAAO,CAAC,EAAE,EAAA,EAAI,MAAA,EAAO,GAAiB,EAAC,KACrC,wBAAA;AAAA,IACE,SAAA,CAAU,kBAAA,CAAmB,EAAA,IAAM,IAAI,CAAA,CAAE,IAAA;AAAA,MACvC,QAAA;AAAA,QACE,aAAA,CAAc,OAAO,GAAA,KAAQ;AAC3B,UAAA,MAAM,MAAA,GAAS,MAAM,cAAA,CAAe,GAAG,CAAA;AACvC,UAAA,OAAO;AAAA,YACL,IAAI,GAAA,CAAI,QAAA;AAAA,YACR,cAAA,EAAgB,eAAe,GAAG,CAAA;AAAA,YAClC,SAAA,EAAW,eAAA;AAAA,cAAgB,CAAC,MAAA,EAAQ,IAAA,KAClC,YAAA,CAAa,GAAA,EAAK,QAAQ,IAAI;AAAA,aAChC;AAAA,YACA,KAAA,EAAO,eAAA,CAAgB,CAAC,MAAA,EAAQ,IAAA,MAAU;AAAA,cACxC,MAAA,EAAQ,SAAA;AAAA,gBACN,GAAA;AAAA,gBACA,MAAA;AAAA,gBACA,IAAA;AAAA,gBACA,OAAO,KAAA,CAAM,MAAM,CAAA,CAAE,IAAI,EAAE,IAAA,CAAK;AAAA;AAClC,aACF,CAAE,CAAA;AAAA,YACF,EAAA,EAAI,eAAA,CAAgB,CAAC,MAAA,EAAQ,IAAA,MAAU;AAAA,cACrC,cAAA,EAAgB,CAAC,GAAA,KACf,WAAA;AAAA,gBACE,GAAA,CAAI,cAAA;AAAA,gBACJ,MAAA,CAAO,EAAA,CAAG,MAAM,CAAA,CAAE,IAAI,CAAA,CAAE,iBAAA;AAAA,gBACxB,MAAA;AAAA,gBACA,IAAA;AAAA,gBACA;AAAA;AACF,aACJ,CAAE,CAAA;AAAA,YACF;AAAA,WACF;AAAA,QACF,CAAC;AAAA;AACH,KACF;AAAA,IACA;AAAA,GACF;AACJ;;;;"}
|