@subql/node-stellar 2.12.1-0 → 2.12.2-0

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