@subql/node-ethereum 1.10.1-0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +7 -0
- package/LICENSE +201 -0
- package/README.md +76 -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 +29 -0
- package/dist/configure/SubqueryProject.js +82 -0
- package/dist/configure/SubqueryProject.js.map +1 -0
- package/dist/configure/configure.module.d.ts +7 -0
- package/dist/configure/configure.module.js +172 -0
- package/dist/configure/configure.module.js.map +1 -0
- package/dist/configure/configure.module.spec.d.ts +1 -0
- package/dist/configure/configure.module.spec.js +26 -0
- package/dist/configure/configure.module.spec.js.map +1 -0
- package/dist/ethereum/api.ethereum.d.ts +21 -0
- package/dist/ethereum/api.ethereum.js +190 -0
- package/dist/ethereum/api.ethereum.js.map +1 -0
- package/dist/ethereum/api.service.ethereum.d.ts +8 -0
- package/dist/ethereum/api.service.ethereum.js +57 -0
- package/dist/ethereum/api.service.ethereum.js.map +1 -0
- package/dist/ethereum/block.ethereum.d.ts +15 -0
- package/dist/ethereum/block.ethereum.js +87 -0
- package/dist/ethereum/block.ethereum.js.map +1 -0
- package/dist/ethereum/index.d.ts +2 -0
- package/dist/ethereum/index.js +21 -0
- package/dist/ethereum/index.js.map +1 -0
- package/dist/ethereum/utils.ethereum.d.ts +6 -0
- package/dist/ethereum/utils.ethereum.js +131 -0
- package/dist/ethereum/utils.ethereum.js.map +1 -0
- package/dist/indexer/dictionary.service.d.ts +7 -0
- package/dist/indexer/dictionary.service.js +29 -0
- package/dist/indexer/dictionary.service.js.map +1 -0
- package/dist/indexer/ds-processor.service.d.ts +26 -0
- package/dist/indexer/ds-processor.service.js +133 -0
- package/dist/indexer/ds-processor.service.js.map +1 -0
- package/dist/indexer/dynamic-ds.service.d.ts +23 -0
- package/dist/indexer/dynamic-ds.service.js +105 -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 +68 -0
- package/dist/indexer/fetch.module.js.map +1 -0
- package/dist/indexer/fetch.service.d.ts +43 -0
- package/dist/indexer/fetch.service.js +359 -0
- package/dist/indexer/fetch.service.js.map +1 -0
- package/dist/indexer/indexer.manager.d.ts +36 -0
- package/dist/indexer/indexer.manager.js +256 -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 +52 -0
- package/dist/indexer/indexer.module.js.map +1 -0
- package/dist/indexer/project.service.d.ts +39 -0
- package/dist/indexer/project.service.js +255 -0
- package/dist/indexer/project.service.js.map +1 -0
- package/dist/indexer/sandbox.service.d.ts +12 -0
- package/dist/indexer/sandbox.service.js +58 -0
- package/dist/indexer/sandbox.service.js.map +1 -0
- package/dist/indexer/types.d.ts +10 -0
- package/dist/indexer/types.js +11 -0
- package/dist/indexer/types.js.map +1 -0
- package/dist/indexer/worker/block-dispatcher.service.d.ts +69 -0
- package/dist/indexer/worker/block-dispatcher.service.js +356 -0
- package/dist/indexer/worker/block-dispatcher.service.js.map +1 -0
- package/dist/indexer/worker/worker.d.ts +14 -0
- package/dist/indexer/worker/worker.js +85 -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 +28 -0
- package/dist/indexer/worker/worker.service.js +79 -0
- package/dist/indexer/worker/worker.service.js.map +1 -0
- package/dist/init.d.ts +1 -0
- package/dist/init.js +54 -0
- package/dist/init.js.map +1 -0
- package/dist/main.d.ts +1 -0
- package/dist/main.js +14 -0
- package/dist/main.js.map +1 -0
- package/dist/meta/meta.controller.d.ts +23 -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 +77 -0
- package/dist/meta/meta.module.js.map +1 -0
- package/dist/meta/meta.service.d.ts +42 -0
- package/dist/meta/meta.service.js +110 -0
- package/dist/meta/meta.service.js.map +1 -0
- package/dist/subcommands/forceClean.init.d.ts +1 -0
- package/dist/subcommands/forceClean.init.js +25 -0
- package/dist/subcommands/forceClean.init.js.map +1 -0
- package/dist/subcommands/forceClean.module.d.ts +4 -0
- package/dist/subcommands/forceClean.module.js +38 -0
- package/dist/subcommands/forceClean.module.js.map +1 -0
- package/dist/subcommands/forceClean.service.d.ts +8 -0
- package/dist/subcommands/forceClean.service.js +65 -0
- package/dist/subcommands/forceClean.service.js.map +1 -0
- package/dist/subcommands/reindex.init.d.ts +1 -0
- package/dist/subcommands/reindex.init.js +25 -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 +39 -0
- package/dist/subcommands/reindex.module.js.map +1 -0
- package/dist/subcommands/reindex.service.d.ts +24 -0
- package/dist/subcommands/reindex.service.js +114 -0
- package/dist/subcommands/reindex.service.js.map +1 -0
- package/dist/utils/project.d.ts +13 -0
- package/dist/utils/project.js +191 -0
- package/dist/utils/project.js.map +1 -0
- package/dist/utils/string.d.ts +4 -0
- package/dist/utils/string.js +32 -0
- package/dist/utils/string.js.map +1 -0
- package/dist/yargs.d.ts +154 -0
- package/dist/yargs.js +193 -0
- package/dist/yargs.js.map +1 -0
- package/package.json +77 -0
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
// Copyright 2020-2022 OnFinality Limited authors & contributors
|
|
3
|
+
// SPDX-License-Identifier: Apache-2.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.WorkerService = void 0;
|
|
15
|
+
const node_worker_threads_1 = require("node:worker_threads");
|
|
16
|
+
const common_1 = require("@nestjs/common");
|
|
17
|
+
const node_core_1 = require("@subql/node-core");
|
|
18
|
+
const indexer_manager_1 = require("../indexer.manager");
|
|
19
|
+
const logger = (0, node_core_1.getLogger)(`Worker Service #${node_worker_threads_1.threadId}`);
|
|
20
|
+
let WorkerService = class WorkerService {
|
|
21
|
+
constructor(apiService, indexerManager, nodeConfig) {
|
|
22
|
+
this.apiService = apiService;
|
|
23
|
+
this.indexerManager = indexerManager;
|
|
24
|
+
this.fetchedBlocks = {};
|
|
25
|
+
this._isIndexing = false;
|
|
26
|
+
this.queue = new node_core_1.AutoQueue(undefined, nodeConfig.batchSize);
|
|
27
|
+
}
|
|
28
|
+
async fetchBlock(height) {
|
|
29
|
+
try {
|
|
30
|
+
return await this.queue.put(async () => {
|
|
31
|
+
// If a dynamic ds is created we might be asked to fetch blocks again, use existing result
|
|
32
|
+
if (!this.fetchedBlocks[height]) {
|
|
33
|
+
const [block] = await this.apiService.api.fetchBlocks([height]);
|
|
34
|
+
this.fetchedBlocks[height] = block;
|
|
35
|
+
}
|
|
36
|
+
const block = this.fetchedBlocks[height];
|
|
37
|
+
// Return info to get the runtime version, this lets the worker thread know
|
|
38
|
+
return undefined;
|
|
39
|
+
});
|
|
40
|
+
}
|
|
41
|
+
catch (e) {
|
|
42
|
+
logger.error(e, `Failed to fetch block ${height}`);
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
async processBlock(height) {
|
|
46
|
+
try {
|
|
47
|
+
this._isIndexing = true;
|
|
48
|
+
const block = this.fetchedBlocks[height];
|
|
49
|
+
if (!block) {
|
|
50
|
+
throw new Error(`Block ${height} has not been fetched`);
|
|
51
|
+
}
|
|
52
|
+
delete this.fetchedBlocks[height];
|
|
53
|
+
const response = await this.indexerManager.indexBlock(block);
|
|
54
|
+
this._isIndexing = false;
|
|
55
|
+
return Object.assign(Object.assign({}, response), { operationHash: Buffer.from(response.operationHash).toString('base64') });
|
|
56
|
+
}
|
|
57
|
+
catch (e) {
|
|
58
|
+
logger.error(e, `Failed to index block ${height}: ${e.stack}`);
|
|
59
|
+
throw e;
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
get numFetchedBlocks() {
|
|
63
|
+
return Object.keys(this.fetchedBlocks).length;
|
|
64
|
+
}
|
|
65
|
+
get numFetchingBlocks() {
|
|
66
|
+
return this.queue.size;
|
|
67
|
+
}
|
|
68
|
+
get isIndexing() {
|
|
69
|
+
return this._isIndexing;
|
|
70
|
+
}
|
|
71
|
+
};
|
|
72
|
+
WorkerService = __decorate([
|
|
73
|
+
(0, common_1.Injectable)(),
|
|
74
|
+
__metadata("design:paramtypes", [node_core_1.ApiService,
|
|
75
|
+
indexer_manager_1.IndexerManager,
|
|
76
|
+
node_core_1.NodeConfig])
|
|
77
|
+
], WorkerService);
|
|
78
|
+
exports.WorkerService = WorkerService;
|
|
79
|
+
//# sourceMappingURL=worker.service.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"worker.service.js","sourceRoot":"","sources":["../../../src/indexer/worker/worker.service.ts"],"names":[],"mappings":";AAAA,gEAAgE;AAChE,sCAAsC;;;;;;;;;;;;AAEtC,6DAA+C;AAC/C,2CAA4C;AAC5C,gDAAgF;AAEhF,wDAAoD;AAgBpD,MAAM,MAAM,GAAG,IAAA,qBAAS,EAAC,mBAAmB,8BAAQ,EAAE,CAAC,CAAC;AAGjD,IAAM,aAAa,GAAnB,MAAM,aAAa;IAMxB,YACU,UAAsB,EACtB,cAA8B,EACtC,UAAsB;QAFd,eAAU,GAAV,UAAU,CAAY;QACtB,mBAAc,GAAd,cAAc,CAAgB;QAPhC,kBAAa,GAAiC,EAAE,CAAC;QACjD,gBAAW,GAAG,KAAK,CAAC;QAS1B,IAAI,CAAC,KAAK,GAAG,IAAI,qBAAS,CAAC,SAAS,EAAE,UAAU,CAAC,SAAS,CAAC,CAAC;IAC9D,CAAC;IAED,KAAK,CAAC,UAAU,CAAC,MAAc;QAC7B,IAAI;YACF,OAAO,MAAM,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,IAAI,EAAE;gBACrC,0FAA0F;gBAC1F,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,EAAE;oBAC/B,MAAM,CAAC,KAAK,CAAC,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC;oBAChE,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,GAAG,KAAK,CAAC;iBACpC;gBAED,MAAM,KAAK,GAAG,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC;gBAEzC,2EAA2E;gBAC3E,OAAO,SAAS,CAAC;YACnB,CAAC,CAAC,CAAC;SACJ;QAAC,OAAO,CAAC,EAAE;YACV,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,yBAAyB,MAAM,EAAE,CAAC,CAAC;SACpD;IACH,CAAC;IAED,KAAK,CAAC,YAAY,CAAC,MAAc;QAC/B,IAAI;YACF,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;YACxB,MAAM,KAAK,GAAG,IAAI,CAAC,aAAa,CAAC,MAAM,CAAyB,CAAC;YAEjE,IAAI,CAAC,KAAK,EAAE;gBACV,MAAM,IAAI,KAAK,CAAC,SAAS,MAAM,uBAAuB,CAAC,CAAC;aACzD;YAED,OAAO,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC;YAElC,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,cAAc,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;YAE7D,IAAI,CAAC,WAAW,GAAG,KAAK,CAAC;YACzB,uCACK,QAAQ,KACX,aAAa,EAAE,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,IACrE;SACH;QAAC,OAAO,CAAC,EAAE;YACV,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,yBAAyB,MAAM,KAAK,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC;YAC/D,MAAM,CAAC,CAAC;SACT;IACH,CAAC;IAED,IAAI,gBAAgB;QAClB,OAAO,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,MAAM,CAAC;IAChD,CAAC;IAED,IAAI,iBAAiB;QACnB,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC;IACzB,CAAC;IAED,IAAI,UAAU;QACZ,OAAO,IAAI,CAAC,WAAW,CAAC;IAC1B,CAAC;CACF,CAAA;AApEY,aAAa;IADzB,IAAA,mBAAU,GAAE;qCAQW,sBAAU;QACN,gCAAc;QAC1B,sBAAU;GATb,aAAa,CAoEzB;AApEY,sCAAa","sourcesContent":["// Copyright 2020-2022 OnFinality Limited authors & contributors\n// SPDX-License-Identifier: Apache-2.0\n\nimport { threadId } from 'node:worker_threads';\nimport { Injectable } from '@nestjs/common';\nimport { ApiService, NodeConfig, getLogger, AutoQueue } from '@subql/node-core';\nimport { EthereumBlockWrapper, BlockWrapper } from '@subql/types-ethereum';\nimport { IndexerManager } from '../indexer.manager';\n\nexport type FetchBlockResponse = { parentHash: string } | undefined;\n\nexport type ProcessBlockResponse = {\n dynamicDsCreated: boolean;\n operationHash: string; // Base64 encoded u8a array\n};\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 {\n private fetchedBlocks: Record<string, BlockWrapper> = {};\n private _isIndexing = false;\n\n private queue: AutoQueue<FetchBlockResponse>;\n\n constructor(\n private apiService: ApiService,\n private indexerManager: IndexerManager,\n nodeConfig: NodeConfig,\n ) {\n this.queue = new AutoQueue(undefined, nodeConfig.batchSize);\n }\n\n async fetchBlock(height: number): Promise<FetchBlockResponse> {\n try {\n return await this.queue.put(async () => {\n // If a dynamic ds is created we might be asked to fetch blocks again, use existing result\n if (!this.fetchedBlocks[height]) {\n const [block] = await this.apiService.api.fetchBlocks([height]);\n this.fetchedBlocks[height] = block;\n }\n\n const block = this.fetchedBlocks[height];\n\n // Return info to get the runtime version, this lets the worker thread know\n return undefined;\n });\n } catch (e) {\n logger.error(e, `Failed to fetch block ${height}`);\n }\n }\n\n async processBlock(height: number): Promise<ProcessBlockResponse> {\n try {\n this._isIndexing = true;\n const block = this.fetchedBlocks[height] as EthereumBlockWrapper;\n\n if (!block) {\n throw new Error(`Block ${height} has not been fetched`);\n }\n\n delete this.fetchedBlocks[height];\n\n const response = await this.indexerManager.indexBlock(block);\n\n this._isIndexing = false;\n return {\n ...response,\n operationHash: Buffer.from(response.operationHash).toString('base64'),\n };\n } catch (e) {\n logger.error(e, `Failed to index block ${height}: ${e.stack}`);\n throw e;\n }\n }\n\n get numFetchedBlocks(): number {\n return Object.keys(this.fetchedBlocks).length;\n }\n\n get numFetchingBlocks(): number {\n return this.queue.size;\n }\n\n get isIndexing(): boolean {\n return this._isIndexing;\n }\n}\n"]}
|
package/dist/init.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare function bootstrap(): Promise<void>;
|
package/dist/init.js
ADDED
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
// Copyright 2020-2022 OnFinality Limited authors & contributors
|
|
3
|
+
// SPDX-License-Identifier: Apache-2.0
|
|
4
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
5
|
+
exports.bootstrap = void 0;
|
|
6
|
+
const core_1 = require("@nestjs/core");
|
|
7
|
+
const common_1 = require("@subql/common");
|
|
8
|
+
const node_core_1 = require("@subql/node-core");
|
|
9
|
+
const app_module_1 = require("./app.module");
|
|
10
|
+
const fetch_service_1 = require("./indexer/fetch.service");
|
|
11
|
+
const project_service_1 = require("./indexer/project.service");
|
|
12
|
+
const yargs_1 = require("./yargs");
|
|
13
|
+
const pjson = require('../package.json');
|
|
14
|
+
const { argv } = yargs_1.yargsOptions;
|
|
15
|
+
const DEFAULT_PORT = 3000;
|
|
16
|
+
const logger = (0, node_core_1.getLogger)('subql-node');
|
|
17
|
+
async function bootstrap() {
|
|
18
|
+
var _a;
|
|
19
|
+
logger.info(`Current ${pjson.name} version is ${pjson.version}`);
|
|
20
|
+
const debug = argv.debug;
|
|
21
|
+
const validate = (x) => {
|
|
22
|
+
const p = parseInt(x);
|
|
23
|
+
return isNaN(p) ? null : p;
|
|
24
|
+
};
|
|
25
|
+
const port = (_a = validate(argv.port)) !== null && _a !== void 0 ? _a : (await (0, common_1.findAvailablePort)(DEFAULT_PORT));
|
|
26
|
+
if (!port) {
|
|
27
|
+
logger.error(`Unable to find available port (tried ports in range (${port}..${port + 10})). Try setting a free port manually by setting the --port flag`);
|
|
28
|
+
process.exit(1);
|
|
29
|
+
}
|
|
30
|
+
if (argv.unsafe) {
|
|
31
|
+
logger.warn('UNSAFE MODE IS ENABLED. This is not recommended for most projects and will not be supported by our hosted service');
|
|
32
|
+
}
|
|
33
|
+
try {
|
|
34
|
+
const app = await core_1.NestFactory.create(app_module_1.AppModule, {
|
|
35
|
+
logger: debug ? new node_core_1.NestLogger() : false,
|
|
36
|
+
});
|
|
37
|
+
await app.init();
|
|
38
|
+
const projectService = app.get(project_service_1.ProjectService);
|
|
39
|
+
const fetchService = app.get(fetch_service_1.FetchService);
|
|
40
|
+
const apiService = app.get(node_core_1.ApiService);
|
|
41
|
+
// Initialise async services, we do this here rather than in factories, so we can capture one off events
|
|
42
|
+
await apiService.init();
|
|
43
|
+
await projectService.init();
|
|
44
|
+
await fetchService.init(projectService.startHeight);
|
|
45
|
+
await app.listen(port);
|
|
46
|
+
logger.info(`Node started on port: ${port}`);
|
|
47
|
+
}
|
|
48
|
+
catch (e) {
|
|
49
|
+
logger.error(e, 'Node failed to start');
|
|
50
|
+
process.exit(1);
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
exports.bootstrap = bootstrap;
|
|
54
|
+
//# sourceMappingURL=init.js.map
|
package/dist/init.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"init.js","sourceRoot":"","sources":["../src/init.ts"],"names":[],"mappings":";AAAA,gEAAgE;AAChE,sCAAsC;;;AAEtC,uCAA2C;AAC3C,0CAAkD;AAClD,gDAAqE;AACrE,6CAAyC;AACzC,2DAAuD;AACvD,+DAA2D;AAC3D,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;AAEhC,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,KAAK,CAAC,CAAC,CAAC,IAAI,sBAAU,EAAE,CAAC,CAAC,CAAC,KAAK;SACzC,CAAC,CAAC;QACH,MAAM,GAAG,CAAC,IAAI,EAAE,CAAC;QAEjB,MAAM,cAAc,GAAG,GAAG,CAAC,GAAG,CAAC,gCAAc,CAAC,CAAC;QAC/C,MAAM,YAAY,GAAG,GAAG,CAAC,GAAG,CAAC,4BAAY,CAAC,CAAC;QAC3C,MAAM,UAAU,GAAG,GAAG,CAAC,GAAG,CAAC,sBAAU,CAAC,CAAC;QAEvC,wGAAwG;QACxG,MAAM,UAAU,CAAC,IAAI,EAAE,CAAC;QACxB,MAAM,cAAc,CAAC,IAAI,EAAE,CAAC;QAC5B,MAAM,YAAY,CAAC,IAAI,CAAC,cAAc,CAAC,WAAW,CAAC,CAAC;QAEpD,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;AA/CD,8BA+CC","sourcesContent":["// Copyright 2020-2022 OnFinality Limited authors & contributors\n// SPDX-License-Identifier: Apache-2.0\n\nimport { NestFactory } from '@nestjs/core';\nimport { findAvailablePort } from '@subql/common';\nimport { getLogger, ApiService, 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\nexport async function bootstrap() {\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: debug ? new NestLogger() : false,\n });\n await app.init();\n\n const projectService = app.get(ProjectService);\n const fetchService = app.get(FetchService);\n const apiService = app.get(ApiService);\n\n // Initialise async services, we do this here rather than in factories, so we can capture one off events\n await apiService.init();\n await projectService.init();\n await fetchService.init(projectService.startHeight);\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.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
package/dist/main.js
ADDED
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
// Copyright 2020-2022 OnFinality Limited authors & contributors
|
|
3
|
+
// SPDX-License-Identifier: Apache-2.0
|
|
4
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
5
|
+
const logger_1 = require("@subql/node-core/logger");
|
|
6
|
+
const yargs_1 = require("./yargs");
|
|
7
|
+
const { argv } = yargs_1.yargsOptions;
|
|
8
|
+
// initLogger is imported from true path, to make sure getLogger (or other logger values that relies on logger) isn't initialised
|
|
9
|
+
(0, logger_1.initLogger)(argv.debug, argv.outputFmt, argv.logLevel);
|
|
10
|
+
// Lazy import, to allow logger to be initialised before bootstrap()
|
|
11
|
+
// As bootstrap runs services that requires logger
|
|
12
|
+
const { bootstrap } = require('./init');
|
|
13
|
+
void bootstrap();
|
|
14
|
+
//# sourceMappingURL=main.js.map
|
package/dist/main.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"main.js","sourceRoot":"","sources":["../src/main.ts"],"names":[],"mappings":";AAAA,gEAAgE;AAChE,sCAAsC;;AAEtC,oDAAqD;AACrD,mCAAuC;AAEvC,MAAM,EAAE,IAAI,EAAE,GAAG,oBAAY,CAAC;AAE9B,iIAAiI;AACjI,IAAA,mBAAU,EACR,IAAI,CAAC,KAAK,EACV,IAAI,CAAC,SAA+B,EACpC,IAAI,CAAC,QAA8B,CACpC,CAAC;AAEF,oEAAoE;AACpE,kDAAkD;AAClD,MAAM,EAAE,SAAS,EAAE,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC;AACxC,KAAK,SAAS,EAAE,CAAC","sourcesContent":["// Copyright 2020-2022 OnFinality Limited authors & contributors\n// SPDX-License-Identifier: Apache-2.0\n\nimport { initLogger } from '@subql/node-core/logger';\nimport { yargsOptions } from './yargs';\n\nconst { argv } = yargsOptions;\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\n// Lazy import, to allow logger to be initialised before bootstrap()\n// As bootstrap runs services that requires logger\nconst { bootstrap } = require('./init');\nvoid bootstrap();\n"]}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { MetaService } from './meta.service';
|
|
2
|
+
export declare class MetaController {
|
|
3
|
+
private metaService;
|
|
4
|
+
constructor(metaService: MetaService);
|
|
5
|
+
getMeta(): {
|
|
6
|
+
chain: string;
|
|
7
|
+
specName: string;
|
|
8
|
+
genesisHash: string;
|
|
9
|
+
currentProcessingHeight: number;
|
|
10
|
+
currentProcessingTimestamp: number;
|
|
11
|
+
targetHeight: number;
|
|
12
|
+
bestHeight: number;
|
|
13
|
+
indexerNodeVersion: any;
|
|
14
|
+
lastProcessedHeight: number;
|
|
15
|
+
lastProcessedTimestamp: number;
|
|
16
|
+
uptime: number;
|
|
17
|
+
polkadotSdkVersion: any;
|
|
18
|
+
processedBlockCount: number;
|
|
19
|
+
apiConnected: boolean;
|
|
20
|
+
injectedApiConnected: boolean;
|
|
21
|
+
usingDictionary: boolean;
|
|
22
|
+
};
|
|
23
|
+
}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
// Copyright 2020-2022 OnFinality Limited authors & contributors
|
|
3
|
+
// SPDX-License-Identifier: Apache-2.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.MetaController = void 0;
|
|
15
|
+
const common_1 = require("@nestjs/common");
|
|
16
|
+
const meta_service_1 = require("./meta.service");
|
|
17
|
+
let MetaController = class MetaController {
|
|
18
|
+
constructor(metaService) {
|
|
19
|
+
this.metaService = metaService;
|
|
20
|
+
}
|
|
21
|
+
getMeta() {
|
|
22
|
+
return this.metaService.getMeta();
|
|
23
|
+
}
|
|
24
|
+
};
|
|
25
|
+
__decorate([
|
|
26
|
+
(0, common_1.Get)(),
|
|
27
|
+
__metadata("design:type", Function),
|
|
28
|
+
__metadata("design:paramtypes", []),
|
|
29
|
+
__metadata("design:returntype", void 0)
|
|
30
|
+
], MetaController.prototype, "getMeta", null);
|
|
31
|
+
MetaController = __decorate([
|
|
32
|
+
(0, common_1.Controller)('meta'),
|
|
33
|
+
__metadata("design:paramtypes", [meta_service_1.MetaService])
|
|
34
|
+
], MetaController);
|
|
35
|
+
exports.MetaController = MetaController;
|
|
36
|
+
//# sourceMappingURL=meta.controller.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"meta.controller.js","sourceRoot":"","sources":["../../src/meta/meta.controller.ts"],"names":[],"mappings":";AAAA,gEAAgE;AAChE,sCAAsC;;;;;;;;;;;;AAEtC,2CAAiD;AACjD,iDAA6C;AAGtC,IAAM,cAAc,GAApB,MAAM,cAAc;IACzB,YAAoB,WAAwB;QAAxB,gBAAW,GAAX,WAAW,CAAa;IAAG,CAAC;IAGhD,OAAO;QACL,OAAO,IAAI,CAAC,WAAW,CAAC,OAAO,EAAE,CAAC;IACpC,CAAC;CACF,CAAA;AAJC;IAAC,IAAA,YAAG,GAAE;;;;6CAGL;AANU,cAAc;IAD1B,IAAA,mBAAU,EAAC,MAAM,CAAC;qCAEgB,0BAAW;GADjC,cAAc,CAO1B;AAPY,wCAAc","sourcesContent":["// Copyright 2020-2022 OnFinality Limited authors & contributors\n// SPDX-License-Identifier: Apache-2.0\n\nimport { Controller, Get } from '@nestjs/common';\nimport { MetaService } from './meta.service';\n\n@Controller('meta')\nexport class MetaController {\n constructor(private metaService: MetaService) {}\n\n @Get()\n getMeta() {\n return this.metaService.getMeta();\n }\n}\n"]}
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
// Copyright 2020-2022 OnFinality Limited authors & contributors
|
|
3
|
+
// SPDX-License-Identifier: Apache-2.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.MetaModule = void 0;
|
|
12
|
+
const common_1 = require("@nestjs/common");
|
|
13
|
+
const node_core_1 = require("@subql/node-core");
|
|
14
|
+
const nestjs_prometheus_1 = require("@willsoto/nestjs-prometheus");
|
|
15
|
+
const fetch_module_1 = require("../indexer/fetch.module");
|
|
16
|
+
const meta_controller_1 = require("./meta.controller");
|
|
17
|
+
const meta_service_1 = require("./meta.service");
|
|
18
|
+
let MetaModule = class MetaModule {
|
|
19
|
+
};
|
|
20
|
+
MetaModule = __decorate([
|
|
21
|
+
(0, common_1.Module)({
|
|
22
|
+
imports: [nestjs_prometheus_1.PrometheusModule.register(), fetch_module_1.FetchModule],
|
|
23
|
+
controllers: [meta_controller_1.MetaController, node_core_1.HealthController, node_core_1.ReadyController],
|
|
24
|
+
providers: [
|
|
25
|
+
node_core_1.MetricEventListener,
|
|
26
|
+
(0, nestjs_prometheus_1.makeGaugeProvider)({
|
|
27
|
+
name: 'subql_indexer_api_connected',
|
|
28
|
+
help: 'The indexer api connection status',
|
|
29
|
+
}),
|
|
30
|
+
(0, nestjs_prometheus_1.makeGaugeProvider)({
|
|
31
|
+
name: 'subql_indexer_injected_api_connected',
|
|
32
|
+
help: 'The indexer injected api connection status',
|
|
33
|
+
}),
|
|
34
|
+
(0, nestjs_prometheus_1.makeGaugeProvider)({
|
|
35
|
+
name: 'subql_indexer_processing_block_height',
|
|
36
|
+
help: 'The current processing block height',
|
|
37
|
+
}),
|
|
38
|
+
(0, nestjs_prometheus_1.makeGaugeProvider)({
|
|
39
|
+
name: 'subql_indexer_processed_block_height',
|
|
40
|
+
help: 'The last processed block height',
|
|
41
|
+
}),
|
|
42
|
+
(0, nestjs_prometheus_1.makeGaugeProvider)({
|
|
43
|
+
name: 'subql_indexer_target_block_height',
|
|
44
|
+
help: 'The latest finalized block height',
|
|
45
|
+
}),
|
|
46
|
+
(0, nestjs_prometheus_1.makeGaugeProvider)({
|
|
47
|
+
name: 'subql_indexer_best_block_height',
|
|
48
|
+
help: 'The latest best block height',
|
|
49
|
+
}),
|
|
50
|
+
(0, nestjs_prometheus_1.makeGaugeProvider)({
|
|
51
|
+
name: 'subql_indexer_block_queue_size',
|
|
52
|
+
help: 'The size of fetched block queue',
|
|
53
|
+
}),
|
|
54
|
+
(0, nestjs_prometheus_1.makeGaugeProvider)({
|
|
55
|
+
name: 'subql_indexer_blocknumber_queue_size',
|
|
56
|
+
help: 'The size of fetched block number queue',
|
|
57
|
+
}),
|
|
58
|
+
(0, nestjs_prometheus_1.makeGaugeProvider)({
|
|
59
|
+
name: 'subql_indexer_using_dictionary',
|
|
60
|
+
help: 'The status of indexer is using the dictionary',
|
|
61
|
+
}),
|
|
62
|
+
(0, nestjs_prometheus_1.makeGaugeProvider)({
|
|
63
|
+
name: 'subql_indexer_skip_dictionary_count',
|
|
64
|
+
help: 'The number of times indexer been skip use dictionary',
|
|
65
|
+
}),
|
|
66
|
+
(0, nestjs_prometheus_1.makeGaugeProvider)({
|
|
67
|
+
name: 'subql_indexer_processed_block_count',
|
|
68
|
+
help: 'The number of processed block',
|
|
69
|
+
}),
|
|
70
|
+
meta_service_1.MetaService,
|
|
71
|
+
node_core_1.HealthService,
|
|
72
|
+
node_core_1.ReadyService,
|
|
73
|
+
],
|
|
74
|
+
})
|
|
75
|
+
], MetaModule);
|
|
76
|
+
exports.MetaModule = MetaModule;
|
|
77
|
+
//# sourceMappingURL=meta.module.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"meta.module.js","sourceRoot":"","sources":["../../src/meta/meta.module.ts"],"names":[],"mappings":";AAAA,gEAAgE;AAChE,sCAAsC;;;;;;;;;AAEtC,2CAAwC;AACxC,gDAM0B;AAC1B,mEAGqC;AACrC,0DAAsD;AACtD,uDAAmD;AACnD,iDAA6C;AAwDtC,IAAM,UAAU,GAAhB,MAAM,UAAU;CAAG,CAAA;AAAb,UAAU;IAtDtB,IAAA,eAAM,EAAC;QACN,OAAO,EAAE,CAAC,oCAAgB,CAAC,QAAQ,EAAE,EAAE,0BAAW,CAAC;QACnD,WAAW,EAAE,CAAC,gCAAc,EAAE,4BAAgB,EAAE,2BAAe,CAAC;QAChE,SAAS,EAAE;YACT,+BAAmB;YACnB,IAAA,qCAAiB,EAAC;gBAChB,IAAI,EAAE,6BAA6B;gBACnC,IAAI,EAAE,mCAAmC;aAC1C,CAAC;YACF,IAAA,qCAAiB,EAAC;gBAChB,IAAI,EAAE,sCAAsC;gBAC5C,IAAI,EAAE,4CAA4C;aACnD,CAAC;YACF,IAAA,qCAAiB,EAAC;gBAChB,IAAI,EAAE,uCAAuC;gBAC7C,IAAI,EAAE,qCAAqC;aAC5C,CAAC;YACF,IAAA,qCAAiB,EAAC;gBAChB,IAAI,EAAE,sCAAsC;gBAC5C,IAAI,EAAE,iCAAiC;aACxC,CAAC;YACF,IAAA,qCAAiB,EAAC;gBAChB,IAAI,EAAE,mCAAmC;gBACzC,IAAI,EAAE,mCAAmC;aAC1C,CAAC;YACF,IAAA,qCAAiB,EAAC;gBAChB,IAAI,EAAE,iCAAiC;gBACvC,IAAI,EAAE,8BAA8B;aACrC,CAAC;YACF,IAAA,qCAAiB,EAAC;gBAChB,IAAI,EAAE,gCAAgC;gBACtC,IAAI,EAAE,iCAAiC;aACxC,CAAC;YACF,IAAA,qCAAiB,EAAC;gBAChB,IAAI,EAAE,sCAAsC;gBAC5C,IAAI,EAAE,wCAAwC;aAC/C,CAAC;YACF,IAAA,qCAAiB,EAAC;gBAChB,IAAI,EAAE,gCAAgC;gBACtC,IAAI,EAAE,+CAA+C;aACtD,CAAC;YACF,IAAA,qCAAiB,EAAC;gBAChB,IAAI,EAAE,qCAAqC;gBAC3C,IAAI,EAAE,sDAAsD;aAC7D,CAAC;YACF,IAAA,qCAAiB,EAAC;gBAChB,IAAI,EAAE,qCAAqC;gBAC3C,IAAI,EAAE,+BAA+B;aACtC,CAAC;YACF,0BAAW;YACX,yBAAa;YACb,wBAAY;SACb;KACF,CAAC;GACW,UAAU,CAAG;AAAb,gCAAU","sourcesContent":["// Copyright 2020-2022 OnFinality Limited authors & contributors\n// SPDX-License-Identifier: Apache-2.0\n\nimport { Module } from '@nestjs/common';\nimport {\n MetricEventListener,\n ReadyController,\n ReadyService,\n HealthController,\n HealthService,\n} from '@subql/node-core';\nimport {\n makeGaugeProvider,\n PrometheusModule,\n} from '@willsoto/nestjs-prometheus';\nimport { FetchModule } from '../indexer/fetch.module';\nimport { MetaController } from './meta.controller';\nimport { MetaService } from './meta.service';\n\n@Module({\n imports: [PrometheusModule.register(), FetchModule],\n controllers: [MetaController, HealthController, ReadyController],\n providers: [\n MetricEventListener,\n makeGaugeProvider({\n name: 'subql_indexer_api_connected',\n help: 'The indexer api connection status',\n }),\n makeGaugeProvider({\n name: 'subql_indexer_injected_api_connected',\n help: 'The indexer injected api connection status',\n }),\n makeGaugeProvider({\n name: 'subql_indexer_processing_block_height',\n help: 'The current processing block height',\n }),\n makeGaugeProvider({\n name: 'subql_indexer_processed_block_height',\n help: 'The last processed block height',\n }),\n makeGaugeProvider({\n name: 'subql_indexer_target_block_height',\n help: 'The latest finalized block height',\n }),\n makeGaugeProvider({\n name: 'subql_indexer_best_block_height',\n help: 'The latest best block height',\n }),\n makeGaugeProvider({\n name: 'subql_indexer_block_queue_size',\n help: 'The size of fetched block queue',\n }),\n makeGaugeProvider({\n name: 'subql_indexer_blocknumber_queue_size',\n help: 'The size of fetched block number queue',\n }),\n makeGaugeProvider({\n name: 'subql_indexer_using_dictionary',\n help: 'The status of indexer is using the dictionary',\n }),\n makeGaugeProvider({\n name: 'subql_indexer_skip_dictionary_count',\n help: 'The number of times indexer been skip use dictionary',\n }),\n makeGaugeProvider({\n name: 'subql_indexer_processed_block_count',\n help: 'The number of processed block',\n }),\n MetaService,\n HealthService,\n ReadyService,\n ],\n})\nexport class MetaModule {}\n"]}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import { BestBlockPayload, EventPayload, NetworkMetadataPayload, ProcessBlockPayload, ProcessedBlockCountPayload, TargetBlockPayload, StoreService } from '@subql/node-core';
|
|
2
|
+
export declare class MetaService {
|
|
3
|
+
private storeService;
|
|
4
|
+
private currentProcessingHeight;
|
|
5
|
+
private currentProcessingTimestamp;
|
|
6
|
+
private bestHeight;
|
|
7
|
+
private targetHeight;
|
|
8
|
+
private networkMeta;
|
|
9
|
+
private apiConnected;
|
|
10
|
+
private usingDictionary;
|
|
11
|
+
private injectedApiConnected;
|
|
12
|
+
private lastProcessedHeight;
|
|
13
|
+
private lastProcessedTimestamp;
|
|
14
|
+
private processedBlockCount;
|
|
15
|
+
constructor(storeService: StoreService);
|
|
16
|
+
getMeta(): {
|
|
17
|
+
chain: string;
|
|
18
|
+
specName: string;
|
|
19
|
+
genesisHash: string;
|
|
20
|
+
currentProcessingHeight: number;
|
|
21
|
+
currentProcessingTimestamp: number;
|
|
22
|
+
targetHeight: number;
|
|
23
|
+
bestHeight: number;
|
|
24
|
+
indexerNodeVersion: any;
|
|
25
|
+
lastProcessedHeight: number;
|
|
26
|
+
lastProcessedTimestamp: number;
|
|
27
|
+
uptime: number;
|
|
28
|
+
polkadotSdkVersion: any;
|
|
29
|
+
processedBlockCount: number;
|
|
30
|
+
apiConnected: boolean;
|
|
31
|
+
injectedApiConnected: boolean;
|
|
32
|
+
usingDictionary: boolean;
|
|
33
|
+
};
|
|
34
|
+
getTargetHeight(): Promise<void>;
|
|
35
|
+
handleProcessingBlock(blockPayload: ProcessBlockPayload): void;
|
|
36
|
+
handleProcessedBlock(blockPayload: ProcessedBlockCountPayload): void;
|
|
37
|
+
handleTargetBlock(blockPayload: TargetBlockPayload): void;
|
|
38
|
+
handleBestBlock(blockPayload: BestBlockPayload): void;
|
|
39
|
+
handleNetworkMetadata(networkMeta: NetworkMetadataPayload): void;
|
|
40
|
+
handleApiConnected({ value }: EventPayload<number>): void;
|
|
41
|
+
handleUsingDictionary({ value }: EventPayload<number>): void;
|
|
42
|
+
}
|
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
// Copyright 2020-2022 OnFinality Limited authors & contributors
|
|
3
|
+
// SPDX-License-Identifier: Apache-2.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.MetaService = void 0;
|
|
15
|
+
const common_1 = require("@nestjs/common");
|
|
16
|
+
const event_emitter_1 = require("@nestjs/event-emitter");
|
|
17
|
+
const schedule_1 = require("@nestjs/schedule");
|
|
18
|
+
const node_core_1 = require("@subql/node-core");
|
|
19
|
+
const UPDATE_HEIGHT_INTERVAL = 60000;
|
|
20
|
+
// eslint-disable-next-line @typescript-eslint/no-var-requires
|
|
21
|
+
const { version: polkadotSdkVersion } = require('@polkadot/api/package.json');
|
|
22
|
+
const { version: packageVersion } = require('../../package.json');
|
|
23
|
+
let MetaService = class MetaService {
|
|
24
|
+
constructor(storeService) {
|
|
25
|
+
this.storeService = storeService;
|
|
26
|
+
}
|
|
27
|
+
getMeta() {
|
|
28
|
+
return Object.assign({ currentProcessingHeight: this.currentProcessingHeight, currentProcessingTimestamp: this.currentProcessingTimestamp, targetHeight: this.targetHeight, bestHeight: this.bestHeight, indexerNodeVersion: packageVersion, lastProcessedHeight: this.lastProcessedHeight, lastProcessedTimestamp: this.lastProcessedTimestamp, uptime: process.uptime(), polkadotSdkVersion, processedBlockCount: this.processedBlockCount, apiConnected: this.apiConnected, injectedApiConnected: this.injectedApiConnected, usingDictionary: this.usingDictionary }, this.networkMeta);
|
|
29
|
+
}
|
|
30
|
+
async getTargetHeight() {
|
|
31
|
+
await this.storeService.setMetadata('targetHeight', this.targetHeight);
|
|
32
|
+
}
|
|
33
|
+
handleProcessingBlock(blockPayload) {
|
|
34
|
+
this.currentProcessingHeight = blockPayload.height;
|
|
35
|
+
this.currentProcessingTimestamp = blockPayload.timestamp;
|
|
36
|
+
}
|
|
37
|
+
handleProcessedBlock(blockPayload) {
|
|
38
|
+
this.processedBlockCount = blockPayload.processedBlockCount;
|
|
39
|
+
this.currentProcessingTimestamp = blockPayload.timestamp;
|
|
40
|
+
}
|
|
41
|
+
handleTargetBlock(blockPayload) {
|
|
42
|
+
this.targetHeight = blockPayload.height;
|
|
43
|
+
}
|
|
44
|
+
handleBestBlock(blockPayload) {
|
|
45
|
+
this.bestHeight = blockPayload.height;
|
|
46
|
+
}
|
|
47
|
+
handleNetworkMetadata(networkMeta) {
|
|
48
|
+
this.networkMeta = networkMeta;
|
|
49
|
+
}
|
|
50
|
+
handleApiConnected({ value }) {
|
|
51
|
+
this.apiConnected = !!value;
|
|
52
|
+
}
|
|
53
|
+
handleUsingDictionary({ value }) {
|
|
54
|
+
this.usingDictionary = !!value;
|
|
55
|
+
}
|
|
56
|
+
};
|
|
57
|
+
__decorate([
|
|
58
|
+
(0, schedule_1.Interval)(UPDATE_HEIGHT_INTERVAL),
|
|
59
|
+
__metadata("design:type", Function),
|
|
60
|
+
__metadata("design:paramtypes", []),
|
|
61
|
+
__metadata("design:returntype", Promise)
|
|
62
|
+
], MetaService.prototype, "getTargetHeight", null);
|
|
63
|
+
__decorate([
|
|
64
|
+
(0, event_emitter_1.OnEvent)(node_core_1.IndexerEvent.BlockProcessing),
|
|
65
|
+
__metadata("design:type", Function),
|
|
66
|
+
__metadata("design:paramtypes", [Object]),
|
|
67
|
+
__metadata("design:returntype", void 0)
|
|
68
|
+
], MetaService.prototype, "handleProcessingBlock", null);
|
|
69
|
+
__decorate([
|
|
70
|
+
(0, event_emitter_1.OnEvent)(node_core_1.IndexerEvent.BlockProcessedCount),
|
|
71
|
+
__metadata("design:type", Function),
|
|
72
|
+
__metadata("design:paramtypes", [Object]),
|
|
73
|
+
__metadata("design:returntype", void 0)
|
|
74
|
+
], MetaService.prototype, "handleProcessedBlock", null);
|
|
75
|
+
__decorate([
|
|
76
|
+
(0, event_emitter_1.OnEvent)(node_core_1.IndexerEvent.BlockTarget),
|
|
77
|
+
__metadata("design:type", Function),
|
|
78
|
+
__metadata("design:paramtypes", [Object]),
|
|
79
|
+
__metadata("design:returntype", void 0)
|
|
80
|
+
], MetaService.prototype, "handleTargetBlock", null);
|
|
81
|
+
__decorate([
|
|
82
|
+
(0, event_emitter_1.OnEvent)(node_core_1.IndexerEvent.BlockBest),
|
|
83
|
+
__metadata("design:type", Function),
|
|
84
|
+
__metadata("design:paramtypes", [Object]),
|
|
85
|
+
__metadata("design:returntype", void 0)
|
|
86
|
+
], MetaService.prototype, "handleBestBlock", null);
|
|
87
|
+
__decorate([
|
|
88
|
+
(0, event_emitter_1.OnEvent)(node_core_1.IndexerEvent.NetworkMetadata),
|
|
89
|
+
__metadata("design:type", Function),
|
|
90
|
+
__metadata("design:paramtypes", [Object]),
|
|
91
|
+
__metadata("design:returntype", void 0)
|
|
92
|
+
], MetaService.prototype, "handleNetworkMetadata", null);
|
|
93
|
+
__decorate([
|
|
94
|
+
(0, event_emitter_1.OnEvent)(node_core_1.IndexerEvent.ApiConnected),
|
|
95
|
+
__metadata("design:type", Function),
|
|
96
|
+
__metadata("design:paramtypes", [Object]),
|
|
97
|
+
__metadata("design:returntype", void 0)
|
|
98
|
+
], MetaService.prototype, "handleApiConnected", null);
|
|
99
|
+
__decorate([
|
|
100
|
+
(0, event_emitter_1.OnEvent)(node_core_1.IndexerEvent.UsingDictionary),
|
|
101
|
+
__metadata("design:type", Function),
|
|
102
|
+
__metadata("design:paramtypes", [Object]),
|
|
103
|
+
__metadata("design:returntype", void 0)
|
|
104
|
+
], MetaService.prototype, "handleUsingDictionary", null);
|
|
105
|
+
MetaService = __decorate([
|
|
106
|
+
(0, common_1.Injectable)(),
|
|
107
|
+
__metadata("design:paramtypes", [node_core_1.StoreService])
|
|
108
|
+
], MetaService);
|
|
109
|
+
exports.MetaService = MetaService;
|
|
110
|
+
//# sourceMappingURL=meta.service.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"meta.service.js","sourceRoot":"","sources":["../../src/meta/meta.service.ts"],"names":[],"mappings":";AAAA,gEAAgE;AAChE,sCAAsC;;;;;;;;;;;;AAEtC,2CAA4C;AAC5C,yDAAgD;AAChD,+CAA4C;AAC5C,gDAS0B;AAE1B,MAAM,sBAAsB,GAAG,KAAK,CAAC;AAErC,8DAA8D;AAC9D,MAAM,EAAE,OAAO,EAAE,kBAAkB,EAAE,GAAG,OAAO,CAAC,4BAA4B,CAAC,CAAC;AAC9E,MAAM,EAAE,OAAO,EAAE,cAAc,EAAE,GAAG,OAAO,CAAC,oBAAoB,CAAC,CAAC;AAG3D,IAAM,WAAW,GAAjB,MAAM,WAAW;IAatB,YAAoB,YAA0B;QAA1B,iBAAY,GAAZ,YAAY,CAAc;IAAG,CAAC;IAElD,OAAO;QACL,uBACE,uBAAuB,EAAE,IAAI,CAAC,uBAAuB,EACrD,0BAA0B,EAAE,IAAI,CAAC,0BAA0B,EAC3D,YAAY,EAAE,IAAI,CAAC,YAAY,EAC/B,UAAU,EAAE,IAAI,CAAC,UAAU,EAC3B,kBAAkB,EAAE,cAAc,EAClC,mBAAmB,EAAE,IAAI,CAAC,mBAAmB,EAC7C,sBAAsB,EAAE,IAAI,CAAC,sBAAsB,EACnD,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,EACxB,kBAAkB,EAClB,mBAAmB,EAAE,IAAI,CAAC,mBAAmB,EAC7C,YAAY,EAAE,IAAI,CAAC,YAAY,EAC/B,oBAAoB,EAAE,IAAI,CAAC,oBAAoB,EAC/C,eAAe,EAAE,IAAI,CAAC,eAAe,IAClC,IAAI,CAAC,WAAW,EACnB;IACJ,CAAC;IAGK,AAAN,KAAK,CAAC,eAAe;QACnB,MAAM,IAAI,CAAC,YAAY,CAAC,WAAW,CAAC,cAAc,EAAE,IAAI,CAAC,YAAY,CAAC,CAAC;IACzE,CAAC;IAGD,qBAAqB,CAAC,YAAiC;QACrD,IAAI,CAAC,uBAAuB,GAAG,YAAY,CAAC,MAAM,CAAC;QACnD,IAAI,CAAC,0BAA0B,GAAG,YAAY,CAAC,SAAS,CAAC;IAC3D,CAAC;IAGD,oBAAoB,CAAC,YAAwC;QAC3D,IAAI,CAAC,mBAAmB,GAAG,YAAY,CAAC,mBAAmB,CAAC;QAC5D,IAAI,CAAC,0BAA0B,GAAG,YAAY,CAAC,SAAS,CAAC;IAC3D,CAAC;IAGD,iBAAiB,CAAC,YAAgC;QAChD,IAAI,CAAC,YAAY,GAAG,YAAY,CAAC,MAAM,CAAC;IAC1C,CAAC;IAGD,eAAe,CAAC,YAA8B;QAC5C,IAAI,CAAC,UAAU,GAAG,YAAY,CAAC,MAAM,CAAC;IACxC,CAAC;IAGD,qBAAqB,CAAC,WAAmC;QACvD,IAAI,CAAC,WAAW,GAAG,WAAW,CAAC;IACjC,CAAC;IAGD,kBAAkB,CAAC,EAAE,KAAK,EAAwB;QAChD,IAAI,CAAC,YAAY,GAAG,CAAC,CAAC,KAAK,CAAC;IAC9B,CAAC;IAGD,qBAAqB,CAAC,EAAE,KAAK,EAAwB;QACnD,IAAI,CAAC,eAAe,GAAG,CAAC,CAAC,KAAK,CAAC;IACjC,CAAC;CACF,CAAA;AAxCO;IADL,IAAA,mBAAQ,EAAC,sBAAsB,CAAC;;;;kDAGhC;AAED;IAAC,IAAA,uBAAO,EAAC,wBAAY,CAAC,eAAe,CAAC;;;;wDAIrC;AAED;IAAC,IAAA,uBAAO,EAAC,wBAAY,CAAC,mBAAmB,CAAC;;;;uDAIzC;AAED;IAAC,IAAA,uBAAO,EAAC,wBAAY,CAAC,WAAW,CAAC;;;;oDAGjC;AAED;IAAC,IAAA,uBAAO,EAAC,wBAAY,CAAC,SAAS,CAAC;;;;kDAG/B;AAED;IAAC,IAAA,uBAAO,EAAC,wBAAY,CAAC,eAAe,CAAC;;;;wDAGrC;AAED;IAAC,IAAA,uBAAO,EAAC,wBAAY,CAAC,YAAY,CAAC;;;;qDAGlC;AAED;IAAC,IAAA,uBAAO,EAAC,wBAAY,CAAC,eAAe,CAAC;;;;wDAGrC;AA1EU,WAAW;IADvB,IAAA,mBAAU,GAAE;qCAcuB,wBAAY;GAbnC,WAAW,CA2EvB;AA3EY,kCAAW","sourcesContent":["// Copyright 2020-2022 OnFinality Limited authors & contributors\n// SPDX-License-Identifier: Apache-2.0\n\nimport { Injectable } from '@nestjs/common';\nimport { OnEvent } from '@nestjs/event-emitter';\nimport { Interval } from '@nestjs/schedule';\nimport {\n BestBlockPayload,\n EventPayload,\n IndexerEvent,\n NetworkMetadataPayload,\n ProcessBlockPayload,\n ProcessedBlockCountPayload,\n TargetBlockPayload,\n StoreService,\n} from '@subql/node-core';\n\nconst UPDATE_HEIGHT_INTERVAL = 60000;\n\n// eslint-disable-next-line @typescript-eslint/no-var-requires\nconst { version: polkadotSdkVersion } = require('@polkadot/api/package.json');\nconst { version: packageVersion } = require('../../package.json');\n\n@Injectable()\nexport class MetaService {\n private currentProcessingHeight: number;\n private currentProcessingTimestamp: number;\n private bestHeight: number;\n private targetHeight: number;\n private networkMeta: NetworkMetadataPayload;\n private apiConnected: boolean;\n private usingDictionary: boolean;\n private injectedApiConnected: boolean;\n private lastProcessedHeight: number;\n private lastProcessedTimestamp: number;\n private processedBlockCount: number;\n\n constructor(private storeService: StoreService) {}\n\n getMeta() {\n return {\n currentProcessingHeight: this.currentProcessingHeight,\n currentProcessingTimestamp: this.currentProcessingTimestamp,\n targetHeight: this.targetHeight,\n bestHeight: this.bestHeight,\n indexerNodeVersion: packageVersion,\n lastProcessedHeight: this.lastProcessedHeight,\n lastProcessedTimestamp: this.lastProcessedTimestamp,\n uptime: process.uptime(),\n polkadotSdkVersion,\n processedBlockCount: this.processedBlockCount,\n apiConnected: this.apiConnected,\n injectedApiConnected: this.injectedApiConnected,\n usingDictionary: this.usingDictionary,\n ...this.networkMeta,\n };\n }\n\n @Interval(UPDATE_HEIGHT_INTERVAL)\n async getTargetHeight(): Promise<void> {\n await this.storeService.setMetadata('targetHeight', this.targetHeight);\n }\n\n @OnEvent(IndexerEvent.BlockProcessing)\n handleProcessingBlock(blockPayload: ProcessBlockPayload): void {\n this.currentProcessingHeight = blockPayload.height;\n this.currentProcessingTimestamp = blockPayload.timestamp;\n }\n\n @OnEvent(IndexerEvent.BlockProcessedCount)\n handleProcessedBlock(blockPayload: ProcessedBlockCountPayload): void {\n this.processedBlockCount = blockPayload.processedBlockCount;\n this.currentProcessingTimestamp = blockPayload.timestamp;\n }\n\n @OnEvent(IndexerEvent.BlockTarget)\n handleTargetBlock(blockPayload: TargetBlockPayload): void {\n this.targetHeight = blockPayload.height;\n }\n\n @OnEvent(IndexerEvent.BlockBest)\n handleBestBlock(blockPayload: BestBlockPayload): void {\n this.bestHeight = blockPayload.height;\n }\n\n @OnEvent(IndexerEvent.NetworkMetadata)\n handleNetworkMetadata(networkMeta: NetworkMetadataPayload): void {\n this.networkMeta = networkMeta;\n }\n\n @OnEvent(IndexerEvent.ApiConnected)\n handleApiConnected({ value }: EventPayload<number>): void {\n this.apiConnected = !!value;\n }\n\n @OnEvent(IndexerEvent.UsingDictionary)\n handleUsingDictionary({ value }: EventPayload<number>): void {\n this.usingDictionary = !!value;\n }\n}\n"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare function forceCleanInit(): Promise<void>;
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
// Copyright 2020-2022 OnFinality Limited authors & contributors
|
|
3
|
+
// SPDX-License-Identifier: Apache-2.0
|
|
4
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
5
|
+
exports.forceCleanInit = void 0;
|
|
6
|
+
const core_1 = require("@nestjs/core");
|
|
7
|
+
const node_core_1 = require("@subql/node-core");
|
|
8
|
+
const forceClean_module_1 = require("./forceClean.module");
|
|
9
|
+
const forceClean_service_1 = require("./forceClean.service");
|
|
10
|
+
const logger = (0, node_core_1.getLogger)('CLI');
|
|
11
|
+
async function forceCleanInit() {
|
|
12
|
+
try {
|
|
13
|
+
const app = await core_1.NestFactory.create(forceClean_module_1.ForceCleanModule);
|
|
14
|
+
await app.init();
|
|
15
|
+
const forceCleanService = app.get(forceClean_service_1.ForceCleanService);
|
|
16
|
+
await forceCleanService.forceClean();
|
|
17
|
+
}
|
|
18
|
+
catch (e) {
|
|
19
|
+
logger.error(e, 'Force-clean failed to execute');
|
|
20
|
+
process.exit(1);
|
|
21
|
+
}
|
|
22
|
+
process.exit(0);
|
|
23
|
+
}
|
|
24
|
+
exports.forceCleanInit = forceCleanInit;
|
|
25
|
+
//# sourceMappingURL=forceClean.init.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"forceClean.init.js","sourceRoot":"","sources":["../../src/subcommands/forceClean.init.ts"],"names":[],"mappings":";AAAA,gEAAgE;AAChE,sCAAsC;;;AAEtC,uCAA2C;AAC3C,gDAA6C;AAC7C,2DAAuD;AACvD,6DAAyD;AAEzD,MAAM,MAAM,GAAG,IAAA,qBAAS,EAAC,KAAK,CAAC,CAAC;AACzB,KAAK,UAAU,cAAc;IAClC,IAAI;QACF,MAAM,GAAG,GAAG,MAAM,kBAAW,CAAC,MAAM,CAAC,oCAAgB,CAAC,CAAC;QACvD,MAAM,GAAG,CAAC,IAAI,EAAE,CAAC;QACjB,MAAM,iBAAiB,GAAG,GAAG,CAAC,GAAG,CAAC,sCAAiB,CAAC,CAAC;QACrD,MAAM,iBAAiB,CAAC,UAAU,EAAE,CAAC;KACtC;IAAC,OAAO,CAAC,EAAE;QACV,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,+BAA+B,CAAC,CAAC;QACjD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;KACjB;IAED,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC;AAZD,wCAYC","sourcesContent":["// Copyright 2020-2022 OnFinality Limited authors & contributors\n// SPDX-License-Identifier: Apache-2.0\n\nimport { NestFactory } from '@nestjs/core';\nimport { getLogger } from '@subql/node-core';\nimport { ForceCleanModule } from './forceClean.module';\nimport { ForceCleanService } from './forceClean.service';\n\nconst logger = getLogger('CLI');\nexport async function forceCleanInit(): Promise<void> {\n try {\n const app = await NestFactory.create(ForceCleanModule);\n await app.init();\n const forceCleanService = app.get(ForceCleanService);\n await forceCleanService.forceClean();\n } catch (e) {\n logger.error(e, 'Force-clean failed to execute');\n process.exit(1);\n }\n\n process.exit(0);\n}\n"]}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
// Copyright 2020-2022 OnFinality Limited authors & contributors
|
|
3
|
+
// SPDX-License-Identifier: Apache-2.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.ForceCleanModule = exports.ForceCleanFeatureModule = void 0;
|
|
12
|
+
const common_1 = require("@nestjs/common");
|
|
13
|
+
const node_core_1 = require("@subql/node-core");
|
|
14
|
+
const configure_module_1 = require("../configure/configure.module");
|
|
15
|
+
const forceClean_service_1 = require("./forceClean.service");
|
|
16
|
+
let ForceCleanFeatureModule = class ForceCleanFeatureModule {
|
|
17
|
+
};
|
|
18
|
+
ForceCleanFeatureModule = __decorate([
|
|
19
|
+
(0, common_1.Module)({
|
|
20
|
+
providers: [forceClean_service_1.ForceCleanService],
|
|
21
|
+
controllers: [],
|
|
22
|
+
})
|
|
23
|
+
], ForceCleanFeatureModule);
|
|
24
|
+
exports.ForceCleanFeatureModule = ForceCleanFeatureModule;
|
|
25
|
+
let ForceCleanModule = class ForceCleanModule {
|
|
26
|
+
};
|
|
27
|
+
ForceCleanModule = __decorate([
|
|
28
|
+
(0, common_1.Module)({
|
|
29
|
+
imports: [
|
|
30
|
+
node_core_1.DbModule.forRoot(),
|
|
31
|
+
configure_module_1.ConfigureModule.register(),
|
|
32
|
+
ForceCleanFeatureModule,
|
|
33
|
+
],
|
|
34
|
+
controllers: [],
|
|
35
|
+
})
|
|
36
|
+
], ForceCleanModule);
|
|
37
|
+
exports.ForceCleanModule = ForceCleanModule;
|
|
38
|
+
//# sourceMappingURL=forceClean.module.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"forceClean.module.js","sourceRoot":"","sources":["../../src/subcommands/forceClean.module.ts"],"names":[],"mappings":";AAAA,gEAAgE;AAChE,sCAAsC;;;;;;;;;AAEtC,2CAAwC;AACxC,gDAA4C;AAC5C,oEAAgE;AAChE,6DAAyD;AAMlD,IAAM,uBAAuB,GAA7B,MAAM,uBAAuB;CAAG,CAAA;AAA1B,uBAAuB;IAJnC,IAAA,eAAM,EAAC;QACN,SAAS,EAAE,CAAC,sCAAiB,CAAC;QAC9B,WAAW,EAAE,EAAE;KAChB,CAAC;GACW,uBAAuB,CAAG;AAA1B,0DAAuB;AAU7B,IAAM,gBAAgB,GAAtB,MAAM,gBAAgB;CAAG,CAAA;AAAnB,gBAAgB;IAR5B,IAAA,eAAM,EAAC;QACN,OAAO,EAAE;YACP,oBAAQ,CAAC,OAAO,EAAE;YAClB,kCAAe,CAAC,QAAQ,EAAE;YAC1B,uBAAuB;SACxB;QACD,WAAW,EAAE,EAAE;KAChB,CAAC;GACW,gBAAgB,CAAG;AAAnB,4CAAgB","sourcesContent":["// Copyright 2020-2022 OnFinality Limited authors & contributors\n// SPDX-License-Identifier: Apache-2.0\n\nimport { Module } from '@nestjs/common';\nimport { DbModule } from '@subql/node-core';\nimport { ConfigureModule } from '../configure/configure.module';\nimport { ForceCleanService } from './forceClean.service';\n\n@Module({\n providers: [ForceCleanService],\n controllers: [],\n})\nexport class ForceCleanFeatureModule {}\n\n@Module({\n imports: [\n DbModule.forRoot(),\n ConfigureModule.register(),\n ForceCleanFeatureModule,\n ],\n controllers: [],\n})\nexport class ForceCleanModule {}\n"]}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { NodeConfig } from '@subql/node-core';
|
|
2
|
+
import { Sequelize } from 'sequelize';
|
|
3
|
+
export declare class ForceCleanService {
|
|
4
|
+
private readonly sequelize;
|
|
5
|
+
private readonly nodeConfig;
|
|
6
|
+
constructor(sequelize: Sequelize, nodeConfig: NodeConfig);
|
|
7
|
+
forceClean(): Promise<void>;
|
|
8
|
+
}
|