@subql/node-stellar 4.3.0 → 4.3.1-1

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 (108) hide show
  1. package/CHANGELOG.md +5 -0
  2. package/dist/.tsbuildinfo +1 -1
  3. package/dist/app.module.js +1 -1
  4. package/dist/app.module.js.map +1 -1
  5. package/dist/configure/SubqueryProject.js +1 -1
  6. package/dist/configure/SubqueryProject.js.map +1 -1
  7. package/dist/configure/configure.module.js +1 -1
  8. package/dist/configure/configure.module.js.map +1 -1
  9. package/dist/indexer/blockDispatcher/block-dispatcher.service.js +1 -1
  10. package/dist/indexer/blockDispatcher/block-dispatcher.service.js.map +1 -1
  11. package/dist/indexer/blockDispatcher/index.js +1 -1
  12. package/dist/indexer/blockDispatcher/index.js.map +1 -1
  13. package/dist/indexer/blockDispatcher/stellar-block-dispatcher.js +1 -1
  14. package/dist/indexer/blockDispatcher/stellar-block-dispatcher.js.map +1 -1
  15. package/dist/indexer/blockDispatcher/worker-block-dispatcher.service.js +1 -1
  16. package/dist/indexer/blockDispatcher/worker-block-dispatcher.service.js.map +1 -1
  17. package/dist/indexer/dictionary/index.js +1 -1
  18. package/dist/indexer/dictionary/index.js.map +1 -1
  19. package/dist/indexer/dictionary/stellarDictionary.service.js +1 -1
  20. package/dist/indexer/dictionary/stellarDictionary.service.js.map +1 -1
  21. package/dist/indexer/dictionary/v1/index.js +1 -1
  22. package/dist/indexer/dictionary/v1/index.js.map +1 -1
  23. package/dist/indexer/dictionary/v1/stellarDictionaryV1.js +1 -1
  24. package/dist/indexer/dictionary/v1/stellarDictionaryV1.js.map +1 -1
  25. package/dist/indexer/dictionary/v1/stellarDictionaryV1.spec.js +1 -1
  26. package/dist/indexer/dictionary/v1/stellarDictionaryV1.spec.js.map +1 -1
  27. package/dist/indexer/ds-processor.service.js +1 -1
  28. package/dist/indexer/ds-processor.service.js.map +1 -1
  29. package/dist/indexer/dynamic-ds.service.js +1 -1
  30. package/dist/indexer/dynamic-ds.service.js.map +1 -1
  31. package/dist/indexer/fetch.module.js +1 -1
  32. package/dist/indexer/fetch.module.js.map +1 -1
  33. package/dist/indexer/fetch.service.js +1 -1
  34. package/dist/indexer/fetch.service.js.map +1 -1
  35. package/dist/indexer/indexer.manager.d.ts +1 -1
  36. package/dist/indexer/indexer.manager.js +2 -2
  37. package/dist/indexer/indexer.manager.js.map +1 -1
  38. package/dist/indexer/project.service.js +1 -1
  39. package/dist/indexer/project.service.js.map +1 -1
  40. package/dist/indexer/types.js +1 -1
  41. package/dist/indexer/types.js.map +1 -1
  42. package/dist/indexer/unfinalizedBlocks.service.js +1 -1
  43. package/dist/indexer/unfinalizedBlocks.service.js.map +1 -1
  44. package/dist/indexer/worker/worker-fetch.module.js +1 -1
  45. package/dist/indexer/worker/worker-fetch.module.js.map +1 -1
  46. package/dist/indexer/worker/worker.js +1 -1
  47. package/dist/indexer/worker/worker.js.map +1 -1
  48. package/dist/indexer/worker/worker.module.js +1 -1
  49. package/dist/indexer/worker/worker.module.js.map +1 -1
  50. package/dist/indexer/worker/worker.service.js +1 -1
  51. package/dist/indexer/worker/worker.service.js.map +1 -1
  52. package/dist/init.js +1 -1
  53. package/dist/init.js.map +1 -1
  54. package/dist/main.js +1 -1
  55. package/dist/main.js.map +1 -1
  56. package/dist/stellar/api.connection.d.ts +1 -2
  57. package/dist/stellar/api.connection.js +3 -3
  58. package/dist/stellar/api.connection.js.map +1 -1
  59. package/dist/stellar/api.connection.spec.js +3 -4
  60. package/dist/stellar/api.connection.spec.js.map +1 -1
  61. package/dist/stellar/api.service.stellar.js +2 -2
  62. package/dist/stellar/api.service.stellar.js.map +1 -1
  63. package/dist/stellar/api.service.stellar.spec.js +1 -1
  64. package/dist/stellar/api.service.stellar.spec.js.map +1 -1
  65. package/dist/stellar/api.stellar.d.ts +1 -5
  66. package/dist/stellar/api.stellar.js +9 -21
  67. package/dist/stellar/api.stellar.js.map +1 -1
  68. package/dist/stellar/api.stellar.spec.js +2 -3
  69. package/dist/stellar/api.stellar.spec.js.map +1 -1
  70. package/dist/stellar/block.stellar.js +1 -1
  71. package/dist/stellar/block.stellar.js.map +1 -1
  72. package/dist/stellar/block.stellar.spec.js +1 -1
  73. package/dist/stellar/block.stellar.spec.js.map +1 -1
  74. package/dist/stellar/index.js +1 -1
  75. package/dist/stellar/index.js.map +1 -1
  76. package/dist/stellar/safe-api.d.ts +12 -13
  77. package/dist/stellar/safe-api.js +1 -1
  78. package/dist/stellar/safe-api.js.map +1 -1
  79. package/dist/stellar/soroban.server.d.ts +3 -3
  80. package/dist/stellar/soroban.server.js +2 -2
  81. package/dist/stellar/soroban.server.js.map +1 -1
  82. package/dist/stellar/soroban.server.spec.js +2 -2
  83. package/dist/stellar/soroban.server.spec.js.map +1 -1
  84. package/dist/stellar/stellar.server.js +2 -6
  85. package/dist/stellar/stellar.server.js.map +1 -1
  86. package/dist/stellar/utils.stellar.js +1 -1
  87. package/dist/stellar/utils.stellar.js.map +1 -1
  88. package/dist/subcommands/forceClean.init.js +1 -1
  89. package/dist/subcommands/forceClean.init.js.map +1 -1
  90. package/dist/subcommands/forceClean.module.js +1 -1
  91. package/dist/subcommands/forceClean.module.js.map +1 -1
  92. package/dist/subcommands/reindex.init.js +1 -1
  93. package/dist/subcommands/reindex.init.js.map +1 -1
  94. package/dist/subcommands/reindex.module.js +1 -1
  95. package/dist/subcommands/reindex.module.js.map +1 -1
  96. package/dist/subcommands/testing.init.js +1 -1
  97. package/dist/subcommands/testing.init.js.map +1 -1
  98. package/dist/subcommands/testing.module.js +1 -1
  99. package/dist/subcommands/testing.module.js.map +1 -1
  100. package/dist/subcommands/testing.service.js +1 -1
  101. package/dist/subcommands/testing.service.js.map +1 -1
  102. package/dist/utils/project.js +1 -1
  103. package/dist/utils/project.js.map +1 -1
  104. package/dist/utils/string.js +1 -1
  105. package/dist/utils/string.js.map +1 -1
  106. package/dist/yargs.js +1 -1
  107. package/dist/yargs.js.map +1 -1
  108. package/package.json +6 -5
@@ -1,5 +1,5 @@
1
1
  "use strict";
2
- // Copyright 2020-2024 SubQuery Pte Ltd authors & contributors
2
+ // Copyright 2020-2025 SubQuery Pte Ltd authors & contributors
3
3
  // SPDX-License-Identifier: GPL-3.0
4
4
  var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
5
5
  var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
@@ -1 +1 @@
1
- {"version":3,"file":"project.service.js","sourceRoot":"","sources":["../../src/indexer/project.service.ts"],"names":[],"mappings":";AAAA,8DAA8D;AAC9D,mCAAmC;;;;;;;;;;;;;;;AAEnC,mDAA8C;AAC9C,2CAAoD;AACpD,yDAAsD;AAEtD,gDAS0B;AAE1B,oDAA+C;AAI/C,iEAA4D;AAC5D,6DAAwD;AACxD,2EAAuE;AAEvE,8DAA8D;AAC9D,MAAM,EAAE,OAAO,EAAE,cAAc,EAAE,GAAG,OAAO,CAAC,oBAAoB,CAAC,CAAC;AAG3D,IAAM,cAAc,GAApB,MAAM,cAAe,SAAQ,8BAGnC;IACW,cAAc,GAAG,cAAc,CAAC;IAE1C,YACE,kBAAsC,EACtC,UAAsB,EACsB,UAAsB,EAElE,cAA8B,EACa,SAAoB,EACnC,OAAwB,EAEpD,qBAA8D,EAChB,YAA0B,EACxE,UAAsB,EACtB,gBAAkC,EAClC,YAA2B,EAC3B,uBAAiD;QAEjD,KAAK,CACH,kBAAkB,EAClB,UAAU,EACV,UAAU,EACV,cAAc,EACd,SAAS,EACT,OAAO,EACP,qBAAqB,EACrB,YAAY,EACZ,UAAU,EACV,gBAAgB,EAChB,YAAY,EACZ,uBAAuB,CACxB,CAAC;IACJ,CAAC;IAGK,AAAN,KAAK,CAAC,IAAI,CAAC,WAAoB;QAC7B,OAAO,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;IACjC,CAAC;IAES,KAAK,CAAC,iBAAiB,CAAC,MAAc;QAC9C,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,GAAG;aAC9C,OAAO,EAAE;aACT,MAAM,CAAC,MAAM,CAAC;aACd,IAAI,EAAE,CAAC;QAEV,OAAO,IAAI,IAAI,CACZ,KAAmD,CAAC,SAAS,CAC/D,CAAC,CAAC,0CAA0C;IAC/C,CAAC;IAES,eAAe,CAAC,OAAwB;QAChD,+DAA+D;QAC/D,yCAAyC;IAC3C,CAAC;CACF,CAAA;AAnBO;IADL,IAAA,oBAAQ,GAAE;;;;0CAGV;AAzCU,cAAc;IAD1B,IAAA,mBAAU,GAAE;IAUR,WAAA,IAAA,eAAM,EAAC,6BAAY,CAAC,CAAC,CAAC,sBAAU,CAAC,CAAC,CAAC,MAAM,CAAC,CAAA;IAC1C,WAAA,IAAA,eAAM,EAAC,6BAAY,CAAC,CAAC,CAAC,0BAAc,CAAC,CAAC,CAAC,MAAM,CAAC,CAAA;IAE9C,WAAA,IAAA,eAAM,EAAC,6BAAY,CAAC,CAAC,CAAC,uBAAS,CAAC,CAAC,CAAC,MAAM,CAAC,CAAA;IACzC,WAAA,IAAA,eAAM,EAAC,kBAAkB,CAAC,CAAA;IAC1B,WAAA,IAAA,eAAM,EAAC,wBAAwB,CAAC,CAAA;IAEhC,WAAA,IAAA,eAAM,EAAC,6BAAY,CAAC,CAAC,CAAC,wBAAY,CAAC,CAAC,CAAC,MAAM,CAAC,CAAA;qCATzB,yCAAkB;QAC1B,sBAAU;QACkC,sBAAU;QAElD,0BAAc;QACwB,uBAAS,kBAIH,wBAAY;QAC5D,sBAAU;QACJ,qCAAgB;QACpB,6BAAa;QACF,oDAAwB;GApBxC,cAAc,CA0D1B;AA1DY,wCAAc","sourcesContent":["// Copyright 2020-2024 SubQuery Pte Ltd authors & contributors\n// SPDX-License-Identifier: GPL-3.0\n\nimport { isMainThread } from 'worker_threads';\nimport { Inject, Injectable } from '@nestjs/common';\nimport { EventEmitter2 } from '@nestjs/event-emitter';\nimport { Horizon } from '@stellar/stellar-sdk';\nimport {\n PoiService,\n PoiSyncService,\n BaseProjectService,\n StoreService,\n NodeConfig,\n ApiService,\n IProjectUpgradeService,\n profiler,\n} from '@subql/node-core';\nimport { StellarBlockWrapper, SubqlDatasource } from '@subql/types-stellar';\nimport { Sequelize } from '@subql/x-sequelize';\nimport { SubqueryProject } from '../configure/SubqueryProject';\nimport { StellarApi } from '../stellar';\nimport SafeStellarProvider from '../stellar/safe-api';\nimport { DsProcessorService } from './ds-processor.service';\nimport { DynamicDsService } from './dynamic-ds.service';\nimport { UnfinalizedBlocksService } from './unfinalizedBlocks.service';\n\n// eslint-disable-next-line @typescript-eslint/no-var-requires\nconst { version: packageVersion } = require('../../package.json');\n\n@Injectable()\nexport class ProjectService extends BaseProjectService<\n ApiService<StellarApi, SafeStellarProvider, StellarBlockWrapper[]>,\n SubqlDatasource\n> {\n protected packageVersion = packageVersion;\n\n constructor(\n dsProcessorService: DsProcessorService,\n apiService: ApiService,\n @Inject(isMainThread ? PoiService : 'Null') poiService: PoiService,\n @Inject(isMainThread ? PoiSyncService : 'Null')\n poiSyncService: PoiSyncService,\n @Inject(isMainThread ? Sequelize : 'Null') sequelize: Sequelize,\n @Inject('ISubqueryProject') project: SubqueryProject,\n @Inject('IProjectUpgradeService')\n projectUpgradeService: IProjectUpgradeService<SubqueryProject>,\n @Inject(isMainThread ? StoreService : 'Null') storeService: StoreService,\n nodeConfig: NodeConfig,\n dynamicDsService: DynamicDsService,\n eventEmitter: EventEmitter2,\n unfinalizedBlockService: UnfinalizedBlocksService,\n ) {\n super(\n dsProcessorService,\n apiService,\n poiService,\n poiSyncService,\n sequelize,\n project,\n projectUpgradeService,\n storeService,\n nodeConfig,\n dynamicDsService,\n eventEmitter,\n unfinalizedBlockService,\n );\n }\n\n @profiler()\n async init(startHeight?: number): Promise<void> {\n return super.init(startHeight);\n }\n\n protected async getBlockTimestamp(height: number): Promise<Date> {\n const block = await this.apiService.unsafeApi.api\n .ledgers()\n .ledger(height)\n .call();\n\n return new Date(\n (block as unknown as Horizon.ServerApi.LedgerRecord).closed_at,\n ); // TODO test and make sure its in MS not S\n }\n\n protected onProjectChange(project: SubqueryProject): void | Promise<void> {\n // TODO update this when implementing skipBlock feature for Eth\n // this.apiService.updateBlockFetching();\n }\n}\n"]}
1
+ {"version":3,"file":"project.service.js","sourceRoot":"","sources":["../../src/indexer/project.service.ts"],"names":[],"mappings":";AAAA,8DAA8D;AAC9D,mCAAmC;;;;;;;;;;;;;;;AAEnC,mDAA8C;AAC9C,2CAAoD;AACpD,yDAAsD;AAEtD,gDAS0B;AAE1B,oDAA+C;AAI/C,iEAA4D;AAC5D,6DAAwD;AACxD,2EAAuE;AAEvE,8DAA8D;AAC9D,MAAM,EAAE,OAAO,EAAE,cAAc,EAAE,GAAG,OAAO,CAAC,oBAAoB,CAAC,CAAC;AAG3D,IAAM,cAAc,GAApB,MAAM,cAAe,SAAQ,8BAGnC;IACW,cAAc,GAAG,cAAc,CAAC;IAE1C,YACE,kBAAsC,EACtC,UAAsB,EACsB,UAAsB,EAElE,cAA8B,EACa,SAAoB,EACnC,OAAwB,EAEpD,qBAA8D,EAChB,YAA0B,EACxE,UAAsB,EACtB,gBAAkC,EAClC,YAA2B,EAC3B,uBAAiD;QAEjD,KAAK,CACH,kBAAkB,EAClB,UAAU,EACV,UAAU,EACV,cAAc,EACd,SAAS,EACT,OAAO,EACP,qBAAqB,EACrB,YAAY,EACZ,UAAU,EACV,gBAAgB,EAChB,YAAY,EACZ,uBAAuB,CACxB,CAAC;IACJ,CAAC;IAGK,AAAN,KAAK,CAAC,IAAI,CAAC,WAAoB;QAC7B,OAAO,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;IACjC,CAAC;IAES,KAAK,CAAC,iBAAiB,CAAC,MAAc;QAC9C,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,GAAG;aAC9C,OAAO,EAAE;aACT,MAAM,CAAC,MAAM,CAAC;aACd,IAAI,EAAE,CAAC;QAEV,OAAO,IAAI,IAAI,CACZ,KAAmD,CAAC,SAAS,CAC/D,CAAC,CAAC,0CAA0C;IAC/C,CAAC;IAES,eAAe,CAAC,OAAwB;QAChD,+DAA+D;QAC/D,yCAAyC;IAC3C,CAAC;CACF,CAAA;AAnBO;IADL,IAAA,oBAAQ,GAAE;;;;0CAGV;AAzCU,cAAc;IAD1B,IAAA,mBAAU,GAAE;IAUR,WAAA,IAAA,eAAM,EAAC,6BAAY,CAAC,CAAC,CAAC,sBAAU,CAAC,CAAC,CAAC,MAAM,CAAC,CAAA;IAC1C,WAAA,IAAA,eAAM,EAAC,6BAAY,CAAC,CAAC,CAAC,0BAAc,CAAC,CAAC,CAAC,MAAM,CAAC,CAAA;IAE9C,WAAA,IAAA,eAAM,EAAC,6BAAY,CAAC,CAAC,CAAC,uBAAS,CAAC,CAAC,CAAC,MAAM,CAAC,CAAA;IACzC,WAAA,IAAA,eAAM,EAAC,kBAAkB,CAAC,CAAA;IAC1B,WAAA,IAAA,eAAM,EAAC,wBAAwB,CAAC,CAAA;IAEhC,WAAA,IAAA,eAAM,EAAC,6BAAY,CAAC,CAAC,CAAC,wBAAY,CAAC,CAAC,CAAC,MAAM,CAAC,CAAA;qCATzB,yCAAkB;QAC1B,sBAAU;QACkC,sBAAU;QAElD,0BAAc;QACwB,uBAAS,kBAIH,wBAAY;QAC5D,sBAAU;QACJ,qCAAgB;QACpB,6BAAa;QACF,oDAAwB;GApBxC,cAAc,CA0D1B;AA1DY,wCAAc","sourcesContent":["// Copyright 2020-2025 SubQuery Pte Ltd authors & contributors\n// SPDX-License-Identifier: GPL-3.0\n\nimport { isMainThread } from 'worker_threads';\nimport { Inject, Injectable } from '@nestjs/common';\nimport { EventEmitter2 } from '@nestjs/event-emitter';\nimport { Horizon } from '@stellar/stellar-sdk';\nimport {\n PoiService,\n PoiSyncService,\n BaseProjectService,\n StoreService,\n NodeConfig,\n ApiService,\n IProjectUpgradeService,\n profiler,\n} from '@subql/node-core';\nimport { StellarBlockWrapper, SubqlDatasource } from '@subql/types-stellar';\nimport { Sequelize } from '@subql/x-sequelize';\nimport { SubqueryProject } from '../configure/SubqueryProject';\nimport { StellarApi } from '../stellar';\nimport SafeStellarProvider from '../stellar/safe-api';\nimport { DsProcessorService } from './ds-processor.service';\nimport { DynamicDsService } from './dynamic-ds.service';\nimport { UnfinalizedBlocksService } from './unfinalizedBlocks.service';\n\n// eslint-disable-next-line @typescript-eslint/no-var-requires\nconst { version: packageVersion } = require('../../package.json');\n\n@Injectable()\nexport class ProjectService extends BaseProjectService<\n ApiService<StellarApi, SafeStellarProvider, StellarBlockWrapper[]>,\n SubqlDatasource\n> {\n protected packageVersion = packageVersion;\n\n constructor(\n dsProcessorService: DsProcessorService,\n apiService: ApiService,\n @Inject(isMainThread ? PoiService : 'Null') poiService: PoiService,\n @Inject(isMainThread ? PoiSyncService : 'Null')\n poiSyncService: PoiSyncService,\n @Inject(isMainThread ? Sequelize : 'Null') sequelize: Sequelize,\n @Inject('ISubqueryProject') project: SubqueryProject,\n @Inject('IProjectUpgradeService')\n projectUpgradeService: IProjectUpgradeService<SubqueryProject>,\n @Inject(isMainThread ? StoreService : 'Null') storeService: StoreService,\n nodeConfig: NodeConfig,\n dynamicDsService: DynamicDsService,\n eventEmitter: EventEmitter2,\n unfinalizedBlockService: UnfinalizedBlocksService,\n ) {\n super(\n dsProcessorService,\n apiService,\n poiService,\n poiSyncService,\n sequelize,\n project,\n projectUpgradeService,\n storeService,\n nodeConfig,\n dynamicDsService,\n eventEmitter,\n unfinalizedBlockService,\n );\n }\n\n @profiler()\n async init(startHeight?: number): Promise<void> {\n return super.init(startHeight);\n }\n\n protected async getBlockTimestamp(height: number): Promise<Date> {\n const block = await this.apiService.unsafeApi.api\n .ledgers()\n .ledger(height)\n .call();\n\n return new Date(\n (block as unknown as Horizon.ServerApi.LedgerRecord).closed_at,\n ); // TODO test and make sure its in MS not S\n }\n\n protected onProjectChange(project: SubqueryProject): void | Promise<void> {\n // TODO update this when implementing skipBlock feature for Eth\n // this.apiService.updateBlockFetching();\n }\n}\n"]}
@@ -1,5 +1,5 @@
1
1
  "use strict";
