@subql/node-solana 6.0.1-0 → 6.0.2-0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -27,7 +27,7 @@ let IndexerManager = class IndexerManager extends node_core_1.BaseIndexerManager
27
27
  isRuntimeDs = common_solana_1.isRuntimeDs;
28
28
  isCustomDs = common_solana_1.isCustomDs;
29
29
  constructor(apiService, nodeConfig, sandboxService, dsProcessorService, dynamicDsService, unfinalizedBlocksService, blockchainService) {
30
- super(apiService, nodeConfig, sandboxService, dsProcessorService, dynamicDsService, unfinalizedBlocksService, getFilterTypeMap(apiService.api.decoder), ProcessorTypeMap, blockchainService);
30
+ super(apiService, nodeConfig, sandboxService, dsProcessorService, dynamicDsService, unfinalizedBlocksService, getFilterTypeMap(apiService.decoder), ProcessorTypeMap, blockchainService);
31
31
  }
32
32
  async indexBlock(block, dataSources) {
33
33
  return super.internalIndexBlock(block, dataSources, () => this.blockchainService.getSafeApi(block.block));
@@ -1 +1 @@
1
- {"version":3,"file":"indexer.manager.js","sourceRoot":"","sources":["../../src/indexer/indexer.manager.ts"],"names":[],"mappings":"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","sourcesContent":["// Copyright 2020-2025 SubQuery Pte Ltd authors & contributors\n// SPDX-License-Identifier: GPL-3.0\n\nimport { Inject, Injectable } from '@nestjs/common';\nimport {\n isBlockHandlerProcessor,\n isCustomDs,\n isRuntimeDs,\n SubqlSolanaCustomDataSource,\n SubqlSolanaDataSource,\n isInstructionHandlerProcessor,\n isTransactionHandlerProcessor,\n isLogHandlerProcessor,\n} from '@subql/common-solana';\nimport {\n NodeConfig,\n profiler,\n IndexerSandbox,\n ProcessBlockResponse,\n BaseIndexerManager,\n IBlock,\n SandboxService,\n DsProcessorService,\n DynamicDsService,\n UnfinalizedBlocksService,\n} from '@subql/node-core';\nimport {\n SolanaHandlerKind,\n SolanaTransaction,\n SolanaBlock,\n SubqlRuntimeDatasource,\n SolanaBlockFilter,\n SolanaTransactionFilter,\n SolanaInstruction,\n SolanaInstructionFilter,\n SolanaRuntimeHandlerInputMap,\n SolanaLogMessage,\n SolanaLogFilter,\n} from '@subql/types-solana';\nimport { groupBy } from 'lodash';\nimport { BlockchainService } from '../blockchain.service';\nimport { SolanaProjectDs } from '../configure/SubqueryProject';\nimport {\n SolanaApi,\n SolanaApiService,\n SolanaDecoder,\n SolanaSafeApi,\n} from '../solana';\nimport {\n filterBlocksProcessor,\n filterInstructionsProcessor,\n filterLogsProcessor,\n filterTransactionsProcessor,\n} from '../solana/utils.solana';\nimport { BlockContent } from './types';\n\n@Injectable()\nexport class IndexerManager extends BaseIndexerManager<\n SolanaApi,\n SolanaSafeApi,\n BlockContent,\n SolanaApiService,\n SubqlSolanaDataSource,\n SubqlSolanaCustomDataSource,\n ReturnType<typeof getFilterTypeMap>,\n typeof ProcessorTypeMap,\n SolanaRuntimeHandlerInputMap\n> {\n protected isRuntimeDs = isRuntimeDs;\n protected isCustomDs = isCustomDs;\n\n constructor(\n @Inject('APIService') apiService: SolanaApiService,\n nodeConfig: NodeConfig,\n sandboxService: SandboxService<SolanaSafeApi, SolanaApi>,\n dsProcessorService: DsProcessorService<\n SubqlSolanaDataSource,\n SubqlSolanaCustomDataSource\n >,\n dynamicDsService: DynamicDsService<SubqlSolanaDataSource>,\n @Inject('IUnfinalizedBlocksService')\n unfinalizedBlocksService: UnfinalizedBlocksService,\n @Inject('IBlockchainService') blockchainService: BlockchainService,\n ) {\n super(\n apiService,\n nodeConfig,\n sandboxService,\n dsProcessorService,\n dynamicDsService,\n unfinalizedBlocksService,\n getFilterTypeMap(apiService.api.decoder),\n ProcessorTypeMap,\n blockchainService,\n );\n }\n\n @profiler()\n async indexBlock(\n block: IBlock<BlockContent>,\n dataSources: SubqlSolanaDataSource[],\n ): Promise<ProcessBlockResponse> {\n return super.internalIndexBlock(block, dataSources, () =>\n this.blockchainService.getSafeApi(block.block),\n );\n }\n\n protected getDsProcessor(\n ds: SubqlSolanaDataSource,\n safeApi: SolanaSafeApi,\n ): IndexerSandbox {\n return this.sandboxService.getDsProcessor(ds, safeApi, this.apiService.api);\n }\n\n protected async indexBlockData(\n block: BlockContent,\n dataSources: SolanaProjectDs[],\n getVM: (d: SolanaProjectDs) => Promise<IndexerSandbox>,\n ): Promise<void> {\n // console.time(`Indexed block ${block.blockHeight}`);\n await this.indexBlockContent(block, dataSources, getVM);\n\n for (const tx of block.transactions) {\n await this.indexTransaction(tx, dataSources, getVM);\n\n // There is probably only one item per group but that could change based on the data structure\n const innerInstructions = groupBy(\n tx.meta?.innerInstructions,\n (inner) => inner.index,\n );\n\n for (const [idx, instruction] of Object.entries(\n tx.transaction.message.instructions ?? [],\n )) {\n await this.indexInstruction(instruction, dataSources, getVM);\n\n for (const innerInstrutions1 of innerInstructions[idx] ?? []) {\n for (const innerInstrution of innerInstrutions1.instructions) {\n await this.indexInstruction(innerInstrution, dataSources, getVM);\n }\n }\n }\n\n for (const log of tx.meta?.logs ?? []) {\n await this.indexLog(log, dataSources, getVM);\n }\n }\n // console.timeEnd(`Indexed block ${block.blockHeight}`);\n }\n\n private async indexBlockContent(\n block: SolanaBlock,\n dataSources: SolanaProjectDs[],\n getVM: (d: SolanaProjectDs) => Promise<IndexerSandbox>,\n ): Promise<void> {\n for (const ds of dataSources) {\n await this.indexData(SolanaHandlerKind.Block, block, ds, getVM);\n }\n }\n\n private async indexTransaction(\n tx: SolanaTransaction,\n dataSources: SolanaProjectDs[],\n getVM: (d: SolanaProjectDs) => Promise<IndexerSandbox>,\n ): Promise<void> {\n for (const ds of dataSources) {\n await this.indexData(SolanaHandlerKind.Transaction, tx, ds, getVM);\n }\n }\n\n private async indexInstruction(\n instruction: SolanaInstruction,\n dataSources: SolanaProjectDs[],\n getVM: (d: SolanaProjectDs) => Promise<IndexerSandbox>,\n ): Promise<void> {\n for (const ds of dataSources) {\n await this.indexData(\n SolanaHandlerKind.Instruction,\n instruction,\n ds,\n getVM,\n );\n }\n }\n\n private async indexLog(\n log: SolanaLogMessage,\n dataSources: SolanaProjectDs[],\n getVM: (d: SolanaProjectDs) => Promise<IndexerSandbox>,\n ): Promise<void> {\n for (const ds of dataSources) {\n await this.indexData(SolanaHandlerKind.Log, log, ds, getVM);\n }\n }\n\n // eslint-disable-next-line @typescript-eslint/require-await\n protected async prepareFilteredData(\n kind: SolanaHandlerKind,\n data: any,\n ds: SubqlRuntimeDatasource,\n ): Promise<any> {\n // Ensure any provided IDLs are available\n await this.apiService.api.decoder.loadIdls(ds);\n\n return DataIDLParser[kind](data);\n }\n}\n\nconst ProcessorTypeMap = {\n [SolanaHandlerKind.Block]: isBlockHandlerProcessor,\n [SolanaHandlerKind.Transaction]: isTransactionHandlerProcessor,\n [SolanaHandlerKind.Instruction]: isInstructionHandlerProcessor,\n [SolanaHandlerKind.Log]: isLogHandlerProcessor,\n};\n\nconst getFilterTypeMap = (decoder: SolanaDecoder) => ({\n [SolanaHandlerKind.Block]: (\n data: SolanaBlock,\n filter: SolanaBlockFilter,\n ds: SubqlSolanaDataSource,\n ) => filterBlocksProcessor(data, filter),\n [SolanaHandlerKind.Transaction]: (\n data: SolanaTransaction,\n filter: SolanaTransactionFilter,\n ds: SubqlSolanaDataSource,\n ) => filterTransactionsProcessor(data, filter),\n [SolanaHandlerKind.Instruction]: (\n data: SolanaInstruction,\n filter: SolanaInstructionFilter,\n ds: SubqlSolanaDataSource,\n ) => filterInstructionsProcessor(data, decoder, filter),\n [SolanaHandlerKind.Log]: (\n data: SolanaLogMessage,\n filter: SolanaLogFilter,\n ds: SubqlSolanaDataSource,\n ) => filterLogsProcessor(data, filter),\n});\n\nconst DataIDLParser = {\n [SolanaHandlerKind.Block]: (data: SolanaBlock) => data,\n [SolanaHandlerKind.Transaction]: (data: SolanaTransaction) => data,\n [SolanaHandlerKind.Instruction]: async (data: SolanaInstruction) => {\n // Preload the decoded data\n await data.decodedData;\n return data;\n },\n [SolanaHandlerKind.Log]: async (data: SolanaLogMessage) => {\n // Preload the decoded data\n await data.decodedMessage;\n return data;\n },\n};\n"]}
1
+ {"version":3,"file":"indexer.manager.js","sourceRoot":"","sources":["../../src/indexer/indexer.manager.ts"],"names":[],"mappings":"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","sourcesContent":["// Copyright 2020-2025 SubQuery Pte Ltd authors & contributors\n// SPDX-License-Identifier: GPL-3.0\n\nimport { Inject, Injectable } from '@nestjs/common';\nimport {\n isBlockHandlerProcessor,\n isCustomDs,\n isRuntimeDs,\n SubqlSolanaCustomDataSource,\n SubqlSolanaDataSource,\n isInstructionHandlerProcessor,\n isTransactionHandlerProcessor,\n isLogHandlerProcessor,\n} from '@subql/common-solana';\nimport {\n NodeConfig,\n profiler,\n IndexerSandbox,\n ProcessBlockResponse,\n BaseIndexerManager,\n IBlock,\n SandboxService,\n DsProcessorService,\n DynamicDsService,\n UnfinalizedBlocksService,\n} from '@subql/node-core';\nimport {\n SolanaHandlerKind,\n SolanaTransaction,\n SolanaBlock,\n SubqlRuntimeDatasource,\n SolanaBlockFilter,\n SolanaTransactionFilter,\n SolanaInstruction,\n SolanaInstructionFilter,\n SolanaRuntimeHandlerInputMap,\n SolanaLogMessage,\n SolanaLogFilter,\n} from '@subql/types-solana';\nimport { groupBy } from 'lodash';\nimport { BlockchainService } from '../blockchain.service';\nimport { SolanaProjectDs } from '../configure/SubqueryProject';\nimport {\n SolanaApi,\n SolanaApiService,\n SolanaDecoder,\n SolanaSafeApi,\n} from '../solana';\nimport {\n filterBlocksProcessor,\n filterInstructionsProcessor,\n filterLogsProcessor,\n filterTransactionsProcessor,\n} from '../solana/utils.solana';\nimport { BlockContent } from './types';\n\n@Injectable()\nexport class IndexerManager extends BaseIndexerManager<\n SolanaApi,\n SolanaSafeApi,\n BlockContent,\n SolanaApiService,\n SubqlSolanaDataSource,\n SubqlSolanaCustomDataSource,\n ReturnType<typeof getFilterTypeMap>,\n typeof ProcessorTypeMap,\n SolanaRuntimeHandlerInputMap\n> {\n protected isRuntimeDs = isRuntimeDs;\n protected isCustomDs = isCustomDs;\n\n constructor(\n @Inject('APIService') apiService: SolanaApiService,\n nodeConfig: NodeConfig,\n sandboxService: SandboxService<SolanaSafeApi, SolanaApi>,\n dsProcessorService: DsProcessorService<\n SubqlSolanaDataSource,\n SubqlSolanaCustomDataSource\n >,\n dynamicDsService: DynamicDsService<SubqlSolanaDataSource>,\n @Inject('IUnfinalizedBlocksService')\n unfinalizedBlocksService: UnfinalizedBlocksService,\n @Inject('IBlockchainService') blockchainService: BlockchainService,\n ) {\n super(\n apiService,\n nodeConfig,\n sandboxService,\n dsProcessorService,\n dynamicDsService,\n unfinalizedBlocksService,\n getFilterTypeMap(apiService.decoder),\n ProcessorTypeMap,\n blockchainService,\n );\n }\n\n @profiler()\n async indexBlock(\n block: IBlock<BlockContent>,\n dataSources: SubqlSolanaDataSource[],\n ): Promise<ProcessBlockResponse> {\n return super.internalIndexBlock(block, dataSources, () =>\n this.blockchainService.getSafeApi(block.block),\n );\n }\n\n protected getDsProcessor(\n ds: SubqlSolanaDataSource,\n safeApi: SolanaSafeApi,\n ): IndexerSandbox {\n return this.sandboxService.getDsProcessor(ds, safeApi, this.apiService.api);\n }\n\n protected async indexBlockData(\n block: BlockContent,\n dataSources: SolanaProjectDs[],\n getVM: (d: SolanaProjectDs) => Promise<IndexerSandbox>,\n ): Promise<void> {\n // console.time(`Indexed block ${block.blockHeight}`);\n await this.indexBlockContent(block, dataSources, getVM);\n\n for (const tx of block.transactions) {\n await this.indexTransaction(tx, dataSources, getVM);\n\n // There is probably only one item per group but that could change based on the data structure\n const innerInstructions = groupBy(\n tx.meta?.innerInstructions,\n (inner) => inner.index,\n );\n\n for (const [idx, instruction] of Object.entries(\n tx.transaction.message.instructions ?? [],\n )) {\n await this.indexInstruction(instruction, dataSources, getVM);\n\n for (const innerInstrutions1 of innerInstructions[idx] ?? []) {\n for (const innerInstrution of innerInstrutions1.instructions) {\n await this.indexInstruction(innerInstrution, dataSources, getVM);\n }\n }\n }\n\n for (const log of tx.meta?.logs ?? []) {\n await this.indexLog(log, dataSources, getVM);\n }\n }\n // console.timeEnd(`Indexed block ${block.blockHeight}`);\n }\n\n private async indexBlockContent(\n block: SolanaBlock,\n dataSources: SolanaProjectDs[],\n getVM: (d: SolanaProjectDs) => Promise<IndexerSandbox>,\n ): Promise<void> {\n for (const ds of dataSources) {\n await this.indexData(SolanaHandlerKind.Block, block, ds, getVM);\n }\n }\n\n private async indexTransaction(\n tx: SolanaTransaction,\n dataSources: SolanaProjectDs[],\n getVM: (d: SolanaProjectDs) => Promise<IndexerSandbox>,\n ): Promise<void> {\n for (const ds of dataSources) {\n await this.indexData(SolanaHandlerKind.Transaction, tx, ds, getVM);\n }\n }\n\n private async indexInstruction(\n instruction: SolanaInstruction,\n dataSources: SolanaProjectDs[],\n getVM: (d: SolanaProjectDs) => Promise<IndexerSandbox>,\n ): Promise<void> {\n for (const ds of dataSources) {\n await this.indexData(\n SolanaHandlerKind.Instruction,\n instruction,\n ds,\n getVM,\n );\n }\n }\n\n private async indexLog(\n log: SolanaLogMessage,\n dataSources: SolanaProjectDs[],\n getVM: (d: SolanaProjectDs) => Promise<IndexerSandbox>,\n ): Promise<void> {\n for (const ds of dataSources) {\n await this.indexData(SolanaHandlerKind.Log, log, ds, getVM);\n }\n }\n\n // eslint-disable-next-line @typescript-eslint/require-await\n protected async prepareFilteredData(\n kind: SolanaHandlerKind,\n data: any,\n ds: SubqlRuntimeDatasource,\n ): Promise<any> {\n // Ensure any provided IDLs are available\n await this.apiService.api.decoder.loadIdls(ds);\n\n return DataIDLParser[kind](data);\n }\n}\n\nconst ProcessorTypeMap = {\n [SolanaHandlerKind.Block]: isBlockHandlerProcessor,\n [SolanaHandlerKind.Transaction]: isTransactionHandlerProcessor,\n [SolanaHandlerKind.Instruction]: isInstructionHandlerProcessor,\n [SolanaHandlerKind.Log]: isLogHandlerProcessor,\n};\n\nconst getFilterTypeMap = (decoder: SolanaDecoder) => ({\n [SolanaHandlerKind.Block]: (\n data: SolanaBlock,\n filter: SolanaBlockFilter,\n ds: SubqlSolanaDataSource,\n ) => filterBlocksProcessor(data, filter),\n [SolanaHandlerKind.Transaction]: (\n data: SolanaTransaction,\n filter: SolanaTransactionFilter,\n ds: SubqlSolanaDataSource,\n ) => filterTransactionsProcessor(data, filter),\n [SolanaHandlerKind.Instruction]: (\n data: SolanaInstruction,\n filter: SolanaInstructionFilter,\n ds: SubqlSolanaDataSource,\n ) => filterInstructionsProcessor(data, decoder, filter),\n [SolanaHandlerKind.Log]: (\n data: SolanaLogMessage,\n filter: SolanaLogFilter,\n ds: SubqlSolanaDataSource,\n ) => filterLogsProcessor(data, filter),\n});\n\nconst DataIDLParser = {\n [SolanaHandlerKind.Block]: (data: SolanaBlock) => data,\n [SolanaHandlerKind.Transaction]: (data: SolanaTransaction) => data,\n [SolanaHandlerKind.Instruction]: async (data: SolanaInstruction) => {\n // Preload the decoded data\n await data.decodedData;\n return data;\n },\n [SolanaHandlerKind.Log]: async (data: SolanaLogMessage) => {\n // Preload the decoded data\n await data.decodedMessage;\n return data;\n },\n};\n"]}
@@ -49,7 +49,6 @@ class SolanaApiConnection {
49
49
  // formatted_error = new LargeResponseError(e);
50
50
  }
51
51
  else {
52
- console.log('ERRROR ', e.message);
53
52
  formatted_error = new node_core_1.ApiConnectionError(e.name, e.message, node_core_1.ApiErrorType.Default);
54
53
  }
55
54
  return formatted_error;
@@ -1 +1 @@
1
- {"version":3,"file":"api.connection.js","sourceRoot":"","sources":["../../src/solana/api.connection.ts"],"names":[],"mappings":";AAAA,8DAA8D;AAC9D,mCAAmC;;;AAGnC,gDAU0B;AAE1B,6CAAyC;AAWzC,MAAa,mBAAmB;IAMrB;IACC;IAJD,WAAW,CAAyB;IAE7C,YACS,SAAoB,EACnB,kBAAgC;QADjC,cAAS,GAAT,SAAS,CAAW;QACnB,uBAAkB,GAAlB,kBAAkB,CAAc;QAExC,IAAI,CAAC,WAAW,GAAG;YACjB,KAAK,EAAE,SAAS,CAAC,cAAc,EAAE;YACjC,QAAQ,EAAE,SAAS,CAAC,WAAW,EAAE;YACjC,WAAW,EAAE,SAAS,CAAC,cAAc,EAAE;SACxC,CAAC;IACJ,CAAC;IAED,MAAM,CAAC,KAAK,CAAC,MAAM,CACjB,QAAgB,EAChB,kBAAgC,EAChC,YAA2B,EAC3B,OAAsB,EACtB,MAA8B;QAE9B,MAAM,GAAG,GAAG,MAAM,sBAAS,CAAC,MAAM,CAAC,QAAQ,EAAE,YAAY,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC;QAE5E,OAAO,IAAI,mBAAmB,CAAC,GAAG,EAAE,kBAAkB,CAAC,CAAC;IAC1D,CAAC;IAED,OAAO,CAAC,MAAc;QACpB,MAAM,IAAI,KAAK,CAAC,0BAA0B,CAAC,CAAC;IAC9C,CAAC;IAED,KAAK,CAAC,UAAU;QACd,MAAM,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,CAAC;IACjC,CAAC;IAED,KAAK,CAAC,aAAa;QACjB,MAAM,IAAI,CAAC,SAAS,CAAC,UAAU,EAAE,CAAC;IACpC,CAAC;IAED,KAAK,CAAC,WAAW,CAAC,OAAiB;QACjC,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,kBAAkB,EAAE,CAAC,IAAI,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;QACxE,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,WAAW,GAAG,mBAAmB,CAAC,WAAW,CAAC;IAE9C,MAAM,CAAC,WAAW,CAAC,CAAQ;QACzB,IAAI,eAAmC,CAAC;QACxC,IAAI,CAAC,CAAC,OAAO,CAAC,UAAU,CAAC,0CAA0C,CAAC,EAAE,CAAC;YACrE,eAAe,GAAG,IAAI,wBAAY,CAAC,CAAC,CAAC,CAAC;YACtC,0DAA0D;YAC1D,iDAAiD;QACnD,CAAC;aAAM,IAAI,CAAC,CAAC,OAAO,CAAC,UAAU,CAAC,0BAA0B,CAAC,EAAE,CAAC;YAC5D,eAAe,GAAG,IAAI,0BAAc,CAAC,CAAC,CAAC,CAAC;YACxC,4DAA4D;YAC5D,iDAAiD;QACnD,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,GAAG,CAAC,SAAS,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC;YAClC,eAAe,GAAG,IAAI,8BAAkB,CACtC,CAAC,CAAC,IAAI,EACN,CAAC,CAAC,OAAO,EACT,wBAAY,CAAC,OAAO,CACrB,CAAC;QACJ,CAAC;QACD,OAAO,eAAe,CAAC;IACzB,CAAC;CACF;AAnED,kDAmEC","sourcesContent":["// Copyright 2020-2025 SubQuery Pte Ltd authors & contributors\n// SPDX-License-Identifier: GPL-3.0\n\nimport { EventEmitter2 } from '@nestjs/event-emitter';\nimport {\n ApiConnectionError,\n ApiErrorType,\n DisconnectionError,\n LargeResponseError,\n NetworkMetadataPayload,\n RateLimitError,\n TimeoutError,\n IApiConnectionSpecific,\n IBlock,\n} from '@subql/node-core';\nimport { ISolanaEndpointConfig, SolanaBlock } from '@subql/types-solana';\nimport { SolanaApi } from './api.solana';\nimport { SolanaDecoder } from './decoder';\n\nexport type FetchFunc = (\n api: SolanaApi,\n batch: number[],\n) => Promise<IBlock<SolanaBlock>[]>;\n\n// We use a function to get the fetch function because it can change depending on the skipBlocks feature\nexport type GetFetchFunc = () => FetchFunc;\n\nexport class SolanaApiConnection\n implements IApiConnectionSpecific<SolanaApi, never, IBlock<SolanaBlock>[]>\n{\n readonly networkMeta: NetworkMetadataPayload;\n\n private constructor(\n public unsafeApi: SolanaApi,\n private fetchBlocksBatches: GetFetchFunc,\n ) {\n this.networkMeta = {\n chain: unsafeApi.getGenesisHash(),\n specName: unsafeApi.getSpecName(),\n genesisHash: unsafeApi.getGenesisHash(),\n };\n }\n\n static async create(\n endpoint: string,\n fetchBlocksBatches: GetFetchFunc,\n eventEmitter: EventEmitter2,\n decoder: SolanaDecoder,\n config?: ISolanaEndpointConfig,\n ): Promise<SolanaApiConnection> {\n const api = await SolanaApi.create(endpoint, eventEmitter, decoder, config);\n\n return new SolanaApiConnection(api, fetchBlocksBatches);\n }\n\n safeApi(height: number): never {\n throw new Error(`Not Implemented: safeApi`);\n }\n\n async apiConnect(): Promise<void> {\n await this.unsafeApi.connect();\n }\n\n async apiDisconnect(): Promise<void> {\n await this.unsafeApi.disconnect();\n }\n\n async fetchBlocks(heights: number[]): Promise<IBlock<SolanaBlock>[]> {\n const blocks = await this.fetchBlocksBatches()(this.unsafeApi, heights);\n return blocks;\n }\n\n handleError = SolanaApiConnection.handleError;\n\n static handleError(e: Error): ApiConnectionError {\n let formatted_error: ApiConnectionError;\n if (e.message.startsWith('The operation was aborted due to timeout')) {\n formatted_error = new TimeoutError(e);\n //} else if (e.message.startsWith(`disconnected from `)) {\n // formatted_error = new DisconnectionError(e);\n } else if (e.message.startsWith(`Rate Limited at endpoint`)) {\n formatted_error = new RateLimitError(e);\n // } else if (e.message.includes(`Exceeded max limit of`)) {\n // formatted_error = new LargeResponseError(e);\n } else {\n console.log('ERRROR ', e.message);\n formatted_error = new ApiConnectionError(\n e.name,\n e.message,\n ApiErrorType.Default,\n );\n }\n return formatted_error;\n }\n}\n"]}
1
+ {"version":3,"file":"api.connection.js","sourceRoot":"","sources":["../../src/solana/api.connection.ts"],"names":[],"mappings":";AAAA,8DAA8D;AAC9D,mCAAmC;;;AAGnC,gDAU0B;AAE1B,6CAAyC;AAWzC,MAAa,mBAAmB;IAMrB;IACC;IAJD,WAAW,CAAyB;IAE7C,YACS,SAAoB,EACnB,kBAAgC;QADjC,cAAS,GAAT,SAAS,CAAW;QACnB,uBAAkB,GAAlB,kBAAkB,CAAc;QAExC,IAAI,CAAC,WAAW,GAAG;YACjB,KAAK,EAAE,SAAS,CAAC,cAAc,EAAE;YACjC,QAAQ,EAAE,SAAS,CAAC,WAAW,EAAE;YACjC,WAAW,EAAE,SAAS,CAAC,cAAc,EAAE;SACxC,CAAC;IACJ,CAAC;IAED,MAAM,CAAC,KAAK,CAAC,MAAM,CACjB,QAAgB,EAChB,kBAAgC,EAChC,YAA2B,EAC3B,OAAsB,EACtB,MAA8B;QAE9B,MAAM,GAAG,GAAG,MAAM,sBAAS,CAAC,MAAM,CAAC,QAAQ,EAAE,YAAY,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC;QAE5E,OAAO,IAAI,mBAAmB,CAAC,GAAG,EAAE,kBAAkB,CAAC,CAAC;IAC1D,CAAC;IAED,OAAO,CAAC,MAAc;QACpB,MAAM,IAAI,KAAK,CAAC,0BAA0B,CAAC,CAAC;IAC9C,CAAC;IAED,KAAK,CAAC,UAAU;QACd,MAAM,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,CAAC;IACjC,CAAC;IAED,KAAK,CAAC,aAAa;QACjB,MAAM,IAAI,CAAC,SAAS,CAAC,UAAU,EAAE,CAAC;IACpC,CAAC;IAED,KAAK,CAAC,WAAW,CAAC,OAAiB;QACjC,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,kBAAkB,EAAE,CAAC,IAAI,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;QACxE,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,WAAW,GAAG,mBAAmB,CAAC,WAAW,CAAC;IAE9C,MAAM,CAAC,WAAW,CAAC,CAAQ;QACzB,IAAI,eAAmC,CAAC;QACxC,IAAI,CAAC,CAAC,OAAO,CAAC,UAAU,CAAC,0CAA0C,CAAC,EAAE,CAAC;YACrE,eAAe,GAAG,IAAI,wBAAY,CAAC,CAAC,CAAC,CAAC;YACtC,0DAA0D;YAC1D,iDAAiD;QACnD,CAAC;aAAM,IAAI,CAAC,CAAC,OAAO,CAAC,UAAU,CAAC,0BAA0B,CAAC,EAAE,CAAC;YAC5D,eAAe,GAAG,IAAI,0BAAc,CAAC,CAAC,CAAC,CAAC;YACxC,4DAA4D;YAC5D,iDAAiD;QACnD,CAAC;aAAM,CAAC;YACN,eAAe,GAAG,IAAI,8BAAkB,CACtC,CAAC,CAAC,IAAI,EACN,CAAC,CAAC,OAAO,EACT,wBAAY,CAAC,OAAO,CACrB,CAAC;QACJ,CAAC;QACD,OAAO,eAAe,CAAC;IACzB,CAAC;CACF;AAlED,kDAkEC","sourcesContent":["// Copyright 2020-2025 SubQuery Pte Ltd authors & contributors\n// SPDX-License-Identifier: GPL-3.0\n\nimport { EventEmitter2 } from '@nestjs/event-emitter';\nimport {\n ApiConnectionError,\n ApiErrorType,\n DisconnectionError,\n LargeResponseError,\n NetworkMetadataPayload,\n RateLimitError,\n TimeoutError,\n IApiConnectionSpecific,\n IBlock,\n} from '@subql/node-core';\nimport { ISolanaEndpointConfig, SolanaBlock } from '@subql/types-solana';\nimport { SolanaApi } from './api.solana';\nimport { SolanaDecoder } from './decoder';\n\nexport type FetchFunc = (\n api: SolanaApi,\n batch: number[],\n) => Promise<IBlock<SolanaBlock>[]>;\n\n// We use a function to get the fetch function because it can change depending on the skipBlocks feature\nexport type GetFetchFunc = () => FetchFunc;\n\nexport class SolanaApiConnection\n implements IApiConnectionSpecific<SolanaApi, never, IBlock<SolanaBlock>[]>\n{\n readonly networkMeta: NetworkMetadataPayload;\n\n private constructor(\n public unsafeApi: SolanaApi,\n private fetchBlocksBatches: GetFetchFunc,\n ) {\n this.networkMeta = {\n chain: unsafeApi.getGenesisHash(),\n specName: unsafeApi.getSpecName(),\n genesisHash: unsafeApi.getGenesisHash(),\n };\n }\n\n static async create(\n endpoint: string,\n fetchBlocksBatches: GetFetchFunc,\n eventEmitter: EventEmitter2,\n decoder: SolanaDecoder,\n config?: ISolanaEndpointConfig,\n ): Promise<SolanaApiConnection> {\n const api = await SolanaApi.create(endpoint, eventEmitter, decoder, config);\n\n return new SolanaApiConnection(api, fetchBlocksBatches);\n }\n\n safeApi(height: number): never {\n throw new Error(`Not Implemented: safeApi`);\n }\n\n async apiConnect(): Promise<void> {\n await this.unsafeApi.connect();\n }\n\n async apiDisconnect(): Promise<void> {\n await this.unsafeApi.disconnect();\n }\n\n async fetchBlocks(heights: number[]): Promise<IBlock<SolanaBlock>[]> {\n const blocks = await this.fetchBlocksBatches()(this.unsafeApi, heights);\n return blocks;\n }\n\n handleError = SolanaApiConnection.handleError;\n\n static handleError(e: Error): ApiConnectionError {\n let formatted_error: ApiConnectionError;\n if (e.message.startsWith('The operation was aborted due to timeout')) {\n formatted_error = new TimeoutError(e);\n //} else if (e.message.startsWith(`disconnected from `)) {\n // formatted_error = new DisconnectionError(e);\n } else if (e.message.startsWith(`Rate Limited at endpoint`)) {\n formatted_error = new RateLimitError(e);\n // } else if (e.message.includes(`Exceeded max limit of`)) {\n // formatted_error = new LargeResponseError(e);\n } else {\n formatted_error = new ApiConnectionError(\n e.name,\n e.message,\n ApiErrorType.Default,\n );\n }\n return formatted_error;\n }\n}\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@subql/node-solana",
3
- "version": "6.0.1-0",
3
+ "version": "6.0.2-0",
4
4
  "description": "",
5
5
  "author": "Ian He",
6
6
  "license": "GPL-3.0",
@@ -65,5 +65,5 @@
65
65
  "/dist",
66
66
  "/bin"
67
67
  ],
68
- "stableVersion": "6.0.0"
68
+ "stableVersion": "6.0.1"
69
69
  }