polkadot-api 2.0.3-canary.dabd58e → 2.1.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.js 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 = "2.0.2";
4
+ var version = "2.1.0";
5
5
 
6
6
  getCli({
7
7
  add,
@@ -1,4 +1,4 @@
1
- import { P as PolkadotClient } from '../types-sRmpUhNh.js';
1
+ import { P as PolkadotClient } from '../types-BJAMtGIT.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/event.js CHANGED
@@ -1,5 +1,5 @@
1
- import { combineLatest, map, firstValueFrom, take, switchMap } from 'rxjs';
2
- import { concatMapEager } from '@polkadot-api/observable-client';
1
+ import { concatMapEager, isBestOrFinalizedBlock } from '@polkadot-api/observable-client';
2
+ import { combineLatest, map, defer, Subject, filter, withLatestFrom, mergeMap, of, merge, startWith, pairwise, EMPTY, take, switchMap, takeUntil, firstValueFrom } from 'rxjs';
3
3
  import { shareLatest } from './utils/shareLatest.js';
4
4
  import '@polkadot-api/utils';
5
5
  import 'rxjs/operators';
@@ -32,7 +32,122 @@ const createEventEntry = (pallet, name, chainHead, compatibility) => {
32
32
  }),
33
33
  shareLatest
34
34
  );
35
- const filter = (events) => events.filter(({ event }) => event.type === pallet && event.value.type === name).map((original) => ({
35
+ const best$ = defer(() => {
36
+ const getBlockEvents$ = (blockHash) => {
37
+ const isIrrelevant$ = isBestOrFinalizedBlock(
38
+ chainHead.pinnedBlocks$,
39
+ blockHash
40
+ ).pipe(
41
+ filter((x) => x === null),
42
+ take(1)
43
+ );
44
+ return combineLatest([
45
+ compatibility,
46
+ chainHead.getRuntimeContext$(blockHash)
47
+ ]).pipe(
48
+ take(1),
49
+ switchMap(([getCompat, ctx]) => {
50
+ if (!ctx.mappedMeta.pallets[pallet]?.event.has(name))
51
+ throw new Error(`Runtime entry Event(${pallet}.${name}) not found`);
52
+ return getEventsAtBlock$(blockHash, getCompat(ctx).isValueCompatible);
53
+ }),
54
+ takeUntil(isIrrelevant$)
55
+ );
56
+ };
57
+ let blocksEmitted = [];
58
+ const pending = /* @__PURE__ */ new Set();
59
+ const newOnes = new Subject();
60
+ const new$ = newOnes.pipe(
61
+ concatMapEager(
62
+ (block) => getBlockEvents$(block.hash).pipe(map((events) => ({ events, block })))
63
+ ),
64
+ filter((x) => pending.has(x.block.hash)),
65
+ withLatestFrom(chainHead.finalized$),
66
+ mergeMap(([{ events, block }, finalized]) => {
67
+ pending.delete(block.hash);
68
+ if (finalized.number < block.number) {
69
+ blocksEmitted.push({ block, events });
70
+ return of({
71
+ type: "new",
72
+ block,
73
+ events
74
+ });
75
+ }
76
+ return [
77
+ {
78
+ type: "new",
79
+ block,
80
+ events
81
+ },
82
+ {
83
+ type: "finalized",
84
+ block,
85
+ events
86
+ }
87
+ ];
88
+ })
89
+ );
90
+ return merge(
91
+ new$,
92
+ chainHead.bestBlocks$.pipe(
93
+ map((x) => x.slice(0).reverse()),
94
+ startWith([]),
95
+ pairwise(),
96
+ mergeMap(([prev, next]) => {
97
+ if (prev.length === 0)
98
+ return next.map((x) => ({ type: "new", block: x }));
99
+ if (prev[0].hash !== next[0].hash) {
100
+ const firstEmitted = blocksEmitted[0];
101
+ if (!firstEmitted) return [];
102
+ const nFinalized = next[0].number - firstEmitted.block.number + 1;
103
+ const events = blocksEmitted.slice(0, nFinalized);
104
+ blocksEmitted = blocksEmitted.slice(nFinalized);
105
+ return events.map((e) => ({
106
+ type: "finalized",
107
+ block: e.block,
108
+ events: e.events
109
+ }));
110
+ }
111
+ let dropped = [];
112
+ for (let i = 0; i < blocksEmitted.length; i++) {
113
+ if (blocksEmitted[i].block.hash !== next[i + 1]?.hash) {
114
+ dropped = blocksEmitted.slice(i).reverse();
115
+ blocksEmitted = blocksEmitted.slice(0, i);
116
+ break;
117
+ }
118
+ }
119
+ let diffIdx = prev.length;
120
+ for (let i = 0; i < prev.length; i++) {
121
+ if (prev[i].hash !== next[i].hash) {
122
+ diffIdx = i;
123
+ break;
124
+ }
125
+ }
126
+ const newOnes2 = next.slice(diffIdx);
127
+ return [
128
+ ...dropped.map((e) => ({
129
+ type: "drop",
130
+ block: e.block,
131
+ events: e.events
132
+ })),
133
+ ...newOnes2.map((x) => ({ type: "new", block: x }))
134
+ ];
135
+ }),
136
+ mergeMap((x) => {
137
+ if (x.type === "new") {
138
+ pending.add(x.block.hash);
139
+ newOnes.next(x.block);
140
+ return EMPTY;
141
+ }
142
+ if (x.type === "drop") {
143
+ pending.delete(x.block.hash);
144
+ }
145
+ return of(x);
146
+ })
147
+ )
148
+ );
149
+ });
150
+ const filter$1 = (events) => events.filter(({ event }) => event.type === pallet && event.value.type === name).map((original) => ({
36
151
  original,
37
152
  payload: original.event.value.value
38
153
  }));
@@ -47,7 +162,7 @@ const createEventEntry = (pallet, name, chainHead, compatibility) => {
47
162
  )
48
163
  )
49
164
  );
50
- return { watch: () => finalized$, get, filter };
165
+ return { watch: () => finalized$, watchBest: () => best$, get, filter: filter$1 };
51
166
  };
