polkadot-api 1.11.2 → 1.12.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/bin/cli.mjs +1 -1
- package/dist/esm/client.mjs +6 -3
- package/dist/esm/client.mjs.map +1 -1
- package/dist/index.d.ts +23 -4
- package/dist/index.js +5 -2
- package/dist/index.js.map +1 -1
- package/dist/umd/index.min.js +2 -2
- package/package.json +7 -7
package/bin/cli.mjs
CHANGED
package/dist/esm/client.mjs
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { enumValueEntryPointNode, voidEntryPointNode, storageEntryPoint, singleValueEntryPoint, runtimeCallEntryPoint } from '@polkadot-api/metadata-compatibility';
|
|
2
2
|
import { getObservableClient } from '@polkadot-api/observable-client';
|
|
3
3
|
import { createClient as createClient$1 } from '@polkadot-api/substrate-client';
|
|
4
|
-
import { defer, map, catchError, shareReplay, firstValueFrom } from 'rxjs';
|
|
4
|
+
import { from, defer, map, catchError, shareReplay, firstValueFrom } from 'rxjs';
|
|
5
5
|
import { createRuntimeToken, createCompatibilityToken, getCompatibilityApi, compatibilityHelper, OpType } from './compatibility.mjs';
|
|
6
6
|
import { createConstantEntry } from './constants.mjs';
|
|
7
7
|
import { createEventEntry } from './event.mjs';
|
|
@@ -178,9 +178,12 @@ const createApi = (compatibilityToken, chainHead, broadcast$) => {
|
|
|
178
178
|
view
|
|
179
179
|
};
|
|
180
180
|
};
|
|
181
|
-
function createClient(provider) {
|
|
181
|
+
function createClient(provider, { getMetadata, setMetadata } = {}) {
|
|
182
182
|
const rawClient = createClient$1(provider);
|
|
183
|
-
const client = getObservableClient(rawClient
|
|
183
|
+
const client = getObservableClient(rawClient, {
|
|
184
|
+
getMetadata: getMetadata ? (codeHash) => from(getMetadata(codeHash)) : void 0,
|
|
185
|
+
setMetadata
|
|
186
|
+
});
|
|
184
187
|
const { getChainSpecData } = rawClient;
|
|
185
188
|
const { genesis$, ..._chainHead } = client.chainHead$();
|
|
186
189
|
const chainHead = {
|
package/dist/esm/client.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.mjs","sources":["../../src/client.ts"],"sourcesContent":["import { JsonRpcProvider } from \"@polkadot-api/json-rpc-provider\"\nimport {\n enumValueEntryPointNode,\n runtimeCallEntryPoint,\n singleValueEntryPoint,\n storageEntryPoint,\n voidEntryPointNode,\n} from \"@polkadot-api/metadata-compatibility\"\nimport {\n ChainHead$,\n RuntimeContext,\n getObservableClient,\n} from \"@polkadot-api/observable-client\"\nimport { Binary } from \"@polkadot-api/substrate-bindings\"\nimport {\n SubstrateClient,\n createClient as createRawClient,\n} from \"@polkadot-api/substrate-client\"\nimport {\n Observable,\n catchError,\n defer,\n firstValueFrom,\n map,\n shareReplay,\n} from \"rxjs\"\nimport {\n CompatibilityToken,\n OpType,\n RuntimeToken,\n compatibilityHelper,\n createCompatibilityToken,\n createRuntimeToken,\n getCompatibilityApi,\n} from \"./compatibility\"\nimport { createConstantEntry } from \"./constants\"\nimport { ChainDefinition } from \"./descriptors\"\nimport { createEventEntry } from \"./event\"\nimport { createRuntimeCallEntry } from \"./runtime-call\"\nimport { createStorageEntry } from \"./storage\"\nimport { createTxEntry, submit, submit$ } from \"./tx\"\nimport type { AnyApi, PolkadotClient } from \"./types\"\nimport { createWatchEntries } from \"./watch-entries\"\nimport { createViewFnEntry } from \"./viewFns\"\n\nconst createApi = <Unsafe extends true | false, D>(\n compatibilityToken: Promise<CompatibilityToken | RuntimeToken>,\n chainHead: ChainHead$,\n broadcast$: (tx: string) => Observable<never>,\n): AnyApi<Unsafe, D> => {\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 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 getPallet = (ctx: RuntimeContext, name: string) =>\n ctx.lookup.metadata.pallets.find((p) => p.name === name)\n\n const getWatchEntries = createWatchEntries(\n chainHead.pinnedBlocks$,\n chainHead.storage$,\n chainHead.withRuntime,\n )\n const query = createProxyPath((pallet, name) =>\n createStorageEntry(\n pallet,\n name,\n chainHead,\n getWatchEntries,\n compatibilityHelper(\n compatibilityToken,\n (r) => r.getEntryPoint(OpType.Storage, pallet, name),\n // TODO this is way sub-optimal. Needs some rethought - maybe a builder for entry points?.\n (ctx) => {\n const item = getPallet(ctx, pallet)?.storage?.items.find(\n (s) => s.name === name,\n )\n return item == null ? null : storageEntryPoint(item)\n },\n ),\n ),\n )\n\n const getEnumEntry = (\n ctx: RuntimeContext,\n side: \"args\" | \"values\",\n id: number | undefined,\n name: string,\n ) => {\n if (id == null) return null\n const entry = ctx.lookup(id)\n if (entry.type !== \"enum\") throw new Error(\"Expected enum\")\n\n if (entry.value[name] == null) return null\n const node = enumValueEntryPointNode(entry.value[name])\n return {\n args: side === \"args\" ? node : voidEntryPointNode,\n values: side === \"args\" ? voidEntryPointNode : node,\n }\n }\n const tx = createProxyPath((pallet, name) =>\n createTxEntry(\n pallet,\n name,\n chainHead,\n broadcast$,\n compatibilityHelper(\n compatibilityToken,\n (r) => r.getEntryPoint(OpType.Tx, pallet, name),\n (ctx) =>\n getEnumEntry(ctx, \"args\", getPallet(ctx, pallet)?.calls?.type, name),\n ),\n true,\n ),\n )\n\n const event = createProxyPath((pallet, name) =>\n createEventEntry(\n pallet,\n name,\n chainHead,\n compatibilityHelper(\n compatibilityToken,\n (r) => r.getEntryPoint(OpType.Event, pallet, name),\n (ctx) =>\n getEnumEntry(\n ctx,\n \"values\",\n getPallet(ctx, pallet)?.events?.type,\n name,\n ),\n ),\n ),\n )\n\n const constants = createProxyPath((pallet, name) =>\n createConstantEntry(\n pallet,\n name,\n compatibilityHelper(\n compatibilityToken,\n (r) => r.getEntryPoint(OpType.Const, pallet, name),\n (ctx) => {\n const item = getPallet(ctx, pallet)?.constants.find(\n (c) => c.name === name,\n )?.type\n return item == null ? null : singleValueEntryPoint(item)\n },\n ),\n ),\n )\n\n const apis = createProxyPath((api, method) =>\n createRuntimeCallEntry(\n api,\n method,\n chainHead,\n compatibilityHelper(\n compatibilityToken,\n (r) => r.getEntryPoint(OpType.Api, api, method),\n (ctx) =>\n runtimeCallEntryPoint(\n ctx.lookup.metadata.apis\n .find((a) => a.name === api)!\n .methods.find((m) => m.name === method)!,\n ),\n ),\n ),\n )\n const view = createProxyPath((pallet, entry) =>\n createViewFnEntry(\n pallet,\n entry,\n chainHead,\n compatibilityHelper(\n compatibilityToken,\n (r) => r.getEntryPoint(OpType.ViewFns, pallet, entry),\n (ctx) =>\n runtimeCallEntryPoint(\n ctx.lookup.metadata.pallets\n .find((a) => a.name === pallet)!\n .viewFns.find((m) => m.name === entry)!,\n ),\n ),\n ),\n )\n\n const _callDataTx = (\n callData: Binary,\n token: CompatibilityToken | RuntimeToken,\n ) => {\n const { lookup, dynamicBuilder } = getCompatibilityApi(token).runtime()\n try {\n const decoded = dynamicBuilder\n .buildDefinition(lookup.call!)\n .dec(callData.asBytes())\n const pallet = decoded.type\n const call = decoded.value.type\n const args = decoded.value.value\n\n return createTxEntry(\n pallet,\n call,\n chainHead,\n broadcast$,\n compatibilityHelper(\n compatibilityToken,\n (r) => r.getEntryPoint(OpType.Tx, pallet, call),\n (ctx) =>\n getEnumEntry(\n ctx,\n \"args\",\n getPallet(ctx, pallet)?.calls?.type,\n call,\n ),\n ),\n false,\n )(args)\n } catch {\n throw new Error(\"createTx: invalid call data\")\n }\n }\n\n return {\n query,\n txFromCallData: (\n callData: Binary,\n token?: CompatibilityToken | RuntimeToken,\n ) =>\n token\n ? _callDataTx(callData, token)\n : compatibilityToken.then((t) => _callDataTx(callData, t)),\n tx,\n event,\n apis,\n constants,\n view,\n } as any\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 * @example\n *\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))\n *\n */\nexport function createClient(provider: JsonRpcProvider): PolkadotClient {\n const rawClient: SubstrateClient = createRawClient(provider)\n const client = getObservableClient(rawClient)\n const { getChainSpecData } = rawClient\n\n const { genesis$, ..._chainHead } = client.chainHead$()\n const chainHead: ChainHead$ = {\n ..._chainHead,\n genesis$: defer(getChainSpecData).pipe(\n map(({ genesisHash }) => genesisHash),\n catchError(() => genesis$),\n shareReplay(1),\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 let runtimeToken: Promise<RuntimeToken>\n const compatibilityToken = new WeakMap<\n ChainDefinition,\n Promise<CompatibilityToken<any>>\n >()\n const getChainToken = (chainDefinition: ChainDefinition) => {\n const result =\n compatibilityToken.get(chainDefinition) ||\n createCompatibilityToken(chainDefinition, chainHead)\n compatibilityToken.set(chainDefinition, result)\n return result\n }\n const getRuntimeToken = <D>(): Promise<RuntimeToken<D>> =>\n (runtimeToken ??= createRuntimeToken(chainHead))\n const { broadcastTx$ } = client\n return {\n getChainSpecData,\n\n blocks$: chainHead.newBlocks$,\n\n finalizedBlock$: chainHead.finalized$,\n getFinalizedBlock: () => firstValueFrom(chainHead.finalized$),\n\n bestBlocks$: chainHead.bestBlocks$,\n getBestBlocks: () => firstValueFrom(chainHead.bestBlocks$),\n\n watchBlockBody: chainHead.body$,\n getBlockBody: (hash: string) => firstValueFrom(chainHead.body$(hash)),\n\n getBlockHeader: (hash?: string) =>\n firstValueFrom(chainHead.header$(hash ?? null)),\n\n submit: (...args) => submit(chainHead, broadcastTx$, ...args),\n submitAndWatch: (...args) => submit$(chainHead, broadcastTx$, ...args),\n\n getTypedApi: <D extends ChainDefinition>(chainDefinition: D) => {\n const token = getChainToken(chainDefinition)\n return Object.assign(\n createApi<false, D>(token, chainHead, broadcastTx$),\n { compatibilityToken: token },\n )\n },\n\n getUnsafeApi: <D>() => {\n const token = getRuntimeToken()\n return Object.assign(createApi<true, D>(token, chainHead, broadcastTx$), {\n runtimeToken: token,\n })\n },\n\n destroy: () => {\n chainHead.unfollow()\n client.destroy()\n },\n\n _request,\n }\n}\n"],"names":["createRawClient"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"client.mjs","sources":["../../src/client.ts"],"sourcesContent":["import { JsonRpcProvider } from \"@polkadot-api/json-rpc-provider\"\nimport {\n enumValueEntryPointNode,\n runtimeCallEntryPoint,\n singleValueEntryPoint,\n storageEntryPoint,\n voidEntryPointNode,\n} from \"@polkadot-api/metadata-compatibility\"\nimport {\n ChainHead$,\n RuntimeContext,\n getObservableClient,\n} from \"@polkadot-api/observable-client\"\nimport { Binary, HexString } from \"@polkadot-api/substrate-bindings\"\nimport {\n SubstrateClient,\n createClient as createRawClient,\n} from \"@polkadot-api/substrate-client\"\nimport {\n Observable,\n catchError,\n defer,\n firstValueFrom,\n from,\n map,\n shareReplay,\n} from \"rxjs\"\nimport {\n CompatibilityToken,\n OpType,\n RuntimeToken,\n compatibilityHelper,\n createCompatibilityToken,\n createRuntimeToken,\n getCompatibilityApi,\n} from \"./compatibility\"\nimport { createConstantEntry } from \"./constants\"\nimport { ChainDefinition } from \"./descriptors\"\nimport { createEventEntry } from \"./event\"\nimport { createRuntimeCallEntry } from \"./runtime-call\"\nimport { createStorageEntry } from \"./storage\"\nimport { createTxEntry, submit, submit$ } from \"./tx\"\nimport type { AnyApi, PolkadotClient } from \"./types\"\nimport { createWatchEntries } from \"./watch-entries\"\nimport { createViewFnEntry } from \"./viewFns\"\n\nconst createApi = <Unsafe extends true | false, D>(\n compatibilityToken: Promise<CompatibilityToken | RuntimeToken>,\n chainHead: ChainHead$,\n broadcast$: (tx: string) => Observable<never>,\n): AnyApi<Unsafe, D> => {\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 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 getPallet = (ctx: RuntimeContext, name: string) =>\n ctx.lookup.metadata.pallets.find((p) => p.name === name)\n\n const getWatchEntries = createWatchEntries(\n chainHead.pinnedBlocks$,\n chainHead.storage$,\n chainHead.withRuntime,\n )\n const query = createProxyPath((pallet, name) =>\n createStorageEntry(\n pallet,\n name,\n chainHead,\n getWatchEntries,\n compatibilityHelper(\n compatibilityToken,\n (r) => r.getEntryPoint(OpType.Storage, pallet, name),\n // TODO this is way sub-optimal. Needs some rethought - maybe a builder for entry points?.\n (ctx) => {\n const item = getPallet(ctx, pallet)?.storage?.items.find(\n (s) => s.name === name,\n )\n return item == null ? null : storageEntryPoint(item)\n },\n ),\n ),\n )\n\n const getEnumEntry = (\n ctx: RuntimeContext,\n side: \"args\" | \"values\",\n id: number | undefined,\n name: string,\n ) => {\n if (id == null) return null\n const entry = ctx.lookup(id)\n if (entry.type !== \"enum\") throw new Error(\"Expected enum\")\n\n if (entry.value[name] == null) return null\n const node = enumValueEntryPointNode(entry.value[name])\n return {\n args: side === \"args\" ? node : voidEntryPointNode,\n values: side === \"args\" ? voidEntryPointNode : node,\n }\n }\n const tx = createProxyPath((pallet, name) =>\n createTxEntry(\n pallet,\n name,\n chainHead,\n broadcast$,\n compatibilityHelper(\n compatibilityToken,\n (r) => r.getEntryPoint(OpType.Tx, pallet, name),\n (ctx) =>\n getEnumEntry(ctx, \"args\", getPallet(ctx, pallet)?.calls?.type, name),\n ),\n true,\n ),\n )\n\n const event = createProxyPath((pallet, name) =>\n createEventEntry(\n pallet,\n name,\n chainHead,\n compatibilityHelper(\n compatibilityToken,\n (r) => r.getEntryPoint(OpType.Event, pallet, name),\n (ctx) =>\n getEnumEntry(\n ctx,\n \"values\",\n getPallet(ctx, pallet)?.events?.type,\n name,\n ),\n ),\n ),\n )\n\n const constants = createProxyPath((pallet, name) =>\n createConstantEntry(\n pallet,\n name,\n compatibilityHelper(\n compatibilityToken,\n (r) => r.getEntryPoint(OpType.Const, pallet, name),\n (ctx) => {\n const item = getPallet(ctx, pallet)?.constants.find(\n (c) => c.name === name,\n )?.type\n return item == null ? null : singleValueEntryPoint(item)\n },\n ),\n ),\n )\n\n const apis = createProxyPath((api, method) =>\n createRuntimeCallEntry(\n api,\n method,\n chainHead,\n compatibilityHelper(\n compatibilityToken,\n (r) => r.getEntryPoint(OpType.Api, api, method),\n (ctx) =>\n runtimeCallEntryPoint(\n ctx.lookup.metadata.apis\n .find((a) => a.name === api)!\n .methods.find((m) => m.name === method)!,\n ),\n ),\n ),\n )\n const view = createProxyPath((pallet, entry) =>\n createViewFnEntry(\n pallet,\n entry,\n chainHead,\n compatibilityHelper(\n compatibilityToken,\n (r) => r.getEntryPoint(OpType.ViewFns, pallet, entry),\n (ctx) =>\n runtimeCallEntryPoint(\n ctx.lookup.metadata.pallets\n .find((a) => a.name === pallet)!\n .viewFns.find((m) => m.name === entry)!,\n ),\n ),\n ),\n )\n\n const _callDataTx = (\n callData: Binary,\n token: CompatibilityToken | RuntimeToken,\n ) => {\n const { lookup, dynamicBuilder } = getCompatibilityApi(token).runtime()\n try {\n const decoded = dynamicBuilder\n .buildDefinition(lookup.call!)\n .dec(callData.asBytes())\n const pallet = decoded.type\n const call = decoded.value.type\n const args = decoded.value.value\n\n return createTxEntry(\n pallet,\n call,\n chainHead,\n broadcast$,\n compatibilityHelper(\n compatibilityToken,\n (r) => r.getEntryPoint(OpType.Tx, pallet, call),\n (ctx) =>\n getEnumEntry(\n ctx,\n \"args\",\n getPallet(ctx, pallet)?.calls?.type,\n call,\n ),\n ),\n false,\n )(args)\n } catch {\n throw new Error(\"createTx: invalid call data\")\n }\n }\n\n return {\n query,\n txFromCallData: (\n callData: Binary,\n token?: CompatibilityToken | RuntimeToken,\n ) =>\n token\n ? _callDataTx(callData, token)\n : compatibilityToken.then((t) => _callDataTx(callData, t)),\n tx,\n event,\n apis,\n constants,\n view,\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 { genesis$, ..._chainHead } = client.chainHead$()\n const chainHead: ChainHead$ = {\n ..._chainHead,\n genesis$: defer(getChainSpecData).pipe(\n map(({ genesisHash }) => genesisHash),\n catchError(() => genesis$),\n shareReplay(1),\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 let runtimeToken: Promise<RuntimeToken>\n const compatibilityToken = new WeakMap<\n ChainDefinition,\n Promise<CompatibilityToken<any>>\n >()\n const getChainToken = (chainDefinition: ChainDefinition) => {\n const result =\n compatibilityToken.get(chainDefinition) ||\n createCompatibilityToken(chainDefinition, chainHead)\n compatibilityToken.set(chainDefinition, result)\n return result\n }\n const getRuntimeToken = <D>(): Promise<RuntimeToken<D>> =>\n (runtimeToken ??= createRuntimeToken(chainHead))\n const { broadcastTx$ } = client\n return {\n getChainSpecData,\n\n blocks$: chainHead.newBlocks$,\n\n finalizedBlock$: chainHead.finalized$,\n getFinalizedBlock: () => firstValueFrom(chainHead.finalized$),\n\n bestBlocks$: chainHead.bestBlocks$,\n getBestBlocks: () => firstValueFrom(chainHead.bestBlocks$),\n\n watchBlockBody: chainHead.body$,\n getBlockBody: (hash: string) => firstValueFrom(chainHead.body$(hash)),\n\n getBlockHeader: (hash?: string) =>\n firstValueFrom(chainHead.header$(hash ?? null)),\n\n submit: (...args) => submit(chainHead, broadcastTx$, ...args),\n submitAndWatch: (...args) => submit$(chainHead, broadcastTx$, ...args),\n\n getTypedApi: <D extends ChainDefinition>(chainDefinition: D) => {\n const token = getChainToken(chainDefinition)\n return Object.assign(\n createApi<false, D>(token, chainHead, broadcastTx$),\n { compatibilityToken: token },\n )\n },\n\n getUnsafeApi: <D>() => {\n const token = getRuntimeToken()\n return Object.assign(createApi<true, D>(token, chainHead, broadcastTx$), {\n runtimeToken: token,\n })\n },\n\n destroy: () => {\n chainHead.unfollow()\n client.destroy()\n },\n\n _request,\n }\n}\n"],"names":["createRawClient"],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { JsonRpcProvider } from '@polkadot-api/json-rpc-provider';
|
|
2
|
-
import { BlockInfo, SystemEvent as SystemEvent$1 } from '@polkadot-api/observable-client';
|
|
3
2
|
import { HexString, OpaqueKeyHash, Binary, SS58String, Enum, BlockHeader, Codec, FixedSizeBinary, ResultPayload } from '@polkadot-api/substrate-bindings';
|
|
4
3
|
export { AccountId, Binary, Codec, Enum, EnumVariant, FixedSizeBinary, GetEnum, HexString, ResultPayload, SS58AddressInfo, SS58String, _Enum, getSs58AddressInfo } from '@polkadot-api/substrate-bindings';
|
|
4
|
+
import { BlockInfo, SystemEvent as SystemEvent$1 } from '@polkadot-api/observable-client';
|
|
5
5
|
import { ChainSpecData } from '@polkadot-api/substrate-client';
|
|
6
6
|
import { Observable } from 'rxjs';
|
|
7
7
|
import { CompatibilityLevel } from '@polkadot-api/metadata-compatibility';
|
|
@@ -1023,6 +1023,10 @@ type TxCallData = {
|
|
|
1023
1023
|
};
|
|
1024
1024
|
};
|
|
1025
1025
|
|
|
1026
|
+
type CreateClientOptions = Partial<{
|
|
1027
|
+
getMetadata: (codeHash: HexString) => Promise<Uint8Array | null>;
|
|
1028
|
+
setMetadata: (codeHash: HexString, metadata: Uint8Array) => void;
|
|
1029
|
+
}>;
|
|
1026
1030
|
/**
|
|
1027
1031
|
* This is the top-level export for `polkadot-api`.
|
|
1028
1032
|
*
|
|
@@ -1030,8 +1034,23 @@ type TxCallData = {
|
|
|
1030
1034
|
* spec](https://paritytech.github.io/json-rpc-interface-spec/),
|
|
1031
1035
|
* which must support the `chainHead`, `transaction` and
|
|
1032
1036
|
* `chainSpec` groups.
|
|
1037
|
+
* @param options - *(Optional)* An object that allows customization of
|
|
1038
|
+
* metadata handling.
|
|
1039
|
+
* You can supply functions to retrieve and/or persist the
|
|
1040
|
+
* metadata associated with runtime `codeHash` values:
|
|
1041
|
+
*
|
|
1042
|
+
* - `getMetadata`: A function that, given a `codeHash` (the
|
|
1043
|
+
* `:code:` hash),
|
|
1044
|
+
* returns a `Promise` resolving to a `Uint8Array`
|
|
1045
|
+
* representing the metadata,
|
|
1046
|
+
* or `null` if unavailable.
|
|
1047
|
+
* - `setMetadata`: A function that accepts a `codeHash` and
|
|
1048
|
+
* its associated `Uint8Array` metadata,
|
|
1049
|
+
* allowing you to persist the metadata (e.g., in a cache or
|
|
1050
|
+
* local store).
|
|
1033
1051
|
* @example
|
|
1034
1052
|
*
|
|
1053
|
+
* import { getMetadata } from "@polkadot-api/descriptors"
|
|
1035
1054
|
* import { createClient } from "polkadot-api"
|
|
1036
1055
|
* import { getSmProvider } from "polkadot-api/sm-provider"
|
|
1037
1056
|
* import { chainSpec } from "polkadot-api/chains/polkadot"
|
|
@@ -1041,10 +1060,10 @@ type TxCallData = {
|
|
|
1041
1060
|
* const chain = await smoldot.addChain({ chainSpec })
|
|
1042
1061
|
*
|
|
1043
1062
|
* // Connect to the polkadot relay chain.
|
|
1044
|
-
* const client = createClient(getSmProvider(chain))
|
|
1063
|
+
* const client = createClient(getSmProvider(chain), { getMetadata })
|
|
1045
1064
|
*
|
|
1046
1065
|
*/
|
|
1047
|
-
declare function createClient(provider: JsonRpcProvider): PolkadotClient;
|
|
1066
|
+
declare function createClient(provider: JsonRpcProvider, { getMetadata, setMetadata }?: CreateClientOptions): PolkadotClient;
|
|
1048
1067
|
|
|
1049
1068
|
/**
|
|
1050
1069
|
* Asynchronously create an instance of `OfflineApi`.
|
|
@@ -1130,4 +1149,4 @@ type TypedCodecs<T extends ChainDefinition> = {
|
|
|
1130
1149
|
declare const getTypedCodecs: <D extends ChainDefinition>(descriptors: D) => Promise<TypedCodecs<D>>;
|
|
1131
1150
|
|
|
1132
1151
|
export { CompatibilityToken, InvalidTxError, RuntimeToken, createClient, getOfflineApi, getTypedCodecs };
|
|
1133
|
-
export type { ApisFromDef, ApisTypedef, ChainDefinition, ConstFromPalletsDef, DescriptorEntry, ErrorsFromPalletsDef, EventPhase, EventsFromPalletsDef, FixedSizeArray, PalletsTypedef, PlainDescriptor, PolkadotClient, QueryFromPalletsDef, RuntimeDescriptor, StorageDescriptor, Transaction, TransactionValidityError, TxBestBlocksState, TxBroadcastEvent, TxBroadcasted, TxCall, TxCallData, TxDescriptor, TxEntry, TxEvent, TxEventsPayload, TxFinalized, TxFinalizedPayload, TxFromPalletsDef, TxInBestBlocksFound, TxInBestBlocksNotFound, TxObservable, TxOptions, TxPromise, TxSignFn, TxSigned, TypedApi, UnsafeApi, UnsafeTransaction, UnsafeTxCall, UnsafeTxEntry, ViewFnsFromPalletsDef };
|
|
1152
|
+
export type { ApisFromDef, ApisTypedef, ChainDefinition, ConstFromPalletsDef, CreateClientOptions, DescriptorEntry, ErrorsFromPalletsDef, EventPhase, EventsFromPalletsDef, FixedSizeArray, PalletsTypedef, PlainDescriptor, PolkadotClient, QueryFromPalletsDef, RuntimeDescriptor, StorageDescriptor, Transaction, TransactionValidityError, TxBestBlocksState, TxBroadcastEvent, TxBroadcasted, TxCall, TxCallData, TxDescriptor, TxEntry, TxEvent, TxEventsPayload, TxFinalized, TxFinalizedPayload, TxFromPalletsDef, TxInBestBlocksFound, TxInBestBlocksNotFound, TxObservable, TxOptions, TxPromise, TxSignFn, TxSigned, TypedApi, UnsafeApi, UnsafeTransaction, UnsafeTxCall, UnsafeTxEntry, ViewFnsFromPalletsDef };
|
package/dist/index.js
CHANGED
|
@@ -1626,9 +1626,12 @@ const createApi = (compatibilityToken, chainHead, broadcast$) => {
|
|
|
1626
1626
|
view
|
|
1627
1627
|
};
|
|
1628
1628
|
};
|
|
1629
|
-
function createClient(provider) {
|
|
1629
|
+
function createClient(provider, { getMetadata, setMetadata } = {}) {
|
|
1630
1630
|
const rawClient = substrateClient.createClient(provider);
|
|
1631
|
-
const client = observableClient.getObservableClient(rawClient
|
|
1631
|
+
const client = observableClient.getObservableClient(rawClient, {
|
|
1632
|
+
getMetadata: getMetadata ? (codeHash) => rxjs.from(getMetadata(codeHash)) : void 0,
|
|
1633
|
+
setMetadata
|
|
1634
|
+
});
|
|
1632
1635
|
const { getChainSpecData } = rawClient;
|
|
1633
1636
|
const { genesis$, ..._chainHead } = client.chainHead$();
|
|
1634
1637
|
const chainHead = {
|