2
- // Copyright 2020-2024 SubQuery Pte Ltd authors & contributors
2
+ // Copyright 2020-2025 SubQuery Pte Ltd authors & contributors
3
3
  // SPDX-License-Identifier: GPL-3.0
4
4
  Object.defineProperty(exports, "__esModule", { value: true });
5
5
  exports.getBlockSize = void 0;
@@ -1 +1 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/indexer/types.ts"],"names":[],"mappings":";AAAA,8DAA8D;AAC9D,mCAAmC;;;AAMnC,SAAgB,YAAY,CAAC,KAA0B;IACrD,MAAM,EACJ,wBAAwB,EACxB,eAAe,EACf,4BAA4B,EAC5B,sBAAsB,GACvB,GAAG,KAAK,CAAC,KAAK,CAAC;IAChB,OAAO,CACL,CAAC,sBAAsB;QACrB,4BAA4B,GAAG,wBAAwB,CAAC,GAAG,eAAe,CAC7E,CAAC;AACJ,CAAC;AAXD,oCAWC","sourcesContent":["// Copyright 2020-2024 SubQuery Pte Ltd authors & contributors\n// SPDX-License-Identifier: GPL-3.0\n\nimport { StellarBlockWrapper } from '@subql/types-stellar';\n\nexport type BestBlocks = Record<number, string>;\n\nexport function getBlockSize(block: StellarBlockWrapper): number {\n const {\n failed_transaction_count,\n operation_count,\n successful_transaction_count,\n tx_set_operation_count,\n } = block.block;\n return (\n (tx_set_operation_count ??\n successful_transaction_count + failed_transaction_count) + operation_count\n );\n}\n"]}
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/indexer/types.ts"],"names":[],"mappings":";AAAA,8DAA8D;AAC9D,mCAAmC;;;AAMnC,SAAgB,YAAY,CAAC,KAA0B;IACrD,MAAM,EACJ,wBAAwB,EACxB,eAAe,EACf,4BAA4B,EAC5B,sBAAsB,GACvB,GAAG,KAAK,CAAC,KAAK,CAAC;IAChB,OAAO,CACL,CAAC,sBAAsB;QACrB,4BAA4B,GAAG,wBAAwB,CAAC,GAAG,eAAe,CAC7E,CAAC;AACJ,CAAC;AAXD,oCAWC","sourcesContent":["// Copyright 2020-2025 SubQuery Pte Ltd authors & contributors\n// SPDX-License-Identifier: GPL-3.0\n\nimport { StellarBlockWrapper } from '@subql/types-stellar';\n\nexport type BestBlocks = Record<number, string>;\n\nexport function getBlockSize(block: StellarBlockWrapper): number {\n const {\n failed_transaction_count,\n operation_count,\n successful_transaction_count,\n tx_set_operation_count,\n } = block.block;\n return (\n (tx_set_operation_count ??\n successful_transaction_count + failed_transaction_count) + operation_count\n );\n}\n"]}
@@ -1,5 +1,5 @@
1
1
  "use strict";
2
- // Copyright 2020-2024 SubQuery Pte Ltd authors & contributors
2
+ // Copyright 2020-2025 SubQuery Pte Ltd authors & contributors
3
3
  // SPDX-License-Identifier: GPL-3.0
4
4
  var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
5
5
  var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
@@ -1 +1 @@
1
- {"version":3,"file":"unfinalizedBlocks.service.js","sourceRoot":"","sources":["../../src/indexer/unfinalizedBlocks.service.ts"],"names":[],"mappings":";AAAA,8DAA8D;AAC9D,mCAAmC;;;;;;;;;;;;;;;AAEnC,2CAAoD;AACpD,gDAQ0B;AAE1B,4DAAgE;AAEhE,MAAM,MAAM,GAAG,IAAA,qBAAS,EAAC,aAAa,CAAC,CAAC;AAGjC,IAAM,wBAAwB,GAA9B,MAAM,wBAAyB,SAAQ,wCAA0C;IAEnE;IADnB,YACmB,UAAsB,EACvC,UAAsB,EACS,kBAAuC;QAEtE,KAAK,CAAC,UAAU,EAAE,kBAAkB,CAAC,CAAC;QAJrB,eAAU,GAAV,UAAU,CAAY;IAKzC,CAAC;IAGe,AAAN,KAAK,CAAC,gBAAgB;QAC9B,MAAM,cAAc,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,iBAAiB,EAAE,CAAC;QACrE,OAAO,IAAA,oCAAoB,EAAC,cAAc,CAAC,CAAC;IAC9C,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,MAAM,KAAK,GAAG,CAAC,MAAM,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACnE,OAAO,IAAA,oCAAoB,EAAC,KAAK,CAAC,CAAC;IACrC,CAAC;CACF,CAAA;AAfiB;IADf,IAAA,0BAAc,GAAE;;;;gEAIhB;AAGe;IADf,IAAA,0BAAc,GAAE;;;;gEAGhB;AAGK;IADL,IAAA,0BAAc,GAAE;;;;kEAIhB;AAxBU,wBAAwB;IADpC,IAAA,mBAAU,GAAE;IAKR,WAAA,IAAA,eAAM,EAAC,qBAAqB,CAAC,CAAA;qCAFD,sBAAU;QAC3B,sBAAU;GAHb,wBAAwB,CAyBpC;AAzBY,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 ApiService,\n BaseUnfinalizedBlocksService,\n Header,\n NodeConfig,\n IStoreModelProvider,\n getLogger,\n mainThreadOnly,\n} from '@subql/node-core';\nimport { BlockWrapper } from '@subql/types-stellar';\nimport { stellarBlockToHeader } from '../stellar/utils.stellar';\n\nconst logger = getLogger('unfinalized');\n\n@Injectable()\nexport class UnfinalizedBlocksService extends BaseUnfinalizedBlocksService<BlockWrapper> {\n constructor(\n private readonly apiService: ApiService,\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 finalizedBlock = await this.apiService.api.getFinalizedBlock();\n return stellarBlockToHeader(finalizedBlock);\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 const block = (await this.apiService.api.fetchBlocks([height]))[0];\n return stellarBlockToHeader(block);\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,gDAQ0B;AAE1B,4DAAgE;AAEhE,MAAM,MAAM,GAAG,IAAA,qBAAS,EAAC,aAAa,CAAC,CAAC;AAGjC,IAAM,wBAAwB,GAA9B,MAAM,wBAAyB,SAAQ,wCAA0C;IAEnE;IADnB,YACmB,UAAsB,EACvC,UAAsB,EACS,kBAAuC;QAEtE,KAAK,CAAC,UAAU,EAAE,kBAAkB,CAAC,CAAC;QAJrB,eAAU,GAAV,UAAU,CAAY;IAKzC,CAAC;IAGe,AAAN,KAAK,CAAC,gBAAgB;QAC9B,MAAM,cAAc,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,iBAAiB,EAAE,CAAC;QACrE,OAAO,IAAA,oCAAoB,EAAC,cAAc,CAAC,CAAC;IAC9C,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,MAAM,KAAK,GAAG,CAAC,MAAM,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACnE,OAAO,IAAA,oCAAoB,EAAC,KAAK,CAAC,CAAC;IACrC,CAAC;CACF,CAAA;AAfiB;IADf,IAAA,0BAAc,GAAE;;;;gEAIhB;AAGe;IADf,IAAA,0BAAc,GAAE;;;;gEAGhB;AAGK;IADL,IAAA,0BAAc,GAAE;;;;kEAIhB;AAxBU,wBAAwB;IADpC,IAAA,mBAAU,GAAE;IAKR,WAAA,IAAA,eAAM,EAAC,qBAAqB,CAAC,CAAA;qCAFD,sBAAU;QAC3B,sBAAU;GAHb,wBAAwB,CAyBpC;AAzBY,4DAAwB","sourcesContent":["// Copyright 2020-2025 SubQuery Pte Ltd authors & contributors\n// SPDX-License-Identifier: GPL-3.0\n\nimport { Inject, Injectable } from '@nestjs/common';\nimport {\n ApiService,\n BaseUnfinalizedBlocksService,\n Header,\n NodeConfig,\n IStoreModelProvider,\n getLogger,\n mainThreadOnly,\n} from '@subql/node-core';\nimport { BlockWrapper } from '@subql/types-stellar';\nimport { stellarBlockToHeader } from '../stellar/utils.stellar';\n\nconst logger = getLogger('unfinalized');\n\n@Injectable()\nexport class UnfinalizedBlocksService extends BaseUnfinalizedBlocksService<BlockWrapper> {\n constructor(\n private readonly apiService: ApiService,\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 finalizedBlock = await this.apiService.api.getFinalizedBlock();\n return stellarBlockToHeader(finalizedBlock);\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 const block = (await this.apiService.api.fetchBlocks([height]))[0];\n return stellarBlockToHeader(block);\n }\n}\n"]}
@@ -1,5 +1,5 @@
1
1
  "use strict";
2
- // Copyright 2020-2024 SubQuery Pte Ltd authors & contributors
2
+ // Copyright 2020-2025 SubQuery Pte Ltd authors & contributors
3
3
  // SPDX-License-Identifier: GPL-3.0
4
4
  var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
5
5
  var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