52
167
 
53
168
  export { createEventEntry };
@@ -1 +1 @@
1
- {"version":3,"file":"event.js","sources":["../../src/event.ts"],"sourcesContent":["import { BlockInfo, ChainHead$ } from \"@polkadot-api/observable-client\"\nimport { HexString, SizedHex } from \"@polkadot-api/substrate-bindings\"\nimport {\n Observable,\n combineLatest,\n firstValueFrom,\n map,\n switchMap,\n take,\n} from \"rxjs\"\nimport { ValueCompat } from \"./compatibility\"\nimport { concatMapEager, shareLatest } from \"./utils\"\n\nexport type EventPhase =\n | { type: \"ApplyExtrinsic\"; value: number }\n | { type: \"Finalization\" }\n | { type: \"Initialization\" }\n\nexport type SystemEvent = {\n phase: EventPhase\n event: {\n type: string\n value: {\n type: string\n value: any\n }\n }\n topics: Array<SizedHex<32>>\n}\n\nexport type PalletEvent<T> = {\n original: SystemEvent\n payload: T\n}\n\nexport type EvClient<T> = {\n /**\n * Fetch (Promise-based) all events (matching the event kind chosen) available\n * in the specific block.\n *\n * @param blockHash Block hash to get the events from.\n */\n get: (blockHash: HexString) => Promise<Array<PalletEvent<T>>>\n\n /**\n * Multicast and stateful Observable watching for new events (matching the\n * event kind chosen) in the `finalized` blocks.\n */\n watch: () => Observable<{\n block: BlockInfo\n events: PalletEvent<T>[]\n }>\n\n /**\n * Filter a bunch of `SystemEvent` and return the decoded `payload` of every\n * of them.\n *\n * @param collection Array of `SystemEvent` to filter.\n */\n filter: (collection: SystemEvent[]) => Array<PalletEvent<T>>\n}\n\nexport const createEventEntry = <T>(\n pallet: string,\n name: string,\n chainHead: ChainHead$,\n compatibility: ValueCompat,\n): EvClient<T> => {\n const compatibilityError = () =>\n new Error(`Incompatible runtime entry Event(${pallet}.${name})`)\n\n const getEventsAtBlock$ = (\n hash: HexString,\n isCompatible: (dest: any) => boolean,\n ) =>\n chainHead.eventsAt$(hash).pipe(\n map((events) => {\n const winners = events.filter(\n (e) => e.event.type === pallet && e.event.value.type === name,\n )\n return winners.map((x) => {\n if (!isCompatible(x.event.value.value)) throw compatibilityError()\n return {\n original: x,\n payload: x.event.value.value,\n }\n })\n }),\n )\n\n const finalized$ = combineLatest([chainHead.finalized$, compatibility]).pipe(\n chainHead.withRuntime(([x]) => x.hash),\n concatMapEager(([[block, getCompat], ctx]) => {\n if (!ctx.mappedMeta.pallets[pallet]?.event.has(name))\n throw new Error(`Runtime entry Event(${pallet}.${name}) not found`)\n\n const { isValueCompatible } = getCompat(ctx)\n return getEventsAtBlock$(block.hash, isValueCompatible).pipe(\n map((events) => ({ block, events })),\n )\n }),\n shareLatest,\n )\n\n const filter: EvClient<T>[\"filter\"] = (events) =>\n events\n .filter(({ event }) => event.type === pallet && event.value.type === name)\n .map((original) => ({\n original,\n payload: original.event.value.value,\n }))\n\n const get: EvClient<T>[\"get\"] = (blockHash) =>\n firstValueFrom(\n combineLatest([\n compatibility,\n chainHead.getRuntimeContext$(blockHash),\n ]).pipe(\n take(1),\n switchMap(([getCompat, ctx]) =>\n getEventsAtBlock$(blockHash, getCompat(ctx).isValueCompatible),\n ),\n ),\n )\n\n return { watch: () => finalized$, get, filter }\n}\n"],"names":[],"mappings":";;;;;;AA8DO,MAAM,gBAAA,GAAmB,CAC9B,MAAA,EACA,IAAA,EACA,WACA,aAAA,KACgB;AAChB,EAAA,MAAM,kBAAA,GAAqB,MACzB,IAAI,KAAA,CAAM,oCAAoC,MAAM,CAAA,CAAA,EAAI,IAAI,CAAA,CAAA,CAAG,CAAA;AAEjE,EAAA,MAAM,oBAAoB,CACxB,IAAA,EACA,iBAEA,SAAA,CAAU,SAAA,CAAU,IAAI,CAAA,CAAE,IAAA;AAAA,IACxB,GAAA,CAAI,CAAC,MAAA,KAAW;AACd,MAAA,MAAM,UAAU,MAAA,CAAO,MAAA;AAAA,QACrB,CAAC,MAAM,CAAA,CAAE,KAAA,CAAM,SAAS,MAAA,IAAU,CAAA,CAAE,KAAA,CAAM,KAAA,CAAM,IAAA,KAAS;AAAA,OAC3D;AACA,MAAA,OAAO,OAAA,CAAQ,GAAA,CAAI,CAAC,CAAA,KAAM;AACxB,QAAA,IAAI,CAAC,aAAa,CAAA,CAAE,KAAA,CAAM,MAAM,KAAK,CAAA,QAAS,kBAAA,EAAmB;AACjE,QAAA,OAAO;AAAA,UACL,QAAA,EAAU,CAAA;AAAA,UACV,OAAA,EAAS,CAAA,CAAE,KAAA,CAAM,KAAA,CAAM;AAAA,SACzB;AAAA,MACF,CAAC,CAAA;AAAA,IACH,CAAC;AAAA,GACH;AAEF,EAAA,MAAM,aAAa,aAAA,CAAc,CAAC,UAAU,UAAA,EAAY,aAAa,CAAC,CAAA,CAAE,IAAA;AAAA,IACtE,UAAU,WAAA,CAAY,CAAC,CAAC,CAAC,CAAA,KAAM,EAAE,IAAI,CAAA;AAAA,IACrC,cAAA,CAAe,CAAC,CAAC,CAAC,OAAO,SAAS,CAAA,EAAG,GAAG,CAAA,KAAM;AAC5C,MAAA,IAAI,CAAC,IAAI,UAAA,CAAW,OAAA,CAAQ,MAAM,CAAA,EAAG,KAAA,CAAM,IAAI,IAAI,CAAA;AACjD,QAAA,MAAM,IAAI,KAAA,CAAM,CAAA,oBAAA,EAAuB,MAAM,CAAA,CAAA,EAAI,IAAI,CAAA,WAAA,CAAa,CAAA;AAEpE,MAAA,MAAM,EAAE,iBAAA,EAAkB,GAAI,SAAA,CAAU,GAAG,CAAA;AAC3C,MAAA,OAAO,iBAAA,CAAkB,KAAA,CAAM,IAAA,EAAM,iBAAiB,CAAA,CAAE,IAAA;AAAA,QACtD,IAAI,CAAC,MAAA,MAAY,EAAE,KAAA,EAAO,QAAO,CAAE;AAAA,OACrC;AAAA,IACF,CAAC,CAAA;AAAA,IACD;AAAA,GACF;AAEA,EAAA,MAAM,SAAgC,CAAC,MAAA,KACrC,OACG,MAAA,CAAO,CAAC,EAAE,KAAA,EAAM,KAAM,MAAM,IAAA,KAAS,MAAA,IAAU,MAAM,KAAA,CAAM,IAAA,KAAS,IAAI,CAAA,CACxE,GAAA,CAAI,CAAC,QAAA,MAAc;AAAA,IAClB,QAAA;AAAA,IACA,OAAA,EAAS,QAAA,CAAS,KAAA,CAAM,KAAA,CAAM;AAAA,GAChC,CAAE,CAAA;AAEN,EAAA,MAAM,GAAA,GAA0B,CAAC,SAAA,KAC/B,cAAA;AAAA,IACE,aAAA,CAAc;AAAA,MACZ,aAAA;AAAA,MACA,SAAA,CAAU,mBAAmB,SAAS;AAAA,KACvC,CAAA,CAAE,IAAA;AAAA,MACD,KAAK,CAAC,CAAA;AAAA,MACN,SAAA;AAAA,QAAU,CAAC,CAAC,SAAA,EAAW,GAAG,CAAA,KACxB,kBAAkB,SAAA,EAAW,SAAA,CAAU,GAAG,CAAA,CAAE,iBAAiB;AAAA;AAC/D;AACF,GACF;AAEF,EAAA,OAAO,EAAE,KAAA,EAAO,MAAM,UAAA,EAAY,KAAK,MAAA,EAAO;AAChD;;;;"}
1
+ {"version":3,"file":"event.js","sources":["../../src/event.ts"],"sourcesContent":["import {\n BlockInfo,\n ChainHead$,\n isBestOrFinalizedBlock,\n} from \"@polkadot-api/observable-client\"\nimport { HexString, SizedHex } from \"@polkadot-api/substrate-bindings\"\nimport {\n Observable,\n combineLatest,\n defer,\n firstValueFrom,\n map,\n switchMap,\n take,\n filter as rFilter,\n mergeMap,\n EMPTY,\n of,\n takeUntil,\n pairwise,\n startWith,\n Subject,\n withLatestFrom,\n merge,\n} from \"rxjs\"\nimport { ValueCompat } from \"./compatibility\"\nimport { concatMapEager, shareLatest } from \"./utils\"\n\nexport type EventPhase =\n | { type: \"ApplyExtrinsic\"; value: number }\n | { type: \"Finalization\" }\n | { type: \"Initialization\" }\n\nexport type SystemEvent = {\n phase: EventPhase\n event: {\n type: string\n value: {\n type: string\n value: any\n }\n }\n topics: Array<SizedHex<32>>\n}\n\nexport type PalletEvent<T> = {\n original: SystemEvent\n payload: T\n}\n\nexport type EvClient<T> = {\n /**\n * Fetch (Promise-based) all events (matching the event kind chosen) available\n * in the specific block.\n *\n * @param blockHash Block hash to get the events from.\n */\n get: (blockHash: HexString) => Promise<Array<PalletEvent<T>>>\n\n /**\n * Multicast and stateful Observable watching for new events (matching the\n * event kind chosen) in the `finalized` blocks.\n */\n watch: () => Observable<{\n block: BlockInfo\n events: PalletEvent<T>[]\n }>\n\n /**\n * Observable that watches the best-block chain and emits events that describe\n * how the status changes.\n *\n * - It will emit `type: new` for new blocks in the best chain, with their\n * events. The order is consistent in increasing block number.\n * - It will emit `type: drop` for all the blocks, and their events, that\n * dropped from best-block chain after a reorg. The order is consistent in\n * reverse block number (emitting first the newer blocks to be removed)\n * - It will emit `type: finalized` for all the blocks, and their events, that\n * became finalized.\n *\n * It will first emit `new` events, then `drop` events, then `finalized`\n * events.\n */\n watchBest: () => Observable<{\n type: \"new\" | \"drop\" | \"finalized\"\n block: BlockInfo\n events: PalletEvent<T>[]\n }>\n\n /**\n * Filter a bunch of `SystemEvent` and return the decoded `payload` of every\n * of them.\n *\n * @param collection Array of `SystemEvent` to filter.\n */\n filter: (collection: SystemEvent[]) => Array<PalletEvent<T>>\n}\n\nexport const createEventEntry = <T>(\n pallet: string,\n name: string,\n chainHead: ChainHead$,\n compatibility: ValueCompat,\n): EvClient<T> => {\n const compatibilityError = () =>\n new Error(`Incompatible runtime entry Event(${pallet}.${name})`)\n\n const getEventsAtBlock$ = (\n hash: HexString,\n isCompatible: (dest: any) => boolean,\n ) =>\n chainHead.eventsAt$(hash).pipe(\n map((events) => {\n const winners = events.filter(\n (e) => e.event.type === pallet && e.event.value.type === name,\n )\n return winners.map((x) => {\n if (!isCompatible(x.event.value.value)) throw compatibilityError()\n return {\n original: x,\n payload: x.event.value.value,\n }\n })\n }),\n )\n\n const finalized$ = combineLatest([chainHead.finalized$, compatibility]).pipe(\n chainHead.withRuntime(([x]) => x.hash),\n concatMapEager(([[block, getCompat], ctx]) => {\n if (!ctx.mappedMeta.pallets[pallet]?.event.has(name))\n throw new Error(`Runtime entry Event(${pallet}.${name}) not found`)\n\n const { isValueCompatible } = getCompat(ctx)\n return getEventsAtBlock$(block.hash, isValueCompatible).pipe(\n map((events) => ({ block, events })),\n )\n }),\n shareLatest,\n )\n\n const best$ = defer(() => {\n const getBlockEvents$ = (blockHash: HexString) => {\n const isIrrelevant$ = isBestOrFinalizedBlock(\n chainHead.pinnedBlocks$,\n blockHash,\n ).pipe(\n rFilter((x) => x === null),\n take(1),\n )\n return combineLatest([\n compatibility,\n chainHead.getRuntimeContext$(blockHash),\n ]).pipe(\n take(1),\n switchMap(([getCompat, ctx]) => {\n if (!ctx.mappedMeta.pallets[pallet]?.event.has(name))\n throw new Error(`Runtime entry Event(${pallet}.${name}) not found`)\n return getEventsAtBlock$(blockHash, getCompat(ctx).isValueCompatible)\n }),\n takeUntil(isIrrelevant$),\n )\n }\n\n // In the order they were emitted\n let blocksEmitted: Array<{\n block: BlockInfo\n events: PalletEvent<T>[]\n }> = []\n const pending = new Set<HexString>()\n\n const newOnes = new Subject<BlockInfo>()\n const new$ = newOnes.pipe(\n concatMapEager((block) =>\n getBlockEvents$(block.hash).pipe(map((events) => ({ events, block }))),\n ),\n rFilter((x) => pending.has(x.block.hash)),\n withLatestFrom(chainHead.finalized$),\n mergeMap(([{ events, block }, finalized]) => {\n pending.delete(block.hash)\n if (finalized.number < block.number) {\n blocksEmitted.push({ block, events })\n return of({\n type: \"new\" as \"new\",\n block,\n events,\n })\n }\n return [\n {\n type: \"new\" as \"new\",\n block,\n events,\n },\n {\n type: \"finalized\" as \"finalized\",\n block,\n events,\n },\n ]\n }),\n )\n\n return merge(\n new$,\n chainHead.bestBlocks$.pipe(\n map((x) => x.slice(0).reverse()),\n startWith([] as BlockInfo[]),\n pairwise(),\n mergeMap(([prev, next]) => {\n if (prev.length === 0)\n return next.map((x) => ({ type: \"new\" as \"new\", block: x }))\n\n if (prev[0].hash !== next[0].hash) {\n const firstEmitted = blocksEmitted[0]\n if (!firstEmitted) return []\n const nFinalized = next[0]!.number - firstEmitted.block.number + 1\n const events = blocksEmitted.slice(0, nFinalized)\n blocksEmitted = blocksEmitted.slice(nFinalized)\n return events.map((e) => ({\n type: \"finalized\" as \"finalized\",\n block: e.block,\n events: e.events,\n }))\n }\n\n let dropped: Array<{ block: BlockInfo; events: PalletEvent<any>[] }> =\n []\n for (let i = 0; i < blocksEmitted.length; i++) {\n if (blocksEmitted[i].block.hash !== next[i + 1]?.hash) {\n dropped = blocksEmitted.slice(i).reverse()\n blocksEmitted = blocksEmitted.slice(0, i)\n break\n }\n }\n\n let diffIdx = prev.length\n for (let i = 0; i < prev.length; i++) {\n if (prev[i].hash !== next[i].hash) {\n diffIdx = i\n break\n }\n }\n const newOnes = next.slice(diffIdx)\n\n return [\n ...dropped.map((e) => ({\n type: \"drop\" as \"drop\",\n block: e.block,\n events: e.events,\n })),\n ...newOnes.map((x) => ({ type: \"new\" as \"new\", block: x })),\n ]\n }),\n mergeMap((x) => {\n if (x.type === \"new\") {\n pending.add(x.block.hash)\n newOnes.next(x.block)\n return EMPTY\n }\n if (x.type === \"drop\") {\n pending.delete(x.block.hash)\n }\n return of(x)\n }),\n ),\n )\n })\n\n const filter: EvClient<T>[\"filter\"] = (events) =>\n events\n .filter(({ event }) => event.type === pallet && event.value.type === name)\n .map((original) => ({\n original,\n payload: original.event.value.value,\n }))\n\n const get: EvClient<T>[\"get\"] = (blockHash) =>\n firstValueFrom(\n combineLatest([\n compatibility,\n chainHead.getRuntimeContext$(blockHash),\n ]).pipe(\n take(1),\n switchMap(([getCompat, ctx]) =>\n getEventsAtBlock$(blockHash, getCompat(ctx).isValueCompatible),\n ),\n ),\n )\n\n return { watch: () => finalized$, watchBest: () => best$, get, filter }\n}\n"],"names":["rFilter","newOnes","filter"],"mappings":"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"}
@@ -2,8 +2,8 @@ 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-sRmpUhNh.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 TxOptions, v as TxSigned, w as TypedApi, V as ViewFnsFromPalletsDef } from '../types-sRmpUhNh.js';
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-BJAMtGIT.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 TxOptions, v as TxSigned, w as TypedApi, V as ViewFnsFromPalletsDef } from '../types-BJAMtGIT.js';
7
7
  export { CompatibilityLevel } from '@polkadot-api/metadata-compatibility';
