@subql/node-algorand 3.14.4 → 3.15.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 (35) hide show
  1. package/CHANGELOG.md +10 -1
  2. package/dist/.tsbuildinfo +1 -1
  3. package/dist/algorand/algorand.spec.js +5 -2
  4. package/dist/algorand/algorand.spec.js.map +1 -1
  5. package/dist/algorand/api.service.algorand.d.ts +2 -2
  6. package/dist/algorand/api.service.algorand.js +7 -5
  7. package/dist/algorand/api.service.algorand.js.map +1 -1
  8. package/dist/indexer/api.service.spec.js +5 -2
  9. package/dist/indexer/api.service.spec.js.map +1 -1
  10. package/dist/indexer/blockDispatcher/block-dispatcher.service.d.ts +2 -2
  11. package/dist/indexer/blockDispatcher/block-dispatcher.service.js +4 -5
  12. package/dist/indexer/blockDispatcher/block-dispatcher.service.js.map +1 -1
  13. package/dist/indexer/blockDispatcher/worker-block-dispatcher.service.d.ts +4 -3
  14. package/dist/indexer/blockDispatcher/worker-block-dispatcher.service.js +5 -6
  15. package/dist/indexer/blockDispatcher/worker-block-dispatcher.service.js.map +1 -1
  16. package/dist/indexer/fetch.module.js +5 -9
  17. package/dist/indexer/fetch.module.js.map +1 -1
  18. package/dist/indexer/fetch.service.d.ts +2 -2
  19. package/dist/indexer/fetch.service.js +4 -4
  20. package/dist/indexer/fetch.service.js.map +1 -1
  21. package/dist/indexer/unfinalizedBlocks.service.d.ts +3 -3
  22. package/dist/indexer/unfinalizedBlocks.service.js +7 -4
  23. package/dist/indexer/unfinalizedBlocks.service.js.map +1 -1
  24. package/dist/indexer/worker/worker-fetch.module.js +1 -5
  25. package/dist/indexer/worker/worker-fetch.module.js.map +1 -1
  26. package/dist/indexer/worker/worker.service.d.ts +3 -7
  27. package/dist/indexer/worker/worker.service.js +1 -3
  28. package/dist/indexer/worker/worker.service.js.map +1 -1
  29. package/dist/subcommands/reindex.module.js +6 -1
  30. package/dist/subcommands/reindex.module.js.map +1 -1
  31. package/dist/subcommands/testing.module.js +11 -2
  32. package/dist/subcommands/testing.module.js.map +1 -1
  33. package/dist/subcommands/testing.service.js +0 -1
  34. package/dist/subcommands/testing.service.js.map +1 -1
  35. package/package.json +4 -4
@@ -37,14 +37,17 @@ const prepareApiService = async (endpoint = mainnetEndpoint, chainId = mainnetCh
37
37
  node_core_1.NodeConfig,
38
38
  node_core_1.ConnectionPoolStateManager,
39
39
  node_core_1.ConnectionPoolService,
40
- algorand_1.AlgorandApiService,
40
+ {
41
+ provide: algorand_1.AlgorandApiService,
42
+ useFactory: algorand_1.AlgorandApiService.init,
43
+ inject: ['ISubqueryProject', node_core_1.ConnectionPoolService, event_emitter_1.EventEmitter2],
44
+ },
41
45
  ],
42
46
  imports: [event_emitter_1.EventEmitterModule.forRoot()],
43
47
  }).compile();
44
48
  const app = module.createNestApplication();
45
49
  await app.init();
46
50
  const apiService = app.get(algorand_1.AlgorandApiService);
47
- await apiService.init();
48
51
  return [app, apiService];
49
52
  };
50
53
  exports.prepareApiService = prepareApiService;
@@ -1 +1 @@
1
- {"version":3,"file":"algorand.spec.js","sourceRoot":"","sources":["../../src/algorand/algorand.spec.ts"],"names":[],"mappings":"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","sourcesContent":["// Copyright 2020-2024 SubQuery Pte Ltd authors & contributors\n// SPDX-License-Identifier: GPL-3.0\n\nimport { INestApplication } from '@nestjs/common';\nimport { EventEmitterModule } from '@nestjs/event-emitter';\nimport { Test } from '@nestjs/testing';\nimport {\n ApiService,\n ConnectionPoolService,\n ConnectionPoolStateManager,\n NodeConfig,\n} from '@subql/node-core';\nimport { GraphQLSchema } from 'graphql';\nimport { AlgorandApiService, filterTransaction } from '../algorand';\nimport { SubqueryProject } from '../configure/SubqueryProject';\n\nconst mainnetEndpoint = 'https://mainnet-idx.algonode.cloud/';\nconst testnetEndpoint = 'https://testnet-idx.algonode.cloud';\n\nconst mainnetChainId = 'wGHE2Pwdvd7S12BL5FaOP20EGYesN73ktiC1qzkkit8=';\nconst testnetChainId = 'SGO1GKSzyE7IEPItTxCByw9x8FmnrCDexi9/cOUJOiI=';\n\nfunction testSubqueryProject(endpoint: string, chainId): SubqueryProject {\n return {\n network: {\n chainId,\n endpoint: [endpoint],\n dictionary: `https://api.subquery.network/sq/subquery/Algorand-Dictionary`,\n },\n dataSources: [],\n id: 'test',\n root: './',\n schema: new GraphQLSchema({}),\n templates: [],\n } as any;\n}\n\n// eslint-disable-next-line jest/no-export\nexport const prepareApiService = async (\n endpoint: string = mainnetEndpoint,\n chainId: string = mainnetChainId,\n): Promise<[INestApplication, AlgorandApiService]> => {\n const module = await Test.createTestingModule({\n providers: [\n {\n provide: 'ISubqueryProject',\n useFactory: () => testSubqueryProject(endpoint, chainId),\n },\n NodeConfig,\n ConnectionPoolStateManager,\n ConnectionPoolService,\n AlgorandApiService,\n ],\n imports: [EventEmitterModule.forRoot()],\n }).compile();\n\n const app = module.createNestApplication();\n await app.init();\n const apiService = app.get(AlgorandApiService);\n await apiService.init();\n return [app, apiService];\n};\n\njest.setTimeout(90000);\ndescribe('Algorand RPC', () => {\n let app: INestApplication;\n let apiService: ApiService;\n\n afterEach(() => {\n return app?.close();\n });\n\n it('Can filter acfg with sender', () => {\n const tx = {\n assetConfigTransaction: {\n assetId: 0,\n params: {\n clawback:\n '7JMGBIDKQRR4MC3DNC73QU4QUNNN43VNY5RYPN2FRWEG6NXAHQMCPD4BIQ',\n creator: '7JMGBIDKQRR4MC3DNC73QU4QUNNN43VNY5RYPN2FRWEG6NXAHQMCPD4BIQ',\n decimals: 0,\n defaultFrozen: false,\n freeze: '7JMGBIDKQRR4MC3DNC73QU4QUNNN43VNY5RYPN2FRWEG6NXAHQMCPD4BIQ',\n manager: '7JMGBIDKQRR4MC3DNC73QU4QUNNN43VNY5RYPN2FRWEG6NXAHQMCPD4BIQ',\n name: 'flowTest.algo',\n nameB64: 'Zmxvd1Rlc3QuYWxnbw==',\n reserve: '7JMGBIDKQRR4MC3DNC73QU4QUNNN43VNY5RYPN2FRWEG6NXAHQMCPD4BIQ',\n total: 1,\n unitName: 'xAns',\n unitNameB64: 'eEFucw==',\n url: 'https://xgov.app',\n urlB64: 'aHR0cHM6Ly94Z292LmFwcA==',\n },\n },\n closeRewards: 0,\n closingAmount: 0,\n confirmedRound: 27081666,\n createdAssetIndex: 154583116,\n fee: 1000,\n firstValid: 27081664,\n genesisHash: 'SGO1GKSzyE7IEPItTxCByw9x8FmnrCDexi9/cOUJOiI=',\n genesisId: 'testnet-v1.0',\n id: '5CUFVHAA7XZFZDRXO5J2Q26O6O4KB6DHSOB54P5LO3S57S2JF5NA',\n intraRoundOffset: 12,\n lastValid: 27082664,\n receiverRewards: 0,\n roundTime: 1674020229,\n sender: '7JMGBIDKQRR4MC3DNC73QU4QUNNN43VNY5RYPN2FRWEG6NXAHQMCPD4BIQ',\n senderRewards: 0,\n signature: {\n sig: 'rawhKc26WQe98vKweozDOJmH32c60fI83ddi5kwXg2BYu8EJCh0V3dlzRkOcY/4C3Gh7Bkzi12Yte9EejE1QBw==',\n },\n txType: 'acfg',\n };\n\n expect(\n filterTransaction(tx as any, {\n txType: 'acfg',\n sender: '7JMGBIDKQRR4MC3DNC73QU4QUNNN43VNY5RYPN2FRWEG6NXAHQMCPD4BIQ',\n }),\n ).toBe(true);\n });\n\n // This is failing since switching from algo explorer api. This is due to a node configuration limit\n it('paginate large blocks', async () => {\n [app, apiService] = await prepareApiService(\n testnetEndpoint,\n testnetChainId,\n );\n const failingBlock = 27739202; // testnet\n const api = apiService.api;\n\n const paginateSpy = jest.spyOn(api, 'paginatedTransactions');\n const result = await api.getBlockByHeight(failingBlock);\n expect(paginateSpy).toHaveBeenCalledTimes(3);\n expect(result.transactions.length).toEqual(13916);\n });\n\n it('can stringify blocks and transactions with circular references', async () => {\n [app, apiService] = await prepareApiService();\n\n const block = await apiService.api.getBlockByHeight(30478896);\n\n // The circular ref\n expect(block.transactions[13].block).toBeDefined();\n\n // We can stringify the objects\n expect(() => JSON.stringify(block)).not.toThrow();\n expect(() => JSON.stringify(block.transactions[13])).not.toThrow();\n\n expect(JSON.parse(JSON.stringify(block)).round).toEqual(block.round);\n });\n\n it('can get the grouped transactions within a block', async () => {\n [app, apiService] = await prepareApiService();\n\n const block = await apiService.api.getBlockByHeight(30478896);\n\n const groupTx = block.getTransactionsByGroup(block.transactions[13].group);\n\n expect(groupTx.length).toEqual(3);\n });\n});\n"]}
1
+ {"version":3,"file":"algorand.spec.js","sourceRoot":"","sources":["../../src/algorand/algorand.spec.ts"],"names":[],"mappings":"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","sourcesContent":["// Copyright 2020-2024 SubQuery Pte Ltd authors & contributors\n// SPDX-License-Identifier: GPL-3.0\n\nimport { INestApplication } from '@nestjs/common';\nimport { EventEmitter2, EventEmitterModule } from '@nestjs/event-emitter';\nimport { Test } from '@nestjs/testing';\nimport {\n ApiService,\n ConnectionPoolService,\n ConnectionPoolStateManager,\n NodeConfig,\n} from '@subql/node-core';\nimport { GraphQLSchema } from 'graphql';\nimport { AlgorandApiService, filterTransaction } from '../algorand';\nimport { SubqueryProject } from '../configure/SubqueryProject';\n\nconst mainnetEndpoint = 'https://mainnet-idx.algonode.cloud/';\nconst testnetEndpoint = 'https://testnet-idx.algonode.cloud';\n\nconst mainnetChainId = 'wGHE2Pwdvd7S12BL5FaOP20EGYesN73ktiC1qzkkit8=';\nconst testnetChainId = 'SGO1GKSzyE7IEPItTxCByw9x8FmnrCDexi9/cOUJOiI=';\n\nfunction testSubqueryProject(endpoint: string, chainId): SubqueryProject {\n return {\n network: {\n chainId,\n endpoint: [endpoint],\n dictionary: `https://api.subquery.network/sq/subquery/Algorand-Dictionary`,\n },\n dataSources: [],\n id: 'test',\n root: './',\n schema: new GraphQLSchema({}),\n templates: [],\n } as any;\n}\n\n// eslint-disable-next-line jest/no-export\nexport const prepareApiService = async (\n endpoint: string = mainnetEndpoint,\n chainId: string = mainnetChainId,\n): Promise<[INestApplication, AlgorandApiService]> => {\n const module = await Test.createTestingModule({\n providers: [\n {\n provide: 'ISubqueryProject',\n useFactory: () => testSubqueryProject(endpoint, chainId),\n },\n NodeConfig,\n ConnectionPoolStateManager,\n ConnectionPoolService,\n {\n provide: AlgorandApiService,\n useFactory: AlgorandApiService.init,\n inject: ['ISubqueryProject', ConnectionPoolService, EventEmitter2],\n },\n ],\n imports: [EventEmitterModule.forRoot()],\n }).compile();\n\n const app = module.createNestApplication();\n await app.init();\n const apiService = app.get(AlgorandApiService);\n\n return [app, apiService];\n};\n\njest.setTimeout(90000);\ndescribe('Algorand RPC', () => {\n let app: INestApplication;\n let apiService: ApiService;\n\n afterEach(() => {\n return app?.close();\n });\n\n it('Can filter acfg with sender', () => {\n const tx = {\n assetConfigTransaction: {\n assetId: 0,\n params: {\n clawback:\n '7JMGBIDKQRR4MC3DNC73QU4QUNNN43VNY5RYPN2FRWEG6NXAHQMCPD4BIQ',\n creator: '7JMGBIDKQRR4MC3DNC73QU4QUNNN43VNY5RYPN2FRWEG6NXAHQMCPD4BIQ',\n decimals: 0,\n defaultFrozen: false,\n freeze: '7JMGBIDKQRR4MC3DNC73QU4QUNNN43VNY5RYPN2FRWEG6NXAHQMCPD4BIQ',\n manager: '7JMGBIDKQRR4MC3DNC73QU4QUNNN43VNY5RYPN2FRWEG6NXAHQMCPD4BIQ',\n name: 'flowTest.algo',\n nameB64: 'Zmxvd1Rlc3QuYWxnbw==',\n reserve: '7JMGBIDKQRR4MC3DNC73QU4QUNNN43VNY5RYPN2FRWEG6NXAHQMCPD4BIQ',\n total: 1,\n unitName: 'xAns',\n unitNameB64: 'eEFucw==',\n url: 'https://xgov.app',\n urlB64: 'aHR0cHM6Ly94Z292LmFwcA==',\n },\n },\n closeRewards: 0,\n closingAmount: 0,\n confirmedRound: 27081666,\n createdAssetIndex: 154583116,\n fee: 1000,\n firstValid: 27081664,\n genesisHash: 'SGO1GKSzyE7IEPItTxCByw9x8FmnrCDexi9/cOUJOiI=',\n genesisId: 'testnet-v1.0',\n id: '5CUFVHAA7XZFZDRXO5J2Q26O6O4KB6DHSOB54P5LO3S57S2JF5NA',\n intraRoundOffset: 12,\n lastValid: 27082664,\n receiverRewards: 0,\n roundTime: 1674020229,\n sender: '7JMGBIDKQRR4MC3DNC73QU4QUNNN43VNY5RYPN2FRWEG6NXAHQMCPD4BIQ',\n senderRewards: 0,\n signature: {\n sig: 'rawhKc26WQe98vKweozDOJmH32c60fI83ddi5kwXg2BYu8EJCh0V3dlzRkOcY/4C3Gh7Bkzi12Yte9EejE1QBw==',\n },\n txType: 'acfg',\n };\n\n expect(\n filterTransaction(tx as any, {\n txType: 'acfg',\n sender: '7JMGBIDKQRR4MC3DNC73QU4QUNNN43VNY5RYPN2FRWEG6NXAHQMCPD4BIQ',\n }),\n ).toBe(true);\n });\n\n // This is failing since switching from algo explorer api. This is due to a node configuration limit\n it('paginate large blocks', async () => {\n [app, apiService] = await prepareApiService(\n testnetEndpoint,\n testnetChainId,\n );\n const failingBlock = 27739202; // testnet\n const api = apiService.api;\n\n const paginateSpy = jest.spyOn(api, 'paginatedTransactions');\n const result = await api.getBlockByHeight(failingBlock);\n expect(paginateSpy).toHaveBeenCalledTimes(3);\n expect(result.transactions.length).toEqual(13916);\n });\n\n it('can stringify blocks and transactions with circular references', async () => {\n [app, apiService] = await prepareApiService();\n\n const block = await apiService.api.getBlockByHeight(30478896);\n\n // The circular ref\n expect(block.transactions[13].block).toBeDefined();\n\n // We can stringify the objects\n expect(() => JSON.stringify(block)).not.toThrow();\n expect(() => JSON.stringify(block.transactions[13])).not.toThrow();\n\n expect(JSON.parse(JSON.stringify(block)).round).toEqual(block.round);\n });\n\n it('can get the grouped transactions within a block', async () => {\n [app, apiService] = await prepareApiService();\n\n const block = await apiService.api.getBlockByHeight(30478896);\n\n const groupTx = block.getTransactionsByGroup(block.transactions[13].group);\n\n expect(groupTx.length).toEqual(3);\n });\n});\n"]}
@@ -7,8 +7,8 @@ import { AlgorandApi, SafeAPIService } from './api.algorand';
7
7
  import { AlgorandApiConnection } from './api.connection';
