polkadot-api 2.0.2 → 2.0.3-canary.8d48d78
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/event.js +119 -4
- package/dist/src/event.js.map +1 -1
- package/dist/src/index.d.ts +2 -2
- package/dist/{types-sRmpUhNh.d.ts → types-BJAMtGIT.d.ts} +20 -0
- package/dist/umd/index.min.js +2 -2
- package/dist/umd/ws.min.js +3 -3
- package/package.json +20 -20
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-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 {
|
|
2
|
-
import {
|
|
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
|
|
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 };
|
package/dist/src/event.js.map
CHANGED
|
@@ -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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"}
|
package/dist/src/index.d.ts
CHANGED
|
@@ -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-
|
|
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-
|
|
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.
|