@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 +1 @@
1
- {"version":3,"file":"api.stellar.js","sourceRoot":"","sources":["../../src/stellar/api.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 assert from 'assert';\nimport { EventEmitter2 } from '@nestjs/event-emitter';\nimport { Horizon } from '@stellar/stellar-sdk';\nimport { getLogger, IBlock } from '@subql/node-core';\nimport {\n ApiWrapper,\n SorobanEvent,\n StellarBlock,\n StellarBlockWrapper,\n StellarEffect,\n StellarOperation,\n StellarTransaction,\n IStellarEndpointConfig,\n} from '@subql/types-stellar';\nimport { cloneDeep } from 'lodash';\nimport { StellarBlockWrapped } from '../stellar/block.stellar';\nimport SafeStellarProvider from './safe-api';\nimport { SorobanServer } from './soroban.server';\nimport { StellarServer } from './stellar.server';\nimport { formatBlockUtil } from './utils.stellar';\n\n// eslint-disable-next-line @typescript-eslint/no-var-requires\nconst { version: packageVersion } = require('../../package.json');\n\nconst logger = getLogger('api.Stellar');\n\nexport class StellarApi implements ApiWrapper {\n //private client: Server;\n private stellarClient: StellarServer;\n\n private chainId?: string;\n\n constructor(\n private endpoint: string,\n private eventEmitter: EventEmitter2,\n private _sorobanClient?: SorobanServer,\n private config?: IStellarEndpointConfig,\n ) {\n const { hostname, protocol, searchParams } = new URL(this.endpoint);\n\n const protocolStr = protocol.replace(':', '');\n\n logger.info(`Api host: ${hostname}, method: ${protocolStr}`);\n if (protocolStr === 'https' || protocolStr === 'http') {\n const options: Horizon.Server.Options = {\n allowHttp: protocolStr === 'http',\n headers: {\n ...config?.headers,\n },\n };\n\n this.stellarClient = new StellarServer(endpoint, options);\n } else {\n throw new Error(`Unsupported protocol: ${protocol}`);\n }\n }\n\n async init(): Promise<void> {\n //need archive node for genesis hash\n //const genesisLedger = (await this.stellarClient.ledgers().ledger(1).call()).records[0];\n this.chainId = (await this.stellarClient.getNetwork()).network_passphrase;\n //this.genesisHash = genesisLedger.hash;\n }\n\n get sorobanClient(): SorobanServer {\n assert(this._sorobanClient, 'Soraban client is not initialized');\n return this._sorobanClient;\n }\n\n async getFinalizedBlock(): Promise<Horizon.ServerApi.LedgerRecord> {\n return (await this.stellarClient.ledgers().order('desc').call()).records[0];\n }\n\n async getFinalizedBlockHeight(): Promise<number> {\n return (await this.getFinalizedBlock()).sequence;\n }\n\n async getBestBlockHeight(): Promise<number> {\n return (await this.getFinalizedBlockHeight()) + 1;\n }\n\n getRuntimeChain(): string {\n assert(this.chainId, 'Api has not been initialised');\n return this.chainId;\n }\n\n getChainId(): string {\n assert(this.chainId, 'Api has not been initialised');\n return this.chainId;\n }\n\n getGenesisHash(): string {\n assert(this.chainId, 'Api has not been initialised');\n return this.chainId;\n }\n\n getSpecName(): string {\n return 'Stellar';\n }\n\n private async fetchTransactionsForLedger(\n sequence: number,\n ): Promise<Horizon.ServerApi.TransactionRecord[]> {\n const txs: Horizon.ServerApi.TransactionRecord[] = [];\n let txsPage = await this.api.transactions().forLedger(sequence).call();\n while (txsPage.records.length !== 0) {\n txs.push(...txsPage.records);\n txsPage = await txsPage.next();\n }\n\n return txs;\n }\n\n private async fetchOperationsForLedger(\n sequence: number,\n ): Promise<Horizon.ServerApi.OperationRecord[]> {\n const operations: Horizon.ServerApi.OperationRecord[] = [];\n let operationsPage = await this.api.operations().forLedger(sequence).call();\n while (operationsPage.records.length !== 0) {\n operations.push(...operationsPage.records);\n operationsPage = await operationsPage.next();\n }\n\n return operations;\n }\n\n private async fetchEffectsForLedger(\n sequence: number,\n ): Promise<Horizon.ServerApi.EffectRecord[]> {\n const effects: Horizon.ServerApi.EffectRecord[] = [];\n let effectsPage = await this.api.effects().forLedger(sequence).call();\n while (effectsPage.records.length !== 0) {\n effects.push(...effectsPage.records);\n effectsPage = await effectsPage.next();\n }\n\n return effects;\n }\n\n private getTransactionApplicationOrder(eventId: string) {\n // Right shift the ID by 12 bits to exclude the Operation Index\n const shiftedId = BigInt(eventId.split('-')[0]) >> BigInt(12);\n\n // Create a mask for 20 bits to ignore the Ledger Sequence Number\n const mask = BigInt((1 << 20) - 1);\n\n // Apply bitwise AND operation with the mask to get the Transaction Application Order\n const transactionApplicationOrder = shiftedId & mask;\n return Number(transactionApplicationOrder);\n }\n\n private getOperationIndex(id: string) {\n // Pick the first part of the ID before the '-' character\n const idPart = id.split('-')[0];\n\n // Create a mask for 12 bits to isolate the Operation Index\n const mask = BigInt((1 << 12) - 1);\n\n // Apply bitwise AND operation with the mask to get the Operation Index\n const operationIndex = BigInt(idPart) & mask;\n\n return Number(operationIndex);\n }\n\n async getAndWrapEvents(height: number): Promise<SorobanEvent[]> {\n const { events: events } = await this.sorobanClient.getEvents({\n startLedger: height,\n filters: [],\n });\n return events.map((event) => {\n const wrappedEvent = {\n ...event,\n ledger: null,\n transaction: null,\n operation: null,\n } as SorobanEvent;\n\n return wrappedEvent;\n });\n }\n\n private wrapEffectsForOperation(\n operationIndex: number,\n effectsForSequence: Horizon.ServerApi.EffectRecord[],\n ): StellarEffect[] {\n return effectsForSequence\n .filter((effect) => this.getOperationIndex(effect.id) === operationIndex)\n .map((effect) => ({\n ...effect,\n ledger: null,\n transaction: null,\n operation: null,\n }));\n }\n\n private wrapOperationsForTx(\n transactionId: string,\n applicationOrder: number,\n sequence: number,\n operationsForSequence: Horizon.ServerApi.OperationRecord[],\n effectsForSequence: Horizon.ServerApi.EffectRecord[],\n eventsForSequence: SorobanEvent[],\n ): StellarOperation[] {\n const operations = operationsForSequence.filter(\n (op) => op.transaction_hash === transactionId,\n );\n\n return operations.map((op, index) => {\n const effects = this.wrapEffectsForOperation(index, effectsForSequence);\n\n const events = eventsForSequence.filter(\n (event) =>\n this.getTransactionApplicationOrder(event.id) === applicationOrder,\n );\n\n const wrappedOp: StellarOperation = {\n ...op,\n ledger: null,\n transaction: null,\n effects: [],\n events,\n };\n\n const clonedOp = cloneDeep(wrappedOp);\n\n effects.forEach((effect) => {\n effect.operation = clonedOp;\n wrappedOp.effects.push(effect);\n });\n\n return wrappedOp;\n });\n }\n\n private wrapTransactionsForLedger(\n sequence: number,\n transactions: Horizon.ServerApi.TransactionRecord[],\n operationsForSequence: Horizon.ServerApi.OperationRecord[],\n effectsForSequence: Horizon.ServerApi.EffectRecord[],\n eventsForSequence: SorobanEvent[],\n ): StellarTransaction[] {\n return transactions.map((tx, index) => {\n const wrappedTx: StellarTransaction = {\n ...tx,\n ledger: null,\n operations: [] as StellarOperation[],\n effects: [] as StellarEffect[],\n events: [] as SorobanEvent[],\n };\n\n const clonedTx = cloneDeep(wrappedTx);\n const operations = this.wrapOperationsForTx(\n // TODO, this include other attribute from HorizonApi.TransactionResponse, but type assertion incorrect\n // TransactionRecord extends Omit<HorizonApi.TransactionResponse, \"created_at\">\n (tx as any).id,\n index + 1,\n sequence,\n operationsForSequence,\n effectsForSequence,\n eventsForSequence,\n ).map((op) => {\n op.transaction = clonedTx;\n op.effects = op.effects.map((effect) => {\n effect.transaction = clonedTx;\n return effect;\n });\n op.events = op.events.map((event) => {\n event.transaction = clonedTx;\n return event;\n });\n return op;\n });\n\n wrappedTx.operations.push(...operations);\n operations.forEach((op) => {\n wrappedTx.effects.push(...op.effects);\n wrappedTx.events.push(...op.events);\n });\n\n return wrappedTx;\n });\n }\n\n private async fetchAndWrapLedger(\n sequence: number,\n ): Promise<IBlock<StellarBlockWrapper>> {\n const [ledger, transactions, operations, effects] = await Promise.all([\n this.api.ledgers().ledger(sequence).call(),\n this.fetchTransactionsForLedger(sequence),\n this.fetchOperationsForLedger(sequence),\n this.fetchEffectsForLedger(sequence),\n ]);\n\n let eventsForSequence: SorobanEvent[] = [];\n\n //check if there is InvokeHostFunctionOp operation\n //If yes then, there are soroban transactions and we should we fetch soroban events\n const hasInvokeHostFunctionOp = operations.some(\n (op) => op.type.toString() === 'invoke_host_function',\n );\n\n if (this.sorobanClient && hasInvokeHostFunctionOp) {\n try {\n eventsForSequence = await this.getAndWrapEvents(sequence);\n } catch (e: any) {\n if (e.message === 'start is after newest ledger') {\n const latestLedger = (await this.sorobanClient.getLatestLedger())\n .sequence;\n throw new Error(`The requested events for ledger number ${sequence} is not available on the current soroban node.\n This is because you're trying to access a ledger that is after the latest ledger number ${latestLedger} stored in this node.\n To resolve this issue, please check you endpoint node start height`);\n }\n\n if (e.message === 'start is before oldest ledger') {\n throw new Error(`The requested events for ledger number ${sequence} is not available on the current soroban node.\n This is because you're trying to access a ledger that is older than the oldest ledger stored in this node.\n To resolve this issue, you can either:\n 1. Increase the start ledger to a more recent one, or\n 2. Connect to a different node that might have a longer history of ledgers.`);\n }\n\n throw e;\n }\n }\n\n const wrappedLedger: StellarBlock = {\n ...(ledger as unknown as Horizon.ServerApi.LedgerRecord),\n transactions: [] as StellarTransaction[],\n operations: [] as StellarOperation[],\n effects: [] as StellarEffect[],\n events: eventsForSequence,\n };\n\n const wrapperTxs = this.wrapTransactionsForLedger(\n sequence,\n transactions,\n operations,\n effects,\n eventsForSequence,\n );\n\n const clonedLedger = cloneDeep(wrappedLedger);\n\n wrapperTxs.forEach((tx) => {\n tx.ledger = clonedLedger;\n tx.operations = tx.operations.map((op) => {\n op.ledger = clonedLedger;\n op.effects = op.effects.map((effect) => {\n effect.ledger = clonedLedger;\n return effect;\n });\n op.events = op.events.map((event) => {\n event.ledger = clonedLedger;\n return event;\n });\n return op;\n });\n\n wrappedLedger.transactions.push(tx);\n wrappedLedger.operations.push(...tx.operations);\n\n tx.operations.forEach((op) => {\n wrappedLedger.effects.push(...op.effects);\n });\n });\n\n const wrappedLedgerInstance = new StellarBlockWrapped(\n wrappedLedger,\n wrappedLedger.transactions,\n wrappedLedger.operations,\n wrappedLedger.effects,\n wrappedLedger.events,\n );\n\n return formatBlockUtil(wrappedLedgerInstance);\n }\n\n async fetchBlocks(\n bufferBlocks: number[],\n ): Promise<IBlock<StellarBlockWrapper>[]> {\n const ledgers = await Promise.all(\n bufferBlocks.map((sequence) => this.fetchAndWrapLedger(sequence)),\n );\n return ledgers;\n }\n\n get api(): Horizon.Server {\n return this.stellarClient;\n }\n\n getSafeApi(blockHeight: number): SafeStellarProvider {\n //safe api not implemented yet\n return new SafeStellarProvider(this.sorobanClient, blockHeight);\n }\n\n // eslint-disable-next-line @typescript-eslint/require-await\n async connect(): Promise<void> {\n logger.error('Stellar API connect is not implemented');\n throw new Error('Not implemented');\n }\n\n // eslint-disable-next-line @typescript-eslint/require-await\n async disconnect(): Promise<void> {\n logger.error('Stellar API disconnect is not implemented');\n throw new Error('Not implemented');\n }\n\n handleError(e: Error, height: number): Error {\n if (e.message === 'start is before oldest ledger') {\n return new Error(`The requested ledger number ${height} is not available on the current blockchain node.\n This is because you're trying to access a ledger that is older than the oldest ledger stored in this node.\n To resolve this issue, you can either:\n 1. Increase the start ledger to a more recent one, or\n 2. Connect to a different node that might have a longer history of ledgers.`);\n }\n\n return e;\n }\n}\n"]}
1
+ {"version":3,"file":"api.stellar.js","sourceRoot":"","sources":["../../src/stellar/api.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 assert from 'assert';\nimport { Horizon } from '@stellar/stellar-sdk';\nimport { getLogger, IBlock } from '@subql/node-core';\nimport {\n ApiWrapper,\n SorobanEvent,\n StellarBlock,\n StellarBlockWrapper,\n StellarEffect,\n StellarOperation,\n StellarTransaction,\n IStellarEndpointConfig,\n} from '@subql/types-stellar';\nimport { cloneDeep } from 'lodash';\nimport { StellarBlockWrapped } from '../stellar/block.stellar';\nimport SafeStellarProvider from './safe-api';\nimport { SorobanServer } from './soroban.server';\nimport { StellarServer } from './stellar.server';\nimport { formatBlockUtil } from './utils.stellar';\n\nconst logger = getLogger('api.Stellar');\n\nexport class StellarApi implements ApiWrapper {\n //private client: Server;\n private stellarClient: StellarServer;\n\n private chainId?: string;\n\n constructor(\n private endpoint: string,\n private _sorobanClient?: SorobanServer,\n config?: IStellarEndpointConfig,\n ) {\n const { hostname, protocol, searchParams } = new URL(this.endpoint);\n\n const protocolStr = protocol.replace(':', '');\n\n logger.info(`Api host: ${hostname}, method: ${protocolStr}`);\n if (protocolStr === 'https' || protocolStr === 'http') {\n const options: Horizon.Server.Options = {\n allowHttp: protocolStr === 'http',\n headers: {\n ...config?.headers,\n },\n };\n\n this.stellarClient = new StellarServer(endpoint, options);\n } else {\n throw new Error(`Unsupported protocol: ${protocol}`);\n }\n }\n\n async init(): Promise<void> {\n //need archive node for genesis hash\n //const genesisLedger = (await this.stellarClient.ledgers().ledger(1).call()).records[0];\n this.chainId = (await this.stellarClient.getNetwork()).network_passphrase;\n //this.genesisHash = genesisLedger.hash;\n }\n\n get sorobanClient(): SorobanServer {\n assert(this._sorobanClient, 'Soraban client is not initialized');\n return this._sorobanClient;\n }\n\n async getFinalizedBlock(): Promise<Horizon.ServerApi.LedgerRecord> {\n return (await this.stellarClient.ledgers().order('desc').call()).records[0];\n }\n\n async getFinalizedBlockHeight(): Promise<number> {\n return (await this.getFinalizedBlock()).sequence;\n }\n\n async getBestBlockHeight(): Promise<number> {\n return (await this.getFinalizedBlockHeight()) + 1;\n }\n\n getRuntimeChain(): string {\n assert(this.chainId, 'Api has not been initialised');\n return this.chainId;\n }\n\n getChainId(): string {\n assert(this.chainId, 'Api has not been initialised');\n return this.chainId;\n }\n\n getGenesisHash(): string {\n assert(this.chainId, 'Api has not been initialised');\n return this.chainId;\n }\n\n getSpecName(): string {\n return 'Stellar';\n }\n\n private async fetchTransactionsForLedger(\n sequence: number,\n ): Promise<Horizon.ServerApi.TransactionRecord[]> {\n const txs: Horizon.ServerApi.TransactionRecord[] = [];\n let txsPage = await this.api.transactions().forLedger(sequence).call();\n while (txsPage.records.length !== 0) {\n txs.push(...txsPage.records);\n txsPage = await txsPage.next();\n }\n\n return txs;\n }\n\n private async fetchOperationsForLedger(\n sequence: number,\n ): Promise<Horizon.ServerApi.OperationRecord[]> {\n const operations: Horizon.ServerApi.OperationRecord[] = [];\n let operationsPage = await this.api.operations().forLedger(sequence).call();\n while (operationsPage.records.length !== 0) {\n operations.push(...operationsPage.records);\n operationsPage = await operationsPage.next();\n }\n\n return operations;\n }\n\n private async fetchEffectsForLedger(\n sequence: number,\n ): Promise<Horizon.ServerApi.EffectRecord[]> {\n const effects: Horizon.ServerApi.EffectRecord[] = [];\n let effectsPage = await this.api.effects().forLedger(sequence).call();\n while (effectsPage.records.length !== 0) {\n effects.push(...effectsPage.records);\n effectsPage = await effectsPage.next();\n }\n\n return effects;\n }\n\n private getOperationIndex(id: string) {\n // Pick the first part of the ID before the '-' character\n const idPart = id.split('-')[0];\n\n // Create a mask for 12 bits to isolate the Operation Index\n const mask = BigInt((1 << 12) - 1);\n\n // Apply bitwise AND operation with the mask to get the Operation Index\n const operationIndex = BigInt(idPart) & mask;\n\n return Number(operationIndex);\n }\n\n async getAndWrapEvents(height: number): Promise<SorobanEvent[]> {\n const { events: events } = await this.sorobanClient.getEvents({\n startLedger: height,\n filters: [],\n });\n return events.map((event) => {\n const wrappedEvent = {\n ...event,\n ledger: null,\n transaction: null,\n operation: null,\n } as SorobanEvent;\n\n return wrappedEvent;\n });\n }\n\n private wrapEffectsForOperation(\n operationIndex: number,\n effectsForSequence: Horizon.ServerApi.EffectRecord[],\n ): StellarEffect[] {\n return effectsForSequence\n .filter((effect) => this.getOperationIndex(effect.id) === operationIndex)\n .map((effect) => ({\n ...effect,\n ledger: null,\n transaction: null,\n operation: null,\n }));\n }\n\n private wrapOperationsForTx(\n transactionId: string,\n operationsForSequence: Horizon.ServerApi.OperationRecord[],\n effectsForSequence: Horizon.ServerApi.EffectRecord[],\n eventsForSequence: SorobanEvent[],\n ): StellarOperation[] {\n const operations = operationsForSequence.filter(\n (op) => op.transaction_hash === transactionId,\n );\n\n const events = eventsForSequence.filter(\n (evt) => evt.txHash === transactionId,\n );\n\n // If there are soroban events then there should only be a single operation.\n // This check is here in case there are furture changes to the network.\n assert(\n events.length > 0 ? operations.length === 1 : true,\n 'Unable to assign events to multiple operations',\n );\n\n return operations.map((op, index) => {\n const effects = this.wrapEffectsForOperation(index, effectsForSequence);\n\n const wrappedOp: StellarOperation = {\n ...op,\n ledger: null,\n transaction: null,\n effects: [],\n events,\n };\n\n const clonedOp = cloneDeep(wrappedOp);\n\n effects.forEach((effect) => {\n effect.operation = clonedOp;\n wrappedOp.effects.push(effect);\n });\n\n return wrappedOp;\n });\n }\n\n private wrapTransactionsForLedger(\n sequence: number,\n transactions: Horizon.ServerApi.TransactionRecord[],\n operationsForSequence: Horizon.ServerApi.OperationRecord[],\n effectsForSequence: Horizon.ServerApi.EffectRecord[],\n eventsForSequence: SorobanEvent[],\n ): StellarTransaction[] {\n return transactions.map((tx) => {\n const wrappedTx: StellarTransaction = {\n ...tx,\n ledger: null,\n operations: [] as StellarOperation[],\n effects: [] as StellarEffect[],\n events: [] as SorobanEvent[],\n };\n\n const clonedTx = cloneDeep(wrappedTx);\n const operations = this.wrapOperationsForTx(\n // TODO, this include other attribute from HorizonApi.TransactionResponse, but type assertion incorrect\n // TransactionRecord extends Omit<HorizonApi.TransactionResponse, \"created_at\">\n (tx as any).id,\n operationsForSequence,\n effectsForSequence,\n eventsForSequence,\n ).map((op) => {\n op.transaction = clonedTx;\n op.effects = op.effects.map((effect) => {\n effect.transaction = clonedTx;\n return effect;\n });\n op.events = op.events.map((event) => {\n event.transaction = clonedTx;\n return event;\n });\n return op;\n });\n\n wrappedTx.operations.push(...operations);\n operations.forEach((op) => {\n wrappedTx.effects.push(...op.effects);\n wrappedTx.events.push(...op.events);\n });\n\n return wrappedTx;\n });\n }\n\n private async fetchAndWrapLedger(\n sequence: number,\n ): Promise<IBlock<StellarBlockWrapper>> {\n const [ledger, transactions, operations, effects] = await Promise.all([\n this.api.ledgers().ledger(sequence).call(),\n this.fetchTransactionsForLedger(sequence),\n this.fetchOperationsForLedger(sequence),\n this.fetchEffectsForLedger(sequence),\n ]);\n\n let eventsForSequence: SorobanEvent[] = [];\n\n //check if there is InvokeHostFunctionOp operation\n //If yes then, there are soroban transactions and we should we fetch soroban events\n const hasInvokeHostFunctionOp = operations.some(\n (op) => op.type.toString() === 'invoke_host_function',\n );\n\n if (this.sorobanClient && hasInvokeHostFunctionOp) {\n try {\n eventsForSequence = await this.getAndWrapEvents(sequence);\n } catch (e: any) {\n if (e.message === 'start is after newest ledger') {\n const latestLedger = (await this.sorobanClient.getLatestLedger())\n .sequence;\n throw new Error(`The requested events for ledger number ${sequence} is not available on the current soroban node.\n This is because you're trying to access a ledger that is after the latest ledger number ${latestLedger} stored in this node.\n To resolve this issue, please check you endpoint node start height`);\n }\n\n if (e.message === 'start is before oldest ledger') {\n throw new Error(`The requested events for ledger number ${sequence} is not available on the current soroban node.\n This is because you're trying to access a ledger that is older than the oldest ledger stored in this node.\n To resolve this issue, you can either:\n 1. Increase the start ledger to a more recent one, or\n 2. Connect to a different node that might have a longer history of ledgers.`);\n }\n\n throw e;\n }\n }\n\n const wrappedLedger: StellarBlock = {\n ...(ledger as unknown as Horizon.ServerApi.LedgerRecord),\n transactions: [] as StellarTransaction[],\n operations: [] as StellarOperation[],\n effects: [] as StellarEffect[],\n events: eventsForSequence,\n };\n\n const wrapperTxs = this.wrapTransactionsForLedger(\n sequence,\n transactions,\n operations,\n effects,\n eventsForSequence,\n );\n\n const clonedLedger = cloneDeep(wrappedLedger);\n\n wrapperTxs.forEach((tx) => {\n tx.ledger = clonedLedger;\n tx.operations = tx.operations.map((op) => {\n op.ledger = clonedLedger;\n op.effects = op.effects.map((effect) => {\n effect.ledger = clonedLedger;\n return effect;\n });\n op.events = op.events.map((event) => {\n event.ledger = clonedLedger;\n return event;\n });\n return op;\n });\n\n wrappedLedger.transactions.push(tx);\n wrappedLedger.operations.push(...tx.operations);\n\n tx.operations.forEach((op) => {\n wrappedLedger.effects.push(...op.effects);\n });\n });\n\n const wrappedLedgerInstance = new StellarBlockWrapped(\n wrappedLedger,\n wrappedLedger.transactions,\n wrappedLedger.operations,\n wrappedLedger.effects,\n wrappedLedger.events,\n );\n\n return formatBlockUtil(wrappedLedgerInstance);\n }\n\n async fetchBlocks(\n bufferBlocks: number[],\n ): Promise<IBlock<StellarBlockWrapper>[]> {\n const ledgers = await Promise.all(\n bufferBlocks.map((sequence) => this.fetchAndWrapLedger(sequence)),\n );\n return ledgers;\n }\n\n get api(): Horizon.Server {\n return this.stellarClient;\n }\n\n getSafeApi(blockHeight: number): SafeStellarProvider {\n //safe api not implemented yet\n return new SafeStellarProvider(this.sorobanClient, blockHeight);\n }\n\n // eslint-disable-next-line @typescript-eslint/require-await\n async connect(): Promise<void> {\n logger.error('Stellar API connect is not implemented');\n throw new Error('Not implemented');\n }\n\n // eslint-disable-next-line @typescript-eslint/require-await\n async disconnect(): Promise<void> {\n logger.error('Stellar API disconnect is not implemented');\n throw new Error('Not implemented');\n }\n\n handleError(e: Error, height: number): Error {\n if (e.message === 'start is before oldest ledger') {\n return new Error(`The requested ledger number ${height} is not available on the current blockchain node.\n This is because you're trying to access a ledger that is older than the oldest ledger stored in this node.\n To resolve this issue, you can either:\n 1. Increase the start ledger to a more recent one, or\n 2. Connect to a different node that might have a longer history of ledgers.`);\n }\n\n return e;\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 api_stellar_1 = require("./api.stellar");
7
6
  const soroban_server_1 = require("./soroban.server");
8
7
  const HTTP_ENDPOINT = 'https://horizon-futurenet.stellar.org';
@@ -10,7 +9,7 @@ const SOROBAN_ENDPOINT = 'https://rpc-futurenet.stellar.org';
10
9
  jest.setTimeout(60000);
11
10
  const prepareStellarApi = async function () {
12
11
  const soroban = new soroban_server_1.SorobanServer(SOROBAN_ENDPOINT);
13
- const api = new api_stellar_1.StellarApi(HTTP_ENDPOINT, new event_emitter_1.EventEmitter2(), soroban);
12
+ const api = new api_stellar_1.StellarApi(HTTP_ENDPOINT, soroban);
14
13
  await api.init();
15
14
  return api;
16
15
  };
@@ -1 +1 @@
1
- {"version":3,"file":"api.stellar.spec.js","sourceRoot":"","sources":["../../src/stellar/api.stellar.spec.ts"],"names":[],"mappings":";AAAA,8DAA8D;AAC9D,mCAAmC;;AAEnC,yDAAsD;AACtD,+CAA2C;AAC3C,qDAAiD;AAEjD,MAAM,aAAa,GAAG,uCAAuC,CAAC;AAC9D,MAAM,gBAAgB,GAAG,mCAAmC,CAAC;AAE7D,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;AAEvB,MAAM,iBAAiB,GAAG,KAAK;IAC7B,MAAM,OAAO,GAAG,IAAI,8BAAa,CAAC,gBAAgB,CAAC,CAAC;IACpD,MAAM,GAAG,GAAG,IAAI,wBAAU,CAAC,aAAa,EAAE,IAAI,6BAAa,EAAE,EAAE,OAAO,CAAC,CAAC;IACxE,MAAM,GAAG,CAAC,IAAI,EAAE,CAAC;IACjB,OAAO,GAAG,CAAC;AACb,CAAC,CAAC;AAEF,QAAQ,CAAC,YAAY,EAAE,GAAG,EAAE;IAC1B,IAAI,UAAsB,CAAC;IAE3B,UAAU,CAAC,KAAK,IAAI,EAAE;QACpB,UAAU,GAAG,MAAM,iBAAiB,EAAE,CAAC;IACzC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,2BAA2B,EAAE,GAAG,EAAE;QACnC,MAAM,CAAC,UAAU,CAAC,UAAU,EAAE,CAAC,CAAC,OAAO,CACrC,wCAAwC,CACzC,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,mCAAmC,EAAE,KAAK,IAAI,EAAE;QACjD,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC,uBAAuB,EAAE,CAAC;QAC1D,MAAM,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC;QAC7B,MAAM,CAAC,MAAM,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC;IACpC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,8BAA8B,EAAE,KAAK,IAAI,EAAE;QAC5C,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC,kBAAkB,EAAE,CAAC;QACrD,MAAM,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC;QAC7B,MAAM,CAAC,MAAM,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC;IACpC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,oBAAoB,EAAE,KAAK,IAAI,EAAE;QAClC,MAAM,YAAY,GAAG,MAAM,UAAU,CAAC,uBAAuB,EAAE,CAAC;QAChE,MAAM,KAAK,GAAG,CAAC,MAAM,UAAU,CAAC,WAAW,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAChE,MAAM,CAAC,KAAK,CAAC,SAAS,EAAE,CAAC,WAAW,CAAC,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC;IAC9D,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,iCAAiC,EAAE,KAAK,IAAI,EAAE;QAC/C,MAAM,MAAM,CAAC,UAAU,CAAC,OAAO,EAAE,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,iBAAiB,CAAC,CAAC;IACxE,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,oCAAoC,EAAE,KAAK,IAAI,EAAE;QAClD,MAAM,MAAM,CAAC,UAAU,CAAC,UAAU,EAAE,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,iBAAiB,CAAC,CAAC;IAC3E,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,kCAAkC,EAAE,GAAG,EAAE;QAC1C,MAAM,KAAK,GAAG,IAAI,KAAK,CAAC,+BAA+B,CAAC,CAAC;QACzD,MAAM,OAAO,GAAG,UAAU,CAAC,WAAW,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;QACpD,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,SAAS,CAC/B,kFAAkF,CACnF,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,mEAAmE,EAAE,GAAG,EAAE;QAC3E,MAAM,KAAK,GAAG,IAAI,KAAK,CAAC,eAAe,CAAC,CAAC;QACzC,MAAM,OAAO,GAAG,UAAU,CAAC,WAAW,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;QACpD,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAC9B,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,0BAA0B,EAAE,GAAG,EAAE;QAClC,MAAM,YAAY,GAAG,UAAU,CAAC,eAAe,EAAE,CAAC;QAClD,MAAM,CAAC,YAAY,CAAC,CAAC,OAAO,CAAE,UAAkB,CAAC,OAAO,CAAC,CAAC;IAC5D,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,wCAAwC,EAAE,GAAG,EAAE;QAChD,MAAM,WAAW,GAAG,UAAU,CAAC,cAAc,EAAE,CAAC;QAChD,MAAM,CAAC,WAAW,CAAC,CAAC,OAAO,CAAC,UAAU,CAAC,UAAU,EAAE,CAAC,CAAC;IACvD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,sBAAsB,EAAE,GAAG,EAAE;QAC9B,MAAM,QAAQ,GAAG,UAAU,CAAC,WAAW,EAAE,CAAC;QAC1C,MAAM,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;IACtC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,uCAAuC,EAAE,KAAK,IAAI,EAAE;QACrD,MAAM,KAAK,GAAG,IAAI,KAAK,CAAC,8BAA8B,CAAC,CAAC;QACxD,UAAU,CAAC,gBAAgB,GAAG,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE;YACzC,MAAM,IAAI,KAAK,CAAC,8BAA8B,CAAC,CAAC;QAClD,CAAC,CAAC,CAAC;QACF,UAAkB,CAAC,wBAAwB,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC,GAAW,EAAE,EAAE,CAAC;YACtE,EAAE,IAAI,EAAE,EAAE,QAAQ,EAAE,GAAG,EAAE,CAAC,sBAAsB,EAAE,EAAE;SACrD,CAAC,CAAC;QACH,MAAM,MAAM,CAAE,UAAkB,CAAC,kBAAkB,CAAC,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CACvE,kBAAkB,CACnB,CAAC;IACJ,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC","sourcesContent":["// Copyright 2020-2024 SubQuery Pte Ltd authors & contributors\n// SPDX-License-Identifier: GPL-3.0\n\nimport { EventEmitter2 } from '@nestjs/event-emitter';\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\njest.setTimeout(60000);\n\nconst prepareStellarApi = async function () {\n const soroban = new SorobanServer(SOROBAN_ENDPOINT);\n const api = new StellarApi(HTTP_ENDPOINT, new EventEmitter2(), soroban);\n await api.init();\n return api;\n};\n\ndescribe('StellarApi', () => {\n let stellarApi: StellarApi;\n\n beforeEach(async () => {\n stellarApi = await prepareStellarApi();\n });\n\n it('should initialize chainId', () => {\n expect(stellarApi.getChainId()).toEqual(\n 'Test SDF Future Network ; October 2022',\n );\n });\n\n it('should get finalized block height', async () => {\n const height = await stellarApi.getFinalizedBlockHeight();\n expect(height).not.toBeNaN();\n expect(height).toBeGreaterThan(0);\n });\n\n it('should get best block height', async () => {\n const height = await stellarApi.getBestBlockHeight();\n expect(height).not.toBeNaN();\n expect(height).toBeGreaterThan(0);\n });\n\n it('should fetch block', async () => {\n const latestHeight = await stellarApi.getFinalizedBlockHeight();\n const block = (await stellarApi.fetchBlocks([latestHeight]))[0];\n expect(block.getHeader().blockHeight).toEqual(latestHeight);\n });\n\n it('should throw on calling connect', async () => {\n await expect(stellarApi.connect()).rejects.toThrow('Not implemented');\n });\n\n it('should throw on calling disconnect', async () => {\n await expect(stellarApi.disconnect()).rejects.toThrow('Not implemented');\n });\n\n it('handleError - pruned node errors', () => {\n const error = new Error('start is before oldest ledger');\n const handled = stellarApi.handleError(error, 1000);\n expect(handled.message).toContain(\n 'The requested ledger number 1000 is not available on the current blockchain node',\n );\n });\n\n it('handleError - non pruned node errors should return the same error', () => {\n const error = new Error('Generic error');\n const handled = stellarApi.handleError(error, 1000);\n expect(handled).toBe(error);\n });\n\n it('should get runtime chain', () => {\n const runtimeChain = stellarApi.getRuntimeChain();\n expect(runtimeChain).toEqual((stellarApi as any).chainId);\n });\n\n it('should return chainId for genesis hash', () => {\n const genesisHash = stellarApi.getGenesisHash();\n expect(genesisHash).toEqual(stellarApi.getChainId());\n });\n\n it('should get spec name', () => {\n const specName = stellarApi.getSpecName();\n expect(specName).toEqual('Stellar');\n });\n\n it('handleError - soroban node been reset', async () => {\n const error = new Error('start is after newest ledger');\n stellarApi.getAndWrapEvents = jest.fn(() => {\n throw new Error('start is after newest ledger');\n });\n (stellarApi as any).fetchOperationsForLedger = jest.fn((seq: number) => [\n { type: { toString: () => 'invoke_host_function' } },\n ]);\n await expect((stellarApi as any).fetchAndWrapLedger(100)).rejects.toThrow(\n /(Gone|Not Found)/,\n );\n });\n});\n"]}
1
+ {"version":3,"file":"api.stellar.spec.js","sourceRoot":"","sources":["../../src/stellar/api.stellar.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 { 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\njest.setTimeout(60000);\n\nconst prepareStellarApi = async function () {\n const soroban = new SorobanServer(SOROBAN_ENDPOINT);\n const api = new StellarApi(HTTP_ENDPOINT, soroban);\n await api.init();\n return api;\n};\n\ndescribe('StellarApi', () => {\n let stellarApi: StellarApi;\n\n beforeEach(async () => {\n stellarApi = await prepareStellarApi();\n });\n\n it('should initialize chainId', () => {\n expect(stellarApi.getChainId()).toEqual(\n 'Test SDF Future Network ; October 2022',\n );\n });\n\n it('should get finalized block height', async () => {\n const height = await stellarApi.getFinalizedBlockHeight();\n expect(height).not.toBeNaN();\n expect(height).toBeGreaterThan(0);\n });\n\n it('should get best block height', async () => {\n const height = await stellarApi.getBestBlockHeight();\n expect(height).not.toBeNaN();\n expect(height).toBeGreaterThan(0);\n });\n\n it('should fetch block', async () => {\n const latestHeight = await stellarApi.getFinalizedBlockHeight();\n const block = (await stellarApi.fetchBlocks([latestHeight]))[0];\n expect(block.getHeader().blockHeight).toEqual(latestHeight);\n });\n\n it('should throw on calling connect', async () => {\n await expect(stellarApi.connect()).rejects.toThrow('Not implemented');\n });\n\n it('should throw on calling disconnect', async () => {\n await expect(stellarApi.disconnect()).rejects.toThrow('Not implemented');\n });\n\n it('handleError - pruned node errors', () => {\n const error = new Error('start is before oldest ledger');\n const handled = stellarApi.handleError(error, 1000);\n expect(handled.message).toContain(\n 'The requested ledger number 1000 is not available on the current blockchain node',\n );\n });\n\n it('handleError - non pruned node errors should return the same error', () => {\n const error = new Error('Generic error');\n const handled = stellarApi.handleError(error, 1000);\n expect(handled).toBe(error);\n });\n\n it('should get runtime chain', () => {\n const runtimeChain = stellarApi.getRuntimeChain();\n expect(runtimeChain).toEqual((stellarApi as any).chainId);\n });\n\n it('should return chainId for genesis hash', () => {\n const genesisHash = stellarApi.getGenesisHash();\n expect(genesisHash).toEqual(stellarApi.getChainId());\n });\n\n it('should get spec name', () => {\n const specName = stellarApi.getSpecName();\n expect(specName).toEqual('Stellar');\n });\n\n it('handleError - soroban node been reset', async () => {\n const error = new Error('start is after newest ledger');\n stellarApi.getAndWrapEvents = jest.fn(() => {\n throw new Error('start is after newest ledger');\n });\n (stellarApi as any).fetchOperationsForLedger = jest.fn((seq: number) => [\n { type: { toString: () => 'invoke_host_function' } },\n ]);\n await expect((stellarApi as any).fetchAndWrapLedger(100)).rejects.toThrow(\n /(Gone|Not Found)/,\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
  Object.defineProperty(exports, "__esModule", { value: true });
5
5
  exports.StellarBlockWrapped = void 0;
@@ -1 +1 @@
1
- {"version":3,"file":"block.stellar.js","sourceRoot":"","sources":["../../src/stellar/block.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 { scValToNative } from '@stellar/stellar-sdk';\nimport { filterBlockTimestamp } from '@subql/node-core';\nimport {\n StellarBlock,\n StellarBlockFilter,\n StellarBlockWrapper,\n StellarEffect,\n StellarEffectFilter,\n SorobanEvent,\n SorobanEventFilter,\n StellarOperation,\n StellarOperationFilter,\n StellarTransaction,\n StellarTransactionFilter,\n} from '@subql/types-stellar';\nimport { SubqlProjectBlockFilter } from '../configure/SubqueryProject';\nimport { stringNormalizedEq } from '../utils/string';\n\nexport class StellarBlockWrapped implements StellarBlockWrapper {\n constructor(\n private _block: StellarBlock,\n private _transactions: StellarTransaction[],\n private _operations: StellarOperation[],\n private _effects: StellarEffect[],\n private _events: SorobanEvent[],\n ) {}\n\n get block(): StellarBlock {\n return this._block;\n }\n\n get transactions(): StellarTransaction[] {\n return this._transactions;\n }\n\n get operations(): StellarOperation[] {\n return this._operations;\n }\n\n get effects(): StellarEffect[] {\n return this._effects;\n }\n\n get events(): SorobanEvent[] {\n return this._events;\n }\n\n static filterBlocksProcessor(\n block: StellarBlock,\n filter: StellarBlockFilter,\n address?: string,\n ): boolean {\n if (!filter) return true;\n if (filter?.modulo && block.sequence % filter.modulo !== 0) {\n return false;\n }\n if (\n !filterBlockTimestamp(\n new Date(block.closed_at).getTime(),\n filter as SubqlProjectBlockFilter,\n )\n ) {\n return false;\n }\n return true;\n }\n\n static filterTransactionProcessor(\n tx: StellarTransaction,\n filter: StellarTransactionFilter,\n address?: string,\n ): boolean {\n if (!filter) return true;\n if (filter.account && filter.account !== (tx as any).source_account) {\n return false;\n }\n\n return true;\n }\n\n static filterOperationProcessor(\n op: StellarOperation,\n filter: StellarOperationFilter,\n address?: string,\n ): boolean {\n if (!filter) return true;\n if (filter.sourceAccount && filter.sourceAccount !== op.source_account) {\n return false;\n }\n if (filter.type && filter.type !== op.type) {\n return false;\n }\n\n return true;\n }\n\n static filterEffectProcessor(\n effect: StellarEffect,\n filter: StellarEffectFilter,\n address?: string,\n ): boolean {\n if (!filter) return true;\n if (filter.account && filter.account !== effect.account) {\n return false;\n }\n if (filter.type && filter.type !== effect.type) {\n return false;\n }\n\n return true;\n }\n\n static filterEventProcessor(\n event: SorobanEvent,\n filter: SorobanEventFilter,\n address?: string,\n ): boolean {\n if (address && !stringNormalizedEq(address, event.contractId?.toString())) {\n return false;\n }\n\n if (!filter) return true;\n\n if (\n filter.contractId &&\n filter.contractId !== event.contractId?.toString()\n ) {\n return false;\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\n if (!event.topic[i]) {\n return false;\n }\n if (topic !== scValToNative(event.topic[i])) {\n return false;\n }\n }\n }\n return true;\n }\n}\n"]}
1
+ {"version":3,"file":"block.stellar.js","sourceRoot":"","sources":["../../src/stellar/block.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 { scValToNative } from '@stellar/stellar-sdk';\nimport { filterBlockTimestamp } from '@subql/node-core';\nimport {\n StellarBlock,\n StellarBlockFilter,\n StellarBlockWrapper,\n StellarEffect,\n StellarEffectFilter,\n SorobanEvent,\n SorobanEventFilter,\n StellarOperation,\n StellarOperationFilter,\n StellarTransaction,\n StellarTransactionFilter,\n} from '@subql/types-stellar';\nimport { SubqlProjectBlockFilter } from '../configure/SubqueryProject';\nimport { stringNormalizedEq } from '../utils/string';\n\nexport class StellarBlockWrapped implements StellarBlockWrapper {\n constructor(\n private _block: StellarBlock,\n private _transactions: StellarTransaction[],\n private _operations: StellarOperation[],\n private _effects: StellarEffect[],\n private _events: SorobanEvent[],\n ) {}\n\n get block(): StellarBlock {\n return this._block;\n }\n\n get transactions(): StellarTransaction[] {\n return this._transactions;\n }\n\n get operations(): StellarOperation[] {\n return this._operations;\n }\n\n get effects(): StellarEffect[] {\n return this._effects;\n }\n\n get events(): SorobanEvent[] {\n return this._events;\n }\n\n static filterBlocksProcessor(\n block: StellarBlock,\n filter: StellarBlockFilter,\n address?: string,\n ): boolean {\n if (!filter) return true;\n if (filter?.modulo && block.sequence % filter.modulo !== 0) {\n return false;\n }\n if (\n !filterBlockTimestamp(\n new Date(block.closed_at).getTime(),\n filter as SubqlProjectBlockFilter,\n )\n ) {\n return false;\n }\n return true;\n }\n\n static filterTransactionProcessor(\n tx: StellarTransaction,\n filter: StellarTransactionFilter,\n address?: string,\n ): boolean {\n if (!filter) return true;\n if (filter.account && filter.account !== (tx as any).source_account) {\n return false;\n }\n\n return true;\n }\n\n static filterOperationProcessor(\n op: StellarOperation,\n filter: StellarOperationFilter,\n address?: string,\n ): boolean {\n if (!filter) return true;\n if (filter.sourceAccount && filter.sourceAccount !== op.source_account) {\n return false;\n }\n if (filter.type && filter.type !== op.type) {\n return false;\n }\n\n return true;\n }\n\n static filterEffectProcessor(\n effect: StellarEffect,\n filter: StellarEffectFilter,\n address?: string,\n ): boolean {\n if (!filter) return true;\n if (filter.account && filter.account !== effect.account) {\n return false;\n }\n if (filter.type && filter.type !== effect.type) {\n return false;\n }\n\n return true;\n }\n\n static filterEventProcessor(\n event: SorobanEvent,\n filter: SorobanEventFilter,\n address?: string,\n ): boolean {\n if (address && !stringNormalizedEq(address, event.contractId?.toString())) {\n return false;\n }\n\n if (!filter) return true;\n\n if (\n filter.contractId &&\n filter.contractId !== event.contractId?.toString()\n ) {\n return false;\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\n if (!event.topic[i]) {\n return false;\n }\n if (topic !== scValToNative(event.topic[i])) {\n return false;\n }\n }\n }\n return true;\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 stellar_sdk_1 = require("@stellar/stellar-sdk");
@@ -1 +1 @@
1
- {"version":3,"file":"block.stellar.spec.js","sourceRoot":"","sources":["../../src/stellar/block.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 { nativeToScVal, Contract, xdr, Horizon } from '@stellar/stellar-sdk';\nimport {\n StellarBlock,\n StellarBlockFilter,\n StellarEffect,\n StellarEffectFilter,\n SorobanEvent,\n SorobanEventFilter,\n StellarOperation,\n StellarOperationFilter,\n StellarTransaction,\n StellarTransactionFilter,\n} from '@subql/types-stellar';\nimport { StellarBlockWrapped } from './block.stellar';\n\nconst testAddress = 'CA3D5KRYM6CB7OWQ6TWYRR3Z4T7GNZLKERYNZGGA5SOAOPIFY6YQGAXE';\ndescribe('StellarBlockWrapped', () => {\n describe('filterBlocksProcessor', () => {\n it('should filter by modulo', () => {\n const block: StellarBlock = { sequence: 5 } as unknown as StellarBlock;\n const filter: StellarBlockFilter = { modulo: 2 };\n\n const result = StellarBlockWrapped.filterBlocksProcessor(block, filter);\n\n expect(result).toBe(false);\n });\n });\n\n describe('filterTransactionProcessor', () => {\n it('should filter by account', () => {\n const transaction: StellarTransaction = {\n source_account: 'account1',\n } as unknown as StellarTransaction;\n const filter: StellarTransactionFilter = { account: 'account2' };\n\n const result = StellarBlockWrapped.filterTransactionProcessor(\n transaction,\n filter,\n );\n\n expect(result).toBe(false);\n });\n\n it('should pass when account filter condition is fulfilled', () => {\n const transaction: StellarTransaction = {\n source_account: 'account1',\n } as unknown as StellarTransaction;\n const filter: StellarTransactionFilter = { account: 'account1' };\n\n const result = StellarBlockWrapped.filterTransactionProcessor(\n transaction,\n filter,\n );\n\n expect(result).toBe(true);\n });\n\n it('should pass when there is no account filter', () => {\n const transaction: StellarTransaction = {\n source_account: 'account1',\n } as unknown as StellarTransaction;\n const filter: StellarTransactionFilter = {};\n\n const result = StellarBlockWrapped.filterTransactionProcessor(\n transaction,\n filter,\n );\n\n expect(result).toBe(true);\n });\n });\n\n describe('filterOperationProcessor', () => {\n it('should filter by source_account and type', () => {\n const operation: StellarOperation = {\n source_account: 'account1',\n type: 'type1',\n } as unknown as StellarOperation;\n const filter: StellarOperationFilter = {\n sourceAccount: 'account2',\n type: 'create_account' as Horizon.HorizonApi.OperationResponseType,\n };\n\n const result = StellarBlockWrapped.filterOperationProcessor(\n operation,\n filter,\n );\n\n expect(result).toBe(false);\n });\n\n it('should pass when source_account and type filter conditions are fulfilled', () => {\n const operation: StellarOperation = {\n source_account: 'account1',\n type: Horizon.HorizonApi.OperationResponseType.createAccount,\n } as unknown as StellarOperation;\n const filter: StellarOperationFilter = {\n sourceAccount: 'account1',\n type: Horizon.HorizonApi.OperationResponseType.createAccount,\n };\n\n const result = StellarBlockWrapped.filterOperationProcessor(\n operation,\n filter,\n );\n\n expect(result).toBe(true);\n });\n\n it('should pass when there are no filter conditions', () => {\n const operation: StellarOperation = {\n source_account: 'account1',\n type: 'type1',\n } as unknown as StellarOperation;\n const filter: StellarOperationFilter = {};\n\n const result = StellarBlockWrapped.filterOperationProcessor(\n operation,\n filter,\n );\n\n expect(result).toBe(true);\n });\n });\n\n describe('filterEffectProcessor', () => {\n it('should filter by account and type', () => {\n const effect: StellarEffect = {\n account: 'account1',\n type: 'type1',\n } as unknown as StellarEffect;\n const filter: StellarEffectFilter = {\n account: 'account2',\n type: 'type2',\n };\n\n const result = StellarBlockWrapped.filterEffectProcessor(effect, filter);\n\n expect(result).toBe(false);\n });\n\n it('should pass when account and type filter conditions are fulfilled', () => {\n const effect: StellarEffect = {\n account: 'account1',\n type: 'type1',\n } as unknown as StellarEffect;\n const filter: StellarEffectFilter = {\n account: 'account1',\n type: 'type1',\n };\n\n const result = StellarBlockWrapped.filterEffectProcessor(effect, filter);\n\n expect(result).toBe(true);\n });\n\n it('should pass when there are no filter conditions', () => {\n const effect: StellarEffect = {\n account: 'account1',\n type: 'type1',\n } as unknown as StellarEffect;\n const filter: StellarEffectFilter = {};\n\n const result = StellarBlockWrapped.filterEffectProcessor(effect, filter);\n\n expect(result).toBe(true);\n });\n });\n\n describe('StellarBlockWrapped', function () {\n const topic1 = nativeToScVal('topic1');\n const topic2 = nativeToScVal('topic2');\n\n const mockEvent: SorobanEvent = {\n txHash: '',\n type: 'contract',\n ledger: null,\n transaction: null,\n operation: null,\n ledgerClosedAt: '',\n contractId: new Contract(testAddress),\n id: 'mockId',\n pagingToken: '',\n inSuccessfulContractCall: true,\n topic: [topic1, topic2],\n value: {} as xdr.ScVal,\n };\n\n const mockEventFilterValid: SorobanEventFilter = {\n topics: ['topic1', 'topic2'],\n };\n\n const mockEventFilterInvalid: SorobanEventFilter = {\n topics: ['topics3'],\n };\n\n it('should pass filter - valid address and topics', function () {\n expect(\n StellarBlockWrapped.filterEventProcessor(\n mockEvent,\n mockEventFilterValid,\n testAddress,\n ),\n ).toEqual(true);\n });\n\n it('should pass filter - no address and valid topics', function () {\n expect(\n StellarBlockWrapped.filterEventProcessor(\n mockEvent,\n mockEventFilterValid,\n ),\n ).toEqual(true);\n });\n\n it('should fail filter - valid address and invalid topics', function () {\n expect(\n StellarBlockWrapped.filterEventProcessor(\n mockEvent,\n mockEventFilterInvalid,\n testAddress,\n ),\n ).toEqual(false);\n });\n\n it('should fail filter - event not found', function () {\n mockEventFilterInvalid.topics = ['topic1', 'topic2', 'topic3'];\n expect(\n StellarBlockWrapped.filterEventProcessor(\n mockEvent,\n mockEventFilterInvalid,\n ),\n ).toEqual(false);\n });\n\n it('should pass filter - skip null topics', function () {\n mockEventFilterValid.topics = ['', 'topic2'];\n expect(\n StellarBlockWrapped.filterEventProcessor(\n mockEvent,\n mockEventFilterValid,\n ),\n ).toEqual(true);\n });\n\n it('should pass filer - valid contractId', function () {\n mockEventFilterValid.contractId = testAddress;\n expect(\n StellarBlockWrapped.filterEventProcessor(\n mockEvent,\n mockEventFilterValid,\n ),\n ).toEqual(true);\n });\n\n it('should fail filter - invalid contractId', function () {\n expect(\n StellarBlockWrapped.filterEventProcessor(mockEvent, {\n contractId: 'invalidaddress',\n }),\n ).toEqual(false);\n });\n\n it('should fail filter - invalid address', function () {\n expect(\n StellarBlockWrapped.filterEventProcessor(\n mockEvent,\n mockEventFilterValid,\n 'invalidaddress',\n ),\n ).toEqual(false);\n });\n });\n});\n"]}
1
+ {"version":3,"file":"block.stellar.spec.js","sourceRoot":"","sources":["../../src/stellar/block.stellar.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 { nativeToScVal, Contract, xdr, Horizon } from '@stellar/stellar-sdk';\nimport {\n StellarBlock,\n StellarBlockFilter,\n StellarEffect,\n StellarEffectFilter,\n SorobanEvent,\n SorobanEventFilter,\n StellarOperation,\n StellarOperationFilter,\n StellarTransaction,\n StellarTransactionFilter,\n} from '@subql/types-stellar';\nimport { StellarBlockWrapped } from './block.stellar';\n\nconst testAddress = 'CA3D5KRYM6CB7OWQ6TWYRR3Z4T7GNZLKERYNZGGA5SOAOPIFY6YQGAXE';\ndescribe('StellarBlockWrapped', () => {\n describe('filterBlocksProcessor', () => {\n it('should filter by modulo', () => {\n const block: StellarBlock = { sequence: 5 } as unknown as StellarBlock;\n const filter: StellarBlockFilter = { modulo: 2 };\n\n const result = StellarBlockWrapped.filterBlocksProcessor(block, filter);\n\n expect(result).toBe(false);\n });\n });\n\n describe('filterTransactionProcessor', () => {\n it('should filter by account', () => {\n const transaction: StellarTransaction = {\n source_account: 'account1',\n } as unknown as StellarTransaction;\n const filter: StellarTransactionFilter = { account: 'account2' };\n\n const result = StellarBlockWrapped.filterTransactionProcessor(\n transaction,\n filter,\n );\n\n expect(result).toBe(false);\n });\n\n it('should pass when account filter condition is fulfilled', () => {\n const transaction: StellarTransaction = {\n source_account: 'account1',\n } as unknown as StellarTransaction;\n const filter: StellarTransactionFilter = { account: 'account1' };\n\n const result = StellarBlockWrapped.filterTransactionProcessor(\n transaction,\n filter,\n );\n\n expect(result).toBe(true);\n });\n\n it('should pass when there is no account filter', () => {\n const transaction: StellarTransaction = {\n source_account: 'account1',\n } as unknown as StellarTransaction;\n const filter: StellarTransactionFilter = {};\n\n const result = StellarBlockWrapped.filterTransactionProcessor(\n transaction,\n filter,\n );\n\n expect(result).toBe(true);\n });\n });\n\n describe('filterOperationProcessor', () => {\n it('should filter by source_account and type', () => {\n const operation: StellarOperation = {\n source_account: 'account1',\n type: 'type1',\n } as unknown as StellarOperation;\n const filter: StellarOperationFilter = {\n sourceAccount: 'account2',\n type: 'create_account' as Horizon.HorizonApi.OperationResponseType,\n };\n\n const result = StellarBlockWrapped.filterOperationProcessor(\n operation,\n filter,\n );\n\n expect(result).toBe(false);\n });\n\n it('should pass when source_account and type filter conditions are fulfilled', () => {\n const operation: StellarOperation = {\n source_account: 'account1',\n type: Horizon.HorizonApi.OperationResponseType.createAccount,\n } as unknown as StellarOperation;\n const filter: StellarOperationFilter = {\n sourceAccount: 'account1',\n type: Horizon.HorizonApi.OperationResponseType.createAccount,\n };\n\n const result = StellarBlockWrapped.filterOperationProcessor(\n operation,\n filter,\n );\n\n expect(result).toBe(true);\n });\n\n it('should pass when there are no filter conditions', () => {\n const operation: StellarOperation = {\n source_account: 'account1',\n type: 'type1',\n } as unknown as StellarOperation;\n const filter: StellarOperationFilter = {};\n\n const result = StellarBlockWrapped.filterOperationProcessor(\n operation,\n filter,\n );\n\n expect(result).toBe(true);\n });\n });\n\n describe('filterEffectProcessor', () => {\n it('should filter by account and type', () => {\n const effect: StellarEffect = {\n account: 'account1',\n type: 'type1',\n } as unknown as StellarEffect;\n const filter: StellarEffectFilter = {\n account: 'account2',\n type: 'type2',\n };\n\n const result = StellarBlockWrapped.filterEffectProcessor(effect, filter);\n\n expect(result).toBe(false);\n });\n\n it('should pass when account and type filter conditions are fulfilled', () => {\n const effect: StellarEffect = {\n account: 'account1',\n type: 'type1',\n } as unknown as StellarEffect;\n const filter: StellarEffectFilter = {\n account: 'account1',\n type: 'type1',\n };\n\n const result = StellarBlockWrapped.filterEffectProcessor(effect, filter);\n\n expect(result).toBe(true);\n });\n\n it('should pass when there are no filter conditions', () => {\n const effect: StellarEffect = {\n account: 'account1',\n type: 'type1',\n } as unknown as StellarEffect;\n const filter: StellarEffectFilter = {};\n\n const result = StellarBlockWrapped.filterEffectProcessor(effect, filter);\n\n expect(result).toBe(true);\n });\n });\n\n describe('StellarBlockWrapped', function () {\n const topic1 = nativeToScVal('topic1');\n const topic2 = nativeToScVal('topic2');\n\n const mockEvent: SorobanEvent = {\n txHash: '',\n type: 'contract',\n ledger: null,\n transaction: null,\n operation: null,\n ledgerClosedAt: '',\n contractId: new Contract(testAddress),\n id: 'mockId',\n pagingToken: '',\n inSuccessfulContractCall: true,\n topic: [topic1, topic2],\n value: {} as xdr.ScVal,\n };\n\n const mockEventFilterValid: SorobanEventFilter = {\n topics: ['topic1', 'topic2'],\n };\n\n const mockEventFilterInvalid: SorobanEventFilter = {\n topics: ['topics3'],\n };\n\n it('should pass filter - valid address and topics', function () {\n expect(\n StellarBlockWrapped.filterEventProcessor(\n mockEvent,\n mockEventFilterValid,\n testAddress,\n ),\n ).toEqual(true);\n });\n\n it('should pass filter - no address and valid topics', function () {\n expect(\n StellarBlockWrapped.filterEventProcessor(\n mockEvent,\n mockEventFilterValid,\n ),\n ).toEqual(true);\n });\n\n it('should fail filter - valid address and invalid topics', function () {\n expect(\n StellarBlockWrapped.filterEventProcessor(\n mockEvent,\n mockEventFilterInvalid,\n testAddress,\n ),\n ).toEqual(false);\n });\n\n it('should fail filter - event not found', function () {\n mockEventFilterInvalid.topics = ['topic1', 'topic2', 'topic3'];\n expect(\n StellarBlockWrapped.filterEventProcessor(\n mockEvent,\n mockEventFilterInvalid,\n ),\n ).toEqual(false);\n });\n\n it('should pass filter - skip null topics', function () {\n mockEventFilterValid.topics = ['', 'topic2'];\n expect(\n StellarBlockWrapped.filterEventProcessor(\n mockEvent,\n mockEventFilterValid,\n ),\n ).toEqual(true);\n });\n\n it('should pass filer - valid contractId', function () {\n mockEventFilterValid.contractId = testAddress;\n expect(\n StellarBlockWrapped.filterEventProcessor(\n mockEvent,\n mockEventFilterValid,\n ),\n ).toEqual(true);\n });\n\n it('should fail filter - invalid contractId', function () {\n expect(\n StellarBlockWrapped.filterEventProcessor(mockEvent, {\n contractId: 'invalidaddress',\n }),\n ).toEqual(false);\n });\n\n it('should fail filter - invalid address', function () {\n expect(\n StellarBlockWrapped.filterEventProcessor(\n mockEvent,\n mockEventFilterValid,\n 'invalidaddress',\n ),\n ).toEqual(false);\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 __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
5
5
  if (k2 === undefined) k2 = k;
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/stellar/index.ts"],"names":[],"mappings":";AAAA,8DAA8D;AAC9D,mCAAmC;;;;;;;;;;;;;;;;AAEnC,gDAA8B;AAC9B,wDAAsC","sourcesContent":["// Copyright 2020-2024 SubQuery Pte Ltd authors & contributors\n// SPDX-License-Identifier: GPL-3.0\n\nexport * from './api.stellar';\nexport * from './api.service.stellar';\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/stellar/index.ts"],"names":[],"mappings":";AAAA,8DAA8D;AAC9D,mCAAmC;;;;;;;;;;;;;;;;AAEnC,gDAA8B;AAC9B,wDAAsC","sourcesContent":["// Copyright 2020-2025 SubQuery Pte Ltd authors & contributors\n// SPDX-License-Identifier: GPL-3.0\n\nexport * from './api.stellar';\nexport * from './api.service.stellar';\n"]}
@@ -1,20 +1,19 @@
1
- import { Memo, MemoType, Operation } from '@stellar/stellar-base';
2
- import { Account, Address, Contract, FeeBumpTransaction, SorobanRpc, Transaction, xdr, rpc } from '@stellar/stellar-sdk';
1
+ import { Account, Address, Contract, FeeBumpTransaction, Transaction, xdr, rpc } from '@stellar/stellar-sdk';
3
2
  import { SorobanServer } from './soroban.server';
4
3
  export default class SafeStellarProvider extends SorobanServer {
5
4
  private blockHeight;
6
5
  private baseApi;
7
- constructor(baseApi: SorobanRpc.Server, blockHeight: number);
6
+ constructor(baseApi: rpc.Server, blockHeight: number);
8
7
  getAccount(address: string): Promise<Account>;
9
- getHealth(): Promise<SorobanRpc.Api.GetHealthResponse>;
10
- getContractData(contract: string | Address | Contract, key: xdr.ScVal, durability?: rpc.Durability): Promise<SorobanRpc.Api.LedgerEntryResult>;
11
- getLedgerEntries(keys: xdr.LedgerKey[]): Promise<SorobanRpc.Api.GetLedgerEntriesResponse>;
12
- getTransaction(hash: string): Promise<SorobanRpc.Api.GetTransactionResponse>;
13
- getEvents(request: SorobanRpc.Server.GetEventsRequest): Promise<SorobanRpc.Api.GetEventsResponse>;
14
- getNetwork(): Promise<SorobanRpc.Api.GetNetworkResponse>;
15
- getLatestLedger(): Promise<SorobanRpc.Api.GetLatestLedgerResponse>;
16
- simulateTransaction(transaction: Transaction | FeeBumpTransaction): Promise<SorobanRpc.Api.SimulateTransactionResponse>;
17
- prepareTransaction(transaction: Transaction | FeeBumpTransaction): Promise<Transaction<Memo<MemoType>, Operation[]>>;
18
- sendTransaction(transaction: Transaction | FeeBumpTransaction): Promise<SorobanRpc.Api.SendTransactionResponse>;
8
+ getHealth(): Promise<rpc.Api.GetHealthResponse>;
9
+ getContractData(contract: string | Address | Contract, key: xdr.ScVal, durability?: rpc.Durability): Promise<rpc.Api.LedgerEntryResult>;
10
+ getLedgerEntries(keys: xdr.LedgerKey[]): Promise<rpc.Api.GetLedgerEntriesResponse>;
11
+ getTransaction(hash: string): Promise<rpc.Api.GetTransactionResponse>;
12
+ getEvents(request: rpc.Server.GetEventsRequest): Promise<rpc.Api.GetEventsResponse>;
13
+ getNetwork(): Promise<rpc.Api.GetNetworkResponse>;
14
+ getLatestLedger(): Promise<rpc.Api.GetLatestLedgerResponse>;
15
+ simulateTransaction(transaction: Transaction | FeeBumpTransaction): Promise<rpc.Api.SimulateTransactionResponse>;
16
+ prepareTransaction(transaction: Transaction | FeeBumpTransaction): Promise<Transaction>;
17
+ sendTransaction(transaction: Transaction | FeeBumpTransaction): Promise<rpc.Api.SendTransactionResponse>;
19
18
  requestAirdrop(address: string | Pick<Account, 'accountId'>, friendbotUrl?: string): Promise<Account>;
20
19
  }
@@ -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 stellar_sdk_1 = require("@stellar/stellar-sdk");
@@ -1 +1 @@
1
- {"version":3,"file":"safe-api.js","sourceRoot":"","sources":["../../src/stellar/safe-api.ts"],"names":[],"mappings":";AAAA,8DAA8D;AAC9D,mCAAmC;;AAGnC,sDAS8B;AAC9B,gDAA6C;AAE7C,0DAA0D;AAC1D,qDAAiD;AAEjD,MAAM,MAAM,GAAG,IAAA,qBAAS,EAAC,kBAAkB,CAAC,CAAC;AAE7C,MAAqB,mBAAoB,SAAQ,8BAAa;IACpD,WAAW,CAAS;IACpB,OAAO,CAAoB;IAEnC,YAAY,OAA0B,EAAE,WAAmB;QACzD,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC,QAAQ,EAAE,CAAC,CAAC;QACpC,IAAI,CAAC,WAAW,GAAG,WAAW,CAAC;QAC/B,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;IACzB,CAAC;IAED,2DAA2D;IAC3D,KAAK,CAAC,UAAU,CAAC,OAAe;QAC9B,MAAM,IAAI,KAAK,CAAC,uCAAuC,CAAC,CAAC;IAC3D,CAAC;IAED,2DAA2D;IAC3D,KAAK,CAAC,SAAS;QACb,MAAM,IAAI,KAAK,CAAC,sCAAsC,CAAC,CAAC;IAC1D,CAAC;IAED,2DAA2D;IAC3D,KAAK,CAAC,eAAe,CACnB,QAAqC,EACrC,GAAc,EACd,aAA6B,iBAAG,CAAC,UAAU,CAAC,UAAU;QAEtD,MAAM,IAAI,KAAK,CAAC,4CAA4C,CAAC,CAAC;IAChE,CAAC;IAED,aAAa;IACb,4DAA4D;IAC5D,KAAK,CAAC,gBAAgB,CACpB,IAAqB;QAErB,MAAM,IAAI,KAAK,CAAC,6CAA6C,CAAC,CAAC;IACjE,CAAC;IAED,2DAA2D;IAC3D,KAAK,CAAC,cAAc,CAClB,IAAY;QAEZ,MAAM,IAAI,KAAK,CAAC,2CAA2C,CAAC,CAAC;IAC/D,CAAC;IAED,KAAK,CAAC,SAAS,CACb,OAA2C;QAE3C,OAAO,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC;YAC5B,WAAW,EAAE,IAAI,CAAC,WAAW;YAC7B,OAAO,EAAE,EAAE;SACZ,CAAC,CAAC;IACL,CAAC;IAED,2DAA2D;IAC3D,KAAK,CAAC,UAAU;QACd,MAAM,IAAI,KAAK,CAAC,uCAAuC,CAAC,CAAC;IAC3D,CAAC;IAED,2DAA2D;IAC3D,KAAK,CAAC,eAAe;QACnB,MAAM,IAAI,KAAK,CAAC,4CAA4C,CAAC,CAAC;IAChE,CAAC;IAED,2DAA2D;IAC3D,KAAK,CAAC,mBAAmB,CACvB,WAA6C;QAE7C,MAAM,IAAI,KAAK,CAAC,gDAAgD,CAAC,CAAC;IACpE,CAAC;IAED,2DAA2D;IAC3D,KAAK,CAAC,kBAAkB,CACtB,WAA6C;QAE7C,MAAM,IAAI,KAAK,CAAC,+CAA+C,CAAC,CAAC;IACnE,CAAC;IAED,2DAA2D;IAC3D,KAAK,CAAC,eAAe,CACnB,WAA6C;QAE7C,MAAM,IAAI,KAAK,CAAC,4CAA4C,CAAC,CAAC;IAChE,CAAC;IAED,2DAA2D;IAC3D,KAAK,CAAC,cAAc,CAClB,OAA4C,EAC5C,YAAqB;QAErB,MAAM,IAAI,KAAK,CAAC,2CAA2C,CAAC,CAAC;IAC/D,CAAC;CACF;AA3FD,sCA2FC","sourcesContent":["// Copyright 2020-2024 SubQuery Pte Ltd authors & contributors\n// SPDX-License-Identifier: GPL-3.0\n\nimport { Memo, MemoType, Operation } from '@stellar/stellar-base';\nimport {\n Account,\n Address,\n Contract,\n FeeBumpTransaction,\n SorobanRpc,\n Transaction,\n xdr,\n rpc,\n} from '@stellar/stellar-sdk';\nimport { getLogger } from '@subql/node-core';\n\n// import { Durability } from 'soroban-client/lib/server';\nimport { SorobanServer } from './soroban.server';\n\nconst logger = getLogger('safe.api.stellar');\n\nexport default class SafeStellarProvider extends SorobanServer {\n private blockHeight: number;\n private baseApi: SorobanRpc.Server;\n\n constructor(baseApi: SorobanRpc.Server, blockHeight: number) {\n super(baseApi.serverURL.toString());\n this.blockHeight = blockHeight;\n this.baseApi = baseApi;\n }\n\n //eslint-disable-next-line @typescript-eslint/require-await\n async getAccount(address: string): Promise<Account> {\n throw new Error('Method getAccount is not implemented.');\n }\n\n //eslint-disable-next-line @typescript-eslint/require-await\n async getHealth(): Promise<SorobanRpc.Api.GetHealthResponse> {\n throw new Error('Method getHealth is not implemented.');\n }\n\n //eslint-disable-next-line @typescript-eslint/require-await\n async getContractData(\n contract: string | Address | Contract,\n key: xdr.ScVal,\n durability: rpc.Durability = rpc.Durability.Persistent,\n ): Promise<SorobanRpc.Api.LedgerEntryResult> {\n throw new Error('Method getContractData is not implemented.');\n }\n\n // @ts-ignore\n // eslint-disable-next-line @typescript-eslint/require-await\n async getLedgerEntries(\n keys: xdr.LedgerKey[],\n ): Promise<SorobanRpc.Api.GetLedgerEntriesResponse> {\n throw new Error('Method getLedgerEntries is not implemented.');\n }\n\n //eslint-disable-next-line @typescript-eslint/require-await\n async getTransaction(\n hash: string,\n ): Promise<SorobanRpc.Api.GetTransactionResponse> {\n throw new Error('Method getTransaction is not implemented.');\n }\n\n async getEvents(\n request: SorobanRpc.Server.GetEventsRequest,\n ): Promise<SorobanRpc.Api.GetEventsResponse> {\n return this.baseApi.getEvents({\n startLedger: this.blockHeight,\n filters: [],\n });\n }\n\n //eslint-disable-next-line @typescript-eslint/require-await\n async getNetwork(): Promise<SorobanRpc.Api.GetNetworkResponse> {\n throw new Error('Method getNetwork is not implemented.');\n }\n\n //eslint-disable-next-line @typescript-eslint/require-await\n async getLatestLedger(): Promise<SorobanRpc.Api.GetLatestLedgerResponse> {\n throw new Error('Method getLatestLedger is not implemented.');\n }\n\n //eslint-disable-next-line @typescript-eslint/require-await\n async simulateTransaction(\n transaction: Transaction | FeeBumpTransaction,\n ): Promise<SorobanRpc.Api.SimulateTransactionResponse> {\n throw new Error('Method simulateTransaction is not implemented.');\n }\n\n //eslint-disable-next-line @typescript-eslint/require-await\n async prepareTransaction(\n transaction: Transaction | FeeBumpTransaction,\n ): Promise<Transaction<Memo<MemoType>, Operation[]>> {\n throw new Error('Method prepareTransaction is not implemented.');\n }\n\n //eslint-disable-next-line @typescript-eslint/require-await\n async sendTransaction(\n transaction: Transaction | FeeBumpTransaction,\n ): Promise<SorobanRpc.Api.SendTransactionResponse> {\n throw new Error('Method sendTransaction is not implemented.');\n }\n\n //eslint-disable-next-line @typescript-eslint/require-await\n async requestAirdrop(\n address: string | Pick<Account, 'accountId'>,\n friendbotUrl?: string,\n ): Promise<Account> {\n throw new Error('Method requestAirdrop is not implemented.');\n }\n}\n"]}
1
+ {"version":3,"file":"safe-api.js","sourceRoot":"","sources":["../../src/stellar/safe-api.ts"],"names":[],"mappings":";AAAA,8DAA8D;AAC9D,mCAAmC;;AAEnC,sDAQ8B;AAC9B,gDAA6C;AAE7C,0DAA0D;AAC1D,qDAAiD;AAEjD,MAAM,MAAM,GAAG,IAAA,qBAAS,EAAC,kBAAkB,CAAC,CAAC;AAE7C,MAAqB,mBAAoB,SAAQ,8BAAa;IACpD,WAAW,CAAS;IACpB,OAAO,CAAa;IAE5B,YAAY,OAAmB,EAAE,WAAmB;QAClD,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC,QAAQ,EAAE,CAAC,CAAC;QACpC,IAAI,CAAC,WAAW,GAAG,WAAW,CAAC;QAC/B,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;IACzB,CAAC;IAED,2DAA2D;IAC3D,KAAK,CAAC,UAAU,CAAC,OAAe;QAC9B,MAAM,IAAI,KAAK,CAAC,uCAAuC,CAAC,CAAC;IAC3D,CAAC;IAED,2DAA2D;IAC3D,KAAK,CAAC,SAAS;QACb,MAAM,IAAI,KAAK,CAAC,sCAAsC,CAAC,CAAC;IAC1D,CAAC;IAED,2DAA2D;IAC3D,KAAK,CAAC,eAAe,CACnB,QAAqC,EACrC,GAAc,EACd,aAA6B,iBAAG,CAAC,UAAU,CAAC,UAAU;QAEtD,MAAM,IAAI,KAAK,CAAC,4CAA4C,CAAC,CAAC;IAChE,CAAC;IAED,aAAa;IACb,4DAA4D;IAC5D,KAAK,CAAC,gBAAgB,CACpB,IAAqB;QAErB,MAAM,IAAI,KAAK,CAAC,6CAA6C,CAAC,CAAC;IACjE,CAAC;IAED,2DAA2D;IAC3D,KAAK,CAAC,cAAc,CAAC,IAAY;QAC/B,MAAM,IAAI,KAAK,CAAC,2CAA2C,CAAC,CAAC;IAC/D,CAAC;IAED,KAAK,CAAC,SAAS,CACb,OAAoC;QAEpC,OAAO,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC;YAC5B,WAAW,EAAE,IAAI,CAAC,WAAW;YAC7B,OAAO,EAAE,EAAE;SACZ,CAAC,CAAC;IACL,CAAC;IAED,2DAA2D;IAC3D,KAAK,CAAC,UAAU;QACd,MAAM,IAAI,KAAK,CAAC,uCAAuC,CAAC,CAAC;IAC3D,CAAC;IAED,2DAA2D;IAC3D,KAAK,CAAC,eAAe;QACnB,MAAM,IAAI,KAAK,CAAC,4CAA4C,CAAC,CAAC;IAChE,CAAC;IAED,2DAA2D;IAC3D,KAAK,CAAC,mBAAmB,CACvB,WAA6C;QAE7C,MAAM,IAAI,KAAK,CAAC,gDAAgD,CAAC,CAAC;IACpE,CAAC;IAED,2DAA2D;IAC3D,KAAK,CAAC,kBAAkB,CACtB,WAA6C;QAE7C,MAAM,IAAI,KAAK,CAAC,+CAA+C,CAAC,CAAC;IACnE,CAAC;IAED,2DAA2D;IAC3D,KAAK,CAAC,eAAe,CACnB,WAA6C;QAE7C,MAAM,IAAI,KAAK,CAAC,4CAA4C,CAAC,CAAC;IAChE,CAAC;IAED,2DAA2D;IAC3D,KAAK,CAAC,cAAc,CAClB,OAA4C,EAC5C,YAAqB;QAErB,MAAM,IAAI,KAAK,CAAC,2CAA2C,CAAC,CAAC;IAC/D,CAAC;CACF;AAzFD,sCAyFC","sourcesContent":["// Copyright 2020-2025 SubQuery Pte Ltd authors & contributors\n// SPDX-License-Identifier: GPL-3.0\n\nimport {\n Account,\n Address,\n Contract,\n FeeBumpTransaction,\n Transaction,\n xdr,\n rpc,\n} from '@stellar/stellar-sdk';\nimport { getLogger } from '@subql/node-core';\n\n// import { Durability } from 'soroban-client/lib/server';\nimport { SorobanServer } from './soroban.server';\n\nconst logger = getLogger('safe.api.stellar');\n\nexport default class SafeStellarProvider extends SorobanServer {\n private blockHeight: number;\n private baseApi: rpc.Server;\n\n constructor(baseApi: rpc.Server, blockHeight: number) {\n super(baseApi.serverURL.toString());\n this.blockHeight = blockHeight;\n this.baseApi = baseApi;\n }\n\n //eslint-disable-next-line @typescript-eslint/require-await\n async getAccount(address: string): Promise<Account> {\n throw new Error('Method getAccount is not implemented.');\n }\n\n //eslint-disable-next-line @typescript-eslint/require-await\n async getHealth(): Promise<rpc.Api.GetHealthResponse> {\n throw new Error('Method getHealth is not implemented.');\n }\n\n //eslint-disable-next-line @typescript-eslint/require-await\n async getContractData(\n contract: string | Address | Contract,\n key: xdr.ScVal,\n durability: rpc.Durability = rpc.Durability.Persistent,\n ): Promise<rpc.Api.LedgerEntryResult> {\n throw new Error('Method getContractData is not implemented.');\n }\n\n // @ts-ignore\n // eslint-disable-next-line @typescript-eslint/require-await\n async getLedgerEntries(\n keys: xdr.LedgerKey[],\n ): Promise<rpc.Api.GetLedgerEntriesResponse> {\n throw new Error('Method getLedgerEntries is not implemented.');\n }\n\n //eslint-disable-next-line @typescript-eslint/require-await\n async getTransaction(hash: string): Promise<rpc.Api.GetTransactionResponse> {\n throw new Error('Method getTransaction is not implemented.');\n }\n\n async getEvents(\n request: rpc.Server.GetEventsRequest,\n ): Promise<rpc.Api.GetEventsResponse> {\n return this.baseApi.getEvents({\n startLedger: this.blockHeight,\n filters: [],\n });\n }\n\n //eslint-disable-next-line @typescript-eslint/require-await\n async getNetwork(): Promise<rpc.Api.GetNetworkResponse> {\n throw new Error('Method getNetwork is not implemented.');\n }\n\n //eslint-disable-next-line @typescript-eslint/require-await\n async getLatestLedger(): Promise<rpc.Api.GetLatestLedgerResponse> {\n throw new Error('Method getLatestLedger is not implemented.');\n }\n\n //eslint-disable-next-line @typescript-eslint/require-await\n async simulateTransaction(\n transaction: Transaction | FeeBumpTransaction,\n ): Promise<rpc.Api.SimulateTransactionResponse> {\n throw new Error('Method simulateTransaction is not implemented.');\n }\n\n //eslint-disable-next-line @typescript-eslint/require-await\n async prepareTransaction(\n transaction: Transaction | FeeBumpTransaction,\n ): Promise<Transaction> {\n throw new Error('Method prepareTransaction is not implemented.');\n }\n\n //eslint-disable-next-line @typescript-eslint/require-await\n async sendTransaction(\n transaction: Transaction | FeeBumpTransaction,\n ): Promise<rpc.Api.SendTransactionResponse> {\n throw new Error('Method sendTransaction is not implemented.');\n }\n\n //eslint-disable-next-line @typescript-eslint/require-await\n async requestAirdrop(\n address: string | Pick<Account, 'accountId'>,\n friendbotUrl?: string,\n ): Promise<Account> {\n throw new Error('Method requestAirdrop is not implemented.');\n }\n}\n"]}
@@ -1,7 +1,7 @@
1
- import { SorobanRpc } from '@stellar/stellar-sdk';
2
- export declare class SorobanServer extends SorobanRpc.Server {
1
+ import { rpc } from '@stellar/stellar-sdk';
2
+ export declare class SorobanServer extends rpc.Server {
3
3
  private eventsCache;
4
4
  private fetchEventsForSequence;
5
5
  private updateEventCache;
6
- getEvents(request: SorobanRpc.Server.GetEventsRequest): Promise<SorobanRpc.Api.GetEventsResponse>;
6
+ getEvents(request: rpc.Server.GetEventsRequest): Promise<rpc.Api.GetEventsResponse>;
7
7
  }
@@ -1,12 +1,12 @@
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.SorobanServer = void 0;
6
6
  const stellar_sdk_1 = require("@stellar/stellar-sdk");
7
7
  const lodash_1 = require("lodash");
8
8
  const DEFAULT_PAGE_SIZE = 100;
9
- class SorobanServer extends stellar_sdk_1.SorobanRpc.Server {
9
+ class SorobanServer extends stellar_sdk_1.rpc.Server {
10
10
  eventsCache = {};
11
11
  async fetchEventsForSequence(sequence, request, accEvents = []) {
12
12
  const response = await super.getEvents(request);
@@ -1 +1 @@
1
- {"version":3,"file":"soroban.server.js","sourceRoot":"","sources":["../../src/stellar/soroban.server.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 { SorobanRpc } from '@stellar/stellar-sdk';\nimport { SorobanRpcEventResponse } from '@subql/types-stellar';\nimport { compact, groupBy, last } from 'lodash';\n\nconst DEFAULT_PAGE_SIZE = 100;\n\nexport class SorobanServer extends SorobanRpc.Server {\n private eventsCache: { [key: number]: SorobanRpc.Api.GetEventsResponse } = {};\n\n private async fetchEventsForSequence(\n sequence: number,\n request: SorobanRpc.Server.GetEventsRequest,\n accEvents: SorobanRpcEventResponse[] = [],\n ): Promise<{\n events: SorobanRpc.Api.GetEventsResponse;\n eventsToCache: SorobanRpc.Api.GetEventsResponse;\n }> {\n const response = await super.getEvents(request);\n\n // Separate the events for the current sequence and the subsequent sequences\n const groupedEvents = groupBy(response.events, (event) =>\n event.ledger === sequence ? 'events' : 'eventsToCache',\n );\n const events = compact(groupedEvents.events);\n let eventsToCache = compact(groupedEvents.eventsToCache);\n\n // Update the accumulated events with the events from the current sequence\n const newEvents = accEvents.concat(events);\n\n if (eventsToCache?.length) {\n if (response.events.length === DEFAULT_PAGE_SIZE) {\n const lastSequence = last(response.events)!.ledger;\n eventsToCache = eventsToCache.filter(\n (event) => event.ledger !== lastSequence,\n );\n }\n return {\n events: { events: newEvents, latestLedger: response.latestLedger },\n eventsToCache: {\n events: eventsToCache,\n latestLedger: response.latestLedger,\n },\n };\n }\n\n if (response.events.length < DEFAULT_PAGE_SIZE) {\n return {\n events: { events: newEvents, latestLedger: response.latestLedger },\n eventsToCache: { events: [], latestLedger: response.latestLedger },\n };\n }\n\n // Prepare the next request\n const nextRequest = {\n ...request,\n cursor: response.events[response.events.length - 1]?.pagingToken,\n startLedger: undefined,\n };\n\n // Continue fetching events for the sequence\n return this.fetchEventsForSequence(sequence, nextRequest, newEvents);\n }\n\n private updateEventCache(\n response: SorobanRpc.Api.GetEventsResponse,\n ignoreHeight?: number,\n ): void {\n response.events.forEach((event) => {\n if (ignoreHeight && ignoreHeight === event.ledger) return;\n const ledger = event.ledger;\n if (!this.eventsCache[ledger]) {\n this.eventsCache[ledger] = {\n events: [],\n latestLedger: response.latestLedger,\n } as SorobanRpc.Api.GetEventsResponse;\n }\n const eventExists = this.eventsCache[ledger].events.some(\n (existingEvent) => existingEvent.id === event.id,\n );\n if (!eventExists) {\n this.eventsCache[ledger].events.push(event);\n }\n });\n }\n\n async getEvents(\n request: SorobanRpc.Server.GetEventsRequest,\n ): Promise<SorobanRpc.Api.GetEventsResponse> {\n const sequence = request.startLedger;\n\n if (sequence === undefined) {\n throw new Error(`Get soraban event failed, block sequence is missing`);\n }\n\n if (this.eventsCache[sequence]) {\n const cachedEvents = this.eventsCache[sequence];\n delete this.eventsCache[sequence];\n return cachedEvents;\n }\n\n const response = await this.fetchEventsForSequence(sequence, request);\n this.updateEventCache(response.eventsToCache, sequence);\n\n return response.events;\n }\n}\n"]}
1
+ {"version":3,"file":"soroban.server.js","sourceRoot":"","sources":["../../src/stellar/soroban.server.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 { rpc } from '@stellar/stellar-sdk';\nimport { SorobanRpcEventResponse } from '@subql/types-stellar';\nimport { compact, groupBy, last } from 'lodash';\n\nconst DEFAULT_PAGE_SIZE = 100;\n\ntype CachedEventsResponse = Pick<\n rpc.Api.GetEventsResponse,\n 'events' | 'latestLedger'\n>;\n\nexport class SorobanServer extends rpc.Server {\n private eventsCache: { [key: number]: rpc.Api.GetEventsResponse } = {};\n\n private async fetchEventsForSequence(\n sequence: number,\n request: rpc.Server.GetEventsRequest,\n accEvents: SorobanRpcEventResponse[] = [],\n ): Promise<{\n events: CachedEventsResponse;\n eventsToCache: CachedEventsResponse;\n }> {\n const response = await super.getEvents(request);\n\n // Separate the events for the current sequence and the subsequent sequences\n const groupedEvents = groupBy(response.events, (event) =>\n event.ledger === sequence ? 'events' : 'eventsToCache',\n );\n const events = compact(groupedEvents.events);\n let eventsToCache = compact(groupedEvents.eventsToCache);\n\n // Update the accumulated events with the events from the current sequence\n const newEvents = accEvents.concat(events);\n\n if (eventsToCache?.length) {\n if (response.events.length === DEFAULT_PAGE_SIZE) {\n const lastSequence = last(response.events)!.ledger;\n eventsToCache = eventsToCache.filter(\n (event) => event.ledger !== lastSequence,\n );\n }\n return {\n events: { events: newEvents, latestLedger: response.latestLedger },\n eventsToCache: {\n events: eventsToCache,\n latestLedger: response.latestLedger,\n },\n };\n }\n\n if (response.events.length < DEFAULT_PAGE_SIZE) {\n return {\n events: { events: newEvents, latestLedger: response.latestLedger },\n eventsToCache: { events: [], latestLedger: response.latestLedger },\n };\n }\n\n // Prepare the next request\n const nextRequest = {\n ...request,\n cursor: response.events[response.events.length - 1]?.pagingToken,\n startLedger: undefined,\n };\n\n // Continue fetching events for the sequence\n return this.fetchEventsForSequence(sequence, nextRequest, newEvents);\n }\n\n private updateEventCache(\n response: CachedEventsResponse,\n ignoreHeight?: number,\n ): void {\n response.events.forEach((event) => {\n if (ignoreHeight && ignoreHeight === event.ledger) return;\n const ledger = event.ledger;\n if (!this.eventsCache[ledger]) {\n this.eventsCache[ledger] = {\n events: [],\n latestLedger: response.latestLedger,\n } as unknown as rpc.Api.GetEventsResponse;\n }\n const eventExists = this.eventsCache[ledger].events.some(\n (existingEvent) => existingEvent.id === event.id,\n );\n if (!eventExists) {\n this.eventsCache[ledger].events.push(event);\n }\n });\n }\n\n async getEvents(\n request: rpc.Server.GetEventsRequest,\n ): Promise<rpc.Api.GetEventsResponse> {\n const sequence = request.startLedger;\n\n if (sequence === undefined) {\n throw new Error(`Get soraban event failed, block sequence is missing`);\n }\n\n if (this.eventsCache[sequence]) {\n const cachedEvents = this.eventsCache[sequence];\n delete this.eventsCache[sequence];\n return cachedEvents;\n }\n\n const response = await this.fetchEventsForSequence(sequence, request);\n this.updateEventCache(response.eventsToCache, sequence);\n\n return response.events as rpc.Api.GetEventsResponse;\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 stellar_sdk_1 = require("@stellar/stellar-sdk");
@@ -11,7 +11,7 @@ describe('SorobanServer', () => {
11
11
  let spy;
12
12
  beforeEach(() => {
13
13
  server = new soroban_server_1.SorobanServer(url);
14
- spy = jest.spyOn(stellar_sdk_1.SorobanRpc.Server.prototype, 'getEvents');
14
+ spy = jest.spyOn(stellar_sdk_1.rpc.Server.prototype, 'getEvents');
15
15
  });
16
16
  afterEach(() => {
17
17
  spy.mockRestore();
@@ -1 +1 @@
1
- {"version":3,"file":"soroban.server.spec.js","sourceRoot":"","sources":["../../src/stellar/soroban.server.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 { SorobanRpc } from '@stellar/stellar-sdk';\nimport { SorobanServer } from './soroban.server';\n\nconst DEFAULT_PAGE_SIZE = 100;\n\ndescribe('SorobanServer', () => {\n let server: SorobanServer;\n const url = 'https://example.com';\n let spy: jest.SpyInstance;\n\n beforeEach(() => {\n server = new SorobanServer(url);\n spy = jest.spyOn(SorobanRpc.Server.prototype, 'getEvents');\n });\n\n afterEach(() => {\n spy.mockRestore();\n });\n\n test('should handle no events', async () => {\n spy.mockResolvedValue({ events: [] });\n\n const response = await server.getEvents({\n startLedger: 1,\n } as SorobanRpc.Server.GetEventsRequest);\n\n expect(response).toEqual({ events: [] });\n expect(spy).toHaveBeenCalledTimes(1);\n });\n\n test('should handle events from different ledgers', async () => {\n // Should be BaseEventResponse type\n spy.mockResolvedValue({\n events: [\n { id: '1', ledger: 1, pagingToken: '1' },\n { id: '2', ledger: 2, pagingToken: '2' },\n ],\n latestLedger: 5,\n });\n\n const response = await server.getEvents({\n startLedger: 1,\n } as SorobanRpc.Server.GetEventsRequest);\n\n expect(response).toEqual({\n events: [{ id: '1', ledger: 1, pagingToken: '1' }],\n latestLedger: 5,\n });\n expect(spy).toHaveBeenCalledTimes(1);\n });\n\n test('should handle response length less than DEFAULT_PAGE_SIZE', async () => {\n spy.mockResolvedValue({\n events: Array.from({ length: DEFAULT_PAGE_SIZE - 1 }, (_, i) => ({\n id: `${i}`,\n ledger: 1,\n pagingToken: `${i}`,\n })),\n });\n\n const response = await server.getEvents({\n startLedger: 1,\n } as SorobanRpc.Server.GetEventsRequest);\n\n expect(response.events.length).toBe(DEFAULT_PAGE_SIZE - 1);\n expect(spy).toHaveBeenCalledTimes(1);\n });\n\n test('should handle no matching ledger', async () => {\n spy.mockResolvedValue({\n events: [\n { id: '1', ledger: 2, pagingToken: '1' },\n { id: '1', ledger: 3, pagingToken: '2' },\n ],\n });\n\n const response = await server.getEvents({\n startLedger: 1,\n } as SorobanRpc.Server.GetEventsRequest);\n\n expect(response).toEqual({ events: [] });\n expect(spy).toHaveBeenCalledTimes(1);\n });\n\n test('should return cached events for given startLedger', async () => {\n (server as any).eventsCache[1] = {\n events: [{ ledger: 1, pagingToken: '1' }],\n };\n\n const response = await server.getEvents({\n startLedger: 1,\n } as SorobanRpc.Server.GetEventsRequest);\n\n expect(response).toEqual({ events: [{ ledger: 1, pagingToken: '1' }] });\n expect(spy).toHaveBeenCalledTimes(0);\n });\n\n test('should handle startLedger events greater than DEFAULT_PAGE_SIZE', async () => {\n spy\n .mockResolvedValueOnce({\n events: Array.from({ length: DEFAULT_PAGE_SIZE }, (_, i) => ({\n id: `${i}`,\n ledger: 1,\n pagingToken: `${i}`,\n })),\n })\n .mockResolvedValueOnce({\n events: Array.from({ length: 5 }, (_, i) => ({\n id: `${i + DEFAULT_PAGE_SIZE}`,\n ledger: 1,\n pagingToken: `${i + DEFAULT_PAGE_SIZE}`,\n })),\n });\n\n const response = await server.getEvents({\n startLedger: 1,\n } as SorobanRpc.Server.GetEventsRequest);\n\n expect(response.events.length).toBe(DEFAULT_PAGE_SIZE + 5);\n expect(spy).toHaveBeenCalledTimes(2);\n });\n\n test('should handle last block of otherEvents on next page', async () => {\n spy\n .mockResolvedValueOnce({\n events: [\n ...Array.from({ length: DEFAULT_PAGE_SIZE - 1 }, (_, i) => ({\n id: `${i}`,\n ledger: 1,\n pagingToken: `${i}`,\n })),\n { id: '2-1', ledger: 2, pagingToken: '1' },\n ],\n })\n .mockResolvedValueOnce({\n events: [{ id: '2-2', ledger: 2, pagingToken: '2' }],\n });\n\n const response = await server.getEvents({\n startLedger: 1,\n } as SorobanRpc.Server.GetEventsRequest);\n\n expect(response).toEqual({\n events: [\n ...Array.from({ length: DEFAULT_PAGE_SIZE - 1 }, (_, i) => ({\n id: `${i}`,\n ledger: 1,\n pagingToken: `${i}`,\n })),\n ],\n });\n expect((server as any).eventsCache[2]).toBeUndefined();\n expect(spy).toHaveBeenCalledTimes(1);\n });\n});\n"]}
1
+ {"version":3,"file":"soroban.server.spec.js","sourceRoot":"","sources":["../../src/stellar/soroban.server.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 { rpc } from '@stellar/stellar-sdk';\nimport { SorobanServer } from './soroban.server';\n\nconst DEFAULT_PAGE_SIZE = 100;\n\ndescribe('SorobanServer', () => {\n let server: SorobanServer;\n const url = 'https://example.com';\n let spy: jest.SpyInstance;\n\n beforeEach(() => {\n server = new SorobanServer(url);\n spy = jest.spyOn(rpc.Server.prototype, 'getEvents');\n });\n\n afterEach(() => {\n spy.mockRestore();\n });\n\n test('should handle no events', async () => {\n spy.mockResolvedValue({ events: [] });\n\n const response = await server.getEvents({\n startLedger: 1,\n } as rpc.Server.GetEventsRequest);\n\n expect(response).toEqual({ events: [] });\n expect(spy).toHaveBeenCalledTimes(1);\n });\n\n test('should handle events from different ledgers', async () => {\n // Should be BaseEventResponse type\n spy.mockResolvedValue({\n events: [\n { id: '1', ledger: 1, pagingToken: '1' },\n { id: '2', ledger: 2, pagingToken: '2' },\n ],\n latestLedger: 5,\n });\n\n const response = await server.getEvents({\n startLedger: 1,\n } as rpc.Server.GetEventsRequest);\n\n expect(response).toEqual({\n events: [{ id: '1', ledger: 1, pagingToken: '1' }],\n latestLedger: 5,\n });\n expect(spy).toHaveBeenCalledTimes(1);\n });\n\n test('should handle response length less than DEFAULT_PAGE_SIZE', async () => {\n spy.mockResolvedValue({\n events: Array.from({ length: DEFAULT_PAGE_SIZE - 1 }, (_, i) => ({\n id: `${i}`,\n ledger: 1,\n pagingToken: `${i}`,\n })),\n });\n\n const response = await server.getEvents({\n startLedger: 1,\n } as rpc.Server.GetEventsRequest);\n\n expect(response.events.length).toBe(DEFAULT_PAGE_SIZE - 1);\n expect(spy).toHaveBeenCalledTimes(1);\n });\n\n test('should handle no matching ledger', async () => {\n spy.mockResolvedValue({\n events: [\n { id: '1', ledger: 2, pagingToken: '1' },\n { id: '1', ledger: 3, pagingToken: '2' },\n ],\n });\n\n const response = await server.getEvents({\n startLedger: 1,\n } as rpc.Server.GetEventsRequest);\n\n expect(response).toEqual({ events: [] });\n expect(spy).toHaveBeenCalledTimes(1);\n });\n\n test('should return cached events for given startLedger', async () => {\n (server as any).eventsCache[1] = {\n events: [{ ledger: 1, pagingToken: '1' }],\n };\n\n const response = await server.getEvents({\n startLedger: 1,\n } as rpc.Server.GetEventsRequest);\n\n expect(response).toEqual({ events: [{ ledger: 1, pagingToken: '1' }] });\n expect(spy).toHaveBeenCalledTimes(0);\n });\n\n test('should handle startLedger events greater than DEFAULT_PAGE_SIZE', async () => {\n spy\n .mockResolvedValueOnce({\n events: Array.from({ length: DEFAULT_PAGE_SIZE }, (_, i) => ({\n id: `${i}`,\n ledger: 1,\n pagingToken: `${i}`,\n })),\n })\n .mockResolvedValueOnce({\n events: Array.from({ length: 5 }, (_, i) => ({\n id: `${i + DEFAULT_PAGE_SIZE}`,\n ledger: 1,\n pagingToken: `${i + DEFAULT_PAGE_SIZE}`,\n })),\n });\n\n const response = await server.getEvents({\n startLedger: 1,\n } as rpc.Server.GetEventsRequest);\n\n expect(response.events.length).toBe(DEFAULT_PAGE_SIZE + 5);\n expect(spy).toHaveBeenCalledTimes(2);\n });\n\n test('should handle last block of otherEvents on next page', async () => {\n spy\n .mockResolvedValueOnce({\n events: [\n ...Array.from({ length: DEFAULT_PAGE_SIZE - 1 }, (_, i) => ({\n id: `${i}`,\n ledger: 1,\n pagingToken: `${i}`,\n })),\n { id: '2-1', ledger: 2, pagingToken: '1' },\n ],\n })\n .mockResolvedValueOnce({\n events: [{ id: '2-2', ledger: 2, pagingToken: '2' }],\n });\n\n const response = await server.getEvents({\n startLedger: 1,\n } as rpc.Server.GetEventsRequest);\n\n expect(response).toEqual({\n events: [\n ...Array.from({ length: DEFAULT_PAGE_SIZE - 1 }, (_, i) => ({\n id: `${i}`,\n ledger: 1,\n pagingToken: `${i}`,\n })),\n ],\n });\n expect((server as any).eventsCache[2]).toBeUndefined();\n expect(spy).toHaveBeenCalledTimes(1);\n });\n});\n"]}
@@ -1,18 +1,14 @@
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
- var __importDefault = (this && this.__importDefault) || function (mod) {
5
- return (mod && mod.__esModule) ? mod : { "default": mod };
6
- };
7
4
  Object.defineProperty(exports, "__esModule", { value: true });
8
5
  exports.StellarServer = void 0;
9
6
  const stellar_sdk_1 = require("@stellar/stellar-sdk");
10
7
  const node_core_1 = require("@subql/node-core");
11
- const urijs_1 = __importDefault(require("urijs"));
12
8
  const logger = (0, node_core_1.getLogger)('stellar-server');
13
9
  class StellarServer extends stellar_sdk_1.Horizon.Server {
14
10
  async getNetwork() {
15
- const network = (await stellar_sdk_1.Horizon.AxiosClient.get((0, urijs_1.default)(this.serverURL).toString())).data;
11
+ const network = (await stellar_sdk_1.Horizon.AxiosClient.get(new URL(this.serverURL).toString())).data;
16
12
  return network;
17
13
  }
18
14
  }
@@ -1 +1 @@
1
- {"version":3,"file":"stellar.server.js","sourceRoot":"","sources":["../../src/stellar/stellar.server.ts"],"names":[],"mappings":";AAAA,8DAA8D;AAC9D,mCAAmC;;;;;;AAEnC,sDAA+C;AAC/C,gDAA6C;AAC7C,kDAAwB;AAExB,MAAM,MAAM,GAAG,IAAA,qBAAS,EAAC,gBAAgB,CAAC,CAAC;AAQ3C,MAAa,aAAc,SAAQ,qBAAO,CAAC,MAAM;IAC/C,KAAK,CAAC,UAAU;QACd,MAAM,OAAO,GAAmB,CAC9B,MAAM,qBAAO,CAAC,WAAW,CAAC,GAAG,CAAC,IAAA,eAAG,EAAC,IAAI,CAAC,SAAgB,CAAC,CAAC,QAAQ,EAAE,CAAC,CACrE,CAAC,IAAI,CAAC;QACP,OAAO,OAAO,CAAC;IACjB,CAAC;CACF;AAPD,sCAOC","sourcesContent":["// Copyright 2020-2024 SubQuery Pte Ltd authors & contributors\n// SPDX-License-Identifier: GPL-3.0\n\nimport { Horizon } from '@stellar/stellar-sdk';\nimport { getLogger } from '@subql/node-core';\nimport URI from 'urijs';\n\nconst logger = getLogger('stellar-server');\n\nexport interface StellarNetwork {\n network_passphrase: string;\n history_latest_ledger: string;\n name: string;\n}\n\nexport class StellarServer extends Horizon.Server {\n async getNetwork(): Promise<StellarNetwork> {\n const network: StellarNetwork = (\n await Horizon.AxiosClient.get(URI(this.serverURL as any).toString())\n ).data;\n return network;\n }\n}\n"]}
1
+ {"version":3,"file":"stellar.server.js","sourceRoot":"","sources":["../../src/stellar/stellar.server.ts"],"names":[],"mappings":";AAAA,8DAA8D;AAC9D,mCAAmC;;;AAEnC,sDAA+C;AAC/C,gDAA6C;AAE7C,MAAM,MAAM,GAAG,IAAA,qBAAS,EAAC,gBAAgB,CAAC,CAAC;AAQ3C,MAAa,aAAc,SAAQ,qBAAO,CAAC,MAAM;IAC/C,KAAK,CAAC,UAAU;QACd,MAAM,OAAO,GAAmB,CAC9B,MAAM,qBAAO,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC,IAAI,CAAC,SAAgB,CAAC,CAAC,QAAQ,EAAE,CAAC,CACzE,CAAC,IAAI,CAAC;QACP,OAAO,OAAO,CAAC;IACjB,CAAC;CACF;AAPD,sCAOC","sourcesContent":["// Copyright 2020-2025 SubQuery Pte Ltd authors & contributors\n// SPDX-License-Identifier: GPL-3.0\n\nimport { Horizon } from '@stellar/stellar-sdk';\nimport { getLogger } from '@subql/node-core';\n\nconst logger = getLogger('stellar-server');\n\nexport interface StellarNetwork {\n network_passphrase: string;\n history_latest_ledger: string;\n name: string;\n}\n\nexport class StellarServer extends Horizon.Server {\n async getNetwork(): Promise<StellarNetwork> {\n const network: StellarNetwork = (\n await Horizon.AxiosClient.get(new URL(this.serverURL as any).toString())\n ).data;\n return network;\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.calcInterval = exports.formatBlockUtil = exports.stellarBlockToHeader = void 0;
@@ -1 +1 @@
1
- {"version":3,"file":"utils.stellar.js","sourceRoot":"","sources":["../../src/stellar/utils.stellar.ts"],"names":[],"mappings":";AAAA,8DAA8D;AAC9D,mCAAmC;;;AAUnC,SAAgB,oBAAoB,CAClC,KAAoD;IAEpD,OAAO;QACL,WAAW,EAAE,KAAK,CAAC,QAAQ;QAC3B,SAAS,EAAE,KAAK,CAAC,IAAI,CAAC,QAAQ,EAAE;QAChC,UAAU,EAAE,KAAK,CAAC,SAAS,CAAC,QAAQ,EAAE;KACvC,CAAC;AACJ,CAAC;AARD,oDAQC;AAED,SAAgB,eAAe,CAE7B,KAAQ;IACR,OAAO;QACL,KAAK;QACL,SAAS,EAAE,GAAG,EAAE,CAAC,oBAAoB,CAAC,KAAK,CAAC,KAAK,CAAC;KACnD,CAAC;AACJ,CAAC;AAPD,0CAOC;AAED,SAAgB,YAAY,CAAC,GAAe;IAC1C,OAAO,IAAI,CAAC;AACd,CAAC;AAFD,oCAEC","sourcesContent":["// Copyright 2020-2024 SubQuery Pte Ltd authors & contributors\n// SPDX-License-Identifier: GPL-3.0\n\nimport { Horizon } from '@stellar/stellar-sdk';\nimport { Header, IBlock } from '@subql/node-core';\nimport {\n ApiWrapper,\n StellarBlock,\n StellarBlockWrapper,\n} from '@subql/types-stellar';\n\nexport function stellarBlockToHeader(\n block: StellarBlock | Horizon.ServerApi.LedgerRecord,\n): Header {\n return {\n blockHeight: block.sequence,\n blockHash: block.hash.toString(),\n parentHash: block.prev_hash.toString(),\n };\n}\n\nexport function formatBlockUtil<\n B extends StellarBlockWrapper = StellarBlockWrapper,\n>(block: B): IBlock<B> {\n return {\n block,\n getHeader: () => stellarBlockToHeader(block.block),\n };\n}\n\nexport function calcInterval(api: ApiWrapper): number {\n return 6000;\n}\n"]}
1
+ {"version":3,"file":"utils.stellar.js","sourceRoot":"","sources":["../../src/stellar/utils.stellar.ts"],"names":[],"mappings":";AAAA,8DAA8D;AAC9D,mCAAmC;;;AAUnC,SAAgB,oBAAoB,CAClC,KAAoD;IAEpD,OAAO;QACL,WAAW,EAAE,KAAK,CAAC,QAAQ;QAC3B,SAAS,EAAE,KAAK,CAAC,IAAI,CAAC,QAAQ,EAAE;QAChC,UAAU,EAAE,KAAK,CAAC,SAAS,CAAC,QAAQ,EAAE;KACvC,CAAC;AACJ,CAAC;AARD,oDAQC;AAED,SAAgB,eAAe,CAE7B,KAAQ;IACR,OAAO;QACL,KAAK;QACL,SAAS,EAAE,GAAG,EAAE,CAAC,oBAAoB,CAAC,KAAK,CAAC,KAAK,CAAC;KACnD,CAAC;AACJ,CAAC;AAPD,0CAOC;AAED,SAAgB,YAAY,CAAC,GAAe;IAC1C,OAAO,IAAI,CAAC;AACd,CAAC;AAFD,oCAEC","sourcesContent":["// Copyright 2020-2025 SubQuery Pte Ltd authors & contributors\n// SPDX-License-Identifier: GPL-3.0\n\nimport { Horizon } from '@stellar/stellar-sdk';\nimport { Header, IBlock } from '@subql/node-core';\nimport {\n ApiWrapper,\n StellarBlock,\n StellarBlockWrapper,\n} from '@subql/types-stellar';\n\nexport function stellarBlockToHeader(\n block: StellarBlock | Horizon.ServerApi.LedgerRecord,\n): Header {\n return {\n blockHeight: block.sequence,\n blockHash: block.hash.toString(),\n parentHash: block.prev_hash.toString(),\n };\n}\n\nexport function formatBlockUtil<\n B extends StellarBlockWrapper = StellarBlockWrapper,\n>(block: B): IBlock<B> {\n return {\n block,\n getHeader: () => stellarBlockToHeader(block.block),\n };\n}\n\nexport function calcInterval(api: ApiWrapper): number {\n return 6000;\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.forceCleanInit = void 0;
@@ -1 +1 @@
1
- {"version":3,"file":"forceClean.init.js","sourceRoot":"","sources":["../../src/subcommands/forceClean.init.ts"],"names":[],"mappings":";AAAA,8DAA8D;AAC9D,mCAAmC;;;AAEnC,gDAA8C;AAC9C,2DAAuD;AAEhD,MAAM,cAAc,GAAG,GAAkB,EAAE,CAAC,IAAA,sBAAU,EAAC,oCAAgB,CAAC,CAAC;AAAnE,QAAA,cAAc,kBAAqD","sourcesContent":["// Copyright 2020-2024 SubQuery Pte Ltd authors & contributors\n// SPDX-License-Identifier: GPL-3.0\n\nimport { forceClean } from '@subql/node-core';\nimport { ForceCleanModule } from './forceClean.module';\n\nexport const forceCleanInit = (): Promise<void> => forceClean(ForceCleanModule);\n"]}
1
+ {"version":3,"file":"forceClean.init.js","sourceRoot":"","sources":["../../src/subcommands/forceClean.init.ts"],"names":[],"mappings":";AAAA,8DAA8D;AAC9D,mCAAmC;;;AAEnC,gDAA8C;AAC9C,2DAAuD;AAEhD,MAAM,cAAc,GAAG,GAAkB,EAAE,CAAC,IAAA,sBAAU,EAAC,oCAAgB,CAAC,CAAC;AAAnE,QAAA,cAAc,kBAAqD","sourcesContent":["// Copyright 2020-2025 SubQuery Pte Ltd authors & contributors\n// SPDX-License-Identifier: GPL-3.0\n\nimport { forceClean } from '@subql/node-core';\nimport { ForceCleanModule } from './forceClean.module';\n\nexport const forceCleanInit = (): Promise<void> => forceClean(ForceCleanModule);\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;