8
8
  export declare class AlgorandApiService extends ApiService<AlgorandApi, SafeAPIService, IBlock<BlockContent>[]> {
9
9
  private project;
10
- constructor(project: SubqueryProject, connectionPoolService: ConnectionPoolService<AlgorandApiConnection>, eventEmitter: EventEmitter2);
11
- init(): Promise<AlgorandApiService>;
10
+ private constructor();
11
+ static init(project: SubqueryProject, connectionPoolService: ConnectionPoolService<AlgorandApiConnection>, eventEmitter: EventEmitter2): Promise<AlgorandApiService>;
12
12
  get api(): AlgorandApi;
13
13
  fetchBlockBatches(api: AlgorandApi, blocks: number[]): Promise<IBlock<BlockContent>[]>;
14
14
  protected assertChainId(network: ProjectNetworkConfig & {
@@ -13,6 +13,7 @@ var __metadata = (this && this.__metadata) || function (k, v) {
13
13
  var __param = (this && this.__param) || function (paramIndex, decorator) {
14
14
  return function (target, key) { decorator(target, key, paramIndex); }
15
15
  };
16
+ var AlgorandApiService_1;
16
17
  Object.defineProperty(exports, "__esModule", { value: true });
17
18
  exports.AlgorandApiService = void 0;
18
19
  const common_1 = require("@nestjs/common");
@@ -20,20 +21,21 @@ const event_emitter_1 = require("@nestjs/event-emitter");
20
21
  const node_core_1 = require("@subql/node-core");
21
22
  const api_connection_1 = require("./api.connection");
22
23
  const logger = (0, node_core_1.getLogger)('api');
23
- let AlgorandApiService = class AlgorandApiService extends node_core_1.ApiService {
24
+ let AlgorandApiService = AlgorandApiService_1 = class AlgorandApiService extends node_core_1.ApiService {
24
25
  project;
25
26
  constructor(project, connectionPoolService, eventEmitter) {
26
27
  super(connectionPoolService, eventEmitter);
27
28
  this.project = project;
28
29
  }
29
- async init() {
30
+ static async init(project, connectionPoolService, eventEmitter) {
31
+ const apiService = new AlgorandApiService_1(project, connectionPoolService, eventEmitter);
30
32
  try {
31
- await this.createConnections(this.project.network, (endpoint, config) => api_connection_1.AlgorandApiConnection.create(endpoint, config, this.fetchBlockBatches));
33
+ await apiService.createConnections(apiService.project.network, (endpoint, config) => api_connection_1.AlgorandApiConnection.create(endpoint, config, apiService.fetchBlockBatches));
32
34
  }
33
35
  catch (e) {
34
36
  (0, node_core_1.exitWithError)(new Error(`Failed to init api`, { cause: e }), logger);
35
37
  }
36
- return this;
38
+ return apiService;
37
39
  }
38
40
  get api() {
39
41
  return this.unsafeApi;
@@ -47,7 +49,7 @@ let AlgorandApiService = class AlgorandApiService extends node_core_1.ApiService
47
49
  }
48
50
  }
49
51
  };
50
- AlgorandApiService = __decorate([
52
+ AlgorandApiService = AlgorandApiService_1 = __decorate([
51
53
  (0, common_1.Injectable)(),
52
54
  __param(0, (0, common_1.Inject)('ISubqueryProject')),
53
55
  __metadata("design:paramtypes", [Object, node_core_1.ConnectionPoolService,
@@ -1 +1 @@
1
- {"version":3,"file":"api.service.algorand.js","sourceRoot":"","sources":["../../src/algorand/api.service.algorand.ts"],"names":[],"mappings":";AAAA,8DAA8D;AAC9D,mCAAmC;;;;;;;;;;;;;;;AAEnC,2CAAoD;AACpD,yDAAsD;AACtD,gDAO0B;AAK1B,qDAAyD;AAEzD,MAAM,MAAM,GAAG,IAAA,qBAAS,EAAC,KAAK,CAAC,CAAC;AAGzB,IAAM,kBAAkB,GAAxB,MAAM,kBAAmB,SAAQ,sBAIvC;IAEuC;IADtC,YACsC,OAAwB,EAC5D,qBAAmE,EACnE,YAA2B;QAE3B,KAAK,CAAC,qBAAqB,EAAE,YAAY,CAAC,CAAC;QAJP,YAAO,GAAP,OAAO,CAAiB;IAK9D,CAAC;IAED,KAAK,CAAC,IAAI;QACR,IAAI;YACF,MAAM,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,EAAE,CACtE,sCAAqB,CAAC,MAAM,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,CAAC,iBAAiB,CAAC,CACvE,CAAC;SACH;QAAC,OAAO,CAAC,EAAE;YACV,IAAA,yBAAa,EAAC,IAAI,KAAK,CAAC,oBAAoB,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,EAAE,MAAM,CAAC,CAAC;SACtE;QAED,OAAO,IAAI,CAAC;IACd,CAAC;IAED,IAAI,GAAG;QACL,OAAO,IAAI,CAAC,SAAS,CAAC;IACxB,CAAC;IAED,KAAK,CAAC,iBAAiB,CACrB,GAAgB,EAChB,MAAgB;QAEhB,OAAO,GAAG,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;IACjC,CAAC;IAES,aAAa,CACrB,OAAmD,EACnD,UAAiC;QAEjC,IAAI,OAAO,CAAC,OAAO,KAAK,UAAU,CAAC,WAAW,CAAC,WAAW,EAAE;YAC1D,MAAM,IAAI,iCAAqB,CAC7B,SAAS,EACT,OAAO,CAAC,OAAO,EACf,UAAU,CAAC,WAAW,CAAC,WAAW,CACnC,CAAC;SACH;IACH,CAAC;CACF,CAAA;AAhDY,kBAAkB;IAD9B,IAAA,mBAAU,GAAE;IAOR,WAAA,IAAA,eAAM,EAAC,kBAAkB,CAAC,CAAA;6CACJ,iCAAqB;QAC9B,6BAAa;GARlB,kBAAkB,CAgD9B;AAhDY,gDAAkB","sourcesContent":["// Copyright 2020-2024 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 ApiService,\n ConnectionPoolService,\n getLogger,\n IBlock,\n MetadataMismatchError,\n exitWithError,\n} from '@subql/node-core';\nimport { ProjectNetworkConfig } from '@subql/types-core';\nimport { SubqueryProject } from '../configure/SubqueryProject';\nimport { BlockContent } from '../indexer/types';\nimport { AlgorandApi, SafeAPIService } from './api.algorand';\nimport { AlgorandApiConnection } from './api.connection';\n\nconst logger = getLogger('api');\n\n@Injectable()\nexport class AlgorandApiService extends ApiService<\n AlgorandApi,\n SafeAPIService,\n IBlock<BlockContent>[]\n> {\n constructor(\n @Inject('ISubqueryProject') private project: SubqueryProject,\n connectionPoolService: ConnectionPoolService<AlgorandApiConnection>,\n eventEmitter: EventEmitter2,\n ) {\n super(connectionPoolService, eventEmitter);\n }\n\n async init(): Promise<AlgorandApiService> {\n try {\n await this.createConnections(this.project.network, (endpoint, config) =>\n AlgorandApiConnection.create(endpoint, config, this.fetchBlockBatches),\n );\n } catch (e) {\n exitWithError(new Error(`Failed to init api`, { cause: e }), logger);\n }\n\n return this;\n }\n\n get api(): AlgorandApi {\n return this.unsafeApi;\n }\n\n async fetchBlockBatches(\n api: AlgorandApi,\n blocks: number[],\n ): Promise<IBlock<BlockContent>[]> {\n return api.fetchBlocks(blocks);\n }\n\n protected assertChainId(\n network: ProjectNetworkConfig & { chainId: string },\n connection: AlgorandApiConnection,\n ): void {\n if (network.chainId !== connection.networkMeta.genesisHash) {\n throw new MetadataMismatchError(\n 'ChainId',\n network.chainId,\n connection.networkMeta.genesisHash,\n );\n }\n }\n}\n"]}
1
+ {"version":3,"file":"api.service.algorand.js","sourceRoot":"","sources":["../../src/algorand/api.service.algorand.ts"],"names":[],"mappings":";AAAA,8DAA8D;AAC9D,mCAAmC;;;;;;;;;;;;;;;;AAEnC,2CAAoD;AACpD,yDAAsD;AACtD,gDAO0B;AAK1B,qDAAyD;AAEzD,MAAM,MAAM,GAAG,IAAA,qBAAS,EAAC,KAAK,CAAC,CAAC;AAGzB,IAAM,kBAAkB,0BAAxB,MAAM,kBAAmB,SAAQ,sBAIvC;IAEuC;IADtC,YACsC,OAAwB,EAC5D,qBAAmE,EACnE,YAA2B;QAE3B,KAAK,CAAC,qBAAqB,EAAE,YAAY,CAAC,CAAC;QAJP,YAAO,GAAP,OAAO,CAAiB;IAK9D,CAAC;IAED,MAAM,CAAC,KAAK,CAAC,IAAI,CACf,OAAwB,EACxB,qBAAmE,EACnE,YAA2B;QAE3B,MAAM,UAAU,GAAG,IAAI,oBAAkB,CACvC,OAAO,EACP,qBAAqB,EACrB,YAAY,CACb,CAAC;QACF,IAAI;YACF,MAAM,UAAU,CAAC,iBAAiB,CAChC,UAAU,CAAC,OAAO,CAAC,OAAO,EAC1B,CAAC,QAAQ,EAAE,MAAM,EAAE,EAAE,CACnB,sCAAqB,CAAC,MAAM,CAC1B,QAAQ,EACR,MAAM,EACN,UAAU,CAAC,iBAAiB,CAC7B,CACJ,CAAC;SACH;QAAC,OAAO,CAAC,EAAE;YACV,IAAA,yBAAa,EAAC,IAAI,KAAK,CAAC,oBAAoB,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,EAAE,MAAM,CAAC,CAAC;SACtE;QAED,OAAO,UAAU,CAAC;IACpB,CAAC;IAED,IAAI,GAAG;QACL,OAAO,IAAI,CAAC,SAAS,CAAC;IACxB,CAAC;IAED,KAAK,CAAC,iBAAiB,CACrB,GAAgB,EAChB,MAAgB;QAEhB,OAAO,GAAG,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;IACjC,CAAC;IAES,aAAa,CACrB,OAAmD,EACnD,UAAiC;QAEjC,IAAI,OAAO,CAAC,OAAO,KAAK,UAAU,CAAC,WAAW,CAAC,WAAW,EAAE;YAC1D,MAAM,IAAI,iCAAqB,CAC7B,SAAS,EACT,OAAO,CAAC,OAAO,EACf,UAAU,CAAC,WAAW,CAAC,WAAW,CACnC,CAAC;SACH;IACH,CAAC;CACF,CAAA;AA/DY,kBAAkB;IAD9B,IAAA,mBAAU,GAAE;IAOR,WAAA,IAAA,eAAM,EAAC,kBAAkB,CAAC,CAAA;6CACJ,iCAAqB;QAC9B,6BAAa;GARlB,kBAAkB,CA+D9B;AA/DY,gDAAkB","sourcesContent":["// Copyright 2020-2024 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 ApiService,\n ConnectionPoolService,\n getLogger,\n IBlock,\n MetadataMismatchError,\n exitWithError,\n} from '@subql/node-core';\nimport { ProjectNetworkConfig } from '@subql/types-core';\nimport { SubqueryProject } from '../configure/SubqueryProject';\nimport { BlockContent } from '../indexer/types';\nimport { AlgorandApi, SafeAPIService } from './api.algorand';\nimport { AlgorandApiConnection } from './api.connection';\n\nconst logger = getLogger('api');\n\n@Injectable()\nexport class AlgorandApiService extends ApiService<\n AlgorandApi,\n SafeAPIService,\n IBlock<BlockContent>[]\n> {\n private constructor(\n @Inject('ISubqueryProject') private project: SubqueryProject,\n connectionPoolService: ConnectionPoolService<AlgorandApiConnection>,\n eventEmitter: EventEmitter2,\n ) {\n super(connectionPoolService, eventEmitter);\n }\n\n static async init(\n project: SubqueryProject,\n connectionPoolService: ConnectionPoolService<AlgorandApiConnection>,\n eventEmitter: EventEmitter2,\n ): Promise<AlgorandApiService> {\n const apiService = new AlgorandApiService(\n project,\n connectionPoolService,\n eventEmitter,\n );\n try {\n await apiService.createConnections(\n apiService.project.network,\n (endpoint, config) =>\n AlgorandApiConnection.create(\n endpoint,\n config,\n apiService.fetchBlockBatches,\n ),\n );\n } catch (e) {\n exitWithError(new Error(`Failed to init api`, { cause: e }), logger);\n }\n\n return apiService;\n }\n\n get api(): AlgorandApi {\n return this.unsafeApi;\n }\n\n async fetchBlockBatches(\n api: AlgorandApi,\n blocks: number[],\n ): Promise<IBlock<BlockContent>[]> {\n return api.fetchBlocks(blocks);\n }\n\n protected assertChainId(\n network: ProjectNetworkConfig & { chainId: string },\n connection: AlgorandApiConnection,\n ): void {\n if (network.chainId !== connection.networkMeta.genesisHash) {\n throw new MetadataMismatchError(\n 'ChainId',\n network.chainId,\n connection.networkMeta.genesisHash,\n );\n }\n }\n}\n"]}
@@ -38,14 +38,17 @@ describe('ApiService', () => {
38
38
  node_core_1.ConnectionPoolStateManager,
39
39
  node_core_1.ConnectionPoolService,
40
40
  node_core_1.NodeConfig,
41
- algorand_1.AlgorandApiService,
41
+ {
42
+ provide: algorand_1.AlgorandApiService,
43
+ useFactory: algorand_1.AlgorandApiService.init,
44
+ inject: ['ISubqueryProject', node_core_1.ConnectionPoolService, event_emitter_1.EventEmitter2],
45
+ },
42
46
  ],
43
47
  imports: [event_emitter_1.EventEmitterModule.forRoot()],
44
48
  }).compile();
45
49
  app = module.createNestApplication();
46
50
  await app.init();
47
51
  const apiService = app.get(algorand_1.AlgorandApiService);
48
- await apiService.init();
49
52
  return apiService;
50
53
  };
51
54
  it('can fetch block with hash', async () => {
@@ -1 +1 @@
1
- {"version":3,"file":"api.service.spec.js","sourceRoot":"","sources":["../../src/indexer/api.service.spec.ts"],"names":[],"mappings":"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","sourcesContent":["// Copyright 2020-2024 SubQuery Pte Ltd authors & contributors\n// SPDX-License-Identifier: GPL-3.0\n\nimport { INestApplication } from '@nestjs/common';\nimport { EventEmitterModule } from '@nestjs/event-emitter';\nimport { Test } from '@nestjs/testing';\nimport {\n ConnectionPoolService,\n ConnectionPoolStateManager,\n NodeConfig,\n} from '@subql/node-core';\nimport { GraphQLSchema } from 'graphql';\nimport { AlgorandApiService } from '../algorand';\nimport { SubqueryProject } from '../configure/SubqueryProject';\n\nconst ENDPOINT = 'https://mainnet-idx.algonode.cloud/';\n\nfunction testSubqueryProject(endpoint: string): SubqueryProject {\n return {\n network: {\n endpoint: [endpoint],\n dictionary: `https://api.subquery.network/sq/subquery/Algorand-Dictionary`,\n chainId: 'wGHE2Pwdvd7S12BL5FaOP20EGYesN73ktiC1qzkkit8=',\n },\n dataSources: [],\n id: 'test',\n root: './',\n schema: new GraphQLSchema({}),\n templates: [],\n } as any;\n}\n\njest.setTimeout(90000);\ndescribe('ApiService', () => {\n let app: INestApplication;\n\n afterEach(() => {\n return app?.close();\n });\n\n const prepareApiService = async (\n endpoint: string = ENDPOINT,\n ): Promise<AlgorandApiService> => {\n const module = await Test.createTestingModule({\n providers: [\n {\n provide: 'ISubqueryProject',\n useFactory: () => testSubqueryProject(endpoint),\n },\n ConnectionPoolStateManager,\n ConnectionPoolService,\n NodeConfig,\n AlgorandApiService,\n ],\n imports: [EventEmitterModule.forRoot()],\n }).compile();\n\n app = module.createNestApplication();\n await app.init();\n const apiService = app.get(AlgorandApiService);\n await apiService.init();\n return apiService;\n };\n\n it('can fetch block with hash', async () => {\n const apiService = await prepareApiService();\n\n const block = (await apiService.api.fetchBlocks([50000]))[0];\n\n expect(block.block.hash).toEqual(\n 'Gss169f22yVUBJzbNT9qXtQukjh0tgecvapaQY5NIRg=',\n );\n });\n\n it('waits on pending block to fetch hash', async () => {\n const apiService = await prepareApiService();\n const api = apiService.api;\n\n const checkHealth = await api.api.makeHealthCheck().do();\n const currentRound = checkHealth.round;\n\n const fetchLatestBlock = async () =>\n (await apiService.api.fetchBlocks([currentRound]))[0];\n\n expect(fetchLatestBlock).not.toThrow();\n\n const block = await fetchLatestBlock();\n expect(block.block.hash).toBeDefined();\n });\n});\n"]}
1
+ {"version":3,"file":"api.service.spec.js","sourceRoot":"","sources":["../../src/indexer/api.service.spec.ts"],"names":[],"mappings":"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","sourcesContent":["// Copyright 2020-2024 SubQuery Pte Ltd authors & contributors\n// SPDX-License-Identifier: GPL-3.0\n\nimport { INestApplication } from '@nestjs/common';\nimport { EventEmitter2, EventEmitterModule } from '@nestjs/event-emitter';\nimport { Test } from '@nestjs/testing';\nimport {\n ConnectionPoolService,\n ConnectionPoolStateManager,\n NodeConfig,\n} from '@subql/node-core';\nimport { GraphQLSchema } from 'graphql';\nimport { AlgorandApiService } from '../algorand';\nimport { SubqueryProject } from '../configure/SubqueryProject';\n\nconst ENDPOINT = 'https://mainnet-idx.algonode.cloud/';\n\nfunction testSubqueryProject(endpoint: string): SubqueryProject {\n return {\n network: {\n endpoint: [endpoint],\n dictionary: `https://api.subquery.network/sq/subquery/Algorand-Dictionary`,\n chainId: 'wGHE2Pwdvd7S12BL5FaOP20EGYesN73ktiC1qzkkit8=',\n },\n dataSources: [],\n id: 'test',\n root: './',\n schema: new GraphQLSchema({}),\n templates: [],\n } as any;\n}\n\njest.setTimeout(90000);\ndescribe('ApiService', () => {\n let app: INestApplication;\n\n afterEach(() => {\n return app?.close();\n });\n\n const prepareApiService = async (\n endpoint: string = ENDPOINT,\n ): Promise<AlgorandApiService> => {\n const module = await Test.createTestingModule({\n providers: [\n {\n provide: 'ISubqueryProject',\n useFactory: () => testSubqueryProject(endpoint),\n },\n ConnectionPoolStateManager,\n ConnectionPoolService,\n NodeConfig,\n {\n provide: AlgorandApiService,\n useFactory: AlgorandApiService.init,\n inject: ['ISubqueryProject', ConnectionPoolService, EventEmitter2],\n },\n ],\n imports: [EventEmitterModule.forRoot()],\n }).compile();\n\n app = module.createNestApplication();\n await app.init();\n const apiService = app.get(AlgorandApiService);\n\n return apiService;\n };\n\n it('can fetch block with hash', async () => {\n const apiService = await prepareApiService();\n\n const block = (await apiService.api.fetchBlocks([50000]))[0];\n\n expect(block.block.hash).toEqual(\n 'Gss169f22yVUBJzbNT9qXtQukjh0tgecvapaQY5NIRg=',\n );\n });\n\n it('waits on pending block to fetch hash', async () => {\n const apiService = await prepareApiService();\n const api = apiService.api;\n\n const checkHealth = await api.api.makeHealthCheck().do();\n const currentRound = checkHealth.round;\n\n const fetchLatestBlock = async () =>\n (await apiService.api.fetchBlocks([currentRound]))[0];\n\n expect(fetchLatestBlock).not.toThrow();\n\n const block = await fetchLatestBlock();\n expect(block.block.hash).toBeDefined();\n });\n});\n"]}
@@ -1,6 +1,6 @@
1
1
  import { OnApplicationShutdown } from '@nestjs/common';
2
2
  import { EventEmitter2 } from '@nestjs/event-emitter';
3
- import { NodeConfig, StoreCacheService, StoreService, IProjectService, PoiSyncService, BlockDispatcher, ProcessBlockResponse, IProjectUpgradeService, IBlock } from '@subql/node-core';
3
+ import { NodeConfig, IStoreModelProvider, StoreService, IProjectService, PoiSyncService, BlockDispatcher, ProcessBlockResponse, IProjectUpgradeService, IBlock } from '@subql/node-core';
4
4
  import { AlgorandBlock, AlgorandDataSource } from '@subql/types-algorand';
5
5
  import { AlgorandApiService } from '../../algorand';
6
6
  import { SubqueryProject } from '../../configure/SubqueryProject';
@@ -10,7 +10,7 @@ import { IndexerManager } from '../indexer.manager';
10
10
  */
11
11
  export declare class BlockDispatcherService extends BlockDispatcher<AlgorandBlock, AlgorandDataSource> implements OnApplicationShutdown {
12
12
  private indexerManager;
13
- constructor(apiService: AlgorandApiService, nodeConfig: NodeConfig, indexerManager: IndexerManager, eventEmitter: EventEmitter2, projectService: IProjectService<AlgorandDataSource>, projectUpgradeService: IProjectUpgradeService, storeService: StoreService, storeCacheService: StoreCacheService, poiSyncService: PoiSyncService, project: SubqueryProject);
13
+ constructor(apiService: AlgorandApiService, nodeConfig: NodeConfig, indexerManager: IndexerManager, eventEmitter: EventEmitter2, projectService: IProjectService<AlgorandDataSource>, projectUpgradeService: IProjectUpgradeService, storeService: StoreService, storeModelProvider: IStoreModelProvider, poiSyncService: PoiSyncService, project: SubqueryProject);
14
14
  protected getBlockHeight(block: AlgorandBlock): number;
15
15
  protected indexBlock(block: IBlock<AlgorandBlock>): Promise<ProcessBlockResponse>;
16
16
  }
@@ -25,8 +25,8 @@ const indexer_manager_1 = require("../indexer.manager");
25
25
  */
26
26
  let BlockDispatcherService = class BlockDispatcherService extends node_core_1.BlockDispatcher {
27
27
  indexerManager;
28
- constructor(apiService, nodeConfig, indexerManager, eventEmitter, projectService, projectUpgradeService, storeService, storeCacheService, poiSyncService, project) {
29
- super(nodeConfig, eventEmitter, projectService, projectUpgradeService, storeService, storeCacheService, poiSyncService, project, apiService.fetchBlocks.bind(apiService));
28
+ constructor(apiService, nodeConfig, indexerManager, eventEmitter, projectService, projectUpgradeService, storeService, storeModelProvider, poiSyncService, project) {
29
+ super(nodeConfig, eventEmitter, projectService, projectUpgradeService, storeService, storeModelProvider, poiSyncService, project, apiService.fetchBlocks.bind(apiService));
30
30
  this.indexerManager = indexerManager;
31
31
  }
32
32
  getBlockHeight(block) {
@@ -40,13 +40,12 @@ BlockDispatcherService = __decorate([
40
40
  (0, common_1.Injectable)(),
41
41
  __param(4, (0, common_1.Inject)('IProjectService')),
42
42
  __param(5, (0, common_1.Inject)('IProjectUpgradeService')),
43
+ __param(7, (0, common_1.Inject)('IStoreModelProvider')),
43
44
  __param(9, (0, common_1.Inject)('ISubqueryProject')),
44
45
  __metadata("design:paramtypes", [algorand_1.AlgorandApiService,
45
46
  node_core_1.NodeConfig,
46
47
  indexer_manager_1.IndexerManager,
47
- event_emitter_1.EventEmitter2, Object, Object, node_core_1.StoreService,
48
- node_core_1.StoreCacheService,
49
- node_core_1.PoiSyncService, Object])
48
+ event_emitter_1.EventEmitter2, Object, Object, node_core_1.StoreService, Object, node_core_1.PoiSyncService, Object])
50
49
  ], BlockDispatcherService);
51
50
  exports.BlockDispatcherService = BlockDispatcherService;
52
51
  //# sourceMappingURL=block-dispatcher.service.js.map
@@ -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,6CAAoD;AAEpD,wDAAoD;AAEpD;;GAEG;AAEI,IAAM,sBAAsB,GAA5B,MAAM,sBACX,SAAQ,2BAAkD;IAMhD;IAHV,YACE,UAA8B,EAC9B,UAAsB,EACd,cAA8B,EACtC,YAA2B,EAE3B,cAAmD,EAEnD,qBAA6C,EAC7C,YAA0B,EAC1B,iBAAoC,EACpC,cAA8B,EACF,OAAwB;QAEpD,KAAK,CACH,UAAU,EACV,YAAY,EACZ,cAAc,EACd,qBAAqB,EACrB,YAAY,EACZ,iBAAiB,EACjB,cAAc,EACd,OAAO,EACP,UAAU,CAAC,WAAW,CAAC,IAAI,CAAC,UAAU,CAAC,CACxC,CAAC;QArBM,mBAAc,GAAd,cAAc,CAAgB;IAsBxC,CAAC;IAES,cAAc,CAAC,KAAoB;QAC3C,OAAO,KAAK,CAAC,KAAK,CAAC;IACrB,CAAC;IAES,KAAK,CAAC,UAAU,CACxB,KAA4B;QAE5B,OAAO,IAAI,CAAC,cAAc,CAAC,UAAU,CACnC,KAAK,EACL,MAAM,IAAI,CAAC,cAAc,CAAC,cAAc,CAAC,KAAK,CAAC,SAAS,EAAE,CAAC,WAAW,CAAC,CACxE,CAAC;IACJ,CAAC;CACF,CAAA;AA3CY,sBAAsB;IADlC,IAAA,mBAAU,GAAE;IAUR,WAAA,IAAA,eAAM,EAAC,iBAAiB,CAAC,CAAA;IAEzB,WAAA,IAAA,eAAM,EAAC,wBAAwB,CAAC,CAAA;IAKhC,WAAA,IAAA,eAAM,EAAC,kBAAkB,CAAC,CAAA;qCAXf,6BAAkB;QAClB,sBAAU;QACE,gCAAc;QACxB,6BAAa,kBAKb,wBAAY;QACP,6BAAiB;QACpB,0BAAc;GAfrB,sBAAsB,CA2ClC;AA3CY,wDAAsB","sourcesContent":["// Copyright 2020-2024 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 StoreCacheService,\n StoreService,\n IProjectService,\n PoiSyncService,\n BlockDispatcher,\n ProcessBlockResponse,\n IProjectUpgradeService,\n IBlock,\n} from '@subql/node-core';\nimport { AlgorandBlock, AlgorandDataSource } from '@subql/types-algorand';\nimport { AlgorandApiService } from '../../algorand';\nimport { SubqueryProject } from '../../configure/SubqueryProject';\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<AlgorandBlock, AlgorandDataSource>\n implements OnApplicationShutdown\n{\n constructor(\n apiService: AlgorandApiService,\n nodeConfig: NodeConfig,\n private indexerManager: IndexerManager,\n eventEmitter: EventEmitter2,\n @Inject('IProjectService')\n projectService: IProjectService<AlgorandDataSource>,\n @Inject('IProjectUpgradeService')\n projectUpgradeService: IProjectUpgradeService,\n storeService: StoreService,\n storeCacheService: StoreCacheService,\n poiSyncService: PoiSyncService,\n @Inject('ISubqueryProject') project: SubqueryProject,\n ) {\n super(\n nodeConfig,\n eventEmitter,\n projectService,\n projectUpgradeService,\n storeService,\n storeCacheService,\n poiSyncService,\n project,\n apiService.fetchBlocks.bind(apiService),\n );\n }\n\n protected getBlockHeight(block: AlgorandBlock): number {\n return block.round;\n }\n\n protected async indexBlock(\n block: IBlock<AlgorandBlock>,\n ): Promise<ProcessBlockResponse> {\n return this.indexerManager.indexBlock(\n block,\n await this.projectService.getDataSources(block.getHeader().blockHeight),\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,gDAU0B;AAE1B,6CAAoD;AAEpD,wDAAoD;AAEpD;;GAEG;AAEI,IAAM,sBAAsB,GAA5B,MAAM,sBACX,SAAQ,2BAAkD;IAMhD;IAHV,YACE,UAA8B,EAC9B,UAAsB,EACd,cAA8B,EACtC,YAA2B,EAE3B,cAAmD,EAEnD,qBAA6C,EAC7C,YAA0B,EACK,kBAAuC,EACtE,cAA8B,EACF,OAAwB;QAEpD,KAAK,CACH,UAAU,EACV,YAAY,EACZ,cAAc,EACd,qBAAqB,EACrB,YAAY,EACZ,kBAAkB,EAClB,cAAc,EACd,OAAO,EACP,UAAU,CAAC,WAAW,CAAC,IAAI,CAAC,UAAU,CAAC,CACxC,CAAC;QArBM,mBAAc,GAAd,cAAc,CAAgB;IAsBxC,CAAC;IAES,cAAc,CAAC,KAAoB;QAC3C,OAAO,KAAK,CAAC,KAAK,CAAC;IACrB,CAAC;IAES,KAAK,CAAC,UAAU,CACxB,KAA4B;QAE5B,OAAO,IAAI,CAAC,cAAc,CAAC,UAAU,CACnC,KAAK,EACL,MAAM,IAAI,CAAC,cAAc,CAAC,cAAc,CAAC,KAAK,CAAC,SAAS,EAAE,CAAC,WAAW,CAAC,CACxE,CAAC;IACJ,CAAC;CACF,CAAA;AA3CY,sBAAsB;IADlC,IAAA,mBAAU,GAAE;IAUR,WAAA,IAAA,eAAM,EAAC,iBAAiB,CAAC,CAAA;IAEzB,WAAA,IAAA,eAAM,EAAC,wBAAwB,CAAC,CAAA;IAGhC,WAAA,IAAA,eAAM,EAAC,qBAAqB,CAAC,CAAA;IAE7B,WAAA,IAAA,eAAM,EAAC,kBAAkB,CAAC,CAAA;qCAXf,6BAAkB;QAClB,sBAAU;QACE,gCAAc;QACxB,6BAAa,kBAKb,wBAAY,UAEV,0BAAc;GAfrB,sBAAsB,CA2ClC;AA3CY,wDAAsB","sourcesContent":["// Copyright 2020-2024 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 IStoreModelProvider,\n StoreService,\n IProjectService,\n PoiSyncService,\n BlockDispatcher,\n ProcessBlockResponse,\n IProjectUpgradeService,\n IBlock,\n} from '@subql/node-core';\nimport { AlgorandBlock, AlgorandDataSource } from '@subql/types-algorand';\nimport { AlgorandApiService } from '../../algorand';\nimport { SubqueryProject } from '../../configure/SubqueryProject';\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<AlgorandBlock, AlgorandDataSource>\n implements OnApplicationShutdown\n{\n constructor(\n apiService: AlgorandApiService,\n nodeConfig: NodeConfig,\n private indexerManager: IndexerManager,\n eventEmitter: EventEmitter2,\n @Inject('IProjectService')\n projectService: IProjectService<AlgorandDataSource>,\n @Inject('IProjectUpgradeService')\n projectUpgradeService: IProjectUpgradeService,\n storeService: StoreService,\n @Inject('IStoreModelProvider') storeModelProvider: IStoreModelProvider,\n poiSyncService: PoiSyncService,\n @Inject('ISubqueryProject') project: SubqueryProject,\n ) {\n super(\n nodeConfig,\n eventEmitter,\n projectService,\n projectUpgradeService,\n storeService,\n storeModelProvider,\n poiSyncService,\n project,\n apiService.fetchBlocks.bind(apiService),\n );\n }\n\n protected getBlockHeight(block: AlgorandBlock): number {\n return block.round;\n }\n\n protected async indexBlock(\n block: IBlock<AlgorandBlock>,\n ): Promise<ProcessBlockResponse> {\n return this.indexerManager.indexBlock(\n block,\n await this.projectService.getDataSources(block.getHeader().blockHeight),\n );\n }\n}\n"]}
@@ -1,17 +1,18 @@
1
1
  import { OnApplicationShutdown } from '@nestjs/common';
2
2
  import { EventEmitter2 } from '@nestjs/event-emitter';
3
- import { NodeConfig, StoreService, PoiSyncService, StoreCacheService, IProjectService, WorkerBlockDispatcher, ConnectionPoolStateManager, IProjectUpgradeService, InMemoryCacheService, MonitorServiceInterface } from '@subql/node-core';
3
+ import { NodeConfig, StoreService, PoiSyncService, IProjectService, WorkerBlockDispatcher, ConnectionPoolStateManager, IProjectUpgradeService, InMemoryCacheService, MonitorServiceInterface, IStoreModelProvider } from '@subql/node-core';
4
4
  import { AlgorandBlock, AlgorandDataSource } from '@subql/types-algorand';
5
5
  import { AlgorandApiConnection } from '../../algorand';
6
6
  import { SubqueryProject } from '../../configure/SubqueryProject';
7
7
  import { DynamicDsService } from '../dynamic-ds.service';
8
8
  import { UnfinalizedBlocksService } from '../unfinalizedBlocks.service';
9
9
  import { IIndexerWorker } from '../worker/worker';
10
+ import { FetchBlockResponse } from '../worker/worker.service';
10
11
  type IndexerWorker = IIndexerWorker & {
11
12
  terminate: () => Promise<number>;
12
13
  };
13
14
  export declare class WorkerBlockDispatcherService extends WorkerBlockDispatcher<AlgorandDataSource, IndexerWorker, AlgorandBlock> implements OnApplicationShutdown {
14
- constructor(nodeConfig: NodeConfig, eventEmitter: EventEmitter2, projectService: IProjectService<AlgorandDataSource>, projectUpgadeService: IProjectUpgradeService, cacheService: InMemoryCacheService, storeService: StoreService, storeCacheService: StoreCacheService, poiSyncService: PoiSyncService, project: SubqueryProject, dynamicDsService: DynamicDsService, unfinalizedBlocksService: UnfinalizedBlocksService, connectionPoolState: ConnectionPoolStateManager<AlgorandApiConnection>, monitorService?: MonitorServiceInterface);
15
- protected fetchBlock(worker: IndexerWorker, height: number): Promise<void>;
15
+ constructor(nodeConfig: NodeConfig, eventEmitter: EventEmitter2, projectService: IProjectService<AlgorandDataSource>, projectUpgadeService: IProjectUpgradeService, cacheService: InMemoryCacheService, storeService: StoreService, storeModelProvider: IStoreModelProvider, poiSyncService: PoiSyncService, project: SubqueryProject, dynamicDsService: DynamicDsService, unfinalizedBlocksService: UnfinalizedBlocksService, connectionPoolState: ConnectionPoolStateManager<AlgorandApiConnection>, monitorService?: MonitorServiceInterface);
16
+ protected fetchBlock(worker: IndexerWorker, height: number): Promise<FetchBlockResponse>;
16
17
  }
17
18
  export {};
@@ -25,23 +25,22 @@ const node_core_1 = require("@subql/node-core");
25
25
  const dynamic_ds_service_1 = require("../dynamic-ds.service");
26
26
  const unfinalizedBlocks_service_1 = require("../unfinalizedBlocks.service");
27
27
  let WorkerBlockDispatcherService = class WorkerBlockDispatcherService extends node_core_1.WorkerBlockDispatcher {
28
- constructor(nodeConfig, eventEmitter, projectService, projectUpgadeService, cacheService, storeService, storeCacheService, poiSyncService, project, dynamicDsService, unfinalizedBlocksService, connectionPoolState, monitorService) {
29
- super(nodeConfig, eventEmitter, projectService, projectUpgadeService, storeService, storeCacheService, poiSyncService, project, () => (0, node_core_1.createIndexerWorker)(path_1.default.resolve(__dirname, '../../../dist/indexer/worker/worker.js'), [], storeService.getStore(), cacheService.getCache(), dynamicDsService, unfinalizedBlocksService, connectionPoolState, project.root, projectService.startHeight, monitorService), monitorService);
28
+ constructor(nodeConfig, eventEmitter, projectService, projectUpgadeService, cacheService, storeService, storeModelProvider, poiSyncService, project, dynamicDsService, unfinalizedBlocksService, connectionPoolState, monitorService) {
29
+ super(nodeConfig, eventEmitter, projectService, projectUpgadeService, storeService, storeModelProvider, poiSyncService, project, () => (0, node_core_1.createIndexerWorker)(path_1.default.resolve(__dirname, '../../../dist/indexer/worker/worker.js'), [], storeService.getStore(), cacheService.getCache(), dynamicDsService, unfinalizedBlocksService, connectionPoolState, project.root, projectService.startHeight, monitorService), monitorService);
30
30
  }
31
31
  async fetchBlock(worker, height) {
32
- await worker.fetchBlock(height, 0 /* Unused with algorand */);
32
+ return worker.fetchBlock(height, 0 /* Unused with algorand */);
33
33
  }
34
34
  };
35
35
  WorkerBlockDispatcherService = __decorate([
36
36
  (0, common_1.Injectable)(),
37
37
  __param(2, (0, common_1.Inject)('IProjectService')),
38
38
  __param(3, (0, common_1.Inject)('IProjectUpgradeService')),
39
+ __param(6, (0, common_1.Inject)('IStoreModelProvider')),
39
40
  __param(8, (0, common_1.Inject)('ISubqueryProject')),
40
41
  __metadata("design:paramtypes", [node_core_1.NodeConfig,
41
42
  event_emitter_1.EventEmitter2, Object, Object, node_core_1.InMemoryCacheService,
42
- node_core_1.StoreService,
43
- node_core_1.StoreCacheService,
44
- node_core_1.PoiSyncService, Object, dynamic_ds_service_1.DynamicDsService,
43
+ node_core_1.StoreService, Object, node_core_1.PoiSyncService, Object, dynamic_ds_service_1.DynamicDsService,
45
44
  unfinalizedBlocks_service_1.UnfinalizedBlocksService,
46
45
  node_core_1.ConnectionPoolStateManager, Object])
47
46
  ], WorkerBlockDispatcherService);
@@ -1 +1 @@
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,gDAY0B;AAI1B,8DAAyD;AAEzD,4EAAwE;AAQjE,IAAM,4BAA4B,GAAlC,MAAM,4BACX,SAAQ,iCAIP;IAGD,YACE,UAAsB,EACtB,YAA2B,EAE3B,cAAmD,EAEnD,oBAA4C,EAC5C,YAAkC,EAClC,YAA0B,EAC1B,iBAAoC,EACpC,cAA8B,EACF,OAAwB,EACpD,gBAAkC,EAClC,wBAAkD,EAClD,mBAAsE,EACtE,cAAwC;QAExC,KAAK,CACH,UAAU,EACV,YAAY,EACZ,cAAc,EACd,oBAAoB,EACpB,YAAY,EACZ,iBAAiB,EACjB,cAAc,EACd,OAAO,EACP,GAAG,EAAE,CACH,IAAA,+BAAmB,EAMjB,cAAI,CAAC,OAAO,CAAC,SAAS,EAAE,wCAAwC,CAAC,EACjE,EAAE,EACF,YAAY,CAAC,QAAQ,EAAE,EACvB,YAAY,CAAC,QAAQ,EAAE,EACvB,gBAAgB,EAChB,wBAAwB,EACxB,mBAAmB,EACnB,OAAO,CAAC,IAAI,EACZ,cAAc,CAAC,WAAW,EAC1B,cAAc,CACf,EACH,cAAc,CACf,CAAC;IACJ,CAAC;IAES,KAAK,CAAC,UAAU,CACxB,MAAqB,EACrB,MAAc;QAEd,MAAM,MAAM,CAAC,UAAU,CAAC,MAAM,EAAE,CAAC,CAAC,0BAA0B,CAAC,CAAC;IAChE,CAAC;CACF,CAAA;AA9DY,4BAA4B;IADxC,IAAA,mBAAU,GAAE;IAYR,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,kBAKb,gCAAoB;QACpB,wBAAY;QACP,6BAAiB;QACpB,0BAAc,UAEZ,qCAAgB;QACR,oDAAwB;QAC7B,sCAA0B;GAtBtC,4BAA4B,CA8DxC;AA9DY,oEAA4B","sourcesContent":["// Copyright 2020-2024 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 StoreService,\n PoiSyncService,\n StoreCacheService,\n IProjectService,\n WorkerBlockDispatcher,\n ConnectionPoolStateManager,\n IProjectUpgradeService,\n InMemoryCacheService,\n createIndexerWorker,\n MonitorServiceInterface,\n} from '@subql/node-core';\nimport { AlgorandBlock, AlgorandDataSource } from '@subql/types-algorand';\nimport { AlgorandApiConnection } from '../../algorand';\nimport { SubqueryProject } from '../../configure/SubqueryProject';\nimport { DynamicDsService } from '../dynamic-ds.service';\nimport { BlockContent } from '../types';\nimport { UnfinalizedBlocksService } from '../unfinalizedBlocks.service';\nimport { IIndexerWorker } from '../worker/worker';\n\ntype IndexerWorker = IIndexerWorker & {\n terminate: () => Promise<number>;\n};\n\n@Injectable()\nexport class WorkerBlockDispatcherService\n extends WorkerBlockDispatcher<\n AlgorandDataSource,\n IndexerWorker,\n AlgorandBlock\n >\n implements OnApplicationShutdown\n{\n constructor(\n nodeConfig: NodeConfig,\n eventEmitter: EventEmitter2,\n @Inject('IProjectService')\n projectService: IProjectService<AlgorandDataSource>,\n @Inject('IProjectUpgradeService')\n projectUpgadeService: IProjectUpgradeService,\n cacheService: InMemoryCacheService,\n storeService: StoreService,\n storeCacheService: StoreCacheService,\n poiSyncService: PoiSyncService,\n @Inject('ISubqueryProject') project: SubqueryProject,\n dynamicDsService: DynamicDsService,\n unfinalizedBlocksService: UnfinalizedBlocksService,\n connectionPoolState: ConnectionPoolStateManager<AlgorandApiConnection>,\n monitorService?: MonitorServiceInterface,\n ) {\n super(\n nodeConfig,\n eventEmitter,\n projectService,\n projectUpgadeService,\n storeService,\n storeCacheService,\n poiSyncService,\n project,\n () =>\n createIndexerWorker<\n IIndexerWorker,\n AlgorandApiConnection,\n BlockContent,\n AlgorandDataSource\n >(\n path.resolve(__dirname, '../../../dist/indexer/worker/worker.js'),\n [],\n storeService.getStore(),\n cacheService.getCache(),\n dynamicDsService,\n unfinalizedBlocksService,\n connectionPoolState,\n project.root,\n projectService.startHeight,\n monitorService,\n ),\n monitorService,\n );\n }\n\n protected async fetchBlock(\n worker: IndexerWorker,\n height: number,\n ): Promise<void> {\n await worker.fetchBlock(height, 0 /* Unused with algorand */);\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,gDAY0B;AAI1B,8DAAyD;AAEzD,4EAAwE;AASjE,IAAM,4BAA4B,GAAlC,MAAM,4BACX,SAAQ,iCAIP;IAGD,YACE,UAAsB,EACtB,YAA2B,EAE3B,cAAmD,EAEnD,oBAA4C,EAC5C,YAAkC,EAClC,YAA0B,EACK,kBAAuC,EACtE,cAA8B,EACF,OAAwB,EACpD,gBAAkC,EAClC,wBAAkD,EAClD,mBAAsE,EACtE,cAAwC;QAExC,KAAK,CACH,UAAU,EACV,YAAY,EACZ,cAAc,EACd,oBAAoB,EACpB,YAAY,EACZ,kBAAkB,EAClB,cAAc,EACd,OAAO,EACP,GAAG,EAAE,CACH,IAAA,+BAAmB,EAMjB,cAAI,CAAC,OAAO,CAAC,SAAS,EAAE,wCAAwC,CAAC,EACjE,EAAE,EACF,YAAY,CAAC,QAAQ,EAAE,EACvB,YAAY,CAAC,QAAQ,EAAE,EACvB,gBAAgB,EAChB,wBAAwB,EACxB,mBAAmB,EACnB,OAAO,CAAC,IAAI,EACZ,cAAc,CAAC,WAAW,EAC1B,cAAc,CACf,EACH,cAAc,CACf,CAAC;IACJ,CAAC;IAES,KAAK,CAAC,UAAU,CACxB,MAAqB,EACrB,MAAc;QAEd,OAAO,MAAM,CAAC,UAAU,CAAC,MAAM,EAAE,CAAC,CAAC,0BAA0B,CAAC,CAAC;IACjE,CAAC;CACF,CAAA;AA9DY,4BAA4B;IADxC,IAAA,mBAAU,GAAE;IAYR,WAAA,IAAA,eAAM,EAAC,iBAAiB,CAAC,CAAA;IAEzB,WAAA,IAAA,eAAM,EAAC,wBAAwB,CAAC,CAAA;IAIhC,WAAA,IAAA,eAAM,EAAC,qBAAqB,CAAC,CAAA;IAE7B,WAAA,IAAA,eAAM,EAAC,kBAAkB,CAAC,CAAA;qCAVf,sBAAU;QACR,6BAAa,kBAKb,gCAAoB;QACpB,wBAAY,UAEV,0BAAc,UAEZ,qCAAgB;QACR,oDAAwB;QAC7B,sCAA0B;GAtBtC,4BAA4B,CA8DxC;AA9DY,oEAA4B","sourcesContent":["// Copyright 2020-2024 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 StoreService,\n PoiSyncService,\n IProjectService,\n WorkerBlockDispatcher,\n ConnectionPoolStateManager,\n IProjectUpgradeService,\n InMemoryCacheService,\n createIndexerWorker,\n MonitorServiceInterface,\n IStoreModelProvider,\n} from '@subql/node-core';\nimport { AlgorandBlock, AlgorandDataSource } from '@subql/types-algorand';\nimport { AlgorandApiConnection } from '../../algorand';\nimport { SubqueryProject } from '../../configure/SubqueryProject';\nimport { DynamicDsService } from '../dynamic-ds.service';\nimport { BlockContent } from '../types';\nimport { UnfinalizedBlocksService } from '../unfinalizedBlocks.service';\nimport { IIndexerWorker } from '../worker/worker';\nimport { FetchBlockResponse } from '../worker/worker.service';\n\ntype IndexerWorker = IIndexerWorker & {\n terminate: () => Promise<number>;\n};\n\n@Injectable()\nexport class WorkerBlockDispatcherService\n extends WorkerBlockDispatcher<\n AlgorandDataSource,\n IndexerWorker,\n AlgorandBlock\n >\n implements OnApplicationShutdown\n{\n constructor(\n nodeConfig: NodeConfig,\n eventEmitter: EventEmitter2,\n @Inject('IProjectService')\n projectService: IProjectService<AlgorandDataSource>,\n @Inject('IProjectUpgradeService')\n projectUpgadeService: IProjectUpgradeService,\n cacheService: InMemoryCacheService,\n storeService: StoreService,\n @Inject('IStoreModelProvider') storeModelProvider: IStoreModelProvider,\n poiSyncService: PoiSyncService,\n @Inject('ISubqueryProject') project: SubqueryProject,\n dynamicDsService: DynamicDsService,\n unfinalizedBlocksService: UnfinalizedBlocksService,\n connectionPoolState: ConnectionPoolStateManager<AlgorandApiConnection>,\n monitorService?: MonitorServiceInterface,\n ) {\n super(\n nodeConfig,\n eventEmitter,\n projectService,\n projectUpgadeService,\n storeService,\n storeModelProvider,\n poiSyncService,\n project,\n () =>\n createIndexerWorker<\n IIndexerWorker,\n AlgorandApiConnection,\n BlockContent,\n AlgorandDataSource\n >(\n path.resolve(__dirname, '../../../dist/indexer/worker/worker.js'),\n [],\n storeService.getStore(),\n cacheService.getCache(),\n dynamicDsService,\n unfinalizedBlocksService,\n connectionPoolState,\n project.root,\n projectService.startHeight,\n monitorService,\n ),\n monitorService,\n );\n }\n\n protected async fetchBlock(\n worker: IndexerWorker,\n height: number,\n ): Promise<FetchBlockResponse> {\n return worker.fetchBlock(height, 0 /* Unused with algorand */);\n }\n}\n"]}
@@ -30,19 +30,15 @@ FetchModule = __decorate([
30
30
  unfinalizedBlocks_service_1.UnfinalizedBlocksService,
31
31
  {
32
32
  provide: algorand_1.AlgorandApiService,
33
- useFactory: async (project, connectionPoolService, eventEmitter) => {
34
- const apiService = new algorand_1.AlgorandApiService(project, connectionPoolService, eventEmitter);
35
- await apiService.init();
36
- return apiService;
37
- },
33
+ useFactory: algorand_1.AlgorandApiService.init,
38
34
  inject: ['ISubqueryProject', node_core_1.ConnectionPoolService, event_emitter_1.EventEmitter2],
39
35
  },
40
36
  indexer_manager_1.IndexerManager,
41
37
  {
42
38
  provide: 'IBlockDispatcher',
43
- useFactory: (nodeConfig, eventEmitter, projectService, projectUpgradeService, apiService, indexerManager, cacheService, storeService, storeCacheService, poiSyncService, project, dynamicDsService, unfinalizedBlocksService, connectionPoolState, monitorService) => nodeConfig.workers
44
- ? new blockDispatcher_1.WorkerBlockDispatcherService(nodeConfig, eventEmitter, projectService, projectUpgradeService, cacheService, storeService, storeCacheService, poiSyncService, project, dynamicDsService, unfinalizedBlocksService, connectionPoolState, monitorService)
45
- : new blockDispatcher_1.BlockDispatcherService(apiService, nodeConfig, indexerManager, eventEmitter, projectService, projectUpgradeService, storeService, storeCacheService, poiSyncService, project),
39
+ useFactory: (nodeConfig, eventEmitter, projectService, projectUpgradeService, apiService, indexerManager, cacheService, storeService, storeModelProvider, poiSyncService, project, dynamicDsService, unfinalizedBlocksService, connectionPoolState, monitorService) => nodeConfig.workers
40
+ ? new blockDispatcher_1.WorkerBlockDispatcherService(nodeConfig, eventEmitter, projectService, projectUpgradeService, cacheService, storeService, storeModelProvider, poiSyncService, project, dynamicDsService, unfinalizedBlocksService, connectionPoolState, monitorService)
41
+ : new blockDispatcher_1.BlockDispatcherService(apiService, nodeConfig, indexerManager, eventEmitter, projectService, projectUpgradeService, storeService, storeModelProvider, poiSyncService, project),
46
42
  inject: [
47
43
  node_core_1.NodeConfig,
48
44
  event_emitter_1.EventEmitter2,
@@ -52,7 +48,7 @@ FetchModule = __decorate([
52
48
  indexer_manager_1.IndexerManager,
53
49
  node_core_1.InMemoryCacheService,
54
50
  node_core_1.StoreService,
55
- node_core_1.StoreCacheService,
51
+ 'IStoreModelProvider',
56
52
  node_core_1.PoiSyncService,
57
53
  'ISubqueryProject',
58
54
  dynamic_ds_service_1.DynamicDsService,
@@ -1 +1 @@
1
- {"version":3,"file":"fetch.module.js","sourceRoot":"","sources":["../../src/indexer/fetch.module.ts"],"names":[],"mappings":";AAAA,8DAA8D;AAC9D,mCAAmC;;;;;;;;;AAEnC,2CAAwC;AACxC,yDAAsD;AACtD,gDAW0B;AAC1B,0CAAwE;AAExE,uDAG2B;AAC3B,6CAAyD;AACzD,iEAA4D;AAC5D,6DAAwD;AACxD,mDAA+C;AAC/C,uDAAmD;AACnD,uDAAmD;AACnD,2EAAuE;AAoGhE,IAAM,WAAW,GAAjB,MAAM,WAAW;CAAG,CAAA;AAAd,WAAW;IAlGvB,IAAA,eAAM,EAAC;QACN,OAAO,EAAE,CAAC,sBAAU,CAAC;QACrB,SAAS,EAAE;YACT,oDAAwB;YACxB;gBACE,OAAO,EAAE,6BAAkB;gBAC3B,UAAU,EAAE,KAAK,EACf,OAAwB,EACxB,qBAAmE,EACnE,YAA2B,EAC3B,EAAE;oBACF,MAAM,UAAU,GAAG,IAAI,6BAAkB,CACvC,OAAO,EACP,qBAAqB,EACrB,YAAY,CACb,CAAC;oBACF,MAAM,UAAU,CAAC,IAAI,EAAE,CAAC;oBACxB,OAAO,UAAU,CAAC;gBACpB,CAAC;gBACD,MAAM,EAAE,CAAC,kBAAkB,EAAE,iCAAqB,EAAE,6BAAa,CAAC;aACnE;YACD,gCAAc;YACd;gBACE,OAAO,EAAE,kBAAkB;gBAC3B,UAAU,EAAE,CACV,UAAsB,EACtB,YAA2B,EAC3B,cAA8B,EAC9B,qBAA6C,EAC7C,UAA8B,EAC9B,cAA8B,EAC9B,YAAkC,EAClC,YAA0B,EAC1B,iBAAoC,EACpC,cAA8B,EAC9B,OAAwB,EACxB,gBAAkC,EAClC,wBAAkD,EAClD,mBAAsE,EACtE,cAA+B,EAC/B,EAAE,CACF,UAAU,CAAC,OAAO;oBAChB,CAAC,CAAC,IAAI,8CAA4B,CAC9B,UAAU,EACV,YAAY,EACZ,cAAc,EACd,qBAAqB,EACrB,YAAY,EACZ,YAAY,EACZ,iBAAiB,EACjB,cAAc,EACd,OAAO,EACP,gBAAgB,EAChB,wBAAwB,EACxB,mBAAmB,EACnB,cAAc,CACf;oBACH,CAAC,CAAC,IAAI,wCAAsB,CACxB,UAAU,EACV,UAAU,EACV,cAAc,EACd,YAAY,EACZ,cAAc,EACd,qBAAqB,EACrB,YAAY,EACZ,iBAAiB,EACjB,cAAc,EACd,OAAO,CACR;gBACP,MAAM,EAAE;oBACN,sBAAU;oBACV,6BAAa;oBACb,iBAAiB;oBACjB,wBAAwB;oBACxB,6BAAkB;oBAClB,gCAAc;oBACd,gCAAoB;oBACpB,wBAAY;oBACZ,6BAAiB;oBACjB,0BAAc;oBACd,kBAAkB;oBAClB,qCAAgB;oBAChB,oDAAwB;oBACxB,sCAA0B;oBAC1B,0BAAc;iBACf;aACF;YACD,4BAAY;YACZ,sCAAyB;YACzB,yCAAkB;YAClB,qCAAgB;YAChB;gBACE,QAAQ,EAAE,gCAAc;gBACxB,OAAO,EAAE,iBAAiB;aAC3B;YACD,0BAAc;SACf;KACF,CAAC;GACW,WAAW,CAAG;AAAd,kCAAW","sourcesContent":["// Copyright 2020-2024 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 StoreService,\n PoiSyncService,\n NodeConfig,\n ConnectionPoolService,\n StoreCacheService,\n ConnectionPoolStateManager,\n IProjectUpgradeService,\n InMemoryCacheService,\n MonitorService,\n CoreModule,\n} from '@subql/node-core';\nimport { AlgorandApiConnection, AlgorandApiService } from '../algorand';\nimport { SubqueryProject } from '../configure/SubqueryProject';\nimport {\n BlockDispatcherService,\n WorkerBlockDispatcherService,\n} from './blockDispatcher';\nimport { AlgorandDictionaryService } from './dictionary';\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 { UnfinalizedBlocksService } from './unfinalizedBlocks.service';\n\n@Module({\n imports: [CoreModule],\n providers: [\n UnfinalizedBlocksService,\n {\n provide: AlgorandApiService,\n useFactory: async (\n project: SubqueryProject,\n connectionPoolService: ConnectionPoolService<AlgorandApiConnection>,\n eventEmitter: EventEmitter2,\n ) => {\n const apiService = new AlgorandApiService(\n project,\n connectionPoolService,\n eventEmitter,\n );\n await apiService.init();\n return apiService;\n },\n inject: ['ISubqueryProject', ConnectionPoolService, EventEmitter2],\n },\n IndexerManager,\n {\n provide: 'IBlockDispatcher',\n useFactory: (\n nodeConfig: NodeConfig,\n eventEmitter: EventEmitter2,\n projectService: ProjectService,\n projectUpgradeService: IProjectUpgradeService,\n apiService: AlgorandApiService,\n indexerManager: IndexerManager,\n cacheService: InMemoryCacheService,\n storeService: StoreService,\n storeCacheService: StoreCacheService,\n poiSyncService: PoiSyncService,\n project: SubqueryProject,\n dynamicDsService: DynamicDsService,\n unfinalizedBlocksService: UnfinalizedBlocksService,\n connectionPoolState: ConnectionPoolStateManager<AlgorandApiConnection>,\n monitorService?: MonitorService,\n ) =>\n nodeConfig.workers\n ? new WorkerBlockDispatcherService(\n nodeConfig,\n eventEmitter,\n projectService,\n projectUpgradeService,\n cacheService,\n storeService,\n storeCacheService,\n poiSyncService,\n project,\n dynamicDsService,\n unfinalizedBlocksService,\n connectionPoolState,\n monitorService,\n )\n : new BlockDispatcherService(\n apiService,\n nodeConfig,\n indexerManager,\n eventEmitter,\n projectService,\n projectUpgradeService,\n storeService,\n storeCacheService,\n poiSyncService,\n project,\n ),\n inject: [\n NodeConfig,\n EventEmitter2,\n 'IProjectService',\n 'IProjectUpgradeService',\n AlgorandApiService,\n IndexerManager,\n InMemoryCacheService,\n StoreService,\n StoreCacheService,\n PoiSyncService,\n 'ISubqueryProject',\n DynamicDsService,\n UnfinalizedBlocksService,\n ConnectionPoolStateManager,\n MonitorService,\n ],\n },\n FetchService,\n AlgorandDictionaryService,\n DsProcessorService,\n DynamicDsService,\n {\n useClass: ProjectService,\n provide: 'IProjectService',\n },\n MonitorService,\n ],\n})\nexport class FetchModule {}\n"]}
1
+ {"version":3,"file":"fetch.module.js","sourceRoot":"","sources":["../../src/indexer/fetch.module.ts"],"names":[],"mappings":";AAAA,8DAA8D;AAC9D,mCAAmC;;;;;;;;;AAEnC,2CAAwC;AACxC,yDAAsD;AACtD,gDAW0B;AAC1B,0CAAwE;AAExE,uDAG2B;AAC3B,6CAAyD;AACzD,iEAA4D;AAC5D,6DAAwD;AACxD,mDAA+C;AAC/C,uDAAmD;AACnD,uDAAmD;AACnD,2EAAuE;AAwFhE,IAAM,WAAW,GAAjB,MAAM,WAAW;CAAG,CAAA;AAAd,WAAW;IAtFvB,IAAA,eAAM,EAAC;QACN,OAAO,EAAE,CAAC,sBAAU,CAAC;QACrB,SAAS,EAAE;YACT,oDAAwB;YACxB;gBACE,OAAO,EAAE,6BAAkB;gBAC3B,UAAU,EAAE,6BAAkB,CAAC,IAAI;gBACnC,MAAM,EAAE,CAAC,kBAAkB,EAAE,iCAAqB,EAAE,6BAAa,CAAC;aACnE;YACD,gCAAc;YACd;gBACE,OAAO,EAAE,kBAAkB;gBAC3B,UAAU,EAAE,CACV,UAAsB,EACtB,YAA2B,EAC3B,cAA8B,EAC9B,qBAA6C,EAC7C,UAA8B,EAC9B,cAA8B,EAC9B,YAAkC,EAClC,YAA0B,EAC1B,kBAAuC,EACvC,cAA8B,EAC9B,OAAwB,EACxB,gBAAkC,EAClC,wBAAkD,EAClD,mBAAsE,EACtE,cAA+B,EAC/B,EAAE,CACF,UAAU,CAAC,OAAO;oBAChB,CAAC,CAAC,IAAI,8CAA4B,CAC9B,UAAU,EACV,YAAY,EACZ,cAAc,EACd,qBAAqB,EACrB,YAAY,EACZ,YAAY,EACZ,kBAAkB,EAClB,cAAc,EACd,OAAO,EACP,gBAAgB,EAChB,wBAAwB,EACxB,mBAAmB,EACnB,cAAc,CACf;oBACH,CAAC,CAAC,IAAI,wCAAsB,CACxB,UAAU,EACV,UAAU,EACV,cAAc,EACd,YAAY,EACZ,cAAc,EACd,qBAAqB,EACrB,YAAY,EACZ,kBAAkB,EAClB,cAAc,EACd,OAAO,CACR;gBACP,MAAM,EAAE;oBACN,sBAAU;oBACV,6BAAa;oBACb,iBAAiB;oBACjB,wBAAwB;oBACxB,6BAAkB;oBAClB,gCAAc;oBACd,gCAAoB;oBACpB,wBAAY;oBACZ,qBAAqB;oBACrB,0BAAc;oBACd,kBAAkB;oBAClB,qCAAgB;oBAChB,oDAAwB;oBACxB,sCAA0B;oBAC1B,0BAAc;iBACf;aACF;YACD,4BAAY;YACZ,sCAAyB;YACzB,yCAAkB;YAClB,qCAAgB;YAChB;gBACE,QAAQ,EAAE,gCAAc;gBACxB,OAAO,EAAE,iBAAiB;aAC3B;YACD,0BAAc;SACf;KACF,CAAC;GACW,WAAW,CAAG;AAAd,kCAAW","sourcesContent":["// Copyright 2020-2024 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 StoreService,\n PoiSyncService,\n NodeConfig,\n ConnectionPoolService,\n ConnectionPoolStateManager,\n IProjectUpgradeService,\n InMemoryCacheService,\n MonitorService,\n CoreModule,\n IStoreModelProvider,\n} from '@subql/node-core';\nimport { AlgorandApiConnection, AlgorandApiService } from '../algorand';\nimport { SubqueryProject } from '../configure/SubqueryProject';\nimport {\n BlockDispatcherService,\n WorkerBlockDispatcherService,\n} from './blockDispatcher';\nimport { AlgorandDictionaryService } from './dictionary';\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 { UnfinalizedBlocksService } from './unfinalizedBlocks.service';\n\n@Module({\n imports: [CoreModule],\n providers: [\n UnfinalizedBlocksService,\n {\n provide: AlgorandApiService,\n useFactory: AlgorandApiService.init,\n inject: ['ISubqueryProject', ConnectionPoolService, EventEmitter2],\n },\n IndexerManager,\n {\n provide: 'IBlockDispatcher',\n useFactory: (\n nodeConfig: NodeConfig,\n eventEmitter: EventEmitter2,\n projectService: ProjectService,\n projectUpgradeService: IProjectUpgradeService,\n apiService: AlgorandApiService,\n indexerManager: IndexerManager,\n cacheService: InMemoryCacheService,\n storeService: StoreService,\n storeModelProvider: IStoreModelProvider,\n poiSyncService: PoiSyncService,\n project: SubqueryProject,\n dynamicDsService: DynamicDsService,\n unfinalizedBlocksService: UnfinalizedBlocksService,\n connectionPoolState: ConnectionPoolStateManager<AlgorandApiConnection>,\n monitorService?: MonitorService,\n ) =>\n nodeConfig.workers\n ? new WorkerBlockDispatcherService(\n nodeConfig,\n eventEmitter,\n projectService,\n projectUpgradeService,\n cacheService,\n storeService,\n storeModelProvider,\n poiSyncService,\n project,\n dynamicDsService,\n unfinalizedBlocksService,\n connectionPoolState,\n monitorService,\n )\n : new BlockDispatcherService(\n apiService,\n nodeConfig,\n indexerManager,\n eventEmitter,\n projectService,\n projectUpgradeService,\n storeService,\n storeModelProvider,\n poiSyncService,\n project,\n ),\n inject: [\n NodeConfig,\n EventEmitter2,\n 'IProjectService',\n 'IProjectUpgradeService',\n AlgorandApiService,\n IndexerManager,\n InMemoryCacheService,\n StoreService,\n 'IStoreModelProvider',\n PoiSyncService,\n 'ISubqueryProject',\n DynamicDsService,\n UnfinalizedBlocksService,\n ConnectionPoolStateManager,\n MonitorService,\n ],\n },\n FetchService,\n AlgorandDictionaryService,\n DsProcessorService,\n DynamicDsService,\n {\n useClass: ProjectService,\n provide: 'IProjectService',\n },\n MonitorService,\n ],\n})\nexport class FetchModule {}\n"]}
@@ -1,7 +1,7 @@
1
1
  import { EventEmitter2 } from '@nestjs/event-emitter';
2
2
  import { SchedulerRegistry } from '@nestjs/schedule';
3
3
  import { AlgorandDataSource } from '@subql/common-algorand';
4
- import { NodeConfig, BaseFetchService, Header, StoreCacheService } from '@subql/node-core';
4
+ import { NodeConfig, BaseFetchService, Header, IStoreModelProvider } from '@subql/node-core';
5
5
  import { AlgorandBlock } from '@subql/types-algorand';
6
6
  import { AlgorandApi, AlgorandApiService } from '../algorand';
7
7
  import { IAlgorandBlockDispatcher } from './blockDispatcher';
@@ -10,7 +10,7 @@ import { ProjectService } from './project.service';
10
10
  import { UnfinalizedBlocksService } from './unfinalizedBlocks.service';
11
11
  export declare class FetchService extends BaseFetchService<AlgorandDataSource, IAlgorandBlockDispatcher, AlgorandBlock> {
12
12
  private apiService;
13
- constructor(apiService: AlgorandApiService, nodeConfig: NodeConfig, projectService: ProjectService, blockDispatcher: IAlgorandBlockDispatcher, dictionaryService: AlgorandDictionaryService, unfinalizedBlocksService: UnfinalizedBlocksService, eventEmitter: EventEmitter2, schedulerRegistry: SchedulerRegistry, storeCacheService: StoreCacheService);
13
+ constructor(apiService: AlgorandApiService, nodeConfig: NodeConfig, projectService: ProjectService, blockDispatcher: IAlgorandBlockDispatcher, dictionaryService: AlgorandDictionaryService, unfinalizedBlocksService: UnfinalizedBlocksService, eventEmitter: EventEmitter2, schedulerRegistry: SchedulerRegistry, storeModelProvider: IStoreModelProvider);
14
14
  get api(): AlgorandApi;
15
15
  protected getFinalizedHeader(): Promise<Header>;
16
16
  protected getBestHeight(): Promise<number>;
@@ -28,8 +28,8 @@ const BLOCK_TIME_VARIANCE = 5000; //ms
28
28
  const INTERVAL_PERCENT = 0.9;
29
29
  let FetchService = class FetchService extends node_core_1.BaseFetchService {
30
30
  apiService;
31
- constructor(apiService, nodeConfig, projectService, blockDispatcher, dictionaryService, unfinalizedBlocksService, eventEmitter, schedulerRegistry, storeCacheService) {
32
- super(nodeConfig, projectService, blockDispatcher, dictionaryService, eventEmitter, schedulerRegistry, unfinalizedBlocksService, storeCacheService);
31
+ constructor(apiService, nodeConfig, projectService, blockDispatcher, dictionaryService, unfinalizedBlocksService, eventEmitter, schedulerRegistry, storeModelProvider) {
32
+ super(nodeConfig, projectService, blockDispatcher, dictionaryService, eventEmitter, schedulerRegistry, unfinalizedBlocksService, storeModelProvider);
33
33
  this.apiService = apiService;
34
34
  }
35
35
  get api() {
@@ -66,13 +66,13 @@ FetchService = __decorate([
66
66
  (0, common_1.Injectable)(),
67
67
  __param(2, (0, common_1.Inject)('IProjectService')),
68
68
  __param(3, (0, common_1.Inject)('IBlockDispatcher')),
69
+ __param(8, (0, common_1.Inject)('IStoreModelProvider')),
69
70
  __metadata("design:paramtypes", [algorand_1.AlgorandApiService,
70
71
  node_core_1.NodeConfig,
71
72
  project_service_1.ProjectService, Object, dictionary_1.AlgorandDictionaryService,
72
73
  unfinalizedBlocks_service_1.UnfinalizedBlocksService,
73
74
  event_emitter_1.EventEmitter2,
74
- schedule_1.SchedulerRegistry,
75
- node_core_1.StoreCacheService])
75
+ schedule_1.SchedulerRegistry, Object])
76
76
  ], FetchService);
77
77
  exports.FetchService = FetchService;
78
78
  //# sourceMappingURL=fetch.service.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"fetch.service.js","sourceRoot":"","sources":["../../src/indexer/fetch.service.ts"],"names":[],"mappings":";AAAA,8DAA8D;AAC9D,mCAAmC;;;;;;;;;;;;;;;AAEnC,2CAAoD;AACpD,yDAAsD;AACtD,+CAAqD;AACrD,4DAIgC;AAChC,gDAM0B;AAE1B,0CAKqB;AAErB,6CAAyD;AACzD,uDAAmD;AACnD,2EAAuE;AAEvE,MAAM,mBAAmB,GAAG,IAAI,CAAC,CAAC,IAAI;AAEtC,MAAM,gBAAgB,GAAG,GAAG,CAAC;AAGtB,IAAM,YAAY,GAAlB,MAAM,YAAa,SAAQ,4BAIjC;IAEW;IADV,YACU,UAA8B,EACtC,UAAsB,EACK,cAA8B,EAEzD,eAAyC,EACzC,iBAA4C,EAC5C,wBAAkD,EAClD,YAA2B,EAC3B,iBAAoC,EACpC,iBAAoC;QAEpC,KAAK,CACH,UAAU,EACV,cAAc,EACd,eAAe,EACf,iBAAiB,EACjB,YAAY,EACZ,iBAAiB,EACjB,wBAAwB,EACxB,iBAAiB,CAClB,CAAC;QApBM,eAAU,GAAV,UAAU,CAAoB;IAqBxC,CAAC;IAED,IAAI,GAAG;QACL,OAAO,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC;IACnC,CAAC;IAES,KAAK,CAAC,kBAAkB;QAChC,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC,oBAAoB,EAAE,CAAC;QACpD,OAAO,IAAA,gCAAqB,EAAC,KAAK,CAAC,CAAC;IACtC,CAAC;IAES,KAAK,CAAC,aAAa;QAC3B,MAAM,WAAW,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,eAAe,EAAE,CAAC,EAAE,EAAE,CAAC;QAC9D,OAAO,WAAW,CAAC,KAAK,CAAC;IAC3B,CAAC;IAES,KAAK,CAAC,UAAU;QACxB,OAAO,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,cAAc,EAAE,CAAC,CAAC;IACpD,CAAC;IAES,KAAK,CAAC,mBAAmB;QACjC,MAAM,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;IACjE,CAAC;IAED,4DAA4D;IAClD,KAAK,CAAC,gBAAgB;QAC9B,MAAM,aAAa,GAAG,IAAA,uBAAY,EAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,gBAAgB,CAAC;QACpE,OAAO,IAAI,CAAC,GAAG,CAAC,mBAAmB,EAAE,aAAa,CAAC,CAAC;IACtD,CAAC;IAES,UAAU,CAAC,WAAiC;QACpD,OAAO,IAAA,sBAAU,EAAC,WAAW,EAAE,4BAAU,EAAE,qCAAmB,CAAC,KAAK,CAAC,CAAC;IACxE,CAAC;IACS,KAAK,CAAC,WAAW;QACzB,4CAA4C;QAC5C,OAAO,OAAO,CAAC,OAAO,EAAE,CAAC;IAC3B,CAAC;CACF,CAAA;AAhEY,YAAY;IADxB,IAAA,mBAAU,GAAE;IASR,WAAA,IAAA,eAAM,EAAC,iBAAiB,CAAC,CAAA;IACzB,WAAA,IAAA,eAAM,EAAC,kBAAkB,CAAC,CAAA;qCAHP,6BAAkB;QAC1B,sBAAU;QACqB,gCAAc,UAGtC,sCAAyB;QAClB,oDAAwB;QACpC,6BAAa;QACR,4BAAiB;QACjB,6BAAiB;GAf3B,YAAY,CAgExB;AAhEY,oCAAY","sourcesContent":["// Copyright 2020-2024 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 { SchedulerRegistry } from '@nestjs/schedule';\nimport {\n isCustomDs,\n AlgorandHandlerKind,\n AlgorandDataSource,\n} from '@subql/common-algorand';\nimport {\n NodeConfig,\n BaseFetchService,\n getModulos,\n Header,\n StoreCacheService,\n} from '@subql/node-core';\nimport { AlgorandBlock } from '@subql/types-algorand';\nimport {\n AlgorandApi,\n AlgorandApiService,\n algorandBlockToHeader,\n calcInterval,\n} from '../algorand';\nimport { IAlgorandBlockDispatcher } from './blockDispatcher';\nimport { AlgorandDictionaryService } from './dictionary';\nimport { ProjectService } from './project.service';\nimport { UnfinalizedBlocksService } from './unfinalizedBlocks.service';\n\nconst BLOCK_TIME_VARIANCE = 5000; //ms\n\nconst INTERVAL_PERCENT = 0.9;\n\n@Injectable()\nexport class FetchService extends BaseFetchService<\n AlgorandDataSource,\n IAlgorandBlockDispatcher,\n AlgorandBlock\n> {\n constructor(\n private apiService: AlgorandApiService,\n nodeConfig: NodeConfig,\n @Inject('IProjectService') projectService: ProjectService,\n @Inject('IBlockDispatcher')\n blockDispatcher: IAlgorandBlockDispatcher,\n dictionaryService: AlgorandDictionaryService,\n unfinalizedBlocksService: UnfinalizedBlocksService,\n eventEmitter: EventEmitter2,\n schedulerRegistry: SchedulerRegistry,\n storeCacheService: StoreCacheService,\n ) {\n super(\n nodeConfig,\n projectService,\n blockDispatcher,\n dictionaryService,\n eventEmitter,\n schedulerRegistry,\n unfinalizedBlocksService,\n storeCacheService,\n );\n }\n\n get api(): AlgorandApi {\n return this.apiService.unsafeApi;\n }\n\n protected async getFinalizedHeader(): Promise<Header> {\n const block = await this.api.getLatestBlockHeader();\n return algorandBlockToHeader(block);\n }\n\n protected async getBestHeight(): Promise<number> {\n const checkHealth = await this.api.api.makeHealthCheck().do();\n return checkHealth.round;\n }\n\n protected async getChainId(): Promise<string> {\n return Promise.resolve(this.api.getGenesisHash());\n }\n\n protected async initBlockDispatcher(): Promise<void> {\n await this.blockDispatcher.init(this.resetForNewDs.bind(this));\n }\n\n // eslint-disable-next-line @typescript-eslint/require-await\n protected async getChainInterval(): Promise<number> {\n const chainInterval = calcInterval(this.api.api) * INTERVAL_PERCENT;\n return Math.min(BLOCK_TIME_VARIANCE, chainInterval);\n }\n\n protected getModulos(dataSources: AlgorandDataSource[]): number[] {\n return getModulos(dataSources, isCustomDs, AlgorandHandlerKind.Block);\n }\n protected async preLoopHook(): Promise<void> {\n // Algorand doesn't need to do anything here\n return Promise.resolve();\n }\n}\n"]}
1
+ {"version":3,"file":"fetch.service.js","sourceRoot":"","sources":["../../src/indexer/fetch.service.ts"],"names":[],"mappings":";AAAA,8DAA8D;AAC9D,mCAAmC;;;;;;;;;;;;;;;AAEnC,2CAAoD;AACpD,yDAAsD;AACtD,+CAAqD;AACrD,4DAIgC;AAChC,gDAM0B;AAE1B,0CAKqB;AAErB,6CAAyD;AACzD,uDAAmD;AACnD,2EAAuE;AAEvE,MAAM,mBAAmB,GAAG,IAAI,CAAC,CAAC,IAAI;AAEtC,MAAM,gBAAgB,GAAG,GAAG,CAAC;AAGtB,IAAM,YAAY,GAAlB,MAAM,YAAa,SAAQ,4BAIjC;IAEW;IADV,YACU,UAA8B,EACtC,UAAsB,EACK,cAA8B,EAEzD,eAAyC,EACzC,iBAA4C,EAC5C,wBAAkD,EAClD,YAA2B,EAC3B,iBAAoC,EACL,kBAAuC;QAEtE,KAAK,CACH,UAAU,EACV,cAAc,EACd,eAAe,EACf,iBAAiB,EACjB,YAAY,EACZ,iBAAiB,EACjB,wBAAwB,EACxB,kBAAkB,CACnB,CAAC;QApBM,eAAU,GAAV,UAAU,CAAoB;IAqBxC,CAAC;IAED,IAAI,GAAG;QACL,OAAO,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC;IACnC,CAAC;IAES,KAAK,CAAC,kBAAkB;QAChC,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC,oBAAoB,EAAE,CAAC;QACpD,OAAO,IAAA,gCAAqB,EAAC,KAAK,CAAC,CAAC;IACtC,CAAC;IAES,KAAK,CAAC,aAAa;QAC3B,MAAM,WAAW,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,eAAe,EAAE,CAAC,EAAE,EAAE,CAAC;QAC9D,OAAO,WAAW,CAAC,KAAK,CAAC;IAC3B,CAAC;IAES,KAAK,CAAC,UAAU;QACxB,OAAO,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,cAAc,EAAE,CAAC,CAAC;IACpD,CAAC;IAES,KAAK,CAAC,mBAAmB;QACjC,MAAM,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;IACjE,CAAC;IAED,4DAA4D;IAClD,KAAK,CAAC,gBAAgB;QAC9B,MAAM,aAAa,GAAG,IAAA,uBAAY,EAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,gBAAgB,CAAC;QACpE,OAAO,IAAI,CAAC,GAAG,CAAC,mBAAmB,EAAE,aAAa,CAAC,CAAC;IACtD,CAAC;IAES,UAAU,CAAC,WAAiC;QACpD,OAAO,IAAA,sBAAU,EAAC,WAAW,EAAE,4BAAU,EAAE,qCAAmB,CAAC,KAAK,CAAC,CAAC;IACxE,CAAC;IACS,KAAK,CAAC,WAAW;QACzB,4CAA4C;QAC5C,OAAO,OAAO,CAAC,OAAO,EAAE,CAAC;IAC3B,CAAC;CACF,CAAA;AAhEY,YAAY;IADxB,IAAA,mBAAU,GAAE;IASR,WAAA,IAAA,eAAM,EAAC,iBAAiB,CAAC,CAAA;IACzB,WAAA,IAAA,eAAM,EAAC,kBAAkB,CAAC,CAAA;IAM1B,WAAA,IAAA,eAAM,EAAC,qBAAqB,CAAC,CAAA;qCATV,6BAAkB;QAC1B,sBAAU;QACqB,gCAAc,UAGtC,sCAAyB;QAClB,oDAAwB;QACpC,6BAAa;QACR,4BAAiB;GAd3B,YAAY,CAgExB;AAhEY,oCAAY","sourcesContent":["// Copyright 2020-2024 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 { SchedulerRegistry } from '@nestjs/schedule';\nimport {\n isCustomDs,\n AlgorandHandlerKind,\n AlgorandDataSource,\n} from '@subql/common-algorand';\nimport {\n NodeConfig,\n BaseFetchService,\n getModulos,\n Header,\n IStoreModelProvider,\n} from '@subql/node-core';\nimport { AlgorandBlock } from '@subql/types-algorand';\nimport {\n AlgorandApi,\n AlgorandApiService,\n algorandBlockToHeader,\n calcInterval,\n} from '../algorand';\nimport { IAlgorandBlockDispatcher } from './blockDispatcher';\nimport { AlgorandDictionaryService } from './dictionary';\nimport { ProjectService } from './project.service';\nimport { UnfinalizedBlocksService } from './unfinalizedBlocks.service';\n\nconst BLOCK_TIME_VARIANCE = 5000; //ms\n\nconst INTERVAL_PERCENT = 0.9;\n\n@Injectable()\nexport class FetchService extends BaseFetchService<\n AlgorandDataSource,\n IAlgorandBlockDispatcher,\n AlgorandBlock\n> {\n constructor(\n private apiService: AlgorandApiService,\n nodeConfig: NodeConfig,\n @Inject('IProjectService') projectService: ProjectService,\n @Inject('IBlockDispatcher')\n blockDispatcher: IAlgorandBlockDispatcher,\n dictionaryService: AlgorandDictionaryService,\n unfinalizedBlocksService: UnfinalizedBlocksService,\n eventEmitter: EventEmitter2,\n schedulerRegistry: SchedulerRegistry,\n @Inject('IStoreModelProvider') storeModelProvider: IStoreModelProvider,\n ) {\n super(\n nodeConfig,\n projectService,\n blockDispatcher,\n dictionaryService,\n eventEmitter,\n schedulerRegistry,\n unfinalizedBlocksService,\n storeModelProvider,\n );\n }\n\n get api(): AlgorandApi {\n return this.apiService.unsafeApi;\n }\n\n protected async getFinalizedHeader(): Promise<Header> {\n const block = await this.api.getLatestBlockHeader();\n return algorandBlockToHeader(block);\n }\n\n protected async getBestHeight(): Promise<number> {\n const checkHealth = await this.api.api.makeHealthCheck().do();\n return checkHealth.round;\n }\n\n protected async getChainId(): Promise<string> {\n return Promise.resolve(this.api.getGenesisHash());\n }\n\n protected async initBlockDispatcher(): Promise<void> {\n await this.blockDispatcher.init(this.resetForNewDs.bind(this));\n }\n\n // eslint-disable-next-line @typescript-eslint/require-await\n protected async getChainInterval(): Promise<number> {\n const chainInterval = calcInterval(this.api.api) * INTERVAL_PERCENT;\n return Math.min(BLOCK_TIME_VARIANCE, chainInterval);\n }\n\n protected getModulos(dataSources: AlgorandDataSource[]): number[] {\n return getModulos(dataSources, isCustomDs, AlgorandHandlerKind.Block);\n }\n protected async preLoopHook(): Promise<void> {\n // Algorand doesn't need to do anything here\n return Promise.resolve();\n }\n}\n"]}
@@ -1,10 +1,10 @@
1
- import { BaseUnfinalizedBlocksService, Header, NodeConfig, StoreCacheService } from '@subql/node-core';
1
+ import { BaseUnfinalizedBlocksService, Header, NodeConfig, IStoreModelProvider } from '@subql/node-core';
2
2
  import { AlgorandApiService } from '../algorand';
3
3
  import { BlockContent } from './types';
4
4
  export declare class UnfinalizedBlocksService extends BaseUnfinalizedBlocksService<BlockContent> {
5
5
  private readonly apiService;
6
- constructor(apiService: AlgorandApiService, nodeConfig: NodeConfig, storeCache: StoreCacheService);
6
+ constructor(apiService: AlgorandApiService, nodeConfig: NodeConfig, storeModelProvider: IStoreModelProvider);
7
7
  protected getFinalizedHead(): Promise<Header>;
8
8
  protected getHeaderForHash(hash: string): Promise<Header>;
9
- protected getHeaderForHeight(height: number): Promise<Header>;
9
+ getHeaderForHeight(height: number): Promise<Header>;
10
10
  }
@@ -10,6 +10,9 @@ var __decorate = (this && this.__decorate) || function (decorators, target, key,
10
10
  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
+ var __param = (this && this.__param) || function (paramIndex, decorator) {
14
+ return function (target, key) { decorator(target, key, paramIndex); }
15
+ };
13
16
  Object.defineProperty(exports, "__esModule", { value: true });
14
17
  exports.UnfinalizedBlocksService = void 0;
15
18
  const common_1 = require("@nestjs/common");
@@ -17,8 +20,8 @@ const node_core_1 = require("@subql/node-core");
17
20
  const algorand_1 = require("../algorand");
18
21
  let UnfinalizedBlocksService = class UnfinalizedBlocksService extends node_core_1.BaseUnfinalizedBlocksService {
19
22
  apiService;
20
- constructor(apiService, nodeConfig, storeCache) {
21
- super(nodeConfig, storeCache);
23
+ constructor(apiService, nodeConfig, storeModelProvider) {
24
+ super(nodeConfig, storeModelProvider);
22
25
  this.apiService = apiService;
23
26
  }
24
27
  async getFinalizedHead() {
@@ -53,9 +56,9 @@ __decorate([
53
56
  ], UnfinalizedBlocksService.prototype, "getHeaderForHeight", null);
54
57
  UnfinalizedBlocksService = __decorate([
55
58
  (0, common_1.Injectable)(),
59
+ __param(2, (0, common_1.Inject)('IStoreModelProvider')),
56
60
  __metadata("design:paramtypes", [algorand_1.AlgorandApiService,
57
- node_core_1.NodeConfig,
58
- node_core_1.StoreCacheService])
61
+ node_core_1.NodeConfig, Object])
59
62
  ], UnfinalizedBlocksService);
60
63
  exports.UnfinalizedBlocksService = UnfinalizedBlocksService;
61
64
  //# sourceMappingURL=unfinalizedBlocks.service.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"unfinalizedBlocks.service.js","sourceRoot":"","sources":["../../src/indexer/unfinalizedBlocks.service.ts"],"names":[],"mappings":";AAAA,8DAA8D;AAC9D,mCAAmC;;;;;;;;;;;;AAEnC,2CAA4C;AAC5C,gDAM0B;AAC1B,0CAAwE;AAIjE,IAAM,wBAAwB,GAA9B,MAAM,wBAAyB,SAAQ,wCAA0C;IAEnE;IADnB,YACmB,UAA8B,EAC/C,UAAsB,EACtB,UAA6B;QAE7B,KAAK,CAAC,UAAU,EAAE,UAAU,CAAC,CAAC;QAJb,eAAU,GAAV,UAAU,CAAoB;IAKjD,CAAC;IAGe,AAAN,KAAK,CAAC,gBAAgB;QAC9B,MAAM,WAAW,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,GAAG,CAAC,eAAe,EAAE,CAAC,EAAE,EAAE,CAAC;QACzE,MAAM,YAAY,GAAG,WAAW,CAAC,KAAK,CAAC;QACvC,OAAO,IAAI,CAAC,kBAAkB,CAAC,YAAY,CAAC,CAAC;IAC/C,CAAC;IAGe,AAAN,KAAK,CAAC,gBAAgB,CAAC,IAAY;QAC3C,OAAO,IAAI,CAAC,kBAAkB,CAAC,QAAQ,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,CAAC;IACrD,CAAC;IAGe,AAAN,KAAK,CAAC,kBAAkB,CAAC,MAAc;QAC/C,OAAO,IAAA,gCAAqB,EAC1B,MAAM,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,aAAa,CAAC,MAAM,CAAC,CAChD,CAAC;IACJ,CAAC;CACF,CAAA;AAjBiB;IADf,IAAA,0BAAc,GAAE;;;;gEAKhB;AAGe;IADf,IAAA,0BAAc,GAAE;;;;gEAGhB;AAGe;IADf,IAAA,0BAAc,GAAE;;;;kEAKhB;AA1BU,wBAAwB;IADpC,IAAA,mBAAU,GAAE;qCAGoB,6BAAkB;QACnC,sBAAU;QACV,6BAAiB;GAJpB,wBAAwB,CA2BpC;AA3BY,4DAAwB","sourcesContent":["// Copyright 2020-2024 SubQuery Pte Ltd authors & contributors\n// SPDX-License-Identifier: GPL-3.0\n\nimport { Injectable } from '@nestjs/common';\nimport {\n BaseUnfinalizedBlocksService,\n Header,\n NodeConfig,\n StoreCacheService,\n mainThreadOnly,\n} from '@subql/node-core';\nimport { AlgorandApiService, algorandBlockToHeader } from '../algorand';\nimport { BlockContent } from './types';\n\n@Injectable()\nexport class UnfinalizedBlocksService extends BaseUnfinalizedBlocksService<BlockContent> {\n constructor(\n private readonly apiService: AlgorandApiService,\n nodeConfig: NodeConfig,\n storeCache: StoreCacheService,\n ) {\n super(nodeConfig, storeCache);\n }\n\n @mainThreadOnly()\n protected async getFinalizedHead(): Promise<Header> {\n const checkHealth = await this.apiService.api.api.makeHealthCheck().do();\n const latestHeight = checkHealth.round;\n return this.getHeaderForHeight(latestHeight);\n }\n\n @mainThreadOnly()\n protected async getHeaderForHash(hash: string): Promise<Header> {\n return this.getHeaderForHeight(parseInt(hash, 10));\n }\n\n @mainThreadOnly()\n protected async getHeaderForHeight(height: number): Promise<Header> {\n return algorandBlockToHeader(\n await this.apiService.api.getHeaderOnly(height),\n );\n }\n}\n"]}
1
+ {"version":3,"file":"unfinalizedBlocks.service.js","sourceRoot":"","sources":["../../src/indexer/unfinalizedBlocks.service.ts"],"names":[],"mappings":";AAAA,8DAA8D;AAC9D,mCAAmC;;;;;;;;;;;;;;;AAEnC,2CAAoD;AACpD,gDAM0B;AAC1B,0CAAwE;AAIjE,IAAM,wBAAwB,GAA9B,MAAM,wBAAyB,SAAQ,wCAA0C;IAEnE;IADnB,YACmB,UAA8B,EAC/C,UAAsB,EACS,kBAAuC;QAEtE,KAAK,CAAC,UAAU,EAAE,kBAAkB,CAAC,CAAC;QAJrB,eAAU,GAAV,UAAU,CAAoB;IAKjD,CAAC;IAGe,AAAN,KAAK,CAAC,gBAAgB;QAC9B,MAAM,WAAW,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,GAAG,CAAC,eAAe,EAAE,CAAC,EAAE,EAAE,CAAC;QACzE,MAAM,YAAY,GAAG,WAAW,CAAC,KAAK,CAAC;QACvC,OAAO,IAAI,CAAC,kBAAkB,CAAC,YAAY,CAAC,CAAC;IAC/C,CAAC;IAGe,AAAN,KAAK,CAAC,gBAAgB,CAAC,IAAY;QAC3C,OAAO,IAAI,CAAC,kBAAkB,CAAC,QAAQ,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,CAAC;IACrD,CAAC;IAGK,AAAN,KAAK,CAAC,kBAAkB,CAAC,MAAc;QACrC,OAAO,IAAA,gCAAqB,EAC1B,MAAM,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,aAAa,CAAC,MAAM,CAAC,CAChD,CAAC;IACJ,CAAC;CACF,CAAA;AAjBiB;IADf,IAAA,0BAAc,GAAE;;;;gEAKhB;AAGe;IADf,IAAA,0BAAc,GAAE;;;;gEAGhB;AAGK;IADL,IAAA,0BAAc,GAAE;;;;kEAKhB;AA1BU,wBAAwB;IADpC,IAAA,mBAAU,GAAE;IAKR,WAAA,IAAA,eAAM,EAAC,qBAAqB,CAAC,CAAA;qCAFD,6BAAkB;QACnC,sBAAU;GAHb,wBAAwB,CA2BpC;AA3BY,4DAAwB","sourcesContent":["// Copyright 2020-2024 SubQuery Pte Ltd authors & contributors\n// SPDX-License-Identifier: GPL-3.0\n\nimport { Inject, Injectable } from '@nestjs/common';\nimport {\n BaseUnfinalizedBlocksService,\n Header,\n NodeConfig,\n IStoreModelProvider,\n mainThreadOnly,\n} from '@subql/node-core';\nimport { AlgorandApiService, algorandBlockToHeader } from '../algorand';\nimport { BlockContent } from './types';\n\n@Injectable()\nexport class UnfinalizedBlocksService extends BaseUnfinalizedBlocksService<BlockContent> {\n constructor(\n private readonly apiService: AlgorandApiService,\n nodeConfig: NodeConfig,\n @Inject('IStoreModelProvider') storeModelProvider: IStoreModelProvider,\n ) {\n super(nodeConfig, storeModelProvider);\n }\n\n @mainThreadOnly()\n protected async getFinalizedHead(): Promise<Header> {\n const checkHealth = await this.apiService.api.api.makeHealthCheck().do();\n const latestHeight = checkHealth.round;\n return this.getHeaderForHeight(latestHeight);\n }\n\n @mainThreadOnly()\n protected async getHeaderForHash(hash: string): Promise<Header> {\n return this.getHeaderForHeight(parseInt(hash, 10));\n }\n\n @mainThreadOnly()\n async getHeaderForHeight(height: number): Promise<Header> {\n return algorandBlockToHeader(\n await this.apiService.api.getHeaderOnly(height),\n );\n }\n}\n"]}
@@ -28,11 +28,7 @@ WorkerFetchModule = __decorate([
28
28
  indexer_manager_1.IndexerManager,
29
29
  {
30
30
  provide: algorand_1.AlgorandApiService,
31
- useFactory: async (project, connectionPoolService, eventEmitter) => {
32
- const apiService = new algorand_1.AlgorandApiService(project, connectionPoolService, eventEmitter);
33
- await apiService.init();
34
- return apiService;
35
- },
31
+ useFactory: algorand_1.AlgorandApiService.init,
36
32
  inject: ['ISubqueryProject', node_core_1.ConnectionPoolService, event_emitter_1.EventEmitter2],
37
33
  },
38
34
  ds_processor_service_1.DsProcessorService,
@@ -1 +1 @@
1
- {"version":3,"file":"worker-fetch.module.js","sourceRoot":"","sources":["../../../src/indexer/worker/worker-fetch.module.ts"],"names":[],"mappings":";AAAA,8DAA8D;AAC9D,mCAAmC;;;;;;;;;AAEnC,2CAAwC;AACxC,yDAAsD;AACtD,gDAK0B;AAC1B,6CAA2E;AAE3E,kEAA6D;AAC7D,8DAAyD;AACzD,wDAAoD;AACpD,wDAAoD;AACpD,4EAAwE;AACxE,qDAAiD;AAyC1C,IAAM,iBAAiB,GAAvB,MAAM,iBAAiB;CAAG,CAAA;AAApB,iBAAiB;IAvC7B,IAAA,eAAM,EAAC;QACN,OAAO,EAAE,CAAC,4BAAgB,CAAC;QAC3B,SAAS,EAAE;YACT,gCAAc;YACd;gBACE,OAAO,EAAE,6BAAkB;gBAC3B,UAAU,EAAE,KAAK,EACf,OAAwB,EACxB,qBAAmE,EACnE,YAA2B,EAC3B,EAAE;oBACF,MAAM,UAAU,GAAG,IAAI,6BAAkB,CACvC,OAAO,EACP,qBAAqB,EACrB,YAAY,CACb,CAAC;oBACF,MAAM,UAAU,CAAC,IAAI,EAAE,CAAC;oBACxB,OAAO,UAAU,CAAC;gBACpB,CAAC;gBACD,MAAM,EAAE,CAAC,kBAAkB,EAAE,iCAAqB,EAAE,6BAAa,CAAC;aACnE;YACD,yCAAkB;YAClB;gBACE,OAAO,EAAE,qCAAgB;gBACzB,UAAU,EAAE,GAAG,EAAE,CAAC,IAAI,kCAAsB,CAAE,MAAc,CAAC,IAAI,CAAC;aACnE;YACD;gBACE,OAAO,EAAE,iBAAiB;gBAC1B,QAAQ,EAAE,gCAAc;aACzB;YACD;gBACE,OAAO,EAAE,oDAAwB;gBACjC,UAAU,EAAE,GAAG,EAAE,CACf,IAAI,0CAA8B,CAAE,MAAc,CAAC,IAAI,CAAC;aAC3D;YACD,8BAAa;SACd;QACD,OAAO,EAAE,EAAE;KACZ,CAAC;GACW,iBAAiB,CAAG;AAApB,8CAAiB","sourcesContent":["// Copyright 2020-2024 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 ConnectionPoolService,\n WorkerDynamicDsService,\n WorkerUnfinalizedBlocksService,\n WorkerCoreModule,\n} from '@subql/node-core';\nimport { AlgorandApiService, AlgorandApiConnection } from '../../algorand';\nimport { SubqueryProject } from '../../configure/SubqueryProject';\nimport { DsProcessorService } from '../ds-processor.service';\nimport { DynamicDsService } from '../dynamic-ds.service';\nimport { IndexerManager } from '../indexer.manager';\nimport { ProjectService } from '../project.service';\nimport { UnfinalizedBlocksService } from '../unfinalizedBlocks.service';\nimport { WorkerService } from './worker.service';\n\n@Module({\n imports: [WorkerCoreModule],\n providers: [\n IndexerManager,\n {\n provide: AlgorandApiService,\n useFactory: async (\n project: SubqueryProject,\n connectionPoolService: ConnectionPoolService<AlgorandApiConnection>,\n eventEmitter: EventEmitter2,\n ) => {\n const apiService = new AlgorandApiService(\n project,\n connectionPoolService,\n eventEmitter,\n );\n await apiService.init();\n return apiService;\n },\n inject: ['ISubqueryProject', ConnectionPoolService, EventEmitter2],\n },\n DsProcessorService,\n {\n provide: DynamicDsService,\n useFactory: () => new WorkerDynamicDsService((global as any).host),\n },\n {\n provide: 'IProjectService',\n useClass: ProjectService,\n },\n {\n provide: UnfinalizedBlocksService,\n useFactory: () =>\n new WorkerUnfinalizedBlocksService((global as any).host),\n },\n WorkerService,\n ],\n exports: [],\n})\nexport class WorkerFetchModule {}\n"]}
1
+ {"version":3,"file":"worker-fetch.module.js","sourceRoot":"","sources":["../../../src/indexer/worker/worker-fetch.module.ts"],"names":[],"mappings":";AAAA,8DAA8D;AAC9D,mCAAmC;;;;;;;;;AAEnC,2CAAwC;AACxC,yDAAsD;AACtD,gDAK0B;AAC1B,6CAA2E;AAE3E,kEAA6D;AAC7D,8DAAyD;AACzD,wDAAoD;AACpD,wDAAoD;AACpD,4EAAwE;AACxE,qDAAiD;AA6B1C,IAAM,iBAAiB,GAAvB,MAAM,iBAAiB;CAAG,CAAA;AAApB,iBAAiB;IA3B7B,IAAA,eAAM,EAAC;QACN,OAAO,EAAE,CAAC,4BAAgB,CAAC;QAC3B,SAAS,EAAE;YACT,gCAAc;YACd;gBACE,OAAO,EAAE,6BAAkB;gBAC3B,UAAU,EAAE,6BAAkB,CAAC,IAAI;gBACnC,MAAM,EAAE,CAAC,kBAAkB,EAAE,iCAAqB,EAAE,6BAAa,CAAC;aACnE;YACD,yCAAkB;YAClB;gBACE,OAAO,EAAE,qCAAgB;gBACzB,UAAU,EAAE,GAAG,EAAE,CAAC,IAAI,kCAAsB,CAAE,MAAc,CAAC,IAAI,CAAC;aACnE;YACD;gBACE,OAAO,EAAE,iBAAiB;gBAC1B,QAAQ,EAAE,gCAAc;aACzB;YACD;gBACE,OAAO,EAAE,oDAAwB;gBACjC,UAAU,EAAE,GAAG,EAAE,CACf,IAAI,0CAA8B,CAAE,MAAc,CAAC,IAAI,CAAC;aAC3D;YACD,8BAAa;SACd;QACD,OAAO,EAAE,EAAE;KACZ,CAAC;GACW,iBAAiB,CAAG;AAApB,8CAAiB","sourcesContent":["// Copyright 2020-2024 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 ConnectionPoolService,\n WorkerDynamicDsService,\n WorkerUnfinalizedBlocksService,\n WorkerCoreModule,\n} from '@subql/node-core';\nimport { AlgorandApiService, AlgorandApiConnection } from '../../algorand';\nimport { SubqueryProject } from '../../configure/SubqueryProject';\nimport { DsProcessorService } from '../ds-processor.service';\nimport { DynamicDsService } from '../dynamic-ds.service';\nimport { IndexerManager } from '../indexer.manager';\nimport { ProjectService } from '../project.service';\nimport { UnfinalizedBlocksService } from '../unfinalizedBlocks.service';\nimport { WorkerService } from './worker.service';\n\n@Module({\n imports: [WorkerCoreModule],\n providers: [\n IndexerManager,\n {\n provide: AlgorandApiService,\n useFactory: AlgorandApiService.init,\n inject: ['ISubqueryProject', ConnectionPoolService, EventEmitter2],\n },\n DsProcessorService,\n {\n provide: DynamicDsService,\n useFactory: () => new WorkerDynamicDsService((global as any).host),\n },\n {\n provide: 'IProjectService',\n useClass: ProjectService,\n },\n {\n provide: UnfinalizedBlocksService,\n useFactory: () =>\n new WorkerUnfinalizedBlocksService((global as any).host),\n },\n WorkerService,\n ],\n exports: [],\n})\nexport class WorkerFetchModule {}\n"]}