@@ -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,mDAA8C;AAC9C,2CAAwC;AACxC,yDAAsD;AACtD,gDAO0B;AAE1B,2CAAkD;AAElD,kEAA6D;AAC7D,8DAAyD;AACzD,wDAAoD;AACpD,wDAAoD;AACpD,4EAAwE;AACxE,qDAAiD;AAwD1C,IAAM,iBAAiB,GAAvB,MAAM,iBAAiB;CAAG,CAAA;AAApB,iBAAiB;IAtD7B,IAAA,eAAM,EAAC;QACN,OAAO,EAAE,CAAC,4BAAgB,CAAC;QAC3B,SAAS,EAAE;YACT,gCAAc;YACd;gBACE,OAAO,EAAE,sBAAU;gBACnB,UAAU,EAAE,KAAK,EACf,OAAwB,EACxB,qBAAkE,EAClE,YAA2B,EAC3B,UAAsB,EACtB,EAAE;oBACF,MAAM,UAAU,GAAG,IAAI,2BAAiB,CACtC,OAAO,EACP,qBAAqB,EACrB,YAAY,EACZ,UAAU,CACX,CAAC;oBACF,MAAM,UAAU,CAAC,IAAI,EAAE,CAAC;oBACxB,OAAO,UAAU,CAAC;gBACpB,CAAC;gBACD,MAAM,EAAE;oBACN,kBAAkB;oBAClB,iCAAqB;oBACrB,6BAAa;oBACb,sBAAU;iBACX;aACF;YACD,yCAAkB;YAClB;gBACE,OAAO,EAAE,qCAAgB;gBACzB,UAAU,EAAE,GAAG,EAAE;oBACf,IAAI,6BAAY,EAAE;wBAChB,MAAM,IAAI,KAAK,CAAC,8BAA8B,CAAC,CAAC;qBACjD;oBACD,OAAO,IAAI,kCAAsB,CAAE,MAAc,CAAC,IAAI,CAAC,CAAC;gBAC1D,CAAC;aACF;YACD;gBACE,OAAO,EAAE,iBAAiB;gBAC1B,QAAQ,EAAE,gCAAc;aACzB;YACD,8BAAa;YACb;gBACE,OAAO,EAAE,oDAAwB;gBACjC,UAAU,EAAE,GAAG,EAAE;oBACf,IAAI,6BAAY,EAAE;wBAChB,MAAM,IAAI,KAAK,CAAC,8BAA8B,CAAC,CAAC;qBACjD;oBACD,OAAO,IAAI,0CAA8B,CAAE,MAAc,CAAC,IAAI,CAAC,CAAC;gBAClE,CAAC;aACF;SACF;KACF,CAAC;GACW,iBAAiB,CAAG;AAApB,8CAAiB","sourcesContent":["// Copyright 2020-2024 SubQuery Pte Ltd authors & contributors\n// SPDX-License-Identifier: GPL-3.0\n\nimport { isMainThread } from 'worker_threads';\nimport { Module } from '@nestjs/common';\nimport { EventEmitter2 } from '@nestjs/event-emitter';\nimport {\n WorkerCoreModule,\n ConnectionPoolService,\n WorkerDynamicDsService,\n NodeConfig,\n WorkerUnfinalizedBlocksService,\n ApiService,\n} from '@subql/node-core';\nimport { SubqueryProject } from '../../configure/SubqueryProject';\nimport { StellarApiService } from '../../stellar';\nimport { StellarApiConnection } from '../../stellar/api.connection';\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: ApiService,\n useFactory: async (\n project: SubqueryProject,\n connectionPoolService: ConnectionPoolService<StellarApiConnection>,\n eventEmitter: EventEmitter2,\n nodeConfig: NodeConfig,\n ) => {\n const apiService = new StellarApiService(\n project,\n connectionPoolService,\n eventEmitter,\n nodeConfig,\n );\n await apiService.init();\n return apiService;\n },\n inject: [\n 'ISubqueryProject',\n ConnectionPoolService,\n EventEmitter2,\n NodeConfig,\n ],\n },\n DsProcessorService,\n {\n provide: DynamicDsService,\n useFactory: () => {\n if (isMainThread) {\n throw new Error('Expected to be worker thread');\n }\n return new WorkerDynamicDsService((global as any).host);\n },\n },\n {\n provide: 'IProjectService',\n useClass: ProjectService,\n },\n WorkerService,\n {\n provide: UnfinalizedBlocksService,\n useFactory: () => {\n if (isMainThread) {\n throw new Error('Expected to be worker thread');\n }\n return new WorkerUnfinalizedBlocksService((global as any).host);\n },\n },\n ],\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,mDAA8C;AAC9C,2CAAwC;AACxC,yDAAsD;AACtD,gDAO0B;AAE1B,2CAAkD;AAElD,kEAA6D;AAC7D,8DAAyD;AACzD,wDAAoD;AACpD,wDAAoD;AACpD,4EAAwE;AACxE,qDAAiD;AAwD1C,IAAM,iBAAiB,GAAvB,MAAM,iBAAiB;CAAG,CAAA;AAApB,iBAAiB;IAtD7B,IAAA,eAAM,EAAC;QACN,OAAO,EAAE,CAAC,4BAAgB,CAAC;QAC3B,SAAS,EAAE;YACT,gCAAc;YACd;gBACE,OAAO,EAAE,sBAAU;gBACnB,UAAU,EAAE,KAAK,EACf,OAAwB,EACxB,qBAAkE,EAClE,YAA2B,EAC3B,UAAsB,EACtB,EAAE;oBACF,MAAM,UAAU,GAAG,IAAI,2BAAiB,CACtC,OAAO,EACP,qBAAqB,EACrB,YAAY,EACZ,UAAU,CACX,CAAC;oBACF,MAAM,UAAU,CAAC,IAAI,EAAE,CAAC;oBACxB,OAAO,UAAU,CAAC;gBACpB,CAAC;gBACD,MAAM,EAAE;oBACN,kBAAkB;oBAClB,iCAAqB;oBACrB,6BAAa;oBACb,sBAAU;iBACX;aACF;YACD,yCAAkB;YAClB;gBACE,OAAO,EAAE,qCAAgB;gBACzB,UAAU,EAAE,GAAG,EAAE;oBACf,IAAI,6BAAY,EAAE;wBAChB,MAAM,IAAI,KAAK,CAAC,8BAA8B,CAAC,CAAC;qBACjD;oBACD,OAAO,IAAI,kCAAsB,CAAE,MAAc,CAAC,IAAI,CAAC,CAAC;gBAC1D,CAAC;aACF;YACD;gBACE,OAAO,EAAE,iBAAiB;gBAC1B,QAAQ,EAAE,gCAAc;aACzB;YACD,8BAAa;YACb;gBACE,OAAO,EAAE,oDAAwB;gBACjC,UAAU,EAAE,GAAG,EAAE;oBACf,IAAI,6BAAY,EAAE;wBAChB,MAAM,IAAI,KAAK,CAAC,8BAA8B,CAAC,CAAC;qBACjD;oBACD,OAAO,IAAI,0CAA8B,CAAE,MAAc,CAAC,IAAI,CAAC,CAAC;gBAClE,CAAC;aACF;SACF;KACF,CAAC;GACW,iBAAiB,CAAG;AAApB,8CAAiB","sourcesContent":["// Copyright 2020-2025 SubQuery Pte Ltd authors & contributors\n// SPDX-License-Identifier: GPL-3.0\n\nimport { isMainThread } from 'worker_threads';\nimport { Module } from '@nestjs/common';\nimport { EventEmitter2 } from '@nestjs/event-emitter';\nimport {\n WorkerCoreModule,\n ConnectionPoolService,\n WorkerDynamicDsService,\n NodeConfig,\n WorkerUnfinalizedBlocksService,\n ApiService,\n} from '@subql/node-core';\nimport { SubqueryProject } from '../../configure/SubqueryProject';\nimport { StellarApiService } from '../../stellar';\nimport { StellarApiConnection } from '../../stellar/api.connection';\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: ApiService,\n useFactory: async (\n project: SubqueryProject,\n connectionPoolService: ConnectionPoolService<StellarApiConnection>,\n eventEmitter: EventEmitter2,\n nodeConfig: NodeConfig,\n ) => {\n const apiService = new StellarApiService(\n project,\n connectionPoolService,\n eventEmitter,\n nodeConfig,\n );\n await apiService.init();\n return apiService;\n },\n inject: [\n 'ISubqueryProject',\n ConnectionPoolService,\n EventEmitter2,\n NodeConfig,\n ],\n },\n DsProcessorService,\n {\n provide: DynamicDsService,\n useFactory: () => {\n if (isMainThread) {\n throw new Error('Expected to be worker thread');\n }\n return new WorkerDynamicDsService((global as any).host);\n },\n },\n {\n provide: 'IProjectService',\n useClass: ProjectService,\n },\n WorkerService,\n {\n provide: UnfinalizedBlocksService,\n useFactory: () => {\n if (isMainThread) {\n throw new Error('Expected to be worker thread');\n }\n return new WorkerUnfinalizedBlocksService((global as any).host);\n },\n },\n ],\n})\nexport class WorkerFetchModule {}\n"]}
@@ -1,5 +1,5 @@
1
1
  "use strict";
2
- // Copyright 2020-2024 SubQuery Pte Ltd authors & contributors
2
+ // Copyright 2020-2025 SubQuery Pte Ltd authors & contributors
3
3
  // SPDX-License-Identifier: GPL-3.0
4
4
  Object.defineProperty(exports, "__esModule", { value: true });
5
5
  // initlogger and yargs must be imported before all other imports
@@ -1 +1 @@
1
- {"version":3,"file":"worker.js","sourceRoot":"","sources":["../../../src/indexer/worker/worker.ts"],"names":[],"mappings":";AAAA,8DAA8D;AAC9D,mCAAmC;;AAEnC,iEAAiE;AACjE,kDAAkD;AAClD,wCAAwC;AACxC,oDAAqD;AACrD,wCAAwC;AACxC,uCAA2C;AAE3C,MAAM,EAAE,IAAI,EAAE,GAAG,oBAAY,CAAC;AAE9B,IAAA,mBAAU,EACR,IAAI,CAAC,KAAK,EACV,IAAI,CAAC,SAA+B,EACpC,IAAI,CAAC,QAA8B,CACpC,CAAC;AAEF,6DAA+C;AAC/C,uCAA2C;AAC3C,gDAM0B;AAE1B,mDAA+C;AAC/C,qDAAiD;AAEjD,MAAM,MAAM,GAAG,IAAA,qBAAS,EAAC,WAAW,8BAAQ,EAAE,CAAC,CAAC;AAEhD,KAAK,UAAU,UAAU,CAAC,WAAoB;IAC5C,IAAI;QACF,MAAM,GAAG,GAAG,MAAM,kBAAW,CAAC,MAAM,CAAC,4BAAY,EAAE;YACjD,MAAM,EAAE,IAAI,sBAAU,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,0EAA0E;SACjH,CAAC,CAAC;QAEH,MAAM,GAAG,CAAC,IAAI,EAAE,CAAC;QAEjB,MAAM,cAAc,GAAmB,GAAG,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAC;QAClE,uGAAuG;QACvG,MAAM,cAAc,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QAEvC,MAAM,aAAa,GAAG,GAAG,CAAC,GAAG,CAAC,8BAAa,CAAC,CAAC;QAE7C,IAAA,8BAAkB,EAAC,GAAG,EAAE,aAAa,CAAC,CAAC;KACxC;IAAC,OAAO,CAAM,EAAE;QACf,OAAO,CAAC,GAAG,CAAC,wBAAwB,EAAE,CAAC,CAAC,CAAC;QACzC,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,wBAAwB,CAAC,CAAC;QAC1C,MAAM,CAAC,CAAC;KACT;AACH,CAAC;AAGA,MAAc,CAAC,IAAI,GAAG,IAAA,4BAAgB,EAAC,EAAE,EAAE;IAC1C,UAAU;CACX,CAAC,CAAC","sourcesContent":["// Copyright 2020-2024 SubQuery Pte Ltd authors & contributors\n// SPDX-License-Identifier: GPL-3.0\n\n// initlogger and yargs must be imported before all other imports\n// making sure logger is defined before its called\n// eslint-disable-next-line import/order\nimport { initLogger } from '@subql/node-core/logger';\n// eslint-disable-next-line import/order\nimport { yargsOptions } from '../../yargs';\n\nconst { argv } = yargsOptions;\n\ninitLogger(\n argv.debug,\n argv.outputFmt as 'json' | 'colored',\n argv.logLevel as string | undefined,\n);\n\nimport { threadId } from 'node:worker_threads';\nimport { NestFactory } from '@nestjs/core';\nimport {\n getLogger,\n NestLogger,\n initWorkerServices,\n IBaseIndexerWorker,\n createWorkerHost,\n} from '@subql/node-core';\nimport { ProjectService } from '../project.service';\nimport { WorkerModule } from './worker.module';\nimport { WorkerService } from './worker.service';\n\nconst logger = getLogger(`worker #${threadId}`);\n\nasync function initWorker(startHeight?: number): Promise<void> {\n try {\n const app = await NestFactory.create(WorkerModule, {\n logger: new NestLogger(!!argv.debug), // TIP: If the worker is crashing comment out this line for better logging\n });\n\n await app.init();\n\n const projectService: ProjectService = app.get('IProjectService');\n // Initialise async services, we do this here rather than in factories so we can capture one off events\n await projectService.init(startHeight);\n\n const workerService = app.get(WorkerService);\n\n initWorkerServices(app, workerService);\n } catch (e: any) {\n console.log('Failed to start worker', e);\n logger.error(e, 'Failed to start worker');\n throw e;\n }\n}\nexport type IIndexerWorker = IBaseIndexerWorker;\n\n(global as any).host = createWorkerHost([], {\n initWorker,\n});\n"]}
1
+ {"version":3,"file":"worker.js","sourceRoot":"","sources":["../../../src/indexer/worker/worker.ts"],"names":[],"mappings":";AAAA,8DAA8D;AAC9D,mCAAmC;;AAEnC,iEAAiE;AACjE,kDAAkD;AAClD,wCAAwC;AACxC,oDAAqD;AACrD,wCAAwC;AACxC,uCAA2C;AAE3C,MAAM,EAAE,IAAI,EAAE,GAAG,oBAAY,CAAC;AAE9B,IAAA,mBAAU,EACR,IAAI,CAAC,KAAK,EACV,IAAI,CAAC,SAA+B,EACpC,IAAI,CAAC,QAA8B,CACpC,CAAC;AAEF,6DAA+C;AAC/C,uCAA2C;AAC3C,gDAM0B;AAE1B,mDAA+C;AAC/C,qDAAiD;AAEjD,MAAM,MAAM,GAAG,IAAA,qBAAS,EAAC,WAAW,8BAAQ,EAAE,CAAC,CAAC;AAEhD,KAAK,UAAU,UAAU,CAAC,WAAoB;IAC5C,IAAI;QACF,MAAM,GAAG,GAAG,MAAM,kBAAW,CAAC,MAAM,CAAC,4BAAY,EAAE;YACjD,MAAM,EAAE,IAAI,sBAAU,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,0EAA0E;SACjH,CAAC,CAAC;QAEH,MAAM,GAAG,CAAC,IAAI,EAAE,CAAC;QAEjB,MAAM,cAAc,GAAmB,GAAG,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAC;QAClE,uGAAuG;QACvG,MAAM,cAAc,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QAEvC,MAAM,aAAa,GAAG,GAAG,CAAC,GAAG,CAAC,8BAAa,CAAC,CAAC;QAE7C,IAAA,8BAAkB,EAAC,GAAG,EAAE,aAAa,CAAC,CAAC;KACxC;IAAC,OAAO,CAAM,EAAE;QACf,OAAO,CAAC,GAAG,CAAC,wBAAwB,EAAE,CAAC,CAAC,CAAC;QACzC,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,wBAAwB,CAAC,CAAC;QAC1C,MAAM,CAAC,CAAC;KACT;AACH,CAAC;AAGA,MAAc,CAAC,IAAI,GAAG,IAAA,4BAAgB,EAAC,EAAE,EAAE;IAC1C,UAAU;CACX,CAAC,CAAC","sourcesContent":["// Copyright 2020-2025 SubQuery Pte Ltd authors & contributors\n// SPDX-License-Identifier: GPL-3.0\n\n// initlogger and yargs must be imported before all other imports\n// making sure logger is defined before its called\n// eslint-disable-next-line import/order\nimport { initLogger } from '@subql/node-core/logger';\n// eslint-disable-next-line import/order\nimport { yargsOptions } from '../../yargs';\n\nconst { argv } = yargsOptions;\n\ninitLogger(\n argv.debug,\n argv.outputFmt as 'json' | 'colored',\n argv.logLevel as string | undefined,\n);\n\nimport { threadId } from 'node:worker_threads';\nimport { NestFactory } from '@nestjs/core';\nimport {\n getLogger,\n NestLogger,\n initWorkerServices,\n IBaseIndexerWorker,\n createWorkerHost,\n} from '@subql/node-core';\nimport { ProjectService } from '../project.service';\nimport { WorkerModule } from './worker.module';\nimport { WorkerService } from './worker.service';\n\nconst logger = getLogger(`worker #${threadId}`);\n\nasync function initWorker(startHeight?: number): Promise<void> {\n try {\n const app = await NestFactory.create(WorkerModule, {\n logger: new NestLogger(!!argv.debug), // TIP: If the worker is crashing comment out this line for better logging\n });\n\n await app.init();\n\n const projectService: ProjectService = app.get('IProjectService');\n // Initialise async services, we do this here rather than in factories so we can capture one off events\n await projectService.init(startHeight);\n\n const workerService = app.get(WorkerService);\n\n initWorkerServices(app, workerService);\n } catch (e: any) {\n console.log('Failed to start worker', e);\n logger.error(e, 'Failed to start worker');\n throw e;\n }\n}\nexport type IIndexerWorker = IBaseIndexerWorker;\n\n(global as any).host = createWorkerHost([], {\n initWorker,\n});\n"]}
@@ -1,5 +1,5 @@
1
1
  "use strict";
2
- // Copyright 2020-2024 SubQuery Pte Ltd authors & contributors
2
+ // Copyright 2020-2025 SubQuery Pte Ltd authors & contributors
3
3
  // SPDX-License-Identifier: GPL-3.0
4
4
  var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
5
5
  var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
@@ -1 +1 @@
1
- {"version":3,"file":"worker.module.js","sourceRoot":"","sources":["../../../src/indexer/worker/worker.module.ts"],"names":[],"mappings":";AAAA,8DAA8D;AAC9D,mCAAmC;;;;;;;;;AAEnC,2CAAwC;AACxC,yDAA2D;AAC3D,+CAAkD;AAClD,gDAA8D;AAC9D,uEAAmE;AACnE,+DAA0D;AAanD,IAAM,YAAY,GAAlB,MAAM,YAAY;CAAG,CAAA;AAAf,YAAY;IAXxB,IAAA,eAAM,EAAC;QACN,OAAO,EAAE;YACP,oBAAQ,CAAC,OAAO,EAAE;YAClB,kCAAkB,CAAC,OAAO,EAAE;YAC5B,kCAAe,CAAC,QAAQ,EAAE;YAC1B,yBAAc,CAAC,OAAO,EAAE;YACxB,4BAAgB;YAChB,uCAAiB;SAClB;QACD,WAAW,EAAE,EAAE;KAChB,CAAC;GACW,YAAY,CAAG;AAAf,oCAAY","sourcesContent":["// Copyright 2020-2024 SubQuery Pte Ltd authors & contributors\n// SPDX-License-Identifier: GPL-3.0\n\nimport { Module } from '@nestjs/common';\nimport { EventEmitterModule } from '@nestjs/event-emitter';\nimport { ScheduleModule } from '@nestjs/schedule';\nimport { DbModule, WorkerCoreModule } from '@subql/node-core';\nimport { ConfigureModule } from '../../configure/configure.module';\nimport { WorkerFetchModule } from './worker-fetch.module';\n\n@Module({\n imports: [\n DbModule.forRoot(),\n EventEmitterModule.forRoot(),\n ConfigureModule.register(),\n ScheduleModule.forRoot(),\n WorkerCoreModule,\n WorkerFetchModule,\n ],\n controllers: [],\n})\nexport class WorkerModule {}\n"]}
1
+ {"version":3,"file":"worker.module.js","sourceRoot":"","sources":["../../../src/indexer/worker/worker.module.ts"],"names":[],"mappings":";AAAA,8DAA8D;AAC9D,mCAAmC;;;;;;;;;AAEnC,2CAAwC;AACxC,yDAA2D;AAC3D,+CAAkD;AAClD,gDAA8D;AAC9D,uEAAmE;AACnE,+DAA0D;AAanD,IAAM,YAAY,GAAlB,MAAM,YAAY;CAAG,CAAA;AAAf,YAAY;IAXxB,IAAA,eAAM,EAAC;QACN,OAAO,EAAE;YACP,oBAAQ,CAAC,OAAO,EAAE;YAClB,kCAAkB,CAAC,OAAO,EAAE;YAC5B,kCAAe,CAAC,QAAQ,EAAE;YAC1B,yBAAc,CAAC,OAAO,EAAE;YACxB,4BAAgB;YAChB,uCAAiB;SAClB;QACD,WAAW,EAAE,EAAE;KAChB,CAAC;GACW,YAAY,CAAG;AAAf,oCAAY","sourcesContent":["// Copyright 2020-2025 SubQuery Pte Ltd authors & contributors\n// SPDX-License-Identifier: GPL-3.0\n\nimport { Module } from '@nestjs/common';\nimport { EventEmitterModule } from '@nestjs/event-emitter';\nimport { ScheduleModule } from '@nestjs/schedule';\nimport { DbModule, WorkerCoreModule } from '@subql/node-core';\nimport { ConfigureModule } from '../../configure/configure.module';\nimport { WorkerFetchModule } from './worker-fetch.module';\n\n@Module({\n imports: [\n DbModule.forRoot(),\n EventEmitterModule.forRoot(),\n ConfigureModule.register(),\n ScheduleModule.forRoot(),\n WorkerCoreModule,\n WorkerFetchModule,\n ],\n controllers: [],\n})\nexport class WorkerModule {}\n"]}
@@ -1,5 +1,5 @@
1
1
  "use strict";
