diff --git a/package.json b/package.json index 0515862865..948a916736 100644 --- a/package.json +++ b/package.json @@ -33,7 +33,7 @@ "ts-loader": "^9.2.6", "ts-node": "^10.4.0", "tsconfig-paths": "^3.12.0", - "typescript": "^5.5.4" + "typescript": "^5.7.3" }, "resolutions": { "node-fetch": "2.6.7" diff --git a/packages/common-ethereum/CHANGELOG.md b/packages/common-ethereum/CHANGELOG.md index c2ba571f92..c6a1fbef1f 100644 --- a/packages/common-ethereum/CHANGELOG.md +++ b/packages/common-ethereum/CHANGELOG.md @@ -7,6 +7,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ## [Unreleased] ### Changed - Update header year to 2025 (#362) +- Update `@subql/common` (#363) ## [4.6.1] - 2025-01-28 ### Changed diff --git a/packages/common-ethereum/package.json b/packages/common-ethereum/package.json index d19196e13a..8d5335c114 100644 --- a/packages/common-ethereum/package.json +++ b/packages/common-ethereum/package.json @@ -14,7 +14,7 @@ "main": "dist/index.js", "license": "GPL-3.0", "dependencies": { - "@subql/common": "^5.3.0", + "@subql/common": "^5.4.0", "@subql/types-ethereum": "workspace:*", "@typechain/ethers-v5": "^11.1.1", "@zilliqa-js/crypto": "^3.5.0", diff --git a/packages/node/CHANGELOG.md b/packages/node/CHANGELOG.md index 8c5572f2af..efe22d312b 100644 --- a/packages/node/CHANGELOG.md +++ b/packages/node/CHANGELOG.md @@ -7,6 +7,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ## [Unreleased] ### Changed - Update header year to 2025 (#362) +- Update nestjs dependencies (#363) +- Update node core and implement blockchain service (#363) ## [5.4.0] - 2025-01-28 ### Changed diff --git a/packages/node/package.json b/packages/node/package.json index 01a96bdc41..c60a515e0b 100644 --- a/packages/node/package.json +++ b/packages/node/package.json @@ -19,14 +19,14 @@ "subql-node-ethereum": "./bin/run" }, "dependencies": { - "@nestjs/common": "^9.4.0", - "@nestjs/core": "^9.4.0", + "@nestjs/common": "^11.0.8", + "@nestjs/core": "^11.0.8", "@nestjs/event-emitter": "^2.0.0", - "@nestjs/platform-express": "^9.4.0", - "@nestjs/schedule": "^3.0.1", - "@subql/common": "^5.3.0", + "@nestjs/platform-express": "^11.0.8", + "@nestjs/schedule": "^5.0.1", + "@subql/common": "^5.4.0", "@subql/common-ethereum": "workspace:*", - "@subql/node-core": "^16.2.0", + "@subql/node-core": "^17.0.0", "@subql/testing": "^2.2.1", "@subql/types-ethereum": "workspace:*", "cacheable-lookup": "6", @@ -42,8 +42,8 @@ "@subql/utils": "*" }, "devDependencies": { - "@nestjs/schematics": "^9.2.0", - "@nestjs/testing": "^9.4.0", + "@nestjs/schematics": "^11.0.0", + "@nestjs/testing": "^11.0.8", "@types/express": "^4.17.13", "@types/jest": "^27.4.0", "@types/lodash": "^4.14.178", diff --git a/packages/node/src/indexer/project.service.test.ts b/packages/node/src/blockchain.service.test.ts similarity index 53% rename from packages/node/src/indexer/project.service.test.ts rename to packages/node/src/blockchain.service.test.ts index 2d6a7ead56..7f69acdcab 100644 --- a/packages/node/src/indexer/project.service.test.ts +++ b/packages/node/src/blockchain.service.test.ts @@ -2,8 +2,8 @@ // SPDX-License-Identifier: GPL-3.0 import { EventEmitter2 } from '@nestjs/event-emitter'; -import { EthereumApi, EthereumApiService } from '../ethereum'; -import { ProjectService } from './project.service'; +import { BlockchainService } from './blockchain.service'; +import { EthereumApi, EthereumApiService } from './ethereum'; const HTTP_ENDPOINT = 'https://ethereum.rpc.subquery.network/public'; @@ -17,32 +17,17 @@ const mockApiService = (): EthereumApiService => { } as any; }; -describe('ProjectService', () => { - let projectService: ProjectService; +describe('BlockchainService', () => { + let blockchainService: BlockchainService; beforeEach(() => { const apiService = mockApiService(); - projectService = new ProjectService( - null as any, - apiService, - null as any, - null as any, - null as any, - null as any, - null as any, - null as any, - {} as any, - null as any, - null as any, - null as any, - ); + blockchainService = new BlockchainService(apiService); }); it('can get a block timestamps', async () => { - const timestamp = await (projectService as any).getBlockTimestamp( - 4_000_000, - ); + const timestamp = await blockchainService.getBlockTimestamp(4_000_000); expect(timestamp).toEqual(new Date('2017-07-09T20:52:47.000Z')); }); diff --git a/packages/node/src/blockchain.service.ts b/packages/node/src/blockchain.service.ts new file mode 100644 index 0000000000..685121ae16 --- /dev/null +++ b/packages/node/src/blockchain.service.ts @@ -0,0 +1,155 @@ +// Copyright 2020-2025 SubQuery Pte Ltd authors & contributors +// SPDX-License-Identifier: GPL-3.0 + +import { Inject } from '@nestjs/common'; +import { + EthereumHandlerKind, + EthereumRuntimeDataSourceImpl, + isCustomDs, + isRuntimeDs, + SubqlEthereumDataSource, +} from '@subql/common-ethereum'; +import { + DatasourceParams, + Header, + IBlock, + IBlockchainService, +} from '@subql/node-core'; +import { + EthereumBlock, + LightEthereumBlock, + SubqlCustomDatasource, + SubqlCustomHandler, + SubqlDatasource, + SubqlMapping, + SubqlRuntimeDatasource, +} from '@subql/types-ethereum'; +import { plainToClass } from 'class-transformer'; +import { validateSync } from 'class-validator'; +import { SubqueryProject } from './configure/SubqueryProject'; +import { EthereumApiService } from './ethereum'; +import SafeEthProvider from './ethereum/safe-api'; +import { calcInterval, ethereumBlockToHeader } from './ethereum/utils.ethereum'; +import { BlockContent, getBlockSize } from './indexer/types'; +import { IIndexerWorker } from './indexer/worker/worker'; + +const BLOCK_TIME_VARIANCE = 5000; + +const INTERVAL_PERCENT = 0.9; + +// eslint-disable-next-line @typescript-eslint/no-var-requires +const { version: packageVersion } = require('../package.json'); + +export class BlockchainService + implements + IBlockchainService< + SubqlDatasource, + SubqlCustomDatasource>, + SubqueryProject, + SafeEthProvider, + LightEthereumBlock, + EthereumBlock, + IIndexerWorker + > +{ + blockHandlerKind = EthereumHandlerKind.Block; + isCustomDs = isCustomDs; + isRuntimeDs = isRuntimeDs; + packageVersion = packageVersion; + + constructor(@Inject('APIService') private apiService: EthereumApiService) {} + + async fetchBlocks( + blockNums: number[], + ): Promise[] | IBlock[]> { + return this.apiService.fetchBlocks(blockNums); + } + + async fetchBlockWorker( + worker: IIndexerWorker, + blockNum: number, + context: { workers: IIndexerWorker[] }, + ): Promise
{ + return worker.fetchBlock(blockNum, 0); + } + + getBlockSize(block: IBlock): number { + return getBlockSize(block.block); + } + + async getFinalizedHeader(): Promise
{ + const block = await this.apiService.api.getFinalizedBlock(); + return ethereumBlockToHeader(block); + } + + async getBestHeight(): Promise { + return this.apiService.api.getBestBlockHeight(); + } + + // eslint-disable-next-line @typescript-eslint/require-await + async getChainInterval(): Promise { + const CHAIN_INTERVAL = calcInterval(this.apiService.api) * INTERVAL_PERCENT; + + return Math.min(BLOCK_TIME_VARIANCE, CHAIN_INTERVAL); + } + + async getHeaderForHash(hash: string): Promise
{ + const block = await this.apiService.api.getBlockByHeightOrHash(hash); + return ethereumBlockToHeader(block); + } + + async getHeaderForHeight(height: number): Promise
{ + const block = await this.apiService.api.getBlockByHeightOrHash(height); + return ethereumBlockToHeader(block); + } + + // eslint-disable-next-line @typescript-eslint/require-await + async getSafeApi(block: BlockContent): Promise { + return this.apiService.safeApi(block.number); + } + + async getBlockTimestamp(height: number): Promise { + const block = await this.apiService.unsafeApi.api.getBlock(height); + + return new Date(block.timestamp * 1000); // TODO test and make sure its in MS not S + } + + // eslint-disable-next-line @typescript-eslint/require-await + async updateDynamicDs( + params: DatasourceParams, + dsObj: SubqlEthereumDataSource | SubqlCustomDatasource, + ): Promise { + if (isCustomDs(dsObj)) { + dsObj.processor.options = { + ...dsObj.processor.options, + ...params.args, + }; + // TODO how to retain this functionality + // await this.dsProcessorService.validateCustomDs([dsObj]); + } else if (isRuntimeDs(dsObj)) { + dsObj.options = { + ...dsObj.options, + ...params.args, + }; + + const parsedDs = plainToClass(EthereumRuntimeDataSourceImpl, dsObj); + + const errors = validateSync(parsedDs, { + whitelist: true, + forbidNonWhitelisted: false, + }); + if (errors.length) { + throw new Error( + `Dynamic ds is invalid\n${errors + .map((e) => e.toString()) + .join('\n')}`, + ); + } + } + // return dsObj; + } + + onProjectChange(project: SubqueryProject): Promise | void { + this.apiService.updateBlockFetching(); + } +} diff --git a/packages/node/src/ethereum/api.service.ethereum.test.ts b/packages/node/src/ethereum/api.service.ethereum.test.ts index 04ccbc510f..5f5fc08da4 100644 --- a/packages/node/src/ethereum/api.service.ethereum.test.ts +++ b/packages/node/src/ethereum/api.service.ethereum.test.ts @@ -2,7 +2,7 @@ // SPDX-License-Identifier: GPL-3.0 import { INestApplication } from '@nestjs/common'; -import { EventEmitterModule } from '@nestjs/event-emitter'; +import { EventEmitter2, EventEmitterModule } from '@nestjs/event-emitter'; import { Test } from '@nestjs/testing'; import { ConnectionPoolService, @@ -47,7 +47,16 @@ const prepareApiService = async ( provide: 'ISubqueryProject', useFactory: () => testSubqueryProject(endpoint), }, - EthereumApiService, + { + provide: EthereumApiService, + useFactory: EthereumApiService.init, + inject: [ + 'ISubqueryProject', + ConnectionPoolService, + EventEmitter2, + NodeConfig, + ], + }, ], imports: [EventEmitterModule.forRoot()], }).compile(); @@ -55,7 +64,6 @@ const prepareApiService = async ( const app = module.createNestApplication(); await app.init(); const apiService = app.get(EthereumApiService); - await apiService.init(); return [apiService, app]; }; diff --git a/packages/node/src/ethereum/api.service.ethereum.ts b/packages/node/src/ethereum/api.service.ethereum.ts index fc0d8920cf..6a1368f1c1 100644 --- a/packages/node/src/ethereum/api.service.ethereum.ts +++ b/packages/node/src/ethereum/api.service.ethereum.ts @@ -48,7 +48,7 @@ export class EthereumApiService extends ApiService< }; private nodeConfig: EthereumNodeConfig; - constructor( + private constructor( @Inject('ISubqueryProject') private project: SubqueryProject, connectionPoolService: ConnectionPoolService, eventEmitter: EventEmitter2, @@ -60,31 +60,45 @@ export class EthereumApiService extends ApiService< this.updateBlockFetching(); } - async init(): Promise { + static async init( + project: SubqueryProject, + connectionPoolService: ConnectionPoolService, + eventEmitter: EventEmitter2, + nodeConfig: NodeConfig, + ): Promise { let network: EthereumNetworkConfig; try { - network = this.project.network; + network = project.network; } catch (e) { exitWithError(new Error(`Failed to init api`, { cause: e }), logger); } - if (this.nodeConfig.primaryNetworkEndpoint) { - const [endpoint, config] = this.nodeConfig.primaryNetworkEndpoint; + if (nodeConfig.primaryNetworkEndpoint) { + const [endpoint, config] = nodeConfig.primaryNetworkEndpoint; (network.endpoint as Record)[endpoint] = config; } - await this.createConnections(network, (endpoint, config) => + const ethNodeConfig = new EthereumNodeConfig(nodeConfig); + + const apiService = new EthereumApiService( + project, + connectionPoolService, + eventEmitter, + nodeConfig, + ); + + await apiService.createConnections(network, (endpoint, config) => EthereumApiConnection.create( endpoint, - this.nodeConfig.blockConfirmations, - this.fetchBlocksBatches, - this.eventEmitter, - this.nodeConfig.unfinalizedBlocks, + ethNodeConfig.blockConfirmations, + apiService.fetchBlocksBatches, + eventEmitter, + nodeConfig.unfinalizedBlocks, config, ), ); - return this; + return apiService; } protected metadataMismatchError( diff --git a/packages/node/src/indexer/blockDispatcher/block-dispatcher.service.ts b/packages/node/src/indexer/blockDispatcher/block-dispatcher.service.ts deleted file mode 100644 index f9061c67c4..0000000000 --- a/packages/node/src/indexer/blockDispatcher/block-dispatcher.service.ts +++ /dev/null @@ -1,72 +0,0 @@ -// Copyright 2020-2025 SubQuery Pte Ltd authors & contributors -// SPDX-License-Identifier: GPL-3.0 - -import { Inject, Injectable, OnApplicationShutdown } from '@nestjs/common'; -import { EventEmitter2 } from '@nestjs/event-emitter'; -import { - NodeConfig, - IStoreModelProvider, - StoreService, - IProjectService, - BlockDispatcher, - ProcessBlockResponse, - ApiService, - IProjectUpgradeService, - PoiSyncService, - IBlock, -} from '@subql/node-core'; -import { - EthereumProjectDs, - SubqueryProject, -} from '../../configure/SubqueryProject'; -import { IndexerManager } from '../indexer.manager'; -import { BlockContent, getBlockSize } from '../types'; - -/** - * @description Intended to behave the same as WorkerBlockDispatcherService but doesn't use worker threads or any parallel processing - */ -@Injectable() -export class BlockDispatcherService - extends BlockDispatcher - implements OnApplicationShutdown -{ - constructor( - apiService: ApiService, - nodeConfig: NodeConfig, - private indexerManager: IndexerManager, - eventEmitter: EventEmitter2, - @Inject('IProjectService') - projectService: IProjectService, - @Inject('IProjectUpgradeService') - projectUpgradeService: IProjectUpgradeService, - storeService: StoreService, - @Inject('IStoreModelProvider') storeModelProvider: IStoreModelProvider, - poiSyncService: PoiSyncService, - @Inject('ISubqueryProject') project: SubqueryProject, - ) { - super( - nodeConfig, - eventEmitter, - projectService, - projectUpgradeService, - storeService, - storeModelProvider, - poiSyncService, - project, - apiService.fetchBlocks.bind(apiService), - ); - } - - protected async indexBlock( - block: IBlock, - ): Promise { - return this.indexerManager.indexBlock( - block, - await this.projectService.getDataSources(block.getHeader().blockHeight), - ); - } - - protected getBlockSize(block: IBlock): number { - return getBlockSize(block.block); - } -} diff --git a/packages/node/src/indexer/blockDispatcher/ethereum-block-dispatcher.ts b/packages/node/src/indexer/blockDispatcher/ethereum-block-dispatcher.ts deleted file mode 100644 index f7d3580265..0000000000 --- a/packages/node/src/indexer/blockDispatcher/ethereum-block-dispatcher.ts +++ /dev/null @@ -1,10 +0,0 @@ -// Copyright 2020-2025 SubQuery Pte Ltd authors & contributors -// SPDX-License-Identifier: GPL-3.0 - -import { IBlockDispatcher } from '@subql/node-core'; -import { EthereumBlock } from '@subql/types-ethereum'; - -export interface IEthereumBlockDispatcher - extends IBlockDispatcher { - init(onDynamicDsCreated: (height: number) => Promise): Promise; -} diff --git a/packages/node/src/indexer/blockDispatcher/index.ts b/packages/node/src/indexer/blockDispatcher/index.ts deleted file mode 100644 index 0293016ab6..0000000000 --- a/packages/node/src/indexer/blockDispatcher/index.ts +++ /dev/null @@ -1,12 +0,0 @@ -// Copyright 2020-2025 SubQuery Pte Ltd authors & contributors -// SPDX-License-Identifier: GPL-3.0 - -import { BlockDispatcherService } from './block-dispatcher.service'; -import { IEthereumBlockDispatcher } from './ethereum-block-dispatcher'; -import { WorkerBlockDispatcherService } from './worker-block-dispatcher.service'; - -export { - BlockDispatcherService, - WorkerBlockDispatcherService, - IEthereumBlockDispatcher, -}; diff --git a/packages/node/src/indexer/blockDispatcher/worker-block-dispatcher.service.ts b/packages/node/src/indexer/blockDispatcher/worker-block-dispatcher.service.ts deleted file mode 100644 index 76c40d74c0..0000000000 --- a/packages/node/src/indexer/blockDispatcher/worker-block-dispatcher.service.ts +++ /dev/null @@ -1,95 +0,0 @@ -// Copyright 2020-2025 SubQuery Pte Ltd authors & contributors -// SPDX-License-Identifier: GPL-3.0 - -import path from 'path'; -import { Inject, Injectable, OnApplicationShutdown } from '@nestjs/common'; -import { EventEmitter2 } from '@nestjs/event-emitter'; -import { - NodeConfig, - StoreService, - IStoreModelProvider, - IProjectService, - WorkerBlockDispatcher, - ConnectionPoolStateManager, - IProjectUpgradeService, - PoiSyncService, - InMemoryCacheService, - createIndexerWorker, - MonitorServiceInterface, - Header, -} from '@subql/node-core'; -import { EthereumBlock } from '@subql/types-ethereum'; -import { - EthereumProjectDs, - SubqueryProject, -} from '../../configure/SubqueryProject'; -import { EthereumApiConnection } from '../../ethereum/api.connection'; -import { DynamicDsService } from '../dynamic-ds.service'; -import { BlockContent } from '../types'; -import { UnfinalizedBlocksService } from '../unfinalizedBlocks.service'; -import { IIndexerWorker } from '../worker/worker'; - -type IndexerWorker = IIndexerWorker & { - terminate: () => Promise; -}; - -@Injectable() -export class WorkerBlockDispatcherService - extends WorkerBlockDispatcher - implements OnApplicationShutdown -{ - constructor( - nodeConfig: NodeConfig, - eventEmitter: EventEmitter2, - @Inject('IProjectService') - projectService: IProjectService, - @Inject('IProjectUpgradeService') - projectUpgadeService: IProjectUpgradeService, - cacheService: InMemoryCacheService, - storeService: StoreService, - @Inject('IStoreModelProvider') storeModelProvider: IStoreModelProvider, - poiSyncService: PoiSyncService, - @Inject('ISubqueryProject') project: SubqueryProject, - dynamicDsService: DynamicDsService, - unfinalizedBlocksSevice: UnfinalizedBlocksService, - connectionPoolState: ConnectionPoolStateManager, - monitorService?: MonitorServiceInterface, - ) { - super( - nodeConfig, - eventEmitter, - projectService, - projectUpgadeService, - storeService, - storeModelProvider, - poiSyncService, - project, - () => - createIndexerWorker< - IIndexerWorker, - EthereumApiConnection, - BlockContent, - EthereumProjectDs - >( - path.resolve(__dirname, '../../../dist/indexer/worker/worker.js'), - [], - storeService.getStore(), - cacheService.getCache(), - dynamicDsService, - unfinalizedBlocksSevice, - connectionPoolState, - project.root, - projectService.startHeight, - monitorService, - ), - monitorService, - ); - } - - protected async fetchBlock( - worker: IndexerWorker, - height: number, - ): Promise
{ - return worker.fetchBlock(height, 0 /* Unused with ethereum*/); - } -} diff --git a/packages/node/src/indexer/dictionary/ethDictionary.service.ts b/packages/node/src/indexer/dictionary/ethDictionary.service.ts index 88cc670759..9405674b81 100644 --- a/packages/node/src/indexer/dictionary/ethDictionary.service.ts +++ b/packages/node/src/indexer/dictionary/ethDictionary.service.ts @@ -4,12 +4,7 @@ import { Inject, Injectable } from '@nestjs/common'; import { EventEmitter2 } from '@nestjs/event-emitter'; import { NETWORK_FAMILY } from '@subql/common'; -import { - NodeConfig, - DictionaryService, - ApiService, - getLogger, -} from '@subql/node-core'; +import { NodeConfig, DictionaryService, getLogger } from '@subql/node-core'; import { EthereumBlock, SubqlDatasource } from '@subql/types-ethereum'; import { SubqueryProject } from '../../configure/SubqueryProject'; import { EthereumApiService } from '../../ethereum'; @@ -27,7 +22,7 @@ export class EthDictionaryService extends DictionaryService< @Inject('ISubqueryProject') protected project: SubqueryProject, nodeConfig: NodeConfig, eventEmitter: EventEmitter2, - @Inject(ApiService) private apiService: EthereumApiService, + @Inject('APIService') private apiService: EthereumApiService, ) { super(project.network.chainId, nodeConfig, eventEmitter); } diff --git a/packages/node/src/indexer/ds-processor.service.ts b/packages/node/src/indexer/ds-processor.service.ts deleted file mode 100644 index 6b6d7b09de..0000000000 --- a/packages/node/src/indexer/ds-processor.service.ts +++ /dev/null @@ -1,20 +0,0 @@ -// Copyright 2020-2025 SubQuery Pte Ltd authors & contributors -// SPDX-License-Identifier: GPL-3.0 - -import { Injectable } from '@nestjs/common'; -import { - isCustomDs, - SubqlEthereumCustomDataSource, - SubqlEthereumDataSource, - SubqlDatasourceProcessor, -} from '@subql/common-ethereum'; -import { BaseDsProcessorService } from '@subql/node-core'; - -@Injectable() -export class DsProcessorService extends BaseDsProcessorService< - SubqlEthereumDataSource, - SubqlEthereumCustomDataSource, - SubqlDatasourceProcessor> -> { - protected isCustomDs = isCustomDs; -} diff --git a/packages/node/src/indexer/dynamic-ds.service.ts b/packages/node/src/indexer/dynamic-ds.service.ts deleted file mode 100644 index a86159b058..0000000000 --- a/packages/node/src/indexer/dynamic-ds.service.ts +++ /dev/null @@ -1,74 +0,0 @@ -// Copyright 2020-2025 SubQuery Pte Ltd authors & contributors -// SPDX-License-Identifier: GPL-3.0 - -import { Inject, Injectable } from '@nestjs/common'; -import { - EthereumRuntimeDataSourceImpl, - isCustomDs, - isRuntimeDs, -} from '@subql/common-ethereum'; -import { - DatasourceParams, - DynamicDsService as BaseDynamicDsService, -} from '@subql/node-core'; -import { plainToClass } from 'class-transformer'; -import { validateSync } from 'class-validator'; -import { - EthereumProjectDs, - SubqueryProject, -} from '../configure/SubqueryProject'; -import { DsProcessorService } from './ds-processor.service'; - -@Injectable() -export class DynamicDsService extends BaseDynamicDsService< - EthereumProjectDs, - SubqueryProject -> { - constructor( - private readonly dsProcessorService: DsProcessorService, - @Inject('ISubqueryProject') project: SubqueryProject, - ) { - super(project); - } - - protected async getDatasource( - params: DatasourceParams, - ): Promise { - const dsObj = this.getTemplate( - params.templateName, - params.startBlock, - ); - - try { - if (isCustomDs(dsObj)) { - dsObj.processor.options = { - ...dsObj.processor.options, - ...params.args, - }; - await this.dsProcessorService.validateCustomDs([dsObj]); - } else if (isRuntimeDs(dsObj)) { - dsObj.options = { - ...dsObj.options, - ...params.args, - }; - - const parsedDs = plainToClass(EthereumRuntimeDataSourceImpl, dsObj); - - const errors = validateSync(parsedDs, { - whitelist: true, - forbidNonWhitelisted: false, - }); - if (errors.length) { - throw new Error( - `Dynamic ds is invalid\n${errors - .map((e) => e.toString()) - .join('\n')}`, - ); - } - } - return dsObj; - } catch (e: any) { - throw new Error(`Unable to create dynamic datasource.\n ${e.message}`); - } - } -} diff --git a/packages/node/src/indexer/fetch.module.ts b/packages/node/src/indexer/fetch.module.ts index 23ff945f20..374d830436 100644 --- a/packages/node/src/indexer/fetch.module.ts +++ b/packages/node/src/indexer/fetch.module.ts @@ -1,11 +1,12 @@ // Copyright 2020-2025 SubQuery Pte Ltd authors & contributors // SPDX-License-Identifier: GPL-3.0 +import path from 'node:path'; import { Module } from '@nestjs/common'; import { EventEmitter2 } from '@nestjs/event-emitter'; +import { SubqlEthereumDataSource } from '@subql/common-ethereum'; import { StoreService, - ApiService, NodeConfig, ConnectionPoolService, ConnectionPoolStateManager, @@ -15,42 +16,28 @@ import { MonitorService, CoreModule, IStoreModelProvider, + ProjectService, + DynamicDsService, + WorkerBlockDispatcher, + BlockDispatcher, + DsProcessorService, + FetchService, + DictionaryService, } from '@subql/node-core'; +import { BlockchainService } from '../blockchain.service'; import { SubqueryProject } from '../configure/SubqueryProject'; import { EthereumApiConnection } from '../ethereum/api.connection'; import { EthereumApiService } from '../ethereum/api.service.ethereum'; -import { - BlockDispatcherService, - WorkerBlockDispatcherService, -} from './blockDispatcher'; import { EthDictionaryService } from './dictionary/ethDictionary.service'; -import { DsProcessorService } from './ds-processor.service'; -import { DynamicDsService } from './dynamic-ds.service'; -import { FetchService } from './fetch.service'; import { IndexerManager } from './indexer.manager'; -import { ProjectService } from './project.service'; import { UnfinalizedBlocksService } from './unfinalizedBlocks.service'; @Module({ imports: [CoreModule], providers: [ { - provide: ApiService, - useFactory: async ( - project: SubqueryProject, - connectionPoolService: ConnectionPoolService, - eventEmitter: EventEmitter2, - nodeConfig: NodeConfig, - ) => { - const apiService = new EthereumApiService( - project, - connectionPoolService, - eventEmitter, - nodeConfig, - ); - await apiService.init(); - return apiService; - }, + provide: 'APIService', + useFactory: EthereumApiService.init, inject: [ 'ISubqueryProject', ConnectionPoolService, @@ -58,46 +45,51 @@ import { UnfinalizedBlocksService } from './unfinalizedBlocks.service'; NodeConfig, ], }, + { + provide: 'IBlockchainService', + useClass: BlockchainService, + }, IndexerManager, { provide: 'IBlockDispatcher', useFactory: ( nodeConfig: NodeConfig, eventEmitter: EventEmitter2, - projectService: ProjectService, + projectService: ProjectService, projectUpgradeService: IProjectUpgradeService, - apiService: EthereumApiService, - indexerManager: IndexerManager, cacheService: InMemoryCacheService, storeService: StoreService, storeModelProvider: IStoreModelProvider, poiSyncService: PoiSyncService, project: SubqueryProject, - dynamicDsService: DynamicDsService, + dynamicDsService: DynamicDsService, unfinalizedBlocks: UnfinalizedBlocksService, connectionPoolState: ConnectionPoolStateManager, + blockchainService: BlockchainService, + indexerManager: IndexerManager, monitorService?: MonitorService, ) => nodeConfig.workers - ? new WorkerBlockDispatcherService( + ? new WorkerBlockDispatcher( nodeConfig, eventEmitter, projectService, projectUpgradeService, - cacheService, storeService, storeModelProvider, + cacheService, poiSyncService, - project, dynamicDsService, unfinalizedBlocks, connectionPoolState, + project, + blockchainService, + path.resolve(__dirname, '../../dist/indexer/worker/worker.js'), + [], monitorService, ) - : new BlockDispatcherService( - apiService, + : new BlockDispatcher( nodeConfig, - indexerManager, eventEmitter, projectService, projectUpgradeService, @@ -105,34 +97,42 @@ import { UnfinalizedBlocksService } from './unfinalizedBlocks.service'; storeModelProvider, poiSyncService, project, + blockchainService, + indexerManager, ), inject: [ NodeConfig, EventEmitter2, 'IProjectService', 'IProjectUpgradeService', - ApiService, - IndexerManager, InMemoryCacheService, StoreService, 'IStoreModelProvider', PoiSyncService, 'ISubqueryProject', DynamicDsService, - UnfinalizedBlocksService, + 'IUnfinalizedBlocksService', ConnectionPoolStateManager, + 'IBlockchainService', + IndexerManager, MonitorService, ], }, FetchService, - EthDictionaryService, + { + provide: DictionaryService, + useClass: EthDictionaryService, + }, DsProcessorService, DynamicDsService, { useClass: ProjectService, provide: 'IProjectService', }, - UnfinalizedBlocksService, + { + provide: 'IUnfinalizedBlocksService', + useClass: UnfinalizedBlocksService, + }, ], }) export class FetchModule {} diff --git a/packages/node/src/indexer/fetch.service.ts b/packages/node/src/indexer/fetch.service.ts deleted file mode 100644 index 109fa8b59d..0000000000 --- a/packages/node/src/indexer/fetch.service.ts +++ /dev/null @@ -1,96 +0,0 @@ -// Copyright 2020-2025 SubQuery Pte Ltd authors & contributors -// SPDX-License-Identifier: GPL-3.0 - -import { Inject, Injectable } from '@nestjs/common'; -import { EventEmitter2 } from '@nestjs/event-emitter'; -import { SchedulerRegistry } from '@nestjs/schedule'; - -import { isCustomDs, EthereumHandlerKind } from '@subql/common-ethereum'; -import { - NodeConfig, - BaseFetchService, - ApiService, - getModulos, - Header, - IStoreModelProvider, -} from '@subql/node-core'; -import { EthereumBlock, SubqlDatasource } from '@subql/types-ethereum'; -import { EthereumApi } from '../ethereum'; -import { - calcInterval, - ethereumBlockToHeader, -} from '../ethereum/utils.ethereum'; -import { IEthereumBlockDispatcher } from './blockDispatcher'; -import { EthDictionaryService } from './dictionary/ethDictionary.service'; -import { ProjectService } from './project.service'; -import { UnfinalizedBlocksService } from './unfinalizedBlocks.service'; - -const BLOCK_TIME_VARIANCE = 5000; - -const INTERVAL_PERCENT = 0.9; - -@Injectable() -export class FetchService extends BaseFetchService< - SubqlDatasource, - IEthereumBlockDispatcher, - EthereumBlock -> { - constructor( - private apiService: ApiService, - nodeConfig: NodeConfig, - @Inject('IProjectService') projectService: ProjectService, - @Inject('IBlockDispatcher') - blockDispatcher: IEthereumBlockDispatcher, - dictionaryService: EthDictionaryService, - unfinalizedBlocksService: UnfinalizedBlocksService, - eventEmitter: EventEmitter2, - schedulerRegistry: SchedulerRegistry, - @Inject('IStoreModelProvider') storeModelProvider: IStoreModelProvider, - ) { - super( - nodeConfig, - projectService, - blockDispatcher, - dictionaryService, - eventEmitter, - schedulerRegistry, - unfinalizedBlocksService, - storeModelProvider, - ); - } - - get api(): EthereumApi { - return this.apiService.unsafeApi; - } - - protected async getFinalizedHeader(): Promise
{ - const block = await this.api.getFinalizedBlock(); - return ethereumBlockToHeader(block); - } - - protected async getBestHeight(): Promise { - return this.api.getBestBlockHeight(); - } - - // eslint-disable-next-line @typescript-eslint/require-await - protected async getChainInterval(): Promise { - const CHAIN_INTERVAL = calcInterval(this.api) * INTERVAL_PERCENT; - - return Math.min(BLOCK_TIME_VARIANCE, CHAIN_INTERVAL); - } - - protected getModulos(dataSources: SubqlDatasource[]): number[] { - return getModulos(dataSources, isCustomDs, EthereumHandlerKind.Block); - } - - protected async initBlockDispatcher(): Promise { - await this.blockDispatcher.init((height) => - Promise.resolve(this.resetForNewDs(height)), - ); - } - - protected async preLoopHook(): Promise { - // Ethereum doesn't need to do anything here - return Promise.resolve(); - } -} diff --git a/packages/node/src/indexer/indexer.manager.ts b/packages/node/src/indexer/indexer.manager.ts index 460ed56610..0052e0566a 100644 --- a/packages/node/src/indexer/indexer.manager.ts +++ b/packages/node/src/indexer/indexer.manager.ts @@ -1,7 +1,7 @@ // Copyright 2020-2025 SubQuery Pte Ltd authors & contributors // SPDX-License-Identifier: GPL-3.0 -import { Injectable } from '@nestjs/common'; +import { Inject, Injectable } from '@nestjs/common'; import { isBlockHandlerProcessor, isCallHandlerProcessor, @@ -22,6 +22,8 @@ import { BaseIndexerManager, IBlock, SandboxService, + DsProcessorService, + DynamicDsService, } from '@subql/node-core'; import { EthereumTransaction, @@ -33,6 +35,7 @@ import { EthereumTransactionFilter, LightEthereumLog, } from '@subql/types-ethereum'; +import { BlockchainService } from '../blockchain.service'; import { EthereumProjectDs } from '../configure/SubqueryProject'; import { EthereumApi } from '../ethereum'; import { @@ -42,8 +45,6 @@ import { isFullBlock, } from '../ethereum/block.ethereum'; import SafeEthProvider from '../ethereum/safe-api'; -import { DsProcessorService } from './ds-processor.service'; -import { DynamicDsService } from './dynamic-ds.service'; import { BlockContent } from './types'; import { UnfinalizedBlocksService } from './unfinalizedBlocks.service'; @@ -63,12 +64,17 @@ export class IndexerManager extends BaseIndexerManager< protected isCustomDs = isCustomDs; constructor( - apiService: ApiService, + @Inject('APIService') apiService: ApiService, nodeConfig: NodeConfig, sandboxService: SandboxService, - dsProcessorService: DsProcessorService, - dynamicDsService: DynamicDsService, + dsProcessorService: DsProcessorService< + SubqlEthereumDataSource, + SubqlEthereumCustomDataSource + >, + dynamicDsService: DynamicDsService, + @Inject('IUnfinalizedBlocksService') unfinalizedBlocksService: UnfinalizedBlocksService, + @Inject('IBlockchainService') blockchainService: BlockchainService, ) { super( apiService, @@ -79,6 +85,7 @@ export class IndexerManager extends BaseIndexerManager< unfinalizedBlocksService, FilterTypeMap, ProcessorTypeMap, + blockchainService, ); } @@ -88,15 +95,10 @@ export class IndexerManager extends BaseIndexerManager< dataSources: SubqlEthereumDataSource[], ): Promise { return super.internalIndexBlock(block, dataSources, () => - this.getApi(block.block), + this.blockchainService.getSafeApi(block.block), ); } - // eslint-disable-next-line @typescript-eslint/require-await - private async getApi(block: BlockContent): Promise { - return this.apiService.safeApi(block.number); - } - protected getDsProcessor( ds: SubqlEthereumDataSource, safeApi: SafeEthProvider, diff --git a/packages/node/src/indexer/project.service.ts b/packages/node/src/indexer/project.service.ts deleted file mode 100644 index 659bb10c71..0000000000 --- a/packages/node/src/indexer/project.service.ts +++ /dev/null @@ -1,95 +0,0 @@ -// Copyright 2020-2025 SubQuery Pte Ltd authors & contributors -// SPDX-License-Identifier: GPL-3.0 - -import { isMainThread } from 'worker_threads'; -import { Inject, Injectable } from '@nestjs/common'; -import { EventEmitter2 } from '@nestjs/event-emitter'; -import { - PoiService, - PoiSyncService, - BaseProjectService, - StoreService, - NodeConfig, - IProjectUpgradeService, - ApiService, - profiler, - Header, -} from '@subql/node-core'; -import { Sequelize } from '@subql/x-sequelize'; -import { - EthereumProjectDs, - SubqueryProject, -} from '../configure/SubqueryProject'; -import { EthereumApiService } from '../ethereum'; -import { DsProcessorService } from './ds-processor.service'; -import { DynamicDsService } from './dynamic-ds.service'; -import { UnfinalizedBlocksService } from './unfinalizedBlocks.service'; - -// eslint-disable-next-line @typescript-eslint/no-var-requires -const { version: packageVersion } = require('../../package.json'); - -@Injectable() -export class ProjectService extends BaseProjectService< - EthereumApiService, - EthereumProjectDs, - UnfinalizedBlocksService -> { - protected packageVersion = packageVersion; - - constructor( - dsProcessorService: DsProcessorService, - @Inject(ApiService) apiService: EthereumApiService, - @Inject(isMainThread ? PoiService : 'Null') poiService: PoiService, - @Inject(isMainThread ? PoiSyncService : 'Null') - poiSyncService: PoiSyncService, - @Inject(isMainThread ? Sequelize : 'Null') sequelize: Sequelize, - @Inject('ISubqueryProject') project: SubqueryProject, - @Inject('IProjectUpgradeService') - projectUpgradeService: IProjectUpgradeService, - @Inject(isMainThread ? StoreService : 'Null') storeService: StoreService, - nodeConfig: NodeConfig, - dynamicDsService: DynamicDsService, - eventEmitter: EventEmitter2, - unfinalizedBlockService: UnfinalizedBlocksService, - ) { - super( - dsProcessorService, - apiService, - poiService, - poiSyncService, - sequelize, - project, - projectUpgradeService, - storeService, - nodeConfig, - dynamicDsService, - eventEmitter, - unfinalizedBlockService, - ); - } - - // eslint-disable-next-line @typescript-eslint/require-await - @profiler() - async init(startHeight?: number): Promise { - return super.init(startHeight); - } - - protected async getBlockTimestamp(height: number): Promise { - const block = await this.apiService.unsafeApi.api.getBlock(height); - - return new Date(block.timestamp * 1000); // TODO test and make sure its in MS not S - } - - protected onProjectChange(project: SubqueryProject): void | Promise { - // TODO update this when implementing skipBlock feature for Eth - this.apiService.updateBlockFetching(); - } - - // eslint-disable-next-line @typescript-eslint/require-await - protected async initUnfinalized(): Promise
{ - return this.unfinalizedBlockService.init( - this.reindex.bind(this), - this.apiService.api.supportsFinalization, - ); - } -} diff --git a/packages/node/src/indexer/unfinalizedBlocks.service.spec.ts b/packages/node/src/indexer/unfinalizedBlocks.service.spec.ts index 5514c92503..cfd43ac1f8 100644 --- a/packages/node/src/indexer/unfinalizedBlocks.service.spec.ts +++ b/packages/node/src/indexer/unfinalizedBlocks.service.spec.ts @@ -3,7 +3,6 @@ import { hexZeroPad } from '@ethersproject/bytes'; import { - ApiService, CacheMetadataModel, Header, NodeConfig, @@ -12,7 +11,9 @@ import { METADATA_UNFINALIZED_BLOCKS_KEY, METADATA_LAST_FINALIZED_PROCESSED_KEY, } from '@subql/node-core'; +import { BlockchainService } from '../blockchain.service'; import { EthereumNodeConfig } from '../configure/NodeConfig'; +import { EthereumApiService } from '../ethereum'; import { UnfinalizedBlocksService } from './unfinalizedBlocks.service'; // Adds 0 padding so we can convert to POI block @@ -24,7 +25,7 @@ const makeHeader = (height: number, finalized?: boolean): Header => ({ parentHash: hexify(`0xABC${height - 1}${finalized ? 'f' : ''}`), }); -const getMockApi = (): ApiService => { +const getMockApi = (): EthereumApiService => { return { api: { getBlockByHeightOrHash: (hash: string | number) => { @@ -81,13 +82,15 @@ describe('UnfinalizedBlockService', () => { beforeEach(() => { storeCache = mockStoreCache(); + const blockchainService = new BlockchainService(getMockApi()); + unfinalizedBlocks = new UnfinalizedBlocksService( - getMockApi(), new NodeConfig({ unfinalizedBlocks: true, blockForkReindex: 1000, } as any) as EthereumNodeConfig, storeCache, + blockchainService, ); }); @@ -144,7 +147,7 @@ describe('UnfinalizedBlockService', () => { // The finalized block is after the cached unfinalized blocks, they should be rechecked it('startup, correctly checks for forks after cached unfinalized blocks', async () => { - storeCache.metadata.set( + await storeCache.metadata.set( METADATA_UNFINALIZED_BLOCKS_KEY, JSON.stringify([ makeHeader(99, true), @@ -153,7 +156,7 @@ describe('UnfinalizedBlockService', () => { ]), ); - storeCache.metadata.set(METADATA_LAST_FINALIZED_PROCESSED_KEY, 99); + await storeCache.metadata.set(METADATA_LAST_FINALIZED_PROCESSED_KEY, 99); const rewind = jest.fn(); @@ -168,7 +171,7 @@ describe('UnfinalizedBlockService', () => { }); it('startup, correctly checks for forks within cached unfinalized blocks', async () => { - storeCache.metadata.set( + await storeCache.metadata.set( METADATA_UNFINALIZED_BLOCKS_KEY, JSON.stringify([ makeHeader(110), @@ -177,7 +180,7 @@ describe('UnfinalizedBlockService', () => { ]), ); - storeCache.metadata.set(METADATA_LAST_FINALIZED_PROCESSED_KEY, 109); + await storeCache.metadata.set(METADATA_LAST_FINALIZED_PROCESSED_KEY, 109); const rewind = jest.fn(); @@ -192,7 +195,7 @@ describe('UnfinalizedBlockService', () => { }); it('doesnt throw if there are no unfinalized blocks on startup', async () => { - storeCache.metadata.set(METADATA_LAST_FINALIZED_PROCESSED_KEY, 109); + await storeCache.metadata.set(METADATA_LAST_FINALIZED_PROCESSED_KEY, 109); await expect(unfinalizedBlocks.init(jest.fn())).resolves.not.toThrow(); }); @@ -201,7 +204,7 @@ describe('UnfinalizedBlockService', () => { // Do this to "disable" poi (storeCache as any).poi = null; - storeCache.metadata.set( + await storeCache.metadata.set( METADATA_UNFINALIZED_BLOCKS_KEY, JSON.stringify([ makeHeader(110), @@ -210,7 +213,7 @@ describe('UnfinalizedBlockService', () => { ]), ); - storeCache.metadata.set(METADATA_LAST_FINALIZED_PROCESSED_KEY, 109); + await storeCache.metadata.set(METADATA_LAST_FINALIZED_PROCESSED_KEY, 109); const rewind = jest.fn(); diff --git a/packages/node/src/indexer/unfinalizedBlocks.service.ts b/packages/node/src/indexer/unfinalizedBlocks.service.ts index d5b1650389..9969cc68f5 100644 --- a/packages/node/src/indexer/unfinalizedBlocks.service.ts +++ b/packages/node/src/indexer/unfinalizedBlocks.service.ts @@ -3,19 +3,18 @@ import { Inject, Injectable } from '@nestjs/common'; import { - ApiService, - BaseUnfinalizedBlocksService, + UnfinalizedBlocksService as BaseUnfinalizedBlocksService, Header, - mainThreadOnly, NodeConfig, getLogger, profiler, POI_NOT_ENABLED_ERROR_MESSAGE, IStoreModelProvider, + IBlockchainService, } from '@subql/node-core'; import { last } from 'lodash'; +import { BlockchainService } from '../blockchain.service'; import { EthereumNodeConfig } from '../configure/NodeConfig'; -import { ethereumBlockToHeader } from '../ethereum/utils.ethereum'; import { BlockContent } from './types'; const logger = getLogger('UnfinalizedBlocksService'); @@ -26,11 +25,16 @@ export class UnfinalizedBlocksService extends BaseUnfinalizedBlocksService { - const finalizedBlock = await this.apiService.api.getFinalizedBlock(); - return ethereumBlockToHeader(finalizedBlock); - } - - @mainThreadOnly() - protected async getHeaderForHash(hash: string): Promise
{ - const block = await this.apiService.api.getBlockByHeightOrHash(hash); - return ethereumBlockToHeader(block); - } - - @mainThreadOnly() - async getHeaderForHeight(height: number): Promise
{ - const block = await this.apiService.api.getBlockByHeightOrHash(height); - return ethereumBlockToHeader(block); - } } diff --git a/packages/node/src/indexer/worker/worker-fetch.module.ts b/packages/node/src/indexer/worker/worker-fetch.module.ts index d8473fa982..135c1bba62 100644 --- a/packages/node/src/indexer/worker/worker-fetch.module.ts +++ b/packages/node/src/indexer/worker/worker-fetch.module.ts @@ -4,44 +4,25 @@ import { Module } from '@nestjs/common'; import { EventEmitter2 } from '@nestjs/event-emitter'; import { - ApiService, ConnectionPoolService, - WorkerDynamicDsService, + DsProcessorService, NodeConfig, - WorkerUnfinalizedBlocksService, + ProjectService, WorkerCoreModule, } from '@subql/node-core'; -import { SubqueryProject } from '../../configure/SubqueryProject'; +import { BlockchainService } from '../../blockchain.service'; import { EthereumApiService } from '../../ethereum'; -import { EthereumApiConnection } from '../../ethereum/api.connection'; -import { DsProcessorService } from '../ds-processor.service'; -import { DynamicDsService } from '../dynamic-ds.service'; import { IndexerManager } from '../indexer.manager'; -import { ProjectService } from '../project.service'; -import { UnfinalizedBlocksService } from '../unfinalizedBlocks.service'; import { WorkerService } from './worker.service'; @Module({ imports: [WorkerCoreModule], providers: [ + DsProcessorService, IndexerManager, { - provide: ApiService, - useFactory: async ( - project: SubqueryProject, - connectionPoolService: ConnectionPoolService, - eventEmitter: EventEmitter2, - nodeConfig: NodeConfig, - ) => { - const apiService = new EthereumApiService( - project, - connectionPoolService, - eventEmitter, - nodeConfig, - ); - await apiService.init(); - return apiService; - }, + provide: 'APIService', + useFactory: EthereumApiService.init, inject: [ 'ISubqueryProject', ConnectionPoolService, @@ -49,19 +30,13 @@ import { WorkerService } from './worker.service'; NodeConfig, ], }, - DsProcessorService, - { - provide: DynamicDsService, - useFactory: () => new WorkerDynamicDsService((global as any).host), - }, { provide: 'IProjectService', useClass: ProjectService, }, { - provide: UnfinalizedBlocksService, - useFactory: () => - new WorkerUnfinalizedBlocksService((global as any).host), + provide: 'IBlockchainService', + useClass: BlockchainService, }, WorkerService, ], diff --git a/packages/node/src/indexer/worker/worker.service.ts b/packages/node/src/indexer/worker/worker.service.ts index f66ce54725..f1f3637c58 100644 --- a/packages/node/src/indexer/worker/worker.service.ts +++ b/packages/node/src/indexer/worker/worker.service.ts @@ -37,6 +37,7 @@ export class WorkerService extends BaseWorkerService< {} > { constructor( + @Inject('APIService') private apiService: ApiService< EthereumApi, SafeEthProvider, diff --git a/packages/node/src/indexer/worker/worker.ts b/packages/node/src/indexer/worker/worker.ts index 2f6a5de865..09d5ee46d1 100644 --- a/packages/node/src/indexer/worker/worker.ts +++ b/packages/node/src/indexer/worker/worker.ts @@ -24,8 +24,8 @@ import { createWorkerHost, IBaseIndexerWorker, initWorkerServices, + ProjectService, } from '@subql/node-core'; -import { ProjectService } from '../project.service'; import { WorkerModule } from './worker.module'; import { WorkerService } from './worker.service'; diff --git a/packages/node/src/init.ts b/packages/node/src/init.ts index 996fd5c9ec..c2dcd26296 100644 --- a/packages/node/src/init.ts +++ b/packages/node/src/init.ts @@ -5,13 +5,13 @@ import { NestFactory } from '@nestjs/core'; import { notifyUpdates } from '@subql/common'; import { exitWithError, + FetchService, getLogger, getValidPort, NestLogger, + ProjectService, } from '@subql/node-core'; import { AppModule } from './app.module'; -import { FetchService } from './indexer/fetch.service'; -import { ProjectService } from './indexer/project.service'; import { yargsOptions } from './yargs'; const pjson = require('../package.json'); diff --git a/packages/node/src/subcommands/reindex.module.ts b/packages/node/src/subcommands/reindex.module.ts index 7569aa3d17..2a45004c07 100644 --- a/packages/node/src/subcommands/reindex.module.ts +++ b/packages/node/src/subcommands/reindex.module.ts @@ -5,7 +5,6 @@ import { Module } from '@nestjs/common'; import { EventEmitter2, EventEmitterModule } from '@nestjs/event-emitter'; import { SchedulerRegistry } from '@nestjs/schedule'; import { - ApiService, DbModule, ForceCleanService, StoreService, @@ -15,14 +14,13 @@ import { storeModelFactory, ConnectionPoolService, ConnectionPoolStateManager, + DynamicDsService, + DsProcessorService, } from '@subql/node-core'; import { Sequelize } from '@subql/x-sequelize'; +import { BlockchainService } from '../blockchain.service'; import { ConfigureModule } from '../configure/configure.module'; -import { SubqueryProject } from '../configure/SubqueryProject'; import { EthereumApiService } from '../ethereum'; -import { EthereumApiConnection } from '../ethereum/api.connection'; -import { DsProcessorService } from '../indexer/ds-processor.service'; -import { DynamicDsService } from '../indexer/dynamic-ds.service'; import { UnfinalizedBlocksService } from '../indexer/unfinalizedBlocks.service'; @Module({ @@ -30,7 +28,7 @@ import { UnfinalizedBlocksService } from '../indexer/unfinalizedBlocks.service'; { provide: 'IStoreModelProvider', useFactory: storeModelFactory, - inject: [NodeConfig, EventEmitter2, SchedulerRegistry, Sequelize], + inject: [NodeConfig, EventEmitter2, Sequelize], }, StoreService, ReindexService, @@ -48,22 +46,8 @@ import { UnfinalizedBlocksService } from '../indexer/unfinalizedBlocks.service'; ConnectionPoolStateManager, ConnectionPoolService, { - provide: ApiService, - useFactory: async ( - project: SubqueryProject, - connectionPoolService: ConnectionPoolService, - eventEmitter: EventEmitter2, - nodeConfig: NodeConfig, - ) => { - const apiService = new EthereumApiService( - project, - connectionPoolService, - eventEmitter, - nodeConfig, - ); - await apiService.init(); - return apiService; - }, + provide: 'APIService', + useFactory: EthereumApiService.init, inject: [ 'ISubqueryProject', ConnectionPoolService, @@ -71,6 +55,10 @@ import { UnfinalizedBlocksService } from '../indexer/unfinalizedBlocks.service'; NodeConfig, ], }, + { + provide: 'IBlockchainService', + useClass: BlockchainService, + }, SchedulerRegistry, ], controllers: [], diff --git a/packages/node/src/subcommands/testing.module.ts b/packages/node/src/subcommands/testing.module.ts index 2f788680d9..fcd75ecc18 100644 --- a/packages/node/src/subcommands/testing.module.ts +++ b/packages/node/src/subcommands/testing.module.ts @@ -3,71 +3,33 @@ import { Module } from '@nestjs/common'; import { EventEmitter2, EventEmitterModule } from '@nestjs/event-emitter'; -import { ScheduleModule, SchedulerRegistry } from '@nestjs/schedule'; +import { ScheduleModule } from '@nestjs/schedule'; import { - ApiService, ConnectionPoolService, - ConnectionPoolStateManager, DbModule, - InMemoryCacheService, + DsProcessorService, + DynamicDsService, NodeConfig, - PoiService, - PoiSyncService, - StoreService, + ProjectService, TestRunner, - SandboxService, - storeModelFactory, + TestingCoreModule, } from '@subql/node-core'; -import { Sequelize } from '@subql/x-sequelize'; +import { BlockchainService } from '../blockchain.service'; import { ConfigureModule } from '../configure/configure.module'; -import { SubqueryProject } from '../configure/SubqueryProject'; import { EthereumApiService } from '../ethereum'; -import { EthereumApiConnection } from '../ethereum/api.connection'; -import { DsProcessorService } from '../indexer/ds-processor.service'; -import { DynamicDsService } from '../indexer/dynamic-ds.service'; import { IndexerManager } from '../indexer/indexer.manager'; -import { ProjectService } from '../indexer/project.service'; import { UnfinalizedBlocksService } from '../indexer/unfinalizedBlocks.service'; @Module({ + imports: [TestingCoreModule], providers: [ - InMemoryCacheService, - StoreService, - { - provide: 'IStoreModelProvider', - useFactory: storeModelFactory, - inject: [NodeConfig, EventEmitter2, SchedulerRegistry, Sequelize], - }, - EventEmitter2, - PoiService, - PoiSyncService, - SandboxService, - DsProcessorService, - DynamicDsService, - UnfinalizedBlocksService, - ConnectionPoolStateManager, - ConnectionPoolService, { provide: 'IProjectService', useClass: ProjectService, }, { - provide: ApiService, - useFactory: async ( - project: SubqueryProject, - connectionPoolService: ConnectionPoolService, - eventEmitter: EventEmitter2, - nodeConfig: NodeConfig, - ) => { - const apiService = new EthereumApiService( - project, - connectionPoolService, - eventEmitter, - nodeConfig, - ); - await apiService.init(); - return apiService; - }, + provide: 'APIService', + useFactory: EthereumApiService.init, inject: [ 'ISubqueryProject', ConnectionPoolService, @@ -75,16 +37,21 @@ import { UnfinalizedBlocksService } from '../indexer/unfinalizedBlocks.service'; NodeConfig, ], }, - SchedulerRegistry, - TestRunner, { - provide: 'IApi', - useExisting: ApiService, + provide: 'IUnfinalizedBlocksService', + useClass: UnfinalizedBlocksService, }, + { + provide: 'IBlockchainService', + useClass: BlockchainService, + }, + TestRunner, { provide: 'IIndexerManager', useClass: IndexerManager, }, + DsProcessorService, + DynamicDsService, ], controllers: [], exports: [TestRunner], diff --git a/packages/node/src/subcommands/testing.service.ts b/packages/node/src/subcommands/testing.service.ts index 3560fbfef3..849fb92cdf 100644 --- a/packages/node/src/subcommands/testing.service.ts +++ b/packages/node/src/subcommands/testing.service.ts @@ -9,7 +9,7 @@ import { TestingService as BaseTestingService, NestLogger, TestRunner, - IBlock, + ProjectService, } from '@subql/node-core'; import { EthereumProjectDs, @@ -17,8 +17,6 @@ import { } from '../configure/SubqueryProject'; import { EthereumApi } from '../ethereum'; import SafeEthProvider from '../ethereum/safe-api'; -import { IndexerManager } from '../indexer/indexer.manager'; -import { ProjectService } from '../indexer/project.service'; import { BlockContent } from '../indexer/types'; import { TestingModule } from './testing.module'; @@ -62,12 +60,4 @@ export class TestingService extends BaseTestingService< return [testContext.close.bind(testContext), testContext.get(TestRunner)]; } - - async indexBlock( - block: IBlock, - handler: string, - indexerManager: IndexerManager, - ): Promise { - await indexerManager.indexBlock(block, this.getDsWithHandler(handler)); - } } diff --git a/packages/types/CHANGELOG.md b/packages/types/CHANGELOG.md index 86e242c8ad..1084aaa0bf 100644 --- a/packages/types/CHANGELOG.md +++ b/packages/types/CHANGELOG.md @@ -7,6 +7,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ## [Unreleased] ### Changed - Update header year to 2025 (#362) +- Update `@subql/types-core` and removed redundant internal type (#363) ## [4.0.0] - 2024-10-22 ### Changed diff --git a/packages/types/package.json b/packages/types/package.json index 26de13b180..ad852904ee 100644 --- a/packages/types/package.json +++ b/packages/types/package.json @@ -19,7 +19,6 @@ "dependencies": { "@ethersproject/abstract-provider": "^5.6.1", "@ethersproject/providers": "^5.7.2", - "@subql/types-core": "^2.0.0" - }, - "stableVersion": "4.0.0" + "@subql/types-core": "^2.0.1" + } } diff --git a/packages/types/src/project.ts b/packages/types/src/project.ts index b1166da21e..6c079ea626 100644 --- a/packages/types/src/project.ts +++ b/packages/types/src/project.ts @@ -159,33 +159,6 @@ export interface SubqlMapping extends Fil handlers: T[]; } -/** - * Represents a Ethereum datasource interface with generic parameters. - * @interface - * @template M - The mapping type for the datasource. - */ -interface ISubqlDatasource extends BaseDataSource { - /** - * The kind of the datasource. - * @type {string} - * @example - * kind: 'ethereum/Runtime' - */ - kind: string; - /** - * The starting block number for the datasource. If not specified, 1 will be used (optional). - * @type {number} - * @default 1 - */ - startBlock?: number; - /** - * The mapping associated with the datasource. - * This contains the handlers. - * @type {M} - */ - mapping: M; -} - export interface SubqlEthereumProcessorOptions { /** * The name of the abi that is provided in the assets @@ -209,7 +182,7 @@ export interface SubqlEthereumProcessorOptions { * @template M - The mapping type for the datasource (default: SubqlMapping). */ export interface SubqlRuntimeDatasource = SubqlMapping> - extends ISubqlDatasource { + extends BaseDataSource { /** * The kind of the datasource, which is `ethereum/Runtime`. * @type {EthereumDatasourceKind.Runtime} diff --git a/yarn.lock b/yarn.lock index 8fed077cb4..72f170bdcb 100644 --- a/yarn.lock +++ b/yarn.lock @@ -46,34 +46,45 @@ __metadata: languageName: node linkType: hard -"@angular-devkit/core@npm:16.0.1": - version: 16.0.1 - resolution: "@angular-devkit/core@npm:16.0.1" - dependencies: - ajv: 8.12.0 - ajv-formats: 2.1.1 - jsonc-parser: 3.2.0 +"@angular-devkit/core@npm:19.0.1": + version: 19.0.1 + resolution: "@angular-devkit/core@npm:19.0.1" + dependencies: + ajv: 8.17.1 + ajv-formats: 3.0.1 + jsonc-parser: 3.3.1 + picomatch: 4.0.2 rxjs: 7.8.1 source-map: 0.7.4 peerDependencies: - chokidar: ^3.5.2 + chokidar: ^4.0.0 + dependenciesMeta: + esbuild: + built: true + puppeteer: + built: true peerDependenciesMeta: chokidar: optional: true - checksum: a0a6932abc25b917bf0482ded4089151b72bfacb97206eacbd4924d7c9fef35a93fd5ed248b1f41bd3473dd7e8d95143f0a95c2b04452c88ff2a87cf6164ce28 + checksum: 4a69d7e270c7ade503ae2a46b1bed620dbd18b7fd794d84e7112973abc99267e6c52b1d8784388b0eeebd449990f2a08dc416cc759fc5f5b59cd32cae780b5d5 languageName: node linkType: hard -"@angular-devkit/schematics@npm:16.0.1": - version: 16.0.1 - resolution: "@angular-devkit/schematics@npm:16.0.1" +"@angular-devkit/schematics@npm:19.0.1": + version: 19.0.1 + resolution: "@angular-devkit/schematics@npm:19.0.1" dependencies: - "@angular-devkit/core": 16.0.1 - jsonc-parser: 3.2.0 - magic-string: 0.30.0 + "@angular-devkit/core": 19.0.1 + jsonc-parser: 3.3.1 + magic-string: 0.30.12 ora: 5.4.1 rxjs: 7.8.1 - checksum: cacec3d24146a64f1ff781588a5a511fe6b4ed9bbeeb4a7934cc5ad5960742fa424a69b1bee7800844af969ad82e9951387d4aeafee5afe3a5bec64d7a54622c + dependenciesMeta: + esbuild: + built: true + puppeteer: + built: true + checksum: baf809c3ff17e747091b9113c8f838cf9f722f8f9ad40621d60c70a5e45103fab30e1b861cd03cdb69a844baa5a4773c7de74ea4062d0315d8b6c1756a83d730 languageName: node linkType: hard @@ -2386,13 +2397,20 @@ __metadata: languageName: node linkType: hard -"@jridgewell/sourcemap-codec@npm:^1.4.10, @jridgewell/sourcemap-codec@npm:^1.4.13": +"@jridgewell/sourcemap-codec@npm:^1.4.10": version: 1.4.15 resolution: "@jridgewell/sourcemap-codec@npm:1.4.15" checksum: b881c7e503db3fc7f3c1f35a1dd2655a188cc51a3612d76efc8a6eb74728bef5606e6758ee77423e564092b4a518aba569bbb21c9bac5ab7a35b0c6ae7e344c8 languageName: node linkType: hard +"@jridgewell/sourcemap-codec@npm:^1.5.0": + version: 1.5.0 + resolution: "@jridgewell/sourcemap-codec@npm:1.5.0" + checksum: 05df4f2538b3b0f998ea4c1cd34574d0feba216fa5d4ccaef0187d12abf82eafe6021cec8b49f9bb4d90f2ba4582ccc581e72986a5fcf4176ae0cfeb04cf52ec + languageName: node + linkType: hard + "@jridgewell/trace-mapping@npm:0.3.9": version: 0.3.9 resolution: "@jridgewell/trace-mapping@npm:0.3.9" @@ -2420,46 +2438,43 @@ __metadata: languageName: node linkType: hard -"@nestjs/common@npm:^9.4.0": - version: 9.4.3 - resolution: "@nestjs/common@npm:9.4.3" +"@nestjs/common@npm:^11.0.7, @nestjs/common@npm:^11.0.8": + version: 11.0.8 + resolution: "@nestjs/common@npm:11.0.8" dependencies: iterare: 1.2.1 - tslib: 2.5.3 + tslib: 2.8.1 uid: 2.0.2 peerDependencies: - cache-manager: <=5 class-transformer: "*" class-validator: "*" - reflect-metadata: ^0.1.12 + reflect-metadata: ^0.1.12 || ^0.2.0 rxjs: ^7.1.0 peerDependenciesMeta: - cache-manager: - optional: true class-transformer: optional: true class-validator: optional: true - checksum: 45ccb5acac2521a05576f37b37ab94c63a83aefb1839ed670635090bb934c1bd532852cb7be9863ee3b9d1ad80aa84e0602be023c626623f9233257dcb754914 + checksum: 6a8b47f3e852305cb460c45986cd58ad12f41d7ba90e4bb9e2aa5641662e570a8631f2dbbc7b1ef4da66c983cc208c8dfcf0bd62829cc18fe5658d1f2bb2044b languageName: node linkType: hard -"@nestjs/core@npm:^9.4.0": - version: 9.4.3 - resolution: "@nestjs/core@npm:9.4.3" +"@nestjs/core@npm:^11.0.8": + version: 11.0.8 + resolution: "@nestjs/core@npm:11.0.8" dependencies: - "@nuxtjs/opencollective": 0.3.2 + "@nuxt/opencollective": 0.4.1 fast-safe-stringify: 2.1.1 iterare: 1.2.1 - path-to-regexp: 3.2.0 - tslib: 2.5.3 + path-to-regexp: 8.2.0 + tslib: 2.8.1 uid: 2.0.2 peerDependencies: - "@nestjs/common": ^9.0.0 - "@nestjs/microservices": ^9.0.0 - "@nestjs/platform-express": ^9.0.0 - "@nestjs/websockets": ^9.0.0 - reflect-metadata: ^0.1.12 + "@nestjs/common": ^11.0.0 + "@nestjs/microservices": ^11.0.0 + "@nestjs/platform-express": ^11.0.0 + "@nestjs/websockets": ^11.0.0 + reflect-metadata: ^0.1.12 || ^0.2.0 rxjs: ^7.1.0 peerDependenciesMeta: "@nestjs/microservices": @@ -2468,7 +2483,7 @@ __metadata: optional: true "@nestjs/websockets": optional: true - checksum: 5c556c43fc4bce5001c9fa1190630031e60db5678d47c1266f6aca957d862fc8aa7168414cf7938852976ee52086395bd05d4a4daaa0915d12e47c4f644dc263 + checksum: 7dbdea28a9b9e69ee9c79dcbb1833dced3d96dd074e0eda62ddaaab625758cb0ba69e9f2eaa66f432119033442ae257c9e8a42276a7ffe12a730450a8a91d9b0 languageName: node linkType: hard @@ -2485,66 +2500,77 @@ __metadata: languageName: node linkType: hard -"@nestjs/platform-express@npm:^9.4.0": - version: 9.4.3 - resolution: "@nestjs/platform-express@npm:9.4.3" +"@nestjs/event-emitter@npm:^3.0.0": + version: 3.0.0 + resolution: "@nestjs/event-emitter@npm:3.0.0" + dependencies: + eventemitter2: 6.4.9 + peerDependencies: + "@nestjs/common": ^10.0.0 || ^11.0.0 + "@nestjs/core": ^10.0.0 || ^11.0.0 + checksum: 1b3488bb48397781652da1ed1583ec9d67b0ef30a22f8dbfb5620dd0ac054d811c2f07c82725fd22e9b36ed92fd8af1c09e7c0816e1defbae64cbc5d54bfe353 + languageName: node + linkType: hard + +"@nestjs/platform-express@npm:^11.0.8": + version: 11.0.8 + resolution: "@nestjs/platform-express@npm:11.0.8" dependencies: - body-parser: 1.20.2 cors: 2.8.5 - express: 4.18.2 - multer: 1.4.4-lts.1 - tslib: 2.5.3 + express: 5.0.1 + multer: 1.4.5-lts.1 + path-to-regexp: 8.2.0 + tslib: 2.8.1 peerDependencies: - "@nestjs/common": ^9.0.0 - "@nestjs/core": ^9.0.0 - checksum: d7fc96a979e4f65a6d1482e517a957b763f307d634a1c98353f3f2d3197366797f9f5cb4968886279308c1b6c22597090a522b3587687cb44f63d462b567958c + "@nestjs/common": ^11.0.0 + "@nestjs/core": ^11.0.0 + checksum: 9a464cf6d01d98db8531c1bf66c93c11641080d3a20ed6f32de531b433df225660f6bcc5ecad727fb836862a882e53ab509585bf18f54ea51029665d4b3c5734 languageName: node linkType: hard -"@nestjs/schedule@npm:^3.0.1": - version: 3.0.1 - resolution: "@nestjs/schedule@npm:3.0.1" +"@nestjs/schedule@npm:^5.0.1": + version: 5.0.1 + resolution: "@nestjs/schedule@npm:5.0.1" dependencies: - cron: 2.3.1 - uuid: 9.0.0 + cron: 3.5.0 peerDependencies: - "@nestjs/common": ^8.0.0 || ^9.0.0 || ^10.0.0 - "@nestjs/core": ^8.0.0 || ^9.0.0 || ^10.0.0 - reflect-metadata: ^0.1.12 - checksum: c64f3956457cbe6dd19e7932fdf3baa3e46d945e514e408ac135e4f35b5f635f6305d962a2ff5045943b6176748edcccb3e3d472ddfd850f1e05543362d313a7 + "@nestjs/common": ^10.0.0 || ^11.0.0 + "@nestjs/core": ^10.0.0 || ^11.0.0 + checksum: 418db053e14255568865dbc6ec45030abaaa8c6d56647906bf1aa995dfe7f1f290c4088c148364c5d11ebe4125553cd7d53407fd0d05bb7b7a54c45f529473a4 languageName: node linkType: hard -"@nestjs/schematics@npm:^9.2.0": - version: 9.2.0 - resolution: "@nestjs/schematics@npm:9.2.0" +"@nestjs/schematics@npm:^11.0.0": + version: 11.0.0 + resolution: "@nestjs/schematics@npm:11.0.0" dependencies: - "@angular-devkit/core": 16.0.1 - "@angular-devkit/schematics": 16.0.1 - jsonc-parser: 3.2.0 + "@angular-devkit/core": 19.0.1 + "@angular-devkit/schematics": 19.0.1 + comment-json: 4.2.5 + jsonc-parser: 3.3.1 pluralize: 8.0.0 peerDependencies: - typescript: ">=4.3.5" - checksum: d7ee0236cc0e130c3bfb2f4794112b0f2e24caaf09323f553acb595629da4ba042aaf98dd5237bf7c9fd389df915930877d23757ea3e7e2b5da94539c1e5c36e + typescript: ">=4.8.2" + checksum: 42b7cd5cbc0d6714b28a21031edb212917918149c514bf23e238d57832b17832bc4b32db272bb32753fa1a291ace7301e71e319ac42b86233128df9ce8ddcbbd languageName: node linkType: hard -"@nestjs/testing@npm:^9.4.0": - version: 9.4.3 - resolution: "@nestjs/testing@npm:9.4.3" +"@nestjs/testing@npm:^11.0.8": + version: 11.0.8 + resolution: "@nestjs/testing@npm:11.0.8" dependencies: - tslib: 2.5.3 + tslib: 2.8.1 peerDependencies: - "@nestjs/common": ^9.0.0 - "@nestjs/core": ^9.0.0 - "@nestjs/microservices": ^9.0.0 - "@nestjs/platform-express": ^9.0.0 + "@nestjs/common": ^11.0.0 + "@nestjs/core": ^11.0.0 + "@nestjs/microservices": ^11.0.0 + "@nestjs/platform-express": ^11.0.0 peerDependenciesMeta: "@nestjs/microservices": optional: true "@nestjs/platform-express": optional: true - checksum: 0f3373a7e451e39cb38c7ee67f793efb1583ab795f6e42a959afd5c50180536886c9ed6ac621102392f85c74191a31c654e66b0225fc94d6433aef044ca8d46a + checksum: de5ed31cbd3c182db06e93f98d7e480e379f2f8da773c530ec42306584532f8b7a5afa8abce90e694f4d10f99918655f67508c64a2579331e76f4c42e627f7ec languageName: node linkType: hard @@ -2600,16 +2626,14 @@ __metadata: languageName: node linkType: hard -"@nuxtjs/opencollective@npm:0.3.2": - version: 0.3.2 - resolution: "@nuxtjs/opencollective@npm:0.3.2" +"@nuxt/opencollective@npm:0.4.1": + version: 0.4.1 + resolution: "@nuxt/opencollective@npm:0.4.1" dependencies: - chalk: ^4.1.0 - consola: ^2.15.0 - node-fetch: ^2.6.1 + consola: ^3.2.3 bin: opencollective: bin/opencollective.js - checksum: fd3737c12edf55b5c2279674664c3ed5e756410ea82e9cd324c3f0e032ed5ccd8df1959ec69ea97f2f1c9c33c884aae3d7a7108a73ea0faa90d74ea47cf364d4 + checksum: 9b1da2cbde2dc643b5b10961c74157c1f21d19e5b06b674cdd60071fd9f0ddfdabc8f7ef74bd88e21cdbbb5fc8f16fc9e190ee9de6bc4adb32fa3b6c98fb1bc5 languageName: node linkType: hard @@ -3007,7 +3031,7 @@ __metadata: version: 0.0.0-use.local resolution: "@subql/common-ethereum@workspace:packages/common-ethereum" dependencies: - "@subql/common": ^5.3.0 + "@subql/common": ^5.4.0 "@subql/types-ethereum": "workspace:*" "@typechain/ethers-v5": ^11.1.1 "@types/ejs": ^3.1.2 @@ -3028,11 +3052,11 @@ __metadata: languageName: unknown linkType: soft -"@subql/common@npm:5.3.0, @subql/common@npm:^5.3.0": - version: 5.3.0 - resolution: "@subql/common@npm:5.3.0" +"@subql/common@npm:5.4.0, @subql/common@npm:^5.4.0": + version: 5.4.0 + resolution: "@subql/common@npm:5.4.0" dependencies: - "@subql/types-core": 2.0.0 + "@subql/types-core": 2.0.1 axios: ^0.28.0 class-transformer: ^0.5.1 class-validator: ^0.14.1 @@ -3041,23 +3065,23 @@ __metadata: reflect-metadata: ^0.1.14 semver: ^7.6.3 update-notifier: ^5.1.0 - checksum: 2f21993d5d0c841c5bb93c1493dcc04d1978383e18f705ed3642fdf8e3370f28f3acbabf8e81fc3d27b0878dc22845487a5cb3b3cd342502ec315a575f26dd8c + checksum: 69bec37d8484c9b4526cfbe850c8fc50a3cf419f6d1a375e663dd2bd9d8d5a3f578292b96f583b850a8a3173437e70c171b3b77f18d61ad99f277c425c244728 languageName: node linkType: hard -"@subql/node-core@npm:^16.2.0": - version: 16.2.0 - resolution: "@subql/node-core@npm:16.2.0" +"@subql/node-core@npm:^17.0.0": + version: 17.0.0 + resolution: "@subql/node-core@npm:17.0.0" dependencies: "@apollo/client": ^3.11.2 - "@nestjs/common": ^9.4.0 - "@nestjs/event-emitter": ^2.0.0 - "@nestjs/schedule": ^3.0.1 - "@subql/common": 5.3.0 - "@subql/testing": 2.2.2 - "@subql/types": 3.11.4 - "@subql/utils": 2.17.1 - "@willsoto/nestjs-prometheus": ^5.4.0 + "@nestjs/common": ^11.0.7 + "@nestjs/event-emitter": ^3.0.0 + "@nestjs/schedule": ^5.0.1 + "@subql/common": 5.4.0 + "@subql/testing": 2.2.3 + "@subql/types": 3.12.0 + "@subql/utils": 2.18.0 + "@willsoto/nestjs-prometheus": ^6.0.2 async-mutex: ^0.5.0 cron-converter: ^2.0.1 cross-fetch: ^3.1.6 @@ -3073,7 +3097,7 @@ __metadata: toposort-class: ^1.0.1 vm2: ^3.9.19 yargs: ^16.2.0 - checksum: ca9a810103b7dc319d8daaa9d13778658c4b2c0774b701a008845f5c60d688e7cf11768c8e5c4e509e43a91f409a8d986fcf20364334d5a3fa478fb23708c2f4 + checksum: c1b6adf5c45ec295d9c197e6164078f6670961a761d4e8b9dbaf3cca2edcb8cb285b95b6f527c539215eb09279133996d1f25c6af22d85b16a9afa87a8754181 languageName: node linkType: hard @@ -3081,16 +3105,16 @@ __metadata: version: 0.0.0-use.local resolution: "@subql/node-ethereum@workspace:packages/node" dependencies: - "@nestjs/common": ^9.4.0 - "@nestjs/core": ^9.4.0 + "@nestjs/common": ^11.0.8 + "@nestjs/core": ^11.0.8 "@nestjs/event-emitter": ^2.0.0 - "@nestjs/platform-express": ^9.4.0 - "@nestjs/schedule": ^3.0.1 - "@nestjs/schematics": ^9.2.0 - "@nestjs/testing": ^9.4.0 - "@subql/common": ^5.3.0 + "@nestjs/platform-express": ^11.0.8 + "@nestjs/schedule": ^5.0.1 + "@nestjs/schematics": ^11.0.0 + "@nestjs/testing": ^11.0.8 + "@subql/common": ^5.4.0 "@subql/common-ethereum": "workspace:*" - "@subql/node-core": ^16.2.0 + "@subql/node-core": ^17.0.0 "@subql/testing": ^2.2.1 "@subql/types-ethereum": "workspace:*" "@types/express": ^4.17.13 @@ -3116,12 +3140,12 @@ __metadata: languageName: unknown linkType: soft -"@subql/testing@npm:2.2.2": - version: 2.2.2 - resolution: "@subql/testing@npm:2.2.2" +"@subql/testing@npm:2.2.3": + version: 2.2.3 + resolution: "@subql/testing@npm:2.2.3" dependencies: - "@subql/types-core": ^2.0.0 - checksum: 0f720d9c3f791bd1ffa30d7040cbac8ef5efd41fb18ab3002a87067d92954ca8839b2634abc8cdbdcde67dd284d2ed0fb98fae7f81487ca51f9ee7d225a8fa39 + "@subql/types-core": ^2.0.1 + checksum: 4ac3676fb5ce3f17af2598b36dc9fcf74866817e9816d481b82aa5081bf062808383a65f11623b38c4ecc9e24d7a59fc8e4cbe6215512c3afa1dbada1f96ad7e languageName: node linkType: hard @@ -3134,10 +3158,10 @@ __metadata: languageName: node linkType: hard -"@subql/types-core@npm:2.0.0, @subql/types-core@npm:^2.0.0": - version: 2.0.0 - resolution: "@subql/types-core@npm:2.0.0" - checksum: cb32c8f1eed13eabee65fb9dd0b4b64435ca18e820f640bd29a3e3a0d4c58692df1163fbc66c2dd29b52faab60b4bd895518c5aad63ec81ade5c250bf580619c +"@subql/types-core@npm:2.0.1, @subql/types-core@npm:^2.0.1": + version: 2.0.1 + resolution: "@subql/types-core@npm:2.0.1" + checksum: e9727804c720bbb55f90afc220940da5ef31c2a3c659d22c3756b9dc6e48ed50bf54858c66e6e9a380a6996c26452f8cd3c055531d6af80fa23569df2fecfea0 languageName: node linkType: hard @@ -3156,24 +3180,24 @@ __metadata: dependencies: "@ethersproject/abstract-provider": ^5.6.1 "@ethersproject/providers": ^5.7.2 - "@subql/types-core": ^2.0.0 + "@subql/types-core": ^2.0.1 languageName: unknown linkType: soft -"@subql/types@npm:3.11.4": - version: 3.11.4 - resolution: "@subql/types@npm:3.11.4" +"@subql/types@npm:3.12.0": + version: 3.12.0 + resolution: "@subql/types@npm:3.12.0" dependencies: - "@subql/types-core": 2.0.0 + "@subql/types-core": 2.0.1 peerDependencies: - "@polkadot/api": ^14 - checksum: 2186436d0ea14d9b4b76a89a0aa3267ae869aed066977706555a2fb83d9a8aa195e9e2a341461b3654fa83ca574c8ce616ce8b513c5dc738806d6b52cccdeb0d + "@polkadot/api": ^15 + checksum: 093714f747ec6fc78c49eb155d3e1830c580ecdfc1563b888b620e0ecbd18fd0bf198bd6f6c4a1a0769e7eb19b35c0f13a1ef5501e3b1741a7f31e41c4388f21 languageName: node linkType: hard -"@subql/utils@npm:2.17.1": - version: 2.17.1 - resolution: "@subql/utils@npm:2.17.1" +"@subql/utils@npm:2.18.0": + version: 2.18.0 + resolution: "@subql/utils@npm:2.18.0" dependencies: "@polkadot/util": ^13.2.3 "@polkadot/util-crypto": ^13.2.3 @@ -3186,7 +3210,7 @@ __metadata: lodash: ^4.17.21 pino: ^6.13.3 rotating-file-stream: ^3.2.3 - checksum: 450640c82eb6e2db4ec6a3f13b23707f4df045dfe2ee5ea6af05ffe04ff6683c80329926e88ace29eaecd1f525c9328d390ec362460755a217d9f5b4e98b3e68 + checksum: 15c5276237604c252b13cd448b7db218dfe10d07defab7934151c6478b8b12989911205f3324b3de0c2ae33a9f0c57a2a5a69c169d5b5178bbdc6587bffadd7c languageName: node linkType: hard @@ -3525,6 +3549,13 @@ __metadata: languageName: node linkType: hard +"@types/luxon@npm:~3.4.0": + version: 3.4.2 + resolution: "@types/luxon@npm:3.4.2" + checksum: 6f92d5bd02e89f310395753506bcd9cef3a56f5940f7a50db2a2b9822bce753553ac767d143cb5b4f9ed5ddd4a84e64f89ff538082ceb4d18739af7781b56925 + languageName: node + linkType: hard + "@types/mdast@npm:^3.0.0": version: 3.0.13 resolution: "@types/mdast@npm:3.0.13" @@ -3956,13 +3987,13 @@ __metadata: languageName: node linkType: hard -"@willsoto/nestjs-prometheus@npm:^5.4.0": - version: 5.5.0 - resolution: "@willsoto/nestjs-prometheus@npm:5.5.0" +"@willsoto/nestjs-prometheus@npm:^6.0.2": + version: 6.0.2 + resolution: "@willsoto/nestjs-prometheus@npm:6.0.2" peerDependencies: - "@nestjs/common": ^7.0.0 || ^8.0.0 || ^9.0.0 || ^10.0.0 - prom-client: ^13.0.0 || ^14.0.0 - checksum: a4bd0517f23ac80edd7eda68eebe138847ab045a7a53b9ab8e206c043aa7fff37e2d7c6d2209ec71b4d39ac7fddec8059ab3c827de579a2121838fe3e50aa90b + "@nestjs/common": ^7.0.0 || ^8.0.0 || ^9.0.0 || ^10.0.0 || ^11.0.0 + prom-client: ^15.0.0 + checksum: 0403e19bcdccf7463c6434efbae2f6112d25b00b508a85090290dd6112ceddac7ba0da4d7e7c1c739ab929417fa82a66f14385bb2a98eb0eb1f767d3f19f19bc languageName: node linkType: hard @@ -4057,13 +4088,13 @@ __metadata: languageName: node linkType: hard -"accepts@npm:~1.3.8": - version: 1.3.8 - resolution: "accepts@npm:1.3.8" +"accepts@npm:^2.0.0": + version: 2.0.0 + resolution: "accepts@npm:2.0.0" dependencies: - mime-types: ~2.1.34 - negotiator: 0.6.3 - checksum: 50c43d32e7b50285ebe84b613ee4a3aa426715a7d131b65b786e2ead0fd76b6b60091b9916d3478a75f11f162628a2139991b6c03ab3f1d9ab7c86075dc8eab4 + mime-types: ^3.0.0 + negotiator: ^1.0.0 + checksum: 49fe6c050cb6f6ff4e771b4d88324fca4d3127865f2473872e818dca127d809ba3aa8fdfc7acb51dd3c5bade7311ca6b8cfff7015ea6db2f7eb9c8444d223a4f languageName: node linkType: hard @@ -4143,9 +4174,9 @@ __metadata: languageName: node linkType: hard -"ajv-formats@npm:2.1.1": - version: 2.1.1 - resolution: "ajv-formats@npm:2.1.1" +"ajv-formats@npm:3.0.1": + version: 3.0.1 + resolution: "ajv-formats@npm:3.0.1" dependencies: ajv: ^8.0.0 peerDependencies: @@ -4153,19 +4184,19 @@ __metadata: peerDependenciesMeta: ajv: optional: true - checksum: 4a287d937f1ebaad4683249a4c40c0fa3beed30d9ddc0adba04859026a622da0d317851316ea64b3680dc60f5c3c708105ddd5d5db8fe595d9d0207fd19f90b7 + checksum: f4e1fe232d67fcafc02eafe373a7a9962351e0439dd0736647ca75c93c3da23b430b6502c255ab4315410ae330d4f3013ac9fe226c40b2524ca93a58e786d086 languageName: node linkType: hard -"ajv@npm:8.12.0, ajv@npm:^8.0.0": - version: 8.12.0 - resolution: "ajv@npm:8.12.0" +"ajv@npm:8.17.1": + version: 8.17.1 + resolution: "ajv@npm:8.17.1" dependencies: - fast-deep-equal: ^3.1.1 + fast-deep-equal: ^3.1.3 + fast-uri: ^3.0.1 json-schema-traverse: ^1.0.0 require-from-string: ^2.0.2 - uri-js: ^4.2.2 - checksum: 4dc13714e316e67537c8b31bc063f99a1d9d9a497eb4bbd55191ac0dcd5e4985bbb71570352ad6f1e76684fb6d790928f96ba3b2d4fd6e10024be9612fe3f001 + checksum: 1797bf242cfffbaf3b870d13565bd1716b73f214bb7ada9a497063aada210200da36e3ed40237285f3255acc4feeae91b1fb183625331bad27da95973f7253d9 languageName: node linkType: hard @@ -4181,6 +4212,18 @@ __metadata: languageName: node linkType: hard +"ajv@npm:^8.0.0": + version: 8.12.0 + resolution: "ajv@npm:8.12.0" + dependencies: + fast-deep-equal: ^3.1.1 + json-schema-traverse: ^1.0.0 + require-from-string: ^2.0.2 + uri-js: ^4.2.2 + checksum: 4dc13714e316e67537c8b31bc063f99a1d9d9a497eb4bbd55191ac0dcd5e4985bbb71570352ad6f1e76684fb6d790928f96ba3b2d4fd6e10024be9612fe3f001 + languageName: node + linkType: hard + "ansi-align@npm:^3.0.0": version: 3.0.1 resolution: "ansi-align@npm:3.0.1" @@ -4333,10 +4376,10 @@ __metadata: languageName: node linkType: hard -"array-flatten@npm:1.1.1": - version: 1.1.1 - resolution: "array-flatten@npm:1.1.1" - checksum: a9925bf3512d9dce202112965de90c222cd59a4fbfce68a0951d25d965cf44642931f40aac72309c41f12df19afa010ecadceb07cfff9ccc1621e99d89ab5f3b +"array-flatten@npm:3.0.0": + version: 3.0.0 + resolution: "array-flatten@npm:3.0.0" + checksum: ad00c51ca70cf837501fb6da823ba39bc6a86b43d0b76d840daa02fe0f8e68e94ad5bc2d0d038053118b879aaca8ea6168c32c7387a2fa5b118ad28db4f1f863 languageName: node linkType: hard @@ -4353,6 +4396,13 @@ __metadata: languageName: node linkType: hard +"array-timsort@npm:^1.0.3": + version: 1.0.3 + resolution: "array-timsort@npm:1.0.3" + checksum: fd4b5b0911214bdc8b5699ed10d309685551b518b3819c611c967cff59b87aee01cf591a10e36a3f14dbff696984bd6682b845f6fdbf1217195e910f241a4f78 + languageName: node + linkType: hard + "array-union@npm:^2.1.0": version: 2.1.0 resolution: "array-union@npm:2.1.0" @@ -4697,43 +4747,21 @@ __metadata: languageName: node linkType: hard -"body-parser@npm:1.20.1": - version: 1.20.1 - resolution: "body-parser@npm:1.20.1" - dependencies: - bytes: 3.1.2 - content-type: ~1.0.4 - debug: 2.6.9 - depd: 2.0.0 - destroy: 1.2.0 - http-errors: 2.0.0 - iconv-lite: 0.4.24 - on-finished: 2.4.1 - qs: 6.11.0 - raw-body: 2.5.1 - type-is: ~1.6.18 - unpipe: 1.0.0 - checksum: f1050dbac3bede6a78f0b87947a8d548ce43f91ccc718a50dd774f3c81f2d8b04693e52acf62659fad23101827dd318da1fb1363444ff9a8482b886a3e4a5266 - languageName: node - linkType: hard - -"body-parser@npm:1.20.2": - version: 1.20.2 - resolution: "body-parser@npm:1.20.2" +"body-parser@npm:^2.0.1": + version: 2.0.2 + resolution: "body-parser@npm:2.0.2" dependencies: bytes: 3.1.2 content-type: ~1.0.5 - debug: 2.6.9 - depd: 2.0.0 + debug: 3.1.0 destroy: 1.2.0 http-errors: 2.0.0 - iconv-lite: 0.4.24 + iconv-lite: 0.5.2 on-finished: 2.4.1 - qs: 6.11.0 - raw-body: 2.5.2 + qs: 6.13.0 + raw-body: ^3.0.0 type-is: ~1.6.18 - unpipe: 1.0.0 - checksum: 14d37ec638ab5c93f6099ecaed7f28f890d222c650c69306872e00b9efa081ff6c596cd9afb9930656aae4d6c4e1c17537bea12bb73c87a217cb3cfea8896737 + checksum: 24514663b0569f6d918e6111c6938950a91021d7816de41cd77775d3904a2ea32fffd35004eb3d7f0e1c10e73b7f683203420c4216b076ecf747be44be805175 languageName: node linkType: hard @@ -4963,6 +4991,16 @@ __metadata: languageName: node linkType: hard +"call-bind-apply-helpers@npm:^1.0.1": + version: 1.0.1 + resolution: "call-bind-apply-helpers@npm:1.0.1" + dependencies: + es-errors: ^1.3.0 + function-bind: ^1.1.2 + checksum: 3c55343261bb387c58a4762d15ad9d42053659a62681ec5eb50690c6b52a4a666302a01d557133ce6533e8bd04530ee3b209f23dd06c9577a1925556f8fcccdf + languageName: node + linkType: hard + "call-bind@npm:^1.0.0, call-bind@npm:^1.0.2": version: 1.0.2 resolution: "call-bind@npm:1.0.2" @@ -4973,6 +5011,16 @@ __metadata: languageName: node linkType: hard +"call-bound@npm:^1.0.2": + version: 1.0.3 + resolution: "call-bound@npm:1.0.3" + dependencies: + call-bind-apply-helpers: ^1.0.1 + get-intrinsic: ^1.2.6 + checksum: a93bbe0f2d0a2d6c144a4349ccd0593d5d0d5d9309b69101710644af8964286420062f2cc3114dca120b9bc8cc07507952d4b1b3ea7672e0d7f6f1675efedb32 + languageName: node + linkType: hard + "callsites@npm:^3.0.0": version: 3.1.0 resolution: "callsites@npm:3.1.0" @@ -5332,6 +5380,19 @@ __metadata: languageName: node linkType: hard +"comment-json@npm:4.2.5": + version: 4.2.5 + resolution: "comment-json@npm:4.2.5" + dependencies: + array-timsort: ^1.0.3 + core-util-is: ^1.0.3 + esprima: ^4.0.1 + has-own-prop: ^2.0.0 + repeat-string: ^1.6.1 + checksum: 6dfc7b83d079595f3fd397af1fe2c48537c0a6fe537f718c4a9e5fbdbb78bb8c2bf0aebc0cc64d14c4807eb030f3e5357235a5adcc366457ab4059256d57f59c + languageName: node + linkType: hard + "concat-map@npm:0.0.1": version: 0.0.1 resolution: "concat-map@npm:0.0.1" @@ -5365,10 +5426,10 @@ __metadata: languageName: node linkType: hard -"consola@npm:^2.15.0": - version: 2.15.3 - resolution: "consola@npm:2.15.3" - checksum: 8ef7a09b703ec67ac5c389a372a33b6dc97eda6c9876443a60d76a3076eea0259e7f67a4e54fd5a52f97df73690822d090cf8b7e102b5761348afef7c6d03e28 +"consola@npm:^3.2.3": + version: 3.4.0 + resolution: "consola@npm:3.4.0" + checksum: 03d9ee487a53b710f53aeff18447a242d95c080aff051389b5ee49915bebb38cb31687e144e1bb3dd6ebcfc454fef566cc5912f6150c7cfe9349947ba09a5a87 languageName: node linkType: hard @@ -5379,16 +5440,16 @@ __metadata: languageName: node linkType: hard -"content-disposition@npm:0.5.4": - version: 0.5.4 - resolution: "content-disposition@npm:0.5.4" +"content-disposition@npm:^1.0.0": + version: 1.0.0 + resolution: "content-disposition@npm:1.0.0" dependencies: safe-buffer: 5.2.1 - checksum: afb9d545e296a5171d7574fcad634b2fdf698875f4006a9dd04a3e1333880c5c0c98d47b560d01216fb6505a54a2ba6a843ee3a02ec86d7e911e8315255f56c3 + checksum: b27e2579fefe0ecf78238bb652fbc750671efce8344f0c6f05235b12433e6a965adb40906df1ac1fdde23e8f9f0e58385e44640e633165420f3f47d830ae0398 languageName: node linkType: hard -"content-type@npm:~1.0.4, content-type@npm:~1.0.5": +"content-type@npm:^1.0.5, content-type@npm:~1.0.4, content-type@npm:~1.0.5": version: 1.0.5 resolution: "content-type@npm:1.0.5" checksum: 566271e0a251642254cde0f845f9dd4f9856e52d988f4eb0d0dcffbb7a1f8ec98de7a5215fc628f3bce30fe2fb6fd2bc064b562d721658c59b544e2d34ea2766 @@ -5409,17 +5470,17 @@ __metadata: languageName: node linkType: hard -"cookie-signature@npm:1.0.6": - version: 1.0.6 - resolution: "cookie-signature@npm:1.0.6" - checksum: f4e1b0a98a27a0e6e66fd7ea4e4e9d8e038f624058371bf4499cfcd8f3980be9a121486995202ba3fca74fbed93a407d6d54d43a43f96fd28d0bd7a06761591a +"cookie-signature@npm:^1.2.1": + version: 1.2.2 + resolution: "cookie-signature@npm:1.2.2" + checksum: 1ad4f9b3907c9f3673a0f0a07c0a23da7909ac6c9204c5d80a0ec102fe50ccc45f27fdf496361840d6c132c5bb0037122c0a381f856d070183d1ebe3e5e041ff languageName: node linkType: hard -"cookie@npm:0.5.0": - version: 0.5.0 - resolution: "cookie@npm:0.5.0" - checksum: 1f4bd2ca5765f8c9689a7e8954183f5332139eb72b6ff783d8947032ec1fdf43109852c178e21a953a30c0dd42257828185be01b49d1eb1a67fd054ca588a180 +"cookie@npm:0.7.1": + version: 0.7.1 + resolution: "cookie@npm:0.7.1" + checksum: cec5e425549b3650eb5c3498a9ba3cde0b9cd419e3b36e4b92739d30b4d89e0b678b98c1ddc209ce7cf958cd3215671fd6ac47aec21f10c2a0cc68abd399d8a7 languageName: node linkType: hard @@ -5432,7 +5493,7 @@ __metadata: languageName: node linkType: hard -"core-util-is@npm:~1.0.0": +"core-util-is@npm:^1.0.3, core-util-is@npm:~1.0.0": version: 1.0.3 resolution: "core-util-is@npm:1.0.3" checksum: 9de8597363a8e9b9952491ebe18167e3b36e7707569eed0ebf14f8bba773611376466ae34575bca8cfe3c767890c859c74056084738f09d4e4a6f902b2ad7d99 @@ -5492,12 +5553,13 @@ __metadata: languageName: node linkType: hard -"cron@npm:2.3.1": - version: 2.3.1 - resolution: "cron@npm:2.3.1" +"cron@npm:3.5.0": + version: 3.5.0 + resolution: "cron@npm:3.5.0" dependencies: - luxon: ^3.2.1 - checksum: ac27c257cb8dba4b51978b4767119fc79bfc0dfa35ef0be2533bc4142ae006130515236e2102d04ee3ce44bffc2a4e37a3bee18a2152bbb303bf5ff944e25204 + "@types/luxon": ~3.4.0 + luxon: ~3.5.0 + checksum: 4fa321201ea7d9ee64411f12e18c1fe6d3fd7c83b33a97ccdcb81f6f2db8c0d3f3b2e23d2b4f70ee85ad30a915e86e05c31ee8ee8f2c385be26b877fce1abc5d languageName: node linkType: hard @@ -5575,6 +5637,15 @@ __metadata: languageName: node linkType: hard +"debug@npm:3.1.0": + version: 3.1.0 + resolution: "debug@npm:3.1.0" + dependencies: + ms: 2.0.0 + checksum: 0b52718ab957254a5b3ca07fc34543bc778f358620c206a08452251eb7fc193c3ea3505072acbf4350219c14e2d71ceb7bdaa0d3370aa630b50da790458d08b3 + languageName: node + linkType: hard + "debug@npm:4, debug@npm:^4.0.0, debug@npm:^4.1.0, debug@npm:^4.1.1, debug@npm:^4.3.1, debug@npm:^4.3.2, debug@npm:^4.3.3, debug@npm:^4.3.4": version: 4.3.4 resolution: "debug@npm:4.3.4" @@ -5587,6 +5658,18 @@ __metadata: languageName: node linkType: hard +"debug@npm:4.3.6": + version: 4.3.6 + resolution: "debug@npm:4.3.6" + dependencies: + ms: 2.1.2 + peerDependenciesMeta: + supports-color: + optional: true + checksum: 1630b748dea3c581295e02137a9f5cbe2c1d85fea35c1e6597a65ca2b16a6fce68cec61b299d480787ef310ba927dc8c92d3061faba0ad06c6a724672f66be7f + languageName: node + linkType: hard + "debug@npm:^3.2.7": version: 3.2.7 resolution: "debug@npm:3.2.7" @@ -5596,6 +5679,18 @@ __metadata: languageName: node linkType: hard +"debug@npm:^4.3.5": + version: 4.4.0 + resolution: "debug@npm:4.4.0" + dependencies: + ms: ^2.1.3 + peerDependenciesMeta: + supports-color: + optional: true + checksum: fb42df878dd0e22816fc56e1fdca9da73caa85212fbe40c868b1295a6878f9101ae684f4eeef516c13acfc700f5ea07f1136954f43d4cd2d477a811144136479 + languageName: node + linkType: hard + "decode-uri-component@npm:^0.2.0": version: 0.2.2 resolution: "decode-uri-component@npm:0.2.2" @@ -5701,7 +5796,7 @@ __metadata: languageName: node linkType: hard -"destroy@npm:1.2.0": +"destroy@npm:1.2.0, destroy@npm:^1.2.0": version: 1.2.0 resolution: "destroy@npm:1.2.0" checksum: 0acb300b7478a08b92d810ab229d5afe0d2f4399272045ab22affa0d99dbaf12637659411530a6fcd597a9bdac718fc94373a61a95b4651bbc7b83684a565e38 @@ -5799,6 +5894,17 @@ __metadata: languageName: node linkType: hard +"dunder-proto@npm:^1.0.1": + version: 1.0.1 + resolution: "dunder-proto@npm:1.0.1" + dependencies: + call-bind-apply-helpers: ^1.0.1 + es-errors: ^1.3.0 + gopd: ^1.2.0 + checksum: 149207e36f07bd4941921b0ca929e3a28f1da7bd6b6ff8ff7f4e2f2e460675af4576eeba359c635723dc189b64cdd4787e0255897d5b135ccc5d15cb8685fc90 + languageName: node + linkType: hard + "duplexer3@npm:^0.1.4": version: 0.1.5 resolution: "duplexer3@npm:0.1.5" @@ -5911,6 +6017,13 @@ __metadata: languageName: node linkType: hard +"encodeurl@npm:^2.0.0, encodeurl@npm:~2.0.0": + version: 2.0.0 + resolution: "encodeurl@npm:2.0.0" + checksum: abf5cd51b78082cf8af7be6785813c33b6df2068ce5191a40ca8b1afe6a86f9230af9a9ce694a5ce4665955e5c1120871826df9c128a642e09c58d592e2807fe + languageName: node + linkType: hard + "encodeurl@npm:~1.0.2": version: 1.0.2 resolution: "encodeurl@npm:1.0.2" @@ -6011,6 +6124,29 @@ __metadata: languageName: node linkType: hard +"es-define-property@npm:^1.0.1": + version: 1.0.1 + resolution: "es-define-property@npm:1.0.1" + checksum: 0512f4e5d564021c9e3a644437b0155af2679d10d80f21adaf868e64d30efdfbd321631956f20f42d655fedb2e3a027da479fad3fa6048f768eb453a80a5f80a + languageName: node + linkType: hard + +"es-errors@npm:^1.3.0": + version: 1.3.0 + resolution: "es-errors@npm:1.3.0" + checksum: ec1414527a0ccacd7f15f4a3bc66e215f04f595ba23ca75cdae0927af099b5ec865f9f4d33e9d7e86f512f252876ac77d4281a7871531a50678132429b1271b5 + languageName: node + linkType: hard + +"es-object-atoms@npm:^1.0.0": + version: 1.1.1 + resolution: "es-object-atoms@npm:1.1.1" + dependencies: + es-errors: ^1.3.0 + checksum: 214d3767287b12f36d3d7267ef342bbbe1e89f899cfd67040309fc65032372a8e60201410a99a1645f2f90c1912c8c49c8668066f6bdd954bcd614dda2e3da97 + languageName: node + linkType: hard + "es-set-tostringtag@npm:^2.0.1": version: 2.0.1 resolution: "es-set-tostringtag@npm:2.0.1" @@ -6095,7 +6231,7 @@ __metadata: languageName: node linkType: hard -"escape-html@npm:~1.0.3": +"escape-html@npm:^1.0.3, escape-html@npm:~1.0.3": version: 1.0.3 resolution: "escape-html@npm:1.0.3" checksum: 6213ca9ae00d0ab8bccb6d8d4e0a98e76237b2410302cf7df70aaa6591d509a2a37ce8998008cbecae8fc8ffaadf3fb0229535e6a145f3ce0b211d060decbb24 @@ -6322,7 +6458,7 @@ __metadata: languageName: node linkType: hard -"esprima@npm:^4.0.0": +"esprima@npm:^4.0.0, esprima@npm:^4.0.1": version: 4.0.1 resolution: "esprima@npm:4.0.1" bin: @@ -6371,7 +6507,7 @@ __metadata: languageName: node linkType: hard -"etag@npm:~1.8.1": +"etag@npm:^1.8.1, etag@npm:~1.8.1": version: 1.8.1 resolution: "etag@npm:1.8.1" checksum: 571aeb3dbe0f2bbd4e4fadbdb44f325fc75335cd5f6f6b6a091e6a06a9f25ed5392f0863c5442acb0646787446e816f13cbfc6edce5b07658541dff573cab1ff @@ -6557,42 +6693,43 @@ __metadata: languageName: node linkType: hard -"express@npm:4.18.2": - version: 4.18.2 - resolution: "express@npm:4.18.2" +"express@npm:5.0.1": + version: 5.0.1 + resolution: "express@npm:5.0.1" dependencies: - accepts: ~1.3.8 - array-flatten: 1.1.1 - body-parser: 1.20.1 - content-disposition: 0.5.4 + accepts: ^2.0.0 + body-parser: ^2.0.1 + content-disposition: ^1.0.0 content-type: ~1.0.4 - cookie: 0.5.0 - cookie-signature: 1.0.6 - debug: 2.6.9 + cookie: 0.7.1 + cookie-signature: ^1.2.1 + debug: 4.3.6 depd: 2.0.0 - encodeurl: ~1.0.2 + encodeurl: ~2.0.0 escape-html: ~1.0.3 etag: ~1.8.1 - finalhandler: 1.2.0 - fresh: 0.5.2 + finalhandler: ^2.0.0 + fresh: 2.0.0 http-errors: 2.0.0 - merge-descriptors: 1.0.1 + merge-descriptors: ^2.0.0 methods: ~1.1.2 + mime-types: ^3.0.0 on-finished: 2.4.1 + once: 1.4.0 parseurl: ~1.3.3 - path-to-regexp: 0.1.7 proxy-addr: ~2.0.7 - qs: 6.11.0 + qs: 6.13.0 range-parser: ~1.2.1 + router: ^2.0.0 safe-buffer: 5.2.1 - send: 0.18.0 - serve-static: 1.15.0 + send: ^1.1.0 + serve-static: ^2.1.0 setprototypeof: 1.2.0 statuses: 2.0.1 - type-is: ~1.6.18 + type-is: ^2.0.0 utils-merge: 1.0.1 vary: ~1.1.2 - checksum: 3c4b9b076879442f6b968fe53d85d9f1eeacbb4f4c41e5f16cc36d77ce39a2b0d81b3f250514982110d815b2f7173f5561367f9110fcc541f9371948e8c8b037 + checksum: d1a3e934a2e3c5d7491049dabbedf6290e942b081a76e88598f3b0870ae53d4177c116ab5056bdbb32fc3cf556d3388362b689d06b73aaba7de67c2af29fd25b languageName: node linkType: hard @@ -6667,6 +6804,13 @@ __metadata: languageName: node linkType: hard +"fast-uri@npm:^3.0.1": + version: 3.0.6 + resolution: "fast-uri@npm:3.0.6" + checksum: 7161ba2a7944778d679ba8e5f00d6a2bb479a2142df0982f541d67be6c979b17808f7edbb0ce78161c85035974bde3fa52b5137df31da46c0828cb629ba67c4e + languageName: node + linkType: hard + "fastq@npm:^1.6.0": version: 1.15.0 resolution: "fastq@npm:1.15.0" @@ -6728,9 +6872,9 @@ __metadata: languageName: node linkType: hard -"finalhandler@npm:1.2.0": - version: 1.2.0 - resolution: "finalhandler@npm:1.2.0" +"finalhandler@npm:^2.0.0": + version: 2.0.0 + resolution: "finalhandler@npm:2.0.0" dependencies: debug: 2.6.9 encodeurl: ~1.0.2 @@ -6739,7 +6883,7 @@ __metadata: parseurl: ~1.3.3 statuses: 2.0.1 unpipe: ~1.0.0 - checksum: 92effbfd32e22a7dff2994acedbd9bcc3aa646a3e919ea6a53238090e87097f8ef07cced90aa2cc421abdf993aefbdd5b00104d55c7c5479a8d00ed105b45716 + checksum: 51403fd0b8f156aabb91040875d01e4f9f4fae8e356427dbf19d29956fc3a28c3fccfcb8bd50ea7318b390e67b8906a821a7ec9526f44de2f116fa409fed80de languageName: node linkType: hard @@ -6881,7 +7025,14 @@ __metadata: languageName: node linkType: hard -"fresh@npm:0.5.2": +"fresh@npm:2.0.0": + version: 2.0.0 + resolution: "fresh@npm:2.0.0" + checksum: 38b9828352c6271e2a0dd8bdd985d0100dbbc4eb8b6a03286071dd6f7d96cfaacd06d7735701ad9a95870eb3f4555e67c08db1dcfe24c2e7bb87383c72fae1d2 + languageName: node + linkType: hard + +"fresh@npm:^0.5.2": version: 0.5.2 resolution: "fresh@npm:0.5.2" checksum: 13ea8b08f91e669a64e3ba3a20eb79d7ca5379a81f1ff7f4310d54e2320645503cc0c78daedc93dfb6191287295f6479544a649c64d8e41a1c0fb0c221552346 @@ -6950,6 +7101,13 @@ __metadata: languageName: node linkType: hard +"function-bind@npm:^1.1.2": + version: 1.1.2 + resolution: "function-bind@npm:1.1.2" + checksum: 2b0ff4ce708d99715ad14a6d1f894e2a83242e4a52ccfcefaee5e40050562e5f6dafc1adbb4ce2d4ab47279a45dc736ab91ea5042d843c3c092820dfe032efb1 + languageName: node + linkType: hard + "function.prototype.name@npm:^1.1.5": version: 1.1.5 resolution: "function.prototype.name@npm:1.1.5" @@ -7011,6 +7169,24 @@ __metadata: languageName: node linkType: hard +"get-intrinsic@npm:^1.2.5, get-intrinsic@npm:^1.2.6": + version: 1.2.7 + resolution: "get-intrinsic@npm:1.2.7" + dependencies: + call-bind-apply-helpers: ^1.0.1 + es-define-property: ^1.0.1 + es-errors: ^1.3.0 + es-object-atoms: ^1.0.0 + function-bind: ^1.1.2 + get-proto: ^1.0.0 + gopd: ^1.2.0 + has-symbols: ^1.1.0 + hasown: ^2.0.2 + math-intrinsics: ^1.1.0 + checksum: a1597b3b432074f805b6a0ba1182130dd6517c0ea0c4eecc4b8834c803913e1ea62dfc412865be795b3dacb1555a21775b70cf9af7a18b1454ff3414e5442d4a + languageName: node + linkType: hard + "get-package-type@npm:^0.1.0": version: 0.1.0 resolution: "get-package-type@npm:0.1.0" @@ -7018,6 +7194,16 @@ __metadata: languageName: node linkType: hard +"get-proto@npm:^1.0.0": + version: 1.0.1 + resolution: "get-proto@npm:1.0.1" + dependencies: + dunder-proto: ^1.0.1 + es-object-atoms: ^1.0.0 + checksum: 4fc96afdb58ced9a67558698b91433e6b037aaa6f1493af77498d7c85b141382cf223c0e5946f334fb328ee85dfe6edd06d218eaf09556f4bc4ec6005d7f5f7b + languageName: node + linkType: hard + "get-stream@npm:^4.1.0": version: 4.1.0 resolution: "get-stream@npm:4.1.0" @@ -7215,6 +7401,13 @@ __metadata: languageName: node linkType: hard +"gopd@npm:^1.2.0": + version: 1.2.0 + resolution: "gopd@npm:1.2.0" + checksum: cc6d8e655e360955bdccaca51a12a474268f95bb793fc3e1f2bdadb075f28bfd1fd988dab872daf77a61d78cbaf13744bc8727a17cfb1d150d76047d805375f3 + languageName: node + linkType: hard + "got@npm:^9.6.0": version: 9.6.0 resolution: "got@npm:9.6.0" @@ -7294,6 +7487,13 @@ __metadata: languageName: node linkType: hard +"has-own-prop@npm:^2.0.0": + version: 2.0.0 + resolution: "has-own-prop@npm:2.0.0" + checksum: ca6336e85ead2295c9603880cbc199e2d3ff7eaea0e9035d68fbc79892e9cf681abc62c0909520f112c671dad9961be2173b21dff951358cc98425c560e789e0 + languageName: node + linkType: hard + "has-property-descriptors@npm:^1.0.0": version: 1.0.0 resolution: "has-property-descriptors@npm:1.0.0" @@ -7317,6 +7517,13 @@ __metadata: languageName: node linkType: hard +"has-symbols@npm:^1.1.0": + version: 1.1.0 + resolution: "has-symbols@npm:1.1.0" + checksum: b2316c7302a0e8ba3aaba215f834e96c22c86f192e7310bdf689dd0e6999510c89b00fbc5742571507cebf25764d68c988b3a0da217369a73596191ac0ce694b + languageName: node + linkType: hard + "has-tostringtag@npm:^1.0.0": version: 1.0.0 resolution: "has-tostringtag@npm:1.0.0" @@ -7370,6 +7577,15 @@ __metadata: languageName: node linkType: hard +"hasown@npm:^2.0.2": + version: 2.0.2 + resolution: "hasown@npm:2.0.2" + dependencies: + function-bind: ^1.1.2 + checksum: e8516f776a15149ca6c6ed2ae3110c417a00b62260e222590e54aa367cbcd6ed99122020b37b7fbdf05748df57b265e70095d7bf35a47660587619b15ffb93db + languageName: node + linkType: hard + "hmac-drbg@npm:^1.0.1": version: 1.0.1 resolution: "hmac-drbg@npm:1.0.1" @@ -7404,7 +7620,7 @@ __metadata: languageName: node linkType: hard -"http-errors@npm:2.0.0": +"http-errors@npm:2.0.0, http-errors@npm:^2.0.0": version: 2.0.0 resolution: "http-errors@npm:2.0.0" dependencies: @@ -7470,16 +7686,16 @@ __metadata: languageName: node linkType: hard -"iconv-lite@npm:0.4.24": - version: 0.4.24 - resolution: "iconv-lite@npm:0.4.24" +"iconv-lite@npm:0.5.2": + version: 0.5.2 + resolution: "iconv-lite@npm:0.5.2" dependencies: safer-buffer: ">= 2.1.2 < 3" - checksum: bd9f120f5a5b306f0bc0b9ae1edeb1577161503f5f8252a20f1a9e56ef8775c9959fd01c55f2d3a39d9a8abaf3e30c1abeb1895f367dcbbe0a8fd1c9ca01c4f6 + checksum: aa184914b74db7a23feb98cad3e4ed22058f2aa27c5613a127327423b3230a0b934665c2aecf5dc657a58a59891c92fd1e721ed160d1b2f3c682bc26e3fe3f14 languageName: node linkType: hard -"iconv-lite@npm:^0.6.2": +"iconv-lite@npm:0.6.3, iconv-lite@npm:^0.6.2": version: 0.6.3 resolution: "iconv-lite@npm:0.6.3" dependencies: @@ -7870,6 +8086,13 @@ __metadata: languageName: node linkType: hard +"is-promise@npm:4.0.0": + version: 4.0.0 + resolution: "is-promise@npm:4.0.0" + checksum: 0b46517ad47b00b6358fd6553c83ec1f6ba9acd7ffb3d30a0bf519c5c69e7147c132430452351b8a9fc198f8dd6c4f76f8e6f5a7f100f8c77d57d9e0f4261a8a + languageName: node + linkType: hard + "is-regex@npm:^1.1.4": version: 1.1.4 resolution: "is-regex@npm:1.1.4" @@ -8744,10 +8967,10 @@ __metadata: languageName: node linkType: hard -"jsonc-parser@npm:3.2.0": - version: 3.2.0 - resolution: "jsonc-parser@npm:3.2.0" - checksum: 946dd9a5f326b745aa326d48a7257e3f4a4b62c5e98ec8e49fa2bdd8d96cef7e6febf1399f5c7016114fd1f68a1c62c6138826d5d90bc650448e3cf0951c53c7 +"jsonc-parser@npm:3.3.1": + version: 3.3.1 + resolution: "jsonc-parser@npm:3.3.1" + checksum: 81ef19d98d9c6bd6e4a37a95e2753c51c21705cbeffd895e177f4b542cca9cda5fda12fb942a71a2e824a9132cf119dc2e642e9286386055e1365b5478f49a47 languageName: node linkType: hard @@ -9072,19 +9295,19 @@ __metadata: languageName: node linkType: hard -"luxon@npm:^3.2.1": - version: 3.3.0 - resolution: "luxon@npm:3.3.0" - checksum: 50cf17a0dc155c3dcacbeae8c0b7e80db425e0ba97b9cbdf12a7fc142d841ff1ab1560919f033af46240ed44e2f70c49f76e3422524c7fc8bb8d81ca47c66187 +"luxon@npm:~3.5.0": + version: 3.5.0 + resolution: "luxon@npm:3.5.0" + checksum: f290fe5788c8e51e748744f05092160d4be12150dca70f9fadc0d233e53d60ce86acd82e7d909a114730a136a77e56f0d3ebac6141bbb82fd310969a4704825b languageName: node linkType: hard -"magic-string@npm:0.30.0": - version: 0.30.0 - resolution: "magic-string@npm:0.30.0" +"magic-string@npm:0.30.12": + version: 0.30.12 + resolution: "magic-string@npm:0.30.12" dependencies: - "@jridgewell/sourcemap-codec": ^1.4.13 - checksum: 7bdf22e27334d8a393858a16f5f840af63a7c05848c000fd714da5aa5eefa09a1bc01d8469362f25cc5c4a14ec01b46557b7fff8751365522acddf21e57c488d + "@jridgewell/sourcemap-codec": ^1.5.0 + checksum: 3f0d23b74371765f0e6cad4284eebba0ac029c7a55e39292de5aa92281afb827138cb2323d24d2924f6b31f138c3783596c5ccaa98653fe9cf122e1f81325b59 languageName: node linkType: hard @@ -9136,6 +9359,13 @@ __metadata: languageName: node linkType: hard +"math-intrinsics@npm:^1.1.0": + version: 1.1.0 + resolution: "math-intrinsics@npm:1.1.0" + checksum: 0e513b29d120f478c85a70f49da0b8b19bc638975eca466f2eeae0071f3ad00454c621bf66e16dd435896c208e719fc91ad79bbfba4e400fe0b372e7c1c9c9a2 + languageName: node + linkType: hard + "md5.js@npm:^1.3.4": version: 1.3.5 resolution: "md5.js@npm:1.3.5" @@ -9188,10 +9418,17 @@ __metadata: languageName: node linkType: hard -"merge-descriptors@npm:1.0.1": - version: 1.0.1 - resolution: "merge-descriptors@npm:1.0.1" - checksum: 5abc259d2ae25bb06d19ce2b94a21632583c74e2a9109ee1ba7fd147aa7362b380d971e0251069f8b3eb7d48c21ac839e21fa177b335e82c76ec172e30c31a26 +"media-typer@npm:^1.1.0": + version: 1.1.0 + resolution: "media-typer@npm:1.1.0" + checksum: a58dd60804df73c672942a7253ccc06815612326dc1c0827984b1a21704466d7cde351394f47649e56cf7415e6ee2e26e000e81b51b3eebb5a93540e8bf93cbd + languageName: node + linkType: hard + +"merge-descriptors@npm:^2.0.0": + version: 2.0.0 + resolution: "merge-descriptors@npm:2.0.0" + checksum: e383332e700a94682d0125a36c8be761142a1320fc9feeb18e6e36647c9edf064271645f5669b2c21cf352116e561914fd8aa831b651f34db15ef4038c86696a languageName: node linkType: hard @@ -9252,7 +9489,14 @@ __metadata: languageName: node linkType: hard -"mime-types@npm:^2.1.12, mime-types@npm:~2.1.24, mime-types@npm:~2.1.34": +"mime-db@npm:^1.53.0": + version: 1.53.0 + resolution: "mime-db@npm:1.53.0" + checksum: 3fd9380bdc0b085d0b56b580e4f89ca4fc3b823722310d795c248f0806b9a80afd5d8f4347f015ad943b9ecfa7cc0b71dffa0db96fa776d01a13474821a2c7fb + languageName: node + linkType: hard + +"mime-types@npm:^2.1.12, mime-types@npm:^2.1.35, mime-types@npm:~2.1.24": version: 2.1.35 resolution: "mime-types@npm:2.1.35" dependencies: @@ -9261,12 +9505,12 @@ __metadata: languageName: node linkType: hard -"mime@npm:1.6.0": - version: 1.6.0 - resolution: "mime@npm:1.6.0" - bin: - mime: cli.js - checksum: fef25e39263e6d207580bdc629f8872a3f9772c923c7f8c7e793175cee22777bbe8bba95e5d509a40aaa292d8974514ce634ae35769faa45f22d17edda5e8557 +"mime-types@npm:^3.0.0": + version: 3.0.0 + resolution: "mime-types@npm:3.0.0" + dependencies: + mime-db: ^1.53.0 + checksum: 2d87c94ff682c61b9a5727c37ba66e199aba2d6a85465b41722ca7281629c32848601b540339d12a97d1b6ab39f94f9e63a72530dd7c22ee57ff25e1038af039 languageName: node linkType: hard @@ -9515,16 +9759,16 @@ __metadata: languageName: node linkType: hard -"ms@npm:2.1.3, ms@npm:^2.0.0, ms@npm:^2.1.1": +"ms@npm:^2.0.0, ms@npm:^2.1.1, ms@npm:^2.1.3": version: 2.1.3 resolution: "ms@npm:2.1.3" checksum: aa92de608021b242401676e35cfa5aa42dd70cbdc082b916da7fb925c542173e36bce97ea3e804923fe92c0ad991434e4a38327e15a1b5b5f945d66df615ae6d languageName: node linkType: hard -"multer@npm:1.4.4-lts.1": - version: 1.4.4-lts.1 - resolution: "multer@npm:1.4.4-lts.1" +"multer@npm:1.4.5-lts.1": + version: 1.4.5-lts.1 + resolution: "multer@npm:1.4.5-lts.1" dependencies: append-field: ^1.0.0 busboy: ^1.0.0 @@ -9533,7 +9777,7 @@ __metadata: object-assign: ^4.1.1 type-is: ^1.6.4 xtend: ^4.0.0 - checksum: da04b06efdbff9bd42d9f71297eeb2c0566231a4b9c895f49479c09b163c5e404aa6e58bd1c19f006f82e2114362545e39cbf7e0163ffd8d73d0f88adf4489e2 + checksum: d6dfa78a6ec592b74890412f8962da8a87a3dcfe20f612e039b735b8e0faa72c735516c447f7de694ee0d981eb0a1b892fb9e2402a0348dc6091d18c38d89ecc languageName: node linkType: hard @@ -9564,13 +9808,20 @@ __metadata: languageName: node linkType: hard -"negotiator@npm:0.6.3, negotiator@npm:^0.6.3": +"negotiator@npm:^0.6.3": version: 0.6.3 resolution: "negotiator@npm:0.6.3" checksum: b8ffeb1e262eff7968fc90a2b6767b04cfd9842582a9d0ece0af7049537266e7b2506dfb1d107a32f06dd849ab2aea834d5830f7f4d0e5cb7d36e1ae55d021d9 languageName: node linkType: hard +"negotiator@npm:^1.0.0": + version: 1.0.0 + resolution: "negotiator@npm:1.0.0" + checksum: 20ebfe79b2d2e7cf9cbc8239a72662b584f71164096e6e8896c8325055497c96f6b80cd22c258e8a2f2aa382a787795ec3ee8b37b422a302c7d4381b0d5ecfbb + languageName: node + linkType: hard + "new-github-release-url@npm:^1.0.0": version: 1.0.0 resolution: "new-github-release-url@npm:1.0.0" @@ -9782,6 +10033,13 @@ __metadata: languageName: node linkType: hard +"object-inspect@npm:^1.13.3": + version: 1.13.4 + resolution: "object-inspect@npm:1.13.4" + checksum: 582810c6a8d2ef988ea0a39e69e115a138dad8f42dd445383b394877e5816eb4268489f316a6f74ee9c4e0a984b3eab1028e3e79d62b1ed67c726661d55c7a8b + languageName: node + linkType: hard + "object-keys@npm:^1.1.1": version: 1.1.1 resolution: "object-keys@npm:1.1.1" @@ -9812,7 +10070,7 @@ __metadata: languageName: node linkType: hard -"on-finished@npm:2.4.1": +"on-finished@npm:2.4.1, on-finished@npm:^2.4.1": version: 2.4.1 resolution: "on-finished@npm:2.4.1" dependencies: @@ -9821,7 +10079,7 @@ __metadata: languageName: node linkType: hard -"once@npm:^1.3.0, once@npm:^1.3.1, once@npm:^1.4.0": +"once@npm:1.4.0, once@npm:^1.3.0, once@npm:^1.3.1, once@npm:^1.4.0": version: 1.4.0 resolution: "once@npm:1.4.0" dependencies: @@ -10072,7 +10330,7 @@ __metadata: languageName: node linkType: hard -"parseurl@npm:~1.3.3": +"parseurl@npm:^1.3.3, parseurl@npm:~1.3.3": version: 1.3.3 resolution: "parseurl@npm:1.3.3" checksum: 407cee8e0a3a4c5cd472559bca8b6a45b82c124e9a4703302326e9ab60fc1081442ada4e02628efef1eb16197ddc7f8822f5a91fd7d7c86b51f530aedb17dfa2 @@ -10134,17 +10392,10 @@ __metadata: languageName: node linkType: hard -"path-to-regexp@npm:0.1.7": - version: 0.1.7 - resolution: "path-to-regexp@npm:0.1.7" - checksum: 69a14ea24db543e8b0f4353305c5eac6907917031340e5a8b37df688e52accd09e3cebfe1660b70d76b6bd89152f52183f28c74813dbf454ba1a01c82a38abce - languageName: node - linkType: hard - -"path-to-regexp@npm:3.2.0": - version: 3.2.0 - resolution: "path-to-regexp@npm:3.2.0" - checksum: c3d35cda3b26d9e604d789b9a1764bb9845f53ca8009d5809356b4677a3c064b0f01117a05a5b4b77bafd5ae002a82592e3f3495e885c22961f8b1dab8bd6ae7 +"path-to-regexp@npm:8.2.0, path-to-regexp@npm:^8.0.0": + version: 8.2.0 + resolution: "path-to-regexp@npm:8.2.0" + checksum: 56e13e45962e776e9e7cd72e87a441cfe41f33fd539d097237ceb16adc922281136ca12f5a742962e33d8dda9569f630ba594de56d8b7b6e49adf31803c5e771 languageName: node linkType: hard @@ -10263,6 +10514,13 @@ __metadata: languageName: node linkType: hard +"picomatch@npm:4.0.2": + version: 4.0.2 + resolution: "picomatch@npm:4.0.2" + checksum: a7a5188c954f82c6585720e9143297ccd0e35ad8072231608086ca950bee672d51b0ef676254af0788205e59bd4e4deb4e7708769226bed725bf13370a7d1464 + languageName: node + linkType: hard + "picomatch@npm:^2.0.4, picomatch@npm:^2.2.1, picomatch@npm:^2.2.3, picomatch@npm:^2.3.1": version: 2.3.1 resolution: "picomatch@npm:2.3.1" @@ -10571,12 +10829,12 @@ __metadata: languageName: node linkType: hard -"qs@npm:6.11.0": - version: 6.11.0 - resolution: "qs@npm:6.11.0" +"qs@npm:6.13.0": + version: 6.13.0 + resolution: "qs@npm:6.13.0" dependencies: - side-channel: ^1.0.4 - checksum: 6e1f29dd5385f7488ec74ac7b6c92f4d09a90408882d0c208414a34dd33badc1a621019d4c799a3df15ab9b1d0292f97c1dd71dc7c045e69f81a8064e5af7297 + side-channel: ^1.0.6 + checksum: e9404dc0fc2849245107108ce9ec2766cde3be1b271de0bf1021d049dc5b98d1a2901e67b431ac5509f865420a7ed80b7acb3980099fe1c118a1c5d2e1432ad8 languageName: node linkType: hard @@ -10624,34 +10882,22 @@ __metadata: languageName: node linkType: hard -"range-parser@npm:~1.2.1": +"range-parser@npm:^1.2.1, range-parser@npm:~1.2.1": version: 1.2.1 resolution: "range-parser@npm:1.2.1" checksum: 0a268d4fea508661cf5743dfe3d5f47ce214fd6b7dec1de0da4d669dd4ef3d2144468ebe4179049eff253d9d27e719c88dae55be64f954e80135a0cada804ec9 languageName: node linkType: hard -"raw-body@npm:2.5.1": - version: 2.5.1 - resolution: "raw-body@npm:2.5.1" - dependencies: - bytes: 3.1.2 - http-errors: 2.0.0 - iconv-lite: 0.4.24 - unpipe: 1.0.0 - checksum: 5362adff1575d691bb3f75998803a0ffed8c64eabeaa06e54b4ada25a0cd1b2ae7f4f5ec46565d1bec337e08b5ac90c76eaa0758de6f72a633f025d754dec29e - languageName: node - linkType: hard - -"raw-body@npm:2.5.2": - version: 2.5.2 - resolution: "raw-body@npm:2.5.2" +"raw-body@npm:^3.0.0": + version: 3.0.0 + resolution: "raw-body@npm:3.0.0" dependencies: bytes: 3.1.2 http-errors: 2.0.0 - iconv-lite: 0.4.24 + iconv-lite: 0.6.3 unpipe: 1.0.0 - checksum: ba1583c8d8a48e8fbb7a873fdbb2df66ea4ff83775421bfe21ee120140949ab048200668c47d9ae3880012f6e217052690628cf679ddfbd82c9fc9358d574676 + checksum: 25b7cf7964183db322e819050d758a5abd0f22c51e9f37884ea44a9ed6855a1fb61f8caa8ec5b61d07e69f54db43dbbc08ad98ef84556696d6aa806be247af0e languageName: node linkType: hard @@ -10865,7 +11111,7 @@ __metadata: languageName: node linkType: hard -"repeat-string@npm:^1.0.0": +"repeat-string@npm:^1.0.0, repeat-string@npm:^1.6.1": version: 1.6.1 resolution: "repeat-string@npm:1.6.1" checksum: 1b809fc6db97decdc68f5b12c4d1a671c8e3f65ec4a40c238bc5200e44e85bcc52a54f78268ab9c29fcf5fe4f1343e805420056d1f30fa9a9ee4c2d93e3cc6c0 @@ -11046,6 +11292,21 @@ __metadata: languageName: node linkType: hard +"router@npm:^2.0.0": + version: 2.0.0 + resolution: "router@npm:2.0.0" + dependencies: + array-flatten: 3.0.0 + is-promise: 4.0.0 + methods: ~1.1.2 + parseurl: ~1.3.3 + path-to-regexp: ^8.0.0 + setprototypeof: 1.2.0 + utils-merge: 1.0.1 + checksum: 810ed3a4287ae90abe91908c49cc0b1faa0eb04b161bf266e29e789c7d9718f74ca1931445d9c8fe53c08ca30614d5856c167a4b4b3bb217276a96452b02b8ab + languageName: node + linkType: hard + "run-parallel@npm:^1.1.9": version: 1.2.0 resolution: "run-parallel@npm:1.2.0" @@ -11187,24 +11448,23 @@ __metadata: languageName: node linkType: hard -"send@npm:0.18.0": - version: 0.18.0 - resolution: "send@npm:0.18.0" +"send@npm:^1.0.0, send@npm:^1.1.0": + version: 1.1.0 + resolution: "send@npm:1.1.0" dependencies: - debug: 2.6.9 - depd: 2.0.0 - destroy: 1.2.0 - encodeurl: ~1.0.2 - escape-html: ~1.0.3 - etag: ~1.8.1 - fresh: 0.5.2 - http-errors: 2.0.0 - mime: 1.6.0 - ms: 2.1.3 - on-finished: 2.4.1 - range-parser: ~1.2.1 - statuses: 2.0.1 - checksum: 74fc07ebb58566b87b078ec63e5a3e41ecd987e4272ba67b7467e86c6ad51bc6b0b0154133b6d8b08a2ddda360464f71382f7ef864700f34844a76c8027817a8 + debug: ^4.3.5 + destroy: ^1.2.0 + encodeurl: ^2.0.0 + escape-html: ^1.0.3 + etag: ^1.8.1 + fresh: ^0.5.2 + http-errors: ^2.0.0 + mime-types: ^2.1.35 + ms: ^2.1.3 + on-finished: ^2.4.1 + range-parser: ^1.2.1 + statuses: ^2.0.1 + checksum: cb82bec244cb0e54ffaadf657dc79f55f350428c0d1f58511b9aae74ba87b07078907e462b8fefe13380f592baebd4b9e184204f3b74bd4558e7561669204b0f languageName: node linkType: hard @@ -11215,15 +11475,15 @@ __metadata: languageName: node linkType: hard -"serve-static@npm:1.15.0": - version: 1.15.0 - resolution: "serve-static@npm:1.15.0" +"serve-static@npm:^2.1.0": + version: 2.1.0 + resolution: "serve-static@npm:2.1.0" dependencies: - encodeurl: ~1.0.2 - escape-html: ~1.0.3 - parseurl: ~1.3.3 - send: 0.18.0 - checksum: af57fc13be40d90a12562e98c0b7855cf6e8bd4c107fe9a45c212bf023058d54a1871b1c89511c3958f70626fff47faeb795f5d83f8cf88514dbaeb2b724464d + encodeurl: ^2.0.0 + escape-html: ^1.0.3 + parseurl: ^1.3.3 + send: ^1.0.0 + checksum: 569f5af7f2a3073a97e3217263e7f4173fafe0861d73049c13ba99f0a9bc3708db747e6657f8f736cdbcec39c3271c795f7f4ffeab0b8933201b53c7728d3ed2 languageName: node linkType: hard @@ -11276,6 +11536,41 @@ __metadata: languageName: node linkType: hard +"side-channel-list@npm:^1.0.0": + version: 1.0.0 + resolution: "side-channel-list@npm:1.0.0" + dependencies: + es-errors: ^1.3.0 + object-inspect: ^1.13.3 + checksum: 603b928997abd21c5a5f02ae6b9cc36b72e3176ad6827fab0417ead74580cc4fb4d5c7d0a8a2ff4ead34d0f9e35701ed7a41853dac8a6d1a664fcce1a044f86f + languageName: node + linkType: hard + +"side-channel-map@npm:^1.0.1": + version: 1.0.1 + resolution: "side-channel-map@npm:1.0.1" + dependencies: + call-bound: ^1.0.2 + es-errors: ^1.3.0 + get-intrinsic: ^1.2.5 + object-inspect: ^1.13.3 + checksum: 42501371cdf71f4ccbbc9c9e2eb00aaaab80a4c1c429d5e8da713fd4d39ef3b8d4a4b37ed4f275798a65260a551a7131fd87fe67e922dba4ac18586d6aab8b06 + languageName: node + linkType: hard + +"side-channel-weakmap@npm:^1.0.2": + version: 1.0.2 + resolution: "side-channel-weakmap@npm:1.0.2" + dependencies: + call-bound: ^1.0.2 + es-errors: ^1.3.0 + get-intrinsic: ^1.2.5 + object-inspect: ^1.13.3 + side-channel-map: ^1.0.1 + checksum: a815c89bc78c5723c714ea1a77c938377ea710af20d4fb886d362b0d1f8ac73a17816a5f6640f354017d7e292a43da9c5e876c22145bac00b76cfb3468001736 + languageName: node + linkType: hard + "side-channel@npm:^1.0.4": version: 1.0.4 resolution: "side-channel@npm:1.0.4" @@ -11287,6 +11582,19 @@ __metadata: languageName: node linkType: hard +"side-channel@npm:^1.0.6": + version: 1.1.0 + resolution: "side-channel@npm:1.1.0" + dependencies: + es-errors: ^1.3.0 + object-inspect: ^1.13.3 + side-channel-list: ^1.0.0 + side-channel-map: ^1.0.1 + side-channel-weakmap: ^1.0.2 + checksum: bf73d6d6682034603eb8e99c63b50155017ed78a522d27c2acec0388a792c3ede3238b878b953a08157093b85d05797217d270b7666ba1f111345fbe933380ff + languageName: node + linkType: hard + "signal-exit@npm:^3.0.2, signal-exit@npm:^3.0.3, signal-exit@npm:^3.0.7": version: 3.0.7 resolution: "signal-exit@npm:3.0.7" @@ -11477,7 +11785,7 @@ __metadata: languageName: node linkType: hard -"statuses@npm:2.0.1": +"statuses@npm:2.0.1, statuses@npm:^2.0.1": version: 2.0.1 resolution: "statuses@npm:2.0.1" checksum: 18c7623fdb8f646fb213ca4051be4df7efb3484d4ab662937ca6fbef7ced9b9e12842709872eb3020cc3504b93bde88935c9f6417489627a7786f24f8031cbcb @@ -11690,7 +11998,7 @@ __metadata: ts-loader: ^9.2.6 ts-node: ^10.4.0 tsconfig-paths: ^3.12.0 - typescript: ^5.5.4 + typescript: ^5.7.3 web3-providers-http: ^1.7.5 web3-providers-ws: ^1.7.5 languageName: unknown @@ -12058,10 +12366,10 @@ __metadata: languageName: node linkType: hard -"tslib@npm:2.5.3, tslib@npm:^2.1.0, tslib@npm:^2.3.0, tslib@npm:^2.4.0": - version: 2.5.3 - resolution: "tslib@npm:2.5.3" - checksum: 88902b309afaf83259131c1e13da1dceb0ad1682a213143a1346a649143924d78cf3760c448b84d796938fd76127183894f8d85cbb3bf9c4fddbfcc140c0003c +"tslib@npm:2.8.1, tslib@npm:^2.7.0, tslib@npm:^2.8.0": + version: 2.8.1 + resolution: "tslib@npm:2.8.1" + checksum: e4aba30e632b8c8902b47587fd13345e2827fa639e7c3121074d5ee0880723282411a8838f830b55100cbe4517672f84a2472667d355b81e8af165a55dc6203a languageName: node linkType: hard @@ -12072,10 +12380,10 @@ __metadata: languageName: node linkType: hard -"tslib@npm:^2.7.0, tslib@npm:^2.8.0": - version: 2.8.1 - resolution: "tslib@npm:2.8.1" - checksum: e4aba30e632b8c8902b47587fd13345e2827fa639e7c3121074d5ee0880723282411a8838f830b55100cbe4517672f84a2472667d355b81e8af165a55dc6203a +"tslib@npm:^2.1.0, tslib@npm:^2.3.0, tslib@npm:^2.4.0": + version: 2.5.3 + resolution: "tslib@npm:2.5.3" + checksum: 88902b309afaf83259131c1e13da1dceb0ad1682a213143a1346a649143924d78cf3760c448b84d796938fd76127183894f8d85cbb3bf9c4fddbfcc140c0003c languageName: node linkType: hard @@ -12144,6 +12452,17 @@ __metadata: languageName: node linkType: hard +"type-is@npm:^2.0.0": + version: 2.0.0 + resolution: "type-is@npm:2.0.0" + dependencies: + content-type: ^1.0.5 + media-typer: ^1.1.0 + mime-types: ^3.0.0 + checksum: 571c7daca550d5e0d9d8a71c33bde1a0c12ddee3bc77aa2f7c62c39a4f1f52ee7770d1c2eeba21c306ac3627b2cf3a1b8417bbb1af5d65829e092dcf3356038c + languageName: node + linkType: hard + "type@npm:^1.0.1": version: 1.2.0 resolution: "type@npm:1.2.0" @@ -12207,23 +12526,23 @@ __metadata: languageName: node linkType: hard -"typescript@npm:^5.5.4": - version: 5.5.4 - resolution: "typescript@npm:5.5.4" +"typescript@npm:^5.7.3": + version: 5.7.3 + resolution: "typescript@npm:5.7.3" bin: tsc: bin/tsc tsserver: bin/tsserver - checksum: b309040f3a1cd91c68a5a58af6b9fdd4e849b8c42d837b2c2e73f9a4f96a98c4f1ed398a9aab576ee0a4748f5690cf594e6b99dbe61de7839da748c41e6d6ca8 + checksum: 6c38b1e989918e576f0307e6ee013522ea480dfce5f3ca85c9b2d8adb1edeffd37f4f30cd68de0c38a44563d12ba922bdb7e36aa2dac9c51de5d561e6e9a2e9c languageName: node linkType: hard -"typescript@patch:typescript@^5.5.4#~builtin": - version: 5.5.4 - resolution: "typescript@patch:typescript@npm%3A5.5.4#~builtin::version=5.5.4&hash=493e53" +"typescript@patch:typescript@^5.7.3#~builtin": + version: 5.7.3 + resolution: "typescript@patch:typescript@npm%3A5.7.3#~builtin::version=5.7.3&hash=493e53" bin: tsc: bin/tsc tsserver: bin/tsserver - checksum: fc52962f31a5bcb716d4213bef516885e4f01f30cea797a831205fc9ef12b405a40561c40eae3127ab85ba1548e7df49df2bcdee6b84a94bfbe3a0d7eff16b14 + checksum: 633cd749d6cd7bc842c6b6245847173bba99742a60776fae3c0fbcc0d1733cd51a733995e5f4dadd8afb0e64e57d3c7dbbeae953a072ee303940eca69e22f311 languageName: node linkType: hard @@ -12569,15 +12888,6 @@ __metadata: languageName: node linkType: hard -"uuid@npm:9.0.0": - version: 9.0.0 - resolution: "uuid@npm:9.0.0" - bin: - uuid: dist/bin/uuid - checksum: 8dd2c83c43ddc7e1c71e36b60aea40030a6505139af6bee0f382ebcd1a56f6cd3028f7f06ffb07f8cf6ced320b76aea275284b224b002b289f89fe89c389b028 - languageName: node - linkType: hard - "v8-compile-cache-lib@npm:^3.0.1": version: 3.0.1 resolution: "v8-compile-cache-lib@npm:3.0.1"