@subql/node-stellar 4.5.0 → 4.5.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 (90) hide show
  1. package/CHANGELOG.md +5 -0
  2. package/dist/.tsbuildinfo +1 -1
  3. package/dist/app.module.js +19 -9
  4. package/dist/app.module.js.map +1 -1
  5. package/dist/blockchain.service.d.ts +30 -0
  6. package/dist/blockchain.service.js +113 -0
  7. package/dist/blockchain.service.js.map +1 -0
  8. package/dist/blockchain.service.spec.d.ts +1 -0
  9. package/dist/blockchain.service.spec.js +33 -0
  10. package/dist/blockchain.service.spec.js.map +1 -0
  11. package/dist/configure/SubqueryProject.js +2 -3
  12. package/dist/configure/SubqueryProject.js.map +1 -1
  13. package/dist/configure/configure.module.js +2 -2
  14. package/dist/configure/configure.module.js.map +1 -1
  15. package/dist/indexer/dictionary/stellarDictionary.service.d.ts +1 -2
  16. package/dist/indexer/dictionary/stellarDictionary.service.js +3 -4
  17. package/dist/indexer/dictionary/stellarDictionary.service.js.map +1 -1
  18. package/dist/indexer/dictionary/v1/stellarDictionaryV1.d.ts +1 -2
  19. package/dist/indexer/dictionary/v1/stellarDictionaryV1.js +2 -2
  20. package/dist/indexer/dictionary/v1/stellarDictionaryV1.js.map +1 -1
  21. package/dist/indexer/fetch.module.js +30 -27
  22. package/dist/indexer/fetch.module.js.map +1 -1
  23. package/dist/indexer/indexer.manager.d.ts +3 -8
  24. package/dist/indexer/indexer.manager.js +12 -19
  25. package/dist/indexer/indexer.manager.js.map +1 -1
  26. package/dist/indexer/types.js +1 -2
  27. package/dist/indexer/types.js.map +1 -1
  28. package/dist/indexer/worker/worker-fetch.module.js +10 -32
  29. package/dist/indexer/worker/worker-fetch.module.js.map +1 -1
  30. package/dist/indexer/worker/worker.js.map +1 -1
  31. package/dist/indexer/worker/worker.module.js +2 -2
  32. package/dist/indexer/worker/worker.module.js.map +1 -1
  33. package/dist/indexer/worker/worker.service.js +3 -2
  34. package/dist/indexer/worker/worker.service.js.map +1 -1
  35. package/dist/init.js +2 -4
  36. package/dist/init.js.map +1 -1
  37. package/dist/main.js.map +1 -1
  38. package/dist/stellar/api.connection.js.map +1 -1
  39. package/dist/stellar/api.service.stellar.d.ts +2 -4
  40. package/dist/stellar/api.service.stellar.js +24 -26
  41. package/dist/stellar/api.service.stellar.js.map +1 -1
  42. package/dist/stellar/api.service.stellar.spec.js +13 -2
  43. package/dist/stellar/api.service.stellar.spec.js.map +1 -1
  44. package/dist/stellar/api.stellar.js.map +1 -1
  45. package/dist/stellar/block.stellar.js.map +1 -1
  46. package/dist/stellar/soroban.server.js.map +1 -1
  47. package/dist/stellar/utils.stellar.js +11 -6
  48. package/dist/stellar/utils.stellar.js.map +1 -1
  49. package/dist/subcommands/forceClean.module.js +2 -2
  50. package/dist/subcommands/forceClean.module.js.map +1 -1
  51. package/dist/subcommands/reindex.module.js +15 -17
  52. package/dist/subcommands/reindex.module.js.map +1 -1
  53. package/dist/subcommands/testing.init.js +1 -2
  54. package/dist/subcommands/testing.init.js.map +1 -1
  55. package/dist/subcommands/testing.module.js +18 -38
  56. package/dist/subcommands/testing.module.js.map +1 -1
  57. package/dist/subcommands/testing.service.js +2 -2
  58. package/dist/subcommands/testing.service.js.map +1 -1
  59. package/dist/utils/project.js +3 -4
  60. package/dist/utils/project.js.map +1 -1
  61. package/dist/utils/string.js +1 -2
  62. package/dist/utils/string.js.map +1 -1
  63. package/package.json +15 -17
  64. package/dist/indexer/blockDispatcher/block-dispatcher.service.d.ts +0 -15
  65. package/dist/indexer/blockDispatcher/block-dispatcher.service.js +0 -51
  66. package/dist/indexer/blockDispatcher/block-dispatcher.service.js.map +0 -1
  67. package/dist/indexer/blockDispatcher/index.d.ts +0 -4
  68. package/dist/indexer/blockDispatcher/index.js +0 -10
  69. package/dist/indexer/blockDispatcher/index.js.map +0 -1
  70. package/dist/indexer/blockDispatcher/stellar-block-dispatcher.d.ts +0 -5
  71. package/dist/indexer/blockDispatcher/stellar-block-dispatcher.js +0 -5
  72. package/dist/indexer/blockDispatcher/stellar-block-dispatcher.js.map +0 -1
  73. package/dist/indexer/blockDispatcher/worker-block-dispatcher.service.d.ts +0 -17
  74. package/dist/indexer/blockDispatcher/worker-block-dispatcher.service.js +0 -49
  75. package/dist/indexer/blockDispatcher/worker-block-dispatcher.service.js.map +0 -1
  76. package/dist/indexer/ds-processor.service.d.ts +0 -5
  77. package/dist/indexer/ds-processor.service.js +0 -22
  78. package/dist/indexer/ds-processor.service.js.map +0 -1
  79. package/dist/indexer/dynamic-ds.service.d.ts +0 -9
  80. package/dist/indexer/dynamic-ds.service.js +0 -69
  81. package/dist/indexer/dynamic-ds.service.js.map +0 -1
  82. package/dist/indexer/fetch.service.d.ts +0 -21
  83. package/dist/indexer/fetch.service.js +0 -77
  84. package/dist/indexer/fetch.service.js.map +0 -1
  85. package/dist/indexer/project.service.d.ts +0 -17
  86. package/dist/indexer/project.service.js +0 -73
  87. package/dist/indexer/project.service.js.map +0 -1
  88. package/dist/indexer/unfinalizedBlocks.service.d.ts +0 -9
  89. package/dist/indexer/unfinalizedBlocks.service.js +0 -65
  90. package/dist/indexer/unfinalizedBlocks.service.js.map +0 -1
@@ -23,13 +23,23 @@ var __decorate = (this && this.__decorate) || function (decorators, target, key,
23
23
  else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
24
24
  return c > 3 && r && Object.defineProperty(target, key, r), r;
25
25
  };
26
- var __importStar = (this && this.__importStar) || function (mod) {
27
- if (mod && mod.__esModule) return mod;
28
- var result = {};
29
- if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
30
- __setModuleDefault(result, mod);
31
- return result;
32
- };
26
+ var __importStar = (this && this.__importStar) || (function () {
27
+ var ownKeys = function(o) {
28
+ ownKeys = Object.getOwnPropertyNames || function (o) {
29
+ var ar = [];
30
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
31
+ return ar;
32
+ };
33
+ return ownKeys(o);
34
+ };
35
+ return function (mod) {
36
+ if (mod && mod.__esModule) return mod;
37
+ var result = {};
38
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
39
+ __setModuleDefault(result, mod);
40
+ return result;
41
+ };
42
+ })();
33
43
  var __importDefault = (this && this.__importDefault) || function (mod) {
34
44
  return (mod && mod.__esModule) ? mod : { "default": mod };
35
45
  };