2
- // Copyright 2020-2024 SubQuery Pte Ltd authors & contributors
2
+ // Copyright 2020-2025 SubQuery Pte Ltd authors & contributors
3
3
  // SPDX-License-Identifier: GPL-3.0
4
4
  var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
5
5
  var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
@@ -1 +1 @@
1
- {"version":3,"file":"worker.service.js","sourceRoot":"","sources":["../../../src/indexer/worker/worker.service.ts"],"names":[],"mappings":";AAAA,8DAA8D;AAC9D,mCAAmC;;;;;;;;;;;;;;;AAEnC,6DAA+C;AAC/C,2CAAoD;AAEpD,gDAU0B;AAE1B,+DAAmE;AACnE,wDAAoD;AACpD,oCAAwC;AAWxC,MAAM,MAAM,GAAG,IAAA,qBAAS,EAAC,mBAAmB,8BAAQ,EAAE,CAAC,CAAC;AAGjD,IAAM,aAAa,GAAnB,MAAM,aAAc,SAAQ,6BAKlC;IAEW;IACA;IAFV,YACU,UAAsB,EACtB,cAA8B,EAEtC,cAAgD,EAEhD,qBAA6C,EAC7C,UAAsB;QAEtB,KAAK,CAAC,cAAc,EAAE,qBAAqB,EAAE,UAAU,CAAC,CAAC;QARjD,eAAU,GAAV,UAAU,CAAY;QACtB,mBAAc,GAAd,cAAc,CAAgB;IAQxC,CAAC;IACS,KAAK,CAAC,eAAe,CAC7B,OAAe,EACf,KAAS;QAET,MAAM,CAAC,KAAK,CAAC,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC;QAC7D,OAAO,KAAK,CAAC;IACf,CAAC;IAES,eAAe,CAAC,KAA0B;QAClD,OAAO,IAAA,oCAAoB,EAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IAC3C,CAAC;IAES,KAAK,CAAC,mBAAmB,CACjC,KAAkC,EAClC,WAAqC;QAErC,OAAO,IAAI,CAAC,cAAc,CAAC,UAAU,CAAC,KAAK,EAAE,WAAW,CAAC,CAAC;IAC5D,CAAC;IAES,YAAY,CAAC,KAAkC;QACvD,OAAO,IAAA,oBAAY,EAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IACnC,CAAC;CACF,CAAA;AAvCY,aAAa;IADzB,IAAA,mBAAU,GAAE;IAUR,WAAA,IAAA,eAAM,EAAC,iBAAiB,CAAC,CAAA;IAEzB,WAAA,IAAA,eAAM,EAAC,wBAAwB,CAAC,CAAA;qCAJb,sBAAU;QACN,gCAAc,kBAK1B,sBAAU;GAbb,aAAa,CAuCzB;AAvCY,sCAAa","sourcesContent":["// Copyright 2020-2024 SubQuery Pte Ltd authors & contributors\n// SPDX-License-Identifier: GPL-3.0\n\nimport { threadId } from 'node:worker_threads';\nimport { Inject, Injectable } from '@nestjs/common';\nimport { SubqlStellarDataSource } from '@subql/common-stellar';\nimport {\n NodeConfig,\n getLogger,\n IProjectService,\n ProcessBlockResponse,\n ApiService,\n BaseWorkerService,\n IProjectUpgradeService,\n IBlock,\n Header,\n} from '@subql/node-core';\nimport { StellarBlockWrapper, SubqlDatasource } from '@subql/types-stellar';\nimport { stellarBlockToHeader } from '../../stellar/utils.stellar';\nimport { IndexerManager } from '../indexer.manager';\nimport { getBlockSize } from '../types';\n\nexport type FetchBlockResponse = Header;\n\nexport type WorkerStatusResponse = {\n threadId: number;\n isIndexing: boolean;\n fetchedBlocks: number;\n toFetchBlocks: number;\n};\n\nconst logger = getLogger(`Worker Service #${threadId}`);\n\n@Injectable()\nexport class WorkerService extends BaseWorkerService<\n StellarBlockWrapper,\n FetchBlockResponse,\n SubqlStellarDataSource,\n {}\n> {\n constructor(\n private apiService: ApiService,\n private indexerManager: IndexerManager,\n @Inject('IProjectService')\n projectService: IProjectService<SubqlDatasource>,\n @Inject('IProjectUpgradeService')\n projectUpgradeService: IProjectUpgradeService,\n nodeConfig: NodeConfig,\n ) {\n super(projectService, projectUpgradeService, nodeConfig);\n }\n protected async fetchChainBlock(\n heights: number,\n extra: {},\n ): Promise<IBlock<StellarBlockWrapper>> {\n const [block] = await this.apiService.fetchBlocks([heights]);\n return block;\n }\n\n protected toBlockResponse(block: StellarBlockWrapper): Header {\n return stellarBlockToHeader(block.block);\n }\n\n protected async processFetchedBlock(\n block: IBlock<StellarBlockWrapper>,\n dataSources: SubqlStellarDataSource[],\n ): Promise<ProcessBlockResponse> {\n return this.indexerManager.indexBlock(block, dataSources);\n }\n\n protected getBlockSize(block: IBlock<StellarBlockWrapper>): number {\n return getBlockSize(block.block);\n }\n}\n"]}
1
+ {"version":3,"file":"worker.service.js","sourceRoot":"","sources":["../../../src/indexer/worker/worker.service.ts"],"names":[],"mappings":";AAAA,8DAA8D;AAC9D,mCAAmC;;;;;;;;;;;;;;;AAEnC,6DAA+C;AAC/C,2CAAoD;AAEpD,gDAU0B;AAE1B,+DAAmE;AACnE,wDAAoD;AACpD,oCAAwC;AAWxC,MAAM,MAAM,GAAG,IAAA,qBAAS,EAAC,mBAAmB,8BAAQ,EAAE,CAAC,CAAC;AAGjD,IAAM,aAAa,GAAnB,MAAM,aAAc,SAAQ,6BAKlC;IAEW;IACA;IAFV,YACU,UAAsB,EACtB,cAA8B,EAEtC,cAAgD,EAEhD,qBAA6C,EAC7C,UAAsB;QAEtB,KAAK,CAAC,cAAc,EAAE,qBAAqB,EAAE,UAAU,CAAC,CAAC;QARjD,eAAU,GAAV,UAAU,CAAY;QACtB,mBAAc,GAAd,cAAc,CAAgB;IAQxC,CAAC;IACS,KAAK,CAAC,eAAe,CAC7B,OAAe,EACf,KAAS;QAET,MAAM,CAAC,KAAK,CAAC,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC;QAC7D,OAAO,KAAK,CAAC;IACf,CAAC;IAES,eAAe,CAAC,KAA0B;QAClD,OAAO,IAAA,oCAAoB,EAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IAC3C,CAAC;IAES,KAAK,CAAC,mBAAmB,CACjC,KAAkC,EAClC,WAAqC;QAErC,OAAO,IAAI,CAAC,cAAc,CAAC,UAAU,CAAC,KAAK,EAAE,WAAW,CAAC,CAAC;IAC5D,CAAC;IAES,YAAY,CAAC,KAAkC;QACvD,OAAO,IAAA,oBAAY,EAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IACnC,CAAC;CACF,CAAA;AAvCY,aAAa;IADzB,IAAA,mBAAU,GAAE;IAUR,WAAA,IAAA,eAAM,EAAC,iBAAiB,CAAC,CAAA;IAEzB,WAAA,IAAA,eAAM,EAAC,wBAAwB,CAAC,CAAA;qCAJb,sBAAU;QACN,gCAAc,kBAK1B,sBAAU;GAbb,aAAa,CAuCzB;AAvCY,sCAAa","sourcesContent":["// Copyright 2020-2025 SubQuery Pte Ltd authors & contributors\n// SPDX-License-Identifier: GPL-3.0\n\nimport { threadId } from 'node:worker_threads';\nimport { Inject, Injectable } from '@nestjs/common';\nimport { SubqlStellarDataSource } from '@subql/common-stellar';\nimport {\n NodeConfig,\n getLogger,\n IProjectService,\n ProcessBlockResponse,\n ApiService,\n BaseWorkerService,\n IProjectUpgradeService,\n IBlock,\n Header,\n} from '@subql/node-core';\nimport { StellarBlockWrapper, SubqlDatasource } from '@subql/types-stellar';\nimport { stellarBlockToHeader } from '../../stellar/utils.stellar';\nimport { IndexerManager } from '../indexer.manager';\nimport { getBlockSize } from '../types';\n\nexport type FetchBlockResponse = Header;\n\nexport type WorkerStatusResponse = {\n threadId: number;\n isIndexing: boolean;\n fetchedBlocks: number;\n toFetchBlocks: number;\n};\n\nconst logger = getLogger(`Worker Service #${threadId}`);\n\n@Injectable()\nexport class WorkerService extends BaseWorkerService<\n StellarBlockWrapper,\n FetchBlockResponse,\n SubqlStellarDataSource,\n {}\n> {\n constructor(\n private apiService: ApiService,\n private indexerManager: IndexerManager,\n @Inject('IProjectService')\n projectService: IProjectService<SubqlDatasource>,\n @Inject('IProjectUpgradeService')\n projectUpgradeService: IProjectUpgradeService,\n nodeConfig: NodeConfig,\n ) {\n super(projectService, projectUpgradeService, nodeConfig);\n }\n protected async fetchChainBlock(\n heights: number,\n extra: {},\n ): Promise<IBlock<StellarBlockWrapper>> {\n const [block] = await this.apiService.fetchBlocks([heights]);\n return block;\n }\n\n protected toBlockResponse(block: StellarBlockWrapper): Header {\n return stellarBlockToHeader(block.block);\n }\n\n protected async processFetchedBlock(\n block: IBlock<StellarBlockWrapper>,\n dataSources: SubqlStellarDataSource[],\n ): Promise<ProcessBlockResponse> {\n return this.indexerManager.indexBlock(block, dataSources);\n }\n\n protected getBlockSize(block: IBlock<StellarBlockWrapper>): number {\n return getBlockSize(block.block);\n }\n}\n"]}
package/dist/init.js CHANGED
@@ -1,5 +1,5 @@
1
1
  "use strict";
2
- // Copyright 2020-2024 SubQuery Pte Ltd authors & contributors
2
+ // Copyright 2020-2025 SubQuery Pte Ltd authors & contributors
3
3
  // SPDX-License-Identifier: GPL-3.0
4
4
  Object.defineProperty(exports, "__esModule", { value: true });
5
5
  exports.bootstrap = void 0;
package/dist/init.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"init.js","sourceRoot":"","sources":["../src/init.ts"],"names":[],"mappings":";AAAA,8DAA8D;AAC9D,mCAAmC;;;AAEnC,uCAA2C;AAC3C,0CAA8C;AAC9C,gDAK0B;AAC1B,6CAAyC;AACzC,2DAAuD;AAEvD,mCAAuC;AACvC,MAAM,KAAK,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAAC;AAEzC,MAAM,EAAE,IAAI,EAAE,GAAG,oBAAY,CAAC;AAE9B,MAAM,MAAM,GAAG,IAAA,qBAAS,EAAC,YAAY,CAAC,CAAC;AAEvC,IAAA,sBAAa,EAAC,KAAK,EAAE,MAAM,CAAC,CAAC;AAEtB,KAAK,UAAU,SAAS;IAC7B,MAAM,CAAC,IAAI,CAAC,WAAW,KAAK,CAAC,IAAI,eAAe,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;IAEjE,MAAM,IAAI,GAAG,MAAM,IAAA,wBAAY,EAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC3C,IAAI,CAAC,IAAI,EAAE;QACT,IAAA,yBAAa,EACX,wDAAwD,IAAI,KAC1D,IAAI,GAAG,EACT,iEAAiE,EACjE,MAAM,CACP,CAAC;KACH;IAED,IAAI,IAAI,CAAC,MAAM,EAAE;QACf,MAAM,CAAC,IAAI,CACT,mHAAmH,CACpH,CAAC;KACH;IAED,IAAI;QACF,MAAM,GAAG,GAAG,MAAM,kBAAW,CAAC,MAAM,CAAC,sBAAS,EAAE;YAC9C,MAAM,EAAE,IAAI,sBAAU,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC;SACrC,CAAC,CAAC;QAEH,MAAM,GAAG,CAAC,IAAI,EAAE,CAAC;QAEjB,MAAM,cAAc,GAAmB,GAAG,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAC;QAClE,MAAM,YAAY,GAAG,GAAG,CAAC,GAAG,CAAC,4BAAY,CAAC,CAAC;QAE3C,yGAAyG;QACzG,MAAM,cAAc,CAAC,IAAI,EAAE,CAAC;QAC5B,MAAM,YAAY,CAAC,IAAI,CAAC,cAAc,CAAC,WAAW,CAAC,CAAC;QAEpD,GAAG,CAAC,mBAAmB,EAAE,CAAC;QAE1B,MAAM,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QAEvB,MAAM,CAAC,IAAI,CAAC,yBAAyB,IAAI,EAAE,CAAC,CAAC;KAC9C;IAAC,OAAO,CAAC,EAAE;QACV,IAAA,yBAAa,EAAC,IAAI,KAAK,CAAC,sBAAsB,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,EAAE,MAAM,CAAC,CAAC;KACxE;AACH,CAAC;AAzCD,8BAyCC","sourcesContent":["// Copyright 2020-2024 SubQuery Pte Ltd authors & contributors\n// SPDX-License-Identifier: GPL-3.0\n\nimport { NestFactory } from '@nestjs/core';\nimport { notifyUpdates } from '@subql/common';\nimport {\n exitWithError,\n getLogger,\n NestLogger,\n getValidPort,\n} from '@subql/node-core';\nimport { AppModule } from './app.module';\nimport { FetchService } from './indexer/fetch.service';\nimport { ProjectService } from './indexer/project.service';\nimport { yargsOptions } from './yargs';\nconst pjson = require('../package.json');\n\nconst { argv } = yargsOptions;\n\nconst logger = getLogger('subql-node');\n\nnotifyUpdates(pjson, logger);\n\nexport async function bootstrap(): Promise<void> {\n logger.info(`Current ${pjson.name} version is ${pjson.version}`);\n\n const port = await getValidPort(argv.port);\n if (!port) {\n exitWithError(\n `Unable to find available port (tried ports in range (${port}..${\n port + 10\n })). Try setting a free port manually by setting the --port flag`,\n logger,\n );\n }\n\n if (argv.unsafe) {\n logger.warn(\n 'UNSAFE MODE IS ENABLED. This is not recommended for most projects and will not be supported by our hosted service',\n );\n }\n\n try {\n const app = await NestFactory.create(AppModule, {\n logger: new NestLogger(!!argv.debug),\n });\n\n await app.init();\n\n const projectService: ProjectService = app.get('IProjectService');\n const fetchService = app.get(FetchService);\n\n // Initialise async services, we do this here rather than in factories, so we can capture one off eventss\n await projectService.init();\n await fetchService.init(projectService.startHeight);\n\n app.enableShutdownHooks();\n\n await app.listen(port);\n\n logger.info(`Node started on port: ${port}`);\n } catch (e) {\n exitWithError(new Error('Node failed to start', { cause: e }), logger);\n }\n}\n"]}
1
+ {"version":3,"file":"init.js","sourceRoot":"","sources":["../src/init.ts"],"names":[],"mappings":";AAAA,8DAA8D;AAC9D,mCAAmC;;;AAEnC,uCAA2C;AAC3C,0CAA8C;AAC9C,gDAK0B;AAC1B,6CAAyC;AACzC,2DAAuD;AAEvD,mCAAuC;AACvC,MAAM,KAAK,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAAC;AAEzC,MAAM,EAAE,IAAI,EAAE,GAAG,oBAAY,CAAC;AAE9B,MAAM,MAAM,GAAG,IAAA,qBAAS,EAAC,YAAY,CAAC,CAAC;AAEvC,IAAA,sBAAa,EAAC,KAAK,EAAE,MAAM,CAAC,CAAC;AAEtB,KAAK,UAAU,SAAS;IAC7B,MAAM,CAAC,IAAI,CAAC,WAAW,KAAK,CAAC,IAAI,eAAe,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;IAEjE,MAAM,IAAI,GAAG,MAAM,IAAA,wBAAY,EAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC3C,IAAI,CAAC,IAAI,EAAE;QACT,IAAA,yBAAa,EACX,wDAAwD,IAAI,KAC1D,IAAI,GAAG,EACT,iEAAiE,EACjE,MAAM,CACP,CAAC;KACH;IAED,IAAI,IAAI,CAAC,MAAM,EAAE;QACf,MAAM,CAAC,IAAI,CACT,mHAAmH,CACpH,CAAC;KACH;IAED,IAAI;QACF,MAAM,GAAG,GAAG,MAAM,kBAAW,CAAC,MAAM,CAAC,sBAAS,EAAE;YAC9C,MAAM,EAAE,IAAI,sBAAU,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC;SACrC,CAAC,CAAC;QAEH,MAAM,GAAG,CAAC,IAAI,EAAE,CAAC;QAEjB,MAAM,cAAc,GAAmB,GAAG,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAC;QAClE,MAAM,YAAY,GAAG,GAAG,CAAC,GAAG,CAAC,4BAAY,CAAC,CAAC;QAE3C,yGAAyG;QACzG,MAAM,cAAc,CAAC,IAAI,EAAE,CAAC;QAC5B,MAAM,YAAY,CAAC,IAAI,CAAC,cAAc,CAAC,WAAW,CAAC,CAAC;QAEpD,GAAG,CAAC,mBAAmB,EAAE,CAAC;QAE1B,MAAM,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QAEvB,MAAM,CAAC,IAAI,CAAC,yBAAyB,IAAI,EAAE,CAAC,CAAC;KAC9C;IAAC,OAAO,CAAC,EAAE;QACV,IAAA,yBAAa,EAAC,IAAI,KAAK,CAAC,sBAAsB,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,EAAE,MAAM,CAAC,CAAC;KACxE;AACH,CAAC;AAzCD,8BAyCC","sourcesContent":["// Copyright 2020-2025 SubQuery Pte Ltd authors & contributors\n// SPDX-License-Identifier: GPL-3.0\n\nimport { NestFactory } from '@nestjs/core';\nimport { notifyUpdates } from '@subql/common';\nimport {\n exitWithError,\n getLogger,\n NestLogger,\n getValidPort,\n} from '@subql/node-core';\nimport { AppModule } from './app.module';\nimport { FetchService } from './indexer/fetch.service';\nimport { ProjectService } from './indexer/project.service';\nimport { yargsOptions } from './yargs';\nconst pjson = require('../package.json');\n\nconst { argv } = yargsOptions;\n\nconst logger = getLogger('subql-node');\n\nnotifyUpdates(pjson, logger);\n\nexport async function bootstrap(): Promise<void> {\n logger.info(`Current ${pjson.name} version is ${pjson.version}`);\n\n const port = await getValidPort(argv.port);\n if (!port) {\n exitWithError(\n `Unable to find available port (tried ports in range (${port}..${\n port + 10\n })). Try setting a free port manually by setting the --port flag`,\n logger,\n );\n }\n\n if (argv.unsafe) {\n logger.warn(\n 'UNSAFE MODE IS ENABLED. This is not recommended for most projects and will not be supported by our hosted service',\n );\n }\n\n try {\n const app = await NestFactory.create(AppModule, {\n logger: new NestLogger(!!argv.debug),\n });\n\n await app.init();\n\n const projectService: ProjectService = app.get('IProjectService');\n const fetchService = app.get(FetchService);\n\n // Initialise async services, we do this here rather than in factories, so we can capture one off eventss\n await projectService.init();\n await fetchService.init(projectService.startHeight);\n\n app.enableShutdownHooks();\n\n await app.listen(port);\n\n logger.info(`Node started on port: ${port}`);\n } catch (e) {\n exitWithError(new Error('Node failed to start', { cause: e }), logger);\n }\n}\n"]}
package/dist/main.js CHANGED
@@ -1,5 +1,5 @@
1
1
  "use strict";
