@subql/node-stellar 2.9.3-2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (175) hide show
  1. package/CHANGELOG.md +7 -0
  2. package/LICENSE +674 -0
  3. package/README.md +77 -0
  4. package/bin/run +4 -0
  5. package/bin/run.cmd +3 -0
  6. package/dist/.tsbuildinfo +1 -0
  7. package/dist/app.module.d.ts +2 -0
  8. package/dist/app.module.js +35 -0
  9. package/dist/app.module.js.map +1 -0
  10. package/dist/configure/SubqueryProject.d.ts +25 -0
  11. package/dist/configure/SubqueryProject.js +148 -0
  12. package/dist/configure/SubqueryProject.js.map +1 -0
  13. package/dist/configure/configure.module.d.ts +10 -0
  14. package/dist/configure/configure.module.js +129 -0
  15. package/dist/configure/configure.module.js.map +1 -0
  16. package/dist/indexer/blockDispatcher/block-dispatcher.service.d.ts +16 -0
  17. package/dist/indexer/blockDispatcher/block-dispatcher.service.js +54 -0
  18. package/dist/indexer/blockDispatcher/block-dispatcher.service.js.map +1 -0
  19. package/dist/indexer/blockDispatcher/index.d.ts +4 -0
  20. package/dist/indexer/blockDispatcher/index.js +10 -0
  21. package/dist/indexer/blockDispatcher/index.js.map +1 -0
  22. package/dist/indexer/blockDispatcher/stellar-block-dispatcher.d.ts +4 -0
  23. package/dist/indexer/blockDispatcher/stellar-block-dispatcher.js +5 -0
  24. package/dist/indexer/blockDispatcher/stellar-block-dispatcher.js.map +1 -0
  25. package/dist/indexer/blockDispatcher/worker-block-dispatcher.service.d.ts +16 -0
  26. package/dist/indexer/blockDispatcher/worker-block-dispatcher.service.js +78 -0
  27. package/dist/indexer/blockDispatcher/worker-block-dispatcher.service.js.map +1 -0
  28. package/dist/indexer/dictionary.service.d.ts +7 -0
  29. package/dist/indexer/dictionary.service.js +34 -0
  30. package/dist/indexer/dictionary.service.js.map +1 -0
  31. package/dist/indexer/ds-processor.service.d.ts +9 -0
  32. package/dist/indexer/ds-processor.service.js +46 -0
  33. package/dist/indexer/ds-processor.service.js.map +1 -0
  34. package/dist/indexer/dynamic-ds.service.d.ts +9 -0
  35. package/dist/indexer/dynamic-ds.service.js +71 -0
  36. package/dist/indexer/dynamic-ds.service.js.map +1 -0
  37. package/dist/indexer/fetch.module.d.ts +2 -0
  38. package/dist/indexer/fetch.module.js +93 -0
  39. package/dist/indexer/fetch.module.js.map +1 -0
  40. package/dist/indexer/fetch.service.d.ts +33 -0
  41. package/dist/indexer/fetch.service.js +201 -0
  42. package/dist/indexer/fetch.service.js.map +1 -0
  43. package/dist/indexer/fetch.service.spec.d.ts +1 -0
  44. package/dist/indexer/fetch.service.spec.js +58 -0
  45. package/dist/indexer/fetch.service.spec.js.map +1 -0
  46. package/dist/indexer/indexer.manager.d.ts +36 -0
  47. package/dist/indexer/indexer.manager.js +92 -0
  48. package/dist/indexer/indexer.manager.js.map +1 -0
  49. package/dist/indexer/indexer.module.d.ts +2 -0
  50. package/dist/indexer/indexer.module.js +86 -0
  51. package/dist/indexer/indexer.module.js.map +1 -0
  52. package/dist/indexer/project.service.d.ts +13 -0
  53. package/dist/indexer/project.service.js +60 -0
  54. package/dist/indexer/project.service.js.map +1 -0
  55. package/dist/indexer/sandbox.service.d.ts +13 -0
  56. package/dist/indexer/sandbox.service.js +64 -0
  57. package/dist/indexer/sandbox.service.js.map +1 -0
  58. package/dist/indexer/types.d.ts +1 -0
  59. package/dist/indexer/types.js +5 -0
  60. package/dist/indexer/types.js.map +1 -0
  61. package/dist/indexer/unfinalizedBlocks.service.d.ts +11 -0
  62. package/dist/indexer/unfinalizedBlocks.service.js +52 -0
  63. package/dist/indexer/unfinalizedBlocks.service.js.map +1 -0
  64. package/dist/indexer/worker/worker.d.ts +31 -0
  65. package/dist/indexer/worker/worker.js +103 -0
  66. package/dist/indexer/worker/worker.js.map +1 -0
  67. package/dist/indexer/worker/worker.module.d.ts +2 -0
  68. package/dist/indexer/worker/worker.module.js +33 -0
  69. package/dist/indexer/worker/worker.module.js.map +1 -0
  70. package/dist/indexer/worker/worker.service.d.ts +26 -0
  71. package/dist/indexer/worker/worker.service.js +90 -0
  72. package/dist/indexer/worker/worker.service.js.map +1 -0
  73. package/dist/indexer/worker/worker.unfinalizedBlocks.service.d.ts +16 -0
  74. package/dist/indexer/worker/worker.unfinalizedBlocks.service.js +50 -0
  75. package/dist/indexer/worker/worker.unfinalizedBlocks.service.js.map +1 -0
  76. package/dist/init.d.ts +1 -0
  77. package/dist/init.js +52 -0
  78. package/dist/init.js.map +1 -0
  79. package/dist/main.d.ts +1 -0
  80. package/dist/main.js +22 -0
  81. package/dist/main.js.map +1 -0
  82. package/dist/meta/meta.controller.d.ts +21 -0
  83. package/dist/meta/meta.controller.js +36 -0
  84. package/dist/meta/meta.controller.js.map +1 -0
  85. package/dist/meta/meta.module.d.ts +2 -0
  86. package/dist/meta/meta.module.js +28 -0
  87. package/dist/meta/meta.module.js.map +1 -0
  88. package/dist/meta/meta.service.d.ts +24 -0
  89. package/dist/meta/meta.service.js +121 -0
  90. package/dist/meta/meta.service.js.map +1 -0
  91. package/dist/stellar/api.connection.d.ts +20 -0
  92. package/dist/stellar/api.connection.js +63 -0
  93. package/dist/stellar/api.connection.js.map +1 -0
  94. package/dist/stellar/api.connection.spec.d.ts +1 -0
  95. package/dist/stellar/api.connection.spec.js +81 -0
  96. package/dist/stellar/api.connection.spec.js.map +1 -0
  97. package/dist/stellar/api.service.stellar.d.ts +18 -0
  98. package/dist/stellar/api.service.stellar.js +144 -0
  99. package/dist/stellar/api.service.stellar.js.map +1 -0
  100. package/dist/stellar/api.service.stellar.spec.d.ts +5 -0
  101. package/dist/stellar/api.service.stellar.spec.js +87 -0
  102. package/dist/stellar/api.service.stellar.spec.js.map +1 -0
  103. package/dist/stellar/api.stellar.d.ts +29 -0
  104. package/dist/stellar/api.stellar.js +116 -0
  105. package/dist/stellar/api.stellar.js.map +1 -0
  106. package/dist/stellar/api.stellar.spec.d.ts +1 -0
  107. package/dist/stellar/api.stellar.spec.js +81 -0
  108. package/dist/stellar/api.stellar.spec.js.map +1 -0
  109. package/dist/stellar/block.stellar.d.ts +11 -0
  110. package/dist/stellar/block.stellar.js +81 -0
  111. package/dist/stellar/block.stellar.js.map +1 -0
  112. package/dist/stellar/block.stellar.spec.d.ts +1 -0
  113. package/dist/stellar/block.stellar.spec.js +58 -0
  114. package/dist/stellar/block.stellar.spec.js.map +1 -0
  115. package/dist/stellar/index.d.ts +2 -0
  116. package/dist/stellar/index.js +21 -0
  117. package/dist/stellar/index.js.map +1 -0
  118. package/dist/stellar/safe-api.d.ts +20 -0
  119. package/dist/stellar/safe-api.js +67 -0
  120. package/dist/stellar/safe-api.js.map +1 -0
  121. package/dist/stellar/stellar.server.d.ts +8 -0
  122. package/dist/stellar/stellar.server.js +72 -0
  123. package/dist/stellar/stellar.server.js.map +1 -0
  124. package/dist/stellar/stellar.server.spec.d.ts +1 -0
  125. package/dist/stellar/stellar.server.spec.js +132 -0
  126. package/dist/stellar/stellar.server.spec.js.map +1 -0
  127. package/dist/stellar/utils.stellar.d.ts +2 -0
  128. package/dist/stellar/utils.stellar.js +10 -0
  129. package/dist/stellar/utils.stellar.js.map +1 -0
  130. package/dist/subcommands/forceClean.init.d.ts +1 -0
  131. package/dist/subcommands/forceClean.init.js +24 -0
  132. package/dist/subcommands/forceClean.init.js.map +1 -0
  133. package/dist/subcommands/forceClean.module.d.ts +2 -0
  134. package/dist/subcommands/forceClean.module.js +28 -0
  135. package/dist/subcommands/forceClean.module.js.map +1 -0
  136. package/dist/subcommands/mmrMigrate.init.d.ts +2 -0
  137. package/dist/subcommands/mmrMigrate.init.js +28 -0
  138. package/dist/subcommands/mmrMigrate.init.js.map +1 -0
  139. package/dist/subcommands/mmrMigrate.module.d.ts +2 -0
  140. package/dist/subcommands/mmrMigrate.module.js +28 -0
  141. package/dist/subcommands/mmrMigrate.module.js.map +1 -0
  142. package/dist/subcommands/mmrRegenerate.init.d.ts +1 -0
  143. package/dist/subcommands/mmrRegenerate.init.js +28 -0
  144. package/dist/subcommands/mmrRegenerate.init.js.map +1 -0
  145. package/dist/subcommands/mmrRegenerate.module.d.ts +2 -0
  146. package/dist/subcommands/mmrRegenerate.module.js +30 -0
  147. package/dist/subcommands/mmrRegenerate.module.js.map +1 -0
  148. package/dist/subcommands/reindex.init.d.ts +1 -0
  149. package/dist/subcommands/reindex.init.js +30 -0
  150. package/dist/subcommands/reindex.init.js.map +1 -0
  151. package/dist/subcommands/reindex.module.d.ts +4 -0
  152. package/dist/subcommands/reindex.module.js +60 -0
  153. package/dist/subcommands/reindex.module.js.map +1 -0
  154. package/dist/subcommands/reindex.service.d.ts +11 -0
  155. package/dist/subcommands/reindex.service.js +46 -0
  156. package/dist/subcommands/reindex.service.js.map +1 -0
  157. package/dist/subcommands/testing.init.d.ts +1 -0
  158. package/dist/subcommands/testing.init.js +25 -0
  159. package/dist/subcommands/testing.init.js.map +1 -0
  160. package/dist/subcommands/testing.module.d.ts +4 -0
  161. package/dist/subcommands/testing.module.js +88 -0
  162. package/dist/subcommands/testing.module.js.map +1 -0
  163. package/dist/subcommands/testing.service.d.ts +9 -0
  164. package/dist/subcommands/testing.service.js +49 -0
  165. package/dist/subcommands/testing.service.js.map +1 -0
  166. package/dist/utils/project.d.ts +6 -0
  167. package/dist/utils/project.js +33 -0
  168. package/dist/utils/project.js.map +1 -0
  169. package/dist/utils/string.d.ts +1 -0
  170. package/dist/utils/string.js +10 -0
  171. package/dist/utils/string.js.map +1 -0
  172. package/dist/yargs.d.ts +303 -0
  173. package/dist/yargs.js +381 -0
  174. package/dist/yargs.js.map +1 -0
  175. package/package.json +69 -0
