diff --git a/apps/account-api/k6-test/generate/signups.mjs b/apps/account-api/k6-test/generate/signups.mjs index 13a27ccf8..be1bfe038 100644 --- a/apps/account-api/k6-test/generate/signups.mjs +++ b/apps/account-api/k6-test/generate/signups.mjs @@ -10,7 +10,7 @@ const signup = (api) => { const addProviderData = api.registry.createType('PalletMsaAddProvider', { authorizedMsaId: 1, - schemaIds: [1], + intentIds: [1], expiration, }); const createTx = api.tx.msa.createSponsoredAccountWithDelegation( diff --git a/apps/account-api/src/api.module.ts b/apps/account-api/src/api.module.ts index 07530183c..2bc5c1ea2 100644 --- a/apps/account-api/src/api.module.ts +++ b/apps/account-api/src/api.module.ts @@ -14,11 +14,9 @@ import { ThrottlerModule, ThrottlerGuard } from '@nestjs/throttler'; import { AccountsControllerV1, AccountsControllerV2, - DelegationControllerV1, HandlesControllerV1, IcsControllerV1, KeysControllerV1, - DelegationsControllerV2, HealthController, } from './controllers'; import { AccountsService, HandlesService, DelegationService, KeysService, SiwfV2Service } from './services'; @@ -31,12 +29,15 @@ import { APP_FILTER, APP_GUARD } from '@nestjs/core'; import { AllExceptionsFilter } from '#utils/filters/exceptions.filter'; import { QueueModule } from '#queue/queue.module'; import { createPrometheusConfig, getPinoHttpOptions } from '#logger-lib'; +import { DelegationsControllerV3 } from '#account-api/controllers/v3'; +import { DecoratorsModule } from '#utils/decorators/decorators.module'; const configs = [apiConfig, allowReadOnly, cacheConfig, createRateLimitingConfig('account')]; @Module({ imports: [ ConfigModule.forRoot({ isGlobal: true, load: configs }), BlockchainModule.forRootAsync({ readOnly: true }), + DecoratorsModule, EventEmitterModule.forRoot({ // Use this instance throughout the application global: true, @@ -101,8 +102,7 @@ const configs = [apiConfig, allowReadOnly, cacheConfig, createRateLimitingConfig controllers: [ AccountsControllerV2, AccountsControllerV1, - DelegationsControllerV2, - DelegationControllerV1, + DelegationsControllerV3, HandlesControllerV1, KeysControllerV1, IcsControllerV1, diff --git a/apps/account-api/src/controllers/v1/index.ts b/apps/account-api/src/controllers/v1/index.ts index 93a8edd28..140e0d8f3 100644 --- a/apps/account-api/src/controllers/v1/index.ts +++ b/apps/account-api/src/controllers/v1/index.ts @@ -1,5 +1,4 @@ export * from './accounts-v1.controller'; -export * from './delegation-v1.controller'; export * from './handles-v1.controller'; export * from './keys-v1.controller'; export * from './ics.controller.v1'; diff --git a/apps/account-api/src/controllers/v2/accounts-v2.controller.ts b/apps/account-api/src/controllers/v2/accounts-v2.controller.ts index 4efa0a84e..ca038a6df 100644 --- a/apps/account-api/src/controllers/v2/accounts-v2.controller.ts +++ b/apps/account-api/src/controllers/v2/accounts-v2.controller.ts @@ -2,7 +2,6 @@ import apiConfig, { IAccountApiConfig } from '#account-api/api.config'; import { SiwfV2Service } from '#account-api/services/siwfV2.service'; import { BlockchainRpcQueryService } from '#blockchain/blockchain-rpc-query.service'; import blockchainConfig, { IBlockchainConfig } from '#blockchain/blockchain.config'; -import { SCHEMA_NAME_TO_ID } from '#types/constants/schemas'; import { WalletV2LoginRequestDto } from '#types/dtos/account/wallet.v2.login.request.dto'; import { WalletV2LoginResponseDto } from '#types/dtos/account/wallet.v2.login.response.dto'; import { WalletV2RedirectRequestDto } from '#types/dtos/account/wallet.v2.redirect.request.dto'; @@ -32,7 +31,7 @@ import { InjectPinoLogger, PinoLogger } from 'nestjs-pino'; // - `signedRequest`: SIWF Signed Request Payload // - Provider Signed // - `callback` -// - `permissions` Schema Id Array +// - `permissions` Intent Id Array // - Open // - Credential Request(s) // - `frequencyRpcUrl`: A public node used by SIWF dApps for sign-in @@ -73,7 +72,9 @@ export class AccountsControllerV2 { this.logger.debug('Received request for Sign In With Frequency v2 Redirect URL', JSON.stringify(query)); const { callbackUrl } = query; - const permissions = (query.permissions || []).map((p) => SCHEMA_NAME_TO_ID.get(p)); + const permissions = ( + await (query.permissions ? this.blockchainService.getIntentNamesToIds(query.permissions) : Promise.resolve([])) + ).map((permission) => permission.intentId); const credentials = query.credentials || []; return this.siwfV2Service.getRedirectUrl(callbackUrl, permissions, credentials); diff --git a/apps/account-api/src/controllers/v2/delegation-v2.controller.ts b/apps/account-api/src/controllers/v2/delegation-v2.controller.ts deleted file mode 100644 index 2e2b9a793..000000000 --- a/apps/account-api/src/controllers/v2/delegation-v2.controller.ts +++ /dev/null @@ -1,35 +0,0 @@ -import { ReadOnlyGuard } from '#account-api/guards/read-only.guard'; -import { DelegationService } from '#account-api/services/delegation.service'; -import { DelegationRequestDto, DelegationResponseV2, ProviderDelegationRequestDto } from '#types/dtos/account'; -import { IDelegationResponseV2 } from '#types/interfaces/account/delegations.interface'; -import { Controller, Get, HttpCode, HttpStatus, Param, UseGuards } from '@nestjs/common'; -import { ApiOkResponse, ApiOperation, ApiTags } from '@nestjs/swagger'; -import { InjectPinoLogger, PinoLogger } from 'nestjs-pino'; - -@Controller({ version: '2', path: 'delegations' }) -@ApiTags('v2/delegations') -@UseGuards(ReadOnlyGuard) // Apply guard at the controller level -export class DelegationsControllerV2 { - constructor( - private delegationService: DelegationService, - @InjectPinoLogger(DelegationsControllerV2.name) private readonly logger: PinoLogger, - ) {} - - // eslint-disable-next-line class-methods-use-this - @Get(':msaId') - @HttpCode(HttpStatus.OK) - @ApiOperation({ summary: 'Get all delegation information associated with an MSA Id' }) - @ApiOkResponse({ description: 'Found delegation information', type: DelegationResponseV2 }) - async getDelegation(@Param() { msaId }: DelegationRequestDto): Promise { - return this.delegationService.getDelegationV2(msaId); - } - - // eslint-disable-next-line class-methods-use-this - @Get(':msaId/:providerId') - @HttpCode(HttpStatus.OK) - @ApiOperation({ summary: "Get an MSA's delegation information for a specific provider" }) - @ApiOkResponse({ description: 'Found delegation information', type: DelegationResponseV2 }) - async getProviderDelegation(@Param() { msaId, providerId }: ProviderDelegationRequestDto) { - return this.delegationService.getDelegationV2(msaId, providerId); - } -} diff --git a/apps/account-api/src/controllers/v2/index.ts b/apps/account-api/src/controllers/v2/index.ts index 09e682479..4de72f32e 100644 --- a/apps/account-api/src/controllers/v2/index.ts +++ b/apps/account-api/src/controllers/v2/index.ts @@ -1,2 +1 @@ export * from './accounts-v2.controller'; -export * from './delegation-v2.controller'; diff --git a/apps/account-api/src/controllers/v1/delegation-v1.controller.ts b/apps/account-api/src/controllers/v3/delegation-v3.controller.ts similarity index 72% rename from apps/account-api/src/controllers/v1/delegation-v1.controller.ts rename to apps/account-api/src/controllers/v3/delegation-v3.controller.ts index 0fb2bc2ed..07b025dff 100644 --- a/apps/account-api/src/controllers/v1/delegation-v1.controller.ts +++ b/apps/account-api/src/controllers/v3/delegation-v3.controller.ts @@ -1,38 +1,44 @@ import { ReadOnlyGuard } from '#account-api/guards/read-only.guard'; import { DelegationService } from '#account-api/services/delegation.service'; import { + DelegationRequestDto, + DelegationResponse, + ProviderDelegationRequestDto, + RevokeDelegationPayloadRequestDto, RevokeDelegationPayloadResponseDto, TransactionResponse, - RevokeDelegationPayloadRequestDto, } from '#types/dtos/account'; -import { DelegationResponse } from '#types/dtos/account/delegation.response.dto'; +import { IDelegationResponse } from '#types/interfaces/account/delegations.interface'; import { Body, Controller, Get, HttpCode, HttpStatus, Param, Post, UseGuards } from '@nestjs/common'; import { ApiCreatedResponse, ApiOkResponse, ApiOperation, ApiTags } from '@nestjs/swagger'; -import { AccountIdDto, MsaIdDto, ProviderMsaIdDto } from '#types/dtos/common'; import { InjectPinoLogger, PinoLogger } from 'nestjs-pino'; +import { AccountIdDto, ProviderMsaIdDto } from '#types/dtos/common'; -@Controller({ version: '1', path: 'delegation' }) -@ApiTags('v1/delegation') +@Controller({ version: '3', path: 'delegations' }) +@ApiTags('v3/delegations') @UseGuards(ReadOnlyGuard) // Apply guard at the controller level -export class DelegationControllerV1 { +export class DelegationsControllerV3 { constructor( private delegationService: DelegationService, - @InjectPinoLogger(DelegationControllerV1.name) private readonly logger: PinoLogger, + @InjectPinoLogger(DelegationsControllerV3.name) private readonly logger: PinoLogger, ) {} + // eslint-disable-next-line class-methods-use-this @Get(':msaId') @HttpCode(HttpStatus.OK) - @ApiOperation({ summary: 'Get the delegation information associated with an MSA Id' }) + @ApiOperation({ summary: 'Get all delegation information associated with an MSA Id' }) @ApiOkResponse({ description: 'Found delegation information', type: DelegationResponse }) - /** - * Retrieves the delegation for a given MSA ID. - * - * @param msaId - The MSA ID for which to retrieve the delegation. - * @returns A Promise that resolves to a DelegationResponse object representing the delegation. - * @throws HttpException if the delegation cannot be found. - */ - async getDelegation(@Param() { msaId }: MsaIdDto): Promise { - return this.delegationService.getDelegation(msaId); + async getDelegation(@Param() { msaId }: DelegationRequestDto): Promise { + return this.delegationService.getDelegationV3(msaId); + } + + // eslint-disable-next-line class-methods-use-this + @Get(':msaId/:providerId') + @HttpCode(HttpStatus.OK) + @ApiOperation({ summary: "Get an MSA's delegation information for a specific provider" }) + @ApiOkResponse({ description: 'Found delegation information', type: DelegationResponse }) + async getProviderDelegation(@Param() { msaId, providerId }: ProviderDelegationRequestDto) { + return this.delegationService.getDelegationV3(msaId, providerId); } @Get('revokeDelegation/:accountId/:providerId') diff --git a/apps/account-api/src/controllers/v3/index.ts b/apps/account-api/src/controllers/v3/index.ts new file mode 100644 index 000000000..0c0eb575d --- /dev/null +++ b/apps/account-api/src/controllers/v3/index.ts @@ -0,0 +1 @@ +export * from './delegation-v3.controller'; diff --git a/apps/account-api/src/main.ts b/apps/account-api/src/main.ts index ad56c797c..71df0517f 100644 --- a/apps/account-api/src/main.ts +++ b/apps/account-api/src/main.ts @@ -8,6 +8,7 @@ import { NestExpressApplication } from '@nestjs/platform-express'; import apiConfig, { IAccountApiConfig } from './api.config'; import { generateSwaggerDoc, initializeSwaggerUI, writeOpenApiFile } from '#openapi/openapi'; import { getCurrentLogLevel, getPinoHttpOptions } from '#logger-lib'; +import { useContainer } from 'class-validator'; import { Logger, PinoLogger } from 'nestjs-pino'; import { setupLoggingOverrides, validateEnvironmentVariables } from '#utils/common/common.utils'; @@ -50,7 +51,7 @@ async function bootstrap() { 'x-tagGroups', [ { name: 'accounts', tags: ['v1/accounts', 'v2/accounts'] }, - { name: 'delegations', tags: ['v1/delegation', 'v2/delegations'] }, + { name: 'delegations', tags: ['v3/delegations'] }, { name: 'handles', tags: ['v1/handles'] }, { name: 'ics', tags: ['v1/ics'] }, { name: 'health', tags: ['health'] }, @@ -78,6 +79,10 @@ async function bootstrap() { const config = app.get(apiConfig.KEY); try { + // 🔑 Enable Nest DI inside class-validator constraints + useContainer(app.select(ApiModule), { + fallbackOnErrors: true, + }); app.enableShutdownHooks(); app.useGlobalPipes( new ValidationPipe({ diff --git a/apps/account-api/src/services/delegation.service.ts b/apps/account-api/src/services/delegation.service.ts index 6c3458ca8..f3c09c7b4 100644 --- a/apps/account-api/src/services/delegation.service.ts +++ b/apps/account-api/src/services/delegation.service.ts @@ -2,15 +2,17 @@ import { BlockchainRpcQueryService } from '#blockchain/blockchain-rpc-query.serv import { EnqueueService } from '#account-lib/services/enqueue-request.service'; import { TransactionType } from '#types/account-webhook'; import { + DelegationResponse, PublishRevokeDelegationRequestDto, RevokeDelegationPayloadRequestDto, RevokeDelegationPayloadResponseDto, TransactionResponse, } from '#types/dtos/account'; -import { DelegationResponse, DelegationResponseV2 } from '#types/dtos/account/delegation.response.dto'; import { BadRequestException, Inject, Injectable, NotFoundException } from '@nestjs/common'; import blockchainConfig, { IBlockchainConfig } from '#blockchain/blockchain.config'; import { PinoLogger } from 'nestjs-pino'; +import { CommonPrimitivesMsaDelegationResponse } from '@polkadot/types/lookup'; +import { chainDelegationToNative, IDelegation } from '#types/interfaces/account'; @Injectable() export class DelegationService { @@ -23,28 +25,6 @@ export class DelegationService { this.logger.setContext(this.constructor.name); } - async getDelegation(msaId: string): Promise { - const isValidMsaId = await this.blockchainService.isValidMsaId(msaId); - if (isValidMsaId) { - const { providerId } = this.blockchainConf; - - const commonPrimitivesMsaDelegation = await this.blockchainService.getCommonPrimitivesMsaDelegation( - msaId, - providerId, - ); - - if (commonPrimitivesMsaDelegation) { - return { - providerId: providerId.toString(), - schemaPermissions: commonPrimitivesMsaDelegation.schemaPermissions, - revokedAt: commonPrimitivesMsaDelegation.revokedAt, - }; - } - throw new NotFoundException(`Failed to find the delegations for ${msaId} and ${providerId}`); - } - throw new NotFoundException(`Invalid msaId ${msaId}`); - } - async getRevokeDelegationPayload( accountId: string, providerMsaId: string, @@ -67,11 +47,11 @@ export class DelegationService { } // Validate that delegations exist for this msaId - const delegations = await this.blockchainService.getProviderDelegationForMsa(msaId, providerMsaId); - if (!delegations) { + const delegation = await this.blockchainService.getProviderDelegationForMsa(msaId, providerMsaId); + if (!delegation) { throw new NotFoundException(`No delegations found for ${msaId} and ${providerMsaId}`); } - if (delegations.revokedAtBlock !== 0) { + if (delegation.revokedAtBlock !== 0) { throw new BadRequestException('Delegation already revoked'); } return this.blockchainService.createRevokedDelegationPayload(accountId, providerMsaId); @@ -80,6 +60,7 @@ export class DelegationService { async postRevokeDelegation(revokeDelegationRequest: RevokeDelegationPayloadRequestDto): Promise { try { this.logger.trace(`Posting revoke delegation request for account ${revokeDelegationRequest.accountId}`); + // noinspection UnnecessaryLocalVariableJS const referenceId = await this.enqueueService.enqueueRequest({ ...revokeDelegationRequest, type: TransactionType.REVOKE_DELEGATION, @@ -91,16 +72,17 @@ export class DelegationService { } } - async getDelegationV2(msaId: string, providerId?: string): Promise { + async getDelegationV3(msaId: string, providerId?: string): Promise { const isValidMsaId = await this.blockchainService.isValidMsaId(msaId); if (!isValidMsaId) { throw new NotFoundException(`Invalid MSA Id ${msaId}`); } + let delegations: IDelegation[]; if (providerId) { const isValidProviderId = await this.blockchainService.isValidMsaId(providerId); if (!isValidProviderId) { - throw new NotFoundException(`Invalid MSA Id ${providerId}`); + throw new NotFoundException(`Invalid MSA Id for Provider ${providerId}`); } const providerInfo = await this.blockchainService.getProviderToRegistryEntry(providerId); @@ -113,15 +95,14 @@ export class DelegationService { throw new NotFoundException(`No delegations found for ${msaId} and ${providerId}`); } - return { - msaId, - delegations: [delegation], - }; + delegations = [delegation]; + } else { + delegations = await this.blockchainService.getDelegationsForMsa(msaId); } return { msaId, - delegations: await this.blockchainService.getDelegationsForMsa(msaId), + delegations, }; } } diff --git a/apps/account-api/src/services/keys.service.spec.ts b/apps/account-api/src/services/keys.service.spec.ts index 273387e45..2471b737d 100644 --- a/apps/account-api/src/services/keys.service.spec.ts +++ b/apps/account-api/src/services/keys.service.spec.ts @@ -25,6 +25,9 @@ import { createKeys } from '#testlib/keys.spec'; import { cryptoWaitReady } from '@polkadot/util-crypto'; import { LoggerModule } from 'nestjs-pino'; import { getPinoHttpOptions } from '#logger-lib'; +import { mockRedisProvider } from '#testlib'; +import { EventEmitterModule } from '@nestjs/event-emitter'; +import { useContainer } from 'class-validator'; jest.mock('#blockchain/blockchain-rpc-query.service'); jest.mock( @@ -38,10 +41,39 @@ describe('KeysService', () => { await cryptoWaitReady(); const mockBlockchainConfigProvider = buildBlockchainConfigProvider('Sr25519'); const moduleRef = await Test.createTestingModule({ - imports: [LoggerModule.forRoot(getPinoHttpOptions())], - providers: [KeysService, BlockchainRpcQueryService, mockBlockchainConfigProvider, mockAccountApiConfigProvider], + imports: [ + LoggerModule.forRoot(getPinoHttpOptions()), + EventEmitterModule.forRoot({ + // Use this instance throughout the application + global: true, + // set this to `true` to use wildcards + wildcard: false, + // the delimiter used to segment namespaces + delimiter: '.', + // set this to `true` if you want to emit the newListener event + newListener: false, + // set this to `true` if you want to emit the removeListener event + removeListener: false, + // the maximum amount of listeners that can be assigned to an event + maxListeners: 10, + // show event name in memory leak message when more than maximum amount of listeners is assigned + verboseMemoryLeak: false, + // disable throwing uncaughtException if an error event is emitted and it has no listeners + ignoreErrors: false, + }), + ], + providers: [ + KeysService, + BlockchainRpcQueryService, + mockBlockchainConfigProvider, + mockAccountApiConfigProvider, + mockRedisProvider(), + ], }).compile(); + // Important: point class-validator at Nest’s container for this test run + useContainer(moduleRef, { fallbackOnErrors: true }); + keysService = moduleRef.get(KeysService); }); diff --git a/apps/account-api/src/services/keys.service.ts b/apps/account-api/src/services/keys.service.ts index 03875e45a..b7d03eac6 100644 --- a/apps/account-api/src/services/keys.service.ts +++ b/apps/account-api/src/services/keys.service.ts @@ -1,5 +1,5 @@ import { KeysResponse } from '#types/dtos/account/keys.response.dto'; -import { ConflictException, Inject, Injectable, NotFoundException } from '@nestjs/common'; +import { ConflictException, Inject, Injectable, NotFoundException, OnApplicationBootstrap } from '@nestjs/common'; import { HexString } from '@polkadot/util/types'; import { AddNewPublicKeyAgreementPayloadRequest, @@ -27,15 +27,39 @@ import { verifySignature as verifyEthereumSignature, } from '@frequency-chain/ethereum-utils'; import { PinoLogger } from 'nestjs-pino'; +import { EventEmitter2 } from '@nestjs/event-emitter'; +import { InjectRedis } from '@songkeys/nestjs-redis'; +import Redis from 'ioredis'; +import { HOUR, MILLISECONDS_PER_SECOND } from 'time-constants'; + +const SCHEMA_ID_TTL = HOUR / MILLISECONDS_PER_SECOND; // 1 hour in seconds +const GRAPH_KEY_SCHEMA_ID_CACHE_KEY = 'graphKeySchemaId'; @Injectable() -export class KeysService { - private graphKeySchemaId: number; +export class KeysService implements OnApplicationBootstrap { + private graphKeyIntentId: number; + + async onApplicationBootstrap() { + try { + const { intentId, schemaId } = await this.blockchainService.getIntentAndLatestSchemaIdsByName( + 'dsnp', + 'public-key-key-agreement', + ); + this.graphKeyIntentId = intentId; + // Set 1-hour TTL on this so that we don't need to restart if a new schema is published + await this.cache.setex(GRAPH_KEY_SCHEMA_ID_CACHE_KEY, SCHEMA_ID_TTL, schemaId); + } catch (e: any) { + this.logger.fatal({ error: e }, 'Unable to resolve intent ID for "dsnp.public-key-key-agreement"'); + this.emitter.emit('shutdown'); + } + } constructor( @Inject(apiConfig.KEY) private readonly apiConf: IAccountApiConfig, + @InjectRedis() private readonly cache: Redis, private blockchainService: BlockchainRpcQueryService, private readonly logger: PinoLogger, + private readonly emitter: EventEmitter2, ) { this.logger.setContext(this.constructor.name); } @@ -52,17 +76,26 @@ export class KeysService { throw new NotFoundException(`Keys not found for ${msaId}`); } + private async getGraphSchemaId(): Promise { + let schemaId = Number(await this.cache.get('graphKeySchemaId')); + if (isNaN(schemaId) || schemaId <= 0) { + schemaId = await this.blockchainService.getLatestSchemaIdForIntent(this.graphKeyIntentId); + // Set 1-hour TTL on this so that we don't need to restart if a new schema is published + await this.cache.setex(GRAPH_KEY_SCHEMA_ID_CACHE_KEY, SCHEMA_ID_TTL, schemaId); + } + + return schemaId; + } + async getAddPublicKeyAgreementPayload( msaId: string, newKey: HexString, ): Promise { const expiration = await this.getExpiration(); - // Get graph key schema ID if not already cached - if (!this.graphKeySchemaId) { - this.graphKeySchemaId = await this.blockchainService.getSchemaIdByName('dsnp', 'public-key-key-agreement'); - } - const itemizedStorage = await this.blockchainService.getItemizedStorage(msaId, this.graphKeySchemaId); + const schemaId = await this.blockchainService.getLatestSchemaIdForIntent(this.graphKeyIntentId); + + const itemizedStorage = await this.blockchainService.getItemizedStorage(msaId, this.graphKeyIntentId); if ( itemizedStorage.items .toArray() @@ -72,7 +105,7 @@ export class KeysService { } const payload: ItemizedSignaturePayloadDto = { expiration, - schemaId: this.graphKeySchemaId, + schemaId, targetHash: itemizedStorage.content_hash.toNumber(), actions: [ { diff --git a/apps/account-api/src/services/siwfV2-ethereum.mock.spec.ts b/apps/account-api/src/services/siwfV2-ethereum.mock.spec.ts index c9428ee26..50ecdebe7 100644 --- a/apps/account-api/src/services/siwfV2-ethereum.mock.spec.ts +++ b/apps/account-api/src/services/siwfV2-ethereum.mock.spec.ts @@ -19,7 +19,7 @@ export const validEthereumSiwfAddDelegationResponsePayload: SiwfResponse = { algo: 'SECP256K1', encoding: 'base16', encodedValue: - '0xb3e41e53373649d089455965791c47f695f519eb21bd322febf04bd05f2b50b72c395c4490ac6cd0d108d0a77f625aea8b1f0096befc359936669d620f5aad7e1c', + '0x9af767304010928659a8d17ab3dc474c8b5c4f81c2035f819fff1337d1a5cc5f10ef72474d12b508ce4951c328a6667e82bea3624d4514cab152517ce552a5821b', }, endpoint: { pallet: 'msa', @@ -28,7 +28,7 @@ export const validEthereumSiwfAddDelegationResponsePayload: SiwfResponse = { type: 'addProvider', payload: { authorizedMsaId: 1, - schemaIds: [5, 7, 8, 9, 10], + intentIds: [5, 7, 8, 9, 10], expiration: 24, }, }, @@ -195,7 +195,7 @@ export const validEthereumSiwfNewUserResponse: SiwfResponse = { algo: 'SECP256K1', encoding: 'base16', encodedValue: - '0xb3e41e53373649d089455965791c47f695f519eb21bd322febf04bd05f2b50b72c395c4490ac6cd0d108d0a77f625aea8b1f0096befc359936669d620f5aad7e1c', + '0x9af767304010928659a8d17ab3dc474c8b5c4f81c2035f819fff1337d1a5cc5f10ef72474d12b508ce4951c328a6667e82bea3624d4514cab152517ce552a5821b', }, endpoint: { pallet: 'msa', @@ -204,7 +204,7 @@ export const validEthereumSiwfNewUserResponse: SiwfResponse = { type: 'addProvider', payload: { authorizedMsaId: 1, - schemaIds: [5, 7, 8, 9, 10], + intentIds: [5, 7, 8, 9, 10], expiration: 24, }, }, diff --git a/apps/account-api/src/services/siwfV2.mock.spec.ts b/apps/account-api/src/services/siwfV2.mock.spec.ts index 36458d30c..4b75571a2 100644 --- a/apps/account-api/src/services/siwfV2.mock.spec.ts +++ b/apps/account-api/src/services/siwfV2.mock.spec.ts @@ -37,7 +37,7 @@ export const validSiwfAddDelegationResponsePayload: SiwfResponse = { type: 'addProvider', payload: { authorizedMsaId: 1, - schemaIds: [5, 7, 8, 9, 10], + intentIds: [5, 7, 8, 9, 10], expiration: 24, }, }, @@ -212,7 +212,7 @@ export const validSiwfNewUserResponse: SiwfResponse = { type: 'addProvider', payload: { authorizedMsaId: 1, - schemaIds: [5, 7, 8, 9, 10], + intentIds: [5, 7, 8, 9, 10], expiration: 24, }, }, @@ -332,7 +332,7 @@ export const validSiwfNewUserResponseWithRecovery: SiwfResponse = { type: 'addProvider', payload: { authorizedMsaId: 1, - schemaIds: [5, 7, 8, 9, 10], + intentIds: [5, 7, 8, 9, 10], expiration: 24, }, }, diff --git a/apps/account-api/test/accounts.controller.e2e-spec.ts b/apps/account-api/test/accounts.controller.e2e-spec.ts index fffa8d8d7..d60d89253 100644 --- a/apps/account-api/test/accounts.controller.e2e-spec.ts +++ b/apps/account-api/test/accounts.controller.e2e-spec.ts @@ -6,7 +6,7 @@ import request from 'supertest'; import { ChainUser, ExtrinsicHelper, getClaimHandlePayload } from '@projectlibertylabs/frequency-scenario-template'; import { uniqueNamesGenerator, colors, names } from 'unique-names-generator'; import { ApiModule } from '../src/api.module'; -import { setupProviderAndUsers } from './e2e-setup.mock.spec'; +import { setupProviderAndUsers } from '#testlib/e2e-setup.mock.spec'; import { u8aToHex } from '@polkadot/util'; import { cryptoWaitReady } from '@polkadot/util-crypto'; import { CacheMonitorService } from '#cache/cache-monitor.service'; @@ -16,6 +16,7 @@ import { NestExpressApplication } from '@nestjs/platform-express'; import { BlockchainRpcQueryService } from '#blockchain/blockchain-rpc-query.service'; import { Logger } from 'nestjs-pino'; +import { useContainer } from 'class-validator'; describe('Account Controller', () => { let app: NestExpressApplication; @@ -68,6 +69,7 @@ describe('Account Controller', () => { // module.useLogger(new Logger()); const config = app.get(apiConfig.KEY); + useContainer(module, { fallbackOnErrors: true }); app.enableVersioning({ type: VersioningType.URI }); app.enableShutdownHooks(); app.useGlobalPipes(new ValidationPipe({ whitelist: true, transform: true, enableDebugMessages: true })); diff --git a/apps/account-api/test/accounts.v2.controller.e2e-spec.ts b/apps/account-api/test/accounts.v2.controller.e2e-spec.ts index 68a8a3cee..545482bab 100644 --- a/apps/account-api/test/accounts.v2.controller.e2e-spec.ts +++ b/apps/account-api/test/accounts.v2.controller.e2e-spec.ts @@ -10,11 +10,11 @@ import { ApiModule } from '../src/api.module'; import { createMockSiwfServer, validSiwfNewUserResponseWithRecovery } from '#account-api/services/siwfV2.mock.spec'; import { CacheMonitorService } from '#cache/cache-monitor.service'; import { WalletV2RedirectRequestDto } from '#types/dtos/account/wallet.v2.redirect.request.dto'; -import { SCHEMA_NAME_TO_ID } from '#types/constants/schemas'; import { NestExpressApplication } from '@nestjs/platform-express'; import apiConfig, { IAccountApiConfig } from '#account-api/api.config'; import { BlockchainRpcQueryService } from '#blockchain/blockchain-rpc-query.service'; import { TimeoutInterceptor } from '#utils/interceptors/timeout.interceptor'; +import { useContainer } from 'class-validator'; describe('Accounts v2 Controller', () => { let app: NestExpressApplication; @@ -39,6 +39,7 @@ describe('Accounts v2 Controller', () => { // module.useLogger(new Logger()); const config = app.get(apiConfig.KEY); + useContainer(app.select(ApiModule), { fallbackOnErrors: true }); app.enableVersioning({ type: VersioningType.URI }); app.enableShutdownHooks(); app.useGlobalPipes(new ValidationPipe({ whitelist: true, transform: true, enableDebugMessages: true })); @@ -77,9 +78,10 @@ describe('Accounts v2 Controller', () => { describe('(GET) /v2/accounts/siwf', () => { it('should return a valid redirect URL with all parameters provided', async () => { + const permissions = ['dsnp.broadcast', 'dsnp.reply', 'dsnp.tombstone']; const siwfRequest: WalletV2RedirectRequestDto = { callbackUrl: 'https://example.com/callback', - permissions: [...SCHEMA_NAME_TO_ID.keys()], + permissions, credentials: ['VerifiedPhoneNumberCredential', 'VerifiedGraphKeyCredential'], }; @@ -92,13 +94,13 @@ describe('Accounts v2 Controller', () => { expect(redirectUrl.searchParams.has('signedRequest')); const signedRequest = decodeSignedRequest(redirectUrl.searchParams.get('signedRequest')); expect(signedRequest.requestedCredentials).toHaveLength(2); - expect(signedRequest.requestedSignatures.payload.permissions).toHaveLength(SCHEMA_NAME_TO_ID.size); + expect(signedRequest.requestedSignatures.payload.permissions).toHaveLength(permissions.length); }); it('should return a valid redirect URL with all array parameters of length 1', async () => { const siwfRequest: WalletV2RedirectRequestDto = { callbackUrl: 'https://example.com/callback', - permissions: ['dsnp.broadcast@v1'], + permissions: ['dsnp.broadcast'], credentials: ['VerifiedPhoneNumberCredential'], }; diff --git a/apps/account-api/test/delegations.controller.e2e-spec.ts b/apps/account-api/test/delegations.controller.e2e-spec.ts index 730b92fa7..5f9ba0c8a 100644 --- a/apps/account-api/test/delegations.controller.e2e-spec.ts +++ b/apps/account-api/test/delegations.controller.e2e-spec.ts @@ -2,9 +2,9 @@ import { HttpStatus, ValidationPipe, VersioningType } from '@nestjs/common'; import { Test, TestingModule } from '@nestjs/testing'; import { EventEmitter2 } from '@nestjs/event-emitter'; import request from 'supertest'; -import { ChainUser, ExtrinsicHelper, Schema, SchemaBuilder } from '@projectlibertylabs/frequency-scenario-template'; +import { ChainUser, ExtrinsicHelper } from '@projectlibertylabs/frequency-scenario-template'; import { ApiModule } from '../src/api.module'; -import { setupProviderAndUsers } from './e2e-setup.mock.spec'; +import { setupProviderAndUsers } from '#testlib/e2e-setup.mock.spec'; import { CacheMonitorService } from '#cache/cache-monitor.service'; import { u8aToHex } from '@polkadot/util'; import Keyring from '@polkadot/keyring'; @@ -14,17 +14,13 @@ import apiConfig, { IAccountApiConfig } from '#account-api/api.config'; import { BlockchainRpcQueryService } from '#blockchain/blockchain-rpc-query.service'; import { TimeoutInterceptor } from '#utils/interceptors/timeout.interceptor'; import { NestExpressApplication } from '@nestjs/platform-express'; +import { useContainer } from 'class-validator'; let users: ChainUser[]; let revokedUser: ChainUser; let undelegatedUser: ChainUser; let provider: ChainUser; let maxMsaId: string; -let updateSchema: Schema | undefined; -let publicKeySchema: Schema | undefined; -let publicFollowsSchema: Schema | undefined; -let privateFollowsSchema: Schema | undefined; -let privateConnectionsSchema: Schema | undefined; let httpServer: any; let invalidMsaId: string; let msaNonProviderId: string; @@ -36,12 +32,6 @@ describe('Delegation Controller', () => { beforeAll(async () => { ({ maxMsaId, provider, revokedUser, undelegatedUser, users } = await setupProviderAndUsers()); - const builder = new SchemaBuilder().withAutoDetectExistingSchema(); - updateSchema = await builder.withName('dsnp', 'update').resolve(); - publicKeySchema = await builder.withName('dsnp', 'public-key-key-agreement').resolve(); - publicFollowsSchema = await builder.withName('dsnp', 'public-follows').resolve(); - privateFollowsSchema = await builder.withName('dsnp', 'private-follows').resolve(); - privateConnectionsSchema = await builder.withName('dsnp', 'private-connections').resolve(); invalidMsaId = (BigInt(maxMsaId) + 100n).toString(); msaNonProviderId = users[0].msaId.toString(); @@ -53,10 +43,11 @@ describe('Delegation Controller', () => { app = module.createNestApplication(); - // Uncomment below to see logs when debugging tests - // module.useLogger(new Logger()); + // Uncomment below and set ENABLE_LOGS_IN_TESTS=true in the environment to see logs when debugging tests + // module.useLogger(app.get(Logger)); const config = app.get(apiConfig.KEY); + useContainer(module, { fallbackOnErrors: true }); app.enableVersioning({ type: VersioningType.URI }); app.enableShutdownHooks(); app.useGlobalPipes(new ValidationPipe({ whitelist: true, transform: true, enableDebugMessages: true })); @@ -96,133 +87,102 @@ describe('Delegation Controller', () => { }); }); - describe('(GET) /v1/delegation/:msaId', () => { - it('(GET) /v1/delegation/:msaId with invalid msaId', async () => { - await request(httpServer) - .get(`/v1/delegation/${invalidMsaId}`) - .expect(HttpStatus.NOT_FOUND) - .expect((res) => expect(res.text).toContain('Invalid msaId')); - }); - - it('(GET) /v1/delegation/:msaId with a valid MSA that has no delegations', async () => { - const validMsaId = provider.msaId?.toString(); // use provider's MSA; will have no delegations - await request(httpServer) - .get(`/v1/delegation/${validMsaId}`) - .expect(HttpStatus.NOT_FOUND) - .expect((res) => expect(res.text).toContain('Failed to find the delegations for')); - }); - - it('(GET) /v1/delegation/:msaId with valid msaId that has delegations', async () => { - const validMsaId = users[0]?.msaId?.toString(); - await request(httpServer) - .get(`/v1/delegation/${validMsaId}`) - .expect(HttpStatus.OK) - .expect({ - providerId: provider.msaId?.toString(), - schemaPermissions: { - [updateSchema!.id.toString()]: 0, - [publicKeySchema!.id.toString()]: 0, - [publicFollowsSchema!.id.toString()]: 0, - [privateFollowsSchema!.id.toString()]: 0, - [privateConnectionsSchema!.id.toString()]: 0, - }, - revokedAt: '0x00000000', + describe('/v3/delegations', () => { + describe('Revoke Delegation', () => { + let delegationObj: RevokeDelegationPayloadResponseDto; + + describe('(GET) /v3/delegations/revokeDelegation/:accountId/:providerId', () => { + it('invalid accountId should fail', async () => { + const providerId = provider.msaId?.toString(); + const { keypair } = users[1]; + const invalidAccountId = `${keypair.address.slice(0, -1)}5H`; + const getPath: string = `/v3/delegations/revokeDelegation/${invalidAccountId}/${providerId}`; + await request(httpServer) + .get(getPath) + .expect(HttpStatus.BAD_REQUEST) + .expect((res) => + expect(res.text).toContain( + 'accountId should be a valid 32 bytes representing an account Id or address in Hex or SS58 format', + ), + ); }); - }); - }); - describe('/v1/delegation/revokeDelegation', () => { - let delegationObj: RevokeDelegationPayloadResponseDto; - - it('(GET) /v1/delegation/revokeDelegation/:accountId/:providerId with invalid accountId', async () => { - const providerId = provider.msaId?.toString(); - const { keypair } = users[1]; - const invalidAccountId = `${keypair.address.slice(0, -1)}5H`; - const getPath: string = `/v1/delegation/revokeDelegation/${invalidAccountId}/${providerId}`; - await request(httpServer) - .get(getPath) - .expect(HttpStatus.BAD_REQUEST) - .expect((res) => - expect(res.text).toContain( - 'accountId should be a valid 32 bytes representing an account Id or address in Hex or SS58 format', - ), - ); - }); - - it('(GET) /v1/delegation/revokeDelegation/:accountId/:providerId with valid accountId: no msa', async () => { - const providerId = provider.msaId?.toString(); - const getPath: string = `/v1/delegation/revokeDelegation/${nonMsaKeypair.address}/${providerId}`; - await request(httpServer) - .get(getPath) - .expect(HttpStatus.NOT_FOUND) - .expect((res) => expect(res.text).toContain('not found')); - }); + it('valid, but non-existent accountId should fail', async () => { + const providerId = provider.msaId?.toString(); + const getPath: string = `/v3/delegations/revokeDelegation/${nonMsaKeypair.address}/${providerId}`; + await request(httpServer) + .get(getPath) + .expect(HttpStatus.NOT_FOUND) + .expect((res) => expect(res.text).toContain('not found')); + }); - it('(GET) /v1/delegation/revokeDelegation/:accountId/:providerId with invalid providerId', async () => { - // Test provisioned users are not registered providers - const { keypair, msaId } = users[1]; - const accountId = keypair.address; - const getPath: string = `/v1/delegation/revokeDelegation/${accountId}/${msaId}`; - await request(httpServer) - .get(getPath) - .expect(HttpStatus.BAD_REQUEST) - .expect((res) => expect(res.text).toContain('Supplied ID not a Provider')); - }); + it('invalid providerId should fail', async () => { + // Test provisioned users are not registered providers + const { keypair, msaId } = users[1]; + const accountId = keypair.address; + const getPath: string = `/v3/delegations/revokeDelegation/${accountId}/${msaId}`; + await request(httpServer) + .get(getPath) + .expect(HttpStatus.BAD_REQUEST) + .expect((res) => expect(res.text).toContain('Supplied ID not a Provider')); + }); - it('(GET) /v1/delegation/revokeDelegation/:accountId/:providerId with revoked delegations', async () => { - const providerId = provider.msaId?.toString(); - const getPath: string = `/v1/delegation/revokeDelegation/${revokedUser.keypair.address}/${providerId}`; - await request(httpServer) - .get(getPath) - .expect(HttpStatus.BAD_REQUEST) - .expect((res) => expect(res.text).toContain('Delegation already revoked')); - }); + it('already revoked delegation should fail', async () => { + const providerId = provider.msaId?.toString(); + const getPath: string = `/v3/delegations/revokeDelegation/${revokedUser.keypair.address}/${providerId}`; + await request(httpServer) + .get(getPath) + .expect(HttpStatus.BAD_REQUEST) + .expect((res) => expect(res.text).toContain('Delegation already revoked')); + }); - it('(GET) /v1/delegation/revokeDelegation/:accountId/:providerId with no delegations', async () => { - const providerId = provider.msaId?.toString(); - const getPath: string = `/v1/delegation/revokeDelegation/${undelegatedUser.keypair.address}/${providerId}`; - await request(httpServer) - .get(getPath) - .expect(HttpStatus.NOT_FOUND) - .expect((res) => expect(res.text).toContain('No delegations found')); - }); + it('with no existing delegations should fail', async () => { + const providerId = provider.msaId?.toString(); + const getPath: string = `/v3/delegations/revokeDelegation/${undelegatedUser.keypair.address}/${providerId}`; + await request(httpServer) + .get(getPath) + .expect(HttpStatus.NOT_FOUND) + .expect((res) => expect(res.text).toContain('No delegations found')); + }); - it('(GET) /v1/delegation/revokeDelegation/:accountId/:providerId', async () => { - const providerId = provider.msaId?.toString(); - const accountId = users[1].keypair.address; - const getPath: string = `/v1/delegation/revokeDelegation/${accountId}/${providerId}`; - const response = await request(httpServer) - .get(getPath) - .expect(HttpStatus.OK) - .expect(({ body }) => - expect(body).toMatchObject({ - payloadToSign: expect.stringMatching(/^0x3c04/), - encodedExtrinsic: expect.stringMatching(/^0x10043c04/), - accountId: users[1].keypair.address, - providerId: provider.msaId.toString(), - }), - ); - delegationObj = response.body; - }); + it('valid revocation request should succeed', async () => { + const providerId = provider.msaId?.toString(); + const accountId = users[1].keypair.address; + const getPath: string = `/v3/delegations/revokeDelegation/${accountId}/${providerId}`; + const response = await request(httpServer) + .get(getPath) + .expect(HttpStatus.OK) + .expect(({ body }) => + expect(body).toMatchObject({ + payloadToSign: expect.stringMatching(/^0x3c04/), + encodedExtrinsic: expect.stringMatching(/^0x10043c04/), + accountId: users[1].keypair.address, + providerId: provider.msaId.toString(), + }), + ); + delegationObj = response.body; + }); + }); - it('(POST) /v1/delegation/revokeDelegation', async () => { - const { payloadToSign } = delegationObj; + describe('(POST) /v3/delegations/revokeDelegation', () => { + it('post extrinsic payload should succeed', async () => { + const { payloadToSign } = delegationObj; - const signature: Uint8Array = users[1].keypair.sign(payloadToSign, { withType: true }); + const signature: Uint8Array = users[1].keypair.sign(payloadToSign, { withType: true }); - const revokeDelegationRequest: RevokeDelegationPayloadRequestDto = { - ...delegationObj, - signature: u8aToHex(signature), - }; + const revokeDelegationRequest: RevokeDelegationPayloadRequestDto = { + ...delegationObj, + signature: u8aToHex(signature), + }; - const postPath = '/v1/delegation/revokeDelegation'; - await request(httpServer).post(postPath).send(revokeDelegationRequest).expect(HttpStatus.CREATED); + const postPath = '/v3/delegations/revokeDelegation'; + await request(httpServer).post(postPath).send(revokeDelegationRequest).expect(HttpStatus.CREATED); + }); + }); }); - }); - describe('/v2/delegations', () => { - describe('(GET) /v2/delegations/:msaId', () => { - const path = '/v2/delegations/{msaId}'; + describe('(GET) /v3/delegations/:msaId', () => { + const path = '/v3/delegations/{msaId}'; it('should return error on malformed request', async () => { await request(httpServer).get(path.replace('{msaId}', 'bad-identifier')).expect(HttpStatus.BAD_REQUEST); @@ -268,8 +228,8 @@ describe('Delegation Controller', () => { }); }); - describe('(GET) /v2/delegations/:msaId/:providerId', () => { - const path = '/v2/delegations/{msaId}/{providerId}'; + describe('(GET) /v3/delegations/:msaId/:providerId', () => { + const path = '/v3/delegations/{msaId}/{providerId}'; it('should return error on malformed request', async () => { await request(httpServer).get(path.replace('{msaId}', 'bad-identifier')).expect(HttpStatus.BAD_REQUEST); diff --git a/apps/account-api/test/handles.controller.e2e-spec.ts b/apps/account-api/test/handles.controller.e2e-spec.ts index 677626044..d99b83770 100644 --- a/apps/account-api/test/handles.controller.e2e-spec.ts +++ b/apps/account-api/test/handles.controller.e2e-spec.ts @@ -5,7 +5,7 @@ import request from 'supertest'; import { ChainUser, ExtrinsicHelper, getClaimHandlePayload } from '@projectlibertylabs/frequency-scenario-template'; import { uniqueNamesGenerator, colors, names } from 'unique-names-generator'; import { ApiModule } from '../src/api.module'; -import { setupProviderAndUsers } from './e2e-setup.mock.spec'; +import { setupProviderAndUsers } from '#testlib/e2e-setup.mock.spec'; import { CacheMonitorService } from '#cache/cache-monitor.service'; import { TimeoutInterceptor } from '#utils/interceptors/timeout.interceptor'; import { NestExpressApplication } from '@nestjs/platform-express'; diff --git a/apps/account-api/test/ics.controller.e2e-spec.ts b/apps/account-api/test/ics.controller.e2e-spec.ts index 7e5cbbddd..eb78472c5 100644 --- a/apps/account-api/test/ics.controller.e2e-spec.ts +++ b/apps/account-api/test/ics.controller.e2e-spec.ts @@ -9,8 +9,8 @@ import { Test, TestingModule } from '@nestjs/testing'; import { Logger } from 'nestjs-pino'; import request from 'supertest'; import { cryptoWaitReady } from '@polkadot/util-crypto'; -import { setupProviderAndUsers } from './e2e-setup.mock.spec'; -import { ChainUser } from '@projectlibertylabs/frequency-scenario-template'; +import { setupProviderAndUsers } from '#testlib/e2e-setup.mock.spec'; +import { ChainUser, ExtrinsicHelper } from '@projectlibertylabs/frequency-scenario-template'; import { getUnifiedAddress } from '@frequency-chain/ethereum-utils'; import { BlockchainRpcQueryService } from '#blockchain/blockchain-rpc-query.service'; import Keyring from '@polkadot/keyring'; @@ -73,6 +73,11 @@ describe('Ics Controller', () => { await blockchainService.isReady(); }); + afterAll(async () => { + await app.close(); + await ExtrinsicHelper.disconnect(); + }); + describe('(POST) v1/ics/:accountId/publishAll', () => { const goodIcsPublishAllPayload = createIcsPublishAllRequestDto(); diff --git a/apps/account-api/test/keys.controller.e2e-spec.ts b/apps/account-api/test/keys.controller.e2e-spec.ts index ff4de089e..5b71a3896 100644 --- a/apps/account-api/test/keys.controller.e2e-spec.ts +++ b/apps/account-api/test/keys.controller.e2e-spec.ts @@ -11,7 +11,7 @@ import { removeExtraKeysFromMsa, generateSignedAddKeyPayload, setupProviderAndUsers, -} from './e2e-setup.mock.spec'; +} from '#testlib/e2e-setup.mock.spec'; import { CacheMonitorService } from '#cache/cache-monitor.service'; import apiConfig, { IAccountApiConfig } from '#account-api/api.config'; import { TimeoutInterceptor } from '#utils/interceptors/timeout.interceptor'; diff --git a/apps/account-api/test/setup/index.ts b/apps/account-api/test/setup/index.ts index b39948e85..414de644e 100644 --- a/apps/account-api/test/setup/index.ts +++ b/apps/account-api/test/setup/index.ts @@ -12,6 +12,7 @@ import { provisionUserGraphEncryptionKeys, provisionUserGraphResets, provisionUsersOnChain, + IntentBuilder, } from '@projectlibertylabs/frequency-scenario-template'; import log from 'loglevel'; import { cryptoWaitReady } from '@polkadot/util-crypto'; @@ -41,24 +42,24 @@ async function main() { const revokedUser: ChainUser = (await initializeLocalUsers(`${BASE_SEED_PHRASE}//revoked`, 1))[0]; const undelegatedUser: ChainUser = (await initializeLocalUsers(`${BASE_SEED_PHRASE}//undelegated`, 1))[0]; - const builder = new SchemaBuilder().withAutoDetectExistingSchema(); + const builder = new IntentBuilder().withAutoDetectExisting(true); const updateSchema = await builder.withName('dsnp', 'update').resolve(); const publicKeySchema = await builder.withName('dsnp', 'public-key-key-agreement').resolve(); const publicFollowsSchema = await builder.withName('dsnp', 'public-follows').resolve(); const privateFollowsSchema = await builder.withName('dsnp', 'private-follows').resolve(); const privateConnectionsSchema = await builder.withName('dsnp', 'private-connections').resolve(); - const schemaIds = [ - updateSchema!.id.toNumber(), - publicKeySchema!.id.toNumber(), - publicFollowsSchema!.id.toNumber(), - privateFollowsSchema!.id.toNumber(), - privateConnectionsSchema!.id.toNumber(), + const intentIds = [ + updateSchema!.id, + publicKeySchema!.id, + publicFollowsSchema!.id, + privateFollowsSchema!.id, + privateConnectionsSchema!.id, ]; // Create users await provisionLocalUserCreationExtrinsics(provider, [...delegators, revokedUser], { - schemaIds, + intentIds, allocateHandle: false, }); await provisionUserGraphResets([...delegators, revokedUser]); diff --git a/apps/account-api/test/setup/package-lock.json b/apps/account-api/test/setup/package-lock.json index 3e0df7abf..24923911f 100644 --- a/apps/account-api/test/setup/package-lock.json +++ b/apps/account-api/test/setup/package-lock.json @@ -9,91 +9,23 @@ "version": "1.0.0", "license": "UNLICENSED", "dependencies": { - "@frequency-chain/api-augment": "1.17.8", + "@frequency-chain/api-augment": "2.0.0-rc3", "@polkadot/api": "16.4.8", "@polkadot/keyring": "13.5.7", "@polkadot/types": "16.4.8", "@polkadot/util": "13.5.7", "@polkadot/util-crypto": "13.5.7", - "@projectlibertylabs/frequency-scenario-template": "1.1.15", + "@projectlibertylabs/frequency-scenario-template": "2.0.0-rc5", "loglevel": "1.9.2" }, "devDependencies": { "tsx": "4.20.6" } }, - "node_modules/@esbuild/aix-ppc64": { - "version": "0.25.12", - "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.25.12.tgz", - "integrity": "sha512-Hhmwd6CInZ3dwpuGTF8fJG6yoWmsToE+vYgD4nytZVxcu1ulHpUQRAB1UJ8+N1Am3Mz4+xOByoQoSZf4D+CpkA==", - "cpu": [ - "ppc64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "aix" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/android-arm": { - "version": "0.25.12", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.25.12.tgz", - "integrity": "sha512-VJ+sKvNA/GE7Ccacc9Cha7bpS8nyzVv0jdVgwNDaR4gDMC/2TTRc33Ip8qrNYUcpkOHUT5OZ0bUcNNVZQ9RLlg==", - "cpu": [ - "arm" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/android-arm64": { - "version": "0.25.12", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.25.12.tgz", - "integrity": "sha512-6AAmLG7zwD1Z159jCKPvAxZd4y/VTO0VkprYy+3N2FtJ8+BQWFXU+OxARIwA46c5tdD9SsKGZ/1ocqBS/gAKHg==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/android-x64": { - "version": "0.25.12", - "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.25.12.tgz", - "integrity": "sha512-5jbb+2hhDHx5phYR2By8GTWEzn6I9UqR11Kwf22iKbNpYrsmRB18aX/9ivc5cabcUiAT/wM+YIZ6SG9QO6a8kg==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=18" - } - }, "node_modules/@esbuild/darwin-arm64": { - "version": "0.25.12", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.25.12.tgz", - "integrity": "sha512-N3zl+lxHCifgIlcMUP5016ESkeQjLj/959RxxNYIthIg+CQHInujFuXeWbWMgnTo4cp5XVHqFPmpyu9J65C1Yg==", + "version": "0.25.11", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.25.11.tgz", + "integrity": "sha512-VekY0PBCukppoQrycFxUqkCojnTQhdec0vevUL/EDOCnXd9LKWqD/bHwMPzigIJXPhC59Vd1WFIL57SKs2mg4w==", "cpu": [ "arm64" ], @@ -107,367 +39,10 @@ "node": ">=18" } }, - "node_modules/@esbuild/darwin-x64": { - "version": "0.25.12", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.25.12.tgz", - "integrity": "sha512-HQ9ka4Kx21qHXwtlTUVbKJOAnmG1ipXhdWTmNXiPzPfWKpXqASVcWdnf2bnL73wgjNrFXAa3yYvBSd9pzfEIpA==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/freebsd-arm64": { - "version": "0.25.12", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.25.12.tgz", - "integrity": "sha512-gA0Bx759+7Jve03K1S0vkOu5Lg/85dou3EseOGUes8flVOGxbhDDh/iZaoek11Y8mtyKPGF3vP8XhnkDEAmzeg==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/freebsd-x64": { - "version": "0.25.12", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.25.12.tgz", - "integrity": "sha512-TGbO26Yw2xsHzxtbVFGEXBFH0FRAP7gtcPE7P5yP7wGy7cXK2oO7RyOhL5NLiqTlBh47XhmIUXuGciXEqYFfBQ==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/linux-arm": { - "version": "0.25.12", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.25.12.tgz", - "integrity": "sha512-lPDGyC1JPDou8kGcywY0YILzWlhhnRjdof3UlcoqYmS9El818LLfJJc3PXXgZHrHCAKs/Z2SeZtDJr5MrkxtOw==", - "cpu": [ - "arm" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/linux-arm64": { - "version": "0.25.12", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.25.12.tgz", - "integrity": "sha512-8bwX7a8FghIgrupcxb4aUmYDLp8pX06rGh5HqDT7bB+8Rdells6mHvrFHHW2JAOPZUbnjUpKTLg6ECyzvas2AQ==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/linux-ia32": { - "version": "0.25.12", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.25.12.tgz", - "integrity": "sha512-0y9KrdVnbMM2/vG8KfU0byhUN+EFCny9+8g202gYqSSVMonbsCfLjUO+rCci7pM0WBEtz+oK/PIwHkzxkyharA==", - "cpu": [ - "ia32" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/linux-loong64": { - "version": "0.25.12", - "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.25.12.tgz", - "integrity": "sha512-h///Lr5a9rib/v1GGqXVGzjL4TMvVTv+s1DPoxQdz7l/AYv6LDSxdIwzxkrPW438oUXiDtwM10o9PmwS/6Z0Ng==", - "cpu": [ - "loong64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/linux-mips64el": { - "version": "0.25.12", - "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.25.12.tgz", - "integrity": "sha512-iyRrM1Pzy9GFMDLsXn1iHUm18nhKnNMWscjmp4+hpafcZjrr2WbT//d20xaGljXDBYHqRcl8HnxbX6uaA/eGVw==", - "cpu": [ - "mips64el" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/linux-ppc64": { - "version": "0.25.12", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.25.12.tgz", - "integrity": "sha512-9meM/lRXxMi5PSUqEXRCtVjEZBGwB7P/D4yT8UG/mwIdze2aV4Vo6U5gD3+RsoHXKkHCfSxZKzmDssVlRj1QQA==", - "cpu": [ - "ppc64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/linux-riscv64": { - "version": "0.25.12", - "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.25.12.tgz", - "integrity": "sha512-Zr7KR4hgKUpWAwb1f3o5ygT04MzqVrGEGXGLnj15YQDJErYu/BGg+wmFlIDOdJp0PmB0lLvxFIOXZgFRrdjR0w==", - "cpu": [ - "riscv64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/linux-s390x": { - "version": "0.25.12", - "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.25.12.tgz", - "integrity": "sha512-MsKncOcgTNvdtiISc/jZs/Zf8d0cl/t3gYWX8J9ubBnVOwlk65UIEEvgBORTiljloIWnBzLs4qhzPkJcitIzIg==", - "cpu": [ - "s390x" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/linux-x64": { - "version": "0.25.12", - "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.25.12.tgz", - "integrity": "sha512-uqZMTLr/zR/ed4jIGnwSLkaHmPjOjJvnm6TVVitAa08SLS9Z0VM8wIRx7gWbJB5/J54YuIMInDquWyYvQLZkgw==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/netbsd-arm64": { - "version": "0.25.12", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.25.12.tgz", - "integrity": "sha512-xXwcTq4GhRM7J9A8Gv5boanHhRa/Q9KLVmcyXHCTaM4wKfIpWkdXiMog/KsnxzJ0A1+nD+zoecuzqPmCRyBGjg==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "netbsd" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/netbsd-x64": { - "version": "0.25.12", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.25.12.tgz", - "integrity": "sha512-Ld5pTlzPy3YwGec4OuHh1aCVCRvOXdH8DgRjfDy/oumVovmuSzWfnSJg+VtakB9Cm0gxNO9BzWkj6mtO1FMXkQ==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "netbsd" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/openbsd-arm64": { - "version": "0.25.12", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.25.12.tgz", - "integrity": "sha512-fF96T6KsBo/pkQI950FARU9apGNTSlZGsv1jZBAlcLL1MLjLNIWPBkj5NlSz8aAzYKg+eNqknrUJ24QBybeR5A==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "openbsd" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/openbsd-x64": { - "version": "0.25.12", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.25.12.tgz", - "integrity": "sha512-MZyXUkZHjQxUvzK7rN8DJ3SRmrVrke8ZyRusHlP+kuwqTcfWLyqMOE3sScPPyeIXN/mDJIfGXvcMqCgYKekoQw==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "openbsd" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/openharmony-arm64": { - "version": "0.25.12", - "resolved": "https://registry.npmjs.org/@esbuild/openharmony-arm64/-/openharmony-arm64-0.25.12.tgz", - "integrity": "sha512-rm0YWsqUSRrjncSXGA7Zv78Nbnw4XL6/dzr20cyrQf7ZmRcsovpcRBdhD43Nuk3y7XIoW2OxMVvwuRvk9XdASg==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "openharmony" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/sunos-x64": { - "version": "0.25.12", - "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.25.12.tgz", - "integrity": "sha512-3wGSCDyuTHQUzt0nV7bocDy72r2lI33QL3gkDNGkod22EsYl04sMf0qLb8luNKTOmgF/eDEDP5BFNwoBKH441w==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "sunos" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/win32-arm64": { - "version": "0.25.12", - "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.25.12.tgz", - "integrity": "sha512-rMmLrur64A7+DKlnSuwqUdRKyd3UE7oPJZmnljqEptesKM8wx9J8gx5u0+9Pq0fQQW8vqeKebwNXdfOyP+8Bsg==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/win32-ia32": { - "version": "0.25.12", - "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.25.12.tgz", - "integrity": "sha512-HkqnmmBoCbCwxUKKNPBixiWDGCpQGVsrQfJoVGYLPT41XWF8lHuE5N6WhVia2n4o5QK5M4tYr21827fNhi4byQ==", - "cpu": [ - "ia32" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/win32-x64": { - "version": "0.25.12", - "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.25.12.tgz", - "integrity": "sha512-alJC0uCZpTFrSL0CCDjcgleBXPnCrEAhTBILpeAp7M/OFgoqtAetfBzX0xM00MUsVVPpVjlPuMbREqnZCXaTnA==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=18" - } - }, "node_modules/@frequency-chain/api-augment": { - "version": "1.17.8", - "resolved": "https://registry.npmjs.org/@frequency-chain/api-augment/-/api-augment-1.17.8.tgz", - "integrity": "sha512-L8aLHO7LDDuMkZ6KTjZEJ/O7qSNibwR8qG7f/F6UjIB9ng8am/otor4Q/MVycMIPW5fR30ixZI7apxIGGc6rHw==", + "version": "2.0.0-rc3", + "resolved": "https://registry.npmjs.org/@frequency-chain/api-augment/-/api-augment-2.0.0-rc3.tgz", + "integrity": "sha512-lHUNgyH51Qi20yqGWa9clQdjfhUS7gJeGq7OFZjwOhSVBN8315MNAesySBP9w4Ukaoy4XPfnN7VtdZSHCfIDFA==", "license": "Apache-2.0", "dependencies": { "@polkadot/api": "16.4.8", @@ -676,12 +251,12 @@ } }, "node_modules/@polkadot/networks": { - "version": "13.5.9", - "resolved": "https://registry.npmjs.org/@polkadot/networks/-/networks-13.5.9.tgz", - "integrity": "sha512-nmKUKJjiLgcih0MkdlJNMnhEYdwEml2rv/h59ll2+rAvpsVWMTLCb6Cq6q7UC44+8kiWK2UUJMkFU+3PFFxndA==", + "version": "13.5.7", + "resolved": "https://registry.npmjs.org/@polkadot/networks/-/networks-13.5.7.tgz", + "integrity": "sha512-RdQcgaPy68NRSI7UTBdxr1aw66MXVdbpGhpWQpLf3/7puUdwkem6KxqFNnC9/kJSXRlyYGeYHN9Hsf4+CTWBSQ==", "license": "Apache-2.0", "dependencies": { - "@polkadot/util": "13.5.9", + "@polkadot/util": "13.5.7", "@substrate/ss58-registry": "^1.51.0", "tslib": "^2.8.0" }, @@ -689,50 +264,6 @@ "node": ">=18" } }, - "node_modules/@polkadot/networks/node_modules/@polkadot/util": { - "version": "13.5.9", - "resolved": "https://registry.npmjs.org/@polkadot/util/-/util-13.5.9.tgz", - "integrity": "sha512-pIK3XYXo7DKeFRkEBNYhf3GbCHg6dKQisSvdzZwuyzA6m7YxQq4DFw4IE464ve4Z7WsJFt3a6C9uII36hl9EWw==", - "license": "Apache-2.0", - "dependencies": { - "@polkadot/x-bigint": "13.5.9", - "@polkadot/x-global": "13.5.9", - "@polkadot/x-textdecoder": "13.5.9", - "@polkadot/x-textencoder": "13.5.9", - "@types/bn.js": "^5.1.6", - "bn.js": "^5.2.1", - "tslib": "^2.8.0" - }, - "engines": { - "node": ">=18" - } - }, - "node_modules/@polkadot/networks/node_modules/@polkadot/x-textdecoder": { - "version": "13.5.9", - "resolved": "https://registry.npmjs.org/@polkadot/x-textdecoder/-/x-textdecoder-13.5.9.tgz", - "integrity": "sha512-W2HhVNUbC/tuFdzNMbnXAWsIHSg9SC9QWDNmFD3nXdSzlXNgL8NmuiwN2fkYvCQBtp/XSoy0gDLx0C+Fo19cfw==", - "license": "Apache-2.0", - "dependencies": { - "@polkadot/x-global": "13.5.9", - "tslib": "^2.8.0" - }, - "engines": { - "node": ">=18" - } - }, - "node_modules/@polkadot/networks/node_modules/@polkadot/x-textencoder": { - "version": "13.5.9", - "resolved": "https://registry.npmjs.org/@polkadot/x-textencoder/-/x-textencoder-13.5.9.tgz", - "integrity": "sha512-SG0MHnLUgn1ZxFdm0KzMdTHJ47SfqFhdIPMcGA0Mg/jt2rwrfrP3jtEIJMsHfQpHvfsNPfv55XOMmoPWuQnP/Q==", - "license": "Apache-2.0", - "dependencies": { - "@polkadot/x-global": "13.5.9", - "tslib": "^2.8.0" - }, - "engines": { - "node": ">=18" - } - }, "node_modules/@polkadot/rpc-augment": { "version": "16.4.8", "resolved": "https://registry.npmjs.org/@polkadot/rpc-augment/-/rpc-augment-16.4.8.tgz", @@ -926,77 +457,13 @@ "@polkadot/util": "13.5.7" } }, - "node_modules/@polkadot/util-crypto/node_modules/@polkadot/networks": { - "version": "13.5.7", - "resolved": "https://registry.npmjs.org/@polkadot/networks/-/networks-13.5.7.tgz", - "integrity": "sha512-RdQcgaPy68NRSI7UTBdxr1aw66MXVdbpGhpWQpLf3/7puUdwkem6KxqFNnC9/kJSXRlyYGeYHN9Hsf4+CTWBSQ==", - "license": "Apache-2.0", - "dependencies": { - "@polkadot/util": "13.5.7", - "@substrate/ss58-registry": "^1.51.0", - "tslib": "^2.8.0" - }, - "engines": { - "node": ">=18" - } - }, - "node_modules/@polkadot/util-crypto/node_modules/@polkadot/x-bigint": { - "version": "13.5.7", - "resolved": "https://registry.npmjs.org/@polkadot/x-bigint/-/x-bigint-13.5.7.tgz", - "integrity": "sha512-NbN4EPbMBhjOXoWj0BVcT49/obzusFWPKbSyBxbZi8ITBaIIgpncgcCfXY4rII6Fqh74khx9jdevWge/6ycepQ==", - "license": "Apache-2.0", - "dependencies": { - "@polkadot/x-global": "13.5.7", - "tslib": "^2.8.0" - }, - "engines": { - "node": ">=18" - } - }, - "node_modules/@polkadot/util-crypto/node_modules/@polkadot/x-global": { - "version": "13.5.7", - "resolved": "https://registry.npmjs.org/@polkadot/x-global/-/x-global-13.5.7.tgz", - "integrity": "sha512-TkBxLfeKtj0laCzXp2lvRhwSIeXSxIu7LAWpfAUW4SYNFQvtgIS0x0Bq70CUW3lcy0wqTrSG2cqzfnbomB0Djw==", - "license": "Apache-2.0", - "dependencies": { - "tslib": "^2.8.0" - }, - "engines": { - "node": ">=18" - } - }, - "node_modules/@polkadot/util/node_modules/@polkadot/x-bigint": { - "version": "13.5.7", - "resolved": "https://registry.npmjs.org/@polkadot/x-bigint/-/x-bigint-13.5.7.tgz", - "integrity": "sha512-NbN4EPbMBhjOXoWj0BVcT49/obzusFWPKbSyBxbZi8ITBaIIgpncgcCfXY4rII6Fqh74khx9jdevWge/6ycepQ==", - "license": "Apache-2.0", - "dependencies": { - "@polkadot/x-global": "13.5.7", - "tslib": "^2.8.0" - }, - "engines": { - "node": ">=18" - } - }, - "node_modules/@polkadot/util/node_modules/@polkadot/x-global": { - "version": "13.5.7", - "resolved": "https://registry.npmjs.org/@polkadot/x-global/-/x-global-13.5.7.tgz", - "integrity": "sha512-TkBxLfeKtj0laCzXp2lvRhwSIeXSxIu7LAWpfAUW4SYNFQvtgIS0x0Bq70CUW3lcy0wqTrSG2cqzfnbomB0Djw==", - "license": "Apache-2.0", - "dependencies": { - "tslib": "^2.8.0" - }, - "engines": { - "node": ">=18" - } - }, "node_modules/@polkadot/wasm-bridge": { - "version": "7.5.4", - "resolved": "https://registry.npmjs.org/@polkadot/wasm-bridge/-/wasm-bridge-7.5.4.tgz", - "integrity": "sha512-6xaJVvoZbnbgpQYXNw9OHVNWjXmtcoPcWh7hlwx3NpfiLkkjljj99YS+XGZQlq7ks2fVCg7FbfknkNb8PldDaA==", + "version": "7.5.1", + "resolved": "https://registry.npmjs.org/@polkadot/wasm-bridge/-/wasm-bridge-7.5.1.tgz", + "integrity": "sha512-E+N3CSnX3YaXpAmfIQ+4bTyiAqJQKvVcMaXjkuL8Tp2zYffClWLG5e+RY15Uh+EWfUl9If4y6cLZi3D5NcpAGQ==", "license": "Apache-2.0", "dependencies": { - "@polkadot/wasm-util": "7.5.4", + "@polkadot/wasm-util": "7.5.1", "tslib": "^2.7.0" }, "engines": { @@ -1008,16 +475,16 @@ } }, "node_modules/@polkadot/wasm-crypto": { - "version": "7.5.4", - "resolved": "https://registry.npmjs.org/@polkadot/wasm-crypto/-/wasm-crypto-7.5.4.tgz", - "integrity": "sha512-1seyClxa7Jd7kQjfnCzTTTfYhTa/KUTDUaD3DMHBk5Q4ZUN1D1unJgX+v1aUeXSPxmzocdZETPJJRZjhVOqg9g==", + "version": "7.5.1", + "resolved": "https://registry.npmjs.org/@polkadot/wasm-crypto/-/wasm-crypto-7.5.1.tgz", + "integrity": "sha512-acjt4VJ3w19v7b/SIPsV/5k9s6JsragHKPnwoZ0KTfBvAFXwzz80jUzVGxA06SKHacfCUe7vBRlz7M5oRby1Pw==", "license": "Apache-2.0", "dependencies": { - "@polkadot/wasm-bridge": "7.5.4", - "@polkadot/wasm-crypto-asmjs": "7.5.4", - "@polkadot/wasm-crypto-init": "7.5.4", - "@polkadot/wasm-crypto-wasm": "7.5.4", - "@polkadot/wasm-util": "7.5.4", + "@polkadot/wasm-bridge": "7.5.1", + "@polkadot/wasm-crypto-asmjs": "7.5.1", + "@polkadot/wasm-crypto-init": "7.5.1", + "@polkadot/wasm-crypto-wasm": "7.5.1", + "@polkadot/wasm-util": "7.5.1", "tslib": "^2.7.0" }, "engines": { @@ -1029,9 +496,9 @@ } }, "node_modules/@polkadot/wasm-crypto-asmjs": { - "version": "7.5.4", - "resolved": "https://registry.npmjs.org/@polkadot/wasm-crypto-asmjs/-/wasm-crypto-asmjs-7.5.4.tgz", - "integrity": "sha512-ZYwxQHAJ8pPt6kYk9XFmyuFuSS+yirJLonvP+DYbxOrARRUHfN4nzp4zcZNXUuaFhpbDobDSFn6gYzye6BUotA==", + "version": "7.5.1", + "resolved": "https://registry.npmjs.org/@polkadot/wasm-crypto-asmjs/-/wasm-crypto-asmjs-7.5.1.tgz", + "integrity": "sha512-jAg7Uusk+xeHQ+QHEH4c/N3b1kEGBqZb51cWe+yM61kKpQwVGZhNdlWetW6U23t/BMyZArIWMsZqmK/Ij0PHog==", "license": "Apache-2.0", "dependencies": { "tslib": "^2.7.0" @@ -1044,15 +511,15 @@ } }, "node_modules/@polkadot/wasm-crypto-init": { - "version": "7.5.4", - "resolved": "https://registry.npmjs.org/@polkadot/wasm-crypto-init/-/wasm-crypto-init-7.5.4.tgz", - "integrity": "sha512-U6s4Eo2rHs2n1iR01vTz/sOQ7eOnRPjaCsGWhPV+ZC/20hkVzwPAhiizu/IqMEol4tO2yiSheD4D6bn0KxUJhg==", + "version": "7.5.1", + "resolved": "https://registry.npmjs.org/@polkadot/wasm-crypto-init/-/wasm-crypto-init-7.5.1.tgz", + "integrity": "sha512-Obu4ZEo5jYO6sN31eqCNOXo88rPVkP9TrUOyynuFCnXnXr8V/HlmY/YkAd9F87chZnkTJRlzak17kIWr+i7w3A==", "license": "Apache-2.0", "dependencies": { - "@polkadot/wasm-bridge": "7.5.4", - "@polkadot/wasm-crypto-asmjs": "7.5.4", - "@polkadot/wasm-crypto-wasm": "7.5.4", - "@polkadot/wasm-util": "7.5.4", + "@polkadot/wasm-bridge": "7.5.1", + "@polkadot/wasm-crypto-asmjs": "7.5.1", + "@polkadot/wasm-crypto-wasm": "7.5.1", + "@polkadot/wasm-util": "7.5.1", "tslib": "^2.7.0" }, "engines": { @@ -1064,12 +531,12 @@ } }, "node_modules/@polkadot/wasm-crypto-wasm": { - "version": "7.5.4", - "resolved": "https://registry.npmjs.org/@polkadot/wasm-crypto-wasm/-/wasm-crypto-wasm-7.5.4.tgz", - "integrity": "sha512-PsHgLsVTu43eprwSvUGnxybtOEuHPES6AbApcs7y5ZbM2PiDMzYbAjNul098xJK/CPtrxZ0ePDFnaQBmIJyTFw==", + "version": "7.5.1", + "resolved": "https://registry.npmjs.org/@polkadot/wasm-crypto-wasm/-/wasm-crypto-wasm-7.5.1.tgz", + "integrity": "sha512-S2yQSGbOGTcaV6UdipFVyEGanJvG6uD6Tg7XubxpiGbNAblsyYKeFcxyH1qCosk/4qf+GIUwlOL4ydhosZflqg==", "license": "Apache-2.0", "dependencies": { - "@polkadot/wasm-util": "7.5.4", + "@polkadot/wasm-util": "7.5.1", "tslib": "^2.7.0" }, "engines": { @@ -1080,9 +547,9 @@ } }, "node_modules/@polkadot/wasm-util": { - "version": "7.5.4", - "resolved": "https://registry.npmjs.org/@polkadot/wasm-util/-/wasm-util-7.5.4.tgz", - "integrity": "sha512-hqPpfhCpRAqCIn/CYbBluhh0TXmwkJnDRjxrU9Bnqtw9nMNa97D8JuOjdd2pi0rxm+eeLQ/f1rQMp71RMM9t4w==", + "version": "7.5.1", + "resolved": "https://registry.npmjs.org/@polkadot/wasm-util/-/wasm-util-7.5.1.tgz", + "integrity": "sha512-sbvu71isFhPXpvMVX+EkRnUg/+54Tx7Sf9BEMqxxoPj7cG1I/MKeDEwbQz6MaU4gm7xJqvEWCAemLFcXfHQ/2A==", "license": "Apache-2.0", "dependencies": { "tslib": "^2.7.0" @@ -1095,12 +562,12 @@ } }, "node_modules/@polkadot/x-bigint": { - "version": "13.5.9", - "resolved": "https://registry.npmjs.org/@polkadot/x-bigint/-/x-bigint-13.5.9.tgz", - "integrity": "sha512-JVW6vw3e8fkcRyN9eoc6JIl63MRxNQCP/tuLdHWZts1tcAYao0hpWUzteqJY93AgvmQ91KPsC1Kf3iuuZCi74g==", + "version": "13.5.7", + "resolved": "https://registry.npmjs.org/@polkadot/x-bigint/-/x-bigint-13.5.7.tgz", + "integrity": "sha512-NbN4EPbMBhjOXoWj0BVcT49/obzusFWPKbSyBxbZi8ITBaIIgpncgcCfXY4rII6Fqh74khx9jdevWge/6ycepQ==", "license": "Apache-2.0", "dependencies": { - "@polkadot/x-global": "13.5.9", + "@polkadot/x-global": "13.5.7", "tslib": "^2.8.0" }, "engines": { @@ -1108,12 +575,12 @@ } }, "node_modules/@polkadot/x-fetch": { - "version": "13.5.9", - "resolved": "https://registry.npmjs.org/@polkadot/x-fetch/-/x-fetch-13.5.9.tgz", - "integrity": "sha512-urwXQZtT4yYROiRdJS6zHu18J/jCoAGpbgPIAjwdqjT11t9XIq4SjuPMxD19xBRhbYe9ocWV8i1KHuoMbZgKbA==", + "version": "13.5.7", + "resolved": "https://registry.npmjs.org/@polkadot/x-fetch/-/x-fetch-13.5.7.tgz", + "integrity": "sha512-ZlPtWJAq7xMMr8wo9API8l6mKRr/6kClF0Hm1CVhQgZruFTZd7A2XZfETMg49yaRouy16SRI85WhIw+pXfQd3g==", "license": "Apache-2.0", "dependencies": { - "@polkadot/x-global": "13.5.9", + "@polkadot/x-global": "13.5.7", "node-fetch": "^3.3.2", "tslib": "^2.8.0" }, @@ -1122,9 +589,9 @@ } }, "node_modules/@polkadot/x-global": { - "version": "13.5.9", - "resolved": "https://registry.npmjs.org/@polkadot/x-global/-/x-global-13.5.9.tgz", - "integrity": "sha512-zSRWvELHd3Q+bFkkI1h2cWIqLo1ETm+MxkNXLec3lB56iyq/MjWBxfXnAFFYFayvlEVneo7CLHcp+YTFd9aVSA==", + "version": "13.5.7", + "resolved": "https://registry.npmjs.org/@polkadot/x-global/-/x-global-13.5.7.tgz", + "integrity": "sha512-TkBxLfeKtj0laCzXp2lvRhwSIeXSxIu7LAWpfAUW4SYNFQvtgIS0x0Bq70CUW3lcy0wqTrSG2cqzfnbomB0Djw==", "license": "Apache-2.0", "dependencies": { "tslib": "^2.8.0" @@ -1150,18 +617,6 @@ "@polkadot/wasm-util": "*" } }, - "node_modules/@polkadot/x-randomvalues/node_modules/@polkadot/x-global": { - "version": "13.5.7", - "resolved": "https://registry.npmjs.org/@polkadot/x-global/-/x-global-13.5.7.tgz", - "integrity": "sha512-TkBxLfeKtj0laCzXp2lvRhwSIeXSxIu7LAWpfAUW4SYNFQvtgIS0x0Bq70CUW3lcy0wqTrSG2cqzfnbomB0Djw==", - "license": "Apache-2.0", - "dependencies": { - "tslib": "^2.8.0" - }, - "engines": { - "node": ">=18" - } - }, "node_modules/@polkadot/x-textdecoder": { "version": "13.5.7", "resolved": "https://registry.npmjs.org/@polkadot/x-textdecoder/-/x-textdecoder-13.5.7.tgz", @@ -1175,18 +630,6 @@ "node": ">=18" } }, - "node_modules/@polkadot/x-textdecoder/node_modules/@polkadot/x-global": { - "version": "13.5.7", - "resolved": "https://registry.npmjs.org/@polkadot/x-global/-/x-global-13.5.7.tgz", - "integrity": "sha512-TkBxLfeKtj0laCzXp2lvRhwSIeXSxIu7LAWpfAUW4SYNFQvtgIS0x0Bq70CUW3lcy0wqTrSG2cqzfnbomB0Djw==", - "license": "Apache-2.0", - "dependencies": { - "tslib": "^2.8.0" - }, - "engines": { - "node": ">=18" - } - }, "node_modules/@polkadot/x-textencoder": { "version": "13.5.7", "resolved": "https://registry.npmjs.org/@polkadot/x-textencoder/-/x-textencoder-13.5.7.tgz", @@ -1200,25 +643,13 @@ "node": ">=18" } }, - "node_modules/@polkadot/x-textencoder/node_modules/@polkadot/x-global": { - "version": "13.5.7", - "resolved": "https://registry.npmjs.org/@polkadot/x-global/-/x-global-13.5.7.tgz", - "integrity": "sha512-TkBxLfeKtj0laCzXp2lvRhwSIeXSxIu7LAWpfAUW4SYNFQvtgIS0x0Bq70CUW3lcy0wqTrSG2cqzfnbomB0Djw==", - "license": "Apache-2.0", - "dependencies": { - "tslib": "^2.8.0" - }, - "engines": { - "node": ">=18" - } - }, "node_modules/@polkadot/x-ws": { - "version": "13.5.9", - "resolved": "https://registry.npmjs.org/@polkadot/x-ws/-/x-ws-13.5.9.tgz", - "integrity": "sha512-NKVgvACTIvKT8CjaQu9d0dERkZsWIZngX/4NVSjc01WHmln4F4y/zyBdYn/Z2V0Zw28cISx+lB4qxRmqTe7gbg==", + "version": "13.5.7", + "resolved": "https://registry.npmjs.org/@polkadot/x-ws/-/x-ws-13.5.7.tgz", + "integrity": "sha512-ZdmFhL3gDMRxJXqN7a88BIU1sm2IgAFnn+jMcjjJXwP5qEuP9ejwPHQL0EFOw6sqtylfQUFuWvahvIZT7MbQ5g==", "license": "Apache-2.0", "dependencies": { - "@polkadot/x-global": "13.5.9", + "@polkadot/x-global": "13.5.7", "tslib": "^2.8.0", "ws": "^8.18.0" }, @@ -1227,12 +658,12 @@ } }, "node_modules/@projectlibertylabs/frequency-scenario-template": { - "version": "1.1.15", - "resolved": "https://registry.npmjs.org/@projectlibertylabs/frequency-scenario-template/-/frequency-scenario-template-1.1.15.tgz", - "integrity": "sha512-bFZNhxWuxJt4j9BoakkNNI45l4TEwCIZmKl0upAuwKwk6Yv2t0QfhlfyXIPSvV8PywDfJqS6lim6xTkHOHtLow==", + "version": "2.0.0-rc5", + "resolved": "https://registry.npmjs.org/@projectlibertylabs/frequency-scenario-template/-/frequency-scenario-template-2.0.0-rc5.tgz", + "integrity": "sha512-4SggukI0Jh1MdfuWMdbl/6FgaMgMtgyVGycEcOGBRDJV/SIMlQHLZMOGAkvjNsVQD/dFhkWZCR1GbX48Eb+zFA==", "license": "Apache-2.0", "dependencies": { - "@frequency-chain/api-augment": "1.17.8", + "@frequency-chain/api-augment": "2.0.0-rc3", "@polkadot/api": "16.4.8", "@polkadot/keyring": "13.5.7", "@polkadot/types": "16.4.8", @@ -1336,12 +767,12 @@ "license": "MIT" }, "node_modules/@types/node": { - "version": "24.10.4", - "resolved": "https://registry.npmjs.org/@types/node/-/node-24.10.4.tgz", - "integrity": "sha512-vnDVpYPMzs4wunl27jHrfmwojOGKya0xyM3sH+UE5iv5uPS6vX7UIoh6m+vQc5LGBq52HBKPIn/zcSZVzeDEZg==", + "version": "24.7.2", + "resolved": "https://registry.npmjs.org/@types/node/-/node-24.7.2.tgz", + "integrity": "sha512-/NbVmcGTP+lj5oa4yiYxxeBjRivKQ5Ns1eSZeB99ExsEQ6rX5XYU1Zy/gGxY/ilqtD4Etx9mKyrPxZRetiahhA==", "license": "MIT", "dependencies": { - "undici-types": "~7.16.0" + "undici-types": "~7.14.0" } }, "node_modules/avsc": { @@ -1386,9 +817,9 @@ } }, "node_modules/esbuild": { - "version": "0.25.12", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.25.12.tgz", - "integrity": "sha512-bbPBYYrtZbkt6Os6FiTLCTFxvq4tt3JKall1vRwshA3fdVztsLAatFaZobhkBC8/BrPetoa0oksYoKXoG4ryJg==", + "version": "0.25.11", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.25.11.tgz", + "integrity": "sha512-KohQwyzrKTQmhXDW1PjCv3Tyspn9n5GcY2RTDqeORIdIJY8yKIF7sTSopFmn/wpMPW4rdPXI0UE5LJLuq3bx0Q==", "dev": true, "hasInstallScript": true, "license": "MIT", @@ -1399,32 +830,32 @@ "node": ">=18" }, "optionalDependencies": { - "@esbuild/aix-ppc64": "0.25.12", - "@esbuild/android-arm": "0.25.12", - "@esbuild/android-arm64": "0.25.12", - "@esbuild/android-x64": "0.25.12", - "@esbuild/darwin-arm64": "0.25.12", - "@esbuild/darwin-x64": "0.25.12", - "@esbuild/freebsd-arm64": "0.25.12", - "@esbuild/freebsd-x64": "0.25.12", - "@esbuild/linux-arm": "0.25.12", - "@esbuild/linux-arm64": "0.25.12", - "@esbuild/linux-ia32": "0.25.12", - "@esbuild/linux-loong64": "0.25.12", - "@esbuild/linux-mips64el": "0.25.12", - "@esbuild/linux-ppc64": "0.25.12", - "@esbuild/linux-riscv64": "0.25.12", - "@esbuild/linux-s390x": "0.25.12", - "@esbuild/linux-x64": "0.25.12", - "@esbuild/netbsd-arm64": "0.25.12", - "@esbuild/netbsd-x64": "0.25.12", - "@esbuild/openbsd-arm64": "0.25.12", - "@esbuild/openbsd-x64": "0.25.12", - "@esbuild/openharmony-arm64": "0.25.12", - "@esbuild/sunos-x64": "0.25.12", - "@esbuild/win32-arm64": "0.25.12", - "@esbuild/win32-ia32": "0.25.12", - "@esbuild/win32-x64": "0.25.12" + "@esbuild/aix-ppc64": "0.25.11", + "@esbuild/android-arm": "0.25.11", + "@esbuild/android-arm64": "0.25.11", + "@esbuild/android-x64": "0.25.11", + "@esbuild/darwin-arm64": "0.25.11", + "@esbuild/darwin-x64": "0.25.11", + "@esbuild/freebsd-arm64": "0.25.11", + "@esbuild/freebsd-x64": "0.25.11", + "@esbuild/linux-arm": "0.25.11", + "@esbuild/linux-arm64": "0.25.11", + "@esbuild/linux-ia32": "0.25.11", + "@esbuild/linux-loong64": "0.25.11", + "@esbuild/linux-mips64el": "0.25.11", + "@esbuild/linux-ppc64": "0.25.11", + "@esbuild/linux-riscv64": "0.25.11", + "@esbuild/linux-s390x": "0.25.11", + "@esbuild/linux-x64": "0.25.11", + "@esbuild/netbsd-arm64": "0.25.11", + "@esbuild/netbsd-x64": "0.25.11", + "@esbuild/openbsd-arm64": "0.25.11", + "@esbuild/openbsd-x64": "0.25.11", + "@esbuild/openharmony-arm64": "0.25.11", + "@esbuild/sunos-x64": "0.25.11", + "@esbuild/win32-arm64": "0.25.11", + "@esbuild/win32-ia32": "0.25.11", + "@esbuild/win32-x64": "0.25.11" } }, "node_modules/eventemitter3": { @@ -1484,9 +915,9 @@ } }, "node_modules/get-tsconfig": { - "version": "4.13.0", - "resolved": "https://registry.npmjs.org/get-tsconfig/-/get-tsconfig-4.13.0.tgz", - "integrity": "sha512-1VKTZJCwBrvbd+Wn3AOgQP/2Av+TfTCOlE4AcRJE72W1ksZXbAx8PPBR9RzgTeSPzlPMHrbANMH3LbltH73wxQ==", + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/get-tsconfig/-/get-tsconfig-4.12.0.tgz", + "integrity": "sha512-LScr2aNr2FbjAjZh2C6X6BxRx1/x+aTDExct/xyq2XKbYOiG5c0aK7pMsSuyc0brz3ibr/lbQiHD9jzt4lccJw==", "dev": true, "license": "MIT", "dependencies": { @@ -1663,9 +1094,9 @@ } }, "node_modules/undici-types": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-7.16.0.tgz", - "integrity": "sha512-Zz+aZWSj8LE6zoxD+xrjh4VfkIG8Ya6LvYkZqtUQGJPZjYl53ypCaUwWqo7eI0x66KBGeRo+mlBEkMSeSZ38Nw==", + "version": "7.14.0", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-7.14.0.tgz", + "integrity": "sha512-QQiYxHuyZ9gQUIrmPo3IA+hUl4KYk8uSA7cHrcKd/l3p1OTpZcM0Tbp9x7FAtXdAYhlasd60ncPpgu6ihG6TOA==", "license": "MIT" }, "node_modules/unique-names-generator": { @@ -1687,9 +1118,9 @@ } }, "node_modules/ws": { - "version": "8.19.0", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.19.0.tgz", - "integrity": "sha512-blAT2mjOEIi0ZzruJfIhb3nps74PRWTCz1IjglWEEpQl5XS/UNama6u2/rjFkDDouqr4L67ry+1aGIALViWjDg==", + "version": "8.18.3", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.18.3.tgz", + "integrity": "sha512-PEIGCY5tSlUt50cqyMXfCzX+oOPqN0vuGqWzbcJ2xvnkzkq46oOpz7dQaTDBdfICb4N14+GARUDw2XV2N4tvzg==", "license": "MIT", "engines": { "node": ">=10.0.0" diff --git a/apps/account-api/test/setup/package.json b/apps/account-api/test/setup/package.json index cb63b3f5e..e91e7ef76 100644 --- a/apps/account-api/test/setup/package.json +++ b/apps/account-api/test/setup/package.json @@ -12,13 +12,13 @@ "author": "", "license": "UNLICENSED", "dependencies": { - "@frequency-chain/api-augment": "1.17.8", + "@frequency-chain/api-augment": "2.0.0-rc3", "@polkadot/api": "16.4.8", "@polkadot/keyring": "13.5.7", "@polkadot/types": "16.4.8", "@polkadot/util": "13.5.7", "@polkadot/util-crypto": "13.5.7", - "@projectlibertylabs/frequency-scenario-template": "1.1.15", + "@projectlibertylabs/frequency-scenario-template": "2.0.0-rc5", "loglevel": "1.9.2" }, "devDependencies": { diff --git a/apps/account-api/test/setup/test-revoke-e2e.ts b/apps/account-api/test/setup/test-revoke-e2e.ts index 6bd1491cd..1546a3777 100644 --- a/apps/account-api/test/setup/test-revoke-e2e.ts +++ b/apps/account-api/test/setup/test-revoke-e2e.ts @@ -5,7 +5,7 @@ import { u8aToHex } from '@polkadot/util'; // eslint-disable-next-line import/no-extraneous-dependencies import axios from 'axios'; // eslint-disable-next-line import/no-relative-packages -import { setupProviderAndUsers } from '../e2e-setup.mock.spec'; +import { setupProviderAndUsers } from '#testlib/e2e-setup.mock.spec'; const FREQUENCY_API_WS_URL = process.env.FREQUENCY_API_WS_URL || 'ws://127.0.0.1:9944'; @@ -25,7 +25,7 @@ async function revokeDelegation() { const providerId = provider.msaId?.toString(); const { keypair } = users[1]; const accountId = keypair.address; - const getPath: string = `http:/localhost:3013/v1/delegation/revokeDelegation/${accountId}/${providerId}`; + const getPath: string = `http:/localhost:3013/v3/delegations/revokeDelegation/${accountId}/${providerId}`; const response = await axios.get(getPath); const revokeDelegationPayloadResponse = response.data; console.log(`RevokeDelegationPayloadResponse = ${JSON.stringify(revokeDelegationPayloadResponse)}`); @@ -45,7 +45,7 @@ async function revokeDelegation() { }; console.log(`revokeDelegationRequest = ${JSON.stringify(revokeDelegationRequest)}`); - const postPath = 'http:/localhost:3013/v1/delegation/revokeDelegation'; + const postPath = 'http:/localhost:3013/v3/delegations/revokeDelegation'; await axios.post(postPath, revokeDelegationRequest); } diff --git a/apps/account-worker/src/main.ts b/apps/account-worker/src/main.ts index a5129d575..00f415c91 100644 --- a/apps/account-worker/src/main.ts +++ b/apps/account-worker/src/main.ts @@ -11,6 +11,7 @@ import workerConfig, { IAccountWorkerConfig } from './worker.config'; import { TimeoutInterceptor } from '#utils/interceptors/timeout.interceptor'; import { setupLoggingOverrides, validateEnvironmentVariables } from '#utils/common/common.utils'; import { generateSwaggerDoc, writeOpenApiFile } from '#openapi/openapi'; +import { useContainer } from 'class-validator'; let logger: NestLogger; @@ -75,6 +76,10 @@ async function bootstrap() { const config = app.get(workerConfig.KEY); try { + // 🔑 Enable Nest DI inside class-validator constraints + useContainer(app.select(WorkerModule), { + fallbackOnErrors: true, + }); app.enableShutdownHooks(); app.useGlobalPipes( new ValidationPipe({ diff --git a/apps/account-worker/src/transaction_notifier/notifier.service.ts b/apps/account-worker/src/transaction_notifier/notifier.service.ts index 644b65433..5896ffe27 100644 --- a/apps/account-worker/src/transaction_notifier/notifier.service.ts +++ b/apps/account-worker/src/transaction_notifier/notifier.service.ts @@ -199,7 +199,7 @@ export class TxnNotifierService this.blockchainService.handlePublishPublicKeyAgreementTxResult(successEvent); const response = createWebhookRsp(txStatus, itemizedPageUpdated.msaId, { - schemaId: itemizedPageUpdated.schemaId, + schemaId: itemizedPageUpdated.intentId, }); webhookResponse = response; diff --git a/apps/content-publishing-api/src/api.module.ts b/apps/content-publishing-api/src/api.module.ts index d846dded2..ccf1924c0 100644 --- a/apps/content-publishing-api/src/api.module.ts +++ b/apps/content-publishing-api/src/api.module.ts @@ -28,6 +28,7 @@ import { LoggerModule } from 'nestjs-pino'; import { createPrometheusConfig, getPinoHttpOptions } from '#logger-lib'; import { ThrottlerGuard, ThrottlerModule } from '@nestjs/throttler'; import { createRateLimitingConfig, createThrottlerConfig } from '#config'; +import { DecoratorsModule } from '#utils/decorators/decorators.module'; const configs = [ apiConfig, @@ -44,6 +45,7 @@ const configs = [ load: configs, }), BlockchainModule.forRootAsync({ readOnly: true }), + DecoratorsModule, EventEmitterModule.forRoot({ // Use this instance throughout the application global: true, diff --git a/apps/content-publishing-api/src/api.service.ts b/apps/content-publishing-api/src/api.service.ts index d879a8fc6..de2892428 100644 --- a/apps/content-publishing-api/src/api.service.ts +++ b/apps/content-publishing-api/src/api.service.ts @@ -60,12 +60,16 @@ export class ApiService { this.logger.setContext(this.constructor.name); } - async enqueueContent(msaId: string | undefined, content: OnChainContentDto): Promise { + async enqueueContent( + msaId: string | undefined, + content: OnChainContentDto, + intentId: number, + ): Promise { const { schemaId, ...data } = content; const jobData: IPublisherJob = { id: '', schemaId, - data: { ...data, onBehalfOf: msaId }, + data: { ...data, onBehalfOf: msaId, intentId }, }; jobData.id = this.calculateJobId(jobData); const job = await this.publishQueue.add(`OnChain content job - ${jobData.id}`, jobData, { diff --git a/apps/content-publishing-api/src/controllers/v2/content.controller.v2.ts b/apps/content-publishing-api/src/controllers/v2/content.controller.v2.ts index f8135caba..de4036c74 100644 --- a/apps/content-publishing-api/src/controllers/v2/content.controller.v2.ts +++ b/apps/content-publishing-api/src/controllers/v2/content.controller.v2.ts @@ -53,20 +53,24 @@ export class ContentControllerV2 { if (!schemaInfo.payloadLocation.isOnChain) { throw new UnprocessableEntityException('Schema payload location invalid for on-chain content'); } - // Check schema grants if publishing on behalf of a user + // Check Intent grants if publishing on behalf of a user const onBehalfOf = msaId === this.appConfig.providerId.toString() ? undefined : msaId; if (onBehalfOf) { if ( !(await this.blockchainService.checkCurrentDelegation( onBehalfOf, - contentDto.schemaId, + schemaInfo.intentId, this.appConfig.providerId, )) ) { - throw new UnauthorizedException('Provider not delegated for schema by user'); + throw new UnauthorizedException('Provider not delegated for intent by user'); } } - return this.apiService.enqueueContent(onBehalfOf, contentDto) as Promise; + return this.apiService.enqueueContent( + onBehalfOf, + contentDto, + schemaInfo.intentId.toNumber(), + ) as Promise; } @Post('batchAnnouncement') diff --git a/apps/content-publishing-api/src/main.ts b/apps/content-publishing-api/src/main.ts index f2b40c840..ce4d97291 100644 --- a/apps/content-publishing-api/src/main.ts +++ b/apps/content-publishing-api/src/main.ts @@ -10,6 +10,7 @@ import { generateSwaggerDoc, initializeSwaggerUI, writeOpenApiFile } from '#open import { Logger, PinoLogger } from 'nestjs-pino'; import { getCurrentLogLevel, getPinoHttpOptions } from '#logger-lib'; import { setupLoggingOverrides, validateEnvironmentVariables } from '#utils/common/common.utils'; +import { useContainer } from 'class-validator'; let logger: NestLogger; @@ -76,6 +77,10 @@ async function bootstrap() { }); try { + // 🔑 Enable Nest DI inside class-validator constraints + useContainer(app.select(ApiModule), { + fallbackOnErrors: true, + }); app.enableShutdownHooks(); app.useGlobalPipes( new ValidationPipe({ diff --git a/apps/content-publishing-api/test/app-content.e2e-spec.ts b/apps/content-publishing-api/test/app-content.e2e-spec.ts index 73e3c40ff..a4c311440 100644 --- a/apps/content-publishing-api/test/app-content.e2e-spec.ts +++ b/apps/content-publishing-api/test/app-content.e2e-spec.ts @@ -44,6 +44,8 @@ import Keyring from '@polkadot/keyring'; import { ApiPromise } from '@polkadot/api'; import { BlockchainRpcQueryService } from '#blockchain/blockchain-rpc-query.service'; import { getPinoHttpOptions } from '#logger-lib'; +import { ExtrinsicHelper, IntentBuilder, SchemaBuilder } from '@projectlibertylabs/frequency-scenario-template'; +import { initializeHelpers } from '#testlib/e2e-setup.mock.spec'; let aliceKeys: KeyringPair; @@ -63,6 +65,9 @@ describe('Content Publishing /content Controller E2E Tests', () => { let api: ApiPromise; let blockchainService: BlockchainRpcQueryService; + let ipfsSchemaId: number; + let onChainSchemaId: number; + const missingAssetId = '9876543210'; const badMimeTypeReferenceId = '0123456789'; @@ -117,11 +122,44 @@ describe('Content Publishing /content Controller E2E Tests', () => { await redis.set(getAssetMetadataKey(badMimeTypeReferenceId), JSON.stringify(assetMetaDataInvalidMimeType)); blockchainService = app.get(BlockchainRpcQueryService); api = (await blockchainService.getApi()) as ApiPromise; + + await initializeHelpers(); + const onChainIntentName = 'e-e.on-chain'; + + // Get any off-chain (IPFS) schema + const builder = new IntentBuilder(); + const intent = await builder.withAutoDetectExisting(true).withName('dsnp.broadcast').resolve(); + ipfsSchemaId = intent.schemas[0]; + + // Create on-chain Intent & Schema if one doesn't exist, since the chain genesis does not contain any. + // This will only work against a local chain; if we want to test against testnet, would need to re-work using sudo. + const keys = new Keyring({ type: 'sr25519' }).addFromUri('//Alice'); + const onChainIntent = await builder + .withAutoDetectExisting(true) + .withName(onChainIntentName) + .withPayloadLocation('OnChain') + .build(keys); // will either resolve existing or build new + if (onChainIntent?.schemas.length > 0) { + onChainSchemaId = [...onChainIntent.schemas].pop(); + } + if (!onChainSchemaId) { + const onChainSchema = await new SchemaBuilder() + .withIntentId(onChainIntent.id) + .withModelType('AvroBinary') + .withModel(AVRO_SCHEMA) + .build(keys); + onChainSchemaId = onChainSchema.id; + } + + if (!onChainSchemaId) { + throw new Error('No on-chain schema found'); + } }); afterAll(async () => { try { await app.close(); + await ExtrinsicHelper.disconnect(); } catch (err) { console.error(err); } @@ -829,81 +867,6 @@ describe('Content Publishing /content Controller E2E Tests', () => { }); describe('V2 Content', () => { - let ipfsSchemaId: number; - let onChainSchemaId: number; - - beforeAll(async () => { - const onChainIntentName = 'e-e.on-chain'; - - // TODO: Swap this in after Intents are deployed - // Get any off-chain (IPFS) schema - // const intents = await api.call.schemasRuntimeApi.getRegisteredEntitiesByName('dsnp.broadcast'); - // const intentWithSchemas = await api.call.schemasRuntimeApi.getIntentById(intents.unwrap()[0].id, true); - // const schemaIds = intentWithSchemas.schema_ids.unwrap().to_array(); - // ipfsSchemaId = schemaIds.pop().toNumber(); - - // Create on-chain Intent if one doesn't exist, since the chain genesis does not contain any - // const onChainIntents = await api.call.schemasRuntimeApi.getRegisteredEntitiesByName(onChainIntentName); - // if (onChainIntents.isSome && onChainIntents.unwrap().length > 0) { - // const onChainIntentWithSchemas = await api.call.schemasRuntimeApi.getIntentById( - // onChainIntents.unwrap()[0].id, - // true, - // ); - // const schemaIds = onChainIntentWithSchemas.schema_ids.unwrap().to_array(); - // onChainSchemaId = schemaIds.pop().toNumber(); - // } else { - // // This will only work against a local chain; if we want to test against testnet, would need to re-work using sudo - // const keys = new Keyring({ type: 'sr25519' }).addFromUri('//Alice'); - // const intentId = await new Promise((resolve, reject) => - // api.tx.schemas.createIntent(onChainIntentName, 'OnChain', []).signAndSend(keys, ({ status, events }) => { - // events.forEach(({ event: { data, method } }) => { - // if (method === 'IntentCreated') { - // resolve(data[0].toNumber()); - // } - // }); - // }), - // ); - // onChainSchemaId = await new Promise((resolve, reject) => - // api.tx.schemas.createSchemaV4(intentId, 'AvroBinary', {}).signAndSend(keys, ({ status, events }) => { - // events.forEach(({ event: { data, method } }) => { - // if (method === 'SchemaCreated') { - // resolve(data[0].toNumber()); - // } - // }); - // }); - // } - - // TODO: Remove in favor of above after Intents are deployed on Frequency - // Get any off-chain (IPFS) schema ID - let schemas = (await api.call.schemasRuntimeApi.getSchemaVersionsByName('dsnp.broadcast')).unwrap().toArray(); - ipfsSchemaId = schemas.pop().schemaId.toNumber(); - - // Create an on-chain schema if one does not exist (since the chain genesis does not contain any) - const schemaResponse = await api.call.schemasRuntimeApi.getSchemaVersionsByName(onChainIntentName); - if (schemaResponse.isSome && schemaResponse.unwrap().length > 0) { - schemas = schemaResponse.unwrap().toArray(); - onChainSchemaId = schemas.pop().schemaId.toNumber(); - } else { - onChainSchemaId = await new Promise((resolve, reject) => { - api.tx.schemas - .createSchemaV3(JSON.stringify(AVRO_SCHEMA), 'AvroBinary', 'OnChain', [], onChainIntentName) - .signAndSend(aliceKeys, ({ status, events }) => { - console.log('STATUS: ', status); - events.forEach(({ event }) => { - console.log('EVENT: ', event.method); - if (api.events.schemas.SchemaCreated.is(event)) { - resolve(event.data.schemaId.toNumber()); - } - }); - // If in block but no event found, reject - if (status.isInBlock) { - reject(new Error('No SchemaCreated event found')); - } - }); - }); - } - }); - describe('/v2/content/:msaId/on-chain', () => { const goodPayload = '0x' + Buffer.from('hello, world').toString('hex'); const largePayload = () => diff --git a/apps/content-publishing-worker/src/batching_processor/batching.processor.service.ts b/apps/content-publishing-worker/src/batching_processor/batching.processor.service.ts index 32b3449d4..bf9e5494c 100644 --- a/apps/content-publishing-worker/src/batching_processor/batching.processor.service.ts +++ b/apps/content-publishing-worker/src/batching_processor/batching.processor.service.ts @@ -128,12 +128,13 @@ export class BatchingProcessorService { announcements.push(announcement); } if (announcements.length > 0) { + const { schemaId } = await this.blockchainService.getIntentAndLatestSchemaIdsByName( + 'dsnp', + QueueConstants.QUEUE_NAME_TO_ANNOUNCEMENT_MAP.get(queueName)!.toString(), + ); const job = { batchId: metaData.batchId, - schemaId: await this.blockchainService.getSchemaIdByName( - 'dsnp', - QueueConstants.QUEUE_NAME_TO_ANNOUNCEMENT_MAP.get(queueName)!.toString(), - ), + schemaId, announcements, } as IBatchAnnouncerJobData; await this.outputQueue.add(`Batch Job - ${metaData.batchId}`, job, { diff --git a/apps/content-publishing-worker/src/main.ts b/apps/content-publishing-worker/src/main.ts index 204f52ef5..432bf6d4f 100644 --- a/apps/content-publishing-worker/src/main.ts +++ b/apps/content-publishing-worker/src/main.ts @@ -10,6 +10,7 @@ import { NestExpressApplication } from '@nestjs/platform-express'; import workerConfig, { IContentPublishingWorkerConfig } from './worker.config'; import { ValidationPipe, Logger as NestLogger } from '@nestjs/common'; import { TimeoutInterceptor } from '#utils/interceptors/timeout.interceptor'; +import { useContainer } from 'class-validator'; let logger: NestLogger; @@ -67,6 +68,10 @@ async function bootstrap() { const config = app.get(workerConfig.KEY); try { + // 🔑 Enable Nest DI inside class-validator constraints + useContainer(app.select(WorkerModule), { + fallbackOnErrors: true, + }); app.enableShutdownHooks(); app.useGlobalPipes( new ValidationPipe({ diff --git a/apps/content-publishing-worker/src/publisher/publishing.service.ts b/apps/content-publishing-worker/src/publisher/publishing.service.ts index 80f70076f..e6fe551eb 100644 --- a/apps/content-publishing-worker/src/publisher/publishing.service.ts +++ b/apps/content-publishing-worker/src/publisher/publishing.service.ts @@ -68,7 +68,7 @@ export class PublishingService extends BaseConsumer implements OnApplicationBoot if (isOnChainJob(jobData) && typeof jobData.data.onBehalfOf !== 'undefined') { const isDelegationValid = await this.blockchainService.checkCurrentDelegation( jobData.data.onBehalfOf, - jobData.schemaId, + jobData.data.intentId, this.blockchainConf.providerId, ); if (!isDelegationValid) { diff --git a/apps/content-watcher/src/api.module.ts b/apps/content-watcher/src/api.module.ts index 5abe05aee..d7e3525a2 100644 --- a/apps/content-watcher/src/api.module.ts +++ b/apps/content-watcher/src/api.module.ts @@ -27,6 +27,7 @@ import { LoggerModule } from 'nestjs-pino'; import { createPrometheusConfig, getPinoHttpOptions } from '#logger-lib'; import { ThrottlerGuard, ThrottlerModule } from '@nestjs/throttler'; import { createRateLimitingConfig, createThrottlerConfig } from '#config'; +import { DecoratorsModule } from '#utils/decorators/decorators.module'; const configs = [ apiConfig, @@ -46,6 +47,7 @@ const configs = [ BlockchainModule.forRootAsync({ readOnly: true, }), + DecoratorsModule, ScannerModule, CrawlerModule, IPFSProcessorModule, diff --git a/apps/content-watcher/src/main.ts b/apps/content-watcher/src/main.ts index 3aeee5b26..dfcaed7c8 100644 --- a/apps/content-watcher/src/main.ts +++ b/apps/content-watcher/src/main.ts @@ -9,6 +9,7 @@ import { generateSwaggerDoc, initializeSwaggerUI, writeOpenApiFile } from '#open import { Logger, PinoLogger } from 'nestjs-pino'; import { setupLoggingOverrides, validateEnvironmentVariables } from '#utils/common/common.utils'; import { getPinoHttpOptions } from '#logger-lib'; +import { useContainer } from 'class-validator'; let logger: NestLogger; @@ -71,6 +72,10 @@ async function bootstrap() { }); try { + // 🔑 Enable Nest DI inside class-validator constraints + useContainer(app.select(ApiModule), { + fallbackOnErrors: true, + }); app.enableShutdownHooks(); app.useGlobalPipes( new ValidationPipe({ diff --git a/docker-compose-published.yaml b/docker-compose-published.yaml index 252c7bb44..fc494e573 100644 --- a/docker-compose-published.yaml +++ b/docker-compose-published.yaml @@ -53,9 +53,9 @@ services: frequency: image: frequencychain/standalone-node:latest - # We need to specify the platform because it's the only image - # built by Frequency at the moment, and auto-pull won't work otherwise - platform: linux/amd64 + # If auto-pull fails due to a platform mismatch, uncomment below to force x86 emulation. + # Available Frequency builds are: [amd64, arm64] + # platform: linux/amd64 # Uncomment SEALING_MODE and SEALING_INTERVAL if you want to use interval sealing. # Other options you may want to add depending on your test scenario. environment: diff --git a/docker-compose.yaml b/docker-compose.yaml index 96b2d9536..f78dcb813 100644 --- a/docker-compose.yaml +++ b/docker-compose.yaml @@ -58,10 +58,10 @@ services: - ./redis:/etc/redis:ro frequency: - image: frequencychain/standalone-node:latest - # We need to specify the platform because it's the only image - # built by Frequency at the moment, and auto-pull won't work otherwise - platform: linux/amd64 + image: frequencychain/standalone-node:v2.0.0-rc3 + # If auto-pull fails due to a platform mismatch, uncomment below to force x86 emulation. + # Available Frequency builds are: [amd64, arm64] + # platform: linux/amd64 # Uncomment SEALING_MODE and SEALING_INTERVAL if you want to use interval sealing. # Other options you may want to add depending on your test scenario. environment: diff --git a/libs/blockchain/src/blockchain-rpc-query.service.ts b/libs/blockchain/src/blockchain-rpc-query.service.ts index 0a19e328e..35bb32890 100644 --- a/libs/blockchain/src/blockchain-rpc-query.service.ts +++ b/libs/blockchain/src/blockchain-rpc-query.service.ts @@ -4,7 +4,7 @@ * NOTE: This class is designed to isolate consumers from having to deal with the details of interacting directly * with the Frequency blockchain. To that end, return values of functions should not expose the SCALE- * encoded objects that are directly returned from Frequency RPC calls; rather, all payloads should be - * unwrapped and re-formed using native Javascript types. + * unwrapped and re-formed using native JavaScript types. * * RPC methods that have the potential to return values wrapped as `Option<...>` or any value supporting * the `.isEmpty`, `.isSome`, or `.isNone` getters should implement one of the following behaviors: @@ -16,15 +16,13 @@ import '@frequency-chain/api-augment'; import { Inject, Injectable } from '@nestjs/common'; import { AccountId, AccountId32, BlockHash, BlockNumber, Event, Header, SignedBlock } from '@polkadot/types/interfaces'; import { ApiDecoration, SubmittableExtrinsic } from '@polkadot/api/types'; -import { AnyNumber, Codec, DetectCodec, ISubmittableResult, SignerPayloadRaw } from '@polkadot/types/types'; -import { bool, Bytes, Option, u128, u16, Vec } from '@polkadot/types'; +import { AnyNumber, Codec, DetectCodec, SignerPayloadRaw } from '@polkadot/types/types'; +import { bool, Bytes, Option, u128, Vec } from '@polkadot/types'; import { - CommonPrimitivesMsaDelegation, CommonPrimitivesMsaProviderRegistryEntry, FrameSystemEventRecord, PalletCapacityCapacityDetails, PalletSchemasSchemaInfo, - PalletSchemasSchemaVersionId, } from '@polkadot/types/lookup'; import { ItemizedStoragePageResponse, @@ -76,7 +74,7 @@ interface PublicKeyValues { interface ItemizedPageUpdated { msaId: string; - schemaId: string; + intentId: string; prevContentHash: string; currContentHash: string; debugMsg: string; @@ -103,10 +101,10 @@ export interface ICapacityInfo { } export interface IBlockPaginationRequest { - readonly from_block: number; - readonly from_index: number; - readonly to_block: number; - readonly page_size: number; + readonly fromBlock: number; + readonly fromIndex: number; + readonly toBlock: number; + readonly pageSize: number; } @Injectable() @@ -137,15 +135,15 @@ export class BlockchainRpcQueryService extends PolkadotApiService { } @RpcCall('rpc.statefulStorage.getItemizedStorage') - public async getItemizedStorage(msaId: AnyNumber, schemaId: AnyNumber): Promise { - return this.api.rpc.statefulStorage.getItemizedStorage(msaId, schemaId); + public async getItemizedStorage(msaId: AnyNumber, intentId: AnyNumber): Promise { + return this.api.rpc.statefulStorage.getItemizedStorage(msaId, intentId); } @RpcCall('rpc.statefulStorage.getPaginatedStorage') - public async getPaginatedStorage(msaId: AnyNumber, schemaId: AnyNumber): Promise { + public async getPaginatedStorage(msaId: AnyNumber, intentId: AnyNumber): Promise { const response: Vec = await this.api.rpc.statefulStorage.getPaginatedStorage( msaId, - schemaId, + intentId, ); return response.toArray(); @@ -247,33 +245,23 @@ export class BlockchainRpcQueryService extends PolkadotApiService { : null; } - public async getCommonPrimitivesMsaDelegation( - msaId: AnyNumber, - providerId: AnyNumber, - ): Promise { - return this.handleOptionResult(this.api.query.msa.delegatorAndProviderToDelegation(msaId, providerId)); - } - public async getProviderDelegationForMsa(msaId: AnyNumber, providerId: AnyNumber): Promise { const response = await this.handleOptionResult( - this.api.query.msa.delegatorAndProviderToDelegation(msaId, providerId), + this.api.call.msaRuntimeApi.getDelegationForMsaAndProvider(msaId, providerId), ); - return response ? chainDelegationToNative(providerId, response) : null; + return response ? chainDelegationToNative(response) : null; } public async getDelegationsForMsa(msaId: AnyNumber): Promise { - const response = (await this.api.query.msa.delegatorAndProviderToDelegation.entries(msaId)) - .filter(([_, entry]) => entry.isSome) - .map(([key, value]) => chainDelegationToNative(key.args[1], value.unwrap())); - - return response; + const response = await this.api.call.msaRuntimeApi.getAllGrantedDelegationsByMsaId(msaId); + return response.map((delegation) => chainDelegationToNative(delegation)); } @RpcCall('rpc.msa.checkDelegations') - public async checkCurrentDelegation(msaId: AnyNumber, schemaId: AnyNumber, providerId: AnyNumber): Promise { + public async checkCurrentDelegation(msaId: AnyNumber, intentId: AnyNumber, providerId: AnyNumber): Promise { const header = await this.api.rpc.chain.getHeader(); const delegation = ( - await this.api.rpc.msa.checkDelegations([msaId], providerId, header.number.toNumber(), schemaId) + await this.api.rpc.msa.checkDelegations([msaId], providerId, header.number.toNumber(), intentId) ) .toArray() .find(([delegatorId, _]) => delegatorId.toString() === (typeof msaId === 'string' ? msaId : msaId.toString())); @@ -327,8 +315,7 @@ export class BlockchainRpcQueryService extends PolkadotApiService { const totalAdjustedWeightFee = capacityCost.inclusionFee.adjustedWeightFee; // Check if the total cost exceeds the remaining capacity - const outOfCapacity = remainingCapacity < totalAdjustedWeightFee; - return outOfCapacity; + return remainingCapacity < totalAdjustedWeightFee; } catch (e) { this.logger.error(`Error checking capacity limit: ${e}`); return false; @@ -373,9 +360,9 @@ export class BlockchainRpcQueryService extends PolkadotApiService { }; } - @RpcCall('rpc.messages.getBySchemaId') - public async getMessagesBySchemaId(schemaId: AnyNumber, pagination: IBlockPaginationRequest) { - return this.api.rpc.messages.getBySchemaId(schemaId, pagination); + @RpcCall('call.messagesRuntimeApi.getMessagesByIntentId') + public async getMessagesByIntentId(intentId: AnyNumber, pagination: IBlockPaginationRequest) { + return this.api.call.messagesRuntimeApi.getMessagesByIntentId(intentId, pagination); } // ********************************* Query methods (accept optional block hash for "at" queries) ********************************* @@ -388,19 +375,48 @@ export class BlockchainRpcQueryService extends PolkadotApiService { return this.handleOptionResult(api.query.schemas.schemaInfos(schemaId)); } - public async getSchemaIdByName( - schemaNamespace: string, - schemaDescriptor: string, + public async getLatestSchemaIdForIntent(intentId: AnyNumber): Promise { + const api = await this.getApi(); + const intentResponse = await api.call.schemasRuntimeApi.getIntentById(intentId, true); + if (intentResponse.isNone) { + throw new Error(`Unable to retrieve Intent ${intentId}`); + } + const schemas = intentResponse.unwrap().schemaIds; + if (schemas.isNone || schemas.unwrap().length === 0) { + throw new Error(`No registered schemas found for Intent ${intentId}"`); + } + const schemaIds = schemas.unwrap(); + return schemaIds[schemaIds.length - 1].toNumber(); + } + + public async getIntentAndLatestSchemaIdsByName( + protocolName: string, + descriptor: string, blockHash?: Uint8Array | string, - ): Promise { + ): Promise<{ intentId: number; schemaId: number }> { + if (!protocolName || !descriptor) { + throw new Error('Both protocol name and descriptor must be provided'); + } const api = await this.getApi(blockHash); - const { ids }: { ids: Vec } = await api.query.schemas.schemaNameToIds(schemaNamespace, schemaDescriptor); - const schemaId = ids.toArray().pop()?.toNumber(); - if (!schemaId) { - throw new Error(`Unable to determine schema ID for "${schemaNamespace}.${schemaDescriptor}"`); + const fullName = `${protocolName}.${descriptor}`; + const namedResponse = await api.call.schemasRuntimeApi.getRegisteredEntitiesByName(fullName); + if (namedResponse.isSome) { + const entities = namedResponse.unwrap().filter((entity) => entity.entityId.isIntent); + switch (entities.length) { + case 0: + throw new Error(`No Intent registration found for "${fullName}"`); + + case 1: + const intentId = entities[0].entityId.asIntent.toNumber(); + const schemaId = await this.getLatestSchemaIdForIntent(intentId); + return { intentId, schemaId }; + + default: + throw new Error(`Multiple Intent registrations found for "${fullName}"`); + } } - return schemaId; + throw new Error(`No Intent registration found for "${fullName}"`); } public async getSchemaPayload(schemaId: AnyNumber, blockHash?: Uint8Array | string): Promise { @@ -408,18 +424,26 @@ export class BlockchainRpcQueryService extends PolkadotApiService { return this.handleOptionResult(api.query.schemas.schemaPayloads(schemaId)); } - public async getSchemaNamesToIds(args: [namespace: string, name: string][]) { - const versions = await this.api.query.schemas.schemaNameToIds.multi(args); - return versions.map((schemaVersions: PalletSchemasSchemaVersionId, index) => ({ - name: args[index], - ids: schemaVersions.ids.map((version) => version.toNumber()), - })); + public async getIntentNamesToIds(args: string[]) { + const entityResponse = await Promise.all( + args.map((name) => this.api.call.schemasRuntimeApi.getRegisteredEntitiesByName(name)), + ); + entityResponse.filter((response) => response.isSome).forEach((entity) => {}); + return entityResponse + .filter((response) => response.isSome) + .map((response) => response.unwrap().toArray()) + .flat() + .filter((entity) => entity.entityId.isIntent) + .map((entity) => ({ + name: Buffer.from(entity.name.toU8a(true)).toString(), + intentId: entity.entityId.asIntent.toNumber(), + })); } public async getMessageKeysInBlock(blockNumber: AnyNumber): Promise<[number, number][]> { - return (await this.api.query.messages.messagesV2.keys(blockNumber)).map((key) => { - const [_, schemaId, index] = key.args; - return [schemaId.toNumber(), index.toNumber()]; + return (await this.api.query.messages.messagesV3.keys(blockNumber)).map((key) => { + const [_, intentId, index] = key.args; + return [intentId.toNumber(), index.toNumber()]; }); } @@ -465,13 +489,12 @@ export class BlockchainRpcQueryService extends PolkadotApiService { const { msaOwnerAddress, msaOwnerSignature, newKeyOwnerSignature, payload } = keysRequest; const txPayload = this.createAddPublicKeyToMsaPayload(payload); - const addKeyResponse = this.api.tx.msa.addPublicKeyToMsa( + return this.api.tx.msa.addPublicKeyToMsa( msaOwnerAddress, getTypedSignatureForPayload(msaOwnerAddress, msaOwnerSignature), getTypedSignatureForPayload(payload.newPublicKey, newKeyOwnerSignature), txPayload, ); - return addKeyResponse; } public async generateAddPublicKeyAgreementToMsa( @@ -494,11 +517,11 @@ export class BlockchainRpcQueryService extends PolkadotApiService { // eslint-disable-next-line consistent-return, class-methods-use-this public async getRawPayloadForSigning( - tx: SubmittableExtrinsic<'promise', ISubmittableResult>, + tx: SubmittableExtrinsic<'promise'>, signerAddress: string, // eslint-disable-next-line consistent-return ): Promise { - let signRaw; + let signRaw: SignerPayloadRaw | PromiseLike; try { await tx.signAsync(signerAddress, { signer: { @@ -537,9 +560,7 @@ export class BlockchainRpcQueryService extends PolkadotApiService { }; } - public async generateRevokeDelegationByDelegator( - providerId: string, - ): Promise> { + public async generateRevokeDelegationByDelegator(providerId: string): Promise> { return this.api.tx.msa.revokeDelegationByDelegator(providerId); } @@ -605,9 +626,7 @@ export class BlockchainRpcQueryService extends PolkadotApiService { }); } - public generatePublishHandle( - jobData: TransactionData, - ): SubmittableExtrinsic<'promise', ISubmittableResult> { + public generatePublishHandle(jobData: TransactionData): SubmittableExtrinsic<'promise'> { this.logger.debug(`claimHandlePayload: ${JSON.stringify(jobData.payload)}`); this.logger.debug(`accountId: ${jobData.accountId}`); @@ -677,16 +696,16 @@ export class BlockchainRpcQueryService extends PolkadotApiService { // Grab the event data if (event && this.api.events.statefulStorage.ItemizedPageUpdated.is(event)) { const msaId = event.data.msaId.toString(); - const schemaId = event.data.schemaId.toString(); + const intentId = event.data.intentId.toString(); const prevContentHash = event.data.prevContentHash.toString(); const currContentHash = event.data.currContentHash.toString(); return { msaId, - schemaId, + intentId, prevContentHash, currContentHash, - debugMsg: `Itemized Page updated for msaId: ${msaId} and schemaId: ${schemaId}`, + debugMsg: `Itemized Page updated for msaId: ${msaId} and intentId: ${intentId}`, }; } @@ -695,7 +714,7 @@ export class BlockchainRpcQueryService extends PolkadotApiService { } public static async getRawPayloadForSigning( - tx: SubmittableExtrinsic<'promise', ISubmittableResult>, + tx: SubmittableExtrinsic<'promise'>, signerAddress: string, ): Promise { const dummyError = 'Stop here'; @@ -767,7 +786,7 @@ export class BlockchainRpcQueryService extends PolkadotApiService { pageId: AnyNumber, targetHash: AnyNumber, payload: number[], - ): SubmittableExtrinsic<'promise', ISubmittableResult> { + ): SubmittableExtrinsic<'promise'> { // TODO: Investigate why 'payload' is passed as number[] instead of Uint8Array return this.api.tx.statefulStorage.upsertPage(msaId, schemaId, pageId, targetHash, payload as any); } @@ -777,7 +796,7 @@ export class BlockchainRpcQueryService extends PolkadotApiService { schemaId: AnyNumber, pageId: AnyNumber, targetHash: AnyNumber, - ): SubmittableExtrinsic<'promise', ISubmittableResult> { + ): SubmittableExtrinsic<'promise'> { return this.api.tx.statefulStorage.deletePage(msaId, schemaId, pageId, targetHash); } @@ -785,7 +804,7 @@ export class BlockchainRpcQueryService extends PolkadotApiService { schemaId: AnyNumber, cid: string, payloadLength: number, - ): SubmittableExtrinsic<'promise', ISubmittableResult> { + ): SubmittableExtrinsic<'promise'> { return this.api.tx.messages.addIpfsMessage(schemaId, cid, payloadLength); } @@ -793,7 +812,7 @@ export class BlockchainRpcQueryService extends PolkadotApiService { schemaId: AnyNumber, payload: HexString, onBehalfOf: AnyNumber, - ): SubmittableExtrinsic<'promise', ISubmittableResult> { + ): SubmittableExtrinsic<'promise'> { return this.api.tx.messages.addOnchainMessage(onBehalfOf, schemaId, payload); } @@ -829,6 +848,6 @@ export class BlockchainRpcQueryService extends PolkadotApiService { } public async maximumCapacityBatchLength(): Promise { - return (await this.api.consts.frequencyTxPayment.maximumCapacityBatchLength).toNumber(); + return this.api.consts.frequencyTxPayment.maximumCapacityBatchLength.toNumber(); } } diff --git a/libs/content-watcher-lib/src/scanner/scanner.service.ts b/libs/content-watcher-lib/src/scanner/scanner.service.ts index 92f56c77c..11a1d6590 100644 --- a/libs/content-watcher-lib/src/scanner/scanner.service.ts +++ b/libs/content-watcher-lib/src/scanner/scanner.service.ts @@ -100,7 +100,7 @@ export class ScannerService implements OnApplicationBootstrap, OnApplicationShut const chainWatchFilters = await this.cache.get(EVENTS_TO_WATCH_KEY); const eventsToWatch: ChainWatchOptionsDto = chainWatchFilters ? JSON.parse(chainWatchFilters) - : { msa_ids: [], schemaIds: [] }; + : { msa_ids: [], intentIds: [] }; this.scanInProgress = true; diff --git a/libs/content-watcher-lib/src/utils/chain-event-processor.service.ts b/libs/content-watcher-lib/src/utils/chain-event-processor.service.ts index 1d09c7831..ee953a85a 100644 --- a/libs/content-watcher-lib/src/utils/chain-event-processor.service.ts +++ b/libs/content-watcher-lib/src/utils/chain-event-processor.service.ts @@ -1,9 +1,12 @@ import { Injectable } from '@nestjs/common'; import { ChainWatchOptionsDto } from '#types/dtos/content-watcher/chain.watch.dto'; -import { FrameSystemEventRecord } from '@polkadot/types/lookup'; +import { + CommonPrimitivesMessagesBlockPaginationResponse, + CommonPrimitivesMessagesMessageResponseV2, + FrameSystemEventRecord, +} from '@polkadot/types/lookup'; import { Vec } from '@polkadot/types'; -import { BlockPaginationResponseMessage, MessageResponse } from '@frequency-chain/api-augment/interfaces'; -import { MessageResponseWithSchemaId } from '#types/interfaces/content-watcher/message_response_with_schema_id'; +import { MessageResponseWithIntentId } from '#types/interfaces/content-watcher/message_response_with_schema_id'; import { createIPFSQueueJob } from '#types/interfaces/content-watcher/ipfs.job.interface'; import { Queue } from 'bullmq'; import { BlockchainRpcQueryService, IBlockPaginationRequest } from '#blockchain/blockchain-rpc-query.service'; @@ -16,7 +19,7 @@ export class ChainEventProcessorService { public async getMessagesInBlock( blockNumber: number, filter?: ChainWatchOptionsDto, - ): Promise { + ): Promise { const blockHash = await this.blockchainService.getBlockHash(blockNumber); if (blockHash.isEmpty) { return []; @@ -29,52 +32,50 @@ export class ChainEventProcessorService { blockNumber: number, events: FrameSystemEventRecord[], filter?: ChainWatchOptionsDto, - ): Promise { + ): Promise { const hasMessages = events.some(({ event }) => this.blockchainService.events.messages.MessagesInBlock.is(event)); if (!hasMessages) { return []; } - let schemaIds = (await this.blockchainService.getMessageKeysInBlock(blockNumber)).map(([schemaId, _]) => schemaId); - schemaIds = Array.from(new Set(schemaIds)); - const filteredEvents: (MessageResponseWithSchemaId | null)[] = await Promise.all( - schemaIds.map(async (schemaId) => { - if (filter && filter?.schemaIds?.length > 0 && !filter.schemaIds.includes(schemaId)) { + let intentIds = (await this.blockchainService.getMessageKeysInBlock(blockNumber)).map(([intentId, _]) => intentId); + intentIds = Array.from(new Set(intentIds)); + const filteredEvents: (MessageResponseWithIntentId | null)[] = await Promise.all( + intentIds.map(async (intentId) => { + if (filter && filter?.intentIds?.length > 0 && !filter.intentIds.includes(intentId)) { return null; } let paginationRequest: IBlockPaginationRequest = { - from_block: blockNumber, - from_index: 0, - page_size: 1000, - to_block: blockNumber + 1, + fromBlock: blockNumber, + fromIndex: 0, + pageSize: 1000, + toBlock: blockNumber + 1, }; - let messageResponse: BlockPaginationResponseMessage = await this.blockchainService.getMessagesBySchemaId( - schemaId, - paginationRequest, - ); - const messages: Vec = messageResponse.content; - while (messageResponse.has_next.toHuman()) { + let messageResponse: CommonPrimitivesMessagesBlockPaginationResponse = + await this.blockchainService.getMessagesByIntentId(intentId, paginationRequest); + const messages: Vec = messageResponse.content; + while (messageResponse.hasNext.toHuman()) { paginationRequest = { - from_block: blockNumber, - from_index: messageResponse.next_index.isSome ? messageResponse.next_index.unwrap().toNumber() : 0, - page_size: 1000, - to_block: blockNumber + 1, + fromBlock: blockNumber, + fromIndex: messageResponse.nextIndex.isSome ? messageResponse.nextIndex.unwrap().toNumber() : 0, + pageSize: 1000, + toBlock: blockNumber + 1, }; // eslint-disable-next-line no-await-in-loop - messageResponse = await this.blockchainService.getMessagesBySchemaId(schemaId, paginationRequest); + messageResponse = await this.blockchainService.getMessagesByIntentId(intentId, paginationRequest); if (messageResponse.content.length > 0) { messages.push(...messageResponse.content); } } - const messagesWithSchemaId: MessageResponseWithSchemaId = { - schemaId, + const messagesWithSchemaId: MessageResponseWithIntentId = { + intentId: intentId, messages, }; return messagesWithSchemaId; }), ); - const collectedMessages: MessageResponseWithSchemaId[] = []; + const collectedMessages: MessageResponseWithIntentId[] = []; filteredEvents.forEach((event) => { if (event) { collectedMessages.push(event); @@ -84,7 +85,7 @@ export class ChainEventProcessorService { } public static async queueIPFSJobs( - messages: MessageResponseWithSchemaId[], + messages: MessageResponseWithIntentId[], queue: Queue, requestId?: string, webhookUrl?: string, @@ -94,10 +95,10 @@ export class ChainEventProcessorService { .filter((message) => message.cid && message.cid.isSome) .map((message) => { const job = createIPFSQueueJob( - message.block_number.toNumber(), - message.msa_id.isNone ? message.provider_msa_id.toString() : message.msa_id.unwrap().toString(), - message.provider_msa_id.toString(), - messageResponse.schemaId, + message.blockNumber.toNumber(), + message.msaId.isNone ? message.providerMsaId.toString() : message.msaId.unwrap().toString(), + message.providerMsaId.toString(), + messageResponse.intentId, message.cid.unwrap().toString(), message.index.toNumber(), requestId, diff --git a/libs/types/src/constants/schemas.ts b/libs/types/src/constants/schemas.ts deleted file mode 100644 index 051f928cb..000000000 --- a/libs/types/src/constants/schemas.ts +++ /dev/null @@ -1,25 +0,0 @@ -// @todo Generate from the chain at startup? -// This has already applied the transformation from the v1.13.0 migration -export const SCHEMA_NAME_TO_ID = new Map([ - ['dsnp.broadcast@v1', 2], - ['dsnp.broadcast@v2', 17], - ['dsnp.dsnp-content-attribute-set@v1', 12], - ['dsnp.ext-content-attribute-set@v1', 13], - ['dsnp.private-connections@v1', 10], - ['dsnp.private-follows@v1', 9], - ['dsnp.profile-resources@v1', 15], - ['dsnp.profile@v1', 6], - ['dsnp.public-follows@v1', 8], - ['dsnp.public-key-assertion-method@v1', 14], - ['dsnp.public-key-key-agreement@v1', 7], - ['dsnp.reaction@v1', 4], - ['dsnp.reply@v1', 3], - ['dsnp.reply@v2', 18], - ['dsnp.tombstone@v1', 1], - ['dsnp.tombstone@v2', 16], - ['dsnp.update@v1', 5], - ['dsnp.update@v2', 19], - ['dsnp.user-attribute-set@v1', 11], - ['dsnp.user-attribute-set@v2', 20], - ['frequency.default-token-address@v1', 21], -]); diff --git a/libs/types/src/dtos/account/delegation.response.dto.ts b/libs/types/src/dtos/account/delegation.response.dto.ts index ad8e36f01..02133cf90 100644 --- a/libs/types/src/dtos/account/delegation.response.dto.ts +++ b/libs/types/src/dtos/account/delegation.response.dto.ts @@ -1,19 +1,5 @@ /* eslint-disable max-classes-per-file */ -import { IsNotEmpty } from 'class-validator'; -import { CommonPrimitivesMsaDelegation } from '@polkadot/types/lookup'; -import { IDelegation, IDelegationResponseV2, ISchemaDelegation } from '#types/interfaces/account/delegations.interface'; - -// V1 to be deprecated -export class DelegationResponse { - @IsNotEmpty() - providerId: string; - - @IsNotEmpty() - schemaPermissions: CommonPrimitivesMsaDelegation['schemaPermissions']; - - @IsNotEmpty() - revokedAt: CommonPrimitivesMsaDelegation['revokedAt']; -} +import { IDelegationResponse, IDelegation, IIntentDelegation } from '#types/interfaces/account/delegations.interface'; /** * NOTE: DTO classes are not technically necessary for response types, as there is no @@ -24,8 +10,8 @@ export class DelegationResponse { * gives us some additional compile-time type-checking to ensure that the documented return type matches * the interface actually being returned. */ -export class SchemaDelegation implements ISchemaDelegation { - schemaId: number; +export class IntentDelegation implements IIntentDelegation { + intentId: number; revokedAtBlock?: number; } @@ -33,12 +19,12 @@ export class SchemaDelegation implements ISchemaDelegation { export class Delegation implements IDelegation { providerId: string; - schemaDelegations: SchemaDelegation[]; + delegatedIntents: IntentDelegation[]; revokedAtBlock?: number; } -export class DelegationResponseV2 implements IDelegationResponseV2 { +export class DelegationResponse implements IDelegationResponse { msaId: string; delegations: Delegation[]; diff --git a/libs/types/src/dtos/account/wallet.v2.redirect.request.dto.ts b/libs/types/src/dtos/account/wallet.v2.redirect.request.dto.ts index c1da53cf5..0e6fd949a 100644 --- a/libs/types/src/dtos/account/wallet.v2.redirect.request.dto.ts +++ b/libs/types/src/dtos/account/wallet.v2.redirect.request.dto.ts @@ -1,6 +1,6 @@ import { EnsureArray } from '#utils/decorators/ensure-array.decorator'; import { IsCredentialType } from '#utils/decorators/is-credential-type.decorator'; -import { IsSchemaName } from '#utils/decorators/is-schema-name.decorator'; +import { IsIntentName } from '#utils/decorators/is-intent-name.decorator'; import { IsSwifV2CallbackUrl } from '#utils/decorators/is-swif-v2-callback-url.decorator'; import { ApiPropertyOptional } from '@nestjs/swagger'; import { IsOptional } from 'class-validator'; @@ -40,6 +40,6 @@ export class WalletV2RedirectRequestDto { }) @IsOptional() @EnsureArray - @IsSchemaName({ each: true }) + @IsIntentName({ each: true }) permissions?: string[]; } diff --git a/libs/types/src/dtos/content-watcher/chain.watch.dto.ts b/libs/types/src/dtos/content-watcher/chain.watch.dto.ts index 4d0cd119c..19b84f98a 100644 --- a/libs/types/src/dtos/content-watcher/chain.watch.dto.ts +++ b/libs/types/src/dtos/content-watcher/chain.watch.dto.ts @@ -1,24 +1,23 @@ import { ArrayNotEmpty, ArrayUnique, IsArray, IsOptional } from 'class-validator'; -import { IsSchemaId } from '#utils/decorators/is-schema-id.decorator'; +import { IsIntentId, IsSchemaId } from '#utils/decorators/is-schema-id.decorator'; import { IsMsaId } from '#utils/decorators/is-msa-id.decorator'; /** * Interface for chain filter options - * @interface IChainWatchOptions - * @property {number[]} schemaIds - The schema ids for which content should be watched for + * @property {number[]} intentIds - The Intent ids for which content should be watched for * @property {string[]} msa_ids - The msa ids for which content should be watched for */ export class ChainWatchOptionsDto { /** - * Specific schema ids to watch for + * Specific Intent ids to watch for * @example [1, 19] */ @IsOptional() @IsArray() @ArrayNotEmpty() @ArrayUnique() - @IsSchemaId({ each: true }) - schemaIds?: number[]; + @IsIntentId({ each: true }) + intentIds?: number[]; /** * Specific dsnpIds (msa_id) to watch for diff --git a/libs/types/src/interfaces/account/delegations.interface.ts b/libs/types/src/interfaces/account/delegations.interface.ts index 8e09905ab..c60484909 100644 --- a/libs/types/src/interfaces/account/delegations.interface.ts +++ b/libs/types/src/interfaces/account/delegations.interface.ts @@ -1,36 +1,39 @@ -import { CommonPrimitivesMsaDelegation } from '@polkadot/types/lookup'; -import { AnyNumber } from '@polkadot/types/types'; +import { CommonPrimitivesMsaDelegationResponse } from '@polkadot/types/lookup'; -export interface ISchemaDelegation { - schemaId: number; +export interface IIntentDelegation { + /// The IntentID that is granted in this delegation + intentId: number; + /// The effective block at which permission for this Intent was revoked (0 = currently in force). + /// This is adjusted in consideration of the enclosing delegations overall revocation block. revokedAtBlock?: number; + + /// The explicit block at which permission for this Intent was revoked, irrespective of the enclosing delegation. + explicitRevokedAtBlock?: number; } export interface IDelegation { providerId: string; - schemaDelegations: ISchemaDelegation[]; + delegatedIntents: IIntentDelegation[]; revokedAtBlock?: number; } -export interface IDelegationResponseV2 { +export interface IDelegationResponse { msaId: string; delegations: IDelegation[]; } -export function chainDelegationToNative( - providerId: AnyNumber, - chainDelegation: CommonPrimitivesMsaDelegation, -): IDelegation { +export function chainDelegationToNative(chainDelegation: CommonPrimitivesMsaDelegationResponse): IDelegation { return { - providerId: providerId.toString(), + providerId: chainDelegation.providerId.toString(), revokedAtBlock: chainDelegation.revokedAt.toNumber(), - schemaDelegations: Array.from(chainDelegation.schemaPermissions.entries()).map(([schemaId, revokedAt]) => ({ - schemaId: schemaId.toNumber(), + delegatedIntents: Array.from(chainDelegation.permissions).map(({ grantedId, revokedAt, explicitRevokedAt }) => ({ + intentId: grantedId.toNumber(), revokedAtBlock: revokedAt.toNumber(), + explicitRevokedAtBlock: explicitRevokedAt.toNumber(), })), }; } diff --git a/libs/types/src/interfaces/content-publishing/publisher-job.interface.ts b/libs/types/src/interfaces/content-publishing/publisher-job.interface.ts index cdb4cb5f5..62ee93998 100644 --- a/libs/types/src/interfaces/content-publishing/publisher-job.interface.ts +++ b/libs/types/src/interfaces/content-publishing/publisher-job.interface.ts @@ -12,6 +12,8 @@ export interface OnChainJobData { published: string; onBehalfOf?: string; + + intentId?: number; } interface IBasePublisherJob { diff --git a/libs/types/src/interfaces/content-watcher/message_response_with_schema_id.ts b/libs/types/src/interfaces/content-watcher/message_response_with_schema_id.ts index 28058b4b9..e04195f66 100644 --- a/libs/types/src/interfaces/content-watcher/message_response_with_schema_id.ts +++ b/libs/types/src/interfaces/content-watcher/message_response_with_schema_id.ts @@ -1,7 +1,7 @@ -import { MessageResponse } from '@frequency-chain/api-augment/interfaces'; import { Vec } from '@polkadot/types'; +import { CommonPrimitivesMessagesMessageResponseV2 } from '@polkadot/types/lookup'; -export interface MessageResponseWithSchemaId { - schemaId: number; - messages: Vec; +export interface MessageResponseWithIntentId { + intentId: number; + messages: Vec; } diff --git a/libs/utils/src/decorators/decorators.module.ts b/libs/utils/src/decorators/decorators.module.ts new file mode 100644 index 000000000..45d9cbfab --- /dev/null +++ b/libs/utils/src/decorators/decorators.module.ts @@ -0,0 +1,11 @@ +import { IsIntentNameConstraint } from '#utils/decorators/is-intent-name.decorator'; +import { Global, Module } from '@nestjs/common'; + +// Need to declare a module containing any decorators that implement an injected constraint class. + +@Global() +@Module({ + providers: [IsIntentNameConstraint], + exports: [IsIntentNameConstraint], +}) +export class DecoratorsModule {} diff --git a/libs/utils/src/decorators/is-intent-name.decorator.spec.ts b/libs/utils/src/decorators/is-intent-name.decorator.spec.ts new file mode 100644 index 000000000..72475c3d4 --- /dev/null +++ b/libs/utils/src/decorators/is-intent-name.decorator.spec.ts @@ -0,0 +1,100 @@ +import { validate, useContainer } from 'class-validator'; +import { IsIntentName, IsIntentNameConstraint } from './is-intent-name.decorator'; +import { Test } from '@nestjs/testing'; +import { BlockchainRpcQueryService } from '#blockchain/blockchain-rpc-query.service'; + +const NAMES = [ + 'dsnp.broadcast', + 'dsnp.dsnp-content-attribute-set', + 'dsnp.ext-content-attribute-set', + 'dsnp.private-connections', + 'dsnp.private-follows', + 'dsnp.profile-resources', + 'dsnp.profile', + 'dsnp.public-follows', + 'dsnp.public-key-assertion-method', + 'dsnp.public-key-key-agreement', + 'dsnp.reaction', + 'dsnp.reply', + 'dsnp.tombstone', + 'dsnp.update', + 'dsnp.user-attribute-set', + 'frequency.default-token-address', +]; + +class TestClass { + @IsIntentName() + intentName: string; +} + +const validIntent = { + name: 'valid.intent', + intentId: 1, +}; + +describe('IsIntentName', () => { + let blockchainService: BlockchainRpcQueryService; + + beforeAll(async () => { + const moduleRef = await Test.createTestingModule({ + providers: [ + { + provide: BlockchainRpcQueryService, + useValue: { + getIntentNamesToIds: jest.fn(() => []), + }, + }, + IsIntentNameConstraint, + ], + }).compile(); + + // Important: point class-validator at Nest’s container for this test run + useContainer(moduleRef, { fallbackOnErrors: true }); + + blockchainService = moduleRef.get(BlockchainRpcQueryService); + }); + + beforeEach(() => { + jest.clearAllMocks(); + }); + + it('should pass for a single valid intent name', async () => { + const testObj = new TestClass(); + testObj.intentName = NAMES[0]; + + jest.spyOn(blockchainService, 'getIntentNamesToIds').mockResolvedValue([validIntent]); + + const errors = await validate(testObj); + expect(errors.length).toBe(0); + }); + + it('should fail for invalid intent name', async () => { + const testObj = new TestClass(); + testObj.intentName = 'invalid.intent'; + + jest.spyOn(blockchainService, 'getIntentNamesToIds').mockResolvedValue([]); + + const errors = await validate(testObj); + expect(errors.length).toBe(1); + expect(errors[0].constraints).toHaveProperty('IsIntentName'); + expect(errors[0].constraints.IsIntentName).toBe( + `intentName "${testObj.intentName}" must be a registered intent name.`, + ); + }); + + it.each([ + { value: '', description: 'empty string' }, + { value: null, description: 'null value' }, + { value: undefined, description: 'undefined' }, + ])('should fail for $description', async ({ value }) => { + const testObj = new TestClass(); + testObj.intentName = value; + + const blockchainSpy = jest.spyOn(blockchainService, 'getIntentNamesToIds'); + + const errors = await validate(testObj); + expect(errors.length).toBe(1); + expect(blockchainSpy).not.toHaveBeenCalled(); + expect(errors[0].constraints).toHaveProperty('IsIntentName'); + }); +}); diff --git a/libs/utils/src/decorators/is-intent-name.decorator.ts b/libs/utils/src/decorators/is-intent-name.decorator.ts new file mode 100644 index 000000000..afca939a4 --- /dev/null +++ b/libs/utils/src/decorators/is-intent-name.decorator.ts @@ -0,0 +1,48 @@ +// NOTE: The constraint class needs to be registered with a module as a provider and imported into any module +// that wants to use the decorator. In this case, we'll register with the BlockchainModule, + +import { + registerDecorator, + ValidationArguments, + ValidationOptions, + ValidatorConstraint, + ValidatorConstraintInterface, +} from 'class-validator'; +import { Injectable } from '@nestjs/common'; +import { BlockchainRpcQueryService } from '#blockchain/blockchain-rpc-query.service'; + +@ValidatorConstraint({ name: 'IsIntentName', async: true }) +@Injectable() +export class IsIntentNameConstraint implements ValidatorConstraintInterface { + constructor(private readonly blockchainRpcService: BlockchainRpcQueryService) {} + + async validate(value: any, _args: ValidationArguments): Promise { + if ( + typeof value === 'string' && + /^([a-zA-Z][a-zA-Z0-9-]*[a-zA-Z0-9])\.([a-zA-Z][a-zA-Z0-9-]*[a-zA-Z0-9])$/.test(value) + ) { + const response = await this.blockchainRpcService.getIntentNamesToIds([value]); + return response.length > 0; + } + + return false; + } + + defaultMessage(args: ValidationArguments) { + return `${args.property} "${args.value}" must be a registered intent name.`; + } +} + +export function IsIntentName(validationOptions?: ValidationOptions) { + // eslint-disable-next-line func-names + return function (object: Object, propertyName: string) { + registerDecorator({ + name: 'IsIntentName', + target: object.constructor, + propertyName, + options: validationOptions, + validator: IsIntentNameConstraint, + async: true, + }); + }; +} diff --git a/libs/utils/src/decorators/is-schema-id.decorator.ts b/libs/utils/src/decorators/is-schema-id.decorator.ts index 70dea4176..f31047d6c 100644 --- a/libs/utils/src/decorators/is-schema-id.decorator.ts +++ b/libs/utils/src/decorators/is-schema-id.decorator.ts @@ -1,33 +1,39 @@ import { isNumber, registerDecorator, ValidationArguments, ValidationOptions } from 'class-validator'; -export function IsSchemaId(validationOptions?: ValidationOptions) { - // eslint-disable-next-line func-names - return function (object: object, propertyName: string) { - registerDecorator({ - name: 'IsSchemaId', - target: object.constructor, - propertyName, - options: validationOptions, - validator: { - validate(value: unknown, _args: ValidationArguments) { - const re = /^[0-9]+$/; +function IsU16(decoratorName: string) { + return function (validationOptions?: ValidationOptions) { + // eslint-disable-next-line func-names + return function (object: object, propertyName: string) { + registerDecorator({ + name: decoratorName, + target: object.constructor, + propertyName, + options: validationOptions, + validator: { + validate(value: unknown, _args: ValidationArguments) { + const re = /^[0-9]+$/; - if ((typeof value === 'string' && re.test(value)) || typeof value === 'number') { - const numberValue = Number(value); - // ensure the value is up to u16 - return isNumber(numberValue, { maxDecimalPlaces: 0 }) && numberValue > 0 && numberValue <= 65_535; - } + if ((typeof value === 'string' && re.test(value)) || typeof value === 'number') { + const numberValue = Number(value); + // ensure the value is up to u16 + return isNumber(numberValue, { maxDecimalPlaces: 0 }) && numberValue > 0 && numberValue <= 65_535; + } - return false; + return false; + }, + defaultMessage(args?: ValidationArguments): string { + const value = Number(args.value); + if (value && value > 65_535) { + return `${args.property} should not exceed 65535!`; + } + return `${args.property} should be a positive integer!`; + }, }, - defaultMessage(args?: ValidationArguments): string { - const value = Number(args.value); - if (value && value > 65_535) { - return `${args.property} should not exceed 65535!`; - } - return `${args.property} should be a positive integer!`; - }, - }, - }); + }); + }; }; } + +export const IsSchemaId = IsU16('IsSchemaId'); +export const IsIntentId = IsU16('IsIntentId'); +export const IsIntentGroupId = IsU16('IsIntentGroupId'); diff --git a/libs/utils/src/decorators/is-schema-name.decorator.spec.ts b/libs/utils/src/decorators/is-schema-name.decorator.spec.ts deleted file mode 100644 index dc54f99b2..000000000 --- a/libs/utils/src/decorators/is-schema-name.decorator.spec.ts +++ /dev/null @@ -1,69 +0,0 @@ -import { validate } from 'class-validator'; -import { IsSchemaName } from './is-schema-name.decorator'; -import { SCHEMA_NAME_TO_ID } from '#types/constants/schemas'; - -class TestClass { - @IsSchemaName() - schemaName: string; -} - -describe('IsSchemaName', () => { - it('should pass for valid schema names', async () => { - const testObj = new TestClass(); - testObj.schemaName = 'dsnp.broadcast@v2'; - - const errors = await validate(testObj); - expect(errors.length).toBe(0); - }); - - it('should fail for invalid schema names', async () => { - const testObj = new TestClass(); - testObj.schemaName = 'invalid.schema@v1'; - - const errors = await validate(testObj); - expect(errors.length).toBe(1); - expect(errors[0].constraints).toHaveProperty('IsSchemaName'); - expect(errors[0].constraints.IsSchemaName).toBe( - 'schemaName value "invalid.schema@v1" is not a known valid permission.', - ); - }); - - it('should fail for empty string', async () => { - const testObj = new TestClass(); - testObj.schemaName = ''; - - const errors = await validate(testObj); - expect(errors.length).toBe(1); - expect(errors[0].constraints).toHaveProperty('IsSchemaName'); - }); - - it('should fail for null', async () => { - const testObj = new TestClass(); - testObj.schemaName = null; - - const errors = await validate(testObj); - expect(errors.length).toBe(1); - expect(errors[0].constraints).toHaveProperty('IsSchemaName'); - }); - - it('should fail for undefined', async () => { - const testObj = new TestClass(); - testObj.schemaName = undefined; - - const errors = await validate(testObj); - expect(errors.length).toBe(1); - expect(errors[0].constraints).toHaveProperty('IsSchemaName'); - }); - - it('should pass for all known schema names', async () => { - await Promise.all( - [...SCHEMA_NAME_TO_ID.keys()].map(async (schemaName) => { - const testObj = new TestClass(); - testObj.schemaName = schemaName; - - const errors = await validate(testObj); - expect(errors.length).toBe(0); - }), - ); - }); -}); diff --git a/libs/utils/src/decorators/is-schema-name.decorator.ts b/libs/utils/src/decorators/is-schema-name.decorator.ts deleted file mode 100644 index 8359f9319..000000000 --- a/libs/utils/src/decorators/is-schema-name.decorator.ts +++ /dev/null @@ -1,22 +0,0 @@ -import { SCHEMA_NAME_TO_ID } from '#types/constants/schemas'; -import { registerDecorator, ValidationOptions, ValidationArguments } from 'class-validator'; - -export function IsSchemaName(validationOptions?: ValidationOptions) { - // eslint-disable-next-line func-names - return function (object: Object, propertyName: string) { - registerDecorator({ - name: 'IsSchemaName', - target: object.constructor, - propertyName, - options: validationOptions, - validator: { - validate(value: any) { - return SCHEMA_NAME_TO_ID.has(value); - }, - defaultMessage(args: ValidationArguments) { - return `${args.property} value "${args.value}" is not a known valid permission.`; - }, - }, - }); - }; -} diff --git a/package-lock.json b/package-lock.json index d16934c85..086ec9b28 100644 --- a/package-lock.json +++ b/package-lock.json @@ -20,8 +20,8 @@ "@dsnp/activity-content": "1.1.0", "@dsnp/parquetjs": "1.8.7", "@dsnp/schemas": "1.3.3", - "@frequency-chain/api-augment": "1.17.8", - "@frequency-chain/ethereum-utils": "1.17.8", + "@frequency-chain/api-augment": "2.0.0-rc3", + "@frequency-chain/ethereum-utils": "2.0.0-rc3", "@hpke/core": "1.7.5", "@hpke/dhkem-x25519": "1.6.4", "@multiformats/blake2": "2.0.2", @@ -44,7 +44,7 @@ "@polkadot/types": "16.4.8", "@polkadot/util": "13.5.7", "@polkadot/util-crypto": "13.5.7", - "@projectlibertylabs/siwf": "^2.3.6", + "@projectlibertylabs/siwf": "2.4.0-rc1", "@songkeys/nestjs-redis": "11.0.0", "@types/express": "5.0.3", "@types/multer": "2.0.0", @@ -83,7 +83,7 @@ "@nestjs/cli": "11.0.10", "@nestjs/schematics": "11.0.7", "@nestjs/testing": "11.1.6", - "@projectlibertylabs/frequency-scenario-template": "1.1.15", + "@projectlibertylabs/frequency-scenario-template": "2.0.0-rc5", "@types/base64url": "2.0.7", "@types/busboy": "1.5.4", "@types/jest": "30.0.0", @@ -110,6 +110,7 @@ "ioredis-mock": "8.9.0", "jest": "30.1.1", "license-report": "6.8.0", + "loglevel": "^1.9.2", "minimist": "1.2.8", "openapi-client-axios-typegen": "7.7.0", "prettier": "3.6.2", @@ -123,7 +124,8 @@ "ts-node": "10.9.2", "tsconfig-paths": "4.2.0", "tsx": "4.20.5", - "typescript": "5.9.2" + "typescript": "5.9.2", + "unique-names-generator": "^4.7.1" } }, "node_modules/@0no-co/graphql.web": { @@ -644,668 +646,654 @@ } }, "node_modules/@aws-sdk/client-s3": { - "version": "3.968.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-s3/-/client-s3-3.968.0.tgz", - "integrity": "sha512-YQARjiiucSkaSLS0HNyexOQzYM5pPRWSo+FNtq5JSuXwJQb8vs53JeZfk7yKb59G94Oh0BLAv1598XaEdtAFyA==", + "version": "3.954.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-s3/-/client-s3-3.954.0.tgz", + "integrity": "sha512-DoeySsljzjuWRzqoETLszHGKKOOWlzuGZh3oAF7TkYRsrwbuYYmttrWomb9koogaF0S5YSPwCMCUbKbpF0lbTA==", "license": "Apache-2.0", "dependencies": { "@aws-crypto/sha1-browser": "5.2.0", "@aws-crypto/sha256-browser": "5.2.0", "@aws-crypto/sha256-js": "5.2.0", - "@aws-sdk/core": "3.968.0", - "@aws-sdk/credential-provider-node": "3.968.0", - "@aws-sdk/middleware-bucket-endpoint": "3.968.0", - "@aws-sdk/middleware-expect-continue": "3.968.0", - "@aws-sdk/middleware-flexible-checksums": "3.968.0", - "@aws-sdk/middleware-host-header": "3.968.0", - "@aws-sdk/middleware-location-constraint": "3.968.0", - "@aws-sdk/middleware-logger": "3.968.0", - "@aws-sdk/middleware-recursion-detection": "3.968.0", - "@aws-sdk/middleware-sdk-s3": "3.968.0", - "@aws-sdk/middleware-ssec": "3.968.0", - "@aws-sdk/middleware-user-agent": "3.968.0", - "@aws-sdk/region-config-resolver": "3.968.0", - "@aws-sdk/signature-v4-multi-region": "3.968.0", - "@aws-sdk/types": "3.968.0", - "@aws-sdk/util-endpoints": "3.968.0", - "@aws-sdk/util-user-agent-browser": "3.968.0", - "@aws-sdk/util-user-agent-node": "3.968.0", - "@smithy/config-resolver": "^4.4.5", - "@smithy/core": "^3.20.3", - "@smithy/eventstream-serde-browser": "^4.2.7", - "@smithy/eventstream-serde-config-resolver": "^4.3.7", - "@smithy/eventstream-serde-node": "^4.2.7", - "@smithy/fetch-http-handler": "^5.3.8", - "@smithy/hash-blob-browser": "^4.2.8", - "@smithy/hash-node": "^4.2.7", - "@smithy/hash-stream-node": "^4.2.7", - "@smithy/invalid-dependency": "^4.2.7", - "@smithy/md5-js": "^4.2.7", - "@smithy/middleware-content-length": "^4.2.7", - "@smithy/middleware-endpoint": "^4.4.4", - "@smithy/middleware-retry": "^4.4.20", - "@smithy/middleware-serde": "^4.2.8", - "@smithy/middleware-stack": "^4.2.7", - "@smithy/node-config-provider": "^4.3.7", - "@smithy/node-http-handler": "^4.4.7", - "@smithy/protocol-http": "^5.3.7", - "@smithy/smithy-client": "^4.10.5", - "@smithy/types": "^4.11.0", - "@smithy/url-parser": "^4.2.7", + "@aws-sdk/core": "3.954.0", + "@aws-sdk/credential-provider-node": "3.954.0", + "@aws-sdk/middleware-bucket-endpoint": "3.953.0", + "@aws-sdk/middleware-expect-continue": "3.953.0", + "@aws-sdk/middleware-flexible-checksums": "3.954.0", + "@aws-sdk/middleware-host-header": "3.953.0", + "@aws-sdk/middleware-location-constraint": "3.953.0", + "@aws-sdk/middleware-logger": "3.953.0", + "@aws-sdk/middleware-recursion-detection": "3.953.0", + "@aws-sdk/middleware-sdk-s3": "3.954.0", + "@aws-sdk/middleware-ssec": "3.953.0", + "@aws-sdk/middleware-user-agent": "3.954.0", + "@aws-sdk/region-config-resolver": "3.953.0", + "@aws-sdk/signature-v4-multi-region": "3.954.0", + "@aws-sdk/types": "3.953.0", + "@aws-sdk/util-endpoints": "3.953.0", + "@aws-sdk/util-user-agent-browser": "3.953.0", + "@aws-sdk/util-user-agent-node": "3.954.0", + "@smithy/config-resolver": "^4.4.4", + "@smithy/core": "^3.19.0", + "@smithy/eventstream-serde-browser": "^4.2.6", + "@smithy/eventstream-serde-config-resolver": "^4.3.6", + "@smithy/eventstream-serde-node": "^4.2.6", + "@smithy/fetch-http-handler": "^5.3.7", + "@smithy/hash-blob-browser": "^4.2.7", + "@smithy/hash-node": "^4.2.6", + "@smithy/hash-stream-node": "^4.2.6", + "@smithy/invalid-dependency": "^4.2.6", + "@smithy/md5-js": "^4.2.6", + "@smithy/middleware-content-length": "^4.2.6", + "@smithy/middleware-endpoint": "^4.4.0", + "@smithy/middleware-retry": "^4.4.16", + "@smithy/middleware-serde": "^4.2.7", + "@smithy/middleware-stack": "^4.2.6", + "@smithy/node-config-provider": "^4.3.6", + "@smithy/node-http-handler": "^4.4.6", + "@smithy/protocol-http": "^5.3.6", + "@smithy/smithy-client": "^4.10.1", + "@smithy/types": "^4.10.0", + "@smithy/url-parser": "^4.2.6", "@smithy/util-base64": "^4.3.0", "@smithy/util-body-length-browser": "^4.2.0", "@smithy/util-body-length-node": "^4.2.1", - "@smithy/util-defaults-mode-browser": "^4.3.19", - "@smithy/util-defaults-mode-node": "^4.2.22", - "@smithy/util-endpoints": "^3.2.7", - "@smithy/util-middleware": "^4.2.7", - "@smithy/util-retry": "^4.2.7", - "@smithy/util-stream": "^4.5.8", + "@smithy/util-defaults-mode-browser": "^4.3.15", + "@smithy/util-defaults-mode-node": "^4.2.18", + "@smithy/util-endpoints": "^3.2.6", + "@smithy/util-middleware": "^4.2.6", + "@smithy/util-retry": "^4.2.6", + "@smithy/util-stream": "^4.5.7", "@smithy/util-utf8": "^4.2.0", - "@smithy/util-waiter": "^4.2.7", + "@smithy/util-waiter": "^4.2.6", "tslib": "^2.6.2" }, "engines": { - "node": ">=20.0.0" + "node": ">=18.0.0" } }, "node_modules/@aws-sdk/client-sso": { - "version": "3.968.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-sso/-/client-sso-3.968.0.tgz", - "integrity": "sha512-y+k23MvMzpn1WpeQ9sdEXg1Bbw7dfi0ZH2uwyBv78F/kz0mZOI+RJ1KJg8DgSD8XvdxB8gX5GQ8rzo0LnDothA==", + "version": "3.954.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-sso/-/client-sso-3.954.0.tgz", + "integrity": "sha512-FVyMAvlFhLK68DHWB1lSkCRTm25xl38bIZDd+jKt5+yDolCrG5+n9aIN8AA8jNO1HNGhZuMjSIQm9r5rGmJH8g==", "license": "Apache-2.0", "dependencies": { "@aws-crypto/sha256-browser": "5.2.0", "@aws-crypto/sha256-js": "5.2.0", - "@aws-sdk/core": "3.968.0", - "@aws-sdk/middleware-host-header": "3.968.0", - "@aws-sdk/middleware-logger": "3.968.0", - "@aws-sdk/middleware-recursion-detection": "3.968.0", - "@aws-sdk/middleware-user-agent": "3.968.0", - "@aws-sdk/region-config-resolver": "3.968.0", - "@aws-sdk/types": "3.968.0", - "@aws-sdk/util-endpoints": "3.968.0", - "@aws-sdk/util-user-agent-browser": "3.968.0", - "@aws-sdk/util-user-agent-node": "3.968.0", - "@smithy/config-resolver": "^4.4.5", - "@smithy/core": "^3.20.3", - "@smithy/fetch-http-handler": "^5.3.8", - "@smithy/hash-node": "^4.2.7", - "@smithy/invalid-dependency": "^4.2.7", - "@smithy/middleware-content-length": "^4.2.7", - "@smithy/middleware-endpoint": "^4.4.4", - "@smithy/middleware-retry": "^4.4.20", - "@smithy/middleware-serde": "^4.2.8", - "@smithy/middleware-stack": "^4.2.7", - "@smithy/node-config-provider": "^4.3.7", - "@smithy/node-http-handler": "^4.4.7", - "@smithy/protocol-http": "^5.3.7", - "@smithy/smithy-client": "^4.10.5", - "@smithy/types": "^4.11.0", - "@smithy/url-parser": "^4.2.7", + "@aws-sdk/core": "3.954.0", + "@aws-sdk/middleware-host-header": "3.953.0", + "@aws-sdk/middleware-logger": "3.953.0", + "@aws-sdk/middleware-recursion-detection": "3.953.0", + "@aws-sdk/middleware-user-agent": "3.954.0", + "@aws-sdk/region-config-resolver": "3.953.0", + "@aws-sdk/types": "3.953.0", + "@aws-sdk/util-endpoints": "3.953.0", + "@aws-sdk/util-user-agent-browser": "3.953.0", + "@aws-sdk/util-user-agent-node": "3.954.0", + "@smithy/config-resolver": "^4.4.4", + "@smithy/core": "^3.19.0", + "@smithy/fetch-http-handler": "^5.3.7", + "@smithy/hash-node": "^4.2.6", + "@smithy/invalid-dependency": "^4.2.6", + "@smithy/middleware-content-length": "^4.2.6", + "@smithy/middleware-endpoint": "^4.4.0", + "@smithy/middleware-retry": "^4.4.16", + "@smithy/middleware-serde": "^4.2.7", + "@smithy/middleware-stack": "^4.2.6", + "@smithy/node-config-provider": "^4.3.6", + "@smithy/node-http-handler": "^4.4.6", + "@smithy/protocol-http": "^5.3.6", + "@smithy/smithy-client": "^4.10.1", + "@smithy/types": "^4.10.0", + "@smithy/url-parser": "^4.2.6", "@smithy/util-base64": "^4.3.0", "@smithy/util-body-length-browser": "^4.2.0", "@smithy/util-body-length-node": "^4.2.1", - "@smithy/util-defaults-mode-browser": "^4.3.19", - "@smithy/util-defaults-mode-node": "^4.2.22", - "@smithy/util-endpoints": "^3.2.7", - "@smithy/util-middleware": "^4.2.7", - "@smithy/util-retry": "^4.2.7", + "@smithy/util-defaults-mode-browser": "^4.3.15", + "@smithy/util-defaults-mode-node": "^4.2.18", + "@smithy/util-endpoints": "^3.2.6", + "@smithy/util-middleware": "^4.2.6", + "@smithy/util-retry": "^4.2.6", "@smithy/util-utf8": "^4.2.0", "tslib": "^2.6.2" }, "engines": { - "node": ">=20.0.0" + "node": ">=18.0.0" } }, "node_modules/@aws-sdk/core": { - "version": "3.968.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/core/-/core-3.968.0.tgz", - "integrity": "sha512-u4lIpvGqMMHZN523/RxW70xNoVXHBXucIWZsxFKc373E6TWYEb16ddFhXTELioS5TU93qkd/6yDQZzI6AAhbkw==", + "version": "3.954.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/core/-/core-3.954.0.tgz", + "integrity": "sha512-5oYO5RP+mvCNXNj8XnF9jZo0EP0LTseYOJVNQYcii1D9DJqzHL3HJWurYh7cXxz7G7eDyvVYA01O9Xpt34TdoA==", "license": "Apache-2.0", "dependencies": { - "@aws-sdk/types": "3.968.0", - "@aws-sdk/xml-builder": "3.968.0", - "@smithy/core": "^3.20.3", - "@smithy/node-config-provider": "^4.3.7", - "@smithy/property-provider": "^4.2.7", - "@smithy/protocol-http": "^5.3.7", - "@smithy/signature-v4": "^5.3.7", - "@smithy/smithy-client": "^4.10.5", - "@smithy/types": "^4.11.0", + "@aws-sdk/types": "3.953.0", + "@aws-sdk/xml-builder": "3.953.0", + "@smithy/core": "^3.19.0", + "@smithy/node-config-provider": "^4.3.6", + "@smithy/property-provider": "^4.2.6", + "@smithy/protocol-http": "^5.3.6", + "@smithy/signature-v4": "^5.3.6", + "@smithy/smithy-client": "^4.10.1", + "@smithy/types": "^4.10.0", "@smithy/util-base64": "^4.3.0", - "@smithy/util-middleware": "^4.2.7", + "@smithy/util-middleware": "^4.2.6", "@smithy/util-utf8": "^4.2.0", "tslib": "^2.6.2" }, "engines": { - "node": ">=20.0.0" - } - }, - "node_modules/@aws-sdk/crc64-nvme": { - "version": "3.968.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/crc64-nvme/-/crc64-nvme-3.968.0.tgz", - "integrity": "sha512-buylEu7i7I42uzfnQlu0oY35GAWcslU+Vyu9mlNszDKEDwsSyFDy1wg0wQ4vPyKDHlwsIm1srGa/MIaxZk1msg==", - "license": "Apache-2.0", - "dependencies": { - "@smithy/types": "^4.11.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=20.0.0" + "node": ">=18.0.0" } }, "node_modules/@aws-sdk/credential-provider-env": { - "version": "3.968.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-env/-/credential-provider-env-3.968.0.tgz", - "integrity": "sha512-G+zgXEniQxBHFtHo+0yImkYutvJZLvWqvkPUP8/cG+IaYg54OY7L/GPIAZJh0U3m0Uepao98NbL15zjM+uplqQ==", + "version": "3.954.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-env/-/credential-provider-env-3.954.0.tgz", + "integrity": "sha512-2HNkqBjfsvyoRuPAiFh86JBFMFyaCNhL4VyH6XqwTGKZffjG7hdBmzXPy7AT7G3oFh1k/1Zc27v0qxaKoK7mBA==", "license": "Apache-2.0", "dependencies": { - "@aws-sdk/core": "3.968.0", - "@aws-sdk/types": "3.968.0", - "@smithy/property-provider": "^4.2.7", - "@smithy/types": "^4.11.0", + "@aws-sdk/core": "3.954.0", + "@aws-sdk/types": "3.953.0", + "@smithy/property-provider": "^4.2.6", + "@smithy/types": "^4.10.0", "tslib": "^2.6.2" }, "engines": { - "node": ">=20.0.0" + "node": ">=18.0.0" } }, "node_modules/@aws-sdk/credential-provider-http": { - "version": "3.968.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-http/-/credential-provider-http-3.968.0.tgz", - "integrity": "sha512-79teHBx/EtsNRR3Bq8fQdmMHtUcYwvohm9EwXXFt2Jd3BEOBH872IjIlfKdAvdkM+jW1QeeWOZBAxXGPir7GcQ==", + "version": "3.954.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-http/-/credential-provider-http-3.954.0.tgz", + "integrity": "sha512-CrWD5300+NE1OYRnSVDxoG7G0b5cLIZb7yp+rNQ5Jq/kqnTmyJXpVAsivq+bQIDaGzPXhadzpAMIoo7K/aHaag==", "license": "Apache-2.0", "dependencies": { - "@aws-sdk/core": "3.968.0", - "@aws-sdk/types": "3.968.0", - "@smithy/fetch-http-handler": "^5.3.8", - "@smithy/node-http-handler": "^4.4.7", - "@smithy/property-provider": "^4.2.7", - "@smithy/protocol-http": "^5.3.7", - "@smithy/smithy-client": "^4.10.5", - "@smithy/types": "^4.11.0", - "@smithy/util-stream": "^4.5.8", + "@aws-sdk/core": "3.954.0", + "@aws-sdk/types": "3.953.0", + "@smithy/fetch-http-handler": "^5.3.7", + "@smithy/node-http-handler": "^4.4.6", + "@smithy/property-provider": "^4.2.6", + "@smithy/protocol-http": "^5.3.6", + "@smithy/smithy-client": "^4.10.1", + "@smithy/types": "^4.10.0", + "@smithy/util-stream": "^4.5.7", "tslib": "^2.6.2" }, "engines": { - "node": ">=20.0.0" + "node": ">=18.0.0" } }, "node_modules/@aws-sdk/credential-provider-ini": { - "version": "3.968.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.968.0.tgz", - "integrity": "sha512-9J9pcweoEN8yG7Qliux1zl9J3DT8X6OLcDN2RVXdTd5xzWBaYlupnUiJzoP6lvXdMnEmlDZaV7IMtoBdG7MY6g==", + "version": "3.954.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.954.0.tgz", + "integrity": "sha512-WAFD8pVwRSoBsuXcoD+s/hrdsP9Z0PNUedSgkOGExuJVAabpM2cIIMzYNsdHio9XFZUSqHkv8mF5mQXuIZvuzg==", "license": "Apache-2.0", "dependencies": { - "@aws-sdk/core": "3.968.0", - "@aws-sdk/credential-provider-env": "3.968.0", - "@aws-sdk/credential-provider-http": "3.968.0", - "@aws-sdk/credential-provider-login": "3.968.0", - "@aws-sdk/credential-provider-process": "3.968.0", - "@aws-sdk/credential-provider-sso": "3.968.0", - "@aws-sdk/credential-provider-web-identity": "3.968.0", - "@aws-sdk/nested-clients": "3.968.0", - "@aws-sdk/types": "3.968.0", - "@smithy/credential-provider-imds": "^4.2.7", - "@smithy/property-provider": "^4.2.7", - "@smithy/shared-ini-file-loader": "^4.4.2", - "@smithy/types": "^4.11.0", + "@aws-sdk/core": "3.954.0", + "@aws-sdk/credential-provider-env": "3.954.0", + "@aws-sdk/credential-provider-http": "3.954.0", + "@aws-sdk/credential-provider-login": "3.954.0", + "@aws-sdk/credential-provider-process": "3.954.0", + "@aws-sdk/credential-provider-sso": "3.954.0", + "@aws-sdk/credential-provider-web-identity": "3.954.0", + "@aws-sdk/nested-clients": "3.954.0", + "@aws-sdk/types": "3.953.0", + "@smithy/credential-provider-imds": "^4.2.6", + "@smithy/property-provider": "^4.2.6", + "@smithy/shared-ini-file-loader": "^4.4.1", + "@smithy/types": "^4.10.0", "tslib": "^2.6.2" }, "engines": { - "node": ">=20.0.0" + "node": ">=18.0.0" } }, "node_modules/@aws-sdk/credential-provider-login": { - "version": "3.968.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-login/-/credential-provider-login-3.968.0.tgz", - "integrity": "sha512-YxBaR0IMuHPOVTG+73Ve0QfllweN+EdwBRnHFhUGnahMGAcTmcaRdotqwqWfiws+9ud44IFKjxXR3t8jaGpFnQ==", + "version": "3.954.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-login/-/credential-provider-login-3.954.0.tgz", + "integrity": "sha512-EYqaBWwdVbVK7prmsmgTWLPptoWREplPkFMFscOpVmseDvf/0IjYNbNLLtfuhy/6L7ZBGI9wat2k4u0MRivvxA==", "license": "Apache-2.0", "dependencies": { - "@aws-sdk/core": "3.968.0", - "@aws-sdk/nested-clients": "3.968.0", - "@aws-sdk/types": "3.968.0", - "@smithy/property-provider": "^4.2.7", - "@smithy/protocol-http": "^5.3.7", - "@smithy/shared-ini-file-loader": "^4.4.2", - "@smithy/types": "^4.11.0", + "@aws-sdk/core": "3.954.0", + "@aws-sdk/nested-clients": "3.954.0", + "@aws-sdk/types": "3.953.0", + "@smithy/property-provider": "^4.2.6", + "@smithy/protocol-http": "^5.3.6", + "@smithy/shared-ini-file-loader": "^4.4.1", + "@smithy/types": "^4.10.0", "tslib": "^2.6.2" }, "engines": { - "node": ">=20.0.0" + "node": ">=18.0.0" } }, "node_modules/@aws-sdk/credential-provider-node": { - "version": "3.968.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-node/-/credential-provider-node-3.968.0.tgz", - "integrity": "sha512-wei6v0c9vDEam8pM5eWe9bt+5ixg8nL0q+DFPzI6iwdLUqmJsPoAzWPEyMkgp03iE02SS2fMqPWpmRjz/NVyUw==", + "version": "3.954.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-node/-/credential-provider-node-3.954.0.tgz", + "integrity": "sha512-UPBjw7Lnly5i+/rES8Z5U+nPaumzEUYOE/wrHkxyH6JjwFWn8w7R07fE5Z5cgYlIq1U1lQ7sxYwB3wHPpQ65Aw==", "license": "Apache-2.0", "dependencies": { - "@aws-sdk/credential-provider-env": "3.968.0", - "@aws-sdk/credential-provider-http": "3.968.0", - "@aws-sdk/credential-provider-ini": "3.968.0", - "@aws-sdk/credential-provider-process": "3.968.0", - "@aws-sdk/credential-provider-sso": "3.968.0", - "@aws-sdk/credential-provider-web-identity": "3.968.0", - "@aws-sdk/types": "3.968.0", - "@smithy/credential-provider-imds": "^4.2.7", - "@smithy/property-provider": "^4.2.7", - "@smithy/shared-ini-file-loader": "^4.4.2", - "@smithy/types": "^4.11.0", + "@aws-sdk/credential-provider-env": "3.954.0", + "@aws-sdk/credential-provider-http": "3.954.0", + "@aws-sdk/credential-provider-ini": "3.954.0", + "@aws-sdk/credential-provider-process": "3.954.0", + "@aws-sdk/credential-provider-sso": "3.954.0", + "@aws-sdk/credential-provider-web-identity": "3.954.0", + "@aws-sdk/types": "3.953.0", + "@smithy/credential-provider-imds": "^4.2.6", + "@smithy/property-provider": "^4.2.6", + "@smithy/shared-ini-file-loader": "^4.4.1", + "@smithy/types": "^4.10.0", "tslib": "^2.6.2" }, "engines": { - "node": ">=20.0.0" + "node": ">=18.0.0" } }, "node_modules/@aws-sdk/credential-provider-process": { - "version": "3.968.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-process/-/credential-provider-process-3.968.0.tgz", - "integrity": "sha512-my9M/ijRyEACoyeEWiC2sTVM3+eck5IWPGTPQrlYMKivy4LLlZchohtIopuqTom+JZzLZD508j1s9aDvl7BA0w==", + "version": "3.954.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-process/-/credential-provider-process-3.954.0.tgz", + "integrity": "sha512-Y1/0O2LgbKM8iIgcVj/GNEQW6p90LVTCOzF2CI1pouoKqxmZ/1F7F66WHoa6XUOfKaCRj/R6nuMR3om9ThaM5A==", "license": "Apache-2.0", "dependencies": { - "@aws-sdk/core": "3.968.0", - "@aws-sdk/types": "3.968.0", - "@smithy/property-provider": "^4.2.7", - "@smithy/shared-ini-file-loader": "^4.4.2", - "@smithy/types": "^4.11.0", + "@aws-sdk/core": "3.954.0", + "@aws-sdk/types": "3.953.0", + "@smithy/property-provider": "^4.2.6", + "@smithy/shared-ini-file-loader": "^4.4.1", + "@smithy/types": "^4.10.0", "tslib": "^2.6.2" }, "engines": { - "node": ">=20.0.0" + "node": ">=18.0.0" } }, "node_modules/@aws-sdk/credential-provider-sso": { - "version": "3.968.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.968.0.tgz", - "integrity": "sha512-XPYPcxfWIt5jBbofoP2xhAHlFYos0dzwbHsoE18Cera/XnaCEbsUpdROo30t0Kjdbv0EWMYLMPDi9G+vPRDnhQ==", + "version": "3.954.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.954.0.tgz", + "integrity": "sha512-UXxGfkp/plFRdyidMLvNul5zoLKmHhVQOCrD2OgR/lg9jNqNmJ7abF+Qu8abo902iDkhU21Qj4M398cx6l8Kng==", "license": "Apache-2.0", "dependencies": { - "@aws-sdk/client-sso": "3.968.0", - "@aws-sdk/core": "3.968.0", - "@aws-sdk/token-providers": "3.968.0", - "@aws-sdk/types": "3.968.0", - "@smithy/property-provider": "^4.2.7", - "@smithy/shared-ini-file-loader": "^4.4.2", - "@smithy/types": "^4.11.0", + "@aws-sdk/client-sso": "3.954.0", + "@aws-sdk/core": "3.954.0", + "@aws-sdk/token-providers": "3.954.0", + "@aws-sdk/types": "3.953.0", + "@smithy/property-provider": "^4.2.6", + "@smithy/shared-ini-file-loader": "^4.4.1", + "@smithy/types": "^4.10.0", "tslib": "^2.6.2" }, "engines": { - "node": ">=20.0.0" + "node": ">=18.0.0" } }, "node_modules/@aws-sdk/credential-provider-web-identity": { - "version": "3.968.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.968.0.tgz", - "integrity": "sha512-9HNAP6mx2jsBW4moWnRg5ycyZ0C1EbtMIegIHa93ga13B/8VZF9Y0iDnwW73yQYzCEt9UrDiFeRck/ChZup3rA==", + "version": "3.954.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.954.0.tgz", + "integrity": "sha512-XEyf1T08q1tG4zkTS4Dnf1cAQyrJUo/xlvi6XNpqGhY3bOmKUYE2h/K6eITIdytDL9VuCpWYQ6YRcIVtL29E0w==", "license": "Apache-2.0", "dependencies": { - "@aws-sdk/core": "3.968.0", - "@aws-sdk/nested-clients": "3.968.0", - "@aws-sdk/types": "3.968.0", - "@smithy/property-provider": "^4.2.7", - "@smithy/shared-ini-file-loader": "^4.4.2", - "@smithy/types": "^4.11.0", + "@aws-sdk/core": "3.954.0", + "@aws-sdk/nested-clients": "3.954.0", + "@aws-sdk/types": "3.953.0", + "@smithy/property-provider": "^4.2.6", + "@smithy/shared-ini-file-loader": "^4.4.1", + "@smithy/types": "^4.10.0", "tslib": "^2.6.2" }, "engines": { - "node": ">=20.0.0" + "node": ">=18.0.0" } }, "node_modules/@aws-sdk/middleware-bucket-endpoint": { - "version": "3.968.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-bucket-endpoint/-/middleware-bucket-endpoint-3.968.0.tgz", - "integrity": "sha512-KlA6D9wgyGF3KkKIRmmXxvKfzzGkibnnR6Kjp0NQAOi4jvKWuT/HKJX87sBJIrk8RWq+9Aq0SOY9LYqkdx9zJQ==", + "version": "3.953.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-bucket-endpoint/-/middleware-bucket-endpoint-3.953.0.tgz", + "integrity": "sha512-YHVRIOowtGIl/L2WuS83FgRlm31tU0aL1yryWaFtF+AFjA5BIeiFkxIZqaRGxJpJvFEBdohsyq6Ipv5mgWfezg==", "license": "Apache-2.0", "dependencies": { - "@aws-sdk/types": "3.968.0", - "@aws-sdk/util-arn-parser": "3.968.0", - "@smithy/node-config-provider": "^4.3.7", - "@smithy/protocol-http": "^5.3.7", - "@smithy/types": "^4.11.0", + "@aws-sdk/types": "3.953.0", + "@aws-sdk/util-arn-parser": "3.953.0", + "@smithy/node-config-provider": "^4.3.6", + "@smithy/protocol-http": "^5.3.6", + "@smithy/types": "^4.10.0", "@smithy/util-config-provider": "^4.2.0", "tslib": "^2.6.2" }, "engines": { - "node": ">=20.0.0" + "node": ">=18.0.0" } }, "node_modules/@aws-sdk/middleware-expect-continue": { - "version": "3.968.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-expect-continue/-/middleware-expect-continue-3.968.0.tgz", - "integrity": "sha512-VCcDw21JCJywZH8+vpZCsVB9HV2BQ6BdF+cXww5nKnPNi+d05sHFczRHUQjfsEJiZ8Wb/a4M3mJuVrQ5gjiNUA==", + "version": "3.953.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-expect-continue/-/middleware-expect-continue-3.953.0.tgz", + "integrity": "sha512-BQTVXrypQ0rbb7au/Hk4IS5GaJZlwk6O44Rjk6Kxb0IvGQhSurNTuesFiJx1sLbf+w+T31saPtODcfQQERqhCQ==", "license": "Apache-2.0", "dependencies": { - "@aws-sdk/types": "3.968.0", - "@smithy/protocol-http": "^5.3.7", - "@smithy/types": "^4.11.0", + "@aws-sdk/types": "3.953.0", + "@smithy/protocol-http": "^5.3.6", + "@smithy/types": "^4.10.0", "tslib": "^2.6.2" }, "engines": { - "node": ">=20.0.0" + "node": ">=18.0.0" } }, "node_modules/@aws-sdk/middleware-flexible-checksums": { - "version": "3.968.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-flexible-checksums/-/middleware-flexible-checksums-3.968.0.tgz", - "integrity": "sha512-5G4hpKS0XbU8s3WuuFP6qpB6kkFB45LQ2VomrS0FoyTXH9XUDYL1OmwraBe3t2N5LnpqOh1+RAJOyO8gRwO7xA==", + "version": "3.954.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-flexible-checksums/-/middleware-flexible-checksums-3.954.0.tgz", + "integrity": "sha512-hHOPDJyxucNodkgapLhA0VdwDBwVYN9DX20aA6j+3nwutAlZ5skaV7Bw0W3YC7Fh/ieDKKhcSZulONd4lVTwMg==", "license": "Apache-2.0", "dependencies": { "@aws-crypto/crc32": "5.2.0", "@aws-crypto/crc32c": "5.2.0", "@aws-crypto/util": "5.2.0", - "@aws-sdk/core": "3.968.0", - "@aws-sdk/crc64-nvme": "3.968.0", - "@aws-sdk/types": "3.968.0", + "@aws-sdk/core": "3.954.0", + "@aws-sdk/types": "3.953.0", "@smithy/is-array-buffer": "^4.2.0", - "@smithy/node-config-provider": "^4.3.7", - "@smithy/protocol-http": "^5.3.7", - "@smithy/types": "^4.11.0", - "@smithy/util-middleware": "^4.2.7", - "@smithy/util-stream": "^4.5.8", + "@smithy/node-config-provider": "^4.3.6", + "@smithy/protocol-http": "^5.3.6", + "@smithy/types": "^4.10.0", + "@smithy/util-middleware": "^4.2.6", + "@smithy/util-stream": "^4.5.7", "@smithy/util-utf8": "^4.2.0", "tslib": "^2.6.2" }, "engines": { - "node": ">=20.0.0" + "node": ">=18.0.0" } }, "node_modules/@aws-sdk/middleware-host-header": { - "version": "3.968.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-host-header/-/middleware-host-header-3.968.0.tgz", - "integrity": "sha512-ujlNT215VtE/2D2jEhFVcTuPPB36HJyLBM0ytnni/WPIjzq89iJrKR1tEhxpk8uct6A5NSQ6w9Y7g2Rw1rkSoQ==", + "version": "3.953.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-host-header/-/middleware-host-header-3.953.0.tgz", + "integrity": "sha512-jTGhfkONav+r4E6HLOrl5SzBqDmPByUYCkyB/c/3TVb8jX3wAZx8/q9bphKpCh+G5ARi3IdbSisgkZrJYqQ19Q==", "license": "Apache-2.0", "dependencies": { - "@aws-sdk/types": "3.968.0", - "@smithy/protocol-http": "^5.3.7", - "@smithy/types": "^4.11.0", + "@aws-sdk/types": "3.953.0", + "@smithy/protocol-http": "^5.3.6", + "@smithy/types": "^4.10.0", "tslib": "^2.6.2" }, "engines": { - "node": ">=20.0.0" + "node": ">=18.0.0" } }, "node_modules/@aws-sdk/middleware-location-constraint": { - "version": "3.968.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-location-constraint/-/middleware-location-constraint-3.968.0.tgz", - "integrity": "sha512-+usAEX4rPmOofmLhZHgnRvW3idDnXdYnhaiOjfj2ynU05elTUkF2b4fyq+KhdjZQVbUpCewq4eKqgjGaGhIyyw==", + "version": "3.953.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-location-constraint/-/middleware-location-constraint-3.953.0.tgz", + "integrity": "sha512-h0urrbteIQEybyIISaJfQLZ/+/lJPRzPWAQT4epvzfgv/4MKZI7K83dK7SfTwAooVKFBHiCMok2Cf0iHDt07Kw==", "license": "Apache-2.0", "dependencies": { - "@aws-sdk/types": "3.968.0", - "@smithy/types": "^4.11.0", + "@aws-sdk/types": "3.953.0", + "@smithy/types": "^4.10.0", "tslib": "^2.6.2" }, "engines": { - "node": ">=20.0.0" + "node": ">=18.0.0" } }, "node_modules/@aws-sdk/middleware-logger": { - "version": "3.968.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-logger/-/middleware-logger-3.968.0.tgz", - "integrity": "sha512-zvhhEPZgvaRDxzf27m2WmgaXoN7upFt/gvG7ofBN5zCBlkh3JtFamMh5KWYVQwMhc4eQBK3NjH0oIUKZSVztag==", + "version": "3.953.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-logger/-/middleware-logger-3.953.0.tgz", + "integrity": "sha512-PlWdVYgcuptkIC0ZKqVUhWNtSHXJSx7U9V8J7dJjRmsXC40X7zpEycvrkzDMJjeTDGcCceYbyYAg/4X1lkcIMw==", "license": "Apache-2.0", "dependencies": { - "@aws-sdk/types": "3.968.0", - "@smithy/types": "^4.11.0", + "@aws-sdk/types": "3.953.0", + "@smithy/types": "^4.10.0", "tslib": "^2.6.2" }, "engines": { - "node": ">=20.0.0" + "node": ">=18.0.0" } }, "node_modules/@aws-sdk/middleware-recursion-detection": { - "version": "3.968.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-recursion-detection/-/middleware-recursion-detection-3.968.0.tgz", - "integrity": "sha512-KygPiwpSAPGobgodK/oLb7OLiwK29pNJeNtP+GZ9pxpceDRqhN0Ub8Eo84dBbWq+jbzAqBYHzy+B1VsbQ/hLWA==", + "version": "3.953.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-recursion-detection/-/middleware-recursion-detection-3.953.0.tgz", + "integrity": "sha512-cmIJx0gWeesUKK4YwgE+VQL3mpACr3/J24fbwnc1Z5tntC86b+HQFzU5vsBDw6lLwyD46dBgWdsXFh1jL+ZaFw==", "license": "Apache-2.0", "dependencies": { - "@aws-sdk/types": "3.968.0", + "@aws-sdk/types": "3.953.0", "@aws/lambda-invoke-store": "^0.2.2", - "@smithy/protocol-http": "^5.3.7", - "@smithy/types": "^4.11.0", + "@smithy/protocol-http": "^5.3.6", + "@smithy/types": "^4.10.0", "tslib": "^2.6.2" }, "engines": { - "node": ">=20.0.0" + "node": ">=18.0.0" } }, "node_modules/@aws-sdk/middleware-sdk-s3": { - "version": "3.968.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-sdk-s3/-/middleware-sdk-s3-3.968.0.tgz", - "integrity": "sha512-fh2mQ/uwJ1Sth1q2dWAbeyky/SBPaqe1fjxvsNeEY6dtfi8PjW85zHpz1JoAhCKTRkrEdXYAqkqUwsUydLucyQ==", + "version": "3.954.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-sdk-s3/-/middleware-sdk-s3-3.954.0.tgz", + "integrity": "sha512-274CNmnRjknmfFb2o0Azxic54fnujaA8AYSeRUOho3lN48TVzx85eAFWj2kLgvUJO88pE3jBDPWboKQiQdXeUQ==", "license": "Apache-2.0", "dependencies": { - "@aws-sdk/core": "3.968.0", - "@aws-sdk/types": "3.968.0", - "@aws-sdk/util-arn-parser": "3.968.0", - "@smithy/core": "^3.20.3", - "@smithy/node-config-provider": "^4.3.7", - "@smithy/protocol-http": "^5.3.7", - "@smithy/signature-v4": "^5.3.7", - "@smithy/smithy-client": "^4.10.5", - "@smithy/types": "^4.11.0", + "@aws-sdk/core": "3.954.0", + "@aws-sdk/types": "3.953.0", + "@aws-sdk/util-arn-parser": "3.953.0", + "@smithy/core": "^3.19.0", + "@smithy/node-config-provider": "^4.3.6", + "@smithy/protocol-http": "^5.3.6", + "@smithy/signature-v4": "^5.3.6", + "@smithy/smithy-client": "^4.10.1", + "@smithy/types": "^4.10.0", "@smithy/util-config-provider": "^4.2.0", - "@smithy/util-middleware": "^4.2.7", - "@smithy/util-stream": "^4.5.8", + "@smithy/util-middleware": "^4.2.6", + "@smithy/util-stream": "^4.5.7", "@smithy/util-utf8": "^4.2.0", "tslib": "^2.6.2" }, "engines": { - "node": ">=20.0.0" + "node": ">=18.0.0" } }, "node_modules/@aws-sdk/middleware-ssec": { - "version": "3.968.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-ssec/-/middleware-ssec-3.968.0.tgz", - "integrity": "sha512-gbrhJ/JrKJ48SDPtlt5jPOadiPl2Rae0VLuNRyNg0ng7ygRO/0NjgKME4D1XINDjMOiZsOLNAcXmmwGFsVZsyw==", + "version": "3.953.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-ssec/-/middleware-ssec-3.953.0.tgz", + "integrity": "sha512-OrhG1kcQ9zZh3NS3RovR028N0+UndQ957zF1k5HPLeFLwFwQN1uPOufzzPzAyXIIKtR69ARFsQI4mstZS4DMvw==", "license": "Apache-2.0", "dependencies": { - "@aws-sdk/types": "3.968.0", - "@smithy/types": "^4.11.0", + "@aws-sdk/types": "3.953.0", + "@smithy/types": "^4.10.0", "tslib": "^2.6.2" }, "engines": { - "node": ">=20.0.0" + "node": ">=18.0.0" } }, "node_modules/@aws-sdk/middleware-user-agent": { - "version": "3.968.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-user-agent/-/middleware-user-agent-3.968.0.tgz", - "integrity": "sha512-4h5/B8FyxMjLxtXd5jbM2R69aO57qQiHoAJQTtkpuxmM7vhvjSxEQtMM9L1kuMXoMVNE7xM4886h0+gbmmxplg==", + "version": "3.954.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-user-agent/-/middleware-user-agent-3.954.0.tgz", + "integrity": "sha512-5PX8JDe3dB2+MqXeGIhmgFnm2rbVsSxhz+Xyuu1oxLtbOn+a9UDA+sNBufEBjt3UxWy5qwEEY1fxdbXXayjlGg==", "license": "Apache-2.0", "dependencies": { - "@aws-sdk/core": "3.968.0", - "@aws-sdk/types": "3.968.0", - "@aws-sdk/util-endpoints": "3.968.0", - "@smithy/core": "^3.20.3", - "@smithy/protocol-http": "^5.3.7", - "@smithy/types": "^4.11.0", + "@aws-sdk/core": "3.954.0", + "@aws-sdk/types": "3.953.0", + "@aws-sdk/util-endpoints": "3.953.0", + "@smithy/core": "^3.19.0", + "@smithy/protocol-http": "^5.3.6", + "@smithy/types": "^4.10.0", "tslib": "^2.6.2" }, "engines": { - "node": ">=20.0.0" + "node": ">=18.0.0" } }, "node_modules/@aws-sdk/nested-clients": { - "version": "3.968.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/nested-clients/-/nested-clients-3.968.0.tgz", - "integrity": "sha512-LLppm+8MzD3afD2IA/tYDp5AoVPOybK7MHQz5DVB4HsZ+fHvwYlvau2ZUK8nKwJSk5c1kWcxCZkyuJQjFu37ng==", + "version": "3.954.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/nested-clients/-/nested-clients-3.954.0.tgz", + "integrity": "sha512-JLUhf35fTQIDPLk6G5KPggL9tV//Hjhy6+N2zZeis76LuBRNhKDq8z1CFyKhjf00vXi/tDYdn9D7y9emI+5Y/g==", "license": "Apache-2.0", "dependencies": { "@aws-crypto/sha256-browser": "5.2.0", "@aws-crypto/sha256-js": "5.2.0", - "@aws-sdk/core": "3.968.0", - "@aws-sdk/middleware-host-header": "3.968.0", - "@aws-sdk/middleware-logger": "3.968.0", - "@aws-sdk/middleware-recursion-detection": "3.968.0", - "@aws-sdk/middleware-user-agent": "3.968.0", - "@aws-sdk/region-config-resolver": "3.968.0", - "@aws-sdk/types": "3.968.0", - "@aws-sdk/util-endpoints": "3.968.0", - "@aws-sdk/util-user-agent-browser": "3.968.0", - "@aws-sdk/util-user-agent-node": "3.968.0", - "@smithy/config-resolver": "^4.4.5", - "@smithy/core": "^3.20.3", - "@smithy/fetch-http-handler": "^5.3.8", - "@smithy/hash-node": "^4.2.7", - "@smithy/invalid-dependency": "^4.2.7", - "@smithy/middleware-content-length": "^4.2.7", - "@smithy/middleware-endpoint": "^4.4.4", - "@smithy/middleware-retry": "^4.4.20", - "@smithy/middleware-serde": "^4.2.8", - "@smithy/middleware-stack": "^4.2.7", - "@smithy/node-config-provider": "^4.3.7", - "@smithy/node-http-handler": "^4.4.7", - "@smithy/protocol-http": "^5.3.7", - "@smithy/smithy-client": "^4.10.5", - "@smithy/types": "^4.11.0", - "@smithy/url-parser": "^4.2.7", + "@aws-sdk/core": "3.954.0", + "@aws-sdk/middleware-host-header": "3.953.0", + "@aws-sdk/middleware-logger": "3.953.0", + "@aws-sdk/middleware-recursion-detection": "3.953.0", + "@aws-sdk/middleware-user-agent": "3.954.0", + "@aws-sdk/region-config-resolver": "3.953.0", + "@aws-sdk/types": "3.953.0", + "@aws-sdk/util-endpoints": "3.953.0", + "@aws-sdk/util-user-agent-browser": "3.953.0", + "@aws-sdk/util-user-agent-node": "3.954.0", + "@smithy/config-resolver": "^4.4.4", + "@smithy/core": "^3.19.0", + "@smithy/fetch-http-handler": "^5.3.7", + "@smithy/hash-node": "^4.2.6", + "@smithy/invalid-dependency": "^4.2.6", + "@smithy/middleware-content-length": "^4.2.6", + "@smithy/middleware-endpoint": "^4.4.0", + "@smithy/middleware-retry": "^4.4.16", + "@smithy/middleware-serde": "^4.2.7", + "@smithy/middleware-stack": "^4.2.6", + "@smithy/node-config-provider": "^4.3.6", + "@smithy/node-http-handler": "^4.4.6", + "@smithy/protocol-http": "^5.3.6", + "@smithy/smithy-client": "^4.10.1", + "@smithy/types": "^4.10.0", + "@smithy/url-parser": "^4.2.6", "@smithy/util-base64": "^4.3.0", "@smithy/util-body-length-browser": "^4.2.0", "@smithy/util-body-length-node": "^4.2.1", - "@smithy/util-defaults-mode-browser": "^4.3.19", - "@smithy/util-defaults-mode-node": "^4.2.22", - "@smithy/util-endpoints": "^3.2.7", - "@smithy/util-middleware": "^4.2.7", - "@smithy/util-retry": "^4.2.7", + "@smithy/util-defaults-mode-browser": "^4.3.15", + "@smithy/util-defaults-mode-node": "^4.2.18", + "@smithy/util-endpoints": "^3.2.6", + "@smithy/util-middleware": "^4.2.6", + "@smithy/util-retry": "^4.2.6", "@smithy/util-utf8": "^4.2.0", "tslib": "^2.6.2" }, "engines": { - "node": ">=20.0.0" + "node": ">=18.0.0" } }, "node_modules/@aws-sdk/region-config-resolver": { - "version": "3.968.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/region-config-resolver/-/region-config-resolver-3.968.0.tgz", - "integrity": "sha512-BzrCpxEsAHbi+yDGtgXJ+/5AvLPjfhcT6DlL+Fc4g13J5Z0VwiO95Wem+Q4KK7WDZH7/sZ/1WFvfitjLTKZbEw==", + "version": "3.953.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/region-config-resolver/-/region-config-resolver-3.953.0.tgz", + "integrity": "sha512-5MJgnsc+HLO+le0EK1cy92yrC7kyhGZSpaq8PcQvKs9qtXCXT5Tb6tMdkr5Y07JxYsYOV1omWBynvL6PWh08tQ==", "license": "Apache-2.0", "dependencies": { - "@aws-sdk/types": "3.968.0", - "@smithy/config-resolver": "^4.4.5", - "@smithy/node-config-provider": "^4.3.7", - "@smithy/types": "^4.11.0", + "@aws-sdk/types": "3.953.0", + "@smithy/config-resolver": "^4.4.4", + "@smithy/node-config-provider": "^4.3.6", + "@smithy/types": "^4.10.0", "tslib": "^2.6.2" }, "engines": { - "node": ">=20.0.0" + "node": ">=18.0.0" } }, "node_modules/@aws-sdk/signature-v4-multi-region": { - "version": "3.968.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/signature-v4-multi-region/-/signature-v4-multi-region-3.968.0.tgz", - "integrity": "sha512-kRBA1KK3LTHnfYJLPsESNF2WhQN6DyGc9MiM6qG8AdJwMPQkanF5hwtckV1ToO2KB5v1q+1PuvBvy6Npd2IV+w==", + "version": "3.954.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/signature-v4-multi-region/-/signature-v4-multi-region-3.954.0.tgz", + "integrity": "sha512-GJJbUaSlGrMSRWui3Oz8ByygpQlzDGm195yTKirgGyu4tfYrFr/QWrWT42EUktY/L4Irev1pdHTuLS+AGHO1gw==", "license": "Apache-2.0", "dependencies": { - "@aws-sdk/middleware-sdk-s3": "3.968.0", - "@aws-sdk/types": "3.968.0", - "@smithy/protocol-http": "^5.3.7", - "@smithy/signature-v4": "^5.3.7", - "@smithy/types": "^4.11.0", + "@aws-sdk/middleware-sdk-s3": "3.954.0", + "@aws-sdk/types": "3.953.0", + "@smithy/protocol-http": "^5.3.6", + "@smithy/signature-v4": "^5.3.6", + "@smithy/types": "^4.10.0", "tslib": "^2.6.2" }, "engines": { - "node": ">=20.0.0" + "node": ">=18.0.0" } }, "node_modules/@aws-sdk/token-providers": { - "version": "3.968.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/token-providers/-/token-providers-3.968.0.tgz", - "integrity": "sha512-lXUZqB2qTFmZYNXPnVT0suSHGiuQAPrL2DhmhbjqOdR7+GKDHL5KbeKFvPisy7Y4neliJqT4Q1VPWa0nqYaiZg==", + "version": "3.954.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/token-providers/-/token-providers-3.954.0.tgz", + "integrity": "sha512-rDyN3oQQKMOJgyQ9/LNbh4fAGAj8ePMGOAQzSP/kyzizmViI6STpBW1o/VRqiTgMNi1bvA9ZasDtfrJqcVt0iA==", "license": "Apache-2.0", "dependencies": { - "@aws-sdk/core": "3.968.0", - "@aws-sdk/nested-clients": "3.968.0", - "@aws-sdk/types": "3.968.0", - "@smithy/property-provider": "^4.2.7", - "@smithy/shared-ini-file-loader": "^4.4.2", - "@smithy/types": "^4.11.0", + "@aws-sdk/core": "3.954.0", + "@aws-sdk/nested-clients": "3.954.0", + "@aws-sdk/types": "3.953.0", + "@smithy/property-provider": "^4.2.6", + "@smithy/shared-ini-file-loader": "^4.4.1", + "@smithy/types": "^4.10.0", "tslib": "^2.6.2" }, "engines": { - "node": ">=20.0.0" + "node": ">=18.0.0" } }, "node_modules/@aws-sdk/types": { - "version": "3.968.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.968.0.tgz", - "integrity": "sha512-Wuumj/1cuiuXTMdHmvH88zbEl+5Pw++fOFQuMCF4yP0R+9k1lwX8rVst+oy99xaxtdluJZXrsccoZoA67ST1Ow==", + "version": "3.953.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.953.0.tgz", + "integrity": "sha512-M9Iwg9kTyqTErI0vOTVVpcnTHWzS3VplQppy8MuL02EE+mJ0BIwpWfsaAPQW+/XnVpdNpWZTsHcNE29f1+hR8g==", "license": "Apache-2.0", "dependencies": { - "@smithy/types": "^4.11.0", + "@smithy/types": "^4.10.0", "tslib": "^2.6.2" }, "engines": { - "node": ">=20.0.0" + "node": ">=18.0.0" } }, "node_modules/@aws-sdk/util-arn-parser": { - "version": "3.968.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-arn-parser/-/util-arn-parser-3.968.0.tgz", - "integrity": "sha512-gqqvYcitIIM2K4lrDX9de9YvOfXBcVdxfT/iLnvHJd4YHvSXlt+gs+AsL4FfPCxG4IG9A+FyulP9Sb1MEA75vw==", + "version": "3.953.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-arn-parser/-/util-arn-parser-3.953.0.tgz", + "integrity": "sha512-9hqdKkn4OvYzzaLryq2xnwcrPc8ziY34i9szUdgBfSqEC6pBxbY9/lLXmrgzfwMSL2Z7/v2go4Od0p5eukKLMQ==", "license": "Apache-2.0", "dependencies": { "tslib": "^2.6.2" }, "engines": { - "node": ">=20.0.0" + "node": ">=18.0.0" } }, "node_modules/@aws-sdk/util-endpoints": { - "version": "3.968.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-endpoints/-/util-endpoints-3.968.0.tgz", - "integrity": "sha512-9IdilgylS0crFSeI59vtr8qhDYMYYOvnvkl1dLp59+EmLH1IdXz7+4cR5oh5PkoqD7DRzc5Uzm2GnZhK6I0oVQ==", + "version": "3.953.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-endpoints/-/util-endpoints-3.953.0.tgz", + "integrity": "sha512-rjaS6jrFksopXvNg6YeN+D1lYwhcByORNlFuYesFvaQNtPOufbE5tJL4GJ3TMXyaY0uFR28N5BHHITPyWWfH/g==", "license": "Apache-2.0", "dependencies": { - "@aws-sdk/types": "3.968.0", - "@smithy/types": "^4.11.0", - "@smithy/url-parser": "^4.2.7", - "@smithy/util-endpoints": "^3.2.7", + "@aws-sdk/types": "3.953.0", + "@smithy/types": "^4.10.0", + "@smithy/url-parser": "^4.2.6", + "@smithy/util-endpoints": "^3.2.6", "tslib": "^2.6.2" }, "engines": { - "node": ">=20.0.0" + "node": ">=18.0.0" } }, "node_modules/@aws-sdk/util-locate-window": { - "version": "3.965.2", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-locate-window/-/util-locate-window-3.965.2.tgz", - "integrity": "sha512-qKgO7wAYsXzhwCHhdbaKFyxd83Fgs8/1Ka+jjSPrv2Ll7mB55Wbwlo0kkfMLh993/yEc8aoDIAc1Fz9h4Spi4Q==", + "version": "3.953.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-locate-window/-/util-locate-window-3.953.0.tgz", + "integrity": "sha512-mPxK+I1LcrgC/RSa3G5AMAn8eN2Ay0VOgw8lSRmV1jCtO+iYvNeCqOdxoJUjOW6I5BA4niIRWqVORuRP07776Q==", "license": "Apache-2.0", "dependencies": { "tslib": "^2.6.2" }, "engines": { - "node": ">=20.0.0" + "node": ">=18.0.0" } }, "node_modules/@aws-sdk/util-user-agent-browser": { - "version": "3.968.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-browser/-/util-user-agent-browser-3.968.0.tgz", - "integrity": "sha512-nRxjs8Jpq8ZHFsa/0uiww2f4+40D6Dt6bQmepAJHIE/D+atwPINDKsfamCjFnxrjKU3WBWpGYEf/QDO0XZsFMw==", + "version": "3.953.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-browser/-/util-user-agent-browser-3.953.0.tgz", + "integrity": "sha512-UF5NeqYesWuFao+u7LJvpV1SJCaLml5BtFZKUdTnNNMeN6jvV+dW/eQoFGpXF94RCqguX0XESmRuRRPQp+/rzQ==", "license": "Apache-2.0", "dependencies": { - "@aws-sdk/types": "3.968.0", - "@smithy/types": "^4.11.0", + "@aws-sdk/types": "3.953.0", + "@smithy/types": "^4.10.0", "bowser": "^2.11.0", "tslib": "^2.6.2" } }, "node_modules/@aws-sdk/util-user-agent-node": { - "version": "3.968.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-node/-/util-user-agent-node-3.968.0.tgz", - "integrity": "sha512-oaIkPGraGhZgkDmxVhTIlakaUNWKO9aMN+uB6I+eS26MWi/lpMK66HTZeXEnaTrmt5/kl99YC0N37zScz58Tdg==", + "version": "3.954.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-node/-/util-user-agent-node-3.954.0.tgz", + "integrity": "sha512-fB5S5VOu7OFkeNzcblQlez4AjO5hgDFaa7phYt7716YWisY3RjAaQPlxgv+G3GltHHDJIfzEC5aRxdf62B9zMg==", "license": "Apache-2.0", "dependencies": { - "@aws-sdk/middleware-user-agent": "3.968.0", - "@aws-sdk/types": "3.968.0", - "@smithy/node-config-provider": "^4.3.7", - "@smithy/types": "^4.11.0", + "@aws-sdk/middleware-user-agent": "3.954.0", + "@aws-sdk/types": "3.953.0", + "@smithy/node-config-provider": "^4.3.6", + "@smithy/types": "^4.10.0", "tslib": "^2.6.2" }, "engines": { - "node": ">=20.0.0" + "node": ">=18.0.0" }, "peerDependencies": { "aws-crt": ">=1.0.0" @@ -1317,35 +1305,35 @@ } }, "node_modules/@aws-sdk/xml-builder": { - "version": "3.968.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/xml-builder/-/xml-builder-3.968.0.tgz", - "integrity": "sha512-bZQKn41ebPh/uW9uWUE5oLuaBr44Gt78dkw2amu5zcwo1J/d8s6FdzZcRDmz0rHE2NHJWYkdQYeVQo7jhMziqA==", + "version": "3.953.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/xml-builder/-/xml-builder-3.953.0.tgz", + "integrity": "sha512-Zmrj21jQ2OeOJGr9spPiN00aQvXa/WUqRXcTVENhrMt+OFoSOfDFpYhUj9NQ09QmQ8KMWFoWuWW6iKurNqLvAA==", "license": "Apache-2.0", "dependencies": { - "@smithy/types": "^4.11.0", + "@smithy/types": "^4.10.0", "fast-xml-parser": "5.2.5", "tslib": "^2.6.2" }, "engines": { - "node": ">=20.0.0" + "node": ">=18.0.0" } }, "node_modules/@aws/lambda-invoke-store": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/@aws/lambda-invoke-store/-/lambda-invoke-store-0.2.3.tgz", - "integrity": "sha512-oLvsaPMTBejkkmHhjf09xTgk71mOqyr/409NKhRIL08If7AhVfUsJhVsx386uJaqNd42v9kWamQ9lFbkoC2dYw==", + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/@aws/lambda-invoke-store/-/lambda-invoke-store-0.2.2.tgz", + "integrity": "sha512-C0NBLsIqzDIae8HFw9YIrIBsbc0xTiOtt7fAukGPnqQ/+zZNaq+4jhuccltK0QuWHBnNm/a6kLIRA6GFiM10eg==", "license": "Apache-2.0", "engines": { "node": ">=18.0.0" } }, "node_modules/@babel/code-frame": { - "version": "7.28.6", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.28.6.tgz", - "integrity": "sha512-JYgintcMjRiCvS8mMECzaEn+m3PfoQiyqukOMCCVQtoJGYJw8j/8LBJEiqkHLkfwCcs74E3pbAUFNg7d9VNJ+Q==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.27.1.tgz", + "integrity": "sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg==", "license": "MIT", "dependencies": { - "@babel/helper-validator-identifier": "^7.28.5", + "@babel/helper-validator-identifier": "^7.27.1", "js-tokens": "^4.0.0", "picocolors": "^1.1.1" }, @@ -1354,9 +1342,9 @@ } }, "node_modules/@babel/compat-data": { - "version": "7.28.6", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.28.6.tgz", - "integrity": "sha512-2lfu57JtzctfIrcGMz992hyLlByuzgIk58+hhGCxjKZ3rWI82NnVLjXcaTqkI2NvlcvOskZaiZ5kjUALo3Lpxg==", + "version": "7.28.5", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.28.5.tgz", + "integrity": "sha512-6uFXyCayocRbqhZOB+6XcuZbkMNimwfVGFji8CTZnCzOHVGvDqzvitu1re2AU5LROliz7eQPhB8CpAMvnx9EjA==", "devOptional": true, "license": "MIT", "engines": { @@ -1364,21 +1352,21 @@ } }, "node_modules/@babel/core": { - "version": "7.28.6", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.28.6.tgz", - "integrity": "sha512-H3mcG6ZDLTlYfaSNi0iOKkigqMFvkTKlGUYlD8GW7nNOYRrevuA46iTypPyv+06V3fEmvvazfntkBU34L0azAw==", + "version": "7.28.5", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.28.5.tgz", + "integrity": "sha512-e7jT4DxYvIDLk1ZHmU/m/mB19rex9sv0c2ftBtjSBv+kVM/902eh0fINUzD7UwLLNR+jU585GxUJ8/EBfAM5fw==", "devOptional": true, "license": "MIT", "dependencies": { - "@babel/code-frame": "^7.28.6", - "@babel/generator": "^7.28.6", - "@babel/helper-compilation-targets": "^7.28.6", - "@babel/helper-module-transforms": "^7.28.6", - "@babel/helpers": "^7.28.6", - "@babel/parser": "^7.28.6", - "@babel/template": "^7.28.6", - "@babel/traverse": "^7.28.6", - "@babel/types": "^7.28.6", + "@babel/code-frame": "^7.27.1", + "@babel/generator": "^7.28.5", + "@babel/helper-compilation-targets": "^7.27.2", + "@babel/helper-module-transforms": "^7.28.3", + "@babel/helpers": "^7.28.4", + "@babel/parser": "^7.28.5", + "@babel/template": "^7.27.2", + "@babel/traverse": "^7.28.5", + "@babel/types": "^7.28.5", "@jridgewell/remapping": "^2.3.5", "convert-source-map": "^2.0.0", "debug": "^4.1.0", @@ -1412,14 +1400,14 @@ } }, "node_modules/@babel/generator": { - "version": "7.28.6", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.28.6.tgz", - "integrity": "sha512-lOoVRwADj8hjf7al89tvQ2a1lf53Z+7tiXMgpZJL3maQPDxh0DgLMN62B2MKUOFcoodBHLMbDM6WAbKgNy5Suw==", + "version": "7.28.5", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.28.5.tgz", + "integrity": "sha512-3EwLFhZ38J4VyIP6WNtt2kUdW9dokXA9Cr4IVIFHuCpZ3H8/YFOl5JjZHisrn1fATPBmKKqXzDFvh9fUwHz6CQ==", "devOptional": true, "license": "MIT", "dependencies": { - "@babel/parser": "^7.28.6", - "@babel/types": "^7.28.6", + "@babel/parser": "^7.28.5", + "@babel/types": "^7.28.5", "@jridgewell/gen-mapping": "^0.3.12", "@jridgewell/trace-mapping": "^0.3.28", "jsesc": "^3.0.2" @@ -1443,13 +1431,13 @@ } }, "node_modules/@babel/helper-compilation-targets": { - "version": "7.28.6", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.28.6.tgz", - "integrity": "sha512-JYtls3hqi15fcx5GaSNL7SCTJ2MNmjrkHXg4FSpOA/grxK8KwyZ5bubHsCq8FXCkua6xhuaaBit+3b7+VZRfcA==", + "version": "7.27.2", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.27.2.tgz", + "integrity": "sha512-2+1thGUUWWjLTYTHZWK1n8Yga0ijBz1XAhUXcKy81rd5g6yh7hGqMp45v7cadSbEHc9G3OTv45SyneRN3ps4DQ==", "devOptional": true, "license": "MIT", "dependencies": { - "@babel/compat-data": "^7.28.6", + "@babel/compat-data": "^7.27.2", "@babel/helper-validator-option": "^7.27.1", "browserslist": "^4.24.0", "lru-cache": "^5.1.1", @@ -1487,9 +1475,9 @@ "license": "ISC" }, "node_modules/@babel/helper-create-class-features-plugin": { - "version": "7.28.6", - "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.28.6.tgz", - "integrity": "sha512-dTOdvsjnG3xNT9Y0AUg1wAl38y+4Rl4sf9caSQZOXdNqVn+H+HbbJ4IyyHaIqNR6SW9oJpA/RuRjsjCw2IdIow==", + "version": "7.28.5", + "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.28.5.tgz", + "integrity": "sha512-q3WC4JfdODypvxArsJQROfupPBq9+lMwjKq7C33GhbFYJsufD0yd/ziwD+hJucLeWsnFPWZjsU2DNFqBPE7jwQ==", "license": "MIT", "optional": true, "peer": true, @@ -1497,9 +1485,9 @@ "@babel/helper-annotate-as-pure": "^7.27.3", "@babel/helper-member-expression-to-functions": "^7.28.5", "@babel/helper-optimise-call-expression": "^7.27.1", - "@babel/helper-replace-supers": "^7.28.6", + "@babel/helper-replace-supers": "^7.27.1", "@babel/helper-skip-transparent-expression-wrappers": "^7.27.1", - "@babel/traverse": "^7.28.6", + "@babel/traverse": "^7.28.5", "semver": "^6.3.1" }, "engines": { @@ -1594,29 +1582,29 @@ } }, "node_modules/@babel/helper-module-imports": { - "version": "7.28.6", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.28.6.tgz", - "integrity": "sha512-l5XkZK7r7wa9LucGw9LwZyyCUscb4x37JWTPz7swwFE/0FMQAGpiWUZn8u9DzkSBWEcK25jmvubfpw2dnAMdbw==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.27.1.tgz", + "integrity": "sha512-0gSFWUPNXNopqtIPQvlD5WgXYI5GY2kP2cCvoT8kczjbfcfuIljTbcWrulD1CIPIX2gt1wghbDy08yE1p+/r3w==", "devOptional": true, "license": "MIT", "dependencies": { - "@babel/traverse": "^7.28.6", - "@babel/types": "^7.28.6" + "@babel/traverse": "^7.27.1", + "@babel/types": "^7.27.1" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-module-transforms": { - "version": "7.28.6", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.28.6.tgz", - "integrity": "sha512-67oXFAYr2cDLDVGLXTEABjdBJZ6drElUSI7WKp70NrpyISso3plG9SAGEF6y7zbha/wOzUByWWTJvEDVNIUGcA==", + "version": "7.28.3", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.28.3.tgz", + "integrity": "sha512-gytXUbs8k2sXS9PnQptz5o0QnpLL51SwASIORY6XaBKF88nsOT0Zw9szLqlSGQDP/4TljBAD5y98p2U1fqkdsw==", "devOptional": true, "license": "MIT", "dependencies": { - "@babel/helper-module-imports": "^7.28.6", - "@babel/helper-validator-identifier": "^7.28.5", - "@babel/traverse": "^7.28.6" + "@babel/helper-module-imports": "^7.27.1", + "@babel/helper-validator-identifier": "^7.27.1", + "@babel/traverse": "^7.28.3" }, "engines": { "node": ">=6.9.0" @@ -1640,9 +1628,9 @@ } }, "node_modules/@babel/helper-plugin-utils": { - "version": "7.28.6", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.28.6.tgz", - "integrity": "sha512-S9gzZ/bz83GRysI7gAD4wPT/AI3uCnY+9xn+Mx/KPs2JwHJIz1W8PZkg2cqyt3RNOBM8ejcXhV6y8Og7ly/Dug==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.27.1.tgz", + "integrity": "sha512-1gn1Up5YXka3YYAHGKpbideQ5Yjf1tDa9qYcgysz+cNCXukyLl6DjPXhD3VRwSb8c0J9tA4b2+rHEZtc6R0tlw==", "devOptional": true, "license": "MIT", "engines": { @@ -1669,16 +1657,16 @@ } }, "node_modules/@babel/helper-replace-supers": { - "version": "7.28.6", - "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.28.6.tgz", - "integrity": "sha512-mq8e+laIk94/yFec3DxSjCRD2Z0TAjhVbEJY3UQrlwVo15Lmt7C2wAUbK4bjnTs4APkwsYLTahXRraQXhb1WCg==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.27.1.tgz", + "integrity": "sha512-7EHz6qDZc8RYS5ElPoShMheWvEgERonFCs7IAonWLLUTXW59DP14bCZt89/GKyreYn8g3S83m21FelHKbeDCKA==", "license": "MIT", "optional": true, "peer": true, "dependencies": { - "@babel/helper-member-expression-to-functions": "^7.28.5", + "@babel/helper-member-expression-to-functions": "^7.27.1", "@babel/helper-optimise-call-expression": "^7.27.1", - "@babel/traverse": "^7.28.6" + "@babel/traverse": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -1732,30 +1720,30 @@ } }, "node_modules/@babel/helper-wrap-function": { - "version": "7.28.6", - "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.28.6.tgz", - "integrity": "sha512-z+PwLziMNBeSQJonizz2AGnndLsP2DeGHIxDAn+wdHOGuo4Fo1x1HBPPXeE9TAOPHNNWQKCSlA2VZyYyyibDnQ==", + "version": "7.28.3", + "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.28.3.tgz", + "integrity": "sha512-zdf983tNfLZFletc0RRXYrHrucBEg95NIFMkn6K9dbeMYnsgHaSBGcQqdsCSStG2PYwRre0Qc2NNSCXbG+xc6g==", "license": "MIT", "optional": true, "peer": true, "dependencies": { - "@babel/template": "^7.28.6", - "@babel/traverse": "^7.28.6", - "@babel/types": "^7.28.6" + "@babel/template": "^7.27.2", + "@babel/traverse": "^7.28.3", + "@babel/types": "^7.28.2" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helpers": { - "version": "7.28.6", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.28.6.tgz", - "integrity": "sha512-xOBvwq86HHdB7WUDTfKfT/Vuxh7gElQ+Sfti2Cy6yIWNW05P8iUslOVcZ4/sKbE+/jQaukQAdz/gf3724kYdqw==", + "version": "7.28.4", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.28.4.tgz", + "integrity": "sha512-HFN59MmQXGHVyYadKLVumYsA9dBFun/ldYxipEjzA4196jpLZd8UjEEBLkbEkvfYreDqJhZxYAWFPtrfhNpj4w==", "devOptional": true, "license": "MIT", "dependencies": { - "@babel/template": "^7.28.6", - "@babel/types": "^7.28.6" + "@babel/template": "^7.27.2", + "@babel/types": "^7.28.4" }, "engines": { "node": ">=6.9.0" @@ -1864,13 +1852,13 @@ } }, "node_modules/@babel/parser": { - "version": "7.28.6", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.28.6.tgz", - "integrity": "sha512-TeR9zWR18BvbfPmGbLampPMW+uW1NZnJlRuuHso8i87QZNq2JRF9i6RgxRqtEq+wQGsS19NNTWr2duhnE49mfQ==", + "version": "7.28.5", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.28.5.tgz", + "integrity": "sha512-KKBU1VGYR7ORr3At5HAtUQ+TV3SzRCXmA/8OdDZiLDBIZxVyzXuztPjfLd3BV1PRAQGCMWWSHYhL0F8d5uHBDQ==", "devOptional": true, "license": "MIT", "dependencies": { - "@babel/types": "^7.28.6" + "@babel/types": "^7.28.5" }, "bin": { "parser": "bin/babel-parser.js" @@ -1880,16 +1868,16 @@ } }, "node_modules/@babel/plugin-proposal-decorators": { - "version": "7.28.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-decorators/-/plugin-proposal-decorators-7.28.6.tgz", - "integrity": "sha512-RVdFPPyY9fCRAX68haPmOk2iyKW8PKJFthmm8NeSI3paNxKWGZIn99+VbIf0FrtCpFnPgnpF/L48tadi617ULg==", + "version": "7.28.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-decorators/-/plugin-proposal-decorators-7.28.0.tgz", + "integrity": "sha512-zOiZqvANjWDUaUS9xMxbMcK/Zccztbe/6ikvUXaG9nsPH3w6qh5UaPGAnirI/WhIbZ8m3OHU0ReyPrknG+ZKeg==", "license": "MIT", "optional": true, "peer": true, "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.28.6", - "@babel/helper-plugin-utils": "^7.28.6", - "@babel/plugin-syntax-decorators": "^7.28.6" + "@babel/helper-create-class-features-plugin": "^7.27.1", + "@babel/helper-plugin-utils": "^7.27.1", + "@babel/plugin-syntax-decorators": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -1971,14 +1959,14 @@ } }, "node_modules/@babel/plugin-syntax-decorators": { - "version": "7.28.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-decorators/-/plugin-syntax-decorators-7.28.6.tgz", - "integrity": "sha512-71EYI0ONURHJBL4rSFXnITXqXrrY8q4P0q006DPfN+Rk+ASM+++IBXem/ruokgBZR8YNEWZ8R6B+rCb8VcUTqA==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-decorators/-/plugin-syntax-decorators-7.27.1.tgz", + "integrity": "sha512-YMq8Z87Lhl8EGkmb0MwYkt36QnxC+fzCgrl66ereamPlYToRpIk5nUjKUY3QKLWq8mwUB1BgbeXcTJhZOCDg5A==", "license": "MIT", "optional": true, "peer": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.28.6" + "@babel/helper-plugin-utils": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -2002,14 +1990,14 @@ } }, "node_modules/@babel/plugin-syntax-export-default-from": { - "version": "7.28.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-export-default-from/-/plugin-syntax-export-default-from-7.28.6.tgz", - "integrity": "sha512-Svlx1fjJFnNz0LZeUaybRukSxZI3KkpApUmIRzEdXC5k8ErTOz0OD0kNrICi5Vc3GlpP5ZCeRyRO+mfWTSz+iQ==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-export-default-from/-/plugin-syntax-export-default-from-7.27.1.tgz", + "integrity": "sha512-eBC/3KSekshx19+N40MzjWqJd7KTEdOoLesAfa4IDFI8eRz5a47i5Oszus6zG/cwIXN63YhgLOMSSNJx49sENg==", "license": "MIT", "optional": true, "peer": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.28.6" + "@babel/helper-plugin-utils": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -2019,14 +2007,14 @@ } }, "node_modules/@babel/plugin-syntax-flow": { - "version": "7.28.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-flow/-/plugin-syntax-flow-7.28.6.tgz", - "integrity": "sha512-D+OrJumc9McXNEBI/JmFnc/0uCM2/Y3PEBG3gfV3QIYkKv5pvnpzFrl1kYCrcHJP8nOeFB/SHi1IHz29pNGuew==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-flow/-/plugin-syntax-flow-7.27.1.tgz", + "integrity": "sha512-p9OkPbZ5G7UT1MofwYFigGebnrzGJacoBSQM0/6bi/PUMVE+qlWDD/OalvQKbwgQzU6dl0xAv6r4X7Jme0RYxA==", "license": "MIT", "optional": true, "peer": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.28.6" + "@babel/helper-plugin-utils": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -2036,13 +2024,13 @@ } }, "node_modules/@babel/plugin-syntax-import-attributes": { - "version": "7.28.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.28.6.tgz", - "integrity": "sha512-jiLC0ma9XkQT3TKJ9uYvlakm66Pamywo+qwL+oL8HJOvc6TWdZXVfhqJr8CCzbSGUAbDOzlGHJC1U+vRfLQDvw==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.27.1.tgz", + "integrity": "sha512-oFT0FrKHgF53f4vOsZGi2Hh3I35PfSmVs4IBFLFj4dnafP+hIWDLg3VyKmUHfLoLHlyxY4C7DGtmHuJgn+IGww==", "devOptional": true, "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.28.6" + "@babel/helper-plugin-utils": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -2078,13 +2066,13 @@ } }, "node_modules/@babel/plugin-syntax-jsx": { - "version": "7.28.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.28.6.tgz", - "integrity": "sha512-wgEmr06G6sIpqr8YDwA2dSRTE3bJ+V0IfpzfSY3Lfgd7YWOaAdlykvJi13ZKBt8cZHfgH1IXN+CL656W3uUa4w==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.27.1.tgz", + "integrity": "sha512-y8YTNIeKoyhGd9O0Jiyzyyqk8gdjnumGTQPsz0xOZOQ2RmkVJeZ1vmmfIvFEKqucBG6axJGBZDE/7iI5suUI/w==", "devOptional": true, "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.28.6" + "@babel/helper-plugin-utils": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -2204,13 +2192,13 @@ } }, "node_modules/@babel/plugin-syntax-typescript": { - "version": "7.28.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.28.6.tgz", - "integrity": "sha512-+nDNmQye7nlnuuHDboPbGm00Vqg3oO8niRRL27/4LYHUsHYh0zJ1xWOz0uRwNFmM1Avzk8wZbc6rdiYhomzv/A==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.27.1.tgz", + "integrity": "sha512-xfYCBMxveHrRMnAWl1ZlPXOZjzkN82THFvLhQhFXFt81Z5HnN+EtUkZhv/zcKpmT3fzmWZB0ywiBrbC3vogbwQ==", "devOptional": true, "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.28.6" + "@babel/helper-plugin-utils": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -2237,16 +2225,16 @@ } }, "node_modules/@babel/plugin-transform-async-generator-functions": { - "version": "7.28.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.28.6.tgz", - "integrity": "sha512-9knsChgsMzBV5Yh3kkhrZNxH3oCYAfMBkNNaVN4cP2RVlFPe8wYdwwcnOsAbkdDoV9UjFtOXWrWB52M8W4jNeA==", + "version": "7.28.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.28.0.tgz", + "integrity": "sha512-BEOdvX4+M765icNPZeidyADIvQ1m1gmunXufXxvRESy/jNNyfovIqUyE7MVgGBjWktCoJlzvFA1To2O4ymIO3Q==", "license": "MIT", "optional": true, "peer": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.28.6", + "@babel/helper-plugin-utils": "^7.27.1", "@babel/helper-remap-async-to-generator": "^7.27.1", - "@babel/traverse": "^7.28.6" + "@babel/traverse": "^7.28.0" }, "engines": { "node": ">=6.9.0" @@ -2256,15 +2244,15 @@ } }, "node_modules/@babel/plugin-transform-async-to-generator": { - "version": "7.28.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.28.6.tgz", - "integrity": "sha512-ilTRcmbuXjsMmcZ3HASTe4caH5Tpo93PkTxF9oG2VZsSWsahydmcEHhix9Ik122RcTnZnUzPbmux4wh1swfv7g==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.27.1.tgz", + "integrity": "sha512-NREkZsZVJS4xmTr8qzE5y8AfIPqsdQfRuUiLRTEzb7Qii8iFWCyDKaUV2c0rCuh4ljDZ98ALHP/PetiBV2nddA==", "license": "MIT", "optional": true, "peer": true, "dependencies": { - "@babel/helper-module-imports": "^7.28.6", - "@babel/helper-plugin-utils": "^7.28.6", + "@babel/helper-module-imports": "^7.27.1", + "@babel/helper-plugin-utils": "^7.27.1", "@babel/helper-remap-async-to-generator": "^7.27.1" }, "engines": { @@ -2275,14 +2263,14 @@ } }, "node_modules/@babel/plugin-transform-block-scoping": { - "version": "7.28.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.28.6.tgz", - "integrity": "sha512-tt/7wOtBmwHPNMPu7ax4pdPz6shjFrmHDghvNC+FG9Qvj7D6mJcoRQIF5dy4njmxR941l6rgtvfSB2zX3VlUIw==", + "version": "7.28.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.28.5.tgz", + "integrity": "sha512-45DmULpySVvmq9Pj3X9B+62Xe+DJGov27QravQJU1LLcapR6/10i+gYVAucGGJpHBp5mYxIMK4nDAT/QDLr47g==", "license": "MIT", "optional": true, "peer": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.28.6" + "@babel/helper-plugin-utils": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -2292,15 +2280,15 @@ } }, "node_modules/@babel/plugin-transform-class-properties": { - "version": "7.28.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.28.6.tgz", - "integrity": "sha512-dY2wS3I2G7D697VHndN91TJr8/AAfXQNt5ynCTI/MpxMsSzHp+52uNivYT5wCPax3whc47DR8Ba7cmlQMg24bw==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.27.1.tgz", + "integrity": "sha512-D0VcalChDMtuRvJIu3U/fwWjf8ZMykz5iZsg77Nuj821vCKI3zCyRLwRdWbsuJ/uRwZhZ002QtCqIkwC/ZkvbA==", "license": "MIT", "optional": true, "peer": true, "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.28.6", - "@babel/helper-plugin-utils": "^7.28.6" + "@babel/helper-create-class-features-plugin": "^7.27.1", + "@babel/helper-plugin-utils": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -2310,15 +2298,15 @@ } }, "node_modules/@babel/plugin-transform-class-static-block": { - "version": "7.28.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.28.6.tgz", - "integrity": "sha512-rfQ++ghVwTWTqQ7w8qyDxL1XGihjBss4CmTgGRCTAC9RIbhVpyp4fOeZtta0Lbf+dTNIVJer6ych2ibHwkZqsQ==", + "version": "7.28.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.28.3.tgz", + "integrity": "sha512-LtPXlBbRoc4Njl/oh1CeD/3jC+atytbnf/UqLoqTDcEYGUPj022+rvfkbDYieUrSj3CaV4yHDByPE+T2HwfsJg==", "license": "MIT", "optional": true, "peer": true, "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.28.6", - "@babel/helper-plugin-utils": "^7.28.6" + "@babel/helper-create-class-features-plugin": "^7.28.3", + "@babel/helper-plugin-utils": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -2328,19 +2316,19 @@ } }, "node_modules/@babel/plugin-transform-classes": { - "version": "7.28.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.28.6.tgz", - "integrity": "sha512-EF5KONAqC5zAqT783iMGuM2ZtmEBy+mJMOKl2BCvPZ2lVrwvXnB6o+OBWCS+CoeCCpVRF2sA2RBKUxvT8tQT5Q==", + "version": "7.28.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.28.4.tgz", + "integrity": "sha512-cFOlhIYPBv/iBoc+KS3M6et2XPtbT2HiCRfBXWtfpc9OAyostldxIf9YAYB6ypURBBbx+Qv6nyrLzASfJe+hBA==", "license": "MIT", "optional": true, "peer": true, "dependencies": { "@babel/helper-annotate-as-pure": "^7.27.3", - "@babel/helper-compilation-targets": "^7.28.6", + "@babel/helper-compilation-targets": "^7.27.2", "@babel/helper-globals": "^7.28.0", - "@babel/helper-plugin-utils": "^7.28.6", - "@babel/helper-replace-supers": "^7.28.6", - "@babel/traverse": "^7.28.6" + "@babel/helper-plugin-utils": "^7.27.1", + "@babel/helper-replace-supers": "^7.27.1", + "@babel/traverse": "^7.28.4" }, "engines": { "node": ">=6.9.0" @@ -2350,15 +2338,15 @@ } }, "node_modules/@babel/plugin-transform-computed-properties": { - "version": "7.28.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.28.6.tgz", - "integrity": "sha512-bcc3k0ijhHbc2lEfpFHgx7eYw9KNXqOerKWfzbxEHUGKnS3sz9C4CNL9OiFN1297bDNfUiSO7DaLzbvHQQQ1BQ==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.27.1.tgz", + "integrity": "sha512-lj9PGWvMTVksbWiDT2tW68zGS/cyo4AkZ/QTp0sQT0mjPopCmrSkzxeXkznjqBxzDI6TclZhOJbBmbBLjuOZUw==", "license": "MIT", "optional": true, "peer": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.28.6", - "@babel/template": "^7.28.6" + "@babel/helper-plugin-utils": "^7.27.1", + "@babel/template": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -2475,14 +2463,14 @@ } }, "node_modules/@babel/plugin-transform-logical-assignment-operators": { - "version": "7.28.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.28.6.tgz", - "integrity": "sha512-+anKKair6gpi8VsM/95kmomGNMD0eLz1NQ8+Pfw5sAwWH9fGYXT50E55ZpV0pHUHWf6IUTWPM+f/7AAff+wr9A==", + "version": "7.28.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.28.5.tgz", + "integrity": "sha512-axUuqnUTBuXyHGcJEVVh9pORaN6wC5bYfE7FGzPiaWa3syib9m7g+/IT/4VgCOe2Upef43PHzeAvcrVek6QuuA==", "license": "MIT", "optional": true, "peer": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.28.6" + "@babel/helper-plugin-utils": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -2492,15 +2480,15 @@ } }, "node_modules/@babel/plugin-transform-modules-commonjs": { - "version": "7.28.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.28.6.tgz", - "integrity": "sha512-jppVbf8IV9iWWwWTQIxJMAJCWBuuKx71475wHwYytrRGQ2CWiDvYlADQno3tcYpS/T2UUWFQp3nVtYfK/YBQrA==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.27.1.tgz", + "integrity": "sha512-OJguuwlTYlN0gBZFRPqwOGNWssZjfIUdS7HMYtN8c1KmwpwHFBwTeFZrg9XZa+DFTitWOW5iTAG7tyCUPsCCyw==", "license": "MIT", "optional": true, "peer": true, "dependencies": { - "@babel/helper-module-transforms": "^7.28.6", - "@babel/helper-plugin-utils": "^7.28.6" + "@babel/helper-module-transforms": "^7.27.1", + "@babel/helper-plugin-utils": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -2528,14 +2516,14 @@ } }, "node_modules/@babel/plugin-transform-nullish-coalescing-operator": { - "version": "7.28.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.28.6.tgz", - "integrity": "sha512-3wKbRgmzYbw24mDJXT7N+ADXw8BC/imU9yo9c9X9NKaLF1fW+e5H1U5QjMUBe4Qo4Ox/o++IyUkl1sVCLgevKg==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.27.1.tgz", + "integrity": "sha512-aGZh6xMo6q9vq1JGcw58lZ1Z0+i0xB2x0XaauNIUXd6O1xXc3RwoWEBlsTQrY4KQ9Jf0s5rgD6SiNkaUdJegTA==", "license": "MIT", "optional": true, "peer": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.28.6" + "@babel/helper-plugin-utils": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -2545,14 +2533,14 @@ } }, "node_modules/@babel/plugin-transform-numeric-separator": { - "version": "7.28.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.28.6.tgz", - "integrity": "sha512-SJR8hPynj8outz+SlStQSwvziMN4+Bq99it4tMIf5/Caq+3iOc0JtKyse8puvyXkk3eFRIA5ID/XfunGgO5i6w==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.27.1.tgz", + "integrity": "sha512-fdPKAcujuvEChxDBJ5c+0BTaS6revLV7CJL08e4m3de8qJfNIuCc2nc7XJYOjBoTMJeqSmwXJ0ypE14RCjLwaw==", "license": "MIT", "optional": true, "peer": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.28.6" + "@babel/helper-plugin-utils": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -2562,18 +2550,18 @@ } }, "node_modules/@babel/plugin-transform-object-rest-spread": { - "version": "7.28.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.28.6.tgz", - "integrity": "sha512-5rh+JR4JBC4pGkXLAcYdLHZjXudVxWMXbB6u6+E9lRL5TrGVbHt1TjxGbZ8CkmYw9zjkB7jutzOROArsqtncEA==", + "version": "7.28.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.28.4.tgz", + "integrity": "sha512-373KA2HQzKhQCYiRVIRr+3MjpCObqzDlyrM6u4I201wL8Mp2wHf7uB8GhDwis03k2ti8Zr65Zyyqs1xOxUF/Ew==", "license": "MIT", "optional": true, "peer": true, "dependencies": { - "@babel/helper-compilation-targets": "^7.28.6", - "@babel/helper-plugin-utils": "^7.28.6", - "@babel/plugin-transform-destructuring": "^7.28.5", + "@babel/helper-compilation-targets": "^7.27.2", + "@babel/helper-plugin-utils": "^7.27.1", + "@babel/plugin-transform-destructuring": "^7.28.0", "@babel/plugin-transform-parameters": "^7.27.7", - "@babel/traverse": "^7.28.6" + "@babel/traverse": "^7.28.4" }, "engines": { "node": ">=6.9.0" @@ -2583,14 +2571,14 @@ } }, "node_modules/@babel/plugin-transform-optional-catch-binding": { - "version": "7.28.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.28.6.tgz", - "integrity": "sha512-R8ja/Pyrv0OGAvAXQhSTmWyPJPml+0TMqXlO5w+AsMEiwb2fg3WkOvob7UxFSL3OIttFSGSRFKQsOhJ/X6HQdQ==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.27.1.tgz", + "integrity": "sha512-txEAEKzYrHEX4xSZN4kJ+OfKXFVSWKB2ZxM9dpcE3wT7smwkNmXo5ORRlVzMVdJbD+Q8ILTgSD7959uj+3Dm3Q==", "license": "MIT", "optional": true, "peer": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.28.6" + "@babel/helper-plugin-utils": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -2600,14 +2588,14 @@ } }, "node_modules/@babel/plugin-transform-optional-chaining": { - "version": "7.28.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.28.6.tgz", - "integrity": "sha512-A4zobikRGJTsX9uqVFdafzGkqD30t26ck2LmOzAuLL8b2x6k3TIqRiT2xVvA9fNmFeTX484VpsdgmKNA0bS23w==", + "version": "7.28.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.28.5.tgz", + "integrity": "sha512-N6fut9IZlPnjPwgiQkXNhb+cT8wQKFlJNqcZkWlcTqkcqx6/kU4ynGmLFoa4LViBSirn05YAwk+sQBbPfxtYzQ==", "license": "MIT", "optional": true, "peer": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.28.6", + "@babel/helper-plugin-utils": "^7.27.1", "@babel/helper-skip-transparent-expression-wrappers": "^7.27.1" }, "engines": { @@ -2635,15 +2623,15 @@ } }, "node_modules/@babel/plugin-transform-private-methods": { - "version": "7.28.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.28.6.tgz", - "integrity": "sha512-piiuapX9CRv7+0st8lmuUlRSmX6mBcVeNQ1b4AYzJxfCMuBfB0vBXDiGSmm03pKJw1v6cZ8KSeM+oUnM6yAExg==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.27.1.tgz", + "integrity": "sha512-10FVt+X55AjRAYI9BrdISN9/AQWHqldOeZDUoLyif1Kn05a56xVBXb8ZouL8pZ9jem8QpXaOt8TS7RHUIS+GPA==", "license": "MIT", "optional": true, "peer": true, "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.28.6", - "@babel/helper-plugin-utils": "^7.28.6" + "@babel/helper-create-class-features-plugin": "^7.27.1", + "@babel/helper-plugin-utils": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -2653,16 +2641,16 @@ } }, "node_modules/@babel/plugin-transform-private-property-in-object": { - "version": "7.28.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.28.6.tgz", - "integrity": "sha512-b97jvNSOb5+ehyQmBpmhOCiUC5oVK4PMnpRvO7+ymFBoqYjeDHIU9jnrNUuwHOiL9RpGDoKBpSViarV+BU+eVA==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.27.1.tgz", + "integrity": "sha512-5J+IhqTi1XPa0DXF83jYOaARrX+41gOewWbkPyjMNRDqgOCqdffGh8L3f/Ek5utaEBZExjSAzcyjmV9SSAWObQ==", "license": "MIT", "optional": true, "peer": true, "dependencies": { - "@babel/helper-annotate-as-pure": "^7.27.3", - "@babel/helper-create-class-features-plugin": "^7.28.6", - "@babel/helper-plugin-utils": "^7.28.6" + "@babel/helper-annotate-as-pure": "^7.27.1", + "@babel/helper-create-class-features-plugin": "^7.27.1", + "@babel/helper-plugin-utils": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -2689,18 +2677,18 @@ } }, "node_modules/@babel/plugin-transform-react-jsx": { - "version": "7.28.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.28.6.tgz", - "integrity": "sha512-61bxqhiRfAACulXSLd/GxqmAedUSrRZIu/cbaT18T1CetkTmtDN15it7i80ru4DVqRK1WMxQhXs+Lf9kajm5Ow==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.27.1.tgz", + "integrity": "sha512-2KH4LWGSrJIkVf5tSiBFYuXDAoWRq2MMwgivCf+93dd0GQi8RXLjKA/0EvRnVV5G0hrHczsquXuD01L8s6dmBw==", "license": "MIT", "optional": true, "peer": true, "dependencies": { - "@babel/helper-annotate-as-pure": "^7.27.3", - "@babel/helper-module-imports": "^7.28.6", - "@babel/helper-plugin-utils": "^7.28.6", - "@babel/plugin-syntax-jsx": "^7.28.6", - "@babel/types": "^7.28.6" + "@babel/helper-annotate-as-pure": "^7.27.1", + "@babel/helper-module-imports": "^7.27.1", + "@babel/helper-plugin-utils": "^7.27.1", + "@babel/plugin-syntax-jsx": "^7.27.1", + "@babel/types": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -2779,14 +2767,14 @@ } }, "node_modules/@babel/plugin-transform-regenerator": { - "version": "7.28.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.28.6.tgz", - "integrity": "sha512-eZhoEZHYQLL5uc1gS5e9/oTknS0sSSAtd5TkKMUp3J+S/CaUjagc0kOUPsEbDmMeva0nC3WWl4SxVY6+OBuxfw==", + "version": "7.28.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.28.4.tgz", + "integrity": "sha512-+ZEdQlBoRg9m2NnzvEeLgtvBMO4tkFBw5SQIUgLICgTrumLoU7lr+Oghi6km2PFj+dbUt2u1oby2w3BDO9YQnA==", "license": "MIT", "optional": true, "peer": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.28.6" + "@babel/helper-plugin-utils": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -2846,14 +2834,14 @@ } }, "node_modules/@babel/plugin-transform-spread": { - "version": "7.28.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.28.6.tgz", - "integrity": "sha512-9U4QObUC0FtJl05AsUcodau/RWDytrU6uKgkxu09mLR9HLDAtUMoPuuskm5huQsoktmsYpI+bGmq+iapDcriKA==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.27.1.tgz", + "integrity": "sha512-kpb3HUqaILBJcRFVhFUs6Trdd4mkrzcGXss+6/mxUd273PfbWqSDHRzMT2234gIg2QYfAjvXLSquP1xECSg09Q==", "license": "MIT", "optional": true, "peer": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.28.6", + "@babel/helper-plugin-utils": "^7.27.1", "@babel/helper-skip-transparent-expression-wrappers": "^7.27.1" }, "engines": { @@ -2881,18 +2869,18 @@ } }, "node_modules/@babel/plugin-transform-typescript": { - "version": "7.28.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.28.6.tgz", - "integrity": "sha512-0YWL2RFxOqEm9Efk5PvreamxPME8OyY0wM5wh5lHjF+VtVhdneCWGzZeSqzOfiobVqQaNCd2z0tQvnI9DaPWPw==", + "version": "7.28.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.28.5.tgz", + "integrity": "sha512-x2Qa+v/CuEoX7Dr31iAfr0IhInrVOWZU/2vJMJ00FOR/2nM0BcBEclpaf9sWCDc+v5e9dMrhSH8/atq/kX7+bA==", "license": "MIT", "optional": true, "peer": true, "dependencies": { "@babel/helper-annotate-as-pure": "^7.27.3", - "@babel/helper-create-class-features-plugin": "^7.28.6", - "@babel/helper-plugin-utils": "^7.28.6", + "@babel/helper-create-class-features-plugin": "^7.28.5", + "@babel/helper-plugin-utils": "^7.27.1", "@babel/helper-skip-transparent-expression-wrappers": "^7.27.1", - "@babel/plugin-syntax-typescript": "^7.28.6" + "@babel/plugin-syntax-typescript": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -2963,9 +2951,9 @@ } }, "node_modules/@babel/runtime": { - "version": "7.28.6", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.28.6.tgz", - "integrity": "sha512-05WQkdpL9COIMz4LjTxGpPNCdlpyimKppYNoJ5Di5EUObifl8t4tuLuUBBZEpoLYOmfvIWrsp9fCl0HoPRVTdA==", + "version": "7.28.4", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.28.4.tgz", + "integrity": "sha512-Q/N6JNWvIvPnLDvjlE1OUBLPQHH6l3CltCEsHIujp45zQUSSh8K+gHnaEX45yAT1nyngnINhvWtzN+Nb9D8RAQ==", "license": "MIT", "optional": true, "peer": true, @@ -2974,33 +2962,33 @@ } }, "node_modules/@babel/template": { - "version": "7.28.6", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.28.6.tgz", - "integrity": "sha512-YA6Ma2KsCdGb+WC6UpBVFJGXL58MDA6oyONbjyF/+5sBgxY/dwkhLogbMT2GXXyU84/IhRw/2D1Os1B/giz+BQ==", + "version": "7.27.2", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.27.2.tgz", + "integrity": "sha512-LPDZ85aEJyYSd18/DkjNh4/y1ntkE5KwUHWTiqgRxruuZL2F1yuHligVHLvcHY2vMHXttKFpJn6LwfI7cw7ODw==", "devOptional": true, "license": "MIT", "dependencies": { - "@babel/code-frame": "^7.28.6", - "@babel/parser": "^7.28.6", - "@babel/types": "^7.28.6" + "@babel/code-frame": "^7.27.1", + "@babel/parser": "^7.27.2", + "@babel/types": "^7.27.1" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/traverse": { - "version": "7.28.6", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.28.6.tgz", - "integrity": "sha512-fgWX62k02qtjqdSNTAGxmKYY/7FSL9WAS1o2Hu5+I5m9T0yxZzr4cnrfXQ/MX0rIifthCSs6FKTlzYbJcPtMNg==", + "version": "7.28.5", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.28.5.tgz", + "integrity": "sha512-TCCj4t55U90khlYkVV/0TfkJkAkUg3jZFA3Neb7unZT8CPok7iiRfaX0F+WnqWqt7OxhOn0uBKXCw4lbL8W0aQ==", "devOptional": true, "license": "MIT", "dependencies": { - "@babel/code-frame": "^7.28.6", - "@babel/generator": "^7.28.6", + "@babel/code-frame": "^7.27.1", + "@babel/generator": "^7.28.5", "@babel/helper-globals": "^7.28.0", - "@babel/parser": "^7.28.6", - "@babel/template": "^7.28.6", - "@babel/types": "^7.28.6", + "@babel/parser": "^7.28.5", + "@babel/template": "^7.27.2", + "@babel/types": "^7.28.5", "debug": "^4.3.1" }, "engines": { @@ -3009,19 +2997,19 @@ }, "node_modules/@babel/traverse--for-generate-function-map": { "name": "@babel/traverse", - "version": "7.28.6", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.28.6.tgz", - "integrity": "sha512-fgWX62k02qtjqdSNTAGxmKYY/7FSL9WAS1o2Hu5+I5m9T0yxZzr4cnrfXQ/MX0rIifthCSs6FKTlzYbJcPtMNg==", + "version": "7.28.5", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.28.5.tgz", + "integrity": "sha512-TCCj4t55U90khlYkVV/0TfkJkAkUg3jZFA3Neb7unZT8CPok7iiRfaX0F+WnqWqt7OxhOn0uBKXCw4lbL8W0aQ==", "license": "MIT", "optional": true, "peer": true, "dependencies": { - "@babel/code-frame": "^7.28.6", - "@babel/generator": "^7.28.6", + "@babel/code-frame": "^7.27.1", + "@babel/generator": "^7.28.5", "@babel/helper-globals": "^7.28.0", - "@babel/parser": "^7.28.6", - "@babel/template": "^7.28.6", - "@babel/types": "^7.28.6", + "@babel/parser": "^7.28.5", + "@babel/template": "^7.27.2", + "@babel/types": "^7.28.5", "debug": "^4.3.1" }, "engines": { @@ -3029,9 +3017,9 @@ } }, "node_modules/@babel/types": { - "version": "7.28.6", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.28.6.tgz", - "integrity": "sha512-0ZrskXVEHSWIqZM/sQZ4EV3jZJXRkio/WCxaqKZP1g//CEWEPSfeZFcms4XeKBCHU0ZKnIkdJeU/kF+eRp5lBg==", + "version": "7.28.5", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.28.5.tgz", + "integrity": "sha512-qQ5m48eI/MFLQ5PxQj4PFaprjyCTLI37ElWMmNs0K8Lk3dVeOdNpB3ks8jc7yM5CDmVC73eMVk/trk3fgmrUpA==", "devOptional": true, "license": "MIT", "dependencies": { @@ -3050,9 +3038,9 @@ "license": "MIT" }, "node_modules/@borewit/text-codec": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/@borewit/text-codec/-/text-codec-0.2.1.tgz", - "integrity": "sha512-k7vvKPbf7J2fZ5klGRD9AeKfUvojuZIQ3BT5u7Jfv+puwXkUBUT5PVyMDfJZpy30CBDXGMgw7fguK/lpOMBvgw==", + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/@borewit/text-codec/-/text-codec-0.1.1.tgz", + "integrity": "sha512-5L/uBxmjaCIX5h8Z+uu+kA9BQLkc/Wl06UGR5ajNRxu+/XjonB5i8JpgFMrPj3LXTCPA0pv8yxUvbUi+QthGGA==", "license": "MIT", "funding": { "type": "github", @@ -3541,108 +3529,6 @@ "@noble/ciphers": "^1.0.0" } }, - "node_modules/@emnapi/core": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/@emnapi/core/-/core-1.8.1.tgz", - "integrity": "sha512-AvT9QFpxK0Zd8J0jopedNm+w/2fIzvtPKPjqyw9jwvBaReTTqPBk9Hixaz7KbjimP+QNz605/XnjFcDAL2pqBg==", - "dev": true, - "license": "MIT", - "optional": true, - "dependencies": { - "@emnapi/wasi-threads": "1.1.0", - "tslib": "^2.4.0" - } - }, - "node_modules/@emnapi/runtime": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/@emnapi/runtime/-/runtime-1.8.1.tgz", - "integrity": "sha512-mehfKSMWjjNol8659Z8KxEMrdSJDDot5SXMq00dM8BN4o+CLNXQ0xH2V7EchNHV4RmbZLmmPdEaXZc5H2FXmDg==", - "dev": true, - "license": "MIT", - "optional": true, - "dependencies": { - "tslib": "^2.4.0" - } - }, - "node_modules/@emnapi/wasi-threads": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@emnapi/wasi-threads/-/wasi-threads-1.1.0.tgz", - "integrity": "sha512-WI0DdZ8xFSbgMjR1sFsKABJ/C5OnRrjT06JXbZKexJGrDuPTzZdDYfFlsgcCXCyf+suG5QU2e/y1Wo2V/OapLQ==", - "dev": true, - "license": "MIT", - "optional": true, - "dependencies": { - "tslib": "^2.4.0" - } - }, - "node_modules/@esbuild/aix-ppc64": { - "version": "0.25.12", - "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.25.12.tgz", - "integrity": "sha512-Hhmwd6CInZ3dwpuGTF8fJG6yoWmsToE+vYgD4nytZVxcu1ulHpUQRAB1UJ8+N1Am3Mz4+xOByoQoSZf4D+CpkA==", - "cpu": [ - "ppc64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "aix" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/android-arm": { - "version": "0.25.12", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.25.12.tgz", - "integrity": "sha512-VJ+sKvNA/GE7Ccacc9Cha7bpS8nyzVv0jdVgwNDaR4gDMC/2TTRc33Ip8qrNYUcpkOHUT5OZ0bUcNNVZQ9RLlg==", - "cpu": [ - "arm" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/android-arm64": { - "version": "0.25.12", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.25.12.tgz", - "integrity": "sha512-6AAmLG7zwD1Z159jCKPvAxZd4y/VTO0VkprYy+3N2FtJ8+BQWFXU+OxARIwA46c5tdD9SsKGZ/1ocqBS/gAKHg==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/android-x64": { - "version": "0.25.12", - "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.25.12.tgz", - "integrity": "sha512-5jbb+2hhDHx5phYR2By8GTWEzn6I9UqR11Kwf22iKbNpYrsmRB18aX/9ivc5cabcUiAT/wM+YIZ6SG9QO6a8kg==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=18" - } - }, "node_modules/@esbuild/darwin-arm64": { "version": "0.25.12", "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.25.12.tgz", @@ -3660,367 +3546,10 @@ "node": ">=18" } }, - "node_modules/@esbuild/darwin-x64": { - "version": "0.25.12", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.25.12.tgz", - "integrity": "sha512-HQ9ka4Kx21qHXwtlTUVbKJOAnmG1ipXhdWTmNXiPzPfWKpXqASVcWdnf2bnL73wgjNrFXAa3yYvBSd9pzfEIpA==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/freebsd-arm64": { - "version": "0.25.12", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.25.12.tgz", - "integrity": "sha512-gA0Bx759+7Jve03K1S0vkOu5Lg/85dou3EseOGUes8flVOGxbhDDh/iZaoek11Y8mtyKPGF3vP8XhnkDEAmzeg==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/freebsd-x64": { - "version": "0.25.12", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.25.12.tgz", - "integrity": "sha512-TGbO26Yw2xsHzxtbVFGEXBFH0FRAP7gtcPE7P5yP7wGy7cXK2oO7RyOhL5NLiqTlBh47XhmIUXuGciXEqYFfBQ==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/linux-arm": { - "version": "0.25.12", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.25.12.tgz", - "integrity": "sha512-lPDGyC1JPDou8kGcywY0YILzWlhhnRjdof3UlcoqYmS9El818LLfJJc3PXXgZHrHCAKs/Z2SeZtDJr5MrkxtOw==", - "cpu": [ - "arm" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/linux-arm64": { - "version": "0.25.12", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.25.12.tgz", - "integrity": "sha512-8bwX7a8FghIgrupcxb4aUmYDLp8pX06rGh5HqDT7bB+8Rdells6mHvrFHHW2JAOPZUbnjUpKTLg6ECyzvas2AQ==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/linux-ia32": { - "version": "0.25.12", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.25.12.tgz", - "integrity": "sha512-0y9KrdVnbMM2/vG8KfU0byhUN+EFCny9+8g202gYqSSVMonbsCfLjUO+rCci7pM0WBEtz+oK/PIwHkzxkyharA==", - "cpu": [ - "ia32" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/linux-loong64": { - "version": "0.25.12", - "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.25.12.tgz", - "integrity": "sha512-h///Lr5a9rib/v1GGqXVGzjL4TMvVTv+s1DPoxQdz7l/AYv6LDSxdIwzxkrPW438oUXiDtwM10o9PmwS/6Z0Ng==", - "cpu": [ - "loong64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/linux-mips64el": { - "version": "0.25.12", - "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.25.12.tgz", - "integrity": "sha512-iyRrM1Pzy9GFMDLsXn1iHUm18nhKnNMWscjmp4+hpafcZjrr2WbT//d20xaGljXDBYHqRcl8HnxbX6uaA/eGVw==", - "cpu": [ - "mips64el" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/linux-ppc64": { - "version": "0.25.12", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.25.12.tgz", - "integrity": "sha512-9meM/lRXxMi5PSUqEXRCtVjEZBGwB7P/D4yT8UG/mwIdze2aV4Vo6U5gD3+RsoHXKkHCfSxZKzmDssVlRj1QQA==", - "cpu": [ - "ppc64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/linux-riscv64": { - "version": "0.25.12", - "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.25.12.tgz", - "integrity": "sha512-Zr7KR4hgKUpWAwb1f3o5ygT04MzqVrGEGXGLnj15YQDJErYu/BGg+wmFlIDOdJp0PmB0lLvxFIOXZgFRrdjR0w==", - "cpu": [ - "riscv64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/linux-s390x": { - "version": "0.25.12", - "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.25.12.tgz", - "integrity": "sha512-MsKncOcgTNvdtiISc/jZs/Zf8d0cl/t3gYWX8J9ubBnVOwlk65UIEEvgBORTiljloIWnBzLs4qhzPkJcitIzIg==", - "cpu": [ - "s390x" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/linux-x64": { - "version": "0.25.12", - "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.25.12.tgz", - "integrity": "sha512-uqZMTLr/zR/ed4jIGnwSLkaHmPjOjJvnm6TVVitAa08SLS9Z0VM8wIRx7gWbJB5/J54YuIMInDquWyYvQLZkgw==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/netbsd-arm64": { - "version": "0.25.12", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.25.12.tgz", - "integrity": "sha512-xXwcTq4GhRM7J9A8Gv5boanHhRa/Q9KLVmcyXHCTaM4wKfIpWkdXiMog/KsnxzJ0A1+nD+zoecuzqPmCRyBGjg==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "netbsd" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/netbsd-x64": { - "version": "0.25.12", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.25.12.tgz", - "integrity": "sha512-Ld5pTlzPy3YwGec4OuHh1aCVCRvOXdH8DgRjfDy/oumVovmuSzWfnSJg+VtakB9Cm0gxNO9BzWkj6mtO1FMXkQ==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "netbsd" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/openbsd-arm64": { - "version": "0.25.12", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.25.12.tgz", - "integrity": "sha512-fF96T6KsBo/pkQI950FARU9apGNTSlZGsv1jZBAlcLL1MLjLNIWPBkj5NlSz8aAzYKg+eNqknrUJ24QBybeR5A==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "openbsd" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/openbsd-x64": { - "version": "0.25.12", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.25.12.tgz", - "integrity": "sha512-MZyXUkZHjQxUvzK7rN8DJ3SRmrVrke8ZyRusHlP+kuwqTcfWLyqMOE3sScPPyeIXN/mDJIfGXvcMqCgYKekoQw==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "openbsd" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/openharmony-arm64": { - "version": "0.25.12", - "resolved": "https://registry.npmjs.org/@esbuild/openharmony-arm64/-/openharmony-arm64-0.25.12.tgz", - "integrity": "sha512-rm0YWsqUSRrjncSXGA7Zv78Nbnw4XL6/dzr20cyrQf7ZmRcsovpcRBdhD43Nuk3y7XIoW2OxMVvwuRvk9XdASg==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "openharmony" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/sunos-x64": { - "version": "0.25.12", - "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.25.12.tgz", - "integrity": "sha512-3wGSCDyuTHQUzt0nV7bocDy72r2lI33QL3gkDNGkod22EsYl04sMf0qLb8luNKTOmgF/eDEDP5BFNwoBKH441w==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "sunos" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/win32-arm64": { - "version": "0.25.12", - "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.25.12.tgz", - "integrity": "sha512-rMmLrur64A7+DKlnSuwqUdRKyd3UE7oPJZmnljqEptesKM8wx9J8gx5u0+9Pq0fQQW8vqeKebwNXdfOyP+8Bsg==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/win32-ia32": { - "version": "0.25.12", - "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.25.12.tgz", - "integrity": "sha512-HkqnmmBoCbCwxUKKNPBixiWDGCpQGVsrQfJoVGYLPT41XWF8lHuE5N6WhVia2n4o5QK5M4tYr21827fNhi4byQ==", - "cpu": [ - "ia32" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/win32-x64": { - "version": "0.25.12", - "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.25.12.tgz", - "integrity": "sha512-alJC0uCZpTFrSL0CCDjcgleBXPnCrEAhTBILpeAp7M/OFgoqtAetfBzX0xM00MUsVVPpVjlPuMbREqnZCXaTnA==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=18" - } - }, "node_modules/@eslint-community/eslint-utils": { - "version": "4.9.1", - "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.9.1.tgz", - "integrity": "sha512-phrYmNiYppR7znFEdqgfWHXR6NCkZEK7hwWDHZUjit/2/U0r6XvkDl0SYnoM51Hq7FhCGdLDT6zxCCOY1hexsQ==", + "version": "4.9.0", + "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.9.0.tgz", + "integrity": "sha512-ayVFHdtZ+hsq1t2Dy24wCmGXGe4q9Gu3smhLYALJrr473ZH27MsnSL+LKUlimp4BWJqMDMLmPpx/Q9R3OAlL4g==", "dev": true, "license": "MIT", "dependencies": { @@ -4177,27 +3706,27 @@ } }, "node_modules/@expo/cli": { - "version": "54.0.21", - "resolved": "https://registry.npmjs.org/@expo/cli/-/cli-54.0.21.tgz", - "integrity": "sha512-L/FdpyZDsg/Nq6xW6kfiyF9DUzKfLZCKFXEVZcDqCNar6bXxQVotQyvgexRvtUF5nLinuT/UafLOdC3FUALUmA==", + "version": "54.0.19", + "resolved": "https://registry.npmjs.org/@expo/cli/-/cli-54.0.19.tgz", + "integrity": "sha512-Za+Ena29uYkq2c1Lbh+r3VrooR/mW7c9dahoH4WvL1T9ttbfAeu7sJmCuWZo88bZ4bFsOpE5fYne71DK11iSrQ==", "license": "MIT", "optional": true, "peer": true, "dependencies": { "@0no-co/graphql.web": "^1.0.8", - "@expo/code-signing-certificates": "^0.0.6", - "@expo/config": "~12.0.13", - "@expo/config-plugins": "~54.0.4", + "@expo/code-signing-certificates": "^0.0.5", + "@expo/config": "~12.0.12", + "@expo/config-plugins": "~54.0.3", "@expo/devcert": "^1.2.1", "@expo/env": "~2.0.8", "@expo/image-utils": "^0.8.8", "@expo/json-file": "^10.0.8", - "@expo/metro": "~54.2.0", - "@expo/metro-config": "~54.0.13", + "@expo/metro": "~54.1.0", + "@expo/metro-config": "~54.0.11", "@expo/osascript": "^2.3.8", "@expo/package-manager": "^1.9.9", "@expo/plist": "^0.4.8", - "@expo/prebuild-config": "^54.0.8", + "@expo/prebuild-config": "^54.0.7", "@expo/schema-utils": "^0.1.8", "@expo/spawn-async": "^1.7.2", "@expo/ws-tunnel": "^1.0.1", @@ -4222,7 +3751,7 @@ "glob": "^13.0.0", "lan-network": "^0.1.6", "minimatch": "^9.0.0", - "node-forge": "^1.3.3", + "node-forge": "^1.3.1", "npm-package-arg": "^11.0.0", "ora": "^3.4.0", "picomatch": "^3.0.1", @@ -4763,26 +4292,27 @@ } }, "node_modules/@expo/code-signing-certificates": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/@expo/code-signing-certificates/-/code-signing-certificates-0.0.6.tgz", - "integrity": "sha512-iNe0puxwBNEcuua9gmTGzq+SuMDa0iATai1FlFTMHJ/vUmKvN/V//drXoLJkVb5i5H3iE/n/qIJxyoBnXouD0w==", + "version": "0.0.5", + "resolved": "https://registry.npmjs.org/@expo/code-signing-certificates/-/code-signing-certificates-0.0.5.tgz", + "integrity": "sha512-BNhXkY1bblxKZpltzAx98G2Egj9g1Q+JRcvR7E99DOj862FTCX+ZPsAUtPTr7aHxwtrL7+fL3r0JSmM9kBm+Bw==", "license": "MIT", "optional": true, "peer": true, "dependencies": { - "node-forge": "^1.3.3" + "node-forge": "^1.2.1", + "nullthrows": "^1.1.1" } }, "node_modules/@expo/config": { - "version": "12.0.13", - "resolved": "https://registry.npmjs.org/@expo/config/-/config-12.0.13.tgz", - "integrity": "sha512-Cu52arBa4vSaupIWsF0h7F/Cg//N374nYb7HAxV0I4KceKA7x2UXpYaHOL7EEYYvp7tZdThBjvGpVmr8ScIvaQ==", + "version": "12.0.12", + "resolved": "https://registry.npmjs.org/@expo/config/-/config-12.0.12.tgz", + "integrity": "sha512-X2MW86+ulLpMGvdgfvpl2EOBAKUlwvnvoPwdaZeeyWufGopn1nTUeh4C9gMsplDaP1kXv9sLXVhOoUoX6g9PvQ==", "license": "MIT", "optional": true, "peer": true, "dependencies": { "@babel/code-frame": "~7.10.4", - "@expo/config-plugins": "~54.0.4", + "@expo/config-plugins": "~54.0.3", "@expo/config-types": "^54.0.10", "@expo/json-file": "^10.0.8", "deepmerge": "^4.3.1", @@ -5179,33 +4709,31 @@ } }, "node_modules/@expo/metro": { - "version": "54.2.0", - "resolved": "https://registry.npmjs.org/@expo/metro/-/metro-54.2.0.tgz", - "integrity": "sha512-h68TNZPGsk6swMmLm9nRSnE2UXm48rWwgcbtAHVMikXvbxdS41NDHHeqg1rcQ9AbznDRp6SQVC2MVpDnsRKU1w==", + "version": "54.1.0", + "resolved": "https://registry.npmjs.org/@expo/metro/-/metro-54.1.0.tgz", + "integrity": "sha512-MgdeRNT/LH0v1wcO0TZp9Qn8zEF0X2ACI0wliPtv5kXVbXWI+yK9GyrstwLAiTXlULKVIg3HVSCCvmLu0M3tnw==", "license": "MIT", "optional": true, "peer": true, "dependencies": { - "metro": "0.83.3", - "metro-babel-transformer": "0.83.3", - "metro-cache": "0.83.3", - "metro-cache-key": "0.83.3", - "metro-config": "0.83.3", - "metro-core": "0.83.3", - "metro-file-map": "0.83.3", - "metro-minify-terser": "0.83.3", - "metro-resolver": "0.83.3", - "metro-runtime": "0.83.3", - "metro-source-map": "0.83.3", - "metro-symbolicate": "0.83.3", - "metro-transform-plugins": "0.83.3", - "metro-transform-worker": "0.83.3" + "metro": "0.83.2", + "metro-babel-transformer": "0.83.2", + "metro-cache": "0.83.2", + "metro-cache-key": "0.83.2", + "metro-config": "0.83.2", + "metro-core": "0.83.2", + "metro-file-map": "0.83.2", + "metro-resolver": "0.83.2", + "metro-runtime": "0.83.2", + "metro-source-map": "0.83.2", + "metro-transform-plugins": "0.83.2", + "metro-transform-worker": "0.83.2" } }, "node_modules/@expo/metro-config": { - "version": "54.0.13", - "resolved": "https://registry.npmjs.org/@expo/metro-config/-/metro-config-54.0.13.tgz", - "integrity": "sha512-RRufMCgLR2Za1WGsh02OatIJo5qZFt31yCnIOSfoubNc3Qqe92Z41pVsbrFnmw5CIaisv1NgdBy05DHe7pEyuw==", + "version": "54.0.11", + "resolved": "https://registry.npmjs.org/@expo/metro-config/-/metro-config-54.0.11.tgz", + "integrity": "sha512-Bmht6VW9w6Wk49EFqkMzYpICV++Q3Kuqh2KygjH/e5mj/9wHSCWLkmJYmUn0XaOo4bm6BwOp/hO3r5YNKP3AeQ==", "license": "MIT", "optional": true, "peer": true, @@ -5213,10 +4741,10 @@ "@babel/code-frame": "^7.20.0", "@babel/core": "^7.20.0", "@babel/generator": "^7.20.5", - "@expo/config": "~12.0.13", + "@expo/config": "~12.0.12", "@expo/env": "~2.0.8", "@expo/json-file": "~10.0.8", - "@expo/metro": "~54.2.0", + "@expo/metro": "~54.1.0", "@expo/spawn-async": "^1.7.2", "browserslist": "^4.25.0", "chalk": "^4.1.0", @@ -5576,16 +5104,16 @@ } }, "node_modules/@expo/prebuild-config": { - "version": "54.0.8", - "resolved": "https://registry.npmjs.org/@expo/prebuild-config/-/prebuild-config-54.0.8.tgz", - "integrity": "sha512-EA7N4dloty2t5Rde+HP0IEE+nkAQiu4A/+QGZGT9mFnZ5KKjPPkqSyYcRvP5bhQE10D+tvz6X0ngZpulbMdbsg==", + "version": "54.0.7", + "resolved": "https://registry.npmjs.org/@expo/prebuild-config/-/prebuild-config-54.0.7.tgz", + "integrity": "sha512-cKqBsiwcFFzpDWgtvemrCqJULJRLDLKo2QMF74NusoGNpfPI3vQVry1iwnYLeGht02AeD3dvfhpqBczD3wchxA==", "license": "MIT", "optional": true, "peer": true, "dependencies": { - "@expo/config": "~12.0.13", - "@expo/config-plugins": "~54.0.4", - "@expo/config-types": "^54.0.10", + "@expo/config": "~12.0.11", + "@expo/config-plugins": "~54.0.3", + "@expo/config-types": "^54.0.9", "@expo/image-utils": "^0.8.8", "@expo/json-file": "^10.0.8", "@react-native/normalize-colors": "0.81.5", @@ -5697,9 +5225,9 @@ } }, "node_modules/@frequency-chain/api-augment": { - "version": "1.17.8", - "resolved": "https://registry.npmjs.org/@frequency-chain/api-augment/-/api-augment-1.17.8.tgz", - "integrity": "sha512-L8aLHO7LDDuMkZ6KTjZEJ/O7qSNibwR8qG7f/F6UjIB9ng8am/otor4Q/MVycMIPW5fR30ixZI7apxIGGc6rHw==", + "version": "2.0.0-rc3", + "resolved": "https://registry.npmjs.org/@frequency-chain/api-augment/-/api-augment-2.0.0-rc3.tgz", + "integrity": "sha512-lHUNgyH51Qi20yqGWa9clQdjfhUS7gJeGq7OFZjwOhSVBN8315MNAesySBP9w4Ukaoy4XPfnN7VtdZSHCfIDFA==", "license": "Apache-2.0", "dependencies": { "@polkadot/api": "16.4.8", @@ -5708,9 +5236,9 @@ } }, "node_modules/@frequency-chain/ethereum-utils": { - "version": "1.17.8", - "resolved": "https://registry.npmjs.org/@frequency-chain/ethereum-utils/-/ethereum-utils-1.17.8.tgz", - "integrity": "sha512-xVjZUAfLB6FwtqbdJBOwUbmIFVNqBKz33x4psOQftwrgrzWqaophO74C/MrwyngZMU4nereWg4DIPEMdSK8c1Q==", + "version": "2.0.0-rc3", + "resolved": "https://registry.npmjs.org/@frequency-chain/ethereum-utils/-/ethereum-utils-2.0.0-rc3.tgz", + "integrity": "sha512-TUcLI27Y7vpCFxU0tjhSmy2BtL+kiF0prRR6cp7WMx8FdyInQKTS8nYIV7F59+EFqu+XAizhU3uu6419avN37w==", "license": "Apache-2.0", "dependencies": { "@polkadot/api": "16.4.8", @@ -7393,71 +6921,6 @@ "darwin" ] }, - "node_modules/@msgpackr-extract/msgpackr-extract-darwin-x64": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@msgpackr-extract/msgpackr-extract-darwin-x64/-/msgpackr-extract-darwin-x64-3.0.3.tgz", - "integrity": "sha512-mdzd3AVzYKuUmiWOQ8GNhl64/IoFGol569zNRdkLReh6LRLHOXxU4U8eq0JwaD8iFHdVGqSy4IjFL4reoWCDFw==", - "cpu": [ - "x64" - ], - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ] - }, - "node_modules/@msgpackr-extract/msgpackr-extract-linux-arm": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@msgpackr-extract/msgpackr-extract-linux-arm/-/msgpackr-extract-linux-arm-3.0.3.tgz", - "integrity": "sha512-fg0uy/dG/nZEXfYilKoRe7yALaNmHoYeIoJuJ7KJ+YyU2bvY8vPv27f7UKhGRpY6euFYqEVhxCFZgAUNQBM3nw==", - "cpu": [ - "arm" - ], - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@msgpackr-extract/msgpackr-extract-linux-arm64": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@msgpackr-extract/msgpackr-extract-linux-arm64/-/msgpackr-extract-linux-arm64-3.0.3.tgz", - "integrity": "sha512-YxQL+ax0XqBJDZiKimS2XQaf+2wDGVa1enVRGzEvLLVFeqa5kx2bWbtcSXgsxjQB7nRqqIGFIcLteF/sHeVtQg==", - "cpu": [ - "arm64" - ], - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@msgpackr-extract/msgpackr-extract-linux-x64": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@msgpackr-extract/msgpackr-extract-linux-x64/-/msgpackr-extract-linux-x64-3.0.3.tgz", - "integrity": "sha512-cvwNfbP07pKUfq1uH+S6KJ7dT9K8WOE4ZiAcsrSes+UY55E/0jLYc+vq+DO7jlmqRb5zAggExKm0H7O/CBaesg==", - "cpu": [ - "x64" - ], - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@msgpackr-extract/msgpackr-extract-win32-x64": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@msgpackr-extract/msgpackr-extract-win32-x64/-/msgpackr-extract-win32-x64-3.0.3.tgz", - "integrity": "sha512-x0fWaQtYp4E6sktbsdAqnehxDgEc/VwM7uLsRCYWaiGu0ykYdZPiS8zCWdnjHwyiumousxfBm4SO31eXqwEZhQ==", - "cpu": [ - "x64" - ], - "license": "MIT", - "optional": true, - "os": [ - "win32" - ] - }, "node_modules/@multiformats/base-x": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/@multiformats/base-x/-/base-x-4.0.1.tgz", @@ -7530,19 +6993,6 @@ "multiformats": "^13.0.0" } }, - "node_modules/@napi-rs/wasm-runtime": { - "version": "0.2.12", - "resolved": "https://registry.npmjs.org/@napi-rs/wasm-runtime/-/wasm-runtime-0.2.12.tgz", - "integrity": "sha512-ZVWUcfwY4E/yPitQJl481FjFo3K22D6qF0DuFH6Y/nbnE11GY5uguDxZMGXPQ8WQ0128MXQD7TnfHyK4oWoIJQ==", - "dev": true, - "license": "MIT", - "optional": true, - "dependencies": { - "@emnapi/core": "^1.4.3", - "@emnapi/runtime": "^1.4.3", - "@tybys/wasm-util": "^0.10.0" - } - }, "node_modules/@nearform/heap-profiler": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/@nearform/heap-profiler/-/heap-profiler-2.0.0.tgz", @@ -9099,13 +8549,13 @@ } }, "node_modules/@projectlibertylabs/frequency-scenario-template": { - "version": "1.1.15", - "resolved": "https://registry.npmjs.org/@projectlibertylabs/frequency-scenario-template/-/frequency-scenario-template-1.1.15.tgz", - "integrity": "sha512-bFZNhxWuxJt4j9BoakkNNI45l4TEwCIZmKl0upAuwKwk6Yv2t0QfhlfyXIPSvV8PywDfJqS6lim6xTkHOHtLow==", + "version": "2.0.0-rc5", + "resolved": "https://registry.npmjs.org/@projectlibertylabs/frequency-scenario-template/-/frequency-scenario-template-2.0.0-rc5.tgz", + "integrity": "sha512-4SggukI0Jh1MdfuWMdbl/6FgaMgMtgyVGycEcOGBRDJV/SIMlQHLZMOGAkvjNsVQD/dFhkWZCR1GbX48Eb+zFA==", "dev": true, "license": "Apache-2.0", "dependencies": { - "@frequency-chain/api-augment": "1.17.8", + "@frequency-chain/api-augment": "2.0.0-rc3", "@polkadot/api": "16.4.8", "@polkadot/keyring": "13.5.7", "@polkadot/types": "16.4.8", @@ -9150,9 +8600,9 @@ } }, "node_modules/@projectlibertylabs/siwf": { - "version": "2.3.6", - "resolved": "https://registry.npmjs.org/@projectlibertylabs/siwf/-/siwf-2.3.6.tgz", - "integrity": "sha512-R9EP+r0S5xo7awHKZQKrGj4FJXUtcDgAftqqyYf8vYWbOEA3yzmKNQ66dfv3USk1LCiQIWczKlFrJifmpHit3g==", + "version": "2.4.0-rc1", + "resolved": "https://registry.npmjs.org/@projectlibertylabs/siwf/-/siwf-2.4.0-rc1.tgz", + "integrity": "sha512-Ryaom3gHBIJdvFyEybENeqSYXlTHYVc/d24Lb8sY+PYFRGiY9WRom9PEJqCd4/LNcV1rIG6qwEeCwZOLZk0YGg==", "license": "Apache-2.0", "dependencies": { "@digitalbazaar/ed25519-multikey": "1.3.1", @@ -9161,7 +8611,7 @@ "@digitalcredentials/jsonld-signatures": "12.0.1", "@digitalcredentials/sha256-universal": "1.1.1", "@digitalcredentials/vc": "10.0.1", - "@frequency-chain/ethereum-utils": "1.17.8", + "@frequency-chain/ethereum-utils": "2.0.0-rc3", "@noble/hashes": "2.0.1", "@polkadot/keyring": "13.5.7", "@polkadot/types": "16.4.8", @@ -9255,9 +8705,9 @@ "license": "BSD-3-Clause" }, "node_modules/@react-native/assets-registry": { - "version": "0.83.1", - "resolved": "https://registry.npmjs.org/@react-native/assets-registry/-/assets-registry-0.83.1.tgz", - "integrity": "sha512-AT7/T6UwQqO39bt/4UL5EXvidmrddXrt0yJa7ENXndAv+8yBzMsZn6fyiax6+ERMt9GLzAECikv3lj22cn2wJA==", + "version": "0.83.0", + "resolved": "https://registry.npmjs.org/@react-native/assets-registry/-/assets-registry-0.83.0.tgz", + "integrity": "sha512-EmGSKDvmnEnBrTK75T+0Syt6gy/HACOTfziw5+392Kr1Bb28Rv26GyOIkvptnT+bb2VDHU0hx9G0vSy5/S3rmQ==", "license": "MIT", "optional": true, "peer": true, @@ -9388,14 +8838,14 @@ } }, "node_modules/@react-native/community-cli-plugin": { - "version": "0.83.1", - "resolved": "https://registry.npmjs.org/@react-native/community-cli-plugin/-/community-cli-plugin-0.83.1.tgz", - "integrity": "sha512-FqR1ftydr08PYlRbrDF06eRiiiGOK/hNmz5husv19sK6iN5nHj1SMaCIVjkH/a5vryxEddyFhU6PzO/uf4kOHg==", + "version": "0.83.0", + "resolved": "https://registry.npmjs.org/@react-native/community-cli-plugin/-/community-cli-plugin-0.83.0.tgz", + "integrity": "sha512-bJD5pLURgKY2YK0R6gUsFWHiblSAFt1Xyc2fsyCL8XBnB7kJfVhLAKGItk6j1QZbwm1Io41ekZxBmZdyQqIDrg==", "license": "MIT", "optional": true, "peer": true, "dependencies": { - "@react-native/dev-middleware": "0.83.1", + "@react-native/dev-middleware": "0.83.0", "debug": "^4.4.0", "invariant": "^2.2.4", "metro": "^0.83.3", @@ -9419,10 +8869,43 @@ } } }, + "node_modules/@react-native/community-cli-plugin/node_modules/@jest/schemas": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-29.6.3.tgz", + "integrity": "sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==", + "license": "MIT", + "optional": true, + "peer": true, + "dependencies": { + "@sinclair/typebox": "^0.27.8" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@react-native/community-cli-plugin/node_modules/@jest/types": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.6.3.tgz", + "integrity": "sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==", + "license": "MIT", + "optional": true, + "peer": true, + "dependencies": { + "@jest/schemas": "^29.6.3", + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^17.0.8", + "chalk": "^4.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, "node_modules/@react-native/community-cli-plugin/node_modules/@react-native/debugger-frontend": { - "version": "0.83.1", - "resolved": "https://registry.npmjs.org/@react-native/debugger-frontend/-/debugger-frontend-0.83.1.tgz", - "integrity": "sha512-01Rn3goubFvPjHXONooLmsW0FLxJDKIUJNOlOS0cPtmmTIx9YIjxhe/DxwHXGk7OnULd7yl3aYy7WlBsEd5Xmg==", + "version": "0.83.0", + "resolved": "https://registry.npmjs.org/@react-native/debugger-frontend/-/debugger-frontend-0.83.0.tgz", + "integrity": "sha512-7XVbkH8nCjLKLe8z5DS37LNP62/QNNya/YuLlVoLfsiB54nR/kNZij5UU7rS0npAZ3WN7LR0anqLlYnzDd0JHA==", "license": "BSD-3-Clause", "optional": true, "peer": true, @@ -9431,16 +8914,16 @@ } }, "node_modules/@react-native/community-cli-plugin/node_modules/@react-native/dev-middleware": { - "version": "0.83.1", - "resolved": "https://registry.npmjs.org/@react-native/dev-middleware/-/dev-middleware-0.83.1.tgz", - "integrity": "sha512-QJaSfNRzj3Lp7MmlCRgSBlt1XZ38xaBNXypXAp/3H3OdFifnTZOeYOpFmcpjcXYnDqkxetuwZg8VL65SQhB8dg==", + "version": "0.83.0", + "resolved": "https://registry.npmjs.org/@react-native/dev-middleware/-/dev-middleware-0.83.0.tgz", + "integrity": "sha512-HWn42tbp0h8RWttua6d6PjseaSr3IdwkaoqVxhiM9kVDY7Ro00eO7tdlVgSzZzhIibdVS2b2C3x+sFoWhag1fA==", "license": "MIT", "optional": true, "peer": true, "dependencies": { "@isaacs/ttlcache": "^1.4.1", - "@react-native/debugger-frontend": "0.83.1", - "@react-native/debugger-shell": "0.83.1", + "@react-native/debugger-frontend": "0.83.0", + "@react-native/debugger-shell": "0.83.0", "chrome-launcher": "^0.15.2", "chromium-edge-launcher": "^0.2.0", "connect": "^3.6.5", @@ -9455,6 +8938,65 @@ "node": ">= 20.19.4" } }, + "node_modules/@react-native/community-cli-plugin/node_modules/@sinclair/typebox": { + "version": "0.27.8", + "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.27.8.tgz", + "integrity": "sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==", + "license": "MIT", + "optional": true, + "peer": true + }, + "node_modules/@react-native/community-cli-plugin/node_modules/accepts": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", + "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", + "license": "MIT", + "optional": true, + "peer": true, + "dependencies": { + "mime-types": "~2.1.34", + "negotiator": "0.6.3" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/@react-native/community-cli-plugin/node_modules/ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "license": "MIT", + "optional": true, + "peer": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/@react-native/community-cli-plugin/node_modules/camelcase": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", + "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", + "license": "MIT", + "optional": true, + "peer": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@react-native/community-cli-plugin/node_modules/ci-info": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz", + "integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==", + "license": "MIT", + "optional": true, + "peer": true + }, "node_modules/@react-native/community-cli-plugin/node_modules/fresh": { "version": "0.5.2", "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", @@ -9466,6 +9008,405 @@ "node": ">= 0.6" } }, + "node_modules/@react-native/community-cli-plugin/node_modules/hermes-estree": { + "version": "0.32.0", + "resolved": "https://registry.npmjs.org/hermes-estree/-/hermes-estree-0.32.0.tgz", + "integrity": "sha512-KWn3BqnlDOl97Xe1Yviur6NbgIZ+IP+UVSpshlZWkq+EtoHg6/cwiDj/osP9PCEgFE15KBm1O55JRwbMEm5ejQ==", + "license": "MIT", + "optional": true, + "peer": true + }, + "node_modules/@react-native/community-cli-plugin/node_modules/hermes-parser": { + "version": "0.32.0", + "resolved": "https://registry.npmjs.org/hermes-parser/-/hermes-parser-0.32.0.tgz", + "integrity": "sha512-g4nBOWFpuiTqjR3LZdRxKUkij9iyveWeuks7INEsMX741f3r9xxrOe8TeQfUxtda0eXmiIFiMQzoeSQEno33Hw==", + "license": "MIT", + "optional": true, + "peer": true, + "dependencies": { + "hermes-estree": "0.32.0" + } + }, + "node_modules/@react-native/community-cli-plugin/node_modules/jest-util": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-29.7.0.tgz", + "integrity": "sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA==", + "license": "MIT", + "optional": true, + "peer": true, + "dependencies": { + "@jest/types": "^29.6.3", + "@types/node": "*", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "graceful-fs": "^4.2.9", + "picomatch": "^2.2.3" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@react-native/community-cli-plugin/node_modules/jest-util/node_modules/ci-info": { + "version": "3.9.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.9.0.tgz", + "integrity": "sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/sibiraj-s" + } + ], + "license": "MIT", + "optional": true, + "peer": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/@react-native/community-cli-plugin/node_modules/jest-validate": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-29.7.0.tgz", + "integrity": "sha512-ZB7wHqaRGVw/9hST/OuFUReG7M8vKeq0/J2egIGLdvjHCmYqGARhzXmtgi+gVeZ5uXFF219aOc3Ls2yLg27tkw==", + "license": "MIT", + "optional": true, + "peer": true, + "dependencies": { + "@jest/types": "^29.6.3", + "camelcase": "^6.2.0", + "chalk": "^4.0.0", + "jest-get-type": "^29.6.3", + "leven": "^3.1.0", + "pretty-format": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@react-native/community-cli-plugin/node_modules/jest-worker": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-29.7.0.tgz", + "integrity": "sha512-eIz2msL/EzL9UFTFFx7jBTkeZfku0yUAyZZZmJ93H2TYEiroIx2PQjEXcwYtYl8zXCxb+PAmA2hLIt/6ZEkPHw==", + "license": "MIT", + "optional": true, + "peer": true, + "dependencies": { + "@types/node": "*", + "jest-util": "^29.7.0", + "merge-stream": "^2.0.0", + "supports-color": "^8.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@react-native/community-cli-plugin/node_modules/leven": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz", + "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==", + "license": "MIT", + "optional": true, + "peer": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/@react-native/community-cli-plugin/node_modules/metro": { + "version": "0.83.3", + "resolved": "https://registry.npmjs.org/metro/-/metro-0.83.3.tgz", + "integrity": "sha512-+rP+/GieOzkt97hSJ0MrPOuAH/jpaS21ZDvL9DJ35QYRDlQcwzcvUlGUf79AnQxq/2NPiS/AULhhM4TKutIt8Q==", + "license": "MIT", + "optional": true, + "peer": true, + "dependencies": { + "@babel/code-frame": "^7.24.7", + "@babel/core": "^7.25.2", + "@babel/generator": "^7.25.0", + "@babel/parser": "^7.25.3", + "@babel/template": "^7.25.0", + "@babel/traverse": "^7.25.3", + "@babel/types": "^7.25.2", + "accepts": "^1.3.7", + "chalk": "^4.0.0", + "ci-info": "^2.0.0", + "connect": "^3.6.5", + "debug": "^4.4.0", + "error-stack-parser": "^2.0.6", + "flow-enums-runtime": "^0.0.6", + "graceful-fs": "^4.2.4", + "hermes-parser": "0.32.0", + "image-size": "^1.0.2", + "invariant": "^2.2.4", + "jest-worker": "^29.7.0", + "jsc-safe-url": "^0.2.2", + "lodash.throttle": "^4.1.1", + "metro-babel-transformer": "0.83.3", + "metro-cache": "0.83.3", + "metro-cache-key": "0.83.3", + "metro-config": "0.83.3", + "metro-core": "0.83.3", + "metro-file-map": "0.83.3", + "metro-resolver": "0.83.3", + "metro-runtime": "0.83.3", + "metro-source-map": "0.83.3", + "metro-symbolicate": "0.83.3", + "metro-transform-plugins": "0.83.3", + "metro-transform-worker": "0.83.3", + "mime-types": "^2.1.27", + "nullthrows": "^1.1.1", + "serialize-error": "^2.1.0", + "source-map": "^0.5.6", + "throat": "^5.0.0", + "ws": "^7.5.10", + "yargs": "^17.6.2" + }, + "bin": { + "metro": "src/cli.js" + }, + "engines": { + "node": ">=20.19.4" + } + }, + "node_modules/@react-native/community-cli-plugin/node_modules/metro-babel-transformer": { + "version": "0.83.3", + "resolved": "https://registry.npmjs.org/metro-babel-transformer/-/metro-babel-transformer-0.83.3.tgz", + "integrity": "sha512-1vxlvj2yY24ES1O5RsSIvg4a4WeL7PFXgKOHvXTXiW0deLvQr28ExXj6LjwCCDZ4YZLhq6HddLpZnX4dEdSq5g==", + "license": "MIT", + "optional": true, + "peer": true, + "dependencies": { + "@babel/core": "^7.25.2", + "flow-enums-runtime": "^0.0.6", + "hermes-parser": "0.32.0", + "nullthrows": "^1.1.1" + }, + "engines": { + "node": ">=20.19.4" + } + }, + "node_modules/@react-native/community-cli-plugin/node_modules/metro-cache": { + "version": "0.83.3", + "resolved": "https://registry.npmjs.org/metro-cache/-/metro-cache-0.83.3.tgz", + "integrity": "sha512-3jo65X515mQJvKqK3vWRblxDEcgY55Sk3w4xa6LlfEXgQ9g1WgMh9m4qVZVwgcHoLy0a2HENTPCCX4Pk6s8c8Q==", + "license": "MIT", + "optional": true, + "peer": true, + "dependencies": { + "exponential-backoff": "^3.1.1", + "flow-enums-runtime": "^0.0.6", + "https-proxy-agent": "^7.0.5", + "metro-core": "0.83.3" + }, + "engines": { + "node": ">=20.19.4" + } + }, + "node_modules/@react-native/community-cli-plugin/node_modules/metro-cache-key": { + "version": "0.83.3", + "resolved": "https://registry.npmjs.org/metro-cache-key/-/metro-cache-key-0.83.3.tgz", + "integrity": "sha512-59ZO049jKzSmvBmG/B5bZ6/dztP0ilp0o988nc6dpaDsU05Cl1c/lRf+yx8m9WW/JVgbmfO5MziBU559XjI5Zw==", + "license": "MIT", + "optional": true, + "peer": true, + "dependencies": { + "flow-enums-runtime": "^0.0.6" + }, + "engines": { + "node": ">=20.19.4" + } + }, + "node_modules/@react-native/community-cli-plugin/node_modules/metro-config": { + "version": "0.83.3", + "resolved": "https://registry.npmjs.org/metro-config/-/metro-config-0.83.3.tgz", + "integrity": "sha512-mTel7ipT0yNjKILIan04bkJkuCzUUkm2SeEaTads8VfEecCh+ltXchdq6DovXJqzQAXuR2P9cxZB47Lg4klriA==", + "license": "MIT", + "optional": true, + "peer": true, + "dependencies": { + "connect": "^3.6.5", + "flow-enums-runtime": "^0.0.6", + "jest-validate": "^29.7.0", + "metro": "0.83.3", + "metro-cache": "0.83.3", + "metro-core": "0.83.3", + "metro-runtime": "0.83.3", + "yaml": "^2.6.1" + }, + "engines": { + "node": ">=20.19.4" + } + }, + "node_modules/@react-native/community-cli-plugin/node_modules/metro-core": { + "version": "0.83.3", + "resolved": "https://registry.npmjs.org/metro-core/-/metro-core-0.83.3.tgz", + "integrity": "sha512-M+X59lm7oBmJZamc96usuF1kusd5YimqG/q97g4Ac7slnJ3YiGglW5CsOlicTR5EWf8MQFxxjDoB6ytTqRe8Hw==", + "license": "MIT", + "optional": true, + "peer": true, + "dependencies": { + "flow-enums-runtime": "^0.0.6", + "lodash.throttle": "^4.1.1", + "metro-resolver": "0.83.3" + }, + "engines": { + "node": ">=20.19.4" + } + }, + "node_modules/@react-native/community-cli-plugin/node_modules/metro-file-map": { + "version": "0.83.3", + "resolved": "https://registry.npmjs.org/metro-file-map/-/metro-file-map-0.83.3.tgz", + "integrity": "sha512-jg5AcyE0Q9Xbbu/4NAwwZkmQn7doJCKGW0SLeSJmzNB9Z24jBe0AL2PHNMy4eu0JiKtNWHz9IiONGZWq7hjVTA==", + "license": "MIT", + "optional": true, + "peer": true, + "dependencies": { + "debug": "^4.4.0", + "fb-watchman": "^2.0.0", + "flow-enums-runtime": "^0.0.6", + "graceful-fs": "^4.2.4", + "invariant": "^2.2.4", + "jest-worker": "^29.7.0", + "micromatch": "^4.0.4", + "nullthrows": "^1.1.1", + "walker": "^1.0.7" + }, + "engines": { + "node": ">=20.19.4" + } + }, + "node_modules/@react-native/community-cli-plugin/node_modules/metro-minify-terser": { + "version": "0.83.3", + "resolved": "https://registry.npmjs.org/metro-minify-terser/-/metro-minify-terser-0.83.3.tgz", + "integrity": "sha512-O2BmfWj6FSfzBLrNCXt/rr2VYZdX5i6444QJU0fFoc7Ljg+Q+iqebwE3K0eTvkI6TRjELsXk1cjU+fXwAR4OjQ==", + "license": "MIT", + "optional": true, + "peer": true, + "dependencies": { + "flow-enums-runtime": "^0.0.6", + "terser": "^5.15.0" + }, + "engines": { + "node": ">=20.19.4" + } + }, + "node_modules/@react-native/community-cli-plugin/node_modules/metro-resolver": { + "version": "0.83.3", + "resolved": "https://registry.npmjs.org/metro-resolver/-/metro-resolver-0.83.3.tgz", + "integrity": "sha512-0js+zwI5flFxb1ktmR///bxHYg7OLpRpWZlBBruYG8OKYxeMP7SV0xQ/o/hUelrEMdK4LJzqVtHAhBm25LVfAQ==", + "license": "MIT", + "optional": true, + "peer": true, + "dependencies": { + "flow-enums-runtime": "^0.0.6" + }, + "engines": { + "node": ">=20.19.4" + } + }, + "node_modules/@react-native/community-cli-plugin/node_modules/metro-runtime": { + "version": "0.83.3", + "resolved": "https://registry.npmjs.org/metro-runtime/-/metro-runtime-0.83.3.tgz", + "integrity": "sha512-JHCJb9ebr9rfJ+LcssFYA2x1qPYuSD/bbePupIGhpMrsla7RCwC/VL3yJ9cSU+nUhU4c9Ixxy8tBta+JbDeZWw==", + "license": "MIT", + "optional": true, + "peer": true, + "dependencies": { + "@babel/runtime": "^7.25.0", + "flow-enums-runtime": "^0.0.6" + }, + "engines": { + "node": ">=20.19.4" + } + }, + "node_modules/@react-native/community-cli-plugin/node_modules/metro-source-map": { + "version": "0.83.3", + "resolved": "https://registry.npmjs.org/metro-source-map/-/metro-source-map-0.83.3.tgz", + "integrity": "sha512-xkC3qwUBh2psVZgVavo8+r2C9Igkk3DibiOXSAht1aYRRcztEZNFtAMtfSB7sdO2iFMx2Mlyu++cBxz/fhdzQg==", + "license": "MIT", + "optional": true, + "peer": true, + "dependencies": { + "@babel/traverse": "^7.25.3", + "@babel/traverse--for-generate-function-map": "npm:@babel/traverse@^7.25.3", + "@babel/types": "^7.25.2", + "flow-enums-runtime": "^0.0.6", + "invariant": "^2.2.4", + "metro-symbolicate": "0.83.3", + "nullthrows": "^1.1.1", + "ob1": "0.83.3", + "source-map": "^0.5.6", + "vlq": "^1.0.0" + }, + "engines": { + "node": ">=20.19.4" + } + }, + "node_modules/@react-native/community-cli-plugin/node_modules/metro-symbolicate": { + "version": "0.83.3", + "resolved": "https://registry.npmjs.org/metro-symbolicate/-/metro-symbolicate-0.83.3.tgz", + "integrity": "sha512-F/YChgKd6KbFK3eUR5HdUsfBqVsanf5lNTwFd4Ca7uuxnHgBC3kR/Hba/RGkenR3pZaGNp5Bu9ZqqP52Wyhomw==", + "license": "MIT", + "optional": true, + "peer": true, + "dependencies": { + "flow-enums-runtime": "^0.0.6", + "invariant": "^2.2.4", + "metro-source-map": "0.83.3", + "nullthrows": "^1.1.1", + "source-map": "^0.5.6", + "vlq": "^1.0.0" + }, + "bin": { + "metro-symbolicate": "src/index.js" + }, + "engines": { + "node": ">=20.19.4" + } + }, + "node_modules/@react-native/community-cli-plugin/node_modules/metro-transform-plugins": { + "version": "0.83.3", + "resolved": "https://registry.npmjs.org/metro-transform-plugins/-/metro-transform-plugins-0.83.3.tgz", + "integrity": "sha512-eRGoKJU6jmqOakBMH5kUB7VitEWiNrDzBHpYbkBXW7C5fUGeOd2CyqrosEzbMK5VMiZYyOcNFEphvxk3OXey2A==", + "license": "MIT", + "optional": true, + "peer": true, + "dependencies": { + "@babel/core": "^7.25.2", + "@babel/generator": "^7.25.0", + "@babel/template": "^7.25.0", + "@babel/traverse": "^7.25.3", + "flow-enums-runtime": "^0.0.6", + "nullthrows": "^1.1.1" + }, + "engines": { + "node": ">=20.19.4" + } + }, + "node_modules/@react-native/community-cli-plugin/node_modules/metro-transform-worker": { + "version": "0.83.3", + "resolved": "https://registry.npmjs.org/metro-transform-worker/-/metro-transform-worker-0.83.3.tgz", + "integrity": "sha512-Ztekew9t/gOIMZX1tvJOgX7KlSLL5kWykl0Iwu2cL2vKMKVALRl1hysyhUw0vjpAvLFx+Kfq9VLjnHIkW32fPA==", + "license": "MIT", + "optional": true, + "peer": true, + "dependencies": { + "@babel/core": "^7.25.2", + "@babel/generator": "^7.25.0", + "@babel/parser": "^7.25.3", + "@babel/types": "^7.25.2", + "flow-enums-runtime": "^0.0.6", + "metro": "0.83.3", + "metro-babel-transformer": "0.83.3", + "metro-cache": "0.83.3", + "metro-cache-key": "0.83.3", + "metro-minify-terser": "0.83.3", + "metro-source-map": "0.83.3", + "metro-transform-plugins": "0.83.3", + "nullthrows": "^1.1.1" + }, + "engines": { + "node": ">=20.19.4" + } + }, "node_modules/@react-native/community-cli-plugin/node_modules/mime": { "version": "1.6.0", "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", @@ -9480,6 +9421,86 @@ "node": ">=4" } }, + "node_modules/@react-native/community-cli-plugin/node_modules/mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "license": "MIT", + "optional": true, + "peer": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/@react-native/community-cli-plugin/node_modules/mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "license": "MIT", + "optional": true, + "peer": true, + "dependencies": { + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/@react-native/community-cli-plugin/node_modules/negotiator": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", + "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", + "license": "MIT", + "optional": true, + "peer": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/@react-native/community-cli-plugin/node_modules/ob1": { + "version": "0.83.3", + "resolved": "https://registry.npmjs.org/ob1/-/ob1-0.83.3.tgz", + "integrity": "sha512-egUxXCDwoWG06NGCS5s5AdcpnumHKJlfd3HH06P3m9TEMwwScfcY35wpQxbm9oHof+dM/lVH9Rfyu1elTVelSA==", + "license": "MIT", + "optional": true, + "peer": true, + "dependencies": { + "flow-enums-runtime": "^0.0.6" + }, + "engines": { + "node": ">=20.19.4" + } + }, + "node_modules/@react-native/community-cli-plugin/node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "license": "MIT", + "optional": true, + "peer": true, + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/@react-native/community-cli-plugin/node_modules/pretty-format": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz", + "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==", + "license": "MIT", + "optional": true, + "peer": true, + "dependencies": { + "@jest/schemas": "^29.6.3", + "ansi-styles": "^5.0.0", + "react-is": "^18.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, "node_modules/@react-native/community-cli-plugin/node_modules/send": { "version": "0.19.2", "resolved": "https://registry.npmjs.org/send/-/send-0.19.2.tgz", @@ -9525,6 +9546,17 @@ "optional": true, "peer": true }, + "node_modules/@react-native/community-cli-plugin/node_modules/serialize-error": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/serialize-error/-/serialize-error-2.1.0.tgz", + "integrity": "sha512-ghgmKt5o4Tly5yEG/UJp8qTd0AN7Xalw4XBtDEKP655B699qMEtra1WlXeE6WIvdEG481JvRxULKsInq/iNysw==", + "license": "MIT", + "optional": true, + "peer": true, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/@react-native/community-cli-plugin/node_modules/serve-static": { "version": "1.16.3", "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.16.3.tgz", @@ -9542,6 +9574,34 @@ "node": ">= 0.8.0" } }, + "node_modules/@react-native/community-cli-plugin/node_modules/source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==", + "license": "BSD-3-Clause", + "optional": true, + "peer": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/@react-native/community-cli-plugin/node_modules/supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "license": "MIT", + "optional": true, + "peer": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" + } + }, "node_modules/@react-native/community-cli-plugin/node_modules/ws": { "version": "7.5.10", "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.10.tgz", @@ -9577,9 +9637,9 @@ } }, "node_modules/@react-native/debugger-shell": { - "version": "0.83.1", - "resolved": "https://registry.npmjs.org/@react-native/debugger-shell/-/debugger-shell-0.83.1.tgz", - "integrity": "sha512-d+0w446Hxth5OP/cBHSSxOEpbj13p2zToUy6e5e3tTERNJ8ueGlW7iGwGTrSymNDgXXFjErX+dY4P4/3WokPIQ==", + "version": "0.83.0", + "resolved": "https://registry.npmjs.org/@react-native/debugger-shell/-/debugger-shell-0.83.0.tgz", + "integrity": "sha512-rJJxRRLLsKW+cqd0ALSBoqwL5SQTmwpd5SGl6rq9sY+fInCUKfkLEIc5HWQ0ppqoPyDteQVWbQ3a5VN84aJaNg==", "license": "MIT", "optional": true, "peer": true, @@ -9714,9 +9774,9 @@ } }, "node_modules/@react-native/gradle-plugin": { - "version": "0.83.1", - "resolved": "https://registry.npmjs.org/@react-native/gradle-plugin/-/gradle-plugin-0.83.1.tgz", - "integrity": "sha512-6ESDnwevp1CdvvxHNgXluil5OkqbjkJAkVy7SlpFsMGmVhrSxNAgD09SSRxMNdKsnLtzIvMsFCzyHLsU/S4PtQ==", + "version": "0.83.0", + "resolved": "https://registry.npmjs.org/@react-native/gradle-plugin/-/gradle-plugin-0.83.0.tgz", + "integrity": "sha512-BXZRmfsbgPhEPkrRPjk2njA2AzhSelBqhuoklnv3DdLTdxaRjKYW+LW0zpKo1k3qPKj7kG1YGI3miol6l1GB5g==", "license": "MIT", "optional": true, "peer": true, @@ -9725,9 +9785,9 @@ } }, "node_modules/@react-native/js-polyfills": { - "version": "0.83.1", - "resolved": "https://registry.npmjs.org/@react-native/js-polyfills/-/js-polyfills-0.83.1.tgz", - "integrity": "sha512-qgPpdWn/c5laA+3WoJ6Fak8uOm7CG50nBsLlPsF8kbT7rUHIVB9WaP6+GPsoKV/H15koW7jKuLRoNVT7c3Ht3w==", + "version": "0.83.0", + "resolved": "https://registry.npmjs.org/@react-native/js-polyfills/-/js-polyfills-0.83.0.tgz", + "integrity": "sha512-cVB9BMqlfbQR0v4Wxi5M2yDhZoKiNqWgiEXpp7ChdZIXI0SEnj8WwLwE3bDkyOfF8tCHdytpInXyg/al2O+dLQ==", "license": "MIT", "optional": true, "peer": true, @@ -9744,9 +9804,9 @@ "peer": true }, "node_modules/@react-native/virtualized-lists": { - "version": "0.83.1", - "resolved": "https://registry.npmjs.org/@react-native/virtualized-lists/-/virtualized-lists-0.83.1.tgz", - "integrity": "sha512-MdmoAbQUTOdicCocm5XAFDJWsswxk7hxa6ALnm6Y88p01HFML0W593hAn6qOt9q6IM1KbAcebtH6oOd4gcQy8w==", + "version": "0.83.0", + "resolved": "https://registry.npmjs.org/@react-native/virtualized-lists/-/virtualized-lists-0.83.0.tgz", + "integrity": "sha512-AVnDppwPidQrPrzA4ETr4o9W+40yuijg3EVgFt2hnMldMZkqwPRrgJL2GSreQjCYe1NfM5Yn4Egyy4Kd0yp4Lw==", "license": "MIT", "optional": true, "peer": true, @@ -9768,19 +9828,6 @@ } } }, - "node_modules/@rollup/rollup-linux-x64-gnu": { - "version": "4.52.4", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.52.4.tgz", - "integrity": "sha512-Wi6AXf0k0L7E2gteNsNHUs7UMwCIhsCTs6+tqQ5GPwVRWMaflqGec4Sd8n6+FNFDw9vGcReqk2KzBDhCa1DLYg==", - "cpu": [ - "x64" - ], - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, "node_modules/@rtsao/scc": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/@rtsao/scc/-/scc-1.1.0.tgz", @@ -9812,16 +9859,16 @@ "license": "MIT" }, "node_modules/@sinclair/typebox": { - "version": "0.34.47", - "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.34.47.tgz", - "integrity": "sha512-ZGIBQ+XDvO5JQku9wmwtabcVTHJsgSWAHYtVuM9pBNNR5E88v6Jcj/llpmsjivig5X8A8HHOb4/mbEKPS5EvAw==", + "version": "0.34.41", + "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.34.41.tgz", + "integrity": "sha512-6gS8pZzSXdyRHTIqoqSVknxolr1kzfy4/CeDnrzsVz8TTIWUbOBr6gnzOmTYJ3eXQNh4IYHIGi5aIL7sOZ2G/g==", "dev": true, "license": "MIT" }, "node_modules/@sindresorhus/is": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-7.2.0.tgz", - "integrity": "sha512-P1Cz1dWaFfR4IR+U13mqqiGsLFf1KbayybWwdd2vfctdV6hDpUkgCY0nKOLLTMSoRd/jJNjtbqzf13K8DCCXQw==", + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-7.1.1.tgz", + "integrity": "sha512-rO92VvpgMc3kfiTjGT52LEtJ8Yc5kCWhZjLQ3LwlA4pSgPpQO7bVpYXParOD8Jwf+cVQECJo3yP/4I8aZtUQTQ==", "dev": true, "license": "MIT", "engines": { @@ -9852,12 +9899,12 @@ } }, "node_modules/@smithy/abort-controller": { - "version": "4.2.8", - "resolved": "https://registry.npmjs.org/@smithy/abort-controller/-/abort-controller-4.2.8.tgz", - "integrity": "sha512-peuVfkYHAmS5ybKxWcfraK7WBBP0J+rkfUcbHJJKQ4ir3UAUNQI+Y4Vt/PqSzGqgloJ5O1dk7+WzNL8wcCSXbw==", + "version": "4.2.6", + "resolved": "https://registry.npmjs.org/@smithy/abort-controller/-/abort-controller-4.2.6.tgz", + "integrity": "sha512-P7JD4J+wxHMpGxqIg6SHno2tPkZbBUBLbPpR5/T1DEUvw/mEaINBMaPFZNM7lA+ToSCZ36j6nMHa+5kej+fhGg==", "license": "Apache-2.0", "dependencies": { - "@smithy/types": "^4.12.0", + "@smithy/types": "^4.10.0", "tslib": "^2.6.2" }, "engines": { @@ -9890,16 +9937,16 @@ } }, "node_modules/@smithy/config-resolver": { - "version": "4.4.6", - "resolved": "https://registry.npmjs.org/@smithy/config-resolver/-/config-resolver-4.4.6.tgz", - "integrity": "sha512-qJpzYC64kaj3S0fueiu3kXm8xPrR3PcXDPEgnaNMRn0EjNSZFoFjvbUp0YUDsRhN1CB90EnHJtbxWKevnH99UQ==", + "version": "4.4.4", + "resolved": "https://registry.npmjs.org/@smithy/config-resolver/-/config-resolver-4.4.4.tgz", + "integrity": "sha512-s3U5ChS21DwU54kMmZ0UJumoS5cg0+rGVZvN6f5Lp6EbAVi0ZyP+qDSHdewfmXKUgNK1j3z45JyzulkDukrjAA==", "license": "Apache-2.0", "dependencies": { - "@smithy/node-config-provider": "^4.3.8", - "@smithy/types": "^4.12.0", + "@smithy/node-config-provider": "^4.3.6", + "@smithy/types": "^4.10.0", "@smithy/util-config-provider": "^4.2.0", - "@smithy/util-endpoints": "^3.2.8", - "@smithy/util-middleware": "^4.2.8", + "@smithy/util-endpoints": "^3.2.6", + "@smithy/util-middleware": "^4.2.6", "tslib": "^2.6.2" }, "engines": { @@ -9907,18 +9954,18 @@ } }, "node_modules/@smithy/core": { - "version": "3.20.5", - "resolved": "https://registry.npmjs.org/@smithy/core/-/core-3.20.5.tgz", - "integrity": "sha512-0Tz77Td8ynHaowXfOdrD0F1IH4tgWGUhwmLwmpFyTbr+U9WHXNNp9u/k2VjBXGnSe7BwjBERRpXsokGTXzNjhA==", + "version": "3.19.0", + "resolved": "https://registry.npmjs.org/@smithy/core/-/core-3.19.0.tgz", + "integrity": "sha512-Y9oHXpBcXQgYHOcAEmxjkDilUbSTkgKjoHYed3WaYUH8jngq8lPWDBSpjHblJ9uOgBdy5mh3pzebrScDdYr29w==", "license": "Apache-2.0", "dependencies": { - "@smithy/middleware-serde": "^4.2.9", - "@smithy/protocol-http": "^5.3.8", - "@smithy/types": "^4.12.0", + "@smithy/middleware-serde": "^4.2.7", + "@smithy/protocol-http": "^5.3.6", + "@smithy/types": "^4.10.0", "@smithy/util-base64": "^4.3.0", "@smithy/util-body-length-browser": "^4.2.0", - "@smithy/util-middleware": "^4.2.8", - "@smithy/util-stream": "^4.5.10", + "@smithy/util-middleware": "^4.2.6", + "@smithy/util-stream": "^4.5.7", "@smithy/util-utf8": "^4.2.0", "@smithy/uuid": "^1.1.0", "tslib": "^2.6.2" @@ -9928,15 +9975,15 @@ } }, "node_modules/@smithy/credential-provider-imds": { - "version": "4.2.8", - "resolved": "https://registry.npmjs.org/@smithy/credential-provider-imds/-/credential-provider-imds-4.2.8.tgz", - "integrity": "sha512-FNT0xHS1c/CPN8upqbMFP83+ul5YgdisfCfkZ86Jh2NSmnqw/AJ6x5pEogVCTVvSm7j9MopRU89bmDelxuDMYw==", + "version": "4.2.6", + "resolved": "https://registry.npmjs.org/@smithy/credential-provider-imds/-/credential-provider-imds-4.2.6.tgz", + "integrity": "sha512-xBmawExyTzOjbhzkZwg+vVm/khg28kG+rj2sbGlULjFd1jI70sv/cbpaR0Ev4Yfd6CpDUDRMe64cTqR//wAOyA==", "license": "Apache-2.0", "dependencies": { - "@smithy/node-config-provider": "^4.3.8", - "@smithy/property-provider": "^4.2.8", - "@smithy/types": "^4.12.0", - "@smithy/url-parser": "^4.2.8", + "@smithy/node-config-provider": "^4.3.6", + "@smithy/property-provider": "^4.2.6", + "@smithy/types": "^4.10.0", + "@smithy/url-parser": "^4.2.6", "tslib": "^2.6.2" }, "engines": { @@ -9944,13 +9991,13 @@ } }, "node_modules/@smithy/eventstream-codec": { - "version": "4.2.8", - "resolved": "https://registry.npmjs.org/@smithy/eventstream-codec/-/eventstream-codec-4.2.8.tgz", - "integrity": "sha512-jS/O5Q14UsufqoGhov7dHLOPCzkYJl9QDzusI2Psh4wyYx/izhzvX9P4D69aTxcdfVhEPhjK+wYyn/PzLjKbbw==", + "version": "4.2.6", + "resolved": "https://registry.npmjs.org/@smithy/eventstream-codec/-/eventstream-codec-4.2.6.tgz", + "integrity": "sha512-OZfsI+YRG26XZik/jKMMg37acnBSbUiK/8nETW3uM3mLj+0tMmFXdHQw1e5WEd/IHN8BGOh3te91SNDe2o4RHg==", "license": "Apache-2.0", "dependencies": { "@aws-crypto/crc32": "5.2.0", - "@smithy/types": "^4.12.0", + "@smithy/types": "^4.10.0", "@smithy/util-hex-encoding": "^4.2.0", "tslib": "^2.6.2" }, @@ -9959,13 +10006,13 @@ } }, "node_modules/@smithy/eventstream-serde-browser": { - "version": "4.2.8", - "resolved": "https://registry.npmjs.org/@smithy/eventstream-serde-browser/-/eventstream-serde-browser-4.2.8.tgz", - "integrity": "sha512-MTfQT/CRQz5g24ayXdjg53V0mhucZth4PESoA5IhvaWVDTOQLfo8qI9vzqHcPsdd2v6sqfTYqF5L/l+pea5Uyw==", + "version": "4.2.6", + "resolved": "https://registry.npmjs.org/@smithy/eventstream-serde-browser/-/eventstream-serde-browser-4.2.6.tgz", + "integrity": "sha512-6OiaAaEbLB6dEkRbQyNzFSJv5HDvly3Mc6q/qcPd2uS/g3szR8wAIkh7UndAFKfMypNSTuZ6eCBmgCLR5LacTg==", "license": "Apache-2.0", "dependencies": { - "@smithy/eventstream-serde-universal": "^4.2.8", - "@smithy/types": "^4.12.0", + "@smithy/eventstream-serde-universal": "^4.2.6", + "@smithy/types": "^4.10.0", "tslib": "^2.6.2" }, "engines": { @@ -9973,12 +10020,12 @@ } }, "node_modules/@smithy/eventstream-serde-config-resolver": { - "version": "4.3.8", - "resolved": "https://registry.npmjs.org/@smithy/eventstream-serde-config-resolver/-/eventstream-serde-config-resolver-4.3.8.tgz", - "integrity": "sha512-ah12+luBiDGzBruhu3efNy1IlbwSEdNiw8fOZksoKoWW1ZHvO/04MQsdnws/9Aj+5b0YXSSN2JXKy/ClIsW8MQ==", + "version": "4.3.6", + "resolved": "https://registry.npmjs.org/@smithy/eventstream-serde-config-resolver/-/eventstream-serde-config-resolver-4.3.6.tgz", + "integrity": "sha512-xP5YXbOVRVN8A4pDnSUkEUsL9fYFU6VNhxo8tgr13YnMbf3Pn4xVr+hSyLVjS1Frfi1Uk03ET5Bwml4+0CeYEw==", "license": "Apache-2.0", "dependencies": { - "@smithy/types": "^4.12.0", + "@smithy/types": "^4.10.0", "tslib": "^2.6.2" }, "engines": { @@ -9986,13 +10033,13 @@ } }, "node_modules/@smithy/eventstream-serde-node": { - "version": "4.2.8", - "resolved": "https://registry.npmjs.org/@smithy/eventstream-serde-node/-/eventstream-serde-node-4.2.8.tgz", - "integrity": "sha512-cYpCpp29z6EJHa5T9WL0KAlq3SOKUQkcgSoeRfRVwjGgSFl7Uh32eYGt7IDYCX20skiEdRffyDpvF2efEZPC0A==", + "version": "4.2.6", + "resolved": "https://registry.npmjs.org/@smithy/eventstream-serde-node/-/eventstream-serde-node-4.2.6.tgz", + "integrity": "sha512-jhH7nJuaOpnTFcuZpWK9dqb6Ge2yGi1okTo0W6wkJrfwAm2vwmO74tF1v07JmrSyHBcKLQATEexclJw9K1Vj7w==", "license": "Apache-2.0", "dependencies": { - "@smithy/eventstream-serde-universal": "^4.2.8", - "@smithy/types": "^4.12.0", + "@smithy/eventstream-serde-universal": "^4.2.6", + "@smithy/types": "^4.10.0", "tslib": "^2.6.2" }, "engines": { @@ -10000,13 +10047,13 @@ } }, "node_modules/@smithy/eventstream-serde-universal": { - "version": "4.2.8", - "resolved": "https://registry.npmjs.org/@smithy/eventstream-serde-universal/-/eventstream-serde-universal-4.2.8.tgz", - "integrity": "sha512-iJ6YNJd0bntJYnX6s52NC4WFYcZeKrPUr1Kmmr5AwZcwCSzVpS7oavAmxMR7pMq7V+D1G4s9F5NJK0xwOsKAlQ==", + "version": "4.2.6", + "resolved": "https://registry.npmjs.org/@smithy/eventstream-serde-universal/-/eventstream-serde-universal-4.2.6.tgz", + "integrity": "sha512-olIfZ230B64TvPD6b0tPvrEp2eB0FkyL3KvDlqF4RVmIc/kn3orzXnV6DTQdOOW5UU+M5zKY3/BU47X420/oPw==", "license": "Apache-2.0", "dependencies": { - "@smithy/eventstream-codec": "^4.2.8", - "@smithy/types": "^4.12.0", + "@smithy/eventstream-codec": "^4.2.6", + "@smithy/types": "^4.10.0", "tslib": "^2.6.2" }, "engines": { @@ -10014,14 +10061,14 @@ } }, "node_modules/@smithy/fetch-http-handler": { - "version": "5.3.9", - "resolved": "https://registry.npmjs.org/@smithy/fetch-http-handler/-/fetch-http-handler-5.3.9.tgz", - "integrity": "sha512-I4UhmcTYXBrct03rwzQX1Y/iqQlzVQaPxWjCjula++5EmWq9YGBrx6bbGqluGc1f0XEfhSkiY4jhLgbsJUMKRA==", + "version": "5.3.7", + "resolved": "https://registry.npmjs.org/@smithy/fetch-http-handler/-/fetch-http-handler-5.3.7.tgz", + "integrity": "sha512-fcVap4QwqmzQwQK9QU3keeEpCzTjnP9NJ171vI7GnD7nbkAIcP9biZhDUx88uRH9BabSsQDS0unUps88uZvFIQ==", "license": "Apache-2.0", "dependencies": { - "@smithy/protocol-http": "^5.3.8", - "@smithy/querystring-builder": "^4.2.8", - "@smithy/types": "^4.12.0", + "@smithy/protocol-http": "^5.3.6", + "@smithy/querystring-builder": "^4.2.6", + "@smithy/types": "^4.10.0", "@smithy/util-base64": "^4.3.0", "tslib": "^2.6.2" }, @@ -10030,14 +10077,14 @@ } }, "node_modules/@smithy/hash-blob-browser": { - "version": "4.2.9", - "resolved": "https://registry.npmjs.org/@smithy/hash-blob-browser/-/hash-blob-browser-4.2.9.tgz", - "integrity": "sha512-m80d/iicI7DlBDxyQP6Th7BW/ejDGiF0bgI754+tiwK0lgMkcaIBgvwwVc7OFbY4eUzpGtnig52MhPAEJ7iNYg==", + "version": "4.2.7", + "resolved": "https://registry.npmjs.org/@smithy/hash-blob-browser/-/hash-blob-browser-4.2.7.tgz", + "integrity": "sha512-CIbCTGGX5CI7tfewBPSYD9ycp2Vb2GW5xnXD1n7GcO9mu37EN7A6DvCHM9MX7pOeS1adMn5D+1yRwI3eABVbcA==", "license": "Apache-2.0", "dependencies": { "@smithy/chunked-blob-reader": "^5.2.0", "@smithy/chunked-blob-reader-native": "^4.2.1", - "@smithy/types": "^4.12.0", + "@smithy/types": "^4.10.0", "tslib": "^2.6.2" }, "engines": { @@ -10045,12 +10092,12 @@ } }, "node_modules/@smithy/hash-node": { - "version": "4.2.8", - "resolved": "https://registry.npmjs.org/@smithy/hash-node/-/hash-node-4.2.8.tgz", - "integrity": "sha512-7ZIlPbmaDGxVoxErDZnuFG18WekhbA/g2/i97wGj+wUBeS6pcUeAym8u4BXh/75RXWhgIJhyC11hBzig6MljwA==", + "version": "4.2.6", + "resolved": "https://registry.npmjs.org/@smithy/hash-node/-/hash-node-4.2.6.tgz", + "integrity": "sha512-k3Dy9VNR37wfMh2/1RHkFf/e0rMyN0pjY0FdyY6ItJRjENYyVPRMwad6ZR1S9HFm6tTuIOd9pqKBmtJ4VHxvxg==", "license": "Apache-2.0", "dependencies": { - "@smithy/types": "^4.12.0", + "@smithy/types": "^4.10.0", "@smithy/util-buffer-from": "^4.2.0", "@smithy/util-utf8": "^4.2.0", "tslib": "^2.6.2" @@ -10060,12 +10107,12 @@ } }, "node_modules/@smithy/hash-stream-node": { - "version": "4.2.8", - "resolved": "https://registry.npmjs.org/@smithy/hash-stream-node/-/hash-stream-node-4.2.8.tgz", - "integrity": "sha512-v0FLTXgHrTeheYZFGhR+ehX5qUm4IQsjAiL9qehad2cyjMWcN2QG6/4mSwbSgEQzI7jwfoXj7z4fxZUx/Mhj2w==", + "version": "4.2.6", + "resolved": "https://registry.npmjs.org/@smithy/hash-stream-node/-/hash-stream-node-4.2.6.tgz", + "integrity": "sha512-+3T8LkH39YIhYHsv/Ec8lF+92nykZpU+XMBvAyXF/uLcTp86pxa5oSJk1vzaRY9N++qgDLYjzJ6OVbtAgDGwfw==", "license": "Apache-2.0", "dependencies": { - "@smithy/types": "^4.12.0", + "@smithy/types": "^4.10.0", "@smithy/util-utf8": "^4.2.0", "tslib": "^2.6.2" }, @@ -10074,12 +10121,12 @@ } }, "node_modules/@smithy/invalid-dependency": { - "version": "4.2.8", - "resolved": "https://registry.npmjs.org/@smithy/invalid-dependency/-/invalid-dependency-4.2.8.tgz", - "integrity": "sha512-N9iozRybwAQ2dn9Fot9kI6/w9vos2oTXLhtK7ovGqwZjlOcxu6XhPlpLpC+INsxktqHinn5gS2DXDjDF2kG5sQ==", + "version": "4.2.6", + "resolved": "https://registry.npmjs.org/@smithy/invalid-dependency/-/invalid-dependency-4.2.6.tgz", + "integrity": "sha512-E4t/V/q2T46RY21fpfznd1iSLTvCXKNKo4zJ1QuEFN4SE9gKfu2vb6bgq35LpufkQ+SETWIC7ZAf2GGvTlBaMQ==", "license": "Apache-2.0", "dependencies": { - "@smithy/types": "^4.12.0", + "@smithy/types": "^4.10.0", "tslib": "^2.6.2" }, "engines": { @@ -10099,12 +10146,12 @@ } }, "node_modules/@smithy/md5-js": { - "version": "4.2.8", - "resolved": "https://registry.npmjs.org/@smithy/md5-js/-/md5-js-4.2.8.tgz", - "integrity": "sha512-oGMaLj4tVZzLi3itBa9TCswgMBr7k9b+qKYowQ6x1rTyTuO1IU2YHdHUa+891OsOH+wCsH7aTPRsTJO3RMQmjQ==", + "version": "4.2.6", + "resolved": "https://registry.npmjs.org/@smithy/md5-js/-/md5-js-4.2.6.tgz", + "integrity": "sha512-ZXeh8UmH31JdcNsrQ1o9v1IVuva9JFwxIc6zTMxWX7wcmWvVR7Ai9aUEw5LraNKqdkAsb06clpM2sRH4Iy55Sg==", "license": "Apache-2.0", "dependencies": { - "@smithy/types": "^4.12.0", + "@smithy/types": "^4.10.0", "@smithy/util-utf8": "^4.2.0", "tslib": "^2.6.2" }, @@ -10113,13 +10160,13 @@ } }, "node_modules/@smithy/middleware-content-length": { - "version": "4.2.8", - "resolved": "https://registry.npmjs.org/@smithy/middleware-content-length/-/middleware-content-length-4.2.8.tgz", - "integrity": "sha512-RO0jeoaYAB1qBRhfVyq0pMgBoUK34YEJxVxyjOWYZiOKOq2yMZ4MnVXMZCUDenpozHue207+9P5ilTV1zeda0A==", + "version": "4.2.6", + "resolved": "https://registry.npmjs.org/@smithy/middleware-content-length/-/middleware-content-length-4.2.6.tgz", + "integrity": "sha512-0cjqjyfj+Gls30ntq45SsBtqF3dfJQCeqQPyGz58Pk8OgrAr5YiB7ZvDzjCA94p4r6DCI4qLm7FKobqBjf515w==", "license": "Apache-2.0", "dependencies": { - "@smithy/protocol-http": "^5.3.8", - "@smithy/types": "^4.12.0", + "@smithy/protocol-http": "^5.3.6", + "@smithy/types": "^4.10.0", "tslib": "^2.6.2" }, "engines": { @@ -10127,18 +10174,18 @@ } }, "node_modules/@smithy/middleware-endpoint": { - "version": "4.4.6", - "resolved": "https://registry.npmjs.org/@smithy/middleware-endpoint/-/middleware-endpoint-4.4.6.tgz", - "integrity": "sha512-dpq3bHqbEOBqGBjRVHVFP3eUSPpX0BYtg1D5d5Irgk6orGGAuZfY22rC4sErhg+ZfY/Y0kPqm1XpAmDZg7DeuA==", + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/@smithy/middleware-endpoint/-/middleware-endpoint-4.4.0.tgz", + "integrity": "sha512-M6qWfUNny6NFNy8amrCGIb9TfOMUkHVtg9bHtEFGRgfH7A7AtPpn/fcrToGPjVDK1ECuMVvqGQOXcZxmu9K+7A==", "license": "Apache-2.0", "dependencies": { - "@smithy/core": "^3.20.5", - "@smithy/middleware-serde": "^4.2.9", - "@smithy/node-config-provider": "^4.3.8", - "@smithy/shared-ini-file-loader": "^4.4.3", - "@smithy/types": "^4.12.0", - "@smithy/url-parser": "^4.2.8", - "@smithy/util-middleware": "^4.2.8", + "@smithy/core": "^3.19.0", + "@smithy/middleware-serde": "^4.2.7", + "@smithy/node-config-provider": "^4.3.6", + "@smithy/shared-ini-file-loader": "^4.4.1", + "@smithy/types": "^4.10.0", + "@smithy/url-parser": "^4.2.6", + "@smithy/util-middleware": "^4.2.6", "tslib": "^2.6.2" }, "engines": { @@ -10146,18 +10193,18 @@ } }, "node_modules/@smithy/middleware-retry": { - "version": "4.4.22", - "resolved": "https://registry.npmjs.org/@smithy/middleware-retry/-/middleware-retry-4.4.22.tgz", - "integrity": "sha512-vwWDMaObSMjw6WCC/3Ae9G7uul5Sk95jr07CDk1gkIMpaDic0phPS1MpVAZ6+YkF7PAzRlpsDjxPwRlh/S11FQ==", + "version": "4.4.16", + "resolved": "https://registry.npmjs.org/@smithy/middleware-retry/-/middleware-retry-4.4.16.tgz", + "integrity": "sha512-XPpNhNRzm3vhYm7YCsyw3AtmWggJbg1wNGAoqb7NBYr5XA5isMRv14jgbYyUV6IvbTBFZQdf2QpeW43LrRdStQ==", "license": "Apache-2.0", "dependencies": { - "@smithy/node-config-provider": "^4.3.8", - "@smithy/protocol-http": "^5.3.8", - "@smithy/service-error-classification": "^4.2.8", - "@smithy/smithy-client": "^4.10.7", - "@smithy/types": "^4.12.0", - "@smithy/util-middleware": "^4.2.8", - "@smithy/util-retry": "^4.2.8", + "@smithy/node-config-provider": "^4.3.6", + "@smithy/protocol-http": "^5.3.6", + "@smithy/service-error-classification": "^4.2.6", + "@smithy/smithy-client": "^4.10.1", + "@smithy/types": "^4.10.0", + "@smithy/util-middleware": "^4.2.6", + "@smithy/util-retry": "^4.2.6", "@smithy/uuid": "^1.1.0", "tslib": "^2.6.2" }, @@ -10166,13 +10213,13 @@ } }, "node_modules/@smithy/middleware-serde": { - "version": "4.2.9", - "resolved": "https://registry.npmjs.org/@smithy/middleware-serde/-/middleware-serde-4.2.9.tgz", - "integrity": "sha512-eMNiej0u/snzDvlqRGSN3Vl0ESn3838+nKyVfF2FKNXFbi4SERYT6PR392D39iczngbqqGG0Jl1DlCnp7tBbXQ==", + "version": "4.2.7", + "resolved": "https://registry.npmjs.org/@smithy/middleware-serde/-/middleware-serde-4.2.7.tgz", + "integrity": "sha512-PFMVHVPgtFECeu4iZ+4SX6VOQT0+dIpm4jSPLLL6JLSkp9RohGqKBKD0cbiXdeIFS08Forp0UHI6kc0gIHenSA==", "license": "Apache-2.0", "dependencies": { - "@smithy/protocol-http": "^5.3.8", - "@smithy/types": "^4.12.0", + "@smithy/protocol-http": "^5.3.6", + "@smithy/types": "^4.10.0", "tslib": "^2.6.2" }, "engines": { @@ -10180,12 +10227,12 @@ } }, "node_modules/@smithy/middleware-stack": { - "version": "4.2.8", - "resolved": "https://registry.npmjs.org/@smithy/middleware-stack/-/middleware-stack-4.2.8.tgz", - "integrity": "sha512-w6LCfOviTYQjBctOKSwy6A8FIkQy7ICvglrZFl6Bw4FmcQ1Z420fUtIhxaUZZshRe0VCq4kvDiPiXrPZAe8oRA==", + "version": "4.2.6", + "resolved": "https://registry.npmjs.org/@smithy/middleware-stack/-/middleware-stack-4.2.6.tgz", + "integrity": "sha512-JSbALU3G+JS4kyBZPqnJ3hxIYwOVRV7r9GNQMS6j5VsQDo5+Es5nddLfr9TQlxZLNHPvKSh+XSB0OuWGfSWFcA==", "license": "Apache-2.0", "dependencies": { - "@smithy/types": "^4.12.0", + "@smithy/types": "^4.10.0", "tslib": "^2.6.2" }, "engines": { @@ -10193,14 +10240,14 @@ } }, "node_modules/@smithy/node-config-provider": { - "version": "4.3.8", - "resolved": "https://registry.npmjs.org/@smithy/node-config-provider/-/node-config-provider-4.3.8.tgz", - "integrity": "sha512-aFP1ai4lrbVlWjfpAfRSL8KFcnJQYfTl5QxLJXY32vghJrDuFyPZ6LtUL+JEGYiFRG1PfPLHLoxj107ulncLIg==", + "version": "4.3.6", + "resolved": "https://registry.npmjs.org/@smithy/node-config-provider/-/node-config-provider-4.3.6.tgz", + "integrity": "sha512-fYEyL59Qe82Ha1p97YQTMEQPJYmBS+ux76foqluaTVWoG9Px5J53w6NvXZNE3wP7lIicLDF7Vj1Em18XTX7fsA==", "license": "Apache-2.0", "dependencies": { - "@smithy/property-provider": "^4.2.8", - "@smithy/shared-ini-file-loader": "^4.4.3", - "@smithy/types": "^4.12.0", + "@smithy/property-provider": "^4.2.6", + "@smithy/shared-ini-file-loader": "^4.4.1", + "@smithy/types": "^4.10.0", "tslib": "^2.6.2" }, "engines": { @@ -10208,15 +10255,15 @@ } }, "node_modules/@smithy/node-http-handler": { - "version": "4.4.8", - "resolved": "https://registry.npmjs.org/@smithy/node-http-handler/-/node-http-handler-4.4.8.tgz", - "integrity": "sha512-q9u+MSbJVIJ1QmJ4+1u+cERXkrhuILCBDsJUBAW1MPE6sFonbCNaegFuwW9ll8kh5UdyY3jOkoOGlc7BesoLpg==", + "version": "4.4.6", + "resolved": "https://registry.npmjs.org/@smithy/node-http-handler/-/node-http-handler-4.4.6.tgz", + "integrity": "sha512-Gsb9jf4ido5BhPfani4ggyrKDd3ZK+vTFWmUaZeFg5G3E5nhFmqiTzAIbHqmPs1sARuJawDiGMGR/nY+Gw6+aQ==", "license": "Apache-2.0", "dependencies": { - "@smithy/abort-controller": "^4.2.8", - "@smithy/protocol-http": "^5.3.8", - "@smithy/querystring-builder": "^4.2.8", - "@smithy/types": "^4.12.0", + "@smithy/abort-controller": "^4.2.6", + "@smithy/protocol-http": "^5.3.6", + "@smithy/querystring-builder": "^4.2.6", + "@smithy/types": "^4.10.0", "tslib": "^2.6.2" }, "engines": { @@ -10224,12 +10271,12 @@ } }, "node_modules/@smithy/property-provider": { - "version": "4.2.8", - "resolved": "https://registry.npmjs.org/@smithy/property-provider/-/property-provider-4.2.8.tgz", - "integrity": "sha512-EtCTbyIveCKeOXDSWSdze3k612yCPq1YbXsbqX3UHhkOSW8zKsM9NOJG5gTIya0vbY2DIaieG8pKo1rITHYL0w==", + "version": "4.2.6", + "resolved": "https://registry.npmjs.org/@smithy/property-provider/-/property-provider-4.2.6.tgz", + "integrity": "sha512-a/tGSLPtaia2krbRdwR4xbZKO8lU67DjMk/jfY4QKt4PRlKML+2tL/gmAuhNdFDioO6wOq0sXkfnddNFH9mNUA==", "license": "Apache-2.0", "dependencies": { - "@smithy/types": "^4.12.0", + "@smithy/types": "^4.10.0", "tslib": "^2.6.2" }, "engines": { @@ -10237,12 +10284,12 @@ } }, "node_modules/@smithy/protocol-http": { - "version": "5.3.8", - "resolved": "https://registry.npmjs.org/@smithy/protocol-http/-/protocol-http-5.3.8.tgz", - "integrity": "sha512-QNINVDhxpZ5QnP3aviNHQFlRogQZDfYlCkQT+7tJnErPQbDhysondEjhikuANxgMsZrkGeiAxXy4jguEGsDrWQ==", + "version": "5.3.6", + "resolved": "https://registry.npmjs.org/@smithy/protocol-http/-/protocol-http-5.3.6.tgz", + "integrity": "sha512-qLRZzP2+PqhE3OSwvY2jpBbP0WKTZ9opTsn+6IWYI0SKVpbG+imcfNxXPq9fj5XeaUTr7odpsNpK6dmoiM1gJQ==", "license": "Apache-2.0", "dependencies": { - "@smithy/types": "^4.12.0", + "@smithy/types": "^4.10.0", "tslib": "^2.6.2" }, "engines": { @@ -10250,12 +10297,12 @@ } }, "node_modules/@smithy/querystring-builder": { - "version": "4.2.8", - "resolved": "https://registry.npmjs.org/@smithy/querystring-builder/-/querystring-builder-4.2.8.tgz", - "integrity": "sha512-Xr83r31+DrE8CP3MqPgMJl+pQlLLmOfiEUnoyAlGzzJIrEsbKsPy1hqH0qySaQm4oWrCBlUqRt+idEgunKB+iw==", + "version": "4.2.6", + "resolved": "https://registry.npmjs.org/@smithy/querystring-builder/-/querystring-builder-4.2.6.tgz", + "integrity": "sha512-MeM9fTAiD3HvoInK/aA8mgJaKQDvm8N0dKy6EiFaCfgpovQr4CaOkJC28XqlSRABM+sHdSQXbC8NZ0DShBMHqg==", "license": "Apache-2.0", "dependencies": { - "@smithy/types": "^4.12.0", + "@smithy/types": "^4.10.0", "@smithy/util-uri-escape": "^4.2.0", "tslib": "^2.6.2" }, @@ -10264,12 +10311,12 @@ } }, "node_modules/@smithy/querystring-parser": { - "version": "4.2.8", - "resolved": "https://registry.npmjs.org/@smithy/querystring-parser/-/querystring-parser-4.2.8.tgz", - "integrity": "sha512-vUurovluVy50CUlazOiXkPq40KGvGWSdmusa3130MwrR1UNnNgKAlj58wlOe61XSHRpUfIIh6cE0zZ8mzKaDPA==", + "version": "4.2.6", + "resolved": "https://registry.npmjs.org/@smithy/querystring-parser/-/querystring-parser-4.2.6.tgz", + "integrity": "sha512-YmWxl32SQRw/kIRccSOxzS/Ib8/b5/f9ex0r5PR40jRJg8X1wgM3KrR2In+8zvOGVhRSXgvyQpw9yOSlmfmSnA==", "license": "Apache-2.0", "dependencies": { - "@smithy/types": "^4.12.0", + "@smithy/types": "^4.10.0", "tslib": "^2.6.2" }, "engines": { @@ -10277,24 +10324,24 @@ } }, "node_modules/@smithy/service-error-classification": { - "version": "4.2.8", - "resolved": "https://registry.npmjs.org/@smithy/service-error-classification/-/service-error-classification-4.2.8.tgz", - "integrity": "sha512-mZ5xddodpJhEt3RkCjbmUQuXUOaPNTkbMGR0bcS8FE0bJDLMZlhmpgrvPNCYglVw5rsYTpSnv19womw9WWXKQQ==", + "version": "4.2.6", + "resolved": "https://registry.npmjs.org/@smithy/service-error-classification/-/service-error-classification-4.2.6.tgz", + "integrity": "sha512-Q73XBrzJlGTut2nf5RglSntHKgAG0+KiTJdO5QQblLfr4TdliGwIAha1iZIjwisc3rA5ulzqwwsYC6xrclxVQg==", "license": "Apache-2.0", "dependencies": { - "@smithy/types": "^4.12.0" + "@smithy/types": "^4.10.0" }, "engines": { "node": ">=18.0.0" } }, "node_modules/@smithy/shared-ini-file-loader": { - "version": "4.4.3", - "resolved": "https://registry.npmjs.org/@smithy/shared-ini-file-loader/-/shared-ini-file-loader-4.4.3.tgz", - "integrity": "sha512-DfQjxXQnzC5UbCUPeC3Ie8u+rIWZTvuDPAGU/BxzrOGhRvgUanaP68kDZA+jaT3ZI+djOf+4dERGlm9mWfFDrg==", + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/@smithy/shared-ini-file-loader/-/shared-ini-file-loader-4.4.1.tgz", + "integrity": "sha512-tph+oQYPbpN6NamF030hx1gb5YN2Plog+GLaRHpoEDwp8+ZPG26rIJvStG9hkWzN2HBn3HcWg0sHeB0tmkYzqA==", "license": "Apache-2.0", "dependencies": { - "@smithy/types": "^4.12.0", + "@smithy/types": "^4.10.0", "tslib": "^2.6.2" }, "engines": { @@ -10302,16 +10349,16 @@ } }, "node_modules/@smithy/signature-v4": { - "version": "5.3.8", - "resolved": "https://registry.npmjs.org/@smithy/signature-v4/-/signature-v4-5.3.8.tgz", - "integrity": "sha512-6A4vdGj7qKNRF16UIcO8HhHjKW27thsxYci+5r/uVRkdcBEkOEiY8OMPuydLX4QHSrJqGHPJzPRwwVTqbLZJhg==", + "version": "5.3.6", + "resolved": "https://registry.npmjs.org/@smithy/signature-v4/-/signature-v4-5.3.6.tgz", + "integrity": "sha512-P1TXDHuQMadTMTOBv4oElZMURU4uyEhxhHfn+qOc2iofW9Rd4sZtBGx58Lzk112rIGVEYZT8eUMK4NftpewpRA==", "license": "Apache-2.0", "dependencies": { "@smithy/is-array-buffer": "^4.2.0", - "@smithy/protocol-http": "^5.3.8", - "@smithy/types": "^4.12.0", + "@smithy/protocol-http": "^5.3.6", + "@smithy/types": "^4.10.0", "@smithy/util-hex-encoding": "^4.2.0", - "@smithy/util-middleware": "^4.2.8", + "@smithy/util-middleware": "^4.2.6", "@smithy/util-uri-escape": "^4.2.0", "@smithy/util-utf8": "^4.2.0", "tslib": "^2.6.2" @@ -10321,17 +10368,17 @@ } }, "node_modules/@smithy/smithy-client": { - "version": "4.10.7", - "resolved": "https://registry.npmjs.org/@smithy/smithy-client/-/smithy-client-4.10.7.tgz", - "integrity": "sha512-Uznt0I9z3os3Z+8pbXrOSCTXCA6vrjyN7Ub+8l2pRDum44vLv8qw0qGVkJN0/tZBZotaEFHrDPKUoPNueTr5Vg==", + "version": "4.10.1", + "resolved": "https://registry.npmjs.org/@smithy/smithy-client/-/smithy-client-4.10.1.tgz", + "integrity": "sha512-1ovWdxzYprhq+mWqiGZlt3kF69LJthuQcfY9BIyHx9MywTFKzFapluku1QXoaBB43GCsLDxNqS+1v30ure69AA==", "license": "Apache-2.0", "dependencies": { - "@smithy/core": "^3.20.5", - "@smithy/middleware-endpoint": "^4.4.6", - "@smithy/middleware-stack": "^4.2.8", - "@smithy/protocol-http": "^5.3.8", - "@smithy/types": "^4.12.0", - "@smithy/util-stream": "^4.5.10", + "@smithy/core": "^3.19.0", + "@smithy/middleware-endpoint": "^4.4.0", + "@smithy/middleware-stack": "^4.2.6", + "@smithy/protocol-http": "^5.3.6", + "@smithy/types": "^4.10.0", + "@smithy/util-stream": "^4.5.7", "tslib": "^2.6.2" }, "engines": { @@ -10339,9 +10386,9 @@ } }, "node_modules/@smithy/types": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.12.0.tgz", - "integrity": "sha512-9YcuJVTOBDjg9LWo23Qp0lTQ3D7fQsQtwle0jVfpbUHy9qBwCEgKuVH4FqFB3VYu0nwdHKiEMA+oXz7oV8X1kw==", + "version": "4.10.0", + "resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.10.0.tgz", + "integrity": "sha512-K9mY7V/f3Ul+/Gz4LJANZ3vJ/yiBIwCyxe0sPT4vNJK63Srvd+Yk1IzP0t+nE7XFSpIGtzR71yljtnqpUTYFlQ==", "license": "Apache-2.0", "dependencies": { "tslib": "^2.6.2" @@ -10351,13 +10398,13 @@ } }, "node_modules/@smithy/url-parser": { - "version": "4.2.8", - "resolved": "https://registry.npmjs.org/@smithy/url-parser/-/url-parser-4.2.8.tgz", - "integrity": "sha512-NQho9U68TGMEU639YkXnVMV3GEFFULmmaWdlu1E9qzyIePOHsoSnagTGSDv1Zi8DCNN6btxOSdgmy5E/hsZwhA==", + "version": "4.2.6", + "resolved": "https://registry.npmjs.org/@smithy/url-parser/-/url-parser-4.2.6.tgz", + "integrity": "sha512-tVoyzJ2vXp4R3/aeV4EQjBDmCuWxRa8eo3KybL7Xv4wEM16nObYh7H1sNfcuLWHAAAzb0RVyxUz1S3sGj4X+Tg==", "license": "Apache-2.0", "dependencies": { - "@smithy/querystring-parser": "^4.2.8", - "@smithy/types": "^4.12.0", + "@smithy/querystring-parser": "^4.2.6", + "@smithy/types": "^4.10.0", "tslib": "^2.6.2" }, "engines": { @@ -10428,14 +10475,14 @@ } }, "node_modules/@smithy/util-defaults-mode-browser": { - "version": "4.3.21", - "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-browser/-/util-defaults-mode-browser-4.3.21.tgz", - "integrity": "sha512-DtmVJarzqtjghtGjCw/PFJolcJkP7GkZgy+hWTAN3YLXNH+IC82uMoMhFoC3ZtIz5mOgCm5+hOGi1wfhVYgrxw==", + "version": "4.3.15", + "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-browser/-/util-defaults-mode-browser-4.3.15.tgz", + "integrity": "sha512-LiZQVAg/oO8kueX4c+oMls5njaD2cRLXRfcjlTYjhIqmwHnCwkQO5B3dMQH0c5PACILxGAQf6Mxsq7CjlDc76A==", "license": "Apache-2.0", "dependencies": { - "@smithy/property-provider": "^4.2.8", - "@smithy/smithy-client": "^4.10.7", - "@smithy/types": "^4.12.0", + "@smithy/property-provider": "^4.2.6", + "@smithy/smithy-client": "^4.10.1", + "@smithy/types": "^4.10.0", "tslib": "^2.6.2" }, "engines": { @@ -10443,17 +10490,17 @@ } }, "node_modules/@smithy/util-defaults-mode-node": { - "version": "4.2.24", - "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-node/-/util-defaults-mode-node-4.2.24.tgz", - "integrity": "sha512-JelBDKPAVswVY666rezBvY6b0nF/v9TXjUbNwDNAyme7qqKYEX687wJv0uze8lBIZVbg30wlWnlYfVSjjpKYFA==", + "version": "4.2.18", + "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-node/-/util-defaults-mode-node-4.2.18.tgz", + "integrity": "sha512-Kw2J+KzYm9C9Z9nY6+W0tEnoZOofstVCMTshli9jhQbQCy64rueGfKzPfuFBnVUqZD9JobxTh2DzHmPkp/Va/Q==", "license": "Apache-2.0", "dependencies": { - "@smithy/config-resolver": "^4.4.6", - "@smithy/credential-provider-imds": "^4.2.8", - "@smithy/node-config-provider": "^4.3.8", - "@smithy/property-provider": "^4.2.8", - "@smithy/smithy-client": "^4.10.7", - "@smithy/types": "^4.12.0", + "@smithy/config-resolver": "^4.4.4", + "@smithy/credential-provider-imds": "^4.2.6", + "@smithy/node-config-provider": "^4.3.6", + "@smithy/property-provider": "^4.2.6", + "@smithy/smithy-client": "^4.10.1", + "@smithy/types": "^4.10.0", "tslib": "^2.6.2" }, "engines": { @@ -10461,13 +10508,13 @@ } }, "node_modules/@smithy/util-endpoints": { - "version": "3.2.8", - "resolved": "https://registry.npmjs.org/@smithy/util-endpoints/-/util-endpoints-3.2.8.tgz", - "integrity": "sha512-8JaVTn3pBDkhZgHQ8R0epwWt+BqPSLCjdjXXusK1onwJlRuN69fbvSK66aIKKO7SwVFM6x2J2ox5X8pOaWcUEw==", + "version": "3.2.6", + "resolved": "https://registry.npmjs.org/@smithy/util-endpoints/-/util-endpoints-3.2.6.tgz", + "integrity": "sha512-v60VNM2+mPvgHCBXEfMCYrQ0RepP6u6xvbAkMenfe4Mi872CqNkJzgcnQL837e8NdeDxBgrWQRTluKq5Lqdhfg==", "license": "Apache-2.0", "dependencies": { - "@smithy/node-config-provider": "^4.3.8", - "@smithy/types": "^4.12.0", + "@smithy/node-config-provider": "^4.3.6", + "@smithy/types": "^4.10.0", "tslib": "^2.6.2" }, "engines": { @@ -10487,12 +10534,12 @@ } }, "node_modules/@smithy/util-middleware": { - "version": "4.2.8", - "resolved": "https://registry.npmjs.org/@smithy/util-middleware/-/util-middleware-4.2.8.tgz", - "integrity": "sha512-PMqfeJxLcNPMDgvPbbLl/2Vpin+luxqTGPpW3NAQVLbRrFRzTa4rNAASYeIGjRV9Ytuhzny39SpyU04EQreF+A==", + "version": "4.2.6", + "resolved": "https://registry.npmjs.org/@smithy/util-middleware/-/util-middleware-4.2.6.tgz", + "integrity": "sha512-qrvXUkxBSAFomM3/OEMuDVwjh4wtqK8D2uDZPShzIqOylPst6gor2Cdp6+XrH4dyksAWq/bE2aSDYBTTnj0Rxg==", "license": "Apache-2.0", "dependencies": { - "@smithy/types": "^4.12.0", + "@smithy/types": "^4.10.0", "tslib": "^2.6.2" }, "engines": { @@ -10500,13 +10547,13 @@ } }, "node_modules/@smithy/util-retry": { - "version": "4.2.8", - "resolved": "https://registry.npmjs.org/@smithy/util-retry/-/util-retry-4.2.8.tgz", - "integrity": "sha512-CfJqwvoRY0kTGe5AkQokpURNCT1u/MkRzMTASWMPPo2hNSnKtF1D45dQl3DE2LKLr4m+PW9mCeBMJr5mCAVThg==", + "version": "4.2.6", + "resolved": "https://registry.npmjs.org/@smithy/util-retry/-/util-retry-4.2.6.tgz", + "integrity": "sha512-x7CeDQLPQ9cb6xN7fRJEjlP9NyGW/YeXWc4j/RUhg4I+H60F0PEeRc2c/z3rm9zmsdiMFzpV/rT+4UHW6KM1SA==", "license": "Apache-2.0", "dependencies": { - "@smithy/service-error-classification": "^4.2.8", - "@smithy/types": "^4.12.0", + "@smithy/service-error-classification": "^4.2.6", + "@smithy/types": "^4.10.0", "tslib": "^2.6.2" }, "engines": { @@ -10514,14 +10561,14 @@ } }, "node_modules/@smithy/util-stream": { - "version": "4.5.10", - "resolved": "https://registry.npmjs.org/@smithy/util-stream/-/util-stream-4.5.10.tgz", - "integrity": "sha512-jbqemy51UFSZSp2y0ZmRfckmrzuKww95zT9BYMmuJ8v3altGcqjwoV1tzpOwuHaKrwQrCjIzOib499ymr2f98g==", + "version": "4.5.7", + "resolved": "https://registry.npmjs.org/@smithy/util-stream/-/util-stream-4.5.7.tgz", + "integrity": "sha512-Uuy4S5Aj4oF6k1z+i2OtIBJUns4mlg29Ph4S+CqjR+f4XXpSFVgTCYLzMszHJTicYDBxKFtwq2/QSEDSS5l02A==", "license": "Apache-2.0", "dependencies": { - "@smithy/fetch-http-handler": "^5.3.9", - "@smithy/node-http-handler": "^4.4.8", - "@smithy/types": "^4.12.0", + "@smithy/fetch-http-handler": "^5.3.7", + "@smithy/node-http-handler": "^4.4.6", + "@smithy/types": "^4.10.0", "@smithy/util-base64": "^4.3.0", "@smithy/util-buffer-from": "^4.2.0", "@smithy/util-hex-encoding": "^4.2.0", @@ -10558,13 +10605,13 @@ } }, "node_modules/@smithy/util-waiter": { - "version": "4.2.8", - "resolved": "https://registry.npmjs.org/@smithy/util-waiter/-/util-waiter-4.2.8.tgz", - "integrity": "sha512-n+lahlMWk+aejGuax7DPWtqav8HYnWxQwR+LCG2BgCUmaGcTe9qZCFsmw8TMg9iG75HOwhrJCX9TCJRLH+Yzqg==", + "version": "4.2.6", + "resolved": "https://registry.npmjs.org/@smithy/util-waiter/-/util-waiter-4.2.6.tgz", + "integrity": "sha512-xU9HwUSik9UUCJmm530yvBy0AwlQFICveKmqvaaTukKkXEAhyiBdHtSrhPrH3rH+uz0ykyaE3LdgsX86C6mDCQ==", "license": "Apache-2.0", "dependencies": { - "@smithy/abort-controller": "^4.2.8", - "@smithy/types": "^4.12.0", + "@smithy/abort-controller": "^4.2.6", + "@smithy/types": "^4.10.0", "tslib": "^2.6.2" }, "engines": { @@ -10795,17 +10842,6 @@ "dev": true, "license": "MIT" }, - "node_modules/@tybys/wasm-util": { - "version": "0.10.1", - "resolved": "https://registry.npmjs.org/@tybys/wasm-util/-/wasm-util-0.10.1.tgz", - "integrity": "sha512-9tTaPJLSiejZKx+Bmog4uSubteqTvFrVrURwkmHixBo0G4seD0zUxp98E1DzUBJxLQ3NPwXrGKDiVjwx/DpPsg==", - "dev": true, - "license": "MIT", - "optional": true, - "dependencies": { - "tslib": "^2.4.0" - } - }, "node_modules/@types/babel__core": { "version": "7.20.5", "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.5.tgz", @@ -10958,9 +10994,9 @@ } }, "node_modules/@types/express-serve-static-core": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-5.1.1.tgz", - "integrity": "sha512-v4zIMr/cX7/d2BpAEX3KNKL/JrT1s43s96lLvvdTmza1oEvDudCqK9aF/djc/SWgy8Yh0h30TZx5VpzqFCxk5A==", + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-5.1.0.tgz", + "integrity": "sha512-jnHMsrd0Mwa9Cf4IdOzbz543y4XJepXrbia2T4b6+spXC2We3t1y6K44D3mR8XMFSXMCf3/l7rCgddfx7UNVBA==", "license": "MIT", "dependencies": { "@types/node": "*", @@ -11614,34 +11650,6 @@ "expo-modules-core": "~0.4.0" } }, - "node_modules/@unrs/resolver-binding-android-arm-eabi": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-android-arm-eabi/-/resolver-binding-android-arm-eabi-1.11.1.tgz", - "integrity": "sha512-ppLRUgHVaGRWUx0R0Ut06Mjo9gBaBkg3v/8AxusGLhsIotbBLuRk51rAzqLC8gq6NyyAojEXglNjzf6R948DNw==", - "cpu": [ - "arm" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "android" - ] - }, - "node_modules/@unrs/resolver-binding-android-arm64": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-android-arm64/-/resolver-binding-android-arm64-1.11.1.tgz", - "integrity": "sha512-lCxkVtb4wp1v+EoN+HjIG9cIIzPkX5OtM03pQYkG+U5O/wL53LC4QbIeazgiKqluGeVEeBlZahHalCaBvU1a2g==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "android" - ] - }, "node_modules/@unrs/resolver-binding-darwin-arm64": { "version": "1.11.1", "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-darwin-arm64/-/resolver-binding-darwin-arm64-1.11.1.tgz", @@ -11656,233 +11664,6 @@ "darwin" ] }, - "node_modules/@unrs/resolver-binding-darwin-x64": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-darwin-x64/-/resolver-binding-darwin-x64-1.11.1.tgz", - "integrity": "sha512-cFzP7rWKd3lZaCsDze07QX1SC24lO8mPty9vdP+YVa3MGdVgPmFc59317b2ioXtgCMKGiCLxJ4HQs62oz6GfRQ==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ] - }, - "node_modules/@unrs/resolver-binding-freebsd-x64": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-freebsd-x64/-/resolver-binding-freebsd-x64-1.11.1.tgz", - "integrity": "sha512-fqtGgak3zX4DCB6PFpsH5+Kmt/8CIi4Bry4rb1ho6Av2QHTREM+47y282Uqiu3ZRF5IQioJQ5qWRV6jduA+iGw==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "freebsd" - ] - }, - "node_modules/@unrs/resolver-binding-linux-arm-gnueabihf": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-arm-gnueabihf/-/resolver-binding-linux-arm-gnueabihf-1.11.1.tgz", - "integrity": "sha512-u92mvlcYtp9MRKmP+ZvMmtPN34+/3lMHlyMj7wXJDeXxuM0Vgzz0+PPJNsro1m3IZPYChIkn944wW8TYgGKFHw==", - "cpu": [ - "arm" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@unrs/resolver-binding-linux-arm-musleabihf": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-arm-musleabihf/-/resolver-binding-linux-arm-musleabihf-1.11.1.tgz", - "integrity": "sha512-cINaoY2z7LVCrfHkIcmvj7osTOtm6VVT16b5oQdS4beibX2SYBwgYLmqhBjA1t51CarSaBuX5YNsWLjsqfW5Cw==", - "cpu": [ - "arm" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@unrs/resolver-binding-linux-arm64-gnu": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-arm64-gnu/-/resolver-binding-linux-arm64-gnu-1.11.1.tgz", - "integrity": "sha512-34gw7PjDGB9JgePJEmhEqBhWvCiiWCuXsL9hYphDF7crW7UgI05gyBAi6MF58uGcMOiOqSJ2ybEeCvHcq0BCmQ==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@unrs/resolver-binding-linux-arm64-musl": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-arm64-musl/-/resolver-binding-linux-arm64-musl-1.11.1.tgz", - "integrity": "sha512-RyMIx6Uf53hhOtJDIamSbTskA99sPHS96wxVE/bJtePJJtpdKGXO1wY90oRdXuYOGOTuqjT8ACccMc4K6QmT3w==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@unrs/resolver-binding-linux-ppc64-gnu": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-ppc64-gnu/-/resolver-binding-linux-ppc64-gnu-1.11.1.tgz", - "integrity": "sha512-D8Vae74A4/a+mZH0FbOkFJL9DSK2R6TFPC9M+jCWYia/q2einCubX10pecpDiTmkJVUH+y8K3BZClycD8nCShA==", - "cpu": [ - "ppc64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@unrs/resolver-binding-linux-riscv64-gnu": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-riscv64-gnu/-/resolver-binding-linux-riscv64-gnu-1.11.1.tgz", - "integrity": "sha512-frxL4OrzOWVVsOc96+V3aqTIQl1O2TjgExV4EKgRY09AJ9leZpEg8Ak9phadbuX0BA4k8U5qtvMSQQGGmaJqcQ==", - "cpu": [ - "riscv64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@unrs/resolver-binding-linux-riscv64-musl": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-riscv64-musl/-/resolver-binding-linux-riscv64-musl-1.11.1.tgz", - "integrity": "sha512-mJ5vuDaIZ+l/acv01sHoXfpnyrNKOk/3aDoEdLO/Xtn9HuZlDD6jKxHlkN8ZhWyLJsRBxfv9GYM2utQ1SChKew==", - "cpu": [ - "riscv64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@unrs/resolver-binding-linux-s390x-gnu": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-s390x-gnu/-/resolver-binding-linux-s390x-gnu-1.11.1.tgz", - "integrity": "sha512-kELo8ebBVtb9sA7rMe1Cph4QHreByhaZ2QEADd9NzIQsYNQpt9UkM9iqr2lhGr5afh885d/cB5QeTXSbZHTYPg==", - "cpu": [ - "s390x" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@unrs/resolver-binding-linux-x64-gnu": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-x64-gnu/-/resolver-binding-linux-x64-gnu-1.11.1.tgz", - "integrity": "sha512-C3ZAHugKgovV5YvAMsxhq0gtXuwESUKc5MhEtjBpLoHPLYM+iuwSj3lflFwK3DPm68660rZ7G8BMcwSro7hD5w==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@unrs/resolver-binding-linux-x64-musl": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-x64-musl/-/resolver-binding-linux-x64-musl-1.11.1.tgz", - "integrity": "sha512-rV0YSoyhK2nZ4vEswT/QwqzqQXw5I6CjoaYMOX0TqBlWhojUf8P94mvI7nuJTeaCkkds3QE4+zS8Ko+GdXuZtA==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@unrs/resolver-binding-wasm32-wasi": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-wasm32-wasi/-/resolver-binding-wasm32-wasi-1.11.1.tgz", - "integrity": "sha512-5u4RkfxJm+Ng7IWgkzi3qrFOvLvQYnPBmjmZQ8+szTK/b31fQCnleNl1GgEt7nIsZRIf5PLhPwT0WM+q45x/UQ==", - "cpu": [ - "wasm32" - ], - "dev": true, - "license": "MIT", - "optional": true, - "dependencies": { - "@napi-rs/wasm-runtime": "^0.2.11" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@unrs/resolver-binding-win32-arm64-msvc": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-win32-arm64-msvc/-/resolver-binding-win32-arm64-msvc-1.11.1.tgz", - "integrity": "sha512-nRcz5Il4ln0kMhfL8S3hLkxI85BXs3o8EYoattsJNdsX4YUU89iOkVn7g0VHSRxFuVMdM4Q1jEpIId1Ihim/Uw==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "win32" - ] - }, - "node_modules/@unrs/resolver-binding-win32-ia32-msvc": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-win32-ia32-msvc/-/resolver-binding-win32-ia32-msvc-1.11.1.tgz", - "integrity": "sha512-DCEI6t5i1NmAZp6pFonpD5m7i6aFrpofcp4LA2i8IIq60Jyo28hamKBxNrZcyOwVOZkgsRp9O2sXWBWP8MnvIQ==", - "cpu": [ - "ia32" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "win32" - ] - }, - "node_modules/@unrs/resolver-binding-win32-x64-msvc": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-win32-x64-msvc/-/resolver-binding-win32-x64-msvc-1.11.1.tgz", - "integrity": "sha512-lrW200hZdbfRtztbygyaq/6jP6AKE8qQN2KvPcJ+x7wiD038YtnYtZ82IMNJ69GJibV7bwL3y9FgK+5w/pYt6g==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "win32" - ] - }, "node_modules/@urql/core": { "version": "5.2.0", "resolved": "https://registry.npmjs.org/@urql/core/-/core-5.2.0.tgz", @@ -12152,9 +11933,9 @@ } }, "node_modules/@zenfs/core/node_modules/@types/node": { - "version": "22.19.6", - "resolved": "https://registry.npmjs.org/@types/node/-/node-22.19.6.tgz", - "integrity": "sha512-qm+G8HuG6hOHQigsi7VGuLjUVu6TtBo/F05zvX04Mw2uCg9Dv0Qxy3Qw7j41SidlTcl5D/5yg0SEZqOB+EqZnQ==", + "version": "22.19.3", + "resolved": "https://registry.npmjs.org/@types/node/-/node-22.19.3.tgz", + "integrity": "sha512-1N9SBnWYOJTrNZCdh/yJE+t910Y128BoyY+zBLWhL3r0TYzlTmFdXrPwHL9DyFZmlEXNQQolTZh3KHV31QDhyA==", "license": "MIT", "dependencies": { "undici-types": "~6.21.0" @@ -12572,9 +12353,9 @@ "license": "MIT" }, "node_modules/any-signal": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/any-signal/-/any-signal-4.2.0.tgz", - "integrity": "sha512-LndMvYuAPf4rC195lk7oSFuHOYFpOszIYrNYv0gHAvz+aEhE9qPZLhmrIz5pXP2BSsPOXvsuHDXEGaiQhIh9wA==", + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/any-signal/-/any-signal-4.1.2.tgz", + "integrity": "sha512-bt4O0+GFGFdgtsHw4m/sBSOvunsxZYIw/iFtBTrCsywNwP6sgvKCvxGUMzjZqiFaDxg9MlO0V0Td7cee0OcEbw==", "license": "Apache-2.0 OR MIT", "engines": { "node": ">=16.0.0", @@ -13272,9 +13053,9 @@ } }, "node_modules/babel-preset-expo": { - "version": "54.0.9", - "resolved": "https://registry.npmjs.org/babel-preset-expo/-/babel-preset-expo-54.0.9.tgz", - "integrity": "sha512-8J6hRdgEC2eJobjoft6mKJ294cLxmi3khCUy2JJQp4htOYYkllSLUq6vudWJkTJiIuGdVR4bR6xuz2EvJLWHNg==", + "version": "54.0.8", + "resolved": "https://registry.npmjs.org/babel-preset-expo/-/babel-preset-expo-54.0.8.tgz", + "integrity": "sha512-3ZJ4Q7uQpm8IR/C9xbKhE/IUjGpLm+OIjF8YCedLgqoe/wN1Ns2wLT7HwG6ZXXb6/rzN8IMCiKFQ2F93qlN6GA==", "license": "MIT", "optional": true, "peer": true, @@ -13423,9 +13204,9 @@ } }, "node_modules/baseline-browser-mapping": { - "version": "2.9.14", - "resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.9.14.tgz", - "integrity": "sha512-B0xUquLkiGLgHhpPBqvl7GWegWBUNuujQ6kXd/r1U38ElPT6Ok8KZ8e+FpUGEc2ZoRQUzq/aUnaKFc/svWUGSg==", + "version": "2.9.9", + "resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.9.9.tgz", + "integrity": "sha512-V8fbOCSeOFvlDj7LLChUcqbZrdKD9RU/VR260piF1790vT0mfLSwGc/Qzxv3IqiTukOpNtItePa0HBpMAj7MDg==", "devOptional": true, "license": "Apache-2.0", "bin": { @@ -13570,9 +13351,9 @@ "license": "MIT" }, "node_modules/body-parser": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-2.2.2.tgz", - "integrity": "sha512-oP5VkATKlNwcgvxi0vM0p/D3n2C3EReYVX+DNYs5TjZFn/oQt2j+4sVJtSMr18pdRr8wjTcBl6LoV+FUwzPmNA==", + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-2.2.1.tgz", + "integrity": "sha512-nfDwkulwiZYQIGwxdy0RUmowMhKcFVcYXUU7m4QlKYim1rUtg83xm2yjZ40QjDuc291AJjjeSc9b++AWHSgSHw==", "license": "MIT", "dependencies": { "bytes": "^3.1.2", @@ -13581,7 +13362,7 @@ "http-errors": "^2.0.0", "iconv-lite": "^0.7.0", "on-finished": "^2.4.1", - "qs": "^6.14.1", + "qs": "^6.14.0", "raw-body": "^3.0.1", "type-is": "^2.0.1" }, @@ -14320,18 +14101,18 @@ } }, "node_modules/cacheable-request": { - "version": "13.0.18", - "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-13.0.18.tgz", - "integrity": "sha512-rFWadDRKJs3s2eYdXlGggnBZKG7MTblkFBB0YllFds+UYnfogDp2wcR6JN97FhRkHTvq59n2vhNoHNZn29dh/Q==", + "version": "13.0.17", + "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-13.0.17.tgz", + "integrity": "sha512-tQm7K9zC0cJPpbJS8xZ+NUqJ1bZ78jEXc7/G8uqvQTSdEdbmrxdnvxGb7/piCPeICuRY/L82VVt8UA+qpJ8wyw==", "dev": true, "license": "MIT", "dependencies": { "@types/http-cache-semantics": "^4.0.4", "get-stream": "^9.0.1", "http-cache-semantics": "^4.2.0", - "keyv": "^5.5.5", + "keyv": "^5.5.4", "mimic-response": "^4.0.0", - "normalize-url": "^8.1.1", + "normalize-url": "^8.1.0", "responselike": "^4.0.2" }, "engines": { @@ -14489,9 +14270,9 @@ } }, "node_modules/caniuse-lite": { - "version": "1.0.30001764", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001764.tgz", - "integrity": "sha512-9JGuzl2M+vPL+pz70gtMF9sHdMFbY9FJaQBi186cHKH3pSzDvzoUJUPV6fqiKIMyXbud9ZLg4F3Yza1vJ1+93g==", + "version": "1.0.30001760", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001760.tgz", + "integrity": "sha512-7AAMPcueWELt1p3mi13HR/LHH0TJLT11cnwDJEs3xA4+CK/PLKeO9Kl1oru24htkyUKtkGCvAx4ohB0Ttry8Dw==", "devOptional": true, "funding": [ { @@ -14767,9 +14548,9 @@ } }, "node_modules/cjs-module-lexer": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-2.2.0.tgz", - "integrity": "sha512-4bHTS2YuzUvtoLjdy+98ykbNB5jS0+07EvFNXerqZQJ89F7DI6ET7OQo/HJuW6K0aVsKA9hj9/RVb2kQVOrPDQ==", + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-2.1.1.tgz", + "integrity": "sha512-+CmxIZ/L2vNcEfvNtLdU0ZQ6mbq3FZnwAP2PPTiKP+1QOoKwlKlPgb8UKV0Dds7QVaMnHm+FwSft2VB0s/SLjQ==", "dev": true, "license": "MIT" }, @@ -18112,9 +17893,9 @@ } }, "node_modules/esquery": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.7.0.tgz", - "integrity": "sha512-Ap6G0WQwcU/LHsvLwON1fAQX9Zp0A2Y6Y/cJBl9r/JbW90Zyg4/zbG6zzKa2OTALELarYHmKu0GhpM5EO+7T0g==", + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.6.0.tgz", + "integrity": "sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==", "dev": true, "license": "BSD-3-Clause", "dependencies": { @@ -18404,30 +18185,30 @@ } }, "node_modules/expo": { - "version": "54.0.31", - "resolved": "https://registry.npmjs.org/expo/-/expo-54.0.31.tgz", - "integrity": "sha512-kQ3RDqA/a59I7y+oqQGyrPbbYlgPMUdKBOgvFLpoHbD2bCM+F75i4N0mUijy7dG5F/CUCu2qHmGGUCXBbMDkCg==", + "version": "54.0.29", + "resolved": "https://registry.npmjs.org/expo/-/expo-54.0.29.tgz", + "integrity": "sha512-9C90gyOzV83y2S3XzCbRDCuKYNaiyCzuP9ketv46acHCEZn+QTamPK/DobdghoSiofCmlfoaiD6/SzfxDiHMnw==", "license": "MIT", "optional": true, "peer": true, "dependencies": { "@babel/runtime": "^7.20.0", - "@expo/cli": "54.0.21", - "@expo/config": "~12.0.13", + "@expo/cli": "54.0.19", + "@expo/config": "~12.0.12", "@expo/config-plugins": "~54.0.4", "@expo/devtools": "0.1.8", "@expo/fingerprint": "0.15.4", - "@expo/metro": "~54.2.0", - "@expo/metro-config": "54.0.13", + "@expo/metro": "~54.1.0", + "@expo/metro-config": "54.0.11", "@expo/vector-icons": "^15.0.3", "@ungap/structured-clone": "^1.3.0", - "babel-preset-expo": "~54.0.9", - "expo-asset": "~12.0.12", - "expo-constants": "~18.0.13", + "babel-preset-expo": "~54.0.8", + "expo-asset": "~12.0.11", + "expo-constants": "~18.0.12", "expo-file-system": "~19.0.21", "expo-font": "~14.0.10", "expo-keep-awake": "~15.0.8", - "expo-modules-autolinking": "3.0.24", + "expo-modules-autolinking": "3.0.23", "expo-modules-core": "3.0.29", "pretty-format": "^29.7.0", "react-refresh": "^0.14.2", @@ -18458,15 +18239,15 @@ } }, "node_modules/expo-asset": { - "version": "12.0.12", - "resolved": "https://registry.npmjs.org/expo-asset/-/expo-asset-12.0.12.tgz", - "integrity": "sha512-CsXFCQbx2fElSMn0lyTdRIyKlSXOal6ilLJd+yeZ6xaC7I9AICQgscY5nj0QcwgA+KYYCCEQEBndMsmj7drOWQ==", + "version": "12.0.11", + "resolved": "https://registry.npmjs.org/expo-asset/-/expo-asset-12.0.11.tgz", + "integrity": "sha512-pnK/gQ5iritDPBeK54BV35ZpG7yeW5DtgGvJHruIXkyDT9BCoQq3i0AAxfcWG/e4eiRmTzAt5kNVYFJi48uo+A==", "license": "MIT", "optional": true, "peer": true, "dependencies": { "@expo/image-utils": "^0.8.8", - "expo-constants": "~18.0.12" + "expo-constants": "~18.0.11" }, "peerDependencies": { "expo": "*", @@ -18475,14 +18256,14 @@ } }, "node_modules/expo-constants": { - "version": "18.0.13", - "resolved": "https://registry.npmjs.org/expo-constants/-/expo-constants-18.0.13.tgz", - "integrity": "sha512-FnZn12E1dRYKDHlAdIyNFhBurKTS3F9CrfrBDJI5m3D7U17KBHMQ6JEfYlSj7LG7t+Ulr+IKaj58L1k5gBwTcQ==", + "version": "18.0.12", + "resolved": "https://registry.npmjs.org/expo-constants/-/expo-constants-18.0.12.tgz", + "integrity": "sha512-WzcKYMVNRRu4NcSzfIVRD5aUQFnSpTZgXFrlWmm19xJoDa4S3/PQNi6PNTBRc49xz9h8FT7HMxRKaC8lr0gflA==", "license": "MIT", "optional": true, "peer": true, "dependencies": { - "@expo/config": "~12.0.13", + "@expo/config": "~12.0.12", "@expo/env": "~2.0.8" }, "peerDependencies": { @@ -18657,9 +18438,9 @@ } }, "node_modules/expo/node_modules/expo-modules-autolinking": { - "version": "3.0.24", - "resolved": "https://registry.npmjs.org/expo-modules-autolinking/-/expo-modules-autolinking-3.0.24.tgz", - "integrity": "sha512-TP+6HTwhL7orDvsz2VzauyQlXJcAWyU3ANsZ7JGL4DQu8XaZv/A41ZchbtAYLfozNA2Ya1Hzmhx65hXryBMjaQ==", + "version": "3.0.23", + "resolved": "https://registry.npmjs.org/expo-modules-autolinking/-/expo-modules-autolinking-3.0.23.tgz", + "integrity": "sha512-YZnaE0G+52xftjH5nsIRaWsoVBY38SQCECclpdgLisdbRY/6Mzo7ndokjauOv3mpFmzMZACHyJNu1YSAffQwTg==", "license": "MIT", "optional": true, "peer": true, @@ -18954,9 +18735,9 @@ } }, "node_modules/fastq": { - "version": "1.20.1", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.20.1.tgz", - "integrity": "sha512-GGToxJ/w1x32s/D2EKND7kTil4n8OVk/9mycTc4VDza13lOvpUZTGX3mFSCtV9ksdGBVzvsyAVLM6mHFThxXxw==", + "version": "1.19.1", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.19.1.tgz", + "integrity": "sha512-GwLTyxkCXjXbxqIhTsMI2Nui8huMPtnxg7krajPJAjnEG/iiOS7i+zCtWGZR9G0NBKbXKh6X9m9UIsYX/N6vvQ==", "license": "ISC", "dependencies": { "reusify": "^1.0.4" @@ -19019,37 +18800,27 @@ } }, "node_modules/fengari": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/fengari/-/fengari-0.1.5.tgz", - "integrity": "sha512-0DS4Nn4rV8qyFlQCpKK8brT61EUtswynrpfFTcgLErcilBIBskSMQ86fO2WVuybr14ywyKdRjv91FiRZwnEuvQ==", + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/fengari/-/fengari-0.1.4.tgz", + "integrity": "sha512-6ujqUuiIYmcgkGz8MGAdERU57EIluGGPSUgGPTsco657EHa+srq0S3/YUl/r9kx1+D+d4rGfYObd+m8K22gB1g==", "dev": true, "license": "MIT", "dependencies": { - "readline-sync": "^1.4.10", - "sprintf-js": "^1.1.3", - "tmp": "^0.2.5" + "readline-sync": "^1.4.9", + "sprintf-js": "^1.1.1", + "tmp": "^0.0.33" } }, "node_modules/fengari-interop": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/fengari-interop/-/fengari-interop-0.1.4.tgz", - "integrity": "sha512-4/CW/3PJUo3ebD4ACgE1g/3NGEYSq7OQAyETyypsAl/WeySDBbxExikkayNkZzbpgyC9GyJp8v1DU2VOXxNq7Q==", + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/fengari-interop/-/fengari-interop-0.1.3.tgz", + "integrity": "sha512-EtZ+oTu3kEwVJnoymFPBVLIbQcCoy9uWCVnMA6h3M/RqHkUBsLYp29+RRHf9rKr6GwjubWREU1O7RretFIXjHw==", "dev": true, "license": "MIT", "peerDependencies": { "fengari": "^0.1.0" } }, - "node_modules/fengari/node_modules/tmp": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.5.tgz", - "integrity": "sha512-voyz6MApa1rQGUxT3E+BK7/ROe8itEx7vD8/HEvt4xwXucvQ5G5oeEiHkmHZJuBO21RpOf+YYm9MOivj709jow==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=14.14" - } - }, "node_modules/fetch-blob": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/fetch-blob/-/fetch-blob-3.2.0.tgz", @@ -19585,9 +19356,9 @@ } }, "node_modules/fs-extra": { - "version": "11.3.3", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.3.3.tgz", - "integrity": "sha512-VWSRii4t0AFm6ixFFmLLx1t7wS1gh+ckoa84aOeapGum0h+EZd1EhEumSB+ZdDLnEPuucsVB9oB7cxJHap6Afg==", + "version": "11.3.2", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.3.2.tgz", + "integrity": "sha512-Xr9F6z6up6Ws+NjzMCZc6WXg2YFRlrLP9NQDO3VQrWrfiojdhS56TzueT88ze0uBdCTwEIhQ3ptnmKeWGFAe0A==", "dev": true, "license": "MIT", "dependencies": { @@ -20059,9 +19830,9 @@ } }, "node_modules/got": { - "version": "14.6.6", - "resolved": "https://registry.npmjs.org/got/-/got-14.6.6.tgz", - "integrity": "sha512-QLV1qeYSo5l13mQzWgP/y0LbMr5Plr5fJilgAIwgnwseproEbtNym8xpLsDzeZ6MWXgNE6kdWGBjdh3zT/Qerg==", + "version": "14.6.5", + "resolved": "https://registry.npmjs.org/got/-/got-14.6.5.tgz", + "integrity": "sha512-Su87c0NNeg97de1sO02gy9I8EmE7DCJ1gzcFLcgGpYeq2PnLg4xz73MWrp6HjqbSsjb6Glf4UBDW6JNyZA6uSg==", "dev": true, "license": "MIT", "dependencies": { @@ -20993,9 +20764,9 @@ } }, "node_modules/iconv-lite": { - "version": "0.7.2", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.7.2.tgz", - "integrity": "sha512-im9DjEDQ55s9fL4EYzOAv0yMqmMBSZp6G0VvFyTMPKWxiSBHUj9NW/qqLmXUwXrrM7AvqSlTCfvqRb0cM8yYqw==", + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.7.1.tgz", + "integrity": "sha512-2Tth85cXwGFHfvRgZWszZSvdo+0Xsqmw8k8ZwxScfcBneNUraK+dxRxRm24nszx80Y0TVio8kKLt5sLE7ZCLlw==", "license": "MIT", "dependencies": { "safer-buffer": ">= 2.1.2 < 3.0.0" @@ -24224,9 +23995,9 @@ } }, "node_modules/ky": { - "version": "1.14.2", - "resolved": "https://registry.npmjs.org/ky/-/ky-1.14.2.tgz", - "integrity": "sha512-q3RBbsO5A5zrPhB6CaCS8ZUv+NWCXv6JJT4Em0i264G9W0fdPB8YRfnnEi7Dm7X7omAkBIPojzYJ2D1oHTHqug==", + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/ky/-/ky-1.14.1.tgz", + "integrity": "sha512-hYje4L9JCmpEQBtudo+v52X5X8tgWXUYyPcxKSuxQNboqufecl9VMWjGiucAFH060AwPXHZuH+WB2rrqfkmafw==", "license": "MIT", "engines": { "node": ">=18" @@ -24295,9 +24066,9 @@ } }, "node_modules/libphonenumber-js": { - "version": "1.12.34", - "resolved": "https://registry.npmjs.org/libphonenumber-js/-/libphonenumber-js-1.12.34.tgz", - "integrity": "sha512-v/Ip8k8eYdp7bINpzqDh46V/PaQ8sK+qi97nMQgjZzFlb166YFqlR/HVI+MzsI9JqcyyVWCOipmmretiaSyQyw==", + "version": "1.12.31", + "resolved": "https://registry.npmjs.org/libphonenumber-js/-/libphonenumber-js-1.12.31.tgz", + "integrity": "sha512-Z3IhgVgrqO1S5xPYM3K5XwbkDasU67/Vys4heW+lfSBALcUZjeIIzI8zCLifY+OCzSq+fpDdywMDa7z+4srJPQ==", "license": "MIT" }, "node_modules/libs": { @@ -24397,27 +24168,6 @@ "lightningcss-win32-x64-msvc": "1.30.2" } }, - "node_modules/lightningcss-android-arm64": { - "version": "1.30.2", - "resolved": "https://registry.npmjs.org/lightningcss-android-arm64/-/lightningcss-android-arm64-1.30.2.tgz", - "integrity": "sha512-BH9sEdOCahSgmkVhBLeU7Hc9DWeZ1Eb6wNS6Da8igvUwAe0sqROHddIlvU06q3WyXVEOYDZ6ykBZQnjTbmo4+A==", - "cpu": [ - "arm64" - ], - "license": "MPL-2.0", - "optional": true, - "os": [ - "android" - ], - "peer": true, - "engines": { - "node": ">= 12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, "node_modules/lightningcss-darwin-arm64": { "version": "1.30.2", "resolved": "https://registry.npmjs.org/lightningcss-darwin-arm64/-/lightningcss-darwin-arm64-1.30.2.tgz", @@ -24439,195 +24189,6 @@ "url": "https://opencollective.com/parcel" } }, - "node_modules/lightningcss-darwin-x64": { - "version": "1.30.2", - "resolved": "https://registry.npmjs.org/lightningcss-darwin-x64/-/lightningcss-darwin-x64-1.30.2.tgz", - "integrity": "sha512-oBZgKchomuDYxr7ilwLcyms6BCyLn0z8J0+ZZmfpjwg9fRVZIR5/GMXd7r9RH94iDhld3UmSjBM6nXWM2TfZTQ==", - "cpu": [ - "x64" - ], - "license": "MPL-2.0", - "optional": true, - "os": [ - "darwin" - ], - "peer": true, - "engines": { - "node": ">= 12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/lightningcss-freebsd-x64": { - "version": "1.30.2", - "resolved": "https://registry.npmjs.org/lightningcss-freebsd-x64/-/lightningcss-freebsd-x64-1.30.2.tgz", - "integrity": "sha512-c2bH6xTrf4BDpK8MoGG4Bd6zAMZDAXS569UxCAGcA7IKbHNMlhGQ89eRmvpIUGfKWNVdbhSbkQaWhEoMGmGslA==", - "cpu": [ - "x64" - ], - "license": "MPL-2.0", - "optional": true, - "os": [ - "freebsd" - ], - "peer": true, - "engines": { - "node": ">= 12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/lightningcss-linux-arm-gnueabihf": { - "version": "1.30.2", - "resolved": "https://registry.npmjs.org/lightningcss-linux-arm-gnueabihf/-/lightningcss-linux-arm-gnueabihf-1.30.2.tgz", - "integrity": "sha512-eVdpxh4wYcm0PofJIZVuYuLiqBIakQ9uFZmipf6LF/HRj5Bgm0eb3qL/mr1smyXIS1twwOxNWndd8z0E374hiA==", - "cpu": [ - "arm" - ], - "license": "MPL-2.0", - "optional": true, - "os": [ - "linux" - ], - "peer": true, - "engines": { - "node": ">= 12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/lightningcss-linux-arm64-gnu": { - "version": "1.30.2", - "resolved": "https://registry.npmjs.org/lightningcss-linux-arm64-gnu/-/lightningcss-linux-arm64-gnu-1.30.2.tgz", - "integrity": "sha512-UK65WJAbwIJbiBFXpxrbTNArtfuznvxAJw4Q2ZGlU8kPeDIWEX1dg3rn2veBVUylA2Ezg89ktszWbaQnxD/e3A==", - "cpu": [ - "arm64" - ], - "license": "MPL-2.0", - "optional": true, - "os": [ - "linux" - ], - "peer": true, - "engines": { - "node": ">= 12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/lightningcss-linux-arm64-musl": { - "version": "1.30.2", - "resolved": "https://registry.npmjs.org/lightningcss-linux-arm64-musl/-/lightningcss-linux-arm64-musl-1.30.2.tgz", - "integrity": "sha512-5Vh9dGeblpTxWHpOx8iauV02popZDsCYMPIgiuw97OJ5uaDsL86cnqSFs5LZkG3ghHoX5isLgWzMs+eD1YzrnA==", - "cpu": [ - "arm64" - ], - "license": "MPL-2.0", - "optional": true, - "os": [ - "linux" - ], - "peer": true, - "engines": { - "node": ">= 12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/lightningcss-linux-x64-gnu": { - "version": "1.30.2", - "resolved": "https://registry.npmjs.org/lightningcss-linux-x64-gnu/-/lightningcss-linux-x64-gnu-1.30.2.tgz", - "integrity": "sha512-Cfd46gdmj1vQ+lR6VRTTadNHu6ALuw2pKR9lYq4FnhvgBc4zWY1EtZcAc6EffShbb1MFrIPfLDXD6Xprbnni4w==", - "cpu": [ - "x64" - ], - "license": "MPL-2.0", - "optional": true, - "os": [ - "linux" - ], - "peer": true, - "engines": { - "node": ">= 12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/lightningcss-linux-x64-musl": { - "version": "1.30.2", - "resolved": "https://registry.npmjs.org/lightningcss-linux-x64-musl/-/lightningcss-linux-x64-musl-1.30.2.tgz", - "integrity": "sha512-XJaLUUFXb6/QG2lGIW6aIk6jKdtjtcffUT0NKvIqhSBY3hh9Ch+1LCeH80dR9q9LBjG3ewbDjnumefsLsP6aiA==", - "cpu": [ - "x64" - ], - "license": "MPL-2.0", - "optional": true, - "os": [ - "linux" - ], - "peer": true, - "engines": { - "node": ">= 12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/lightningcss-win32-arm64-msvc": { - "version": "1.30.2", - "resolved": "https://registry.npmjs.org/lightningcss-win32-arm64-msvc/-/lightningcss-win32-arm64-msvc-1.30.2.tgz", - "integrity": "sha512-FZn+vaj7zLv//D/192WFFVA0RgHawIcHqLX9xuWiQt7P0PtdFEVaxgF9rjM/IRYHQXNnk61/H/gb2Ei+kUQ4xQ==", - "cpu": [ - "arm64" - ], - "license": "MPL-2.0", - "optional": true, - "os": [ - "win32" - ], - "peer": true, - "engines": { - "node": ">= 12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/lightningcss-win32-x64-msvc": { - "version": "1.30.2", - "resolved": "https://registry.npmjs.org/lightningcss-win32-x64-msvc/-/lightningcss-win32-x64-msvc-1.30.2.tgz", - "integrity": "sha512-5g1yc73p+iAkid5phb4oVFMB45417DkRevRbt/El/gKXJk4jid+vPFF/AXbxn05Aky8PapwzZrdJShv5C0avjw==", - "cpu": [ - "x64" - ], - "license": "MPL-2.0", - "optional": true, - "os": [ - "win32" - ], - "peer": true, - "engines": { - "node": ">= 12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, "node_modules/lines-and-columns": { "version": "1.2.4", "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", @@ -25604,9 +25165,9 @@ } }, "node_modules/metro": { - "version": "0.83.3", - "resolved": "https://registry.npmjs.org/metro/-/metro-0.83.3.tgz", - "integrity": "sha512-+rP+/GieOzkt97hSJ0MrPOuAH/jpaS21ZDvL9DJ35QYRDlQcwzcvUlGUf79AnQxq/2NPiS/AULhhM4TKutIt8Q==", + "version": "0.83.2", + "resolved": "https://registry.npmjs.org/metro/-/metro-0.83.2.tgz", + "integrity": "sha512-HQgs9H1FyVbRptNSMy/ImchTTE5vS2MSqLoOo7hbDoBq6hPPZokwJvBMwrYSxdjQZmLXz2JFZtdvS+ZfgTc9yw==", "license": "MIT", "optional": true, "peer": true, @@ -25632,18 +25193,18 @@ "jest-worker": "^29.7.0", "jsc-safe-url": "^0.2.2", "lodash.throttle": "^4.1.1", - "metro-babel-transformer": "0.83.3", - "metro-cache": "0.83.3", - "metro-cache-key": "0.83.3", - "metro-config": "0.83.3", - "metro-core": "0.83.3", - "metro-file-map": "0.83.3", - "metro-resolver": "0.83.3", - "metro-runtime": "0.83.3", - "metro-source-map": "0.83.3", - "metro-symbolicate": "0.83.3", - "metro-transform-plugins": "0.83.3", - "metro-transform-worker": "0.83.3", + "metro-babel-transformer": "0.83.2", + "metro-cache": "0.83.2", + "metro-cache-key": "0.83.2", + "metro-config": "0.83.2", + "metro-core": "0.83.2", + "metro-file-map": "0.83.2", + "metro-resolver": "0.83.2", + "metro-runtime": "0.83.2", + "metro-source-map": "0.83.2", + "metro-symbolicate": "0.83.2", + "metro-transform-plugins": "0.83.2", + "metro-transform-worker": "0.83.2", "mime-types": "^2.1.27", "nullthrows": "^1.1.1", "serialize-error": "^2.1.0", @@ -25660,9 +25221,9 @@ } }, "node_modules/metro-babel-transformer": { - "version": "0.83.3", - "resolved": "https://registry.npmjs.org/metro-babel-transformer/-/metro-babel-transformer-0.83.3.tgz", - "integrity": "sha512-1vxlvj2yY24ES1O5RsSIvg4a4WeL7PFXgKOHvXTXiW0deLvQr28ExXj6LjwCCDZ4YZLhq6HddLpZnX4dEdSq5g==", + "version": "0.83.2", + "resolved": "https://registry.npmjs.org/metro-babel-transformer/-/metro-babel-transformer-0.83.2.tgz", + "integrity": "sha512-rirY1QMFlA1uxH3ZiNauBninwTioOgwChnRdDcbB4tgRZ+bGX9DiXoh9QdpppiaVKXdJsII932OwWXGGV4+Nlw==", "license": "MIT", "optional": true, "peer": true, @@ -25696,9 +25257,9 @@ } }, "node_modules/metro-cache": { - "version": "0.83.3", - "resolved": "https://registry.npmjs.org/metro-cache/-/metro-cache-0.83.3.tgz", - "integrity": "sha512-3jo65X515mQJvKqK3vWRblxDEcgY55Sk3w4xa6LlfEXgQ9g1WgMh9m4qVZVwgcHoLy0a2HENTPCCX4Pk6s8c8Q==", + "version": "0.83.2", + "resolved": "https://registry.npmjs.org/metro-cache/-/metro-cache-0.83.2.tgz", + "integrity": "sha512-Z43IodutUZeIS7OTH+yQFjc59QlFJ6s5OvM8p2AP9alr0+F8UKr8ADzFzoGKoHefZSKGa4bJx7MZJLF6GwPDHQ==", "license": "MIT", "optional": true, "peer": true, @@ -25706,16 +25267,16 @@ "exponential-backoff": "^3.1.1", "flow-enums-runtime": "^0.0.6", "https-proxy-agent": "^7.0.5", - "metro-core": "0.83.3" + "metro-core": "0.83.2" }, "engines": { "node": ">=20.19.4" } }, "node_modules/metro-cache-key": { - "version": "0.83.3", - "resolved": "https://registry.npmjs.org/metro-cache-key/-/metro-cache-key-0.83.3.tgz", - "integrity": "sha512-59ZO049jKzSmvBmG/B5bZ6/dztP0ilp0o988nc6dpaDsU05Cl1c/lRf+yx8m9WW/JVgbmfO5MziBU559XjI5Zw==", + "version": "0.83.2", + "resolved": "https://registry.npmjs.org/metro-cache-key/-/metro-cache-key-0.83.2.tgz", + "integrity": "sha512-3EMG/GkGKYoTaf5RqguGLSWRqGTwO7NQ0qXKmNBjr0y6qD9s3VBXYlwB+MszGtmOKsqE9q3FPrE5Nd9Ipv7rZw==", "license": "MIT", "optional": true, "peer": true, @@ -25727,9 +25288,9 @@ } }, "node_modules/metro-config": { - "version": "0.83.3", - "resolved": "https://registry.npmjs.org/metro-config/-/metro-config-0.83.3.tgz", - "integrity": "sha512-mTel7ipT0yNjKILIan04bkJkuCzUUkm2SeEaTads8VfEecCh+ltXchdq6DovXJqzQAXuR2P9cxZB47Lg4klriA==", + "version": "0.83.2", + "resolved": "https://registry.npmjs.org/metro-config/-/metro-config-0.83.2.tgz", + "integrity": "sha512-1FjCcdBe3e3D08gSSiU9u3Vtxd7alGH3x/DNFqWDFf5NouX4kLgbVloDDClr1UrLz62c0fHh2Vfr9ecmrOZp+g==", "license": "MIT", "optional": true, "peer": true, @@ -25737,10 +25298,10 @@ "connect": "^3.6.5", "flow-enums-runtime": "^0.0.6", "jest-validate": "^29.7.0", - "metro": "0.83.3", - "metro-cache": "0.83.3", - "metro-core": "0.83.3", - "metro-runtime": "0.83.3", + "metro": "0.83.2", + "metro-cache": "0.83.2", + "metro-core": "0.83.2", + "metro-runtime": "0.83.2", "yaml": "^2.6.1" }, "engines": { @@ -25863,25 +25424,25 @@ } }, "node_modules/metro-core": { - "version": "0.83.3", - "resolved": "https://registry.npmjs.org/metro-core/-/metro-core-0.83.3.tgz", - "integrity": "sha512-M+X59lm7oBmJZamc96usuF1kusd5YimqG/q97g4Ac7slnJ3YiGglW5CsOlicTR5EWf8MQFxxjDoB6ytTqRe8Hw==", + "version": "0.83.2", + "resolved": "https://registry.npmjs.org/metro-core/-/metro-core-0.83.2.tgz", + "integrity": "sha512-8DRb0O82Br0IW77cNgKMLYWUkx48lWxUkvNUxVISyMkcNwE/9ywf1MYQUE88HaKwSrqne6kFgCSA/UWZoUT0Iw==", "license": "MIT", "optional": true, "peer": true, "dependencies": { "flow-enums-runtime": "^0.0.6", "lodash.throttle": "^4.1.1", - "metro-resolver": "0.83.3" + "metro-resolver": "0.83.2" }, "engines": { "node": ">=20.19.4" } }, "node_modules/metro-file-map": { - "version": "0.83.3", - "resolved": "https://registry.npmjs.org/metro-file-map/-/metro-file-map-0.83.3.tgz", - "integrity": "sha512-jg5AcyE0Q9Xbbu/4NAwwZkmQn7doJCKGW0SLeSJmzNB9Z24jBe0AL2PHNMy4eu0JiKtNWHz9IiONGZWq7hjVTA==", + "version": "0.83.2", + "resolved": "https://registry.npmjs.org/metro-file-map/-/metro-file-map-0.83.2.tgz", + "integrity": "sha512-cMSWnEqZrp/dzZIEd7DEDdk72PXz6w5NOKriJoDN9p1TDQ5nAYrY2lHi8d6mwbcGLoSlWmpPyny9HZYFfPWcGQ==", "license": "MIT", "optional": true, "peer": true, @@ -26009,9 +25570,9 @@ } }, "node_modules/metro-minify-terser": { - "version": "0.83.3", - "resolved": "https://registry.npmjs.org/metro-minify-terser/-/metro-minify-terser-0.83.3.tgz", - "integrity": "sha512-O2BmfWj6FSfzBLrNCXt/rr2VYZdX5i6444QJU0fFoc7Ljg+Q+iqebwE3K0eTvkI6TRjELsXk1cjU+fXwAR4OjQ==", + "version": "0.83.2", + "resolved": "https://registry.npmjs.org/metro-minify-terser/-/metro-minify-terser-0.83.2.tgz", + "integrity": "sha512-zvIxnh7U0JQ7vT4quasKsijId3dOAWgq+ip2jF/8TMrPUqQabGrs04L2dd0haQJ+PA+d4VvK/bPOY8X/vL2PWw==", "license": "MIT", "optional": true, "peer": true, @@ -26024,9 +25585,9 @@ } }, "node_modules/metro-resolver": { - "version": "0.83.3", - "resolved": "https://registry.npmjs.org/metro-resolver/-/metro-resolver-0.83.3.tgz", - "integrity": "sha512-0js+zwI5flFxb1ktmR///bxHYg7OLpRpWZlBBruYG8OKYxeMP7SV0xQ/o/hUelrEMdK4LJzqVtHAhBm25LVfAQ==", + "version": "0.83.2", + "resolved": "https://registry.npmjs.org/metro-resolver/-/metro-resolver-0.83.2.tgz", + "integrity": "sha512-Yf5mjyuiRE/Y+KvqfsZxrbHDA15NZxyfg8pIk0qg47LfAJhpMVEX+36e6ZRBq7KVBqy6VDX5Sq55iHGM4xSm7Q==", "license": "MIT", "optional": true, "peer": true, @@ -26038,9 +25599,9 @@ } }, "node_modules/metro-runtime": { - "version": "0.83.3", - "resolved": "https://registry.npmjs.org/metro-runtime/-/metro-runtime-0.83.3.tgz", - "integrity": "sha512-JHCJb9ebr9rfJ+LcssFYA2x1qPYuSD/bbePupIGhpMrsla7RCwC/VL3yJ9cSU+nUhU4c9Ixxy8tBta+JbDeZWw==", + "version": "0.83.2", + "resolved": "https://registry.npmjs.org/metro-runtime/-/metro-runtime-0.83.2.tgz", + "integrity": "sha512-nnsPtgRvFbNKwemqs0FuyFDzXLl+ezuFsUXDbX8o0SXOfsOPijqiQrf3kuafO1Zx1aUWf4NOrKJMAQP5EEHg9A==", "license": "MIT", "optional": true, "peer": true, @@ -26053,9 +25614,9 @@ } }, "node_modules/metro-source-map": { - "version": "0.83.3", - "resolved": "https://registry.npmjs.org/metro-source-map/-/metro-source-map-0.83.3.tgz", - "integrity": "sha512-xkC3qwUBh2psVZgVavo8+r2C9Igkk3DibiOXSAht1aYRRcztEZNFtAMtfSB7sdO2iFMx2Mlyu++cBxz/fhdzQg==", + "version": "0.83.2", + "resolved": "https://registry.npmjs.org/metro-source-map/-/metro-source-map-0.83.2.tgz", + "integrity": "sha512-5FL/6BSQvshIKjXOennt9upFngq2lFvDakZn5LfauIVq8+L4sxXewIlSTcxAtzbtjAIaXeOSVMtCJ5DdfCt9AA==", "license": "MIT", "optional": true, "peer": true, @@ -26065,9 +25626,9 @@ "@babel/types": "^7.25.2", "flow-enums-runtime": "^0.0.6", "invariant": "^2.2.4", - "metro-symbolicate": "0.83.3", + "metro-symbolicate": "0.83.2", "nullthrows": "^1.1.1", - "ob1": "0.83.3", + "ob1": "0.83.2", "source-map": "^0.5.6", "vlq": "^1.0.0" }, @@ -26087,16 +25648,16 @@ } }, "node_modules/metro-symbolicate": { - "version": "0.83.3", - "resolved": "https://registry.npmjs.org/metro-symbolicate/-/metro-symbolicate-0.83.3.tgz", - "integrity": "sha512-F/YChgKd6KbFK3eUR5HdUsfBqVsanf5lNTwFd4Ca7uuxnHgBC3kR/Hba/RGkenR3pZaGNp5Bu9ZqqP52Wyhomw==", + "version": "0.83.2", + "resolved": "https://registry.npmjs.org/metro-symbolicate/-/metro-symbolicate-0.83.2.tgz", + "integrity": "sha512-KoU9BLwxxED6n33KYuQQuc5bXkIxF3fSwlc3ouxrrdLWwhu64muYZNQrukkWzhVKRNFIXW7X2iM8JXpi2heIPw==", "license": "MIT", "optional": true, "peer": true, "dependencies": { "flow-enums-runtime": "^0.0.6", "invariant": "^2.2.4", - "metro-source-map": "0.83.3", + "metro-source-map": "0.83.2", "nullthrows": "^1.1.1", "source-map": "^0.5.6", "vlq": "^1.0.0" @@ -26120,9 +25681,9 @@ } }, "node_modules/metro-transform-plugins": { - "version": "0.83.3", - "resolved": "https://registry.npmjs.org/metro-transform-plugins/-/metro-transform-plugins-0.83.3.tgz", - "integrity": "sha512-eRGoKJU6jmqOakBMH5kUB7VitEWiNrDzBHpYbkBXW7C5fUGeOd2CyqrosEzbMK5VMiZYyOcNFEphvxk3OXey2A==", + "version": "0.83.2", + "resolved": "https://registry.npmjs.org/metro-transform-plugins/-/metro-transform-plugins-0.83.2.tgz", + "integrity": "sha512-5WlW25WKPkiJk2yA9d8bMuZrgW7vfA4f4MBb9ZeHbTB3eIAoNN8vS8NENgG/X/90vpTB06X66OBvxhT3nHwP6A==", "license": "MIT", "optional": true, "peer": true, @@ -26139,9 +25700,9 @@ } }, "node_modules/metro-transform-worker": { - "version": "0.83.3", - "resolved": "https://registry.npmjs.org/metro-transform-worker/-/metro-transform-worker-0.83.3.tgz", - "integrity": "sha512-Ztekew9t/gOIMZX1tvJOgX7KlSLL5kWykl0Iwu2cL2vKMKVALRl1hysyhUw0vjpAvLFx+Kfq9VLjnHIkW32fPA==", + "version": "0.83.2", + "resolved": "https://registry.npmjs.org/metro-transform-worker/-/metro-transform-worker-0.83.2.tgz", + "integrity": "sha512-G5DsIg+cMZ2KNfrdLnWMvtppb3+Rp1GMyj7Bvd9GgYc/8gRmvq1XVEF9XuO87Shhb03kFhGqMTgZerz3hZ1v4Q==", "license": "MIT", "optional": true, "peer": true, @@ -26151,13 +25712,13 @@ "@babel/parser": "^7.25.3", "@babel/types": "^7.25.2", "flow-enums-runtime": "^0.0.6", - "metro": "0.83.3", - "metro-babel-transformer": "0.83.3", - "metro-cache": "0.83.3", - "metro-cache-key": "0.83.3", - "metro-minify-terser": "0.83.3", - "metro-source-map": "0.83.3", - "metro-transform-plugins": "0.83.3", + "metro": "0.83.2", + "metro-babel-transformer": "0.83.2", + "metro-cache": "0.83.2", + "metro-cache-key": "0.83.2", + "metro-minify-terser": "0.83.2", + "metro-source-map": "0.83.2", + "metro-transform-plugins": "0.83.2", "nullthrows": "^1.1.1" }, "engines": { @@ -29186,9 +28747,9 @@ } }, "node_modules/normalize-url": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-8.1.1.tgz", - "integrity": "sha512-JYc0DPlpGWB40kH5g07gGTrYuMqV653k3uBKY6uITPWds3M0ov3GaWGp9lbE3Bzngx8+XkfzgvASb9vk9JDFXQ==", + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-8.1.0.tgz", + "integrity": "sha512-X06Mfd/5aKsRHc0O0J5CUedwnPmnDtLF2+nq+KN9KSDlJHkPuh0JUviWjEWMe0SW/9TDdSLVPuk7L5gGTIA1/w==", "dev": true, "license": "MIT", "engines": { @@ -29348,9 +28909,9 @@ } }, "node_modules/ob1": { - "version": "0.83.3", - "resolved": "https://registry.npmjs.org/ob1/-/ob1-0.83.3.tgz", - "integrity": "sha512-egUxXCDwoWG06NGCS5s5AdcpnumHKJlfd3HH06P3m9TEMwwScfcY35wpQxbm9oHof+dM/lVH9Rfyu1elTVelSA==", + "version": "0.83.2", + "resolved": "https://registry.npmjs.org/ob1/-/ob1-0.83.2.tgz", + "integrity": "sha512-XlK3w4M+dwd1g1gvHzVbxiXEbUllRONEgcF2uEO0zm4nxa0eKlh41c6N65q1xbiDOeKKda1tvNOAD33fNjyvCg==", "license": "MIT", "optional": true, "peer": true, @@ -29913,9 +29474,9 @@ } }, "node_modules/p-queue": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/p-queue/-/p-queue-9.1.0.tgz", - "integrity": "sha512-O/ZPaXuQV29uSLbxWBGGZO1mCQXV2BLIwUr59JUU9SoH76mnYvtms7aafH/isNSNGwuEfP6W/4xD0/TJXxrizw==", + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/p-queue/-/p-queue-9.0.1.tgz", + "integrity": "sha512-RhBdVhSwJb7Ocn3e8ULk4NMwBEuOxe+1zcgphUy9c2e5aR/xbEsdVXxHJ3lynw6Qiqu7OINEyHlZkiblEpaq7w==", "license": "MIT", "dependencies": { "eventemitter3": "^5.0.1", @@ -30201,9 +29762,9 @@ } }, "node_modules/parse-duration": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/parse-duration/-/parse-duration-2.1.5.tgz", - "integrity": "sha512-/IX1KRw6zHDOOJrgIz++gvFASbFl7nc8GEXaLdD7d1t1x/GnrK6hh5Fgk8G3RLpkIEi4tsGj9pupGLWNg0EiJA==", + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/parse-duration/-/parse-duration-2.1.4.tgz", + "integrity": "sha512-b98m6MsCh+akxfyoz9w9dt0AlH2dfYLOBss5SdDsr9pkhKNvkWBXU/r8A4ahmIGByBOLV2+4YwfCuFxbDDaGyg==", "license": "MIT" }, "node_modules/parse-json": { @@ -30644,9 +30205,9 @@ } }, "node_modules/pino-std-serializers": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/pino-std-serializers/-/pino-std-serializers-7.1.0.tgz", - "integrity": "sha512-BndPH67/JxGExRgiX1dX0w1FvZck5Wa4aal9198SrRhZjH3GxKQUKIBnYJTdj2HDN3UQAS06HlfcSbQj2OHmaw==", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/pino-std-serializers/-/pino-std-serializers-7.0.0.tgz", + "integrity": "sha512-e906FRY0+tV27iq4juKzSYPbUj2do2X2JX4EzSca1631EB2QJQUqGbDuERal7LCtOpxl6x3+nvo9NPZcmjkiFA==", "license": "MIT" }, "node_modules/pino/node_modules/sonic-boom": { @@ -30992,9 +30553,9 @@ } }, "node_modules/prettier-linter-helpers": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/prettier-linter-helpers/-/prettier-linter-helpers-1.0.1.tgz", - "integrity": "sha512-SxToR7P8Y2lWmv/kTzVLC1t/GDI2WGjMwNhLLE9qtH8Q13C+aEmuRlzDst4Up4s0Wc8sF2M+J57iB3cMLqftfg==", + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/prettier-linter-helpers/-/prettier-linter-helpers-1.0.0.tgz", + "integrity": "sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w==", "dev": true, "license": "MIT", "dependencies": { @@ -31439,9 +31000,9 @@ } }, "node_modules/qs": { - "version": "6.14.1", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.14.1.tgz", - "integrity": "sha512-4EK3+xJl8Ts67nLYNwqw/dsFVnCf+qR7RgXSK9jEEm9unao3njwMDdmsdvoKBKHzxd7tCYz5e5M+SnMjdtXGQQ==", + "version": "6.14.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.14.0.tgz", + "integrity": "sha512-YWWTjgABSKcvs/nWBi9PycY/JiPJqOD4JA6o9Sej2AtvSGarXxKC3OQSk4pAarbdQlKAh5D4FCQkJNkW+GAn3w==", "license": "BSD-3-Clause", "dependencies": { "side-channel": "^1.1.0" @@ -31764,21 +31325,21 @@ "license": "MIT" }, "node_modules/react-native": { - "version": "0.83.1", - "resolved": "https://registry.npmjs.org/react-native/-/react-native-0.83.1.tgz", - "integrity": "sha512-mL1q5HPq5cWseVhWRLl+Fwvi5z1UO+3vGOpjr+sHFwcUletPRZ5Kv+d0tUfqHmvi73/53NjlQqX1Pyn4GguUfA==", + "version": "0.83.0", + "resolved": "https://registry.npmjs.org/react-native/-/react-native-0.83.0.tgz", + "integrity": "sha512-a8wPjGfkktb1+Mjvzkky3d0u6j6zdWAzftZ2LdQtgRgqkMMfgQxD9S+ri3RNlfAFQpuCAOYUIyrNHiVkUQChxA==", "license": "MIT", "optional": true, "peer": true, "dependencies": { "@jest/create-cache-key-function": "^29.7.0", - "@react-native/assets-registry": "0.83.1", - "@react-native/codegen": "0.83.1", - "@react-native/community-cli-plugin": "0.83.1", - "@react-native/gradle-plugin": "0.83.1", - "@react-native/js-polyfills": "0.83.1", - "@react-native/normalize-colors": "0.83.1", - "@react-native/virtualized-lists": "0.83.1", + "@react-native/assets-registry": "0.83.0", + "@react-native/codegen": "0.83.0", + "@react-native/community-cli-plugin": "0.83.0", + "@react-native/gradle-plugin": "0.83.0", + "@react-native/js-polyfills": "0.83.0", + "@react-native/normalize-colors": "0.83.0", + "@react-native/virtualized-lists": "0.83.0", "abort-controller": "^3.0.0", "anser": "^1.4.9", "ansi-regex": "^5.0.0", @@ -31952,9 +31513,9 @@ } }, "node_modules/react-native/node_modules/@react-native/codegen": { - "version": "0.83.1", - "resolved": "https://registry.npmjs.org/@react-native/codegen/-/codegen-0.83.1.tgz", - "integrity": "sha512-FpRxenonwH+c2a5X5DZMKUD7sCudHxB3eSQPgV9R+uxd28QWslyAWrpnJM/Az96AEksHnymDzEmzq2HLX5nb+g==", + "version": "0.83.0", + "resolved": "https://registry.npmjs.org/@react-native/codegen/-/codegen-0.83.0.tgz", + "integrity": "sha512-3fvMi/pSJHhikjwMZQplU4Ar9ANoR2GSBxotbkKIMI6iNduh+ln1FTvB2me69FA68aHtVZOO+cO+QpGCcvgaMA==", "license": "MIT", "optional": true, "peer": true, @@ -31975,9 +31536,9 @@ } }, "node_modules/react-native/node_modules/@react-native/normalize-colors": { - "version": "0.83.1", - "resolved": "https://registry.npmjs.org/@react-native/normalize-colors/-/normalize-colors-0.83.1.tgz", - "integrity": "sha512-84feABbmeWo1kg81726UOlMKAhcQyFXYz2SjRKYkS78QmfhVDhJ2o/ps1VjhFfBz0i/scDwT1XNv9GwmRIghkg==", + "version": "0.83.0", + "resolved": "https://registry.npmjs.org/@react-native/normalize-colors/-/normalize-colors-0.83.0.tgz", + "integrity": "sha512-DG1ELOqQ6RS82R1zEUGTWa/pfSPOf+vwAnQB7Ao1vRuhW/xdd2OPQJyqx5a5QWMYpGrlkCb7ERxEVX6p2QODCA==", "license": "MIT", "optional": true, "peer": true @@ -32323,6 +31884,80 @@ "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, + "node_modules/react-native/node_modules/metro-runtime": { + "version": "0.83.3", + "resolved": "https://registry.npmjs.org/metro-runtime/-/metro-runtime-0.83.3.tgz", + "integrity": "sha512-JHCJb9ebr9rfJ+LcssFYA2x1qPYuSD/bbePupIGhpMrsla7RCwC/VL3yJ9cSU+nUhU4c9Ixxy8tBta+JbDeZWw==", + "license": "MIT", + "optional": true, + "peer": true, + "dependencies": { + "@babel/runtime": "^7.25.0", + "flow-enums-runtime": "^0.0.6" + }, + "engines": { + "node": ">=20.19.4" + } + }, + "node_modules/react-native/node_modules/metro-source-map": { + "version": "0.83.3", + "resolved": "https://registry.npmjs.org/metro-source-map/-/metro-source-map-0.83.3.tgz", + "integrity": "sha512-xkC3qwUBh2psVZgVavo8+r2C9Igkk3DibiOXSAht1aYRRcztEZNFtAMtfSB7sdO2iFMx2Mlyu++cBxz/fhdzQg==", + "license": "MIT", + "optional": true, + "peer": true, + "dependencies": { + "@babel/traverse": "^7.25.3", + "@babel/traverse--for-generate-function-map": "npm:@babel/traverse@^7.25.3", + "@babel/types": "^7.25.2", + "flow-enums-runtime": "^0.0.6", + "invariant": "^2.2.4", + "metro-symbolicate": "0.83.3", + "nullthrows": "^1.1.1", + "ob1": "0.83.3", + "source-map": "^0.5.6", + "vlq": "^1.0.0" + }, + "engines": { + "node": ">=20.19.4" + } + }, + "node_modules/react-native/node_modules/metro-symbolicate": { + "version": "0.83.3", + "resolved": "https://registry.npmjs.org/metro-symbolicate/-/metro-symbolicate-0.83.3.tgz", + "integrity": "sha512-F/YChgKd6KbFK3eUR5HdUsfBqVsanf5lNTwFd4Ca7uuxnHgBC3kR/Hba/RGkenR3pZaGNp5Bu9ZqqP52Wyhomw==", + "license": "MIT", + "optional": true, + "peer": true, + "dependencies": { + "flow-enums-runtime": "^0.0.6", + "invariant": "^2.2.4", + "metro-source-map": "0.83.3", + "nullthrows": "^1.1.1", + "source-map": "^0.5.6", + "vlq": "^1.0.0" + }, + "bin": { + "metro-symbolicate": "src/index.js" + }, + "engines": { + "node": ">=20.19.4" + } + }, + "node_modules/react-native/node_modules/ob1": { + "version": "0.83.3", + "resolved": "https://registry.npmjs.org/ob1/-/ob1-0.83.3.tgz", + "integrity": "sha512-egUxXCDwoWG06NGCS5s5AdcpnumHKJlfd3HH06P3m9TEMwwScfcY35wpQxbm9oHof+dM/lVH9Rfyu1elTVelSA==", + "license": "MIT", + "optional": true, + "peer": true, + "dependencies": { + "flow-enums-runtime": "^0.0.6" + }, + "engines": { + "node": ">=20.19.4" + } + }, "node_modules/react-native/node_modules/picomatch": { "version": "2.3.1", "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", @@ -32361,6 +31996,17 @@ "optional": true, "peer": true }, + "node_modules/react-native/node_modules/source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==", + "license": "BSD-3-Clause", + "optional": true, + "peer": true, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/react-native/node_modules/supports-color": { "version": "8.1.1", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", @@ -33849,9 +33495,9 @@ } }, "node_modules/resolve-workspace-root": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/resolve-workspace-root/-/resolve-workspace-root-2.0.1.tgz", - "integrity": "sha512-nR23LHAvaI6aHtMg6RWoaHpdR4D881Nydkzi2CixINyg9T00KgaJdJI6Vwty+Ps8WLxZHuxsS0BseWjxSA4C+w==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/resolve-workspace-root/-/resolve-workspace-root-2.0.0.tgz", + "integrity": "sha512-IsaBUZETJD5WsI11Wt8PKHwaIe45or6pwNc8yflvLJ4DWtImK9kuLoH5kUva/2Mmx/RdIyr4aONNSa2v9LTJsw==", "license": "MIT", "optional": true, "peer": true @@ -35712,15 +35358,12 @@ "license": "MIT" }, "node_modules/sax": { - "version": "1.4.4", - "resolved": "https://registry.npmjs.org/sax/-/sax-1.4.4.tgz", - "integrity": "sha512-1n3r/tGXO6b6VXMdFT54SHzT9ytu9yr7TaELowdYpMqY/Ao7EnlQGmAQ1+RatX7Tkkdm6hONI2owqNx2aZj5Sw==", + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/sax/-/sax-1.4.3.tgz", + "integrity": "sha512-yqYn1JhPczigF94DMS+shiDMjDowYO6y9+wB/4WgO0Y19jWYk0lQ4tuG5KI7kj4FTp1wxPj5IFfcrz/s1c3jjQ==", "license": "BlueOak-1.0.0", "optional": true, - "peer": true, - "engines": { - "node": ">=11.0.0" - } + "peer": true }, "node_modules/scale-ts": { "version": "1.6.1", @@ -37948,9 +37591,9 @@ "license": "MIT" }, "node_modules/superagent": { - "version": "10.3.0", - "resolved": "https://registry.npmjs.org/superagent/-/superagent-10.3.0.tgz", - "integrity": "sha512-B+4Ik7ROgVKrQsXTV0Jwp2u+PXYLSlqtDAhYnkkD+zn3yg8s/zjA2MeGayPoY/KICrbitwneDHrjSotxKL+0XQ==", + "version": "10.2.3", + "resolved": "https://registry.npmjs.org/superagent/-/superagent-10.2.3.tgz", + "integrity": "sha512-y/hkYGeXAj7wUMjxRbB21g/l6aAEituGXM9Rwl4o20+SX3e8YOSV6BxFXl+dL3Uk0mjSL3kCbNkwURm8/gEDig==", "dev": true, "license": "MIT", "dependencies": { @@ -37958,56 +37601,16 @@ "cookiejar": "^2.1.4", "debug": "^4.3.7", "fast-safe-stringify": "^2.1.1", - "form-data": "^4.0.5", + "form-data": "^4.0.4", "formidable": "^3.5.4", "methods": "^1.1.2", "mime": "2.6.0", - "qs": "^6.14.1" + "qs": "^6.11.2" }, "engines": { "node": ">=14.18.0" } }, - "node_modules/superagent/node_modules/form-data": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.5.tgz", - "integrity": "sha512-8RipRLol37bNs2bhoV67fiTEvdTrbMUYcFTiy3+wuuOnUog2QBHCZWXDRijWQfAkhBj2Uf5UnVaiWwA5vdd82w==", - "dev": true, - "license": "MIT", - "dependencies": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.8", - "es-set-tostringtag": "^2.1.0", - "hasown": "^2.0.2", - "mime-types": "^2.1.12" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/superagent/node_modules/mime-db": { - "version": "1.52.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", - "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/superagent/node_modules/mime-types": { - "version": "2.1.35", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", - "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", - "dev": true, - "license": "MIT", - "dependencies": { - "mime-db": "1.52.0" - }, - "engines": { - "node": ">= 0.6" - } - }, "node_modules/supertest": { "version": "7.1.4", "resolved": "https://registry.npmjs.org/supertest/-/supertest-7.1.4.tgz", @@ -38736,12 +38339,12 @@ } }, "node_modules/token-types": { - "version": "6.1.2", - "resolved": "https://registry.npmjs.org/token-types/-/token-types-6.1.2.tgz", - "integrity": "sha512-dRXchy+C0IgK8WPC6xvCHFRIWYUbqqdEIKPaKo/AcTUNzwLTK6AH7RjdLWsEZcAN/TBdtfUw3PYEgPr5VPr6ww==", + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/token-types/-/token-types-6.1.1.tgz", + "integrity": "sha512-kh9LVIWH5CnL63Ipf0jhlBIy0UsrMj/NJDfpsy1SqOXlLKEVyXXYrnFxFT1yOOYVGBSApeVnjPw/sBz5BfEjAQ==", "license": "MIT", "dependencies": { - "@borewit/text-codec": "^0.2.1", + "@borewit/text-codec": "^0.1.0", "@tokenizer/token": "^0.3.0", "ieee754": "^1.2.1" }, @@ -38908,9 +38511,9 @@ } }, "node_modules/ts-api-utils": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-2.4.0.tgz", - "integrity": "sha512-3TaVTaAv2gTiMB35i3FiGJaRfwb3Pyn/j3m/bfAvGe8FB7CF6u+LMYqYlDh7reQf7UNvoTvdfAqHGmPGOSsPmA==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-2.1.0.tgz", + "integrity": "sha512-CUgTZL1irw8u29bzrOD/nH85jqyc74D6SshFgujOIA7osm2Rz7dYH77agkx7H4FBNxDq7Cjf+IjaX/8zwFW+ZQ==", "dev": true, "license": "MIT", "engines": { @@ -39380,9 +38983,9 @@ } }, "node_modules/ufo": { - "version": "1.6.2", - "resolved": "https://registry.npmjs.org/ufo/-/ufo-1.6.2.tgz", - "integrity": "sha512-heMioaxBcG9+Znsda5Q8sQbWnLJSl98AFDXTO80wELWEzX3hordXsTdxrIfMQoO9IY1MEnoGoPjpoKpMj+Yx0Q==", + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/ufo/-/ufo-1.6.1.tgz", + "integrity": "sha512-9a4/uxlTWJ4+a5i0ooc1rU7C7YOw3wT+UGqdeNNHWnOF9qcMBgLRS+4IYUqbczewFx4mLEig6gawh7X6mFlEkA==", "dev": true, "license": "MIT" }, @@ -39530,9 +39133,9 @@ "license": "Apache-2.0" }, "node_modules/undici": { - "version": "6.23.0", - "resolved": "https://registry.npmjs.org/undici/-/undici-6.23.0.tgz", - "integrity": "sha512-VfQPToRA5FZs/qJxLIinmU59u0r7LXqoJkCzinq3ckNJp3vKEh7jTWN589YQ5+aoAC/TGRLyJLCPKcLQbM8r9g==", + "version": "6.22.0", + "resolved": "https://registry.npmjs.org/undici/-/undici-6.22.0.tgz", + "integrity": "sha512-hU/10obOIu62MGYjdskASR3CUAiYaFTtC9Pa6vHyf//mAipSvSQg6od2CnJswq7fvzNS3zJhxoRkgNVaHurWKw==", "license": "MIT", "engines": { "node": ">=18.17" @@ -40156,9 +39759,9 @@ } }, "node_modules/validator": { - "version": "13.15.26", - "resolved": "https://registry.npmjs.org/validator/-/validator-13.15.26.tgz", - "integrity": "sha512-spH26xU080ydGggxRyR1Yhcbgx+j3y5jbNXk/8L+iRvdIEQ4uTRH2Sgf2dokud6Q4oAtsbNvJ1Ft+9xmm6IZcA==", + "version": "13.15.23", + "resolved": "https://registry.npmjs.org/validator/-/validator-13.15.23.tgz", + "integrity": "sha512-4yoz1kEWqUjzi5zsPbAS/903QXSYp0UOtHsPpp7p9rHAw/W+dkInskAE386Fat3oKRROwO98d9ZB0G4cObgUyw==", "license": "MIT", "engines": { "node": ">= 0.10" @@ -40432,9 +40035,9 @@ } }, "node_modules/watchpack": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.5.0.tgz", - "integrity": "sha512-e6vZvY6xboSwLz2GD36c16+O/2Z6fKvIf4pOXptw2rY9MVwE/TXc6RGqxD3I3x0a28lwBY7DE+76uTPSsBrrCA==", + "version": "2.4.4", + "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.4.4.tgz", + "integrity": "sha512-c5EGNOiyxxV5qmTtAB7rbiXxi1ooX1pQKMLX/MIabJjRA0SJBQOjKF+KSVfHkr9U1cADPon0mRiVe/riyaiDUA==", "dev": true, "license": "MIT", "dependencies": { @@ -40544,9 +40147,9 @@ } }, "node_modules/webpack": { - "version": "5.104.1", - "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.104.1.tgz", - "integrity": "sha512-Qphch25abbMNtekmEGJmeRUhLDbe+QfiWTiqpKYkpCOWY64v9eyl+KRRLmqOFA2AvKPpc9DC6+u2n76tQLBoaA==", + "version": "5.104.0", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.104.0.tgz", + "integrity": "sha512-5DeICTX8BVgNp6afSPYXAFjskIgWGlygQH58bcozPOXgo2r/6xx39Y1+cULZ3gTxUYQP88jmwLj2anu4Xaq84g==", "dev": true, "license": "MIT", "peer": true, @@ -41159,9 +40762,9 @@ } }, "node_modules/ws": { - "version": "8.19.0", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.19.0.tgz", - "integrity": "sha512-blAT2mjOEIi0ZzruJfIhb3nps74PRWTCz1IjglWEEpQl5XS/UNama6u2/rjFkDDouqr4L67ry+1aGIALViWjDg==", + "version": "8.18.3", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.18.3.tgz", + "integrity": "sha512-PEIGCY5tSlUt50cqyMXfCzX+oOPqN0vuGqWzbcJ2xvnkzkq46oOpz7dQaTDBdfICb4N14+GARUDw2XV2N4tvzg==", "license": "MIT", "engines": { "node": ">=10.0.0" diff --git a/package.json b/package.json index 57bcc3f79..b80974b86 100644 --- a/package.json +++ b/package.json @@ -109,8 +109,8 @@ "@dsnp/activity-content": "1.1.0", "@dsnp/parquetjs": "1.8.7", "@dsnp/schemas": "1.3.3", - "@frequency-chain/api-augment": "1.17.8", - "@frequency-chain/ethereum-utils": "1.17.8", + "@frequency-chain/api-augment": "2.0.0-rc3", + "@frequency-chain/ethereum-utils": "2.0.0-rc3", "@hpke/core": "1.7.5", "@hpke/dhkem-x25519": "1.6.4", "@multiformats/blake2": "2.0.2", @@ -133,7 +133,7 @@ "@polkadot/types": "16.4.8", "@polkadot/util": "13.5.7", "@polkadot/util-crypto": "13.5.7", - "@projectlibertylabs/siwf": "^2.3.6", + "@projectlibertylabs/siwf": "2.4.0-rc1", "@songkeys/nestjs-redis": "11.0.0", "@types/express": "5.0.3", "@types/multer": "2.0.0", @@ -172,7 +172,7 @@ "@nestjs/cli": "11.0.10", "@nestjs/schematics": "11.0.7", "@nestjs/testing": "11.1.6", - "@projectlibertylabs/frequency-scenario-template": "1.1.15", + "@projectlibertylabs/frequency-scenario-template": "2.0.0-rc5", "@types/base64url": "2.0.7", "@types/busboy": "1.5.4", "@types/jest": "30.0.0", @@ -199,6 +199,7 @@ "ioredis-mock": "8.9.0", "jest": "30.1.1", "license-report": "6.8.0", + "loglevel": "^1.9.2", "minimist": "1.2.8", "openapi-client-axios-typegen": "7.7.0", "prettier": "3.6.2", @@ -212,11 +213,12 @@ "ts-node": "10.9.2", "tsconfig-paths": "4.2.0", "tsx": "4.20.5", - "typescript": "5.9.2" + "typescript": "5.9.2", + "unique-names-generator": "^4.7.1" }, "overrides": { - "@projectlibertylabs/frequency-scenario-template": "1.1.15", - "@frequency-chain/api-augment": "1.17.8", + "@frequency-chain/api-augment": "2.0.0-rc3", + "@projectlibertylabs/frequency-scenario-template": "2.0.0-rc5", "@polkadot/api": "16.4.8", "@polkadot/api-base": "16.4.8", "@polkadot/api-derive": "16.4.8", diff --git a/apps/account-api/test/e2e-setup.mock.spec.ts b/testlib/e2e-setup.mock.spec.ts similarity index 92% rename from apps/account-api/test/e2e-setup.mock.spec.ts rename to testlib/e2e-setup.mock.spec.ts index 46b6da922..9979333f1 100644 --- a/apps/account-api/test/e2e-setup.mock.spec.ts +++ b/testlib/e2e-setup.mock.spec.ts @@ -18,9 +18,15 @@ import { u8aToHex } from '@polkadot/util'; export const FREQUENCY_API_WS_URL = process.env.FREQUENCY_API_WS_URL || 'ws://0.0.0.0:9944'; export const BASE_SEED_PHRASE = process.env.SEED_PHRASE || '//Alice'; -export async function setupProviderAndUsers(numUsers = 4) { +export async function initializeHelpers() { await cryptoWaitReady(); - await initialize(FREQUENCY_API_WS_URL); + if (!ExtrinsicHelper.apiPromise) { + await initialize(FREQUENCY_API_WS_URL); + } +} + +export async function setupProviderAndUsers(numUsers = 4) { + await initializeHelpers(); log.setLevel('trace'); const currentBlockNumber = await getCurrentBlockNumber(); @@ -51,6 +57,7 @@ export async function removeExtraKeysFromMsa({ return; } + await initializeHelpers(); const keys = await ExtrinsicHelper.apiPromise.rpc.msa.getKeysByMsaId(msaId); if (keys.isNone) { return; @@ -64,6 +71,7 @@ export async function removeExtraKeysFromMsa({ } export async function generateSignedAddKeyPayload(user: ChainUser, newKeys: KeyringPair, currentBlockNumber?: number) { + await cryptoWaitReady(); const payload = await generateAddKeyPayload( { msaId: user.msaId!, newPublicKey: newKeys.publicKey }, undefined, @@ -82,6 +90,7 @@ export async function generateAddPublicKeyExtrinsic( newKeys: KeyringPair, currentBlockNumber?: number, ) { + await initializeHelpers(); const { payload, ownerProof, newKeyProof } = await generateSignedAddKeyPayload(user, newKeys, currentBlockNumber); return () => ExtrinsicHelper.apiPromise.tx.msa.addPublicKeyToMsa(user.keypair.publicKey, ownerProof, newKeyProof, payload); diff --git a/tools/ci-k6/main.mjs b/tools/ci-k6/main.mjs deleted file mode 100644 index 1427a5aa0..000000000 --- a/tools/ci-k6/main.mjs +++ /dev/null @@ -1,89 +0,0 @@ -import { ApiPromise, WsProvider } from '@polkadot/api'; -import { Keyring } from '@polkadot/keyring'; - -const keyring = new Keyring({ type: 'sr25519' }); - -const AVRO_GRAPH_CHANGE = { - type: 'record', - name: 'GraphChange', - fields: [ - // When converting from Frequency Schema Message to DSNP Announcement, assume announcementType=1 - { - name: 'changeType', - type: { - name: 'ChangeTypeEnum', - type: 'enum', - symbols: ['Unfollow', 'Follow'], // Encoded as int - }, - }, - { - name: 'fromId', - type: { - name: 'DSNPId', - type: 'fixed', - size: 8, - }, - }, - { - name: 'objectId', - type: 'DSNPId', - }, - ], -}; - -export async function createAndStake(providerUrl, keyUri) { - const api = await ApiPromise.create({ provider: new WsProvider(providerUrl) }); - - console.log('Connected...'); - - const account = keyring.createFromUri(keyUri); - - const call = api.tx.utility.batchAll([ - api.tx.msa.create(), - api.tx.msa.createProvider('alice'), - api.tx.capacity.stake(1, 10_000_000_000_000), - // Need to create an 'OnChain' schema in order to test endpoints, as there are no registered 'OnChain' DSNP schemas - // **SHOULD** get created as SchemaID 16001 - api.tx.schemas.createSchemaV3(JSON.stringify(AVRO_GRAPH_CHANGE), 'AvroBinary', 'OnChain', [], 'test.graphchange'), - ]); - - console.log('Submitting call...'); - await new Promise(async (resolve, reject) => { - const unsub = await call.signAndSend(account, ({ status, events }) => { - if (status.isInBlock || status.isFinalized) { - console.log( - `Block hash: ${(status.isInBlock && status.asInBlock) || (status.isFinalized && status.asFinalized)}`, - ); - if (events) - console.log( - 'All Events', - events.map((x) => x.toHuman()), - ); - const success = events.find((x) => api.events.system.ExtrinsicSuccess.is(x.event)); - const failure = events.find((x) => api.events.system.ExtrinsicFailed.is(x.event)); - const { event: schemaCreated } = success - ? events.find((x) => api.events.schemas.SchemaCreated.is(x.event)) - : { event: null }; - unsub(); - if (schemaCreated) { - console.log(`Created OnChain schema ID ${schemaCreated.data.schemaId.toNumber()}`); - } - if (success && !failure) { - console.log('Success!'); - resolve(); - } else { - console.error('FAILED!', failure.toHuman()); - reject(); - } - } - }); - }); -} - -try { - await createAndStake('ws://localhost:9944', '//Alice'); - process.exit(0); -} catch (error) { - console.error('Error:', error); - process.exit(1); -} diff --git a/tools/ci-k6/main.ts b/tools/ci-k6/main.ts new file mode 100644 index 000000000..a6369c3ed --- /dev/null +++ b/tools/ci-k6/main.ts @@ -0,0 +1,93 @@ +import { + devAccounts, + ensureProviderStake, + ExtrinsicHelper, + initialize, + IntentBuilder, + provisionProvider, + SchemaBuilder, +} from '@projectlibertylabs/frequency-scenario-template'; + +const AVRO_GRAPH_CHANGE = { + type: 'record', + name: 'GraphChange', + fields: [ + // When converting from Frequency Schema Message to DSNP Announcement, assume announcementType=1 + { + name: 'changeType', + type: { + name: 'ChangeTypeEnum', + type: 'enum', + symbols: ['Unfollow', 'Follow'], // Encoded as int + }, + }, + { + name: 'fromId', + type: { + name: 'DSNPId', + type: 'fixed', + size: 8, + }, + }, + { + name: 'objectId', + type: 'DSNPId', + }, + ], +}; + +export async function createAndStake(providerUrl) { + await initialize(providerUrl); + console.log('Connected...'); + + const account = devAccounts[0].keys; + const provider = await provisionProvider('//Alice', 'Alice Provider'); + await ensureProviderStake(account, 10_000_000_000_000, provider.msaId.toBigInt()); + + // Need to create an 'OnChain' schema in order to test endpoints, as there are no registered 'OnChain' DSNP schemas + let onChainSchemaId: number; + + // 1. Resolve or create an OnChain Intent + const intent = await new IntentBuilder() + .withAutoDetectExisting(true) + .withName('test.graphchange') + .withPayloadLocation('OnChain') + .build(account); + + if (intent.schemas?.length > 0) { + onChainSchemaId = intent.schemas[intent.schemas.length - 1]; + console.log( + 'Resolved OnChain schema:', + onChainSchemaId, + 'from existing Intent:', + intent.id, + 'with name:', + intent.name, + ); + } else { + const schema = await new SchemaBuilder() + .withIntentId(intent.id) + .withModelType('AvroBinary') + .withModel(AVRO_GRAPH_CHANGE) + .build(account); + if (schema) { + console.log('Created OnChain schema:', schema.id); + onChainSchemaId = schema.id; + } + } + + if (!onChainSchemaId) { + throw new Error('Failed to create OnChain schema'); + } +} + +let returnCode = 0; +createAndStake('ws://localhost:9944') + .catch((error) => { + console.error('Error:', error); + returnCode = 1; + }) + .finally(async () => { + await ExtrinsicHelper.disconnect(); + process.exit(returnCode); + }); diff --git a/tools/ci-k6/package-lock.json b/tools/ci-k6/package-lock.json index 4b81549b9..0095dd0e2 100644 --- a/tools/ci-k6/package-lock.json +++ b/tools/ci-k6/package-lock.json @@ -10,7 +10,436 @@ "license": "Apache-2.0", "dependencies": { "@polkadot/api": "16.4.8", - "@polkadot/keyring": "13.5.7" + "@polkadot/keyring": "13.5.7", + "@projectlibertylabs/frequency-scenario-template": "2.0.0-rc5", + "tsx": "^4.21.0" + } + }, + "node_modules/@esbuild/aix-ppc64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.27.2.tgz", + "integrity": "sha512-GZMB+a0mOMZs4MpDbj8RJp4cw+w1WV5NYD6xzgvzUJ5Ek2jerwfO2eADyI6ExDSUED+1X8aMbegahsJi+8mgpw==", + "cpu": [ + "ppc64" + ], + "license": "MIT", + "optional": true, + "os": [ + "aix" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-arm": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.27.2.tgz", + "integrity": "sha512-DVNI8jlPa7Ujbr1yjU2PfUSRtAUZPG9I1RwW4F4xFB1Imiu2on0ADiI/c3td+KmDtVKNbi+nffGDQMfcIMkwIA==", + "cpu": [ + "arm" + ], + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-arm64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.27.2.tgz", + "integrity": "sha512-pvz8ZZ7ot/RBphf8fv60ljmaoydPU12VuXHImtAs0XhLLw+EXBi2BLe3OYSBslR4rryHvweW5gmkKFwTiFy6KA==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-x64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.27.2.tgz", + "integrity": "sha512-z8Ank4Byh4TJJOh4wpz8g2vDy75zFL0TlZlkUkEwYXuPSgX8yzep596n6mT7905kA9uHZsf/o2OJZubl2l3M7A==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/darwin-arm64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.27.2.tgz", + "integrity": "sha512-davCD2Zc80nzDVRwXTcQP/28fiJbcOwvdolL0sOiOsbwBa72kegmVU0Wrh1MYrbuCL98Omp5dVhQFWRKR2ZAlg==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/darwin-x64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.27.2.tgz", + "integrity": "sha512-ZxtijOmlQCBWGwbVmwOF/UCzuGIbUkqB1faQRf5akQmxRJ1ujusWsb3CVfk/9iZKr2L5SMU5wPBi1UWbvL+VQA==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/freebsd-arm64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.27.2.tgz", + "integrity": "sha512-lS/9CN+rgqQ9czogxlMcBMGd+l8Q3Nj1MFQwBZJyoEKI50XGxwuzznYdwcav6lpOGv5BqaZXqvBSiB/kJ5op+g==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/freebsd-x64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.27.2.tgz", + "integrity": "sha512-tAfqtNYb4YgPnJlEFu4c212HYjQWSO/w/h/lQaBK7RbwGIkBOuNKQI9tqWzx7Wtp7bTPaGC6MJvWI608P3wXYA==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-arm": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.27.2.tgz", + "integrity": "sha512-vWfq4GaIMP9AIe4yj1ZUW18RDhx6EPQKjwe7n8BbIecFtCQG4CfHGaHuh7fdfq+y3LIA2vGS/o9ZBGVxIDi9hw==", + "cpu": [ + "arm" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-arm64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.27.2.tgz", + "integrity": "sha512-hYxN8pr66NsCCiRFkHUAsxylNOcAQaxSSkHMMjcpx0si13t1LHFphxJZUiGwojB1a/Hd5OiPIqDdXONia6bhTw==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-ia32": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.27.2.tgz", + "integrity": "sha512-MJt5BRRSScPDwG2hLelYhAAKh9imjHK5+NE/tvnRLbIqUWa+0E9N4WNMjmp/kXXPHZGqPLxggwVhz7QP8CTR8w==", + "cpu": [ + "ia32" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-loong64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.27.2.tgz", + "integrity": "sha512-lugyF1atnAT463aO6KPshVCJK5NgRnU4yb3FUumyVz+cGvZbontBgzeGFO1nF+dPueHD367a2ZXe1NtUkAjOtg==", + "cpu": [ + "loong64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-mips64el": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.27.2.tgz", + "integrity": "sha512-nlP2I6ArEBewvJ2gjrrkESEZkB5mIoaTswuqNFRv/WYd+ATtUpe9Y09RnJvgvdag7he0OWgEZWhviS1OTOKixw==", + "cpu": [ + "mips64el" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-ppc64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.27.2.tgz", + "integrity": "sha512-C92gnpey7tUQONqg1n6dKVbx3vphKtTHJaNG2Ok9lGwbZil6DrfyecMsp9CrmXGQJmZ7iiVXvvZH6Ml5hL6XdQ==", + "cpu": [ + "ppc64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-riscv64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.27.2.tgz", + "integrity": "sha512-B5BOmojNtUyN8AXlK0QJyvjEZkWwy/FKvakkTDCziX95AowLZKR6aCDhG7LeF7uMCXEJqwa8Bejz5LTPYm8AvA==", + "cpu": [ + "riscv64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-s390x": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.27.2.tgz", + "integrity": "sha512-p4bm9+wsPwup5Z8f4EpfN63qNagQ47Ua2znaqGH6bqLlmJ4bx97Y9JdqxgGZ6Y8xVTixUnEkoKSHcpRlDnNr5w==", + "cpu": [ + "s390x" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-x64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.27.2.tgz", + "integrity": "sha512-uwp2Tip5aPmH+NRUwTcfLb+W32WXjpFejTIOWZFw/v7/KnpCDKG66u4DLcurQpiYTiYwQ9B7KOeMJvLCu/OvbA==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/netbsd-arm64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.27.2.tgz", + "integrity": "sha512-Kj6DiBlwXrPsCRDeRvGAUb/LNrBASrfqAIok+xB0LxK8CHqxZ037viF13ugfsIpePH93mX7xfJp97cyDuTZ3cw==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/netbsd-x64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.27.2.tgz", + "integrity": "sha512-HwGDZ0VLVBY3Y+Nw0JexZy9o/nUAWq9MlV7cahpaXKW6TOzfVno3y3/M8Ga8u8Yr7GldLOov27xiCnqRZf0tCA==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openbsd-arm64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.27.2.tgz", + "integrity": "sha512-DNIHH2BPQ5551A7oSHD0CKbwIA/Ox7+78/AWkbS5QoRzaqlev2uFayfSxq68EkonB+IKjiuxBFoV8ESJy8bOHA==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openbsd-x64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.27.2.tgz", + "integrity": "sha512-/it7w9Nb7+0KFIzjalNJVR5bOzA9Vay+yIPLVHfIQYG/j+j9VTH84aNB8ExGKPU4AzfaEvN9/V4HV+F+vo8OEg==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openharmony-arm64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/openharmony-arm64/-/openharmony-arm64-0.27.2.tgz", + "integrity": "sha512-LRBbCmiU51IXfeXk59csuX/aSaToeG7w48nMwA6049Y4J4+VbWALAuXcs+qcD04rHDuSCSRKdmY63sruDS5qag==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "openharmony" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/sunos-x64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.27.2.tgz", + "integrity": "sha512-kMtx1yqJHTmqaqHPAzKCAkDaKsffmXkPHThSfRwZGyuqyIeBvf08KSsYXl+abf5HDAPMJIPnbBfXvP2ZC2TfHg==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-arm64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.27.2.tgz", + "integrity": "sha512-Yaf78O/B3Kkh+nKABUF++bvJv5Ijoy9AN1ww904rOXZFLWVc5OLOfL56W+C8F9xn5JQZa3UX6m+IktJnIb1Jjg==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-ia32": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.27.2.tgz", + "integrity": "sha512-Iuws0kxo4yusk7sw70Xa2E2imZU5HoixzxfGCdxwBdhiDgt9vX9VUCBhqcwY7/uh//78A1hMkkROMJq9l27oLQ==", + "cpu": [ + "ia32" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-x64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.27.2.tgz", + "integrity": "sha512-sRdU18mcKf7F+YgheI/zGf5alZatMUTKj/jNS6l744f9u3WFu4v7twcUI9vu4mknF4Y9aDlblIie0IM+5xxaqQ==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@frequency-chain/api-augment": { + "version": "2.0.0-rc3", + "resolved": "https://registry.npmjs.org/@frequency-chain/api-augment/-/api-augment-2.0.0-rc3.tgz", + "integrity": "sha512-lHUNgyH51Qi20yqGWa9clQdjfhUS7gJeGq7OFZjwOhSVBN8315MNAesySBP9w4Ukaoy4XPfnN7VtdZSHCfIDFA==", + "license": "Apache-2.0", + "dependencies": { + "@polkadot/api": "16.4.8", + "@polkadot/rpc-provider": "16.4.8", + "@polkadot/types": "16.4.8" } }, "node_modules/@noble/curves": { @@ -744,6 +1173,171 @@ "node": ">=18" } }, + "node_modules/@projectlibertylabs/frequency-scenario-template": { + "version": "2.0.0-rc5", + "resolved": "https://registry.npmjs.org/@projectlibertylabs/frequency-scenario-template/-/frequency-scenario-template-2.0.0-rc5.tgz", + "integrity": "sha512-4SggukI0Jh1MdfuWMdbl/6FgaMgMtgyVGycEcOGBRDJV/SIMlQHLZMOGAkvjNsVQD/dFhkWZCR1GbX48Eb+zFA==", + "license": "Apache-2.0", + "dependencies": { + "@frequency-chain/api-augment": "2.0.0-rc3", + "@polkadot/api": "16.4.8", + "@polkadot/keyring": "13.5.7", + "@polkadot/types": "16.4.8", + "@polkadot/types-codec": "16.4.8", + "@polkadot/util": "13.5.7", + "@polkadot/util-crypto": "13.5.7", + "@projectlibertylabs/graph-sdk": "^2.0.1", + "@types/minimist": "^1.2.5", + "@types/node": "^24.7.2", + "avsc": "^5.7.9", + "loglevel": "^1.9.2", + "minimist": "^1.2.8", + "rxjs": "^7.8.2", + "unique-names-generator": "^4.7.1" + } + }, + "node_modules/@projectlibertylabs/frequency-scenario-template/node_modules/@polkadot/networks": { + "version": "13.5.7", + "resolved": "https://registry.npmjs.org/@polkadot/networks/-/networks-13.5.7.tgz", + "integrity": "sha512-RdQcgaPy68NRSI7UTBdxr1aw66MXVdbpGhpWQpLf3/7puUdwkem6KxqFNnC9/kJSXRlyYGeYHN9Hsf4+CTWBSQ==", + "license": "Apache-2.0", + "dependencies": { + "@polkadot/util": "13.5.7", + "@substrate/ss58-registry": "^1.51.0", + "tslib": "^2.8.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@projectlibertylabs/frequency-scenario-template/node_modules/@polkadot/util": { + "version": "13.5.7", + "resolved": "https://registry.npmjs.org/@polkadot/util/-/util-13.5.7.tgz", + "integrity": "sha512-5Rhp6/FDI55iCJcGd/9bMQaF0E26OE+uZwz68JuRW75DW8v7zsN3bnjnVqk3KO/c4u5EgLSqbhXPuyW24BP1+Q==", + "license": "Apache-2.0", + "dependencies": { + "@polkadot/x-bigint": "13.5.7", + "@polkadot/x-global": "13.5.7", + "@polkadot/x-textdecoder": "13.5.7", + "@polkadot/x-textencoder": "13.5.7", + "@types/bn.js": "^5.1.6", + "bn.js": "^5.2.1", + "tslib": "^2.8.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@projectlibertylabs/frequency-scenario-template/node_modules/@polkadot/util-crypto": { + "version": "13.5.7", + "resolved": "https://registry.npmjs.org/@polkadot/util-crypto/-/util-crypto-13.5.7.tgz", + "integrity": "sha512-SNzfAmtSSfUnQesrGLxc1RDg1arsvFSsAkH0xulffByqJfLugB3rZWJXIKqKNfcRZtomsMMURPeW7lfpAomSug==", + "license": "Apache-2.0", + "dependencies": { + "@noble/curves": "^1.3.0", + "@noble/hashes": "^1.3.3", + "@polkadot/networks": "13.5.7", + "@polkadot/util": "13.5.7", + "@polkadot/wasm-crypto": "^7.5.1", + "@polkadot/wasm-util": "^7.5.1", + "@polkadot/x-bigint": "13.5.7", + "@polkadot/x-randomvalues": "13.5.7", + "@scure/base": "^1.1.7", + "tslib": "^2.8.0" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@polkadot/util": "13.5.7" + } + }, + "node_modules/@projectlibertylabs/frequency-scenario-template/node_modules/@polkadot/x-bigint": { + "version": "13.5.7", + "resolved": "https://registry.npmjs.org/@polkadot/x-bigint/-/x-bigint-13.5.7.tgz", + "integrity": "sha512-NbN4EPbMBhjOXoWj0BVcT49/obzusFWPKbSyBxbZi8ITBaIIgpncgcCfXY4rII6Fqh74khx9jdevWge/6ycepQ==", + "license": "Apache-2.0", + "dependencies": { + "@polkadot/x-global": "13.5.7", + "tslib": "^2.8.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@projectlibertylabs/frequency-scenario-template/node_modules/@polkadot/x-global": { + "version": "13.5.7", + "resolved": "https://registry.npmjs.org/@polkadot/x-global/-/x-global-13.5.7.tgz", + "integrity": "sha512-TkBxLfeKtj0laCzXp2lvRhwSIeXSxIu7LAWpfAUW4SYNFQvtgIS0x0Bq70CUW3lcy0wqTrSG2cqzfnbomB0Djw==", + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.8.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@projectlibertylabs/frequency-scenario-template/node_modules/@polkadot/x-randomvalues": { + "version": "13.5.7", + "resolved": "https://registry.npmjs.org/@polkadot/x-randomvalues/-/x-randomvalues-13.5.7.tgz", + "integrity": "sha512-NEElpdu+Wqlr6USoh3abQfe0MaWlFlynPiqkA0/SJjK+0V0UOw0CyPwPgGrGa71/ju+1bsnu/ySshXqCR8HXTw==", + "license": "Apache-2.0", + "dependencies": { + "@polkadot/x-global": "13.5.7", + "tslib": "^2.8.0" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@polkadot/util": "13.5.7", + "@polkadot/wasm-util": "*" + } + }, + "node_modules/@projectlibertylabs/frequency-scenario-template/node_modules/@polkadot/x-textdecoder": { + "version": "13.5.7", + "resolved": "https://registry.npmjs.org/@polkadot/x-textdecoder/-/x-textdecoder-13.5.7.tgz", + "integrity": "sha512-wjSj+T2pBA1uW9dDYriZMAv4WgXl5zcWblxwOsZd3V/qxifMSlSLAy0WeC+08DD6TXGQYCOU0uOALsDivkUDZA==", + "license": "Apache-2.0", + "dependencies": { + "@polkadot/x-global": "13.5.7", + "tslib": "^2.8.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@projectlibertylabs/frequency-scenario-template/node_modules/@polkadot/x-textencoder": { + "version": "13.5.7", + "resolved": "https://registry.npmjs.org/@polkadot/x-textencoder/-/x-textencoder-13.5.7.tgz", + "integrity": "sha512-h6RsGUY8ZZrfqsbojD1VqTqmXcojDSfbXQHhVcAWqgceeh9JOOw8Q6yzhv+KpPelqKq/map3bobJaebQ8QNTMw==", + "license": "Apache-2.0", + "dependencies": { + "@polkadot/x-global": "13.5.7", + "tslib": "^2.8.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@projectlibertylabs/frequency-scenario-template/node_modules/@types/node": { + "version": "24.10.9", + "resolved": "https://registry.npmjs.org/@types/node/-/node-24.10.9.tgz", + "integrity": "sha512-ne4A0IpG3+2ETuREInjPNhUGis1SFjv1d5asp8MzEAGtOZeTeHVDOYqOgqfhvseqg/iXty2hjBf1zAOb7RNiNw==", + "license": "MIT", + "dependencies": { + "undici-types": "~7.16.0" + } + }, + "node_modules/@projectlibertylabs/graph-sdk": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@projectlibertylabs/graph-sdk/-/graph-sdk-2.0.1.tgz", + "integrity": "sha512-iLvr2f4G/QJ2Jxb0NHtBbB0DgznhhvYic+aw1WgBt+WxwTryszpJyT+NcR250BG6EKJGgMJUIGZYjkXZSoav5g==", + "license": "Apache-2.0", + "engines": { + "node": "^14.0.0 || ^16.0.0 || >=17.0.0" + } + }, "node_modules/@scure/base": { "version": "1.2.6", "resolved": "https://registry.npmjs.org/@scure/base/-/base-1.2.6.tgz", @@ -815,6 +1409,12 @@ "@types/node": "*" } }, + "node_modules/@types/minimist": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/@types/minimist/-/minimist-1.2.5.tgz", + "integrity": "sha512-hov8bUuiLiyFPGyFPE1lwWhmzYbirOXQNNo40+y3zow8aFVTeyn3VWL0VFFfdNddA8S4Vf0Tc062rzyNr7Paag==", + "license": "MIT" + }, "node_modules/@types/node": { "version": "25.0.3", "resolved": "https://registry.npmjs.org/@types/node/-/node-25.0.3.tgz", @@ -824,6 +1424,15 @@ "undici-types": "~7.16.0" } }, + "node_modules/avsc": { + "version": "5.7.9", + "resolved": "https://registry.npmjs.org/avsc/-/avsc-5.7.9.tgz", + "integrity": "sha512-yOA4wFeI7ET3v32Di/sUybQ+ttP20JHSW3mxLuNGeO0uD6PPcvLrIQXSvy/rhJOWU5JrYh7U4OHplWMmtAtjMg==", + "license": "MIT", + "engines": { + "node": ">=0.11" + } + }, "node_modules/bn.js": { "version": "5.2.2", "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.2.tgz", @@ -856,6 +1465,47 @@ } } }, + "node_modules/esbuild": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.27.2.tgz", + "integrity": "sha512-HyNQImnsOC7X9PMNaCIeAm4ISCQXs5a5YasTXVliKv4uuBo1dKrG0A+uQS8M5eXjVMnLg3WgXaKvprHlFJQffw==", + "hasInstallScript": true, + "license": "MIT", + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=18" + }, + "optionalDependencies": { + "@esbuild/aix-ppc64": "0.27.2", + "@esbuild/android-arm": "0.27.2", + "@esbuild/android-arm64": "0.27.2", + "@esbuild/android-x64": "0.27.2", + "@esbuild/darwin-arm64": "0.27.2", + "@esbuild/darwin-x64": "0.27.2", + "@esbuild/freebsd-arm64": "0.27.2", + "@esbuild/freebsd-x64": "0.27.2", + "@esbuild/linux-arm": "0.27.2", + "@esbuild/linux-arm64": "0.27.2", + "@esbuild/linux-ia32": "0.27.2", + "@esbuild/linux-loong64": "0.27.2", + "@esbuild/linux-mips64el": "0.27.2", + "@esbuild/linux-ppc64": "0.27.2", + "@esbuild/linux-riscv64": "0.27.2", + "@esbuild/linux-s390x": "0.27.2", + "@esbuild/linux-x64": "0.27.2", + "@esbuild/netbsd-arm64": "0.27.2", + "@esbuild/netbsd-x64": "0.27.2", + "@esbuild/openbsd-arm64": "0.27.2", + "@esbuild/openbsd-x64": "0.27.2", + "@esbuild/openharmony-arm64": "0.27.2", + "@esbuild/sunos-x64": "0.27.2", + "@esbuild/win32-arm64": "0.27.2", + "@esbuild/win32-ia32": "0.27.2", + "@esbuild/win32-x64": "0.27.2" + } + }, "node_modules/eventemitter3": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-5.0.1.tgz", @@ -897,12 +1547,60 @@ "node": ">=12.20.0" } }, + "node_modules/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "hasInstallScript": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/get-tsconfig": { + "version": "4.13.0", + "resolved": "https://registry.npmjs.org/get-tsconfig/-/get-tsconfig-4.13.0.tgz", + "integrity": "sha512-1VKTZJCwBrvbd+Wn3AOgQP/2Av+TfTCOlE4AcRJE72W1ksZXbAx8PPBR9RzgTeSPzlPMHrbANMH3LbltH73wxQ==", + "license": "MIT", + "dependencies": { + "resolve-pkg-maps": "^1.0.0" + }, + "funding": { + "url": "https://github.com/privatenumber/get-tsconfig?sponsor=1" + } + }, "node_modules/json-stringify-safe": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", "integrity": "sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==", "license": "ISC" }, + "node_modules/loglevel": { + "version": "1.9.2", + "resolved": "https://registry.npmjs.org/loglevel/-/loglevel-1.9.2.tgz", + "integrity": "sha512-HgMmCqIJSAKqo68l0rS2AanEWfkxaZ5wNiEFb5ggm08lDs9Xl2KxBlX3PTcaD2chBM1gXAYf491/M2Rv8Jwayg==", + "license": "MIT", + "engines": { + "node": ">= 0.6.0" + }, + "funding": { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/loglevel" + } + }, + "node_modules/minimist": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", + "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/mock-socket": { "version": "9.3.1", "resolved": "https://registry.npmjs.org/mock-socket/-/mock-socket-9.3.1.tgz", @@ -979,6 +1677,15 @@ "node": ">= 8" } }, + "node_modules/resolve-pkg-maps": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/resolve-pkg-maps/-/resolve-pkg-maps-1.0.0.tgz", + "integrity": "sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==", + "license": "MIT", + "funding": { + "url": "https://github.com/privatenumber/resolve-pkg-maps?sponsor=1" + } + }, "node_modules/rxjs": { "version": "7.8.2", "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.2.tgz", @@ -1011,12 +1718,40 @@ "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", "license": "0BSD" }, + "node_modules/tsx": { + "version": "4.21.0", + "resolved": "https://registry.npmjs.org/tsx/-/tsx-4.21.0.tgz", + "integrity": "sha512-5C1sg4USs1lfG0GFb2RLXsdpXqBSEhAaA/0kPL01wxzpMqLILNxIxIOKiILz+cdg/pLnOUxFYOR5yhHU666wbw==", + "license": "MIT", + "dependencies": { + "esbuild": "~0.27.0", + "get-tsconfig": "^4.7.5" + }, + "bin": { + "tsx": "dist/cli.mjs" + }, + "engines": { + "node": ">=18.0.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.3" + } + }, "node_modules/undici-types": { "version": "7.16.0", "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-7.16.0.tgz", "integrity": "sha512-Zz+aZWSj8LE6zoxD+xrjh4VfkIG8Ya6LvYkZqtUQGJPZjYl53ypCaUwWqo7eI0x66KBGeRo+mlBEkMSeSZ38Nw==", "license": "MIT" }, + "node_modules/unique-names-generator": { + "version": "4.7.1", + "resolved": "https://registry.npmjs.org/unique-names-generator/-/unique-names-generator-4.7.1.tgz", + "integrity": "sha512-lMx9dX+KRmG8sq6gulYYpKWZc9RlGsgBR6aoO8Qsm3qvkSJ+3rAymr+TnV8EDMrIrwuFJ4kruzMWM/OpYzPoow==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, "node_modules/web-streams-polyfill": { "version": "3.3.3", "resolved": "https://registry.npmjs.org/web-streams-polyfill/-/web-streams-polyfill-3.3.3.tgz", diff --git a/tools/ci-k6/package.json b/tools/ci-k6/package.json index a90aecf08..e1b9e743b 100644 --- a/tools/ci-k6/package.json +++ b/tools/ci-k6/package.json @@ -2,15 +2,18 @@ "name": "ci-k6", "version": "1.0.0", "description": "", - "main": "main.mjs", + "main": "main.ts", + "type": "commonjs", "scripts": { - "main": "node main.mjs", + "main": "tsx main.ts", "test": "echo \"Error: no test specified\" && exit 1" }, "author": "", "license": "Apache-2.0", "dependencies": { "@polkadot/api": "16.4.8", - "@polkadot/keyring": "13.5.7" + "@polkadot/keyring": "13.5.7", + "@projectlibertylabs/frequency-scenario-template": "2.0.0-rc5", + "tsx": "^4.21.0" } }