@subql/node-stellar 3.12.1-0 → 3.12.2-0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +13 -1
- package/dist/.tsbuildinfo +1 -1
- package/dist/app.module.js +38 -4
- package/dist/app.module.js.map +1 -1
- package/dist/configure/SubqueryProject.d.ts +7 -18
- package/dist/configure/SubqueryProject.js +16 -103
- 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.js +1 -3
- package/dist/indexer/blockDispatcher/block-dispatcher.service.js.map +1 -1
- package/dist/indexer/blockDispatcher/stellar-block-dispatcher.d.ts +1 -1
- package/dist/indexer/blockDispatcher/stellar-block-dispatcher.js.map +1 -1
- package/dist/indexer/blockDispatcher/worker-block-dispatcher.service.js +2 -7
- package/dist/indexer/blockDispatcher/worker-block-dispatcher.service.js.map +1 -1
- package/dist/indexer/dictionary/stellarDictionary.service.d.ts +0 -1
- package/dist/indexer/dictionary/stellarDictionary.service.js +2 -8
- package/dist/indexer/dictionary/stellarDictionary.service.js.map +1 -1
- package/dist/indexer/dictionary/v1/stellarDictionaryV1.d.ts +8 -9
- package/dist/indexer/dictionary/v1/stellarDictionaryV1.js +17 -42
- package/dist/indexer/dictionary/v1/stellarDictionaryV1.js.map +1 -1
- package/dist/indexer/dynamic-ds.service.js +1 -3
- package/dist/indexer/dynamic-ds.service.js.map +1 -1
- package/dist/indexer/fetch.module.js +4 -14
- package/dist/indexer/fetch.module.js.map +1 -1
- package/dist/indexer/fetch.service.d.ts +3 -4
- package/dist/indexer/fetch.service.js +8 -13
- package/dist/indexer/fetch.service.js.map +1 -1
- package/dist/indexer/indexer.manager.d.ts +2 -2
- package/dist/indexer/indexer.manager.js.map +1 -1
- package/dist/indexer/project.service.js +1 -3
- package/dist/indexer/project.service.js.map +1 -1
- package/dist/indexer/unfinalizedBlocks.service.js +4 -3
- package/dist/indexer/unfinalizedBlocks.service.js.map +1 -1
- package/dist/indexer/worker/worker-fetch.module.js +3 -21
- package/dist/indexer/worker/worker-fetch.module.js.map +1 -1
- package/dist/indexer/worker/worker.js.map +1 -1
- package/dist/indexer/worker/worker.module.js +1 -0
- package/dist/indexer/worker/worker.module.js.map +1 -1
- package/dist/init.js +1 -6
- package/dist/init.js.map +1 -1
- package/dist/stellar/api.connection.d.ts +2 -2
- package/dist/stellar/api.connection.js +3 -7
- package/dist/stellar/api.connection.js.map +1 -1
- package/dist/stellar/api.service.stellar.d.ts +5 -5
- package/dist/stellar/api.service.stellar.js +15 -12
- package/dist/stellar/api.service.stellar.js.map +1 -1
- package/dist/stellar/api.service.stellar.spec.js +2 -2
- package/dist/stellar/api.service.stellar.spec.js.map +1 -1
- package/dist/stellar/api.stellar.d.ts +9 -8
- package/dist/stellar/api.stellar.js +18 -6
- package/dist/stellar/api.stellar.js.map +1 -1
- package/dist/stellar/api.stellar.spec.js +2 -2
- package/dist/stellar/api.stellar.spec.js.map +1 -1
- package/dist/stellar/block.stellar.js +2 -2
- package/dist/stellar/block.stellar.js.map +1 -1
- package/dist/stellar/block.stellar.spec.js +12 -12
- package/dist/stellar/block.stellar.spec.js.map +1 -1
- package/dist/stellar/safe-api.d.ts +2 -3
- package/dist/stellar/safe-api.js +2 -2
- package/dist/stellar/safe-api.js.map +1 -1
- package/dist/stellar/soroban.server.d.ts +1 -1
- package/dist/stellar/soroban.server.js +5 -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.d.ts +3 -2
- package/dist/stellar/stellar.server.js +3 -3
- package/dist/stellar/stellar.server.js.map +1 -1
- package/dist/stellar/utils.stellar.d.ts +3 -2
- package/dist/stellar/utils.stellar.js +7 -7
- package/dist/stellar/utils.stellar.js.map +1 -1
- package/dist/subcommands/testing.module.js +3 -2
- package/dist/subcommands/testing.module.js.map +1 -1
- package/dist/subcommands/testing.service.js +1 -3
- package/dist/subcommands/testing.service.js.map +1 -1
- package/dist/utils/string.d.ts +1 -1
- package/dist/utils/string.js.map +1 -1
- package/package.json +7 -7
- package/dist/admin/admin.module.d.ts +0 -2
- package/dist/admin/admin.module.js +0 -25
- package/dist/admin/admin.module.js.map +0 -1
- package/dist/meta/meta.controller.d.ts +0 -21
- package/dist/meta/meta.controller.js +0 -37
- package/dist/meta/meta.controller.js.map +0 -1
- package/dist/meta/meta.module.d.ts +0 -2
- package/dist/meta/meta.module.js +0 -28
- package/dist/meta/meta.module.js.map +0 -1
- package/dist/meta/meta.service.d.ts +0 -24
- package/dist/meta/meta.service.js +0 -124
- package/dist/meta/meta.service.js.map +0 -1
|
@@ -7,8 +7,8 @@ const common_stellar_1 = require("@subql/common-stellar");
|
|
|
7
7
|
const node_core_1 = require("@subql/node-core");
|
|
8
8
|
const lodash_1 = require("lodash");
|
|
9
9
|
const yargs_1 = require("../../../yargs");
|
|
10
|
-
const logger = (0, node_core_1.getLogger)('
|
|
11
|
-
function transactionFilterToQueryEntry(filter
|
|
10
|
+
const logger = (0, node_core_1.getLogger)('DictionaryService');
|
|
11
|
+
function transactionFilterToQueryEntry(filter) {
|
|
12
12
|
const conditions = [];
|
|
13
13
|
if (filter.account) {
|
|
14
14
|
conditions.push({
|
|
@@ -22,7 +22,7 @@ function transactionFilterToQueryEntry(filter, dsOptions) {
|
|
|
22
22
|
conditions,
|
|
23
23
|
};
|
|
24
24
|
}
|
|
25
|
-
function operationFilterToQueryEntry(filter
|
|
25
|
+
function operationFilterToQueryEntry(filter) {
|
|
26
26
|
const conditions = [];
|
|
27
27
|
if (filter.type) {
|
|
28
28
|
conditions.push({
|
|
@@ -43,7 +43,7 @@ function operationFilterToQueryEntry(filter, dsOptions) {
|
|
|
43
43
|
conditions,
|
|
44
44
|
};
|
|
45
45
|
}
|
|
46
|
-
function effectFilterToQueryEntry(filter
|
|
46
|
+
function effectFilterToQueryEntry(filter) {
|
|
47
47
|
const conditions = [];
|
|
48
48
|
if (filter.type) {
|
|
49
49
|
conditions.push({
|
|
@@ -68,7 +68,9 @@ function eventFilterToQueryEntry(filter, dsOptions) {
|
|
|
68
68
|
const queryAddressLimit = yargs_1.yargsOptions.argv['query-address-limit'];
|
|
69
69
|
const conditions = [];
|
|
70
70
|
if (Array.isArray(dsOptions)) {
|
|
71
|
-
const addresses = dsOptions
|
|
71
|
+
const addresses = dsOptions
|
|
72
|
+
.map((option) => option.address)
|
|
73
|
+
.filter((address) => !!address);
|
|
72
74
|
if (addresses.length > queryAddressLimit) {
|
|
73
75
|
logger.warn(`Addresses length: ${addresses.length} is exceeding limit: ${queryAddressLimit}. Consider increasing this value with the flag --query-address-limit `);
|
|
74
76
|
}
|
|
@@ -108,23 +110,6 @@ function eventFilterToQueryEntry(filter, dsOptions) {
|
|
|
108
110
|
conditions,
|
|
109
111
|
};
|
|
110
112
|
}
|
|
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 {
|
|
121
|
-
...ref,
|
|
122
|
-
groupedOptions: options,
|
|
123
|
-
};
|
|
124
|
-
});
|
|
125
|
-
const filteredDs = [...normalDataSources, ...groupedDataSources];
|
|
126
|
-
return buildDictionaryQueryEntries(filteredDs);
|
|
127
|
-
}
|
|
128
113
|
function buildDictionaryQueryEntries(dataSources) {
|
|
129
114
|
const queryEntries = [];
|
|
130
115
|
for (const ds of dataSources) {
|
|
@@ -137,11 +122,8 @@ function buildDictionaryQueryEntries(dataSources) {
|
|
|
137
122
|
return [];
|
|
138
123
|
case common_stellar_1.StellarHandlerKind.Transaction: {
|
|
139
124
|
const filter = handler.filter;
|
|
140
|
-
if (
|
|
141
|
-
queryEntries.push(transactionFilterToQueryEntry(filter
|
|
142
|
-
}
|
|
143
|
-
else if (filter.account) {
|
|
144
|
-
queryEntries.push(transactionFilterToQueryEntry(filter, ds.options));
|
|
125
|
+
if (filter.account) {
|
|
126
|
+
queryEntries.push(transactionFilterToQueryEntry(filter));
|
|
145
127
|
}
|
|
146
128
|
else {
|
|
147
129
|
return [];
|
|
@@ -150,11 +132,8 @@ function buildDictionaryQueryEntries(dataSources) {
|
|
|
150
132
|
}
|
|
151
133
|
case common_stellar_1.StellarHandlerKind.Operation: {
|
|
152
134
|
const filter = handler.filter;
|
|
153
|
-
if (
|
|
154
|
-
queryEntries.push(operationFilterToQueryEntry(filter
|
|
155
|
-
}
|
|
156
|
-
else if (filter.sourceAccount || filter.type) {
|
|
157
|
-
queryEntries.push(operationFilterToQueryEntry(filter, ds.options));
|
|
135
|
+
if (filter.sourceAccount || filter.type) {
|
|
136
|
+
queryEntries.push(operationFilterToQueryEntry(filter));
|
|
158
137
|
}
|
|
159
138
|
else {
|
|
160
139
|
return [];
|
|
@@ -163,23 +142,19 @@ function buildDictionaryQueryEntries(dataSources) {
|
|
|
163
142
|
}
|
|
164
143
|
case common_stellar_1.StellarHandlerKind.Effects: {
|
|
165
144
|
const filter = handler.filter;
|
|
166
|
-
if (
|
|
167
|
-
queryEntries.push(effectFilterToQueryEntry(filter
|
|
168
|
-
}
|
|
169
|
-
else if (filter.account || filter.type) {
|
|
170
|
-
queryEntries.push(effectFilterToQueryEntry(filter, ds.options));
|
|
145
|
+
if (filter.account || filter.type) {
|
|
146
|
+
queryEntries.push(effectFilterToQueryEntry(filter));
|
|
171
147
|
}
|
|
172
148
|
else {
|
|
173
149
|
return [];
|
|
174
150
|
}
|
|
175
151
|
break;
|
|
176
152
|
}
|
|
153
|
+
// TODO, event is not provided in current dictionary,
|
|
154
|
+
// https://github.com/subquery/stellar-subql-dictionaries/blob/main/schema.graphql
|
|
177
155
|
case common_stellar_1.StellarHandlerKind.Event: {
|
|
178
156
|
const filter = handler.filter;
|
|
179
|
-
if (ds.
|
|
180
|
-
queryEntries.push(eventFilterToQueryEntry(filter, ds.groupedOptions));
|
|
181
|
-
}
|
|
182
|
-
else if (ds.options?.address || filter.topics) {
|
|
157
|
+
if (ds.options?.address || filter.topics) {
|
|
183
158
|
queryEntries.push(eventFilterToQueryEntry(filter, ds.options));
|
|
184
159
|
}
|
|
185
160
|
else {
|
|
@@ -206,7 +181,7 @@ class StellarDictionaryV1 extends node_core_1.DictionaryV1 {
|
|
|
206
181
|
return dictionary;
|
|
207
182
|
}
|
|
208
183
|
buildDictionaryQueryEntries(dataSources) {
|
|
209
|
-
return
|
|
184
|
+
return buildDictionaryQueryEntries(dataSources);
|
|
210
185
|
}
|
|
211
186
|
}
|
|
212
187
|
exports.StellarDictionaryV1 = StellarDictionaryV1;
|
|
@@ -1 +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
|
+
{"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} from '@subql/types-core';\n\nimport { SorobanEventFilter, SubqlDatasource } from '@subql/types-stellar';\nimport { sortBy, uniqBy } from 'lodash';\nimport { SubqueryProject } from '../../../configure/SubqueryProject';\nimport { yargsOptions } from '../../../yargs';\nimport { DsProcessorService } from '../../ds-processor.service';\n\ntype GetDsProcessor = DsProcessorService['getDsProcessor'];\n\nconst logger = getLogger('DictionaryService');\nfunction transactionFilterToQueryEntry(\n filter: StellarTransactionFilter,\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): 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): 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}\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\n .map((option) => option.address)\n .filter((address): address is string => !!address);\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\n/*\n We can bring groupedOptions back once dictionary event options are supported\n And only event filter support options\n */\ntype GroupedSubqlProjectDs = SubqlDatasource & {\n groupedOptions?: SubqlStellarProcessorOptions[];\n};\n\nexport function buildDictionaryQueryEntries(\n dataSources: SubqlDatasource[],\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 (filter.account) {\n queryEntries.push(transactionFilterToQueryEntry(filter));\n } else {\n return [];\n }\n break;\n }\n case StellarHandlerKind.Operation: {\n const filter = handler.filter as StellarOperationFilter;\n if (filter.sourceAccount || filter.type) {\n queryEntries.push(operationFilterToQueryEntry(filter));\n } else {\n return [];\n }\n break;\n }\n case StellarHandlerKind.Effects: {\n const filter = handler.filter as StellarEffectFilter;\n if (filter.account || filter.type) {\n queryEntries.push(effectFilterToQueryEntry(filter));\n } else {\n return [];\n }\n break;\n }\n // TODO, event is not provided in current dictionary,\n // https://github.com/subquery/stellar-subql-dictionaries/blob/main/schema.graphql\n case StellarHandlerKind.Event: {\n const filter = handler.filter as SorobanEventFilter;\n 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 private getDsProcessor: GetDsProcessor,\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: GetDsProcessor,\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 buildDictionaryQueryEntries(dataSources);\n }\n}\n"]}
|
|
@@ -20,7 +20,6 @@ const common_stellar_1 = require("@subql/common-stellar");
|
|
|
20
20
|
const node_core_1 = require("@subql/node-core");
|
|
21
21
|
const class_transformer_1 = require("class-transformer");
|
|
22
22
|
const class_validator_1 = require("class-validator");
|
|
23
|
-
const SubqueryProject_1 = require("../configure/SubqueryProject");
|
|
24
23
|
const ds_processor_service_1 = require("./ds-processor.service");
|
|
25
24
|
let DynamicDsService = class DynamicDsService extends node_core_1.DynamicDsService {
|
|
26
25
|
dsProcessorService;
|
|
@@ -64,8 +63,7 @@ let DynamicDsService = class DynamicDsService extends node_core_1.DynamicDsServi
|
|
|
64
63
|
DynamicDsService = __decorate([
|
|
65
64
|
(0, common_1.Injectable)(),
|
|
66
65
|
__param(1, (0, common_1.Inject)('ISubqueryProject')),
|
|
67
|
-
__metadata("design:paramtypes", [ds_processor_service_1.DsProcessorService,
|
|
68
|
-
SubqueryProject_1.SubqueryProject])
|
|
66
|
+
__metadata("design:paramtypes", [ds_processor_service_1.DsProcessorService, Object])
|
|
69
67
|
], DynamicDsService);
|
|
70
68
|
exports.DynamicDsService = DynamicDsService;
|
|
71
69
|
//# sourceMappingURL=dynamic-ds.service.js.map
|
|
@@ -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;AAE1B,yDAAiD;AACjD,qDAA+C;
|
|
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;AAE1B,yDAAiD;AACjD,qDAA+C;AAE/C,iEAA4D;AAGrD,IAAM,gBAAgB,GAAtB,MAAM,gBAAiB,SAAQ,4BAGrC;IAEoB;IADnB,YACmB,kBAAsC,EAC3B,OAAwB;QAEpD,KAAK,CAAC,OAAO,CAAC,CAAC;QAHE,uBAAkB,GAAlB,kBAAkB,CAAoB;IAIzD,CAAC;IAES,KAAK,CAAC,aAAa,CAC3B,MAAwB;QAExB,MAAM,KAAK,GAAG,IAAI,CAAC,WAAW,CAC5B,MAAM,CAAC,YAAY,EACnB,MAAM,CAAC,UAAU,CAClB,CAAC;QAEF,IAAI;YACF,IAAI,IAAA,2BAAU,EAAC,KAAK,CAAC,EAAE;gBACrB,KAAK,CAAC,SAAS,CAAC,OAAO,GAAG;oBACxB,GAAG,KAAK,CAAC,SAAS,CAAC,OAAO;oBAC1B,GAAG,MAAM,CAAC,IAAI;iBACf,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,GAAG;oBACd,GAAG,KAAK,CAAC,OAAO;oBAChB,GAAG,MAAM,CAAC,IAAI;iBACf,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,CAAM,EAAE;YACf,MAAM,IAAI,KAAK,CAAC,0CAA0C,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC;SACxE;IACH,CAAC;CACF,CAAA;AAnDY,gBAAgB;IAD5B,IAAA,mBAAU,GAAE;IAOR,WAAA,IAAA,eAAM,EAAC,kBAAkB,CAAC,CAAA;qCADU,yCAAkB;GAL9C,gBAAgB,CAmD5B;AAnDY,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 { SubqlDatasource } from '@subql/types-stellar';\nimport { plainToClass } from 'class-transformer';\nimport { validateSync } from 'class-validator';\nimport { SubqueryProject } from '../configure/SubqueryProject';\nimport { DsProcessorService } from './ds-processor.service';\n\n@Injectable()\nexport class DynamicDsService extends BaseDynamicDsService<\n SubqlDatasource,\n SubqueryProject\n> {\n constructor(\n private readonly dsProcessorService: DsProcessorService,\n @Inject('ISubqueryProject') project: SubqueryProject,\n ) {\n super(project);\n }\n\n protected async getDatasource(\n params: DatasourceParams,\n ): Promise<SubqlDatasource> {\n const dsObj = this.getTemplate<SubqlDatasource>(\n params.templateName,\n params.startBlock,\n );\n\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: any) {\n throw new Error(`Unable to create dynamic datasource.\\n ${e.message}`);\n }\n }\n}\n"]}
|
|
@@ -25,14 +25,12 @@ let FetchModule = class FetchModule {
|
|
|
25
25
|
};
|
|
26
26
|
FetchModule = __decorate([
|
|
27
27
|
(0, common_1.Module)({
|
|
28
|
+
imports: [node_core_1.CoreModule],
|
|
28
29
|
providers: [
|
|
29
|
-
node_core_1.InMemoryCacheService,
|
|
30
|
-
node_core_1.StoreService,
|
|
31
|
-
node_core_1.StoreCacheService,
|
|
32
30
|
{
|
|
33
31
|
provide: node_core_1.ApiService,
|
|
34
|
-
useFactory: async (project, projectUpgradeService, connectionPoolService, eventEmitter) => {
|
|
35
|
-
const apiService = new api_service_stellar_1.StellarApiService(project,
|
|
32
|
+
useFactory: async (project, projectUpgradeService, connectionPoolService, eventEmitter, nodeConfig) => {
|
|
33
|
+
const apiService = new api_service_stellar_1.StellarApiService(project, connectionPoolService, eventEmitter, nodeConfig);
|
|
36
34
|
await apiService.init();
|
|
37
35
|
return apiService;
|
|
38
36
|
},
|
|
@@ -41,11 +39,10 @@ FetchModule = __decorate([
|
|
|
41
39
|
'IProjectUpgradeService',
|
|
42
40
|
node_core_1.ConnectionPoolService,
|
|
43
41
|
event_emitter_1.EventEmitter2,
|
|
42
|
+
node_core_1.NodeConfig,
|
|
44
43
|
],
|
|
45
44
|
},
|
|
46
45
|
indexer_manager_1.IndexerManager,
|
|
47
|
-
node_core_1.ConnectionPoolService,
|
|
48
|
-
node_core_1.ConnectionPoolStateManager,
|
|
49
46
|
{
|
|
50
47
|
provide: 'IBlockDispatcher',
|
|
51
48
|
useFactory: (nodeConfig, eventEmitter, projectService, projectUpgradeService, apiService, indexerManager, cacheService, storeService, storeCacheService, poiSyncService, project, dynamicDsService, unfinalizedBlocks, connectionPoolState, monitorService) => nodeConfig.workers
|
|
@@ -70,22 +67,15 @@ FetchModule = __decorate([
|
|
|
70
67
|
],
|
|
71
68
|
},
|
|
72
69
|
fetch_service_1.FetchService,
|
|
73
|
-
node_core_1.IndexingBenchmarkService,
|
|
74
|
-
node_core_1.PoiBenchmarkService,
|
|
75
70
|
dictionary_1.StellarDictionaryService,
|
|
76
|
-
node_core_1.SandboxService,
|
|
77
71
|
ds_processor_service_1.DsProcessorService,
|
|
78
72
|
dynamic_ds_service_1.DynamicDsService,
|
|
79
|
-
node_core_1.PoiService,
|
|
80
|
-
node_core_1.PoiSyncService,
|
|
81
73
|
{
|
|
82
74
|
useClass: project_service_1.ProjectService,
|
|
83
75
|
provide: 'IProjectService',
|
|
84
76
|
},
|
|
85
77
|
unfinalizedBlocks_service_1.UnfinalizedBlocksService,
|
|
86
|
-
node_core_1.MonitorService,
|
|
87
78
|
],
|
|
88
|
-
exports: [node_core_1.StoreService, node_core_1.StoreCacheService, node_core_1.MonitorService, node_core_1.PoiService],
|
|
89
79
|
})
|
|
90
80
|
], FetchModule);
|
|
91
81
|
exports.FetchModule = FetchModule;
|
|
@@ -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,
|
|
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,gDAc0B;AAG1B,wEAAmE;AACnE,uDAG2B;AAC3B,6CAAwD;AACxD,iEAA4D;AAC5D,6DAAwD;AACxD,mDAA+C;AAC/C,uDAAmD;AACnD,uDAAmD;AACnD,2EAAuE;AA4GhE,IAAM,WAAW,GAAjB,MAAM,WAAW;CAAG,CAAA;AAAd,WAAW;IA1GvB,IAAA,eAAM,EAAC;QACN,OAAO,EAAE,CAAC,sBAAU,CAAC;QACrB,SAAS,EAAE;YACT;gBACE,OAAO,EAAE,sBAAU;gBACnB,UAAU,EAAE,KAAK,EACf,OAAwB,EACxB,qBAA4C,EAC5C,qBAAkE,EAClE,YAA2B,EAC3B,UAAsB,EACtB,EAAE;oBACF,MAAM,UAAU,GAAG,IAAI,uCAAiB,CACtC,OAAO,EACP,qBAAqB,EACrB,YAAY,EACZ,UAAU,CACX,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;oBACb,sBAAU;iBACX;aACF;YACD,gCAAc;YACd;gBACE,OAAO,EAAE,kBAAkB;gBAC3B,UAAU,EAAE,CACV,UAAsB,EACtB,YAA2B,EAC3B,cAA8B,EAC9B,qBAA6C,EAC7C,UAAsB,EACtB,cAA8B,EAC9B,YAAkC,EAClC,YAA0B,EAC1B,iBAAoC,EACpC,cAA8B,EAC9B,OAAwB,EACxB,gBAAkC,EAClC,iBAA2C,EAC3C,mBAAqE,EACrE,cAA+B,EAC/B,EAAE,CACF,UAAU,CAAC,OAAO;oBAChB,CAAC,CAAC,IAAI,8CAA4B,CAC9B,UAAU,EACV,YAAY,EACZ,cAAc,EACd,qBAAqB,EACrB,YAAY,EACZ,YAAY,EACZ,iBAAiB,EACjB,cAAc,EACd,OAAO,EACP,gBAAgB,EAChB,iBAAiB,EACjB,mBAAmB,EACnB,cAAc,CACf;oBACH,CAAC,CAAC,IAAI,wCAAsB,CACxB,UAAU,EACV,UAAU,EACV,cAAc,EACd,YAAY,EACZ,cAAc,EACd,qBAAqB,EACrB,YAAY,EACZ,iBAAiB,EACjB,cAAc,EACd,OAAO,CACR;gBACP,MAAM,EAAE;oBACN,sBAAU;oBACV,6BAAa;oBACb,iBAAiB;oBACjB,wBAAwB;oBACxB,sBAAU;oBACV,gCAAc;oBACd,gCAAoB;oBACpB,wBAAY;oBACZ,6BAAiB;oBACjB,0BAAc;oBACd,kBAAkB;oBAClB,qCAAgB;oBAChB,oDAAwB;oBACxB,sCAA0B;oBAC1B,0BAAc;iBACf;aACF;YACD,4BAAY;YACZ,qCAAwB;YACxB,yCAAkB;YAClB,qCAAgB;YAChB;gBACE,QAAQ,EAAE,gCAAc;gBACxB,OAAO,EAAE,iBAAiB;aAC3B;YACD,oDAAwB;SACzB;KACF,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 StoreService,\n PoiSyncService,\n ApiService,\n ConnectionPoolService,\n StoreCacheService,\n ConnectionPoolStateManager,\n NodeConfig,\n IProjectUpgradeService,\n ProjectUpgradeService,\n InMemoryCacheService,\n SandboxService,\n MonitorService,\n CoreModule,\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 { UnfinalizedBlocksService } from './unfinalizedBlocks.service';\n\n@Module({\n imports: [CoreModule],\n providers: [\n {\n provide: ApiService,\n useFactory: async (\n project: SubqueryProject,\n projectUpgradeService: ProjectUpgradeService,\n connectionPoolService: ConnectionPoolService<StellarApiConnection>,\n eventEmitter: EventEmitter2,\n nodeConfig: NodeConfig,\n ) => {\n const apiService = new StellarApiService(\n project,\n connectionPoolService,\n eventEmitter,\n nodeConfig,\n );\n await apiService.init();\n return apiService;\n },\n inject: [\n 'ISubqueryProject',\n 'IProjectUpgradeService',\n ConnectionPoolService,\n EventEmitter2,\n NodeConfig,\n ],\n },\n IndexerManager,\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 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 monitorService?: MonitorService,\n ) =>\n nodeConfig.workers\n ? new WorkerBlockDispatcherService(\n nodeConfig,\n eventEmitter,\n projectService,\n projectUpgradeService,\n cacheService,\n storeService,\n storeCacheService,\n poiSyncService,\n project,\n dynamicDsService,\n unfinalizedBlocks,\n connectionPoolState,\n monitorService,\n )\n : new BlockDispatcherService(\n apiService,\n nodeConfig,\n indexerManager,\n eventEmitter,\n projectService,\n projectUpgradeService,\n storeService,\n storeCacheService,\n poiSyncService,\n project,\n ),\n inject: [\n NodeConfig,\n EventEmitter2,\n 'IProjectService',\n 'IProjectUpgradeService',\n ApiService,\n IndexerManager,\n InMemoryCacheService,\n StoreService,\n StoreCacheService,\n PoiSyncService,\n 'ISubqueryProject',\n DynamicDsService,\n UnfinalizedBlocksService,\n ConnectionPoolStateManager,\n MonitorService,\n ],\n },\n FetchService,\n StellarDictionaryService,\n DsProcessorService,\n DynamicDsService,\n {\n useClass: ProjectService,\n provide: 'IProjectService',\n },\n UnfinalizedBlocksService,\n ],\n})\nexport class FetchModule {}\n"]}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { EventEmitter2 } from '@nestjs/event-emitter';
|
|
2
2
|
import { SchedulerRegistry } from '@nestjs/schedule';
|
|
3
|
-
import { NodeConfig, BaseFetchService, ApiService } from '@subql/node-core';
|
|
3
|
+
import { NodeConfig, BaseFetchService, ApiService, Header, StoreCacheService } from '@subql/node-core';
|
|
4
4
|
import { StellarBlock, SubqlDatasource } from '@subql/types-stellar';
|
|
5
5
|
import { SubqueryProject } from '../configure/SubqueryProject';
|
|
6
6
|
import { StellarApi } from '../stellar';
|
|
@@ -10,10 +10,9 @@ import { ProjectService } from './project.service';
|
|
|
10
10
|
import { UnfinalizedBlocksService } from './unfinalizedBlocks.service';
|
|
11
11
|
export declare class FetchService extends BaseFetchService<SubqlDatasource, IStellarBlockDispatcher, StellarBlock> {
|
|
12
12
|
private apiService;
|
|
13
|
-
|
|
14
|
-
constructor(apiService: ApiService, nodeConfig: NodeConfig, projectService: ProjectService, project: SubqueryProject, blockDispatcher: IStellarBlockDispatcher, dictionaryService: StellarDictionaryService, unfinalizedBlocksService: UnfinalizedBlocksService, eventEmitter: EventEmitter2, schedulerRegistry: SchedulerRegistry);
|
|
13
|
+
constructor(apiService: ApiService, nodeConfig: NodeConfig, projectService: ProjectService, project: SubqueryProject, blockDispatcher: IStellarBlockDispatcher, dictionaryService: StellarDictionaryService, unfinalizedBlocksService: UnfinalizedBlocksService, eventEmitter: EventEmitter2, schedulerRegistry: SchedulerRegistry, storeCacheService: StoreCacheService);
|
|
15
14
|
get api(): StellarApi;
|
|
16
|
-
protected
|
|
15
|
+
protected getFinalizedHeader(): Promise<Header>;
|
|
17
16
|
protected getBestHeight(): Promise<number>;
|
|
18
17
|
protected getChainInterval(): Promise<number>;
|
|
19
18
|
protected getChainId(): Promise<string>;
|
|
@@ -20,7 +20,6 @@ const event_emitter_1 = require("@nestjs/event-emitter");
|
|
|
20
20
|
const schedule_1 = require("@nestjs/schedule");
|
|
21
21
|
const common_stellar_1 = require("@subql/common-stellar");
|
|
22
22
|
const node_core_1 = require("@subql/node-core");
|
|
23
|
-
const SubqueryProject_1 = require("../configure/SubqueryProject");
|
|
24
23
|
const utils_stellar_1 = require("../stellar/utils.stellar");
|
|
25
24
|
const dictionary_1 = require("./dictionary");
|
|
26
25
|
const project_service_1 = require("./project.service");
|
|
@@ -29,20 +28,16 @@ const BLOCK_TIME_VARIANCE = 5000;
|
|
|
29
28
|
const INTERVAL_PERCENT = 0.9;
|
|
30
29
|
let FetchService = class FetchService extends node_core_1.BaseFetchService {
|
|
31
30
|
apiService;
|
|
32
|
-
unfinalizedBlocksService
|
|
33
|
-
|
|
34
|
-
super(nodeConfig, projectService, project.network, blockDispatcher, dictionaryService, eventEmitter, schedulerRegistry);
|
|
31
|
+
constructor(apiService, nodeConfig, projectService, project, blockDispatcher, dictionaryService, unfinalizedBlocksService, eventEmitter, schedulerRegistry, storeCacheService) {
|
|
32
|
+
super(nodeConfig, projectService, project.network, blockDispatcher, dictionaryService, eventEmitter, schedulerRegistry, unfinalizedBlocksService, storeCacheService);
|
|
35
33
|
this.apiService = apiService;
|
|
36
|
-
this.unfinalizedBlocksService = unfinalizedBlocksService;
|
|
37
34
|
}
|
|
38
35
|
get api() {
|
|
39
36
|
return this.apiService.unsafeApi;
|
|
40
37
|
}
|
|
41
|
-
async
|
|
42
|
-
const
|
|
43
|
-
|
|
44
|
-
this.unfinalizedBlocksService.registerFinalizedBlock(header);
|
|
45
|
-
return header.blockHeight;
|
|
38
|
+
async getFinalizedHeader() {
|
|
39
|
+
const block = await this.api.getFinalizedBlock();
|
|
40
|
+
return (0, utils_stellar_1.stellarBlockToHeader)(block);
|
|
46
41
|
}
|
|
47
42
|
async getBestHeight() {
|
|
48
43
|
return this.api.getBestBlockHeight();
|
|
@@ -73,11 +68,11 @@ FetchService = __decorate([
|
|
|
73
68
|
__param(4, (0, common_1.Inject)('IBlockDispatcher')),
|
|
74
69
|
__metadata("design:paramtypes", [node_core_1.ApiService,
|
|
75
70
|
node_core_1.NodeConfig,
|
|
76
|
-
project_service_1.ProjectService,
|
|
77
|
-
SubqueryProject_1.SubqueryProject, Object, dictionary_1.StellarDictionaryService,
|
|
71
|
+
project_service_1.ProjectService, Object, Object, dictionary_1.StellarDictionaryService,
|
|
78
72
|
unfinalizedBlocks_service_1.UnfinalizedBlocksService,
|
|
79
73
|
event_emitter_1.EventEmitter2,
|
|
80
|
-
schedule_1.SchedulerRegistry
|
|
74
|
+
schedule_1.SchedulerRegistry,
|
|
75
|
+
node_core_1.StoreCacheService])
|
|
81
76
|
], FetchService);
|
|
82
77
|
exports.FetchService = FetchService;
|
|
83
78
|
//# sourceMappingURL=fetch.service.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fetch.service.js","sourceRoot":"","sources":["../../src/indexer/fetch.service.ts"],"names":[],"mappings":";AAAA,8DAA8D;AAC9D,mCAAmC;;;;;;;;;;;;;;;AAEnC,2CAAoD;AACpD,yDAAsD;AACtD,+CAAqD;AAErD,0DAAuE;AACvE,
|
|
1
|
+
{"version":3,"file":"fetch.service.js","sourceRoot":"","sources":["../../src/indexer/fetch.service.ts"],"names":[],"mappings":";AAAA,8DAA8D;AAC9D,mCAAmC;;;;;;;;;;;;;;;AAEnC,2CAAoD;AACpD,yDAAsD;AACtD,+CAAqD;AAErD,0DAAuE;AACvE,gDAO0B;AAI1B,4DAA8E;AAE9E,6CAAwD;AACxD,uDAAmD;AACnD,2EAAuE;AAEvE,MAAM,mBAAmB,GAAG,IAAI,CAAC;AAEjC,MAAM,gBAAgB,GAAG,GAAG,CAAC;AAGtB,IAAM,YAAY,GAAlB,MAAM,YAAa,SAAQ,4BAIjC;IAEW;IADV,YACU,UAAsB,EAC9B,UAAsB,EACK,cAA8B,EAC7B,OAAwB,EAEpD,eAAwC,EACxC,iBAA2C,EAC3C,wBAAkD,EAClD,YAA2B,EAC3B,iBAAoC,EACpC,iBAAoC;QAEpC,KAAK,CACH,UAAU,EACV,cAAc,EACd,OAAO,CAAC,OAAO,EACf,eAAe,EACf,iBAAiB,EACjB,YAAY,EACZ,iBAAiB,EACjB,wBAAwB,EACxB,iBAAiB,CAClB,CAAC;QAtBM,eAAU,GAAV,UAAU,CAAY;IAuBhC,CAAC;IAED,IAAI,GAAG;QACL,OAAO,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC;IACnC,CAAC;IAES,KAAK,CAAC,kBAAkB;QAChC,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC,iBAAiB,EAAE,CAAC;QACjD,OAAO,IAAA,oCAAoB,EAAC,KAAK,CAAC,CAAC;IACrC,CAAC;IAES,KAAK,CAAC,aAAa;QAC3B,OAAO,IAAI,CAAC,GAAG,CAAC,kBAAkB,EAAE,CAAC;IACvC,CAAC;IAED,4DAA4D;IAClD,KAAK,CAAC,gBAAgB;QAC9B,MAAM,cAAc,GAAG,IAAA,4BAAY,EAAC,IAAI,CAAC,GAAG,CAAC,GAAG,gBAAgB,CAAC;QAEjE,OAAO,IAAI,CAAC,GAAG,CAAC,mBAAmB,EAAE,cAAc,CAAC,CAAC;IACvD,CAAC;IAES,KAAK,CAAC,UAAU;QACxB,OAAO,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,UAAU,EAAE,CAAC,QAAQ,EAAE,CAAC,CAAC;IAC3D,CAAC;IAES,UAAU;QAClB,OAAO,IAAA,sBAAU,EACf,IAAI,CAAC,cAAc,CAAC,iBAAiB,EAAE,EACvC,2BAAU,EACV,mCAAkB,CAAC,KAAK,CACzB,CAAC;IACJ,CAAC;IAES,KAAK,CAAC,mBAAmB;QACjC,MAAM,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;IACjE,CAAC;IAES,KAAK,CAAC,WAAW;QACzB,2CAA2C;QAC3C,OAAO,OAAO,CAAC,OAAO,EAAE,CAAC;IAC3B,CAAC;CACF,CAAA;AAvEY,YAAY;IADxB,IAAA,mBAAU,GAAE;IASR,WAAA,IAAA,eAAM,EAAC,iBAAiB,CAAC,CAAA;IACzB,WAAA,IAAA,eAAM,EAAC,kBAAkB,CAAC,CAAA;IAC1B,WAAA,IAAA,eAAM,EAAC,kBAAkB,CAAC,CAAA;qCAJP,sBAAU;QAClB,sBAAU;QACqB,gCAAc,kBAItC,qCAAwB;QACjB,oDAAwB;QACpC,6BAAa;QACR,4BAAiB;QACjB,6BAAiB;GAhB3B,YAAY,CAuExB;AAvEY,oCAAY","sourcesContent":["// Copyright 2020-2024 SubQuery Pte Ltd authors & contributors\n// SPDX-License-Identifier: GPL-3.0\n\nimport { Inject, Injectable } from '@nestjs/common';\nimport { EventEmitter2 } from '@nestjs/event-emitter';\nimport { SchedulerRegistry } from '@nestjs/schedule';\n\nimport { StellarHandlerKind, isCustomDs } from '@subql/common-stellar';\nimport {\n NodeConfig,\n BaseFetchService,\n ApiService,\n getModulos,\n Header,\n StoreCacheService,\n} from '@subql/node-core';\nimport { StellarBlock, SubqlDatasource } from '@subql/types-stellar';\nimport { SubqueryProject } from '../configure/SubqueryProject';\nimport { StellarApi } from '../stellar';\nimport { calcInterval, stellarBlockToHeader } from '../stellar/utils.stellar';\nimport { IStellarBlockDispatcher } from './blockDispatcher';\nimport { StellarDictionaryService } from './dictionary';\nimport { ProjectService } from './project.service';\nimport { UnfinalizedBlocksService } from './unfinalizedBlocks.service';\n\nconst BLOCK_TIME_VARIANCE = 5000;\n\nconst INTERVAL_PERCENT = 0.9;\n\n@Injectable()\nexport class FetchService extends BaseFetchService<\n SubqlDatasource,\n IStellarBlockDispatcher,\n StellarBlock\n> {\n constructor(\n private apiService: ApiService,\n nodeConfig: NodeConfig,\n @Inject('IProjectService') projectService: ProjectService,\n @Inject('ISubqueryProject') project: SubqueryProject,\n @Inject('IBlockDispatcher')\n blockDispatcher: IStellarBlockDispatcher,\n dictionaryService: StellarDictionaryService,\n unfinalizedBlocksService: UnfinalizedBlocksService,\n eventEmitter: EventEmitter2,\n schedulerRegistry: SchedulerRegistry,\n storeCacheService: StoreCacheService,\n ) {\n super(\n nodeConfig,\n projectService,\n project.network,\n blockDispatcher,\n dictionaryService,\n eventEmitter,\n schedulerRegistry,\n unfinalizedBlocksService,\n storeCacheService,\n );\n }\n\n get api(): StellarApi {\n return this.apiService.unsafeApi;\n }\n\n protected async getFinalizedHeader(): Promise<Header> {\n const block = await this.api.getFinalizedBlock();\n return stellarBlockToHeader(block);\n }\n\n protected async getBestHeight(): Promise<number> {\n return this.api.getBestBlockHeight();\n }\n\n // eslint-disable-next-line @typescript-eslint/require-await\n protected async getChainInterval(): Promise<number> {\n const CHAIN_INTERVAL = calcInterval(this.api) * INTERVAL_PERCENT;\n\n return Math.min(BLOCK_TIME_VARIANCE, CHAIN_INTERVAL);\n }\n\n protected async getChainId(): Promise<string> {\n return Promise.resolve(this.api.getChainId().toString());\n }\n\n protected getModulos(): number[] {\n return getModulos(\n this.projectService.getAllDataSources(),\n isCustomDs,\n StellarHandlerKind.Block,\n );\n }\n\n protected async initBlockDispatcher(): Promise<void> {\n await this.blockDispatcher.init(this.resetForNewDs.bind(this));\n }\n\n protected async preLoopHook(): Promise<void> {\n // Stellar doesn't need to do anything here\n return Promise.resolve();\n }\n}\n"]}
|
|
@@ -7,11 +7,11 @@ import { DsProcessorService } from './ds-processor.service';
|
|
|
7
7
|
import { DynamicDsService } from './dynamic-ds.service';
|
|
8
8
|
import { ProjectService } from './project.service';
|
|
9
9
|
import { UnfinalizedBlocksService } from './unfinalizedBlocks.service';
|
|
10
|
-
export declare class IndexerManager extends BaseIndexerManager<StellarApi, SafeStellarProvider, StellarBlockWrapper, ApiService, SubqlStellarDataSource, SubqlStellarCustomDataSource, typeof FilterTypeMap, typeof ProcessorTypeMap, StellarRuntimeHandlerInputMap> {
|
|
10
|
+
export declare class IndexerManager extends BaseIndexerManager<StellarApi, SafeStellarProvider | null, StellarBlockWrapper, ApiService, SubqlStellarDataSource, SubqlStellarCustomDataSource, typeof FilterTypeMap, typeof ProcessorTypeMap, StellarRuntimeHandlerInputMap> {
|
|
11
11
|
private projectService;
|
|
12
12
|
protected isRuntimeDs: typeof isRuntimeDs;
|
|
13
13
|
protected isCustomDs: typeof isCustomDs;
|
|
14
|
-
constructor(apiService: ApiService, nodeConfig: NodeConfig, sandboxService: SandboxService<SafeStellarProvider, StellarApi>, dsProcessorService: DsProcessorService, dynamicDsService: DynamicDsService, unfinalizedBlocksService: UnfinalizedBlocksService, projectService: ProjectService);
|
|
14
|
+
constructor(apiService: ApiService, nodeConfig: NodeConfig, sandboxService: SandboxService<SafeStellarProvider | null, StellarApi>, dsProcessorService: DsProcessorService, dynamicDsService: DynamicDsService, unfinalizedBlocksService: UnfinalizedBlocksService, projectService: ProjectService);
|
|
15
15
|
start(): Promise<void>;
|
|
16
16
|
indexBlock(block: IBlock<StellarBlockWrapper>, dataSources: SubqlStellarDataSource[]): Promise<ProcessBlockResponse>;
|
|
17
17
|
private getApi;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"indexer.manager.js","sourceRoot":"","sources":["../../src/indexer/indexer.manager.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 { Inject, Injectable } from '@nestjs/common';\nimport {\n isCustomDs,\n isRuntimeDs,\n SubqlStellarCustomDataSource,\n StellarHandlerKind,\n StellarRuntimeHandlerInputMap,\n SubqlStellarDataSource,\n isBlockHandlerProcessor,\n isTransactionHandlerProcessor,\n isOperationHandlerProcessor,\n isEffectHandlerProcessor,\n isEventHandlerProcessor,\n isSorobanTransactionHandlerProcessor,\n} from '@subql/common-stellar';\nimport {\n NodeConfig,\n getLogger,\n profiler,\n IndexerSandbox,\n ProcessBlockResponse,\n BaseIndexerManager,\n ApiService,\n IBlock,\n SandboxService,\n} from '@subql/node-core';\nimport {\n StellarBlockWrapper,\n SubqlDatasource,\n StellarTransaction,\n StellarOperation,\n StellarEffect,\n StellarBlock,\n StellarBlockFilter,\n StellarTransactionFilter,\n StellarOperationFilter,\n StellarEffectFilter,\n SorobanEvent,\n SorobanEventFilter,\n} from '@subql/types-stellar';\nimport { StellarApi } from '../stellar';\nimport { StellarBlockWrapped } from '../stellar/block.stellar';\nimport SafeStellarProvider from '../stellar/safe-api';\nimport { DsProcessorService } from './ds-processor.service';\nimport { DynamicDsService } from './dynamic-ds.service';\nimport { ProjectService } from './project.service';\nimport { UnfinalizedBlocksService } from './unfinalizedBlocks.service';\n\nconst logger = getLogger('indexer');\n\n@Injectable()\nexport class IndexerManager extends BaseIndexerManager<\n StellarApi,\n SafeStellarProvider,\n StellarBlockWrapper,\n ApiService,\n SubqlStellarDataSource,\n SubqlStellarCustomDataSource,\n typeof FilterTypeMap,\n typeof ProcessorTypeMap,\n StellarRuntimeHandlerInputMap\n> {\n protected isRuntimeDs = isRuntimeDs;\n protected isCustomDs = isCustomDs;\n\n constructor(\n apiService: ApiService,\n nodeConfig: NodeConfig,\n sandboxService: SandboxService<SafeStellarProvider, StellarApi>,\n dsProcessorService: DsProcessorService,\n dynamicDsService: DynamicDsService,\n unfinalizedBlocksService: UnfinalizedBlocksService,\n @Inject('IProjectService') private projectService: ProjectService,\n ) {\n super(\n apiService,\n nodeConfig,\n sandboxService,\n dsProcessorService,\n dynamicDsService,\n unfinalizedBlocksService,\n FilterTypeMap,\n ProcessorTypeMap,\n );\n }\n\n async start(): Promise<void> {\n await this.projectService.init();\n logger.info('indexer manager started');\n }\n\n @profiler()\n async indexBlock(\n block: IBlock<StellarBlockWrapper>,\n dataSources: SubqlStellarDataSource[],\n ): Promise<ProcessBlockResponse> {\n return super.internalIndexBlock(block, dataSources, () =>\n this.getApi(block.block),\n );\n }\n\n // eslint-disable-next-line @typescript-eslint/require-await\n private async getApi(\n block: StellarBlockWrapper,\n ): Promise<SafeStellarProvider> {\n // return this.apiService.safeApi(block.block.sequence);\n return null;\n }\n\n protected async indexBlockData(\n { block, effects, operations, transactions }: StellarBlockWrapper,\n dataSources: SubqlDatasource[],\n getVM: (d: SubqlDatasource) => Promise<IndexerSandbox>,\n ): Promise<void> {\n await this.indexBlockContent(block, dataSources, getVM);\n\n for (const tx of transactions) {\n await this.indexTransaction(tx, dataSources, getVM);\n\n for (const operation of tx.operations) {\n await this.indexOperation(operation, dataSources, getVM);\n\n for (const effect of operation.effects) {\n await this.indexEffect(effect, dataSources, getVM);\n }\n for (const event of operation.events) {\n await this.indexEvent(event, dataSources, getVM);\n }\n }\n }\n }\n\n private async indexBlockContent(\n block: StellarBlock,\n dataSources: SubqlDatasource[],\n getVM: (d: SubqlDatasource) => Promise<IndexerSandbox>,\n ): Promise<void> {\n for (const ds of dataSources) {\n await this.indexData(StellarHandlerKind.Block, block, ds, getVM);\n }\n }\n\n private async indexTransaction(\n transaction: StellarTransaction,\n dataSources: SubqlDatasource[],\n getVM: (d: SubqlDatasource) => Promise<IndexerSandbox>,\n ): Promise<void> {\n for (const ds of dataSources) {\n await this.indexData(\n StellarHandlerKind.Transaction,\n transaction,\n ds,\n getVM,\n );\n\n if (\n transaction.operations.some(\n (op) => op.type.toString() === 'invoke_host_function',\n )\n ) {\n await this.indexData(\n StellarHandlerKind.SorobanTransaction,\n transaction,\n ds,\n getVM,\n );\n }\n }\n }\n\n private async indexOperation(\n operation: StellarOperation,\n dataSources: SubqlDatasource[],\n getVM: (d: SubqlDatasource) => Promise<IndexerSandbox>,\n ): Promise<void> {\n for (const ds of dataSources) {\n await this.indexData(StellarHandlerKind.Operation, operation, ds, getVM);\n }\n }\n\n private async indexEffect(\n effect: StellarEffect,\n dataSources: SubqlDatasource[],\n getVM: (d: SubqlDatasource) => Promise<IndexerSandbox>,\n ): Promise<void> {\n for (const ds of dataSources) {\n await this.indexData(StellarHandlerKind.Effects, effect, ds, getVM);\n }\n }\n\n private async indexEvent(\n event: SorobanEvent,\n dataSources: SubqlDatasource[],\n getVM: (d: SubqlDatasource) => Promise<IndexerSandbox>,\n ): Promise<void> {\n for (const ds of dataSources) {\n await this.indexData(StellarHandlerKind.Event, event, ds, getVM);\n }\n }\n\n protected async prepareFilteredData<T = any>(\n kind: StellarHandlerKind,\n data: T,\n ds: SubqlDatasource,\n ): Promise<T> {\n return Promise.resolve(data);\n }\n}\n\ntype ProcessorTypeMap = {\n [StellarHandlerKind.Block]: typeof isBlockHandlerProcessor;\n [StellarHandlerKind.Transaction]: typeof isTransactionHandlerProcessor;\n [StellarHandlerKind.SorobanTransaction]: typeof isSorobanTransactionHandlerProcessor;\n [StellarHandlerKind.Operation]: typeof isOperationHandlerProcessor;\n [StellarHandlerKind.Effects]: typeof isEffectHandlerProcessor;\n [StellarHandlerKind.Event]: typeof isEventHandlerProcessor;\n};\n\nconst ProcessorTypeMap = {\n [StellarHandlerKind.Block]: isBlockHandlerProcessor,\n [StellarHandlerKind.Transaction]: isTransactionHandlerProcessor,\n [StellarHandlerKind.SorobanTransaction]: isSorobanTransactionHandlerProcessor,\n [StellarHandlerKind.Operation]: isOperationHandlerProcessor,\n [StellarHandlerKind.Effects]: isEffectHandlerProcessor,\n [StellarHandlerKind.Event]: isEventHandlerProcessor,\n};\n\nconst FilterTypeMap = {\n [StellarHandlerKind.Block]: (\n data: StellarBlock,\n filter: StellarBlockFilter,\n ds: SubqlStellarDataSource,\n ) =>\n StellarBlockWrapped.filterBlocksProcessor(\n data,\n filter,\n ds.options?.address,\n ),\n\n [StellarHandlerKind.Transaction]: (\n data: StellarTransaction,\n filter: StellarTransactionFilter,\n ds: SubqlStellarDataSource,\n ) =>\n StellarBlockWrapped.filterTransactionProcessor(\n data,\n filter,\n ds.options?.address,\n ),\n\n [StellarHandlerKind.SorobanTransaction]: (\n data: StellarTransaction,\n filter: StellarTransactionFilter,\n ds: SubqlStellarDataSource,\n ) =>\n StellarBlockWrapped.filterTransactionProcessor(\n data,\n filter,\n ds.options?.address,\n ),\n\n [StellarHandlerKind.Operation]: (\n data: StellarOperation,\n filter: StellarOperationFilter,\n ds: SubqlStellarDataSource,\n ) =>\n StellarBlockWrapped.filterOperationProcessor(\n data,\n filter,\n ds.options?.address,\n ),\n\n [StellarHandlerKind.Effects]: (\n data: StellarEffect,\n filter: StellarEffectFilter,\n ds: SubqlStellarDataSource,\n ) =>\n StellarBlockWrapped.filterEffectProcessor(\n data,\n filter,\n ds.options?.address,\n ),\n\n [StellarHandlerKind.Event]: (\n data: SorobanEvent,\n filter: SorobanEventFilter,\n ds: SubqlStellarDataSource,\n ) =>\n StellarBlockWrapped.filterEventProcessor(data, filter, ds.options?.address),\n};\n"]}
|
|
1
|
+
{"version":3,"file":"indexer.manager.js","sourceRoot":"","sources":["../../src/indexer/indexer.manager.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 { Inject, Injectable } from '@nestjs/common';\nimport {\n isCustomDs,\n isRuntimeDs,\n SubqlStellarCustomDataSource,\n StellarHandlerKind,\n StellarRuntimeHandlerInputMap,\n SubqlStellarDataSource,\n isBlockHandlerProcessor,\n isTransactionHandlerProcessor,\n isOperationHandlerProcessor,\n isEffectHandlerProcessor,\n isEventHandlerProcessor,\n isSorobanTransactionHandlerProcessor,\n} from '@subql/common-stellar';\nimport {\n NodeConfig,\n getLogger,\n profiler,\n IndexerSandbox,\n ProcessBlockResponse,\n BaseIndexerManager,\n ApiService,\n IBlock,\n SandboxService,\n} from '@subql/node-core';\nimport {\n StellarBlockWrapper,\n SubqlDatasource,\n StellarTransaction,\n StellarOperation,\n StellarEffect,\n StellarBlock,\n StellarBlockFilter,\n StellarTransactionFilter,\n StellarOperationFilter,\n StellarEffectFilter,\n SorobanEvent,\n SorobanEventFilter,\n} from '@subql/types-stellar';\nimport { StellarApi } from '../stellar';\nimport { StellarBlockWrapped } from '../stellar/block.stellar';\nimport SafeStellarProvider from '../stellar/safe-api';\nimport { DsProcessorService } from './ds-processor.service';\nimport { DynamicDsService } from './dynamic-ds.service';\nimport { ProjectService } from './project.service';\nimport { UnfinalizedBlocksService } from './unfinalizedBlocks.service';\n\nconst logger = getLogger('indexer');\n\n@Injectable()\nexport class IndexerManager extends BaseIndexerManager<\n StellarApi,\n SafeStellarProvider | null,\n StellarBlockWrapper,\n ApiService,\n SubqlStellarDataSource,\n SubqlStellarCustomDataSource,\n typeof FilterTypeMap,\n typeof ProcessorTypeMap,\n StellarRuntimeHandlerInputMap\n> {\n protected isRuntimeDs = isRuntimeDs;\n protected isCustomDs = isCustomDs;\n\n constructor(\n apiService: ApiService,\n nodeConfig: NodeConfig,\n sandboxService: SandboxService<SafeStellarProvider | null, StellarApi>,\n dsProcessorService: DsProcessorService,\n dynamicDsService: DynamicDsService,\n unfinalizedBlocksService: UnfinalizedBlocksService,\n @Inject('IProjectService') private projectService: ProjectService,\n ) {\n super(\n apiService,\n nodeConfig,\n sandboxService,\n dsProcessorService,\n dynamicDsService,\n unfinalizedBlocksService,\n FilterTypeMap,\n ProcessorTypeMap,\n );\n }\n\n async start(): Promise<void> {\n await this.projectService.init();\n logger.info('indexer manager started');\n }\n\n @profiler()\n async indexBlock(\n block: IBlock<StellarBlockWrapper>,\n dataSources: SubqlStellarDataSource[],\n ): Promise<ProcessBlockResponse> {\n return super.internalIndexBlock(block, dataSources, () =>\n this.getApi(block.block),\n );\n }\n\n // eslint-disable-next-line @typescript-eslint/require-await\n private async getApi(\n block: StellarBlockWrapper,\n ): Promise<SafeStellarProvider | null> {\n // return this.apiService.safeApi(block.block.sequence);\n return null;\n }\n\n protected async indexBlockData(\n { block, effects, operations, transactions }: StellarBlockWrapper,\n dataSources: SubqlDatasource[],\n getVM: (d: SubqlDatasource) => Promise<IndexerSandbox>,\n ): Promise<void> {\n await this.indexBlockContent(block, dataSources, getVM);\n\n for (const tx of transactions) {\n await this.indexTransaction(tx, dataSources, getVM);\n\n for (const operation of tx.operations) {\n await this.indexOperation(operation, dataSources, getVM);\n\n for (const effect of operation.effects) {\n await this.indexEffect(effect, dataSources, getVM);\n }\n for (const event of operation.events) {\n await this.indexEvent(event, dataSources, getVM);\n }\n }\n }\n }\n\n private async indexBlockContent(\n block: StellarBlock,\n dataSources: SubqlDatasource[],\n getVM: (d: SubqlDatasource) => Promise<IndexerSandbox>,\n ): Promise<void> {\n for (const ds of dataSources) {\n await this.indexData(StellarHandlerKind.Block, block, ds, getVM);\n }\n }\n\n private async indexTransaction(\n transaction: StellarTransaction,\n dataSources: SubqlDatasource[],\n getVM: (d: SubqlDatasource) => Promise<IndexerSandbox>,\n ): Promise<void> {\n for (const ds of dataSources) {\n await this.indexData(\n StellarHandlerKind.Transaction,\n transaction,\n ds,\n getVM,\n );\n\n if (\n transaction.operations.some(\n (op) => op.type.toString() === 'invoke_host_function',\n )\n ) {\n await this.indexData(\n StellarHandlerKind.SorobanTransaction,\n transaction,\n ds,\n getVM,\n );\n }\n }\n }\n\n private async indexOperation(\n operation: StellarOperation,\n dataSources: SubqlDatasource[],\n getVM: (d: SubqlDatasource) => Promise<IndexerSandbox>,\n ): Promise<void> {\n for (const ds of dataSources) {\n await this.indexData(StellarHandlerKind.Operation, operation, ds, getVM);\n }\n }\n\n private async indexEffect(\n effect: StellarEffect,\n dataSources: SubqlDatasource[],\n getVM: (d: SubqlDatasource) => Promise<IndexerSandbox>,\n ): Promise<void> {\n for (const ds of dataSources) {\n await this.indexData(StellarHandlerKind.Effects, effect, ds, getVM);\n }\n }\n\n private async indexEvent(\n event: SorobanEvent,\n dataSources: SubqlDatasource[],\n getVM: (d: SubqlDatasource) => Promise<IndexerSandbox>,\n ): Promise<void> {\n for (const ds of dataSources) {\n await this.indexData(StellarHandlerKind.Event, event, ds, getVM);\n }\n }\n\n protected async prepareFilteredData<T = any>(\n kind: StellarHandlerKind,\n data: T,\n ds: SubqlDatasource,\n ): Promise<T> {\n return Promise.resolve(data);\n }\n}\n\ntype ProcessorTypeMap = {\n [StellarHandlerKind.Block]: typeof isBlockHandlerProcessor;\n [StellarHandlerKind.Transaction]: typeof isTransactionHandlerProcessor;\n [StellarHandlerKind.SorobanTransaction]: typeof isSorobanTransactionHandlerProcessor;\n [StellarHandlerKind.Operation]: typeof isOperationHandlerProcessor;\n [StellarHandlerKind.Effects]: typeof isEffectHandlerProcessor;\n [StellarHandlerKind.Event]: typeof isEventHandlerProcessor;\n};\n\nconst ProcessorTypeMap = {\n [StellarHandlerKind.Block]: isBlockHandlerProcessor,\n [StellarHandlerKind.Transaction]: isTransactionHandlerProcessor,\n [StellarHandlerKind.SorobanTransaction]: isSorobanTransactionHandlerProcessor,\n [StellarHandlerKind.Operation]: isOperationHandlerProcessor,\n [StellarHandlerKind.Effects]: isEffectHandlerProcessor,\n [StellarHandlerKind.Event]: isEventHandlerProcessor,\n};\n\nconst FilterTypeMap = {\n [StellarHandlerKind.Block]: (\n data: StellarBlock,\n filter: StellarBlockFilter,\n ds: SubqlStellarDataSource,\n ) =>\n StellarBlockWrapped.filterBlocksProcessor(\n data,\n filter,\n ds.options?.address,\n ),\n\n [StellarHandlerKind.Transaction]: (\n data: StellarTransaction,\n filter: StellarTransactionFilter,\n ds: SubqlStellarDataSource,\n ) =>\n StellarBlockWrapped.filterTransactionProcessor(\n data,\n filter,\n ds.options?.address,\n ),\n\n [StellarHandlerKind.SorobanTransaction]: (\n data: StellarTransaction,\n filter: StellarTransactionFilter,\n ds: SubqlStellarDataSource,\n ) =>\n StellarBlockWrapped.filterTransactionProcessor(\n data,\n filter,\n ds.options?.address,\n ),\n\n [StellarHandlerKind.Operation]: (\n data: StellarOperation,\n filter: StellarOperationFilter,\n ds: SubqlStellarDataSource,\n ) =>\n StellarBlockWrapped.filterOperationProcessor(\n data,\n filter,\n ds.options?.address,\n ),\n\n [StellarHandlerKind.Effects]: (\n data: StellarEffect,\n filter: StellarEffectFilter,\n ds: SubqlStellarDataSource,\n ) =>\n StellarBlockWrapped.filterEffectProcessor(\n data,\n filter,\n ds.options?.address,\n ),\n\n [StellarHandlerKind.Event]: (\n data: SorobanEvent,\n filter: SorobanEventFilter,\n ds: SubqlStellarDataSource,\n ) =>\n StellarBlockWrapped.filterEventProcessor(data, filter, ds.options?.address),\n};\n"]}
|
|
@@ -20,7 +20,6 @@ const common_1 = require("@nestjs/common");
|
|
|
20
20
|
const event_emitter_1 = require("@nestjs/event-emitter");
|
|
21
21
|
const node_core_1 = require("@subql/node-core");
|
|
22
22
|
const x_sequelize_1 = require("@subql/x-sequelize");
|
|
23
|
-
const SubqueryProject_1 = require("../configure/SubqueryProject");
|
|
24
23
|
const ds_processor_service_1 = require("./ds-processor.service");
|
|
25
24
|
const dynamic_ds_service_1 = require("./dynamic-ds.service");
|
|
26
25
|
const unfinalizedBlocks_service_1 = require("./unfinalizedBlocks.service");
|
|
@@ -64,8 +63,7 @@ ProjectService = __decorate([
|
|
|
64
63
|
node_core_1.ApiService,
|
|
65
64
|
node_core_1.PoiService,
|
|
66
65
|
node_core_1.PoiSyncService,
|
|
67
|
-
x_sequelize_1.Sequelize,
|
|
68
|
-
SubqueryProject_1.SubqueryProject, Object, node_core_1.StoreService,
|
|
66
|
+
x_sequelize_1.Sequelize, Object, Object, node_core_1.StoreService,
|
|
69
67
|
node_core_1.NodeConfig,
|
|
70
68
|
dynamic_ds_service_1.DynamicDsService,
|
|
71
69
|
event_emitter_1.EventEmitter2,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"project.service.js","sourceRoot":"","sources":["../../src/indexer/project.service.ts"],"names":[],"mappings":";AAAA,8DAA8D;AAC9D,mCAAmC;;;;;;;;;;;;;;;AAEnC,mDAA8C;AAC9C,2CAAoD;AACpD,yDAAsD;
|
|
1
|
+
{"version":3,"file":"project.service.js","sourceRoot":"","sources":["../../src/indexer/project.service.ts"],"names":[],"mappings":";AAAA,8DAA8D;AAC9D,mCAAmC;;;;;;;;;;;;;;;AAEnC,mDAA8C;AAC9C,2CAAoD;AACpD,yDAAsD;AAEtD,gDAS0B;AAE1B,oDAA+C;AAI/C,iEAA4D;AAC5D,6DAAwD;AACxD,2EAAuE;AAEvE,8DAA8D;AAC9D,MAAM,EAAE,OAAO,EAAE,cAAc,EAAE,GAAG,OAAO,CAAC,oBAAoB,CAAC,CAAC;AAG3D,IAAM,cAAc,GAApB,MAAM,cAAe,SAAQ,8BAGnC;IACW,cAAc,GAAG,cAAc,CAAC;IAE1C,YACE,kBAAsC,EACtC,UAAsB,EACsB,UAAsB,EAElE,cAA8B,EACa,SAAoB,EACnC,OAAwB,EAEpD,qBAA8D,EAChB,YAA0B,EACxE,UAAsB,EACtB,gBAAkC,EAClC,YAA2B,EAC3B,uBAAiD;QAEjD,KAAK,CACH,kBAAkB,EAClB,UAAU,EACV,UAAU,EACV,cAAc,EACd,SAAS,EACT,OAAO,EACP,qBAAqB,EACrB,YAAY,EACZ,UAAU,EACV,gBAAgB,EAChB,YAAY,EACZ,uBAAuB,CACxB,CAAC;IACJ,CAAC;IAGK,AAAN,KAAK,CAAC,IAAI,CAAC,WAAoB;QAC7B,OAAO,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;IACjC,CAAC;IAES,KAAK,CAAC,iBAAiB,CAAC,MAAc;QAC9C,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,GAAG;aAC9C,OAAO,EAAE;aACT,MAAM,CAAC,MAAM,CAAC;aACd,IAAI,EAAE,CAAC;QAEV,OAAO,IAAI,IAAI,CACZ,KAAmD,CAAC,SAAS,CAC/D,CAAC,CAAC,0CAA0C;IAC/C,CAAC;IAES,eAAe,CAAC,OAAwB;QAChD,+DAA+D;QAC/D,yCAAyC;IAC3C,CAAC;CACF,CAAA;AAnBO;IADL,IAAA,oBAAQ,GAAE;;;;0CAGV;AAzCU,cAAc;IAD1B,IAAA,mBAAU,GAAE;IAUR,WAAA,IAAA,eAAM,EAAC,6BAAY,CAAC,CAAC,CAAC,sBAAU,CAAC,CAAC,CAAC,MAAM,CAAC,CAAA;IAC1C,WAAA,IAAA,eAAM,EAAC,6BAAY,CAAC,CAAC,CAAC,0BAAc,CAAC,CAAC,CAAC,MAAM,CAAC,CAAA;IAE9C,WAAA,IAAA,eAAM,EAAC,6BAAY,CAAC,CAAC,CAAC,uBAAS,CAAC,CAAC,CAAC,MAAM,CAAC,CAAA;IACzC,WAAA,IAAA,eAAM,EAAC,kBAAkB,CAAC,CAAA;IAC1B,WAAA,IAAA,eAAM,EAAC,wBAAwB,CAAC,CAAA;IAEhC,WAAA,IAAA,eAAM,EAAC,6BAAY,CAAC,CAAC,CAAC,wBAAY,CAAC,CAAC,CAAC,MAAM,CAAC,CAAA;qCATzB,yCAAkB;QAC1B,sBAAU;QACkC,sBAAU;QAElD,0BAAc;QACwB,uBAAS,kBAIH,wBAAY;QAC5D,sBAAU;QACJ,qCAAgB;QACpB,6BAAa;QACF,oDAAwB;GApBxC,cAAc,CA0D1B;AA1DY,wCAAc","sourcesContent":["// Copyright 2020-2024 SubQuery Pte Ltd authors & contributors\n// SPDX-License-Identifier: GPL-3.0\n\nimport { isMainThread } from 'worker_threads';\nimport { Inject, Injectable } from '@nestjs/common';\nimport { EventEmitter2 } from '@nestjs/event-emitter';\nimport { Horizon } from '@stellar/stellar-sdk';\nimport {\n PoiService,\n PoiSyncService,\n BaseProjectService,\n StoreService,\n NodeConfig,\n ApiService,\n IProjectUpgradeService,\n profiler,\n} from '@subql/node-core';\nimport { StellarBlockWrapper, SubqlDatasource } from '@subql/types-stellar';\nimport { Sequelize } from '@subql/x-sequelize';\nimport { SubqueryProject } from '../configure/SubqueryProject';\nimport { StellarApi } from '../stellar';\nimport SafeStellarProvider from '../stellar/safe-api';\nimport { DsProcessorService } from './ds-processor.service';\nimport { DynamicDsService } from './dynamic-ds.service';\nimport { UnfinalizedBlocksService } from './unfinalizedBlocks.service';\n\n// eslint-disable-next-line @typescript-eslint/no-var-requires\nconst { version: packageVersion } = require('../../package.json');\n\n@Injectable()\nexport class ProjectService extends BaseProjectService<\n ApiService<StellarApi, SafeStellarProvider, StellarBlockWrapper[]>,\n SubqlDatasource\n> {\n protected packageVersion = packageVersion;\n\n constructor(\n dsProcessorService: DsProcessorService,\n apiService: ApiService,\n @Inject(isMainThread ? PoiService : 'Null') poiService: PoiService,\n @Inject(isMainThread ? PoiSyncService : 'Null')\n poiSyncService: PoiSyncService,\n @Inject(isMainThread ? Sequelize : 'Null') sequelize: Sequelize,\n @Inject('ISubqueryProject') project: SubqueryProject,\n @Inject('IProjectUpgradeService')\n projectUpgradeService: IProjectUpgradeService<SubqueryProject>,\n @Inject(isMainThread ? StoreService : 'Null') storeService: StoreService,\n nodeConfig: NodeConfig,\n dynamicDsService: DynamicDsService,\n eventEmitter: EventEmitter2,\n unfinalizedBlockService: UnfinalizedBlocksService,\n ) {\n super(\n dsProcessorService,\n apiService,\n poiService,\n poiSyncService,\n sequelize,\n project,\n projectUpgradeService,\n storeService,\n nodeConfig,\n dynamicDsService,\n eventEmitter,\n unfinalizedBlockService,\n );\n }\n\n @profiler()\n async init(startHeight?: number): Promise<void> {\n return super.init(startHeight);\n }\n\n protected async getBlockTimestamp(height: number): Promise<Date> {\n const block = await this.apiService.unsafeApi.api\n .ledgers()\n .ledger(height)\n .call();\n\n return new Date(\n (block as unknown as Horizon.ServerApi.LedgerRecord).closed_at,\n ); // TODO test and make sure its in MS not S\n }\n\n protected onProjectChange(project: SubqueryProject): void | Promise<void> {\n // TODO update this when implementing skipBlock feature for Eth\n // this.apiService.updateBlockFetching();\n }\n}\n"]}
|
|
@@ -23,14 +23,15 @@ let UnfinalizedBlocksService = class UnfinalizedBlocksService extends node_core_
|
|
|
23
23
|
this.apiService = apiService;
|
|
24
24
|
}
|
|
25
25
|
async getFinalizedHead() {
|
|
26
|
-
const
|
|
27
|
-
return (0, utils_stellar_1.
|
|
26
|
+
const finalizedBlock = await this.apiService.api.getFinalizedBlock();
|
|
27
|
+
return (0, utils_stellar_1.stellarBlockToHeader)(finalizedBlock);
|
|
28
28
|
}
|
|
29
29
|
async getHeaderForHash(hash) {
|
|
30
30
|
return this.getHeaderForHeight(parseInt(hash, 10));
|
|
31
31
|
}
|
|
32
32
|
async getHeaderForHeight(height) {
|
|
33
|
-
|
|
33
|
+
const block = (await this.apiService.api.fetchBlocks([height]))[0];
|
|
34
|
+
return (0, utils_stellar_1.stellarBlockToHeader)(block);
|
|
34
35
|
}
|
|
35
36
|
};
|
|
36
37
|
__decorate([
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"unfinalizedBlocks.service.js","sourceRoot":"","sources":["../../src/indexer/unfinalizedBlocks.service.ts"],"names":[],"mappings":";AAAA,8DAA8D;AAC9D,mCAAmC;;;;;;;;;;;;AAEnC,2CAA4C;AAC5C,gDAQ0B;AAE1B,
|
|
1
|
+
{"version":3,"file":"unfinalizedBlocks.service.js","sourceRoot":"","sources":["../../src/indexer/unfinalizedBlocks.service.ts"],"names":[],"mappings":";AAAA,8DAA8D;AAC9D,mCAAmC;;;;;;;;;;;;AAEnC,2CAA4C;AAC5C,gDAQ0B;AAE1B,4DAAgE;AAEhE,MAAM,MAAM,GAAG,IAAA,qBAAS,EAAC,aAAa,CAAC,CAAC;AAGjC,IAAM,wBAAwB,GAA9B,MAAM,wBAAyB,SAAQ,wCAA0C;IAEnE;IADnB,YACmB,UAAsB,EACvC,UAAsB,EACtB,UAA6B;QAE7B,KAAK,CAAC,UAAU,EAAE,UAAU,CAAC,CAAC;QAJb,eAAU,GAAV,UAAU,CAAY;IAKzC,CAAC;IAGe,AAAN,KAAK,CAAC,gBAAgB;QAC9B,MAAM,cAAc,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,iBAAiB,EAAE,CAAC;QACrE,OAAO,IAAA,oCAAoB,EAAC,cAAc,CAAC,CAAC;IAC9C,CAAC;IAGe,AAAN,KAAK,CAAC,gBAAgB,CAAC,IAAY;QAC3C,OAAO,IAAI,CAAC,kBAAkB,CAAC,QAAQ,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,CAAC;IACrD,CAAC;IAGe,AAAN,KAAK,CAAC,kBAAkB,CAAC,MAAc;QAC/C,MAAM,KAAK,GAAG,CAAC,MAAM,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACnE,OAAO,IAAA,oCAAoB,EAAC,KAAK,CAAC,CAAC;IACrC,CAAC;CACF,CAAA;AAfiB;IADf,IAAA,0BAAc,GAAE;;;;gEAIhB;AAGe;IADf,IAAA,0BAAc,GAAE;;;;gEAGhB;AAGe;IADf,IAAA,0BAAc,GAAE;;;;kEAIhB;AAxBU,wBAAwB;IADpC,IAAA,mBAAU,GAAE;qCAGoB,sBAAU;QAC3B,sBAAU;QACV,6BAAiB;GAJpB,wBAAwB,CAyBpC;AAzBY,4DAAwB","sourcesContent":["// Copyright 2020-2024 SubQuery Pte Ltd authors & contributors\n// SPDX-License-Identifier: GPL-3.0\n\nimport { Injectable } from '@nestjs/common';\nimport {\n ApiService,\n BaseUnfinalizedBlocksService,\n Header,\n NodeConfig,\n StoreCacheService,\n getLogger,\n mainThreadOnly,\n} from '@subql/node-core';\nimport { BlockWrapper } from '@subql/types-stellar';\nimport { stellarBlockToHeader } from '../stellar/utils.stellar';\n\nconst logger = getLogger('unfinalized');\n\n@Injectable()\nexport class UnfinalizedBlocksService extends BaseUnfinalizedBlocksService<BlockWrapper> {\n constructor(\n private readonly apiService: ApiService,\n nodeConfig: NodeConfig,\n storeCache: StoreCacheService,\n ) {\n super(nodeConfig, storeCache);\n }\n\n @mainThreadOnly()\n protected async getFinalizedHead(): Promise<Header> {\n const finalizedBlock = await this.apiService.api.getFinalizedBlock();\n return stellarBlockToHeader(finalizedBlock);\n }\n\n @mainThreadOnly()\n protected async getHeaderForHash(hash: string): Promise<Header> {\n return this.getHeaderForHeight(parseInt(hash, 10));\n }\n\n @mainThreadOnly()\n protected async getHeaderForHeight(height: number): Promise<Header> {\n const block = (await this.apiService.api.fetchBlocks([height]))[0];\n return stellarBlockToHeader(block);\n }\n}\n"]}
|