@@ -0,0 +1,103 @@
1
+ "use strict";
2
+ // Copyright 2020-2023 SubQuery Pte Ltd authors & contributors
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
+ Object.defineProperty(exports, "__esModule", { value: true });
8
+ // initlogger and yargs must be imported before all other imports
9
+ // making sure logger is defined before its called
10
+ // eslint-disable-next-line import/order
11
+ const logger_1 = require("@subql/node-core/logger");
12
+ // eslint-disable-next-line import/order
13
+ const yargs_1 = require("../../yargs");
14
+ const { argv } = yargs_1.yargsOptions;
15
+ (0, logger_1.initLogger)(argv.debug, argv.outputFmt, argv.logLevel);
16
+ const assert_1 = __importDefault(require("assert"));
17
+ const node_worker_threads_1 = require("node:worker_threads");
18
+ const v8_1 = require("v8");
19
+ const core_1 = require("@nestjs/core");
20
+ const node_core_1 = require("@subql/node-core");
21
+ const indexer_manager_1 = require("../indexer.manager");
22
+ const worker_module_1 = require("./worker.module");
23
+ const worker_service_1 = require("./worker.service");
24
+ const worker_unfinalizedBlocks_service_1 = require("./worker.unfinalizedBlocks.service");
25
+ let app;
26
+ let workerService;
27
+ const logger = (0, node_core_1.getLogger)(`worker #${node_worker_threads_1.threadId}`);
28
+ async function initWorker() {
29
+ try {
30
+ if (app) {
31
+ logger.warn('Worker already initialised');
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
36
+ });
37
+ await app.init();
38
+ const indexerManager = app.get(indexer_manager_1.IndexerManager);
39
+ // Initialise async services, we do this here rather than in factories so we can capture one off events
40
+ await indexerManager.start();
41
+ workerService = app.get(worker_service_1.WorkerService);
42
+ }
43
+ catch (e) {
44
+ console.log('Failed to start worker', e);
45
+ logger.error(e, 'Failed to start worker');
46
+ throw e;
47
+ }
48
+ }
49
+ async function fetchBlock(height) {
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
+ ], {
90
+ 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
+ });
103
+ //# sourceMappingURL=worker.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"worker.js","sourceRoot":"","sources":["../../../src/indexer/worker/worker.ts"],"names":[],"mappings":"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","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 assert from 'assert';\nimport { threadId } from 'node:worker_threads';\nimport { getHeapStatistics } from 'v8';\nimport { INestApplication } from '@nestjs/common';\nimport { NestFactory } from '@nestjs/core';\nimport {\n waitForBatchSize,\n WorkerHost,\n getLogger,\n NestLogger,\n hostStoreKeys,\n HostStore,\n hostDynamicDsKeys,\n HostDynamicDS,\n ProcessBlockResponse,\n HostConnectionPoolState,\n hostConnectionPoolStateKeys,\n} from '@subql/node-core';\nimport { SubqlProjectDs } from '../../configure/SubqueryProject';\nimport { StellarApiConnection } from '../../stellar/api.connection';\nimport { IndexerManager } from '../indexer.manager';\nimport { WorkerModule } from './worker.module';\nimport {\n FetchBlockResponse,\n WorkerService,\n WorkerStatusResponse,\n} from './worker.service';\nimport {\n HostUnfinalizedBlocks,\n hostUnfinalizedBlocksKeys,\n} from './worker.unfinalizedBlocks.service';\nlet app: INestApplication;\nlet workerService: WorkerService;\n\nconst logger = getLogger(`worker #${threadId}`);\n\nasync function initWorker(): Promise<void> {\n try {\n if (app) {\n logger.warn('Worker already initialised');\n return;\n }\n\n app = await NestFactory.create(WorkerModule, {\n logger: new NestLogger(), // TIP: If the worker is crashing comment out this line for better logging\n });\n\n await app.init();\n\n const indexerManager = app.get(IndexerManager);\n // Initialise async services, we do this here rather than in factories so we can capture one off events\n await indexerManager.start();\n\n workerService = app.get(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}\n\nasync function fetchBlock(height: number): Promise<FetchBlockResponse> {\n assert(workerService, 'Not initialised');\n return workerService.fetchBlock(height);\n}\n\nasync function processBlock(height: number): Promise<ProcessBlockResponse> {\n assert(workerService, 'Not initialised');\n\n return workerService.processBlock(height);\n}\n\n// eslint-disable-next-line @typescript-eslint/require-await\nasync function numFetchedBlocks(): Promise<number> {\n return workerService.numFetchedBlocks;\n}\n\n// eslint-disable-next-line @typescript-eslint/require-await\nasync function numFetchingBlocks(): Promise<number> {\n return workerService.numFetchingBlocks;\n}\n\n// eslint-disable-next-line @typescript-eslint/require-await\nasync function getStatus(): Promise<WorkerStatusResponse> {\n return {\n threadId,\n fetchedBlocks: workerService.numFetchedBlocks,\n toFetchBlocks: workerService.numFetchingBlocks,\n isIndexing: workerService.isIndexing,\n };\n}\n\n// eslint-disable-next-line @typescript-eslint/require-await\nasync function getMemoryLeft(): Promise<number> {\n const totalHeap = getHeapStatistics().heap_size_limit;\n const heapUsed = process.memoryUsage().heapUsed;\n\n return totalHeap - heapUsed;\n}\n\nasync function waitForWorkerBatchSize(heapSizeInBytes: number): Promise<void> {\n await waitForBatchSize(heapSizeInBytes);\n}\n\n// Register these functions to be exposed to worker host\n(global as any).host = WorkerHost.create<\n HostStore &\n HostDynamicDS<SubqlProjectDs> &\n HostUnfinalizedBlocks &\n HostConnectionPoolState<StellarApiConnection>,\n IInitIndexerWorker\n>(\n [\n ...hostStoreKeys,\n ...hostDynamicDsKeys,\n ...hostUnfinalizedBlocksKeys,\n ...hostConnectionPoolStateKeys,\n ],\n {\n initWorker,\n fetchBlock,\n processBlock,\n numFetchedBlocks,\n numFetchingBlocks,\n getStatus,\n getMemoryLeft,\n waitForWorkerBatchSize,\n },\n logger,\n);\n\n// Export types to be used on the parent\ntype InitWorker = typeof initWorker;\ntype FetchBlock = typeof fetchBlock;\ntype ProcessBlock = typeof processBlock;\ntype NumFetchedBlocks = typeof numFetchedBlocks;\ntype NumFetchingBlocks = typeof numFetchingBlocks;\ntype GetWorkerStatus = typeof getStatus;\ntype GetMemoryLeft = typeof getMemoryLeft;\ntype WaitForWorkerBatchSize = typeof waitForWorkerBatchSize;\n\nexport type IIndexerWorker = {\n processBlock: ProcessBlock;\n fetchBlock: FetchBlock;\n numFetchedBlocks: NumFetchedBlocks;\n numFetchingBlocks: NumFetchingBlocks;\n getStatus: GetWorkerStatus;\n getMemoryLeft: GetMemoryLeft;\n waitForWorkerBatchSize: WaitForWorkerBatchSize;\n};\n\nexport type IInitIndexerWorker = IIndexerWorker & {\n initWorker: InitWorker;\n};\n\nprocess.on('uncaughtException', (e) => {\n logger.error(e, 'Uncaught Exception');\n throw e;\n});\n"]}
@@ -0,0 +1,2 @@
1
+ export declare class WorkerModule {
2
+ }
@@ -0,0 +1,33 @@
1
+ "use strict";
2
+ // Copyright 2020-2023 SubQuery Pte Ltd authors & contributors
3
+ // SPDX-License-Identifier: GPL-3.0
4
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
5
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
6
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
7
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
8
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
9
+ };
10
+ Object.defineProperty(exports, "__esModule", { value: true });
11
+ exports.WorkerModule = void 0;
12
+ const common_1 = require("@nestjs/common");
13
+ const event_emitter_1 = require("@nestjs/event-emitter");
14
+ const schedule_1 = require("@nestjs/schedule");
15
+ const node_core_1 = require("@subql/node-core");
16
+ const configure_module_1 = require("../../configure/configure.module");
17
+ const indexer_module_1 = require("../indexer.module");
18
+ let WorkerModule = class WorkerModule {
19
+ };
20
+ WorkerModule = __decorate([
21
+ (0, common_1.Module)({
22
+ imports: [
23
+ node_core_1.DbModule.forRoot(),
24
+ event_emitter_1.EventEmitterModule.forRoot(),
25
+ configure_module_1.ConfigureModule.register(),
26
+ schedule_1.ScheduleModule.forRoot(),
27
+ indexer_module_1.IndexerModule,
28
+ ],
29
+ controllers: [],
30
+ })
31
+ ], WorkerModule);
32
+ exports.WorkerModule = WorkerModule;
33
+ //# sourceMappingURL=worker.module.js.map
@@ -0,0 +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,sDAAkD;AAY3C,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,8BAAa;SACd;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 { IndexerModule } from '../indexer.module';\n\n@Module({\n imports: [\n DbModule.forRoot(),\n EventEmitterModule.forRoot(),\n ConfigureModule.register(),\n ScheduleModule.forRoot(),\n IndexerModule,\n ],\n controllers: [],\n})\nexport class WorkerModule {}\n"]}
@@ -0,0 +1,26 @@
1
+ import { NodeConfig, IProjectService, ProcessBlockResponse, ApiService } from '@subql/node-core';
2
+ import { SubqlProjectDs } from '../../configure/SubqueryProject';
3
+ import { IndexerManager } from '../indexer.manager';
4
+ export type FetchBlockResponse = {
5
+ parentHash: string;
6
+ } | undefined;
7
+ export type WorkerStatusResponse = {
8
+ threadId: number;
9
+ isIndexing: boolean;
10
+ fetchedBlocks: number;
11
+ toFetchBlocks: number;
12
+ };
13
+ export declare class WorkerService {
14
+ private apiService;
15
+ private indexerManager;
16
+ private projectService;
17
+ private fetchedBlocks;
18
+ private _isIndexing;
19
+ private queue;
20
+ constructor(apiService: ApiService, indexerManager: IndexerManager, projectService: IProjectService<SubqlProjectDs>, nodeConfig: NodeConfig);
21
+ fetchBlock(height: number): Promise<FetchBlockResponse>;
22
+ processBlock(height: number): Promise<ProcessBlockResponse>;
23
+ get numFetchedBlocks(): number;
24
+ get numFetchingBlocks(): number;
25
+ get isIndexing(): boolean;
26
+ }
@@ -0,0 +1,90 @@
1
+ "use strict";
2
+ // Copyright 2020-2023 SubQuery Pte Ltd authors & contributors
3
+ // SPDX-License-Identifier: GPL-3.0
4
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
5
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
6
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
7
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
8
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
9
+ };
10
+ var __metadata = (this && this.__metadata) || function (k, v) {
11
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
12
+ };
13
+ var __param = (this && this.__param) || function (paramIndex, decorator) {
14
+ return function (target, key) { decorator(target, key, paramIndex); }
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ exports.WorkerService = void 0;
18
+ const node_worker_threads_1 = require("node:worker_threads");
19
+ const common_1 = require("@nestjs/common");
20
+ const node_core_1 = require("@subql/node-core");
21
+ const indexer_manager_1 = require("../indexer.manager");
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) {
25
+ this.apiService = apiService;
26
+ 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
+ }
32
+ async fetchBlock(height) {
33
+ try {
34
+ return await this.queue.put(async () => {
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
+ }
54
+ }
55
+ async processBlock(height) {
56
+ try {
57
+ this._isIndexing = true;
58
+ const block = this.fetchedBlocks[height];
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
+ }
72
+ }
73
+ get numFetchedBlocks() {
74
+ return Object.keys(this.fetchedBlocks).length;
75
+ }
76
+ get numFetchingBlocks() {
77
+ return this.queue.size;
78
+ }
79
+ get isIndexing() {
80
+ return this._isIndexing;
81
+ }
82
+ };
83
+ WorkerService = __decorate([
84
+ (0, common_1.Injectable)(),
85
+ __param(2, (0, common_1.Inject)('IProjectService')),
86
+ __metadata("design:paramtypes", [node_core_1.ApiService,
87
+ indexer_manager_1.IndexerManager, Object, node_core_1.NodeConfig])
88
+ ], WorkerService);
89
+ exports.WorkerService = WorkerService;
90
+ //# 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,8DAA8D;AAC9D,mCAAmC;;;;;;;;;;;;;;;AAEnC,6DAA+C;AAC/C,2CAAoD;AACpD,gDAQ0B;AAG1B,wDAAoD;AAWpD,MAAM,MAAM,GAAG,IAAA,qBAAS,EAAC,mBAAmB,8BAAQ,EAAE,CAAC,CAAC;AAGjD,IAAM,aAAa,GAAnB,MAAM,aAAa;IAMxB,YACU,UAAsB,EACtB,cAA8B,EAE9B,cAA+C,EACvD,UAAsB;QAJd,eAAU,GAAV,UAAU,CAAY;QACtB,mBAAc,GAAd,cAAc,CAAgB;QAE9B,mBAAc,GAAd,cAAc,CAAiC;QATjD,kBAAa,GAAiC,EAAE,CAAC;QACjD,gBAAW,GAAG,KAAK,CAAC;QAW1B,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,IAAI,sBAAU,CAAC,QAAQ,EAAE,EAAE;wBACzB,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;wBACzB,MAAM,sBAAU,CAAC,aAAa,EAAE,CAAC;wBACjC,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;wBACvB,MAAM,CAAC,KAAK,CAAC,0BAA0B,GAAG,GAAG,KAAK,IAAI,CAAC,CAAC;qBACzD;oBAED,MAAM,CAAC,KAAK,CAAC,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC;oBAC5D,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,GAAG,KAAK,CAAC;iBACpC;gBAED,2EAA2E;gBAC3E,OAAO,SAAS,CAAC;YACnB,CAAC,CAAC,CAAC;SACJ;QAAC,OAAO,CAAC,EAAE;YACV,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,yBAAyB,MAAM,EAAE,CAAC,CAAC;YACxD,MAAM,CAAC,CAAC;SACT;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,CAAwB,CAAC;YAEhE,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,OAAO,MAAM,IAAI,CAAC,cAAc,CAAC,UAAU,CACzC,KAAK,EACL,MAAM,IAAI,CAAC,cAAc,CAAC,iBAAiB,CAAC,MAAM,CAAC,CACpD,CAAC;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;gBAAS;YACR,IAAI,CAAC,WAAW,GAAG,KAAK,CAAC;SAC1B;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;AA3EY,aAAa;IADzB,IAAA,mBAAU,GAAE;IAUR,WAAA,IAAA,eAAM,EAAC,iBAAiB,CAAC,CAAA;qCAFN,sBAAU;QACN,gCAAc,UAG1B,sBAAU;GAXb,aAAa,CA2EzB;AA3EY,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 {\n NodeConfig,\n getLogger,\n AutoQueue,\n memoryLock,\n IProjectService,\n ProcessBlockResponse,\n ApiService,\n} from '@subql/node-core';\nimport { BlockWrapper, StellarBlockWrapper } from '@subql/types-stellar';\nimport { SubqlProjectDs } 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 {\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 @Inject('IProjectService')\n private projectService: IProjectService<SubqlProjectDs>,\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 if (memoryLock.isLocked()) {\n const start = Date.now();\n await memoryLock.waitForUnlock();\n const end = Date.now();\n logger.debug(`memory lock wait time: ${end - start}ms`);\n }\n\n const [block] = await this.apiService.fetchBlocks([height]);\n this.fetchedBlocks[height] = block;\n }\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 throw e;\n }\n }\n\n async processBlock(height: number): Promise<ProcessBlockResponse> {\n try {\n this._isIndexing = true;\n const block = this.fetchedBlocks[height] as StellarBlockWrapper;\n\n if (!block) {\n throw new Error(`Block ${height} has not been fetched`);\n }\n\n delete this.fetchedBlocks[height];\n\n return await this.indexerManager.indexBlock(\n block,\n await this.projectService.getAllDataSources(height),\n );\n } catch (e) {\n logger.error(e, `Failed to index block ${height}: ${e.stack}`);\n throw e;\n } finally {\n this._isIndexing = false;\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"]}
@@ -0,0 +1,16 @@
1
+ import { Header, IUnfinalizedBlocksService } from '@subql/node-core';
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
+ export declare class WorkerUnfinalizedBlocksService implements IUnfinalizedBlocksService<BlockWrapper> {
8
+ private host;
9
+ constructor(host: HostUnfinalizedBlocks);
10
+ processUnfinalizedBlockHeader(header: Header): Promise<number | null>;
11
+ processUnfinalizedBlocks({ block, }: BlockWrapper): Promise<number | null>;
12
+ init(reindex: (targetHeight: number) => Promise<void>): Promise<number>;
13
+ resetUnfinalizedBlocks(): void;
14
+ resetLastFinalizedVerifiedHeight(): void;
15
+ getMetadataUnfinalizedBlocks(): Promise<Header[]>;
16
+ }
@@ -0,0 +1,50 @@
1
+ "use strict";
2
+ // Copyright 2020-2023 SubQuery Pte Ltd authors & contributors
3
+ // SPDX-License-Identifier: GPL-3.0
4
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
5
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
6
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
7
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
8
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
9
+ };
10
+ var __metadata = (this && this.__metadata) || function (k, v) {
11
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
12
+ };
13
+ Object.defineProperty(exports, "__esModule", { value: true });
14
+ exports.WorkerUnfinalizedBlocksService = exports.hostUnfinalizedBlocksKeys = void 0;
15
+ const common_1 = require("@nestjs/common");
16
+ const unfinalizedBlocks_service_1 = require("../unfinalizedBlocks.service");
17
+ exports.hostUnfinalizedBlocksKeys = [
18
+ 'unfinalizedBlocksProcess',
19
+ ];
20
+ let WorkerUnfinalizedBlocksService = class WorkerUnfinalizedBlocksService {
21
+ constructor(host) {
22
+ this.host = host;
23
+ }
24
+ async processUnfinalizedBlockHeader(header) {
25
+ return this.host.unfinalizedBlocksProcess(header);
26
+ }
27
+ async processUnfinalizedBlocks({ block, }) {
28
+ return this.host.unfinalizedBlocksProcess((0, unfinalizedBlocks_service_1.blockToHeader)(block.ledger));
29
+ }
30
+ // eslint-disable-next-line @typescript-eslint/promise-function-async
31
+ init(reindex) {
32
+ throw new Error('This method should not be called from a worker');
33
+ }
34
+ resetUnfinalizedBlocks() {
35
+ throw new Error('This method should not be called from a worker');
36
+ }
37
+ resetLastFinalizedVerifiedHeight() {
38
+ throw new Error('This method should not be called from a worker');
39
+ }
40
+ // eslint-disable-next-line @typescript-eslint/promise-function-async
41
+ getMetadataUnfinalizedBlocks() {
42
+ throw new Error('This method should not be called from a worker');
43
+ }
44
+ };
45
+ WorkerUnfinalizedBlocksService = __decorate([
46
+ (0, common_1.Injectable)(),
47
+ __metadata("design:paramtypes", [Object])
48
+ ], WorkerUnfinalizedBlocksService);
49
+ exports.WorkerUnfinalizedBlocksService = WorkerUnfinalizedBlocksService;
50
+ //# sourceMappingURL=worker.unfinalizedBlocks.service.js.map
@@ -0,0 +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;AAG5C,4EAA6D;AAMhD,QAAA,yBAAyB,GAAoC;IACxE,0BAA0B;CAC3B,CAAC;AAGK,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,MAAM,CAAC,CAAC,CAAC;IACzE,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 { Header, IUnfinalizedBlocksService } from '@subql/node-core';\nimport { BlockWrapper } from '@subql/types-stellar';\nimport { blockToHeader } from '../unfinalizedBlocks.service';\n\nexport type HostUnfinalizedBlocks = {\n unfinalizedBlocksProcess: (header: Header) => Promise<number | null>;\n};\n\nexport const hostUnfinalizedBlocksKeys: (keyof HostUnfinalizedBlocks)[] = [\n 'unfinalizedBlocksProcess',\n];\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.ledger));\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.d.ts ADDED
@@ -0,0 +1 @@
1
+ export declare function bootstrap(): Promise<void>;
package/dist/init.js ADDED
@@ -0,0 +1,52 @@
1
+ "use strict";
2
+ // Copyright 2020-2023 SubQuery Pte Ltd authors & contributors
3
+ // SPDX-License-Identifier: GPL-3.0
4
+ Object.defineProperty(exports, "__esModule", { value: true });
5
+ 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 yargs_1 = require("./yargs");
12
+ const pjson = require('../package.json');
13
+ const { argv } = yargs_1.yargsOptions;
14
+ const DEFAULT_PORT = 3000;
15
+ const logger = (0, node_core_1.getLogger)('subql-node');
16
+ async function bootstrap() {
17
+ var _a;
18
+ logger.info(`Current ${pjson.name} version is ${pjson.version}`);
19
+ const debug = argv.debug;
20
+ const validate = (x) => {
21
+ const p = parseInt(x);
22
+ return isNaN(p) ? null : p;
23
+ };
24
+ const port = (_a = validate(argv.port)) !== null && _a !== void 0 ? _a : (await (0, common_1.findAvailablePort)(DEFAULT_PORT));
25
+ if (!port) {
26
+ 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`);
27
+ process.exit(1);
28
+ }
29
+ if (argv.unsafe) {
30
+ logger.warn('UNSAFE MODE IS ENABLED. This is not recommended for most projects and will not be supported by our hosted service');
31
+ }
32
+ try {
33
+ const app = await core_1.NestFactory.create(app_module_1.AppModule, {
34
+ logger: debug ? new node_core_1.NestLogger() : false,
35
+ });
36
+ await app.init();
37
+ const projectService = app.get('IProjectService');
38
+ const fetchService = app.get(fetch_service_1.FetchService);
39
+ // Initialise async services, we do this here rather than in factories, so we can capture one off eventss
40
+ await projectService.init();
41
+ await fetchService.init(projectService.startHeight);
42
+ app.enableShutdownHooks();
43
+ await app.listen(port);
44
+ logger.info(`Node started on port: ${port}`);
45
+ }
46
+ catch (e) {
47
+ logger.error(e, 'Node failed to start');
48
+ process.exit(1);
49
+ }
50
+ }
51
+ exports.bootstrap = bootstrap;
52
+ //# sourceMappingURL=init.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"init.js","sourceRoot":"","sources":["../src/init.ts"],"names":[],"mappings":";AAAA,8DAA8D;AAC9D,mCAAmC;;;AAEnC,uCAA2C;AAC3C,0CAAkD;AAClD,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;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,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;AA/CD,8BA+CC","sourcesContent":["// Copyright 2020-2023 SubQuery Pte Ltd authors & contributors\n// SPDX-License-Identifier: GPL-3.0\n\nimport { NestFactory } from '@nestjs/core';\nimport { findAvailablePort } 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\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: debug ? new NestLogger() : false,\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.d.ts ADDED
@@ -0,0 +1 @@
1
+ export {};
package/dist/main.js ADDED
@@ -0,0 +1,22 @@
1
+ "use strict";
2
+ // Copyright 2020-2023 SubQuery Pte Ltd authors & contributors
3
+ // SPDX-License-Identifier: GPL-3.0
4
+ Object.defineProperty(exports, "__esModule", { value: true });
5
+ const logger_1 = require("@subql/node-core/logger");
6
+ const yargs_1 = require("./yargs");
7
+ const { argv } = yargs_1.yargsOptions;
8
+ BigInt.prototype.toJSON = function () {
9
+ return this.toString();
10
+ };
11
+ // initLogger is imported from true path, to make sure getLogger (or other logger values that relies on logger) isn't initialised
12
+ (0, logger_1.initLogger)(argv.debug, argv.outputFmt, argv.logLevel);
13
+ // Lazy import, to allow logger to be initialised before bootstrap()
14
+ // As bootstrap runs services that requires logger
15
+ const { bootstrap } = require('./init');
16
+ if (!(argv._[0] === 'test' ||
17
+ argv._[0] === 'mmr-migrate' ||
18
+ argv._[0] === 'mmr-regen' ||
19
+ argv._[0] === 'force-clean')) {
20
+ void bootstrap();
21
+ }
22
+ //# sourceMappingURL=main.js.map
@@ -0,0 +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,oEAAoE;AACpE,kDAAkD;AAClD,MAAM,EAAE,SAAS,EAAE,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC;AACxC,IACE,CAAC,CACC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,MAAM;IACpB,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,aAAa;IAC3B,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,WAAW;IACzB,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,aAAa,CAC5B,EACD;IACA,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\n// Lazy import, to allow logger to be initialised before bootstrap()\n// As bootstrap runs services that requires logger\nconst { bootstrap } = require('./init');\nif (\n !(\n argv._[0] === 'test' ||\n argv._[0] === 'mmr-migrate' ||\n argv._[0] === 'mmr-regen' ||\n argv._[0] === 'force-clean'\n )\n) {\n void bootstrap();\n}\n"]}
@@ -0,0 +1,21 @@
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: string;
14
+ lastProcessedHeight: number;
15
+ lastProcessedTimestamp: number;
16
+ uptime: number;
17
+ processedBlockCount: number;
18
+ apiConnected: boolean;
19
+ usingDictionary: boolean;
20
+ };
21
+ }
@@ -0,0 +1,36 @@
1
+ "use strict";
2
+ // Copyright 2020-2023 SubQuery Pte Ltd authors & contributors
3
+ // SPDX-License-Identifier: GPL-3.0
4
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
5
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
6
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
7
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
8
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
9
+ };
10
+ var __metadata = (this && this.__metadata) || function (k, v) {
11
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
12
+ };
13
+ Object.defineProperty(exports, "__esModule", { value: true });
14
+ exports.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,8DAA8D;AAC9D,mCAAmC;;;;;;;;;;;;AAEnC,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-2023 SubQuery Pte Ltd authors & contributors\n// SPDX-License-Identifier: GPL-3.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,2 @@
1
+ export declare class MetaModule {
2
+ }
@@ -0,0 +1,28 @@
1
+ "use strict";
2
+ // Copyright 2020-2023 SubQuery Pte Ltd authors & contributors
3
+ // SPDX-License-Identifier: GPL-3.0
4
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
5
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
6
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
7
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
8
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
9
+ };
10
+ Object.defineProperty(exports, "__esModule", { value: true });
11
+ exports.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: [...node_core_1.metaControllers, meta_controller_1.MetaController],
24
+ providers: [...node_core_1.metaServices, meta_service_1.MetaService],
25
+ })
26
+ ], MetaModule);
27
+ exports.MetaModule = MetaModule;
28
+ //# 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,8DAA8D;AAC9D,mCAAmC;;;;;;;;;AAEnC,2CAAwC;AACxC,gDAAiE;AACjE,mEAA+D;AAC/D,0DAAsD;AACtD,uDAAmD;AACnD,iDAA6C;AAOtC,IAAM,UAAU,GAAhB,MAAM,UAAU;CAAG,CAAA;AAAb,UAAU;IALtB,IAAA,eAAM,EAAC;QACN,OAAO,EAAE,CAAC,oCAAgB,CAAC,QAAQ,EAAE,EAAE,0BAAW,CAAC;QACnD,WAAW,EAAE,CAAC,GAAG,2BAAe,EAAE,gCAAc,CAAC;QACjD,SAAS,EAAE,CAAC,GAAG,wBAAY,EAAE,0BAAW,CAAC;KAC1C,CAAC;GACW,UAAU,CAAG;AAAb,gCAAU","sourcesContent":["// Copyright 2020-2023 SubQuery Pte Ltd authors & contributors\n// SPDX-License-Identifier: GPL-3.0\n\nimport { Module } from '@nestjs/common';\nimport { metaControllers, metaServices } from '@subql/node-core';\nimport { PrometheusModule } 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: [...metaControllers, MetaController],\n providers: [...metaServices, MetaService],\n})\nexport class MetaModule {}\n"]}
@@ -0,0 +1,24 @@
1
+ import { BaseMetaService, NodeConfig, StoreCacheService } from '@subql/node-core';
2
+ export declare class MetaService extends BaseMetaService {
3
+ private nodeConfig;
4
+ private accEnqueueBlocks;
5
+ private accFetchBlocks;
6
+ private currentFilteringBlockNum;
7
+ private accRpcCalls;
8
+ private lastReportedFilteringBlockNum;
9
+ private lastReportedEnqueueBlocks;
10
+ private lastReportedFetchBlocks;
11
+ private lastReportedRpcCalls;
12
+ private lastStatsReportedTs;
13
+ constructor(nodeConfig: NodeConfig, storeCacheService: StoreCacheService);
14
+ protected packageVersion: any;
15
+ protected sdkVersion(): {
16
+ name: string;
17
+ version: string;
18
+ };
19
+ handleEnqueueBlocks(size: number): void;
20
+ handleFilteringBlocks(height: number): void;
21
+ handleFetchBlock(): void;
22
+ handleRpcCall(): void;
23
+ blockFilteringSpeed(): void;
24
+ }