@subql/node-ethereum 2.12.6-1 → 2.12.6-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 (122) hide show
  1. package/CHANGELOG.md +11 -1
  2. package/dist/.tsbuildinfo +1 -1
  3. package/dist/configure/NodeConfig.d.ts +21 -0
  4. package/dist/configure/NodeConfig.js +31 -0
  5. package/dist/configure/NodeConfig.js.map +1 -0
  6. package/dist/configure/SubqueryProject.d.ts +21 -29
  7. package/dist/configure/SubqueryProject.js +48 -72
  8. package/dist/configure/SubqueryProject.js.map +1 -1
  9. package/dist/configure/configure.module.d.ts +2 -2
  10. package/dist/configure/configure.module.js +19 -89
  11. package/dist/configure/configure.module.js.map +1 -1
  12. package/dist/ethereum/api.connection.d.ts +7 -7
  13. package/dist/ethereum/api.connection.js +4 -4
  14. package/dist/ethereum/api.connection.js.map +1 -1
  15. package/dist/ethereum/api.ethereum.d.ts +14 -8
  16. package/dist/ethereum/api.ethereum.js +24 -13
  17. package/dist/ethereum/api.ethereum.js.map +1 -1
  18. package/dist/ethereum/api.ethereum.test.js +29 -32
  19. package/dist/ethereum/api.ethereum.test.js.map +1 -1
  20. package/dist/ethereum/api.service.ethereum.d.ts +9 -7
  21. package/dist/ethereum/api.service.ethereum.js +56 -64
  22. package/dist/ethereum/api.service.ethereum.js.map +1 -1
  23. package/dist/ethereum/api.service.ethereum.test.js +8 -13
  24. package/dist/ethereum/api.service.ethereum.test.js.map +1 -1
  25. package/dist/ethereum/block.ethereum.d.ts +6 -15
  26. package/dist/ethereum/block.ethereum.js +52 -79
  27. package/dist/ethereum/block.ethereum.js.map +1 -1
  28. package/dist/ethereum/ethers/celo/celo-json-rpc-batch-provider.spec.js +3 -6
  29. package/dist/ethereum/ethers/celo/celo-json-rpc-batch-provider.spec.js.map +1 -1
  30. package/dist/ethereum/ethers/celo/celo-json-rpc-provider.spec.js +3 -6
  31. package/dist/ethereum/ethers/celo/celo-json-rpc-provider.spec.js.map +1 -1
  32. package/dist/ethereum/ethers/celo/celo-ws-provider.spec.js +3 -6
  33. package/dist/ethereum/ethers/celo/celo-ws-provider.spec.js.map +1 -1
  34. package/dist/indexer/blockDispatcher/block-dispatcher.service.d.ts +7 -7
  35. package/dist/indexer/blockDispatcher/block-dispatcher.service.js +7 -6
  36. package/dist/indexer/blockDispatcher/block-dispatcher.service.js.map +1 -1
  37. package/dist/indexer/blockDispatcher/worker-block-dispatcher.service.d.ts +4 -4
  38. package/dist/indexer/blockDispatcher/worker-block-dispatcher.service.js +9 -18
  39. package/dist/indexer/blockDispatcher/worker-block-dispatcher.service.js.map +1 -1
  40. package/dist/indexer/dictionary.service.d.ts +3 -3
  41. package/dist/indexer/dictionary.service.js +7 -5
  42. package/dist/indexer/dictionary.service.js.map +1 -1
  43. package/dist/indexer/dynamic-ds.service.d.ts +3 -3
  44. package/dist/indexer/dynamic-ds.service.js.map +1 -1
  45. package/dist/indexer/fetch.module.js +8 -10
  46. package/dist/indexer/fetch.module.js.map +1 -1
  47. package/dist/indexer/fetch.service.d.ts +10 -10
  48. package/dist/indexer/fetch.service.js +22 -43
  49. package/dist/indexer/fetch.service.js.map +1 -1
  50. package/dist/indexer/fetch.service.spec.js +25 -45
  51. package/dist/indexer/fetch.service.spec.js.map +1 -1
  52. package/dist/indexer/indexer.manager.d.ts +10 -12
  53. package/dist/indexer/indexer.manager.js +20 -30
  54. package/dist/indexer/indexer.manager.js.map +1 -1
  55. package/dist/indexer/project.service.d.ts +8 -6
  56. package/dist/indexer/project.service.js +19 -12
  57. package/dist/indexer/project.service.js.map +1 -1
  58. package/dist/indexer/project.service.test.d.ts +1 -0
  59. package/dist/indexer/project.service.test.js +26 -0
  60. package/dist/indexer/project.service.test.js.map +1 -0
  61. package/dist/indexer/sandbox.service.d.ts +1 -1
  62. package/dist/indexer/sandbox.service.js +1 -0
  63. package/dist/indexer/sandbox.service.js.map +1 -1
  64. package/dist/indexer/types.d.ts +2 -11
  65. package/dist/indexer/types.js +0 -6
  66. package/dist/indexer/types.js.map +1 -1
  67. package/dist/indexer/unfinalizedBlocks.service.d.ts +4 -4
  68. package/dist/indexer/unfinalizedBlocks.service.js +25 -1
  69. package/dist/indexer/unfinalizedBlocks.service.js.map +1 -1
  70. package/dist/indexer/worker/worker.d.ts +4 -28
  71. package/dist/indexer/worker/worker.js +8 -71
  72. package/dist/indexer/worker/worker.js.map +1 -1
  73. package/dist/indexer/worker/worker.module.js +2 -2
  74. package/dist/indexer/worker/worker.module.js.map +1 -1
  75. package/dist/indexer/worker/worker.service.d.ts +11 -13
  76. package/dist/indexer/worker/worker.service.js +14 -56
  77. package/dist/indexer/worker/worker.service.js.map +1 -1
  78. package/dist/indexer/worker/worker.unfinalizedBlocks.service.d.ts +4 -8
  79. package/dist/indexer/worker/worker.unfinalizedBlocks.service.js +8 -7
  80. package/dist/indexer/worker/worker.unfinalizedBlocks.service.js.map +1 -1
  81. package/dist/indexer/worker-fetch.module.d.ts +2 -0
  82. package/dist/indexer/{indexer.module.js → worker-fetch.module.js} +10 -33
  83. package/dist/indexer/worker-fetch.module.js.map +1 -0
  84. package/dist/init.js +1 -1
  85. package/dist/init.js.map +1 -1
  86. package/dist/main.js +4 -8
  87. package/dist/main.js.map +1 -1
  88. package/dist/subcommands/reindex.init.js +1 -2
  89. package/dist/subcommands/reindex.init.js.map +1 -1
  90. package/dist/subcommands/reindex.module.js +10 -6
  91. package/dist/subcommands/reindex.module.js.map +1 -1
  92. package/dist/subcommands/testing.init.js +2 -4
  93. package/dist/subcommands/testing.init.js.map +1 -1
  94. package/dist/subcommands/testing.module.js +3 -8
  95. package/dist/subcommands/testing.module.js.map +1 -1
  96. package/dist/subcommands/testing.service.d.ts +8 -5
  97. package/dist/subcommands/testing.service.js +3 -8
  98. package/dist/subcommands/testing.service.js.map +1 -1
  99. package/dist/utils/project.d.ts +5 -4
  100. package/dist/utils/project.js +17 -1
  101. package/dist/utils/project.js.map +1 -1
  102. package/dist/yargs.d.ts +7 -90
  103. package/dist/yargs.js +9 -112
  104. package/dist/yargs.js.map +1 -1
  105. package/package.json +8 -8
  106. package/dist/indexer/indexer.module.d.ts +0 -2
  107. package/dist/indexer/indexer.module.js.map +0 -1
  108. package/dist/subcommands/mmrMigrate.init.d.ts +0 -2
  109. package/dist/subcommands/mmrMigrate.init.js +0 -28
  110. package/dist/subcommands/mmrMigrate.init.js.map +0 -1
  111. package/dist/subcommands/mmrMigrate.module.d.ts +0 -2
  112. package/dist/subcommands/mmrMigrate.module.js +0 -28
  113. package/dist/subcommands/mmrMigrate.module.js.map +0 -1
  114. package/dist/subcommands/mmrRegenerate.init.d.ts +0 -1
  115. package/dist/subcommands/mmrRegenerate.init.js +0 -28
  116. package/dist/subcommands/mmrRegenerate.init.js.map +0 -1
  117. package/dist/subcommands/mmrRegenerate.module.d.ts +0 -2
  118. package/dist/subcommands/mmrRegenerate.module.js +0 -30
  119. package/dist/subcommands/mmrRegenerate.module.js.map +0 -1
  120. package/dist/subcommands/reindex.service.d.ts +0 -11
  121. package/dist/subcommands/reindex.service.js +0 -46
  122. package/dist/subcommands/reindex.service.js.map +0 -1
@@ -1,16 +1,16 @@
1
1
  import { OnApplicationShutdown } from '@nestjs/common';
2
2
  import { EventEmitter2 } from '@nestjs/event-emitter';
3
- import { NodeConfig, SmartBatchService, StoreCacheService, StoreService, IProjectService, PoiService, BlockDispatcher, ProcessBlockResponse, ApiService } from '@subql/node-core';
4
- import { EthereumBlockWrapper } from '@subql/types-ethereum';
5
- import { SubqlProjectDs, SubqueryProject } from '../../configure/SubqueryProject';
3
+ import { NodeConfig, SmartBatchService, StoreCacheService, StoreService, IProjectService, PoiService, BlockDispatcher, ProcessBlockResponse, ApiService, IProjectUpgradeService } from '@subql/node-core';
4
+ import { EthereumProjectDs, SubqueryProject } from '../../configure/SubqueryProject';
6
5
  import { DynamicDsService } from '../dynamic-ds.service';
7
6
  import { IndexerManager } from '../indexer.manager';
7
+ import { BlockContent } from '../types';
8
8
  /**
9
9
  * @description Intended to behave the same as WorkerBlockDispatcherService but doesn't use worker threads or any parallel processing
10
10
  */