2
- // Copyright 2020-2024 SubQuery Pte Ltd authors & contributors
2
+ // Copyright 2020-2025 SubQuery Pte Ltd authors & contributors
3
3
  // SPDX-License-Identifier: GPL-3.0
4
4
  Object.defineProperty(exports, "__esModule", { value: true });
5
5
  const logger_1 = require("@subql/node-core/logger");
package/dist/main.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"main.js","sourceRoot":"","sources":["../src/main.ts"],"names":[],"mappings":";AAAA,8DAA8D;AAC9D,mCAAmC;;AAEnC,oDAAqD;AACrD,mCAAuC;AAEvC,MAAM,EAAE,IAAI,EAAE,GAAG,oBAAY,CAAC;AAE7B,MAAM,CAAC,SAAiB,CAAC,MAAM,GAAG;IACjC,OAAO,IAAI,CAAC,QAAQ,EAAE,CAAC;AACzB,CAAC,CAAC;AAEF,iIAAiI;AACjI,IAAA,mBAAU,EACR,IAAI,CAAC,KAAK,EACV,IAAI,CAAC,SAA+B,EACpC,IAAI,CAAC,QAA8B,CACpC,CAAC;AAEF,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE;IACd,oEAAoE;IACpE,kDAAkD;IAClD,MAAM,EAAE,SAAS,EAAE,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC;IACxC,KAAK,SAAS,EAAE,CAAC;CAClB","sourcesContent":["// Copyright 2020-2024 SubQuery Pte Ltd authors & contributors\n// SPDX-License-Identifier: GPL-3.0\n\nimport { initLogger } from '@subql/node-core/logger';\nimport { yargsOptions } from './yargs';\n\nconst { argv } = yargsOptions;\n\n(BigInt.prototype as any).toJSON = function () {\n return this.toString();\n};\n\n// initLogger is imported from true path, to make sure getLogger (or other logger values that relies on logger) isn't initialised\ninitLogger(\n argv.debug,\n argv.outputFmt as 'json' | 'colored',\n argv.logLevel as string | undefined,\n);\n\nif (!argv._[0]) {\n // Lazy import, to allow logger to be initialised before bootstrap()\n // As bootstrap runs services that requires logger\n const { bootstrap } = require('./init');\n void bootstrap();\n}\n"]}
1
+ {"version":3,"file":"main.js","sourceRoot":"","sources":["../src/main.ts"],"names":[],"mappings":";AAAA,8DAA8D;AAC9D,mCAAmC;;AAEnC,oDAAqD;AACrD,mCAAuC;AAEvC,MAAM,EAAE,IAAI,EAAE,GAAG,oBAAY,CAAC;AAE7B,MAAM,CAAC,SAAiB,CAAC,MAAM,GAAG;IACjC,OAAO,IAAI,CAAC,QAAQ,EAAE,CAAC;AACzB,CAAC,CAAC;AAEF,iIAAiI;AACjI,IAAA,mBAAU,EACR,IAAI,CAAC,KAAK,EACV,IAAI,CAAC,SAA+B,EACpC,IAAI,CAAC,QAA8B,CACpC,CAAC;AAEF,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE;IACd,oEAAoE;IACpE,kDAAkD;IAClD,MAAM,EAAE,SAAS,EAAE,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC;IACxC,KAAK,SAAS,EAAE,CAAC;CAClB","sourcesContent":["// Copyright 2020-2025 SubQuery Pte Ltd authors & contributors\n// SPDX-License-Identifier: GPL-3.0\n\nimport { initLogger } from '@subql/node-core/logger';\nimport { yargsOptions } from './yargs';\n\nconst { argv } = yargsOptions;\n\n(BigInt.prototype as any).toJSON = function () {\n return this.toString();\n};\n\n// initLogger is imported from true path, to make sure getLogger (or other logger values that relies on logger) isn't initialised\ninitLogger(\n argv.debug,\n argv.outputFmt as 'json' | 'colored',\n argv.logLevel as string | undefined,\n);\n\nif (!argv._[0]) {\n // Lazy import, to allow logger to be initialised before bootstrap()\n // As bootstrap runs services that requires logger\n const { bootstrap } = require('./init');\n void bootstrap();\n}\n"]}
@@ -1,4 +1,3 @@
1
- import { EventEmitter2 } from '@nestjs/event-emitter';
2
1
  import { ApiConnectionError, IApiConnectionSpecific, NetworkMetadataPayload, IBlock } from '@subql/node-core';
3
2
  import { StellarBlockWrapper, IStellarEndpointConfig } from '@subql/types-stellar';
4
3
  import { StellarApi } from './api.stellar';
@@ -10,7 +9,7 @@ export declare class StellarApiConnection implements IApiConnectionSpecific<Stel
10
9
  private fetchBlocksBatches;
11
10
  readonly networkMeta: NetworkMetadataPayload;
12
11
  constructor(unsafeApi: StellarApi, fetchBlocksBatches: FetchFunc);
13
- static create(endpoint: string, fetchBlockBatches: FetchFunc, eventEmitter: EventEmitter2, soroban?: SorobanServer, config?: IStellarEndpointConfig): Promise<StellarApiConnection>;
12
+ static create(endpoint: string, fetchBlockBatches: FetchFunc, soroban?: SorobanServer, config?: IStellarEndpointConfig): Promise<StellarApiConnection>;
14
13
  safeApi(height: number): SafeStellarProvider;
15
14
  apiConnect(): Promise<void>;
16
15
  apiDisconnect(): Promise<void>;
@@ -1,5 +1,5 @@
1
1
  "use strict";
2
- // Copyright 2020-2024 SubQuery Pte Ltd authors & contributors
2
+ // Copyright 2020-2025 SubQuery Pte Ltd authors & contributors
3
3
  // SPDX-License-Identifier: GPL-3.0
4
4
  Object.defineProperty(exports, "__esModule", { value: true });
5
5
  exports.StellarApiConnection = void 0;
@@ -18,8 +18,8 @@ class StellarApiConnection {
18
18
  genesisHash: unsafeApi.getGenesisHash(),
19
19
  };
20
20
  }
