@apibara/indexer 2.1.0-beta.5 → 2.1.0-beta.50
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/index.cjs +134 -41
- package/dist/index.cjs.map +1 -0
- package/dist/index.d.cts +8 -1
- package/dist/index.d.mts +8 -1
- package/dist/index.d.ts +8 -1
- package/dist/index.mjs +125 -34
- package/dist/index.mjs.map +1 -0
- package/dist/internal/index.cjs +1 -0
- package/dist/internal/index.cjs.map +1 -0
- package/dist/internal/index.mjs +1 -0
- package/dist/internal/index.mjs.map +1 -0
- package/dist/internal/plugins.cjs +5 -5
- package/dist/internal/plugins.cjs.map +1 -0
- package/dist/internal/plugins.d.cts +1 -1
- package/dist/internal/plugins.d.mts +1 -1
- package/dist/internal/plugins.d.ts +1 -1
- package/dist/internal/plugins.mjs +3 -3
- package/dist/internal/plugins.mjs.map +1 -0
- package/dist/internal/testing.cjs +35 -14
- package/dist/internal/testing.cjs.map +1 -0
- package/dist/internal/testing.d.cts +16 -12
- package/dist/internal/testing.d.mts +16 -12
- package/dist/internal/testing.d.ts +16 -12
- package/dist/internal/testing.mjs +33 -12
- package/dist/internal/testing.mjs.map +1 -0
- package/dist/plugins/index.cjs +4 -4
- package/dist/plugins/index.cjs.map +1 -0
- package/dist/plugins/index.d.cts +2 -2
- package/dist/plugins/index.d.mts +2 -2
- package/dist/plugins/index.d.ts +2 -2
- package/dist/plugins/index.mjs +4 -4
- package/dist/plugins/index.mjs.map +1 -0
- package/dist/shared/{indexer.2416906c.cjs → indexer.03c9f151.cjs} +8 -5
- package/dist/shared/indexer.03c9f151.cjs.map +1 -0
- package/dist/shared/{indexer.ff25c953.mjs → indexer.2673dcb1.mjs} +7 -4
- package/dist/shared/indexer.2673dcb1.mjs.map +1 -0
- package/dist/shared/{indexer.077335f3.cjs → indexer.479ae593.cjs} +6 -0
- package/dist/shared/indexer.479ae593.cjs.map +1 -0
- package/dist/shared/{indexer.fedcd831.d.cts → indexer.4ef52548.d.cts} +40 -23
- package/dist/shared/{indexer.fedcd831.d.mts → indexer.4ef52548.d.mts} +40 -23
- package/dist/shared/{indexer.fedcd831.d.ts → indexer.4ef52548.d.ts} +40 -23
- package/dist/shared/{indexer.a55ad619.mjs → indexer.75773ef1.mjs} +6 -1
- package/dist/shared/indexer.75773ef1.mjs.map +1 -0
- package/dist/testing/index.cjs +19 -10
- package/dist/testing/index.cjs.map +1 -0
- package/dist/testing/index.d.cts +11 -7
- package/dist/testing/index.d.mts +11 -7
- package/dist/testing/index.d.ts +11 -7
- package/dist/testing/index.mjs +20 -11
- package/dist/testing/index.mjs.map +1 -0
- package/dist/vcr/index.cjs +3 -1
- package/dist/vcr/index.cjs.map +1 -0
- package/dist/vcr/index.d.cts +1 -1
- package/dist/vcr/index.d.mts +1 -1
- package/dist/vcr/index.d.ts +1 -1
- package/dist/vcr/index.mjs +3 -1
- package/dist/vcr/index.mjs.map +1 -0
- package/package.json +3 -3
- package/src/index.ts +1 -0
- package/src/indexer.ts +151 -50
- package/src/internal/testing.ts +67 -23
- package/src/otel.ts +29 -2
- package/src/plugins/context.ts +1 -1
- package/src/plugins/logger.ts +11 -2
- package/src/testing/index.ts +30 -6
- package/src/utils/index.ts +21 -0
- package/dist/shared/indexer.601ceab0.cjs +0 -7
- package/dist/shared/indexer.9b21ddd2.mjs +0 -5
- package/src/compose.test.ts +0 -76
- package/src/indexer.test.ts +0 -430
|
@@ -1,18 +1,22 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { e as Indexer, i as IndexerPlugin, b as IndexerConfig } from '../shared/indexer.4ef52548.cjs';
|
|
2
2
|
import { MockStreamResponse, MockFilter, MockBlock } from '@apibara/protocol/testing';
|
|
3
3
|
import { InternalContext } from './plugins.cjs';
|
|
4
4
|
import '@apibara/protocol';
|
|
5
5
|
import 'hookable';
|
|
6
6
|
|
|
7
|
+
type InvalidateConfig = {
|
|
8
|
+
invalidateFromIndex: number;
|
|
9
|
+
invalidateTriggerIndex: number;
|
|
10
|
+
};
|
|
11
|
+
type FinalizeConfig = {
|
|
12
|
+
finalizeToIndex: number;
|
|
13
|
+
finalizeTriggerIndex: number;
|
|
14
|
+
};
|
|
7
15
|
type MockMessagesOptions = {
|
|
8
|
-
invalidate?:
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
finalize?: {
|
|
13
|
-
finalizeToIndex: number;
|
|
14
|
-
finalizeTriggerIndex: number;
|
|
15
|
-
};
|
|
16
|
+
invalidate?: InvalidateConfig | InvalidateConfig[];
|
|
17
|
+
finalize?: FinalizeConfig | FinalizeConfig[];
|
|
18
|
+
uniqueKey?: boolean;
|
|
19
|
+
baseBlockNumber?: bigint;
|
|
16
20
|
};
|
|
17
21
|
declare function generateMockMessages(count?: number, options?: MockMessagesOptions): MockStreamResponse[];
|
|
18
22
|
type MockIndexerParams = {
|
|
@@ -20,9 +24,9 @@ type MockIndexerParams = {
|
|
|
20
24
|
override?: Partial<IndexerConfig<MockFilter, MockBlock>>;
|
|
21
25
|
};
|
|
22
26
|
declare function getMockIndexer(params?: MockIndexerParams): Indexer<{
|
|
23
|
-
|
|
27
|
+
filter?: string | undefined;
|
|
24
28
|
}, {
|
|
25
|
-
|
|
29
|
+
data?: string | undefined;
|
|
26
30
|
}>;
|
|
27
31
|
type MockRet = {
|
|
28
32
|
data: string;
|
|
@@ -39,4 +43,4 @@ declare function useMockSink(): {
|
|
|
39
43
|
output: unknown[];
|
|
40
44
|
};
|
|
41
45
|
|
|
42
|
-
export { type MockMessagesOptions, type MockRet, generateMockMessages, getMockIndexer, mockSink, useMockSink };
|
|
46
|
+
export { type FinalizeConfig, type InvalidateConfig, type MockMessagesOptions, type MockRet, generateMockMessages, getMockIndexer, mockSink, useMockSink };
|
|
@@ -1,18 +1,22 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { e as Indexer, i as IndexerPlugin, b as IndexerConfig } from '../shared/indexer.4ef52548.mjs';
|
|
2
2
|
import { MockStreamResponse, MockFilter, MockBlock } from '@apibara/protocol/testing';
|
|
3
3
|
import { InternalContext } from './plugins.mjs';
|
|
4
4
|
import '@apibara/protocol';
|
|
5
5
|
import 'hookable';
|
|
6
6
|
|
|
7
|
+
type InvalidateConfig = {
|
|
8
|
+
invalidateFromIndex: number;
|
|
9
|
+
invalidateTriggerIndex: number;
|
|
10
|
+
};
|
|
11
|
+
type FinalizeConfig = {
|
|
12
|
+
finalizeToIndex: number;
|
|
13
|
+
finalizeTriggerIndex: number;
|
|
14
|
+
};
|
|
7
15
|
type MockMessagesOptions = {
|
|
8
|
-
invalidate?:
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
finalize?: {
|
|
13
|
-
finalizeToIndex: number;
|
|
14
|
-
finalizeTriggerIndex: number;
|
|
15
|
-
};
|
|
16
|
+
invalidate?: InvalidateConfig | InvalidateConfig[];
|
|
17
|
+
finalize?: FinalizeConfig | FinalizeConfig[];
|
|
18
|
+
uniqueKey?: boolean;
|
|
19
|
+
baseBlockNumber?: bigint;
|
|
16
20
|
};
|
|
17
21
|
declare function generateMockMessages(count?: number, options?: MockMessagesOptions): MockStreamResponse[];
|
|
18
22
|
type MockIndexerParams = {
|
|
@@ -20,9 +24,9 @@ type MockIndexerParams = {
|
|
|
20
24
|
override?: Partial<IndexerConfig<MockFilter, MockBlock>>;
|
|
21
25
|
};
|
|
22
26
|
declare function getMockIndexer(params?: MockIndexerParams): Indexer<{
|
|
23
|
-
|
|
27
|
+
filter?: string | undefined;
|
|
24
28
|
}, {
|
|
25
|
-
|
|
29
|
+
data?: string | undefined;
|
|
26
30
|
}>;
|
|
27
31
|
type MockRet = {
|
|
28
32
|
data: string;
|
|
@@ -39,4 +43,4 @@ declare function useMockSink(): {
|
|
|
39
43
|
output: unknown[];
|
|
40
44
|
};
|
|
41
45
|
|
|
42
|
-
export { type MockMessagesOptions, type MockRet, generateMockMessages, getMockIndexer, mockSink, useMockSink };
|
|
46
|
+
export { type FinalizeConfig, type InvalidateConfig, type MockMessagesOptions, type MockRet, generateMockMessages, getMockIndexer, mockSink, useMockSink };
|
|
@@ -1,18 +1,22 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { e as Indexer, i as IndexerPlugin, b as IndexerConfig } from '../shared/indexer.4ef52548.js';
|
|
2
2
|
import { MockStreamResponse, MockFilter, MockBlock } from '@apibara/protocol/testing';
|
|
3
3
|
import { InternalContext } from './plugins.js';
|
|
4
4
|
import '@apibara/protocol';
|
|
5
5
|
import 'hookable';
|
|
6
6
|
|
|
7
|
+
type InvalidateConfig = {
|
|
8
|
+
invalidateFromIndex: number;
|
|
9
|
+
invalidateTriggerIndex: number;
|
|
10
|
+
};
|
|
11
|
+
type FinalizeConfig = {
|
|
12
|
+
finalizeToIndex: number;
|
|
13
|
+
finalizeTriggerIndex: number;
|
|
14
|
+
};
|
|
7
15
|
type MockMessagesOptions = {
|
|
8
|
-
invalidate?:
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
finalize?: {
|
|
13
|
-
finalizeToIndex: number;
|
|
14
|
-
finalizeTriggerIndex: number;
|
|
15
|
-
};
|
|
16
|
+
invalidate?: InvalidateConfig | InvalidateConfig[];
|
|
17
|
+
finalize?: FinalizeConfig | FinalizeConfig[];
|
|
18
|
+
uniqueKey?: boolean;
|
|
19
|
+
baseBlockNumber?: bigint;
|
|
16
20
|
};
|
|
17
21
|
declare function generateMockMessages(count?: number, options?: MockMessagesOptions): MockStreamResponse[];
|
|
18
22
|
type MockIndexerParams = {
|
|
@@ -20,9 +24,9 @@ type MockIndexerParams = {
|
|
|
20
24
|
override?: Partial<IndexerConfig<MockFilter, MockBlock>>;
|
|
21
25
|
};
|
|
22
26
|
declare function getMockIndexer(params?: MockIndexerParams): Indexer<{
|
|
23
|
-
|
|
27
|
+
filter?: string | undefined;
|
|
24
28
|
}, {
|
|
25
|
-
|
|
29
|
+
data?: string | undefined;
|
|
26
30
|
}>;
|
|
27
31
|
type MockRet = {
|
|
28
32
|
data: string;
|
|
@@ -39,4 +43,4 @@ declare function useMockSink(): {
|
|
|
39
43
|
output: unknown[];
|
|
40
44
|
};
|
|
41
45
|
|
|
42
|
-
export { type MockMessagesOptions, type MockRet, generateMockMessages, getMockIndexer, mockSink, useMockSink };
|
|
46
|
+
export { type FinalizeConfig, type InvalidateConfig, type MockMessagesOptions, type MockRet, generateMockMessages, getMockIndexer, mockSink, useMockSink };
|
|
@@ -1,36 +1,49 @@
|
|
|
1
1
|
import { isCursor } from '@apibara/protocol';
|
|
2
2
|
import { MockStream } from '@apibara/protocol/testing';
|
|
3
|
-
import { u as useIndexerContext } from '../shared/indexer.
|
|
3
|
+
import { d as defineIndexerPlugin, u as useIndexerContext } from '../shared/indexer.75773ef1.mjs';
|
|
4
4
|
import { createIndexer, defineIndexer } from '../index.mjs';
|
|
5
|
-
import {
|
|
6
|
-
import 'consola';
|
|
5
|
+
import { l as logger } from '../shared/indexer.2673dcb1.mjs';
|
|
7
6
|
import { internalContext } from './plugins.mjs';
|
|
8
7
|
import 'node:async_hooks';
|
|
9
8
|
import 'unctx';
|
|
9
|
+
import 'consola';
|
|
10
10
|
import 'hookable';
|
|
11
11
|
import 'node:assert';
|
|
12
12
|
import '@opentelemetry/api';
|
|
13
13
|
|
|
14
14
|
function generateMockMessages(count = 10, options) {
|
|
15
|
-
const invalidateAt = options?.invalidate;
|
|
16
|
-
const finalizeAt = options?.finalize;
|
|
17
15
|
const messages = [];
|
|
16
|
+
const baseBlockNumber = options?.baseBlockNumber ?? BigInt(5e6);
|
|
17
|
+
const invalidateConfigs = options?.invalidate ? Array.isArray(options.invalidate) ? options.invalidate : [options.invalidate] : [];
|
|
18
|
+
const finalizeConfigs = options?.finalize ? Array.isArray(options.finalize) ? options.finalize : [options.finalize] : [];
|
|
18
19
|
for (let i = 0; i < count; i++) {
|
|
19
|
-
|
|
20
|
+
const currentBlockNumber = baseBlockNumber + BigInt(i);
|
|
21
|
+
const uniqueKey = uniqueKeyFromOrderKey(currentBlockNumber);
|
|
22
|
+
const invalidateConfig = invalidateConfigs.find(
|
|
23
|
+
(cfg) => cfg.invalidateTriggerIndex === i
|
|
24
|
+
);
|
|
25
|
+
const finalizeConfig = finalizeConfigs.find(
|
|
26
|
+
(cfg) => cfg.finalizeTriggerIndex === i
|
|
27
|
+
);
|
|
28
|
+
if (invalidateConfig) {
|
|
29
|
+
const invalidateToBlock = baseBlockNumber + BigInt(invalidateConfig.invalidateFromIndex);
|
|
20
30
|
messages.push({
|
|
21
31
|
_tag: "invalidate",
|
|
22
32
|
invalidate: {
|
|
23
33
|
cursor: {
|
|
24
|
-
orderKey:
|
|
34
|
+
orderKey: invalidateToBlock,
|
|
35
|
+
uniqueKey: options?.uniqueKey ? uniqueKeyFromOrderKey(invalidateToBlock) : void 0
|
|
25
36
|
}
|
|
26
37
|
}
|
|
27
38
|
});
|
|
28
|
-
} else if (
|
|
39
|
+
} else if (finalizeConfig) {
|
|
40
|
+
const finalizedToBlock = baseBlockNumber + BigInt(finalizeConfig.finalizeToIndex);
|
|
29
41
|
messages.push({
|
|
30
42
|
_tag: "finalize",
|
|
31
43
|
finalize: {
|
|
32
44
|
cursor: {
|
|
33
|
-
orderKey:
|
|
45
|
+
orderKey: finalizedToBlock,
|
|
46
|
+
uniqueKey: options?.uniqueKey ? uniqueKeyFromOrderKey(finalizedToBlock) : void 0
|
|
34
47
|
}
|
|
35
48
|
}
|
|
36
49
|
});
|
|
@@ -38,10 +51,13 @@ function generateMockMessages(count = 10, options) {
|
|
|
38
51
|
messages.push({
|
|
39
52
|
_tag: "data",
|
|
40
53
|
data: {
|
|
41
|
-
cursor: { orderKey:
|
|
54
|
+
cursor: { orderKey: currentBlockNumber - 1n },
|
|
42
55
|
finality: "accepted",
|
|
43
|
-
data: [{ data: `${
|
|
44
|
-
endCursor: {
|
|
56
|
+
data: [{ data: `${baseBlockNumber + BigInt(i)}` }],
|
|
57
|
+
endCursor: {
|
|
58
|
+
orderKey: currentBlockNumber,
|
|
59
|
+
uniqueKey: options?.uniqueKey ? uniqueKey : void 0
|
|
60
|
+
},
|
|
45
61
|
production: "backfill"
|
|
46
62
|
}
|
|
47
63
|
});
|
|
@@ -49,6 +65,9 @@ function generateMockMessages(count = 10, options) {
|
|
|
49
65
|
}
|
|
50
66
|
return messages;
|
|
51
67
|
}
|
|
68
|
+
function uniqueKeyFromOrderKey(orderKey) {
|
|
69
|
+
return `0xff00${orderKey.toString()}`;
|
|
70
|
+
}
|
|
52
71
|
function getMockIndexer(params) {
|
|
53
72
|
const { internalContext: contextParams, override } = params ?? {};
|
|
54
73
|
const { plugins, ...rest } = override ?? {};
|
|
@@ -60,6 +79,7 @@ function getMockIndexer(params) {
|
|
|
60
79
|
async transform() {
|
|
61
80
|
},
|
|
62
81
|
plugins: [
|
|
82
|
+
logger(),
|
|
63
83
|
internalContext(
|
|
64
84
|
contextParams ?? {
|
|
65
85
|
availableIndexers: ["testing"],
|
|
@@ -111,3 +131,4 @@ function useMockSink() {
|
|
|
111
131
|
}
|
|
112
132
|
|
|
113
133
|
export { generateMockMessages, getMockIndexer, mockSink, useMockSink };
|
|
134
|
+
//# sourceMappingURL=testing.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"testing.mjs","sources":["../../src/internal/testing.ts"],"sourcesContent":["import { type Finalize, type Invalidate, isCursor } from \"@apibara/protocol\";\nimport {\n type MockBlock,\n type MockFilter,\n MockStream,\n type MockStreamResponse,\n} from \"@apibara/protocol/testing\";\nimport { useIndexerContext } from \"../context\";\nimport { type IndexerConfig, createIndexer, defineIndexer } from \"../indexer\";\nimport { defineIndexerPlugin, logger } from \"../plugins\";\nimport { type InternalContext, internalContext } from \"./plugins\";\n\nexport type InvalidateConfig = {\n invalidateFromIndex: number;\n invalidateTriggerIndex: number;\n};\n\nexport type FinalizeConfig = {\n finalizeToIndex: number;\n finalizeTriggerIndex: number;\n};\n\nexport type MockMessagesOptions = {\n invalidate?: InvalidateConfig | InvalidateConfig[];\n finalize?: FinalizeConfig | FinalizeConfig[];\n uniqueKey?: boolean;\n baseBlockNumber?: bigint;\n};\n\nexport function generateMockMessages(\n count = 10,\n options?: MockMessagesOptions,\n): MockStreamResponse[] {\n const messages: MockStreamResponse[] = [];\n const baseBlockNumber = options?.baseBlockNumber ?? BigInt(5_000_000);\n\n const invalidateConfigs = options?.invalidate\n ? Array.isArray(options.invalidate)\n ? options.invalidate\n : [options.invalidate]\n : [];\n\n const finalizeConfigs = options?.finalize\n ? Array.isArray(options.finalize)\n ? options.finalize\n : [options.finalize]\n : [];\n\n for (let i = 0; i < count; i++) {\n const currentBlockNumber = baseBlockNumber + BigInt(i);\n const uniqueKey = uniqueKeyFromOrderKey(currentBlockNumber);\n\n const invalidateConfig = invalidateConfigs.find(\n (cfg) => cfg.invalidateTriggerIndex === i,\n );\n const finalizeConfig = finalizeConfigs.find(\n (cfg) => cfg.finalizeTriggerIndex === i,\n );\n\n if (invalidateConfig) {\n const invalidateToBlock =\n baseBlockNumber + BigInt(invalidateConfig.invalidateFromIndex);\n messages.push({\n _tag: \"invalidate\",\n invalidate: {\n cursor: {\n orderKey: invalidateToBlock,\n uniqueKey: options?.uniqueKey\n ? uniqueKeyFromOrderKey(invalidateToBlock)\n : undefined,\n },\n } as Invalidate,\n });\n } else if (finalizeConfig) {\n const finalizedToBlock =\n baseBlockNumber + BigInt(finalizeConfig.finalizeToIndex);\n messages.push({\n _tag: \"finalize\",\n finalize: {\n cursor: {\n orderKey: finalizedToBlock,\n uniqueKey: options?.uniqueKey\n ? uniqueKeyFromOrderKey(finalizedToBlock)\n : undefined,\n },\n } as Finalize,\n });\n } else {\n messages.push({\n _tag: \"data\",\n data: {\n cursor: { orderKey: currentBlockNumber - 1n },\n finality: \"accepted\",\n data: [{ data: `${baseBlockNumber + BigInt(i)}` }],\n endCursor: {\n orderKey: currentBlockNumber,\n uniqueKey: options?.uniqueKey ? uniqueKey : undefined,\n },\n production: \"backfill\",\n },\n });\n }\n }\n\n return messages;\n}\n\nfunction uniqueKeyFromOrderKey(orderKey: bigint): `0x${string}` {\n return `0xff00${orderKey.toString()}`;\n}\n\ntype MockIndexerParams = {\n internalContext?: InternalContext;\n override?: Partial<IndexerConfig<MockFilter, MockBlock>>;\n};\n\nexport function getMockIndexer(params?: MockIndexerParams) {\n const { internalContext: contextParams, override } = params ?? {};\n const { plugins, ...rest } = override ?? {};\n\n return createIndexer(\n defineIndexer(MockStream)({\n streamUrl: \"https://sepolia.ethereum.a5a.ch\",\n finality: \"accepted\",\n filter: {},\n async transform() {},\n plugins: [\n logger(),\n internalContext(\n contextParams ??\n ({\n availableIndexers: [\"testing\"],\n indexerName: \"testing\",\n } as InternalContext),\n ),\n ...(plugins ?? []),\n ],\n ...(rest ?? {}),\n }),\n );\n}\n\nexport type MockRet = {\n data: string;\n};\n\n/**\n * A mock sink used for testing. The indexer function can write to the output array.\n * The indexer context is optionally written to the metadata object.\n */\nexport function mockSink<TFilter, TBlock>({\n output,\n metadata,\n}: { output: unknown[]; metadata?: Record<string, unknown> }) {\n return defineIndexerPlugin<TFilter, TBlock>((indexer) => {\n indexer.hooks.hook(\"connect:before\", ({ request }) => {\n if (metadata?.lastCursor && isCursor(metadata.lastCursor)) {\n request.startingCursor = metadata.lastCursor;\n }\n\n if (metadata?.lastFilter) {\n request.filter[1] = metadata.lastFilter as TFilter;\n }\n });\n\n indexer.hooks.hook(\"connect:factory\", ({ request, endCursor }) => {\n if (request.filter[1]) {\n if (metadata) {\n metadata.lastCursor = endCursor;\n metadata.lastFilter = request.filter[1];\n }\n }\n });\n\n indexer.hooks.hook(\"handler:middleware\", ({ use }) => {\n use(async (context, next) => {\n context.output = output;\n await next();\n context.output = null;\n\n if (metadata) {\n metadata.lastCursor = context.endCursor;\n }\n });\n });\n });\n}\n\nexport function useMockSink(): { output: unknown[] } {\n const context = useIndexerContext();\n return { output: context.output };\n}\n"],"names":[],"mappings":"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"}
|
package/dist/plugins/index.cjs
CHANGED
|
@@ -1,12 +1,11 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
-
const config = require('../shared/indexer.
|
|
4
|
-
const logger = require('../shared/indexer.
|
|
3
|
+
const config = require('../shared/indexer.479ae593.cjs');
|
|
4
|
+
const logger = require('../shared/indexer.03c9f151.cjs');
|
|
5
5
|
const protocol = require('@apibara/protocol');
|
|
6
|
-
require('consola');
|
|
7
|
-
require('../shared/indexer.077335f3.cjs');
|
|
8
6
|
require('node:async_hooks');
|
|
9
7
|
require('unctx');
|
|
8
|
+
require('consola');
|
|
10
9
|
|
|
11
10
|
function inMemoryPersistence() {
|
|
12
11
|
return config.defineIndexerPlugin((indexer) => {
|
|
@@ -41,3 +40,4 @@ exports.defineIndexerPlugin = config.defineIndexerPlugin;
|
|
|
41
40
|
exports.logger = logger.logger;
|
|
42
41
|
exports.useLogger = logger.useLogger;
|
|
43
42
|
exports.inMemoryPersistence = inMemoryPersistence;
|
|
43
|
+
//# sourceMappingURL=index.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.cjs","sources":["../../src/plugins/persistence.ts"],"sourcesContent":["import { type Cursor, isCursor } from \"@apibara/protocol\";\n\nimport { defineIndexerPlugin } from \"./config\";\n\n/**\n * A plugin that persists the last cursor and filter to memory.\n */\nexport function inMemoryPersistence<TFilter, TBlock>() {\n return defineIndexerPlugin<TFilter, TBlock>((indexer) => {\n let lastCursor: Cursor | undefined;\n let lastFilter: TFilter | undefined;\n\n indexer.hooks.hook(\"connect:before\", ({ request }) => {\n if (lastCursor) {\n request.startingCursor = lastCursor;\n }\n\n if (lastFilter) {\n request.filter[1] = lastFilter;\n }\n });\n\n indexer.hooks.hook(\"connect:factory\", ({ request, endCursor }) => {\n if (request.filter[1]) {\n lastCursor = endCursor;\n lastFilter = request.filter[1];\n }\n });\n\n indexer.hooks.hook(\"handler:middleware\", ({ use }) => {\n use(async (context, next) => {\n await next();\n if (context.endCursor && isCursor(context.endCursor)) {\n lastCursor = context.endCursor;\n }\n });\n });\n });\n}\n"],"names":["defineIndexerPlugin","isCursor"],"mappings":";;;;;;;;;AAOO,SAAS,mBAAuC,GAAA;AACrD,EAAO,OAAAA,0BAAA,CAAqC,CAAC,OAAY,KAAA;AACvD,IAAI,IAAA,UAAA,CAAA;AACJ,IAAI,IAAA,UAAA,CAAA;AAEJ,IAAA,OAAA,CAAQ,MAAM,IAAK,CAAA,gBAAA,EAAkB,CAAC,EAAE,SAAc,KAAA;AACpD,MAAA,IAAI,UAAY,EAAA;AACd,QAAA,OAAA,CAAQ,cAAiB,GAAA,UAAA,CAAA;AAAA,OAC3B;AAEA,MAAA,IAAI,UAAY,EAAA;AACd,QAAQ,OAAA,CAAA,MAAA,CAAO,CAAC,CAAI,GAAA,UAAA,CAAA;AAAA,OACtB;AAAA,KACD,CAAA,CAAA;AAED,IAAA,OAAA,CAAQ,MAAM,IAAK,CAAA,iBAAA,EAAmB,CAAC,EAAE,OAAA,EAAS,WAAgB,KAAA;AAChE,MAAI,IAAA,OAAA,CAAQ,MAAO,CAAA,CAAC,CAAG,EAAA;AACrB,QAAa,UAAA,GAAA,SAAA,CAAA;AACb,QAAa,UAAA,GAAA,OAAA,CAAQ,OAAO,CAAC,CAAA,CAAA;AAAA,OAC/B;AAAA,KACD,CAAA,CAAA;AAED,IAAA,OAAA,CAAQ,MAAM,IAAK,CAAA,oBAAA,EAAsB,CAAC,EAAE,KAAU,KAAA;AACpD,MAAI,GAAA,CAAA,OAAO,SAAS,IAAS,KAAA;AAC3B,QAAA,MAAM,IAAK,EAAA,CAAA;AACX,QAAA,IAAI,OAAQ,CAAA,SAAA,IAAaC,iBAAS,CAAA,OAAA,CAAQ,SAAS,CAAG,EAAA;AACpD,UAAA,UAAA,GAAa,OAAQ,CAAA,SAAA,CAAA;AAAA,SACvB;AAAA,OACD,CAAA,CAAA;AAAA,KACF,CAAA,CAAA;AAAA,GACF,CAAA,CAAA;AACH;;;;;;;"}
|
package/dist/plugins/index.d.cts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import {
|
|
2
|
-
export {
|
|
1
|
+
import { i as IndexerPlugin } from '../shared/indexer.4ef52548.cjs';
|
|
2
|
+
export { j as defineIndexerPlugin } from '../shared/indexer.4ef52548.cjs';
|
|
3
3
|
import { ConsolaReporter, ConsolaInstance } from 'consola';
|
|
4
4
|
export { ConsolaInstance, ConsolaReporter } from 'consola';
|
|
5
5
|
import '@apibara/protocol';
|
package/dist/plugins/index.d.mts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import {
|
|
2
|
-
export {
|
|
1
|
+
import { i as IndexerPlugin } from '../shared/indexer.4ef52548.mjs';
|
|
2
|
+
export { j as defineIndexerPlugin } from '../shared/indexer.4ef52548.mjs';
|
|
3
3
|
import { ConsolaReporter, ConsolaInstance } from 'consola';
|
|
4
4
|
export { ConsolaInstance, ConsolaReporter } from 'consola';
|
|
5
5
|
import '@apibara/protocol';
|
package/dist/plugins/index.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import {
|
|
2
|
-
export {
|
|
1
|
+
import { i as IndexerPlugin } from '../shared/indexer.4ef52548.js';
|
|
2
|
+
export { j as defineIndexerPlugin } from '../shared/indexer.4ef52548.js';
|
|
3
3
|
import { ConsolaReporter, ConsolaInstance } from 'consola';
|
|
4
4
|
export { ConsolaInstance, ConsolaReporter } from 'consola';
|
|
5
5
|
import '@apibara/protocol';
|
package/dist/plugins/index.mjs
CHANGED
|
@@ -1,10 +1,9 @@
|
|
|
1
|
-
import { d as defineIndexerPlugin } from '../shared/indexer.
|
|
2
|
-
export { l as logger, u as useLogger } from '../shared/indexer.
|
|
1
|
+
import { d as defineIndexerPlugin } from '../shared/indexer.75773ef1.mjs';
|
|
2
|
+
export { l as logger, u as useLogger } from '../shared/indexer.2673dcb1.mjs';
|
|
3
3
|
import { isCursor } from '@apibara/protocol';
|
|
4
|
-
import 'consola';
|
|
5
|
-
import '../shared/indexer.a55ad619.mjs';
|
|
6
4
|
import 'node:async_hooks';
|
|
7
5
|
import 'unctx';
|
|
6
|
+
import 'consola';
|
|
8
7
|
|
|
9
8
|
function inMemoryPersistence() {
|
|
10
9
|
return defineIndexerPlugin((indexer) => {
|
|
@@ -36,3 +35,4 @@ function inMemoryPersistence() {
|
|
|
36
35
|
}
|
|
37
36
|
|
|
38
37
|
export { defineIndexerPlugin, inMemoryPersistence };
|
|
38
|
+
//# sourceMappingURL=index.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.mjs","sources":["../../src/plugins/persistence.ts"],"sourcesContent":["import { type Cursor, isCursor } from \"@apibara/protocol\";\n\nimport { defineIndexerPlugin } from \"./config\";\n\n/**\n * A plugin that persists the last cursor and filter to memory.\n */\nexport function inMemoryPersistence<TFilter, TBlock>() {\n return defineIndexerPlugin<TFilter, TBlock>((indexer) => {\n let lastCursor: Cursor | undefined;\n let lastFilter: TFilter | undefined;\n\n indexer.hooks.hook(\"connect:before\", ({ request }) => {\n if (lastCursor) {\n request.startingCursor = lastCursor;\n }\n\n if (lastFilter) {\n request.filter[1] = lastFilter;\n }\n });\n\n indexer.hooks.hook(\"connect:factory\", ({ request, endCursor }) => {\n if (request.filter[1]) {\n lastCursor = endCursor;\n lastFilter = request.filter[1];\n }\n });\n\n indexer.hooks.hook(\"handler:middleware\", ({ use }) => {\n use(async (context, next) => {\n await next();\n if (context.endCursor && isCursor(context.endCursor)) {\n lastCursor = context.endCursor;\n }\n });\n });\n });\n}\n"],"names":[],"mappings":";;;;;;;AAOO,SAAS,mBAAuC,GAAA;AACrD,EAAO,OAAA,mBAAA,CAAqC,CAAC,OAAY,KAAA;AACvD,IAAI,IAAA,UAAA,CAAA;AACJ,IAAI,IAAA,UAAA,CAAA;AAEJ,IAAA,OAAA,CAAQ,MAAM,IAAK,CAAA,gBAAA,EAAkB,CAAC,EAAE,SAAc,KAAA;AACpD,MAAA,IAAI,UAAY,EAAA;AACd,QAAA,OAAA,CAAQ,cAAiB,GAAA,UAAA,CAAA;AAAA,OAC3B;AAEA,MAAA,IAAI,UAAY,EAAA;AACd,QAAQ,OAAA,CAAA,MAAA,CAAO,CAAC,CAAI,GAAA,UAAA,CAAA;AAAA,OACtB;AAAA,KACD,CAAA,CAAA;AAED,IAAA,OAAA,CAAQ,MAAM,IAAK,CAAA,iBAAA,EAAmB,CAAC,EAAE,OAAA,EAAS,WAAgB,KAAA;AAChE,MAAI,IAAA,OAAA,CAAQ,MAAO,CAAA,CAAC,CAAG,EAAA;AACrB,QAAa,UAAA,GAAA,SAAA,CAAA;AACb,QAAa,UAAA,GAAA,OAAA,CAAQ,OAAO,CAAC,CAAA,CAAA;AAAA,OAC/B;AAAA,KACD,CAAA,CAAA;AAED,IAAA,OAAA,CAAQ,MAAM,IAAK,CAAA,oBAAA,EAAsB,CAAC,EAAE,KAAU,KAAA;AACpD,MAAI,GAAA,CAAA,OAAO,SAAS,IAAS,KAAA;AAC3B,QAAA,MAAM,IAAK,EAAA,CAAA;AACX,QAAA,IAAI,OAAQ,CAAA,SAAA,IAAa,QAAS,CAAA,OAAA,CAAQ,SAAS,CAAG,EAAA;AACpD,UAAA,UAAA,GAAa,OAAQ,CAAA,SAAA,CAAA;AAAA,SACvB;AAAA,OACD,CAAA,CAAA;AAAA,KACF,CAAA,CAAA;AAAA,GACF,CAAA,CAAA;AACH;;;;"}
|
|
@@ -1,25 +1,27 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
3
|
const consola = require('consola');
|
|
4
|
-
const
|
|
5
|
-
const config = require('./indexer.601ceab0.cjs');
|
|
4
|
+
const config = require('./indexer.479ae593.cjs');
|
|
6
5
|
|
|
7
6
|
function logger({
|
|
8
7
|
logger: logger2
|
|
9
8
|
} = {}) {
|
|
10
9
|
return config.defineIndexerPlugin((indexer) => {
|
|
11
|
-
indexer.hooks.hook("
|
|
12
|
-
const ctx =
|
|
10
|
+
indexer.hooks.hook("plugins:init", () => {
|
|
11
|
+
const ctx = config.useIndexerContext();
|
|
13
12
|
if (logger2) {
|
|
14
13
|
ctx.logger = consola.consola.create({ reporters: [logger2] });
|
|
15
14
|
} else {
|
|
16
15
|
ctx.logger = consola.consola.create({});
|
|
17
16
|
}
|
|
17
|
+
if (ctx.debug) {
|
|
18
|
+
ctx.logger.level = consola.LogLevels.debug;
|
|
19
|
+
}
|
|
18
20
|
});
|
|
19
21
|
});
|
|
20
22
|
}
|
|
21
23
|
function useLogger() {
|
|
22
|
-
const ctx =
|
|
24
|
+
const ctx = config.useIndexerContext();
|
|
23
25
|
if (!ctx?.logger)
|
|
24
26
|
throw new Error("Logger plugin is not available in context");
|
|
25
27
|
return ctx.logger;
|
|
@@ -27,3 +29,4 @@ function useLogger() {
|
|
|
27
29
|
|
|
28
30
|
exports.logger = logger;
|
|
29
31
|
exports.useLogger = useLogger;
|
|
32
|
+
//# sourceMappingURL=indexer.03c9f151.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"indexer.03c9f151.cjs","sources":["../../src/plugins/logger.ts"],"sourcesContent":["import {\n type ConsolaInstance,\n type ConsolaReporter,\n LogLevels,\n consola,\n} from \"consola\";\nimport { useIndexerContext } from \"../context\";\nimport { defineIndexerPlugin } from \"./config\";\n\nexport type { ConsolaReporter, ConsolaInstance } from \"consola\";\n\nexport function logger<TFilter, TBlock, TTxnParams>({\n logger,\n}: { logger?: ConsolaReporter } = {}) {\n return defineIndexerPlugin<TFilter, TBlock>((indexer) => {\n indexer.hooks.hook(\"plugins:init\", () => {\n const ctx = useIndexerContext();\n\n if (logger) {\n ctx.logger = consola.create({ reporters: [logger] });\n } else {\n ctx.logger = consola.create({});\n }\n\n if (ctx.debug) {\n ctx.logger.level = LogLevels.debug;\n }\n });\n });\n}\n\nexport function useLogger(): ConsolaInstance {\n const ctx = useIndexerContext();\n\n if (!ctx?.logger)\n throw new Error(\"Logger plugin is not available in context\");\n\n return ctx.logger;\n}\n"],"names":["logger","defineIndexerPlugin","useIndexerContext","consola","LogLevels"],"mappings":";;;;;AAWO,SAAS,MAAoC,CAAA;AAAA,EAClD,MAAAA,EAAAA,OAAAA;AACF,CAAA,GAAkC,EAAI,EAAA;AACpC,EAAO,OAAAC,0BAAA,CAAqC,CAAC,OAAY,KAAA;AACvD,IAAQ,OAAA,CAAA,KAAA,CAAM,IAAK,CAAA,cAAA,EAAgB,MAAM;AACvC,MAAA,MAAM,MAAMC,wBAAkB,EAAA,CAAA;AAE9B,MAAA,IAAIF,OAAQ,EAAA;AACV,QAAI,GAAA,CAAA,MAAA,GAASG,gBAAQ,MAAO,CAAA,EAAE,WAAW,CAACH,OAAM,GAAG,CAAA,CAAA;AAAA,OAC9C,MAAA;AACL,QAAA,GAAA,CAAI,MAAS,GAAAG,eAAA,CAAQ,MAAO,CAAA,EAAE,CAAA,CAAA;AAAA,OAChC;AAEA,MAAA,IAAI,IAAI,KAAO,EAAA;AACb,QAAI,GAAA,CAAA,MAAA,CAAO,QAAQC,iBAAU,CAAA,KAAA,CAAA;AAAA,OAC/B;AAAA,KACD,CAAA,CAAA;AAAA,GACF,CAAA,CAAA;AACH,CAAA;AAEO,SAAS,SAA6B,GAAA;AAC3C,EAAA,MAAM,MAAMF,wBAAkB,EAAA,CAAA;AAE9B,EAAA,IAAI,CAAC,GAAK,EAAA,MAAA;AACR,IAAM,MAAA,IAAI,MAAM,2CAA2C,CAAA,CAAA;AAE7D,EAAA,OAAO,GAAI,CAAA,MAAA,CAAA;AACb;;;;;"}
|
|
@@ -1,18 +1,20 @@
|
|
|
1
|
-
import { consola } from 'consola';
|
|
2
|
-
import { u as useIndexerContext } from './indexer.
|
|
3
|
-
import { d as defineIndexerPlugin } from './indexer.9b21ddd2.mjs';
|
|
1
|
+
import { consola, LogLevels } from 'consola';
|
|
2
|
+
import { d as defineIndexerPlugin, u as useIndexerContext } from './indexer.75773ef1.mjs';
|
|
4
3
|
|
|
5
4
|
function logger({
|
|
6
5
|
logger: logger2
|
|
7
6
|
} = {}) {
|
|
8
7
|
return defineIndexerPlugin((indexer) => {
|
|
9
|
-
indexer.hooks.hook("
|
|
8
|
+
indexer.hooks.hook("plugins:init", () => {
|
|
10
9
|
const ctx = useIndexerContext();
|
|
11
10
|
if (logger2) {
|
|
12
11
|
ctx.logger = consola.create({ reporters: [logger2] });
|
|
13
12
|
} else {
|
|
14
13
|
ctx.logger = consola.create({});
|
|
15
14
|
}
|
|
15
|
+
if (ctx.debug) {
|
|
16
|
+
ctx.logger.level = LogLevels.debug;
|
|
17
|
+
}
|
|
16
18
|
});
|
|
17
19
|
});
|
|
18
20
|
}
|
|
@@ -24,3 +26,4 @@ function useLogger() {
|
|
|
24
26
|
}
|
|
25
27
|
|
|
26
28
|
export { logger as l, useLogger as u };
|
|
29
|
+
//# sourceMappingURL=indexer.2673dcb1.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"indexer.2673dcb1.mjs","sources":["../../src/plugins/logger.ts"],"sourcesContent":["import {\n type ConsolaInstance,\n type ConsolaReporter,\n LogLevels,\n consola,\n} from \"consola\";\nimport { useIndexerContext } from \"../context\";\nimport { defineIndexerPlugin } from \"./config\";\n\nexport type { ConsolaReporter, ConsolaInstance } from \"consola\";\n\nexport function logger<TFilter, TBlock, TTxnParams>({\n logger,\n}: { logger?: ConsolaReporter } = {}) {\n return defineIndexerPlugin<TFilter, TBlock>((indexer) => {\n indexer.hooks.hook(\"plugins:init\", () => {\n const ctx = useIndexerContext();\n\n if (logger) {\n ctx.logger = consola.create({ reporters: [logger] });\n } else {\n ctx.logger = consola.create({});\n }\n\n if (ctx.debug) {\n ctx.logger.level = LogLevels.debug;\n }\n });\n });\n}\n\nexport function useLogger(): ConsolaInstance {\n const ctx = useIndexerContext();\n\n if (!ctx?.logger)\n throw new Error(\"Logger plugin is not available in context\");\n\n return ctx.logger;\n}\n"],"names":["logger"],"mappings":";;;AAWO,SAAS,MAAoC,CAAA;AAAA,EAClD,MAAAA,EAAAA,OAAAA;AACF,CAAA,GAAkC,EAAI,EAAA;AACpC,EAAO,OAAA,mBAAA,CAAqC,CAAC,OAAY,KAAA;AACvD,IAAQ,OAAA,CAAA,KAAA,CAAM,IAAK,CAAA,cAAA,EAAgB,MAAM;AACvC,MAAA,MAAM,MAAM,iBAAkB,EAAA,CAAA;AAE9B,MAAA,IAAIA,OAAQ,EAAA;AACV,QAAI,GAAA,CAAA,MAAA,GAAS,QAAQ,MAAO,CAAA,EAAE,WAAW,CAACA,OAAM,GAAG,CAAA,CAAA;AAAA,OAC9C,MAAA;AACL,QAAA,GAAA,CAAI,MAAS,GAAA,OAAA,CAAQ,MAAO,CAAA,EAAE,CAAA,CAAA;AAAA,OAChC;AAEA,MAAA,IAAI,IAAI,KAAO,EAAA;AACb,QAAI,GAAA,CAAA,MAAA,CAAO,QAAQ,SAAU,CAAA,KAAA,CAAA;AAAA,OAC/B;AAAA,KACD,CAAA,CAAA;AAAA,GACF,CAAA,CAAA;AACH,CAAA;AAEO,SAAS,SAA6B,GAAA;AAC3C,EAAA,MAAM,MAAM,iBAAkB,EAAA,CAAA;AAE9B,EAAA,IAAI,CAAC,GAAK,EAAA,MAAA;AACR,IAAM,MAAA,IAAI,MAAM,2CAA2C,CAAA,CAAA;AAE7D,EAAA,OAAO,GAAI,CAAA,MAAA,CAAA;AACb;;;;"}
|
|
@@ -11,5 +11,11 @@ function useIndexerContext() {
|
|
|
11
11
|
return indexerAsyncContext.use();
|
|
12
12
|
}
|
|
13
13
|
|
|
14
|
+
function defineIndexerPlugin(def) {
|
|
15
|
+
return def;
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
exports.defineIndexerPlugin = defineIndexerPlugin;
|
|
14
19
|
exports.indexerAsyncContext = indexerAsyncContext;
|
|
15
20
|
exports.useIndexerContext = useIndexerContext;
|
|
21
|
+
//# sourceMappingURL=indexer.479ae593.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"indexer.479ae593.cjs","sources":["../../src/context.ts","../../src/plugins/config.ts"],"sourcesContent":["import { AsyncLocalStorage } from \"node:async_hooks\";\nimport type { Cursor, DataFinality } from \"@apibara/protocol\";\nimport { getContext } from \"unctx\";\n\n// biome-ignore lint/suspicious/noExplicitAny: context type\nexport interface IndexerContext extends Record<string, any> {}\n\nexport const indexerAsyncContext = getContext<IndexerContext>(\"indexer\", {\n asyncContext: true,\n AsyncLocalStorage,\n});\n\nexport function useIndexerContext() {\n return indexerAsyncContext.use() as IndexerContext;\n}\n\nexport interface MessageMetadataContext extends IndexerContext {\n cursor?: Cursor;\n endCursor?: Cursor;\n finality?: DataFinality;\n}\n\nexport function useMessageMetadataContext(): MessageMetadataContext {\n return useIndexerContext() as MessageMetadataContext;\n}\n","import type { Indexer } from \"../indexer\";\n\nexport type IndexerPlugin<TFilter, TBlock> = (\n indexer: Indexer<TFilter, TBlock>,\n) => void;\n\nexport function defineIndexerPlugin<TFilter, TBlock>(\n def: IndexerPlugin<TFilter, TBlock>,\n) {\n return def;\n}\n"],"names":["getContext","AsyncLocalStorage"],"mappings":";;;;;AAOa,MAAA,mBAAA,GAAsBA,iBAA2B,SAAW,EAAA;AAAA,EACvE,YAAc,EAAA,IAAA;AAAA,qBACdC,kCAAA;AACF,CAAC,EAAA;AAEM,SAAS,iBAAoB,GAAA;AAClC,EAAA,OAAO,oBAAoB,GAAI,EAAA,CAAA;AACjC;;ACRO,SAAS,oBACd,GACA,EAAA;AACA,EAAO,OAAA,GAAA,CAAA;AACT;;;;;;"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { StreamDataRequest, StreamDataOptions, Cursor, StreamDataResponse, Invalidate, Finalize,
|
|
1
|
+
import { StreamDataRequest, StreamDataOptions, Cursor, StreamDataResponse, Invalidate, Finalize, SystemMessage, DataFinality, DataProduction, CreateClientOptions, StreamConfig, Client } from '@apibara/protocol';
|
|
2
2
|
import { NestedHooks, Hookable } from 'hookable';
|
|
3
3
|
|
|
4
4
|
interface IndexerContext extends Record<string, any> {
|
|
@@ -13,36 +13,51 @@ declare function defineIndexerPlugin<TFilter, TBlock>(def: IndexerPlugin<TFilter
|
|
|
13
13
|
|
|
14
14
|
type UseMiddlewareFunction = (fn: MiddlewareFunction<IndexerContext>) => void;
|
|
15
15
|
interface IndexerHooks<TFilter, TBlock> {
|
|
16
|
-
"
|
|
17
|
-
|
|
16
|
+
"plugins:init": ({ abortSignal }: {
|
|
17
|
+
abortSignal?: AbortSignal;
|
|
18
|
+
}) => void;
|
|
19
|
+
"run:before": ({ abortSignal }: {
|
|
20
|
+
abortSignal?: AbortSignal;
|
|
21
|
+
}) => void;
|
|
22
|
+
"run:after": ({ abortSignal }: {
|
|
23
|
+
abortSignal?: AbortSignal;
|
|
24
|
+
}) => void;
|
|
18
25
|
"connect:before": ({ request, options, }: {
|
|
19
26
|
request: StreamDataRequest<TFilter>;
|
|
20
27
|
options: StreamDataOptions;
|
|
28
|
+
abortSignal?: AbortSignal;
|
|
21
29
|
}) => void;
|
|
22
30
|
"connect:after": ({ request, }: {
|
|
23
31
|
request: StreamDataRequest<TFilter>;
|
|
32
|
+
abortSignal?: AbortSignal;
|
|
24
33
|
}) => void;
|
|
25
|
-
"connect:factory": ({ request, endCursor, }: {
|
|
34
|
+
"connect:factory": ({ request, endCursor, abortSignal, }: {
|
|
26
35
|
request: StreamDataRequest<TFilter>;
|
|
27
36
|
endCursor?: Cursor;
|
|
37
|
+
abortSignal?: AbortSignal;
|
|
28
38
|
}) => void;
|
|
29
|
-
"handler:middleware": ({ use }: {
|
|
39
|
+
"handler:middleware": ({ use, abortSignal, }: {
|
|
30
40
|
use: UseMiddlewareFunction;
|
|
41
|
+
abortSignal?: AbortSignal;
|
|
31
42
|
}) => void;
|
|
32
|
-
message: ({ message }: {
|
|
43
|
+
message: ({ message, abortSignal, }: {
|
|
33
44
|
message: StreamDataResponse<TBlock>;
|
|
45
|
+
abortSignal?: AbortSignal;
|
|
34
46
|
}) => void;
|
|
35
|
-
"message:invalidate": ({ message }: {
|
|
47
|
+
"message:invalidate": ({ message, abortSignal, }: {
|
|
36
48
|
message: Invalidate;
|
|
49
|
+
abortSignal?: AbortSignal;
|
|
37
50
|
}) => void;
|
|
38
|
-
"message:finalize": ({ message }: {
|
|
51
|
+
"message:finalize": ({ message, abortSignal, }: {
|
|
39
52
|
message: Finalize;
|
|
53
|
+
abortSignal?: AbortSignal;
|
|
40
54
|
}) => void;
|
|
41
|
-
"message:heartbeat": ({
|
|
42
|
-
|
|
55
|
+
"message:heartbeat": ({ abortSignal }: {
|
|
56
|
+
abortSignal?: AbortSignal;
|
|
43
57
|
}) => void;
|
|
44
|
-
"message:systemMessage": ({ message }: {
|
|
58
|
+
"message:systemMessage": ({ message, abortSignal, }: {
|
|
45
59
|
message: SystemMessage;
|
|
60
|
+
abortSignal?: AbortSignal;
|
|
46
61
|
}) => void;
|
|
47
62
|
}
|
|
48
63
|
type IndexerStartingCursor = {
|
|
@@ -55,23 +70,24 @@ type IndexerStartingCursor = {
|
|
|
55
70
|
startingCursor?: never;
|
|
56
71
|
startingBlock?: never;
|
|
57
72
|
};
|
|
73
|
+
type HandlerArgs<TBlock> = {
|
|
74
|
+
block: TBlock;
|
|
75
|
+
cursor?: Cursor | undefined;
|
|
76
|
+
endCursor?: Cursor | undefined;
|
|
77
|
+
finality: DataFinality;
|
|
78
|
+
production: DataProduction;
|
|
79
|
+
context: IndexerContext;
|
|
80
|
+
abortSignal?: AbortSignal;
|
|
81
|
+
};
|
|
58
82
|
type IndexerConfig<TFilter, TBlock> = {
|
|
59
83
|
streamUrl: string;
|
|
60
84
|
filter: TFilter;
|
|
61
85
|
finality?: DataFinality;
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
context: IndexerContext;
|
|
65
|
-
}) => Promise<{
|
|
86
|
+
clientOptions?: CreateClientOptions;
|
|
87
|
+
factory?: (args: HandlerArgs<TBlock>) => Promise<{
|
|
66
88
|
filter?: TFilter;
|
|
67
89
|
}>;
|
|
68
|
-
transform: (args:
|
|
69
|
-
block: TBlock;
|
|
70
|
-
cursor?: Cursor | undefined;
|
|
71
|
-
endCursor?: Cursor | undefined;
|
|
72
|
-
finality: DataFinality;
|
|
73
|
-
context: IndexerContext;
|
|
74
|
-
}) => Promise<void>;
|
|
90
|
+
transform: (args: HandlerArgs<TBlock>) => Promise<void>;
|
|
75
91
|
hooks?: NestedHooks<IndexerHooks<TFilter, TBlock>>;
|
|
76
92
|
plugins?: ReadonlyArray<IndexerPlugin<TFilter, TBlock>>;
|
|
77
93
|
debug?: boolean;
|
|
@@ -94,7 +110,8 @@ interface ReconnectOptions {
|
|
|
94
110
|
declare function runWithReconnect<TFilter, TBlock>(client: Client<TFilter, TBlock>, indexer: Indexer<TFilter, TBlock>, options?: ReconnectOptions): Promise<void>;
|
|
95
111
|
interface RunOptions {
|
|
96
112
|
onConnect?: () => void | Promise<void>;
|
|
113
|
+
abortSignal?: AbortSignal;
|
|
97
114
|
}
|
|
98
115
|
declare function run<TFilter, TBlock>(client: Client<TFilter, TBlock>, indexer: Indexer<TFilter, TBlock>, runOptions?: RunOptions): Promise<void>;
|
|
99
116
|
|
|
100
|
-
export { type
|
|
117
|
+
export { type HandlerArgs as H, type IndexerHooks as I, type ReconnectOptions as R, type UseMiddlewareFunction as U, type IndexerStartingCursor as a, type IndexerConfig as b, type IndexerWithStreamConfig as c, defineIndexer as d, type Indexer as e, createIndexer as f, type RunOptions as g, run as h, type IndexerPlugin as i, defineIndexerPlugin as j, runWithReconnect as r, useIndexerContext as u };
|