@subql/node-stellar 2.12.1 → 2.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/dist/.tsbuildinfo +1 -1
- package/dist/configure/SubqueryProject.d.ts +19 -19
- package/dist/configure/SubqueryProject.js +49 -88
- package/dist/configure/SubqueryProject.js.map +1 -1
- package/dist/configure/configure.module.d.ts +3 -6
- package/dist/configure/configure.module.js +22 -89
- package/dist/configure/configure.module.js.map +1 -1
- package/dist/indexer/blockDispatcher/block-dispatcher.service.d.ts +4 -4
- package/dist/indexer/blockDispatcher/block-dispatcher.service.js +6 -5
- package/dist/indexer/blockDispatcher/block-dispatcher.service.js.map +1 -1
- package/dist/indexer/blockDispatcher/worker-block-dispatcher.service.d.ts +4 -4
- package/dist/indexer/blockDispatcher/worker-block-dispatcher.service.js +9 -27
- package/dist/indexer/blockDispatcher/worker-block-dispatcher.service.js.map +1 -1
- package/dist/indexer/dictionary.service.d.ts +3 -3
- package/dist/indexer/dictionary.service.js +7 -2
- package/dist/indexer/dictionary.service.js.map +1 -1
- package/dist/indexer/ds-processor.service.d.ts +4 -4
- package/dist/indexer/ds-processor.service.js.map +1 -1
- package/dist/indexer/dynamic-ds.service.d.ts +3 -3
- package/dist/indexer/dynamic-ds.service.js +12 -2
- package/dist/indexer/dynamic-ds.service.js.map +1 -1
- package/dist/indexer/fetch.module.js +13 -10
- package/dist/indexer/fetch.module.js.map +1 -1
- package/dist/indexer/fetch.service.d.ts +12 -8
- package/dist/indexer/fetch.service.js +25 -47
- package/dist/indexer/fetch.service.js.map +1 -1
- package/dist/indexer/fetch.service.spec.js +4 -4
- package/dist/indexer/fetch.service.spec.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.d.ts +10 -6
- package/dist/indexer/project.service.js +19 -14
- package/dist/indexer/project.service.js.map +1 -1
- package/dist/indexer/sandbox.service.d.ts +1 -1
- package/dist/indexer/sandbox.service.js +1 -0
- package/dist/indexer/sandbox.service.js.map +1 -1
- package/dist/indexer/unfinalizedBlocks.service.js +24 -0
- package/dist/indexer/unfinalizedBlocks.service.js.map +1 -1
- package/dist/indexer/worker/worker-fetch.module.d.ts +2 -0
- package/dist/indexer/{indexer.module.js → worker/worker-fetch.module.js} +23 -25
- package/dist/indexer/worker/worker-fetch.module.js.map +1 -0
- package/dist/indexer/worker/worker.d.ts +4 -28
- package/dist/indexer/worker/worker.js +8 -71
- package/dist/indexer/worker/worker.js.map +1 -1
- package/dist/indexer/worker/worker.module.js +2 -2
- package/dist/indexer/worker/worker.module.js.map +1 -1
- package/dist/indexer/worker/worker.service.d.ts +11 -13
- package/dist/indexer/worker/worker.service.js +14 -54
- package/dist/indexer/worker/worker.service.js.map +1 -1
- package/dist/indexer/worker/worker.unfinalizedBlocks.service.d.ts +1 -5
- package/dist/indexer/worker/worker.unfinalizedBlocks.service.js +1 -4
- package/dist/indexer/worker/worker.unfinalizedBlocks.service.js.map +1 -1
- package/dist/init.js +2 -1
- package/dist/init.js.map +1 -1
- package/dist/main.js +4 -7
- package/dist/main.js.map +1 -1
- package/dist/stellar/api.connection.d.ts +1 -1
- package/dist/stellar/api.connection.js.map +1 -1
- package/dist/stellar/api.service.stellar.d.ts +4 -6
- package/dist/stellar/api.service.stellar.js +33 -68
- package/dist/stellar/api.service.stellar.js.map +1 -1
- package/dist/stellar/api.service.stellar.spec.d.ts +1 -5
- package/dist/stellar/api.service.stellar.spec.js +7 -6
- package/dist/stellar/api.service.stellar.spec.js.map +1 -1
- package/dist/stellar/api.stellar.js +1 -7
- package/dist/stellar/api.stellar.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/subcommands/reindex.init.js +1 -2
- package/dist/subcommands/reindex.init.js.map +1 -1
- package/dist/subcommands/reindex.module.js +9 -6
- package/dist/subcommands/reindex.module.js.map +1 -1
- package/dist/subcommands/testing.init.js +2 -4
- package/dist/subcommands/testing.init.js.map +1 -1
- package/dist/subcommands/testing.module.js +9 -7
- package/dist/subcommands/testing.module.js.map +1 -1
- package/dist/subcommands/testing.service.d.ts +7 -4
- package/dist/subcommands/testing.service.js +2 -7
- package/dist/subcommands/testing.service.js.map +1 -1
- package/dist/utils/project.js.map +1 -1
- package/package.json +8 -7
- package/dist/indexer/indexer.module.d.ts +0 -2
- package/dist/indexer/indexer.module.js.map +0 -1
- package/dist/subcommands/mmrMigrate.init.d.ts +0 -2
- package/dist/subcommands/mmrMigrate.init.js +0 -28
- package/dist/subcommands/mmrMigrate.init.js.map +0 -1
- package/dist/subcommands/mmrMigrate.module.d.ts +0 -2
- package/dist/subcommands/mmrMigrate.module.js +0 -28
- package/dist/subcommands/mmrMigrate.module.js.map +0 -1
- package/dist/subcommands/mmrRegenerate.init.d.ts +0 -1
- package/dist/subcommands/mmrRegenerate.init.js +0 -28
- package/dist/subcommands/mmrRegenerate.init.js.map +0 -1
- package/dist/subcommands/mmrRegenerate.module.d.ts +0 -2
- package/dist/subcommands/mmrRegenerate.module.js +0 -30
- package/dist/subcommands/mmrRegenerate.module.js.map +0 -1
- package/dist/subcommands/reindex.service.d.ts +0 -11
- package/dist/subcommands/reindex.service.js +0 -46
- package/dist/subcommands/reindex.service.js.map +0 -1
|
@@ -1,9 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
// Copyright 2020-2023 SubQuery Pte Ltd authors & contributors
|
|
3
3
|
// SPDX-License-Identifier: GPL-3.0
|
|
4
|
-
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
5
|
-
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
6
|
-
};
|
|
7
4
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
8
5
|
// initlogger and yargs must be imported before all other imports
|
|
9
6
|
// making sure logger is defined before its called
|
|
@@ -13,32 +10,23 @@ const logger_1 = require("@subql/node-core/logger");
|
|
|
13
10
|
const yargs_1 = require("../../yargs");
|
|
14
11
|
const { argv } = yargs_1.yargsOptions;
|
|
15
12
|
(0, logger_1.initLogger)(argv.debug, argv.outputFmt, argv.logLevel);
|
|
16
|
-
const assert_1 = __importDefault(require("assert"));
|
|
17
13
|
const node_worker_threads_1 = require("node:worker_threads");
|
|
18
|
-
const v8_1 = require("v8");
|
|
19
14
|
const core_1 = require("@nestjs/core");
|
|
20
15
|
const node_core_1 = require("@subql/node-core");
|
|
21
|
-
const indexer_manager_1 = require("../indexer.manager");
|
|
22
16
|
const worker_module_1 = require("./worker.module");
|
|
23
17
|
const worker_service_1 = require("./worker.service");
|
|
24
|
-
const worker_unfinalizedBlocks_service_1 = require("./worker.unfinalizedBlocks.service");
|
|
25
|
-
let app;
|
|
26
|
-
let workerService;
|
|
27
18
|
const logger = (0, node_core_1.getLogger)(`worker #${node_worker_threads_1.threadId}`);
|
|
28
|
-
async function initWorker() {
|
|
19
|
+
async function initWorker(startHeight) {
|
|
29
20
|
try {
|
|
30
|
-
|
|
31
|
-
logger.
|
|
32
|
-
return;
|
|
33
|
-
}
|
|
34
|
-
app = await core_1.NestFactory.create(worker_module_1.WorkerModule, {
|
|
35
|
-
logger: new node_core_1.NestLogger(), // TIP: If the worker is crashing comment out this line for better logging
|
|
21
|
+
const app = await core_1.NestFactory.create(worker_module_1.WorkerModule, {
|
|
22
|
+
logger: new node_core_1.NestLogger(argv.debug), // TIP: If the worker is crashing comment out this line for better logging
|
|
36
23
|
});
|
|
37
24
|
await app.init();
|
|
38
|
-
const
|
|
25
|
+
const projectService = app.get('IProjectService');
|
|
39
26
|
// Initialise async services, we do this here rather than in factories so we can capture one off events
|
|
40
|
-
await
|
|
41
|
-
workerService = app.get(worker_service_1.WorkerService);
|
|
27
|
+
await projectService.init(startHeight);
|
|
28
|
+
const workerService = app.get(worker_service_1.WorkerService);
|
|
29
|
+
(0, node_core_1.initWorkerServices)(app, workerService);
|
|
42
30
|
}
|
|
43
31
|
catch (e) {
|
|
44
32
|
console.log('Failed to start worker', e);
|
|
@@ -46,58 +34,7 @@ async function initWorker() {
|
|
|
46
34
|
throw e;
|
|
47
35
|
}
|
|
48
36
|
}
|
|
49
|
-
|
|
50
|
-
(0, assert_1.default)(workerService, 'Not initialised');
|
|
51
|
-
return workerService.fetchBlock(height);
|
|
52
|
-
}
|
|
53
|
-
async function processBlock(height) {
|
|
54
|
-
(0, assert_1.default)(workerService, 'Not initialised');
|
|
55
|
-
return workerService.processBlock(height);
|
|
56
|
-
}
|
|
57
|
-
// eslint-disable-next-line @typescript-eslint/require-await
|
|
58
|
-
async function numFetchedBlocks() {
|
|
59
|
-
return workerService.numFetchedBlocks;
|
|
60
|
-
}
|
|
61
|
-
// eslint-disable-next-line @typescript-eslint/require-await
|
|
62
|
-
async function numFetchingBlocks() {
|
|
63
|
-
return workerService.numFetchingBlocks;
|
|
64
|
-
}
|
|
65
|
-
// eslint-disable-next-line @typescript-eslint/require-await
|
|
66
|
-
async function getStatus() {
|
|
67
|
-
return {
|
|
68
|
-
threadId: node_worker_threads_1.threadId,
|
|
69
|
-
fetchedBlocks: workerService.numFetchedBlocks,
|
|
70
|
-
toFetchBlocks: workerService.numFetchingBlocks,
|
|
71
|
-
isIndexing: workerService.isIndexing,
|
|
72
|
-
};
|
|
73
|
-
}
|
|
74
|
-
// eslint-disable-next-line @typescript-eslint/require-await
|
|
75
|
-
async function getMemoryLeft() {
|
|
76
|
-
const totalHeap = (0, v8_1.getHeapStatistics)().heap_size_limit;
|
|
77
|
-
const heapUsed = process.memoryUsage().heapUsed;
|
|
78
|
-
return totalHeap - heapUsed;
|
|
79
|
-
}
|
|
80
|
-
async function waitForWorkerBatchSize(heapSizeInBytes) {
|
|
81
|
-
await (0, node_core_1.waitForBatchSize)(heapSizeInBytes);
|
|
82
|
-
}
|
|
83
|
-
// Register these functions to be exposed to worker host
|
|
84
|
-
global.host = node_core_1.WorkerHost.create([
|
|
85
|
-
...node_core_1.hostStoreKeys,
|
|
86
|
-
...node_core_1.hostDynamicDsKeys,
|
|
87
|
-
...worker_unfinalizedBlocks_service_1.hostUnfinalizedBlocksKeys,
|
|
88
|
-
...node_core_1.hostConnectionPoolStateKeys,
|
|
89
|
-
], {
|
|
37
|
+
global.host = (0, node_core_1.createWorkerHost)([], {
|
|
90
38
|
initWorker,
|
|
91
|
-
fetchBlock,
|
|
92
|
-
processBlock,
|
|
93
|
-
numFetchedBlocks,
|
|
94
|
-
numFetchingBlocks,
|
|
95
|
-
getStatus,
|
|
96
|
-
getMemoryLeft,
|
|
97
|
-
waitForWorkerBatchSize,
|
|
98
|
-
}, logger);
|
|
99
|
-
process.on('uncaughtException', (e) => {
|
|
100
|
-
logger.error(e, 'Uncaught Exception');
|
|
101
|
-
throw e;
|
|
102
39
|
});
|
|
103
40
|
//# sourceMappingURL=worker.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"worker.js","sourceRoot":"","sources":["../../../src/indexer/worker/worker.ts"],"names":[],"mappings":";AAAA,8DAA8D;AAC9D,mCAAmC
|
|
1
|
+
{"version":3,"file":"worker.js","sourceRoot":"","sources":["../../../src/indexer/worker/worker.ts"],"names":[],"mappings":";AAAA,8DAA8D;AAC9D,mCAAmC;;AAEnC,iEAAiE;AACjE,kDAAkD;AAClD,wCAAwC;AACxC,oDAAqD;AACrD,wCAAwC;AACxC,uCAA2C;AAE3C,MAAM,EAAE,IAAI,EAAE,GAAG,oBAAY,CAAC;AAE9B,IAAA,mBAAU,EACR,IAAI,CAAC,KAAK,EACV,IAAI,CAAC,SAA+B,EACpC,IAAI,CAAC,QAA8B,CACpC,CAAC;AAEF,6DAA+C;AAC/C,uCAA2C;AAC3C,gDAM0B;AAE1B,mDAA+C;AAC/C,qDAAiD;AAEjD,MAAM,MAAM,GAAG,IAAA,qBAAS,EAAC,WAAW,8BAAQ,EAAE,CAAC,CAAC;AAEhD,KAAK,UAAU,UAAU,CAAC,WAAmB;IAC3C,IAAI;QACF,MAAM,GAAG,GAAG,MAAM,kBAAW,CAAC,MAAM,CAAC,4BAAY,EAAE;YACjD,MAAM,EAAE,IAAI,sBAAU,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,0EAA0E;SAC/G,CAAC,CAAC;QAEH,MAAM,GAAG,CAAC,IAAI,EAAE,CAAC;QAEjB,MAAM,cAAc,GAAmB,GAAG,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAC;QAClE,uGAAuG;QACvG,MAAM,cAAc,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QAEvC,MAAM,aAAa,GAAG,GAAG,CAAC,GAAG,CAAC,8BAAa,CAAC,CAAC;QAE7C,IAAA,8BAAkB,EAAC,GAAG,EAAE,aAAa,CAAC,CAAC;KACxC;IAAC,OAAO,CAAC,EAAE;QACV,OAAO,CAAC,GAAG,CAAC,wBAAwB,EAAE,CAAC,CAAC,CAAC;QACzC,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,wBAAwB,CAAC,CAAC;QAC1C,MAAM,CAAC,CAAC;KACT;AACH,CAAC;AAOA,MAAc,CAAC,IAAI,GAAG,IAAA,4BAAgB,EAAC,EAAE,EAAE;IAC1C,UAAU;CACX,CAAC,CAAC","sourcesContent":["// Copyright 2020-2023 SubQuery Pte Ltd authors & contributors\n// SPDX-License-Identifier: GPL-3.0\n\n// initlogger and yargs must be imported before all other imports\n// making sure logger is defined before its called\n// eslint-disable-next-line import/order\nimport { initLogger } from '@subql/node-core/logger';\n// eslint-disable-next-line import/order\nimport { yargsOptions } from '../../yargs';\n\nconst { argv } = yargsOptions;\n\ninitLogger(\n argv.debug,\n argv.outputFmt as 'json' | 'colored',\n argv.logLevel as string | undefined,\n);\n\nimport { threadId } from 'node:worker_threads';\nimport { NestFactory } from '@nestjs/core';\nimport {\n getLogger,\n NestLogger,\n initWorkerServices,\n IBaseIndexerWorker,\n createWorkerHost,\n} from '@subql/node-core';\nimport { ProjectService } from '../project.service';\nimport { WorkerModule } from './worker.module';\nimport { WorkerService } from './worker.service';\n\nconst logger = getLogger(`worker #${threadId}`);\n\nasync function initWorker(startHeight: number): Promise<void> {\n try {\n const app = await NestFactory.create(WorkerModule, {\n logger: new NestLogger(argv.debug), // TIP: If the worker is crashing comment out this line for better logging\n });\n\n await app.init();\n\n const projectService: ProjectService = app.get('IProjectService');\n // Initialise async services, we do this here rather than in factories so we can capture one off events\n await projectService.init(startHeight);\n\n const workerService = app.get(WorkerService);\n\n initWorkerServices(app, workerService);\n } catch (e) {\n console.log('Failed to start worker', e);\n logger.error(e, 'Failed to start worker');\n throw e;\n }\n}\nexport type IIndexerWorker = IBaseIndexerWorker;\n\nexport type IInitIndexerWorker = IIndexerWorker & {\n initWorker: typeof initWorker;\n};\n\n(global as any).host = createWorkerHost([], {\n initWorker,\n});\n"]}
|
|
@@ -14,7 +14,7 @@ const event_emitter_1 = require("@nestjs/event-emitter");
|
|
|
14
14
|
const schedule_1 = require("@nestjs/schedule");
|
|
15
15
|
const node_core_1 = require("@subql/node-core");
|
|
16
16
|
const configure_module_1 = require("../../configure/configure.module");
|
|
17
|
-
const
|
|
17
|
+
const worker_fetch_module_1 = require("./worker-fetch.module");
|
|
18
18
|
let WorkerModule = class WorkerModule {
|
|
19
19
|
};
|
|
20
20
|
WorkerModule = __decorate([
|
|
@@ -24,7 +24,7 @@ WorkerModule = __decorate([
|
|
|
24
24
|
event_emitter_1.EventEmitterModule.forRoot(),
|
|
25
25
|
configure_module_1.ConfigureModule.register(),
|
|
26
26
|
schedule_1.ScheduleModule.forRoot(),
|
|
27
|
-
|
|
27
|
+
worker_fetch_module_1.WorkerFetchModule,
|
|
28
28
|
],
|
|
29
29
|
controllers: [],
|
|
30
30
|
})
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"worker.module.js","sourceRoot":"","sources":["../../../src/indexer/worker/worker.module.ts"],"names":[],"mappings":";AAAA,8DAA8D;AAC9D,mCAAmC;;;;;;;;;AAEnC,2CAAwC;AACxC,yDAA2D;AAC3D,+CAAkD;AAClD,gDAA4C;AAC5C,uEAAmE;AACnE
|
|
1
|
+
{"version":3,"file":"worker.module.js","sourceRoot":"","sources":["../../../src/indexer/worker/worker.module.ts"],"names":[],"mappings":";AAAA,8DAA8D;AAC9D,mCAAmC;;;;;;;;;AAEnC,2CAAwC;AACxC,yDAA2D;AAC3D,+CAAkD;AAClD,gDAA4C;AAC5C,uEAAmE;AACnE,+DAA0D;AAYnD,IAAM,YAAY,GAAlB,MAAM,YAAY;CAAG,CAAA;AAAf,YAAY;IAVxB,IAAA,eAAM,EAAC;QACN,OAAO,EAAE;YACP,oBAAQ,CAAC,OAAO,EAAE;YAClB,kCAAkB,CAAC,OAAO,EAAE;YAC5B,kCAAe,CAAC,QAAQ,EAAE;YAC1B,yBAAc,CAAC,OAAO,EAAE;YACxB,uCAAiB;SAClB;QACD,WAAW,EAAE,EAAE;KAChB,CAAC;GACW,YAAY,CAAG;AAAf,oCAAY","sourcesContent":["// Copyright 2020-2023 SubQuery Pte Ltd authors & contributors\n// SPDX-License-Identifier: GPL-3.0\n\nimport { Module } from '@nestjs/common';\nimport { EventEmitterModule } from '@nestjs/event-emitter';\nimport { ScheduleModule } from '@nestjs/schedule';\nimport { DbModule } from '@subql/node-core';\nimport { ConfigureModule } from '../../configure/configure.module';\nimport { WorkerFetchModule } from './worker-fetch.module';\n\n@Module({\n imports: [\n DbModule.forRoot(),\n EventEmitterModule.forRoot(),\n ConfigureModule.register(),\n ScheduleModule.forRoot(),\n WorkerFetchModule,\n ],\n controllers: [],\n})\nexport class WorkerModule {}\n"]}
|
|
@@ -1,5 +1,7 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
1
|
+
import { SubqlStellarDataSource } from '@subql/common-stellar';
|
|
2
|
+
import { NodeConfig, IProjectService, ProcessBlockResponse, ApiService, BaseWorkerService, IProjectUpgradeService } from '@subql/node-core';
|
|
3
|
+
import { BlockWrapper } from '@subql/types-stellar';
|
|
4
|
+
import { StellarProjectDs } from '../../configure/SubqueryProject';
|
|
3
5
|
import { IndexerManager } from '../indexer.manager';
|
|
4
6
|
export type FetchBlockResponse = {
|
|
5
7
|
parentHash: string;
|
|
@@ -10,17 +12,13 @@ export type WorkerStatusResponse = {
|
|
|
10
12
|
fetchedBlocks: number;
|
|
11
13
|
toFetchBlocks: number;
|
|
12
14
|
};
|
|
13
|
-
export declare class WorkerService {
|
|
15
|
+
export declare class WorkerService extends BaseWorkerService<BlockWrapper, FetchBlockResponse, SubqlStellarDataSource, {}> {
|
|
14
16
|
private apiService;
|
|
15
17
|
private indexerManager;
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
processBlock(height: number): Promise<ProcessBlockResponse>;
|
|
23
|
-
get numFetchedBlocks(): number;
|
|
24
|
-
get numFetchingBlocks(): number;
|
|
25
|
-
get isIndexing(): boolean;
|
|
18
|
+
constructor(apiService: ApiService, indexerManager: IndexerManager, projectService: IProjectService<StellarProjectDs>, projectUpgradeService: IProjectUpgradeService, nodeConfig: NodeConfig);
|
|
19
|
+
protected fetchChainBlock(heights: number, extra: {}): Promise<BlockWrapper>;
|
|
20
|
+
protected toBlockResponse(block: BlockWrapper): {
|
|
21
|
+
parentHash: string;
|
|
22
|
+
};
|
|
23
|
+
protected processFetchedBlock(block: BlockWrapper, dataSources: SubqlStellarDataSource[]): Promise<ProcessBlockResponse>;
|
|
26
24
|
}
|
|
@@ -20,71 +20,31 @@ const common_1 = require("@nestjs/common");
|
|
|
20
20
|
const node_core_1 = require("@subql/node-core");
|
|
21
21
|
const indexer_manager_1 = require("../indexer.manager");
|
|
22
22
|
const logger = (0, node_core_1.getLogger)(`Worker Service #${node_worker_threads_1.threadId}`);
|
|
23
|
-
let WorkerService = class WorkerService {
|
|
24
|
-
constructor(apiService, indexerManager, projectService, nodeConfig) {
|
|
23
|
+
let WorkerService = class WorkerService extends node_core_1.BaseWorkerService {
|
|
24
|
+
constructor(apiService, indexerManager, projectService, projectUpgradeService, nodeConfig) {
|
|
25
|
+
super(projectService, projectUpgradeService, nodeConfig);
|
|
25
26
|
this.apiService = apiService;
|
|
26
27
|
this.indexerManager = indexerManager;
|
|
27
|
-
this.projectService = projectService;
|
|
28
|
-
this.fetchedBlocks = {};
|
|
29
|
-
this._isIndexing = false;
|
|
30
|
-
this.queue = new node_core_1.AutoQueue(undefined, nodeConfig.batchSize);
|
|
31
28
|
}
|
|
32
|
-
async
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
// If a dynamic ds is created we might be asked to fetch blocks again, use existing result
|
|
36
|
-
if (!this.fetchedBlocks[height]) {
|
|
37
|
-
if (node_core_1.memoryLock.isLocked()) {
|
|
38
|
-
const start = Date.now();
|
|
39
|
-
await node_core_1.memoryLock.waitForUnlock();
|
|
40
|
-
const end = Date.now();
|
|
41
|
-
logger.debug(`memory lock wait time: ${end - start}ms`);
|
|
42
|
-
}
|
|
43
|
-
const [block] = await this.apiService.fetchBlocks([height]);
|
|
44
|
-
this.fetchedBlocks[height] = block;
|
|
45
|
-
}
|
|
46
|
-
// Return info to get the runtime version, this lets the worker thread know
|
|
47
|
-
return undefined;
|
|
48
|
-
});
|
|
49
|
-
}
|
|
50
|
-
catch (e) {
|
|
51
|
-
logger.error(/*e, */ `Failed to fetch block ${height}`);
|
|
52
|
-
throw e;
|
|
53
|
-
}
|
|
29
|
+
async fetchChainBlock(heights, extra) {
|
|
30
|
+
const [block] = await this.apiService.fetchBlocks([heights]);
|
|
31
|
+
return block;
|
|
54
32
|
}
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
if (!block) {
|
|
60
|
-
throw new Error(`Block ${height} has not been fetched`);
|
|
61
|
-
}
|
|
62
|
-
delete this.fetchedBlocks[height];
|
|
63
|
-
return await this.indexerManager.indexBlock(block, await this.projectService.getAllDataSources(height));
|
|
64
|
-
}
|
|
65
|
-
catch (e) {
|
|
66
|
-
logger.error(e, `Failed to index block ${height}: ${e.stack}`);
|
|
67
|
-
throw e;
|
|
68
|
-
}
|
|
69
|
-
finally {
|
|
70
|
-
this._isIndexing = false;
|
|
71
|
-
}
|
|
33
|
+
toBlockResponse(block) {
|
|
34
|
+
return {
|
|
35
|
+
parentHash: block.block.prev_hash,
|
|
36
|
+
};
|
|
72
37
|
}
|
|
73
|
-
|
|
74
|
-
return
|
|
75
|
-
}
|
|
76
|
-
get numFetchingBlocks() {
|
|
77
|
-
return this.queue.size;
|
|
78
|
-
}
|
|
79
|
-
get isIndexing() {
|
|
80
|
-
return this._isIndexing;
|
|
38
|
+
async processFetchedBlock(block, dataSources) {
|
|
39
|
+
return this.indexerManager.indexBlock(block, dataSources);
|
|
81
40
|
}
|
|
82
41
|
};
|
|
83
42
|
WorkerService = __decorate([
|
|
84
43
|
(0, common_1.Injectable)(),
|
|
85
44
|
__param(2, (0, common_1.Inject)('IProjectService')),
|
|
45
|
+
__param(3, (0, common_1.Inject)('IProjectUpgradeService')),
|
|
86
46
|
__metadata("design:paramtypes", [node_core_1.ApiService,
|
|
87
|
-
indexer_manager_1.IndexerManager, Object, node_core_1.NodeConfig])
|
|
47
|
+
indexer_manager_1.IndexerManager, Object, Object, node_core_1.NodeConfig])
|
|
88
48
|
], WorkerService);
|
|
89
49
|
exports.WorkerService = WorkerService;
|
|
90
50
|
//# sourceMappingURL=worker.service.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"worker.service.js","sourceRoot":"","sources":["../../../src/indexer/worker/worker.service.ts"],"names":[],"mappings":";AAAA,8DAA8D;AAC9D,mCAAmC;;;;;;;;;;;;;;;AAEnC,6DAA+C;AAC/C,2CAAoD;
|
|
1
|
+
{"version":3,"file":"worker.service.js","sourceRoot":"","sources":["../../../src/indexer/worker/worker.service.ts"],"names":[],"mappings":";AAAA,8DAA8D;AAC9D,mCAAmC;;;;;;;;;;;;;;;AAEnC,6DAA+C;AAC/C,2CAAoD;AAEpD,gDAQ0B;AAG1B,wDAAoD;AAWpD,MAAM,MAAM,GAAG,IAAA,qBAAS,EAAC,mBAAmB,8BAAQ,EAAE,CAAC,CAAC;AAGjD,IAAM,aAAa,GAAnB,MAAM,aAAc,SAAQ,6BAKlC;IACC,YACU,UAAsB,EACtB,cAA8B,EAEtC,cAAiD,EAEjD,qBAA6C,EAC7C,UAAsB;QAEtB,KAAK,CAAC,cAAc,EAAE,qBAAqB,EAAE,UAAU,CAAC,CAAC;QARjD,eAAU,GAAV,UAAU,CAAY;QACtB,mBAAc,GAAd,cAAc,CAAgB;IAQxC,CAAC;IACS,KAAK,CAAC,eAAe,CAC7B,OAAe,EACf,KAAS;QAET,MAAM,CAAC,KAAK,CAAC,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC;QAC7D,OAAO,KAAK,CAAC;IACf,CAAC;IAES,eAAe,CAAC,KAAmB;QAC3C,OAAO;YACL,UAAU,EAAE,KAAK,CAAC,KAAK,CAAC,SAAS;SAClC,CAAC;IACJ,CAAC;IAES,KAAK,CAAC,mBAAmB,CACjC,KAAmB,EACnB,WAAqC;QAErC,OAAO,IAAI,CAAC,cAAc,CAAC,UAAU,CAAC,KAAK,EAAE,WAAW,CAAC,CAAC;IAC5D,CAAC;CACF,CAAA;AArCY,aAAa;IADzB,IAAA,mBAAU,GAAE;IAUR,WAAA,IAAA,eAAM,EAAC,iBAAiB,CAAC,CAAA;IAEzB,WAAA,IAAA,eAAM,EAAC,wBAAwB,CAAC,CAAA;qCAJb,sBAAU;QACN,gCAAc,kBAK1B,sBAAU;GAbb,aAAa,CAqCzB;AArCY,sCAAa","sourcesContent":["// Copyright 2020-2023 SubQuery Pte Ltd authors & contributors\n// SPDX-License-Identifier: GPL-3.0\n\nimport { threadId } from 'node:worker_threads';\nimport { Inject, Injectable } from '@nestjs/common';\nimport { SubqlStellarDataSource } from '@subql/common-stellar';\nimport {\n NodeConfig,\n getLogger,\n IProjectService,\n ProcessBlockResponse,\n ApiService,\n BaseWorkerService,\n IProjectUpgradeService,\n} from '@subql/node-core';\nimport { BlockWrapper } from '@subql/types-stellar';\nimport { StellarProjectDs } from '../../configure/SubqueryProject';\nimport { IndexerManager } from '../indexer.manager';\n\nexport type FetchBlockResponse = { parentHash: string } | undefined;\n\nexport type WorkerStatusResponse = {\n threadId: number;\n isIndexing: boolean;\n fetchedBlocks: number;\n toFetchBlocks: number;\n};\n\nconst logger = getLogger(`Worker Service #${threadId}`);\n\n@Injectable()\nexport class WorkerService extends BaseWorkerService<\n BlockWrapper,\n FetchBlockResponse,\n SubqlStellarDataSource,\n {}\n> {\n constructor(\n private apiService: ApiService,\n private indexerManager: IndexerManager,\n @Inject('IProjectService')\n projectService: IProjectService<StellarProjectDs>,\n @Inject('IProjectUpgradeService')\n projectUpgradeService: IProjectUpgradeService,\n nodeConfig: NodeConfig,\n ) {\n super(projectService, projectUpgradeService, nodeConfig);\n }\n protected async fetchChainBlock(\n heights: number,\n extra: {},\n ): Promise<BlockWrapper> {\n const [block] = await this.apiService.fetchBlocks([heights]);\n return block;\n }\n\n protected toBlockResponse(block: BlockWrapper): { parentHash: string } {\n return {\n parentHash: block.block.prev_hash,\n };\n }\n\n protected async processFetchedBlock(\n block: BlockWrapper,\n dataSources: SubqlStellarDataSource[],\n ): Promise<ProcessBlockResponse> {\n return this.indexerManager.indexBlock(block, dataSources);\n }\n}\n"]}
|
|
@@ -1,9 +1,5 @@
|
|
|
1
|
-
import { Header, IUnfinalizedBlocksService } from '@subql/node-core';
|
|
1
|
+
import { Header, HostUnfinalizedBlocks, IUnfinalizedBlocksService } from '@subql/node-core';
|
|
2
2
|
import { BlockWrapper } from '@subql/types-stellar';
|
|
3
|
-
export type HostUnfinalizedBlocks = {
|
|
4
|
-
unfinalizedBlocksProcess: (header: Header) => Promise<number | null>;
|
|
5
|
-
};
|
|
6
|
-
export declare const hostUnfinalizedBlocksKeys: (keyof HostUnfinalizedBlocks)[];
|
|
7
3
|
export declare class WorkerUnfinalizedBlocksService implements IUnfinalizedBlocksService<BlockWrapper> {
|
|
8
4
|
private host;
|
|
9
5
|
constructor(host: HostUnfinalizedBlocks);
|
|
@@ -11,12 +11,9 @@ var __metadata = (this && this.__metadata) || function (k, v) {
|
|
|
11
11
|
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
12
12
|
};
|
|
13
13
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
14
|
-
exports.WorkerUnfinalizedBlocksService =
|
|
14
|
+
exports.WorkerUnfinalizedBlocksService = void 0;
|
|
15
15
|
const common_1 = require("@nestjs/common");
|
|
16
16
|
const unfinalizedBlocks_service_1 = require("../unfinalizedBlocks.service");
|
|
17
|
-
exports.hostUnfinalizedBlocksKeys = [
|
|
18
|
-
'unfinalizedBlocksProcess',
|
|
19
|
-
];
|
|
20
17
|
let WorkerUnfinalizedBlocksService = class WorkerUnfinalizedBlocksService {
|
|
21
18
|
constructor(host) {
|
|
22
19
|
this.host = host;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"worker.unfinalizedBlocks.service.js","sourceRoot":"","sources":["../../../src/indexer/worker/worker.unfinalizedBlocks.service.ts"],"names":[],"mappings":";AAAA,8DAA8D;AAC9D,mCAAmC;;;;;;;;;;;;AAEnC,2CAA4C;
|
|
1
|
+
{"version":3,"file":"worker.unfinalizedBlocks.service.js","sourceRoot":"","sources":["../../../src/indexer/worker/worker.unfinalizedBlocks.service.ts"],"names":[],"mappings":";AAAA,8DAA8D;AAC9D,mCAAmC;;;;;;;;;;;;AAEnC,2CAA4C;AAO5C,4EAA6D;AAGtD,IAAM,8BAA8B,GAApC,MAAM,8BAA8B;IAGzC,YAAoB,IAA2B;QAA3B,SAAI,GAAJ,IAAI,CAAuB;IAAG,CAAC;IAEnD,KAAK,CAAC,6BAA6B,CAAC,MAAc;QAChD,OAAO,IAAI,CAAC,IAAI,CAAC,wBAAwB,CAAC,MAAM,CAAC,CAAC;IACpD,CAAC;IAED,KAAK,CAAC,wBAAwB,CAAC,EAC7B,KAAK,GACQ;QACb,OAAO,IAAI,CAAC,IAAI,CAAC,wBAAwB,CAAC,IAAA,yCAAa,EAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC;IAC3E,CAAC;IAED,qEAAqE;IACrE,IAAI,CAAC,OAAgD;QACnD,MAAM,IAAI,KAAK,CAAC,gDAAgD,CAAC,CAAC;IACpE,CAAC;IACD,sBAAsB;QACpB,MAAM,IAAI,KAAK,CAAC,gDAAgD,CAAC,CAAC;IACpE,CAAC;IACD,gCAAgC;QAC9B,MAAM,IAAI,KAAK,CAAC,gDAAgD,CAAC,CAAC;IACpE,CAAC;IACD,qEAAqE;IACrE,4BAA4B;QAC1B,MAAM,IAAI,KAAK,CAAC,gDAAgD,CAAC,CAAC;IACpE,CAAC;CACF,CAAA;AA7BY,8BAA8B;IAD1C,IAAA,mBAAU,GAAE;;GACA,8BAA8B,CA6B1C;AA7BY,wEAA8B","sourcesContent":["// Copyright 2020-2023 SubQuery Pte Ltd authors & contributors\n// SPDX-License-Identifier: GPL-3.0\n\nimport { Injectable } from '@nestjs/common';\nimport {\n Header,\n HostUnfinalizedBlocks,\n IUnfinalizedBlocksService,\n} from '@subql/node-core';\nimport { BlockWrapper } from '@subql/types-stellar';\nimport { blockToHeader } from '../unfinalizedBlocks.service';\n\n@Injectable()\nexport class WorkerUnfinalizedBlocksService\n implements IUnfinalizedBlocksService<BlockWrapper>\n{\n constructor(private host: HostUnfinalizedBlocks) {}\n\n async processUnfinalizedBlockHeader(header: Header): Promise<number | null> {\n return this.host.unfinalizedBlocksProcess(header);\n }\n\n async processUnfinalizedBlocks({\n block,\n }: BlockWrapper): Promise<number | null> {\n return this.host.unfinalizedBlocksProcess(blockToHeader(block.sequence));\n }\n\n // eslint-disable-next-line @typescript-eslint/promise-function-async\n init(reindex: (targetHeight: number) => Promise<void>): Promise<number> {\n throw new Error('This method should not be called from a worker');\n }\n resetUnfinalizedBlocks(): void {\n throw new Error('This method should not be called from a worker');\n }\n resetLastFinalizedVerifiedHeight(): void {\n throw new Error('This method should not be called from a worker');\n }\n // eslint-disable-next-line @typescript-eslint/promise-function-async\n getMetadataUnfinalizedBlocks(): Promise<Header[]> {\n throw new Error('This method should not be called from a worker');\n }\n}\n"]}
|
package/dist/init.js
CHANGED
|
@@ -13,6 +13,7 @@ const pjson = require('../package.json');
|
|
|
13
13
|
const { argv } = yargs_1.yargsOptions;
|
|
14
14
|
const DEFAULT_PORT = 3000;
|
|
15
15
|
const logger = (0, node_core_1.getLogger)('subql-node');
|
|
16
|
+
(0, common_1.notifyUpdates)(pjson, logger);
|
|
16
17
|
async function bootstrap() {
|
|
17
18
|
var _a;
|
|
18
19
|
logger.info(`Current ${pjson.name} version is ${pjson.version}`);
|
|
@@ -31,7 +32,7 @@ async function bootstrap() {
|
|
|
31
32
|
}
|
|
32
33
|
try {
|
|
33
34
|
const app = await core_1.NestFactory.create(app_module_1.AppModule, {
|
|
34
|
-
logger:
|
|
35
|
+
logger: new node_core_1.NestLogger(debug),
|
|
35
36
|
});
|
|
36
37
|
await app.init();
|
|
37
38
|
const projectService = app.get('IProjectService');
|
package/dist/init.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"init.js","sourceRoot":"","sources":["../src/init.ts"],"names":[],"mappings":";AAAA,8DAA8D;AAC9D,mCAAmC;;;AAEnC,uCAA2C;AAC3C,
|
|
1
|
+
{"version":3,"file":"init.js","sourceRoot":"","sources":["../src/init.ts"],"names":[],"mappings":";AAAA,8DAA8D;AAC9D,mCAAmC;;;AAEnC,uCAA2C;AAC3C,0CAAiE;AACjE,gDAAyD;AACzD,6CAAyC;AACzC,2DAAuD;AAEvD,mCAAuC;AACvC,MAAM,KAAK,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAAC;AAEzC,MAAM,EAAE,IAAI,EAAE,GAAG,oBAAY,CAAC;AAE9B,MAAM,YAAY,GAAG,IAAI,CAAC;AAC1B,MAAM,MAAM,GAAG,IAAA,qBAAS,EAAC,YAAY,CAAC,CAAC;AAEvC,IAAA,sBAAa,EAAC,KAAK,EAAE,MAAM,CAAC,CAAC;AAEtB,KAAK,UAAU,SAAS;;IAC7B,MAAM,CAAC,IAAI,CAAC,WAAW,KAAK,CAAC,IAAI,eAAe,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;IACjE,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC;IAEzB,MAAM,QAAQ,GAAG,CAAC,CAAM,EAAE,EAAE;QAC1B,MAAM,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;QACtB,OAAO,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;IAC7B,CAAC,CAAC;IAEF,MAAM,IAAI,GAAG,MAAA,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,mCAAI,CAAC,MAAM,IAAA,0BAAiB,EAAC,YAAY,CAAC,CAAC,CAAC;IAC5E,IAAI,CAAC,IAAI,EAAE;QACT,MAAM,CAAC,KAAK,CACV,wDAAwD,IAAI,KAC1D,IAAI,GAAG,EACT,iEAAiE,CAClE,CAAC;QACF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;KACjB;IAED,IAAI,IAAI,CAAC,MAAM,EAAE;QACf,MAAM,CAAC,IAAI,CACT,mHAAmH,CACpH,CAAC;KACH;IAED,IAAI;QACF,MAAM,GAAG,GAAG,MAAM,kBAAW,CAAC,MAAM,CAAC,sBAAS,EAAE;YAC9C,MAAM,EAAE,IAAI,sBAAU,CAAC,KAAK,CAAC;SAC9B,CAAC,CAAC;QAEH,MAAM,GAAG,CAAC,IAAI,EAAE,CAAC;QAEjB,MAAM,cAAc,GAAmB,GAAG,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAC;QAClE,MAAM,YAAY,GAAG,GAAG,CAAC,GAAG,CAAC,4BAAY,CAAC,CAAC;QAE3C,yGAAyG;QACzG,MAAM,cAAc,CAAC,IAAI,EAAE,CAAC;QAC5B,MAAM,YAAY,CAAC,IAAI,CAAC,cAAc,CAAC,WAAW,CAAC,CAAC;QAEpD,GAAG,CAAC,mBAAmB,EAAE,CAAC;QAE1B,MAAM,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QAEvB,MAAM,CAAC,IAAI,CAAC,yBAAyB,IAAI,EAAE,CAAC,CAAC;KAC9C;IAAC,OAAO,CAAC,EAAE;QACV,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,sBAAsB,CAAC,CAAC;QACxC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;KACjB;AACH,CAAC;AAhDD,8BAgDC","sourcesContent":["// Copyright 2020-2023 SubQuery Pte Ltd authors & contributors\n// SPDX-License-Identifier: GPL-3.0\n\nimport { NestFactory } from '@nestjs/core';\nimport { findAvailablePort, notifyUpdates } from '@subql/common';\nimport { getLogger, NestLogger } from '@subql/node-core';\nimport { AppModule } from './app.module';\nimport { FetchService } from './indexer/fetch.service';\nimport { ProjectService } from './indexer/project.service';\nimport { yargsOptions } from './yargs';\nconst pjson = require('../package.json');\n\nconst { argv } = yargsOptions;\n\nconst DEFAULT_PORT = 3000;\nconst logger = getLogger('subql-node');\n\nnotifyUpdates(pjson, logger);\n\nexport async function bootstrap(): Promise<void> {\n logger.info(`Current ${pjson.name} version is ${pjson.version}`);\n const debug = argv.debug;\n\n const validate = (x: any) => {\n const p = parseInt(x);\n return isNaN(p) ? null : p;\n };\n\n const port = validate(argv.port) ?? (await findAvailablePort(DEFAULT_PORT));\n if (!port) {\n logger.error(\n `Unable to find available port (tried ports in range (${port}..${\n port + 10\n })). Try setting a free port manually by setting the --port flag`,\n );\n process.exit(1);\n }\n\n if (argv.unsafe) {\n logger.warn(\n 'UNSAFE MODE IS ENABLED. This is not recommended for most projects and will not be supported by our hosted service',\n );\n }\n\n try {\n const app = await NestFactory.create(AppModule, {\n logger: new NestLogger(debug),\n });\n\n await app.init();\n\n const projectService: ProjectService = app.get('IProjectService');\n const fetchService = app.get(FetchService);\n\n // Initialise async services, we do this here rather than in factories, so we can capture one off eventss\n await projectService.init();\n await fetchService.init(projectService.startHeight);\n\n app.enableShutdownHooks();\n\n await app.listen(port);\n\n logger.info(`Node started on port: ${port}`);\n } catch (e) {\n logger.error(e, 'Node failed to start');\n process.exit(1);\n }\n}\n"]}
|
package/dist/main.js
CHANGED
|
@@ -10,13 +10,10 @@ BigInt.prototype.toJSON = function () {
|
|
|
10
10
|
};
|
|
11
11
|
// initLogger is imported from true path, to make sure getLogger (or other logger values that relies on logger) isn't initialised
|
|
12
12
|
(0, logger_1.initLogger)(argv.debug, argv.outputFmt, argv.logLevel);
|
|
13
|
-
|
|
14
|
-
//
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
argv._[0] === 'mmr-migrate' ||
|
|
18
|
-
argv._[0] === 'mmr-regen' ||
|
|
19
|
-
argv._[0] === 'force-clean')) {
|
|
13
|
+
if (!argv._[0]) {
|
|
14
|
+
// Lazy import, to allow logger to be initialised before bootstrap()
|
|
15
|
+
// As bootstrap runs services that requires logger
|
|
16
|
+
const { bootstrap } = require('./init');
|
|
20
17
|
void bootstrap();
|
|
21
18
|
}
|
|
22
19
|
//# sourceMappingURL=main.js.map
|
package/dist/main.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"main.js","sourceRoot":"","sources":["../src/main.ts"],"names":[],"mappings":";AAAA,8DAA8D;AAC9D,mCAAmC;;AAEnC,oDAAqD;AACrD,mCAAuC;AAEvC,MAAM,EAAE,IAAI,EAAE,GAAG,oBAAY,CAAC;AAE7B,MAAM,CAAC,SAAiB,CAAC,MAAM,GAAG;IACjC,OAAO,IAAI,CAAC,QAAQ,EAAE,CAAC;AACzB,CAAC,CAAC;AAEF,iIAAiI;AACjI,IAAA,mBAAU,EACR,IAAI,CAAC,KAAK,EACV,IAAI,CAAC,SAA+B,EACpC,IAAI,CAAC,QAA8B,CACpC,CAAC;AAEF,
|
|
1
|
+
{"version":3,"file":"main.js","sourceRoot":"","sources":["../src/main.ts"],"names":[],"mappings":";AAAA,8DAA8D;AAC9D,mCAAmC;;AAEnC,oDAAqD;AACrD,mCAAuC;AAEvC,MAAM,EAAE,IAAI,EAAE,GAAG,oBAAY,CAAC;AAE7B,MAAM,CAAC,SAAiB,CAAC,MAAM,GAAG;IACjC,OAAO,IAAI,CAAC,QAAQ,EAAE,CAAC;AACzB,CAAC,CAAC;AAEF,iIAAiI;AACjI,IAAA,mBAAU,EACR,IAAI,CAAC,KAAK,EACV,IAAI,CAAC,SAA+B,EACpC,IAAI,CAAC,QAA8B,CACpC,CAAC;AAEF,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE;IACd,oEAAoE;IACpE,kDAAkD;IAClD,MAAM,EAAE,SAAS,EAAE,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC;IACxC,KAAK,SAAS,EAAE,CAAC;CAClB","sourcesContent":["// Copyright 2020-2023 SubQuery Pte Ltd authors & contributors\n// SPDX-License-Identifier: GPL-3.0\n\nimport { initLogger } from '@subql/node-core/logger';\nimport { yargsOptions } from './yargs';\n\nconst { argv } = yargsOptions;\n\n(BigInt.prototype as any).toJSON = function () {\n return this.toString();\n};\n\n// initLogger is imported from true path, to make sure getLogger (or other logger values that relies on logger) isn't initialised\ninitLogger(\n argv.debug,\n argv.outputFmt as 'json' | 'colored',\n argv.logLevel as string | undefined,\n);\n\nif (!argv._[0]) {\n // Lazy import, to allow logger to be initialised before bootstrap()\n // As bootstrap runs services that requires logger\n const { bootstrap } = require('./init');\n void bootstrap();\n}\n"]}
|
|
@@ -5,7 +5,7 @@ import { StellarApi } from './api.stellar';
|
|
|
5
5
|
import SafeStellarProvider from './safe-api';
|
|
6
6
|
import { SorobanServer } from './soroban.server';
|
|
7
7
|
type FetchFunc = (api: StellarApi, batch: number[]) => Promise<StellarBlockWrapper[]>;
|
|
8
|
-
export declare class StellarApiConnection implements IApiConnectionSpecific<StellarApi, SafeStellarProvider, StellarBlockWrapper> {
|
|
8
|
+
export declare class StellarApiConnection implements IApiConnectionSpecific<StellarApi, SafeStellarProvider, StellarBlockWrapper[]> {
|
|
9
9
|
unsafeApi: StellarApi;
|
|
10
10
|
private fetchBlocksBatches;
|
|
11
11
|
readonly networkMeta: NetworkMetadataPayload;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"api.connection.js","sourceRoot":"","sources":["../../src/stellar/api.connection.ts"],"names":[],"mappings":";AAAA,8DAA8D;AAC9D,mCAAmC;;;;;;AAGnC,gDAS0B;AAE1B,+CAA2C;AAC3C,0DAA6C;AAQ7C,MAAa,oBAAoB;IAU/B,YACS,SAAqB,EACpB,kBAA6B;QAD9B,cAAS,GAAT,SAAS,CAAY;QACpB,uBAAkB,GAAlB,kBAAkB,CAAW;QAwCvC,gBAAW,GAAG,oBAAoB,CAAC,WAAW,CAAC;QAtC7C,IAAI,CAAC,WAAW,GAAG;YACjB,KAAK,EAAE,SAAS,CAAC,UAAU,EAAE;YAC7B,QAAQ,EAAE,SAAS,CAAC,WAAW,EAAE;YACjC,WAAW,EAAE,SAAS,CAAC,cAAc,EAAE;SACxC,CAAC;IACJ,CAAC;IAED,MAAM,CAAC,KAAK,CAAC,MAAM,CACjB,QAAgB,EAChB,iBAA4B,EAC5B,YAA2B,EAC3B,OAAuB;QAEvB,MAAM,GAAG,GAAG,IAAI,wBAAU,CAAC,QAAQ,EAAE,YAAY,EAAE,OAAO,CAAC,CAAC;QAE5D,MAAM,GAAG,CAAC,IAAI,EAAE,CAAC;QAEjB,OAAO,IAAI,oBAAoB,CAAC,GAAG,EAAE,iBAAiB,CAAC,CAAC;IAC1D,CAAC;IAED,OAAO,CAAC,MAAc;QACpB,0BAA0B;QAC1B,OAAO,IAAI,kBAAmB,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;IAC/C,CAAC;IAED,KAAK,CAAC,UAAU;QACd,MAAM,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,CAAC;IACjC,CAAC;IAED,KAAK,CAAC,aAAa;QACjB,MAAM,IAAI,CAAC,SAAS,CAAC,UAAU,EAAE,CAAC;IACpC,CAAC;IAED,KAAK,CAAC,WAAW,CAAC,OAAiB;QACjC,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;QACtE,OAAO,MAAM,CAAC;IAChB,CAAC;IAID,MAAM,CAAC,WAAW,CAAC,CAAQ;QACzB,IAAI,eAAmC,CAAC;QACxC,IAAI,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE;YACjC,eAAe,GAAG,IAAI,wBAAY,CAAC,CAAC,CAAC,CAAC;SACvC;aAAM,IAAI,CAAC,CAAC,OAAO,CAAC,UAAU,CAAC,oBAAoB,CAAC,EAAE;YACrD,eAAe,GAAG,IAAI,8BAAkB,CAAC,CAAC,CAAC,CAAC;SAC7C;aAAM,IACL,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,qBAAqB,CAAC;YACzC,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,mBAAmB,CAAC,EACvC;YACA,eAAe,GAAG,IAAI,0BAAc,CAAC,CAAC,CAAC,CAAC;SACzC;aAAM,IAAI,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,uBAAuB,CAAC,EAAE;YACtD,eAAe,GAAG,IAAI,8BAAkB,CAAC,CAAC,CAAC,CAAC;SAC7C;aAAM;YACL,eAAe,GAAG,IAAI,8BAAkB,CACtC,CAAC,CAAC,IAAI,EACN,CAAC,CAAC,OAAO,EACT,wBAAY,CAAC,OAAO,CACrB,CAAC;SACH;QACD,OAAO,eAAe,CAAC;IACzB,CAAC;CACF;AA5ED,oDA4EC","sourcesContent":["// Copyright 2020-2023 SubQuery Pte Ltd authors & contributors\n// SPDX-License-Identifier: GPL-3.0\n\nimport { EventEmitter2 } from '@nestjs/event-emitter';\nimport {\n ApiConnectionError,\n ApiErrorType,\n IApiConnectionSpecific,\n NetworkMetadataPayload,\n TimeoutError,\n RateLimitError,\n DisconnectionError,\n LargeResponseError,\n} from '@subql/node-core';\nimport { StellarBlockWrapper } from '@subql/types-stellar';\nimport { StellarApi } from './api.stellar';\nimport SafeStellarProvider from './safe-api';\nimport { SorobanServer } from './soroban.server';\n\ntype FetchFunc = (\n api: StellarApi,\n batch: number[],\n) => Promise<StellarBlockWrapper[]>;\n\nexport class StellarApiConnection\n implements\n IApiConnectionSpecific<\n StellarApi,\n SafeStellarProvider,\n StellarBlockWrapper\n >\n{\n readonly networkMeta: NetworkMetadataPayload;\n\n constructor(\n public unsafeApi: StellarApi,\n private fetchBlocksBatches: FetchFunc,\n ) {\n this.networkMeta = {\n chain: unsafeApi.getChainId(),\n specName: unsafeApi.getSpecName(),\n genesisHash: unsafeApi.getGenesisHash(),\n };\n }\n\n static async create(\n endpoint: string,\n fetchBlockBatches: FetchFunc,\n eventEmitter: EventEmitter2,\n soroban?: SorobanServer,\n ): Promise<StellarApiConnection> {\n const api = new StellarApi(endpoint, eventEmitter, soroban);\n\n await api.init();\n\n return new StellarApiConnection(api, fetchBlockBatches);\n }\n\n safeApi(height: number): SafeStellarProvider {\n //safe api not implemented\n return new SafeStellarProvider(null, height);\n }\n\n async apiConnect(): Promise<void> {\n await this.unsafeApi.connect();\n }\n\n async apiDisconnect(): Promise<void> {\n await this.unsafeApi.disconnect();\n }\n\n async fetchBlocks(heights: number[]): Promise<StellarBlockWrapper[]> {\n const blocks = await this.fetchBlocksBatches(this.unsafeApi, heights);\n return blocks;\n }\n\n handleError = StellarApiConnection.handleError;\n\n static handleError(e: Error): ApiConnectionError {\n let formatted_error: ApiConnectionError;\n if (e.message.includes(`Timeout`)) {\n formatted_error = new TimeoutError(e);\n } else if (e.message.startsWith(`disconnected from `)) {\n formatted_error = new DisconnectionError(e);\n } else if (\n e.message.includes(`Rate Limit Exceeded`) ||\n e.message.includes('Too Many Requests')\n ) {\n formatted_error = new RateLimitError(e);\n } else if (e.message.includes(`limit must not exceed`)) {\n formatted_error = new LargeResponseError(e);\n } else {\n formatted_error = new ApiConnectionError(\n e.name,\n e.message,\n ApiErrorType.Default,\n );\n }\n return formatted_error;\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"api.connection.js","sourceRoot":"","sources":["../../src/stellar/api.connection.ts"],"names":[],"mappings":";AAAA,8DAA8D;AAC9D,mCAAmC;;;;;;AAGnC,gDAS0B;AAE1B,+CAA2C;AAC3C,0DAA6C;AAQ7C,MAAa,oBAAoB;IAU/B,YACS,SAAqB,EACpB,kBAA6B;QAD9B,cAAS,GAAT,SAAS,CAAY;QACpB,uBAAkB,GAAlB,kBAAkB,CAAW;QAwCvC,gBAAW,GAAG,oBAAoB,CAAC,WAAW,CAAC;QAtC7C,IAAI,CAAC,WAAW,GAAG;YACjB,KAAK,EAAE,SAAS,CAAC,UAAU,EAAE;YAC7B,QAAQ,EAAE,SAAS,CAAC,WAAW,EAAE;YACjC,WAAW,EAAE,SAAS,CAAC,cAAc,EAAE;SACxC,CAAC;IACJ,CAAC;IAED,MAAM,CAAC,KAAK,CAAC,MAAM,CACjB,QAAgB,EAChB,iBAA4B,EAC5B,YAA2B,EAC3B,OAAuB;QAEvB,MAAM,GAAG,GAAG,IAAI,wBAAU,CAAC,QAAQ,EAAE,YAAY,EAAE,OAAO,CAAC,CAAC;QAE5D,MAAM,GAAG,CAAC,IAAI,EAAE,CAAC;QAEjB,OAAO,IAAI,oBAAoB,CAAC,GAAG,EAAE,iBAAiB,CAAC,CAAC;IAC1D,CAAC;IAED,OAAO,CAAC,MAAc;QACpB,0BAA0B;QAC1B,OAAO,IAAI,kBAAmB,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;IAC/C,CAAC;IAED,KAAK,CAAC,UAAU;QACd,MAAM,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,CAAC;IACjC,CAAC;IAED,KAAK,CAAC,aAAa;QACjB,MAAM,IAAI,CAAC,SAAS,CAAC,UAAU,EAAE,CAAC;IACpC,CAAC;IAED,KAAK,CAAC,WAAW,CAAC,OAAiB;QACjC,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;QACtE,OAAO,MAAM,CAAC;IAChB,CAAC;IAID,MAAM,CAAC,WAAW,CAAC,CAAQ;QACzB,IAAI,eAAmC,CAAC;QACxC,IAAI,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE;YACjC,eAAe,GAAG,IAAI,wBAAY,CAAC,CAAC,CAAC,CAAC;SACvC;aAAM,IAAI,CAAC,CAAC,OAAO,CAAC,UAAU,CAAC,oBAAoB,CAAC,EAAE;YACrD,eAAe,GAAG,IAAI,8BAAkB,CAAC,CAAC,CAAC,CAAC;SAC7C;aAAM,IACL,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,qBAAqB,CAAC;YACzC,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,mBAAmB,CAAC,EACvC;YACA,eAAe,GAAG,IAAI,0BAAc,CAAC,CAAC,CAAC,CAAC;SACzC;aAAM,IAAI,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,uBAAuB,CAAC,EAAE;YACtD,eAAe,GAAG,IAAI,8BAAkB,CAAC,CAAC,CAAC,CAAC;SAC7C;aAAM;YACL,eAAe,GAAG,IAAI,8BAAkB,CACtC,CAAC,CAAC,IAAI,EACN,CAAC,CAAC,OAAO,EACT,wBAAY,CAAC,OAAO,CACrB,CAAC;SACH;QACD,OAAO,eAAe,CAAC;IACzB,CAAC;CACF;AA5ED,oDA4EC","sourcesContent":["// Copyright 2020-2023 SubQuery Pte Ltd authors & contributors\n// SPDX-License-Identifier: GPL-3.0\n\nimport { EventEmitter2 } from '@nestjs/event-emitter';\nimport {\n ApiConnectionError,\n ApiErrorType,\n IApiConnectionSpecific,\n NetworkMetadataPayload,\n TimeoutError,\n RateLimitError,\n DisconnectionError,\n LargeResponseError,\n} from '@subql/node-core';\nimport { StellarBlockWrapper } from '@subql/types-stellar';\nimport { StellarApi } from './api.stellar';\nimport SafeStellarProvider from './safe-api';\nimport { SorobanServer } from './soroban.server';\n\ntype FetchFunc = (\n api: StellarApi,\n batch: number[],\n) => Promise<StellarBlockWrapper[]>;\n\nexport class StellarApiConnection\n implements\n IApiConnectionSpecific<\n StellarApi,\n SafeStellarProvider,\n StellarBlockWrapper[]\n >\n{\n readonly networkMeta: NetworkMetadataPayload;\n\n constructor(\n public unsafeApi: StellarApi,\n private fetchBlocksBatches: FetchFunc,\n ) {\n this.networkMeta = {\n chain: unsafeApi.getChainId(),\n specName: unsafeApi.getSpecName(),\n genesisHash: unsafeApi.getGenesisHash(),\n };\n }\n\n static async create(\n endpoint: string,\n fetchBlockBatches: FetchFunc,\n eventEmitter: EventEmitter2,\n soroban?: SorobanServer,\n ): Promise<StellarApiConnection> {\n const api = new StellarApi(endpoint, eventEmitter, soroban);\n\n await api.init();\n\n return new StellarApiConnection(api, fetchBlockBatches);\n }\n\n safeApi(height: number): SafeStellarProvider {\n //safe api not implemented\n return new SafeStellarProvider(null, height);\n }\n\n async apiConnect(): Promise<void> {\n await this.unsafeApi.connect();\n }\n\n async apiDisconnect(): Promise<void> {\n await this.unsafeApi.disconnect();\n }\n\n async fetchBlocks(heights: number[]): Promise<StellarBlockWrapper[]> {\n const blocks = await this.fetchBlocksBatches(this.unsafeApi, heights);\n return blocks;\n }\n\n handleError = StellarApiConnection.handleError;\n\n static handleError(e: Error): ApiConnectionError {\n let formatted_error: ApiConnectionError;\n if (e.message.includes(`Timeout`)) {\n formatted_error = new TimeoutError(e);\n } else if (e.message.startsWith(`disconnected from `)) {\n formatted_error = new DisconnectionError(e);\n } else if (\n e.message.includes(`Rate Limit Exceeded`) ||\n e.message.includes('Too Many Requests')\n ) {\n formatted_error = new RateLimitError(e);\n } else if (e.message.includes(`limit must not exceed`)) {\n formatted_error = new LargeResponseError(e);\n } else {\n formatted_error = new ApiConnectionError(\n e.name,\n e.message,\n ApiErrorType.Default,\n );\n }\n return formatted_error;\n }\n}\n"]}
|
|
@@ -1,17 +1,15 @@
|
|
|
1
1
|
import { EventEmitter2 } from '@nestjs/event-emitter';
|
|
2
|
-
import { ApiService, ConnectionPoolService,
|
|
2
|
+
import { ApiService, ConnectionPoolService, ProjectUpgradeSevice } from '@subql/node-core';
|
|
3
3
|
import { StellarBlockWrapper } from '@subql/types-stellar';
|
|
4
4
|
import { SubqueryProject } from '../configure/SubqueryProject';
|
|
5
5
|
import { StellarApiConnection } from './api.connection';
|
|
6
6
|
import { StellarApi } from './api.stellar';
|
|
7
7
|
import SafeStellarProvider from './safe-api';
|
|
8
|
-
export declare class StellarApiService extends ApiService<StellarApi, SafeStellarProvider, StellarBlockWrapper> {
|
|
8
|
+
export declare class StellarApiService extends ApiService<StellarApi, SafeStellarProvider, StellarBlockWrapper[]> {
|
|
9
9
|
private project;
|
|
10
|
-
private
|
|
11
|
-
constructor(project: SubqueryProject, connectionPoolService: ConnectionPoolService<StellarApiConnection>, eventEmitter: EventEmitter2);
|
|
12
|
-
networkMeta: NetworkMetadataPayload;
|
|
10
|
+
private projectUpgradeService;
|
|
11
|
+
constructor(project: SubqueryProject, projectUpgradeService: ProjectUpgradeSevice, connectionPoolService: ConnectionPoolService<StellarApiConnection>, eventEmitter: EventEmitter2);
|
|
13
12
|
init(): Promise<StellarApiService>;
|
|
14
|
-
private metadataMismatchError;
|
|
15
13
|
get api(): StellarApi;
|
|
16
14
|
safeApi(height: number): SafeStellarProvider;
|
|
17
15
|
private fetchBlockBatches;
|