21
- static async create(endpoint, fetchBlockBatches, eventEmitter, soroban, config) {
22
- const api = new api_stellar_1.StellarApi(endpoint, eventEmitter, soroban, config);
21
+ static async create(endpoint, fetchBlockBatches, soroban, config) {
22
+ const api = new api_stellar_1.StellarApi(endpoint, soroban, config);
23
23
  await api.init();
24
24
  return new StellarApiConnection(api, fetchBlockBatches);
25
25
  }
@@ -1 +1 @@
1
- {"version":3,"file":"api.connection.js","sourceRoot":"","sources":["../../src/stellar/api.connection.ts"],"names":[],"mappings":";AAAA,8DAA8D;AAC9D,mCAAmC;;;AAGnC,gDAU0B;AAK1B,+CAA2C;AAS3C,MAAa,oBAAoB;IAWtB;IACC;IAJD,WAAW,CAAyB;IAE7C,YACS,SAAqB,EACpB,kBAA6B;QAD9B,cAAS,GAAT,SAAS,CAAY;QACpB,uBAAkB,GAAlB,kBAAkB,CAAW;QAErC,IAAI,CAAC,WAAW,GAAG;YACjB,KAAK,EAAE,SAAS,CAAC,UAAU,EAAE;YAC7B,QAAQ,EAAE,SAAS,CAAC,WAAW,EAAE;YACjC,WAAW,EAAE,SAAS,CAAC,cAAc,EAAE;SACxC,CAAC;IACJ,CAAC;IAED,MAAM,CAAC,KAAK,CAAC,MAAM,CACjB,QAAgB,EAChB,iBAA4B,EAC5B,YAA2B,EAC3B,OAAuB,EACvB,MAA+B;QAE/B,MAAM,GAAG,GAAG,IAAI,wBAAU,CAAC,QAAQ,EAAE,YAAY,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC;QAEpE,MAAM,GAAG,CAAC,IAAI,EAAE,CAAC;QAEjB,OAAO,IAAI,oBAAoB,CAAC,GAAG,EAAE,iBAAiB,CAAC,CAAC;IAC1D,CAAC;IAED,OAAO,CAAC,MAAc;QACpB,0BAA0B;QAC1B,MAAM,IAAI,KAAK,CAAC,iBAAiB,CAAC,CAAC;IACrC,CAAC;IAED,KAAK,CAAC,UAAU;QACd,MAAM,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,CAAC;IACjC,CAAC;IAED,KAAK,CAAC,aAAa;QACjB,MAAM,IAAI,CAAC,SAAS,CAAC,UAAU,EAAE,CAAC;IACpC,CAAC;IAED,KAAK,CAAC,WAAW,CAAC,OAAiB;QACjC,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;QACtE,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,WAAW,GAAG,oBAAoB,CAAC,WAAW,CAAC;IAE/C,MAAM,CAAC,WAAW,CAAC,CAAQ;QACzB,IAAI,eAAmC,CAAC;QACxC,IAAI,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE;YACjC,eAAe,GAAG,IAAI,wBAAY,CAAC,CAAC,CAAC,CAAC;SACvC;aAAM,IAAI,CAAC,CAAC,OAAO,CAAC,UAAU,CAAC,oBAAoB,CAAC,EAAE;YACrD,eAAe,GAAG,IAAI,8BAAkB,CAAC,CAAC,CAAC,CAAC;SAC7C;aAAM,IACL,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,qBAAqB,CAAC;YACzC,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,mBAAmB,CAAC,EACvC;YACA,eAAe,GAAG,IAAI,0BAAc,CAAC,CAAC,CAAC,CAAC;SACzC;aAAM,IAAI,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,uBAAuB,CAAC,EAAE;YACtD,eAAe,GAAG,IAAI,8BAAkB,CAAC,CAAC,CAAC,CAAC;SAC7C;aAAM;YACL,eAAe,GAAG,IAAI,8BAAkB,CACtC,CAAC,CAAC,IAAI,EACN,CAAC,CAAC,OAAO,EACT,wBAAY,CAAC,OAAO,CACrB,CAAC;SACH;QACD,OAAO,eAAe,CAAC;IACzB,CAAC;CACF;AA7ED,oDA6EC","sourcesContent":["// Copyright 2020-2024 SubQuery Pte Ltd authors & contributors\n// SPDX-License-Identifier: GPL-3.0\n\nimport { EventEmitter2 } from '@nestjs/event-emitter';\nimport {\n ApiConnectionError,\n ApiErrorType,\n IApiConnectionSpecific,\n NetworkMetadataPayload,\n TimeoutError,\n RateLimitError,\n DisconnectionError,\n LargeResponseError,\n IBlock,\n} from '@subql/node-core';\nimport {\n StellarBlockWrapper,\n IStellarEndpointConfig,\n} from '@subql/types-stellar';\nimport { StellarApi } from './api.stellar';\nimport SafeStellarProvider from './safe-api';\nimport { SorobanServer } from './soroban.server';\n\ntype FetchFunc = (\n api: StellarApi,\n batch: number[],\n) => Promise<IBlock<StellarBlockWrapper>[]>;\n\nexport class StellarApiConnection\n implements\n IApiConnectionSpecific<\n StellarApi,\n SafeStellarProvider,\n IBlock<StellarBlockWrapper>[]\n >\n{\n readonly networkMeta: NetworkMetadataPayload;\n\n constructor(\n public unsafeApi: StellarApi,\n private fetchBlocksBatches: FetchFunc,\n ) {\n this.networkMeta = {\n chain: unsafeApi.getChainId(),\n specName: unsafeApi.getSpecName(),\n genesisHash: unsafeApi.getGenesisHash(),\n };\n }\n\n static async create(\n endpoint: string,\n fetchBlockBatches: FetchFunc,\n eventEmitter: EventEmitter2,\n soroban?: SorobanServer,\n config?: IStellarEndpointConfig,\n ): Promise<StellarApiConnection> {\n const api = new StellarApi(endpoint, eventEmitter, soroban, config);\n\n await api.init();\n\n return new StellarApiConnection(api, fetchBlockBatches);\n }\n\n safeApi(height: number): SafeStellarProvider {\n //safe api not implemented\n throw new Error(`Not Implemented`);\n }\n\n async apiConnect(): Promise<void> {\n await this.unsafeApi.connect();\n }\n\n async apiDisconnect(): Promise<void> {\n await this.unsafeApi.disconnect();\n }\n\n async fetchBlocks(heights: number[]): Promise<IBlock<StellarBlockWrapper>[]> {\n const blocks = await this.fetchBlocksBatches(this.unsafeApi, heights);\n return blocks;\n }\n\n handleError = StellarApiConnection.handleError;\n\n static handleError(e: Error): ApiConnectionError {\n let formatted_error: ApiConnectionError;\n if (e.message.includes(`Timeout`)) {\n formatted_error = new TimeoutError(e);\n } else if (e.message.startsWith(`disconnected from `)) {\n formatted_error = new DisconnectionError(e);\n } else if (\n e.message.includes(`Rate Limit Exceeded`) ||\n e.message.includes('Too Many Requests')\n ) {\n formatted_error = new RateLimitError(e);\n } else if (e.message.includes(`limit must not exceed`)) {\n formatted_error = new LargeResponseError(e);\n } else {\n formatted_error = new ApiConnectionError(\n e.name,\n e.message,\n ApiErrorType.Default,\n );\n }\n return formatted_error;\n }\n}\n"]}
1
+ {"version":3,"file":"api.connection.js","sourceRoot":"","sources":["../../src/stellar/api.connection.ts"],"names":[],"mappings":";AAAA,8DAA8D;AAC9D,mCAAmC;;;AAEnC,gDAU0B;AAK1B,+CAA2C;AAS3C,MAAa,oBAAoB;IAWtB;IACC;IAJD,WAAW,CAAyB;IAE7C,YACS,SAAqB,EACpB,kBAA6B;QAD9B,cAAS,GAAT,SAAS,CAAY;QACpB,uBAAkB,GAAlB,kBAAkB,CAAW;QAErC,IAAI,CAAC,WAAW,GAAG;YACjB,KAAK,EAAE,SAAS,CAAC,UAAU,EAAE;YAC7B,QAAQ,EAAE,SAAS,CAAC,WAAW,EAAE;YACjC,WAAW,EAAE,SAAS,CAAC,cAAc,EAAE;SACxC,CAAC;IACJ,CAAC;IAED,MAAM,CAAC,KAAK,CAAC,MAAM,CACjB,QAAgB,EAChB,iBAA4B,EAC5B,OAAuB,EACvB,MAA+B;QAE/B,MAAM,GAAG,GAAG,IAAI,wBAAU,CAAC,QAAQ,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC;QAEtD,MAAM,GAAG,CAAC,IAAI,EAAE,CAAC;QAEjB,OAAO,IAAI,oBAAoB,CAAC,GAAG,EAAE,iBAAiB,CAAC,CAAC;IAC1D,CAAC;IAED,OAAO,CAAC,MAAc;QACpB,0BAA0B;QAC1B,MAAM,IAAI,KAAK,CAAC,iBAAiB,CAAC,CAAC;IACrC,CAAC;IAED,KAAK,CAAC,UAAU;QACd,MAAM,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,CAAC;IACjC,CAAC;IAED,KAAK,CAAC,aAAa;QACjB,MAAM,IAAI,CAAC,SAAS,CAAC,UAAU,EAAE,CAAC;IACpC,CAAC;IAED,KAAK,CAAC,WAAW,CAAC,OAAiB;QACjC,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;QACtE,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,WAAW,GAAG,oBAAoB,CAAC,WAAW,CAAC;IAE/C,MAAM,CAAC,WAAW,CAAC,CAAQ;QACzB,IAAI,eAAmC,CAAC;QACxC,IAAI,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE;YACjC,eAAe,GAAG,IAAI,wBAAY,CAAC,CAAC,CAAC,CAAC;SACvC;aAAM,IAAI,CAAC,CAAC,OAAO,CAAC,UAAU,CAAC,oBAAoB,CAAC,EAAE;YACrD,eAAe,GAAG,IAAI,8BAAkB,CAAC,CAAC,CAAC,CAAC;SAC7C;aAAM,IACL,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,qBAAqB,CAAC;YACzC,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,mBAAmB,CAAC,EACvC;YACA,eAAe,GAAG,IAAI,0BAAc,CAAC,CAAC,CAAC,CAAC;SACzC;aAAM,IAAI,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,uBAAuB,CAAC,EAAE;YACtD,eAAe,GAAG,IAAI,8BAAkB,CAAC,CAAC,CAAC,CAAC;SAC7C;aAAM;YACL,eAAe,GAAG,IAAI,8BAAkB,CACtC,CAAC,CAAC,IAAI,EACN,CAAC,CAAC,OAAO,EACT,wBAAY,CAAC,OAAO,CACrB,CAAC;SACH;QACD,OAAO,eAAe,CAAC;IACzB,CAAC;CACF;AA5ED,oDA4EC","sourcesContent":["// Copyright 2020-2025 SubQuery Pte Ltd authors & contributors\n// SPDX-License-Identifier: GPL-3.0\n\nimport {\n ApiConnectionError,\n ApiErrorType,\n IApiConnectionSpecific,\n NetworkMetadataPayload,\n TimeoutError,\n RateLimitError,\n DisconnectionError,\n LargeResponseError,\n IBlock,\n} from '@subql/node-core';\nimport {\n StellarBlockWrapper,\n IStellarEndpointConfig,\n} from '@subql/types-stellar';\nimport { StellarApi } from './api.stellar';\nimport SafeStellarProvider from './safe-api';\nimport { SorobanServer } from './soroban.server';\n\ntype FetchFunc = (\n api: StellarApi,\n batch: number[],\n) => Promise<IBlock<StellarBlockWrapper>[]>;\n\nexport class StellarApiConnection\n implements\n IApiConnectionSpecific<\n StellarApi,\n SafeStellarProvider,\n IBlock<StellarBlockWrapper>[]\n >\n{\n readonly networkMeta: NetworkMetadataPayload;\n\n constructor(\n public unsafeApi: StellarApi,\n private fetchBlocksBatches: FetchFunc,\n ) {\n this.networkMeta = {\n chain: unsafeApi.getChainId(),\n specName: unsafeApi.getSpecName(),\n genesisHash: unsafeApi.getGenesisHash(),\n };\n }\n\n static async create(\n endpoint: string,\n fetchBlockBatches: FetchFunc,\n soroban?: SorobanServer,\n config?: IStellarEndpointConfig,\n ): Promise<StellarApiConnection> {\n const api = new StellarApi(endpoint, soroban, config);\n\n await api.init();\n\n return new StellarApiConnection(api, fetchBlockBatches);\n }\n\n safeApi(height: number): SafeStellarProvider {\n //safe api not implemented\n throw new Error(`Not Implemented`);\n }\n\n async apiConnect(): Promise<void> {\n await this.unsafeApi.connect();\n }\n\n async apiDisconnect(): Promise<void> {\n await this.unsafeApi.disconnect();\n }\n\n async fetchBlocks(heights: number[]): Promise<IBlock<StellarBlockWrapper>[]> {\n const blocks = await this.fetchBlocksBatches(this.unsafeApi, heights);\n return blocks;\n }\n\n handleError = StellarApiConnection.handleError;\n\n static handleError(e: Error): ApiConnectionError {\n let formatted_error: ApiConnectionError;\n if (e.message.includes(`Timeout`)) {\n formatted_error = new TimeoutError(e);\n } else if (e.message.startsWith(`disconnected from `)) {\n formatted_error = new DisconnectionError(e);\n } else if (\n e.message.includes(`Rate Limit Exceeded`) ||\n e.message.includes('Too Many Requests')\n ) {\n formatted_error = new RateLimitError(e);\n } else if (e.message.includes(`limit must not exceed`)) {\n formatted_error = new LargeResponseError(e);\n } else {\n formatted_error = new ApiConnectionError(\n e.name,\n e.message,\n ApiErrorType.Default,\n );\n }\n return formatted_error;\n }\n}\n"]}
@@ -1,8 +1,7 @@
1
1
  "use strict";
2
- // Copyright 2020-2024 SubQuery Pte Ltd authors & contributors
2
+ // Copyright 2020-2025 SubQuery Pte Ltd authors & contributors
3
3
  // SPDX-License-Identifier: GPL-3.0
4
4
  Object.defineProperty(exports, "__esModule", { value: true });
5
- const event_emitter_1 = require("@nestjs/event-emitter");
6
5
  const node_core_1 = require("@subql/node-core");
7
6
  const api_connection_1 = require("./api.connection");
8
7
  const api_stellar_1 = require("./api.stellar");
@@ -30,12 +29,12 @@ describe('StellarApiConnection', () => {
30
29
  const fetchBlockBatches = jest.fn().mockResolvedValue(mockBlocks);
31
30
  beforeEach(async () => {
32
31
  sorobanApi = new soroban_server_1.SorobanServer(SOROBAN_ENDPOINT);
33
- unsafeApi = new api_stellar_1.StellarApi(HTTP_ENDPOINT, new event_emitter_1.EventEmitter2(), sorobanApi);
32
+ unsafeApi = new api_stellar_1.StellarApi(HTTP_ENDPOINT, sorobanApi);
34
33
  await unsafeApi.init();
35
34
  apiConnection = new api_connection_1.StellarApiConnection(unsafeApi, fetchBlockBatches);
36
35
  });
37
36
  it('creates a connection', async () => {
38
- expect(await api_connection_1.StellarApiConnection.create(HTTP_ENDPOINT, fetchBlockBatches, new event_emitter_1.EventEmitter2(), sorobanApi)).toBeInstanceOf(api_connection_1.StellarApiConnection);
37
+ expect(await api_connection_1.StellarApiConnection.create(HTTP_ENDPOINT, fetchBlockBatches, sorobanApi)).toBeInstanceOf(api_connection_1.StellarApiConnection);
39
38
  });
40
39
  it('fetches blocks', async () => {
41
40
  const result = await apiConnection.fetchBlocks([1, 2]);
@@ -1 +1 @@
1
- {"version":3,"file":"api.connection.spec.js","sourceRoot":"","sources":["../../src/stellar/api.connection.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 { EventEmitter2 } from '@nestjs/event-emitter';\nimport {\n ApiConnectionError,\n ApiErrorType,\n DisconnectionError,\n LargeResponseError,\n RateLimitError,\n TimeoutError,\n} from '@subql/node-core';\nimport { StellarBlock, StellarBlockWrapper } from '@subql/types-stellar';\nimport { StellarApiConnection } from './api.connection';\nimport { StellarApi } from './api.stellar';\nimport { SorobanServer } from './soroban.server';\n\nconst HTTP_ENDPOINT = 'https://horizon-futurenet.stellar.org';\nconst SOROBAN_ENDPOINT = 'https://rpc-futurenet.stellar.org';\n\ndescribe('StellarApiConnection', () => {\n let apiConnection: StellarApiConnection;\n let unsafeApi: StellarApi;\n let sorobanApi: SorobanServer;\n const mockBlocks: StellarBlockWrapper[] = [\n {\n block: { sequence: 1, hash: 'hash1' } as unknown as StellarBlock,\n transactions: [],\n operations: [],\n effects: [],\n },\n {\n block: { sequence: 2, hash: 'hash2' } as unknown as StellarBlock,\n transactions: [],\n operations: [],\n effects: [],\n },\n ];\n\n const fetchBlockBatches = jest.fn().mockResolvedValue(mockBlocks);\n\n beforeEach(async () => {\n sorobanApi = new SorobanServer(SOROBAN_ENDPOINT);\n unsafeApi = new StellarApi(HTTP_ENDPOINT, new EventEmitter2(), sorobanApi);\n await unsafeApi.init();\n apiConnection = new StellarApiConnection(unsafeApi, fetchBlockBatches);\n });\n\n it('creates a connection', async () => {\n expect(\n await StellarApiConnection.create(\n HTTP_ENDPOINT,\n fetchBlockBatches,\n new EventEmitter2(),\n sorobanApi,\n ),\n ).toBeInstanceOf(StellarApiConnection);\n });\n\n it('fetches blocks', async () => {\n const result = await apiConnection.fetchBlocks([1, 2]);\n expect(result).toEqual(mockBlocks);\n expect(fetchBlockBatches).toHaveBeenCalledWith(unsafeApi, [1, 2]);\n });\n\n describe('Error handling', () => {\n it('handles timeout errors', () => {\n const error = new Error('Timeout');\n const handledError = StellarApiConnection.handleError(error);\n expect(handledError).toBeInstanceOf(TimeoutError);\n });\n\n it('handles disconnection errors', () => {\n const error = new Error('disconnected from ');\n const handledError = StellarApiConnection.handleError(error);\n expect(handledError).toBeInstanceOf(DisconnectionError);\n });\n\n it('handles rate limit errors', () => {\n const error = new Error('Rate Limit Exceeded');\n const handledError = StellarApiConnection.handleError(error);\n expect(handledError).toBeInstanceOf(RateLimitError);\n });\n\n it('handles large response errors', () => {\n const error = new Error('limit must not exceed');\n const handledError = StellarApiConnection.handleError(error);\n expect(handledError).toBeInstanceOf(LargeResponseError);\n });\n\n it('handles default errors', () => {\n const error = new Error('default error');\n const handledError = StellarApiConnection.handleError(error);\n expect(handledError).toBeInstanceOf(ApiConnectionError);\n expect(handledError.errorType).toEqual(ApiErrorType.Default);\n });\n });\n});\n"]}
1
+ {"version":3,"file":"api.connection.spec.js","sourceRoot":"","sources":["../../src/stellar/api.connection.spec.ts"],"names":[],"mappings":"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","sourcesContent":["// Copyright 2020-2025 SubQuery Pte Ltd authors & contributors\n// SPDX-License-Identifier: GPL-3.0\n\nimport {\n ApiConnectionError,\n ApiErrorType,\n DisconnectionError,\n LargeResponseError,\n RateLimitError,\n TimeoutError,\n} from '@subql/node-core';\nimport { StellarBlock, StellarBlockWrapper } from '@subql/types-stellar';\nimport { StellarApiConnection } from './api.connection';\nimport { StellarApi } from './api.stellar';\nimport { SorobanServer } from './soroban.server';\n\nconst HTTP_ENDPOINT = 'https://horizon-futurenet.stellar.org';\nconst SOROBAN_ENDPOINT = 'https://rpc-futurenet.stellar.org';\n\ndescribe('StellarApiConnection', () => {\n let apiConnection: StellarApiConnection;\n let unsafeApi: StellarApi;\n let sorobanApi: SorobanServer;\n const mockBlocks: StellarBlockWrapper[] = [\n {\n block: { sequence: 1, hash: 'hash1' } as unknown as StellarBlock,\n transactions: [],\n operations: [],\n effects: [],\n },\n {\n block: { sequence: 2, hash: 'hash2' } as unknown as StellarBlock,\n transactions: [],\n operations: [],\n effects: [],\n },\n ];\n\n const fetchBlockBatches = jest.fn().mockResolvedValue(mockBlocks);\n\n beforeEach(async () => {\n sorobanApi = new SorobanServer(SOROBAN_ENDPOINT);\n unsafeApi = new StellarApi(HTTP_ENDPOINT, sorobanApi);\n await unsafeApi.init();\n apiConnection = new StellarApiConnection(unsafeApi, fetchBlockBatches);\n });\n\n it('creates a connection', async () => {\n expect(\n await StellarApiConnection.create(\n HTTP_ENDPOINT,\n fetchBlockBatches,\n sorobanApi,\n ),\n ).toBeInstanceOf(StellarApiConnection);\n });\n\n it('fetches blocks', async () => {\n const result = await apiConnection.fetchBlocks([1, 2]);\n expect(result).toEqual(mockBlocks);\n expect(fetchBlockBatches).toHaveBeenCalledWith(unsafeApi, [1, 2]);\n });\n\n describe('Error handling', () => {\n it('handles timeout errors', () => {\n const error = new Error('Timeout');\n const handledError = StellarApiConnection.handleError(error);\n expect(handledError).toBeInstanceOf(TimeoutError);\n });\n\n it('handles disconnection errors', () => {\n const error = new Error('disconnected from ');\n const handledError = StellarApiConnection.handleError(error);\n expect(handledError).toBeInstanceOf(DisconnectionError);\n });\n\n it('handles rate limit errors', () => {\n const error = new Error('Rate Limit Exceeded');\n const handledError = StellarApiConnection.handleError(error);\n expect(handledError).toBeInstanceOf(RateLimitError);\n });\n\n it('handles large response errors', () => {\n const error = new Error('limit must not exceed');\n const handledError = StellarApiConnection.handleError(error);\n expect(handledError).toBeInstanceOf(LargeResponseError);\n });\n\n it('handles default errors', () => {\n const error = new Error('default error');\n const handledError = StellarApiConnection.handleError(error);\n expect(handledError).toBeInstanceOf(ApiConnectionError);\n expect(handledError.errorType).toEqual(ApiErrorType.Default);\n });\n });\n});\n"]}
@@ -1,5 +1,5 @@
1
1
  "use strict";
2
- // Copyright 2020-2024 SubQuery Pte Ltd authors & contributors
2
+ // Copyright 2020-2025 SubQuery Pte Ltd authors & contributors
3
3
  // SPDX-License-Identifier: GPL-3.0
4
4
  var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
5
5
  var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
@@ -57,7 +57,7 @@ let StellarApiService = class StellarApiService extends node_core_1.ApiService {
57
57
  const sorobanClient = sorobanEndpoint
58
58
  ? new soroban_server_1.SorobanServer(sorobanEndpoint)
59
59
  : undefined;
60
- await this.createConnections(network, (endpoint, config) => api_connection_1.StellarApiConnection.create(endpoint, this.fetchBlockBatches, this.eventEmitter, sorobanClient, config));
60
+ await this.createConnections(network, (endpoint, config) => api_connection_1.StellarApiConnection.create(endpoint, this.fetchBlockBatches, sorobanClient, config));
61
61
  return this;
62
62
  }
63
63
  get api() {
@@ -1 +1 @@
1
- {"version":3,"file":"api.service.stellar.js","sourceRoot":"","sources":["../../src/stellar/api.service.stellar.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 { Inject, Injectable } from '@nestjs/common';\nimport { EventEmitter2 } from '@nestjs/event-emitter';\nimport {\n StellarProjectNetwork,\n StellarProjectNetworkConfig,\n} from '@subql/common-stellar';\nimport {\n ApiService,\n ConnectionPoolService,\n getLogger,\n ProjectUpgradeService,\n IBlock,\n exitWithError,\n NodeConfig,\n} from '@subql/node-core';\nimport { IEndpointConfig } from '@subql/types-core';\nimport {\n StellarBlockWrapper,\n SubqlDatasource,\n IStellarEndpointConfig,\n} from '@subql/types-stellar';\nimport {\n SubqueryProject,\n dsHasSorobanEventHandler,\n} from '../configure/SubqueryProject';\nimport { StellarApiConnection } from './api.connection';\nimport { StellarApi } from './api.stellar';\nimport SafeStellarProvider from './safe-api';\nimport { SorobanServer } from './soroban.server';\n\nconst logger = getLogger('api');\n\n@Injectable()\nexport class StellarApiService extends ApiService<\n StellarApi,\n SafeStellarProvider,\n IBlock<StellarBlockWrapper>[],\n StellarApiConnection,\n IStellarEndpointConfig\n> {\n private nodeConfig: NodeConfig;\n constructor(\n @Inject('ISubqueryProject') private project: SubqueryProject,\n connectionPoolService: ConnectionPoolService<StellarApiConnection>,\n eventEmitter: EventEmitter2,\n nodeConfig: NodeConfig,\n ) {\n super(connectionPoolService, eventEmitter);\n this.nodeConfig = nodeConfig;\n }\n\n async init(): Promise<StellarApiService> {\n let network: StellarProjectNetworkConfig;\n try {\n network = this.project.network;\n } catch (e) {\n exitWithError(new Error(`Failed to init api`, { cause: e }), logger);\n }\n\n if (this.nodeConfig.primaryNetworkEndpoint) {\n const [endpoint, config] = this.nodeConfig.primaryNetworkEndpoint;\n (network.endpoint as Record<string, IEndpointConfig>)[endpoint] = config;\n }\n\n const sorobanEndpoint: string | undefined = network.sorobanEndpoint;\n\n if (!network.sorobanEndpoint && sorobanEndpoint) {\n //update sorobanEndpoint from parent project\n this.project.network.sorobanEndpoint = sorobanEndpoint;\n }\n\n if (\n dsHasSorobanEventHandler([\n ...this.project.dataSources,\n ...(this.project.templates as SubqlDatasource[]),\n ]) &&\n !sorobanEndpoint\n ) {\n throw new Error(\n `Soroban network endpoint must be provided for network. chainId=\"${this.project.network.chainId}\"`,\n );\n }\n\n const sorobanClient = sorobanEndpoint\n ? new SorobanServer(sorobanEndpoint)\n : undefined;\n\n await this.createConnections(network, (endpoint, config) =>\n StellarApiConnection.create(\n endpoint,\n this.fetchBlockBatches,\n this.eventEmitter,\n sorobanClient,\n config,\n ),\n );\n\n return this;\n }\n\n get api(): StellarApi {\n return this.unsafeApi;\n }\n\n safeApi(height: number): SafeStellarProvider {\n const maxRetries = 5;\n\n const handler: ProxyHandler<SafeStellarProvider> = {\n get: (target, prop, receiver) => {\n const originalMethod = target[prop as keyof SafeStellarProvider];\n if (typeof originalMethod === 'function') {\n return async (\n ...args: any[]\n ): Promise<ReturnType<typeof originalMethod>> => {\n let retries = 0;\n let currentApi = target;\n let throwingError: Error | undefined;\n\n while (retries < maxRetries) {\n try {\n return await originalMethod.apply(currentApi, args);\n } catch (error: any) {\n logger.warn(\n `Request failed with api at height ${height} (retry ${retries}): ${error.message}`,\n );\n throwingError = error;\n currentApi = this.unsafeApi.getSafeApi(height);\n retries++;\n }\n }\n\n logger.error(\n `Maximum retries (${maxRetries}) exceeded for api at height ${height}`,\n );\n if (!throwingError) {\n throw new Error('Failed to make request, maximum retries failed');\n }\n throw throwingError;\n };\n }\n return Reflect.get(target, prop, receiver);\n },\n };\n\n return new Proxy(this.unsafeApi.getSafeApi(height), handler);\n }\n\n private async fetchBlockBatches(\n api: StellarApi,\n batch: number[],\n ): Promise<IBlock<StellarBlockWrapper>[]> {\n return api.fetchBlocks(batch);\n }\n}\n"]}
1
+ {"version":3,"file":"api.service.stellar.js","sourceRoot":"","sources":["../../src/stellar/api.service.stellar.ts"],"names":[],"mappings":"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","sourcesContent":["// Copyright 2020-2025 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 { StellarProjectNetworkConfig } from '@subql/common-stellar';\nimport {\n ApiService,\n ConnectionPoolService,\n getLogger,\n IBlock,\n exitWithError,\n NodeConfig,\n} from '@subql/node-core';\nimport { IEndpointConfig } from '@subql/types-core';\nimport {\n StellarBlockWrapper,\n SubqlDatasource,\n IStellarEndpointConfig,\n} from '@subql/types-stellar';\nimport {\n SubqueryProject,\n dsHasSorobanEventHandler,\n} from '../configure/SubqueryProject';\nimport { StellarApiConnection } from './api.connection';\nimport { StellarApi } from './api.stellar';\nimport SafeStellarProvider from './safe-api';\nimport { SorobanServer } from './soroban.server';\n\nconst logger = getLogger('api');\n\n@Injectable()\nexport class StellarApiService extends ApiService<\n StellarApi,\n SafeStellarProvider,\n IBlock<StellarBlockWrapper>[],\n StellarApiConnection,\n IStellarEndpointConfig\n> {\n private nodeConfig: NodeConfig;\n constructor(\n @Inject('ISubqueryProject') private project: SubqueryProject,\n connectionPoolService: ConnectionPoolService<StellarApiConnection>,\n eventEmitter: EventEmitter2,\n nodeConfig: NodeConfig,\n ) {\n super(connectionPoolService, eventEmitter);\n this.nodeConfig = nodeConfig;\n }\n\n async init(): Promise<StellarApiService> {\n let network: StellarProjectNetworkConfig;\n try {\n network = this.project.network;\n } catch (e) {\n exitWithError(new Error(`Failed to init api`, { cause: e }), logger);\n }\n\n if (this.nodeConfig.primaryNetworkEndpoint) {\n const [endpoint, config] = this.nodeConfig.primaryNetworkEndpoint;\n (network.endpoint as Record<string, IEndpointConfig>)[endpoint] = config;\n }\n\n const sorobanEndpoint: string | undefined = network.sorobanEndpoint;\n\n if (!network.sorobanEndpoint && sorobanEndpoint) {\n //update sorobanEndpoint from parent project\n this.project.network.sorobanEndpoint = sorobanEndpoint;\n }\n\n if (\n dsHasSorobanEventHandler([\n ...this.project.dataSources,\n ...(this.project.templates as SubqlDatasource[]),\n ]) &&\n !sorobanEndpoint\n ) {\n throw new Error(\n `Soroban network endpoint must be provided for network. chainId=\"${this.project.network.chainId}\"`,\n );\n }\n\n const sorobanClient = sorobanEndpoint\n ? new SorobanServer(sorobanEndpoint)\n : undefined;\n\n await this.createConnections(network, (endpoint, config) =>\n StellarApiConnection.create(\n endpoint,\n this.fetchBlockBatches,\n sorobanClient,\n config,\n ),\n );\n\n return this;\n }\n\n get api(): StellarApi {\n return this.unsafeApi;\n }\n\n safeApi(height: number): SafeStellarProvider {\n const maxRetries = 5;\n\n const handler: ProxyHandler<SafeStellarProvider> = {\n get: (target, prop, receiver) => {\n const originalMethod = target[prop as keyof SafeStellarProvider];\n if (typeof originalMethod === 'function') {\n return async (\n ...args: any[]\n ): Promise<ReturnType<typeof originalMethod>> => {\n let retries = 0;\n let currentApi = target;\n let throwingError: Error | undefined;\n\n while (retries < maxRetries) {\n try {\n return await originalMethod.apply(currentApi, args);\n } catch (error: any) {\n logger.warn(\n `Request failed with api at height ${height} (retry ${retries}): ${error.message}`,\n );\n throwingError = error;\n currentApi = this.unsafeApi.getSafeApi(height);\n retries++;\n }\n }\n\n logger.error(\n `Maximum retries (${maxRetries}) exceeded for api at height ${height}`,\n );\n if (!throwingError) {\n throw new Error('Failed to make request, maximum retries failed');\n }\n throw throwingError;\n };\n }\n return Reflect.get(target, prop, receiver);\n },\n };\n\n return new Proxy(this.unsafeApi.getSafeApi(height), handler);\n }\n\n private async fetchBlockBatches(\n api: StellarApi,\n batch: number[],\n ): Promise<IBlock<StellarBlockWrapper>[]> {\n return api.fetchBlocks(batch);\n }\n}\n"]}
@@ -1,5 +1,5 @@
1
1
  "use strict";
2
- // Copyright 2020-2024 SubQuery Pte Ltd authors & contributors
2
+ // Copyright 2020-2025 SubQuery Pte Ltd authors & contributors
3
3
  // SPDX-License-Identifier: GPL-3.0
4
4
  Object.defineProperty(exports, "__esModule", { value: true });
5
5
  const event_emitter_1 = require("@nestjs/event-emitter");
@@ -1 +1 @@
1
- {"version":3,"file":"api.service.stellar.spec.js","sourceRoot":"","sources":["../../src/stellar/api.service.stellar.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 { scValToNative } from '@stellar/stellar-sdk';\nimport { ConnectionPoolService, delay, NodeConfig } from '@subql/node-core';\nimport { ConnectionPoolStateManager } from '@subql/node-core/dist';\nimport { GraphQLSchema } from 'graphql';\nimport { range, some } from 'lodash';\nimport { SubqueryProject } from '../configure/SubqueryProject';\nimport { StellarApiService } from './api.service.stellar';\nimport { StellarApi } from './api.stellar';\nimport { StellarBlockWrapped } from './block.stellar';\n\nconst HTTP_ENDPOINT = 'https://horizon-futurenet.stellar.org';\nconst SOROBAN_ENDPOINT = 'https://rpc-futurenet.stellar.org';\n\nfunction testSubqueryProject(\n endpoint: string,\n sorobanEndpoint: string,\n): SubqueryProject {\n return {\n network: {\n endpoint: [endpoint],\n sorobanEndpoint,\n chainId: 'Test SDF Future Network ; October 2022',\n },\n dataSources: [],\n id: 'test',\n root: './',\n schema: new GraphQLSchema({}),\n templates: [],\n } as unknown as SubqueryProject;\n}\n\nconst prepareApiService = async (\n endpoint: string = HTTP_ENDPOINT,\n soroban: string = SOROBAN_ENDPOINT,\n project?: SubqueryProject,\n): Promise<[StellarApiService, INestApplication]> => {\n const module = await Test.createTestingModule({\n providers: [\n ConnectionPoolService,\n ConnectionPoolStateManager,\n {\n provide: 'IProjectUpgradeService',\n useFactory: () => ({}),\n },\n {\n provide: NodeConfig,\n useFactory: () => ({}),\n },\n {\n provide: 'ISubqueryProject',\n useFactory: () => project ?? testSubqueryProject(endpoint, soroban),\n },\n StellarApiService,\n ],\n imports: [EventEmitterModule.forRoot()],\n }).compile();\n\n const app = module.createNestApplication();\n await app.init();\n const apiService = app.get(StellarApiService);\n await apiService.init();\n return [apiService, app];\n};\n\njest.setTimeout(90000);\ndescribe('StellarApiService', () => {\n let apiService: StellarApiService;\n let app: INestApplication;\n\n beforeEach(async () => {\n [apiService, app] = await prepareApiService();\n });\n\n it('should instantiate api', () => {\n expect(apiService.api).toBeInstanceOf(StellarApi);\n });\n\n it('should fetch blocks', async () => {\n const latestHeight = await apiService.api.getFinalizedBlockHeight();\n const blocks = await apiService.fetchBlocks(\n range(latestHeight - 1, latestHeight),\n );\n expect(blocks).toBeDefined();\n expect(blocks[0].block.block.sequence).toEqual(latestHeight - 1);\n });\n\n it('should throw error when chainId does not match', async () => {\n const faultyProject = {\n ...testSubqueryProject(HTTP_ENDPOINT, SOROBAN_ENDPOINT),\n network: {\n ...testSubqueryProject(HTTP_ENDPOINT, SOROBAN_ENDPOINT).network,\n chainId: 'Incorrect ChainId',\n },\n };\n\n await expect(\n prepareApiService(\n HTTP_ENDPOINT,\n SOROBAN_ENDPOINT,\n faultyProject as unknown as SubqueryProject,\n ),\n ).rejects.toThrow();\n });\n\n it('fails after maximum retries', async () => {\n const api = apiService.unsafeApi;\n\n // Mock the fetchBlocks method to always throw an error\n (api as any).fetchBlocks = jest\n .fn()\n .mockRejectedValue(new Error('Network error'));\n\n await expect(\n (api as any).fetchBlocks(range(50000, 50100)),\n ).rejects.toThrow();\n });\n});\n\n// Skip test as rpc is pruned and block can be missing,\n// To test this, find any block with transfer event first\ndescribe.skip('testnet StellarApiService', () => {\n let apiService: StellarApiService;\n let app: INestApplication;\n\n function testSubqueryProject2(\n endpoint: string,\n sorobanEndpoint: string,\n ): SubqueryProject {\n return {\n network: {\n endpoint: [endpoint],\n sorobanEndpoint,\n chainId: 'Test SDF Network ; September 2015',\n },\n dataSources: [],\n id: 'test',\n root: './',\n schema: new GraphQLSchema({}),\n templates: [],\n } as unknown as SubqueryProject;\n }\n\n beforeEach(async () => {\n [apiService, app] = await prepareApiService(\n 'https://horizon-testnet.stellar.org',\n 'https://soroban-testnet.stellar.org',\n testSubqueryProject2(\n 'https://horizon-testnet.stellar.org',\n 'https://soroban-testnet.stellar.org',\n ),\n );\n });\n\n it('should fetch blocks, and decode address', async () => {\n const blocks = await apiService.fetchBlocks([228236]);\n expect(blocks).toBeDefined();\n\n const block228236 = blocks[0];\n const transferEvent = block228236.block.events?.find(\n (e) => e.id === '0000980266155778048-0000000001',\n );\n\n const [sys, from, to] = transferEvent!.topic;\n const decodedFrom = scValToNative(from).toString();\n const decodedTo = scValToNative(to).toString();\n\n console.log(scValToNative(sys));\n console.log(decodedFrom);\n console.log(decodedTo);\n });\n});\n"]}
1
+ {"version":3,"file":"api.service.stellar.spec.js","sourceRoot":"","sources":["../../src/stellar/api.service.stellar.spec.ts"],"names":[],"mappings":";AAAA,8DAA8D;AAC9D,mCAAmC;;AAGnC,yDAA2D;AAC3D,6CAAuC;AACvC,sDAAqD;AACrD,gDAAqE;AACrE,gDAAmE;AACnE,qCAAwC;AACxC,mCAA+B;AAE/B,+DAA0D;AAC1D,+CAA2C;AAE3C,MAAM,aAAa,GAAG,uCAAuC,CAAC;AAC9D,MAAM,gBAAgB,GAAG,mCAAmC,CAAC;AAE7D,SAAS,mBAAmB,CAC1B,QAAgB,EAChB,eAAuB;IAEvB,OAAO;QACL,OAAO,EAAE;YACP,QAAQ,EAAE,CAAC,QAAQ,CAAC;YACpB,eAAe;YACf,OAAO,EAAE,wCAAwC;SAClD;QACD,WAAW,EAAE,EAAE;QACf,EAAE,EAAE,MAAM;QACV,IAAI,EAAE,IAAI;QACV,MAAM,EAAE,IAAI,uBAAa,CAAC,EAAE,CAAC;QAC7B,SAAS,EAAE,EAAE;KACgB,CAAC;AAClC,CAAC;AAED,MAAM,iBAAiB,GAAG,KAAK,EAC7B,WAAmB,aAAa,EAChC,UAAkB,gBAAgB,EAClC,OAAyB,EACuB,EAAE;IAClD,MAAM,MAAM,GAAG,MAAM,cAAI,CAAC,mBAAmB,CAAC;QAC5C,SAAS,EAAE;YACT,iCAAqB;YACrB,iCAA0B;YAC1B;gBACE,OAAO,EAAE,wBAAwB;gBACjC,UAAU,EAAE,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC;aACvB;YACD;gBACE,OAAO,EAAE,sBAAU;gBACnB,UAAU,EAAE,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC;aACvB;YACD;gBACE,OAAO,EAAE,kBAAkB;gBAC3B,UAAU,EAAE,GAAG,EAAE,CAAC,OAAO,IAAI,mBAAmB,CAAC,QAAQ,EAAE,OAAO,CAAC;aACpE;YACD,uCAAiB;SAClB;QACD,OAAO,EAAE,CAAC,kCAAkB,CAAC,OAAO,EAAE,CAAC;KACxC,CAAC,CAAC,OAAO,EAAE,CAAC;IAEb,MAAM,GAAG,GAAG,MAAM,CAAC,qBAAqB,EAAE,CAAC;IAC3C,MAAM,GAAG,CAAC,IAAI,EAAE,CAAC;IACjB,MAAM,UAAU,GAAG,GAAG,CAAC,GAAG,CAAC,uCAAiB,CAAC,CAAC;IAC9C,MAAM,UAAU,CAAC,IAAI,EAAE,CAAC;IACxB,OAAO,CAAC,UAAU,EAAE,GAAG,CAAC,CAAC;AAC3B,CAAC,CAAC;AAEF,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;AACvB,QAAQ,CAAC,mBAAmB,EAAE,GAAG,EAAE;IACjC,IAAI,UAA6B,CAAC;IAClC,IAAI,GAAqB,CAAC;IAE1B,UAAU,CAAC,KAAK,IAAI,EAAE;QACpB,CAAC,UAAU,EAAE,GAAG,CAAC,GAAG,MAAM,iBAAiB,EAAE,CAAC;IAChD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,wBAAwB,EAAE,GAAG,EAAE;QAChC,MAAM,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,cAAc,CAAC,wBAAU,CAAC,CAAC;IACpD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,qBAAqB,EAAE,KAAK,IAAI,EAAE;QACnC,MAAM,YAAY,GAAG,MAAM,UAAU,CAAC,GAAG,CAAC,uBAAuB,EAAE,CAAC;QACpE,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC,WAAW,CACzC,IAAA,cAAK,EAAC,YAAY,GAAG,CAAC,EAAE,YAAY,CAAC,CACtC,CAAC;QACF,MAAM,CAAC,MAAM,CAAC,CAAC,WAAW,EAAE,CAAC;QAC7B,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,YAAY,GAAG,CAAC,CAAC,CAAC;IACnE,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,gDAAgD,EAAE,KAAK,IAAI,EAAE;QAC9D,MAAM,aAAa,GAAG;YACpB,GAAG,mBAAmB,CAAC,aAAa,EAAE,gBAAgB,CAAC;YACvD,OAAO,EAAE;gBACP,GAAG,mBAAmB,CAAC,aAAa,EAAE,gBAAgB,CAAC,CAAC,OAAO;gBAC/D,OAAO,EAAE,mBAAmB;aAC7B;SACF,CAAC;QAEF,MAAM,MAAM,CACV,iBAAiB,CACf,aAAa,EACb,gBAAgB,EAChB,aAA2C,CAC5C,CACF,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC;IACtB,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,6BAA6B,EAAE,KAAK,IAAI,EAAE;QAC3C,MAAM,GAAG,GAAG,UAAU,CAAC,SAAS,CAAC;QAEjC,uDAAuD;QACtD,GAAW,CAAC,WAAW,GAAG,IAAI;aAC5B,EAAE,EAAE;aACJ,iBAAiB,CAAC,IAAI,KAAK,CAAC,eAAe,CAAC,CAAC,CAAC;QAEjD,MAAM,MAAM,CACT,GAAW,CAAC,WAAW,CAAC,IAAA,cAAK,EAAC,KAAK,EAAE,KAAK,CAAC,CAAC,CAC9C,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC;IACtB,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,uDAAuD;AACvD,yDAAyD;AACzD,QAAQ,CAAC,IAAI,CAAC,2BAA2B,EAAE,GAAG,EAAE;IAC9C,IAAI,UAA6B,CAAC;IAClC,IAAI,GAAqB,CAAC;IAE1B,SAAS,oBAAoB,CAC3B,QAAgB,EAChB,eAAuB;QAEvB,OAAO;YACL,OAAO,EAAE;gBACP,QAAQ,EAAE,CAAC,QAAQ,CAAC;gBACpB,eAAe;gBACf,OAAO,EAAE,mCAAmC;aAC7C;YACD,WAAW,EAAE,EAAE;YACf,EAAE,EAAE,MAAM;YACV,IAAI,EAAE,IAAI;YACV,MAAM,EAAE,IAAI,uBAAa,CAAC,EAAE,CAAC;YAC7B,SAAS,EAAE,EAAE;SACgB,CAAC;IAClC,CAAC;IAED,UAAU,CAAC,KAAK,IAAI,EAAE;QACpB,CAAC,UAAU,EAAE,GAAG,CAAC,GAAG,MAAM,iBAAiB,CACzC,qCAAqC,EACrC,qCAAqC,EACrC,oBAAoB,CAClB,qCAAqC,EACrC,qCAAqC,CACtC,CACF,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,yCAAyC,EAAE,KAAK,IAAI,EAAE;QACvD,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC,WAAW,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC;QACtD,MAAM,CAAC,MAAM,CAAC,CAAC,WAAW,EAAE,CAAC;QAE7B,MAAM,WAAW,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;QAC9B,MAAM,aAAa,GAAG,WAAW,CAAC,KAAK,CAAC,MAAM,EAAE,IAAI,CAClD,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,gCAAgC,CACjD,CAAC;QAEF,MAAM,CAAC,GAAG,EAAE,IAAI,EAAE,EAAE,CAAC,GAAG,aAAc,CAAC,KAAK,CAAC;QAC7C,MAAM,WAAW,GAAG,IAAA,2BAAa,EAAC,IAAI,CAAC,CAAC,QAAQ,EAAE,CAAC;QACnD,MAAM,SAAS,GAAG,IAAA,2BAAa,EAAC,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC;QAE/C,OAAO,CAAC,GAAG,CAAC,IAAA,2BAAa,EAAC,GAAG,CAAC,CAAC,CAAC;QAChC,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;QACzB,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;IACzB,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC","sourcesContent":["// Copyright 2020-2025 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 { scValToNative } from '@stellar/stellar-sdk';\nimport { ConnectionPoolService, NodeConfig } from '@subql/node-core';\nimport { ConnectionPoolStateManager } from '@subql/node-core/dist';\nimport { GraphQLSchema } from 'graphql';\nimport { range } from 'lodash';\nimport { SubqueryProject } from '../configure/SubqueryProject';\nimport { StellarApiService } from './api.service.stellar';\nimport { StellarApi } from './api.stellar';\n\nconst HTTP_ENDPOINT = 'https://horizon-futurenet.stellar.org';\nconst SOROBAN_ENDPOINT = 'https://rpc-futurenet.stellar.org';\n\nfunction testSubqueryProject(\n endpoint: string,\n sorobanEndpoint: string,\n): SubqueryProject {\n return {\n network: {\n endpoint: [endpoint],\n sorobanEndpoint,\n chainId: 'Test SDF Future Network ; October 2022',\n },\n dataSources: [],\n id: 'test',\n root: './',\n schema: new GraphQLSchema({}),\n templates: [],\n } as unknown as SubqueryProject;\n}\n\nconst prepareApiService = async (\n endpoint: string = HTTP_ENDPOINT,\n soroban: string = SOROBAN_ENDPOINT,\n project?: SubqueryProject,\n): Promise<[StellarApiService, INestApplication]> => {\n const module = await Test.createTestingModule({\n providers: [\n ConnectionPoolService,\n ConnectionPoolStateManager,\n {\n provide: 'IProjectUpgradeService',\n useFactory: () => ({}),\n },\n {\n provide: NodeConfig,\n useFactory: () => ({}),\n },\n {\n provide: 'ISubqueryProject',\n useFactory: () => project ?? testSubqueryProject(endpoint, soroban),\n },\n StellarApiService,\n ],\n imports: [EventEmitterModule.forRoot()],\n }).compile();\n\n const app = module.createNestApplication();\n await app.init();\n const apiService = app.get(StellarApiService);\n await apiService.init();\n return [apiService, app];\n};\n\njest.setTimeout(90000);\ndescribe('StellarApiService', () => {\n let apiService: StellarApiService;\n let app: INestApplication;\n\n beforeEach(async () => {\n [apiService, app] = await prepareApiService();\n });\n\n it('should instantiate api', () => {\n expect(apiService.api).toBeInstanceOf(StellarApi);\n });\n\n it('should fetch blocks', async () => {\n const latestHeight = await apiService.api.getFinalizedBlockHeight();\n const blocks = await apiService.fetchBlocks(\n range(latestHeight - 1, latestHeight),\n );\n expect(blocks).toBeDefined();\n expect(blocks[0].block.block.sequence).toEqual(latestHeight - 1);\n });\n\n it('should throw error when chainId does not match', async () => {\n const faultyProject = {\n ...testSubqueryProject(HTTP_ENDPOINT, SOROBAN_ENDPOINT),\n network: {\n ...testSubqueryProject(HTTP_ENDPOINT, SOROBAN_ENDPOINT).network,\n chainId: 'Incorrect ChainId',\n },\n };\n\n await expect(\n prepareApiService(\n HTTP_ENDPOINT,\n SOROBAN_ENDPOINT,\n faultyProject as unknown as SubqueryProject,\n ),\n ).rejects.toThrow();\n });\n\n it('fails after maximum retries', async () => {\n const api = apiService.unsafeApi;\n\n // Mock the fetchBlocks method to always throw an error\n (api as any).fetchBlocks = jest\n .fn()\n .mockRejectedValue(new Error('Network error'));\n\n await expect(\n (api as any).fetchBlocks(range(50000, 50100)),\n ).rejects.toThrow();\n });\n});\n\n// Skip test as rpc is pruned and block can be missing,\n// To test this, find any block with transfer event first\ndescribe.skip('testnet StellarApiService', () => {\n let apiService: StellarApiService;\n let app: INestApplication;\n\n function testSubqueryProject2(\n endpoint: string,\n sorobanEndpoint: string,\n ): SubqueryProject {\n return {\n network: {\n endpoint: [endpoint],\n sorobanEndpoint,\n chainId: 'Test SDF Network ; September 2015',\n },\n dataSources: [],\n id: 'test',\n root: './',\n schema: new GraphQLSchema({}),\n templates: [],\n } as unknown as SubqueryProject;\n }\n\n beforeEach(async () => {\n [apiService, app] = await prepareApiService(\n 'https://horizon-testnet.stellar.org',\n 'https://soroban-testnet.stellar.org',\n testSubqueryProject2(\n 'https://horizon-testnet.stellar.org',\n 'https://soroban-testnet.stellar.org',\n ),\n );\n });\n\n it('should fetch blocks, and decode address', async () => {\n const blocks = await apiService.fetchBlocks([228236]);\n expect(blocks).toBeDefined();\n\n const block228236 = blocks[0];\n const transferEvent = block228236.block.events?.find(\n (e) => e.id === '0000980266155778048-0000000001',\n );\n\n const [sys, from, to] = transferEvent!.topic;\n const decodedFrom = scValToNative(from).toString();\n const decodedTo = scValToNative(to).toString();\n\n console.log(scValToNative(sys));\n console.log(decodedFrom);\n console.log(decodedTo);\n });\n});\n"]}
@@ -1,4 +1,3 @@
1
- import { EventEmitter2 } from '@nestjs/event-emitter';
2
1
  import { Horizon } from '@stellar/stellar-sdk';
3
2
  import { IBlock } from '@subql/node-core';
4
3
  import { ApiWrapper, SorobanEvent, StellarBlockWrapper, IStellarEndpointConfig } from '@subql/types-stellar';
@@ -6,12 +5,10 @@ import SafeStellarProvider from './safe-api';
6
5
  import { SorobanServer } from './soroban.server';
7
6
  export declare class StellarApi implements ApiWrapper {
8
7
  private endpoint;
9
- private eventEmitter;
10
8
  private _sorobanClient?;
11
- private config?;
12
9
  private stellarClient;
13
10
  private chainId?;
14
- constructor(endpoint: string, eventEmitter: EventEmitter2, _sorobanClient?: SorobanServer | undefined, config?: IStellarEndpointConfig | undefined);
11
+ constructor(endpoint: string, _sorobanClient?: SorobanServer | undefined, config?: IStellarEndpointConfig);
15
12
  init(): Promise<void>;
16
13
  get sorobanClient(): SorobanServer;
17
14
  getFinalizedBlock(): Promise<Horizon.ServerApi.LedgerRecord>;
@@ -24,7 +21,6 @@ export declare class StellarApi implements ApiWrapper {
24
21
  private fetchTransactionsForLedger;
25
22
  private fetchOperationsForLedger;
26
23
  private fetchEffectsForLedger;
27
- private getTransactionApplicationOrder;
28
24
  private getOperationIndex;
29
25
  getAndWrapEvents(height: number): Promise<SorobanEvent[]>;
30
26
  private wrapEffectsForOperation;
@@ -1,5 +1,5 @@
1
1
  "use strict";
2
- // Copyright 2020-2024 SubQuery Pte Ltd authors & contributors
2
+ // Copyright 2020-2025 SubQuery Pte Ltd authors & contributors
3
3
  // SPDX-License-Identifier: GPL-3.0
4
4
  var __importDefault = (this && this.__importDefault) || function (mod) {
5
5
  return (mod && mod.__esModule) ? mod : { "default": mod };
@@ -13,22 +13,16 @@ const block_stellar_1 = require("../stellar/block.stellar");
13
13
  const safe_api_1 = __importDefault(require("./safe-api"));
14
14
  const stellar_server_1 = require("./stellar.server");
15
15
  const utils_stellar_1 = require("./utils.stellar");
16
- // eslint-disable-next-line @typescript-eslint/no-var-requires
17
- const { version: packageVersion } = require('../../package.json');
18
16
  const logger = (0, node_core_1.getLogger)('api.Stellar');
19
17
  class StellarApi {
20
18
  endpoint;
21
- eventEmitter;
22
19
  _sorobanClient;
23
- config;
24
20
  //private client: Server;
25
21
  stellarClient;
26
22
  chainId;
27
- constructor(endpoint, eventEmitter, _sorobanClient, config) {
23
+ constructor(endpoint, _sorobanClient, config) {
28
24
  this.endpoint = endpoint;
29
- this.eventEmitter = eventEmitter;
30
25
  this._sorobanClient = _sorobanClient;
31
- this.config = config;
32
26
  const { hostname, protocol, searchParams } = new URL(this.endpoint);
33
27
  const protocolStr = protocol.replace(':', '');
34
28
  logger.info(`Api host: ${hostname}, method: ${protocolStr}`);
@@ -106,15 +100,6 @@ class StellarApi {
106
100
  }
107
101
  return effects;
108
102
  }
109
- getTransactionApplicationOrder(eventId) {
110
- // Right shift the ID by 12 bits to exclude the Operation Index
111
- const shiftedId = BigInt(eventId.split('-')[0]) >> BigInt(12);
112
- // Create a mask for 20 bits to ignore the Ledger Sequence Number
113
- const mask = BigInt((1 << 20) - 1);
114
- // Apply bitwise AND operation with the mask to get the Transaction Application Order
115
- const transactionApplicationOrder = shiftedId & mask;
116
- return Number(transactionApplicationOrder);
117
- }
118
103
  getOperationIndex(id) {
119
104
  // Pick the first part of the ID before the '-' character
120
105
  const idPart = id.split('-')[0];
@@ -149,11 +134,14 @@ class StellarApi {
149
134
  operation: null,
150
135
  }));
151
136
  }
152
- wrapOperationsForTx(transactionId, applicationOrder, sequence, operationsForSequence, effectsForSequence, eventsForSequence) {
137
+ wrapOperationsForTx(transactionId, operationsForSequence, effectsForSequence, eventsForSequence) {
153
138
  const operations = operationsForSequence.filter((op) => op.transaction_hash === transactionId);
139
+ const events = eventsForSequence.filter((evt) => evt.txHash === transactionId);
140
+ // If there are soroban events then there should only be a single operation.
141
+ // This check is here in case there are furture changes to the network.
142
+ (0, assert_1.default)(events.length > 0 ? operations.length === 1 : true, 'Unable to assign events to multiple operations');
154
143
  return operations.map((op, index) => {
155
144
  const effects = this.wrapEffectsForOperation(index, effectsForSequence);
156
- const events = eventsForSequence.filter((event) => this.getTransactionApplicationOrder(event.id) === applicationOrder);
157
145
  const wrappedOp = {
158
146
  ...op,
159
147
  ledger: null,
@@ -170,7 +158,7 @@ class StellarApi {
170
158
  });
171
159
  }
172
160
  wrapTransactionsForLedger(sequence, transactions, operationsForSequence, effectsForSequence, eventsForSequence) {
173
- return transactions.map((tx, index) => {
161
+ return transactions.map((tx) => {
174
162
  const wrappedTx = {
175
163
  ...tx,
176
164
  ledger: null,
@@ -182,7 +170,7 @@ class StellarApi {
182
170
  const operations = this.wrapOperationsForTx(
183
171
  // TODO, this include other attribute from HorizonApi.TransactionResponse, but type assertion incorrect
184
172
  // TransactionRecord extends Omit<HorizonApi.TransactionResponse, "created_at">
185
- tx.id, index + 1, sequence, operationsForSequence, effectsForSequence, eventsForSequence).map((op) => {
173
+ tx.id, operationsForSequence, effectsForSequence, eventsForSequence).map((op) => {
186
174
  op.transaction = clonedTx;
187
175
  op.effects = op.effects.map((effect) => {
188
176
  effect.transaction = clonedTx;