@apibara/indexer 2.0.0-beta.9 → 2.1.0-beta.2

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.
Files changed (127) hide show
  1. package/dist/index.cjs +271 -39
  2. package/dist/index.d.cts +1 -16
  3. package/dist/index.d.mts +1 -16
  4. package/dist/index.d.ts +1 -16
  5. package/dist/index.mjs +262 -25
  6. package/dist/internal/index.cjs +10 -0
  7. package/dist/internal/index.d.cts +3 -0
  8. package/dist/internal/index.d.mts +3 -0
  9. package/dist/internal/index.d.ts +3 -0
  10. package/dist/internal/index.mjs +8 -0
  11. package/dist/internal/plugins.cjs +38 -0
  12. package/dist/internal/plugins.d.cts +13 -0
  13. package/dist/internal/plugins.d.mts +13 -0
  14. package/dist/internal/plugins.d.ts +13 -0
  15. package/dist/internal/plugins.mjs +34 -0
  16. package/dist/internal/testing.cjs +118 -0
  17. package/dist/internal/testing.d.cts +42 -0
  18. package/dist/internal/testing.d.mts +42 -0
  19. package/dist/internal/testing.d.ts +42 -0
  20. package/dist/internal/testing.mjs +113 -0
  21. package/dist/plugins/index.cjs +39 -3
  22. package/dist/plugins/index.d.cts +16 -2
  23. package/dist/plugins/index.d.mts +16 -2
  24. package/dist/plugins/index.d.ts +16 -2
  25. package/dist/plugins/index.mjs +36 -3
  26. package/dist/shared/indexer.077335f3.cjs +15 -0
  27. package/dist/shared/indexer.2416906c.cjs +29 -0
  28. package/dist/shared/indexer.601ceab0.cjs +7 -0
  29. package/dist/shared/indexer.9b21ddd2.mjs +5 -0
  30. package/dist/shared/indexer.a55ad619.mjs +12 -0
  31. package/dist/shared/indexer.fedcd831.d.cts +100 -0
  32. package/dist/shared/indexer.fedcd831.d.mts +100 -0
  33. package/dist/shared/indexer.fedcd831.d.ts +100 -0
  34. package/dist/shared/indexer.ff25c953.mjs +26 -0
  35. package/dist/testing/index.cjs +52 -50
  36. package/dist/testing/index.d.cts +8 -36
  37. package/dist/testing/index.d.mts +8 -36
  38. package/dist/testing/index.d.ts +8 -36
  39. package/dist/testing/index.mjs +47 -47
  40. package/dist/vcr/index.cjs +84 -17
  41. package/dist/vcr/index.d.cts +16 -7
  42. package/dist/vcr/index.d.mts +16 -7
  43. package/dist/vcr/index.d.ts +16 -7
  44. package/dist/vcr/index.mjs +75 -11
  45. package/package.json +22 -42
  46. package/src/compose.test.ts +76 -0
  47. package/src/compose.ts +71 -0
  48. package/src/context.ts +14 -8
  49. package/src/index.ts +0 -5
  50. package/src/indexer.test.ts +125 -186
  51. package/src/indexer.ts +278 -151
  52. package/src/internal/index.ts +6 -0
  53. package/src/internal/plugins.ts +1 -0
  54. package/src/internal/testing.ts +148 -0
  55. package/src/plugins/config.ts +4 -4
  56. package/src/plugins/context.ts +40 -0
  57. package/src/plugins/index.ts +8 -1
  58. package/src/plugins/logger.ts +30 -0
  59. package/src/plugins/persistence.ts +24 -187
  60. package/src/testing/index.ts +58 -3
  61. package/src/vcr/record.ts +5 -3
  62. package/src/vcr/replay.ts +8 -18
  63. package/dist/plugins/kv.cjs +0 -131
  64. package/dist/plugins/kv.d.cts +0 -32
  65. package/dist/plugins/kv.d.mts +0 -32
  66. package/dist/plugins/kv.d.ts +0 -32
  67. package/dist/plugins/kv.mjs +0 -124
  68. package/dist/plugins/persistence.cjs +0 -182
  69. package/dist/plugins/persistence.d.cts +0 -50
  70. package/dist/plugins/persistence.d.mts +0 -50
  71. package/dist/plugins/persistence.d.ts +0 -50
  72. package/dist/plugins/persistence.mjs +0 -179
  73. package/dist/shared/indexer.2c23c9cd.mjs +0 -35
  74. package/dist/shared/indexer.318d3617.cjs +0 -47
  75. package/dist/shared/indexer.36530330.mjs +0 -249
  76. package/dist/shared/indexer.500fd281.d.cts +0 -23
  77. package/dist/shared/indexer.541d43eb.cjs +0 -266
  78. package/dist/shared/indexer.93d6b2eb.mjs +0 -17
  79. package/dist/shared/indexer.a8b7ab1f.cjs +0 -25
  80. package/dist/shared/indexer.b9c8f0d8.d.cts +0 -19
  81. package/dist/shared/indexer.b9c8f0d8.d.mts +0 -19
  82. package/dist/shared/indexer.b9c8f0d8.d.ts +0 -19
  83. package/dist/shared/indexer.c7ed6b83.d.cts +0 -82
  84. package/dist/shared/indexer.e1856641.d.mts +0 -23
  85. package/dist/shared/indexer.e4f2430f.d.ts +0 -23
  86. package/dist/shared/indexer.e8bd138d.d.mts +0 -82
  87. package/dist/shared/indexer.f761abcd.d.ts +0 -82
  88. package/dist/sinks/csv.cjs +0 -85
  89. package/dist/sinks/csv.d.cts +0 -66
  90. package/dist/sinks/csv.d.mts +0 -66
  91. package/dist/sinks/csv.d.ts +0 -66
  92. package/dist/sinks/csv.mjs +0 -78
  93. package/dist/sinks/drizzle/index.cjs +0 -212
  94. package/dist/sinks/drizzle/index.d.cts +0 -153
  95. package/dist/sinks/drizzle/index.d.mts +0 -153
  96. package/dist/sinks/drizzle/index.d.ts +0 -153
  97. package/dist/sinks/drizzle/index.mjs +0 -198
  98. package/dist/sinks/sqlite.cjs +0 -90
  99. package/dist/sinks/sqlite.d.cts +0 -71
  100. package/dist/sinks/sqlite.d.mts +0 -71
  101. package/dist/sinks/sqlite.d.ts +0 -71
  102. package/dist/sinks/sqlite.mjs +0 -87
  103. package/src/hooks/index.ts +0 -2
  104. package/src/hooks/useKVStore.ts +0 -12
  105. package/src/hooks/useSink.ts +0 -13
  106. package/src/plugins/kv.test.ts +0 -120
  107. package/src/plugins/kv.ts +0 -132
  108. package/src/plugins/persistence.test.ts +0 -151
  109. package/src/sink.ts +0 -36
  110. package/src/sinks/csv.test.ts +0 -65
  111. package/src/sinks/csv.ts +0 -159
  112. package/src/sinks/drizzle/Int8Range.ts +0 -52
  113. package/src/sinks/drizzle/delete.ts +0 -42
  114. package/src/sinks/drizzle/drizzle.test.ts +0 -239
  115. package/src/sinks/drizzle/drizzle.ts +0 -115
  116. package/src/sinks/drizzle/index.ts +0 -6
  117. package/src/sinks/drizzle/insert.ts +0 -42
  118. package/src/sinks/drizzle/select.ts +0 -44
  119. package/src/sinks/drizzle/transaction.ts +0 -49
  120. package/src/sinks/drizzle/update.ts +0 -47
  121. package/src/sinks/drizzle/utils.ts +0 -99
  122. package/src/sinks/sqlite.test.ts +0 -99
  123. package/src/sinks/sqlite.ts +0 -170
  124. package/src/testing/helper.ts +0 -13
  125. package/src/testing/indexer.ts +0 -35
  126. package/src/testing/setup.ts +0 -59
  127. package/src/testing/vcr.ts +0 -54