@@ -50,7 +60,8 @@ const { version: stellarSdkVersion } = JSON.parse(fs.readFileSync(packageJsonPat
50
60
  const { version: packageVersion } = require('../package.json');
51
61
  let AppModule = class AppModule {
52
62
  };
53
- AppModule = __decorate([
63
+ exports.AppModule = AppModule;
64
+ exports.AppModule = AppModule = __decorate([
54
65
  (0, common_1.Module)({
55
66
  imports: [
56
67
  node_core_1.DbModule.forRoot(),
@@ -67,5 +78,4 @@ AppModule = __decorate([
67
78
  controllers: [],
68
79
  })
69
80
  ], AppModule);
70
- exports.AppModule = AppModule;
71
81
  //# sourceMappingURL=app.module.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"app.module.js","sourceRoot":"","sources":["../src/app.module.ts"],"names":[],"mappings":";AAAA,8DAA8D;AAC9D,mCAAmC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAEnC,uCAAyB;AACzB,gDAAwB;AACxB,2CAAwC;AACxC,yDAA2D;AAC3D,+CAAkD;AAClD,gDAAoE;AACpE,mEAA+D;AAC/D,yDAAqD;AAErD,0KAA0K;AAC1K,MAAM,eAAe,GAAG,cAAI,CAAC,OAAO,CAClC,OAAO,CAAC,OAAO,CAAC,sBAAsB,CAAC,EACvC,oBAAoB,CACrB,CAAC;AACF,MAAM,EAAE,OAAO,EAAE,iBAAiB,EAAE,GAAG,IAAI,CAAC,KAAK,CAC/C,EAAE,CAAC,YAAY,CAAC,eAAe,EAAE,MAAM,CAAC,CACzC,CAAC;AACF,8DAA8D;AAC9D,MAAM,EAAE,OAAO,EAAE,cAAc,EAAE,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAAC;AAiBxD,IAAM,SAAS,GAAf,MAAM,SAAS;CAAG,CAAA;AAAZ,SAAS;IAfrB,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,sBAAU;YACV,0BAAW;YACX,sBAAU,CAAC,OAAO,CAAC;gBACjB,OAAO,EAAE,cAAc;gBACvB,UAAU,EAAE,EAAE,IAAI,EAAE,sBAAsB,EAAE,OAAO,EAAE,iBAAiB,EAAE;aACzE,CAAC;SACH;QACD,WAAW,EAAE,EAAE;KAChB,CAAC;GACW,SAAS,CAAG;AAAZ,8BAAS","sourcesContent":["// Copyright 2020-2025 SubQuery Pte Ltd authors & contributors\n// SPDX-License-Identifier: GPL-3.0\n\nimport * as fs from 'fs';\nimport path from 'path';\nimport { Module } from '@nestjs/common';\nimport { EventEmitterModule } from '@nestjs/event-emitter';\nimport { ScheduleModule } from '@nestjs/schedule';\nimport { DbModule, CoreModule, MetaModule } from '@subql/node-core';\nimport { ConfigureModule } from './configure/configure.module';\nimport { FetchModule } from './indexer/fetch.module';\n\n// TODO, Alternative approach, ERROR Uncaught Exception Error: Package subpath './package.json' is not defined by \"exports\" in xxxxx/node_modules/stellar-sdk/package.json\nconst packageJsonPath = path.resolve(\n require.resolve('@stellar/stellar-sdk'),\n '../../package.json',\n);\nconst { version: stellarSdkVersion } = JSON.parse(\n fs.readFileSync(packageJsonPath, 'utf8'),\n);\n// eslint-disable-next-line @typescript-eslint/no-var-requires\nconst { version: packageVersion } = require('../package.json');\n\n@Module({\n imports: [\n DbModule.forRoot(),\n EventEmitterModule.forRoot(),\n ConfigureModule.register(),\n ScheduleModule.forRoot(),\n CoreModule,\n FetchModule,\n MetaModule.forRoot({\n version: packageVersion,\n sdkVersion: { name: '@stellar/stellar-sdk', version: stellarSdkVersion },\n }),\n ],\n controllers: [],\n})\nexport class AppModule {}\n"]}
1
+ {"version":3,"file":"app.module.js","sourceRoot":"","sources":["../src/app.module.ts"],"names":[],"mappings":";AAAA,8DAA8D;AAC9D,mCAAmC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAEnC,uCAAyB;AACzB,gDAAwB;AACxB,2CAAwC;AACxC,yDAA2D;AAC3D,+CAAkD;AAClD,gDAAoE;AACpE,mEAA+D;AAC/D,yDAAqD;AAErD,0KAA0K;AAC1K,MAAM,eAAe,GAAG,cAAI,CAAC,OAAO,CAClC,OAAO,CAAC,OAAO,CAAC,sBAAsB,CAAC,EACvC,oBAAoB,CACrB,CAAC;AACF,MAAM,EAAE,OAAO,EAAE,iBAAiB,EAAE,GAAG,IAAI,CAAC,KAAK,CAC/C,EAAE,CAAC,YAAY,CAAC,eAAe,EAAE,MAAM,CAAC,CACzC,CAAC;AACF,8DAA8D;AAC9D,MAAM,EAAE,OAAO,EAAE,cAAc,EAAE,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAAC;AAiBxD,IAAM,SAAS,GAAf,MAAM,SAAS;CAAG,CAAA;AAAZ,8BAAS;oBAAT,SAAS;IAfrB,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,sBAAU;YACV,0BAAW;YACX,sBAAU,CAAC,OAAO,CAAC;gBACjB,OAAO,EAAE,cAAc;gBACvB,UAAU,EAAE,EAAE,IAAI,EAAE,sBAAsB,EAAE,OAAO,EAAE,iBAAiB,EAAE;aACzE,CAAC;SACH;QACD,WAAW,EAAE,EAAE;KAChB,CAAC;GACW,SAAS,CAAG","sourcesContent":["// Copyright 2020-2025 SubQuery Pte Ltd authors & contributors\n// SPDX-License-Identifier: GPL-3.0\n\nimport * as fs from 'fs';\nimport path from 'path';\nimport { Module } from '@nestjs/common';\nimport { EventEmitterModule } from '@nestjs/event-emitter';\nimport { ScheduleModule } from '@nestjs/schedule';\nimport { DbModule, CoreModule, MetaModule } from '@subql/node-core';\nimport { ConfigureModule } from './configure/configure.module';\nimport { FetchModule } from './indexer/fetch.module';\n\n// TODO, Alternative approach, ERROR Uncaught Exception Error: Package subpath './package.json' is not defined by \"exports\" in xxxxx/node_modules/stellar-sdk/package.json\nconst packageJsonPath = path.resolve(\n require.resolve('@stellar/stellar-sdk'),\n '../../package.json',\n);\nconst { version: stellarSdkVersion } = JSON.parse(\n fs.readFileSync(packageJsonPath, 'utf8'),\n);\n// eslint-disable-next-line @typescript-eslint/no-var-requires\nconst { version: packageVersion } = require('../package.json');\n\n@Module({\n imports: [\n DbModule.forRoot(),\n EventEmitterModule.forRoot(),\n ConfigureModule.register(),\n ScheduleModule.forRoot(),\n CoreModule,\n FetchModule,\n MetaModule.forRoot({\n version: packageVersion,\n sdkVersion: { name: '@stellar/stellar-sdk', version: stellarSdkVersion },\n }),\n ],\n controllers: [],\n})\nexport class AppModule {}\n"]}
@@ -0,0 +1,30 @@
1
+ import { isCustomDs, isRuntimeDs } from '@subql/common-stellar';
2
+ import { DatasourceParams, Header, IBlock, IBlockchainService } from '@subql/node-core';
3
+ import { StellarBlockWrapper, StellarHandlerKind, SubqlCustomDatasource, SubqlDatasource } from '@subql/types-stellar';
4
+ import { SubqueryProject } from './configure/SubqueryProject';
5
+ import { IIndexerWorker } from './indexer/worker/worker';
6
+ import { StellarApiService } from './stellar';
7
+ import SafeStellarProvider from './stellar/safe-api';
8
+ export declare class BlockchainService implements IBlockchainService<SubqlDatasource, SubqlCustomDatasource, SubqueryProject, SafeStellarProvider, StellarBlockWrapper, // Update to light block if thats ever supported
9
+ StellarBlockWrapper, IIndexerWorker> {
10
+ private apiService;
11
+ blockHandlerKind: StellarHandlerKind;
12
+ isCustomDs: typeof isCustomDs;
13
+ isRuntimeDs: typeof isRuntimeDs;
14
+ packageVersion: any;
15
+ constructor(apiService: StellarApiService);
16
+ fetchBlocks(blockNums: number[]): Promise<IBlock<StellarBlockWrapper>[]>;
17
+ fetchBlockWorker(worker: IIndexerWorker, blockNum: number, context: {
18
+ workers: IIndexerWorker[];
19
+ }): Promise<Header>;
20
+ getBlockSize(block: IBlock<StellarBlockWrapper>): number;
21
+ getFinalizedHeader(): Promise<Header>;
22
+ getBestHeight(): Promise<number>;
23
+ getChainInterval(): Promise<number>;
24
+ getHeaderForHash(hash: string): Promise<Header>;
25
+ getHeaderForHeight(height: number): Promise<Header>;
26
+ updateDynamicDs(params: DatasourceParams, dsObj: SubqlDatasource | SubqlCustomDatasource): Promise<void>;
27
+ getSafeApi(block: StellarBlockWrapper): Promise<SafeStellarProvider>;
28
+ onProjectChange(project: SubqueryProject): void | Promise<void>;
29
+ getBlockTimestamp(height: number): Promise<Date>;
30
+ }
@@ -0,0 +1,113 @@
1
+ "use strict";
2
+ // Copyright 2020-2025 SubQuery Pte Ltd authors & contributors
3
+ // SPDX-License-Identifier: GPL-3.0
4
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
5
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
6
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
7
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
8
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
9
+ };
10
+ var __metadata = (this && this.__metadata) || function (k, v) {
11
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
12
+ };
13
+ var __param = (this && this.__param) || function (paramIndex, decorator) {
14
+ return function (target, key) { decorator(target, key, paramIndex); }
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ exports.BlockchainService = void 0;
18
+ const common_1 = require("@nestjs/common");
19
+ const common_stellar_1 = require("@subql/common-stellar");
20
+ const types_stellar_1 = require("@subql/types-stellar");
21
+ const class_transformer_1 = require("class-transformer");
22
+ const class_validator_1 = require("class-validator");
23
+ const types_1 = require("./indexer/types");
24
+ const stellar_1 = require("./stellar");
25
+ const utils_stellar_1 = require("./stellar/utils.stellar");
26
+ // eslint-disable-next-line @typescript-eslint/no-var-requires
27
+ const { version: packageVersion } = require('../package.json');
28
+ const BLOCK_TIME_VARIANCE = 5000;
29
+ const INTERVAL_PERCENT = 0.9;
30
+ let BlockchainService = class BlockchainService {
31
+ apiService;
32
+ blockHandlerKind = types_stellar_1.StellarHandlerKind.Block;
33
+ isCustomDs = common_stellar_1.isCustomDs;
34
+ isRuntimeDs = common_stellar_1.isRuntimeDs;
35
+ packageVersion = packageVersion;
36
+ constructor(apiService) {
37
+ this.apiService = apiService;
38
+ }
39
+ async fetchBlocks(blockNums) {
40
+ return this.apiService.fetchBlocks(blockNums);
41
+ }
42
+ async fetchBlockWorker(worker, blockNum, context) {
43
+ return worker.fetchBlock(blockNum, 0 /* Not used by stellar*/);
44
+ }
45
+ getBlockSize(block) {
46
+ return (0, types_1.getBlockSize)(block.block);
47
+ }
48
+ async getFinalizedHeader() {
49
+ const block = await this.apiService.api.getFinalizedBlock();
50
+ return (0, utils_stellar_1.stellarBlockToHeader)(block);
51
+ }
52
+ async getBestHeight() {
53
+ return this.apiService.api.getBestBlockHeight();
54
+ }
55
+ // eslint-disable-next-line @typescript-eslint/require-await
56
+ async getChainInterval() {
57
+ const CHAIN_INTERVAL = (0, utils_stellar_1.calcInterval)(this.apiService.api) * INTERVAL_PERCENT;
58
+ return Math.min(BLOCK_TIME_VARIANCE, CHAIN_INTERVAL);
59
+ }
60
+ // Stellar has instant finalizaition and no way to get blocks by hash so the headers should use the block height as the hash and parent hash
61
+ async getHeaderForHash(hash) {
62
+ return this.getHeaderForHeight(parseInt(hash, 10));
63
+ }
64
+ async getHeaderForHeight(height) {
65
+ const res = await this.apiService.api.api.ledgers().ledger(height).call();
66
+ return (0, utils_stellar_1.stellarBlockToHeader)(res);
67
+ }
68
+ // eslint-disable-next-line @typescript-eslint/require-await
69
+ async updateDynamicDs(params, dsObj) {
70
+ if ((0, common_stellar_1.isCustomDs)(dsObj)) {
71
+ dsObj.processor.options = {
72
+ ...dsObj.processor.options,
73
+ ...params.args,
74
+ };
75
+ // await this.dsProcessorService.validateCustomDs([dsObj]);
76
+ }
77
+ else if ((0, common_stellar_1.isRuntimeDs)(dsObj)) {
78
+ dsObj.options = {
79
+ ...dsObj.options,
80
+ ...params.args,
81
+ };
82
+ const parsedDs = (0, class_transformer_1.plainToClass)(common_stellar_1.StellarRuntimeDataSourceImpl, dsObj);
83
+ const errors = (0, class_validator_1.validateSync)(parsedDs, {
84
+ whitelist: true,
85
+ forbidNonWhitelisted: false,
86
+ });
87
+ if (errors.length) {
88
+ throw new Error(`Dynamic ds is invalid\n${errors
89
+ .map((e) => e.toString())
90
+ .join('\n')}`);
91
+ }
92
+ }
93
+ }
94
+ // eslint-disable-next-line @typescript-eslint/require-await
95
+ async getSafeApi(block) {
96
+ return this.apiService.safeApi(block.block.sequence);
97
+ }
98
+ onProjectChange(project) {
99
+ // TODO update this when implementing skipBlock feature for Stellar
100
+ // this.apiService.updateBlockFetching();
101
+ }
102
+ async getBlockTimestamp(height) {
103
+ const block = await this.apiService.api.api.ledgers().ledger(height).call();
104
+ return new Date(block.closed_at);
105
+ }
106
+ };
107
+ exports.BlockchainService = BlockchainService;
108
+ exports.BlockchainService = BlockchainService = __decorate([
109
+ (0, common_1.Injectable)(),
110
+ __param(0, (0, common_1.Inject)('APIService')),
111
+ __metadata("design:paramtypes", [stellar_1.StellarApiService])
112
+ ], BlockchainService);
113
+ //# sourceMappingURL=blockchain.service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"blockchain.service.js","sourceRoot":"","sources":["../src/blockchain.service.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 { Horizon } from '@stellar/stellar-sdk';\nimport {\n isCustomDs,\n isRuntimeDs,\n StellarRuntimeDataSourceImpl,\n} from '@subql/common-stellar';\nimport {\n DatasourceParams,\n Header,\n IBlock,\n IBlockchainService,\n} from '@subql/node-core';\nimport {\n StellarBlockWrapper,\n StellarHandlerKind,\n SubqlCustomDatasource,\n SubqlCustomHandler,\n SubqlDatasource,\n SubqlMapping,\n} from '@subql/types-stellar';\nimport { plainToClass } from 'class-transformer';\nimport { validateSync } from 'class-validator';\nimport { SubqueryProject } from './configure/SubqueryProject';\nimport { getBlockSize } from './indexer/types';\nimport { IIndexerWorker } from './indexer/worker/worker';\nimport { StellarApiService } from './stellar';\nimport SafeStellarProvider from './stellar/safe-api';\nimport { calcInterval, stellarBlockToHeader } from './stellar/utils.stellar';\n\n// eslint-disable-next-line @typescript-eslint/no-var-requires\nconst { version: packageVersion } = require('../package.json');\n\nconst BLOCK_TIME_VARIANCE = 5000;\nconst INTERVAL_PERCENT = 0.9;\n\n@Injectable()\nexport class BlockchainService\n implements\n IBlockchainService<\n SubqlDatasource,\n SubqlCustomDatasource,\n SubqueryProject,\n SafeStellarProvider,\n StellarBlockWrapper, // Update to light block if thats ever supported\n StellarBlockWrapper,\n IIndexerWorker\n >\n{\n blockHandlerKind = StellarHandlerKind.Block;\n isCustomDs = isCustomDs;\n isRuntimeDs = isRuntimeDs;\n packageVersion = packageVersion;\n\n constructor(@Inject('APIService') private apiService: StellarApiService) {}\n\n async fetchBlocks(\n blockNums: number[],\n ): Promise<IBlock<StellarBlockWrapper>[]> {\n return this.apiService.fetchBlocks(blockNums);\n }\n\n async fetchBlockWorker(\n worker: IIndexerWorker,\n blockNum: number,\n context: { workers: IIndexerWorker[] },\n ): Promise<Header> {\n return worker.fetchBlock(blockNum, 0 /* Not used by stellar*/);\n }\n\n getBlockSize(block: IBlock<StellarBlockWrapper>): number {\n return getBlockSize(block.block);\n }\n\n async getFinalizedHeader(): Promise<Header> {\n const block = await this.apiService.api.getFinalizedBlock();\n return stellarBlockToHeader(block);\n }\n\n async getBestHeight(): Promise<number> {\n return this.apiService.api.getBestBlockHeight();\n }\n\n // eslint-disable-next-line @typescript-eslint/require-await\n async getChainInterval(): Promise<number> {\n const CHAIN_INTERVAL = calcInterval(this.apiService.api) * INTERVAL_PERCENT;\n\n return Math.min(BLOCK_TIME_VARIANCE, CHAIN_INTERVAL);\n }\n\n // Stellar has instant finalizaition and no way to get blocks by hash so the headers should use the block height as the hash and parent hash\n async getHeaderForHash(hash: string): Promise<Header> {\n return this.getHeaderForHeight(parseInt(hash, 10));\n }\n\n async getHeaderForHeight(height: number): Promise<Header> {\n const res = await this.apiService.api.api.ledgers().ledger(height).call();\n return stellarBlockToHeader(res as any);\n }\n\n // eslint-disable-next-line @typescript-eslint/require-await\n async updateDynamicDs(\n params: DatasourceParams,\n dsObj: SubqlDatasource | SubqlCustomDatasource,\n ): Promise<void> {\n if (isCustomDs(dsObj)) {\n dsObj.processor.options = {\n ...dsObj.processor.options,\n ...params.args,\n };\n // await this.dsProcessorService.validateCustomDs([dsObj]);\n } else if (isRuntimeDs(dsObj)) {\n dsObj.options = {\n ...dsObj.options,\n ...params.args,\n };\n\n const parsedDs = plainToClass(StellarRuntimeDataSourceImpl, dsObj);\n\n const errors = validateSync(parsedDs, {\n whitelist: true,\n forbidNonWhitelisted: false,\n });\n if (errors.length) {\n throw new Error(\n `Dynamic ds is invalid\\n${errors\n .map((e) => e.toString())\n .join('\\n')}`,\n );\n }\n }\n }\n\n // eslint-disable-next-line @typescript-eslint/require-await\n async getSafeApi(block: StellarBlockWrapper): Promise<SafeStellarProvider> {\n return this.apiService.safeApi(block.block.sequence);\n }\n\n onProjectChange(project: SubqueryProject): void | Promise<void> {\n // TODO update this when implementing skipBlock feature for Stellar\n // this.apiService.updateBlockFetching();\n }\n\n async getBlockTimestamp(height: number): Promise<Date> {\n const block = await this.apiService.api.api.ledgers().ledger(height).call();\n\n return new Date(\n (block as unknown as Horizon.ServerApi.LedgerRecord).closed_at,\n );\n }\n}\n"]}
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,33 @@
1
+ "use strict";
2
+ // Copyright 2020-2025 SubQuery Pte Ltd authors & contributors
3
+ // SPDX-License-Identifier: GPL-3.0
4
+ Object.defineProperty(exports, "__esModule", { value: true });
5
+ const blockchain_service_1 = require("./blockchain.service");
6
+ const stellar_1 = require("./stellar");
7
+ const soroban_server_1 = require("./stellar/soroban.server");
8
+ const HTTP_ENDPOINT = 'https://horizon-futurenet.stellar.org';
9
+ const SOROBAN_ENDPOINT = 'https://rpc-futurenet.stellar.org';
10
+ describe('BlockchainService', () => {
11
+ let blockchainService;
12
+ beforeEach(() => {
13
+ const apiService = {
14
+ api: new stellar_1.StellarApi(HTTP_ENDPOINT, new soroban_server_1.SorobanServer(SOROBAN_ENDPOINT)),
15
+ };
16
+ blockchainService = new blockchain_service_1.BlockchainService(apiService);
17
+ });
18
+ it('correctly calculates block timestamp', async () => {
19
+ //https://stellar.expert/explorer/testnet/ledger/1453893
20
+ const timestamp = await blockchainService.getBlockTimestamp(1453893);
21
+ expect(timestamp.toISOString()).toBe('2024-05-05T04:17:35.000Z');
22
+ });
23
+ it('correctly gets the header for a height', async () => {
24
+ const header = await blockchainService.getHeaderForHeight(1453893);
25
+ expect(header).toEqual({
26
+ blockHeight: 1453893,
27
+ blockHash: '1453893',
28
+ parentHash: '1453892',
29
+ timestamp: new Date('2024-05-05T04:17:35.000Z'),
30
+ });
31
+ });
32
+ });
33
+ //# sourceMappingURL=blockchain.service.spec.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"blockchain.service.spec.js","sourceRoot":"","sources":["../src/blockchain.service.spec.ts"],"names":[],"mappings":";AAAA,8DAA8D;AAC9D,mCAAmC;;AAEnC,6DAAyD;AACzD,uCAA0D;AAC1D,6DAAyD;AAEzD,MAAM,aAAa,GAAG,uCAAuC,CAAC;AAC9D,MAAM,gBAAgB,GAAG,mCAAmC,CAAC;AAE7D,QAAQ,CAAC,mBAAmB,EAAE,GAAG,EAAE;IACjC,IAAI,iBAAoC,CAAC;IAEzC,UAAU,CAAC,GAAG,EAAE;QACd,MAAM,UAAU,GAAG;YACjB,GAAG,EAAE,IAAI,oBAAU,CAAC,aAAa,EAAE,IAAI,8BAAa,CAAC,gBAAgB,CAAC,CAAC;SACnD,CAAC;QAEvB,iBAAiB,GAAG,IAAI,sCAAiB,CAAC,UAAU,CAAC,CAAC;IACxD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,sCAAsC,EAAE,KAAK,IAAI,EAAE;QACpD,wDAAwD;QACxD,MAAM,SAAS,GAAG,MAAM,iBAAiB,CAAC,iBAAiB,CAAC,OAAO,CAAC,CAAC;QAErE,MAAM,CAAC,SAAS,CAAC,WAAW,EAAE,CAAC,CAAC,IAAI,CAAC,0BAA0B,CAAC,CAAC;IACnE,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,wCAAwC,EAAE,KAAK,IAAI,EAAE;QACtD,MAAM,MAAM,GAAG,MAAM,iBAAiB,CAAC,kBAAkB,CAAC,OAAO,CAAC,CAAC;QAEnE,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC;YACrB,WAAW,EAAE,OAAO;YACpB,SAAS,EAAE,SAAS;YACpB,UAAU,EAAE,SAAS;YACrB,SAAS,EAAE,IAAI,IAAI,CAAC,0BAA0B,CAAC;SAChD,CAAC,CAAC;IACL,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 { BlockchainService } from './blockchain.service';\nimport { StellarApi, StellarApiService } from './stellar';\nimport { SorobanServer } from './stellar/soroban.server';\n\nconst HTTP_ENDPOINT = 'https://horizon-futurenet.stellar.org';\nconst SOROBAN_ENDPOINT = 'https://rpc-futurenet.stellar.org';\n\ndescribe('BlockchainService', () => {\n let blockchainService: BlockchainService;\n\n beforeEach(() => {\n const apiService = {\n api: new StellarApi(HTTP_ENDPOINT, new SorobanServer(SOROBAN_ENDPOINT)),\n } as StellarApiService;\n\n blockchainService = new BlockchainService(apiService);\n });\n\n it('correctly calculates block timestamp', async () => {\n //https://stellar.expert/explorer/testnet/ledger/1453893\n const timestamp = await blockchainService.getBlockTimestamp(1453893);\n\n expect(timestamp.toISOString()).toBe('2024-05-05T04:17:35.000Z');\n });\n\n it('correctly gets the header for a height', async () => {\n const header = await blockchainService.getHeaderForHeight(1453893);\n\n expect(header).toEqual({\n blockHeight: 1453893,\n blockHash: '1453893',\n parentHash: '1453892',\n timestamp: new Date('2024-05-05T04:17:35.000Z'),\n });\n });\n});\n"]}
@@ -2,7 +2,8 @@
2
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
- exports.dsHasSorobanEventHandler = exports.createSubQueryProject = void 0;
5
+ exports.createSubQueryProject = createSubQueryProject;
6
+ exports.dsHasSorobanEventHandler = dsHasSorobanEventHandler;
6
7
  const common_stellar_1 = require("@subql/common-stellar");
7
8
  const node_core_1 = require("@subql/node-core");
8
9
  const { version: packageVersion } = require('../../package.json');
@@ -22,7 +23,6 @@ networkOverrides) {
22
23
  });
23
24
  return project;
24
25
  }
25
- exports.createSubQueryProject = createSubQueryProject;
26
26
  function dsHasSorobanEventHandler(dataSources) {
27
27
  return (dataSources.findIndex(function (ds) {
28
28
  return ((0, common_stellar_1.isRuntimeDs)(ds) &&
@@ -31,5 +31,4 @@ function dsHasSorobanEventHandler(dataSources) {
31
31
  }) !== -1);
32
32
  }) !== -1);
33
33
  }
34
- exports.dsHasSorobanEventHandler = dsHasSorobanEventHandler;
35
34
  //# sourceMappingURL=SubqueryProject.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"SubqueryProject.js","sourceRoot":"","sources":["../../src/configure/SubqueryProject.ts"],"names":[],"mappings":";AAAA,8DAA8D;AAC9D,mCAAmC;;;AAKnC,0DAO+B;AAC/B,gDAAmE;AASnE,MAAM,EAAE,OAAO,EAAE,cAAc,EAAE,GAAG,OAAO,CAAC,oBAAoB,CAAC,CAAC;AAmB3D,KAAK,UAAU,qBAAqB,CACzC,IAAY,EACZ,WAAoB,EACpB,MAAc,EACd,IAAY,EAAE,2DAA2D;AACzE,gBAAyC;IAEzC,MAAM,OAAO,GAAG,MAAM,+BAAmB,CAAC,MAAM,CAAkB;QAChE,aAAa,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,IAAA,4CAA2B,EAAC,GAAG,CAAC,CAAC,QAAQ;QACjE,IAAI;QACJ,WAAW;QACX,MAAM;QACN,IAAI;QACJ,UAAU,EAAE,cAAc;QAC1B,gBAAgB,EAAE,mCAAkB,CAAC,KAAK;QAC1C,gBAAgB;QAChB,WAAW,EAAX,4BAAW;QACX,UAAU,EAAV,2BAAU;KACX,CAAC,CAAC;IAEH,OAAO,OAAO,CAAC;AACjB,CAAC;AArBD,sDAqBC;AAED,SAAgB,wBAAwB,CACtC,WAA8B;IAE9B,OAAO,CACL,WAAW,CAAC,SAAS,CAAC,UAAU,EAAE;QAChC,OAAO,CACL,IAAA,4BAAW,EAAC,EAAE,CAAC;YACf,EAAE,CAAC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAC,UAAU,OAAO;gBAC7C,OAAO,OAAO,CAAC,IAAI,KAAK,mCAAkB,CAAC,KAAK,CAAC;YACnD,CAAC,CAAC,KAAK,CAAC,CAAC,CACV,CAAC;IACJ,CAAC,CAAC,KAAK,CAAC,CAAC,CACV,CAAC;AACJ,CAAC;AAbD,4DAaC","sourcesContent":["// Copyright 2020-2025 SubQuery Pte Ltd authors & contributors\n// SPDX-License-Identifier: GPL-3.0\n\nimport assert from 'assert';\nimport { Injectable } from '@nestjs/common';\nimport { validateSemver } from '@subql/common';\nimport {\n StellarProjectNetworkConfig,\n parseStellarProjectManifest,\n isCustomDs,\n StellarHandlerKind,\n isRuntimeDs,\n SubqlStellarDataSource,\n} from '@subql/common-stellar';\nimport { CronFilter, BaseSubqueryProject } from '@subql/node-core';\nimport { Reader } from '@subql/types-core';\nimport {\n SubqlDatasource,\n CustomDatasourceTemplate,\n RuntimeDatasourceTemplate,\n StellarBlockFilter,\n} from '@subql/types-stellar';\n\nconst { version: packageVersion } = require('../../package.json');\n\nexport type StellarProjectDs = SubqlStellarDataSource;\n\nexport type StellarProjectDsTemplate =\n | RuntimeDatasourceTemplate\n | CustomDatasourceTemplate;\n\nexport type SubqlProjectBlockFilter = StellarBlockFilter & CronFilter;\n\n// This is the runtime type after we have mapped genesisHash to chainId and endpoint/dict have been provided when dealing with deployments\ntype NetworkConfig = StellarProjectNetworkConfig & { chainId: string };\n\nexport type SubqueryProject = BaseSubqueryProject<\n StellarProjectDs,\n StellarProjectDsTemplate,\n NetworkConfig\n>;\n\nexport async function createSubQueryProject(\n path: string,\n rawManifest: unknown,\n reader: Reader,\n root: string, // If project local then directory otherwise temp directory\n networkOverrides?: Partial<NetworkConfig>,\n): Promise<SubqueryProject> {\n const project = await BaseSubqueryProject.create<SubqueryProject>({\n parseManifest: (raw) => parseStellarProjectManifest(raw).asV1_0_0,\n path,\n rawManifest,\n reader,\n root,\n nodeSemver: packageVersion,\n blockHandlerKind: StellarHandlerKind.Block,\n networkOverrides,\n isRuntimeDs,\n isCustomDs,\n });\n\n return project;\n}\n\nexport function dsHasSorobanEventHandler(\n dataSources: SubqlDatasource[],\n): boolean {\n return (\n dataSources.findIndex(function (ds) {\n return (\n isRuntimeDs(ds) &&\n ds.mapping.handlers.findIndex(function (handler) {\n return handler.kind === StellarHandlerKind.Event;\n }) !== -1\n );\n }) !== -1\n );\n}\n"]}
1
+ {"version":3,"file":"SubqueryProject.js","sourceRoot":"","sources":["../../src/configure/SubqueryProject.ts"],"names":[],"mappings":";AAAA,8DAA8D;AAC9D,mCAAmC;;AAyCnC,sDAqBC;AAED,4DAaC;AAxED,0DAO+B;AAC/B,gDAAmE;AASnE,MAAM,EAAE,OAAO,EAAE,cAAc,EAAE,GAAG,OAAO,CAAC,oBAAoB,CAAC,CAAC;AAmB3D,KAAK,UAAU,qBAAqB,CACzC,IAAY,EACZ,WAAoB,EACpB,MAAc,EACd,IAAY,EAAE,2DAA2D;AACzE,gBAAyC;IAEzC,MAAM,OAAO,GAAG,MAAM,+BAAmB,CAAC,MAAM,CAAkB;QAChE,aAAa,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,IAAA,4CAA2B,EAAC,GAAG,CAAC,CAAC,QAAQ;QACjE,IAAI;QACJ,WAAW;QACX,MAAM;QACN,IAAI;QACJ,UAAU,EAAE,cAAc;QAC1B,gBAAgB,EAAE,mCAAkB,CAAC,KAAK;QAC1C,gBAAgB;QAChB,WAAW,EAAX,4BAAW;QACX,UAAU,EAAV,2BAAU;KACX,CAAC,CAAC;IAEH,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,SAAgB,wBAAwB,CACtC,WAA8B;IAE9B,OAAO,CACL,WAAW,CAAC,SAAS,CAAC,UAAU,EAAE;QAChC,OAAO,CACL,IAAA,4BAAW,EAAC,EAAE,CAAC;YACf,EAAE,CAAC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAC,UAAU,OAAO;gBAC7C,OAAO,OAAO,CAAC,IAAI,KAAK,mCAAkB,CAAC,KAAK,CAAC;YACnD,CAAC,CAAC,KAAK,CAAC,CAAC,CACV,CAAC;IACJ,CAAC,CAAC,KAAK,CAAC,CAAC,CACV,CAAC;AACJ,CAAC","sourcesContent":["// Copyright 2020-2025 SubQuery Pte Ltd authors & contributors\n// SPDX-License-Identifier: GPL-3.0\n\nimport assert from 'assert';\nimport { Injectable } from '@nestjs/common';\nimport { validateSemver } from '@subql/common';\nimport {\n StellarProjectNetworkConfig,\n parseStellarProjectManifest,\n isCustomDs,\n StellarHandlerKind,\n isRuntimeDs,\n SubqlStellarDataSource,\n} from '@subql/common-stellar';\nimport { CronFilter, BaseSubqueryProject } from '@subql/node-core';\nimport { Reader } from '@subql/types-core';\nimport {\n SubqlDatasource,\n CustomDatasourceTemplate,\n RuntimeDatasourceTemplate,\n StellarBlockFilter,\n} from '@subql/types-stellar';\n\nconst { version: packageVersion } = require('../../package.json');\n\nexport type StellarProjectDs = SubqlStellarDataSource;\n\nexport type StellarProjectDsTemplate =\n | RuntimeDatasourceTemplate\n | CustomDatasourceTemplate;\n\nexport type SubqlProjectBlockFilter = StellarBlockFilter & CronFilter;\n\n// This is the runtime type after we have mapped genesisHash to chainId and endpoint/dict have been provided when dealing with deployments\ntype NetworkConfig = StellarProjectNetworkConfig & { chainId: string };\n\nexport type SubqueryProject = BaseSubqueryProject<\n StellarProjectDs,\n StellarProjectDsTemplate,\n NetworkConfig\n>;\n\nexport async function createSubQueryProject(\n path: string,\n rawManifest: unknown,\n reader: Reader,\n root: string, // If project local then directory otherwise temp directory\n networkOverrides?: Partial<NetworkConfig>,\n): Promise<SubqueryProject> {\n const project = await BaseSubqueryProject.create<SubqueryProject>({\n parseManifest: (raw) => parseStellarProjectManifest(raw).asV1_0_0,\n path,\n rawManifest,\n reader,\n root,\n nodeSemver: packageVersion,\n blockHandlerKind: StellarHandlerKind.Block,\n networkOverrides,\n isRuntimeDs,\n isCustomDs,\n });\n\n return project;\n}\n\nexport function dsHasSorobanEventHandler(\n dataSources: SubqlDatasource[],\n): boolean {\n return (\n dataSources.findIndex(function (ds) {\n return (\n isRuntimeDs(ds) &&\n ds.mapping.handlers.findIndex(function (handler) {\n return handler.kind === StellarHandlerKind.Event;\n }) !== -1\n );\n }) !== -1\n );\n}\n"]}
@@ -55,9 +55,9 @@ let ConfigureModule = ConfigureModule_1 = class ConfigureModule {
55
55
  };
56
56
  }
57
57
  };
58
- ConfigureModule = ConfigureModule_1 = __decorate([
58
+ exports.ConfigureModule = ConfigureModule;
59
+ exports.ConfigureModule = ConfigureModule = ConfigureModule_1 = __decorate([
59
60
  (0, common_1.Global)(),
60
61
  (0, common_1.Module)({})
61
62
  ], ConfigureModule);
62
- exports.ConfigureModule = ConfigureModule;
63
63
  //# sourceMappingURL=configure.module.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"configure.module.js","sourceRoot":"","sources":["../../src/configure/configure.module.ts"],"names":[],"mappings":";AAAA,8DAA8D;AAC9D,mCAAmC;;;;;;;;;;AAEnC,2CAA+D;AAC/D,gDAA2D;AAC3D,oCAAwC;AACxC,uDAA2E;AAE3E,MAAM,KAAK,GAAG,OAAO,CAAC,oBAAoB,CAAC,CAAC;AAIrC,IAAM,eAAe,uBAArB,MAAM,eAAe;IAC1B,MAAM,CAAC,KAAK,CAAC,WAAW;QAItB,MAAM,EAAE,IAAI,EAAE,GAAG,oBAAY,CAAC;QAC9B,MAAM,EAAE,UAAU,EAAE,OAAO,EAAE,GAAG,MAAM,IAAA,uBAAW,EAC/C,IAAI,EACJ,uCAAqB,EACrB,oBAAY,CAAC,QAAQ,CAAC,IAAI,CAAC,oBAAY,CAAC,EACxC,KAAK,CACN,CAAC;QAEF,IAAI,IAAI,CAAC,0BAA0B,CAAC,EAAE;YACpC,OAAO,CAAC,OAAO,CAAC,eAAe,GAAG,IAAI,CAAC,0BAA0B,CAAC,CAAC;SACpE;QAED,OAAO,EAAE,UAAU,EAAE,OAAO,EAAE,CAAC;IACjC,CAAC;IACD,MAAM,CAAC,KAAK,CAAC,QAAQ;QACnB,MAAM,EAAE,UAAU,EAAE,OAAO,EAAE,GAAG,MAAM,iBAAe,CAAC,WAAW,EAAE,CAAC;QAEpE,OAAO;YACL,MAAM,EAAE,iBAAe;YACvB,SAAS,EAAE;gBACT;oBACE,OAAO,EAAE,sBAAU;oBACnB,QAAQ,EAAE,UAAU;iBACrB;gBACD;oBACE,OAAO,EAAE,kBAAkB;oBAC3B,QAAQ,EAAE,OAAO;iBAClB;gBACD;oBACE,OAAO,EAAE,wBAAwB;oBACjC,QAAQ,EAAE,OAAO;iBAClB;gBACD;oBACE,OAAO,EAAE,MAAM;oBACf,QAAQ,EAAE,IAAI;iBACf;aACF;YACD,OAAO,EAAE;gBACP,sBAAU;gBACV,kBAAkB;gBAClB,wBAAwB;gBACxB,MAAM;aACP;SACF,CAAC;IACJ,CAAC;CACF,CAAA;AAlDY,eAAe;IAF3B,IAAA,eAAM,GAAE;IACR,IAAA,eAAM,EAAC,EAAE,CAAC;GACE,eAAe,CAkD3B;AAlDY,0CAAe","sourcesContent":["// Copyright 2020-2025 SubQuery Pte Ltd authors & contributors\n// SPDX-License-Identifier: GPL-3.0\n\nimport { DynamicModule, Global, Module } from '@nestjs/common';\nimport { NodeConfig, registerApp } from '@subql/node-core';\nimport { yargsOptions } from '../yargs';\nimport { createSubQueryProject, SubqueryProject } from './SubqueryProject';\n\nconst pjson = require('../../package.json');\n\n@Global()\n@Module({})\nexport class ConfigureModule {\n static async getInstance(): Promise<{\n nodeConfig: NodeConfig;\n project: SubqueryProject;\n }> {\n const { argv } = yargsOptions;\n const { nodeConfig, project } = await registerApp<SubqueryProject>(\n argv,\n createSubQueryProject,\n yargsOptions.showHelp.bind(yargsOptions),\n pjson,\n );\n\n if (argv['soroban-network-endpoint']) {\n project.network.sorobanEndpoint = argv['soroban-network-endpoint'];\n }\n\n return { nodeConfig, project };\n }\n static async register(): Promise<DynamicModule> {\n const { nodeConfig, project } = await ConfigureModule.getInstance();\n\n return {\n module: ConfigureModule,\n providers: [\n {\n provide: NodeConfig,\n useValue: nodeConfig,\n },\n {\n provide: 'ISubqueryProject',\n useValue: project,\n },\n {\n provide: 'IProjectUpgradeService',\n useValue: project,\n },\n {\n provide: 'Null',\n useValue: null,\n },\n ],\n exports: [\n NodeConfig,\n 'ISubqueryProject',\n 'IProjectUpgradeService',\n 'Null',\n ],\n };\n }\n}\n"]}
1
+ {"version":3,"file":"configure.module.js","sourceRoot":"","sources":["../../src/configure/configure.module.ts"],"names":[],"mappings":";AAAA,8DAA8D;AAC9D,mCAAmC;;;;;;;;;;AAEnC,2CAA+D;AAC/D,gDAA2D;AAC3D,oCAAwC;AACxC,uDAA2E;AAE3E,MAAM,KAAK,GAAG,OAAO,CAAC,oBAAoB,CAAC,CAAC;AAIrC,IAAM,eAAe,uBAArB,MAAM,eAAe;IAC1B,MAAM,CAAC,KAAK,CAAC,WAAW;QAItB,MAAM,EAAE,IAAI,EAAE,GAAG,oBAAY,CAAC;QAC9B,MAAM,EAAE,UAAU,EAAE,OAAO,EAAE,GAAG,MAAM,IAAA,uBAAW,EAC/C,IAAI,EACJ,uCAAqB,EACrB,oBAAY,CAAC,QAAQ,CAAC,IAAI,CAAC,oBAAY,CAAC,EACxC,KAAK,CACN,CAAC;QAEF,IAAI,IAAI,CAAC,0BAA0B,CAAC,EAAE,CAAC;YACrC,OAAO,CAAC,OAAO,CAAC,eAAe,GAAG,IAAI,CAAC,0BAA0B,CAAC,CAAC;QACrE,CAAC;QAED,OAAO,EAAE,UAAU,EAAE,OAAO,EAAE,CAAC;IACjC,CAAC;IACD,MAAM,CAAC,KAAK,CAAC,QAAQ;QACnB,MAAM,EAAE,UAAU,EAAE,OAAO,EAAE,GAAG,MAAM,iBAAe,CAAC,WAAW,EAAE,CAAC;QAEpE,OAAO;YACL,MAAM,EAAE,iBAAe;YACvB,SAAS,EAAE;gBACT;oBACE,OAAO,EAAE,sBAAU;oBACnB,QAAQ,EAAE,UAAU;iBACrB;gBACD;oBACE,OAAO,EAAE,kBAAkB;oBAC3B,QAAQ,EAAE,OAAO;iBAClB;gBACD;oBACE,OAAO,EAAE,wBAAwB;oBACjC,QAAQ,EAAE,OAAO;iBAClB;gBACD;oBACE,OAAO,EAAE,MAAM;oBACf,QAAQ,EAAE,IAAI;iBACf;aACF;YACD,OAAO,EAAE;gBACP,sBAAU;gBACV,kBAAkB;gBAClB,wBAAwB;gBACxB,MAAM;aACP;SACF,CAAC;IACJ,CAAC;CACF,CAAA;AAlDY,0CAAe;0BAAf,eAAe;IAF3B,IAAA,eAAM,GAAE;IACR,IAAA,eAAM,EAAC,EAAE,CAAC;GACE,eAAe,CAkD3B","sourcesContent":["// Copyright 2020-2025 SubQuery Pte Ltd authors & contributors\n// SPDX-License-Identifier: GPL-3.0\n\nimport { DynamicModule, Global, Module } from '@nestjs/common';\nimport { NodeConfig, registerApp } from '@subql/node-core';\nimport { yargsOptions } from '../yargs';\nimport { createSubQueryProject, SubqueryProject } from './SubqueryProject';\n\nconst pjson = require('../../package.json');\n\n@Global()\n@Module({})\nexport class ConfigureModule {\n static async getInstance(): Promise<{\n nodeConfig: NodeConfig;\n project: SubqueryProject;\n }> {\n const { argv } = yargsOptions;\n const { nodeConfig, project } = await registerApp<SubqueryProject>(\n argv,\n createSubQueryProject,\n yargsOptions.showHelp.bind(yargsOptions),\n pjson,\n );\n\n if (argv['soroban-network-endpoint']) {\n project.network.sorobanEndpoint = argv['soroban-network-endpoint'];\n }\n\n return { nodeConfig, project };\n }\n static async register(): Promise<DynamicModule> {\n const { nodeConfig, project } = await ConfigureModule.getInstance();\n\n return {\n module: ConfigureModule,\n providers: [\n {\n provide: NodeConfig,\n useValue: nodeConfig,\n },\n {\n provide: 'ISubqueryProject',\n useValue: project,\n },\n {\n provide: 'IProjectUpgradeService',\n useValue: project,\n },\n {\n provide: 'Null',\n useValue: null,\n },\n ],\n exports: [\n NodeConfig,\n 'ISubqueryProject',\n 'IProjectUpgradeService',\n 'Null',\n ],\n };\n }\n}\n"]}
@@ -1,9 +1,8 @@
1
1
  import { EventEmitter2 } from '@nestjs/event-emitter';
2
2
  import { SubqlStellarDataSource } from '@subql/common-stellar';
3
- import { NodeConfig, DictionaryService } from '@subql/node-core';
3
+ import { NodeConfig, DictionaryService, DsProcessorService } from '@subql/node-core';
4
4
  import { StellarBlock } from '@subql/types-stellar';
5
5
  import { SubqueryProject } from '../../configure/SubqueryProject';
6
- import { DsProcessorService } from '../ds-processor.service';
7
6
  export declare class StellarDictionaryService extends DictionaryService<SubqlStellarDataSource, StellarBlock> {
8
7
  protected project: SubqueryProject;
9
8
  protected dsProcessorService: DsProcessorService;
@@ -19,7 +19,6 @@ const common_1 = require("@nestjs/common");
19
19
  const event_emitter_1 = require("@nestjs/event-emitter");
20
20
  const common_2 = require("@subql/common");
21
21
  const node_core_1 = require("@subql/node-core");
22
- const ds_processor_service_1 = require("../ds-processor.service");
23
22
  const v1_1 = require("./v1");
24
23
  const logger = (0, node_core_1.getLogger)('StellarDictionary');
25
24
  let StellarDictionaryService = class StellarDictionaryService extends node_core_1.DictionaryService {
@@ -54,12 +53,12 @@ let StellarDictionaryService = class StellarDictionaryService extends node_core_
54
53
  this.dsProcessorService = dsProcessorService;
55
54
  }
56
55
  };
57
- StellarDictionaryService = __decorate([
56
+ exports.StellarDictionaryService = StellarDictionaryService;
57
+ exports.StellarDictionaryService = StellarDictionaryService = __decorate([
58
58
  (0, common_1.Injectable)(),
59
59
  __param(0, (0, common_1.Inject)('ISubqueryProject')),
60
60
  __metadata("design:paramtypes", [Object, node_core_1.NodeConfig,
61
61
  event_emitter_1.EventEmitter2,
62
- ds_processor_service_1.DsProcessorService])
62
+ node_core_1.DsProcessorService])
63
63
  ], StellarDictionaryService);
64
- exports.StellarDictionaryService = StellarDictionaryService;
65
64
  //# sourceMappingURL=stellarDictionary.service.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"stellarDictionary.service.js","sourceRoot":"","sources":["../../../src/indexer/dictionary/stellarDictionary.service.ts"],"names":[],"mappings":";AAAA,8DAA8D;AAC9D,mCAAmC;;;;;;;;;;;;;;;AAEnC,2CAAoD;AACpD,yDAAsD;AACtD,0CAA+C;AAE/C,gDAA4E;AAG5E,kEAA6D;AAC7D,6BAA2C;AAE3C,MAAM,MAAM,GAAG,IAAA,qBAAS,EAAC,mBAAmB,CAAC,CAAC;AAGvC,IAAM,wBAAwB,GAA9B,MAAM,wBAAyB,SAAQ,6BAG7C;IA0CyC;IAG5B;IA5CZ,KAAK,CAAC,gBAAgB;QACpB,MAAM,cAAc,GAA0B,EAAE,CAAC;QAEjD,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE;YACjB,MAAM,IAAI,KAAK,CAAC,gDAAgD,CAAC,CAAC;SACnE;QACD,MAAM,oBAAoB,GAAG,MAAM,IAAI,CAAC,iBAAiB,CACvD,uBAAc,CAAC,OAAO,EACtB,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,OAAO,EAC5B,IAAI,CAAC,UAAU,CAAC,kBAAkB,CACnC,CAAC;QAEF,MAAM,CAAC,KAAK,CAAC,kCAAkC,oBAAoB,EAAE,CAAC,CAAC;QAEvE,MAAM,mBAAmB,GAAa,CACpC,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,UAAU,CAAC;YAC7C,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,UAAU;gBAChC,CAAC,CAAC,EAAE;gBACJ,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,UAAU,CAAC;YACrC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,UAAU,CACpC,CAAC,MAAM,CAAC,oBAAoB,CAAC,CAAC;QAE/B,KAAK,MAAM,QAAQ,IAAI,mBAAmB,EAAE;YAC1C,IAAI;gBACF,MAAM,YAAY,GAAG,MAAM,wBAAmB,CAAC,MAAM,CACnD,IAAI,CAAC,OAAO,EACZ,IAAI,CAAC,UAAU,EACf,IAAI,CAAC,kBAAkB,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,kBAAkB,CAAC,EACpE,QAAQ,CACT,CAAC;gBACF,cAAc,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;aACnC;YAAC,OAAO,CAAC,EAAE;gBACV,MAAM,CAAC,IAAI,CACT,wBAAwB,QAAQ,6BAA6B,CAC9D,CAAC;aACH;SACF;QACD,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;IAC5B,CAAC;IAED,YACwC,OAAwB,EAC9D,UAAsB,EACtB,YAA2B,EACjB,kBAAsC;QAEhD,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,OAAO,EAAE,UAAU,EAAE,YAAY,CAAC,CAAC;QALnB,YAAO,GAAP,OAAO,CAAiB;QAGpD,uBAAkB,GAAlB,kBAAkB,CAAoB;IAGlD,CAAC;CACF,CAAA;AApDY,wBAAwB;IADpC,IAAA,mBAAU,GAAE;IA8CR,WAAA,IAAA,eAAM,EAAC,kBAAkB,CAAC,CAAA;6CACf,sBAAU;QACR,6BAAa;QACG,yCAAkB;GAhDvC,wBAAwB,CAoDpC;AApDY,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 { EventEmitter2 } from '@nestjs/event-emitter';\nimport { NETWORK_FAMILY } from '@subql/common';\nimport { SubqlStellarDataSource } from '@subql/common-stellar';\nimport { NodeConfig, DictionaryService, getLogger } from '@subql/node-core';\nimport { StellarBlock } from '@subql/types-stellar';\nimport { SubqueryProject } from '../../configure/SubqueryProject';\nimport { DsProcessorService } from '../ds-processor.service';\nimport { StellarDictionaryV1 } from './v1';\n\nconst logger = getLogger('StellarDictionary');\n\n@Injectable()\nexport class StellarDictionaryService extends DictionaryService<\n SubqlStellarDataSource,\n StellarBlock\n> {\n async initDictionaries(): Promise<void> {\n const dictionariesV1: StellarDictionaryV1[] = [];\n\n if (!this.project) {\n throw new Error(`Project in Dictionary service not initialized `);\n }\n const registryDictionaries = await this.resolveDictionary(\n NETWORK_FAMILY.stellar,\n this.project.network.chainId,\n this.nodeConfig.dictionaryRegistry,\n );\n\n logger.debug(`Dictionary registry endpoints: ${registryDictionaries}`);\n\n const dictionaryEndpoints: string[] = (\n !Array.isArray(this.project.network.dictionary)\n ? !this.project.network.dictionary\n ? []\n : [this.project.network.dictionary]\n : this.project.network.dictionary\n ).concat(registryDictionaries);\n\n for (const endpoint of dictionaryEndpoints) {\n try {\n const dictionaryV1 = await StellarDictionaryV1.create(\n this.project,\n this.nodeConfig,\n this.dsProcessorService.getDsProcessor.bind(this.dsProcessorService),\n endpoint,\n );\n dictionariesV1.push(dictionaryV1);\n } catch (e) {\n logger.warn(\n `Dictionary endpoint \"${endpoint}\" is not a valid dictionary`,\n );\n }\n }\n this.init(dictionariesV1);\n }\n\n constructor(\n @Inject('ISubqueryProject') protected project: SubqueryProject,\n nodeConfig: NodeConfig,\n eventEmitter: EventEmitter2,\n protected dsProcessorService: DsProcessorService,\n ) {\n super(project.network.chainId, nodeConfig, eventEmitter);\n }\n}\n"]}
1
+ {"version":3,"file":"stellarDictionary.service.js","sourceRoot":"","sources":["../../../src/indexer/dictionary/stellarDictionary.service.ts"],"names":[],"mappings":";AAAA,8DAA8D;AAC9D,mCAAmC;;;;;;;;;;;;;;;AAEnC,2CAAoD;AACpD,yDAAsD;AACtD,0CAA+C;AAE/C,gDAK0B;AAG1B,6BAA2C;AAE3C,MAAM,MAAM,GAAG,IAAA,qBAAS,EAAC,mBAAmB,CAAC,CAAC;AAGvC,IAAM,wBAAwB,GAA9B,MAAM,wBAAyB,SAAQ,6BAG7C;IA0CyC;IAG5B;IA5CZ,KAAK,CAAC,gBAAgB;QACpB,MAAM,cAAc,GAA0B,EAAE,CAAC;QAEjD,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;YAClB,MAAM,IAAI,KAAK,CAAC,gDAAgD,CAAC,CAAC;QACpE,CAAC;QACD,MAAM,oBAAoB,GAAG,MAAM,IAAI,CAAC,iBAAiB,CACvD,uBAAc,CAAC,OAAO,EACtB,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,OAAO,EAC5B,IAAI,CAAC,UAAU,CAAC,kBAAkB,CACnC,CAAC;QAEF,MAAM,CAAC,KAAK,CAAC,kCAAkC,oBAAoB,EAAE,CAAC,CAAC;QAEvE,MAAM,mBAAmB,GAAa,CACpC,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,UAAU,CAAC;YAC7C,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,UAAU;gBAChC,CAAC,CAAC,EAAE;gBACJ,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,UAAU,CAAC;YACrC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,UAAU,CACpC,CAAC,MAAM,CAAC,oBAAoB,CAAC,CAAC;QAE/B,KAAK,MAAM,QAAQ,IAAI,mBAAmB,EAAE,CAAC;YAC3C,IAAI,CAAC;gBACH,MAAM,YAAY,GAAG,MAAM,wBAAmB,CAAC,MAAM,CACnD,IAAI,CAAC,OAAO,EACZ,IAAI,CAAC,UAAU,EACf,IAAI,CAAC,kBAAkB,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,kBAAkB,CAAC,EACpE,QAAQ,CACT,CAAC;gBACF,cAAc,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;YACpC,CAAC;YAAC,OAAO,CAAC,EAAE,CAAC;gBACX,MAAM,CAAC,IAAI,CACT,wBAAwB,QAAQ,6BAA6B,CAC9D,CAAC;YACJ,CAAC;QACH,CAAC;QACD,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;IAC5B,CAAC;IAED,YACwC,OAAwB,EAC9D,UAAsB,EACtB,YAA2B,EACjB,kBAAsC;QAEhD,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,OAAO,EAAE,UAAU,EAAE,YAAY,CAAC,CAAC;QALnB,YAAO,GAAP,OAAO,CAAiB;QAGpD,uBAAkB,GAAlB,kBAAkB,CAAoB;IAGlD,CAAC;CACF,CAAA;AApDY,4DAAwB;mCAAxB,wBAAwB;IADpC,IAAA,mBAAU,GAAE;IA8CR,WAAA,IAAA,eAAM,EAAC,kBAAkB,CAAC,CAAA;6CACf,sBAAU;QACR,6BAAa;QACG,8BAAkB;GAhDvC,wBAAwB,CAoDpC","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 { NETWORK_FAMILY } from '@subql/common';\nimport { SubqlStellarDataSource } from '@subql/common-stellar';\nimport {\n NodeConfig,\n DictionaryService,\n getLogger,\n DsProcessorService,\n} from '@subql/node-core';\nimport { StellarBlock } from '@subql/types-stellar';\nimport { SubqueryProject } from '../../configure/SubqueryProject';\nimport { StellarDictionaryV1 } from './v1';\n\nconst logger = getLogger('StellarDictionary');\n\n@Injectable()\nexport class StellarDictionaryService extends DictionaryService<\n SubqlStellarDataSource,\n StellarBlock\n> {\n async initDictionaries(): Promise<void> {\n const dictionariesV1: StellarDictionaryV1[] = [];\n\n if (!this.project) {\n throw new Error(`Project in Dictionary service not initialized `);\n }\n const registryDictionaries = await this.resolveDictionary(\n NETWORK_FAMILY.stellar,\n this.project.network.chainId,\n this.nodeConfig.dictionaryRegistry,\n );\n\n logger.debug(`Dictionary registry endpoints: ${registryDictionaries}`);\n\n const dictionaryEndpoints: string[] = (\n !Array.isArray(this.project.network.dictionary)\n ? !this.project.network.dictionary\n ? []\n : [this.project.network.dictionary]\n : this.project.network.dictionary\n ).concat(registryDictionaries);\n\n for (const endpoint of dictionaryEndpoints) {\n try {\n const dictionaryV1 = await StellarDictionaryV1.create(\n this.project,\n this.nodeConfig,\n this.dsProcessorService.getDsProcessor.bind(this.dsProcessorService),\n endpoint,\n );\n dictionariesV1.push(dictionaryV1);\n } catch (e) {\n logger.warn(\n `Dictionary endpoint \"${endpoint}\" is not a valid dictionary`,\n );\n }\n }\n this.init(dictionariesV1);\n }\n\n constructor(\n @Inject('ISubqueryProject') protected project: SubqueryProject,\n nodeConfig: NodeConfig,\n eventEmitter: EventEmitter2,\n protected dsProcessorService: DsProcessorService,\n ) {\n super(project.network.chainId, nodeConfig, eventEmitter);\n }\n}\n"]}
@@ -1,9 +1,8 @@
1
1
  import { SubqlStellarDataSource } from '@subql/common-stellar';
2
- import { NodeConfig, DictionaryV1 } from '@subql/node-core';
2
+ import { NodeConfig, DictionaryV1, DsProcessorService } from '@subql/node-core';
3
3
  import { DictionaryQueryEntry as DictionaryV1QueryEntry } from '@subql/types-core';
4
4
  import { SubqlDatasource } from '@subql/types-stellar';
5
5
  import { SubqueryProject } from '../../../configure/SubqueryProject';
6
- import { DsProcessorService } from '../../ds-processor.service';
7
6
  type GetDsProcessor = DsProcessorService['getDsProcessor'];
8
7
  export declare function buildDictionaryQueryEntries(dataSources: SubqlDatasource[]): DictionaryV1QueryEntry[];
9
8
  export declare class StellarDictionaryV1 extends DictionaryV1<SubqlStellarDataSource> {
@@ -2,7 +2,8 @@
2
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
- exports.StellarDictionaryV1 = exports.buildDictionaryQueryEntries = void 0;
5
+ exports.StellarDictionaryV1 = void 0;
6
+ exports.buildDictionaryQueryEntries = buildDictionaryQueryEntries;
6
7
  const common_stellar_1 = require("@subql/common-stellar");
7
8
  const node_core_1 = require("@subql/node-core");
8
9
  const lodash_1 = require("lodash");
@@ -168,7 +169,6 @@ function buildDictionaryQueryEntries(dataSources) {
168
169
  }
169
170
  return (0, lodash_1.uniqBy)(queryEntries, (item) => `${item.entity}|${JSON.stringify((0, lodash_1.sortBy)(item.conditions, (c) => c.field))}`);
170
171
  }
171
- exports.buildDictionaryQueryEntries = buildDictionaryQueryEntries;
172
172
  class StellarDictionaryV1 extends node_core_1.DictionaryV1 {
173
173
  getDsProcessor;
174
174
  constructor(project, nodeConfig, getDsProcessor, dictionaryUrl, chainId) {
@@ -1 +1 @@
1
- {"version":3,"file":"stellarDictionaryV1.js","sourceRoot":"","sources":["../../../../src/indexer/dictionary/v1/stellarDictionaryV1.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 StellarHandlerKind,\n SubqlStellarDataSource,\n StellarTransactionFilter,\n StellarOperationFilter,\n StellarEffectFilter,\n SubqlStellarProcessorOptions,\n} from '@subql/common-stellar';\nimport { NodeConfig, DictionaryV1, getLogger } from '@subql/node-core';\nimport {\n DictionaryQueryCondition,\n DictionaryQueryEntry,\n DictionaryQueryEntry as DictionaryV1QueryEntry,\n} from '@subql/types-core';\n\nimport { SorobanEventFilter, SubqlDatasource } from '@subql/types-stellar';\nimport { sortBy, uniqBy } from 'lodash';\nimport { SubqueryProject } from '../../../configure/SubqueryProject';\nimport { yargsOptions } from '../../../yargs';\nimport { DsProcessorService } from '../../ds-processor.service';\n\ntype GetDsProcessor = DsProcessorService['getDsProcessor'];\n\nconst logger = getLogger('DictionaryService');\nfunction transactionFilterToQueryEntry(\n filter: StellarTransactionFilter,\n): DictionaryQueryEntry {\n const conditions: DictionaryQueryCondition[] = [];\n\n if (filter.account) {\n conditions.push({\n field: 'account',\n value: filter.account.toLowerCase(),\n matcher: 'equalTo',\n });\n }\n return {\n entity: 'transactions',\n conditions,\n };\n}\n\nfunction operationFilterToQueryEntry(\n filter: StellarOperationFilter,\n): DictionaryQueryEntry {\n const conditions: DictionaryQueryCondition[] = [];\n\n if (filter.type) {\n conditions.push({\n field: 'type',\n value: filter.type.toLowerCase(),\n matcher: 'equalTo',\n });\n }\n if (filter.sourceAccount) {\n conditions.push({\n field: 'sourceAccount',\n value: filter.sourceAccount.toLowerCase(),\n matcher: 'equalTo',\n });\n }\n return {\n entity: 'operations',\n conditions,\n };\n}\n\nfunction effectFilterToQueryEntry(\n filter: StellarEffectFilter,\n): DictionaryQueryEntry {\n const conditions: DictionaryQueryCondition[] = [];\n\n if (filter.type) {\n conditions.push({\n field: 'type',\n value: filter.type.toLowerCase(),\n matcher: 'equalTo',\n });\n }\n if (filter.account) {\n conditions.push({\n field: 'account',\n value: filter.account.toLowerCase(),\n matcher: 'equalTo',\n });\n }\n return {\n entity: 'effects',\n conditions,\n };\n}\nfunction eventFilterToQueryEntry(\n filter: SorobanEventFilter,\n dsOptions: SubqlStellarProcessorOptions | SubqlStellarProcessorOptions[],\n): DictionaryQueryEntry {\n const queryAddressLimit = yargsOptions.argv['query-address-limit'];\n\n const conditions: DictionaryQueryCondition[] = [];\n\n if (Array.isArray(dsOptions)) {\n const addresses = dsOptions\n .map((option) => option.address)\n .filter((address): address is string => !!address);\n\n if (addresses.length > queryAddressLimit) {\n logger.warn(\n `Addresses length: ${addresses.length} is exceeding limit: ${queryAddressLimit}. Consider increasing this value with the flag --query-address-limit `,\n );\n }\n\n if (addresses.length !== 0 && addresses.length <= queryAddressLimit) {\n conditions.push({\n field: 'address',\n value: addresses,\n matcher: 'in',\n });\n }\n } else {\n if (dsOptions?.address) {\n conditions.push({\n field: 'address',\n value: dsOptions.address.toLowerCase(),\n matcher: 'equalTo',\n });\n }\n }\n if (filter.topics) {\n for (let i = 0; i < Math.min(filter.topics.length, 4); i++) {\n const topic = filter.topics[i];\n if (!topic) {\n continue;\n }\n const field = `topics${i}`;\n conditions.push({\n field,\n value: topic,\n matcher: 'equalTo',\n });\n }\n }\n return {\n entity: 'events',\n conditions,\n };\n}\n\n/*\n We can bring groupedOptions back once dictionary event options are supported\n And only event filter support options\n */\ntype GroupedSubqlProjectDs = SubqlDatasource & {\n groupedOptions?: SubqlStellarProcessorOptions[];\n};\n\nexport function buildDictionaryQueryEntries(\n dataSources: SubqlDatasource[],\n): DictionaryV1QueryEntry[] {\n const queryEntries: DictionaryQueryEntry[] = [];\n\n for (const ds of dataSources) {\n for (const handler of ds.mapping.handlers) {\n // No filters, cant use dictionary\n if (!handler.filter) return [];\n\n switch (handler.kind) {\n case StellarHandlerKind.Block:\n return [];\n case StellarHandlerKind.Transaction: {\n const filter = handler.filter as StellarTransactionFilter;\n if (filter.account) {\n queryEntries.push(transactionFilterToQueryEntry(filter));\n } else {\n return [];\n }\n break;\n }\n case StellarHandlerKind.Operation: {\n const filter = handler.filter as StellarOperationFilter;\n if (filter.sourceAccount || filter.type) {\n queryEntries.push(operationFilterToQueryEntry(filter));\n } else {\n return [];\n }\n break;\n }\n case StellarHandlerKind.Effects: {\n const filter = handler.filter as StellarEffectFilter;\n if (filter.account || filter.type) {\n queryEntries.push(effectFilterToQueryEntry(filter));\n } else {\n return [];\n }\n break;\n }\n // TODO, event is not provided in current dictionary,\n // https://github.com/subquery/stellar-subql-dictionaries/blob/main/schema.graphql\n case StellarHandlerKind.Event: {\n const filter = handler.filter as SorobanEventFilter;\n if (ds.options?.address || filter.topics) {\n queryEntries.push(eventFilterToQueryEntry(filter, ds.options!));\n } else {\n return [];\n }\n break;\n }\n default:\n }\n }\n }\n\n return uniqBy(\n queryEntries,\n (item) =>\n `${item.entity}|${JSON.stringify(\n sortBy(item.conditions, (c) => c.field),\n )}`,\n );\n}\n\nexport class StellarDictionaryV1 extends DictionaryV1<SubqlStellarDataSource> {\n constructor(\n project: SubqueryProject,\n nodeConfig: NodeConfig,\n private getDsProcessor: GetDsProcessor,\n dictionaryUrl: string,\n chainId?: string,\n ) {\n super(dictionaryUrl, chainId ?? project.network.chainId, nodeConfig);\n }\n\n static async create(\n project: SubqueryProject,\n nodeConfig: NodeConfig,\n getDsProcessor: GetDsProcessor,\n dictionaryUrl: string,\n chainId?: string,\n ): Promise<StellarDictionaryV1> {\n const dictionary = new StellarDictionaryV1(\n project,\n nodeConfig,\n getDsProcessor,\n dictionaryUrl,\n chainId,\n );\n await dictionary.init();\n return dictionary;\n }\n\n buildDictionaryQueryEntries(\n dataSources: SubqlStellarDataSource[],\n ): DictionaryV1QueryEntry[] {\n return buildDictionaryQueryEntries(dataSources);\n }\n}\n"]}
1
+ {"version":3,"file":"stellarDictionaryV1.js","sourceRoot":"","sources":["../../../../src/indexer/dictionary/v1/stellarDictionaryV1.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 StellarHandlerKind,\n SubqlStellarDataSource,\n StellarTransactionFilter,\n StellarOperationFilter,\n StellarEffectFilter,\n SubqlStellarProcessorOptions,\n} from '@subql/common-stellar';\nimport {\n NodeConfig,\n DictionaryV1,\n getLogger,\n DsProcessorService,\n} from '@subql/node-core';\nimport {\n DictionaryQueryCondition,\n DictionaryQueryEntry,\n DictionaryQueryEntry as DictionaryV1QueryEntry,\n} from '@subql/types-core';\n\nimport { SorobanEventFilter, SubqlDatasource } from '@subql/types-stellar';\nimport { sortBy, uniqBy } from 'lodash';\nimport { SubqueryProject } from '../../../configure/SubqueryProject';\nimport { yargsOptions } from '../../../yargs';\n\ntype GetDsProcessor = DsProcessorService['getDsProcessor'];\n\nconst logger = getLogger('DictionaryService');\nfunction transactionFilterToQueryEntry(\n filter: StellarTransactionFilter,\n): DictionaryQueryEntry {\n const conditions: DictionaryQueryCondition[] = [];\n\n if (filter.account) {\n conditions.push({\n field: 'account',\n value: filter.account.toLowerCase(),\n matcher: 'equalTo',\n });\n }\n return {\n entity: 'transactions',\n conditions,\n };\n}\n\nfunction operationFilterToQueryEntry(\n filter: StellarOperationFilter,\n): DictionaryQueryEntry {\n const conditions: DictionaryQueryCondition[] = [];\n\n if (filter.type) {\n conditions.push({\n field: 'type',\n value: filter.type.toLowerCase(),\n matcher: 'equalTo',\n });\n }\n if (filter.sourceAccount) {\n conditions.push({\n field: 'sourceAccount',\n value: filter.sourceAccount.toLowerCase(),\n matcher: 'equalTo',\n });\n }\n return {\n entity: 'operations',\n conditions,\n };\n}\n\nfunction effectFilterToQueryEntry(\n filter: StellarEffectFilter,\n): DictionaryQueryEntry {\n const conditions: DictionaryQueryCondition[] = [];\n\n if (filter.type) {\n conditions.push({\n field: 'type',\n value: filter.type.toLowerCase(),\n matcher: 'equalTo',\n });\n }\n if (filter.account) {\n conditions.push({\n field: 'account',\n value: filter.account.toLowerCase(),\n matcher: 'equalTo',\n });\n }\n return {\n entity: 'effects',\n conditions,\n };\n}\nfunction eventFilterToQueryEntry(\n filter: SorobanEventFilter,\n dsOptions: SubqlStellarProcessorOptions | SubqlStellarProcessorOptions[],\n): DictionaryQueryEntry {\n const queryAddressLimit = yargsOptions.argv['query-address-limit'];\n\n const conditions: DictionaryQueryCondition[] = [];\n\n if (Array.isArray(dsOptions)) {\n const addresses = dsOptions\n .map((option) => option.address)\n .filter((address): address is string => !!address);\n\n if (addresses.length > queryAddressLimit) {\n logger.warn(\n `Addresses length: ${addresses.length} is exceeding limit: ${queryAddressLimit}. Consider increasing this value with the flag --query-address-limit `,\n );\n }\n\n if (addresses.length !== 0 && addresses.length <= queryAddressLimit) {\n conditions.push({\n field: 'address',\n value: addresses,\n matcher: 'in',\n });\n }\n } else {\n if (dsOptions?.address) {\n conditions.push({\n field: 'address',\n value: dsOptions.address.toLowerCase(),\n matcher: 'equalTo',\n });\n }\n }\n if (filter.topics) {\n for (let i = 0; i < Math.min(filter.topics.length, 4); i++) {\n const topic = filter.topics[i];\n if (!topic) {\n continue;\n }\n const field = `topics${i}`;\n conditions.push({\n field,\n value: topic,\n matcher: 'equalTo',\n });\n }\n }\n return {\n entity: 'events',\n conditions,\n };\n}\n\n/*\n We can bring groupedOptions back once dictionary event options are supported\n And only event filter support options\n */\ntype GroupedSubqlProjectDs = SubqlDatasource & {\n groupedOptions?: SubqlStellarProcessorOptions[];\n};\n\nexport function buildDictionaryQueryEntries(\n dataSources: SubqlDatasource[],\n): DictionaryV1QueryEntry[] {\n const queryEntries: DictionaryQueryEntry[] = [];\n\n for (const ds of dataSources) {\n for (const handler of ds.mapping.handlers) {\n // No filters, cant use dictionary\n if (!handler.filter) return [];\n\n switch (handler.kind) {\n case StellarHandlerKind.Block:\n return [];\n case StellarHandlerKind.Transaction: {\n const filter = handler.filter as StellarTransactionFilter;\n if (filter.account) {\n queryEntries.push(transactionFilterToQueryEntry(filter));\n } else {\n return [];\n }\n break;\n }\n case StellarHandlerKind.Operation: {\n const filter = handler.filter as StellarOperationFilter;\n if (filter.sourceAccount || filter.type) {\n queryEntries.push(operationFilterToQueryEntry(filter));\n } else {\n return [];\n }\n break;\n }\n case StellarHandlerKind.Effects: {\n const filter = handler.filter as StellarEffectFilter;\n if (filter.account || filter.type) {\n queryEntries.push(effectFilterToQueryEntry(filter));\n } else {\n return [];\n }\n break;\n }\n // TODO, event is not provided in current dictionary,\n // https://github.com/subquery/stellar-subql-dictionaries/blob/main/schema.graphql\n case StellarHandlerKind.Event: {\n const filter = handler.filter as SorobanEventFilter;\n if (ds.options?.address || filter.topics) {\n queryEntries.push(eventFilterToQueryEntry(filter, ds.options!));\n } else {\n return [];\n }\n break;\n }\n default:\n }\n }\n }\n\n return uniqBy(\n queryEntries,\n (item) =>\n `${item.entity}|${JSON.stringify(\n sortBy(item.conditions, (c) => c.field),\n )}`,\n );\n}\n\nexport class StellarDictionaryV1 extends DictionaryV1<SubqlStellarDataSource> {\n constructor(\n project: SubqueryProject,\n nodeConfig: NodeConfig,\n private getDsProcessor: GetDsProcessor,\n dictionaryUrl: string,\n chainId?: string,\n ) {\n super(dictionaryUrl, chainId ?? project.network.chainId, nodeConfig);\n }\n\n static async create(\n project: SubqueryProject,\n nodeConfig: NodeConfig,\n getDsProcessor: GetDsProcessor,\n dictionaryUrl: string,\n chainId?: string,\n ): Promise<StellarDictionaryV1> {\n const dictionary = new StellarDictionaryV1(\n project,\n nodeConfig,\n getDsProcessor,\n dictionaryUrl,\n chainId,\n );\n await dictionary.init();\n return dictionary;\n }\n\n buildDictionaryQueryEntries(\n dataSources: SubqlStellarDataSource[],\n ): DictionaryV1QueryEntry[] {\n return buildDictionaryQueryEntries(dataSources);\n }\n}\n"]}
@@ -7,33 +7,29 @@ var __decorate = (this && this.__decorate) || function (decorators, target, key,
7
7
  else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
8
8
  return c > 3 && r && Object.defineProperty(target, key, r), r;
9
9
  };
10
+ var __importDefault = (this && this.__importDefault) || function (mod) {
11
+ return (mod && mod.__esModule) ? mod : { "default": mod };
12
+ };
10
13
  Object.defineProperty(exports, "__esModule", { value: true });
11
14
  exports.FetchModule = void 0;
15
+ const node_path_1 = __importDefault(require("node:path"));
12
16
  const common_1 = require("@nestjs/common");
13
17
  const event_emitter_1 = require("@nestjs/event-emitter");
14
18
  const node_core_1 = require("@subql/node-core");
19
+ const blockchain_service_1 = require("../blockchain.service");
15
20
  const api_service_stellar_1 = require("../stellar/api.service.stellar");
16
- const blockDispatcher_1 = require("./blockDispatcher");
17
21
  const dictionary_1 = require("./dictionary");
18
- const ds_processor_service_1 = require("./ds-processor.service");
19
- const dynamic_ds_service_1 = require("./dynamic-ds.service");
20
- const fetch_service_1 = require("./fetch.service");
21
22
  const indexer_manager_1 = require("./indexer.manager");
22
- const project_service_1 = require("./project.service");
23
- const unfinalizedBlocks_service_1 = require("./unfinalizedBlocks.service");
24
23
  let FetchModule = class FetchModule {
25
24
  };
26
- FetchModule = __decorate([
25
+ exports.FetchModule = FetchModule;
26
+ exports.FetchModule = FetchModule = __decorate([
27
27
  (0, common_1.Module)({
28
28
  imports: [node_core_1.CoreModule],
29
29
  providers: [
30
30
  {
31
- provide: node_core_1.ApiService,
32
- useFactory: async (project, connectionPoolService, eventEmitter, nodeConfig) => {
33
- const apiService = new api_service_stellar_1.StellarApiService(project, connectionPoolService, eventEmitter, nodeConfig);
34
- await apiService.init();
35
- return apiService;
36
- },
31
+ provide: 'APIService',
32
+ useFactory: api_service_stellar_1.StellarApiService.create.bind(api_service_stellar_1.StellarApiService),
37
33
  inject: [
38
34
  'ISubqueryProject',
39
35
  node_core_1.ConnectionPoolService,
@@ -41,41 +37,48 @@ FetchModule = __decorate([
41
37
  node_core_1.NodeConfig,
42
38
  ],
43
39
  },
40
+ {
41
+ provide: 'IBlockchainService',
42
+ useClass: blockchain_service_1.BlockchainService,
43
+ },
44
44
  indexer_manager_1.IndexerManager,
45
45
  {
46
46
  provide: 'IBlockDispatcher',
47
- useFactory: (nodeConfig, eventEmitter, projectService, projectUpgradeService, apiService, indexerManager, cacheService, storeService, storeModelProvider, poiSyncService, project, dynamicDsService, unfinalizedBlocks, connectionPoolState, monitorService) => nodeConfig.workers
48
- ? new blockDispatcher_1.WorkerBlockDispatcherService(nodeConfig, eventEmitter, projectService, projectUpgradeService, cacheService, storeService, storeModelProvider, poiSyncService, project, dynamicDsService, unfinalizedBlocks, connectionPoolState, monitorService)
49
- : new blockDispatcher_1.BlockDispatcherService(apiService, nodeConfig, indexerManager, eventEmitter, projectService, projectUpgradeService, storeService, storeModelProvider, poiSyncService, project),
47
+ useFactory: (0, node_core_1.blockDispatcherFactory)(node_path_1.default.resolve(__dirname, '../../dist/indexer/worker/worker.js'), []),
50
48
  inject: [
51
49
  node_core_1.NodeConfig,
52
50
  event_emitter_1.EventEmitter2,
53
51
  'IProjectService',
54
52
  'IProjectUpgradeService',
55
- node_core_1.ApiService,
56
- indexer_manager_1.IndexerManager,
57
53
  node_core_1.InMemoryCacheService,
58
54
  node_core_1.StoreService,
59
55
  'IStoreModelProvider',
60
56
  node_core_1.PoiSyncService,
61
57
  'ISubqueryProject',
62
- dynamic_ds_service_1.DynamicDsService,
63
- unfinalizedBlocks_service_1.UnfinalizedBlocksService,
58
+ node_core_1.DynamicDsService,
59
+ 'IUnfinalizedBlocksService',
64
60
  node_core_1.ConnectionPoolStateManager,
61
+ 'IBlockchainService',
62
+ indexer_manager_1.IndexerManager,
65
63
  node_core_1.MonitorService,
66
64
  ],
67
65
  },
68
- fetch_service_1.FetchService,
69
- dictionary_1.StellarDictionaryService,
70
- ds_processor_service_1.DsProcessorService,
71
- dynamic_ds_service_1.DynamicDsService,
66
+ node_core_1.FetchService,
72
67
  {
73
- useClass: project_service_1.ProjectService,
68
+ provide: node_core_1.DictionaryService,
69
+ useClass: dictionary_1.StellarDictionaryService,
70
+ },
71
+ node_core_1.DsProcessorService,
72
+ node_core_1.DynamicDsService,
73
+ {
74
+ useClass: node_core_1.ProjectService,
74
75
  provide: 'IProjectService',
75
76
  },
76
- unfinalizedBlocks_service_1.UnfinalizedBlocksService,
77
+ {
78
+ provide: 'IUnfinalizedBlocksService',
79
+ useClass: node_core_1.UnfinalizedBlocksService,
80
+ },
77
81
  ],
78
82
  })
79
83
  ], FetchModule);
80
- exports.FetchModule = FetchModule;
81
84
  //# sourceMappingURL=fetch.module.js.map