11
- export declare class BlockDispatcherService extends BlockDispatcher<EthereumBlockWrapper, SubqlProjectDs> implements OnApplicationShutdown {
11
+ export declare class BlockDispatcherService extends BlockDispatcher<BlockContent, EthereumProjectDs> implements OnApplicationShutdown {
12
12
  private indexerManager;
13
- constructor(apiService: ApiService, nodeConfig: NodeConfig, indexerManager: IndexerManager, eventEmitter: EventEmitter2, projectService: IProjectService<SubqlProjectDs>, smartBatchService: SmartBatchService, storeService: StoreService, storeCacheService: StoreCacheService, poiService: PoiService, project: SubqueryProject, dynamicDsService: DynamicDsService);
14
- protected getBlockHeight(block: EthereumBlockWrapper): number;
15
- protected indexBlock(block: EthereumBlockWrapper): Promise<ProcessBlockResponse>;
13
+ constructor(apiService: ApiService, nodeConfig: NodeConfig, indexerManager: IndexerManager, eventEmitter: EventEmitter2, projectService: IProjectService<EthereumProjectDs>, projectUpgradeService: IProjectUpgradeService, smartBatchService: SmartBatchService, storeService: StoreService, storeCacheService: StoreCacheService, poiService: PoiService, project: SubqueryProject, dynamicDsService: DynamicDsService);
14
+ protected getBlockHeight(block: BlockContent): number;
15
+ protected indexBlock(block: BlockContent): Promise<ProcessBlockResponse>;
16
16
  }
@@ -25,25 +25,26 @@ const indexer_manager_1 = require("../indexer.manager");
25
25
  * @description Intended to behave the same as WorkerBlockDispatcherService but doesn't use worker threads or any parallel processing
26
26
  */
27
27
  let BlockDispatcherService = class BlockDispatcherService extends node_core_1.BlockDispatcher {
28
- constructor(apiService, nodeConfig, indexerManager, eventEmitter, projectService, smartBatchService, storeService, storeCacheService, poiService, project, dynamicDsService) {
29
- super(nodeConfig, eventEmitter, projectService, smartBatchService, storeService, storeCacheService, poiService, project, dynamicDsService, apiService.fetchBlocks.bind(apiService));
28
+ constructor(apiService, nodeConfig, indexerManager, eventEmitter, projectService, projectUpgradeService, smartBatchService, storeService, storeCacheService, poiService, project, dynamicDsService) {
29
+ super(nodeConfig, eventEmitter, projectService, projectUpgradeService, smartBatchService, storeService, storeCacheService, poiService, project, dynamicDsService, apiService.fetchBlocks.bind(apiService));
30
30
  this.indexerManager = indexerManager;
31
31
  }
32
32
  getBlockHeight(block) {
33
- return block.blockHeight;
33
+ return block.number;
34
34
  }
35
35
  async indexBlock(block) {
36
- return this.indexerManager.indexBlock(block, await this.projectService.getAllDataSources(this.getBlockHeight(block)));
36
+ return this.indexerManager.indexBlock(block, await this.projectService.getDataSources(this.getBlockHeight(block)));
37
37
  }
38
38
  };
39
39
  BlockDispatcherService = __decorate([
40
40
  (0, common_1.Injectable)(),
41
41
  __param(4, (0, common_1.Inject)('IProjectService')),
42
- __param(9, (0, common_1.Inject)('ISubqueryProject')),
42
+ __param(5, (0, common_1.Inject)('IProjectUpgradeService')),
43
+ __param(10, (0, common_1.Inject)('ISubqueryProject')),
43
44
  __metadata("design:paramtypes", [node_core_1.ApiService,
44
45
  node_core_1.NodeConfig,
45
46
  indexer_manager_1.IndexerManager,
46
- event_emitter_1.EventEmitter2, Object, node_core_1.SmartBatchService,
47
+ event_emitter_1.EventEmitter2, Object, Object, node_core_1.SmartBatchService,
47
48
  node_core_1.StoreService,
48
49
  node_core_1.StoreCacheService,
49
50
  node_core_1.PoiService,
@@ -1 +1 @@
1
- {"version":3,"file":"block-dispatcher.service.js","sourceRoot":"","sources":["../../../src/indexer/blockDispatcher/block-dispatcher.service.ts"],"names":[],"mappings":";AAAA,8DAA8D;AAC9D,mCAAmC;;;;;;;;;;;;;;;AAEnC,2CAA2E;AAC3E,yDAAsD;AACtD,gDAU0B;AAE1B,qEAGyC;AACzC,8DAAyD;AACzD,wDAAoD;AAEpD;;GAEG;AAEI,IAAM,sBAAsB,GAA5B,MAAM,sBACX,SAAQ,2BAAqD;IAG7D,YACE,UAAsB,EACtB,UAAsB,EACd,cAA8B,EACtC,YAA2B,EACA,cAA+C,EAC1E,iBAAoC,EACpC,YAA0B,EAC1B,iBAAoC,EACpC,UAAsB,EACM,OAAwB,EACpD,gBAAkC;QAElC,KAAK,CACH,UAAU,EACV,YAAY,EACZ,cAAc,EACd,iBAAiB,EACjB,YAAY,EACZ,iBAAiB,EACjB,UAAU,EACV,OAAO,EACP,gBAAgB,EAChB,UAAU,CAAC,WAAW,CAAC,IAAI,CAAC,UAAU,CAAC,CACxC,CAAC;QArBM,mBAAc,GAAd,cAAc,CAAgB;IAsBxC,CAAC;IAES,cAAc,CAAC,KAA2B;QAClD,OAAO,KAAK,CAAC,WAAW,CAAC;IAC3B,CAAC;IAES,KAAK,CAAC,UAAU,CACxB,KAA2B;QAE3B,OAAO,IAAI,CAAC,cAAc,CAAC,UAAU,CACnC,KAAK,EACL,MAAM,IAAI,CAAC,cAAc,CAAC,iBAAiB,CAAC,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC,CACxE,CAAC;IACJ,CAAC;CACF,CAAA;AA3CY,sBAAsB;IADlC,IAAA,mBAAU,GAAE;IAUR,WAAA,IAAA,eAAM,EAAC,iBAAiB,CAAC,CAAA;IAKzB,WAAA,IAAA,eAAM,EAAC,kBAAkB,CAAC,CAAA;qCATf,sBAAU;QACV,sBAAU;QACE,gCAAc;QACxB,6BAAa,UAER,6BAAiB;QACtB,wBAAY;QACP,6BAAiB;QACxB,sBAAU;QACe,iCAAe;QAClC,qCAAgB;GAfzB,sBAAsB,CA2ClC;AA3CY,wDAAsB","sourcesContent":["// Copyright 2020-2023 SubQuery Pte Ltd authors & contributors\n// SPDX-License-Identifier: GPL-3.0\n\nimport { Inject, Injectable, OnApplicationShutdown } from '@nestjs/common';\nimport { EventEmitter2 } from '@nestjs/event-emitter';\nimport {\n NodeConfig,\n SmartBatchService,\n StoreCacheService,\n StoreService,\n IProjectService,\n PoiService,\n BlockDispatcher,\n ProcessBlockResponse,\n ApiService,\n} from '@subql/node-core';\nimport { EthereumBlockWrapper } from '@subql/types-ethereum';\nimport {\n SubqlProjectDs,\n SubqueryProject,\n} from '../../configure/SubqueryProject';\nimport { DynamicDsService } from '../dynamic-ds.service';\nimport { IndexerManager } from '../indexer.manager';\n\n/**\n * @description Intended to behave the same as WorkerBlockDispatcherService but doesn't use worker threads or any parallel processing\n */\n@Injectable()\nexport class BlockDispatcherService\n extends BlockDispatcher<EthereumBlockWrapper, SubqlProjectDs>\n implements OnApplicationShutdown\n{\n constructor(\n apiService: ApiService,\n nodeConfig: NodeConfig,\n private indexerManager: IndexerManager,\n eventEmitter: EventEmitter2,\n @Inject('IProjectService') projectService: IProjectService<SubqlProjectDs>,\n smartBatchService: SmartBatchService,\n storeService: StoreService,\n storeCacheService: StoreCacheService,\n poiService: PoiService,\n @Inject('ISubqueryProject') project: SubqueryProject,\n dynamicDsService: DynamicDsService,\n ) {\n super(\n nodeConfig,\n eventEmitter,\n projectService,\n smartBatchService,\n storeService,\n storeCacheService,\n poiService,\n project,\n dynamicDsService,\n apiService.fetchBlocks.bind(apiService),\n );\n }\n\n protected getBlockHeight(block: EthereumBlockWrapper): number {\n return block.blockHeight;\n }\n\n protected async indexBlock(\n block: EthereumBlockWrapper,\n ): Promise<ProcessBlockResponse> {\n return this.indexerManager.indexBlock(\n block,\n await this.projectService.getAllDataSources(this.getBlockHeight(block)),\n );\n }\n}\n"]}
1
+ {"version":3,"file":"block-dispatcher.service.js","sourceRoot":"","sources":["../../../src/indexer/blockDispatcher/block-dispatcher.service.ts"],"names":[],"mappings":";AAAA,8DAA8D;AAC9D,mCAAmC;;;;;;;;;;;;;;;AAEnC,2CAA2E;AAC3E,yDAAsD;AACtD,gDAW0B;AAC1B,qEAGyC;AACzC,8DAAyD;AACzD,wDAAoD;AAGpD;;GAEG;AAEI,IAAM,sBAAsB,GAA5B,MAAM,sBACX,SAAQ,2BAAgD;IAGxD,YACE,UAAsB,EACtB,UAAsB,EACd,cAA8B,EACtC,YAA2B,EAE3B,cAAkD,EAElD,qBAA6C,EAC7C,iBAAoC,EACpC,YAA0B,EAC1B,iBAAoC,EACpC,UAAsB,EACM,OAAwB,EACpD,gBAAkC;QAElC,KAAK,CACH,UAAU,EACV,YAAY,EACZ,cAAc,EACd,qBAAqB,EACrB,iBAAiB,EACjB,YAAY,EACZ,iBAAiB,EACjB,UAAU,EACV,OAAO,EACP,gBAAgB,EAChB,UAAU,CAAC,WAAW,CAAC,IAAI,CAAC,UAAU,CAAC,CACxC,CAAC;QAzBM,mBAAc,GAAd,cAAc,CAAgB;IA0BxC,CAAC;IAES,cAAc,CAAC,KAAmB;QAC1C,OAAO,KAAK,CAAC,MAAM,CAAC;IACtB,CAAC;IAES,KAAK,CAAC,UAAU,CACxB,KAAmB;QAEnB,OAAO,IAAI,CAAC,cAAc,CAAC,UAAU,CACnC,KAAK,EACL,MAAM,IAAI,CAAC,cAAc,CAAC,cAAc,CAAC,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC,CACrE,CAAC;IACJ,CAAC;CACF,CAAA;AA/CY,sBAAsB;IADlC,IAAA,mBAAU,GAAE;IAUR,WAAA,IAAA,eAAM,EAAC,iBAAiB,CAAC,CAAA;IAEzB,WAAA,IAAA,eAAM,EAAC,wBAAwB,CAAC,CAAA;IAMhC,YAAA,IAAA,eAAM,EAAC,kBAAkB,CAAC,CAAA;qCAZf,sBAAU;QACV,sBAAU;QACE,gCAAc;QACxB,6BAAa,kBAKR,6BAAiB;QACtB,wBAAY;QACP,6BAAiB;QACxB,sBAAU;QACe,iCAAe;QAClC,qCAAgB;GAlBzB,sBAAsB,CA+ClC;AA/CY,wDAAsB","sourcesContent":["// Copyright 2020-2023 SubQuery Pte Ltd authors & contributors\n// SPDX-License-Identifier: GPL-3.0\n\nimport { Inject, Injectable, OnApplicationShutdown } from '@nestjs/common';\nimport { EventEmitter2 } from '@nestjs/event-emitter';\nimport {\n NodeConfig,\n SmartBatchService,\n StoreCacheService,\n StoreService,\n IProjectService,\n PoiService,\n BlockDispatcher,\n ProcessBlockResponse,\n ApiService,\n IProjectUpgradeService,\n} from '@subql/node-core';\nimport {\n EthereumProjectDs,\n SubqueryProject,\n} from '../../configure/SubqueryProject';\nimport { DynamicDsService } from '../dynamic-ds.service';\nimport { IndexerManager } from '../indexer.manager';\nimport { BlockContent } from '../types';\n\n/**\n * @description Intended to behave the same as WorkerBlockDispatcherService but doesn't use worker threads or any parallel processing\n */\n@Injectable()\nexport class BlockDispatcherService\n extends BlockDispatcher<BlockContent, EthereumProjectDs>\n implements OnApplicationShutdown\n{\n constructor(\n apiService: ApiService,\n nodeConfig: NodeConfig,\n private indexerManager: IndexerManager,\n eventEmitter: EventEmitter2,\n @Inject('IProjectService')\n projectService: IProjectService<EthereumProjectDs>,\n @Inject('IProjectUpgradeService')\n projectUpgradeService: IProjectUpgradeService,\n smartBatchService: SmartBatchService,\n storeService: StoreService,\n storeCacheService: StoreCacheService,\n poiService: PoiService,\n @Inject('ISubqueryProject') project: SubqueryProject,\n dynamicDsService: DynamicDsService,\n ) {\n super(\n nodeConfig,\n eventEmitter,\n projectService,\n projectUpgradeService,\n smartBatchService,\n storeService,\n storeCacheService,\n poiService,\n project,\n dynamicDsService,\n apiService.fetchBlocks.bind(apiService),\n );\n }\n\n protected getBlockHeight(block: BlockContent): number {\n return block.number;\n }\n\n protected async indexBlock(\n block: BlockContent,\n ): Promise<ProcessBlockResponse> {\n return this.indexerManager.indexBlock(\n block,\n await this.projectService.getDataSources(this.getBlockHeight(block)),\n );\n }\n}\n"]}
@@ -1,7 +1,7 @@
1
1
  import { OnApplicationShutdown } from '@nestjs/common';
2
2
  import { EventEmitter2 } from '@nestjs/event-emitter';
3
- import { NodeConfig, SmartBatchService, StoreService, PoiService, StoreCacheService, IProjectService, WorkerBlockDispatcher, ConnectionPoolStateManager } from '@subql/node-core';
4
- import { SubqlProjectDs, SubqueryProject } from '../../configure/SubqueryProject';
3
+ import { NodeConfig, SmartBatchService, StoreService, PoiService, StoreCacheService, IProjectService, WorkerBlockDispatcher, ConnectionPoolStateManager, IProjectUpgradeService } from '@subql/node-core';
4
+ import { EthereumProjectDs, SubqueryProject } from '../../configure/SubqueryProject';
5
5
  import { EthereumApiConnection } from '../../ethereum/api.connection';
6
6
  import { DynamicDsService } from '../dynamic-ds.service';
7
7
  import { UnfinalizedBlocksService } from '../unfinalizedBlocks.service';
@@ -9,8 +9,8 @@ import { IIndexerWorker } from '../worker/worker';
9
9
  type IndexerWorker = IIndexerWorker & {
10
10
  terminate: () => Promise<number>;
11
11
  };
12
- export declare class WorkerBlockDispatcherService extends WorkerBlockDispatcher<SubqlProjectDs, IndexerWorker> implements OnApplicationShutdown {
13
- constructor(nodeConfig: NodeConfig, eventEmitter: EventEmitter2, projectService: IProjectService<SubqlProjectDs>, smartBatchService: SmartBatchService, storeService: StoreService, storeCacheService: StoreCacheService, poiService: PoiService, project: SubqueryProject, dynamicDsService: DynamicDsService, unfinalizedBlocksSevice: UnfinalizedBlocksService, connectionPoolState: ConnectionPoolStateManager<EthereumApiConnection>);
12
+ export declare class WorkerBlockDispatcherService extends WorkerBlockDispatcher<EthereumProjectDs, IndexerWorker> implements OnApplicationShutdown {
13
+ constructor(nodeConfig: NodeConfig, eventEmitter: EventEmitter2, projectService: IProjectService<EthereumProjectDs>, projectUpgadeService: IProjectUpgradeService, smartBatchService: SmartBatchService, storeService: StoreService, storeCacheService: StoreCacheService, poiService: PoiService, project: SubqueryProject, dynamicDsService: DynamicDsService, unfinalizedBlocksSevice: UnfinalizedBlocksService, connectionPoolState: ConnectionPoolStateManager<EthereumApiConnection>);
14
14
  protected fetchBlock(worker: IndexerWorker, height: number): Promise<void>;
15
15
  }
16
16
  export {};
@@ -25,28 +25,18 @@ const node_core_1 = require("@subql/node-core");
25
25
  const SubqueryProject_1 = require("../../configure/SubqueryProject");
26
26
  const dynamic_ds_service_1 = require("../dynamic-ds.service");
27
27
  const unfinalizedBlocks_service_1 = require("../unfinalizedBlocks.service");
28
- const logger = (0, node_core_1.getLogger)('WorkerBlockDispatcherService');
29
- async function createIndexerWorker(store, dynamicDsService, unfinalizedBlocksService, connectionPoolState, root) {
30
- const indexerWorker = node_core_1.Worker.create(path_1.default.resolve(__dirname, '../../../dist/indexer/worker/worker.js'), [
31
- 'initWorker',
32
- 'processBlock',
33
- 'fetchBlock',
34
- 'numFetchedBlocks',
35
- 'numFetchingBlocks',
36
- 'getStatus',
37
- 'getMemoryLeft',
38
- 'waitForWorkerBatchSize',
39
- ], Object.assign({ storeGet: store.get.bind(store), storeGetByField: store.getByField.bind(store), storeGetOneByField: store.getOneByField.bind(store), storeSet: store.set.bind(store), storeBulkCreate: store.bulkCreate.bind(store), storeBulkUpdate: store.bulkUpdate.bind(store), storeRemove: store.remove.bind(store), storeBulkRemove: store.bulkRemove.bind(store), dynamicDsCreateDynamicDatasource: dynamicDsService.createDynamicDatasource.bind(dynamicDsService), dynamicDsGetDynamicDatasources: dynamicDsService.getDynamicDatasources.bind(dynamicDsService), unfinalizedBlocksProcess: unfinalizedBlocksService.processUnfinalizedBlockHeader.bind(unfinalizedBlocksService) }, (0, node_core_1.connectionPoolStateHostFunctions)(connectionPoolState)), root);
40
- await indexerWorker.initWorker();
28
+ async function createIndexerWorker(store, dynamicDsService, unfinalizedBlocksService, connectionPoolState, root, startHeight) {
29
+ const indexerWorker = node_core_1.Worker.create(path_1.default.resolve(__dirname, '../../../dist/indexer/worker/worker.js'), [...node_core_1.baseWorkerFunctions, 'initWorker'], Object.assign(Object.assign(Object.assign(Object.assign({}, (0, node_core_1.storeHostFunctions)(store)), (0, node_core_1.dynamicDsHostFunctions)(dynamicDsService)), { unfinalizedBlocksProcess: unfinalizedBlocksService.processUnfinalizedBlockHeader.bind(unfinalizedBlocksService) }), (0, node_core_1.connectionPoolStateHostFunctions)(connectionPoolState)), root);
30
+ await indexerWorker.initWorker(startHeight);
41
31
  return indexerWorker;
42
32
  }
43
33
  let WorkerBlockDispatcherService = class WorkerBlockDispatcherService extends node_core_1.WorkerBlockDispatcher {
44
- constructor(nodeConfig, eventEmitter, projectService, smartBatchService, storeService, storeCacheService, poiService, project, dynamicDsService, unfinalizedBlocksSevice, connectionPoolState) {
45
- super(nodeConfig, eventEmitter, projectService, smartBatchService, storeService, storeCacheService, poiService, project, dynamicDsService, () => createIndexerWorker(storeService.getStore(), dynamicDsService, unfinalizedBlocksSevice, connectionPoolState, project.root));
34
+ constructor(nodeConfig, eventEmitter, projectService, projectUpgadeService, smartBatchService, storeService, storeCacheService, poiService, project, dynamicDsService, unfinalizedBlocksSevice, connectionPoolState) {
35
+ super(nodeConfig, eventEmitter, projectService, projectUpgadeService, smartBatchService, storeService, storeCacheService, poiService, project, dynamicDsService, () => createIndexerWorker(storeService.getStore(), dynamicDsService, unfinalizedBlocksSevice, connectionPoolState, project.root, projectService.startHeight));
46
36
  }
47
37
  async fetchBlock(worker, height) {
48
38
  const start = new Date();
49
- await worker.fetchBlock(height);
39
+ await worker.fetchBlock(height, null);
50
40
  const end = new Date();
51
41
  // const waitTime = end.getTime() - start.getTime();
52
42
  // if (waitTime > 1000) {
@@ -63,9 +53,10 @@ let WorkerBlockDispatcherService = class WorkerBlockDispatcherService extends no
63
53
  WorkerBlockDispatcherService = __decorate([
64
54
  (0, common_1.Injectable)(),
65
55
  __param(2, (0, common_1.Inject)('IProjectService')),
66
- __param(7, (0, common_1.Inject)('ISubqueryProject')),
56
+ __param(3, (0, common_1.Inject)('IProjectUpgradeService')),
57
+ __param(8, (0, common_1.Inject)('ISubqueryProject')),
67
58
  __metadata("design:paramtypes", [node_core_1.NodeConfig,
68
- event_emitter_1.EventEmitter2, Object, node_core_1.SmartBatchService,
59
+ event_emitter_1.EventEmitter2, Object, Object, node_core_1.SmartBatchService,
69
60
  node_core_1.StoreService,
70
61
  node_core_1.StoreCacheService,
71
62
  node_core_1.PoiService,
@@ -1 +1 @@
1
- {"version":3,"file":"worker-block-dispatcher.service.js","sourceRoot":"","sources":["../../../src/indexer/blockDispatcher/worker-block-dispatcher.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 path from 'path';\nimport { Inject, Injectable, OnApplicationShutdown } from '@nestjs/common';\nimport { EventEmitter2 } from '@nestjs/event-emitter';\nimport {\n getLogger,\n NodeConfig,\n Worker,\n SmartBatchService,\n StoreService,\n PoiService,\n StoreCacheService,\n IProjectService,\n IDynamicDsService,\n HostStore,\n HostDynamicDS,\n WorkerBlockDispatcher,\n IUnfinalizedBlocksService,\n HostConnectionPoolState,\n ConnectionPoolStateManager,\n connectionPoolStateHostFunctions,\n} from '@subql/node-core';\nimport { Store } from '@subql/types-ethereum';\nimport {\n SubqlProjectDs,\n SubqueryProject,\n} from '../../configure/SubqueryProject';\nimport { EthereumApiConnection } from '../../ethereum/api.connection';\n\nimport { EthereumBlockWrapped } from '../../ethereum/block.ethereum';\nimport { DynamicDsService } from '../dynamic-ds.service';\nimport { UnfinalizedBlocksService } from '../unfinalizedBlocks.service';\nimport { IIndexerWorker, IInitIndexerWorker } from '../worker/worker';\nimport { HostUnfinalizedBlocks } from '../worker/worker.unfinalizedBlocks.service';\n\nconst logger = getLogger('WorkerBlockDispatcherService');\n\ntype IndexerWorker = IIndexerWorker & {\n terminate: () => Promise<number>;\n};\n\nasync function createIndexerWorker(\n store: Store,\n dynamicDsService: IDynamicDsService<SubqlProjectDs>,\n unfinalizedBlocksService: IUnfinalizedBlocksService<EthereumBlockWrapped>,\n connectionPoolState: ConnectionPoolStateManager<EthereumApiConnection>,\n\n root: string,\n): Promise<IndexerWorker> {\n const indexerWorker = Worker.create<\n IInitIndexerWorker,\n HostDynamicDS<SubqlProjectDs> & HostStore & HostUnfinalizedBlocks\n >(\n path.resolve(__dirname, '../../../dist/indexer/worker/worker.js'),\n [\n 'initWorker',\n 'processBlock',\n 'fetchBlock',\n 'numFetchedBlocks',\n 'numFetchingBlocks',\n 'getStatus',\n 'getMemoryLeft',\n 'waitForWorkerBatchSize',\n ],\n {\n storeGet: store.get.bind(store),\n storeGetByField: store.getByField.bind(store),\n storeGetOneByField: store.getOneByField.bind(store),\n storeSet: store.set.bind(store),\n storeBulkCreate: store.bulkCreate.bind(store),\n storeBulkUpdate: store.bulkUpdate.bind(store),\n storeRemove: store.remove.bind(store),\n storeBulkRemove: store.bulkRemove.bind(store),\n dynamicDsCreateDynamicDatasource:\n dynamicDsService.createDynamicDatasource.bind(dynamicDsService),\n dynamicDsGetDynamicDatasources:\n dynamicDsService.getDynamicDatasources.bind(dynamicDsService),\n unfinalizedBlocksProcess:\n unfinalizedBlocksService.processUnfinalizedBlockHeader.bind(\n unfinalizedBlocksService,\n ),\n ...connectionPoolStateHostFunctions(connectionPoolState),\n },\n root,\n );\n\n await indexerWorker.initWorker();\n\n return indexerWorker;\n}\n\n@Injectable()\nexport class WorkerBlockDispatcherService\n extends WorkerBlockDispatcher<SubqlProjectDs, IndexerWorker>\n implements OnApplicationShutdown\n{\n constructor(\n nodeConfig: NodeConfig,\n eventEmitter: EventEmitter2,\n @Inject('IProjectService') projectService: IProjectService<SubqlProjectDs>,\n smartBatchService: SmartBatchService,\n storeService: StoreService,\n storeCacheService: StoreCacheService,\n poiService: PoiService,\n @Inject('ISubqueryProject') project: SubqueryProject,\n dynamicDsService: DynamicDsService,\n unfinalizedBlocksSevice: UnfinalizedBlocksService,\n connectionPoolState: ConnectionPoolStateManager<EthereumApiConnection>,\n ) {\n super(\n nodeConfig,\n eventEmitter,\n projectService,\n smartBatchService,\n storeService,\n storeCacheService,\n poiService,\n project,\n dynamicDsService,\n () =>\n createIndexerWorker(\n storeService.getStore(),\n dynamicDsService,\n unfinalizedBlocksSevice,\n connectionPoolState,\n project.root,\n ),\n );\n }\n\n protected async fetchBlock(\n worker: IndexerWorker,\n height: number,\n ): Promise<void> {\n const start = new Date();\n await worker.fetchBlock(height);\n const end = new Date();\n\n // const waitTime = end.getTime() - start.getTime();\n // if (waitTime > 1000) {\n // logger.info(\n // `Waiting to fetch block ${height}: ${chalk.red(`${waitTime}ms`)}`,\n // );\n // } else if (waitTime > 200) {\n // logger.info(\n // `Waiting to fetch block ${height}: ${chalk.yellow(`${waitTime}ms`)}`,\n // );\n // }\n }\n}\n"]}
1
+ {"version":3,"file":"worker-block-dispatcher.service.js","sourceRoot":"","sources":["../../../src/indexer/blockDispatcher/worker-block-dispatcher.service.ts"],"names":[],"mappings":";AAAA,8DAA8D;AAC9D,mCAAmC;;;;;;;;;;;;;;;;;;AAEnC,gDAAwB;AACxB,2CAA2E;AAC3E,yDAAsD;AACtD,gDAoB0B;AAE1B,qEAGyC;AAEzC,8DAAyD;AAEzD,4EAAwE;AAOxE,KAAK,UAAU,mBAAmB,CAChC,KAAY,EACZ,gBAAsD,EACtD,wBAAiE,EACjE,mBAAsE,EACtE,IAAY,EACZ,WAAmB;IAEnB,MAAM,aAAa,GAAG,kBAAM,CAAC,MAAM,CAIjC,cAAI,CAAC,OAAO,CAAC,SAAS,EAAE,wCAAwC,CAAC,EACjE,CAAC,GAAG,+BAAmB,EAAE,YAAY,CAAC,8DAEjC,IAAA,8BAAkB,EAAC,KAAK,CAAC,GACzB,IAAA,kCAAsB,EAAC,gBAAgB,CAAC,KAC3C,wBAAwB,EACtB,wBAAwB,CAAC,6BAA6B,CAAC,IAAI,CACzD,wBAAwB,CACzB,KACA,IAAA,4CAAgC,EAAC,mBAAmB,CAAC,GAE1D,IAAI,CACL,CAAC;IAEF,MAAM,aAAa,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC;IAE5C,OAAO,aAAa,CAAC;AACvB,CAAC;AAGM,IAAM,4BAA4B,GAAlC,MAAM,4BACX,SAAQ,iCAAuD;IAG/D,YACE,UAAsB,EACtB,YAA2B,EAE3B,cAAkD,EAElD,oBAA4C,EAC5C,iBAAoC,EACpC,YAA0B,EAC1B,iBAAoC,EACpC,UAAsB,EACM,OAAwB,EACpD,gBAAkC,EAClC,uBAAiD,EACjD,mBAAsE;QAEtE,KAAK,CACH,UAAU,EACV,YAAY,EACZ,cAAc,EACd,oBAAoB,EACpB,iBAAiB,EACjB,YAAY,EACZ,iBAAiB,EACjB,UAAU,EACV,OAAO,EACP,gBAAgB,EAChB,GAAG,EAAE,CACH,mBAAmB,CACjB,YAAY,CAAC,QAAQ,EAAE,EACvB,gBAAgB,EAChB,uBAAuB,EACvB,mBAAmB,EACnB,OAAO,CAAC,IAAI,EACZ,cAAc,CAAC,WAAW,CAC3B,CACJ,CAAC;IACJ,CAAC;IAES,KAAK,CAAC,UAAU,CACxB,MAAqB,EACrB,MAAc;QAEd,MAAM,KAAK,GAAG,IAAI,IAAI,EAAE,CAAC;QACzB,MAAM,MAAM,CAAC,UAAU,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;QACtC,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC;QAEvB,oDAAoD;QACpD,yBAAyB;QACzB,iBAAiB;QACjB,yEAAyE;QACzE,OAAO;QACP,+BAA+B;QAC/B,iBAAiB;QACjB,4EAA4E;QAC5E,OAAO;QACP,IAAI;IACN,CAAC;CACF,CAAA;AA9DY,4BAA4B;IADxC,IAAA,mBAAU,GAAE;IAQR,WAAA,IAAA,eAAM,EAAC,iBAAiB,CAAC,CAAA;IAEzB,WAAA,IAAA,eAAM,EAAC,wBAAwB,CAAC,CAAA;IAMhC,WAAA,IAAA,eAAM,EAAC,kBAAkB,CAAC,CAAA;qCAVf,sBAAU;QACR,6BAAa,kBAKR,6BAAiB;QACtB,wBAAY;QACP,6BAAiB;QACxB,sBAAU;QACe,iCAAe;QAClC,qCAAgB;QACT,oDAAwB;QAC5B,sCAA0B;GAlBtC,4BAA4B,CA8DxC;AA9DY,oEAA4B","sourcesContent":["// Copyright 2020-2023 SubQuery Pte Ltd authors & contributors\n// SPDX-License-Identifier: GPL-3.0\n\nimport path from 'path';\nimport { Inject, Injectable, OnApplicationShutdown } from '@nestjs/common';\nimport { EventEmitter2 } from '@nestjs/event-emitter';\nimport {\n NodeConfig,\n Worker,\n SmartBatchService,\n StoreService,\n PoiService,\n StoreCacheService,\n IProjectService,\n IDynamicDsService,\n HostStore,\n HostDynamicDS,\n WorkerBlockDispatcher,\n IUnfinalizedBlocksService,\n ConnectionPoolStateManager,\n connectionPoolStateHostFunctions,\n baseWorkerFunctions,\n storeHostFunctions,\n dynamicDsHostFunctions,\n IProjectUpgradeService,\n HostUnfinalizedBlocks,\n} from '@subql/node-core';\nimport { Store } from '@subql/types-core';\nimport {\n EthereumProjectDs,\n SubqueryProject,\n} from '../../configure/SubqueryProject';\nimport { EthereumApiConnection } from '../../ethereum/api.connection';\nimport { DynamicDsService } from '../dynamic-ds.service';\nimport { BlockContent } from '../types';\nimport { UnfinalizedBlocksService } from '../unfinalizedBlocks.service';\nimport { IIndexerWorker, IInitIndexerWorker } from '../worker/worker';\n\ntype IndexerWorker = IIndexerWorker & {\n terminate: () => Promise<number>;\n};\n\nasync function createIndexerWorker(\n store: Store,\n dynamicDsService: IDynamicDsService<EthereumProjectDs>,\n unfinalizedBlocksService: IUnfinalizedBlocksService<BlockContent>,\n connectionPoolState: ConnectionPoolStateManager<EthereumApiConnection>,\n root: string,\n startHeight: number,\n): Promise<IndexerWorker> {\n const indexerWorker = Worker.create<\n IInitIndexerWorker,\n HostDynamicDS<EthereumProjectDs> & HostStore & HostUnfinalizedBlocks\n >(\n path.resolve(__dirname, '../../../dist/indexer/worker/worker.js'),\n [...baseWorkerFunctions, 'initWorker'],\n {\n ...storeHostFunctions(store),\n ...dynamicDsHostFunctions(dynamicDsService),\n unfinalizedBlocksProcess:\n unfinalizedBlocksService.processUnfinalizedBlockHeader.bind(\n unfinalizedBlocksService,\n ),\n ...connectionPoolStateHostFunctions(connectionPoolState),\n },\n root,\n );\n\n await indexerWorker.initWorker(startHeight);\n\n return indexerWorker;\n}\n\n@Injectable()\nexport class WorkerBlockDispatcherService\n extends WorkerBlockDispatcher<EthereumProjectDs, IndexerWorker>\n implements OnApplicationShutdown\n{\n constructor(\n nodeConfig: NodeConfig,\n eventEmitter: EventEmitter2,\n @Inject('IProjectService')\n projectService: IProjectService<EthereumProjectDs>,\n @Inject('IProjectUpgradeService')\n projectUpgadeService: IProjectUpgradeService,\n smartBatchService: SmartBatchService,\n storeService: StoreService,\n storeCacheService: StoreCacheService,\n poiService: PoiService,\n @Inject('ISubqueryProject') project: SubqueryProject,\n dynamicDsService: DynamicDsService,\n unfinalizedBlocksSevice: UnfinalizedBlocksService,\n connectionPoolState: ConnectionPoolStateManager<EthereumApiConnection>,\n ) {\n super(\n nodeConfig,\n eventEmitter,\n projectService,\n projectUpgadeService,\n smartBatchService,\n storeService,\n storeCacheService,\n poiService,\n project,\n dynamicDsService,\n () =>\n createIndexerWorker(\n storeService.getStore(),\n dynamicDsService,\n unfinalizedBlocksSevice,\n connectionPoolState,\n project.root,\n projectService.startHeight,\n ),\n );\n }\n\n protected async fetchBlock(\n worker: IndexerWorker,\n height: number,\n ): Promise<void> {\n const start = new Date();\n await worker.fetchBlock(height, null);\n const end = new Date();\n\n // const waitTime = end.getTime() - start.getTime();\n // if (waitTime > 1000) {\n // logger.info(\n // `Waiting to fetch block ${height}: ${chalk.red(`${waitTime}ms`)}`,\n // );\n // } else if (waitTime > 200) {\n // logger.info(\n // `Waiting to fetch block ${height}: ${chalk.yellow(`${waitTime}ms`)}`,\n // );\n // }\n }\n}\n"]}
@@ -1,9 +1,9 @@
1
- import { OnApplicationShutdown } from '@nestjs/common';
1
+ import { EventEmitter2 } from '@nestjs/event-emitter';
2
2
  import { NodeConfig, DictionaryService as CoreDictionaryService } from '@subql/node-core';
3
3
  import { SubqueryProject } from '../configure/SubqueryProject';
4
- export declare class DictionaryService extends CoreDictionaryService implements OnApplicationShutdown {
4
+ export declare class DictionaryService extends CoreDictionaryService {
5
5
  protected project: SubqueryProject;
6
6
  private constructor();
7
- static create(project: SubqueryProject, nodeConfig: NodeConfig): Promise<DictionaryService>;
7
+ static create(project: SubqueryProject, nodeConfig: NodeConfig, eventEmitter: EventEmitter2): Promise<DictionaryService>;
8
8
  private static getEvmChainId;
9
9
  }
@@ -20,24 +20,25 @@ var DictionaryService_1;
20
20
  Object.defineProperty(exports, "__esModule", { value: true });
21
21
  exports.DictionaryService = void 0;
22
22
  const common_1 = require("@nestjs/common");
23
+ const event_emitter_1 = require("@nestjs/event-emitter");
23
24
  const node_core_1 = require("@subql/node-core");
24
25
  const json5_1 = __importDefault(require("json5"));
25
26
  const node_fetch_1 = __importDefault(require("node-fetch"));
26
27
  const SubqueryProject_1 = require("../configure/SubqueryProject");
27
28
  const CHAIN_ALIASES_URL = 'https://raw.githubusercontent.com/subquery/templates/main/chainAliases.json5';
28
29
  let DictionaryService = DictionaryService_1 = class DictionaryService extends node_core_1.DictionaryService {
29
- constructor(project, nodeConfig, chainId) {
30
- super(project.network.dictionary, chainId !== null && chainId !== void 0 ? chainId : project.network.chainId, nodeConfig);
30
+ constructor(project, nodeConfig, eventEmitter, chainId) {
31
+ super(project.network.dictionary, chainId !== null && chainId !== void 0 ? chainId : project.network.chainId, nodeConfig, eventEmitter);
31
32
  this.project = project;
32
33
  }
33
- static async create(project, nodeConfig) {
34
+ static async create(project, nodeConfig, eventEmitter) {
34
35
  /*Some dictionarys for EVM are built with other SDKs as they are chains with an EVM runtime
35
36
  * we maintain a list of aliases so we can map the evmChainId to the genesis hash of the other SDKs
36
37
  * e.g moonbeam is built with Substrate SDK but can be used as an EVM dictionary
37
38
  */
38
39
  const chainAliases = await this.getEvmChainId();
39
40
  const chainAlias = chainAliases[project.network.chainId];
40
- return new DictionaryService_1(project, nodeConfig, chainAlias);
41
+ return new DictionaryService_1(project, nodeConfig, eventEmitter, chainAlias);
41
42
  }
42
43
  static async getEvmChainId() {
43
44
  const response = await (0, node_fetch_1.default)(CHAIN_ALIASES_URL);
@@ -50,7 +51,8 @@ DictionaryService = DictionaryService_1 = __decorate([
50
51
  (0, common_1.Injectable)(),
51
52
  __param(0, (0, common_1.Inject)('ISubqueryProject')),
52
53
  __metadata("design:paramtypes", [SubqueryProject_1.SubqueryProject,
53
- node_core_1.NodeConfig, String])
54
+ node_core_1.NodeConfig,
55
+ event_emitter_1.EventEmitter2, String])
54
56
  ], DictionaryService);
55
57
  exports.DictionaryService = DictionaryService;
56
58
  //# sourceMappingURL=dictionary.service.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"dictionary.service.js","sourceRoot":"","sources":["../../src/indexer/dictionary.service.ts"],"names":[],"mappings":";AAAA,8DAA8D;AAC9D,mCAAmC;;;;;;;;;;;;;;;;;;;AAEnC,2CAA2E;AAC3E,gDAG0B;AAC1B,kDAA0B;AAC1B,4DAA+B;AAC/B,kEAA+D;AAE/D,MAAM,iBAAiB,GACrB,8EAA8E,CAAC;AAG1E,IAAM,iBAAiB,yBAAvB,MAAM,iBACX,SAAQ,6BAAqB;IAG7B,YACwC,OAAwB,EAC9D,UAAsB,EACtB,OAAgB;QAEhB,KAAK,CACH,OAAO,CAAC,OAAO,CAAC,UAAU,EAC1B,OAAO,aAAP,OAAO,cAAP,OAAO,GAAI,OAAO,CAAC,OAAO,CAAC,OAAO,EAClC,UAAU,CACX,CAAC;QARoC,YAAO,GAAP,OAAO,CAAiB;IAShE,CAAC;IAED,MAAM,CAAC,KAAK,CAAC,MAAM,CACjB,OAAwB,EACxB,UAAsB;QAEtB;;;WAGG;QACH,MAAM,YAAY,GAAG,MAAM,IAAI,CAAC,aAAa,EAAE,CAAC;QAChD,MAAM,UAAU,GAAG,YAAY,CAAC,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;QAEzD,OAAO,IAAI,mBAAiB,CAAC,OAAO,EAAE,UAAU,EAAE,UAAU,CAAC,CAAC;IAChE,CAAC;IAEO,MAAM,CAAC,KAAK,CAAC,aAAa;QAChC,MAAM,QAAQ,GAAG,MAAM,IAAA,oBAAK,EAAC,iBAAiB,CAAC,CAAC;QAEhD,MAAM,GAAG,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;QAClC,wDAAwD;QACxD,OAAO,eAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAC1B,CAAC;CACF,CAAA;AArCY,iBAAiB;IAD7B,IAAA,mBAAU,GAAE;IAMR,WAAA,IAAA,eAAM,EAAC,kBAAkB,CAAC,CAAA;qCAAoB,iCAAe;QAClD,sBAAU;GANb,iBAAiB,CAqC7B;AArCY,8CAAiB","sourcesContent":["// Copyright 2020-2023 SubQuery Pte Ltd authors & contributors\n// SPDX-License-Identifier: GPL-3.0\n\nimport { Inject, Injectable, OnApplicationShutdown } from '@nestjs/common';\nimport {\n NodeConfig,\n DictionaryService as CoreDictionaryService,\n} from '@subql/node-core';\nimport JSON5 from 'json5';\nimport fetch from 'node-fetch';\nimport { SubqueryProject } from '../configure/SubqueryProject';\n\nconst CHAIN_ALIASES_URL =\n 'https://raw.githubusercontent.com/subquery/templates/main/chainAliases.json5';\n\n@Injectable()\nexport class DictionaryService\n extends CoreDictionaryService\n implements OnApplicationShutdown\n{\n private constructor(\n @Inject('ISubqueryProject') protected project: SubqueryProject,\n nodeConfig: NodeConfig,\n chainId?: string,\n ) {\n super(\n project.network.dictionary,\n chainId ?? project.network.chainId,\n nodeConfig,\n );\n }\n\n static async create(\n project: SubqueryProject,\n nodeConfig: NodeConfig,\n ): Promise<DictionaryService> {\n /*Some dictionarys for EVM are built with other SDKs as they are chains with an EVM runtime\n * we maintain a list of aliases so we can map the evmChainId to the genesis hash of the other SDKs\n * e.g moonbeam is built with Substrate SDK but can be used as an EVM dictionary\n */\n const chainAliases = await this.getEvmChainId();\n const chainAlias = chainAliases[project.network.chainId];\n\n return new DictionaryService(project, nodeConfig, chainAlias);\n }\n\n private static async getEvmChainId(): Promise<Record<string, string>> {\n const response = await fetch(CHAIN_ALIASES_URL);\n\n const raw = await response.text();\n // We use JSON5 here because the file has comments in it\n return JSON5.parse(raw);\n }\n}\n"]}
1
+ {"version":3,"file":"dictionary.service.js","sourceRoot":"","sources":["../../src/indexer/dictionary.service.ts"],"names":[],"mappings":";AAAA,8DAA8D;AAC9D,mCAAmC;;;;;;;;;;;;;;;;;;;AAEnC,2CAAoD;AACpD,yDAAsD;AACtD,gDAG0B;AAC1B,kDAA0B;AAC1B,4DAA+B;AAC/B,kEAA+D;AAE/D,MAAM,iBAAiB,GACrB,8EAA8E,CAAC;AAG1E,IAAM,iBAAiB,yBAAvB,MAAM,iBAAkB,SAAQ,6BAAqB;IAC1D,YACwC,OAAwB,EAC9D,UAAsB,EACtB,YAA2B,EAC3B,OAAgB;QAEhB,KAAK,CACH,OAAO,CAAC,OAAO,CAAC,UAAU,EAC1B,OAAO,aAAP,OAAO,cAAP,OAAO,GAAI,OAAO,CAAC,OAAO,CAAC,OAAO,EAClC,UAAU,EACV,YAAY,CACb,CAAC;QAVoC,YAAO,GAAP,OAAO,CAAiB;IAWhE,CAAC;IAED,MAAM,CAAC,KAAK,CAAC,MAAM,CACjB,OAAwB,EACxB,UAAsB,EACtB,YAA2B;QAE3B;;;WAGG;QACH,MAAM,YAAY,GAAG,MAAM,IAAI,CAAC,aAAa,EAAE,CAAC;QAChD,MAAM,UAAU,GAAG,YAAY,CAAC,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;QAEzD,OAAO,IAAI,mBAAiB,CAAC,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,UAAU,CAAC,CAAC;IAC9E,CAAC;IAEO,MAAM,CAAC,KAAK,CAAC,aAAa;QAChC,MAAM,QAAQ,GAAG,MAAM,IAAA,oBAAK,EAAC,iBAAiB,CAAC,CAAC;QAEhD,MAAM,GAAG,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;QAClC,wDAAwD;QACxD,OAAO,eAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAC1B,CAAC;CACF,CAAA;AArCY,iBAAiB;IAD7B,IAAA,mBAAU,GAAE;IAGR,WAAA,IAAA,eAAM,EAAC,kBAAkB,CAAC,CAAA;qCAAoB,iCAAe;QAClD,sBAAU;QACR,6BAAa;GAJlB,iBAAiB,CAqC7B;AArCY,8CAAiB","sourcesContent":["// Copyright 2020-2023 SubQuery Pte Ltd authors & contributors\n// SPDX-License-Identifier: GPL-3.0\n\nimport { Inject, Injectable } from '@nestjs/common';\nimport { EventEmitter2 } from '@nestjs/event-emitter';\nimport {\n NodeConfig,\n DictionaryService as CoreDictionaryService,\n} from '@subql/node-core';\nimport JSON5 from 'json5';\nimport fetch from 'node-fetch';\nimport { SubqueryProject } from '../configure/SubqueryProject';\n\nconst CHAIN_ALIASES_URL =\n 'https://raw.githubusercontent.com/subquery/templates/main/chainAliases.json5';\n\n@Injectable()\nexport class DictionaryService extends CoreDictionaryService {\n private constructor(\n @Inject('ISubqueryProject') protected project: SubqueryProject,\n nodeConfig: NodeConfig,\n eventEmitter: EventEmitter2,\n chainId?: string,\n ) {\n super(\n project.network.dictionary,\n chainId ?? project.network.chainId,\n nodeConfig,\n eventEmitter,\n );\n }\n\n static async create(\n project: SubqueryProject,\n nodeConfig: NodeConfig,\n eventEmitter: EventEmitter2,\n ): Promise<DictionaryService> {\n /*Some dictionarys for EVM are built with other SDKs as they are chains with an EVM runtime\n * we maintain a list of aliases so we can map the evmChainId to the genesis hash of the other SDKs\n * e.g moonbeam is built with Substrate SDK but can be used as an EVM dictionary\n */\n const chainAliases = await this.getEvmChainId();\n const chainAlias = chainAliases[project.network.chainId];\n\n return new DictionaryService(project, nodeConfig, eventEmitter, chainAlias);\n }\n\n private static async getEvmChainId(): Promise<Record<string, string>> {\n const response = await fetch(CHAIN_ALIASES_URL);\n\n const raw = await response.text();\n // We use JSON5 here because the file has comments in it\n return JSON5.parse(raw);\n }\n}\n"]}
@@ -1,9 +1,9 @@
1
1
  import { DatasourceParams, DynamicDsService as BaseDynamicDsService } from '@subql/node-core';
2
- import { SubqlProjectDs, SubqueryProject } from '../configure/SubqueryProject';
2
+ import { EthereumProjectDs, SubqueryProject } from '../configure/SubqueryProject';
3
3
  import { DsProcessorService } from './ds-processor.service';
4
- export declare class DynamicDsService extends BaseDynamicDsService<SubqlProjectDs> {
4
+ export declare class DynamicDsService extends BaseDynamicDsService<EthereumProjectDs> {
5
5
  private readonly dsProcessorService;
6
6
  private readonly project;
7
7
  constructor(dsProcessorService: DsProcessorService, project: SubqueryProject);
8
- protected getDatasource(params: DatasourceParams): Promise<SubqlProjectDs>;
8
+ protected getDatasource(params: DatasourceParams): Promise<EthereumProjectDs>;
9
9
  }
@@ -1 +1 @@
1
- {"version":3,"file":"dynamic-ds.service.js","sourceRoot":"","sources":["../../src/indexer/dynamic-ds.service.ts"],"names":[],"mappings":";AAAA,8DAA8D;AAC9D,mCAAmC;;;;;;;;;;;;;;;AAEnC,2CAAoD;AACpD,4DAIgC;AAChC,gDAG0B;AAC1B,yDAAiD;AACjD,qDAA+C;AAC/C,mCAAmC;AACnC,kEAA+E;AAC/E,iEAA4D;AAGrD,IAAM,gBAAgB,GAAtB,MAAM,gBAAiB,SAAQ,4BAAoC;IACxE,YACmB,kBAAsC,EACV,OAAwB;QAErE,KAAK,EAAE,CAAC;QAHS,uBAAkB,GAAlB,kBAAkB,CAAoB;QACV,YAAO,GAAP,OAAO,CAAiB;IAGvE,CAAC;IAES,KAAK,CAAC,aAAa,CAC3B,MAAwB;;QAExB,MAAM,QAAQ,GAAG,IAAA,kBAAS,EACxB,MAAA,IAAI,CAAC,OAAO,CAAC,SAAS,0CAAE,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,MAAM,CAAC,YAAY,CAAC,CACpE,CAAC;QAEF,IAAI,CAAC,QAAQ,EAAE;YACb,MAAM,IAAI,KAAK,CACb,0DAA0D,MAAM,CAAC,YAAY,GAAG,CACjF,CAAC;SACH;QAED,MAAM,KAAK,GAAG,gCACT,QAAQ,KACX,UAAU,EAAE,MAAM,CAAC,UAAU,GACZ,CAAC;QACpB,IAAI;YACF,IAAI,IAAA,4BAAU,EAAC,KAAK,CAAC,EAAE;gBACrB,KAAK,CAAC,SAAS,CAAC,OAAO,mCAClB,KAAK,CAAC,SAAS,CAAC,OAAO,GACvB,MAAM,CAAC,IAAI,CACf,CAAC;gBACF,MAAM,IAAI,CAAC,kBAAkB,CAAC,gBAAgB,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;aACzD;iBAAM,IAAI,IAAA,6BAAW,EAAC,KAAK,CAAC,EAAE;gBAC7B,KAAK,CAAC,OAAO,mCACR,KAAK,CAAC,OAAO,GACb,MAAM,CAAC,IAAI,CACf,CAAC;gBAEF,MAAM,QAAQ,GAAG,IAAA,gCAAY,EAAC,+CAA6B,EAAE,KAAK,CAAC,CAAC;gBAEpE,MAAM,MAAM,GAAG,IAAA,8BAAY,EAAC,QAAQ,EAAE;oBACpC,SAAS,EAAE,IAAI;oBACf,oBAAoB,EAAE,KAAK;iBAC5B,CAAC,CAAC;gBACH,IAAI,MAAM,CAAC,MAAM,EAAE;oBACjB,MAAM,IAAI,KAAK,CACb,0BAA0B,MAAM;yBAC7B,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC;yBACxB,IAAI,CAAC,IAAI,CAAC,EAAE,CAChB,CAAC;iBACH;aACF;YACD,OAAO,KAAK,CAAC;SACd;QAAC,OAAO,CAAC,EAAE;YACV,MAAM,IAAI,KAAK,CAAC,0CAA0C,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC;SACxE;IACH,CAAC;CACF,CAAA;AAzDY,gBAAgB;IAD5B,IAAA,mBAAU,GAAE;IAIR,WAAA,IAAA,eAAM,EAAC,kBAAkB,CAAC,CAAA;qCADU,yCAAkB;QACD,iCAAe;GAH5D,gBAAgB,CAyD5B;AAzDY,4CAAgB","sourcesContent":["// Copyright 2020-2023 SubQuery Pte Ltd authors & contributors\n// SPDX-License-Identifier: GPL-3.0\n\nimport { Inject, Injectable } from '@nestjs/common';\nimport {\n EthereumRuntimeDataSourceImpl,\n isCustomDs,\n isRuntimeDs,\n} from '@subql/common-ethereum';\nimport {\n DatasourceParams,\n DynamicDsService as BaseDynamicDsService,\n} from '@subql/node-core';\nimport { plainToClass } from 'class-transformer';\nimport { validateSync } from 'class-validator';\nimport { cloneDeep } from 'lodash';\nimport { SubqlProjectDs, SubqueryProject } from '../configure/SubqueryProject';\nimport { DsProcessorService } from './ds-processor.service';\n\n@Injectable()\nexport class DynamicDsService extends BaseDynamicDsService<SubqlProjectDs> {\n constructor(\n private readonly dsProcessorService: DsProcessorService,\n @Inject('ISubqueryProject') private readonly project: SubqueryProject,\n ) {\n super();\n }\n\n protected async getDatasource(\n params: DatasourceParams,\n ): Promise<SubqlProjectDs> {\n const template = cloneDeep(\n this.project.templates?.find((t) => t.name === params.templateName),\n );\n\n if (!template) {\n throw new Error(\n `Unable to find matching template in project for name: \"${params.templateName}\"`,\n );\n }\n\n const dsObj = {\n ...template,\n startBlock: params.startBlock,\n } as SubqlProjectDs;\n try {\n if (isCustomDs(dsObj)) {\n dsObj.processor.options = {\n ...dsObj.processor.options,\n ...params.args,\n };\n await this.dsProcessorService.validateCustomDs([dsObj]);\n } else if (isRuntimeDs(dsObj)) {\n dsObj.options = {\n ...dsObj.options,\n ...params.args,\n };\n\n const parsedDs = plainToClass(EthereumRuntimeDataSourceImpl, dsObj);\n\n const errors = validateSync(parsedDs, {\n whitelist: true,\n forbidNonWhitelisted: false,\n });\n if (errors.length) {\n throw new Error(\n `Dynamic ds is invalid\\n${errors\n .map((e) => e.toString())\n .join('\\n')}`,\n );\n }\n }\n return dsObj;\n } catch (e) {\n throw new Error(`Unable to create dynamic datasource.\\n ${e.message}`);\n }\n }\n}\n"]}
1
+ {"version":3,"file":"dynamic-ds.service.js","sourceRoot":"","sources":["../../src/indexer/dynamic-ds.service.ts"],"names":[],"mappings":";AAAA,8DAA8D;AAC9D,mCAAmC;;;;;;;;;;;;;;;AAEnC,2CAAoD;AACpD,4DAIgC;AAChC,gDAG0B;AAC1B,yDAAiD;AACjD,qDAA+C;AAC/C,mCAAmC;AACnC,kEAGsC;AACtC,iEAA4D;AAGrD,IAAM,gBAAgB,GAAtB,MAAM,gBAAiB,SAAQ,4BAAuC;IAC3E,YACmB,kBAAsC,EACV,OAAwB;QAErE,KAAK,EAAE,CAAC;QAHS,uBAAkB,GAAlB,kBAAkB,CAAoB;QACV,YAAO,GAAP,OAAO,CAAiB;IAGvE,CAAC;IAES,KAAK,CAAC,aAAa,CAC3B,MAAwB;;QAExB,MAAM,QAAQ,GAAG,IAAA,kBAAS,EACxB,MAAA,IAAI,CAAC,OAAO,CAAC,SAAS,0CAAE,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,MAAM,CAAC,YAAY,CAAC,CACpE,CAAC;QAEF,IAAI,CAAC,QAAQ,EAAE;YACb,MAAM,IAAI,KAAK,CACb,0DAA0D,MAAM,CAAC,YAAY,GAAG,CACjF,CAAC;SACH;QAED,MAAM,KAAK,GAAG,gCACT,QAAQ,KACX,UAAU,EAAE,MAAM,CAAC,UAAU,GACT,CAAC;QACvB,IAAI;YACF,IAAI,IAAA,4BAAU,EAAC,KAAK,CAAC,EAAE;gBACrB,KAAK,CAAC,SAAS,CAAC,OAAO,mCAClB,KAAK,CAAC,SAAS,CAAC,OAAO,GACvB,MAAM,CAAC,IAAI,CACf,CAAC;gBACF,MAAM,IAAI,CAAC,kBAAkB,CAAC,gBAAgB,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;aACzD;iBAAM,IAAI,IAAA,6BAAW,EAAC,KAAK,CAAC,EAAE;gBAC7B,KAAK,CAAC,OAAO,mCACR,KAAK,CAAC,OAAO,GACb,MAAM,CAAC,IAAI,CACf,CAAC;gBAEF,MAAM,QAAQ,GAAG,IAAA,gCAAY,EAAC,+CAA6B,EAAE,KAAK,CAAC,CAAC;gBAEpE,MAAM,MAAM,GAAG,IAAA,8BAAY,EAAC,QAAQ,EAAE;oBACpC,SAAS,EAAE,IAAI;oBACf,oBAAoB,EAAE,KAAK;iBAC5B,CAAC,CAAC;gBACH,IAAI,MAAM,CAAC,MAAM,EAAE;oBACjB,MAAM,IAAI,KAAK,CACb,0BAA0B,MAAM;yBAC7B,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC;yBACxB,IAAI,CAAC,IAAI,CAAC,EAAE,CAChB,CAAC;iBACH;aACF;YACD,OAAO,KAAK,CAAC;SACd;QAAC,OAAO,CAAC,EAAE;YACV,MAAM,IAAI,KAAK,CAAC,0CAA0C,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC;SACxE;IACH,CAAC;CACF,CAAA;AAzDY,gBAAgB;IAD5B,IAAA,mBAAU,GAAE;IAIR,WAAA,IAAA,eAAM,EAAC,kBAAkB,CAAC,CAAA;qCADU,yCAAkB;QACD,iCAAe;GAH5D,gBAAgB,CAyD5B;AAzDY,4CAAgB","sourcesContent":["// Copyright 2020-2023 SubQuery Pte Ltd authors & contributors\n// SPDX-License-Identifier: GPL-3.0\n\nimport { Inject, Injectable } from '@nestjs/common';\nimport {\n EthereumRuntimeDataSourceImpl,\n isCustomDs,\n isRuntimeDs,\n} from '@subql/common-ethereum';\nimport {\n DatasourceParams,\n DynamicDsService as BaseDynamicDsService,\n} from '@subql/node-core';\nimport { plainToClass } from 'class-transformer';\nimport { validateSync } from 'class-validator';\nimport { cloneDeep } from 'lodash';\nimport {\n EthereumProjectDs,\n SubqueryProject,\n} from '../configure/SubqueryProject';\nimport { DsProcessorService } from './ds-processor.service';\n\n@Injectable()\nexport class DynamicDsService extends BaseDynamicDsService<EthereumProjectDs> {\n constructor(\n private readonly dsProcessorService: DsProcessorService,\n @Inject('ISubqueryProject') private readonly project: SubqueryProject,\n ) {\n super();\n }\n\n protected async getDatasource(\n params: DatasourceParams,\n ): Promise<EthereumProjectDs> {\n const template = cloneDeep(\n this.project.templates?.find((t) => t.name === params.templateName),\n );\n\n if (!template) {\n throw new Error(\n `Unable to find matching template in project for name: \"${params.templateName}\"`,\n );\n }\n\n const dsObj = {\n ...template,\n startBlock: params.startBlock,\n } as EthereumProjectDs;\n try {\n if (isCustomDs(dsObj)) {\n dsObj.processor.options = {\n ...dsObj.processor.options,\n ...params.args,\n };\n await this.dsProcessorService.validateCustomDs([dsObj]);\n } else if (isRuntimeDs(dsObj)) {\n dsObj.options = {\n ...dsObj.options,\n ...params.args,\n };\n\n const parsedDs = plainToClass(EthereumRuntimeDataSourceImpl, dsObj);\n\n const errors = validateSync(parsedDs, {\n whitelist: true,\n forbidNonWhitelisted: false,\n });\n if (errors.length) {\n throw new Error(\n `Dynamic ds is invalid\\n${errors\n .map((e) => e.toString())\n .join('\\n')}`,\n );\n }\n }\n return dsObj;\n } catch (e) {\n throw new Error(`Unable to create dynamic datasource.\\n ${e.message}`);\n }\n }\n}\n"]}
@@ -62,13 +62,14 @@ FetchModule = __decorate([
62
62
  },
63
63
  {
64
64
  provide: 'IBlockDispatcher',
65
- useFactory: (nodeConfig, eventEmitter, projectService, apiService, indexerManager, smartBatchService, storeService, storeCacheService, poiService, project, dynamicDsService, unfinalizedBlocks, connectionPoolState) => nodeConfig.workers !== undefined
66
- ? new blockDispatcher_1.WorkerBlockDispatcherService(nodeConfig, eventEmitter, projectService, smartBatchService, storeService, storeCacheService, poiService, project, dynamicDsService, unfinalizedBlocks, connectionPoolState)
67
- : new blockDispatcher_1.BlockDispatcherService(apiService, nodeConfig, indexerManager, eventEmitter, projectService, smartBatchService, storeService, storeCacheService, poiService, project, dynamicDsService),
65
+ useFactory: (nodeConfig, eventEmitter, projectService, projectUpgradeService, apiService, indexerManager, smartBatchService, storeService, storeCacheService, poiService, project, dynamicDsService, unfinalizedBlocks, connectionPoolState) => nodeConfig.workers !== undefined
66
+ ? new blockDispatcher_1.WorkerBlockDispatcherService(nodeConfig, eventEmitter, projectService, projectUpgradeService, smartBatchService, storeService, storeCacheService, poiService, project, dynamicDsService, unfinalizedBlocks, connectionPoolState)
67
+ : new blockDispatcher_1.BlockDispatcherService(apiService, nodeConfig, indexerManager, eventEmitter, projectService, projectUpgradeService, smartBatchService, storeService, storeCacheService, poiService, project, dynamicDsService),
68
68
  inject: [
69
69
  node_core_1.NodeConfig,
70
70
  event_emitter_1.EventEmitter2,
71
71
  'IProjectService',
72
+ 'IProjectUpgradeService',
72
73
  node_core_1.ApiService,
73
74
  indexer_manager_1.IndexerManager,
74
75
  node_core_1.SmartBatchService,
@@ -87,26 +88,23 @@ FetchModule = __decorate([
87
88
  node_core_1.PoiBenchmarkService,
88
89
  {
89
90
  provide: dictionary_service_1.DictionaryService,
90
- useFactory: async (project, nodeConfig) => {
91
- const dictionaryService = await dictionary_service_1.DictionaryService.create(project, nodeConfig);
91
+ useFactory: async (project, nodeConfig, eventEmitter) => {
92
+ const dictionaryService = await dictionary_service_1.DictionaryService.create(project, nodeConfig, eventEmitter);
92
93
  return dictionaryService;
93
94
  },
94
- inject: ['ISubqueryProject', node_core_1.NodeConfig],
95
+ inject: ['ISubqueryProject', node_core_1.NodeConfig, event_emitter_1.EventEmitter2],
95
96
  },
96
97
  sandbox_service_1.SandboxService,
97
98
  ds_processor_service_1.DsProcessorService,
98
99
  dynamic_ds_service_1.DynamicDsService,
99
100
  node_core_1.PoiService,
100
- node_core_1.MmrService,
101
- node_core_1.MmrQueryService,
102
- node_core_1.PgMmrCacheService,
103
101
  {
104
102
  useClass: project_service_1.ProjectService,
105
103
  provide: 'IProjectService',
106
104
  },
107
105
  unfinalizedBlocks_service_1.UnfinalizedBlocksService,
108
106
  ],
109
- exports: [node_core_1.StoreService, node_core_1.MmrService, node_core_1.StoreCacheService, node_core_1.MmrQueryService],
107
+ exports: [node_core_1.StoreService, node_core_1.StoreCacheService],
110
108
  })
111
109
  ], FetchModule);
112
110
  exports.FetchModule = FetchModule;
@@ -1 +1 @@
1
- {"version":3,"file":"fetch.module.js","sourceRoot":"","sources":["../../src/indexer/fetch.module.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 { Module } from '@nestjs/common';\nimport { EventEmitter2 } from '@nestjs/event-emitter';\nimport {\n PoiBenchmarkService,\n IndexingBenchmarkService,\n MmrService,\n StoreService,\n PoiService,\n ApiService,\n NodeConfig,\n ConnectionPoolService,\n ConnectionPoolStateManager,\n SmartBatchService,\n StoreCacheService,\n PgMmrCacheService,\n MmrQueryService,\n} from '@subql/node-core';\nimport { SubqueryProject } from '../configure/SubqueryProject';\nimport { EthereumApiConnection } from '../ethereum/api.connection';\nimport { EthereumApiService } from '../ethereum/api.service.ethereum';\nimport {\n BlockDispatcherService,\n WorkerBlockDispatcherService,\n} from './blockDispatcher';\nimport { DictionaryService } from './dictionary.service';\nimport { DsProcessorService } from './ds-processor.service';\nimport { DynamicDsService } from './dynamic-ds.service';\nimport { FetchService } from './fetch.service';\nimport { IndexerManager } from './indexer.manager';\nimport { ProjectService } from './project.service';\nimport { SandboxService } from './sandbox.service';\nimport { UnfinalizedBlocksService } from './unfinalizedBlocks.service';\n\n@Module({\n providers: [\n StoreService,\n StoreCacheService,\n {\n provide: ApiService,\n useFactory: async (\n project: SubqueryProject,\n connectionPoolService: ConnectionPoolService<EthereumApiConnection>,\n eventEmitter: EventEmitter2,\n nodeConfig: NodeConfig,\n ) => {\n const apiService = new EthereumApiService(\n project,\n connectionPoolService,\n eventEmitter,\n nodeConfig,\n );\n await apiService.init();\n return apiService;\n },\n inject: [\n 'ISubqueryProject',\n ConnectionPoolService,\n EventEmitter2,\n NodeConfig,\n ],\n },\n IndexerManager,\n ConnectionPoolStateManager,\n ConnectionPoolService,\n {\n provide: SmartBatchService,\n useFactory: (nodeConfig: NodeConfig) => {\n return new SmartBatchService(nodeConfig.batchSize);\n },\n inject: [NodeConfig],\n },\n {\n provide: SmartBatchService,\n useFactory: (nodeConfig: NodeConfig) => {\n return new SmartBatchService(nodeConfig.batchSize);\n },\n inject: [NodeConfig],\n },\n {\n provide: 'IBlockDispatcher',\n useFactory: (\n nodeConfig: NodeConfig,\n eventEmitter: EventEmitter2,\n projectService: ProjectService,\n apiService: EthereumApiService,\n indexerManager: IndexerManager,\n smartBatchService: SmartBatchService,\n storeService: StoreService,\n storeCacheService: StoreCacheService,\n poiService: PoiService,\n project: SubqueryProject,\n dynamicDsService: DynamicDsService,\n unfinalizedBlocks: UnfinalizedBlocksService,\n connectionPoolState: ConnectionPoolStateManager<EthereumApiConnection>,\n ) =>\n nodeConfig.workers !== undefined\n ? new WorkerBlockDispatcherService(\n nodeConfig,\n eventEmitter,\n projectService,\n smartBatchService,\n storeService,\n storeCacheService,\n poiService,\n project,\n dynamicDsService,\n unfinalizedBlocks,\n connectionPoolState,\n )\n : new BlockDispatcherService(\n apiService,\n nodeConfig,\n indexerManager,\n eventEmitter,\n projectService,\n smartBatchService,\n storeService,\n storeCacheService,\n poiService,\n project,\n dynamicDsService,\n ),\n inject: [\n NodeConfig,\n EventEmitter2,\n 'IProjectService',\n ApiService,\n IndexerManager,\n SmartBatchService,\n StoreService,\n StoreCacheService,\n PoiService,\n 'ISubqueryProject',\n DynamicDsService,\n UnfinalizedBlocksService,\n ConnectionPoolStateManager,\n ],\n },\n FetchService,\n ConnectionPoolService,\n IndexingBenchmarkService,\n PoiBenchmarkService,\n {\n provide: DictionaryService,\n useFactory: async (project: SubqueryProject, nodeConfig: NodeConfig) => {\n const dictionaryService = await DictionaryService.create(\n project,\n nodeConfig,\n );\n return dictionaryService;\n },\n inject: ['ISubqueryProject', NodeConfig],\n },\n SandboxService,\n DsProcessorService,\n DynamicDsService,\n PoiService,\n MmrService,\n MmrQueryService,\n PgMmrCacheService,\n {\n useClass: ProjectService,\n provide: 'IProjectService',\n },\n UnfinalizedBlocksService,\n ],\n exports: [StoreService, MmrService, StoreCacheService, MmrQueryService],\n})\nexport class FetchModule {}\n"]}
1
+ {"version":3,"file":"fetch.module.js","sourceRoot":"","sources":["../../src/indexer/fetch.module.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 { Module } from '@nestjs/common';\nimport { EventEmitter2 } from '@nestjs/event-emitter';\nimport {\n PoiBenchmarkService,\n IndexingBenchmarkService,\n StoreService,\n PoiService,\n ApiService,\n NodeConfig,\n ConnectionPoolService,\n ConnectionPoolStateManager,\n SmartBatchService,\n StoreCacheService,\n IProjectUpgradeService,\n} from '@subql/node-core';\nimport { SubqueryProject } from '../configure/SubqueryProject';\nimport { EthereumApiConnection } from '../ethereum/api.connection';\nimport { EthereumApiService } from '../ethereum/api.service.ethereum';\nimport {\n BlockDispatcherService,\n WorkerBlockDispatcherService,\n} from './blockDispatcher';\nimport { DictionaryService } from './dictionary.service';\nimport { DsProcessorService } from './ds-processor.service';\nimport { DynamicDsService } from './dynamic-ds.service';\nimport { FetchService } from './fetch.service';\nimport { IndexerManager } from './indexer.manager';\nimport { ProjectService } from './project.service';\nimport { SandboxService } from './sandbox.service';\nimport { UnfinalizedBlocksService } from './unfinalizedBlocks.service';\n\n@Module({\n providers: [\n StoreService,\n StoreCacheService,\n {\n provide: ApiService,\n useFactory: async (\n project: SubqueryProject,\n connectionPoolService: ConnectionPoolService<EthereumApiConnection>,\n eventEmitter: EventEmitter2,\n nodeConfig: NodeConfig,\n ) => {\n const apiService = new EthereumApiService(\n project,\n connectionPoolService,\n eventEmitter,\n nodeConfig,\n );\n await apiService.init();\n return apiService;\n },\n inject: [\n 'ISubqueryProject',\n ConnectionPoolService,\n EventEmitter2,\n NodeConfig,\n ],\n },\n IndexerManager,\n ConnectionPoolStateManager,\n ConnectionPoolService,\n {\n provide: SmartBatchService,\n useFactory: (nodeConfig: NodeConfig) => {\n return new SmartBatchService(nodeConfig.batchSize);\n },\n inject: [NodeConfig],\n },\n {\n provide: SmartBatchService,\n useFactory: (nodeConfig: NodeConfig) => {\n return new SmartBatchService(nodeConfig.batchSize);\n },\n inject: [NodeConfig],\n },\n {\n provide: 'IBlockDispatcher',\n useFactory: (\n nodeConfig: NodeConfig,\n eventEmitter: EventEmitter2,\n projectService: ProjectService,\n projectUpgradeService: IProjectUpgradeService,\n apiService: EthereumApiService,\n indexerManager: IndexerManager,\n smartBatchService: SmartBatchService,\n storeService: StoreService,\n storeCacheService: StoreCacheService,\n poiService: PoiService,\n project: SubqueryProject,\n dynamicDsService: DynamicDsService,\n unfinalizedBlocks: UnfinalizedBlocksService,\n connectionPoolState: ConnectionPoolStateManager<EthereumApiConnection>,\n ) =>\n nodeConfig.workers !== undefined\n ? new WorkerBlockDispatcherService(\n nodeConfig,\n eventEmitter,\n projectService,\n projectUpgradeService,\n smartBatchService,\n storeService,\n storeCacheService,\n poiService,\n project,\n dynamicDsService,\n unfinalizedBlocks,\n connectionPoolState,\n )\n : new BlockDispatcherService(\n apiService,\n nodeConfig,\n indexerManager,\n eventEmitter,\n projectService,\n projectUpgradeService,\n smartBatchService,\n storeService,\n storeCacheService,\n poiService,\n project,\n dynamicDsService,\n ),\n inject: [\n NodeConfig,\n EventEmitter2,\n 'IProjectService',\n 'IProjectUpgradeService',\n ApiService,\n IndexerManager,\n SmartBatchService,\n StoreService,\n StoreCacheService,\n PoiService,\n 'ISubqueryProject',\n DynamicDsService,\n UnfinalizedBlocksService,\n ConnectionPoolStateManager,\n ],\n },\n FetchService,\n ConnectionPoolService,\n IndexingBenchmarkService,\n PoiBenchmarkService,\n {\n provide: DictionaryService,\n useFactory: async (\n project: SubqueryProject,\n nodeConfig: NodeConfig,\n eventEmitter: EventEmitter2,\n ) => {\n const dictionaryService = await DictionaryService.create(\n project,\n nodeConfig,\n eventEmitter,\n );\n return dictionaryService;\n },\n inject: ['ISubqueryProject', NodeConfig, EventEmitter2],\n },\n SandboxService,\n DsProcessorService,\n DynamicDsService,\n PoiService,\n {\n useClass: ProjectService,\n provide: 'IProjectService',\n },\n UnfinalizedBlocksService,\n ],\n exports: [StoreService, StoreCacheService],\n})\nexport class FetchModule {}\n"]}
@@ -2,32 +2,32 @@ import { EventEmitter2 } from '@nestjs/event-emitter';
2
2
  import { SchedulerRegistry } from '@nestjs/schedule';
3
3
  import { SubqlEthereumProcessorOptions } from '@subql/common-ethereum';
4
4
  import { NodeConfig, BaseFetchService, ApiService } from '@subql/node-core';
5
- import { DictionaryQueryEntry } from '@subql/types';
5
+ import { DictionaryQueryEntry } from '@subql/types-core';
6
6
  import { SubqlDatasource } from '@subql/types-ethereum';
7
- import { MetaData } from '@subql/utils';
8
7
  import { SubqueryProject } from '../configure/SubqueryProject';
9
8
  import { EthereumApi } from '../ethereum';
10
9
  import { IEthereumBlockDispatcher } from './blockDispatcher';
11
10
  import { DictionaryService } from './dictionary.service';
12
- import { DsProcessorService } from './ds-processor.service';
13
11
  import { DynamicDsService } from './dynamic-ds.service';
12
+ import { ProjectService } from './project.service';
14
13
  import { UnfinalizedBlocksService } from './unfinalizedBlocks.service';
15
- type GroupedSubqlProjectDs = SubqlDatasource & {
14
+ type GroupedEthereumProjectDs = SubqlDatasource & {
16
15
  groupedOptions?: SubqlEthereumProcessorOptions[];
17
16
  };
18
- export declare function buildDictionaryQueryEntries(dataSources: GroupedSubqlProjectDs[], startBlock: number): DictionaryQueryEntry[];
19
- export declare class FetchService extends BaseFetchService<ApiService, SubqlDatasource, IEthereumBlockDispatcher, DictionaryService> {
17
+ export declare function buildDictionaryQueryEntries(dataSources: GroupedEthereumProjectDs[]): DictionaryQueryEntry[];
18
+ export declare class FetchService extends BaseFetchService<SubqlDatasource, IEthereumBlockDispatcher, DictionaryService> {
19
+ private apiService;
20
20
  private unfinalizedBlocksService;
21
- constructor(apiService: ApiService, nodeConfig: NodeConfig, project: SubqueryProject, blockDispatcher: IEthereumBlockDispatcher, dictionaryService: DictionaryService, dsProcessorService: DsProcessorService, dynamicDsService: DynamicDsService, unfinalizedBlocksService: UnfinalizedBlocksService, eventEmitter: EventEmitter2, schedulerRegistry: SchedulerRegistry);
21
+ constructor(apiService: ApiService, nodeConfig: NodeConfig, projectService: ProjectService, project: SubqueryProject, blockDispatcher: IEthereumBlockDispatcher, dictionaryService: DictionaryService, dynamicDsService: DynamicDsService, unfinalizedBlocksService: UnfinalizedBlocksService, eventEmitter: EventEmitter2, schedulerRegistry: SchedulerRegistry);
22
22
  get api(): EthereumApi;
23
- buildDictionaryQueryEntries(startBlock: number): DictionaryQueryEntry[];
23
+ protected buildDictionaryQueryEntries(dataSources: (SubqlDatasource & {
24
+ name?: string;
25
+ })[]): DictionaryQueryEntry[];
24
26
  protected getFinalizedHeight(): Promise<number>;
25
27
  protected getBestHeight(): Promise<number>;
26
28
  protected getChainInterval(): Promise<number>;
27
- protected getChainId(): Promise<string>;
28
29
  protected getModulos(): number[];
29
30
  protected initBlockDispatcher(): Promise<void>;
30
- protected validatateDictionaryMeta(metaData: MetaData): Promise<boolean>;
31
31
  protected preLoopHook(): Promise<void>;
32
32
  }
33
33
  export {};
@@ -26,8 +26,8 @@ const utils_ethereum_1 = require("../ethereum/utils.ethereum");
26
26
  const string_1 = require("../utils/string");
27
27
  const yargs_1 = require("../yargs");
28
28
  const dictionary_service_1 = require("./dictionary.service");
29
- const ds_processor_service_1 = require("./ds-processor.service");
30
29
  const dynamic_ds_service_1 = require("./dynamic-ds.service");
30
+ const project_service_1 = require("./project.service");
31
31
  const unfinalizedBlocks_service_1 = require("./unfinalizedBlocks.service");
32
32
  const logger = (0, node_core_1.getLogger)('fetch.service');
33
33
  const BLOCK_TIME_VARIANCE = 5000;
@@ -135,15 +135,10 @@ function callFilterToQueryEntry(filter, dsOptions) {
135
135
  conditions,
136
136
  };
137
137
  }
138
- function buildDictionaryQueryEntries(dataSources, startBlock) {
138
+ function buildDictionaryQueryEntries(dataSources) {
139
139
  var _a;
140
140
  const queryEntries = [];
141
- // Only run the ds that is equal or less than startBlock
142
- // sort array from lowest ds.startBlock to highest
143
- const filteredDs = dataSources
144
- .filter((ds) => ds.startBlock <= startBlock)
145
- .sort((a, b) => a.startBlock - b.startBlock);
146
- for (const ds of filteredDs) {
141
+ for (const ds of dataSources) {
147
142
  for (const handler of ds.mapping.handlers) {
148
143
  // No filters, cant use dictionary
149
144
  if (!handler.filter)
@@ -184,23 +179,29 @@ function buildDictionaryQueryEntries(dataSources, startBlock) {
184
179
  }
185
180
  exports.buildDictionaryQueryEntries = buildDictionaryQueryEntries;
186
181
  let FetchService = class FetchService extends node_core_1.BaseFetchService {
187
- constructor(apiService, nodeConfig, project, blockDispatcher, dictionaryService, dsProcessorService, dynamicDsService, unfinalizedBlocksService, eventEmitter, schedulerRegistry) {
188
- super(apiService, nodeConfig, project, blockDispatcher, dictionaryService, dsProcessorService, dynamicDsService, eventEmitter, schedulerRegistry);
182
+ constructor(apiService, nodeConfig, projectService, project, blockDispatcher, dictionaryService, dynamicDsService, unfinalizedBlocksService, eventEmitter, schedulerRegistry) {
183
+ super(nodeConfig, projectService, project.network, blockDispatcher, dictionaryService, dynamicDsService, eventEmitter, schedulerRegistry);
184
+ this.apiService = apiService;
189
185
  this.unfinalizedBlocksService = unfinalizedBlocksService;
190
186
  }
191
187
  get api() {
192
188
  return this.apiService.unsafeApi;
193
189
  }
194
- buildDictionaryQueryEntries(startBlock) {
195
- const groupdDynamicDs = Object.values((0, lodash_1.groupBy)(this.templateDynamicDatasouces, (ds) => ds.name)).map((grouped) => {
190
+ buildDictionaryQueryEntries(
191
+ // Add name to dataousrces as templates have this set
192
+ dataSources) {
193
+ const [normalDataSources, templateDataSources] = (0, lodash_1.partition)(dataSources, (ds) => !ds.name);
194
+ // Group templ
195
+ const groupedDataSources = Object.values((0, lodash_1.groupBy)(templateDataSources, (ds) => ds.name)).map((grouped) => {
196
+ if (grouped.length === 1) {
197
+ return grouped[0];
198
+ }
196
199
  const options = grouped.map((ds) => ds.options);
197
200
  const ref = grouped[0];
198
201
  return Object.assign(Object.assign({}, ref), { groupedOptions: options });
199
202
  });
200
- // Only run the ds that is equal or less than startBlock
201
- // sort array from lowest ds.startBlock to highest
202
- const filteredDs = this.project.dataSources.concat(groupdDynamicDs);
203
- return buildDictionaryQueryEntries(filteredDs, startBlock);
203
+ const filteredDs = [...normalDataSources, ...groupedDataSources];
204
+ return buildDictionaryQueryEntries(filteredDs);
204
205
  }
205
206
  async getFinalizedHeight() {
206
207
  const block = await this.api.getFinalizedBlock();
@@ -216,35 +217,12 @@ let FetchService = class FetchService extends node_core_1.BaseFetchService {
216
217
  const CHAIN_INTERVAL = (0, utils_ethereum_1.calcInterval)(this.api) * INTERVAL_PERCENT;
217
218
  return Math.min(BLOCK_TIME_VARIANCE, CHAIN_INTERVAL);
218
219
  }
219
- async getChainId() {
220
- return Promise.resolve(this.api.getChainId().toString());
221
- }
222
220
  getModulos() {
223
- const modulos = [];
224
- for (const ds of this.project.dataSources) {
225
- if ((0, common_ethereum_1.isCustomDs)(ds)) {
226
- continue;
227
- }
228
- for (const handler of ds.mapping.handlers) {
229
- if (handler.kind === common_ethereum_1.EthereumHandlerKind.Block &&
230
- handler.filter &&
231
- handler.filter.modulo) {
232
- modulos.push(handler.filter.modulo);
233
- }
234
- }
235
- }
236
- return modulos;
221
+ return (0, node_core_1.getModulos)(this.projectService.getAllDataSources(), common_ethereum_1.isCustomDs, common_ethereum_1.EthereumHandlerKind.Block);
237
222
  }
238
223
  async initBlockDispatcher() {
239
224
  await this.blockDispatcher.init(this.resetForNewDs.bind(this));
240
225
  }
241
- async validatateDictionaryMeta(metaData) {
242
- return Promise.resolve(
243
- // When alias is not used
244
- metaData.genesisHash !== this.api.getGenesisHash() &&
245
- // Case when an alias is used
246
- metaData.genesisHash !== this.dictionaryService.chainId);
247
- }
248
226
  async preLoopHook() {
249
227
  // Ethereum doesn't need to do anything here
250
228
  return Promise.resolve();
@@ -252,12 +230,13 @@ let FetchService = class FetchService extends node_core_1.BaseFetchService {
252
230
  };
253
231
  FetchService = __decorate([
254
232
  (0, common_1.Injectable)(),
255
- __param(2, (0, common_1.Inject)('ISubqueryProject')),
256
- __param(3, (0, common_1.Inject)('IBlockDispatcher')),
233
+ __param(2, (0, common_1.Inject)('IProjectService')),
234
+ __param(3, (0, common_1.Inject)('ISubqueryProject')),
235
+ __param(4, (0, common_1.Inject)('IBlockDispatcher')),
257
236
  __metadata("design:paramtypes", [node_core_1.ApiService,
258
237
  node_core_1.NodeConfig,
238
+ project_service_1.ProjectService,
259
239
  SubqueryProject_1.SubqueryProject, Object, dictionary_service_1.DictionaryService,
260
- ds_processor_service_1.DsProcessorService,
261
240
  dynamic_ds_service_1.DynamicDsService,
262
241
  unfinalizedBlocks_service_1.UnfinalizedBlocksService,
263
242
  event_emitter_1.EventEmitter2,