8
8
  export { BlockInfo, BlockNotPinnedError } from '@polkadot-api/observable-client';
9
9
  export { PolkadotSigner } from '@polkadot-api/polkadot-signer';
@@ -144,6 +144,26 @@ type EvClient<T> = {
144
144
  block: BlockInfo;
145
145
  events: PalletEvent<T>[];
146
146
  }>;
147
+ /**
148
+ * Observable that watches the best-block chain and emits events that describe
149
+ * how the status changes.
150
+ *
151
+ * - It will emit `type: new` for new blocks in the best chain, with their
152
+ * events. The order is consistent in increasing block number.
153
+ * - It will emit `type: drop` for all the blocks, and their events, that
154
+ * dropped from best-block chain after a reorg. The order is consistent in
155
+ * reverse block number (emitting first the newer blocks to be removed)
156
+ * - It will emit `type: finalized` for all the blocks, and their events, that
157
+ * became finalized.
158
+ *
159
+ * It will first emit `new` events, then `drop` events, then `finalized`
160
+ * events.
161
+ */
162
+ watchBest: () => Observable<{
163
+ type: "new" | "drop" | "finalized";
164
+ block: BlockInfo;
165
+ events: PalletEvent<T>[];
166
+ }>;
147
167
  /**
148
168
  * Filter a bunch of `SystemEvent` and return the decoded `payload` of every
149
169
  * of them.