@subql/node-stellar 3.9.1 → 3.9.2-1
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/CHANGELOG.md +9 -0
- package/dist/.tsbuildinfo +1 -1
- package/dist/app.module.js +1 -1
- package/dist/app.module.js.map +1 -1
- package/dist/configure/SubqueryProject.js +1 -1
- package/dist/configure/SubqueryProject.js.map +1 -1
- package/dist/configure/configure.module.js +1 -1
- package/dist/configure/configure.module.js.map +1 -1
- package/dist/indexer/blockDispatcher/block-dispatcher.service.d.ts +2 -2
- package/dist/indexer/blockDispatcher/block-dispatcher.service.js +2 -2
- package/dist/indexer/blockDispatcher/block-dispatcher.service.js.map +1 -1
- package/dist/indexer/blockDispatcher/index.js +1 -1
- package/dist/indexer/blockDispatcher/index.js.map +1 -1
- package/dist/indexer/blockDispatcher/stellar-block-dispatcher.d.ts +2 -1
- package/dist/indexer/blockDispatcher/stellar-block-dispatcher.js +1 -1
- package/dist/indexer/blockDispatcher/stellar-block-dispatcher.js.map +1 -1
- package/dist/indexer/blockDispatcher/worker-block-dispatcher.service.d.ts +2 -1
- package/dist/indexer/blockDispatcher/worker-block-dispatcher.service.js +1 -1
- package/dist/indexer/blockDispatcher/worker-block-dispatcher.service.js.map +1 -1
- package/dist/indexer/dictionary/index.d.ts +1 -0
- package/dist/indexer/dictionary/index.js +20 -0
- package/dist/indexer/dictionary/index.js.map +1 -0
- package/dist/indexer/dictionary/stellarDictionary.service.d.ts +13 -0
- package/dist/indexer/dictionary/stellarDictionary.service.js +69 -0
- package/dist/indexer/dictionary/stellarDictionary.service.js.map +1 -0
- package/dist/indexer/dictionary/v1/index.d.ts +1 -0
- package/dist/indexer/dictionary/v1/index.js +20 -0
- package/dist/indexer/dictionary/v1/index.js.map +1 -0
- package/dist/indexer/dictionary/v1/stellarDictionaryV1.d.ts +16 -0
- package/dist/indexer/dictionary/v1/stellarDictionaryV1.js +210 -0
- package/dist/indexer/dictionary/v1/stellarDictionaryV1.js.map +1 -0
- package/dist/indexer/{fetch.service.spec.js → dictionary/v1/stellarDictionaryV1.spec.js} +52 -7
- package/dist/indexer/dictionary/v1/stellarDictionaryV1.spec.js.map +1 -0
- package/dist/indexer/ds-processor.service.js +1 -1
- package/dist/indexer/ds-processor.service.js.map +1 -1
- package/dist/indexer/dynamic-ds.service.js +4 -3
- package/dist/indexer/dynamic-ds.service.js.map +1 -1
- package/dist/indexer/fetch.module.js +4 -11
- package/dist/indexer/fetch.module.js.map +1 -1
- package/dist/indexer/fetch.service.d.ts +4 -14
- package/dist/indexer/fetch.service.js +6 -193
- package/dist/indexer/fetch.service.js.map +1 -1
- package/dist/indexer/indexer.manager.d.ts +2 -2
- package/dist/indexer/indexer.manager.js +2 -2
- package/dist/indexer/indexer.manager.js.map +1 -1
- package/dist/indexer/project.service.js +1 -1
- package/dist/indexer/project.service.js.map +1 -1
- package/dist/indexer/sandbox.service.js +1 -1
- package/dist/indexer/sandbox.service.js.map +1 -1
- package/dist/indexer/types.js +1 -1
- package/dist/indexer/types.js.map +1 -1
- package/dist/indexer/unfinalizedBlocks.service.d.ts +0 -2
- package/dist/indexer/unfinalizedBlocks.service.js +5 -21
- package/dist/indexer/unfinalizedBlocks.service.js.map +1 -1
- package/dist/indexer/worker/worker-fetch.module.js +1 -1
- package/dist/indexer/worker/worker-fetch.module.js.map +1 -1
- package/dist/indexer/worker/worker.js +1 -1
- package/dist/indexer/worker/worker.js.map +1 -1
- package/dist/indexer/worker/worker.module.js +1 -1
- package/dist/indexer/worker/worker.module.js.map +1 -1
- package/dist/indexer/worker/worker.service.d.ts +3 -3
- package/dist/indexer/worker/worker.service.js +1 -1
- package/dist/indexer/worker/worker.service.js.map +1 -1
- package/dist/indexer/worker/worker.unfinalizedBlocks.service.d.ts +2 -2
- package/dist/indexer/worker/worker.unfinalizedBlocks.service.js +3 -3
- package/dist/indexer/worker/worker.unfinalizedBlocks.service.js.map +1 -1
- package/dist/init.js +1 -1
- package/dist/init.js.map +1 -1
- package/dist/main.js +1 -1
- package/dist/main.js.map +1 -1
- package/dist/meta/meta.controller.js +1 -1
- package/dist/meta/meta.controller.js.map +1 -1
- package/dist/meta/meta.module.js +1 -1
- package/dist/meta/meta.module.js.map +1 -1
- package/dist/meta/meta.service.js +1 -1
- package/dist/meta/meta.service.js.map +1 -1
- package/dist/stellar/api.connection.d.ts +4 -4
- package/dist/stellar/api.connection.js +1 -1
- package/dist/stellar/api.connection.js.map +1 -1
- package/dist/stellar/api.connection.spec.js +1 -1
- package/dist/stellar/api.connection.spec.js.map +1 -1
- package/dist/stellar/api.service.stellar.d.ts +2 -2
- package/dist/stellar/api.service.stellar.js +1 -2
- package/dist/stellar/api.service.stellar.js.map +1 -1
- package/dist/stellar/api.service.stellar.spec.js +3 -4
- package/dist/stellar/api.service.stellar.spec.js.map +1 -1
- package/dist/stellar/api.stellar.d.ts +3 -2
- package/dist/stellar/api.stellar.js +3 -2
- package/dist/stellar/api.stellar.js.map +1 -1
- package/dist/stellar/api.stellar.spec.js +3 -3
- package/dist/stellar/api.stellar.spec.js.map +1 -1
- package/dist/stellar/block.stellar.js +1 -1
- package/dist/stellar/block.stellar.js.map +1 -1
- package/dist/stellar/block.stellar.spec.js +1 -1
- package/dist/stellar/block.stellar.spec.js.map +1 -1
- package/dist/stellar/index.js +1 -1
- package/dist/stellar/index.js.map +1 -1
- package/dist/stellar/safe-api.js +1 -1
- package/dist/stellar/safe-api.js.map +1 -1
- package/dist/stellar/soroban.server.js +1 -1
- package/dist/stellar/soroban.server.js.map +1 -1
- package/dist/stellar/soroban.server.spec.js +1 -1
- package/dist/stellar/soroban.server.spec.js.map +1 -1
- package/dist/stellar/stellar.server.js +1 -1
- package/dist/stellar/stellar.server.js.map +1 -1
- package/dist/stellar/utils.stellar.d.ts +4 -1
- package/dist/stellar/utils.stellar.js +17 -2
- package/dist/stellar/utils.stellar.js.map +1 -1
- package/dist/subcommands/forceClean.init.js +1 -1
- package/dist/subcommands/forceClean.init.js.map +1 -1
- package/dist/subcommands/forceClean.module.js +1 -1
- package/dist/subcommands/forceClean.module.js.map +1 -1
- package/dist/subcommands/reindex.init.js +1 -1
- package/dist/subcommands/reindex.init.js.map +1 -1
- package/dist/subcommands/reindex.module.js +1 -1
- package/dist/subcommands/reindex.module.js.map +1 -1
- package/dist/subcommands/testing.init.js +1 -1
- package/dist/subcommands/testing.init.js.map +1 -1
- package/dist/subcommands/testing.module.js +1 -1
- package/dist/subcommands/testing.module.js.map +1 -1
- package/dist/subcommands/testing.service.js +1 -1
- package/dist/subcommands/testing.service.js.map +1 -1
- package/dist/utils/project.js +1 -1
- package/dist/utils/project.js.map +1 -1
- package/dist/utils/string.js +1 -1
- package/dist/utils/string.js.map +1 -1
- package/dist/yargs.js +1 -1
- package/dist/yargs.js.map +1 -1
- package/package.json +7 -6
- package/dist/indexer/dictionary.service.d.ts +0 -8
- package/dist/indexer/dictionary.service.js +0 -46
- package/dist/indexer/dictionary.service.js.map +0 -1
- package/dist/indexer/fetch.service.spec.js.map +0 -1
- /package/dist/indexer/{fetch.service.spec.d.ts → dictionary/v1/stellarDictionaryV1.spec.d.ts} +0 -0
|
@@ -0,0 +1,210 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
// Copyright 2020-2024 SubQuery Pte Ltd authors & contributors
|
|
3
|
+
// SPDX-License-Identifier: GPL-3.0
|
|
4
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
5
|
+
exports.StellarDictionaryV1 = exports.buildDictionaryQueryEntries = void 0;
|
|
6
|
+
const common_stellar_1 = require("@subql/common-stellar");
|
|
7
|
+
const node_core_1 = require("@subql/node-core");
|
|
8
|
+
const lodash_1 = require("lodash");
|
|
9
|
+
const yargs_1 = require("../../../yargs");
|
|
10
|
+
const logger = (0, node_core_1.getLogger)('dictionary v1');
|
|
11
|
+
function transactionFilterToQueryEntry(filter, dsOptions) {
|
|
12
|
+
const conditions = [];
|
|
13
|
+
if (filter.account) {
|
|
14
|
+
conditions.push({
|
|
15
|
+
field: 'account',
|
|
16
|
+
value: filter.account.toLowerCase(),
|
|
17
|
+
matcher: 'equalTo',
|
|
18
|
+
});
|
|
19
|
+
}
|
|
20
|
+
return {
|
|
21
|
+
entity: 'transactions',
|
|
22
|
+
conditions,
|
|
23
|
+
};
|
|
24
|
+
}
|
|
25
|
+
function operationFilterToQueryEntry(filter, dsOptions) {
|
|
26
|
+
const conditions = [];
|
|
27
|
+
if (filter.type) {
|
|
28
|
+
conditions.push({
|
|
29
|
+
field: 'type',
|
|
30
|
+
value: filter.type.toLowerCase(),
|
|
31
|
+
matcher: 'equalTo',
|
|
32
|
+
});
|
|
33
|
+
}
|
|
34
|
+
if (filter.sourceAccount) {
|
|
35
|
+
conditions.push({
|
|
36
|
+
field: 'sourceAccount',
|
|
37
|
+
value: filter.sourceAccount.toLowerCase(),
|
|
38
|
+
matcher: 'equalTo',
|
|
39
|
+
});
|
|
40
|
+
}
|
|
41
|
+
return {
|
|
42
|
+
entity: 'operations',
|
|
43
|
+
conditions,
|
|
44
|
+
};
|
|
45
|
+
}
|
|
46
|
+
function effectFilterToQueryEntry(filter, dsOptions) {
|
|
47
|
+
const conditions = [];
|
|
48
|
+
if (filter.type) {
|
|
49
|
+
conditions.push({
|
|
50
|
+
field: 'type',
|
|
51
|
+
value: filter.type.toLowerCase(),
|
|
52
|
+
matcher: 'equalTo',
|
|
53
|
+
});
|
|
54
|
+
}
|
|
55
|
+
if (filter.account) {
|
|
56
|
+
conditions.push({
|
|
57
|
+
field: 'account',
|
|
58
|
+
value: filter.account.toLowerCase(),
|
|
59
|
+
matcher: 'equalTo',
|
|
60
|
+
});
|
|
61
|
+
}
|
|
62
|
+
return {
|
|
63
|
+
entity: 'effects',
|
|
64
|
+
conditions,
|
|
65
|
+
};
|
|
66
|
+
}
|
|
67
|
+
function eventFilterToQueryEntry(filter, dsOptions) {
|
|
68
|
+
const queryAddressLimit = yargs_1.yargsOptions.argv['query-address-limit'];
|
|
69
|
+
const conditions = [];
|
|
70
|
+
if (Array.isArray(dsOptions)) {
|
|
71
|
+
const addresses = dsOptions.map((option) => option.address).filter(Boolean);
|
|
72
|
+
if (addresses.length > queryAddressLimit) {
|
|
73
|
+
logger.warn(`Addresses length: ${addresses.length} is exceeding limit: ${queryAddressLimit}. Consider increasing this value with the flag --query-address-limit `);
|
|
74
|
+
}
|
|
75
|
+
if (addresses.length !== 0 && addresses.length <= queryAddressLimit) {
|
|
76
|
+
conditions.push({
|
|
77
|
+
field: 'address',
|
|
78
|
+
value: addresses,
|
|
79
|
+
matcher: 'in',
|
|
80
|
+
});
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
else {
|
|
84
|
+
if (dsOptions === null || dsOptions === void 0 ? void 0 : dsOptions.address) {
|
|
85
|
+
conditions.push({
|
|
86
|
+
field: 'address',
|
|
87
|
+
value: dsOptions.address.toLowerCase(),
|
|
88
|
+
matcher: 'equalTo',
|
|
89
|
+
});
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
if (filter.topics) {
|
|
93
|
+
for (let i = 0; i < Math.min(filter.topics.length, 4); i++) {
|
|
94
|
+
const topic = filter.topics[i];
|
|
95
|
+
if (!topic) {
|
|
96
|
+
continue;
|
|
97
|
+
}
|
|
98
|
+
const field = `topics${i}`;
|
|
99
|
+
conditions.push({
|
|
100
|
+
field,
|
|
101
|
+
value: topic,
|
|
102
|
+
matcher: 'equalTo',
|
|
103
|
+
});
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
return {
|
|
107
|
+
entity: 'events',
|
|
108
|
+
conditions,
|
|
109
|
+
};
|
|
110
|
+
}
|
|
111
|
+
function buildDictionaryV1QueryEntries(dataSources) {
|
|
112
|
+
const [normalDataSources, templateDataSources] = (0, lodash_1.partition)(dataSources, (ds) => !ds.name);
|
|
113
|
+
// Group templ
|
|
114
|
+
const groupedDataSources = Object.values((0, lodash_1.groupBy)(templateDataSources, (ds) => ds.name)).map((grouped) => {
|
|
115
|
+
if (grouped.length === 1) {
|
|
116
|
+
return grouped[0];
|
|
117
|
+
}
|
|
118
|
+
const options = grouped.map((ds) => ds.options);
|
|
119
|
+
const ref = grouped[0];
|
|
120
|
+
return Object.assign(Object.assign({}, ref), { groupedOptions: options });
|
|
121
|
+
});
|
|
122
|
+
const filteredDs = [...normalDataSources, ...groupedDataSources];
|
|
123
|
+
return buildDictionaryQueryEntries(filteredDs);
|
|
124
|
+
}
|
|
125
|
+
function buildDictionaryQueryEntries(dataSources) {
|
|
126
|
+
var _a;
|
|
127
|
+
const queryEntries = [];
|
|
128
|
+
for (const ds of dataSources) {
|
|
129
|
+
for (const handler of ds.mapping.handlers) {
|
|
130
|
+
// No filters, cant use dictionary
|
|
131
|
+
if (!handler.filter)
|
|
132
|
+
return [];
|
|
133
|
+
switch (handler.kind) {
|
|
134
|
+
case common_stellar_1.StellarHandlerKind.Block:
|
|
135
|
+
return [];
|
|
136
|
+
case common_stellar_1.StellarHandlerKind.Transaction: {
|
|
137
|
+
const filter = handler.filter;
|
|
138
|
+
if (ds.groupedOptions) {
|
|
139
|
+
queryEntries.push(transactionFilterToQueryEntry(filter, ds.groupedOptions));
|
|
140
|
+
}
|
|
141
|
+
else if (filter.account) {
|
|
142
|
+
queryEntries.push(transactionFilterToQueryEntry(filter, ds.options));
|
|
143
|
+
}
|
|
144
|
+
else {
|
|
145
|
+
return [];
|
|
146
|
+
}
|
|
147
|
+
break;
|
|
148
|
+
}
|
|
149
|
+
case common_stellar_1.StellarHandlerKind.Operation: {
|
|
150
|
+
const filter = handler.filter;
|
|
151
|
+
if (ds.groupedOptions) {
|
|
152
|
+
queryEntries.push(operationFilterToQueryEntry(filter, ds.groupedOptions));
|
|
153
|
+
}
|
|
154
|
+
else if (filter.sourceAccount || filter.type) {
|
|
155
|
+
queryEntries.push(operationFilterToQueryEntry(filter, ds.options));
|
|
156
|
+
}
|
|
157
|
+
else {
|
|
158
|
+
return [];
|
|
159
|
+
}
|
|
160
|
+
break;
|
|
161
|
+
}
|
|
162
|
+
case common_stellar_1.StellarHandlerKind.Effects: {
|
|
163
|
+
const filter = handler.filter;
|
|
164
|
+
if (ds.groupedOptions) {
|
|
165
|
+
queryEntries.push(effectFilterToQueryEntry(filter, ds.groupedOptions));
|
|
166
|
+
}
|
|
167
|
+
else if (filter.account || filter.type) {
|
|
168
|
+
queryEntries.push(effectFilterToQueryEntry(filter, ds.options));
|
|
169
|
+
}
|
|
170
|
+
else {
|
|
171
|
+
return [];
|
|
172
|
+
}
|
|
173
|
+
break;
|
|
174
|
+
}
|
|
175
|
+
case common_stellar_1.StellarHandlerKind.Event: {
|
|
176
|
+
const filter = handler.filter;
|
|
177
|
+
if (ds.groupedOptions) {
|
|
178
|
+
queryEntries.push(eventFilterToQueryEntry(filter, ds.groupedOptions));
|
|
179
|
+
}
|
|
180
|
+
else if (((_a = ds.options) === null || _a === void 0 ? void 0 : _a.address) || filter.topics) {
|
|
181
|
+
queryEntries.push(eventFilterToQueryEntry(filter, ds.options));
|
|
182
|
+
}
|
|
183
|
+
else {
|
|
184
|
+
return [];
|
|
185
|
+
}
|
|
186
|
+
break;
|
|
187
|
+
}
|
|
188
|
+
default:
|
|
189
|
+
}
|
|
190
|
+
}
|
|
191
|
+
}
|
|
192
|
+
return (0, lodash_1.uniqBy)(queryEntries, (item) => `${item.entity}|${JSON.stringify((0, lodash_1.sortBy)(item.conditions, (c) => c.field))}`);
|
|
193
|
+
}
|
|
194
|
+
exports.buildDictionaryQueryEntries = buildDictionaryQueryEntries;
|
|
195
|
+
class StellarDictionaryV1 extends node_core_1.DictionaryV1 {
|
|
196
|
+
constructor(project, nodeConfig, getDsProcessor, dictionaryUrl, chainId) {
|
|
197
|
+
super(dictionaryUrl, chainId !== null && chainId !== void 0 ? chainId : project.network.chainId, nodeConfig);
|
|
198
|
+
this.getDsProcessor = getDsProcessor;
|
|
199
|
+
}
|
|
200
|
+
static async create(project, nodeConfig, getDsProcessor, dictionaryUrl, chainId) {
|
|
201
|
+
const dictionary = new StellarDictionaryV1(project, nodeConfig, getDsProcessor, dictionaryUrl, chainId);
|
|
202
|
+
await dictionary.init();
|
|
203
|
+
return dictionary;
|
|
204
|
+
}
|
|
205
|
+
buildDictionaryQueryEntries(dataSources) {
|
|
206
|
+
return buildDictionaryV1QueryEntries(dataSources);
|
|
207
|
+
}
|
|
208
|
+
}
|
|
209
|
+
exports.StellarDictionaryV1 = StellarDictionaryV1;
|
|
210
|
+
//# sourceMappingURL=stellarDictionaryV1.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stellarDictionaryV1.js","sourceRoot":"","sources":["../../../../src/indexer/dictionary/v1/stellarDictionaryV1.ts"],"names":[],"mappings":"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","sourcesContent":["// Copyright 2020-2024 SubQuery Pte Ltd authors & contributors\n// SPDX-License-Identifier: GPL-3.0\n\nimport {\n StellarHandlerKind,\n SubqlStellarDataSource,\n StellarTransactionFilter,\n StellarOperationFilter,\n StellarEffectFilter,\n SubqlStellarProcessorOptions,\n} from '@subql/common-stellar';\nimport { NodeConfig, DictionaryV1, getLogger } from '@subql/node-core';\nimport {\n DictionaryQueryCondition,\n DictionaryQueryEntry,\n DictionaryQueryEntry as DictionaryV1QueryEntry,\n DsProcessor,\n} from '@subql/types-core';\n\nimport { SorobanEventFilter, SubqlDatasource } from '@subql/types-stellar';\nimport { groupBy, partition, sortBy, uniqBy } from 'lodash';\nimport { SubqueryProject } from '../../../configure/SubqueryProject';\nimport { yargsOptions } from '../../../yargs';\n\nconst logger = getLogger('dictionary v1');\nfunction transactionFilterToQueryEntry(\n filter: StellarTransactionFilter,\n dsOptions: SubqlStellarProcessorOptions | SubqlStellarProcessorOptions[],\n): DictionaryQueryEntry {\n const conditions: DictionaryQueryCondition[] = [];\n\n if (filter.account) {\n conditions.push({\n field: 'account',\n value: filter.account.toLowerCase(),\n matcher: 'equalTo',\n });\n }\n return {\n entity: 'transactions',\n conditions,\n };\n}\n\nfunction operationFilterToQueryEntry(\n filter: StellarOperationFilter,\n dsOptions: SubqlStellarProcessorOptions | SubqlStellarProcessorOptions[],\n): DictionaryQueryEntry {\n const conditions: DictionaryQueryCondition[] = [];\n\n if (filter.type) {\n conditions.push({\n field: 'type',\n value: filter.type.toLowerCase(),\n matcher: 'equalTo',\n });\n }\n if (filter.sourceAccount) {\n conditions.push({\n field: 'sourceAccount',\n value: filter.sourceAccount.toLowerCase(),\n matcher: 'equalTo',\n });\n }\n return {\n entity: 'operations',\n conditions,\n };\n}\n\nfunction effectFilterToQueryEntry(\n filter: StellarEffectFilter,\n dsOptions: SubqlStellarProcessorOptions | SubqlStellarProcessorOptions[],\n): DictionaryQueryEntry {\n const conditions: DictionaryQueryCondition[] = [];\n\n if (filter.type) {\n conditions.push({\n field: 'type',\n value: filter.type.toLowerCase(),\n matcher: 'equalTo',\n });\n }\n if (filter.account) {\n conditions.push({\n field: 'account',\n value: filter.account.toLowerCase(),\n matcher: 'equalTo',\n });\n }\n return {\n entity: 'effects',\n conditions,\n };\n}\n\nfunction eventFilterToQueryEntry(\n filter: SorobanEventFilter,\n dsOptions: SubqlStellarProcessorOptions | SubqlStellarProcessorOptions[],\n): DictionaryQueryEntry {\n const queryAddressLimit = yargsOptions.argv['query-address-limit'];\n\n const conditions: DictionaryQueryCondition[] = [];\n\n if (Array.isArray(dsOptions)) {\n const addresses = dsOptions.map((option) => option.address).filter(Boolean);\n\n if (addresses.length > queryAddressLimit) {\n logger.warn(\n `Addresses length: ${addresses.length} is exceeding limit: ${queryAddressLimit}. Consider increasing this value with the flag --query-address-limit `,\n );\n }\n\n if (addresses.length !== 0 && addresses.length <= queryAddressLimit) {\n conditions.push({\n field: 'address',\n value: addresses,\n matcher: 'in',\n });\n }\n } else {\n if (dsOptions?.address) {\n conditions.push({\n field: 'address',\n value: dsOptions.address.toLowerCase(),\n matcher: 'equalTo',\n });\n }\n }\n if (filter.topics) {\n for (let i = 0; i < Math.min(filter.topics.length, 4); i++) {\n const topic = filter.topics[i];\n if (!topic) {\n continue;\n }\n const field = `topics${i}`;\n conditions.push({\n field,\n value: topic,\n matcher: 'equalTo',\n });\n }\n }\n return {\n entity: 'events',\n conditions,\n };\n}\n\ntype GroupedSubqlProjectDs = SubqlDatasource & {\n groupedOptions?: SubqlStellarProcessorOptions[];\n};\n\nfunction buildDictionaryV1QueryEntries(\n dataSources: (SubqlDatasource & { name?: string })[],\n): DictionaryV1QueryEntry[] {\n const [normalDataSources, templateDataSources] = partition(\n dataSources,\n (ds) => !ds.name,\n );\n\n // Group templ\n const groupedDataSources = Object.values(\n groupBy(templateDataSources, (ds) => ds.name),\n ).map((grouped) => {\n if (grouped.length === 1) {\n return grouped[0];\n }\n const options = grouped.map((ds) => ds.options);\n const ref = grouped[0];\n\n return {\n ...ref,\n groupedOptions: options,\n };\n });\n\n const filteredDs = [...normalDataSources, ...groupedDataSources];\n\n return buildDictionaryQueryEntries(filteredDs);\n}\n\nexport function buildDictionaryQueryEntries(\n dataSources: GroupedSubqlProjectDs[],\n): DictionaryV1QueryEntry[] {\n const queryEntries: DictionaryQueryEntry[] = [];\n\n for (const ds of dataSources) {\n for (const handler of ds.mapping.handlers) {\n // No filters, cant use dictionary\n if (!handler.filter) return [];\n\n switch (handler.kind) {\n case StellarHandlerKind.Block:\n return [];\n case StellarHandlerKind.Transaction: {\n const filter = handler.filter as StellarTransactionFilter;\n if (ds.groupedOptions) {\n queryEntries.push(\n transactionFilterToQueryEntry(filter, ds.groupedOptions),\n );\n } else if (filter.account) {\n queryEntries.push(\n transactionFilterToQueryEntry(filter, ds.options),\n );\n } else {\n return [];\n }\n break;\n }\n case StellarHandlerKind.Operation: {\n const filter = handler.filter as StellarOperationFilter;\n if (ds.groupedOptions) {\n queryEntries.push(\n operationFilterToQueryEntry(filter, ds.groupedOptions),\n );\n } else if (filter.sourceAccount || filter.type) {\n queryEntries.push(operationFilterToQueryEntry(filter, ds.options));\n } else {\n return [];\n }\n break;\n }\n case StellarHandlerKind.Effects: {\n const filter = handler.filter as StellarEffectFilter;\n if (ds.groupedOptions) {\n queryEntries.push(\n effectFilterToQueryEntry(filter, ds.groupedOptions),\n );\n } else if (filter.account || filter.type) {\n queryEntries.push(effectFilterToQueryEntry(filter, ds.options));\n } else {\n return [];\n }\n break;\n }\n case StellarHandlerKind.Event: {\n const filter = handler.filter as SorobanEventFilter;\n if (ds.groupedOptions) {\n queryEntries.push(\n eventFilterToQueryEntry(filter, ds.groupedOptions),\n );\n } else if (ds.options?.address || filter.topics) {\n queryEntries.push(eventFilterToQueryEntry(filter, ds.options));\n } else {\n return [];\n }\n break;\n }\n default:\n }\n }\n }\n\n return uniqBy(\n queryEntries,\n (item) =>\n `${item.entity}|${JSON.stringify(\n sortBy(item.conditions, (c) => c.field),\n )}`,\n );\n}\n\nexport class StellarDictionaryV1 extends DictionaryV1<SubqlStellarDataSource> {\n constructor(\n project: SubqueryProject,\n nodeConfig: NodeConfig,\n protected getDsProcessor: (\n ds: SubqlStellarDataSource,\n ) => DsProcessor<SubqlStellarDataSource>,\n dictionaryUrl?: string,\n chainId?: string,\n ) {\n super(dictionaryUrl, chainId ?? project.network.chainId, nodeConfig);\n }\n\n static async create(\n project: SubqueryProject,\n nodeConfig: NodeConfig,\n getDsProcessor: (\n ds: SubqlStellarDataSource,\n ) => DsProcessor<SubqlStellarDataSource>,\n dictionaryUrl?: string,\n chainId?: string,\n ): Promise<StellarDictionaryV1> {\n const dictionary = new StellarDictionaryV1(\n project,\n nodeConfig,\n getDsProcessor,\n dictionaryUrl,\n chainId,\n );\n await dictionary.init();\n return dictionary;\n }\n\n buildDictionaryQueryEntries(\n dataSources: SubqlStellarDataSource[],\n ): DictionaryV1QueryEntry[] {\n return buildDictionaryV1QueryEntries(dataSources);\n }\n}\n"]}
|
|
@@ -1,9 +1,21 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
// Copyright 2020-
|
|
2
|
+
// Copyright 2020-2024 SubQuery Pte Ltd authors & contributors
|
|
3
3
|
// SPDX-License-Identifier: GPL-3.0
|
|
4
4
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
5
|
+
const event_emitter_1 = require("@nestjs/event-emitter");
|
|
6
|
+
const common_1 = require("@subql/common");
|
|
7
|
+
const node_core_1 = require("@subql/node-core");
|
|
5
8
|
const types_stellar_1 = require("@subql/types-stellar");
|
|
6
|
-
const
|
|
9
|
+
const stellarDictionaryV1_1 = require("./stellarDictionaryV1");
|
|
10
|
+
const nodeConfig = {
|
|
11
|
+
dictionaryTimeout: 10000,
|
|
12
|
+
dictionaryRegistry: 'https://github.com/subquery/templates/raw/main/dist/dictionary.json',
|
|
13
|
+
};
|
|
14
|
+
const project = {
|
|
15
|
+
network: {
|
|
16
|
+
chainId: 'mainnet',
|
|
17
|
+
},
|
|
18
|
+
};
|
|
7
19
|
describe('buildDictionaryQueryEntries', () => {
|
|
8
20
|
it('should correctly build dictionary query entries for transactions', () => {
|
|
9
21
|
const ds = {
|
|
@@ -22,7 +34,7 @@ describe('buildDictionaryQueryEntries', () => {
|
|
|
22
34
|
],
|
|
23
35
|
},
|
|
24
36
|
};
|
|
25
|
-
const result = (0,
|
|
37
|
+
const result = (0, stellarDictionaryV1_1.buildDictionaryQueryEntries)([ds]);
|
|
26
38
|
expect(result).toEqual([
|
|
27
39
|
{
|
|
28
40
|
entity: 'transactions',
|
|
@@ -54,7 +66,7 @@ describe('buildDictionaryQueryEntries', () => {
|
|
|
54
66
|
],
|
|
55
67
|
},
|
|
56
68
|
};
|
|
57
|
-
const result = (0,
|
|
69
|
+
const result = (0, stellarDictionaryV1_1.buildDictionaryQueryEntries)([ds]);
|
|
58
70
|
expect(result).toEqual([
|
|
59
71
|
{
|
|
60
72
|
entity: 'operations',
|
|
@@ -91,7 +103,7 @@ describe('buildDictionaryQueryEntries', () => {
|
|
|
91
103
|
],
|
|
92
104
|
},
|
|
93
105
|
};
|
|
94
|
-
const result = (0,
|
|
106
|
+
const result = (0, stellarDictionaryV1_1.buildDictionaryQueryEntries)([ds]);
|
|
95
107
|
expect(result).toEqual([
|
|
96
108
|
{
|
|
97
109
|
entity: 'effects',
|
|
@@ -125,8 +137,41 @@ describe('buildDictionaryQueryEntries', () => {
|
|
|
125
137
|
],
|
|
126
138
|
},
|
|
127
139
|
};
|
|
128
|
-
const result = (0,
|
|
140
|
+
const result = (0, stellarDictionaryV1_1.buildDictionaryQueryEntries)([ds]);
|
|
129
141
|
expect(result).toEqual([]);
|
|
130
142
|
});
|
|
131
143
|
});
|
|
132
|
-
|
|
144
|
+
class TestDictionaryService extends node_core_1.DictionaryService {
|
|
145
|
+
async initDictionaries() {
|
|
146
|
+
return Promise.resolve(undefined);
|
|
147
|
+
}
|
|
148
|
+
async getRegistryDictionaries(chainId) {
|
|
149
|
+
return this.resolveDictionary(common_1.NETWORK_FAMILY.near, chainId, this.nodeConfig.dictionaryRegistry);
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
describe('dictionary v1', () => {
|
|
153
|
+
let dictionary;
|
|
154
|
+
beforeEach(async () => {
|
|
155
|
+
const testDictionaryService = new TestDictionaryService(project.network.chainId, nodeConfig, new event_emitter_1.EventEmitter2());
|
|
156
|
+
const dictionaryEndpoints = await testDictionaryService.getRegistryDictionaries(project.network.chainId);
|
|
157
|
+
dictionary = await stellarDictionaryV1_1.StellarDictionaryV1.create({
|
|
158
|
+
network: {
|
|
159
|
+
chainId: 'mainnet',
|
|
160
|
+
dictionary: dictionaryEndpoints[1],
|
|
161
|
+
},
|
|
162
|
+
}, { dictionaryTimeout: 10000 }, jest.fn(), dictionaryEndpoints[1]);
|
|
163
|
+
});
|
|
164
|
+
it('successfully validates metatada', () => {
|
|
165
|
+
// start height from metadata
|
|
166
|
+
expect(dictionary.startHeight).toBe(1);
|
|
167
|
+
// further validation
|
|
168
|
+
expect(dictionary.dictionaryValidation({
|
|
169
|
+
lastProcessedHeight: 10000,
|
|
170
|
+
targetHeight: 10000,
|
|
171
|
+
chain: 'mainnet',
|
|
172
|
+
genesisHash: 'EPnLgE7iEq9s7yTkos96M3cWymH5avBAPm3qx3NXqR8H=',
|
|
173
|
+
startHeight: 1,
|
|
174
|
+
}, 1)).toBeTruthy();
|
|
175
|
+
});
|
|
176
|
+
});
|
|
177
|
+
//# sourceMappingURL=stellarDictionaryV1.spec.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stellarDictionaryV1.spec.js","sourceRoot":"","sources":["../../../../src/indexer/dictionary/v1/stellarDictionaryV1.spec.ts"],"names":[],"mappings":";AAAA,8DAA8D;AAC9D,mCAAmC;;AAEnC,yDAAsD;AACtD,0CAA+C;AAC/C,gDAAiE;AACjE,wDAI8B;AAE9B,+DAG+B;AAE/B,MAAM,UAAU,GAAG;IACjB,iBAAiB,EAAE,KAAK;IACxB,kBAAkB,EAChB,qEAAqE;CAC1D,CAAC;AAChB,MAAM,OAAO,GAAG;IACd,OAAO,EAAE;QACP,OAAO,EAAE,SAAS;KACnB;CACK,CAAC;AAET,QAAQ,CAAC,6BAA6B,EAAE,GAAG,EAAE;IAC3C,EAAE,CAAC,kEAAkE,EAAE,GAAG,EAAE;QAC1E,MAAM,EAAE,GAA2B;YACjC,IAAI,EAAE,qCAAqB,CAAC,OAAO;YACnC,UAAU,EAAE,CAAC;YACb,OAAO,EAAE;gBACP,IAAI,EAAE,EAAE;gBACR,QAAQ,EAAE;oBACR;wBACE,OAAO,EAAE,oBAAoB;wBAC7B,IAAI,EAAE,kCAAkB,CAAC,WAAW;wBACpC,MAAM,EAAE;4BACN,OAAO,EAAE,cAAc;yBACxB;qBACF;iBACF;aACF;SACF,CAAC;QACF,MAAM,MAAM,GAAG,IAAA,iDAA2B,EAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QACjD,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC;YACrB;gBACE,MAAM,EAAE,cAAc;gBACtB,UAAU,EAAE;oBACV;wBACE,KAAK,EAAE,SAAS;wBAChB,KAAK,EAAE,cAAc;wBACrB,OAAO,EAAE,SAAS;qBACnB;iBACF;aACF;SACF,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,gEAAgE,EAAE,GAAG,EAAE;QACxE,MAAM,EAAE,GAA2B;YACjC,IAAI,EAAE,qCAAqB,CAAC,OAAO;YACnC,UAAU,EAAE,CAAC;YACb,OAAO,EAAE;gBACP,IAAI,EAAE,EAAE;gBACR,QAAQ,EAAE;oBACR;wBACE,OAAO,EAAE,kBAAkB;wBAC3B,IAAI,EAAE,kCAAkB,CAAC,SAAS;wBAClC,MAAM,EAAE;4BACN,aAAa,EAAE,gBAAgB;4BAC/B,IAAI,EAAE,gBAAgB;yBACvB;qBACK;iBACT;aACF;SACF,CAAC;QACF,MAAM,MAAM,GAAG,IAAA,iDAA2B,EAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QACjD,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC;YACrB;gBACE,MAAM,EAAE,YAAY;gBACpB,UAAU,EAAE;oBACV;wBACE,KAAK,EAAE,MAAM;wBACb,KAAK,EAAE,gBAAgB;wBACvB,OAAO,EAAE,SAAS;qBACnB;oBACD;wBACE,KAAK,EAAE,eAAe;wBACtB,KAAK,EAAE,gBAAgB;wBACvB,OAAO,EAAE,SAAS;qBACnB;iBACF;aACF;SACF,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,6DAA6D,EAAE,GAAG,EAAE;QACrE,MAAM,EAAE,GAA2B;YACjC,IAAI,EAAE,qCAAqB,CAAC,OAAO;YACnC,UAAU,EAAE,CAAC;YACb,OAAO,EAAE;gBACP,IAAI,EAAE,EAAE;gBACR,QAAQ,EAAE;oBACR;wBACE,OAAO,EAAE,eAAe;wBACxB,IAAI,EAAE,kCAAkB,CAAC,OAAO;wBAChC,MAAM,EAAE;4BACN,OAAO,EAAE,gBAAgB;4BACzB,IAAI,EAAE,aAAa;yBACpB;qBACF;iBACF;aACF;SACF,CAAC;QACF,MAAM,MAAM,GAAG,IAAA,iDAA2B,EAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QACjD,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC;YACrB;gBACE,MAAM,EAAE,SAAS;gBACjB,UAAU,EAAE;oBACV;wBACE,KAAK,EAAE,MAAM;wBACb,KAAK,EAAE,aAAa;wBACpB,OAAO,EAAE,SAAS;qBACnB;oBACD;wBACE,KAAK,EAAE,SAAS;wBAChB,KAAK,EAAE,gBAAgB;wBACvB,OAAO,EAAE,SAAS;qBACnB;iBACF;aACF;SACF,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,2DAA2D,EAAE,GAAG,EAAE;QACnE,MAAM,EAAE,GAA2B;YACjC,IAAI,EAAE,qCAAqB,CAAC,OAAO;YACnC,UAAU,EAAE,CAAC;YACb,OAAO,EAAE;gBACP,IAAI,EAAE,EAAE;gBACR,QAAQ,EAAE;oBACR;wBACE,OAAO,EAAE,oBAAoB;wBAC7B,IAAI,EAAE,kCAAkB,CAAC,WAAW;wBACpC,MAAM,EAAE,EAAE;qBACX;iBACF;aACF;SACF,CAAC;QACF,MAAM,MAAM,GAAG,IAAA,iDAA2B,EAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QACjD,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;IAC7B,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,MAAM,qBAAsB,SAAQ,6BAA2B;IAC7D,KAAK,CAAC,gBAAgB;QACpB,OAAO,OAAO,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;IACpC,CAAC;IACD,KAAK,CAAC,uBAAuB,CAAC,OAAe;QAC3C,OAAO,IAAI,CAAC,iBAAiB,CAC3B,uBAAc,CAAC,IAAI,EACnB,OAAO,EACP,IAAI,CAAC,UAAU,CAAC,kBAAkB,CACnC,CAAC;IACJ,CAAC;CACF;AACD,QAAQ,CAAC,eAAe,EAAE,GAAG,EAAE;IAC7B,IAAI,UAA+B,CAAC;IACpC,UAAU,CAAC,KAAK,IAAI,EAAE;QACpB,MAAM,qBAAqB,GAAG,IAAI,qBAAqB,CACrD,OAAO,CAAC,OAAO,CAAC,OAAO,EACvB,UAAU,EACV,IAAI,6BAAa,EAAE,CACpB,CAAC;QACF,MAAM,mBAAmB,GACvB,MAAM,qBAAqB,CAAC,uBAAuB,CACjD,OAAO,CAAC,OAAO,CAAC,OAAO,CACxB,CAAC;QACJ,UAAU,GAAG,MAAM,yCAAmB,CAAC,MAAM,CAC3C;YACE,OAAO,EAAE;gBACP,OAAO,EAAE,SAAS;gBAClB,UAAU,EAAE,mBAAmB,CAAC,CAAC,CAAC;aACnC;SACK,EACR,EAAE,iBAAiB,EAAE,KAAK,EAAgB,EAC1C,IAAI,CAAC,EAAE,EAAE,EACT,mBAAmB,CAAC,CAAC,CAAC,CACvB,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,iCAAiC,EAAE,GAAG,EAAE;QACzC,6BAA6B;QAC7B,MAAM,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACvC,qBAAqB;QACrB,MAAM,CACH,UAAkB,CAAC,oBAAoB,CACtC;YACE,mBAAmB,EAAE,KAAK;YAC1B,YAAY,EAAE,KAAK;YACnB,KAAK,EAAE,SAAS;YAChB,WAAW,EAAE,+CAA+C;YAC5D,WAAW,EAAE,CAAC;SACH,EACb,CAAC,CACF,CACF,CAAC,UAAU,EAAE,CAAC;IACjB,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC","sourcesContent":["// Copyright 2020-2024 SubQuery Pte Ltd authors & contributors\n// SPDX-License-Identifier: GPL-3.0\n\nimport { EventEmitter2 } from '@nestjs/event-emitter';\nimport { NETWORK_FAMILY } from '@subql/common';\nimport { DictionaryService, NodeConfig } from '@subql/node-core';\nimport {\n StellarDatasourceKind,\n StellarHandlerKind,\n SubqlRuntimeDatasource,\n} from '@subql/types-stellar';\nimport { MetaData } from '@subql/utils';\nimport {\n StellarDictionaryV1,\n buildDictionaryQueryEntries,\n} from './stellarDictionaryV1';\n\nconst nodeConfig = {\n dictionaryTimeout: 10000,\n dictionaryRegistry:\n 'https://github.com/subquery/templates/raw/main/dist/dictionary.json',\n} as NodeConfig;\nconst project = {\n network: {\n chainId: 'mainnet',\n },\n} as any;\n\ndescribe('buildDictionaryQueryEntries', () => {\n it('should correctly build dictionary query entries for transactions', () => {\n const ds: SubqlRuntimeDatasource = {\n kind: StellarDatasourceKind.Runtime,\n startBlock: 1,\n mapping: {\n file: '',\n handlers: [\n {\n handler: 'handleTransactions',\n kind: StellarHandlerKind.Transaction,\n filter: {\n account: 'test_account',\n },\n },\n ],\n },\n };\n const result = buildDictionaryQueryEntries([ds]);\n expect(result).toEqual([\n {\n entity: 'transactions',\n conditions: [\n {\n field: 'account',\n value: 'test_account',\n matcher: 'equalTo',\n },\n ],\n },\n ]);\n });\n\n it('should correctly build dictionary query entries for operations', () => {\n const ds: SubqlRuntimeDatasource = {\n kind: StellarDatasourceKind.Runtime,\n startBlock: 1,\n mapping: {\n file: '',\n handlers: [\n {\n handler: 'handleOperations',\n kind: StellarHandlerKind.Operation,\n filter: {\n sourceAccount: 'source_account',\n type: 'operation_type',\n },\n } as any,\n ],\n },\n };\n const result = buildDictionaryQueryEntries([ds]);\n expect(result).toEqual([\n {\n entity: 'operations',\n conditions: [\n {\n field: 'type',\n value: 'operation_type',\n matcher: 'equalTo',\n },\n {\n field: 'sourceAccount',\n value: 'source_account',\n matcher: 'equalTo',\n },\n ],\n },\n ]);\n });\n\n it('should correctly build dictionary query entries for effects', () => {\n const ds: SubqlRuntimeDatasource = {\n kind: StellarDatasourceKind.Runtime,\n startBlock: 1,\n mapping: {\n file: '',\n handlers: [\n {\n handler: 'handleEffects',\n kind: StellarHandlerKind.Effects,\n filter: {\n account: 'effect_account',\n type: 'effect_type',\n },\n },\n ],\n },\n };\n const result = buildDictionaryQueryEntries([ds]);\n expect(result).toEqual([\n {\n entity: 'effects',\n conditions: [\n {\n field: 'type',\n value: 'effect_type',\n matcher: 'equalTo',\n },\n {\n field: 'account',\n value: 'effect_account',\n matcher: 'equalTo',\n },\n ],\n },\n ]);\n });\n\n it('should return an empty array when no filters are provided', () => {\n const ds: SubqlRuntimeDatasource = {\n kind: StellarDatasourceKind.Runtime,\n startBlock: 1,\n mapping: {\n file: '',\n handlers: [\n {\n handler: 'handleTransactions',\n kind: StellarHandlerKind.Transaction,\n filter: {},\n },\n ],\n },\n };\n const result = buildDictionaryQueryEntries([ds]);\n expect(result).toEqual([]);\n });\n});\n\nclass TestDictionaryService extends DictionaryService<any, any> {\n async initDictionaries(): Promise<void> {\n return Promise.resolve(undefined);\n }\n async getRegistryDictionaries(chainId: string): Promise<string[]> {\n return this.resolveDictionary(\n NETWORK_FAMILY.near,\n chainId,\n this.nodeConfig.dictionaryRegistry,\n );\n }\n}\ndescribe('dictionary v1', () => {\n let dictionary: StellarDictionaryV1;\n beforeEach(async () => {\n const testDictionaryService = new TestDictionaryService(\n project.network.chainId,\n nodeConfig,\n new EventEmitter2(),\n );\n const dictionaryEndpoints =\n await testDictionaryService.getRegistryDictionaries(\n project.network.chainId,\n );\n dictionary = await StellarDictionaryV1.create(\n {\n network: {\n chainId: 'mainnet',\n dictionary: dictionaryEndpoints[1],\n },\n } as any,\n { dictionaryTimeout: 10000 } as NodeConfig,\n jest.fn(),\n dictionaryEndpoints[1], // use endpoint from network\n );\n });\n\n it('successfully validates metatada', () => {\n // start height from metadata\n expect(dictionary.startHeight).toBe(1);\n // further validation\n expect(\n (dictionary as any).dictionaryValidation(\n {\n lastProcessedHeight: 10000,\n targetHeight: 10000,\n chain: 'mainnet',\n genesisHash: 'EPnLgE7iEq9s7yTkos96M3cWymH5avBAPm3qx3NXqR8H=',\n startHeight: 1,\n } as MetaData,\n 1,\n ),\n ).toBeTruthy();\n });\n});\n"]}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
// Copyright 2020-
|
|
2
|
+
// Copyright 2020-2024 SubQuery Pte Ltd authors & contributors
|
|
3
3
|
// SPDX-License-Identifier: GPL-3.0
|
|
4
4
|
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
5
5
|
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ds-processor.service.js","sourceRoot":"","sources":["../../src/indexer/ds-processor.service.ts"],"names":[],"mappings":";AAAA,8DAA8D;AAC9D,mCAAmC;;;;;;;;;AAEnC,2CAA4C;AAC5C,0DAM+B;AAC/B,gDAA0D;AAO1D,SAAgB,mCAAmC,CAMjD,SAEkD;IAElD,4GAA4G;IAC5G,OAAO,SAAS,CAAC,WAAW,KAAK,SAAS,CAAC;AAC7C,CAAC;AAZD,kFAYC;AAED,SAAgB,mCAAmC,CAMjD,SAEkD;IAElD,OAAO,SAAS,CAAC,WAAW,KAAK,OAAO,CAAC;AAC3C,CAAC;AAXD,kFAWC;AAED,SAAgB,mCAAmC,CAMjD,SAEkD;IAElD,IAAI,mCAAmC,CAAC,SAAS,CAAC,EAAE;QAClD,OAAO,SAAS,CAAC;KAClB;IAED,IAAI,CAAC,mCAAmC,CAAC,SAAS,CAAC,EAAE;QACnD,MAAM,IAAI,KAAK,CAAC,kCAAkC,CAAC,CAAC;KACrD;IAED,uCACK,SAAS,KACZ,WAAW,EAAE,OAAO,EACpB,eAAe,EAAE,CAAC,MAAM,EAAE,EAAE,CAC1B,SAAS,CAAC,eAAe,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,EAAE,CAAC,EACnE,WAAW,EAAE,CAAC,MAAM,EAAE,EAAE,CACtB,SAAS;aACN,WAAW,CAAC,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,EAAE,EAAE,MAAM,CAAC,GAAG,EAAE,MAAM,CAAC,MAAM,CAAC;aAC/D,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,IACzB;AACJ,CAAC;AA5BD,kFA4BC;AAGM,IAAM,kBAAkB,GAAxB,MAAM,kBAAmB,SAAQ,kCAIvC;IAJM;;QAKK,eAAU,GAAG,2BAAU,CAAC;IACpC,CAAC;CAAA,CAAA;AANY,kBAAkB;IAD9B,IAAA,mBAAU,GAAE;GACA,kBAAkB,CAM9B;AANY,gDAAkB","sourcesContent":["// Copyright 2020-
|
|
1
|
+
{"version":3,"file":"ds-processor.service.js","sourceRoot":"","sources":["../../src/indexer/ds-processor.service.ts"],"names":[],"mappings":";AAAA,8DAA8D;AAC9D,mCAAmC;;;;;;;;;AAEnC,2CAA4C;AAC5C,0DAM+B;AAC/B,gDAA0D;AAO1D,SAAgB,mCAAmC,CAMjD,SAEkD;IAElD,4GAA4G;IAC5G,OAAO,SAAS,CAAC,WAAW,KAAK,SAAS,CAAC;AAC7C,CAAC;AAZD,kFAYC;AAED,SAAgB,mCAAmC,CAMjD,SAEkD;IAElD,OAAO,SAAS,CAAC,WAAW,KAAK,OAAO,CAAC;AAC3C,CAAC;AAXD,kFAWC;AAED,SAAgB,mCAAmC,CAMjD,SAEkD;IAElD,IAAI,mCAAmC,CAAC,SAAS,CAAC,EAAE;QAClD,OAAO,SAAS,CAAC;KAClB;IAED,IAAI,CAAC,mCAAmC,CAAC,SAAS,CAAC,EAAE;QACnD,MAAM,IAAI,KAAK,CAAC,kCAAkC,CAAC,CAAC;KACrD;IAED,uCACK,SAAS,KACZ,WAAW,EAAE,OAAO,EACpB,eAAe,EAAE,CAAC,MAAM,EAAE,EAAE,CAC1B,SAAS,CAAC,eAAe,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,EAAE,CAAC,EACnE,WAAW,EAAE,CAAC,MAAM,EAAE,EAAE,CACtB,SAAS;aACN,WAAW,CAAC,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,EAAE,EAAE,MAAM,CAAC,GAAG,EAAE,MAAM,CAAC,MAAM,CAAC;aAC/D,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,IACzB;AACJ,CAAC;AA5BD,kFA4BC;AAGM,IAAM,kBAAkB,GAAxB,MAAM,kBAAmB,SAAQ,kCAIvC;IAJM;;QAKK,eAAU,GAAG,2BAAU,CAAC;IACpC,CAAC;CAAA,CAAA;AANY,kBAAkB;IAD9B,IAAA,mBAAU,GAAE;GACA,kBAAkB,CAM9B;AANY,gDAAkB","sourcesContent":["// Copyright 2020-2024 SubQuery Pte Ltd authors & contributors\n// SPDX-License-Identifier: GPL-3.0\n\nimport { Injectable } from '@nestjs/common';\nimport {\n StellarHandlerKind,\n isCustomDs,\n SubqlStellarCustomDataSource,\n SubqlStellarDataSource,\n SubqlDatasourceProcessor,\n} from '@subql/common-stellar';\nimport { BaseDsProcessorService } from '@subql/node-core';\nimport {\n SecondLayerHandlerProcessor_0_0_0,\n SecondLayerHandlerProcessor_1_0_0,\n SubqlCustomDatasource,\n} from '@subql/types-stellar';\n\nexport function isSecondLayerHandlerProcessor_0_0_0<\n K extends StellarHandlerKind,\n F extends Record<string, unknown>,\n E,\n DS extends SubqlCustomDatasource = SubqlStellarCustomDataSource,\n>(\n processor:\n | SecondLayerHandlerProcessor_0_0_0<K, F, E, DS>\n | SecondLayerHandlerProcessor_1_0_0<K, F, E, DS>,\n): processor is SecondLayerHandlerProcessor_0_0_0<K, F, E, DS> {\n // Exisiting datasource processors had no concept of specVersion, therefore undefined is equivalent to 0.0.0\n return processor.specVersion === undefined;\n}\n\nexport function isSecondLayerHandlerProcessor_1_0_0<\n K extends StellarHandlerKind,\n F extends Record<string, unknown>,\n E,\n DS extends SubqlStellarCustomDataSource = SubqlStellarCustomDataSource,\n>(\n processor:\n | SecondLayerHandlerProcessor_0_0_0<K, F, E, DS>\n | SecondLayerHandlerProcessor_1_0_0<K, F, E, DS>,\n): processor is SecondLayerHandlerProcessor_1_0_0<K, F, E, DS> {\n return processor.specVersion === '1.0.0';\n}\n\nexport function asSecondLayerHandlerProcessor_1_0_0<\n K extends StellarHandlerKind,\n F extends Record<string, unknown>,\n E,\n DS extends SubqlStellarCustomDataSource = SubqlStellarCustomDataSource,\n>(\n processor:\n | SecondLayerHandlerProcessor_0_0_0<K, F, E, DS>\n | SecondLayerHandlerProcessor_1_0_0<K, F, E, DS>,\n): SecondLayerHandlerProcessor_1_0_0<K, F, E, DS> {\n if (isSecondLayerHandlerProcessor_1_0_0(processor)) {\n return processor;\n }\n\n if (!isSecondLayerHandlerProcessor_0_0_0(processor)) {\n throw new Error('Unsupported ds processor version');\n }\n\n return {\n ...processor,\n specVersion: '1.0.0',\n filterProcessor: (params) =>\n processor.filterProcessor(params.filter, params.input, params.ds),\n transformer: (params) =>\n processor\n .transformer(params.input, params.ds, params.api, params.assets)\n .then((res) => [res]),\n };\n}\n\n@Injectable()\nexport class DsProcessorService extends BaseDsProcessorService<\n SubqlStellarDataSource,\n SubqlStellarCustomDataSource<string>,\n SubqlDatasourceProcessor<string, Record<string, unknown>>\n> {\n protected isCustomDs = isCustomDs;\n}\n"]}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
// Copyright 2020-
|
|
2
|
+
// Copyright 2020-2024 SubQuery Pte Ltd authors & contributors
|
|
3
3
|
// SPDX-License-Identifier: GPL-3.0
|
|
4
4
|
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
5
5
|
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
@@ -41,10 +41,11 @@ let DynamicDsService = class DynamicDsService extends node_core_1.DynamicDsServi
|
|
|
41
41
|
this.project = project;
|
|
42
42
|
}
|
|
43
43
|
async getDatasource(params) {
|
|
44
|
-
const
|
|
45
|
-
if (!
|
|
44
|
+
const t = this.project.templates.find((t) => t.name === params.templateName);
|
|
45
|
+
if (!t) {
|
|
46
46
|
throw new Error(`Unable to find matching template in project for name: "${params.templateName}"`);
|
|
47
47
|
}
|
|
48
|
+
const _a = (0, lodash_1.cloneDeep)(t), { name } = _a, template = __rest(_a, ["name"]);
|
|
48
49
|
const dsObj = Object.assign(Object.assign({}, template), { startBlock: params.startBlock });
|
|
49
50
|
try {
|
|
50
51
|
if ((0, common_stellar_1.isCustomDs)(dsObj)) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dynamic-ds.service.js","sourceRoot":"","sources":["../../src/indexer/dynamic-ds.service.ts"],"names":[],"mappings":";AAAA,8DAA8D;AAC9D,mCAAmC;;;;;;;;;;;;;;;;;;;;;;;;;;AAEnC,2CAAoD;AACpD,0DAI+B;AAC/B,gDAG0B;AAC1B,yDAAiD;AACjD,qDAA+C;AAC/C,mCAAmC;AACnC,kEAGsC;AACtC,iEAA4D;AAGrD,IAAM,gBAAgB,GAAtB,MAAM,gBAAiB,SAAQ,4BAAsC;IAC1E,YACmB,kBAAsC,EACV,OAAwB;QAErE,KAAK,EAAE,CAAC;QAHS,uBAAkB,GAAlB,kBAAkB,CAAoB;QACV,YAAO,GAAP,OAAO,CAAiB;IAGvE,CAAC;IAES,KAAK,CAAC,aAAa,CAC3B,MAAwB;QAExB,MAAM,
|
|
1
|
+
{"version":3,"file":"dynamic-ds.service.js","sourceRoot":"","sources":["../../src/indexer/dynamic-ds.service.ts"],"names":[],"mappings":";AAAA,8DAA8D;AAC9D,mCAAmC;;;;;;;;;;;;;;;;;;;;;;;;;;AAEnC,2CAAoD;AACpD,0DAI+B;AAC/B,gDAG0B;AAC1B,yDAAiD;AACjD,qDAA+C;AAC/C,mCAAmC;AACnC,kEAGsC;AACtC,iEAA4D;AAGrD,IAAM,gBAAgB,GAAtB,MAAM,gBAAiB,SAAQ,4BAAsC;IAC1E,YACmB,kBAAsC,EACV,OAAwB;QAErE,KAAK,EAAE,CAAC;QAHS,uBAAkB,GAAlB,kBAAkB,CAAoB;QACV,YAAO,GAAP,OAAO,CAAiB;IAGvE,CAAC;IAES,KAAK,CAAC,aAAa,CAC3B,MAAwB;QAExB,MAAM,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,IAAI,CACnC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,MAAM,CAAC,YAAY,CACtC,CAAC;QACF,IAAI,CAAC,CAAC,EAAE;YACN,MAAM,IAAI,KAAK,CACb,0DAA0D,MAAM,CAAC,YAAY,GAAG,CACjF,CAAC;SACH;QACD,MAAM,KAAwB,IAAA,kBAAS,EAAC,CAAC,CAAC,EAApC,EAAE,IAAI,OAA8B,EAAzB,QAAQ,cAAnB,QAAqB,CAAe,CAAC;QAE3C,MAAM,KAAK,GAAG,gCACT,QAAQ,KACX,UAAU,EAAE,MAAM,CAAC,UAAU,GACV,CAAC;QACtB,IAAI;YACF,IAAI,IAAA,2BAAU,EAAC,KAAK,CAAC,EAAE;gBACrB,KAAK,CAAC,SAAS,CAAC,OAAO,mCAClB,KAAK,CAAC,SAAS,CAAC,OAAO,GACvB,MAAM,CAAC,IAAI,CACf,CAAC;gBACF,MAAM,IAAI,CAAC,kBAAkB,CAAC,gBAAgB,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;aACzD;iBAAM,IAAI,IAAA,4BAAW,EAAC,KAAK,CAAC,EAAE;gBAC7B,KAAK,CAAC,OAAO,mCACR,KAAK,CAAC,OAAO,GACb,MAAM,CAAC,IAAI,CACf,CAAC;gBAEF,MAAM,QAAQ,GAAG,IAAA,gCAAY,EAAC,6CAA4B,EAAE,KAAK,CAAC,CAAC;gBAEnE,MAAM,MAAM,GAAG,IAAA,8BAAY,EAAC,QAAQ,EAAE;oBACpC,SAAS,EAAE,IAAI;oBACf,oBAAoB,EAAE,KAAK;iBAC5B,CAAC,CAAC;gBACH,IAAI,MAAM,CAAC,MAAM,EAAE;oBACjB,MAAM,IAAI,KAAK,CACb,0BAA0B,MAAM;yBAC7B,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC;yBACxB,IAAI,CAAC,IAAI,CAAC,EAAE,CAChB,CAAC;iBACH;aACF;YACD,OAAO,KAAK,CAAC;SACd;QAAC,OAAO,CAAC,EAAE;YACV,MAAM,IAAI,KAAK,CAAC,0CAA0C,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC;SACxE;IACH,CAAC;CACF,CAAA;AAzDY,gBAAgB;IAD5B,IAAA,mBAAU,GAAE;IAIR,WAAA,IAAA,eAAM,EAAC,kBAAkB,CAAC,CAAA;qCADU,yCAAkB;QACD,iCAAe;GAH5D,gBAAgB,CAyD5B;AAzDY,4CAAgB","sourcesContent":["// Copyright 2020-2024 SubQuery Pte Ltd authors & contributors\n// SPDX-License-Identifier: GPL-3.0\n\nimport { Inject, Injectable } from '@nestjs/common';\nimport {\n StellarRuntimeDataSourceImpl,\n isCustomDs,\n isRuntimeDs,\n} from '@subql/common-stellar';\nimport {\n DatasourceParams,\n DynamicDsService as BaseDynamicDsService,\n} from '@subql/node-core';\nimport { plainToClass } from 'class-transformer';\nimport { validateSync } from 'class-validator';\nimport { cloneDeep } from 'lodash';\nimport {\n StellarProjectDs,\n SubqueryProject,\n} from '../configure/SubqueryProject';\nimport { DsProcessorService } from './ds-processor.service';\n\n@Injectable()\nexport class DynamicDsService extends BaseDynamicDsService<StellarProjectDs> {\n constructor(\n private readonly dsProcessorService: DsProcessorService,\n @Inject('ISubqueryProject') private readonly project: SubqueryProject,\n ) {\n super();\n }\n\n protected async getDatasource(\n params: DatasourceParams,\n ): Promise<StellarProjectDs> {\n const t = this.project.templates.find(\n (t) => t.name === params.templateName,\n );\n if (!t) {\n throw new Error(\n `Unable to find matching template in project for name: \"${params.templateName}\"`,\n );\n }\n const { name, ...template } = cloneDeep(t);\n\n const dsObj = {\n ...template,\n startBlock: params.startBlock,\n } as StellarProjectDs;\n try {\n if (isCustomDs(dsObj)) {\n dsObj.processor.options = {\n ...dsObj.processor.options,\n ...params.args,\n };\n await this.dsProcessorService.validateCustomDs([dsObj]);\n } else if (isRuntimeDs(dsObj)) {\n dsObj.options = {\n ...dsObj.options,\n ...params.args,\n };\n\n const parsedDs = plainToClass(StellarRuntimeDataSourceImpl, dsObj);\n\n const errors = validateSync(parsedDs, {\n whitelist: true,\n forbidNonWhitelisted: false,\n });\n if (errors.length) {\n throw new Error(\n `Dynamic ds is invalid\\n${errors\n .map((e) => e.toString())\n .join('\\n')}`,\n );\n }\n }\n return dsObj;\n } catch (e) {\n throw new Error(`Unable to create dynamic datasource.\\n ${e.message}`);\n }\n }\n}\n"]}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
// Copyright 2020-
|
|
2
|
+
// Copyright 2020-2024 SubQuery Pte Ltd authors & contributors
|
|
3
3
|
// SPDX-License-Identifier: GPL-3.0
|
|
4
4
|
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
5
5
|
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
@@ -14,7 +14,7 @@ const event_emitter_1 = require("@nestjs/event-emitter");
|
|
|
14
14
|
const node_core_1 = require("@subql/node-core");
|
|
15
15
|
const api_service_stellar_1 = require("../stellar/api.service.stellar");
|
|
16
16
|
const blockDispatcher_1 = require("./blockDispatcher");
|
|
17
|
-
const
|
|
17
|
+
const dictionary_1 = require("./dictionary");
|
|
18
18
|
const ds_processor_service_1 = require("./ds-processor.service");
|
|
19
19
|
const dynamic_ds_service_1 = require("./dynamic-ds.service");
|
|
20
20
|
const fetch_service_1 = require("./fetch.service");
|
|
@@ -56,7 +56,7 @@ FetchModule = __decorate([
|
|
|
56
56
|
},
|
|
57
57
|
{
|
|
58
58
|
provide: 'IBlockDispatcher',
|
|
59
|
-
useFactory: (nodeConfig, eventEmitter, projectService, projectUpgradeService, apiService, indexerManager, smartBatchService, cacheService, storeService, storeCacheService, poiSyncService, project, dynamicDsService, unfinalizedBlocks, connectionPoolState) => nodeConfig.workers
|
|
59
|
+
useFactory: (nodeConfig, eventEmitter, projectService, projectUpgradeService, apiService, indexerManager, smartBatchService, cacheService, storeService, storeCacheService, poiSyncService, project, dynamicDsService, unfinalizedBlocks, connectionPoolState) => nodeConfig.workers
|
|
60
60
|
? new blockDispatcher_1.WorkerBlockDispatcherService(nodeConfig, eventEmitter, projectService, projectUpgradeService, smartBatchService, cacheService, storeService, storeCacheService, poiSyncService, project, dynamicDsService, unfinalizedBlocks, connectionPoolState)
|
|
61
61
|
: new blockDispatcher_1.BlockDispatcherService(apiService, nodeConfig, indexerManager, eventEmitter, projectService, projectUpgradeService, smartBatchService, storeService, storeCacheService, poiSyncService, project, dynamicDsService),
|
|
62
62
|
inject: [
|
|
@@ -80,14 +80,7 @@ FetchModule = __decorate([
|
|
|
80
80
|
fetch_service_1.FetchService,
|
|
81
81
|
node_core_1.IndexingBenchmarkService,
|
|
82
82
|
node_core_1.PoiBenchmarkService,
|
|
83
|
-
|
|
84
|
-
provide: dictionary_service_1.DictionaryService,
|
|
85
|
-
useFactory: async (project, nodeConfig, eventEmitter) => {
|
|
86
|
-
const dictionaryService = await dictionary_service_1.DictionaryService.create(project, nodeConfig, eventEmitter);
|
|
87
|
-
return dictionaryService;
|
|
88
|
-
},
|
|
89
|
-
inject: ['ISubqueryProject', node_core_1.NodeConfig, event_emitter_1.EventEmitter2],
|
|
90
|
-
},
|
|
83
|
+
dictionary_1.StellarDictionaryService,
|
|
91
84
|
sandbox_service_1.SandboxService,
|
|
92
85
|
ds_processor_service_1.DsProcessorService,
|
|
93
86
|
dynamic_ds_service_1.DynamicDsService,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fetch.module.js","sourceRoot":"","sources":["../../src/indexer/fetch.module.ts"],"names":[],"mappings":";AAAA,8DAA8D;AAC9D,mCAAmC;;;;;;;;;AAEnC,2CAAwC;AACxC,yDAAsD;AACtD,gDAe0B;AAG1B,wEAAmE;AACnE,uDAG2B;AAC3B,
|
|
1
|
+
{"version":3,"file":"fetch.module.js","sourceRoot":"","sources":["../../src/indexer/fetch.module.ts"],"names":[],"mappings":";AAAA,8DAA8D;AAC9D,mCAAmC;;;;;;;;;AAEnC,2CAAwC;AACxC,yDAAsD;AACtD,gDAe0B;AAG1B,wEAAmE;AACnE,uDAG2B;AAC3B,6CAAwD;AACxD,iEAA4D;AAC5D,6DAAwD;AACxD,mDAA+C;AAC/C,uDAAmD;AACnD,uDAAmD;AACnD,uDAAmD;AACnD,2EAAuE;AA6HhE,IAAM,WAAW,GAAjB,MAAM,WAAW;CAAG,CAAA;AAAd,WAAW;IA3HvB,IAAA,eAAM,EAAC;QACN,SAAS,EAAE;YACT,gCAAoB;YACpB,wBAAY;YACZ,6BAAiB;YACjB;gBACE,OAAO,EAAE,sBAAU;gBACnB,UAAU,EAAE,KAAK,EACf,OAAwB,EACxB,qBAA4C,EAC5C,qBAAkE,EAClE,YAA2B,EAC3B,EAAE;oBACF,MAAM,UAAU,GAAG,IAAI,uCAAiB,CACtC,OAAO,EACP,qBAAqB,EACrB,qBAAqB,EACrB,YAAY,CACb,CAAC;oBACF,MAAM,UAAU,CAAC,IAAI,EAAE,CAAC;oBACxB,OAAO,UAAU,CAAC;gBACpB,CAAC;gBACD,MAAM,EAAE;oBACN,kBAAkB;oBAClB,wBAAwB;oBACxB,iCAAqB;oBACrB,6BAAa;iBACd;aACF;YACD,gCAAc;YACd,iCAAqB;YACrB,sCAA0B;YAC1B;gBACE,OAAO,EAAE,6BAAiB;gBAC1B,UAAU,EAAE,CAAC,UAAsB,EAAE,EAAE;oBACrC,OAAO,IAAI,6BAAiB,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC;gBACrD,CAAC;gBACD,MAAM,EAAE,CAAC,sBAAU,CAAC;aACrB;YACD;gBACE,OAAO,EAAE,kBAAkB;gBAC3B,UAAU,EAAE,CACV,UAAsB,EACtB,YAA2B,EAC3B,cAA8B,EAC9B,qBAA6C,EAC7C,UAAsB,EACtB,cAA8B,EAC9B,iBAAoC,EACpC,YAAkC,EAClC,YAA0B,EAC1B,iBAAoC,EACpC,cAA8B,EAC9B,OAAwB,EACxB,gBAAkC,EAClC,iBAA2C,EAC3C,mBAAqE,EACrE,EAAE,CACF,UAAU,CAAC,OAAO;oBAChB,CAAC,CAAC,IAAI,8CAA4B,CAC9B,UAAU,EACV,YAAY,EACZ,cAAc,EACd,qBAAqB,EACrB,iBAAiB,EACjB,YAAY,EACZ,YAAY,EACZ,iBAAiB,EACjB,cAAc,EACd,OAAO,EACP,gBAAgB,EAChB,iBAAiB,EACjB,mBAAmB,CACpB;oBACH,CAAC,CAAC,IAAI,wCAAsB,CACxB,UAAU,EACV,UAAU,EACV,cAAc,EACd,YAAY,EACZ,cAAc,EACd,qBAAqB,EACrB,iBAAiB,EACjB,YAAY,EACZ,iBAAiB,EACjB,cAAc,EACd,OAAO,EACP,gBAAgB,CACjB;gBACP,MAAM,EAAE;oBACN,sBAAU;oBACV,6BAAa;oBACb,iBAAiB;oBACjB,wBAAwB;oBACxB,sBAAU;oBACV,gCAAc;oBACd,6BAAiB;oBACjB,gCAAoB;oBACpB,wBAAY;oBACZ,6BAAiB;oBACjB,0BAAc;oBACd,kBAAkB;oBAClB,qCAAgB;oBAChB,oDAAwB;oBACxB,sCAA0B;iBAC3B;aACF;YACD,4BAAY;YACZ,oCAAwB;YACxB,+BAAmB;YACnB,qCAAwB;YACxB,gCAAc;YACd,yCAAkB;YAClB,qCAAgB;YAChB,sBAAU;YACV,0BAAc;YACd;gBACE,QAAQ,EAAE,gCAAc;gBACxB,OAAO,EAAE,iBAAiB;aAC3B;YACD,oDAAwB;SACzB;QACD,OAAO,EAAE,CAAC,wBAAY,EAAE,6BAAiB,CAAC;KAC3C,CAAC;GACW,WAAW,CAAG;AAAd,kCAAW","sourcesContent":["// Copyright 2020-2024 SubQuery Pte Ltd authors & contributors\n// SPDX-License-Identifier: GPL-3.0\n\nimport { Module } from '@nestjs/common';\nimport { EventEmitter2 } from '@nestjs/event-emitter';\nimport {\n PoiBenchmarkService,\n IndexingBenchmarkService,\n StoreService,\n PoiService,\n PoiSyncService,\n ApiService,\n ConnectionPoolService,\n SmartBatchService,\n StoreCacheService,\n ConnectionPoolStateManager,\n NodeConfig,\n IProjectUpgradeService,\n ProjectUpgradeService,\n InMemoryCacheService,\n} from '@subql/node-core';\nimport { SubqueryProject } from '../configure/SubqueryProject';\nimport { StellarApiConnection } from '../stellar/api.connection';\nimport { StellarApiService } from '../stellar/api.service.stellar';\nimport {\n BlockDispatcherService,\n WorkerBlockDispatcherService,\n} from './blockDispatcher';\nimport { StellarDictionaryService } from './dictionary';\nimport { DsProcessorService } from './ds-processor.service';\nimport { DynamicDsService } from './dynamic-ds.service';\nimport { FetchService } from './fetch.service';\nimport { IndexerManager } from './indexer.manager';\nimport { ProjectService } from './project.service';\nimport { SandboxService } from './sandbox.service';\nimport { UnfinalizedBlocksService } from './unfinalizedBlocks.service';\n\n@Module({\n providers: [\n InMemoryCacheService,\n StoreService,\n StoreCacheService,\n {\n provide: ApiService,\n useFactory: async (\n project: SubqueryProject,\n projectUpgradeService: ProjectUpgradeService,\n connectionPoolService: ConnectionPoolService<StellarApiConnection>,\n eventEmitter: EventEmitter2,\n ) => {\n const apiService = new StellarApiService(\n project,\n projectUpgradeService,\n connectionPoolService,\n eventEmitter,\n );\n await apiService.init();\n return apiService;\n },\n inject: [\n 'ISubqueryProject',\n 'IProjectUpgradeService',\n ConnectionPoolService,\n EventEmitter2,\n ],\n },\n IndexerManager,\n ConnectionPoolService,\n ConnectionPoolStateManager,\n {\n provide: SmartBatchService,\n useFactory: (nodeConfig: NodeConfig) => {\n return new SmartBatchService(nodeConfig.batchSize);\n },\n inject: [NodeConfig],\n },\n {\n provide: 'IBlockDispatcher',\n useFactory: (\n nodeConfig: NodeConfig,\n eventEmitter: EventEmitter2,\n projectService: ProjectService,\n projectUpgradeService: IProjectUpgradeService,\n apiService: ApiService,\n indexerManager: IndexerManager,\n smartBatchService: SmartBatchService,\n cacheService: InMemoryCacheService,\n storeService: StoreService,\n storeCacheService: StoreCacheService,\n poiSyncService: PoiSyncService,\n project: SubqueryProject,\n dynamicDsService: DynamicDsService,\n unfinalizedBlocks: UnfinalizedBlocksService,\n connectionPoolState: ConnectionPoolStateManager<StellarApiConnection>,\n ) =>\n nodeConfig.workers\n ? new WorkerBlockDispatcherService(\n nodeConfig,\n eventEmitter,\n projectService,\n projectUpgradeService,\n smartBatchService,\n cacheService,\n storeService,\n storeCacheService,\n poiSyncService,\n project,\n dynamicDsService,\n unfinalizedBlocks,\n connectionPoolState,\n )\n : new BlockDispatcherService(\n apiService,\n nodeConfig,\n indexerManager,\n eventEmitter,\n projectService,\n projectUpgradeService,\n smartBatchService,\n storeService,\n storeCacheService,\n poiSyncService,\n project,\n dynamicDsService,\n ),\n inject: [\n NodeConfig,\n EventEmitter2,\n 'IProjectService',\n 'IProjectUpgradeService',\n ApiService,\n IndexerManager,\n SmartBatchService,\n InMemoryCacheService,\n StoreService,\n StoreCacheService,\n PoiSyncService,\n 'ISubqueryProject',\n DynamicDsService,\n UnfinalizedBlocksService,\n ConnectionPoolStateManager,\n ],\n },\n FetchService,\n IndexingBenchmarkService,\n PoiBenchmarkService,\n StellarDictionaryService,\n SandboxService,\n DsProcessorService,\n DynamicDsService,\n PoiService,\n PoiSyncService,\n {\n useClass: ProjectService,\n provide: 'IProjectService',\n },\n UnfinalizedBlocksService,\n ],\n exports: [StoreService, StoreCacheService],\n})\nexport class FetchModule {}\n"]}
|
|
@@ -1,31 +1,22 @@
|
|
|
1
1
|
import { EventEmitter2 } from '@nestjs/event-emitter';
|
|
2
2
|
import { SchedulerRegistry } from '@nestjs/schedule';
|
|
3
|
-
import { SubqlStellarProcessorOptions } from '@subql/common-stellar';
|
|
4
3
|
import { NodeConfig, BaseFetchService, ApiService } from '@subql/node-core';
|
|
5
|
-
import {
|
|
6
|
-
import { SubqlDatasource } from '@subql/types-stellar';
|
|
4
|
+
import { StellarBlock, SubqlDatasource } from '@subql/types-stellar';
|
|
7
5
|
import { SubqueryProject } from '../configure/SubqueryProject';
|
|
8
6
|
import { StellarApi } from '../stellar';
|
|
9
7
|
import { IStellarBlockDispatcher } from './blockDispatcher';
|
|
10
|
-
import {
|
|
8
|
+
import { StellarDictionaryService } from './dictionary';
|
|
11
9
|
import { DsProcessorService } from './ds-processor.service';
|
|
12
10
|
import { DynamicDsService } from './dynamic-ds.service';
|
|
13
11
|
import { ProjectService } from './project.service';
|
|
14
12
|
import { UnfinalizedBlocksService } from './unfinalizedBlocks.service';
|
|
15
|
-
|
|
16
|
-
groupedOptions?: SubqlStellarProcessorOptions[];
|
|
17
|
-
};
|
|
18
|
-
export declare function buildDictionaryQueryEntries(dataSources: GroupedSubqlProjectDs[]): DictionaryQueryEntry[];
|
|
19
|
-
export declare class FetchService extends BaseFetchService<SubqlDatasource, IStellarBlockDispatcher, DictionaryService> {
|
|
13
|
+
export declare class FetchService extends BaseFetchService<SubqlDatasource, IStellarBlockDispatcher, StellarBlock> {
|
|
20
14
|
private apiService;
|
|
21
15
|
private dsProcessorService;
|
|
22
16
|
private unfinalizedBlocksService;
|
|
23
|
-
constructor(apiService: ApiService, nodeConfig: NodeConfig, projectService: ProjectService, project: SubqueryProject, blockDispatcher: IStellarBlockDispatcher, dictionaryService:
|
|
17
|
+
constructor(apiService: ApiService, nodeConfig: NodeConfig, projectService: ProjectService, project: SubqueryProject, blockDispatcher: IStellarBlockDispatcher, dictionaryService: StellarDictionaryService, dsProcessorService: DsProcessorService, dynamicDsService: DynamicDsService, unfinalizedBlocksService: UnfinalizedBlocksService, eventEmitter: EventEmitter2, schedulerRegistry: SchedulerRegistry);
|
|
24
18
|
get api(): StellarApi;
|
|
25
19
|
protected getGenesisHash(): string;
|
|
26
|
-
protected buildDictionaryQueryEntries(dataSources: (SubqlDatasource & {
|
|
27
|
-
name?: string;
|
|
28
|
-
})[]): DictionaryQueryEntry[];
|
|
29
20
|
protected getFinalizedHeight(): Promise<number>;
|
|
30
21
|
protected getBestHeight(): Promise<number>;
|
|
31
22
|
protected getChainInterval(): Promise<number>;
|
|
@@ -34,4 +25,3 @@ export declare class FetchService extends BaseFetchService<SubqlDatasource, ISte
|
|
|
34
25
|
protected initBlockDispatcher(): Promise<void>;
|
|
35
26
|
protected preLoopHook(): Promise<void>;
|
|
36
27
|
}
|
|
37
|
-
export {};
|