@subql/node-stellar 2.9.3-2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +7 -0
- package/LICENSE +674 -0
- package/README.md +77 -0
- package/bin/run +4 -0
- package/bin/run.cmd +3 -0
- package/dist/.tsbuildinfo +1 -0
- package/dist/app.module.d.ts +2 -0
- package/dist/app.module.js +35 -0
- package/dist/app.module.js.map +1 -0
- package/dist/configure/SubqueryProject.d.ts +25 -0
- package/dist/configure/SubqueryProject.js +148 -0
- package/dist/configure/SubqueryProject.js.map +1 -0
- package/dist/configure/configure.module.d.ts +10 -0
- package/dist/configure/configure.module.js +129 -0
- package/dist/configure/configure.module.js.map +1 -0
- package/dist/indexer/blockDispatcher/block-dispatcher.service.d.ts +16 -0
- package/dist/indexer/blockDispatcher/block-dispatcher.service.js +54 -0
- package/dist/indexer/blockDispatcher/block-dispatcher.service.js.map +1 -0
- package/dist/indexer/blockDispatcher/index.d.ts +4 -0
- package/dist/indexer/blockDispatcher/index.js +10 -0
- package/dist/indexer/blockDispatcher/index.js.map +1 -0
- package/dist/indexer/blockDispatcher/stellar-block-dispatcher.d.ts +4 -0
- package/dist/indexer/blockDispatcher/stellar-block-dispatcher.js +5 -0
- package/dist/indexer/blockDispatcher/stellar-block-dispatcher.js.map +1 -0
- package/dist/indexer/blockDispatcher/worker-block-dispatcher.service.d.ts +16 -0
- package/dist/indexer/blockDispatcher/worker-block-dispatcher.service.js +78 -0
- package/dist/indexer/blockDispatcher/worker-block-dispatcher.service.js.map +1 -0
- package/dist/indexer/dictionary.service.d.ts +7 -0
- package/dist/indexer/dictionary.service.js +34 -0
- package/dist/indexer/dictionary.service.js.map +1 -0
- package/dist/indexer/ds-processor.service.d.ts +9 -0
- package/dist/indexer/ds-processor.service.js +46 -0
- package/dist/indexer/ds-processor.service.js.map +1 -0
- package/dist/indexer/dynamic-ds.service.d.ts +9 -0
- package/dist/indexer/dynamic-ds.service.js +71 -0
- package/dist/indexer/dynamic-ds.service.js.map +1 -0
- package/dist/indexer/fetch.module.d.ts +2 -0
- package/dist/indexer/fetch.module.js +93 -0
- package/dist/indexer/fetch.module.js.map +1 -0
- package/dist/indexer/fetch.service.d.ts +33 -0
- package/dist/indexer/fetch.service.js +201 -0
- package/dist/indexer/fetch.service.js.map +1 -0
- package/dist/indexer/fetch.service.spec.d.ts +1 -0
- package/dist/indexer/fetch.service.spec.js +58 -0
- package/dist/indexer/fetch.service.spec.js.map +1 -0
- package/dist/indexer/indexer.manager.d.ts +36 -0
- package/dist/indexer/indexer.manager.js +92 -0
- package/dist/indexer/indexer.manager.js.map +1 -0
- package/dist/indexer/indexer.module.d.ts +2 -0
- package/dist/indexer/indexer.module.js +86 -0
- package/dist/indexer/indexer.module.js.map +1 -0
- package/dist/indexer/project.service.d.ts +13 -0
- package/dist/indexer/project.service.js +60 -0
- package/dist/indexer/project.service.js.map +1 -0
- package/dist/indexer/sandbox.service.d.ts +13 -0
- package/dist/indexer/sandbox.service.js +64 -0
- package/dist/indexer/sandbox.service.js.map +1 -0
- package/dist/indexer/types.d.ts +1 -0
- package/dist/indexer/types.js +5 -0
- package/dist/indexer/types.js.map +1 -0
- package/dist/indexer/unfinalizedBlocks.service.d.ts +11 -0
- package/dist/indexer/unfinalizedBlocks.service.js +52 -0
- package/dist/indexer/unfinalizedBlocks.service.js.map +1 -0
- package/dist/indexer/worker/worker.d.ts +31 -0
- package/dist/indexer/worker/worker.js +103 -0
- package/dist/indexer/worker/worker.js.map +1 -0
- package/dist/indexer/worker/worker.module.d.ts +2 -0
- package/dist/indexer/worker/worker.module.js +33 -0
- package/dist/indexer/worker/worker.module.js.map +1 -0
- package/dist/indexer/worker/worker.service.d.ts +26 -0
- package/dist/indexer/worker/worker.service.js +90 -0
- package/dist/indexer/worker/worker.service.js.map +1 -0
- package/dist/indexer/worker/worker.unfinalizedBlocks.service.d.ts +16 -0
- package/dist/indexer/worker/worker.unfinalizedBlocks.service.js +50 -0
- package/dist/indexer/worker/worker.unfinalizedBlocks.service.js.map +1 -0
- package/dist/init.d.ts +1 -0
- package/dist/init.js +52 -0
- package/dist/init.js.map +1 -0
- package/dist/main.d.ts +1 -0
- package/dist/main.js +22 -0
- package/dist/main.js.map +1 -0
- package/dist/meta/meta.controller.d.ts +21 -0
- package/dist/meta/meta.controller.js +36 -0
- package/dist/meta/meta.controller.js.map +1 -0
- package/dist/meta/meta.module.d.ts +2 -0
- package/dist/meta/meta.module.js +28 -0
- package/dist/meta/meta.module.js.map +1 -0
- package/dist/meta/meta.service.d.ts +24 -0
- package/dist/meta/meta.service.js +121 -0
- package/dist/meta/meta.service.js.map +1 -0
- package/dist/stellar/api.connection.d.ts +20 -0
- package/dist/stellar/api.connection.js +63 -0
- package/dist/stellar/api.connection.js.map +1 -0
- package/dist/stellar/api.connection.spec.d.ts +1 -0
- package/dist/stellar/api.connection.spec.js +81 -0
- package/dist/stellar/api.connection.spec.js.map +1 -0
- package/dist/stellar/api.service.stellar.d.ts +18 -0
- package/dist/stellar/api.service.stellar.js +144 -0
- package/dist/stellar/api.service.stellar.js.map +1 -0
- package/dist/stellar/api.service.stellar.spec.d.ts +5 -0
- package/dist/stellar/api.service.stellar.spec.js +87 -0
- package/dist/stellar/api.service.stellar.spec.js.map +1 -0
- package/dist/stellar/api.stellar.d.ts +29 -0
- package/dist/stellar/api.stellar.js +116 -0
- package/dist/stellar/api.stellar.js.map +1 -0
- package/dist/stellar/api.stellar.spec.d.ts +1 -0
- package/dist/stellar/api.stellar.spec.js +81 -0
- package/dist/stellar/api.stellar.spec.js.map +1 -0
- package/dist/stellar/block.stellar.d.ts +11 -0
- package/dist/stellar/block.stellar.js +81 -0
- package/dist/stellar/block.stellar.js.map +1 -0
- package/dist/stellar/block.stellar.spec.d.ts +1 -0
- package/dist/stellar/block.stellar.spec.js +58 -0
- package/dist/stellar/block.stellar.spec.js.map +1 -0
- package/dist/stellar/index.d.ts +2 -0
- package/dist/stellar/index.js +21 -0
- package/dist/stellar/index.js.map +1 -0
- package/dist/stellar/safe-api.d.ts +20 -0
- package/dist/stellar/safe-api.js +67 -0
- package/dist/stellar/safe-api.js.map +1 -0
- package/dist/stellar/stellar.server.d.ts +8 -0
- package/dist/stellar/stellar.server.js +72 -0
- package/dist/stellar/stellar.server.js.map +1 -0
- package/dist/stellar/stellar.server.spec.d.ts +1 -0
- package/dist/stellar/stellar.server.spec.js +132 -0
- package/dist/stellar/stellar.server.spec.js.map +1 -0
- package/dist/stellar/utils.stellar.d.ts +2 -0
- package/dist/stellar/utils.stellar.js +10 -0
- package/dist/stellar/utils.stellar.js.map +1 -0
- package/dist/subcommands/forceClean.init.d.ts +1 -0
- package/dist/subcommands/forceClean.init.js +24 -0
- package/dist/subcommands/forceClean.init.js.map +1 -0
- package/dist/subcommands/forceClean.module.d.ts +2 -0
- package/dist/subcommands/forceClean.module.js +28 -0
- package/dist/subcommands/forceClean.module.js.map +1 -0
- package/dist/subcommands/mmrMigrate.init.d.ts +2 -0
- package/dist/subcommands/mmrMigrate.init.js +28 -0
- package/dist/subcommands/mmrMigrate.init.js.map +1 -0
- package/dist/subcommands/mmrMigrate.module.d.ts +2 -0
- package/dist/subcommands/mmrMigrate.module.js +28 -0
- package/dist/subcommands/mmrMigrate.module.js.map +1 -0
- package/dist/subcommands/mmrRegenerate.init.d.ts +1 -0
- package/dist/subcommands/mmrRegenerate.init.js +28 -0
- package/dist/subcommands/mmrRegenerate.init.js.map +1 -0
- package/dist/subcommands/mmrRegenerate.module.d.ts +2 -0
- package/dist/subcommands/mmrRegenerate.module.js +30 -0
- package/dist/subcommands/mmrRegenerate.module.js.map +1 -0
- package/dist/subcommands/reindex.init.d.ts +1 -0
- package/dist/subcommands/reindex.init.js +30 -0
- package/dist/subcommands/reindex.init.js.map +1 -0
- package/dist/subcommands/reindex.module.d.ts +4 -0
- package/dist/subcommands/reindex.module.js +60 -0
- package/dist/subcommands/reindex.module.js.map +1 -0
- package/dist/subcommands/reindex.service.d.ts +11 -0
- package/dist/subcommands/reindex.service.js +46 -0
- package/dist/subcommands/reindex.service.js.map +1 -0
- package/dist/subcommands/testing.init.d.ts +1 -0
- package/dist/subcommands/testing.init.js +25 -0
- package/dist/subcommands/testing.init.js.map +1 -0
- package/dist/subcommands/testing.module.d.ts +4 -0
- package/dist/subcommands/testing.module.js +88 -0
- package/dist/subcommands/testing.module.js.map +1 -0
- package/dist/subcommands/testing.service.d.ts +9 -0
- package/dist/subcommands/testing.service.js +49 -0
- package/dist/subcommands/testing.service.js.map +1 -0
- package/dist/utils/project.d.ts +6 -0
- package/dist/utils/project.js +33 -0
- package/dist/utils/project.js.map +1 -0
- package/dist/utils/string.d.ts +1 -0
- package/dist/utils/string.js +10 -0
- package/dist/utils/string.js.map +1 -0
- package/dist/yargs.d.ts +303 -0
- package/dist/yargs.js +381 -0
- package/dist/yargs.js.map +1 -0
- package/package.json +69 -0
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
// Copyright 2020-2023 SubQuery Pte Ltd authors & contributors
|
|
3
|
+
// SPDX-License-Identifier: GPL-3.0
|
|
4
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
5
|
+
const types_stellar_1 = require("@subql/types-stellar");
|
|
6
|
+
const graphql_1 = require("graphql");
|
|
7
|
+
const fetch_service_1 = require("./fetch.service");
|
|
8
|
+
const HTTP_ENDPOINT = 'https://rpc-futurenet.stellar.org:443';
|
|
9
|
+
function testSubqueryProject(endpoint, ds) {
|
|
10
|
+
return {
|
|
11
|
+
network: {
|
|
12
|
+
endpoint,
|
|
13
|
+
chainId: '1',
|
|
14
|
+
},
|
|
15
|
+
dataSources: ds,
|
|
16
|
+
id: 'test',
|
|
17
|
+
root: './',
|
|
18
|
+
schema: new graphql_1.GraphQLSchema({}),
|
|
19
|
+
templates: null,
|
|
20
|
+
};
|
|
21
|
+
}
|
|
22
|
+
describe('Dictioanry queries', () => {
|
|
23
|
+
describe('Correct dictionary query with dynamic ds', () => {
|
|
24
|
+
it('Build correct counter increment single query', () => {
|
|
25
|
+
const ds = {
|
|
26
|
+
kind: types_stellar_1.StellarDatasourceKind.Runtime,
|
|
27
|
+
assets: new Map(),
|
|
28
|
+
startBlock: 1,
|
|
29
|
+
mapping: {
|
|
30
|
+
file: '',
|
|
31
|
+
handlers: [
|
|
32
|
+
{
|
|
33
|
+
handler: 'handleDyanmicDs',
|
|
34
|
+
kind: types_stellar_1.StellarHandlerKind.Event,
|
|
35
|
+
filter: {
|
|
36
|
+
topics: ['COUNTER'],
|
|
37
|
+
},
|
|
38
|
+
},
|
|
39
|
+
],
|
|
40
|
+
},
|
|
41
|
+
};
|
|
42
|
+
const result = (0, fetch_service_1.buildDictionaryQueryEntries)([ds], 1);
|
|
43
|
+
expect(result).toEqual([
|
|
44
|
+
{
|
|
45
|
+
entity: 'events',
|
|
46
|
+
conditions: [
|
|
47
|
+
{
|
|
48
|
+
field: 'topics0',
|
|
49
|
+
value: 'COUNTER',
|
|
50
|
+
matcher: 'equalTo',
|
|
51
|
+
},
|
|
52
|
+
],
|
|
53
|
+
},
|
|
54
|
+
]);
|
|
55
|
+
});
|
|
56
|
+
});
|
|
57
|
+
});
|
|
58
|
+
//# sourceMappingURL=fetch.service.spec.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fetch.service.spec.js","sourceRoot":"","sources":["../../src/indexer/fetch.service.spec.ts"],"names":[],"mappings":";AAAA,8DAA8D;AAC9D,mCAAmC;;AAGnC,wDAI8B;AAC9B,qCAAwC;AAOxC,mDAA4E;AAE5E,MAAM,aAAa,GAAG,uCAAuC,CAAC;AAE9D,SAAS,mBAAmB,CAAC,QAAgB,EAAE,EAAO;IACpD,OAAO;QACL,OAAO,EAAE;YACP,QAAQ;YACR,OAAO,EAAE,GAAG;SACb;QACD,WAAW,EAAE,EAAS;QACtB,EAAE,EAAE,MAAM;QACV,IAAI,EAAE,IAAI;QACV,MAAM,EAAE,IAAI,uBAAa,CAAC,EAAE,CAAC;QAC7B,SAAS,EAAE,IAAI;KAChB,CAAC;AACJ,CAAC;AAED,QAAQ,CAAC,oBAAoB,EAAE,GAAG,EAAE;IAClC,QAAQ,CAAC,0CAA0C,EAAE,GAAG,EAAE;QACxD,EAAE,CAAC,8CAA8C,EAAE,GAAG,EAAE;YACtD,MAAM,EAAE,GAA2B;gBACjC,IAAI,EAAE,qCAAqB,CAAC,OAAO;gBACnC,MAAM,EAAE,IAAI,GAAG,EAAE;gBACjB,UAAU,EAAE,CAAC;gBACb,OAAO,EAAE;oBACP,IAAI,EAAE,EAAE;oBACR,QAAQ,EAAE;wBACR;4BACE,OAAO,EAAE,iBAAiB;4BAC1B,IAAI,EAAE,kCAAkB,CAAC,KAAK;4BAC9B,MAAM,EAAE;gCACN,MAAM,EAAE,CAAC,SAAS,CAAC;6BACpB;yBACF;qBACF;iBACF;aACF,CAAC;YACF,MAAM,MAAM,GAAG,IAAA,2CAA2B,EAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;YACpD,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC;gBACrB;oBACE,MAAM,EAAE,QAAQ;oBAChB,UAAU,EAAE;wBACV;4BACE,KAAK,EAAE,SAAS;4BAChB,KAAK,EAAE,SAAS;4BAChB,OAAO,EAAE,SAAS;yBACnB;qBACF;iBACF;aACF,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC","sourcesContent":["// Copyright 2020-2023 SubQuery Pte Ltd authors & contributors\n// SPDX-License-Identifier: GPL-3.0\n\nimport { NodeConfig } from '@subql/node-core';\nimport {\n StellarDatasourceKind,\n StellarHandlerKind,\n SubqlRuntimeDatasource,\n} from '@subql/types-stellar';\nimport { GraphQLSchema } from 'graphql';\nimport {\n SubqlProjectDsTemplate,\n SubqueryProject,\n} from '../configure/SubqueryProject';\nimport { DsProcessorService } from './ds-processor.service';\nimport { DynamicDsService } from './dynamic-ds.service';\nimport { buildDictionaryQueryEntries, FetchService } from './fetch.service';\n\nconst HTTP_ENDPOINT = 'https://rpc-futurenet.stellar.org:443';\n\nfunction testSubqueryProject(endpoint: string, ds: any): SubqueryProject {\n return {\n network: {\n endpoint,\n chainId: '1',\n },\n dataSources: ds as any,\n id: 'test',\n root: './',\n schema: new GraphQLSchema({}),\n templates: null,\n };\n}\n\ndescribe('Dictioanry queries', () => {\n describe('Correct dictionary query with dynamic ds', () => {\n it('Build correct counter increment single query', () => {\n const ds: SubqlRuntimeDatasource = {\n kind: StellarDatasourceKind.Runtime,\n assets: new Map(),\n startBlock: 1,\n mapping: {\n file: '',\n handlers: [\n {\n handler: 'handleDyanmicDs',\n kind: StellarHandlerKind.Event,\n filter: {\n topics: ['COUNTER'],\n },\n },\n ],\n },\n };\n const result = buildDictionaryQueryEntries([ds], 1);\n expect(result).toEqual([\n {\n entity: 'events',\n conditions: [\n {\n field: 'topics0',\n value: 'COUNTER',\n matcher: 'equalTo',\n },\n ],\n },\n ]);\n });\n });\n});\n"]}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import { isEventHandlerProcessor, isCustomDs, isRuntimeDs, SubqlStellarCustomDataSource, StellarHandlerKind, StellarRuntimeHandlerInputMap, SubqlStellarDataSource } from '@subql/common-stellar';
|
|
2
|
+
import { NodeConfig, IndexerSandbox, ProcessBlockResponse, BaseIndexerManager, ApiService } from '@subql/node-core';
|
|
3
|
+
import { StellarEvent, StellarEventFilter, StellarBlockWrapper, SubqlDatasource } from '@subql/types-stellar';
|
|
4
|
+
import { SubqlProjectDs } from '../configure/SubqueryProject';
|
|
5
|
+
import { StellarApi } from '../stellar';
|
|
6
|
+
import SafeStellarProvider from '../stellar/safe-api';
|
|
7
|
+
import { asSecondLayerHandlerProcessor_1_0_0, DsProcessorService } from './ds-processor.service';
|
|
8
|
+
import { DynamicDsService } from './dynamic-ds.service';
|
|
9
|
+
import { ProjectService } from './project.service';
|
|
10
|
+
import { SandboxService } from './sandbox.service';
|
|
11
|
+
import { UnfinalizedBlocksService } from './unfinalizedBlocks.service';
|
|
12
|
+
export declare class IndexerManager extends BaseIndexerManager<SafeStellarProvider, StellarApi, StellarBlockWrapper, ApiService, SubqlStellarDataSource, SubqlStellarCustomDataSource, typeof FilterTypeMap, typeof ProcessorTypeMap, StellarRuntimeHandlerInputMap> {
|
|
13
|
+
private projectService;
|
|
14
|
+
protected isRuntimeDs: typeof isRuntimeDs;
|
|
15
|
+
protected isCustomDs: typeof isCustomDs;
|
|
16
|
+
protected updateCustomProcessor: typeof asSecondLayerHandlerProcessor_1_0_0;
|
|
17
|
+
constructor(apiService: ApiService, nodeConfig: NodeConfig, sandboxService: SandboxService, dsProcessorService: DsProcessorService, dynamicDsService: DynamicDsService, unfinalizedBlocksService: UnfinalizedBlocksService, projectService: ProjectService);
|
|
18
|
+
start(): Promise<void>;
|
|
19
|
+
indexBlock(block: StellarBlockWrapper, dataSources: SubqlStellarDataSource[]): Promise<ProcessBlockResponse>;
|
|
20
|
+
getBlockHeight(block: StellarBlockWrapper): number;
|
|
21
|
+
getBlockHash(block: StellarBlockWrapper): string;
|
|
22
|
+
private getApi;
|
|
23
|
+
protected indexBlockData({ events }: StellarBlockWrapper, dataSources: SubqlProjectDs[], getVM: (d: SubqlProjectDs) => Promise<IndexerSandbox>): Promise<void>;
|
|
24
|
+
private indexEvent;
|
|
25
|
+
protected prepareFilteredData<T = any>(kind: StellarHandlerKind, data: T, ds: SubqlDatasource): Promise<T>;
|
|
26
|
+
}
|
|
27
|
+
type ProcessorTypeMap = {
|
|
28
|
+
[StellarHandlerKind.Event]: typeof isEventHandlerProcessor;
|
|
29
|
+
};
|
|
30
|
+
declare const ProcessorTypeMap: {
|
|
31
|
+
"stellar/EventHandler": typeof isEventHandlerProcessor;
|
|
32
|
+
};
|
|
33
|
+
declare const FilterTypeMap: {
|
|
34
|
+
"stellar/EventHandler": (data: StellarEvent, filter: StellarEventFilter, ds: SubqlStellarDataSource) => boolean;
|
|
35
|
+
};
|
|
36
|
+
export {};
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
// Copyright 2020-2023 SubQuery Pte Ltd authors & contributors
|
|
3
|
+
// SPDX-License-Identifier: GPL-3.0
|
|
4
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
5
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
6
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
7
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
8
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
9
|
+
};
|
|
10
|
+
var __metadata = (this && this.__metadata) || function (k, v) {
|
|
11
|
+
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
12
|
+
};
|
|
13
|
+
var __param = (this && this.__param) || function (paramIndex, decorator) {
|
|
14
|
+
return function (target, key) { decorator(target, key, paramIndex); }
|
|
15
|
+
};
|
|
16
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
+
exports.IndexerManager = void 0;
|
|
18
|
+
const common_1 = require("@nestjs/common");
|
|
19
|
+
const common_stellar_1 = require("@subql/common-stellar");
|
|
20
|
+
const node_core_1 = require("@subql/node-core");
|
|
21
|
+
const block_stellar_1 = require("../stellar/block.stellar");
|
|
22
|
+
const ds_processor_service_1 = require("./ds-processor.service");
|
|
23
|
+
const dynamic_ds_service_1 = require("./dynamic-ds.service");
|
|
24
|
+
const project_service_1 = require("./project.service");
|
|
25
|
+
const sandbox_service_1 = require("./sandbox.service");
|
|
26
|
+
const unfinalizedBlocks_service_1 = require("./unfinalizedBlocks.service");
|
|
27
|
+
const logger = (0, node_core_1.getLogger)('indexer');
|
|
28
|
+
let IndexerManager = class IndexerManager extends node_core_1.BaseIndexerManager {
|
|
29
|
+
constructor(apiService, nodeConfig, sandboxService, dsProcessorService, dynamicDsService, unfinalizedBlocksService, projectService) {
|
|
30
|
+
super(apiService, nodeConfig, sandboxService, dsProcessorService, dynamicDsService, unfinalizedBlocksService, FilterTypeMap, ProcessorTypeMap);
|
|
31
|
+
this.projectService = projectService;
|
|
32
|
+
this.isRuntimeDs = common_stellar_1.isRuntimeDs;
|
|
33
|
+
this.isCustomDs = common_stellar_1.isCustomDs;
|
|
34
|
+
this.updateCustomProcessor = ds_processor_service_1.asSecondLayerHandlerProcessor_1_0_0;
|
|
35
|
+
}
|
|
36
|
+
async start() {
|
|
37
|
+
await this.projectService.init();
|
|
38
|
+
logger.info('indexer manager started');
|
|
39
|
+
}
|
|
40
|
+
async indexBlock(block, dataSources) {
|
|
41
|
+
return super.internalIndexBlock(block, dataSources, () => this.getApi(block));
|
|
42
|
+
}
|
|
43
|
+
getBlockHeight(block) {
|
|
44
|
+
return block.block.ledger;
|
|
45
|
+
}
|
|
46
|
+
getBlockHash(block) {
|
|
47
|
+
return block.block.hash;
|
|
48
|
+
}
|
|
49
|
+
// eslint-disable-next-line @typescript-eslint/require-await
|
|
50
|
+
async getApi(block) {
|
|
51
|
+
// return this.apiService.safeApi(this.getBlockHeight(block));
|
|
52
|
+
return null;
|
|
53
|
+
}
|
|
54
|
+
async indexBlockData({ events }, dataSources, getVM) {
|
|
55
|
+
for (const event of events) {
|
|
56
|
+
await this.indexEvent(event, dataSources, getVM);
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
async indexEvent(event, dataSources, getVM) {
|
|
60
|
+
for (const ds of dataSources) {
|
|
61
|
+
await this.indexData(common_stellar_1.StellarHandlerKind.Event, event, ds, getVM);
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
async prepareFilteredData(kind, data, ds) {
|
|
65
|
+
return Promise.resolve(data);
|
|
66
|
+
}
|
|
67
|
+
};
|
|
68
|
+
__decorate([
|
|
69
|
+
(0, node_core_1.profiler)(),
|
|
70
|
+
__metadata("design:type", Function),
|
|
71
|
+
__metadata("design:paramtypes", [Object, Array]),
|
|
72
|
+
__metadata("design:returntype", Promise)
|
|
73
|
+
], IndexerManager.prototype, "indexBlock", null);
|
|
74
|
+
IndexerManager = __decorate([
|
|
75
|
+
(0, common_1.Injectable)(),
|
|
76
|
+
__param(6, (0, common_1.Inject)('IProjectService')),
|
|
77
|
+
__metadata("design:paramtypes", [node_core_1.ApiService,
|
|
78
|
+
node_core_1.NodeConfig,
|
|
79
|
+
sandbox_service_1.SandboxService,
|
|
80
|
+
ds_processor_service_1.DsProcessorService,
|
|
81
|
+
dynamic_ds_service_1.DynamicDsService,
|
|
82
|
+
unfinalizedBlocks_service_1.UnfinalizedBlocksService,
|
|
83
|
+
project_service_1.ProjectService])
|
|
84
|
+
], IndexerManager);
|
|
85
|
+
exports.IndexerManager = IndexerManager;
|
|
86
|
+
const ProcessorTypeMap = {
|
|
87
|
+
[common_stellar_1.StellarHandlerKind.Event]: common_stellar_1.isEventHandlerProcessor,
|
|
88
|
+
};
|
|
89
|
+
const FilterTypeMap = {
|
|
90
|
+
[common_stellar_1.StellarHandlerKind.Event]: (data, filter, ds) => { var _a; return block_stellar_1.StellarBlockWrapped.filterEventProcessor(data, filter, (_a = ds.options) === null || _a === void 0 ? void 0 : _a.address); },
|
|
91
|
+
};
|
|
92
|
+
//# sourceMappingURL=indexer.manager.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"indexer.manager.js","sourceRoot":"","sources":["../../src/indexer/indexer.manager.ts"],"names":[],"mappings":";AAAA,8DAA8D;AAC9D,mCAAmC;;;;;;;;;;;;;;;AAEnC,2CAAoD;AACpD,0DAQ+B;AAC/B,gDAQ0B;AAS1B,4DAA+D;AAE/D,iEAGgC;AAChC,6DAAwD;AACxD,uDAAmD;AACnD,uDAAmD;AACnD,2EAAuE;AAEvE,MAAM,MAAM,GAAG,IAAA,qBAAS,EAAC,SAAS,CAAC,CAAC;AAG7B,IAAM,cAAc,GAApB,MAAM,cAAe,SAAQ,8BAUnC;IAKC,YACE,UAAsB,EACtB,UAAsB,EACtB,cAA8B,EAC9B,kBAAsC,EACtC,gBAAkC,EAClC,wBAAkD,EACf,cAA8B;QAEjE,KAAK,CACH,UAAU,EACV,UAAU,EACV,cAAc,EACd,kBAAkB,EAClB,gBAAgB,EAChB,wBAAwB,EACxB,aAAa,EACb,gBAAgB,CACjB,CAAC;QAXiC,mBAAc,GAAd,cAAc,CAAgB;QAXzD,gBAAW,GAAG,4BAAW,CAAC;QAC1B,eAAU,GAAG,2BAAU,CAAC;QACxB,0BAAqB,GAAG,0DAAmC,CAAC;IAqBtE,CAAC;IAED,KAAK,CAAC,KAAK;QACT,MAAM,IAAI,CAAC,cAAc,CAAC,IAAI,EAAE,CAAC;QACjC,MAAM,CAAC,IAAI,CAAC,yBAAyB,CAAC,CAAC;IACzC,CAAC;IAGK,AAAN,KAAK,CAAC,UAAU,CACd,KAA0B,EAC1B,WAAqC;QAErC,OAAO,KAAK,CAAC,kBAAkB,CAAC,KAAK,EAAE,WAAW,EAAE,GAAG,EAAE,CACvD,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CACnB,CAAC;IACJ,CAAC;IAED,cAAc,CAAC,KAA0B;QACvC,OAAO,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC;IAC5B,CAAC;IAED,YAAY,CAAC,KAA0B;QACrC,OAAO,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC;IAC1B,CAAC;IAED,4DAA4D;IACpD,KAAK,CAAC,MAAM,CAClB,KAA0B;QAE1B,8DAA8D;QAC9D,OAAO,IAAI,CAAC;IACd,CAAC;IAES,KAAK,CAAC,cAAc,CAC5B,EAAE,MAAM,EAAuB,EAC/B,WAA6B,EAC7B,KAAqD;QAErD,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE;YAC1B,MAAM,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE,WAAW,EAAE,KAAK,CAAC,CAAC;SAClD;IACH,CAAC;IAEO,KAAK,CAAC,UAAU,CACtB,KAAmB,EACnB,WAA6B,EAC7B,KAAqD;QAErD,KAAK,MAAM,EAAE,IAAI,WAAW,EAAE;YAC5B,MAAM,IAAI,CAAC,SAAS,CAAC,mCAAkB,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE,EAAE,KAAK,CAAC,CAAC;SAClE;IACH,CAAC;IAES,KAAK,CAAC,mBAAmB,CACjC,IAAwB,EACxB,IAAO,EACP,EAAmB;QAEnB,OAAO,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IAC/B,CAAC;CACF,CAAA;AApDO;IADL,IAAA,oBAAQ,GAAE;;;;gDAQV;AAjDU,cAAc;IAD1B,IAAA,mBAAU,GAAE;IAuBR,WAAA,IAAA,eAAM,EAAC,iBAAiB,CAAC,CAAA;qCANd,sBAAU;QACV,sBAAU;QACN,gCAAc;QACV,yCAAkB;QACpB,qCAAgB;QACR,oDAAwB;QACC,gCAAc;GAtBxD,cAAc,CA8F1B;AA9FY,wCAAc;AAoG3B,MAAM,gBAAgB,GAAG;IACvB,CAAC,mCAAkB,CAAC,KAAK,CAAC,EAAE,wCAAuB;CACpD,CAAC;AAEF,MAAM,aAAa,GAAG;IACpB,CAAC,mCAAkB,CAAC,KAAK,CAAC,EAAE,CAC1B,IAAkB,EAClB,MAA0B,EAC1B,EAA0B,EAC1B,EAAE,WACF,OAAA,mCAAmB,CAAC,oBAAoB,CAAC,IAAI,EAAE,MAAM,EAAE,MAAA,EAAE,CAAC,OAAO,0CAAE,OAAO,CAAC,CAAA,EAAA;CAC9E,CAAC","sourcesContent":["// Copyright 2020-2023 SubQuery Pte Ltd authors & contributors\n// SPDX-License-Identifier: GPL-3.0\n\nimport { Inject, Injectable } from '@nestjs/common';\nimport {\n isEventHandlerProcessor,\n isCustomDs,\n isRuntimeDs,\n SubqlStellarCustomDataSource,\n StellarHandlerKind,\n StellarRuntimeHandlerInputMap,\n SubqlStellarDataSource,\n} from '@subql/common-stellar';\nimport {\n NodeConfig,\n getLogger,\n profiler,\n IndexerSandbox,\n ProcessBlockResponse,\n BaseIndexerManager,\n ApiService,\n} from '@subql/node-core';\nimport {\n StellarEvent,\n StellarEventFilter,\n StellarBlockWrapper,\n SubqlDatasource,\n} from '@subql/types-stellar';\nimport { SubqlProjectDs } from '../configure/SubqueryProject';\nimport { StellarApi } from '../stellar';\nimport { StellarBlockWrapped } from '../stellar/block.stellar';\nimport SafeStellarProvider from '../stellar/safe-api';\nimport {\n asSecondLayerHandlerProcessor_1_0_0,\n DsProcessorService,\n} from './ds-processor.service';\nimport { DynamicDsService } from './dynamic-ds.service';\nimport { ProjectService } from './project.service';\nimport { SandboxService } from './sandbox.service';\nimport { UnfinalizedBlocksService } from './unfinalizedBlocks.service';\n\nconst logger = getLogger('indexer');\n\n@Injectable()\nexport class IndexerManager extends BaseIndexerManager<\n SafeStellarProvider,\n StellarApi,\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 protected updateCustomProcessor = asSecondLayerHandlerProcessor_1_0_0;\n\n constructor(\n apiService: ApiService,\n nodeConfig: NodeConfig,\n sandboxService: SandboxService,\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: StellarBlockWrapper,\n dataSources: SubqlStellarDataSource[],\n ): Promise<ProcessBlockResponse> {\n return super.internalIndexBlock(block, dataSources, () =>\n this.getApi(block),\n );\n }\n\n getBlockHeight(block: StellarBlockWrapper): number {\n return block.block.ledger;\n }\n\n getBlockHash(block: StellarBlockWrapper): string {\n return block.block.hash;\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(this.getBlockHeight(block));\n return null;\n }\n\n protected async indexBlockData(\n { events }: StellarBlockWrapper,\n dataSources: SubqlProjectDs[],\n getVM: (d: SubqlProjectDs) => Promise<IndexerSandbox>,\n ): Promise<void> {\n for (const event of events) {\n await this.indexEvent(event, dataSources, getVM);\n }\n }\n\n private async indexEvent(\n event: StellarEvent,\n dataSources: SubqlProjectDs[],\n getVM: (d: SubqlProjectDs) => 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.Event]: typeof isEventHandlerProcessor;\n};\n\nconst ProcessorTypeMap = {\n [StellarHandlerKind.Event]: isEventHandlerProcessor,\n};\n\nconst FilterTypeMap = {\n [StellarHandlerKind.Event]: (\n data: StellarEvent,\n filter: StellarEventFilter,\n ds: SubqlStellarDataSource,\n ) =>\n StellarBlockWrapped.filterEventProcessor(data, filter, ds.options?.address),\n};\n"]}
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
// Copyright 2020-2023 SubQuery Pte Ltd authors & contributors
|
|
3
|
+
// SPDX-License-Identifier: GPL-3.0
|
|
4
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
5
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
6
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
7
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
8
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
9
|
+
};
|
|
10
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
11
|
+
exports.IndexerModule = void 0;
|
|
12
|
+
const worker_threads_1 = require("worker_threads");
|
|
13
|
+
const common_1 = require("@nestjs/common");
|
|
14
|
+
const event_emitter_1 = require("@nestjs/event-emitter");
|
|
15
|
+
const node_core_1 = require("@subql/node-core");
|
|
16
|
+
const stellar_1 = require("../stellar");
|
|
17
|
+
const ds_processor_service_1 = require("./ds-processor.service");
|
|
18
|
+
const dynamic_ds_service_1 = require("./dynamic-ds.service");
|
|
19
|
+
const indexer_manager_1 = require("./indexer.manager");
|
|
20
|
+
const project_service_1 = require("./project.service");
|
|
21
|
+
const sandbox_service_1 = require("./sandbox.service");
|
|
22
|
+
const unfinalizedBlocks_service_1 = require("./unfinalizedBlocks.service");
|
|
23
|
+
const worker_service_1 = require("./worker/worker.service");
|
|
24
|
+
const worker_unfinalizedBlocks_service_1 = require("./worker/worker.unfinalizedBlocks.service");
|
|
25
|
+
let IndexerModule = class IndexerModule {
|
|
26
|
+
};
|
|
27
|
+
IndexerModule = __decorate([
|
|
28
|
+
(0, common_1.Module)({
|
|
29
|
+
providers: [
|
|
30
|
+
indexer_manager_1.IndexerManager,
|
|
31
|
+
node_core_1.StoreCacheService,
|
|
32
|
+
node_core_1.StoreService,
|
|
33
|
+
{
|
|
34
|
+
provide: node_core_1.ConnectionPoolStateManager,
|
|
35
|
+
useFactory: () => {
|
|
36
|
+
if (worker_threads_1.isMainThread) {
|
|
37
|
+
throw new Error('Expected to be worker thread');
|
|
38
|
+
}
|
|
39
|
+
return new node_core_1.WorkerConnectionPoolStateManager(global.host);
|
|
40
|
+
},
|
|
41
|
+
},
|
|
42
|
+
node_core_1.ConnectionPoolService,
|
|
43
|
+
{
|
|
44
|
+
provide: node_core_1.ApiService,
|
|
45
|
+
useFactory: async (project, connectionPoolService, eventEmitter) => {
|
|
46
|
+
const apiService = new stellar_1.StellarApiService(project, connectionPoolService, eventEmitter);
|
|
47
|
+
await apiService.init();
|
|
48
|
+
return apiService;
|
|
49
|
+
},
|
|
50
|
+
inject: ['ISubqueryProject', node_core_1.ConnectionPoolService, event_emitter_1.EventEmitter2],
|
|
51
|
+
},
|
|
52
|
+
sandbox_service_1.SandboxService,
|
|
53
|
+
ds_processor_service_1.DsProcessorService,
|
|
54
|
+
{
|
|
55
|
+
provide: dynamic_ds_service_1.DynamicDsService,
|
|
56
|
+
useFactory: () => {
|
|
57
|
+
if (worker_threads_1.isMainThread) {
|
|
58
|
+
throw new Error('Expected to be worker thread');
|
|
59
|
+
}
|
|
60
|
+
return new node_core_1.WorkerDynamicDsService(global.host);
|
|
61
|
+
},
|
|
62
|
+
},
|
|
63
|
+
node_core_1.PoiService,
|
|
64
|
+
node_core_1.MmrService,
|
|
65
|
+
node_core_1.PgMmrCacheService,
|
|
66
|
+
node_core_1.MmrQueryService,
|
|
67
|
+
{
|
|
68
|
+
provide: 'IProjectService',
|
|
69
|
+
useClass: project_service_1.ProjectService,
|
|
70
|
+
},
|
|
71
|
+
worker_service_1.WorkerService,
|
|
72
|
+
{
|
|
73
|
+
provide: unfinalizedBlocks_service_1.UnfinalizedBlocksService,
|
|
74
|
+
useFactory: () => {
|
|
75
|
+
if (worker_threads_1.isMainThread) {
|
|
76
|
+
throw new Error('Expected to be worker thread');
|
|
77
|
+
}
|
|
78
|
+
return new worker_unfinalizedBlocks_service_1.WorkerUnfinalizedBlocksService(global.host);
|
|
79
|
+
},
|
|
80
|
+
},
|
|
81
|
+
],
|
|
82
|
+
exports: [node_core_1.StoreService, node_core_1.MmrService, node_core_1.MmrQueryService],
|
|
83
|
+
})
|
|
84
|
+
], IndexerModule);
|
|
85
|
+
exports.IndexerModule = IndexerModule;
|
|
86
|
+
//# sourceMappingURL=indexer.module.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"indexer.module.js","sourceRoot":"","sources":["../../src/indexer/indexer.module.ts"],"names":[],"mappings":";AAAA,8DAA8D;AAC9D,mCAAmC;;;;;;;;;AAEnC,mDAA8C;AAC9C,2CAAwC;AACxC,yDAAsD;AACtD,gDAa0B;AAE1B,wCAA+C;AAE/C,iEAA4D;AAC5D,6DAAwD;AACxD,uDAAmD;AACnD,uDAAmD;AACnD,uDAAmD;AACnD,2EAAuE;AACvE,4DAAwD;AACxD,gGAA2F;AAkEpF,IAAM,aAAa,GAAnB,MAAM,aAAa;CAAG,CAAA;AAAhB,aAAa;IAhEzB,IAAA,eAAM,EAAC;QACN,SAAS,EAAE;YACT,gCAAc;YACd,6BAAiB;YACjB,wBAAY;YACZ;gBACE,OAAO,EAAE,sCAA0B;gBACnC,UAAU,EAAE,GAAG,EAAE;oBACf,IAAI,6BAAY,EAAE;wBAChB,MAAM,IAAI,KAAK,CAAC,8BAA8B,CAAC,CAAC;qBACjD;oBACD,OAAO,IAAI,4CAAgC,CAAE,MAAc,CAAC,IAAI,CAAC,CAAC;gBACpE,CAAC;aACF;YACD,iCAAqB;YACrB;gBACE,OAAO,EAAE,sBAAU;gBACnB,UAAU,EAAE,KAAK,EACf,OAAwB,EACxB,qBAAkE,EAClE,YAA2B,EAC3B,EAAE;oBACF,MAAM,UAAU,GAAG,IAAI,2BAAiB,CACtC,OAAO,EACP,qBAAqB,EACrB,YAAY,CACb,CAAC;oBACF,MAAM,UAAU,CAAC,IAAI,EAAE,CAAC;oBACxB,OAAO,UAAU,CAAC;gBACpB,CAAC;gBACD,MAAM,EAAE,CAAC,kBAAkB,EAAE,iCAAqB,EAAE,6BAAa,CAAC;aACnE;YACD,gCAAc;YACd,yCAAkB;YAClB;gBACE,OAAO,EAAE,qCAAgB;gBACzB,UAAU,EAAE,GAAG,EAAE;oBACf,IAAI,6BAAY,EAAE;wBAChB,MAAM,IAAI,KAAK,CAAC,8BAA8B,CAAC,CAAC;qBACjD;oBACD,OAAO,IAAI,kCAAsB,CAAE,MAAc,CAAC,IAAI,CAAC,CAAC;gBAC1D,CAAC;aACF;YACD,sBAAU;YACV,sBAAU;YACV,6BAAiB;YACjB,2BAAe;YACf;gBACE,OAAO,EAAE,iBAAiB;gBAC1B,QAAQ,EAAE,gCAAc;aACzB;YACD,8BAAa;YACb;gBACE,OAAO,EAAE,oDAAwB;gBACjC,UAAU,EAAE,GAAG,EAAE;oBACf,IAAI,6BAAY,EAAE;wBAChB,MAAM,IAAI,KAAK,CAAC,8BAA8B,CAAC,CAAC;qBACjD;oBACD,OAAO,IAAI,iEAA8B,CAAE,MAAc,CAAC,IAAI,CAAC,CAAC;gBAClE,CAAC;aACF;SACF;QACD,OAAO,EAAE,CAAC,wBAAY,EAAE,sBAAU,EAAE,2BAAe,CAAC;KACrD,CAAC;GACW,aAAa,CAAG;AAAhB,sCAAa","sourcesContent":["// Copyright 2020-2023 SubQuery Pte Ltd authors & contributors\n// SPDX-License-Identifier: GPL-3.0\n\nimport { isMainThread } from 'worker_threads';\nimport { Module } from '@nestjs/common';\nimport { EventEmitter2 } from '@nestjs/event-emitter';\nimport {\n ApiService,\n StoreService,\n PoiService,\n MmrService,\n ConnectionPoolService,\n StoreCacheService,\n WorkerDynamicDsService,\n PgMmrCacheService,\n MmrQueryService,\n ConnectionPoolStateManager,\n WorkerConnectionPoolStateManager,\n NodeConfig,\n} from '@subql/node-core';\nimport { SubqueryProject } from '../configure/SubqueryProject';\nimport { StellarApiService } from '../stellar';\nimport { StellarApiConnection } from '../stellar/api.connection';\nimport { DsProcessorService } from './ds-processor.service';\nimport { DynamicDsService } from './dynamic-ds.service';\nimport { IndexerManager } from './indexer.manager';\nimport { ProjectService } from './project.service';\nimport { SandboxService } from './sandbox.service';\nimport { UnfinalizedBlocksService } from './unfinalizedBlocks.service';\nimport { WorkerService } from './worker/worker.service';\nimport { WorkerUnfinalizedBlocksService } from './worker/worker.unfinalizedBlocks.service';\n\n@Module({\n providers: [\n IndexerManager,\n StoreCacheService,\n StoreService,\n {\n provide: ConnectionPoolStateManager,\n useFactory: () => {\n if (isMainThread) {\n throw new Error('Expected to be worker thread');\n }\n return new WorkerConnectionPoolStateManager((global as any).host);\n },\n },\n ConnectionPoolService,\n {\n provide: ApiService,\n useFactory: async (\n project: SubqueryProject,\n connectionPoolService: ConnectionPoolService<StellarApiConnection>,\n eventEmitter: EventEmitter2,\n ) => {\n const apiService = new StellarApiService(\n project,\n connectionPoolService,\n eventEmitter,\n );\n await apiService.init();\n return apiService;\n },\n inject: ['ISubqueryProject', ConnectionPoolService, EventEmitter2],\n },\n SandboxService,\n DsProcessorService,\n {\n provide: DynamicDsService,\n useFactory: () => {\n if (isMainThread) {\n throw new Error('Expected to be worker thread');\n }\n return new WorkerDynamicDsService((global as any).host);\n },\n },\n PoiService,\n MmrService,\n PgMmrCacheService,\n MmrQueryService,\n {\n provide: 'IProjectService',\n useClass: ProjectService,\n },\n WorkerService,\n {\n provide: UnfinalizedBlocksService,\n useFactory: () => {\n if (isMainThread) {\n throw new Error('Expected to be worker thread');\n }\n return new WorkerUnfinalizedBlocksService((global as any).host);\n },\n },\n ],\n exports: [StoreService, MmrService, MmrQueryService],\n})\nexport class IndexerModule {}\n"]}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { EventEmitter2 } from '@nestjs/event-emitter';
|
|
2
|
+
import { PoiService, MmrService, BaseProjectService, StoreService, NodeConfig, ApiService, MmrQueryService } from '@subql/node-core';
|
|
3
|
+
import { Sequelize } from '@subql/x-sequelize';
|
|
4
|
+
import { SubqlProjectDs, SubqueryProject } from '../configure/SubqueryProject';
|
|
5
|
+
import { DsProcessorService } from './ds-processor.service';
|
|
6
|
+
import { DynamicDsService } from './dynamic-ds.service';
|
|
7
|
+
import { UnfinalizedBlocksService } from './unfinalizedBlocks.service';
|
|
8
|
+
export declare class ProjectService extends BaseProjectService<ApiService, SubqlProjectDs> {
|
|
9
|
+
protected packageVersion: any;
|
|
10
|
+
constructor(dsProcessorService: DsProcessorService, apiService: ApiService, poiService: PoiService, mmrService: MmrService, mmrQueryService: MmrQueryService, sequelize: Sequelize, project: SubqueryProject, storeService: StoreService, nodeConfig: NodeConfig, dynamicDsService: DynamicDsService, eventEmitter: EventEmitter2, unfinalizedBlockService: UnfinalizedBlocksService);
|
|
11
|
+
protected generateTimestampReferenceForBlockFilters(ds: SubqlProjectDs[]): Promise<SubqlProjectDs[]>;
|
|
12
|
+
protected getStartBlockDatasources(): SubqlProjectDs[];
|
|
13
|
+
}
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
// Copyright 2020-2023 SubQuery Pte Ltd authors & contributors
|
|
3
|
+
// SPDX-License-Identifier: GPL-3.0
|
|
4
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
5
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
6
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
7
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
8
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
9
|
+
};
|
|
10
|
+
var __metadata = (this && this.__metadata) || function (k, v) {
|
|
11
|
+
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
12
|
+
};
|
|
13
|
+
var __param = (this && this.__param) || function (paramIndex, decorator) {
|
|
14
|
+
return function (target, key) { decorator(target, key, paramIndex); }
|
|
15
|
+
};
|
|
16
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
+
exports.ProjectService = void 0;
|
|
18
|
+
const common_1 = require("@nestjs/common");
|
|
19
|
+
const event_emitter_1 = require("@nestjs/event-emitter");
|
|
20
|
+
const node_core_1 = require("@subql/node-core");
|
|
21
|
+
const x_sequelize_1 = require("@subql/x-sequelize");
|
|
22
|
+
const SubqueryProject_1 = require("../configure/SubqueryProject");
|
|
23
|
+
const ds_processor_service_1 = require("./ds-processor.service");
|
|
24
|
+
const dynamic_ds_service_1 = require("./dynamic-ds.service");
|
|
25
|
+
const unfinalizedBlocks_service_1 = require("./unfinalizedBlocks.service");
|
|
26
|
+
// eslint-disable-next-line @typescript-eslint/no-var-requires
|
|
27
|
+
const { version: packageVersion } = require('../../package.json');
|
|
28
|
+
let ProjectService = class ProjectService extends node_core_1.BaseProjectService {
|
|
29
|
+
constructor(dsProcessorService, apiService, poiService, mmrService, mmrQueryService, sequelize, project, storeService, nodeConfig, dynamicDsService, eventEmitter, unfinalizedBlockService) {
|
|
30
|
+
super(dsProcessorService, apiService, poiService, mmrService, mmrQueryService, sequelize, project, storeService, nodeConfig, dynamicDsService, eventEmitter, unfinalizedBlockService);
|
|
31
|
+
this.packageVersion = packageVersion;
|
|
32
|
+
}
|
|
33
|
+
// eslint-disable-next-line @typescript-eslint/require-await
|
|
34
|
+
async generateTimestampReferenceForBlockFilters(ds) {
|
|
35
|
+
//throw new Error('Block filters not implemented yet');
|
|
36
|
+
return Promise.resolve(ds);
|
|
37
|
+
//return generateTimestampReferenceForBlockFilters(ds, this.apiService.api);
|
|
38
|
+
}
|
|
39
|
+
getStartBlockDatasources() {
|
|
40
|
+
return this.project.dataSources;
|
|
41
|
+
}
|
|
42
|
+
};
|
|
43
|
+
ProjectService = __decorate([
|
|
44
|
+
(0, common_1.Injectable)(),
|
|
45
|
+
__param(6, (0, common_1.Inject)('ISubqueryProject')),
|
|
46
|
+
__metadata("design:paramtypes", [ds_processor_service_1.DsProcessorService,
|
|
47
|
+
node_core_1.ApiService,
|
|
48
|
+
node_core_1.PoiService,
|
|
49
|
+
node_core_1.MmrService,
|
|
50
|
+
node_core_1.MmrQueryService,
|
|
51
|
+
x_sequelize_1.Sequelize,
|
|
52
|
+
SubqueryProject_1.SubqueryProject,
|
|
53
|
+
node_core_1.StoreService,
|
|
54
|
+
node_core_1.NodeConfig,
|
|
55
|
+
dynamic_ds_service_1.DynamicDsService,
|
|
56
|
+
event_emitter_1.EventEmitter2,
|
|
57
|
+
unfinalizedBlocks_service_1.UnfinalizedBlocksService])
|
|
58
|
+
], ProjectService);
|
|
59
|
+
exports.ProjectService = ProjectService;
|
|
60
|
+
//# sourceMappingURL=project.service.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"project.service.js","sourceRoot":"","sources":["../../src/indexer/project.service.ts"],"names":[],"mappings":";AAAA,8DAA8D;AAC9D,mCAAmC;;;;;;;;;;;;;;;AAEnC,2CAAoD;AACpD,yDAAsD;AACtD,gDAQ0B;AAC1B,oDAA+C;AAC/C,kEAIsC;AACtC,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;IAGC,YACE,kBAAsC,EACtC,UAAsB,EACtB,UAAsB,EACtB,UAAsB,EACtB,eAAgC,EAChC,SAAoB,EACQ,OAAwB,EACpD,YAA0B,EAC1B,UAAsB,EACtB,gBAAkC,EAClC,YAA2B,EAC3B,uBAAiD;QAEjD,KAAK,CACH,kBAAkB,EAClB,UAAU,EACV,UAAU,EACV,UAAU,EACV,eAAe,EACf,SAAS,EACT,OAAO,EACP,YAAY,EACZ,UAAU,EACV,gBAAgB,EAChB,YAAY,EACZ,uBAAuB,CACxB,CAAC;QA7BM,mBAAc,GAAG,cAAc,CAAC;IA8B1C,CAAC;IAED,4DAA4D;IAClD,KAAK,CAAC,yCAAyC,CACvD,EAAoB;QAEpB,uDAAuD;QACvD,OAAO,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;QAC3B,4EAA4E;IAC9E,CAAC;IAES,wBAAwB;QAChC,OAAO,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC;IAClC,CAAC;CACF,CAAA;AAhDY,cAAc;IAD1B,IAAA,mBAAU,GAAE;IAcR,WAAA,IAAA,eAAM,EAAC,kBAAkB,CAAC,CAAA;qCANP,yCAAkB;QAC1B,sBAAU;QACV,sBAAU;QACV,sBAAU;QACL,2BAAe;QACrB,uBAAS;QACiB,iCAAe;QACtC,wBAAY;QACd,sBAAU;QACJ,qCAAgB;QACpB,6BAAa;QACF,oDAAwB;GAlBxC,cAAc,CAgD1B;AAhDY,wCAAc","sourcesContent":["// Copyright 2020-2023 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 {\n PoiService,\n MmrService,\n BaseProjectService,\n StoreService,\n NodeConfig,\n ApiService,\n MmrQueryService,\n} from '@subql/node-core';\nimport { Sequelize } from '@subql/x-sequelize';\nimport {\n // generateTimestampReferenceForBlockFilters,\n SubqlProjectDs,\n SubqueryProject,\n} from '../configure/SubqueryProject';\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,\n SubqlProjectDs\n> {\n protected packageVersion = packageVersion;\n\n constructor(\n dsProcessorService: DsProcessorService,\n apiService: ApiService,\n poiService: PoiService,\n mmrService: MmrService,\n mmrQueryService: MmrQueryService,\n sequelize: Sequelize,\n @Inject('ISubqueryProject') project: SubqueryProject,\n storeService: StoreService,\n nodeConfig: NodeConfig,\n dynamicDsService: DynamicDsService,\n eventEmitter: EventEmitter2,\n unfinalizedBlockService: UnfinalizedBlocksService,\n ) {\n super(\n dsProcessorService,\n apiService,\n poiService,\n mmrService,\n mmrQueryService,\n sequelize,\n project,\n storeService,\n nodeConfig,\n dynamicDsService,\n eventEmitter,\n unfinalizedBlockService,\n );\n }\n\n // eslint-disable-next-line @typescript-eslint/require-await\n protected async generateTimestampReferenceForBlockFilters(\n ds: SubqlProjectDs[],\n ): Promise<SubqlProjectDs[]> {\n //throw new Error('Block filters not implemented yet');\n return Promise.resolve(ds);\n //return generateTimestampReferenceForBlockFilters(ds, this.apiService.api);\n }\n\n protected getStartBlockDatasources(): SubqlProjectDs[] {\n return this.project.dataSources;\n }\n}\n"]}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { BaseDataSource } from '@subql/common';
|
|
2
|
+
import { NodeConfig, StoreService, IndexerSandbox, ISubqueryProject, ApiService } from '@subql/node-core';
|
|
3
|
+
import SafeStellarProvider from '../stellar/safe-api';
|
|
4
|
+
export declare class SandboxService {
|
|
5
|
+
private readonly apiService;
|
|
6
|
+
private readonly storeService;
|
|
7
|
+
private readonly nodeConfig;
|
|
8
|
+
private readonly project;
|
|
9
|
+
private processorCache;
|
|
10
|
+
constructor(apiService: ApiService, storeService: StoreService, nodeConfig: NodeConfig, project: ISubqueryProject);
|
|
11
|
+
getDsProcessor(ds: BaseDataSource, api: SafeStellarProvider): IndexerSandbox;
|
|
12
|
+
private getDataSourceEntry;
|
|
13
|
+
}
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
// Copyright 2020-2023 SubQuery Pte Ltd authors & contributors
|
|
3
|
+
// SPDX-License-Identifier: GPL-3.0
|
|
4
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
5
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
6
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
7
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
8
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
9
|
+
};
|
|
10
|
+
var __metadata = (this && this.__metadata) || function (k, v) {
|
|
11
|
+
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
12
|
+
};
|
|
13
|
+
var __param = (this && this.__param) || function (paramIndex, decorator) {
|
|
14
|
+
return function (target, key) { decorator(target, key, paramIndex); }
|
|
15
|
+
};
|
|
16
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
+
exports.SandboxService = void 0;
|
|
18
|
+
const worker_threads_1 = require("worker_threads");
|
|
19
|
+
const common_1 = require("@nestjs/common");
|
|
20
|
+
const node_core_1 = require("@subql/node-core");
|
|
21
|
+
/* It would be nice to move this to node core but need to find a way to inject other things into the sandbox */
|
|
22
|
+
let SandboxService = class SandboxService {
|
|
23
|
+
constructor(apiService, storeService, nodeConfig, project) {
|
|
24
|
+
this.apiService = apiService;
|
|
25
|
+
this.storeService = storeService;
|
|
26
|
+
this.nodeConfig = nodeConfig;
|
|
27
|
+
this.project = project;
|
|
28
|
+
this.processorCache = {};
|
|
29
|
+
}
|
|
30
|
+
getDsProcessor(ds, api) {
|
|
31
|
+
const store = worker_threads_1.isMainThread
|
|
32
|
+
? this.storeService.getStore()
|
|
33
|
+
: (0, node_core_1.hostStoreToStore)(global.host); // Provided in worker.ts
|
|
34
|
+
const entry = this.getDataSourceEntry(ds);
|
|
35
|
+
let processor = this.processorCache[entry];
|
|
36
|
+
if (!processor) {
|
|
37
|
+
processor = new node_core_1.IndexerSandbox({
|
|
38
|
+
store,
|
|
39
|
+
root: this.project.root,
|
|
40
|
+
entry,
|
|
41
|
+
chainId: this.project.network.chainId,
|
|
42
|
+
}, this.nodeConfig);
|
|
43
|
+
this.processorCache[entry] = processor;
|
|
44
|
+
}
|
|
45
|
+
processor.freeze(api, 'api');
|
|
46
|
+
if (this.nodeConfig.unsafe) {
|
|
47
|
+
processor.freeze(this.apiService.api.api, 'unsafeApi');
|
|
48
|
+
}
|
|
49
|
+
processor.freeze(this.project.network.chainId, 'chainId');
|
|
50
|
+
return processor;
|
|
51
|
+
}
|
|
52
|
+
getDataSourceEntry(ds) {
|
|
53
|
+
return ds.mapping.file;
|
|
54
|
+
}
|
|
55
|
+
};
|
|
56
|
+
SandboxService = __decorate([
|
|
57
|
+
(0, common_1.Injectable)(),
|
|
58
|
+
__param(3, (0, common_1.Inject)('ISubqueryProject')),
|
|
59
|
+
__metadata("design:paramtypes", [node_core_1.ApiService,
|
|
60
|
+
node_core_1.StoreService,
|
|
61
|
+
node_core_1.NodeConfig, Object])
|
|
62
|
+
], SandboxService);
|
|
63
|
+
exports.SandboxService = SandboxService;
|
|
64
|
+
//# sourceMappingURL=sandbox.service.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sandbox.service.js","sourceRoot":"","sources":["../../src/indexer/sandbox.service.ts"],"names":[],"mappings":";AAAA,8DAA8D;AAC9D,mCAAmC;;;;;;;;;;;;;;;AAEnC,mDAA8C;AAC9C,2CAAoD;AAEpD,gDAO0B;AAI1B,+GAA+G;AAExG,IAAM,cAAc,GAApB,MAAM,cAAc;IAGzB,YACmB,UAAsB,EACtB,YAA0B,EAC1B,UAAsB,EACM,OAAyB;QAHrD,eAAU,GAAV,UAAU,CAAY;QACtB,iBAAY,GAAZ,YAAY,CAAc;QAC1B,eAAU,GAAV,UAAU,CAAY;QACM,YAAO,GAAP,OAAO,CAAkB;QANhE,mBAAc,GAAmC,EAAE,CAAC;IAOzD,CAAC;IAEJ,cAAc,CAAC,EAAkB,EAAE,GAAwB;QACzD,MAAM,KAAK,GAAU,6BAAY;YAC/B,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,QAAQ,EAAE;YAC9B,CAAC,CAAC,IAAA,4BAAgB,EAAE,MAAc,CAAC,IAAI,CAAC,CAAC,CAAC,wBAAwB;QAEpE,MAAM,KAAK,GAAG,IAAI,CAAC,kBAAkB,CAAC,EAAE,CAAC,CAAC;QAC1C,IAAI,SAAS,GAAG,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC;QAC3C,IAAI,CAAC,SAAS,EAAE;YACd,SAAS,GAAG,IAAI,0BAAc,CAC5B;gBACE,KAAK;gBACL,IAAI,EAAE,IAAI,CAAC,OAAO,CAAC,IAAI;gBACvB,KAAK;gBACL,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,OAAO;aACtC,EACD,IAAI,CAAC,UAAU,CAChB,CAAC;YACF,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,GAAG,SAAS,CAAC;SACxC;QAED,SAAS,CAAC,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;QAC7B,IAAI,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE;YAC1B,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,GAAG,EAAE,WAAW,CAAC,CAAC;SACxD;QACD,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;QAC1D,OAAO,SAAS,CAAC;IACnB,CAAC;IAEO,kBAAkB,CAAC,EAAkB;QAC3C,OAAO,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC;IACzB,CAAC;CACF,CAAA;AAzCY,cAAc;IAD1B,IAAA,mBAAU,GAAE;IAQR,WAAA,IAAA,eAAM,EAAC,kBAAkB,CAAC,CAAA;qCAHE,sBAAU;QACR,wBAAY;QACd,sBAAU;GAN9B,cAAc,CAyC1B;AAzCY,wCAAc","sourcesContent":["// Copyright 2020-2023 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 { BaseDataSource } from '@subql/common';\nimport {\n NodeConfig,\n StoreService,\n IndexerSandbox,\n hostStoreToStore,\n ISubqueryProject,\n ApiService,\n} from '@subql/node-core';\nimport { Store } from '@subql/types-stellar';\nimport SafeStellarProvider from '../stellar/safe-api';\n\n/* It would be nice to move this to node core but need to find a way to inject other things into the sandbox */\n@Injectable()\nexport class SandboxService {\n private processorCache: Record<string, IndexerSandbox> = {};\n\n constructor(\n private readonly apiService: ApiService,\n private readonly storeService: StoreService,\n private readonly nodeConfig: NodeConfig,\n @Inject('ISubqueryProject') private readonly project: ISubqueryProject,\n ) {}\n\n getDsProcessor(ds: BaseDataSource, api: SafeStellarProvider): IndexerSandbox {\n const store: Store = isMainThread\n ? this.storeService.getStore()\n : hostStoreToStore((global as any).host); // Provided in worker.ts\n\n const entry = this.getDataSourceEntry(ds);\n let processor = this.processorCache[entry];\n if (!processor) {\n processor = new IndexerSandbox(\n {\n store,\n root: this.project.root,\n entry,\n chainId: this.project.network.chainId,\n },\n this.nodeConfig,\n );\n this.processorCache[entry] = processor;\n }\n\n processor.freeze(api, 'api');\n if (this.nodeConfig.unsafe) {\n processor.freeze(this.apiService.api.api, 'unsafeApi');\n }\n processor.freeze(this.project.network.chainId, 'chainId');\n return processor;\n }\n\n private getDataSourceEntry(ds: BaseDataSource): string {\n return ds.mapping.file;\n }\n}\n"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export type BestBlocks = Record<number, string>;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/indexer/types.ts"],"names":[],"mappings":";AAAA,8DAA8D;AAC9D,mCAAmC","sourcesContent":["// Copyright 2020-2023 SubQuery Pte Ltd authors & contributors\n// SPDX-License-Identifier: GPL-3.0\n\nexport type BestBlocks = Record<number, string>;\n"]}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { ApiService, BaseUnfinalizedBlocksService, Header, NodeConfig, StoreCacheService } from '@subql/node-core';
|
|
2
|
+
import { BlockWrapper } from '@subql/types-stellar';
|
|
3
|
+
export declare function blockToHeader(blockHeight: number): Header;
|
|
4
|
+
export declare class UnfinalizedBlocksService extends BaseUnfinalizedBlocksService<BlockWrapper> {
|
|
5
|
+
private readonly apiService;
|
|
6
|
+
constructor(apiService: ApiService, nodeConfig: NodeConfig, storeCache: StoreCacheService);
|
|
7
|
+
protected blockToHeader(block: BlockWrapper): Header;
|
|
8
|
+
protected getFinalizedHead(): Promise<Header>;
|
|
9
|
+
protected getHeaderForHash(hash: string): Promise<Header>;
|
|
10
|
+
protected getHeaderForHeight(height: number): Promise<Header>;
|
|
11
|
+
}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
// Copyright 2020-2023 SubQuery Pte Ltd authors & contributors
|
|
3
|
+
// SPDX-License-Identifier: GPL-3.0
|
|
4
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
5
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
6
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
7
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
8
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
9
|
+
};
|
|
10
|
+
var __metadata = (this && this.__metadata) || function (k, v) {
|
|
11
|
+
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
12
|
+
};
|
|
13
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
14
|
+
exports.UnfinalizedBlocksService = exports.blockToHeader = void 0;
|
|
15
|
+
const common_1 = require("@nestjs/common");
|
|
16
|
+
const node_core_1 = require("@subql/node-core");
|
|
17
|
+
const logger = (0, node_core_1.getLogger)('unfinalized');
|
|
18
|
+
function blockToHeader(blockHeight) {
|
|
19
|
+
return {
|
|
20
|
+
blockHeight: blockHeight,
|
|
21
|
+
blockHash: blockHeight.toString(),
|
|
22
|
+
parentHash: (blockHeight - 1).toString(),
|
|
23
|
+
};
|
|
24
|
+
}
|
|
25
|
+
exports.blockToHeader = blockToHeader;
|
|
26
|
+
let UnfinalizedBlocksService = class UnfinalizedBlocksService extends node_core_1.BaseUnfinalizedBlocksService {
|
|
27
|
+
constructor(apiService, nodeConfig, storeCache) {
|
|
28
|
+
super(nodeConfig, storeCache);
|
|
29
|
+
this.apiService = apiService;
|
|
30
|
+
}
|
|
31
|
+
blockToHeader(block) {
|
|
32
|
+
return blockToHeader(block.block.ledger);
|
|
33
|
+
}
|
|
34
|
+
async getFinalizedHead() {
|
|
35
|
+
const finalizedHeight = await this.apiService.api.getFinalizedBlockHeight();
|
|
36
|
+
return blockToHeader(finalizedHeight);
|
|
37
|
+
}
|
|
38
|
+
async getHeaderForHash(hash) {
|
|
39
|
+
return this.getHeaderForHeight(parseInt(hash, 10));
|
|
40
|
+
}
|
|
41
|
+
async getHeaderForHeight(height) {
|
|
42
|
+
return Promise.resolve(blockToHeader(height));
|
|
43
|
+
}
|
|
44
|
+
};
|
|
45
|
+
UnfinalizedBlocksService = __decorate([
|
|
46
|
+
(0, common_1.Injectable)(),
|
|
47
|
+
__metadata("design:paramtypes", [node_core_1.ApiService,
|
|
48
|
+
node_core_1.NodeConfig,
|
|
49
|
+
node_core_1.StoreCacheService])
|
|
50
|
+
], UnfinalizedBlocksService);
|
|
51
|
+
exports.UnfinalizedBlocksService = UnfinalizedBlocksService;
|
|
52
|
+
//# sourceMappingURL=unfinalizedBlocks.service.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"unfinalizedBlocks.service.js","sourceRoot":"","sources":["../../src/indexer/unfinalizedBlocks.service.ts"],"names":[],"mappings":";AAAA,8DAA8D;AAC9D,mCAAmC;;;;;;;;;;;;AAEnC,2CAA4C;AAC5C,gDAO0B;AAG1B,MAAM,MAAM,GAAG,IAAA,qBAAS,EAAC,aAAa,CAAC,CAAC;AAExC,SAAgB,aAAa,CAAC,WAAmB;IAC/C,OAAO;QACL,WAAW,EAAE,WAAW;QACxB,SAAS,EAAE,WAAW,CAAC,QAAQ,EAAE;QACjC,UAAU,EAAE,CAAC,WAAW,GAAG,CAAC,CAAC,CAAC,QAAQ,EAAE;KACzC,CAAC;AACJ,CAAC;AAND,sCAMC;AAGM,IAAM,wBAAwB,GAA9B,MAAM,wBAAyB,SAAQ,wCAA0C;IACtF,YACmB,UAAsB,EACvC,UAAsB,EACtB,UAA6B;QAE7B,KAAK,CAAC,UAAU,EAAE,UAAU,CAAC,CAAC;QAJb,eAAU,GAAV,UAAU,CAAY;IAKzC,CAAC;IAES,aAAa,CAAC,KAAmB;QACzC,OAAO,aAAa,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;IAC3C,CAAC;IAES,KAAK,CAAC,gBAAgB;QAC9B,MAAM,eAAe,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,uBAAuB,EAAE,CAAC;QAC5E,OAAO,aAAa,CAAC,eAAe,CAAC,CAAC;IACxC,CAAC;IAES,KAAK,CAAC,gBAAgB,CAAC,IAAY;QAC3C,OAAO,IAAI,CAAC,kBAAkB,CAAC,QAAQ,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,CAAC;IACrD,CAAC;IAES,KAAK,CAAC,kBAAkB,CAAC,MAAc;QAC/C,OAAO,OAAO,CAAC,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC,CAAC;IAChD,CAAC;CACF,CAAA;AAzBY,wBAAwB;IADpC,IAAA,mBAAU,GAAE;qCAGoB,sBAAU;QAC3B,sBAAU;QACV,6BAAiB;GAJpB,wBAAwB,CAyBpC;AAzBY,4DAAwB","sourcesContent":["// Copyright 2020-2023 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} from '@subql/node-core';\nimport { BlockWrapper } from '@subql/types-stellar';\n\nconst logger = getLogger('unfinalized');\n\nexport function blockToHeader(blockHeight: number): Header {\n return {\n blockHeight: blockHeight,\n blockHash: blockHeight.toString(),\n parentHash: (blockHeight - 1).toString(),\n };\n}\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 protected blockToHeader(block: BlockWrapper): Header {\n return blockToHeader(block.block.ledger);\n }\n\n protected async getFinalizedHead(): Promise<Header> {\n const finalizedHeight = await this.apiService.api.getFinalizedBlockHeight();\n return blockToHeader(finalizedHeight);\n }\n\n protected async getHeaderForHash(hash: string): Promise<Header> {\n return this.getHeaderForHeight(parseInt(hash, 10));\n }\n\n protected async getHeaderForHeight(height: number): Promise<Header> {\n return Promise.resolve(blockToHeader(height));\n }\n}\n"]}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import { ProcessBlockResponse } from '@subql/node-core';
|
|
2
|
+
import { FetchBlockResponse, WorkerStatusResponse } from './worker.service';
|
|
3
|
+
declare function initWorker(): Promise<void>;
|
|
4
|
+
declare function fetchBlock(height: number): Promise<FetchBlockResponse>;
|
|
5
|
+
declare function processBlock(height: number): Promise<ProcessBlockResponse>;
|
|
6
|
+
declare function numFetchedBlocks(): Promise<number>;
|
|
7
|
+
declare function numFetchingBlocks(): Promise<number>;
|
|
8
|
+
declare function getStatus(): Promise<WorkerStatusResponse>;
|
|
9
|
+
declare function getMemoryLeft(): Promise<number>;
|
|
10
|
+
declare function waitForWorkerBatchSize(heapSizeInBytes: number): Promise<void>;
|
|
11
|
+
type InitWorker = typeof initWorker;
|
|
12
|
+
type FetchBlock = typeof fetchBlock;
|
|
13
|
+
type ProcessBlock = typeof processBlock;
|
|
14
|
+
type NumFetchedBlocks = typeof numFetchedBlocks;
|
|
15
|
+
type NumFetchingBlocks = typeof numFetchingBlocks;
|
|
16
|
+
type GetWorkerStatus = typeof getStatus;
|
|
17
|
+
type GetMemoryLeft = typeof getMemoryLeft;
|
|
18
|
+
type WaitForWorkerBatchSize = typeof waitForWorkerBatchSize;
|
|
19
|
+
export type IIndexerWorker = {
|
|
20
|
+
processBlock: ProcessBlock;
|
|
21
|
+
fetchBlock: FetchBlock;
|
|
22
|
+
numFetchedBlocks: NumFetchedBlocks;
|
|
23
|
+
numFetchingBlocks: NumFetchingBlocks;
|
|
24
|
+
getStatus: GetWorkerStatus;
|
|
25
|
+
getMemoryLeft: GetMemoryLeft;
|
|
26
|
+
waitForWorkerBatchSize: WaitForWorkerBatchSize;
|
|
27
|
+
};
|
|
28
|
+
export type IInitIndexerWorker = IIndexerWorker & {
|
|
29
|
+
initWorker: InitWorker;
|
|
30
|
+
};
|
|
31
|
+
export {};
|