@@ -1,266 +0,0 @@
1
- 'use strict';
2
-
3
- const helper = require('./indexer.318d3617.cjs');
4
- const fs = require('node:fs/promises');
5
- const path = require('node:path');
6
- const full = require('klona/full');
7
- const consola = require('consola');
8
- const hookable = require('hookable');
9
- const assert = require('node:assert');
10
- const sink = require('./indexer.a8b7ab1f.cjs');
11
- const fs$1 = require('node:fs');
12
- const testing = require('@apibara/protocol/testing');
13
-
14
- function _interopDefaultCompat (e) { return e && typeof e === 'object' && 'default' in e ? e.default : e; }
15
-
16
- const fs__default = /*#__PURE__*/_interopDefaultCompat(fs);
17
- const path__default = /*#__PURE__*/_interopDefaultCompat(path);
18
- const consola__default = /*#__PURE__*/_interopDefaultCompat(consola);
19
- const assert__default = /*#__PURE__*/_interopDefaultCompat(assert);
20
- const fs__default$1 = /*#__PURE__*/_interopDefaultCompat(fs$1);
21
-
22
- function defineIndexer(streamConfig) {
23
- return (config) => ({
24
- streamConfig,
25
- ...config
26
- });
27
- }
28
- function createIndexer({
29
- streamConfig,
30
- ...options
31
- }) {
32
- const indexer = {
33
- options,
34
- streamConfig,
35
- hooks: hookable.createHooks()
36
- };
37
- if (indexer.options.debug) {
38
- hookable.createDebugger(indexer.hooks, { tag: "indexer" });
39
- }
40
- indexer.hooks.addHooks(indexer.options.hooks ?? {});
41
- for (const plugin of indexer.options.plugins ?? []) {
42
- plugin(indexer);
43
- }
44
- return indexer;
45
- }
46
- async function run(client, indexer) {
47
- await helper.indexerAsyncContext.callAsync({}, async () => {
48
- const context = helper.useIndexerContext();
49
- const sink$1 = indexer.options.sink ?? sink.defaultSink();
50
- context.sink = sink$1;
51
- await indexer.hooks.callHook("run:before");
52
- const isFactoryMode = indexer.options.factory !== void 0;
53
- const request = indexer.streamConfig.Request.make({
54
- filter: isFactoryMode ? [indexer.options.filter, {}] : [indexer.options.filter],
55
- finality: indexer.options.finality,
56
- startingCursor: indexer.options.startingCursor
57
- });
58
- const options = {};
59
- await indexer.hooks.callHook("connect:before", { request, options });
60
- let mainFilter;
61
- if (isFactoryMode) {
62
- mainFilter = request.filter[1];
63
- }
64
- let stream = client.streamData(request, options)[Symbol.asyncIterator]();
65
- await indexer.hooks.callHook("connect:after");
66
- while (true) {
67
- const { value: message, done } = await stream.next();
68
- if (done) {
69
- break;
70
- }
71
- await indexer.hooks.callHook("message", { message });
72
- switch (message._tag) {
73
- case "data": {
74
- await helper.tracer.startActiveSpan("message data", async (span) => {
75
- const blocks = message.data.data;
76
- const { cursor, endCursor, finality } = message.data;
77
- await sink$1.transaction(
78
- { cursor, endCursor, finality },
79
- async (txn) => {
80
- context.sinkTransaction = txn;
81
- let block;
82
- if (isFactoryMode) {
83
- assert__default(indexer.options.factory !== void 0);
84
- const [factoryBlock, mainBlock] = blocks;
85
- block = mainBlock;
86
- if (factoryBlock !== null) {
87
- const { filter } = await indexer.options.factory({
88
- block: factoryBlock,
89
- context
90
- });
91
- if (filter) {
92
- mainFilter = indexer.streamConfig.mergeFilter(
93
- mainFilter,
94
- filter
95
- );
96
- const request2 = indexer.streamConfig.Request.make({
97
- filter: [indexer.options.filter, mainFilter],
98
- finality: indexer.options.finality,
99
- startingCursor: cursor
100
- });
101
- await indexer.hooks.callHook("connect:factory", {
102
- request: request2,
103
- endCursor
104
- });
105
- stream = client.streamData(request2, options)[Symbol.asyncIterator]();
106
- const { value: message2 } = await stream.next();
107
- assert__default(message2._tag === "data");
108
- const [_factoryBlock, _block] = message2.data.data;
109
- block = _block;
110
- }
111
- }
112
- } else {
113
- block = blocks[0];
114
- }
115
- if (block) {
116
- await helper.tracer.startActiveSpan("handler", async (span2) => {
117
- await indexer.hooks.callHook("handler:before", {
118
- block,
119
- endCursor,
120
- finality
121
- });
122
- try {
123
- await indexer.options.transform({
124
- block,
125
- cursor,
126
- endCursor,
127
- finality,
128
- context
129
- });
130
- await indexer.hooks.callHook("handler:after", {
131
- block,
132
- finality,
133
- endCursor
134
- });
135
- } catch (error) {
136
- assert__default(error instanceof Error);
137
- await indexer.hooks.callHook("handler:exception", {
138
- error
139
- });
140
- throw error;
141
- }
142
- span2.end();
143
- });
144
- }
145
- }
146
- );
147
- await indexer.hooks.callHook("transaction:commit", {
148
- finality,
149
- endCursor
150
- });
151
- span.end();
152
- });
153
- break;
154
- }
155
- case "invalidate": {
156
- await helper.tracer.startActiveSpan("message invalidate", async (span) => {
157
- await sink$1.invalidate(message.invalidate.cursor);
158
- });
159
- break;
160
- }
161
- default: {
162
- consola__default.warn("unexpected message", message);
163
- throw new Error("not implemented");
164
- }
165
- }
166
- await indexer.hooks.callHook("run:after");
167
- }
168
- });
169
- }
170
-
171
- async function record(vcrConfig, client, indexerArg, cassetteOptions) {
172
- const indexer = full.klona(indexerArg);
173
- const messages = [];
174
- indexer.hooks.addHooks({
175
- "connect:before"({ options, request }) {
176
- request.startingCursor = cassetteOptions.startingCursor;
177
- options.endingCursor = cassetteOptions.endingCursor;
178
- },
179
- message({ message }) {
180
- messages.push(message);
181
- },
182
- async "run:after"() {
183
- const output = {
184
- filter: indexer.options.filter,
185
- messages
186
- };
187
- const filePath = path__default.join(
188
- vcrConfig.cassetteDir,
189
- `${cassetteOptions.name}.json`
190
- );
191
- await fs__default.writeFile(filePath, helper.serialize(output), { flag: "w" });
192
- }
193
- });
194
- await run(client, indexer);
195
- }
196
-
197
- var __defProp = Object.defineProperty;
198
- var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
199
- var __publicField = (obj, key, value) => {
200
- __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
201
- return value;
202
- };
203
- const transactionHelper = (context) => {
204
- return {
205
- insert: (data) => {
206
- context.buffer.push(...data);
207
- }
208
- };
209
- };
210
- class VcrSink extends sink.Sink {
211
- constructor() {
212
- super(...arguments);
213
- __publicField(this, "result", []);
214
- }
215
- write({ data, endCursor }) {
216
- if (data.length === 0)
217
- return;
218
- this.result.push({ data, endCursor });
219
- }
220
- async transaction({ cursor, endCursor, finality }, cb) {
221
- const context = {
222
- buffer: []
223
- };
224
- const writer = transactionHelper(context);
225
- await cb({ writer });
226
- this.write({ data: context.buffer, endCursor });
227
- }
228
- async invalidate(cursor) {
229
- throw new Error("Not implemented");
230
- }
231
- }
232
- function vcr() {
233
- return new VcrSink();
234
- }
235
-
236
- async function replay(vcrConfig, indexer, cassetteName) {
237
- const client = loadCassette(vcrConfig, cassetteName);
238
- const sink = vcr();
239
- await run(client, indexer);
240
- return {
241
- outputs: sink.result
242
- };
243
- }
244
- function loadCassette(vcrConfig, cassetteName) {
245
- const filePath = path__default.join(vcrConfig.cassetteDir, `${cassetteName}.json`);
246
- const data = fs__default$1.readFileSync(filePath, "utf8");
247
- const cassetteData = helper.deserialize(data);
248
- const { filter, messages } = cassetteData;
249
- return new testing.MockClient((request, options) => {
250
- assert__default.deepStrictEqual(
251
- request.filter,
252
- filter,
253
- "Request and Cassette filter mismatch"
254
- );
255
- return messages;
256
- });
257
- }
258
-
259
- exports.VcrSink = VcrSink;
260
- exports.createIndexer = createIndexer;
261
- exports.defineIndexer = defineIndexer;
262
- exports.loadCassette = loadCassette;
263
- exports.record = record;
264
- exports.replay = replay;
265
- exports.run = run;
266
- exports.vcr = vcr;
@@ -1,17 +0,0 @@
1
- import consola from 'consola';
2
-
3
- class Sink {
4
- }
5
- class DefaultSink extends Sink {
6
- async transaction({ cursor, endCursor, finality }, cb) {
7
- await cb({});
8
- }
9
- async invalidate(cursor) {
10
- consola.info(`Invalidating cursor ${cursor?.orderKey}`);
11
- }
12
- }
13
- function defaultSink() {
14
- return new DefaultSink();
15
- }
16
-
17
- export { DefaultSink as D, Sink as S, defaultSink as d };
@@ -1,25 +0,0 @@
1
- 'use strict';
2
-
3
- const consola = require('consola');
4
-
5
- function _interopDefaultCompat (e) { return e && typeof e === 'object' && 'default' in e ? e.default : e; }
6
-
7
- const consola__default = /*#__PURE__*/_interopDefaultCompat(consola);
8
-
9
- class Sink {
10
- }
11
- class DefaultSink extends Sink {
12
- async transaction({ cursor, endCursor, finality }, cb) {
13
- await cb({});
14
- }
15
- async invalidate(cursor) {
16
- consola__default.info(`Invalidating cursor ${cursor?.orderKey}`);
17
- }
18
- }
19
- function defaultSink() {
20
- return new DefaultSink();
21
- }
22
-
23
- exports.DefaultSink = DefaultSink;
24
- exports.Sink = Sink;
25
- exports.defaultSink = defaultSink;
@@ -1,19 +0,0 @@
1
- import { Cursor, DataFinality } from '@apibara/protocol';
2
-
3
- type SinkData = Record<string, unknown>;
4
- type SinkCursorParams = {
5
- cursor?: Cursor;
6
- endCursor?: Cursor;
7
- finality: DataFinality;
8
- };
9
- declare abstract class Sink<TTxnParams = unknown> {
10
- abstract transaction({ cursor, endCursor, finality }: SinkCursorParams, cb: (params: TTxnParams) => Promise<void>): Promise<void>;
11
- abstract invalidate(cursor?: Cursor): Promise<void>;
12
- }
13
- declare class DefaultSink extends Sink<unknown> {
14
- transaction({ cursor, endCursor, finality }: SinkCursorParams, cb: (params: unknown) => Promise<void>): Promise<void>;
15
- invalidate(cursor?: Cursor): Promise<void>;
16
- }
17
- declare function defaultSink(): DefaultSink;
18
-
19
- export { DefaultSink as D, Sink as S, type SinkCursorParams as a, type SinkData as b, defaultSink as d };
@@ -1,19 +0,0 @@
1
- import { Cursor, DataFinality } from '@apibara/protocol';
2
-
3
- type SinkData = Record<string, unknown>;
4
- type SinkCursorParams = {
5
- cursor?: Cursor;
6
- endCursor?: Cursor;
7
- finality: DataFinality;
8
- };
9
- declare abstract class Sink<TTxnParams = unknown> {
10
- abstract transaction({ cursor, endCursor, finality }: SinkCursorParams, cb: (params: TTxnParams) => Promise<void>): Promise<void>;
11
- abstract invalidate(cursor?: Cursor): Promise<void>;
12
- }
13
- declare class DefaultSink extends Sink<unknown> {
14
- transaction({ cursor, endCursor, finality }: SinkCursorParams, cb: (params: unknown) => Promise<void>): Promise<void>;
15
- invalidate(cursor?: Cursor): Promise<void>;
16
- }
17
- declare function defaultSink(): DefaultSink;
18
-
19
- export { DefaultSink as D, Sink as S, type SinkCursorParams as a, type SinkData as b, defaultSink as d };
@@ -1,19 +0,0 @@
1
- import { Cursor, DataFinality } from '@apibara/protocol';
2
-
3
- type SinkData = Record<string, unknown>;
4
- type SinkCursorParams = {
5
- cursor?: Cursor;
6
- endCursor?: Cursor;
7
- finality: DataFinality;
8
- };
9
- declare abstract class Sink<TTxnParams = unknown> {
10
- abstract transaction({ cursor, endCursor, finality }: SinkCursorParams, cb: (params: TTxnParams) => Promise<void>): Promise<void>;
11
- abstract invalidate(cursor?: Cursor): Promise<void>;
12
- }
13
- declare class DefaultSink extends Sink<unknown> {
14
- transaction({ cursor, endCursor, finality }: SinkCursorParams, cb: (params: unknown) => Promise<void>): Promise<void>;
15
- invalidate(cursor?: Cursor): Promise<void>;
16
- }
17
- declare function defaultSink(): DefaultSink;
18
-
19
- export { DefaultSink as D, Sink as S, type SinkCursorParams as a, type SinkData as b, defaultSink as d };
@@ -1,82 +0,0 @@
1
- import { StreamDataRequest, StreamDataOptions, Cursor, DataFinality, StreamDataResponse, StreamConfig, Client } from '@apibara/protocol';
2
- import { NestedHooks, Hookable } from 'hookable';
3
- import { S as Sink } from './indexer.b9c8f0d8.cjs';
4
-
5
- interface IndexerContext<TTxnParams = any> extends Record<string, any> {
6
- sink?: Sink<TTxnParams>;
7
- sinkTransaction?: TTxnParams;
8
- }
9
- declare function useIndexerContext<TTxnParams = any>(): IndexerContext<TTxnParams>;
10
-
11
- type IndexerPlugin<TFilter, TBlock, TTxnParams> = (indexer: Indexer<TFilter, TBlock, TTxnParams>) => void;
12
- declare function defineIndexerPlugin<TFilter, TBlock, TTxnParams>(def: IndexerPlugin<TFilter, TBlock, TTxnParams>): IndexerPlugin<TFilter, TBlock, TTxnParams>;
13
-
14
- interface IndexerHooks<TFilter, TBlock> {
15
- "run:before": () => void;
16
- "run:after": () => void;
17
- "connect:before": ({ request, options, }: {
18
- request: StreamDataRequest<TFilter>;
19
- options: StreamDataOptions;
20
- }) => void;
21
- "connect:after": () => void;
22
- "connect:factory": ({ request, endCursor, }: {
23
- request: StreamDataRequest<TFilter>;
24
- endCursor?: Cursor;
25
- }) => void;
26
- "handler:before": ({ block, finality, endCursor, }: {
27
- block: TBlock;
28
- finality: DataFinality;
29
- endCursor?: Cursor;
30
- }) => void;
31
- "handler:after": ({ block, finality, endCursor, }: {
32
- block: TBlock;
33
- finality: DataFinality;
34
- endCursor?: Cursor;
35
- }) => void;
36
- "transaction:commit": ({ finality, endCursor, }: {
37
- finality: DataFinality;
38
- endCursor?: Cursor;
39
- }) => void;
40
- "handler:exception": ({ error }: {
41
- error: Error;
42
- }) => void;
43
- message: ({ message }: {
44
- message: StreamDataResponse<TBlock>;
45
- }) => void;
46
- }
47
- interface IndexerConfig<TFilter, TBlock, TTxnParams> {
48
- streamUrl: string;
49
- filter: TFilter;
50
- finality?: DataFinality;
51
- startingCursor?: Cursor;
52
- sink?: Sink<TTxnParams>;
53
- factory?: ({ block, context, }: {
54
- block: TBlock;
55
- context: IndexerContext<TTxnParams>;
56
- }) => Promise<{
57
- filter?: TFilter;
58
- }>;
59
- transform: (args: {
60
- block: TBlock;
61
- cursor?: Cursor | undefined;
62
- endCursor?: Cursor | undefined;
63
- finality: DataFinality;
64
- context: IndexerContext<TTxnParams>;
65
- }) => Promise<void>;
66
- hooks?: NestedHooks<IndexerHooks<TFilter, TBlock>>;
67
- plugins?: ReadonlyArray<IndexerPlugin<TFilter, TBlock, TTxnParams>>;
68
- debug?: boolean;
69
- }
70
- interface IndexerWithStreamConfig<TFilter, TBlock, TTxnParams> extends IndexerConfig<TFilter, TBlock, TTxnParams> {
71
- streamConfig: StreamConfig<TFilter, TBlock>;
72
- }
73
- declare function defineIndexer<TFilter, TBlock>(streamConfig: StreamConfig<TFilter, TBlock>): <TTxnParams>(config: IndexerConfig<TFilter, TBlock, TTxnParams>) => IndexerWithStreamConfig<TFilter, TBlock, TTxnParams>;
74
- interface Indexer<TFilter, TBlock, TTxnParams> {
75
- streamConfig: StreamConfig<TFilter, TBlock>;
76
- options: IndexerConfig<TFilter, TBlock, TTxnParams>;
77
- hooks: Hookable<IndexerHooks<TFilter, TBlock>>;
78
- }
79
- declare function createIndexer<TFilter, TBlock, TTxnParams>({ streamConfig, ...options }: IndexerWithStreamConfig<TFilter, TBlock, TTxnParams>): Indexer<TFilter, TBlock, TTxnParams>;
80
- declare function run<TFilter, TBlock, TTxnParams>(client: Client<TFilter, TBlock>, indexer: Indexer<TFilter, TBlock, TTxnParams>): Promise<void>;
81
-
82
- export { type IndexerPlugin as I, type IndexerContext as a, type IndexerHooks as b, type IndexerConfig as c, type IndexerWithStreamConfig as d, defineIndexer as e, type Indexer as f, createIndexer as g, defineIndexerPlugin as h, run as r, useIndexerContext as u };
@@ -1,23 +0,0 @@
1
- import { Cursor, Client } from '@apibara/protocol';
2
- import { f as Indexer } from './indexer.e8bd138d.mjs';
3
- import { b as SinkData } from './indexer.b9c8f0d8.mjs';
4
-
5
- type VcrConfig = {
6
- cassetteDir: string;
7
- };
8
- type CassetteOptions = {
9
- name: string;
10
- startingCursor: Cursor;
11
- endingCursor: Cursor;
12
- };
13
-
14
- declare function replay<TFilter, TBlock, TTxnParams>(vcrConfig: VcrConfig, indexer: Indexer<TFilter, TBlock, TTxnParams>, cassetteName: string): Promise<VcrReplayResult>;
15
- type VcrReplayResult = {
16
- outputs: Array<{
17
- endCursor?: Cursor;
18
- data: SinkData[];
19
- }>;
20
- };
21
- declare function loadCassette<TFilter, TBlock>(vcrConfig: VcrConfig, cassetteName: string): Client<TFilter, TBlock>;
22
-
23
- export { type CassetteOptions as C, type VcrConfig as V, type VcrReplayResult as a, loadCassette as l, replay as r };
@@ -1,23 +0,0 @@
1
- import { Cursor, Client } from '@apibara/protocol';
2
- import { f as Indexer } from './indexer.f761abcd.js';
3
- import { b as SinkData } from './indexer.b9c8f0d8.js';
4
-
5
- type VcrConfig = {
6
- cassetteDir: string;
7
- };
8
- type CassetteOptions = {
9
- name: string;
10
- startingCursor: Cursor;
11
- endingCursor: Cursor;
12
- };
13
-
14
- declare function replay<TFilter, TBlock, TTxnParams>(vcrConfig: VcrConfig, indexer: Indexer<TFilter, TBlock, TTxnParams>, cassetteName: string): Promise<VcrReplayResult>;
15
- type VcrReplayResult = {
16
- outputs: Array<{
17
- endCursor?: Cursor;
18
- data: SinkData[];
19
- }>;
20
- };
21
- declare function loadCassette<TFilter, TBlock>(vcrConfig: VcrConfig, cassetteName: string): Client<TFilter, TBlock>;
22
-
23
- export { type CassetteOptions as C, type VcrConfig as V, type VcrReplayResult as a, loadCassette as l, replay as r };
@@ -1,82 +0,0 @@
1
- import { StreamDataRequest, StreamDataOptions, Cursor, DataFinality, StreamDataResponse, StreamConfig, Client } from '@apibara/protocol';
2
- import { NestedHooks, Hookable } from 'hookable';
3
- import { S as Sink } from './indexer.b9c8f0d8.mjs';
4
-
5
- interface IndexerContext<TTxnParams = any> extends Record<string, any> {
6
- sink?: Sink<TTxnParams>;
7
- sinkTransaction?: TTxnParams;
8
- }
9
- declare function useIndexerContext<TTxnParams = any>(): IndexerContext<TTxnParams>;
10
-
11
- type IndexerPlugin<TFilter, TBlock, TTxnParams> = (indexer: Indexer<TFilter, TBlock, TTxnParams>) => void;
12
- declare function defineIndexerPlugin<TFilter, TBlock, TTxnParams>(def: IndexerPlugin<TFilter, TBlock, TTxnParams>): IndexerPlugin<TFilter, TBlock, TTxnParams>;
13
-
14
- interface IndexerHooks<TFilter, TBlock> {
15
- "run:before": () => void;
16
- "run:after": () => void;
17
- "connect:before": ({ request, options, }: {
18
- request: StreamDataRequest<TFilter>;
19
- options: StreamDataOptions;
20
- }) => void;
21
- "connect:after": () => void;
22
- "connect:factory": ({ request, endCursor, }: {
23
- request: StreamDataRequest<TFilter>;
24
- endCursor?: Cursor;
25
- }) => void;
26
- "handler:before": ({ block, finality, endCursor, }: {
27
- block: TBlock;
28
- finality: DataFinality;
29
- endCursor?: Cursor;
30
- }) => void;
31
- "handler:after": ({ block, finality, endCursor, }: {
32
- block: TBlock;
33
- finality: DataFinality;
34
- endCursor?: Cursor;
35
- }) => void;
36
- "transaction:commit": ({ finality, endCursor, }: {
37
- finality: DataFinality;
38
- endCursor?: Cursor;
39
- }) => void;
40
- "handler:exception": ({ error }: {
41
- error: Error;
42
- }) => void;
43
- message: ({ message }: {
44
- message: StreamDataResponse<TBlock>;
45
- }) => void;
46
- }
47
- interface IndexerConfig<TFilter, TBlock, TTxnParams> {
48
- streamUrl: string;
49
- filter: TFilter;
50
- finality?: DataFinality;
51
- startingCursor?: Cursor;
52
- sink?: Sink<TTxnParams>;
53
- factory?: ({ block, context, }: {
54
- block: TBlock;
55
- context: IndexerContext<TTxnParams>;
56
- }) => Promise<{
57
- filter?: TFilter;
58
- }>;
59
- transform: (args: {
60
- block: TBlock;
61
- cursor?: Cursor | undefined;
62
- endCursor?: Cursor | undefined;
63
- finality: DataFinality;
64
- context: IndexerContext<TTxnParams>;
65
- }) => Promise<void>;
66
- hooks?: NestedHooks<IndexerHooks<TFilter, TBlock>>;
67
- plugins?: ReadonlyArray<IndexerPlugin<TFilter, TBlock, TTxnParams>>;
68
- debug?: boolean;
69
- }
70
- interface IndexerWithStreamConfig<TFilter, TBlock, TTxnParams> extends IndexerConfig<TFilter, TBlock, TTxnParams> {
71
- streamConfig: StreamConfig<TFilter, TBlock>;
72
- }
73
- declare function defineIndexer<TFilter, TBlock>(streamConfig: StreamConfig<TFilter, TBlock>): <TTxnParams>(config: IndexerConfig<TFilter, TBlock, TTxnParams>) => IndexerWithStreamConfig<TFilter, TBlock, TTxnParams>;
74
- interface Indexer<TFilter, TBlock, TTxnParams> {
75
- streamConfig: StreamConfig<TFilter, TBlock>;
76
- options: IndexerConfig<TFilter, TBlock, TTxnParams>;
77
- hooks: Hookable<IndexerHooks<TFilter, TBlock>>;
78
- }
79
- declare function createIndexer<TFilter, TBlock, TTxnParams>({ streamConfig, ...options }: IndexerWithStreamConfig<TFilter, TBlock, TTxnParams>): Indexer<TFilter, TBlock, TTxnParams>;
80
- declare function run<TFilter, TBlock, TTxnParams>(client: Client<TFilter, TBlock>, indexer: Indexer<TFilter, TBlock, TTxnParams>): Promise<void>;
81
-
82
- export { type IndexerPlugin as I, type IndexerContext as a, type IndexerHooks as b, type IndexerConfig as c, type IndexerWithStreamConfig as d, defineIndexer as e, type Indexer as f, createIndexer as g, defineIndexerPlugin as h, run as r, useIndexerContext as u };
@@ -1,82 +0,0 @@
1
- import { StreamDataRequest, StreamDataOptions, Cursor, DataFinality, StreamDataResponse, StreamConfig, Client } from '@apibara/protocol';
2
- import { NestedHooks, Hookable } from 'hookable';
3
- import { S as Sink } from './indexer.b9c8f0d8.js';
4
-
5
- interface IndexerContext<TTxnParams = any> extends Record<string, any> {
6
- sink?: Sink<TTxnParams>;
7
- sinkTransaction?: TTxnParams;
8
- }
9
- declare function useIndexerContext<TTxnParams = any>(): IndexerContext<TTxnParams>;
10
-
11
- type IndexerPlugin<TFilter, TBlock, TTxnParams> = (indexer: Indexer<TFilter, TBlock, TTxnParams>) => void;
12
- declare function defineIndexerPlugin<TFilter, TBlock, TTxnParams>(def: IndexerPlugin<TFilter, TBlock, TTxnParams>): IndexerPlugin<TFilter, TBlock, TTxnParams>;
13
-
14
- interface IndexerHooks<TFilter, TBlock> {
15
- "run:before": () => void;
16
- "run:after": () => void;
17
- "connect:before": ({ request, options, }: {
18
- request: StreamDataRequest<TFilter>;
19
- options: StreamDataOptions;
20
- }) => void;
21
- "connect:after": () => void;
22
- "connect:factory": ({ request, endCursor, }: {
23
- request: StreamDataRequest<TFilter>;
24
- endCursor?: Cursor;
25
- }) => void;
26
- "handler:before": ({ block, finality, endCursor, }: {
27
- block: TBlock;
28
- finality: DataFinality;
29
- endCursor?: Cursor;
30
- }) => void;
31
- "handler:after": ({ block, finality, endCursor, }: {
32
- block: TBlock;
33
- finality: DataFinality;
34
- endCursor?: Cursor;
35
- }) => void;
36
- "transaction:commit": ({ finality, endCursor, }: {
37
- finality: DataFinality;
38
- endCursor?: Cursor;
39
- }) => void;
40
- "handler:exception": ({ error }: {
41
- error: Error;
42
- }) => void;
43
- message: ({ message }: {
44
- message: StreamDataResponse<TBlock>;
45
- }) => void;
46
- }
47
- interface IndexerConfig<TFilter, TBlock, TTxnParams> {
48
- streamUrl: string;
49
- filter: TFilter;
50
- finality?: DataFinality;
51
- startingCursor?: Cursor;
52
- sink?: Sink<TTxnParams>;
53
- factory?: ({ block, context, }: {
54
- block: TBlock;
55
- context: IndexerContext<TTxnParams>;
56
- }) => Promise<{
57
- filter?: TFilter;
58
- }>;
59
- transform: (args: {
60
- block: TBlock;
61
- cursor?: Cursor | undefined;
62
- endCursor?: Cursor | undefined;
63
- finality: DataFinality;
64
- context: IndexerContext<TTxnParams>;
65
- }) => Promise<void>;
66
- hooks?: NestedHooks<IndexerHooks<TFilter, TBlock>>;
67
- plugins?: ReadonlyArray<IndexerPlugin<TFilter, TBlock, TTxnParams>>;
68
- debug?: boolean;
69
- }
70
- interface IndexerWithStreamConfig<TFilter, TBlock, TTxnParams> extends IndexerConfig<TFilter, TBlock, TTxnParams> {
71
- streamConfig: StreamConfig<TFilter, TBlock>;
72
- }
73
- declare function defineIndexer<TFilter, TBlock>(streamConfig: StreamConfig<TFilter, TBlock>): <TTxnParams>(config: IndexerConfig<TFilter, TBlock, TTxnParams>) => IndexerWithStreamConfig<TFilter, TBlock, TTxnParams>;
74
- interface Indexer<TFilter, TBlock, TTxnParams> {
75
- streamConfig: StreamConfig<TFilter, TBlock>;
76
- options: IndexerConfig<TFilter, TBlock, TTxnParams>;
77
- hooks: Hookable<IndexerHooks<TFilter, TBlock>>;
78
- }
79
- declare function createIndexer<TFilter, TBlock, TTxnParams>({ streamConfig, ...options }: IndexerWithStreamConfig<TFilter, TBlock, TTxnParams>): Indexer<TFilter, TBlock, TTxnParams>;
80
- declare function run<TFilter, TBlock, TTxnParams>(client: Client<TFilter, TBlock>, indexer: Indexer<TFilter, TBlock, TTxnParams>): Promise<void>;
81
-
82
- export { type IndexerPlugin as I, type IndexerContext as a, type IndexerHooks as b, type IndexerConfig as c, type IndexerWithStreamConfig as d, defineIndexer as e, type Indexer as f, createIndexer as g, defineIndexerPlugin as h, run as r, useIndexerContext as u };