diff --git a/examples/sns-sqs/lib/01-publish-message.spec.ts b/examples/sns-sqs/lib/01-publish-message.spec.ts index 040dac8f4..5f9659d42 100644 --- a/examples/sns-sqs/lib/01-publish-message.spec.ts +++ b/examples/sns-sqs/lib/01-publish-message.spec.ts @@ -1,7 +1,7 @@ import { afterEach, beforeEach, describe, expect, it } from 'vitest' import { userConsumer } from './common/Dependencies.ts' import { publisherManager } from './common/TestPublisherManager.ts' -import { UserConsumer } from './common/UserConsumer.js' +import { UserConsumer } from './common/UserConsumer.ts' describe('Publish message', () => { beforeEach(async () => { diff --git a/examples/sns-sqs/lib/02-configurable-init.spec.ts b/examples/sns-sqs/lib/02-configurable-init.spec.ts index cb173d2be..46b3888c0 100644 --- a/examples/sns-sqs/lib/02-configurable-init.spec.ts +++ b/examples/sns-sqs/lib/02-configurable-init.spec.ts @@ -9,7 +9,7 @@ import { transactionObservabilityManager, } from './common/Dependencies.ts' import { publisherManager } from './common/TestPublisherManager.ts' -import { UserConsumer } from './common/UserConsumer.js' +import { UserConsumer } from './common/UserConsumer.ts' // This test suite illustrates the importance of only initting the consumers you need // to prevent test execution time from increasing with every new consumer added diff --git a/examples/sns-sqs/lib/common/Dependencies.ts b/examples/sns-sqs/lib/common/Dependencies.ts index 86909ec17..4742e0ff5 100644 --- a/examples/sns-sqs/lib/common/Dependencies.ts +++ b/examples/sns-sqs/lib/common/Dependencies.ts @@ -1,11 +1,13 @@ -import { SNSClient, type SNSClientConfig } from '@aws-sdk/client-sns' +import { SNSClient } from '@aws-sdk/client-sns' import { SQSClient } from '@aws-sdk/client-sqs' import { STSClient } from '@aws-sdk/client-sts' import { SnsConsumerErrorResolver } from '@message-queue-toolkit/sns' import pino from 'pino' import { UserConsumer } from './UserConsumer.ts' -export const TEST_AWS_CONFIG: SNSClientConfig = { +// Shared across SNS, SQS and STS clients, so it is intentionally not typed as +// any single client's config - those types are no longer mutually assignable. +export const TEST_AWS_CONFIG = { endpoint: 'http://s3.localhost.localstack.cloud:4566', region: 'eu-west-1', credentials: { diff --git a/examples/sns-sqs/lib/common/TestMessages.ts b/examples/sns-sqs/lib/common/TestMessages.ts index 1df7b9790..a8edf7910 100644 --- a/examples/sns-sqs/lib/common/TestMessages.ts +++ b/examples/sns-sqs/lib/common/TestMessages.ts @@ -1,9 +1,9 @@ +import type { CommonEventDefinition } from '@message-queue-toolkit/schemas' import { - type SnsAwareEventDefinition, enrichMessageSchemaWithBaseStrict, + type SnsAwareEventDefinition, } from '@message-queue-toolkit/schemas' -import type { CommonEventDefinition } from '@message-queue-toolkit/schemas' -import { z } from 'zod/v3' +import { z } from 'zod' type AllConsumerMessageSchemas = z.infer< MessageDefinitionTypes[number]['consumerSchema'] diff --git a/examples/sns-sqs/lib/common/TestPublisherManager.ts b/examples/sns-sqs/lib/common/TestPublisherManager.ts index 93bd84194..e78755b6c 100644 --- a/examples/sns-sqs/lib/common/TestPublisherManager.ts +++ b/examples/sns-sqs/lib/common/TestPublisherManager.ts @@ -1,8 +1,7 @@ import { CommonMetadataFiller, EventRegistry } from '@message-queue-toolkit/core' import type { AllPublisherMessageSchemas } from '@message-queue-toolkit/schemas' -import { SnsPublisherManager } from '@message-queue-toolkit/sns' import type { CommonSnsPublisher } from '@message-queue-toolkit/sns' -import { CommonSnsPublisherFactory } from '@message-queue-toolkit/sns' +import { CommonSnsPublisherFactory, SnsPublisherManager } from '@message-queue-toolkit/sns' import { errorReporter, logger, snsClient, stsClient } from './Dependencies.ts' import { UserEvents, type UserEventsType } from './TestMessages.ts' diff --git a/examples/sns-sqs/lib/common/UserConsumer.ts b/examples/sns-sqs/lib/common/UserConsumer.ts index a52edf122..3e6c6af08 100644 --- a/examples/sns-sqs/lib/common/UserConsumer.ts +++ b/examples/sns-sqs/lib/common/UserConsumer.ts @@ -1,9 +1,9 @@ import { MessageHandlerConfigBuilder } from '@message-queue-toolkit/core' import type { ConsumerMessageSchema } from '@message-queue-toolkit/schemas' import { AbstractSnsSqsConsumer, type SNSSQSConsumerDependencies } from '@message-queue-toolkit/sns' -import { UserEvents } from './TestMessages.ts' import { userCreatedHandler } from './handlers/UserCreatedHandler.ts' import { userUpdatedHandler } from './handlers/UserUpdatedHandler.ts' +import { UserEvents } from './TestMessages.ts' type SupportedMessages = ConsumerMessageSchema< typeof UserEvents.created | typeof UserEvents.updated diff --git a/examples/sns-sqs/lib/common/handlers/UserCreatedHandler.ts b/examples/sns-sqs/lib/common/handlers/UserCreatedHandler.ts index f68f6d544..4e7f12bdf 100644 --- a/examples/sns-sqs/lib/common/handlers/UserCreatedHandler.ts +++ b/examples/sns-sqs/lib/common/handlers/UserCreatedHandler.ts @@ -1,5 +1,5 @@ import type { Either } from '@lokalise/node-core' -import type { z } from 'zod/v3' +import type { z } from 'zod' import type { USER_SCHEMA, UserEvents } from '../TestMessages.ts' let _latestData: z.infer diff --git a/examples/sns-sqs/lib/common/handlers/UserUpdatedHandler.ts b/examples/sns-sqs/lib/common/handlers/UserUpdatedHandler.ts index b7c42f14b..e2b902284 100644 --- a/examples/sns-sqs/lib/common/handlers/UserUpdatedHandler.ts +++ b/examples/sns-sqs/lib/common/handlers/UserUpdatedHandler.ts @@ -1,5 +1,5 @@ import type { Either } from '@lokalise/node-core' -import type { z } from 'zod/v3' +import type { z } from 'zod' import type { USER_SCHEMA, UserEvents } from '../TestMessages.ts' let _latestData: z.infer diff --git a/examples/sns-sqs/package.json b/examples/sns-sqs/package.json index 1785ecc6f..ca23ad01e 100644 --- a/examples/sns-sqs/package.json +++ b/examples/sns-sqs/package.json @@ -16,24 +16,24 @@ "url": "https://github.com/kibertoad/message-queue-toolkit.git" }, "dependencies": { - "@aws-sdk/client-sns": "^3.812.0", - "@aws-sdk/client-sts": "^3.812.0", - "@aws-sdk/client-sqs": "^3.812.0", - "@message-queue-toolkit/core": "^21.2.0", - "@message-queue-toolkit/schemas": "^6.2.0", - "@message-queue-toolkit/sns": "22.2.0", - "@message-queue-toolkit/sqs": "21.1.0", - "pino": "^9.7.0", - "zod": "^3.25.7" + "@aws-sdk/client-sns": "^3.1106.0", + "@aws-sdk/client-sts": "^3.1106.0", + "@aws-sdk/client-sqs": "^3.1106.0", + "@message-queue-toolkit/core": "^26.1.1", + "@message-queue-toolkit/schemas": "^7.2.0", + "@message-queue-toolkit/sns": "26.2.1", + "@message-queue-toolkit/sqs": "26.1.1", + "pino": "^10.3.1", + "zod": "^4.4.3" }, "devDependencies": { - "@biomejs/biome": "^2.3.2", - "@lokalise/biome-config": "^3.1.0", - "@types/node": "^22.15.19", - "@lokalise/tsconfig": "^1.3.0", - "@vitest/coverage-v8": "^4.0.15", - "typescript": "^5.8.3", - "vitest": "^4.0.15" + "@biomejs/biome": "^2.5.6", + "@lokalise/biome-config": "^3.1.1", + "@types/node": "^26.1.2", + "@lokalise/tsconfig": "^5.0.0", + "@vitest/coverage-v8": "^4.1.10", + "typescript": "^7.0.2", + "vitest": "^4.1.10" }, "private": true } diff --git a/examples/sns-sqs/tsconfig.json b/examples/sns-sqs/tsconfig.json index a6868075f..721796df5 100644 --- a/examples/sns-sqs/tsconfig.json +++ b/examples/sns-sqs/tsconfig.json @@ -2,6 +2,6 @@ "extends": "@lokalise/tsconfig/tsc", "include": ["lib/**/*", "test/**/*", "vitest.config.ts"], "compilerOptions": { - "types": ["vitest/globals"] + "types": ["node", "vitest/globals"] } } diff --git a/package.json b/package.json index 7802e5900..b06b651f6 100644 --- a/package.json +++ b/package.json @@ -14,7 +14,7 @@ }, "dependencies": {}, "devDependencies": { - "turbo": "^2.10.7" + "turbo": "^2.10.8" }, - "packageManager": "pnpm@11.1.2" + "packageManager": "pnpm@11.18.0" } diff --git a/packages/amqp/package.json b/packages/amqp/package.json index 9855bd877..fe1fc0a52 100644 --- a/packages/amqp/package.json +++ b/packages/amqp/package.json @@ -2,7 +2,7 @@ "name": "@message-queue-toolkit/amqp", "version": "24.1.1", "engines": { - "node": ">=18" + "node": ">=22.0.0" }, "private": false, "license": "MIT", @@ -31,7 +31,7 @@ "prepublishOnly": "pnpm run lint && pnpm run build" }, "dependencies": { - "@lokalise/node-core": "^14.7.4" + "@lokalise/node-core": "^14.8.1" }, "peerDependencies": { "@message-queue-toolkit/core": ">=25.0.0", @@ -40,20 +40,20 @@ "zod": ">=3.25.76 <5.0.0" }, "devDependencies": { - "@biomejs/biome": "^2.5.3", - "@lokalise/biome-config": "^3.1.0", - "@lokalise/tsconfig": "^3.0.0", + "@biomejs/biome": "^2.5.6", + "@lokalise/biome-config": "^3.1.1", + "@lokalise/tsconfig": "^5.0.0", "@message-queue-toolkit/core": "workspace:*", "@types/amqplib": "0.10.8", - "@types/node": "^25.5.0", + "@types/node": "^26.1.2", "@vitest/coverage-v8": "^4.1.10", "amqplib": "^2.0.1", "awilix": "^13.0.5", "awilix-manager": "^7.0.0", "rimraf": "^6.1.3", - "typescript": "^5.9.3", + "typescript": "^7.0.2", "vitest": "^4.1.10", - "zod": "^4.1.13" + "zod": "^4.4.3" }, "homepage": "https://github.com/kibertoad/message-queue-toolkit", "repository": { diff --git a/packages/amqp/tsconfig.build.json b/packages/amqp/tsconfig.build.json index 1b3cbf11b..942f7b9e4 100644 --- a/packages/amqp/tsconfig.build.json +++ b/packages/amqp/tsconfig.build.json @@ -1,5 +1,8 @@ { "extends": ["./tsconfig.json", "@lokalise/tsconfig/build-public-lib"], + "compilerOptions": { + "rootDir": "lib" + }, "include": ["lib/**/*"], "exclude": ["lib/**/*.spec.ts", "lib/**/*.test.ts"] } diff --git a/packages/amqp/tsconfig.json b/packages/amqp/tsconfig.json index a6868075f..721796df5 100644 --- a/packages/amqp/tsconfig.json +++ b/packages/amqp/tsconfig.json @@ -2,6 +2,6 @@ "extends": "@lokalise/tsconfig/tsc", "include": ["lib/**/*", "test/**/*", "vitest.config.ts"], "compilerOptions": { - "types": ["vitest/globals"] + "types": ["node", "vitest/globals"] } } diff --git a/packages/core/package.json b/packages/core/package.json index 1aaa5eca9..1e0c5c989 100644 --- a/packages/core/package.json +++ b/packages/core/package.json @@ -25,7 +25,7 @@ "prepublishOnly": "pnpm run lint && pnpm run build" }, "dependencies": { - "@lokalise/node-core": "^14.2.0", + "@lokalise/node-core": "^14.8.1", "@lokalise/universal-ts-utils": "^4.11.0", "@message-queue-toolkit/schemas": "^7.2.0", "dot-prop": "^10.2.0", @@ -38,18 +38,18 @@ "zod": ">=3.25.76 <5.0.0" }, "devDependencies": { - "@biomejs/biome": "^2.5.3", - "@lokalise/biome-config": "^3.1.0", - "@lokalise/tsconfig": "^3.0.0", - "@types/node": "^25.0.2", + "@biomejs/biome": "^2.5.6", + "@lokalise/biome-config": "^3.1.1", + "@lokalise/tsconfig": "^5.0.0", + "@types/node": "^26.1.2", "@types/tmp": "^0.2.6", "@vitest/coverage-v8": "^4.1.10", "awilix": "^13.0.5", "awilix-manager": "^7.0.0", - "rimraf": "^6.0.1", - "typescript": "^5.9.2", + "rimraf": "^6.1.3", + "typescript": "^7.0.2", "vitest": "^4.1.10", - "zod": "^4.1.13" + "zod": "^4.4.3" }, "homepage": "https://github.com/kibertoad/message-queue-toolkit", "repository": { diff --git a/packages/core/tsconfig.build.json b/packages/core/tsconfig.build.json index 1b3cbf11b..942f7b9e4 100644 --- a/packages/core/tsconfig.build.json +++ b/packages/core/tsconfig.build.json @@ -1,5 +1,8 @@ { "extends": ["./tsconfig.json", "@lokalise/tsconfig/build-public-lib"], + "compilerOptions": { + "rootDir": "lib" + }, "include": ["lib/**/*"], "exclude": ["lib/**/*.spec.ts", "lib/**/*.test.ts"] } diff --git a/packages/core/tsconfig.json b/packages/core/tsconfig.json index a6868075f..721796df5 100644 --- a/packages/core/tsconfig.json +++ b/packages/core/tsconfig.json @@ -2,6 +2,6 @@ "extends": "@lokalise/tsconfig/tsc", "include": ["lib/**/*", "test/**/*", "vitest.config.ts"], "compilerOptions": { - "types": ["vitest/globals"] + "types": ["node", "vitest/globals"] } } diff --git a/packages/gcp-pubsub/package.json b/packages/gcp-pubsub/package.json index 9fe612b7d..096cb6fd5 100644 --- a/packages/gcp-pubsub/package.json +++ b/packages/gcp-pubsub/package.json @@ -28,7 +28,7 @@ }, "dependencies": { "@grpc/grpc-js": "^1.14.4", - "@lokalise/node-core": "^14.6.1" + "@lokalise/node-core": "^14.8.1" }, "peerDependencies": { "@google-cloud/pubsub": "^5.3.1", @@ -36,23 +36,23 @@ "zod": ">=3.25.76 <5.0.0" }, "devDependencies": { - "@biomejs/biome": "^2.5.3", + "@biomejs/biome": "^2.5.6", "@google-cloud/pubsub": "^5.3.1", - "@lokalise/biome-config": "^3.1.0", - "@lokalise/tsconfig": "^3.0.0", + "@lokalise/biome-config": "^3.1.1", + "@lokalise/tsconfig": "^5.0.0", "@message-queue-toolkit/core": "workspace:*", "@message-queue-toolkit/gcs-payload-store": "*", "@message-queue-toolkit/redis-message-deduplication-store": "*", "@message-queue-toolkit/schemas": "*", - "@types/node": "^25.0.2", + "@types/node": "^26.1.2", "@vitest/coverage-v8": "^4.1.10", "awilix": "^13.0.5", "awilix-manager": "^7.0.0", "ioredis": "^5.11.1", - "rimraf": "^6.0.1", - "typescript": "^5.9.3", + "rimraf": "^6.1.3", + "typescript": "^7.0.2", "vitest": "^4.1.10", - "zod": "^4.1.13" + "zod": "^4.4.3" }, "homepage": "https://github.com/kibertoad/message-queue-toolkit", "repository": { diff --git a/packages/gcp-pubsub/tsconfig.build.json b/packages/gcp-pubsub/tsconfig.build.json index 1b3cbf11b..942f7b9e4 100644 --- a/packages/gcp-pubsub/tsconfig.build.json +++ b/packages/gcp-pubsub/tsconfig.build.json @@ -1,5 +1,8 @@ { "extends": ["./tsconfig.json", "@lokalise/tsconfig/build-public-lib"], + "compilerOptions": { + "rootDir": "lib" + }, "include": ["lib/**/*"], "exclude": ["lib/**/*.spec.ts", "lib/**/*.test.ts"] } diff --git a/packages/gcp-pubsub/tsconfig.json b/packages/gcp-pubsub/tsconfig.json index a6868075f..721796df5 100644 --- a/packages/gcp-pubsub/tsconfig.json +++ b/packages/gcp-pubsub/tsconfig.json @@ -2,6 +2,6 @@ "extends": "@lokalise/tsconfig/tsc", "include": ["lib/**/*", "test/**/*", "vitest.config.ts"], "compilerOptions": { - "types": ["vitest/globals"] + "types": ["node", "vitest/globals"] } } diff --git a/packages/gcs-payload-store/package.json b/packages/gcs-payload-store/package.json index a4fb95a6e..37afb4140 100644 --- a/packages/gcs-payload-store/package.json +++ b/packages/gcs-payload-store/package.json @@ -34,13 +34,13 @@ "devDependencies": { "@google-cloud/storage": "^7.21.0", "@message-queue-toolkit/core": "workspace:*", - "@biomejs/biome": "^2.5.3", - "@lokalise/biome-config": "^3.1.0", - "@lokalise/tsconfig": "^3.0.0", - "@types/node": "^25.0.2", + "@biomejs/biome": "^2.5.6", + "@lokalise/biome-config": "^3.1.1", + "@lokalise/tsconfig": "^5.0.0", + "@types/node": "^26.1.2", "@vitest/coverage-v8": "^4.1.10", - "rimraf": "^6.0.1", - "typescript": "^5.9.2", + "rimraf": "^6.1.3", + "typescript": "^7.0.2", "vitest": "^4.1.10" }, "homepage": "https://github.com/kibertoad/message-queue-toolkit", diff --git a/packages/gcs-payload-store/tsconfig.build.json b/packages/gcs-payload-store/tsconfig.build.json index 1b3cbf11b..942f7b9e4 100644 --- a/packages/gcs-payload-store/tsconfig.build.json +++ b/packages/gcs-payload-store/tsconfig.build.json @@ -1,5 +1,8 @@ { "extends": ["./tsconfig.json", "@lokalise/tsconfig/build-public-lib"], + "compilerOptions": { + "rootDir": "lib" + }, "include": ["lib/**/*"], "exclude": ["lib/**/*.spec.ts", "lib/**/*.test.ts"] } diff --git a/packages/gcs-payload-store/tsconfig.json b/packages/gcs-payload-store/tsconfig.json index a6868075f..721796df5 100644 --- a/packages/gcs-payload-store/tsconfig.json +++ b/packages/gcs-payload-store/tsconfig.json @@ -2,6 +2,6 @@ "extends": "@lokalise/tsconfig/tsc", "include": ["lib/**/*", "test/**/*", "vitest.config.ts"], "compilerOptions": { - "types": ["vitest/globals"] + "types": ["node", "vitest/globals"] } } diff --git a/packages/kafka/lib/AbstractKafkaConsumer.ts b/packages/kafka/lib/AbstractKafkaConsumer.ts index 87b78aab0..d8ebd71eb 100644 --- a/packages/kafka/lib/AbstractKafkaConsumer.ts +++ b/packages/kafka/lib/AbstractKafkaConsumer.ts @@ -104,6 +104,9 @@ export abstract class AbstractKafkaConsumer< DeserializedMessage> > private isReconnecting: boolean + private isClosing: boolean + private isShuttingDown: boolean + private initPromise?: Promise private readonly transactionObservabilityManager: TransactionObservabilityManager private readonly executionContext: ExecutionContext @@ -118,6 +121,8 @@ export abstract class AbstractKafkaConsumer< this.executionContext = executionContext this.isReconnecting = false + this.isClosing = false + this.isShuttingDown = false } /** @@ -156,8 +161,27 @@ export abstract class AbstractKafkaConsumer< } async init(): Promise { + // `doInit()` assigns `this.consumer` before it has awaited `joinGroup()` and `consume()`, so + // the in-flight promise has to be checked first: a concurrent caller that only looked at + // `this.consumer` would be handed a resolved init() while there is still no consumer stream. + if (this.initPromise) return this.initPromise if (this.consumer) return Promise.resolve() + // An explicit init means the consumer is wanted again, whatever an earlier close asked for. + this.isShuttingDown = false + + // Tracked so that `close()` can wait for an in-flight initialization instead of tearing down + // half-built state underneath it. + const initPromise = this.doInit() + this.initPromise = initPromise + try { + await initPromise + } finally { + if (this.initPromise === initPromise) this.initPromise = undefined + } + } + + private async doInit(): Promise { const topics = Object.keys(this.options.handlers) if (topics.length === 0) throw new Error('At least one topic must be defined') @@ -212,6 +236,26 @@ export abstract class AbstractKafkaConsumer< this.consumerStream.on('error', (error) => this.handleError(error)) } } catch (error) { + // The consumer was created before this block could fail. Leaving it in place would make the + // early return in `init()` hand the next caller a resolved init() for a consumer that never + // got a stream, so drop the references and let a retry start from scratch. + const abandonedStream = this.consumerStream + const abandonedConsumer = this.consumer + this.consumerStream = undefined + this.messageBatchStream = undefined + this.consumer = undefined + + // Deliberately not awaited: a client that never joined its group can take a long time to + // close, and that must not delay the error the caller is already waiting on. + void (async () => { + try { + await abandonedStream?.close() + await abandonedConsumer.close() + } catch { + // Best effort: nothing references this client any more. + } + })() + throw new InternalError({ message: 'Consumer init failed', errorCode: 'KAFKA_CONSUMER_INIT_ERROR', @@ -219,9 +263,16 @@ export abstract class AbstractKafkaConsumer< }) } - this.handleStream( - this.messageBatchStream ? this.messageBatchStream : this.consumerStream, - ).catch((error) => this.reconnect(error)) + const activeStream = this.messageBatchStream ? this.messageBatchStream : this.consumerStream + this.handleStream(activeStream).catch((error) => { + // Only a failure of the stream that is still the active one warrants a reconnect. + // `close()` and the reconnect loop tear the stream down on purpose, and the + // "Premature close" it emits on the way out must not start a fresh reconnect cycle. + if (this.isClosing) return + if (activeStream !== this.messageBatchStream && activeStream !== this.consumerStream) return + + return this.reconnect(error) + }) } private async handleStream( @@ -238,28 +289,49 @@ export abstract class AbstractKafkaConsumer< } async close(): Promise { - if (!this.consumer) return Promise.resolve() + // Recorded before the teardown's early return. A close that lands during the reconnect + // backoff finds no consumer to tear down, but must still stop the loop from bringing one + // back up behind the caller's back. + this.isShuttingDown = true - await this.consumerStream?.close() - this.consumerStream = undefined + await this.teardown() + } - await new Promise((resolve) => - this.messageBatchStream ? this.messageBatchStream?.end(resolve) : resolve(undefined), - ) - this.messageBatchStream = undefined + private async teardown(): Promise { + // A close can land while a reconnect is still bringing the consumer back up. Closing the + // client while `consume()` is still constructing its stream makes the stream refresh offsets + // against an already closed client, which surfaces as an uncaught "Client is closed." error. + await this.initPromise?.catch(() => { + // Init failures are surfaced to whoever called init(); here we only care that it settled. + }) + if (!this.consumer) return Promise.resolve() + + this.isClosing = true try { - await this.consumer.close() - } catch (err) { - // Reporting error but not throwing further - const resolvedErrorLog = resolveGlobalErrorLogObject(err) - this.logger.warn(resolvedErrorLog, 'Error while closing Kafka consumer') - this.errorReporter.report({ - error: isError(err) ? err : new Error('Unknown error while closing Kafka consumer'), - context: resolvedErrorLog, - }) + await this.consumerStream?.close() + this.consumerStream = undefined + + await new Promise((resolve) => + this.messageBatchStream ? this.messageBatchStream?.end(resolve) : resolve(undefined), + ) + this.messageBatchStream = undefined + + try { + await this.consumer.close() + } catch (err) { + // Reporting error but not throwing further + const resolvedErrorLog = resolveGlobalErrorLogObject(err) + this.logger.warn(resolvedErrorLog, 'Error while closing Kafka consumer') + this.errorReporter.report({ + error: isError(err) ? err : new Error('Unknown error while closing Kafka consumer'), + context: resolvedErrorLog, + }) + } + this.consumer = undefined + } finally { + this.isClosing = false } - this.consumer = undefined } private async reconnect(error: unknown): Promise { @@ -274,8 +346,19 @@ export abstract class AbstractKafkaConsumer< for (let attempt = 0; attempt < MAX_RECONNECT_ATTEMPTS; attempt++) { try { - await this.close() + // `teardown()` rather than `close()`: this is the loop replacing the consumer, not the + // application asking for shutdown, so it must not record shutdown intent. + await this.teardown() + await setTimeout(Math.pow(2, attempt) * 1000) // Backoff delay starting with 1s + + // The application closed the consumer while we were waiting; bringing it back up now + // would hand it a running consumer it believes it has shut down. + if (this.isShuttingDown) { + this.isReconnecting = false + return + } + await this.init() this.isReconnecting = false return @@ -291,7 +374,7 @@ export abstract class AbstractKafkaConsumer< } } - await this.close() // closing in case something is open after last init call + await this.teardown() // closing in case something is open after last init call this.isReconnecting = false this.handleError(new Error('Consumer failed to reconnect after max attempts'), { maxAttempts: MAX_RECONNECT_ATTEMPTS, diff --git a/packages/kafka/load-tests/package-lock.json b/packages/kafka/load-tests/package-lock.json index 76f67b514..c975ba85c 100644 --- a/packages/kafka/load-tests/package-lock.json +++ b/packages/kafka/load-tests/package-lock.json @@ -8,18 +8,18 @@ "name": "@message-queue-toolkit/kafka-load-tests", "version": "0.0.0", "dependencies": { - "@lokalise/node-core": "^14.2.0", + "@lokalise/node-core": "^14.8.1", "@message-queue-toolkit/core": "file:../../core", "@message-queue-toolkit/kafka": "file:../../kafka", "@message-queue-toolkit/schemas": "file:../../schemas", - "@platformatic/dynamic-buffer": "^0.3.1", - "@platformatic/kafka": "1.28.0", - "pg": "^8.19.0", - "zod": "^4.0.17" + "@platformatic/dynamic-buffer": "^0.4.0", + "@platformatic/kafka": "2.9.0", + "pg": "^8.22.0", + "zod": "^4.4.3" }, "devDependencies": { - "@types/pg": "^8.16.0", - "typescript": "^5.9.3" + "@types/pg": "^8.20.3", + "typescript": "^7.0.2" }, "engines": { "node": ">=22.18.0" @@ -27,64 +27,64 @@ }, "..": { "name": "@message-queue-toolkit/kafka", - "version": "0.9.1", + "version": "1.0.0", "license": "MIT", "dependencies": { - "@lokalise/node-core": "^14.2.0", - "@lokalise/universal-ts-utils": "^4.5.1", - "@platformatic/kafka": "^1.28.0" + "@lokalise/node-core": "^14.8.1", + "@lokalise/universal-ts-utils": "^4.11.0", + "@platformatic/kafka": "^2.9.0" }, "devDependencies": { - "@biomejs/biome": "^2.3.2", - "@lokalise/biome-config": "^3.1.0", - "@lokalise/tsconfig": "^3.0.0", - "@message-queue-toolkit/core": ">=23.0.0", - "@message-queue-toolkit/schemas": ">=7.0.0", - "@types/node": "^25.0.2", - "@vitest/coverage-v8": "^4.0.15", - "awilix": "^12.0.1", - "awilix-manager": "^6.0.0", - "rimraf": "^6.0.1", - "typescript": "^5.9.2", - "vitest": "^4.0.15", - "zod": "^4.0.17" + "@biomejs/biome": "^2.5.6", + "@lokalise/biome-config": "^3.1.1", + "@lokalise/tsconfig": "^5.0.0", + "@message-queue-toolkit/core": "workspace:*", + "@message-queue-toolkit/schemas": ">=7.2.0", + "@types/node": "^26.1.2", + "@vitest/coverage-v8": "^4.1.10", + "awilix": "^13.0.5", + "awilix-manager": "^7.0.0", + "rimraf": "^6.1.3", + "typescript": "^7.0.2", + "vitest": "^4.1.10", + "zod": "^4.4.3" }, "engines": { - "node": ">= 22.14.0" + "node": ">= 22.22.0" }, "peerDependencies": { - "@message-queue-toolkit/core": ">=23.0.0", + "@message-queue-toolkit/core": ">=26.1.1", "@message-queue-toolkit/schemas": ">=7.0.0", "zod": ">=3.25.76 <5.0.0" } }, "../../core": { "name": "@message-queue-toolkit/core", - "version": "25.3.0", + "version": "26.1.1", "license": "MIT", "dependencies": { - "@lokalise/node-core": "^14.2.0", - "@lokalise/universal-ts-utils": "^4.5.1", - "@message-queue-toolkit/schemas": "^7.0.0", - "dot-prop": "^10.1.0", - "fast-equals": "^6.0.0", - "json-stream-stringify": "^3.1.6", - "tmp": "^0.2.3", - "toad-cache": "^3.7.0" + "@lokalise/node-core": "^14.8.1", + "@lokalise/universal-ts-utils": "^4.11.0", + "@message-queue-toolkit/schemas": "^7.2.0", + "dot-prop": "^10.2.0", + "fast-equals": "^6.0.2", + "json-stream-stringify": "^3.1.7", + "tmp": "^0.2.7", + "toad-cache": "^3.7.4" }, "devDependencies": { - "@biomejs/biome": "^2.3.8", - "@lokalise/biome-config": "^3.1.0", - "@lokalise/tsconfig": "^3.0.0", - "@types/node": "^25.0.2", + "@biomejs/biome": "^2.5.6", + "@lokalise/biome-config": "^3.1.1", + "@lokalise/tsconfig": "^5.0.0", + "@types/node": "^26.1.2", "@types/tmp": "^0.2.6", - "@vitest/coverage-v8": "^4.0.15", - "awilix": "^12.0.5", - "awilix-manager": "^6.1.0", - "rimraf": "^6.0.1", - "typescript": "^5.9.2", - "vitest": "^4.0.15", - "zod": "^4.1.13" + "@vitest/coverage-v8": "^4.1.10", + "awilix": "^13.0.5", + "awilix-manager": "^7.0.0", + "rimraf": "^6.1.3", + "typescript": "^7.0.2", + "vitest": "^4.1.10", + "zod": "^4.4.3" }, "peerDependencies": { "zod": ">=3.25.76 <5.0.0" @@ -92,18 +92,18 @@ }, "../../schemas": { "name": "@message-queue-toolkit/schemas", - "version": "7.1.0", + "version": "7.2.0", "license": "MIT", "devDependencies": { - "@biomejs/biome": "^2.3.2", - "@lokalise/biome-config": "^3.1.0", - "@lokalise/tsconfig": "^3.0.0", - "@types/node": "^25.0.2", - "@vitest/coverage-v8": "^4.0.15", - "rimraf": "^6.0.1", - "typescript": "^5.9.2", - "vitest": "^4.0.15", - "zod": "^4.0.17" + "@biomejs/biome": "^2.5.6", + "@lokalise/biome-config": "^3.1.1", + "@lokalise/tsconfig": "^5.0.0", + "@types/node": "^26.1.2", + "@vitest/coverage-v8": "^4.1.10", + "rimraf": "^6.1.3", + "typescript": "^7.0.2", + "vitest": "^4.1.10", + "zod": "^4.4.3" }, "peerDependencies": { "zod": ">=3.25.67" @@ -141,9 +141,9 @@ } }, "node_modules/@lokalise/node-core": { - "version": "14.7.4", - "resolved": "https://registry.npmjs.org/@lokalise/node-core/-/node-core-14.7.4.tgz", - "integrity": "sha512-ZBlqh25P4YHgHGTc8iON6FtrLwTyy0MbIu7BmiN4ClZI2M92ssvnIUf2PHHZALLHN9w3yrs67JyHw0X+yiam2Q==", + "version": "14.8.1", + "resolved": "https://registry.npmjs.org/@lokalise/node-core/-/node-core-14.8.1.tgz", + "integrity": "sha512-Oaf1CqtcyV2pkdNXH//umnWcsyj8SFASQxsNV0h5QVOdq/N8PIETg6H/qp5Ovi2+Vh+YmK2t/Lg8tn5C8EeXsw==", "license": "Apache-2.0", "dependencies": { "dot-prop": "6.0.1", @@ -440,23 +440,24 @@ "license": "MIT" }, "node_modules/@platformatic/dynamic-buffer": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/@platformatic/dynamic-buffer/-/dynamic-buffer-0.3.1.tgz", - "integrity": "sha512-xQD5JSkQc4D15suOk7FezGDmh6Vb5e4phDoFZ/ASpa3Ft+3fOVwFOENmHtC1561zm/xHnKwI91NbMF8inpbk0Q==", + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/@platformatic/dynamic-buffer/-/dynamic-buffer-0.4.0.tgz", + "integrity": "sha512-eCL++LyBjSsqalm4I67dl+gVqLSKd6gPYCieD72S5KqqAkmSAgAYNHt+lL+iVXssWPSfbuIJ5PEwpn5JVD73Xw==", "license": "Apache-2.0", "engines": { "node": ">= 22.19.0" } }, "node_modules/@platformatic/kafka": { - "version": "1.28.0", - "resolved": "https://registry.npmjs.org/@platformatic/kafka/-/kafka-1.28.0.tgz", - "integrity": "sha512-JwG9FG36gwXpu4j3+61sLbHGSXkxTDc0eGowGsbcimiL+AnnI4rUWSqkCurBmAuBRbH6fa/BX54YfYFMHAr1fg==", + "version": "2.9.0", + "resolved": "https://registry.npmjs.org/@platformatic/kafka/-/kafka-2.9.0.tgz", + "integrity": "sha512-sVX2aww2RE5fA5AFJ4Bl4DQ3mZAqBnm5kDx2nd54N2hMee+kVNR0KXOmTQ7cmeufp6Kqn1XukZ6XqA7tJoKztg==", "license": "Apache-2.0", "dependencies": { - "@platformatic/dynamic-buffer": "^0.3.0", - "@platformatic/wasm-utils": "^0.1.0", + "@platformatic/dynamic-buffer": "^0.3.1", + "@platformatic/wasm-utils": "^0.2.1", "ajv": "^8.17.1", + "ajv-draft-04": "^1.0.0", "avsc": "^5.7.9", "debug": "^4.4.3", "fastq": "^1.19.1", @@ -464,25 +465,43 @@ "scule": "^1.3.0" }, "engines": { - "node": ">= 20.19.4 || >= 22.18.0 || >= 24.6.0" + "node": ">= 22.22.0 || >= 24.6.0" }, "optionalDependencies": { "@node-rs/crc32": "^1.10.6", "protobufjs": "^8.0.0" } }, + "node_modules/@platformatic/kafka/node_modules/@platformatic/dynamic-buffer": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/@platformatic/dynamic-buffer/-/dynamic-buffer-0.3.1.tgz", + "integrity": "sha512-xQD5JSkQc4D15suOk7FezGDmh6Vb5e4phDoFZ/ASpa3Ft+3fOVwFOENmHtC1561zm/xHnKwI91NbMF8inpbk0Q==", + "license": "Apache-2.0", + "engines": { + "node": ">= 22.19.0" + } + }, "node_modules/@platformatic/wasm-utils": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/@platformatic/wasm-utils/-/wasm-utils-0.1.0.tgz", - "integrity": "sha512-1fMkKsdud0pNlBh0JRELpWi3NE3/Kb0SCKR+5g2vH3ANDNlWDPJVDjNIJZYNdXA73yBfTVVve7xxBV22PUqZeg==", + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/@platformatic/wasm-utils/-/wasm-utils-0.2.1.tgz", + "integrity": "sha512-5rNl4h5n+hZG4LjiItQ7bVfHBqTypjldP46NXrOYW64cZr87ahngK1s9nEtCpByWg7WWjRLSxyCytgJK5gNdwQ==", "license": "Apache-2.0", "dependencies": { - "@platformatic/dynamic-buffer": "^0.3.0" + "@platformatic/dynamic-buffer": "^0.3.1" }, "engines": { "node": ">= 22.19.0" } }, + "node_modules/@platformatic/wasm-utils/node_modules/@platformatic/dynamic-buffer": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/@platformatic/dynamic-buffer/-/dynamic-buffer-0.3.1.tgz", + "integrity": "sha512-xQD5JSkQc4D15suOk7FezGDmh6Vb5e4phDoFZ/ASpa3Ft+3fOVwFOENmHtC1561zm/xHnKwI91NbMF8inpbk0Q==", + "license": "Apache-2.0", + "engines": { + "node": ">= 22.19.0" + } + }, "node_modules/@protobufjs/aspromise": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/@protobufjs/aspromise/-/aspromise-1.1.2.tgz", @@ -578,9 +597,9 @@ } }, "node_modules/@types/pg": { - "version": "8.16.0", - "resolved": "https://registry.npmjs.org/@types/pg/-/pg-8.16.0.tgz", - "integrity": "sha512-RmhMd/wD+CF8Dfo+cVIy3RR5cl8CyfXQ0tGgW6XBL8L4LM/UTEbNXYRbLwU6w+CgrKBNbrQWt4FUtTfaU5jSYQ==", + "version": "8.20.3", + "resolved": "https://registry.npmjs.org/@types/pg/-/pg-8.20.3.tgz", + "integrity": "sha512-4Tvg+HO6+oQaAkpT8GTYoSExzpGGZz532GXgbbCElWJQeQdMozBWxEKNBhJJpHFjWXsMxqPbyypvj/89FWNoSQ==", "dev": true, "license": "MIT", "dependencies": { @@ -589,6 +608,346 @@ "pg-types": "^2.2.0" } }, + "node_modules/@typescript/typescript-aix-ppc64": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/@typescript/typescript-aix-ppc64/-/typescript-aix-ppc64-7.0.2.tgz", + "integrity": "sha512-MTKKkWB7p/0E9xi1d1tHtZ5PiLkGEMIq88pK2CubZjOsLtYTLqhgIgi6zepFa+9GHZ6h05NMCkQxGKiPXMxXtQ==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "Apache-2.0", + "optional": true, + "os": [ + "aix" + ], + "engines": { + "node": ">=16.20.0" + } + }, + "node_modules/@typescript/typescript-darwin-arm64": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/@typescript/typescript-darwin-arm64/-/typescript-darwin-arm64-7.0.2.tgz", + "integrity": "sha512-gowzar9MwS/aRWp6f3a4KUqzRjAZjOsmGNCM6LcTgXum+dBfgsBVMN+AgvOCCbguXyick6LJhpBszxMebJ8syA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "Apache-2.0", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=16.20.0" + } + }, + "node_modules/@typescript/typescript-darwin-x64": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/@typescript/typescript-darwin-x64/-/typescript-darwin-x64-7.0.2.tgz", + "integrity": "sha512-SZ9xZInqApNlNGc9s0W1VSsktYSOe9cFqNOIqmN1Gs8SmkjKZYFt017G4VwPxASInODuAdbTW7sXiFUf893RgA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "Apache-2.0", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=16.20.0" + } + }, + "node_modules/@typescript/typescript-freebsd-arm64": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/@typescript/typescript-freebsd-arm64/-/typescript-freebsd-arm64-7.0.2.tgz", + "integrity": "sha512-W5NH4y/J0plIIS5b2xvTEkU7JFxyqdMAOgf+Ilhl0vHQXKO5dZoxd+C/jEtq56c4F3wk71RB4BMRQ2XdI+bwYQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "Apache-2.0", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=16.20.0" + } + }, + "node_modules/@typescript/typescript-freebsd-x64": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/@typescript/typescript-freebsd-x64/-/typescript-freebsd-x64-7.0.2.tgz", + "integrity": "sha512-UMGDx5sTpzNw3WiPebH7l90IWfJggEd+egHt/q6p7/Cm3zqoV7VxkGXt+3DxPIw8CcmvAB0j3sVVfbhX+M4Tpw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "Apache-2.0", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=16.20.0" + } + }, + "node_modules/@typescript/typescript-linux-arm": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/@typescript/typescript-linux-arm/-/typescript-linux-arm-7.0.2.tgz", + "integrity": "sha512-gffT3xPz9sR7j/YJExkyPntrI0P2EP9XbOyWzth2/Gs0RstK+90RBcO0ncXoXy/beYll1SXw846Nf2zdnEz0QQ==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=16.20.0" + } + }, + "node_modules/@typescript/typescript-linux-arm64": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/@typescript/typescript-linux-arm64/-/typescript-linux-arm64-7.0.2.tgz", + "integrity": "sha512-Qh4eU4/y3yDjnfjjyPYihMj5/ODIlmt+Bzu17OI+fiSRDW57QmU5SiN63exPRNJPKUzcc1INa1NXdrJ+MqHjUQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=16.20.0" + } + }, + "node_modules/@typescript/typescript-linux-loong64": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/@typescript/typescript-linux-loong64/-/typescript-linux-loong64-7.0.2.tgz", + "integrity": "sha512-uEHck9i8hoAzXPiYRib1O7miOnz23SxIeVl6F4LXox+qov1K35jHcEW6VHKvZI+pyvl7fZEP4MCU5LYvIq1GuQ==", + "cpu": [ + "loong64" + ], + "dev": true, + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=16.20.0" + } + }, + "node_modules/@typescript/typescript-linux-mips64el": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/@typescript/typescript-linux-mips64el/-/typescript-linux-mips64el-7.0.2.tgz", + "integrity": "sha512-R4KvAMnE43W5Qeqb0Ly56O3mWMWIAgsMyz36DCaycd5nbg/9kzm0liw3JocfRqyJY0KPmzFjbswozXyW0DnIYA==", + "cpu": [ + "mips64el" + ], + "dev": true, + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=16.20.0" + } + }, + "node_modules/@typescript/typescript-linux-ppc64": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/@typescript/typescript-linux-ppc64/-/typescript-linux-ppc64-7.0.2.tgz", + "integrity": "sha512-DORx5b3sd/4S7eayxm4FQv+A7CrkUIGRaHiwI8oiHTAI1fAPWhF4J0vAlkC8biAlHSVVwxMQ3tjZ2/DVbnQiiA==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=16.20.0" + } + }, + "node_modules/@typescript/typescript-linux-riscv64": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/@typescript/typescript-linux-riscv64/-/typescript-linux-riscv64-7.0.2.tgz", + "integrity": "sha512-wf0jqEDOjrPRnKwYRyyJDRo11KMbvMFrU+q4zqKyChODBzvlkbhNQfKvLxQCcwTpdDaXSHZTVuh0JoCrKCUMHQ==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=16.20.0" + } + }, + "node_modules/@typescript/typescript-linux-s390x": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/@typescript/typescript-linux-s390x/-/typescript-linux-s390x-7.0.2.tgz", + "integrity": "sha512-IkwJc3L7yhytWd/ewjyxNDfOmswCm9GWMJT/ue/dU4aZNbwZeYAetq42VyLmsmSjvoX7z74X6ZaYCtzAr0EuGw==", + "cpu": [ + "s390x" + ], + "dev": true, + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=16.20.0" + } + }, + "node_modules/@typescript/typescript-linux-x64": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/@typescript/typescript-linux-x64/-/typescript-linux-x64-7.0.2.tgz", + "integrity": "sha512-EYdf2cNg7rgCWJnxCdJ+F3V39O8ihb37eHAu1LK8oAFizgTQbPOK7zHHXbPt8rX24COqODXeI3sIf0fCXG7H/A==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=16.20.0" + } + }, + "node_modules/@typescript/typescript-netbsd-arm64": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/@typescript/typescript-netbsd-arm64/-/typescript-netbsd-arm64-7.0.2.tgz", + "integrity": "sha512-+polYF4MF04aPpO5FTkHran9yUQDSXqy5GiSDKpsll5jy3l3+g9QLhpf39T+ePtefhXLOGrLl0QIjkQP6VnelA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "Apache-2.0", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=16.20.0" + } + }, + "node_modules/@typescript/typescript-netbsd-x64": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/@typescript/typescript-netbsd-x64/-/typescript-netbsd-x64-7.0.2.tgz", + "integrity": "sha512-8YIT0EHM/3dq10ZOVF/A7pc/YSMtbcecct4rWtexrnSCHOPcpC2KTLXfTCR6vDpnSiY12heNb1GiN/wu+T/FyA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "Apache-2.0", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=16.20.0" + } + }, + "node_modules/@typescript/typescript-openbsd-arm64": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/@typescript/typescript-openbsd-arm64/-/typescript-openbsd-arm64-7.0.2.tgz", + "integrity": "sha512-APT8+ClYnuYm1u9+kgGXoMj2VzWzcymwh2gNSQVySHfkRDGOTVkoWLjCmOQSaO+PoqQ57B0flRp9SA+7GnnkzQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "Apache-2.0", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=16.20.0" + } + }, + "node_modules/@typescript/typescript-openbsd-x64": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/@typescript/typescript-openbsd-x64/-/typescript-openbsd-x64-7.0.2.tgz", + "integrity": "sha512-yX7s+Q0Dln0Dt9tEzZsAjXXR/+ytBM7AlglaqyeMPxQszJ1JhlJdZ6jLA+IzldHtflX81em7lDao1xXu+aRRkg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "Apache-2.0", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=16.20.0" + } + }, + "node_modules/@typescript/typescript-sunos-x64": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/@typescript/typescript-sunos-x64/-/typescript-sunos-x64-7.0.2.tgz", + "integrity": "sha512-dLJDGaLZ1D4HPQn62u1n8mBDkJREwMsAkCdkwd4Ieqw+x3TUyTsqY0YiBCtE6H6OzzgGk3iuZ3vFWRS+E8/d1g==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "Apache-2.0", + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=16.20.0" + } + }, + "node_modules/@typescript/typescript-win32-arm64": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/@typescript/typescript-win32-arm64/-/typescript-win32-arm64-7.0.2.tgz", + "integrity": "sha512-Gyl1Vy6OsWesLzmq+EP0Fb7b4Nid5232AvcA2SFcdYreldpNtYFFofPjnt62y9hQy7VTaZp65ICJjuAQRaVcIQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "Apache-2.0", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=16.20.0" + } + }, + "node_modules/@typescript/typescript-win32-x64": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/@typescript/typescript-win32-x64/-/typescript-win32-x64-7.0.2.tgz", + "integrity": "sha512-0BQ3HkAHHlKLSp1qRvf3SUhGpGsDuhB/jgFw75guyqbxJqEaS0Cw/VFO8i2nHglJUzQCRtMMR/IBAKE3ETMC4g==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "Apache-2.0", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=16.20.0" + } + }, "node_modules/ajv": { "version": "8.18.0", "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.18.0.tgz", @@ -605,6 +964,20 @@ "url": "https://github.com/sponsors/epoberezkin" } }, + "node_modules/ajv-draft-04": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/ajv-draft-04/-/ajv-draft-04-1.0.0.tgz", + "integrity": "sha512-mv00Te6nmYbRp5DCwclxtt7yV/joXJPGS7nM+97GdxvuttCOfgI3K4U25zboyeX0O+myI8ERluxQe5wljMmVIw==", + "license": "MIT", + "peerDependencies": { + "ajv": "^8.5.0" + }, + "peerDependenciesMeta": { + "ajv": { + "optional": true + } + } + }, "node_modules/atomic-sleep": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/atomic-sleep/-/atomic-sleep-1.0.0.tgz", @@ -808,15 +1181,14 @@ } }, "node_modules/pg": { - "version": "8.19.0", - "resolved": "https://registry.npmjs.org/pg/-/pg-8.19.0.tgz", - "integrity": "sha512-QIcLGi508BAHkQ3pJNptsFz5WQMlpGbuBGBaIaXsWK8mel2kQ/rThYI+DbgjUvZrIr7MiuEuc9LcChJoEZK1xQ==", + "version": "8.22.0", + "resolved": "https://registry.npmjs.org/pg/-/pg-8.22.0.tgz", + "integrity": "sha512-8wih1vVIBMxoUM2oB4soJsD9tDnDpLv4OXBJ+EJzFsvycD+lfyIreC2gGHq78f8jbLLt+bvlPTFdFZfJkOuzAA==", "license": "MIT", - "peer": true, "dependencies": { - "pg-connection-string": "^2.11.0", - "pg-pool": "^3.12.0", - "pg-protocol": "^1.12.0", + "pg-connection-string": "^2.14.0", + "pg-pool": "^3.14.0", + "pg-protocol": "^1.15.0", "pg-types": "2.2.0", "pgpass": "1.0.5" }, @@ -824,7 +1196,7 @@ "node": ">= 16.0.0" }, "optionalDependencies": { - "pg-cloudflare": "^1.3.0" + "pg-cloudflare": "^1.4.0" }, "peerDependencies": { "pg-native": ">=3.0.1" @@ -836,16 +1208,16 @@ } }, "node_modules/pg-cloudflare": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/pg-cloudflare/-/pg-cloudflare-1.3.0.tgz", - "integrity": "sha512-6lswVVSztmHiRtD6I8hw4qP/nDm1EJbKMRhf3HCYaqud7frGysPv7FYJ5noZQdhQtN2xJnimfMtvQq21pdbzyQ==", + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/pg-cloudflare/-/pg-cloudflare-1.4.0.tgz", + "integrity": "sha512-Vo7z/6rrQYxpNRylp4Tlob2elzbh+N/MOQbxFVWCxS7oEx6jF53GTJFxK2WWpKuBRkmiin4Mt+xofFDjx09R0A==", "license": "MIT", "optional": true }, "node_modules/pg-connection-string": { - "version": "2.11.0", - "resolved": "https://registry.npmjs.org/pg-connection-string/-/pg-connection-string-2.11.0.tgz", - "integrity": "sha512-kecgoJwhOpxYU21rZjULrmrBJ698U2RxXofKVzOn5UDj61BPj/qMb7diYUR1nLScCDbrztQFl1TaQZT0t1EtzQ==", + "version": "2.14.0", + "resolved": "https://registry.npmjs.org/pg-connection-string/-/pg-connection-string-2.14.0.tgz", + "integrity": "sha512-XwWDGcLRGCXAR8F/AM5bG7Q+A3Wm2s6QeEjlOKZLlH3UYcguiqCWKyWXVag5TLTIjR7oOJUY8kcADaZgWPyLeg==", "license": "MIT" }, "node_modules/pg-int8": { @@ -858,18 +1230,18 @@ } }, "node_modules/pg-pool": { - "version": "3.12.0", - "resolved": "https://registry.npmjs.org/pg-pool/-/pg-pool-3.12.0.tgz", - "integrity": "sha512-eIJ0DES8BLaziFHW7VgJEBPi5hg3Nyng5iKpYtj3wbcAUV9A1wLgWiY7ajf/f/oO1wfxt83phXPY8Emztg7ITg==", + "version": "3.14.0", + "resolved": "https://registry.npmjs.org/pg-pool/-/pg-pool-3.14.0.tgz", + "integrity": "sha512-gKtPkFdQPU3DksooVLi9LsjZxrsBUZIpa+7aVx+LV5pNh0KzP4Zleud2po+ConrxbuXGBJ6Hfer6hdgpIBpBaw==", "license": "MIT", "peerDependencies": { "pg": ">=8.0" } }, "node_modules/pg-protocol": { - "version": "1.12.0", - "resolved": "https://registry.npmjs.org/pg-protocol/-/pg-protocol-1.12.0.tgz", - "integrity": "sha512-uOANXNRACNdElMXJ0tPz6RBM0XQ61nONGAwlt8da5zs/iUOOCLBQOHSXnrC6fMsvtjxbOJrZZl5IScGv+7mpbg==", + "version": "1.15.0", + "resolved": "https://registry.npmjs.org/pg-protocol/-/pg-protocol-1.15.0.tgz", + "integrity": "sha512-cq9sECI5s0+uPUXjbz8ioyPJni6RzsRib0US67i5IoTZKw8fNeYlVE7u8F4dG7vEJJtc5wdD1K189lCCUwqWTQ==", "license": "MIT" }, "node_modules/pg-types": { @@ -1162,17 +1534,38 @@ "license": "0BSD" }, "node_modules/typescript": { - "version": "5.9.3", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.9.3.tgz", - "integrity": "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==", + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-7.0.2.tgz", + "integrity": "sha512-8FYau96o3NKOhbjKi/qNvG/W5jhzxkbdm5sj9AbZ/5T5sWqn3hJgLfGx27sRKZWTvyzCP8dLRBTf5tBTSRVUNA==", "dev": true, "license": "Apache-2.0", "bin": { - "tsc": "bin/tsc", - "tsserver": "bin/tsserver" + "tsc": "bin/tsc" }, "engines": { - "node": ">=14.17" + "node": ">=16.20.0" + }, + "optionalDependencies": { + "@typescript/typescript-aix-ppc64": "7.0.2", + "@typescript/typescript-darwin-arm64": "7.0.2", + "@typescript/typescript-darwin-x64": "7.0.2", + "@typescript/typescript-freebsd-arm64": "7.0.2", + "@typescript/typescript-freebsd-x64": "7.0.2", + "@typescript/typescript-linux-arm": "7.0.2", + "@typescript/typescript-linux-arm64": "7.0.2", + "@typescript/typescript-linux-loong64": "7.0.2", + "@typescript/typescript-linux-mips64el": "7.0.2", + "@typescript/typescript-linux-ppc64": "7.0.2", + "@typescript/typescript-linux-riscv64": "7.0.2", + "@typescript/typescript-linux-s390x": "7.0.2", + "@typescript/typescript-linux-x64": "7.0.2", + "@typescript/typescript-netbsd-arm64": "7.0.2", + "@typescript/typescript-netbsd-x64": "7.0.2", + "@typescript/typescript-openbsd-arm64": "7.0.2", + "@typescript/typescript-openbsd-x64": "7.0.2", + "@typescript/typescript-sunos-x64": "7.0.2", + "@typescript/typescript-win32-arm64": "7.0.2", + "@typescript/typescript-win32-x64": "7.0.2" } }, "node_modules/undici-types": { @@ -1198,11 +1591,10 @@ } }, "node_modules/zod": { - "version": "4.3.6", - "resolved": "https://registry.npmjs.org/zod/-/zod-4.3.6.tgz", - "integrity": "sha512-rftlrkhHZOcjDwkGlnUtZZkvaPHCsDATp4pGpuOOMDaTdDDXF91wuVDJoWoPsKX/3YPQ5fHuF3STjcYyKr+Qhg==", + "version": "4.4.3", + "resolved": "https://registry.npmjs.org/zod/-/zod-4.4.3.tgz", + "integrity": "sha512-ytENFjIJFl2UwYglde2jchW2Hwm4GJFLDiSXWdTrJQBIN9Fcyp7n4DhxJEiWNAJMV1/BqWfW/kkg71UDcHJyTQ==", "license": "MIT", - "peer": true, "funding": { "url": "https://github.com/sponsors/colinhacks" } diff --git a/packages/kafka/load-tests/package.json b/packages/kafka/load-tests/package.json index 9b8bb410d..326ba4127 100644 --- a/packages/kafka/load-tests/package.json +++ b/packages/kafka/load-tests/package.json @@ -31,14 +31,14 @@ "@message-queue-toolkit/kafka": "file:../../kafka", "@message-queue-toolkit/core": "file:../../core", "@message-queue-toolkit/schemas": "file:../../schemas", - "@lokalise/node-core": "^14.2.0", - "@platformatic/dynamic-buffer": "^0.3.1", - "@platformatic/kafka": "1.31.0", - "pg": "^8.19.0", - "zod": "^4.0.17" + "@lokalise/node-core": "^14.8.1", + "@platformatic/dynamic-buffer": "^0.4.0", + "@platformatic/kafka": "2.9.0", + "pg": "^8.22.0", + "zod": "^4.4.3" }, "devDependencies": { - "@types/pg": "^8.16.0", - "typescript": "^5.9.3" + "@types/pg": "^8.20.3", + "typescript": "^7.0.2" } } diff --git a/packages/kafka/package.json b/packages/kafka/package.json index 238b3ad03..52b7b9568 100644 --- a/packages/kafka/package.json +++ b/packages/kafka/package.json @@ -53,7 +53,7 @@ "dependencies": { "@lokalise/node-core": "^14.8.1", "@lokalise/universal-ts-utils": "^4.11.0", - "@platformatic/kafka": "^2.8.0" + "@platformatic/kafka": "^2.9.0" }, "peerDependencies": { "@message-queue-toolkit/core": ">=26.1.1", @@ -61,18 +61,18 @@ "zod": ">=3.25.76 <5.0.0" }, "devDependencies": { - "@biomejs/biome": "^2.5.3", - "@lokalise/biome-config": "^3.1.0", - "@lokalise/tsconfig": "^3.0.0", + "@biomejs/biome": "^2.5.6", + "@lokalise/biome-config": "^3.1.1", + "@lokalise/tsconfig": "^5.0.0", "@message-queue-toolkit/core": "workspace:*", - "@message-queue-toolkit/schemas": ">=7.0.0", - "@types/node": "^25.0.2", + "@message-queue-toolkit/schemas": ">=7.2.0", + "@types/node": "^26.1.2", "@vitest/coverage-v8": "^4.1.10", "awilix": "^13.0.5", "awilix-manager": "^7.0.0", - "rimraf": "^6.0.1", - "typescript": "^5.9.2", + "rimraf": "^6.1.3", + "typescript": "^7.0.2", "vitest": "^4.1.10", - "zod": "^4.0.17" + "zod": "^4.4.3" } } diff --git a/packages/kafka/test/consumer/PermissionConsumer.reconnect.spec.ts b/packages/kafka/test/consumer/PermissionConsumer.reconnect.spec.ts index c99a47419..ff5b17a16 100644 --- a/packages/kafka/test/consumer/PermissionConsumer.reconnect.spec.ts +++ b/packages/kafka/test/consumer/PermissionConsumer.reconnect.spec.ts @@ -1,4 +1,6 @@ +import { setTimeout } from 'node:timers/promises' import { waitAndRetry } from '@lokalise/universal-ts-utils/node' +import { Consumer } from '@platformatic/kafka' import { afterAll, afterEach, beforeAll, expect, vi } from 'vitest' import { createTestContext, type TestContext } from '../utils/testContext.ts' import { PermissionConsumer } from './PermissionConsumer.ts' @@ -33,19 +35,21 @@ describe('PermissionConsumer - reconnect', () => { // Given await consumer.init() - const closeSpy = vi.spyOn(consumer, 'close') + // The reconnect loop tears the consumer down itself rather than going through close(), so + // that its own teardown is not mistaken for the application asking for shutdown. + const teardownSpy = vi.spyOn(consumer as any, 'teardown') const initSpy = vi.spyOn(consumer, 'init') // When simulateStreamError() - // Then - reconnect should trigger close and init - await waitAndRetry(() => closeSpy.mock.calls.length === 1) + // Then - reconnect should trigger teardown and init + await waitAndRetry(() => teardownSpy.mock.calls.length === 1) expect(consumer.isActive).toBe(true) expect(consumer.isConnected).toBe(true) await waitAndRetry(() => initSpy.mock.calls.length === 1, 100, 15) - expect(closeSpy).toHaveBeenCalledTimes(1) + expect(teardownSpy).toHaveBeenCalledTimes(1) expect(initSpy).toHaveBeenCalledTimes(1) expect(consumer.isActive).toBe(true) expect(consumer.isConnected).toBe(true) @@ -55,7 +59,9 @@ describe('PermissionConsumer - reconnect', () => { // Given await consumer.init() - const closeSpy = vi.spyOn(consumer, 'close') + // The reconnect loop tears the consumer down itself rather than going through close(), so + // that its own teardown is not mistaken for the application asking for shutdown. + const teardownSpy = vi.spyOn(consumer as any, 'teardown') const initSpy = vi.spyOn(consumer, 'init').mockRejectedValue(new Error('Kafka unavailable')) const errorReporterSpy = vi.spyOn(testContext.cradle.errorReporter, 'report') @@ -76,8 +82,126 @@ describe('PermissionConsumer - reconnect', () => { ) expect(initSpy).toHaveBeenCalledTimes(5) - expect(closeSpy).toHaveBeenCalledTimes(6) // Retries + final clean-up + expect(teardownSpy).toHaveBeenCalledTimes(6) // Retries + final clean-up expect(consumer.isConnected).toBe(false) expect(consumer.isActive).toBe(false) }) + + it('should not reconnect when the failing stream is no longer the active one', async () => { + // Given + await consumer.init() + const reconnectSpy = vi.spyOn(consumer as any, 'reconnect') + const staleStream = (consumer as any).consumerStream + + // When - the stream fails after it stopped being the active one, the way it does once + // close() or a reconnect has replaced it + ;(consumer as any).consumerStream = undefined + staleStream.destroy() + await setTimeout(500) + + // Then + expect(reconnectSpy).not.toHaveBeenCalled() + }) + + it('should not reconnect while the consumer is deliberately closing', async () => { + // Given + await consumer.init() + const reconnectSpy = vi.spyOn(consumer as any, 'reconnect') + + // When - the stream fails during a close, which is what emits `Premature close` + ;(consumer as any).isClosing = true + simulateStreamError() + await setTimeout(500) + ;(consumer as any).isClosing = false + + // Then + expect(reconnectSpy).not.toHaveBeenCalled() + }) + + it('should reuse the in-flight initialization when init() is called concurrently', async () => { + // Given - hold initialization open at exactly the window a concurrent caller must not be + // released into: `this.consumer` is assigned, but `consume()` has not produced a stream yet + const doInitSpy = vi.spyOn(consumer as any, 'doInit') + let releaseJoinGroup!: () => void + const joinGroupGate = new Promise((resolve) => { + releaseJoinGroup = resolve + }) + const realJoinGroup = Consumer.prototype.joinGroup + vi.spyOn(Consumer.prototype, 'joinGroup').mockImplementation(async function ( + this: Consumer, + ...args: Parameters + ) { + await joinGroupGate + return realJoinGroup.apply(this, args) + }) + + // When + let settled = 0 + const inits = [consumer.init(), consumer.init(), consumer.init()].map((promise) => + promise.then(() => { + settled++ + }), + ) + await setTimeout(200) + + // Then - every caller is still waiting, including the two that found `this.consumer` set + expect((consumer as any).consumer).toBeDefined() + expect((consumer as any).consumerStream).toBeUndefined() + expect(settled).toBe(0) + + releaseJoinGroup() + await Promise.all(inits) + + expect(doInitSpy).toHaveBeenCalledOnce() + expect((consumer as any).consumerStream).toBeDefined() + expect(consumer.isConnected).toBe(true) + }) + + it('should drop a half-built consumer when init() fails', async () => { + // Given - init fails after `doInit()` has already assigned `this.consumer` + vi.spyOn(Consumer.prototype, 'joinGroup').mockRejectedValue(new Error('Kafka unavailable')) + + // When + await expect(consumer.init()).rejects.toThrow('Consumer init failed') + + // Then - nothing half-built is left behind for the early return in init() to hand back + expect((consumer as any).consumer).toBeUndefined() + expect((consumer as any).consumerStream).toBeUndefined() + + // And a retry starts from scratch rather than resolving against the failed consumer + vi.restoreAllMocks() + await consumer.init() + + expect((consumer as any).consumerStream).toBeDefined() + expect(consumer.isConnected).toBe(true) + }) + + it('should not bring the consumer back up when close lands during reconnect backoff', async () => { + // Given + await consumer.init() + const initSpy = vi.spyOn(consumer, 'init') + + // When - the application closes while the reconnect loop is waiting out its backoff + simulateStreamError() + await waitAndRetry(() => (consumer as any).isReconnecting, 20, 50) + await consumer.close() + + // Then - the loop must not hand back a running consumer the caller believes it shut down + await setTimeout(2000) + expect(initSpy).not.toHaveBeenCalled() + expect((consumer as any).consumer).toBeUndefined() + expect(consumer.isConnected).toBe(false) + }) + + it('should wait for an in-flight init() before closing', async () => { + // When - close lands while init is still bringing the consumer up + const initPromise = consumer.init() + const closePromise = consumer.close() + await Promise.all([initPromise, closePromise]) + + // Then - the close applies to the fully built consumer, leaving nothing behind + expect((consumer as any).consumer).toBeUndefined() + expect((consumer as any).consumerStream).toBeUndefined() + expect(consumer.isConnected).toBe(false) + }) }) diff --git a/packages/kafka/test/publisher/PermissionPublisher.spec.ts b/packages/kafka/test/publisher/PermissionPublisher.spec.ts index 3b445446a..441b92215 100644 --- a/packages/kafka/test/publisher/PermissionPublisher.spec.ts +++ b/packages/kafka/test/publisher/PermissionPublisher.spec.ts @@ -94,27 +94,27 @@ describe('PermissionPublisher', () => { ) }) - it.each([ - false, - true, - ])('should auto create topic if creation topic is used (lazy init: %s)', async (lazyInit) => { - // Given - publisher = new PermissionPublisher(testContext.cradle, { - autocreateTopics: true, - }) + it.each([false, true])( + 'should auto create topic if creation topic is used (lazy init: %s)', + async (lazyInit) => { + // Given + publisher = new PermissionPublisher(testContext.cradle, { + autocreateTopics: true, + }) - // When - if (!lazyInit) await publisher.init() - await publisher.publish('permission-added', { - id: '1', - type: 'added', - permissions: [], - }) + // When + if (!lazyInit) await publisher.init() + await publisher.publish('permission-added', { + id: '1', + type: 'added', + permissions: [], + }) - // Then - const emittedEvent = await publisher.handlerSpy.waitForMessageWithId('1', 'published') - expect(emittedEvent.message).toMatchObject({ id: '1', type: 'added' }) - }) + // Then + const emittedEvent = await publisher.handlerSpy.waitForMessageWithId('1', 'published') + expect(emittedEvent.message).toMatchObject({ id: '1', type: 'added' }) + }, + ) }) describe('publish', () => { diff --git a/packages/kafka/tsconfig.build.json b/packages/kafka/tsconfig.build.json index 1b3cbf11b..942f7b9e4 100644 --- a/packages/kafka/tsconfig.build.json +++ b/packages/kafka/tsconfig.build.json @@ -1,5 +1,8 @@ { "extends": ["./tsconfig.json", "@lokalise/tsconfig/build-public-lib"], + "compilerOptions": { + "rootDir": "lib" + }, "include": ["lib/**/*"], "exclude": ["lib/**/*.spec.ts", "lib/**/*.test.ts"] } diff --git a/packages/kafka/tsconfig.json b/packages/kafka/tsconfig.json index a6868075f..721796df5 100644 --- a/packages/kafka/tsconfig.json +++ b/packages/kafka/tsconfig.json @@ -2,6 +2,6 @@ "extends": "@lokalise/tsconfig/tsc", "include": ["lib/**/*", "test/**/*", "vitest.config.ts"], "compilerOptions": { - "types": ["vitest/globals"] + "types": ["node", "vitest/globals"] } } diff --git a/packages/metrics/package.json b/packages/metrics/package.json index 2ab9725a3..1e7af2d5f 100644 --- a/packages/metrics/package.json +++ b/packages/metrics/package.json @@ -26,7 +26,7 @@ "prepublishOnly": "pnpm run lint && pnpm run build" }, "dependencies": { - "@lokalise/node-core": "^14.2.0", + "@lokalise/node-core": "^14.8.1", "@lokalise/universal-ts-utils": "^4.11.0" }, "peerDependencies": { @@ -34,13 +34,13 @@ "prom-client": ">=15.0.0" }, "devDependencies": { - "@biomejs/biome": "^2.5.3", - "@lokalise/biome-config": "^3.1.0", - "@lokalise/tsconfig": "^3.0.0", + "@biomejs/biome": "^2.5.6", + "@lokalise/biome-config": "^3.1.1", + "@lokalise/tsconfig": "^5.0.0", "@message-queue-toolkit/core": "workspace:*", "@vitest/coverage-v8": "^4.1.10", - "rimraf": "^6.0.1", - "typescript": "^5.9.3", + "rimraf": "^6.1.3", + "typescript": "^7.0.2", "vitest": "^4.1.10" }, "homepage": "https://github.com/kibertoad/message-queue-toolkit", diff --git a/packages/metrics/tsconfig.build.json b/packages/metrics/tsconfig.build.json index 1b3cbf11b..942f7b9e4 100644 --- a/packages/metrics/tsconfig.build.json +++ b/packages/metrics/tsconfig.build.json @@ -1,5 +1,8 @@ { "extends": ["./tsconfig.json", "@lokalise/tsconfig/build-public-lib"], + "compilerOptions": { + "rootDir": "lib" + }, "include": ["lib/**/*"], "exclude": ["lib/**/*.spec.ts", "lib/**/*.test.ts"] } diff --git a/packages/metrics/tsconfig.json b/packages/metrics/tsconfig.json index a6868075f..721796df5 100644 --- a/packages/metrics/tsconfig.json +++ b/packages/metrics/tsconfig.json @@ -2,6 +2,6 @@ "extends": "@lokalise/tsconfig/tsc", "include": ["lib/**/*", "test/**/*", "vitest.config.ts"], "compilerOptions": { - "types": ["vitest/globals"] + "types": ["node", "vitest/globals"] } } diff --git a/packages/outbox-core/package.json b/packages/outbox-core/package.json index 4208d7ed2..9d406848e 100644 --- a/packages/outbox-core/package.json +++ b/packages/outbox-core/package.json @@ -27,25 +27,25 @@ }, "dependencies": { "@lokalise/background-jobs-common": "^14.4.2", - "@supercharge/promise-pool": "^3.2.0", - "uuidv7": "^1.0.2" + "@supercharge/promise-pool": "^3.3.0", + "uuidv7": "^1.2.1" }, "peerDependencies": { "@message-queue-toolkit/core": ">=22.0.0", "@message-queue-toolkit/schemas": ">=7.0.0" }, "devDependencies": { - "@biomejs/biome": "^2.5.3", - "@lokalise/biome-config": "^3.1.0", - "@lokalise/tsconfig": "^3.0.0", + "@biomejs/biome": "^2.5.6", + "@lokalise/biome-config": "^3.1.1", + "@lokalise/tsconfig": "^5.0.0", "@message-queue-toolkit/core": "workspace:*", "@message-queue-toolkit/schemas": "workspace:*", - "@types/node": "^25.0.2", + "@types/node": "^26.1.2", "@vitest/coverage-v8": "^4.1.10", - "rimraf": "^6.0.1", - "typescript": "^5.9.2", + "rimraf": "^6.1.3", + "typescript": "^7.0.2", "vitest": "^4.1.10", - "zod": "^4.0.17" + "zod": "^4.4.3" }, "homepage": "https://github.com/kibertoad/message-queue-toolkit", "repository": { diff --git a/packages/outbox-core/tsconfig.build.json b/packages/outbox-core/tsconfig.build.json index 1b3cbf11b..942f7b9e4 100644 --- a/packages/outbox-core/tsconfig.build.json +++ b/packages/outbox-core/tsconfig.build.json @@ -1,5 +1,8 @@ { "extends": ["./tsconfig.json", "@lokalise/tsconfig/build-public-lib"], + "compilerOptions": { + "rootDir": "lib" + }, "include": ["lib/**/*"], "exclude": ["lib/**/*.spec.ts", "lib/**/*.test.ts"] } diff --git a/packages/outbox-core/tsconfig.json b/packages/outbox-core/tsconfig.json index a6868075f..721796df5 100644 --- a/packages/outbox-core/tsconfig.json +++ b/packages/outbox-core/tsconfig.json @@ -2,6 +2,6 @@ "extends": "@lokalise/tsconfig/tsc", "include": ["lib/**/*", "test/**/*", "vitest.config.ts"], "compilerOptions": { - "types": ["vitest/globals"] + "types": ["node", "vitest/globals"] } } diff --git a/packages/redis-message-deduplication-store/package.json b/packages/redis-message-deduplication-store/package.json index a0431d24e..00ae2e686 100644 --- a/packages/redis-message-deduplication-store/package.json +++ b/packages/redis-message-deduplication-store/package.json @@ -28,22 +28,22 @@ "prepublishOnly": "pnpm run lint && pnpm run build" }, "dependencies": { - "@lokalise/node-core": "^14.2.0", - "redis-semaphore": "^5.6.2" + "@lokalise/node-core": "^14.8.1", + "redis-semaphore": "^5.7.0" }, "peerDependencies": { "@message-queue-toolkit/core": ">=23.1.0", "ioredis": "^5.3.2" }, "devDependencies": { - "@biomejs/biome": "^2.5.3", - "@lokalise/biome-config": "^3.1.0", - "@lokalise/tsconfig": "^3.0.0", + "@biomejs/biome": "^2.5.6", + "@lokalise/biome-config": "^3.1.1", + "@lokalise/tsconfig": "^5.0.0", "@message-queue-toolkit/core": "workspace:*", - "@types/node": "^25.0.2", + "@types/node": "^26.1.2", "@vitest/coverage-v8": "^4.1.10", - "rimraf": "^6.0.1", - "typescript": "^5.9.2", + "rimraf": "^6.1.3", + "typescript": "^7.0.2", "vitest": "^4.1.10" }, "homepage": "https://github.com/kibertoad/message-queue-toolkit", diff --git a/packages/redis-message-deduplication-store/tsconfig.build.json b/packages/redis-message-deduplication-store/tsconfig.build.json index 1b3cbf11b..942f7b9e4 100644 --- a/packages/redis-message-deduplication-store/tsconfig.build.json +++ b/packages/redis-message-deduplication-store/tsconfig.build.json @@ -1,5 +1,8 @@ { "extends": ["./tsconfig.json", "@lokalise/tsconfig/build-public-lib"], + "compilerOptions": { + "rootDir": "lib" + }, "include": ["lib/**/*"], "exclude": ["lib/**/*.spec.ts", "lib/**/*.test.ts"] } diff --git a/packages/redis-message-deduplication-store/tsconfig.json b/packages/redis-message-deduplication-store/tsconfig.json index a6868075f..721796df5 100644 --- a/packages/redis-message-deduplication-store/tsconfig.json +++ b/packages/redis-message-deduplication-store/tsconfig.json @@ -2,6 +2,6 @@ "extends": "@lokalise/tsconfig/tsc", "include": ["lib/**/*", "test/**/*", "vitest.config.ts"], "compilerOptions": { - "types": ["vitest/globals"] + "types": ["node", "vitest/globals"] } } diff --git a/packages/s3-payload-store/package.json b/packages/s3-payload-store/package.json index 2a9844704..984b5779b 100644 --- a/packages/s3-payload-store/package.json +++ b/packages/s3-payload-store/package.json @@ -36,14 +36,14 @@ }, "devDependencies": { "@message-queue-toolkit/core": "workspace:*", - "@biomejs/biome": "^2.5.3", - "@lokalise/biome-config": "^3.1.0", - "@lokalise/tsconfig": "^3.0.0", - "@types/node": "^25.0.2", + "@biomejs/biome": "^2.5.6", + "@lokalise/biome-config": "^3.1.1", + "@lokalise/tsconfig": "^5.0.0", + "@types/node": "^26.1.2", "@vitest/coverage-v8": "^4.1.10", "fauxqs": "^2.8.0", - "rimraf": "^6.0.1", - "typescript": "^5.9.3", + "rimraf": "^6.1.3", + "typescript": "^7.0.2", "vitest": "^4.1.10" }, "homepage": "https://github.com/kibertoad/message-queue-toolkit", diff --git a/packages/s3-payload-store/tsconfig.build.json b/packages/s3-payload-store/tsconfig.build.json index 1b3cbf11b..942f7b9e4 100644 --- a/packages/s3-payload-store/tsconfig.build.json +++ b/packages/s3-payload-store/tsconfig.build.json @@ -1,5 +1,8 @@ { "extends": ["./tsconfig.json", "@lokalise/tsconfig/build-public-lib"], + "compilerOptions": { + "rootDir": "lib" + }, "include": ["lib/**/*"], "exclude": ["lib/**/*.spec.ts", "lib/**/*.test.ts"] } diff --git a/packages/s3-payload-store/tsconfig.json b/packages/s3-payload-store/tsconfig.json index a6868075f..721796df5 100644 --- a/packages/s3-payload-store/tsconfig.json +++ b/packages/s3-payload-store/tsconfig.json @@ -2,6 +2,6 @@ "extends": "@lokalise/tsconfig/tsc", "include": ["lib/**/*", "test/**/*", "vitest.config.ts"], "compilerOptions": { - "types": ["vitest/globals"] + "types": ["node", "vitest/globals"] } } diff --git a/packages/schemas/package.json b/packages/schemas/package.json index e6ac1fa35..83d8a48b5 100644 --- a/packages/schemas/package.json +++ b/packages/schemas/package.json @@ -29,15 +29,15 @@ "zod": ">=3.25.67" }, "devDependencies": { - "@biomejs/biome": "^2.5.3", - "@lokalise/biome-config": "^3.1.0", - "@lokalise/tsconfig": "^3.0.0", - "@types/node": "^25.0.2", + "@biomejs/biome": "^2.5.6", + "@lokalise/biome-config": "^3.1.1", + "@lokalise/tsconfig": "^5.0.0", + "@types/node": "^26.1.2", "@vitest/coverage-v8": "^4.1.10", - "rimraf": "^6.0.1", - "typescript": "^5.9.2", + "rimraf": "^6.1.3", + "typescript": "^7.0.2", "vitest": "^4.1.10", - "zod": "^4.0.17" + "zod": "^4.4.3" }, "homepage": "https://github.com/kibertoad/message-queue-toolkit", "repository": { diff --git a/packages/schemas/tsconfig.build.json b/packages/schemas/tsconfig.build.json index 1b3cbf11b..942f7b9e4 100644 --- a/packages/schemas/tsconfig.build.json +++ b/packages/schemas/tsconfig.build.json @@ -1,5 +1,8 @@ { "extends": ["./tsconfig.json", "@lokalise/tsconfig/build-public-lib"], + "compilerOptions": { + "rootDir": "lib" + }, "include": ["lib/**/*"], "exclude": ["lib/**/*.spec.ts", "lib/**/*.test.ts"] } diff --git a/packages/schemas/tsconfig.json b/packages/schemas/tsconfig.json index a6868075f..721796df5 100644 --- a/packages/schemas/tsconfig.json +++ b/packages/schemas/tsconfig.json @@ -2,6 +2,6 @@ "extends": "@lokalise/tsconfig/tsc", "include": ["lib/**/*", "test/**/*", "vitest.config.ts"], "compilerOptions": { - "types": ["vitest/globals"] + "types": ["node", "vitest/globals"] } } diff --git a/packages/sns/package.json b/packages/sns/package.json index df9154ea8..794925801 100644 --- a/packages/sns/package.json +++ b/packages/sns/package.json @@ -31,12 +31,12 @@ "prepublishOnly": "pnpm run lint && pnpm run build" }, "dependencies": { - "@lokalise/node-core": "^14.4.2", + "@lokalise/node-core": "^14.8.1", "sqs-consumer": "^15.0.3" }, "peerDependencies": { "@aws-sdk/client-sns": "^3.632.0", - "@aws-sdk/client-sqs": "^3.1098.0", + "@aws-sdk/client-sqs": "^3.1093.0", "@aws-sdk/client-sts": "^3.632.0", "@message-queue-toolkit/core": ">=26.0.0", "@message-queue-toolkit/schemas": ">=7.0.0", @@ -44,26 +44,26 @@ "zod": ">=3.25.76 <5.0.0" }, "devDependencies": { - "@aws-sdk/client-s3": "^3.812.0", - "@aws-sdk/client-sns": "^3.1098.0", - "@aws-sdk/client-sqs": "^3.1098.0", - "@biomejs/biome": "^2.5.3", - "@lokalise/biome-config": "^3.1.0", - "@lokalise/tsconfig": "^3.0.0", + "@aws-sdk/client-s3": "^3.1106.0", + "@aws-sdk/client-sns": "^3.1106.0", + "@aws-sdk/client-sqs": "^3.1106.0", + "@biomejs/biome": "^2.5.6", + "@lokalise/biome-config": "^3.1.1", + "@lokalise/tsconfig": "^5.0.0", "@message-queue-toolkit/core": "workspace:*", "@message-queue-toolkit/redis-message-deduplication-store": "workspace:*", "@message-queue-toolkit/s3-payload-store": "workspace:*", "@message-queue-toolkit/sqs": "workspace:*", - "@types/node": "^25.0.2", + "@types/node": "^26.1.2", "@vitest/coverage-v8": "^4.1.10", "awilix": "^13.0.5", "awilix-manager": "^7.0.0", "fauxqs": "^2.8.0", "ioredis": "^5.11.1", - "rimraf": "^6.0.1", - "typescript": "^5.9.3", + "rimraf": "^6.1.3", + "typescript": "^7.0.2", "vitest": "^4.1.10", - "zod": "^4.1.13" + "zod": "^4.4.3" }, "homepage": "https://github.com/kibertoad/message-queue-toolkit", "repository": { diff --git a/packages/sns/test/consumers/SnsSqsPermissionConsumer.spec.ts b/packages/sns/test/consumers/SnsSqsPermissionConsumer.spec.ts index c5ccd493e..d28342754 100644 --- a/packages/sns/test/consumers/SnsSqsPermissionConsumer.spec.ts +++ b/packages/sns/test/consumers/SnsSqsPermissionConsumer.spec.ts @@ -776,64 +776,68 @@ describe('SnsSqsPermissionConsumer', () => { await diContainer.dispose() }) - it.each([false, true])('using 2 consumers with heartbeat -> %s', async (heartbeatEnabled) => { - let consumer1IsProcessing = false - let consumer1Counter = 0 - let consumer2Counter = 0 - - const consumer1 = new SnsSqsPermissionConsumer(diContainer.cradle, { - creationConfig: { - topic: { Name: topicName }, - queue: { - QueueName: queueName, - Attributes: { VisibilityTimeout: '2' }, + it.each([false, true])( + 'using 2 consumers with heartbeat -> %s', + async (heartbeatEnabled) => { + let consumer1IsProcessing = false + let consumer1Counter = 0 + let consumer2Counter = 0 + + const consumer1 = new SnsSqsPermissionConsumer(diContainer.cradle, { + creationConfig: { + topic: { Name: topicName }, + queue: { + QueueName: queueName, + Attributes: { VisibilityTimeout: '2' }, + }, }, - }, - consumerOverrides: { - heartbeatInterval: heartbeatEnabled ? 1 : undefined, - }, - removeHandlerOverride: async () => { - consumer1IsProcessing = true - await setTimeout(3100) // Wait to the visibility timeout to expire - consumer1Counter++ - consumer1IsProcessing = false - return { result: 'success' } - }, - }) - await consumer1.start() + consumerOverrides: { + heartbeatInterval: heartbeatEnabled ? 1 : undefined, + }, + removeHandlerOverride: async () => { + consumer1IsProcessing = true + await setTimeout(3100) // Wait to the visibility timeout to expire + consumer1Counter++ + consumer1IsProcessing = false + return { result: 'success' } + }, + }) + await consumer1.start() - const consumer2 = new SnsSqsPermissionConsumer(diContainer.cradle, { - locatorConfig: { - queueUrl: consumer1.subscriptionProps.queueUrl, - topicArn: consumer1.subscriptionProps.topicArn, - subscriptionArn: consumer1.subscriptionProps.subscriptionArn, - }, - removeHandlerOverride: () => { - consumer2Counter++ - return Promise.resolve({ result: 'success' }) - }, - }) - const publisher = new SnsPermissionPublisher(diContainer.cradle, { - locatorConfig: { topicArn: consumer1.subscriptionProps.topicArn }, - }) + const consumer2 = new SnsSqsPermissionConsumer(diContainer.cradle, { + locatorConfig: { + queueUrl: consumer1.subscriptionProps.queueUrl, + topicArn: consumer1.subscriptionProps.topicArn, + subscriptionArn: consumer1.subscriptionProps.subscriptionArn, + }, + removeHandlerOverride: () => { + consumer2Counter++ + return Promise.resolve({ result: 'success' }) + }, + }) + const publisher = new SnsPermissionPublisher(diContainer.cradle, { + locatorConfig: { topicArn: consumer1.subscriptionProps.topicArn }, + }) - await publisher.publish({ id: '10', messageType: 'remove' }) - // wait for consumer1 to start processing to start second consumer - await waitAndRetry(() => consumer1IsProcessing, 5, 5) - await consumer2.start() + await publisher.publish({ id: '10', messageType: 'remove' }) + // wait for consumer1 to start processing to start second consumer + await waitAndRetry(() => consumer1IsProcessing, 5, 5) + await consumer2.start() - // wait for consumer1 to process, and consumer2 only when heartbeat is disabled - await waitAndRetry( - () => consumer1Counter > 0 && (heartbeatEnabled || consumer2Counter > 0), - 100, - 40, - ) + // wait for consumer1 to process, and consumer2 only when heartbeat is disabled + await waitAndRetry( + () => consumer1Counter > 0 && (heartbeatEnabled || consumer2Counter > 0), + 100, + 40, + ) - expect(consumer1Counter).toBe(1) - expect(consumer2Counter).toBe(heartbeatEnabled ? 0 : 1) + expect(consumer1Counter).toBe(1) + expect(consumer2Counter).toBe(heartbeatEnabled ? 0 : 1) - await Promise.all([consumer1.close(), consumer2.close()]) - }, 10000) + await Promise.all([consumer1.close(), consumer2.close()]) + }, + 10000, + ) }) describe('exponential backoff retry', () => { diff --git a/packages/sns/tsconfig.build.json b/packages/sns/tsconfig.build.json index 1b3cbf11b..942f7b9e4 100644 --- a/packages/sns/tsconfig.build.json +++ b/packages/sns/tsconfig.build.json @@ -1,5 +1,8 @@ { "extends": ["./tsconfig.json", "@lokalise/tsconfig/build-public-lib"], + "compilerOptions": { + "rootDir": "lib" + }, "include": ["lib/**/*"], "exclude": ["lib/**/*.spec.ts", "lib/**/*.test.ts"] } diff --git a/packages/sns/tsconfig.json b/packages/sns/tsconfig.json index a6868075f..721796df5 100644 --- a/packages/sns/tsconfig.json +++ b/packages/sns/tsconfig.json @@ -2,6 +2,6 @@ "extends": "@lokalise/tsconfig/tsc", "include": ["lib/**/*", "test/**/*", "vitest.config.ts"], "compilerOptions": { - "types": ["vitest/globals"] + "types": ["node", "vitest/globals"] } } diff --git a/packages/sqs/package.json b/packages/sqs/package.json index b854ad384..935bdc7e2 100644 --- a/packages/sqs/package.json +++ b/packages/sqs/package.json @@ -32,34 +32,34 @@ "prepublishOnly": "pnpm run lint && pnpm run build" }, "dependencies": { - "@lokalise/node-core": "^14.6.1", + "@lokalise/node-core": "^14.8.1", "sqs-consumer": "^15.0.3" }, "peerDependencies": { - "@aws-sdk/client-sqs": "^3.1098.0", + "@aws-sdk/client-sqs": "^3.1093.0", "@message-queue-toolkit/core": ">=26.0.0", "zod": ">=3.25.76 <5.0.0" }, "devDependencies": { - "@aws-sdk/client-s3": "^3.812.0", - "@aws-sdk/client-sqs": "^3.1098.0", - "@biomejs/biome": "^2.5.3", - "@lokalise/biome-config": "^3.1.0", - "@lokalise/tsconfig": "^3.0.0", + "@aws-sdk/client-s3": "^3.1106.0", + "@aws-sdk/client-sqs": "^3.1106.0", + "@biomejs/biome": "^2.5.6", + "@lokalise/biome-config": "^3.1.1", + "@lokalise/tsconfig": "^5.0.0", "@message-queue-toolkit/core": "workspace:*", "@message-queue-toolkit/redis-message-deduplication-store": "workspace:*", "@message-queue-toolkit/s3-payload-store": "workspace:*", "@message-queue-toolkit/schemas": "workspace:*", - "@types/node": "^25.0.2", + "@types/node": "^26.1.2", "@vitest/coverage-v8": "^4.1.10", "awilix": "^13.0.5", "awilix-manager": "^7.0.0", "fauxqs": "^2.8.0", "ioredis": "^5.11.1", - "rimraf": "^6.0.1", - "typescript": "^5.9.3", + "rimraf": "^6.1.3", + "typescript": "^7.0.2", "vitest": "^4.1.10", - "zod": "^4.1.13" + "zod": "^4.4.3" }, "homepage": "https://github.com/kibertoad/message-queue-toolkit", "repository": { diff --git a/packages/sqs/test/consumers/SqsPermissionConsumer.spec.ts b/packages/sqs/test/consumers/SqsPermissionConsumer.spec.ts index f0f18d69b..e60d2822b 100644 --- a/packages/sqs/test/consumers/SqsPermissionConsumer.spec.ts +++ b/packages/sqs/test/consumers/SqsPermissionConsumer.spec.ts @@ -920,50 +920,58 @@ describe('SqsPermissionConsumer', () => { ) }) - it.each([false, true])('using 2 consumers with heartbeat -> %s', async (heartbeatEnabled) => { - let consumer1IsProcessing = false - let consumer1Counter = 0 - let consumer2Counter = 0 - - const consumer1 = new SqsPermissionConsumer(diContainer.cradle, { - creationConfig: { - queue: { QueueName: queueName, Attributes: { VisibilityTimeout: '2' } }, - }, - consumerOverrides: { heartbeatInterval: heartbeatEnabled ? 1 : undefined }, - removeHandlerOverride: async () => { - consumer1IsProcessing = true - await setTimeout(3100) // Wait to the visibility timeout to expire - consumer1Counter++ - consumer1IsProcessing = false - return { result: 'success' } - }, - }) - await consumer1.start() - - const consumer2 = new SqsPermissionConsumer(diContainer.cradle, { - locatorConfig: { queueUrl: consumer1.queueProps.url }, - removeHandlerOverride: () => { - consumer2Counter++ - return Promise.resolve({ result: 'success' }) - }, - }) - const publisher = new SqsPermissionPublisher(diContainer.cradle, { - locatorConfig: { queueUrl: consumer1.queueProps.url }, - }) - - await publisher.publish({ id: '10', messageType: 'remove' }) - // wait for consumer1 to start processing to start second consumer - await waitAndRetry(() => consumer1IsProcessing, 5, 5) - await consumer2.start() - - // wait for both consumers to process message - await waitAndRetry(() => consumer1Counter > 0 && consumer2Counter > 0, 100, 40) + it.each([false, true])( + 'using 2 consumers with heartbeat -> %s', + async (heartbeatEnabled) => { + let consumer1IsProcessing = false + let consumer1Counter = 0 + let consumer2Counter = 0 + + const consumer1 = new SqsPermissionConsumer(diContainer.cradle, { + creationConfig: { + queue: { QueueName: queueName, Attributes: { VisibilityTimeout: '2' } }, + }, + consumerOverrides: { heartbeatInterval: heartbeatEnabled ? 1 : undefined }, + removeHandlerOverride: async () => { + consumer1IsProcessing = true + await setTimeout(3100) // Wait to the visibility timeout to expire + consumer1Counter++ + consumer1IsProcessing = false + return { result: 'success' } + }, + }) + await consumer1.start() - expect(consumer1Counter).toBe(1) - expect(consumer2Counter).toBe(heartbeatEnabled ? 0 : 1) + const consumer2 = new SqsPermissionConsumer(diContainer.cradle, { + locatorConfig: { queueUrl: consumer1.queueProps.url }, + removeHandlerOverride: () => { + consumer2Counter++ + return Promise.resolve({ result: 'success' }) + }, + }) + const publisher = new SqsPermissionPublisher(diContainer.cradle, { + locatorConfig: { queueUrl: consumer1.queueProps.url }, + }) - await Promise.all([consumer1.close(), consumer2.close()]) - }, 10000) // This reduces flakiness in CI + await publisher.publish({ id: '10', messageType: 'remove' }) + // wait for consumer1 to start processing to start second consumer + await waitAndRetry(() => consumer1IsProcessing, 5, 5) + await consumer2.start() + + // wait for consumer1 to process, and consumer2 only when heartbeat is disabled + await waitAndRetry( + () => consumer1Counter > 0 && (heartbeatEnabled || consumer2Counter > 0), + 100, + 40, + ) + + expect(consumer1Counter).toBe(1) + expect(consumer2Counter).toBe(heartbeatEnabled ? 0 : 1) + + await Promise.all([consumer1.close(), consumer2.close()]) + }, + 10000, + ) // This reduces flakiness in CI }) describe('exponential backoff retry', () => { diff --git a/packages/sqs/tsconfig.build.json b/packages/sqs/tsconfig.build.json index 1b3cbf11b..942f7b9e4 100644 --- a/packages/sqs/tsconfig.build.json +++ b/packages/sqs/tsconfig.build.json @@ -1,5 +1,8 @@ { "extends": ["./tsconfig.json", "@lokalise/tsconfig/build-public-lib"], + "compilerOptions": { + "rootDir": "lib" + }, "include": ["lib/**/*"], "exclude": ["lib/**/*.spec.ts", "lib/**/*.test.ts"] } diff --git a/packages/sqs/tsconfig.json b/packages/sqs/tsconfig.json index a6868075f..721796df5 100644 --- a/packages/sqs/tsconfig.json +++ b/packages/sqs/tsconfig.json @@ -2,6 +2,6 @@ "extends": "@lokalise/tsconfig/tsc", "include": ["lib/**/*", "test/**/*", "vitest.config.ts"], "compilerOptions": { - "types": ["vitest/globals"] + "types": ["node", "vitest/globals"] } } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 38f83a8c1..034fb8e57 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -9,27 +9,27 @@ importers: .: devDependencies: turbo: - specifier: ^2.10.7 - version: 2.10.7 + specifier: ^2.10.8 + version: 2.10.8 packages/amqp: dependencies: '@lokalise/node-core': - specifier: ^14.7.4 + specifier: ^14.8.1 version: 14.8.1(zod@4.4.3) '@message-queue-toolkit/schemas': specifier: '>=7.0.0' - version: 7.1.0(zod@4.4.3) + version: 7.2.0(zod@4.4.3) devDependencies: '@biomejs/biome': - specifier: ^2.5.3 - version: 2.5.3 + specifier: ^2.5.6 + version: 2.5.6 '@lokalise/biome-config': - specifier: ^3.1.0 + specifier: ^3.1.1 version: 3.1.1 '@lokalise/tsconfig': - specifier: ^3.0.0 - version: 3.1.0 + specifier: ^5.0.0 + version: 5.0.0 '@message-queue-toolkit/core': specifier: workspace:* version: link:../core @@ -37,8 +37,8 @@ importers: specifier: 0.10.8 version: 0.10.8 '@types/node': - specifier: ^25.5.0 - version: 25.8.0 + specifier: ^26.1.2 + version: 26.1.2 '@vitest/coverage-v8': specifier: ^4.1.10 version: 4.1.10(vitest@4.1.10) @@ -55,19 +55,19 @@ importers: specifier: ^6.1.3 version: 6.1.3 typescript: - specifier: ^5.9.3 - version: 5.9.3 + specifier: ^7.0.2 + version: 7.0.2 vitest: specifier: ^4.1.10 - version: 4.1.10(@opentelemetry/api@1.9.1)(@types/node@25.8.0)(@vitest/coverage-v8@4.1.10)(vite@8.0.13(@types/node@25.8.0)) + version: 4.1.10(@opentelemetry/api@1.9.1)(@types/node@26.1.2)(@vitest/coverage-v8@4.1.10)(vite@8.0.13(@types/node@26.1.2)) zod: - specifier: ^4.1.13 + specifier: ^4.4.3 version: 4.4.3 packages/core: dependencies: '@lokalise/node-core': - specifier: ^14.2.0 + specifier: ^14.8.1 version: 14.8.1(zod@4.4.3) '@lokalise/universal-ts-utils': specifier: ^4.11.0 @@ -92,17 +92,17 @@ importers: version: 3.7.4 devDependencies: '@biomejs/biome': - specifier: ^2.5.3 - version: 2.5.3 + specifier: ^2.5.6 + version: 2.5.6 '@lokalise/biome-config': - specifier: ^3.1.0 + specifier: ^3.1.1 version: 3.1.1 '@lokalise/tsconfig': - specifier: ^3.0.0 - version: 3.1.0 + specifier: ^5.0.0 + version: 5.0.0 '@types/node': - specifier: ^25.0.2 - version: 25.8.0 + specifier: ^26.1.2 + version: 26.1.2 '@types/tmp': specifier: ^0.2.6 version: 0.2.6 @@ -116,16 +116,16 @@ importers: specifier: ^7.0.0 version: 7.0.0(awilix@13.0.5) rimraf: - specifier: ^6.0.1 + specifier: ^6.1.3 version: 6.1.3 typescript: - specifier: ^5.9.2 - version: 5.9.3 + specifier: ^7.0.2 + version: 7.0.2 vitest: specifier: ^4.1.10 - version: 4.1.10(@opentelemetry/api@1.9.1)(@types/node@25.8.0)(@vitest/coverage-v8@4.1.10)(vite@8.0.13(@types/node@25.8.0)) + version: 4.1.10(@opentelemetry/api@1.9.1)(@types/node@26.1.2)(@vitest/coverage-v8@4.1.10)(vite@8.0.13(@types/node@26.1.2)) zod: - specifier: ^4.1.13 + specifier: ^4.4.3 version: 4.4.3 packages/gcp-pubsub: @@ -134,36 +134,36 @@ importers: specifier: ^1.14.4 version: 1.14.4 '@lokalise/node-core': - specifier: ^14.6.1 + specifier: ^14.8.1 version: 14.8.1(zod@4.4.3) devDependencies: '@biomejs/biome': - specifier: ^2.5.3 - version: 2.5.3 + specifier: ^2.5.6 + version: 2.5.6 '@google-cloud/pubsub': specifier: ^5.3.1 - version: 5.3.1 + version: 5.3.1(supports-color@7.2.0) '@lokalise/biome-config': - specifier: ^3.1.0 + specifier: ^3.1.1 version: 3.1.1 '@lokalise/tsconfig': - specifier: ^3.0.0 - version: 3.1.0 + specifier: ^5.0.0 + version: 5.0.0 '@message-queue-toolkit/core': specifier: workspace:* version: link:../core '@message-queue-toolkit/gcs-payload-store': specifier: '*' - version: 1.0.0(@google-cloud/storage@7.21.0)(@message-queue-toolkit/core@packages+core) + version: 1.0.0(@google-cloud/storage@7.21.0(supports-color@7.2.0))(@message-queue-toolkit/core@packages+core) '@message-queue-toolkit/redis-message-deduplication-store': specifier: '*' - version: 2.0.2(@message-queue-toolkit/core@packages+core)(ioredis@5.11.1)(zod@4.4.3) + version: 2.0.2(@message-queue-toolkit/core@packages+core)(ioredis@5.11.1(supports-color@7.2.0))(supports-color@7.2.0)(zod@4.4.3) '@message-queue-toolkit/schemas': specifier: '*' - version: 7.1.0(zod@4.4.3) + version: 7.2.0(zod@4.4.3) '@types/node': - specifier: ^25.0.2 - version: 25.8.0 + specifier: ^26.1.2 + version: 26.1.2 '@vitest/coverage-v8': specifier: ^4.1.10 version: 4.1.10(vitest@4.1.10) @@ -175,52 +175,52 @@ importers: version: 7.0.0(awilix@13.0.5) ioredis: specifier: ^5.11.1 - version: 5.11.1 + version: 5.11.1(supports-color@7.2.0) rimraf: - specifier: ^6.0.1 + specifier: ^6.1.3 version: 6.1.3 typescript: - specifier: ^5.9.3 - version: 5.9.3 + specifier: ^7.0.2 + version: 7.0.2 vitest: specifier: ^4.1.10 - version: 4.1.10(@opentelemetry/api@1.9.1)(@types/node@25.8.0)(@vitest/coverage-v8@4.1.10)(vite@8.0.13(@types/node@25.8.0)) + version: 4.1.10(@opentelemetry/api@1.9.1)(@types/node@26.1.2)(@vitest/coverage-v8@4.1.10)(vite@8.0.13(@types/node@26.1.2)) zod: - specifier: ^4.1.13 + specifier: ^4.4.3 version: 4.4.3 packages/gcs-payload-store: devDependencies: '@biomejs/biome': - specifier: ^2.5.3 - version: 2.5.3 + specifier: ^2.5.6 + version: 2.5.6 '@google-cloud/storage': specifier: ^7.21.0 - version: 7.21.0 + version: 7.21.0(supports-color@7.2.0) '@lokalise/biome-config': - specifier: ^3.1.0 + specifier: ^3.1.1 version: 3.1.1 '@lokalise/tsconfig': - specifier: ^3.0.0 - version: 3.1.0 + specifier: ^5.0.0 + version: 5.0.0 '@message-queue-toolkit/core': specifier: workspace:* version: link:../core '@types/node': - specifier: ^25.0.2 - version: 25.8.0 + specifier: ^26.1.2 + version: 26.1.2 '@vitest/coverage-v8': specifier: ^4.1.10 version: 4.1.10(vitest@4.1.10) rimraf: - specifier: ^6.0.1 + specifier: ^6.1.3 version: 6.1.3 typescript: - specifier: ^5.9.2 - version: 5.9.3 + specifier: ^7.0.2 + version: 7.0.2 vitest: specifier: ^4.1.10 - version: 4.1.10(@opentelemetry/api@1.9.1)(@types/node@25.8.0)(@vitest/coverage-v8@4.1.10)(vite@8.0.13(@types/node@25.8.0)) + version: 4.1.10(@opentelemetry/api@1.9.1)(@types/node@26.1.2)(@vitest/coverage-v8@4.1.10)(vite@8.0.13(@types/node@26.1.2)) packages/kafka: dependencies: @@ -231,27 +231,27 @@ importers: specifier: ^4.11.0 version: 4.11.0 '@platformatic/kafka': - specifier: ^2.8.0 - version: 2.8.0 + specifier: ^2.9.0 + version: 2.9.0(supports-color@7.2.0) devDependencies: '@biomejs/biome': - specifier: ^2.5.3 - version: 2.5.3 + specifier: ^2.5.6 + version: 2.5.6 '@lokalise/biome-config': - specifier: ^3.1.0 + specifier: ^3.1.1 version: 3.1.1 '@lokalise/tsconfig': - specifier: ^3.0.0 - version: 3.1.0 + specifier: ^5.0.0 + version: 5.0.0 '@message-queue-toolkit/core': specifier: workspace:* version: link:../core '@message-queue-toolkit/schemas': - specifier: '>=7.0.0' - version: 7.1.0(zod@4.4.3) + specifier: '>=7.2.0' + version: 7.2.0(zod@4.4.3) '@types/node': - specifier: ^25.0.2 - version: 25.8.0 + specifier: ^26.1.2 + version: 26.1.2 '@vitest/coverage-v8': specifier: ^4.1.10 version: 4.1.10(vitest@4.1.10) @@ -262,22 +262,22 @@ importers: specifier: ^7.0.0 version: 7.0.0(awilix@13.0.5) rimraf: - specifier: ^6.0.1 + specifier: ^6.1.3 version: 6.1.3 typescript: - specifier: ^5.9.2 - version: 5.9.3 + specifier: ^7.0.2 + version: 7.0.2 vitest: specifier: ^4.1.10 - version: 4.1.10(@opentelemetry/api@1.9.1)(@types/node@25.8.0)(@vitest/coverage-v8@4.1.10)(vite@8.0.13(@types/node@25.8.0)) + version: 4.1.10(@opentelemetry/api@1.9.1)(@types/node@26.1.2)(@vitest/coverage-v8@4.1.10)(vite@8.0.13(@types/node@26.1.2)) zod: - specifier: ^4.0.17 + specifier: ^4.4.3 version: 4.4.3 packages/metrics: dependencies: '@lokalise/node-core': - specifier: ^14.2.0 + specifier: ^14.8.1 version: 14.8.1(zod@4.4.3) '@lokalise/universal-ts-utils': specifier: ^4.11.0 @@ -287,14 +287,14 @@ importers: version: 15.1.3 devDependencies: '@biomejs/biome': - specifier: ^2.5.3 - version: 2.5.3 + specifier: ^2.5.6 + version: 2.5.6 '@lokalise/biome-config': - specifier: ^3.1.0 + specifier: ^3.1.1 version: 3.1.1 '@lokalise/tsconfig': - specifier: ^3.0.0 - version: 3.1.0 + specifier: ^5.0.0 + version: 5.0.0 '@message-queue-toolkit/core': specifier: workspace:* version: link:../core @@ -302,36 +302,36 @@ importers: specifier: ^4.1.10 version: 4.1.10(vitest@4.1.10) rimraf: - specifier: ^6.0.1 + specifier: ^6.1.3 version: 6.1.3 typescript: - specifier: ^5.9.3 - version: 5.9.3 + specifier: ^7.0.2 + version: 7.0.2 vitest: specifier: ^4.1.10 - version: 4.1.10(@opentelemetry/api@1.9.1)(@types/node@25.8.0)(@vitest/coverage-v8@4.1.10)(vite@8.0.13(@types/node@25.8.0)) + version: 4.1.10(@opentelemetry/api@1.9.1)(@types/node@26.1.2)(@vitest/coverage-v8@4.1.10)(vite@8.0.13(@types/node@26.1.2)) packages/outbox-core: dependencies: '@lokalise/background-jobs-common': specifier: ^14.4.2 - version: 14.4.2(bullmq@5.76.8)(ioredis@5.11.1)(pino@10.3.1)(toad-scheduler@3.1.0)(zod@4.4.3) + version: 14.4.2(bullmq@5.76.8(supports-color@7.2.0))(ioredis@5.11.1(supports-color@7.2.0))(pino@10.3.1)(supports-color@7.2.0)(toad-scheduler@4.1.0)(zod@4.4.3) '@supercharge/promise-pool': - specifier: ^3.2.0 + specifier: ^3.3.0 version: 3.3.0 uuidv7: - specifier: ^1.0.2 + specifier: ^1.2.1 version: 1.2.1 devDependencies: '@biomejs/biome': - specifier: ^2.5.3 - version: 2.5.3 + specifier: ^2.5.6 + version: 2.5.6 '@lokalise/biome-config': - specifier: ^3.1.0 + specifier: ^3.1.1 version: 3.1.1 '@lokalise/tsconfig': - specifier: ^3.0.0 - version: 3.1.0 + specifier: ^5.0.0 + version: 5.0.0 '@message-queue-toolkit/core': specifier: workspace:* version: link:../core @@ -339,129 +339,129 @@ importers: specifier: workspace:* version: link:../schemas '@types/node': - specifier: ^25.0.2 - version: 25.8.0 + specifier: ^26.1.2 + version: 26.1.2 '@vitest/coverage-v8': specifier: ^4.1.10 version: 4.1.10(vitest@4.1.10) rimraf: - specifier: ^6.0.1 + specifier: ^6.1.3 version: 6.1.3 typescript: - specifier: ^5.9.2 - version: 5.9.3 + specifier: ^7.0.2 + version: 7.0.2 vitest: specifier: ^4.1.10 - version: 4.1.10(@opentelemetry/api@1.9.1)(@types/node@25.8.0)(@vitest/coverage-v8@4.1.10)(vite@8.0.13(@types/node@25.8.0)) + version: 4.1.10(@opentelemetry/api@1.9.1)(@types/node@26.1.2)(@vitest/coverage-v8@4.1.10)(vite@8.0.13(@types/node@26.1.2)) zod: - specifier: ^4.0.17 + specifier: ^4.4.3 version: 4.4.3 packages/redis-message-deduplication-store: dependencies: '@lokalise/node-core': - specifier: ^14.2.0 + specifier: ^14.8.1 version: 14.8.1(zod@4.4.3) ioredis: specifier: ^5.3.2 - version: 5.11.1 + version: 5.11.1(supports-color@7.2.0) redis-semaphore: - specifier: ^5.6.2 - version: 5.7.0(ioredis@5.11.1) + specifier: ^5.7.0 + version: 5.7.0(ioredis@5.11.1(supports-color@7.2.0))(supports-color@7.2.0) devDependencies: '@biomejs/biome': - specifier: ^2.5.3 - version: 2.5.3 + specifier: ^2.5.6 + version: 2.5.6 '@lokalise/biome-config': - specifier: ^3.1.0 + specifier: ^3.1.1 version: 3.1.1 '@lokalise/tsconfig': - specifier: ^3.0.0 - version: 3.1.0 + specifier: ^5.0.0 + version: 5.0.0 '@message-queue-toolkit/core': specifier: workspace:* version: link:../core '@types/node': - specifier: ^25.0.2 - version: 25.8.0 + specifier: ^26.1.2 + version: 26.1.2 '@vitest/coverage-v8': specifier: ^4.1.10 version: 4.1.10(vitest@4.1.10) rimraf: - specifier: ^6.0.1 + specifier: ^6.1.3 version: 6.1.3 typescript: - specifier: ^5.9.2 - version: 5.9.3 + specifier: ^7.0.2 + version: 7.0.2 vitest: specifier: ^4.1.10 - version: 4.1.10(@opentelemetry/api@1.9.1)(@types/node@25.8.0)(@vitest/coverage-v8@4.1.10)(vite@8.0.13(@types/node@25.8.0)) + version: 4.1.10(@opentelemetry/api@1.9.1)(@types/node@26.1.2)(@vitest/coverage-v8@4.1.10)(vite@8.0.13(@types/node@26.1.2)) packages/s3-payload-store: dependencies: '@aws-sdk/client-s3': specifier: ^3.596.0 - version: 3.1048.0 + version: 3.1106.0 devDependencies: '@biomejs/biome': - specifier: ^2.5.3 - version: 2.5.3 + specifier: ^2.5.6 + version: 2.5.6 '@lokalise/biome-config': - specifier: ^3.1.0 + specifier: ^3.1.1 version: 3.1.1 '@lokalise/tsconfig': - specifier: ^3.0.0 - version: 3.1.0 + specifier: ^5.0.0 + version: 5.0.0 '@message-queue-toolkit/core': specifier: workspace:* version: link:../core '@types/node': - specifier: ^25.0.2 - version: 25.8.0 + specifier: ^26.1.2 + version: 26.1.2 '@vitest/coverage-v8': specifier: ^4.1.10 version: 4.1.10(vitest@4.1.10) fauxqs: specifier: ^2.8.0 - version: 2.8.0(typescript@5.9.3) + version: 2.8.0(typescript@7.0.2) rimraf: - specifier: ^6.0.1 + specifier: ^6.1.3 version: 6.1.3 typescript: - specifier: ^5.9.3 - version: 5.9.3 + specifier: ^7.0.2 + version: 7.0.2 vitest: specifier: ^4.1.10 - version: 4.1.10(@opentelemetry/api@1.9.1)(@types/node@25.8.0)(@vitest/coverage-v8@4.1.10)(vite@8.0.13(@types/node@25.8.0)) + version: 4.1.10(@opentelemetry/api@1.9.1)(@types/node@26.1.2)(@vitest/coverage-v8@4.1.10)(vite@8.0.13(@types/node@26.1.2)) packages/schemas: devDependencies: '@biomejs/biome': - specifier: ^2.5.3 - version: 2.5.3 + specifier: ^2.5.6 + version: 2.5.6 '@lokalise/biome-config': - specifier: ^3.1.0 + specifier: ^3.1.1 version: 3.1.1 '@lokalise/tsconfig': - specifier: ^3.0.0 - version: 3.1.0 + specifier: ^5.0.0 + version: 5.0.0 '@types/node': - specifier: ^25.0.2 - version: 25.8.0 + specifier: ^26.1.2 + version: 26.1.2 '@vitest/coverage-v8': specifier: ^4.1.10 version: 4.1.10(vitest@4.1.10) rimraf: - specifier: ^6.0.1 + specifier: ^6.1.3 version: 6.1.3 typescript: - specifier: ^5.9.2 - version: 5.9.3 + specifier: ^7.0.2 + version: 7.0.2 vitest: specifier: ^4.1.10 - version: 4.1.10(@opentelemetry/api@1.9.1)(@types/node@25.8.0)(@vitest/coverage-v8@4.1.10)(vite@8.0.13(@types/node@25.8.0)) + version: 4.1.10(@opentelemetry/api@1.9.1)(@types/node@26.1.2)(@vitest/coverage-v8@4.1.10)(vite@8.0.13(@types/node@26.1.2)) zod: - specifier: ^4.0.17 + specifier: ^4.4.3 version: 4.4.3 packages/sns: @@ -470,33 +470,33 @@ importers: specifier: ^3.632.0 version: 3.1047.0 '@lokalise/node-core': - specifier: ^14.4.2 + specifier: ^14.8.1 version: 14.8.1(zod@4.4.3) '@message-queue-toolkit/schemas': specifier: '>=7.0.0' - version: 7.1.0(zod@4.4.3) + version: 7.2.0(zod@4.4.3) sqs-consumer: specifier: ^15.0.3 - version: 15.0.3(@aws-sdk/client-sqs@3.1098.0) + version: 15.0.3(@aws-sdk/client-sqs@3.1106.0)(supports-color@7.2.0) devDependencies: '@aws-sdk/client-s3': - specifier: ^3.812.0 - version: 3.1048.0 + specifier: ^3.1106.0 + version: 3.1106.0 '@aws-sdk/client-sns': - specifier: ^3.1098.0 - version: 3.1098.0 + specifier: ^3.1106.0 + version: 3.1106.0 '@aws-sdk/client-sqs': - specifier: ^3.1098.0 - version: 3.1098.0 + specifier: ^3.1106.0 + version: 3.1106.0 '@biomejs/biome': - specifier: ^2.5.3 - version: 2.5.3 + specifier: ^2.5.6 + version: 2.5.6 '@lokalise/biome-config': - specifier: ^3.1.0 + specifier: ^3.1.1 version: 3.1.1 '@lokalise/tsconfig': - specifier: ^3.0.0 - version: 3.1.0 + specifier: ^5.0.0 + version: 5.0.0 '@message-queue-toolkit/core': specifier: workspace:* version: link:../core @@ -510,8 +510,8 @@ importers: specifier: workspace:* version: link:../sqs '@types/node': - specifier: ^25.0.2 - version: 25.8.0 + specifier: ^26.1.2 + version: 26.1.2 '@vitest/coverage-v8': specifier: ^4.1.10 version: 4.1.10(vitest@4.1.10) @@ -523,47 +523,47 @@ importers: version: 7.0.0(awilix@13.0.5) fauxqs: specifier: ^2.8.0 - version: 2.8.0(typescript@5.9.3) + version: 2.8.0(typescript@7.0.2) ioredis: specifier: ^5.11.1 - version: 5.11.1 + version: 5.11.1(supports-color@7.2.0) rimraf: - specifier: ^6.0.1 + specifier: ^6.1.3 version: 6.1.3 typescript: - specifier: ^5.9.3 - version: 5.9.3 + specifier: ^7.0.2 + version: 7.0.2 vitest: specifier: ^4.1.10 - version: 4.1.10(@opentelemetry/api@1.9.1)(@types/node@25.8.0)(@vitest/coverage-v8@4.1.10)(vite@8.0.13(@types/node@25.8.0)) + version: 4.1.10(@opentelemetry/api@1.9.1)(@types/node@26.1.2)(@vitest/coverage-v8@4.1.10)(vite@8.0.13(@types/node@26.1.2)) zod: - specifier: ^4.1.13 + specifier: ^4.4.3 version: 4.4.3 packages/sqs: dependencies: '@lokalise/node-core': - specifier: ^14.6.1 + specifier: ^14.8.1 version: 14.8.1(zod@4.4.3) sqs-consumer: specifier: ^15.0.3 - version: 15.0.3(@aws-sdk/client-sqs@3.1098.0) + version: 15.0.3(@aws-sdk/client-sqs@3.1106.0)(supports-color@7.2.0) devDependencies: '@aws-sdk/client-s3': - specifier: ^3.812.0 - version: 3.1048.0 + specifier: ^3.1106.0 + version: 3.1106.0 '@aws-sdk/client-sqs': - specifier: ^3.1098.0 - version: 3.1098.0 + specifier: ^3.1106.0 + version: 3.1106.0 '@biomejs/biome': - specifier: ^2.5.3 - version: 2.5.3 + specifier: ^2.5.6 + version: 2.5.6 '@lokalise/biome-config': - specifier: ^3.1.0 + specifier: ^3.1.1 version: 3.1.1 '@lokalise/tsconfig': - specifier: ^3.0.0 - version: 3.1.0 + specifier: ^5.0.0 + version: 5.0.0 '@message-queue-toolkit/core': specifier: workspace:* version: link:../core @@ -577,8 +577,8 @@ importers: specifier: workspace:* version: link:../schemas '@types/node': - specifier: ^25.0.2 - version: 25.8.0 + specifier: ^26.1.2 + version: 26.1.2 '@vitest/coverage-v8': specifier: ^4.1.10 version: 4.1.10(vitest@4.1.10) @@ -590,35 +590,25 @@ importers: version: 7.0.0(awilix@13.0.5) fauxqs: specifier: ^2.8.0 - version: 2.8.0(typescript@5.9.3) + version: 2.8.0(typescript@7.0.2) ioredis: specifier: ^5.11.1 - version: 5.11.1 + version: 5.11.1(supports-color@7.2.0) rimraf: - specifier: ^6.0.1 + specifier: ^6.1.3 version: 6.1.3 typescript: - specifier: ^5.9.3 - version: 5.9.3 + specifier: ^7.0.2 + version: 7.0.2 vitest: specifier: ^4.1.10 - version: 4.1.10(@opentelemetry/api@1.9.1)(@types/node@25.8.0)(@vitest/coverage-v8@4.1.10)(vite@8.0.13(@types/node@25.8.0)) + version: 4.1.10(@opentelemetry/api@1.9.1)(@types/node@26.1.2)(@vitest/coverage-v8@4.1.10)(vite@8.0.13(@types/node@26.1.2)) zod: - specifier: ^4.1.13 + specifier: ^4.4.3 version: 4.4.3 packages: - '@aws-crypto/crc32@5.2.0': - resolution: {integrity: sha512-nLbCWqQNgUiwwtFsen1AdzAtvuLRsQS8rYgMuxCrdKf9kOssamGLuPwyTY9wyYblNr9+1XM8v6zoDTPPSIeANg==} - engines: {node: '>=16.0.0'} - - '@aws-crypto/crc32c@5.2.0': - resolution: {integrity: sha512-+iWb8qaHLYKrNvGRbiYRHSdKRWhto5XlZUEBwDjYNf+ly5SVYG6zEoYIdxvf5R3zyeP16w4PLBn3rH1xc74Rag==} - - '@aws-crypto/sha1-browser@5.2.0': - resolution: {integrity: sha512-OH6lveCFfcDjX4dbAvCFSYUjJZjDr/3XJ3xHtjn3Oj5b9RjojQo8npoLeA/bNwkOkrSQ0wgrHzXk4tDRxGKJeg==} - '@aws-crypto/sha256-browser@5.2.0': resolution: {integrity: sha512-AXfN/lGotSQwu6HNcEsIASo7kWXZ5HYWvfOmSNKDsEqC4OashTp8alTmaz+F7TC2L083SFv5RdB+qU3Vs1kZqw==} @@ -632,135 +622,66 @@ packages: '@aws-crypto/util@5.2.0': resolution: {integrity: sha512-4RkU9EsI6ZpBve5fseQlGNUWKMa1RLPQ1dnjnQoe07ldfIzcsGb5hC5W0Dm7u423KWzawlrpbjXBrXCEv9zazQ==} - '@aws-sdk/checksums@3.1000.14': - resolution: {integrity: sha512-9j0TSNmYVywV+shhBXXkIhaazZwZ+nDSGfG6V47nFLqXdk6mPYk/OJkV4+uRvIg2Ju5F6HTvgM/sfsuTsbAYwg==} + '@aws-sdk/checksums@3.1000.26': + resolution: {integrity: sha512-CGznePoL+1oWCSzqmkvlYMpWQEZohPR3LntjKXXfVH+oh6Kd8d+yHLkjpiAGwPIHAxFe4OAq3aKfRnv/wqWIyA==} engines: {node: '>=20.0.0'} - '@aws-sdk/client-s3@3.1048.0': - resolution: {integrity: sha512-SrJn5FteqqtcDBgQIvqLKk3Qn/2vSsi5XR03I53EDDR4CbCdLysVSNgUnjVncEECMua9Pz+nxO0/lEx3TP+6mA==} + '@aws-sdk/client-s3@3.1106.0': + resolution: {integrity: sha512-hUTlnyRRGlVdfvJLL3hCEnMm7CmunSzc/lxFVRX8g1fjJTMUVbyQCfhfMhp7dZ7JBftLU6OYresu3Hje4nvkJw==} engines: {node: '>=20.0.0'} - '@aws-sdk/client-s3@3.1081.0': - resolution: {integrity: sha512-mHAdLBibsbFwcW2YHrH5sIQlaXjB3zha7Nkooa2gqTlXxRpVJ+ba/v/mg19B6rJeZmOEteRHFz+INOlAbCbxJg==} + '@aws-sdk/client-sns@3.1106.0': + resolution: {integrity: sha512-kgk43EZy9MDnE4eXJ1L9dqx18zfM8Pa6uU6i4CPOzc17j7usaPR1ZaU1NPpAVC/n5UkLZsA/glgiDLpqHJd58Q==} engines: {node: '>=20.0.0'} - '@aws-sdk/client-sns@3.1081.0': - resolution: {integrity: sha512-3W50Y0WN6XxV6QDtQxbP4oRMxIlWp6/EYkyLjxeeaLAwfTljjX0zPtWXYQaFo4kM/unf6JlePOHZn3flMUn3ZA==} - engines: {node: '>=20.0.0'} - - '@aws-sdk/client-sns@3.1098.0': - resolution: {integrity: sha512-oxKcutqvwbqe+GzelTwLhmBt9rBmxEJ++cb6jc47Hgms1kcvbRHOY46UQL9I4kP0Ijw4lNjppB1I7hBfNRaI4g==} - engines: {node: '>=20.0.0'} - - '@aws-sdk/client-sqs@3.1081.0': - resolution: {integrity: sha512-mfUL0RBECAesJTA8JfXcFUg3ve/E6ztSEsewBC3tfuFR3aFAgXOiIqDUmntzQoLxf5LabdAyXv5Uu6seC0jjYQ==} - engines: {node: '>=20.0.0'} - - '@aws-sdk/client-sqs@3.1098.0': - resolution: {integrity: sha512-tVD3BNkrDG8AL6H6cbd+W6YbsLni+6b70ouAqbdiWQ4EZhdVhyRax55qV4bIpTTWy2iKbOxPgR5JXoo+TKcy0Q==} + '@aws-sdk/client-sqs@3.1106.0': + resolution: {integrity: sha512-U+QW8p+T/4zG11UvsWU/EfNeq/ShiLtv1S+0TFyKxj49fNKBa88ifT/cWbRHr5Mfm/FDmXKwc7YZUZ9+IHBFTg==} engines: {node: '>=20.0.0'} '@aws-sdk/client-sts@3.1047.0': resolution: {integrity: sha512-LLeyHPEYlo16wfteaAkYKZx8BrvF+ZqSkYSWodLmtk8xxCAONLOkeHyAofOswQrSetz3BWiu+sd9WNXEvucoPg==} engines: {node: '>=20.0.0'} - '@aws-sdk/core@3.974.11': - resolution: {integrity: sha512-QpnINq5FZH6EOaDEkmHdT7eUunbvD27pDNQypaWjFyYz7Zl1q3UCMQErBZxpmfGfI7MvI2TlK8KTkgNpv8b1ug==} - engines: {node: '>=20.0.0'} - deprecated: Deprecated due to an error deserialization bug in JSON 1.0 protocol services, see https://github.com/aws/aws-sdk-js-v3/pull/8031. Newer version available. - '@aws-sdk/core@3.977.6': resolution: {integrity: sha512-QiaJV4/zDrB4ZY2mfeSXSzSTc36W16sZXcGz+SPFk0CJ26gziO0cS+4LjJUMAbdeeBOvS0k0Aq1cZpfGdUXxSw==} engines: {node: '>=20.0.0'} - '@aws-sdk/crc64-nvme@3.972.8': - resolution: {integrity: sha512-fVfUCL/Xh2zINYMPZvj+iBn6XWouQf0DAnjaWCI9MkmqXzL2Iy5FoQB8O7syFe6gN6AH1ecDDU58T51Ou0kFkA==} - engines: {node: '>=20.0.0'} - - '@aws-sdk/credential-provider-env@3.972.37': - resolution: {integrity: sha512-/jpPvEh6f7ntmIzf7dNxoNX6Q8vt8UpesCjbW6mFfk4V1NW6bIy9qxcQ6WbA8As5yQhsZOe+xeNd4xHX8kdY2Q==} - engines: {node: '>=20.0.0'} - '@aws-sdk/credential-provider-env@3.972.67': resolution: {integrity: sha512-rcIpk5kxUqDaaNa6Xk23pQ6ViY7jlqzmfFWCahQcBT97ddXaXYYwzCen9Tz1Jvo6aJft6wDl5bN44/Jw5B4oLA==} engines: {node: '>=20.0.0'} - '@aws-sdk/credential-provider-http@3.972.39': - resolution: {integrity: sha512-pIgTpisWyWg7X1bUbzSjuUYosYTD0Ghz2M0hkSTmb3a6i3qV3uU+NYJPI/E2XSC0HcsZh5rsLPzeXrkb2DS0Cg==} - engines: {node: '>=20.0.0'} - '@aws-sdk/credential-provider-http@3.972.69': resolution: {integrity: sha512-nggwJtZ4eeNsUw5IeWBMXsi1ryct5idi0K+/SCRF3kybLubOMaNTb3XCihXpWMiVpyzyPeIrl0zTkzhBH9porA==} engines: {node: '>=20.0.0'} - '@aws-sdk/credential-provider-ini@3.972.41': - resolution: {integrity: sha512-u2tyjaxJJzW8UtW4SM1ZcPMDwO6y+kV+llvou+Adts0FAKyzes5jG4izQN+KX3yE8ZROpS5y1LJ//xL2iSf76w==} - engines: {node: '>=20.0.0'} - '@aws-sdk/credential-provider-ini@3.973.12': resolution: {integrity: sha512-pNEf/OeyN5X3VmLKlgSO6TqaWmW10CvI3TfwL1XhsuhYjSLT2VDaxFnCPHnOeQXSaFisMX4jNhpETriqN8DOmg==} engines: {node: '>=20.0.0'} - '@aws-sdk/credential-provider-login@3.972.41': - resolution: {integrity: sha512-0LBitxXiAiaE5nlFPfpNIww/8FRY/I7WIndWsc9GmNFOM7cE1wNpVNQEGEk9Outg5l8xl+3vybxFyUy4l9q/LQ==} - engines: {node: '>=20.0.0'} - '@aws-sdk/credential-provider-login@3.972.74': resolution: {integrity: sha512-0AQfDcf99TNmqVKv0owHrw/TQs6i4ZE5t9qmz6NvO53bE/sA/tpXhXL9AAcEP1qHc6Zzjd1UMb69+/9zdhvY3g==} engines: {node: '>=20.0.0'} - '@aws-sdk/credential-provider-node@3.972.42': - resolution: {integrity: sha512-D4oon2zbqqsWOJUM99Gm3/ZyJ0IJvTXVN3PyloGb3kQEyI36fjCZheZj422lAgTWWd6TSHgiImLt3RIaLdv3dQ==} - engines: {node: '>=20.0.0'} - '@aws-sdk/credential-provider-node@3.972.78': resolution: {integrity: sha512-OgPAnfvbGAMWac6yvxJ1ihslrvDpPVwR68D2csospdNCCyPvHk9JLzYKwz48SNiS1T2znDwHauywRKRFfpyYng==} engines: {node: '>=20.0.0'} - '@aws-sdk/credential-provider-process@3.972.37': - resolution: {integrity: sha512-7nVaHBUaWIddASYfVaA9O4D5ZVjewU3sCol9WqZPGfW0nR+0WqE0xHZnD/U2L33PlOB8KNXGKZ6wOES/QijKzg==} - engines: {node: '>=20.0.0'} - '@aws-sdk/credential-provider-process@3.972.67': resolution: {integrity: sha512-IlUEejorGTWKb4/Dm7K5Yw4QxUmXLThLhrvBmzVBqZFTbW72cv9LTcITmo1dsnYriALE4h68mOq4LB99x6sQ7Q==} engines: {node: '>=20.0.0'} - '@aws-sdk/credential-provider-sso@3.972.41': - resolution: {integrity: sha512-IOWAWEHe5LkjSKkkUUX9ciV6Y1scHTsnfEkdt5yyC4Slrc7AGbkLPrpntjqh18ksJAMOaVhoBsO8p2WyTcY2wQ==} - engines: {node: '>=20.0.0'} - '@aws-sdk/credential-provider-sso@3.973.11': resolution: {integrity: sha512-gAQBkBZxUB84d71+pPcI9L+jh2ujhuAVxc/4FgGiWFDjkPBlMKxzd5XDtkSXTFX8Ro7ansnT88+XadasxMeCRw==} engines: {node: '>=20.0.0'} - '@aws-sdk/credential-provider-web-identity@3.972.41': - resolution: {integrity: sha512-mbACk9Yypa8nm4iGZLs0PofOXEcTDOUw6wDnsPXNDNSd2WNXs1tSo+6nc/fh0jLYdfVZThhBL98PHW4aXFsG5A==} - engines: {node: '>=20.0.0'} - '@aws-sdk/credential-provider-web-identity@3.972.73': resolution: {integrity: sha512-SnlEmQa6SjOgs6iOPLUQl1Eyq4AKiAdPQlkOhFhqNfDtDCwibMGvL6QlkSmf3o6vAUSImzdPCxowT5dfQUZP1A==} engines: {node: '>=20.0.0'} - '@aws-sdk/middleware-bucket-endpoint@3.972.13': - resolution: {integrity: sha512-JDaukix+kt5KwF7FzNSkfZHpqiPJajVkKJLJexF6z5B44+CN70BXGiQaCEAiCtKtRZNvC16eF3SY9L0bDJPlbA==} - engines: {node: '>=20.0.0'} - - '@aws-sdk/middleware-expect-continue@3.972.12': - resolution: {integrity: sha512-dA5pKTom/Ls9mgeyeaRBNQrRIVOLVjv4AmKOB0/e4yaiXEUy0gSz2d3liP8JHtYoCAEWySU1jWnyzwLOREN+4g==} - engines: {node: '>=20.0.0'} - - '@aws-sdk/middleware-flexible-checksums@3.974.19': - resolution: {integrity: sha512-GLciZVIvWM3C+ffuqnUqlAZwRjQdLt+KXiqr9+aRwZyKVyF2J5lrJAzzSqwweNl9hUWBN00BhilWXdMI5DjNcw==} - engines: {node: '>=20.0.0'} - '@aws-sdk/middleware-host-header@3.972.12': resolution: {integrity: sha512-4QEreU2qPSu19Vsw/eQW8dq5wQEstoyR0nPvguprIa6U/wSA2/fMrisYO4ZZauD8zmYx53SoUodKLipHSi0ZYg==} engines: {node: '>=20.0.0'} - '@aws-sdk/middleware-location-constraint@3.972.10': - resolution: {integrity: sha512-rI3NZvJcEvjoD0+0PI0iUAwlPw2IlSlhyvgBK/3WkKJQE/YiKFedd9dMN2lVacdNxPNhxL/jzQaKQdrGtQagjQ==} - engines: {node: '>=20.0.0'} - '@aws-sdk/middleware-logger@3.972.11': resolution: {integrity: sha512-n/3aCOOnPnxrfh1+z2zWOi0yNC7xLv5nKx2QR4o5xHBjRHAv+vc/5GM8Rnn3Q2p288RSUOy7FhCKfhsZwlaBjg==} engines: {node: '>=20.0.0'} @@ -769,22 +690,14 @@ packages: resolution: {integrity: sha512-QZIpAIa6fDeVgJ8BEG1S6EHGKVul1DM6w6u24041Xl31FvgArh0slURCz5ij3oo0p249yjNHVRTw1GPJa7YUkQ==} engines: {node: '>=20.0.0'} - '@aws-sdk/middleware-sdk-s3@3.972.40': - resolution: {integrity: sha512-vyFY4EsAGySqqd87Z7n4qcCYXJO3QArB8VIJzuupY5XuLHIp579HTZldIUGGABvAOzLptfPb9+lJBJcB+3/cvA==} - engines: {node: '>=20.0.0'} - - '@aws-sdk/middleware-sdk-s3@3.972.60': - resolution: {integrity: sha512-f8SREKL6uQUYt8fwreiUgaAJQ31/M+UkWfJMDY/TBJC5FdHgNzxuvRFeZ9eMbnf2ydQ3p4pcKEhaLk35DDIPxw==} + '@aws-sdk/middleware-sdk-s3@3.972.72': + resolution: {integrity: sha512-lSAoVPvQxX1d8TOM6waKDBQrvvZcm4w6pCldFAsRUffEaXq6lYY0pPyew3KlLu6Xqb74DXI42hGvSsbGBLljlw==} engines: {node: '>=20.0.0'} '@aws-sdk/middleware-sdk-sqs@3.972.39': resolution: {integrity: sha512-dlKLmJg1dLQVfFXUPS+f+SqXrRGHDVumY4gjM8sCLGao+zkDXEu8TObTyiaheKjT20ruok9Xs8oLocNItKQ0fw==} engines: {node: '>=20.0.0'} - '@aws-sdk/middleware-ssec@3.972.10': - resolution: {integrity: sha512-Gli9A0u8EVVb+5bFDGS/QbSVg28w/wpEidg1ggVcSj65BDTdGR6punsOcVjqdiu1i42WHWo51MCvARPIIz9juw==} - engines: {node: '>=20.0.0'} - '@aws-sdk/middleware-user-agent@3.972.41': resolution: {integrity: sha512-HU2IGiA0aLlWgYpDlwnLn5wzyt7vYATi0JAyltrx7DE8AbO4w50E+Qzr2VSJWv4VXzhQYdfwevhHjOUuBTil1g==} engines: {node: '>=20.0.0'} @@ -793,38 +706,18 @@ packages: resolution: {integrity: sha512-RDHqPGQWlF6tatA/Tp3rg6oIwtgN9IVderxE+9av2Y93Dfyu+mO1hZ5Bu2jpfZg2rwdNbsssnwM+sLafIczMlQ==} engines: {node: '>=20.0.0'} - '@aws-sdk/nested-clients@3.997.9': - resolution: {integrity: sha512-jPR3rnmRI4hWYyzfmTGBr7NblMp8QYYeflHXba1H6+7CGrWVqWKQzaXFQ4qbExqPRsXN3T3L3JxFhr6aouXUGQ==} - engines: {node: '>=20.0.0'} - '@aws-sdk/region-config-resolver@3.972.15': resolution: {integrity: sha512-RROpdNPC4L15h4WE0Zlzxd2n5yRd4VaIY/Pgw/+6YNgiGZo61qavXgMG9Zdb+OnPkBnwfpXIguTcEwhSrjEHGw==} engines: {node: '>=20.0.0'} - '@aws-sdk/signature-v4-multi-region@3.996.27': - resolution: {integrity: sha512-0Phbz4t6HI3D3skxvG2uI+VWU034/nSIw1T8d+FPzzQG9EQTrw94o9mOKO2Gv3n3Oc8P7JD7RAUxkoneLWv5Eg==} - engines: {node: '>=20.0.0'} - - '@aws-sdk/signature-v4-multi-region@3.996.38': - resolution: {integrity: sha512-C379Sk+MiFZCfWZphKlMyLHKxV22OjoGM5KJjj5IJNJcOCWL4IGIpnEGzv1FQiRwhYXfq55SJMfxlqPE08JJ9g==} - engines: {node: '>=20.0.0'} - '@aws-sdk/signature-v4-multi-region@3.996.43': resolution: {integrity: sha512-lKekx8bLBXSv4O+cslk9Zfnw2XKSkWBs3uWL5QGhH2ZAQfNS7FE0vcSSN2vD/AhxX54ZTywWxR4STThoeOXlBA==} engines: {node: '>=20.0.0'} - '@aws-sdk/token-providers@3.1048.0': - resolution: {integrity: sha512-k0y/GcuesuSfWyUM0WamrGyeZmltRYaPbHO82UDA6mZ/doB+FOHKutikPAtSXMn/hDz970cF+iRuuiYO9VEbAA==} - engines: {node: '>=20.0.0'} - '@aws-sdk/token-providers@3.1103.0': resolution: {integrity: sha512-N4wy26MNn31ItGVHYHPrEuCIFY4MBBjC+C5v1lJKqIUSA7OZBdhleCY53zCCrXn27hsk7YNOaTuhQu807S4AfQ==} engines: {node: '>=20.0.0'} - '@aws-sdk/types@3.973.8': - resolution: {integrity: sha512-gjlAdtHMbtR9X5iIhVUvbVcy55KnznpC6bkDUWW9z915bi0ckdUr5cjf16Kp6xq0bP5HBD2xzgbL9F9Quv5vUw==} - engines: {node: '>=20.0.0'} - '@aws-sdk/types@3.974.2': resolution: {integrity: sha512-3W6IUtSxFbH6X7Wb7DzGCV5QiFQsd0g8bOfntpmDxQlzBoKWUMBu/JPQR0DwkE+Hpnxd6db1tXbOwdeHddG6cA==} engines: {node: '>=20.0.0'} @@ -833,10 +726,6 @@ packages: resolution: {integrity: sha512-cdmvh+mmVWFKNhqFv/axpjJOYyaCgw+zta93IOv9sXKZPoL1m0XVhSI/Y7MGKLeVHUkG+ULVZy+q5AEAGivSDw==} engines: {node: '>=20.0.0'} - '@aws-sdk/util-locate-window@3.965.5': - resolution: {integrity: sha512-WhlJNNINQB+9qtLtZJcpQdgZw3SCDCpXdUJP7cToGwHbCWCnRckGlc6Bx/OhWwIYFNAn+FIydY8SZ0QmVu3xTQ==} - engines: {node: '>=20.0.0'} - '@aws-sdk/util-locate-window@3.965.8': resolution: {integrity: sha512-uUbMs1cBZPafD0ohUj6EwNf0fPZ534NvBxHox4hjX+0Rxq5paSYUem7+hi833pYrzrcnBATKIYpR02MDXT5M9g==} engines: {node: '>=20.0.0'} @@ -848,18 +737,10 @@ packages: resolution: {integrity: sha512-om8FvUFQPVZECi08zIn6tuVomqbqNIlaMSXShKWWnGxOJ19TofiQtN7ZSlAIy/YvHNBm7oTK9dgT20G3YVH6qQ==} engines: {node: '>=20.0.0'} - '@aws-sdk/xml-builder@3.972.24': - resolution: {integrity: sha512-V8z5YcDPfsvzrBlj0xR1vhRtocblhYbqdreCJB/voGd4Sr5zjNAeWxexbnqVtskTJe0vFb5KMqbSL++ePl+zRw==} - engines: {node: '>=20.0.0'} - '@aws-sdk/xml-builder@3.972.37': resolution: {integrity: sha512-zKq4HQum8JwDyEuyfuI4bbiAcU0KxP6qy+9PR/IsR92IyE/DaBAikzAS50tjxip4bqIIANpCcG+Yyj6CVhXupg==} engines: {node: '>=20.0.0'} - '@aws/lambda-invoke-store@0.2.4': - resolution: {integrity: sha512-iY8yvjE0y651BixKNPgmv1WrQc+GZ142sb0z4gYnChDDY2YqI4P/jsSopBWrKfAt7LOJAkOXt7rC/hms+WclQQ==} - engines: {node: '>=18.0.0'} - '@aws/lambda-invoke-store@0.3.0': resolution: {integrity: sha512-sl4Bm6yiMNYrZKkqqDFWN0UfnWhlS8ivKxrYl+6t0gCLrqr8y3B2IqZZbFRkfaVVp7C/baApyh71P+LeE1A2sQ==} engines: {node: '>=18.0.0'} @@ -885,59 +766,59 @@ packages: resolution: {integrity: sha512-6zABk/ECA/QYSCQ1NGiVwwbQerUCZ+TQbp64Q3AgmfNvurHH0j8TtXa1qbShXA6qqkpAj4V5W8pP6mLe1mcMqA==} engines: {node: '>=18'} - '@biomejs/biome@2.5.3': - resolution: {integrity: sha512-MrJswFdei9EfDwwUy2tQrPDpK0AO+RmMFvBoaaJ6ayBc3sUbHdCE+XG5N8vp+5So41ZupZJQm0roHFFhMGVD7A==} + '@biomejs/biome@2.5.6': + resolution: {integrity: sha512-lxVNjv7UF6KfhMJfL9gaUHbWdJdHbsAj6OSmwSYNdhRuG67NxNQ4Xdvh3TUxsSK9sBzJBQhEJj3AopmmNJ5pSA==} engines: {node: '>=14.21.3'} hasBin: true - '@biomejs/cli-darwin-arm64@2.5.3': - resolution: {integrity: sha512-QhYP9muVQ0nUO5zztFuPbEwi4+94sJWVjaZds9aMi1l/KNZBiUjdiSUrGHsTaMGDXrYl+r4AS2sUKfgH3w+V3g==} + '@biomejs/cli-darwin-arm64@2.5.6': + resolution: {integrity: sha512-zMOLZP4oMrjh6m1zcSj1ud2awUPgTuMVbmQhYYWL7J8HwCnbHHBvTm7VBTRuY7epT5bez76IpKYQ11ZAqHFlnw==} engines: {node: '>=14.21.3'} cpu: [arm64] os: [darwin] - '@biomejs/cli-darwin-x64@2.5.3': - resolution: {integrity: sha512-NC1Ss13UaW7QZX+y8j44bF7AP0jSJdBl6iRhe0MAkvaSqZy+mWg3GaXsrb+eSoHoGDBtaXWEbMVV0iVN2cZ7cQ==} + '@biomejs/cli-darwin-x64@2.5.6': + resolution: {integrity: sha512-JAC1VqzvO7Th5ZplU0G2uGfkZbxEe9uDDektPAhF0JLusoz1w+T4okp2bkykI0bbaO2vslKiRfj4gU43JaGreA==} engines: {node: '>=14.21.3'} cpu: [x64] os: [darwin] - '@biomejs/cli-linux-arm64-musl@2.5.3': - resolution: {integrity: sha512-fccix0w6xp6csCXgxeC0dU/3ecgRQal0y+cv2SP9ajNlhe7Yrk2Ug7UDe2j9AT9ZDYitkXpvUKgZjjuoYeP4Vg==} + '@biomejs/cli-linux-arm64-musl@2.5.6': + resolution: {integrity: sha512-eUa3jeeYvfMt19LBeh6E5PUZpxnTC4JqNWo+EDjTtQjAr2xLGnWaxACtVU1DQqmHYbvThlJzLX+ZsYgrqh2qVw==} engines: {node: '>=14.21.3'} cpu: [arm64] os: [linux] libc: [musl] - '@biomejs/cli-linux-arm64@2.5.3': - resolution: {integrity: sha512-ksx1KWeyYW18ILL04msF/J4ZBtBDN33znYK8Z/aNv/vlBVxL9/g3mGP+omgHJKy4+KWbK87vcmmpmurfNjSgiA==} + '@biomejs/cli-linux-arm64@2.5.6': + resolution: {integrity: sha512-6XsYwCFkp5sMxl85ffhgeGpGgs6A7dRYFnkceZ7WVxvycuTnGdD5xa534Z3xfrBQ0JCMK/mujT6ZNPJoghedwg==} engines: {node: '>=14.21.3'} cpu: [arm64] os: [linux] libc: [glibc] - '@biomejs/cli-linux-x64-musl@2.5.3': - resolution: {integrity: sha512-O/yU9YKRUiHhmcjF2f38PSjseVk3G4VLWYc0G2HWpzdBVREV6G8IGWIVEFf7MFPfWIzNUIvPsEjeAZQIOgnLcQ==} + '@biomejs/cli-linux-x64-musl@2.5.6': + resolution: {integrity: sha512-2Vp13QdKysH3HIWLaYLhUUwbK+jbZonJD1K+Lr0d0RO4wH7mkYd43vJixEDm8cUWrowoRz4UUHF1nm9Ae7ym8A==} engines: {node: '>=14.21.3'} cpu: [x64] os: [linux] libc: [musl] - '@biomejs/cli-linux-x64@2.5.3': - resolution: {integrity: sha512-yMkJtilsgvILDcVkh187aVLTb64xYsrxYajx5kym+r1ULkO5HUOfu9AYKLGQbOVLwJtT2utNw7hhFNg+17mUYA==} + '@biomejs/cli-linux-x64@2.5.6': + resolution: {integrity: sha512-Pop9VXCFUhFTMfFefZ39S+u2rOPyNp5iHlxbZRwXGACHLy2r0jjiRgJHmaEKJzL3SyxlVeGShXhvvElvWowonA==} engines: {node: '>=14.21.3'} cpu: [x64] os: [linux] libc: [glibc] - '@biomejs/cli-win32-arm64@2.5.3': - resolution: {integrity: sha512-cX5z+GYwRcqEok0AH3KSfQGgqYd0Nomfp6Fbe1uiTtELE38hdH2k842wQ9wLNaF/JJ7r4rjJQ4VR+ce+fRmQbw==} + '@biomejs/cli-win32-arm64@2.5.6': + resolution: {integrity: sha512-tDGshcm6BdkZOCGnTDX0Y8/U4IfBSlnUU7T56nNDuPEfed+aHg+u8G36NB43fJVl0Os6+QURXIE1yuD7AaEofA==} engines: {node: '>=14.21.3'} cpu: [arm64] os: [win32] - '@biomejs/cli-win32-x64@2.5.3': - resolution: {integrity: sha512-ExSaJWi4/u6+GXCszlSKpWSjKNbDseAYqqkCznsCsZ/4uidZ/BEqsCc5/3ctlq6dfIubdIIRSVLC/PG9xPl70Q==} + '@biomejs/cli-win32-x64@2.5.6': + resolution: {integrity: sha512-WN05KwXnTO/2J45RQPvzZMXf7tZUIofHoR35xIPfCo7pQ2RFidxI8sfb5mGsaTxdMmEOzHzOPRCdA5/fCpc7xQ==} engines: {node: '>=14.21.3'} cpu: [x64] os: [win32] @@ -1069,8 +950,8 @@ packages: peerDependencies: zod: '>=3.25.76 <5.0.0' - '@lokalise/tsconfig@3.1.0': - resolution: {integrity: sha512-ynvdBlAYEV77EpBImC0XHnTgkwX8eQhYbGmz6NimlIBkF9SHaVKEuK58dyV4ADxxhXyYEPmnDzAqlDB9IAEf1w==} + '@lokalise/tsconfig@5.0.0': + resolution: {integrity: sha512-nAE106uzG1+6ldEdmbFVIwkFTszkOFIxzCPaZhwqoChcXizvcCPuPGTE+PrlPiE6GhfAzlspLvmVwvzdaNimdw==} '@lokalise/universal-ts-utils@4.11.0': resolution: {integrity: sha512-VcZ1jFOAGOT7lAbi6hbQVadreWwa8KXai12H7CSbmU8UqREGgu0Q2RmLFoA+FYTSHkDK8lRZN/sO9YdjpOBbfg==} @@ -1087,11 +968,6 @@ packages: '@message-queue-toolkit/core': '>=23.1.0' ioredis: ^5.3.2 - '@message-queue-toolkit/schemas@7.1.0': - resolution: {integrity: sha512-JAzSQAHouympK/cEDBxsfEuS2Ifu1pv0a/NRvhNWfFlgW0TmsWT7SkYNERA7x89OK7PGk9PyDN88cV9l0gZ22Q==} - peerDependencies: - zod: '>=3.25.76 <5.0.0' - '@message-queue-toolkit/schemas@7.2.0': resolution: {integrity: sha512-iuPbSeO1wm26tHPd5jIAmtllxVPRoMHHQbrqhsF5TpOfvDegXQ14lw/L5W2U7dWIYE+ErOvMWKTQAxdFZmza3A==} peerDependencies: @@ -1130,15 +1006,12 @@ packages: '@napi-rs/wasm-runtime@0.2.12': resolution: {integrity: sha512-ZVWUcfwY4E/yPitQJl481FjFo3K22D6qF0DuFH6Y/nbnE11GY5uguDxZMGXPQ8WQ0128MXQD7TnfHyK4oWoIJQ==} - '@napi-rs/wasm-runtime@1.2.2': - resolution: {integrity: sha512-JfB4kuJQjaoHuCTseIINHtHWeJnvgEcxjwA5t/Y00ZgaOO1Crz3fjT/p8kT28zA/Caz7oiUMn3d6H2yOVCVwuw==} + '@napi-rs/wasm-runtime@1.2.0': + resolution: {integrity: sha512-kDoONqMa+VnZ4vvvu/ZUurpJ4gkZU57e7g69qpNgWhYcZFPUHZM2CEMKm+cG6ufDVALbjMvfmMjFVqaK7uEMnA==} engines: {node: ^20.19.0 || ^22.13.0 || >=23.5.0} peerDependencies: - '@emnapi/core': ^1.7.1 || ^2.0.0-alpha.3 - '@emnapi/runtime': ^1.7.1 || ^2.0.0-alpha.3 - - '@nodable/entities@2.1.0': - resolution: {integrity: sha512-nyT7T3nbMyBI/lvr6L5TyWbFJAI9FTgVRakNoBqCD+PmID8DzFrrNdLLtHMwMszOtqZa8PAOV24ZqDnQrhQINA==} + '@emnapi/core': ^2.0.0-alpha.3 + '@emnapi/runtime': ^2.0.0-alpha.3 '@nodable/entities@2.2.0': resolution: {integrity: sha512-9uGyhaQavEUMC8AIddIjau4NsnsXhou+j5sBAGojCM1oxmQpVKTWR/9JxABD6UAv12vpIms55fPZKFQEhG6uBg==} @@ -1278,8 +1151,8 @@ packages: resolution: {integrity: sha512-xQD5JSkQc4D15suOk7FezGDmh6Vb5e4phDoFZ/ASpa3Ft+3fOVwFOENmHtC1561zm/xHnKwI91NbMF8inpbk0Q==} engines: {node: '>= 22.19.0'} - '@platformatic/kafka@2.8.0': - resolution: {integrity: sha512-TChH6PX0cmTfsXbY94Smcbtji8sQGpdClR77z+SaqR1GEvhnF56zwxzRheUfJ2v7Md0GAUC4PUFLSg6cfICyPw==} + '@platformatic/kafka@2.9.0': + resolution: {integrity: sha512-sVX2aww2RE5fA5AFJ4Bl4DQ3mZAqBnm5kDx2nd54N2hMee+kVNR0KXOmTQ7cmeufp6Kqn1XukZ6XqA7tJoKztg==} engines: {node: '>= 22.22.0 || >= 24.6.0'} '@platformatic/wasm-utils@0.2.1': @@ -1304,9 +1177,6 @@ packages: '@protobufjs/float@1.0.2': resolution: {integrity: sha512-Ddb+kVXlXst9d+R9PfTIxh1EdNkgoRe5tOX6t01f1lYWOvJnSPDBlG241QLzcyPdoNTsblLUdujGSE4RzrTZGQ==} - '@protobufjs/inquire@1.1.2': - resolution: {integrity: sha512-pa0vFRuws4wkvaXKK1uXZMAwAX4/t8ANaJo45iw/oQHNQ9q5xUzwgFmVJGXiga2BeN+zpX7Vf9vmsiIa2J+MUw==} - '@protobufjs/path@1.1.2': resolution: {integrity: sha512-6JOcJ5Tm08dOHAbdR3GrvP+yUUfkjG5ePsHYczMFLq3ZmMkAD98cDgcT2iA1lJ9NVwFd4tH/iSSoe44YWkltEA==} @@ -1414,26 +1284,14 @@ packages: '@rolldown/pluginutils@1.0.1': resolution: {integrity: sha512-2j9bGt5Jh8hj+vPtgzPtl72j0yRxHAyumoo6TNfAjsLB04UtpSvPbPcDcBMxz7n+9CYB0c1GxQFxYRg2jimqGw==} - '@smithy/core@3.24.3': - resolution: {integrity: sha512-Ep/7tPamGY8mgESE3LyLKtxJyy6U52WWAqr/3wial47Sj4u3PiIF73AOGI27UyLy9duTkhZbgzodOfLV4TduZg==} - engines: {node: '>=18.0.0'} - '@smithy/core@3.31.1': resolution: {integrity: sha512-CyogUINxvi7C7LDsh8Syo6hVJOT9ckz4rG8dRZfTJ8r91HkMY59PnNooaj7WcHyxEkxPfBAmbgztZU+xTo76lg==} engines: {node: '>=18.0.0'} - '@smithy/credential-provider-imds@4.3.3': - resolution: {integrity: sha512-I2Bti0DKFo2IJyN28ijCsx51BAumEYR4/1yZ1FXyBygy9MqbnMqCev4JPth/MbpRfBSRAX35hITSnAdJRo1u5w==} - engines: {node: '>=18.0.0'} - '@smithy/credential-provider-imds@4.4.16': resolution: {integrity: sha512-QfuLWAkLzptffFW980AFeHZFdqds2B64rpEd3uJ6lgs3xVn9QegGMUgUcj+4d7dRrAsya3r58ZKpku97WcFb4w==} engines: {node: '>=18.0.0'} - '@smithy/fetch-http-handler@5.4.3': - resolution: {integrity: sha512-F+DRf8IJazRJgYog2A/yJK7eYVc0rqTlRzO+5ZxjJd4WkZoKz0IJRncf7G6t1pdVT3kryJcwuTFhN1c5m6N47A==} - engines: {node: '>=18.0.0'} - '@smithy/fetch-http-handler@5.6.13': resolution: {integrity: sha512-4fW86pEUOMbrD5nkbyl/tTvPHHWJFbuB2odl6ps9lWfHoXf9HWh3Q/Smh59qH1g7+c/BSZghX6bbUk4gsiMs8A==} engines: {node: '>=18.0.0'} @@ -1442,30 +1300,14 @@ packages: resolution: {integrity: sha512-GGP3O9QFD24uGeAXYUjwSTXARoqpZykHadOmA8G5vfJPK0/DC67qa//0qvqrJzL1xc8WQWX7/yc7fwudjPHPhA==} engines: {node: '>=14.0.0'} - '@smithy/node-http-handler@4.7.3': - resolution: {integrity: sha512-/jPhevcTFPMVl6KNjbaI47iOg1zxC7IsnX4PQDGVZKMFceOXtB8IEYaB7a9VvkP/3oC60WzTeKocvSI7vLT0vA==} - engines: {node: '>=18.0.0'} - '@smithy/node-http-handler@4.9.13': resolution: {integrity: sha512-Nmd/Nl35zfYrd+a6OO2cDJb3GPh9bgTjIUhcM+JFfjpp8/osCgboDV5nCT1I01Pv6R13eSKDKLSoVa5ZB6Zsfw==} engines: {node: '>=18.0.0'} - '@smithy/node-http-handler@4.9.3': - resolution: {integrity: sha512-qZTa4gQFUo8RM02rk6q5UVTDLNrQ1oS20LsepBzqq1QBVc/EHJ03OOUADcqMZiXHArW+Y7+OGY0BpdTwZRq/Yg==} - engines: {node: '>=18.0.0'} - - '@smithy/signature-v4@5.4.3': - resolution: {integrity: sha512-53+75QuPl6DL+ct6vVEB51FDO5oulXr20TPV46VvJZg76lIlXNWfxi8j+G2V/t0I2qxCBOa3vX/8bmjrpFVo9g==} - engines: {node: '>=18.0.0'} - '@smithy/signature-v4@5.6.12': resolution: {integrity: sha512-I6KLtq3H0qqSuV9vLglfi8puHqzygzWHOnI4z/Rdoo+q50vvo18vBRdPAvvEtcaKROz7Zn6qnPa14kRfPH6PcQ==} engines: {node: '>=18.0.0'} - '@smithy/types@4.14.2': - resolution: {integrity: sha512-P+otAxbV4CqBybp7EkcJCrig63yE2E7PuNVOmilVMRcx/O+QDzGULTrKsq4DV13gSfak9ObPrWaHl/9bL5YcWw==} - engines: {node: '>=18.0.0'} - '@smithy/types@4.16.1': resolution: {integrity: sha512-0JFs3V2y2M9tKW5na/qxe69Zv+uxLMO7QBbhxF/FHu/Gp2NFZAAL9tWl9PU02xxo07pb3G9FTyjNc6D5uZrJIg==} engines: {node: '>=18.0.0'} @@ -1489,33 +1331,33 @@ packages: resolution: {integrity: sha512-HqmEUIGRJ5fSXchkVgR5F7qn48bDBzv0kWj/Kfu5e6uci4UlEeng4331LnBkWffb++Ei3FOVLxo8JJWMFBDMeQ==} engines: {node: '>= 10'} - '@turbo/darwin-64@2.10.7': - resolution: {integrity: sha512-/c9cSBRermWDv85oufLhoH6XRLOVbvzJLRd+WLyfJCP+i0HFLQj4PVNDrHcY17/ve5l8X0Oua4bJBqJUgJPnZA==} + '@turbo/darwin-64@2.10.8': + resolution: {integrity: sha512-po+7rfJfUnFXjWlcoN2RwhErgzCdRtBc1T26vYPcywHlggmCQiQe1uWaE4j+BibI2uY9/2pDoFzMN0rmSaPFOw==} cpu: [x64] os: [darwin] - '@turbo/darwin-arm64@2.10.7': - resolution: {integrity: sha512-8lpCCGWZBl9PIF8w8f2iEWrLMbHBWIfJeV6l2UEGqysD6HRIM4ySj/8R7HGEzbECJ4r/gnJcHmxEoG8yjFe64A==} + '@turbo/darwin-arm64@2.10.8': + resolution: {integrity: sha512-+zB2btDJ00lnPRuqOvpVvgl4x34k/djZQGZTTCfjn7JgNCl8QFY5Njo5+dqkY1g/+9gbbsnAvWm9CmJg9ebcXA==} cpu: [arm64] os: [darwin] - '@turbo/linux-64@2.10.7': - resolution: {integrity: sha512-Midw9Ed00yw9rqkWN82fY3LmLNFQ6yiL1GXB56DJKUEjWaEd27zh7ohCxzzrjfjQVrEeVWd3UPytTAV16XDQlA==} + '@turbo/linux-64@2.10.8': + resolution: {integrity: sha512-K1dxqiVisyN7cViVsfQLs6xscQbYuI8aO2nbUhFURDACgEDfZRdP/b4CCxeosBJpcMfhYyiibWqJorCnvz9kKg==} cpu: [x64] - os: [linux] + os: [android, linux] - '@turbo/linux-arm64@2.10.7': - resolution: {integrity: sha512-UVEy+MW/xn4BcsiV3v3uv0/oObyaQgVtRT+Jj4WE53rNH05VEYEc1Z13q3zV6276wCZR4Yxc4hiTTcjw7PjSpg==} + '@turbo/linux-arm64@2.10.8': + resolution: {integrity: sha512-Gi77ibVnrE1fEmvr+/wBD/yvRqhwp/RQuCp2+//lv1U1wNFFyVg0V7Wj8FG9FXPFAw5QHReo8rxc9+wBSDZjzA==} cpu: [arm64] - os: [linux] + os: [android, linux] - '@turbo/windows-64@2.10.7': - resolution: {integrity: sha512-l2nH9KGLV46SWjcXvyc2+xo5gdf5J0NVADknQk9OCJhzJBpiNl/byd26yIfwZBjLupdqT6UOdPhPxcpUPxRykQ==} + '@turbo/windows-64@2.10.8': + resolution: {integrity: sha512-znnLO1haJPYTHoKMKwlAvlkjRiYbbhBzME6wIGaMd+fwir23U6jVd1ecaTWWi1fbnRVqxMfgDBKseQ/hLKb83g==} cpu: [x64] os: [win32] - '@turbo/windows-arm64@2.10.7': - resolution: {integrity: sha512-qjE1apG6RThuX49vUJd5ks2dV2ndXC2qktDChQonFMvUzrMrEnZMQzO+IgxBiYq1j+NbXQcRwj84nGnk1TBw1g==} + '@turbo/windows-arm64@2.10.8': + resolution: {integrity: sha512-VN30vh3b3Czh2WzYHNTfF1FE0YMZ5aHsLO8dBMGHJewA6792wX6iJR8ZxlzFW6WdOu0gEAKIvlYhfyT81Wkm4Q==} cpu: [arm64] os: [win32] @@ -1537,8 +1379,8 @@ packages: '@types/estree@1.0.9': resolution: {integrity: sha512-GhdPgy1el4/ImP05X05Uw4cw2/M93BCUmnEvWZNStlCzEKME4Fkk+YpoA5OiHNQmoS7Cafb8Xa3Pya8m1Qrzeg==} - '@types/node@25.8.0': - resolution: {integrity: sha512-TCFSk8IZh+iLX1xtksoBVtdmgL+1IX0fC9BeU4QqFSuNdN/K+HUlhqOzEmSYYpZUVsLYcPqc9KX+60iDuninSQ==} + '@types/node@26.1.2': + resolution: {integrity: sha512-Vu4a5UFA9rIIFJ7rB/Vaafh9lrCQszopTCx6KjFboXTGQbPNasehVR5TEiithSDGyd1DEiUByggTZsg8jukeIg==} '@types/request@2.48.13': resolution: {integrity: sha512-FGJ6udDNUCjd19pp0Q3iTiDkwhYup7J8hpMW9c4k53NrccQFFWKRho6hvtPPEhnXWKvukfwAlB6DbDz4yhH5Gg==} @@ -1549,6 +1391,126 @@ packages: '@types/tough-cookie@4.0.5': resolution: {integrity: sha512-/Ad8+nIOV7Rl++6f1BdKxFSMgmoqEoYbHRpPcx3JEfv8VRsQe9Z4mCXeJBzxs7mbHY/XOZZuXlRNfhpVPbs6ZA==} + '@typescript/typescript-aix-ppc64@7.0.2': + resolution: {integrity: sha512-MTKKkWB7p/0E9xi1d1tHtZ5PiLkGEMIq88pK2CubZjOsLtYTLqhgIgi6zepFa+9GHZ6h05NMCkQxGKiPXMxXtQ==} + engines: {node: '>=16.20.0'} + cpu: [ppc64] + os: [aix] + + '@typescript/typescript-darwin-arm64@7.0.2': + resolution: {integrity: sha512-gowzar9MwS/aRWp6f3a4KUqzRjAZjOsmGNCM6LcTgXum+dBfgsBVMN+AgvOCCbguXyick6LJhpBszxMebJ8syA==} + engines: {node: '>=16.20.0'} + cpu: [arm64] + os: [darwin] + + '@typescript/typescript-darwin-x64@7.0.2': + resolution: {integrity: sha512-SZ9xZInqApNlNGc9s0W1VSsktYSOe9cFqNOIqmN1Gs8SmkjKZYFt017G4VwPxASInODuAdbTW7sXiFUf893RgA==} + engines: {node: '>=16.20.0'} + cpu: [x64] + os: [darwin] + + '@typescript/typescript-freebsd-arm64@7.0.2': + resolution: {integrity: sha512-W5NH4y/J0plIIS5b2xvTEkU7JFxyqdMAOgf+Ilhl0vHQXKO5dZoxd+C/jEtq56c4F3wk71RB4BMRQ2XdI+bwYQ==} + engines: {node: '>=16.20.0'} + cpu: [arm64] + os: [freebsd] + + '@typescript/typescript-freebsd-x64@7.0.2': + resolution: {integrity: sha512-UMGDx5sTpzNw3WiPebH7l90IWfJggEd+egHt/q6p7/Cm3zqoV7VxkGXt+3DxPIw8CcmvAB0j3sVVfbhX+M4Tpw==} + engines: {node: '>=16.20.0'} + cpu: [x64] + os: [freebsd] + + '@typescript/typescript-linux-arm64@7.0.2': + resolution: {integrity: sha512-Qh4eU4/y3yDjnfjjyPYihMj5/ODIlmt+Bzu17OI+fiSRDW57QmU5SiN63exPRNJPKUzcc1INa1NXdrJ+MqHjUQ==} + engines: {node: '>=16.20.0'} + cpu: [arm64] + os: [linux] + + '@typescript/typescript-linux-arm@7.0.2': + resolution: {integrity: sha512-gffT3xPz9sR7j/YJExkyPntrI0P2EP9XbOyWzth2/Gs0RstK+90RBcO0ncXoXy/beYll1SXw846Nf2zdnEz0QQ==} + engines: {node: '>=16.20.0'} + cpu: [arm] + os: [linux] + + '@typescript/typescript-linux-loong64@7.0.2': + resolution: {integrity: sha512-uEHck9i8hoAzXPiYRib1O7miOnz23SxIeVl6F4LXox+qov1K35jHcEW6VHKvZI+pyvl7fZEP4MCU5LYvIq1GuQ==} + engines: {node: '>=16.20.0'} + cpu: [loong64] + os: [linux] + + '@typescript/typescript-linux-mips64el@7.0.2': + resolution: {integrity: sha512-R4KvAMnE43W5Qeqb0Ly56O3mWMWIAgsMyz36DCaycd5nbg/9kzm0liw3JocfRqyJY0KPmzFjbswozXyW0DnIYA==} + engines: {node: '>=16.20.0'} + cpu: [mips64el] + os: [linux] + + '@typescript/typescript-linux-ppc64@7.0.2': + resolution: {integrity: sha512-DORx5b3sd/4S7eayxm4FQv+A7CrkUIGRaHiwI8oiHTAI1fAPWhF4J0vAlkC8biAlHSVVwxMQ3tjZ2/DVbnQiiA==} + engines: {node: '>=16.20.0'} + cpu: [ppc64] + os: [linux] + + '@typescript/typescript-linux-riscv64@7.0.2': + resolution: {integrity: sha512-wf0jqEDOjrPRnKwYRyyJDRo11KMbvMFrU+q4zqKyChODBzvlkbhNQfKvLxQCcwTpdDaXSHZTVuh0JoCrKCUMHQ==} + engines: {node: '>=16.20.0'} + cpu: [riscv64] + os: [linux] + + '@typescript/typescript-linux-s390x@7.0.2': + resolution: {integrity: sha512-IkwJc3L7yhytWd/ewjyxNDfOmswCm9GWMJT/ue/dU4aZNbwZeYAetq42VyLmsmSjvoX7z74X6ZaYCtzAr0EuGw==} + engines: {node: '>=16.20.0'} + cpu: [s390x] + os: [linux] + + '@typescript/typescript-linux-x64@7.0.2': + resolution: {integrity: sha512-EYdf2cNg7rgCWJnxCdJ+F3V39O8ihb37eHAu1LK8oAFizgTQbPOK7zHHXbPt8rX24COqODXeI3sIf0fCXG7H/A==} + engines: {node: '>=16.20.0'} + cpu: [x64] + os: [linux] + + '@typescript/typescript-netbsd-arm64@7.0.2': + resolution: {integrity: sha512-+polYF4MF04aPpO5FTkHran9yUQDSXqy5GiSDKpsll5jy3l3+g9QLhpf39T+ePtefhXLOGrLl0QIjkQP6VnelA==} + engines: {node: '>=16.20.0'} + cpu: [arm64] + os: [netbsd] + + '@typescript/typescript-netbsd-x64@7.0.2': + resolution: {integrity: sha512-8YIT0EHM/3dq10ZOVF/A7pc/YSMtbcecct4rWtexrnSCHOPcpC2KTLXfTCR6vDpnSiY12heNb1GiN/wu+T/FyA==} + engines: {node: '>=16.20.0'} + cpu: [x64] + os: [netbsd] + + '@typescript/typescript-openbsd-arm64@7.0.2': + resolution: {integrity: sha512-APT8+ClYnuYm1u9+kgGXoMj2VzWzcymwh2gNSQVySHfkRDGOTVkoWLjCmOQSaO+PoqQ57B0flRp9SA+7GnnkzQ==} + engines: {node: '>=16.20.0'} + cpu: [arm64] + os: [openbsd] + + '@typescript/typescript-openbsd-x64@7.0.2': + resolution: {integrity: sha512-yX7s+Q0Dln0Dt9tEzZsAjXXR/+ytBM7AlglaqyeMPxQszJ1JhlJdZ6jLA+IzldHtflX81em7lDao1xXu+aRRkg==} + engines: {node: '>=16.20.0'} + cpu: [x64] + os: [openbsd] + + '@typescript/typescript-sunos-x64@7.0.2': + resolution: {integrity: sha512-dLJDGaLZ1D4HPQn62u1n8mBDkJREwMsAkCdkwd4Ieqw+x3TUyTsqY0YiBCtE6H6OzzgGk3iuZ3vFWRS+E8/d1g==} + engines: {node: '>=16.20.0'} + cpu: [x64] + os: [sunos] + + '@typescript/typescript-win32-arm64@7.0.2': + resolution: {integrity: sha512-Gyl1Vy6OsWesLzmq+EP0Fb7b4Nid5232AvcA2SFcdYreldpNtYFFofPjnt62y9hQy7VTaZp65ICJjuAQRaVcIQ==} + engines: {node: '>=16.20.0'} + cpu: [arm64] + os: [win32] + + '@typescript/typescript-win32-x64@7.0.2': + resolution: {integrity: sha512-0BQ3HkAHHlKLSp1qRvf3SUhGpGsDuhB/jgFw75guyqbxJqEaS0Cw/VFO8i2nHglJUzQCRtMMR/IBAKE3ETMC4g==} + engines: {node: '>=16.20.0'} + cpu: [x64] + os: [win32] + '@vitest/coverage-v8@4.1.10': resolution: {integrity: sha512-IM49HmthevbgAO4anp1hwtoT9wYe59w0LR00gr+eagHE+ZJ5lK4sLPeO0ubgoJcwLk6dehU3R24N+FbEEKDc8g==} peerDependencies: @@ -1765,8 +1727,8 @@ packages: engines: {node: '>=12.0.0'} deprecated: v4 is no longer maintained, upgrade to v5 - croner@8.1.2: - resolution: {integrity: sha512-ypfPFcAXHuAZRCzo3vJL6ltENzniTjwe/qsLleH1V2/7SRDjgvRQyrLmumFTLmjFax4IuSxfGXEn79fozXcJog==} + croner@10.0.1: + resolution: {integrity: sha512-ixNtAJndqh173VQ4KodSdJEI6nuioBWI0V1ITNKhZZsO0pEMoDxz539T4FTTbSZ/xIOSuDnzxLVRqBVSvPNE2g==} engines: {node: '>=18.0'} cross-spawn@7.0.6: @@ -1904,10 +1866,6 @@ packages: fast-xml-builder@1.2.0: resolution: {integrity: sha512-00aAWieqff+ZJhsXA4g1g7M8k+7AYoMUUHF+/zFb5U6Uv/P0Vl4QZo84/IcufzYalLuEj9928bXN9PbbFzMF0Q==} - fast-xml-parser@5.7.3: - resolution: {integrity: sha512-C0AaNuC+mscy6vrAQKAc/rMq+zAPHodfHGZu4sGVehvAQt/JLG1O5zEcYcXSY5zSqr4YVgxsB+pHXTq0i7eDlg==} - hasBin: true - fast-xml-parser@5.9.3: resolution: {integrity: sha512-brCNCeScma/kqa54J4PIDriSSSLssRkuYaUCpvHJulGc3HGI/xxKUCTDcYkAdqJsyb//ydpbxecjC3hB9+tb/g==} hasBin: true @@ -2359,8 +2317,8 @@ packages: msgpackr@2.0.1: resolution: {integrity: sha512-9J+tqTEsbHqY8YohazYgty7LgerFIWxvMLpUjqETSmjHojtJm2WnX2kK/2a1fLI7CO7ERP1YSEUXMucz4j+yBA==} - nanoid@3.3.17: - resolution: {integrity: sha512-xQLf0A3HOMlgHq0n247/LRuAOYmB7dXJ/DvAxGvsSBij45XtBSmQycu+F8ODbHwns/XyFZagyL1+J0Offw1E0g==} + nanoid@3.3.16: + resolution: {integrity: sha512-bzlKTyNJ7+LdGIIwy8ijFpIqEQIvafahV7eYykJ8Cvh42EdJeODoJ6gUJXpQJvej1BddH8OqTXZNE/KfbWAu8Q==} engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} hasBin: true @@ -2462,8 +2420,8 @@ packages: resolution: {integrity: sha512-r34yH/GlQpKZbU1BvFFqOjhISRo1MNx1tWYsYvmj6KIRHSPMT2+yHOEb1SG6NMvRoHRF0a07kCOox/9yakl1vg==} hasBin: true - postcss@8.5.25: - resolution: {integrity: sha512-DTPx3RWSSnWyzLxQnlH0rJP+EW5ekl16ZU4/psbIhA0e53kJfdgaN5vKM+xP7yJtXVu+nfdVFmlgFDEKAe4Pyw==} + postcss@8.5.24: + resolution: {integrity: sha512-8RyVklq0owXUTa4xlpzu4l9AaVKIdQvAcOHZWaMh98HgySsUtxRVf/chRe3dsSLqb6i40BzGRzEUddRaI+9TSw==} engines: {node: ^10 || ^12 || >=14} process-warning@4.0.1: @@ -2480,10 +2438,6 @@ packages: resolution: {integrity: sha512-E1sbAYg3aEbXrq0n1ojJkRHQJGE1kaE/O6GLA94y8rnJBfgvOPTOd1b9hOceQK1FFZI9qMh1vBERCyO2ifubcw==} engines: {node: '>=18'} - protobufjs@7.6.1: - resolution: {integrity: sha512-4K0myLaWL5EteuSAro91EGFgcfVgxb64Jx+7oDAY6GOkXD4M69yuSEljNcInGVCA5sOPxmZ/EqDLj2x0Q0+Ygg==} - engines: {node: '>=12.0.0'} - protobufjs@7.6.4: resolution: {integrity: sha512-RJJPTTpvFfHcWLkIa2JFWK4XvtSzS0yEWDmunqHXli1h3JlkbcQZXDZdcWxv+JK3Xsl5/UFDPZ0iGm7DAengYw==} engines: {node: '>=12.0.0'} @@ -2733,8 +2687,8 @@ packages: resolution: {integrity: sha512-m1TdR/rvT7kgGJZhspNtXdsdYk0fddFpJJFlG5s+UkPFo6lkLoZ3YLOaovPYjq1R75NP5JfeTlSHaOsE09peCg==} engines: {node: '>=20'} - toad-scheduler@3.1.0: - resolution: {integrity: sha512-ZTwsGMWyKTOokgTmIvjPIvkT3ZiPFgkAi8L0OLONOcSc/BUDPRzNMOfVWZzugIAxyntvY0Nzy1etNk+31Q4FXQ==} + toad-scheduler@4.1.0: + resolution: {integrity: sha512-2HF37I09Tc4SW+nF1nkSLd3tDaZzsNrCzMn6p+Hzg3io9Rqkc8JQ3KK26Q6AUtBqEg9coleau3bRj8873FHjGA==} tr46@0.0.3: resolution: {integrity: sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==} @@ -2746,17 +2700,17 @@ packages: tslib@2.8.1: resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==} - turbo@2.10.7: - resolution: {integrity: sha512-GHx6WExIFSKNJ5qMlzDpXBXlu9ApxaMjqxAVrCNcW94xf/+uqgIz41SAuRUMbXva2ExNAaY/h8V0q90SWSzmRw==} + turbo@2.10.8: + resolution: {integrity: sha512-9+8YX5QOkGXzZxcIykTHgaooRHGMWO+jfdyRK0o+rN0U7hBIig2MrJ8r/aNzIPDPhdA73SGb0O+tIztaModTMg==} hasBin: true type-fest@5.8.0: resolution: {integrity: sha512-YGYEVz3Fm5iy/AybuA0oyNFq7H4CgQNfRp/qfe8nurE1kuCeNm3/vfm9X4Mtl+qLyaKJUh5xrFZwogr41SMjYA==} engines: {node: '>=20'} - typescript@5.9.3: - resolution: {integrity: sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==} - engines: {node: '>=14.17'} + typescript@7.0.2: + resolution: {integrity: sha512-8FYau96o3NKOhbjKi/qNvG/W5jhzxkbdm5sj9AbZ/5T5sWqn3hJgLfGx27sRKZWTvyzCP8dLRBTf5tBTSRVUNA==} + engines: {node: '>=16.20.0'} hasBin: true ulid-uuid-converter@1.0.4: @@ -2766,8 +2720,8 @@ packages: resolution: {integrity: sha512-xY7c8LPyzvhvew0Fn+Ek3wBC9STZAuDI/Y5andCKi9AX6/jvfaX45PhsDX8oxgPL0YFp0Jhr8qWMbS/p9375Xg==} engines: {node: '>=16'} - undici-types@7.24.6: - resolution: {integrity: sha512-WRNW+sJgj5OBN4/0JpHFqtqzhpbnV0GuB+OozA9gCL7a993SmU+1JBZCzLNxYsbMfIeDL+lTsphD5jN5N+n0zg==} + undici-types@8.3.0: + resolution: {integrity: sha512-j375ScV60dom+YkPFIfTLcOiPxkN/buHz5GobjLhixFuANaNs3C9l4GmrWqejgXWJ7BbJcFYpTEUkS1Ge8bpZQ==} util-deprecate@1.0.2: resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} @@ -2929,33 +2883,12 @@ packages: snapshots: - '@aws-crypto/crc32@5.2.0': - dependencies: - '@aws-crypto/util': 5.2.0 - '@aws-sdk/types': 3.974.2 - tslib: 2.8.1 - - '@aws-crypto/crc32c@5.2.0': - dependencies: - '@aws-crypto/util': 5.2.0 - '@aws-sdk/types': 3.974.2 - tslib: 2.8.1 - - '@aws-crypto/sha1-browser@5.2.0': - dependencies: - '@aws-crypto/supports-web-crypto': 5.2.0 - '@aws-crypto/util': 5.2.0 - '@aws-sdk/types': 3.973.8 - '@aws-sdk/util-locate-window': 3.965.5 - '@smithy/util-utf8': 2.3.0 - tslib: 2.8.1 - '@aws-crypto/sha256-browser@5.2.0': dependencies: '@aws-crypto/sha256-js': 5.2.0 '@aws-crypto/supports-web-crypto': 5.2.0 '@aws-crypto/util': 5.2.0 - '@aws-sdk/types': 3.973.8 + '@aws-sdk/types': 3.974.2 '@aws-sdk/util-locate-window': 3.965.8 '@smithy/util-utf8': 2.3.0 tslib: 2.8.1 @@ -2963,7 +2896,7 @@ snapshots: '@aws-crypto/sha256-js@5.2.0': dependencies: '@aws-crypto/util': 5.2.0 - '@aws-sdk/types': 3.973.8 + '@aws-sdk/types': 3.974.2 tslib: 2.8.1 '@aws-crypto/supports-web-crypto@5.2.0': @@ -2976,64 +2909,21 @@ snapshots: '@smithy/util-utf8': 2.3.0 tslib: 2.8.1 - '@aws-sdk/checksums@3.1000.14': - dependencies: - '@aws-sdk/core': 3.977.6 - '@aws-sdk/types': 3.974.2 - '@smithy/core': 3.31.1 - '@smithy/types': 4.16.1 - tslib: 2.8.1 - - '@aws-sdk/client-s3@3.1048.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.974.11 - '@aws-sdk/credential-provider-node': 3.972.42 - '@aws-sdk/middleware-bucket-endpoint': 3.972.13 - '@aws-sdk/middleware-expect-continue': 3.972.12 - '@aws-sdk/middleware-flexible-checksums': 3.974.19 - '@aws-sdk/middleware-location-constraint': 3.972.10 - '@aws-sdk/middleware-sdk-s3': 3.972.40 - '@aws-sdk/middleware-ssec': 3.972.10 - '@aws-sdk/signature-v4-multi-region': 3.996.27 - '@aws-sdk/types': 3.973.8 - '@smithy/core': 3.24.3 - '@smithy/fetch-http-handler': 5.4.3 - '@smithy/node-http-handler': 4.7.3 - '@smithy/types': 4.14.2 - tslib: 2.8.1 - - '@aws-sdk/client-s3@3.1081.0': - dependencies: - '@aws-sdk/checksums': 3.1000.14 - '@aws-sdk/core': 3.977.6 - '@aws-sdk/credential-provider-node': 3.972.78 - '@aws-sdk/middleware-sdk-s3': 3.972.60 - '@aws-sdk/signature-v4-multi-region': 3.996.38 - '@aws-sdk/types': 3.974.2 - '@smithy/core': 3.31.1 - '@smithy/fetch-http-handler': 5.6.13 - '@smithy/node-http-handler': 4.9.13 - '@smithy/types': 4.16.1 - tslib: 2.8.1 - - '@aws-sdk/client-sns@3.1081.0': + '@aws-sdk/checksums@3.1000.26': dependencies: '@aws-sdk/core': 3.977.6 - '@aws-sdk/credential-provider-node': 3.972.78 '@aws-sdk/types': 3.974.2 '@smithy/core': 3.31.1 - '@smithy/fetch-http-handler': 5.6.13 - '@smithy/node-http-handler': 4.9.13 '@smithy/types': 4.16.1 tslib: 2.8.1 - '@aws-sdk/client-sns@3.1098.0': + '@aws-sdk/client-s3@3.1106.0': dependencies: + '@aws-sdk/checksums': 3.1000.26 '@aws-sdk/core': 3.977.6 '@aws-sdk/credential-provider-node': 3.972.78 + '@aws-sdk/middleware-sdk-s3': 3.972.72 + '@aws-sdk/signature-v4-multi-region': 3.996.43 '@aws-sdk/types': 3.974.2 '@smithy/core': 3.31.1 '@smithy/fetch-http-handler': 5.6.13 @@ -3041,11 +2931,10 @@ snapshots: '@smithy/types': 4.16.1 tslib: 2.8.1 - '@aws-sdk/client-sqs@3.1081.0': + '@aws-sdk/client-sns@3.1106.0': dependencies: '@aws-sdk/core': 3.977.6 '@aws-sdk/credential-provider-node': 3.972.78 - '@aws-sdk/middleware-sdk-sqs': 3.972.39 '@aws-sdk/types': 3.974.2 '@smithy/core': 3.31.1 '@smithy/fetch-http-handler': 5.6.13 @@ -3053,7 +2942,7 @@ snapshots: '@smithy/types': 4.16.1 tslib: 2.8.1 - '@aws-sdk/client-sqs@3.1098.0': + '@aws-sdk/client-sqs@3.1106.0': dependencies: '@aws-sdk/core': 3.977.6 '@aws-sdk/credential-provider-node': 3.972.78 @@ -3069,33 +2958,22 @@ snapshots: dependencies: '@aws-crypto/sha256-browser': 5.2.0 '@aws-crypto/sha256-js': 5.2.0 - '@aws-sdk/core': 3.974.11 - '@aws-sdk/credential-provider-node': 3.972.42 + '@aws-sdk/core': 3.977.6 + '@aws-sdk/credential-provider-node': 3.972.78 '@aws-sdk/middleware-host-header': 3.972.12 '@aws-sdk/middleware-logger': 3.972.11 '@aws-sdk/middleware-recursion-detection': 3.972.13 '@aws-sdk/middleware-user-agent': 3.972.41 '@aws-sdk/region-config-resolver': 3.972.15 - '@aws-sdk/signature-v4-multi-region': 3.996.27 - '@aws-sdk/types': 3.973.8 + '@aws-sdk/signature-v4-multi-region': 3.996.43 + '@aws-sdk/types': 3.974.2 '@aws-sdk/util-endpoints': 3.996.10 '@aws-sdk/util-user-agent-browser': 3.972.12 '@aws-sdk/util-user-agent-node': 3.973.27 - '@smithy/core': 3.24.3 - '@smithy/fetch-http-handler': 5.4.3 - '@smithy/node-http-handler': 4.7.3 - '@smithy/types': 4.14.2 - tslib: 2.8.1 - - '@aws-sdk/core@3.974.11': - dependencies: - '@aws-sdk/types': 3.973.8 - '@aws-sdk/xml-builder': 3.972.24 - '@aws/lambda-invoke-store': 0.2.4 - '@smithy/core': 3.24.3 - '@smithy/signature-v4': 5.4.3 - '@smithy/types': 4.14.2 - bowser: 2.14.1 + '@smithy/core': 3.31.1 + '@smithy/fetch-http-handler': 5.6.13 + '@smithy/node-http-handler': 4.9.13 + '@smithy/types': 4.16.1 tslib: 2.8.1 '@aws-sdk/core@3.977.6': @@ -3109,19 +2987,6 @@ snapshots: bowser: 2.14.1 tslib: 2.8.1 - '@aws-sdk/crc64-nvme@3.972.8': - dependencies: - '@smithy/types': 4.16.1 - tslib: 2.8.1 - - '@aws-sdk/credential-provider-env@3.972.37': - dependencies: - '@aws-sdk/core': 3.977.6 - '@aws-sdk/types': 3.974.2 - '@smithy/core': 3.31.1 - '@smithy/types': 4.16.1 - tslib: 2.8.1 - '@aws-sdk/credential-provider-env@3.972.67': dependencies: '@aws-sdk/core': 3.977.6 @@ -3130,16 +2995,6 @@ snapshots: '@smithy/types': 4.16.1 tslib: 2.8.1 - '@aws-sdk/credential-provider-http@3.972.39': - dependencies: - '@aws-sdk/core': 3.977.6 - '@aws-sdk/types': 3.974.2 - '@smithy/core': 3.31.1 - '@smithy/fetch-http-handler': 5.6.13 - '@smithy/node-http-handler': 4.9.13 - '@smithy/types': 4.16.1 - tslib: 2.8.1 - '@aws-sdk/credential-provider-http@3.972.69': dependencies: '@aws-sdk/core': 3.977.6 @@ -3150,22 +3005,6 @@ snapshots: '@smithy/types': 4.16.1 tslib: 2.8.1 - '@aws-sdk/credential-provider-ini@3.972.41': - dependencies: - '@aws-sdk/core': 3.977.6 - '@aws-sdk/credential-provider-env': 3.972.37 - '@aws-sdk/credential-provider-http': 3.972.39 - '@aws-sdk/credential-provider-login': 3.972.41 - '@aws-sdk/credential-provider-process': 3.972.37 - '@aws-sdk/credential-provider-sso': 3.972.41 - '@aws-sdk/credential-provider-web-identity': 3.972.41 - '@aws-sdk/nested-clients': 3.997.9 - '@aws-sdk/types': 3.974.2 - '@smithy/core': 3.31.1 - '@smithy/credential-provider-imds': 4.3.3 - '@smithy/types': 4.16.1 - tslib: 2.8.1 - '@aws-sdk/credential-provider-ini@3.973.12': dependencies: '@aws-sdk/core': 3.977.6 @@ -3182,15 +3021,6 @@ snapshots: '@smithy/types': 4.16.1 tslib: 2.8.1 - '@aws-sdk/credential-provider-login@3.972.41': - dependencies: - '@aws-sdk/core': 3.977.6 - '@aws-sdk/nested-clients': 3.997.9 - '@aws-sdk/types': 3.974.2 - '@smithy/core': 3.31.1 - '@smithy/types': 4.16.1 - tslib: 2.8.1 - '@aws-sdk/credential-provider-login@3.972.74': dependencies: '@aws-sdk/core': 3.977.6 @@ -3200,20 +3030,6 @@ snapshots: '@smithy/types': 4.16.1 tslib: 2.8.1 - '@aws-sdk/credential-provider-node@3.972.42': - dependencies: - '@aws-sdk/credential-provider-env': 3.972.37 - '@aws-sdk/credential-provider-http': 3.972.39 - '@aws-sdk/credential-provider-ini': 3.972.41 - '@aws-sdk/credential-provider-process': 3.972.37 - '@aws-sdk/credential-provider-sso': 3.972.41 - '@aws-sdk/credential-provider-web-identity': 3.972.41 - '@aws-sdk/types': 3.973.8 - '@smithy/core': 3.24.3 - '@smithy/credential-provider-imds': 4.3.3 - '@smithy/types': 4.14.2 - tslib: 2.8.1 - '@aws-sdk/credential-provider-node@3.972.78': dependencies: '@aws-sdk/credential-provider-env': 3.972.67 @@ -3228,14 +3044,6 @@ snapshots: '@smithy/types': 4.16.1 tslib: 2.8.1 - '@aws-sdk/credential-provider-process@3.972.37': - dependencies: - '@aws-sdk/core': 3.977.6 - '@aws-sdk/types': 3.974.2 - '@smithy/core': 3.31.1 - '@smithy/types': 4.16.1 - tslib: 2.8.1 - '@aws-sdk/credential-provider-process@3.972.67': dependencies: '@aws-sdk/core': 3.977.6 @@ -3244,16 +3052,6 @@ snapshots: '@smithy/types': 4.16.1 tslib: 2.8.1 - '@aws-sdk/credential-provider-sso@3.972.41': - dependencies: - '@aws-sdk/core': 3.977.6 - '@aws-sdk/nested-clients': 3.997.9 - '@aws-sdk/token-providers': 3.1048.0 - '@aws-sdk/types': 3.974.2 - '@smithy/core': 3.31.1 - '@smithy/types': 4.16.1 - tslib: 2.8.1 - '@aws-sdk/credential-provider-sso@3.973.11': dependencies: '@aws-sdk/core': 3.977.6 @@ -3264,15 +3062,6 @@ snapshots: '@smithy/types': 4.16.1 tslib: 2.8.1 - '@aws-sdk/credential-provider-web-identity@3.972.41': - dependencies: - '@aws-sdk/core': 3.977.6 - '@aws-sdk/nested-clients': 3.997.9 - '@aws-sdk/types': 3.974.2 - '@smithy/core': 3.31.1 - '@smithy/types': 4.16.1 - tslib: 2.8.1 - '@aws-sdk/credential-provider-web-identity@3.972.73': dependencies: '@aws-sdk/core': 3.977.6 @@ -3282,44 +3071,11 @@ snapshots: '@smithy/types': 4.16.1 tslib: 2.8.1 - '@aws-sdk/middleware-bucket-endpoint@3.972.13': - dependencies: - '@aws-sdk/core': 3.974.11 - '@aws-sdk/types': 3.973.8 - '@smithy/core': 3.24.3 - '@smithy/types': 4.14.2 - tslib: 2.8.1 - - '@aws-sdk/middleware-expect-continue@3.972.12': - dependencies: - '@aws-sdk/types': 3.973.8 - '@smithy/core': 3.24.3 - '@smithy/types': 4.14.2 - tslib: 2.8.1 - - '@aws-sdk/middleware-flexible-checksums@3.974.19': - dependencies: - '@aws-crypto/crc32': 5.2.0 - '@aws-crypto/crc32c': 5.2.0 - '@aws-crypto/util': 5.2.0 - '@aws-sdk/core': 3.974.11 - '@aws-sdk/crc64-nvme': 3.972.8 - '@aws-sdk/types': 3.973.8 - '@smithy/core': 3.24.3 - '@smithy/types': 4.14.2 - tslib: 2.8.1 - '@aws-sdk/middleware-host-header@3.972.12': dependencies: '@aws-sdk/core': 3.977.6 tslib: 2.8.1 - '@aws-sdk/middleware-location-constraint@3.972.10': - dependencies: - '@aws-sdk/types': 3.973.8 - '@smithy/types': 4.14.2 - tslib: 2.8.1 - '@aws-sdk/middleware-logger@3.972.11': dependencies: '@aws-sdk/core': 3.977.6 @@ -3330,20 +3086,10 @@ snapshots: '@aws-sdk/core': 3.977.6 tslib: 2.8.1 - '@aws-sdk/middleware-sdk-s3@3.972.40': - dependencies: - '@aws-sdk/core': 3.974.11 - '@aws-sdk/signature-v4-multi-region': 3.996.27 - '@aws-sdk/types': 3.973.8 - '@smithy/core': 3.24.3 - '@smithy/signature-v4': 5.4.3 - '@smithy/types': 4.14.2 - tslib: 2.8.1 - - '@aws-sdk/middleware-sdk-s3@3.972.60': + '@aws-sdk/middleware-sdk-s3@3.972.72': dependencies: '@aws-sdk/core': 3.977.6 - '@aws-sdk/signature-v4-multi-region': 3.996.38 + '@aws-sdk/signature-v4-multi-region': 3.996.43 '@aws-sdk/types': 3.974.2 '@smithy/core': 3.31.1 '@smithy/types': 4.16.1 @@ -3356,12 +3102,6 @@ snapshots: '@smithy/types': 4.16.1 tslib: 2.8.1 - '@aws-sdk/middleware-ssec@3.972.10': - dependencies: - '@aws-sdk/types': 3.973.8 - '@smithy/types': 4.14.2 - tslib: 2.8.1 - '@aws-sdk/middleware-user-agent@3.972.41': dependencies: '@aws-sdk/core': 3.977.6 @@ -3378,39 +3118,11 @@ snapshots: '@smithy/types': 4.16.1 tslib: 2.8.1 - '@aws-sdk/nested-clients@3.997.9': - dependencies: - '@aws-crypto/sha256-browser': 5.2.0 - '@aws-crypto/sha256-js': 5.2.0 - '@aws-sdk/core': 3.977.6 - '@aws-sdk/signature-v4-multi-region': 3.996.38 - '@aws-sdk/types': 3.974.2 - '@smithy/core': 3.31.1 - '@smithy/fetch-http-handler': 5.6.13 - '@smithy/node-http-handler': 4.9.13 - '@smithy/types': 4.16.1 - tslib: 2.8.1 - '@aws-sdk/region-config-resolver@3.972.15': dependencies: '@aws-sdk/core': 3.977.6 tslib: 2.8.1 - '@aws-sdk/signature-v4-multi-region@3.996.27': - dependencies: - '@aws-sdk/types': 3.973.8 - '@smithy/core': 3.24.3 - '@smithy/signature-v4': 5.4.3 - '@smithy/types': 4.14.2 - tslib: 2.8.1 - - '@aws-sdk/signature-v4-multi-region@3.996.38': - dependencies: - '@aws-sdk/types': 3.974.2 - '@smithy/signature-v4': 5.6.12 - '@smithy/types': 4.16.1 - tslib: 2.8.1 - '@aws-sdk/signature-v4-multi-region@3.996.43': dependencies: '@aws-sdk/types': 3.974.2 @@ -3418,15 +3130,6 @@ snapshots: '@smithy/types': 4.16.1 tslib: 2.8.1 - '@aws-sdk/token-providers@3.1048.0': - dependencies: - '@aws-sdk/core': 3.977.6 - '@aws-sdk/nested-clients': 3.997.9 - '@aws-sdk/types': 3.974.2 - '@smithy/core': 3.31.1 - '@smithy/types': 4.16.1 - tslib: 2.8.1 - '@aws-sdk/token-providers@3.1103.0': dependencies: '@aws-sdk/core': 3.977.6 @@ -3436,11 +3139,6 @@ snapshots: '@smithy/types': 4.16.1 tslib: 2.8.1 - '@aws-sdk/types@3.973.8': - dependencies: - '@smithy/types': 4.14.2 - tslib: 2.8.1 - '@aws-sdk/types@3.974.2': dependencies: '@smithy/types': 4.16.1 @@ -3452,10 +3150,6 @@ snapshots: '@smithy/core': 3.31.1 tslib: 2.8.1 - '@aws-sdk/util-locate-window@3.965.5': - dependencies: - tslib: 2.8.1 - '@aws-sdk/util-locate-window@3.965.8': dependencies: tslib: 2.8.1 @@ -3470,20 +3164,11 @@ snapshots: '@aws-sdk/core': 3.977.6 tslib: 2.8.1 - '@aws-sdk/xml-builder@3.972.24': - dependencies: - '@nodable/entities': 2.1.0 - '@smithy/types': 4.16.1 - fast-xml-parser: 5.7.3 - tslib: 2.8.1 - '@aws-sdk/xml-builder@3.972.37': dependencies: '@smithy/types': 4.16.1 tslib: 2.8.1 - '@aws/lambda-invoke-store@0.2.4': {} - '@aws/lambda-invoke-store@0.3.0': {} '@babel/helper-string-parser@7.29.7': {} @@ -3501,39 +3186,39 @@ snapshots: '@bcoe/v8-coverage@1.0.2': {} - '@biomejs/biome@2.5.3': + '@biomejs/biome@2.5.6': optionalDependencies: - '@biomejs/cli-darwin-arm64': 2.5.3 - '@biomejs/cli-darwin-x64': 2.5.3 - '@biomejs/cli-linux-arm64': 2.5.3 - '@biomejs/cli-linux-arm64-musl': 2.5.3 - '@biomejs/cli-linux-x64': 2.5.3 - '@biomejs/cli-linux-x64-musl': 2.5.3 - '@biomejs/cli-win32-arm64': 2.5.3 - '@biomejs/cli-win32-x64': 2.5.3 - - '@biomejs/cli-darwin-arm64@2.5.3': + '@biomejs/cli-darwin-arm64': 2.5.6 + '@biomejs/cli-darwin-x64': 2.5.6 + '@biomejs/cli-linux-arm64': 2.5.6 + '@biomejs/cli-linux-arm64-musl': 2.5.6 + '@biomejs/cli-linux-x64': 2.5.6 + '@biomejs/cli-linux-x64-musl': 2.5.6 + '@biomejs/cli-win32-arm64': 2.5.6 + '@biomejs/cli-win32-x64': 2.5.6 + + '@biomejs/cli-darwin-arm64@2.5.6': optional: true - '@biomejs/cli-darwin-x64@2.5.3': + '@biomejs/cli-darwin-x64@2.5.6': optional: true - '@biomejs/cli-linux-arm64-musl@2.5.3': + '@biomejs/cli-linux-arm64-musl@2.5.6': optional: true - '@biomejs/cli-linux-arm64@2.5.3': + '@biomejs/cli-linux-arm64@2.5.6': optional: true - '@biomejs/cli-linux-x64-musl@2.5.3': + '@biomejs/cli-linux-x64-musl@2.5.6': optional: true - '@biomejs/cli-linux-x64@2.5.3': + '@biomejs/cli-linux-x64@2.5.6': optional: true - '@biomejs/cli-win32-arm64@2.5.3': + '@biomejs/cli-win32-arm64@2.5.6': optional: true - '@biomejs/cli-win32-x64@2.5.3': + '@biomejs/cli-win32-x64@2.5.6': optional: true '@emnapi/core@1.10.0': @@ -3615,7 +3300,7 @@ snapshots: '@google-cloud/promisify@5.0.1': {} - '@google-cloud/pubsub@5.3.1': + '@google-cloud/pubsub@5.3.1(supports-color@7.2.0)': dependencies: '@google-cloud/paginator': 6.0.1 '@google-cloud/precise-date': 5.0.1 @@ -3626,8 +3311,8 @@ snapshots: '@opentelemetry/semantic-conventions': 1.39.0 arrify: 2.0.1 extend: 3.0.2 - google-auth-library: 10.7.0 - google-gax: 5.0.7 + google-auth-library: 10.7.0(supports-color@7.2.0) + google-gax: 5.0.7(supports-color@7.2.0) google-logging-utils: 1.1.4 heap-js: 2.7.1 is-stream-ended: 0.1.4 @@ -3637,7 +3322,7 @@ snapshots: transitivePeerDependencies: - supports-color - '@google-cloud/storage@7.21.0': + '@google-cloud/storage@7.21.0(supports-color@7.2.0)': dependencies: '@google-cloud/paginator': 5.0.2 '@google-cloud/projectify': 4.0.0 @@ -3646,13 +3331,13 @@ snapshots: async-retry: 1.3.3 duplexify: 4.1.3 fast-xml-parser: 5.9.3 - gaxios: 6.7.1 - google-auth-library: 9.15.1 + gaxios: 6.7.1(supports-color@7.2.0) + google-auth-library: 9.15.1(supports-color@7.2.0) html-entities: 2.6.0 mime: 3.0.0 p-limit: 3.1.0 - retry-request: 7.0.2 - teeny-request: 9.0.0 + retry-request: 7.0.2(supports-color@7.2.0) + teeny-request: 9.0.0(supports-color@7.2.0) transitivePeerDependencies: - encoding - supports-color @@ -3666,7 +3351,7 @@ snapshots: dependencies: lodash.camelcase: 4.3.0 long: 5.3.2 - protobufjs: 7.6.1 + protobufjs: 7.6.4 yargs: 17.7.2 '@ioredis/commands@1.10.0': {} @@ -3693,15 +3378,15 @@ snapshots: '@js-sdsl/ordered-map@4.4.2': {} - '@lokalise/background-jobs-common@14.4.2(bullmq@5.76.8)(ioredis@5.11.1)(pino@10.3.1)(toad-scheduler@3.1.0)(zod@4.4.3)': + '@lokalise/background-jobs-common@14.4.2(bullmq@5.76.8(supports-color@7.2.0))(ioredis@5.11.1(supports-color@7.2.0))(pino@10.3.1)(supports-color@7.2.0)(toad-scheduler@4.1.0)(zod@4.4.3)': dependencies: '@lokalise/id-utils': 3.0.1 '@lokalise/node-core': 14.8.1(zod@4.4.3) - bullmq: 5.76.8 - ioredis: 5.11.1 + bullmq: 5.76.8(supports-color@7.2.0) + ioredis: 5.11.1(supports-color@7.2.0) pino: 10.3.1 - redis-semaphore: 5.7.0(ioredis@5.11.1) - toad-scheduler: 3.1.0 + redis-semaphore: 5.7.0(ioredis@5.11.1(supports-color@7.2.0))(supports-color@7.2.0) + toad-scheduler: 4.1.0 ts-deepmerge: 8.0.0 zod: 4.4.3 transitivePeerDependencies: @@ -3723,29 +3408,25 @@ snapshots: tslib: 2.8.1 zod: 4.4.3 - '@lokalise/tsconfig@3.1.0': {} + '@lokalise/tsconfig@5.0.0': {} '@lokalise/universal-ts-utils@4.11.0': {} - '@message-queue-toolkit/gcs-payload-store@1.0.0(@google-cloud/storage@7.21.0)(@message-queue-toolkit/core@packages+core)': + '@message-queue-toolkit/gcs-payload-store@1.0.0(@google-cloud/storage@7.21.0(supports-color@7.2.0))(@message-queue-toolkit/core@packages+core)': dependencies: - '@google-cloud/storage': 7.21.0 + '@google-cloud/storage': 7.21.0(supports-color@7.2.0) '@message-queue-toolkit/core': link:packages/core - '@message-queue-toolkit/redis-message-deduplication-store@2.0.2(@message-queue-toolkit/core@packages+core)(ioredis@5.11.1)(zod@4.4.3)': + '@message-queue-toolkit/redis-message-deduplication-store@2.0.2(@message-queue-toolkit/core@packages+core)(ioredis@5.11.1(supports-color@7.2.0))(supports-color@7.2.0)(zod@4.4.3)': dependencies: '@lokalise/node-core': 14.8.1(zod@4.4.3) '@message-queue-toolkit/core': link:packages/core - ioredis: 5.11.1 - redis-semaphore: 5.7.0(ioredis@5.11.1) + ioredis: 5.11.1(supports-color@7.2.0) + redis-semaphore: 5.7.0(ioredis@5.11.1(supports-color@7.2.0))(supports-color@7.2.0) transitivePeerDependencies: - supports-color - zod - '@message-queue-toolkit/schemas@7.1.0(zod@4.4.3)': - dependencies: - zod: 4.4.3 - '@message-queue-toolkit/schemas@7.2.0(zod@4.4.3)': dependencies: zod: 4.4.3 @@ -3775,15 +3456,13 @@ snapshots: '@tybys/wasm-util': 0.10.3 optional: true - '@napi-rs/wasm-runtime@1.2.2(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0)': + '@napi-rs/wasm-runtime@1.2.0(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0)': dependencies: '@emnapi/core': 1.10.0 '@emnapi/runtime': 1.10.0 '@tybys/wasm-util': 0.10.3 optional: true - '@nodable/entities@2.1.0': {} - '@nodable/entities@2.2.0': {} '@node-rs/crc32-android-arm-eabi@1.10.6': @@ -3880,14 +3559,14 @@ snapshots: '@platformatic/dynamic-buffer@0.3.1': {} - '@platformatic/kafka@2.8.0': + '@platformatic/kafka@2.9.0(supports-color@7.2.0)': dependencies: '@platformatic/dynamic-buffer': 0.3.1 '@platformatic/wasm-utils': 0.2.1 ajv: 8.20.0 ajv-draft-04: 1.0.0(ajv@8.20.0) avsc: 5.7.9 - debug: 4.4.3 + debug: 4.4.3(supports-color@7.2.0) fastq: 1.20.1 mnemonist: 0.40.4 scule: 1.3.0 @@ -3915,8 +3594,6 @@ snapshots: '@protobufjs/float@1.0.2': {} - '@protobufjs/inquire@1.1.2': {} - '@protobufjs/path@1.1.2': {} '@protobufjs/pool@1.1.0': {} @@ -3963,7 +3640,7 @@ snapshots: dependencies: '@emnapi/core': 1.10.0 '@emnapi/runtime': 1.10.0 - '@napi-rs/wasm-runtime': 1.2.2(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0) + '@napi-rs/wasm-runtime': 1.2.0(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0) optional: true '@rolldown/binding-win32-arm64-msvc@1.0.1': @@ -3974,35 +3651,17 @@ snapshots: '@rolldown/pluginutils@1.0.1': {} - '@smithy/core@3.24.3': - dependencies: - '@aws-crypto/crc32': 5.2.0 - '@smithy/types': 4.14.2 - tslib: 2.8.1 - '@smithy/core@3.31.1': dependencies: '@smithy/types': 4.16.1 tslib: 2.8.1 - '@smithy/credential-provider-imds@4.3.3': - dependencies: - '@smithy/core': 3.31.1 - '@smithy/types': 4.16.1 - tslib: 2.8.1 - '@smithy/credential-provider-imds@4.4.16': dependencies: '@smithy/core': 3.31.1 '@smithy/types': 4.16.1 tslib: 2.8.1 - '@smithy/fetch-http-handler@5.4.3': - dependencies: - '@smithy/core': 3.24.3 - '@smithy/types': 4.14.2 - tslib: 2.8.1 - '@smithy/fetch-http-handler@5.6.13': dependencies: '@smithy/core': 3.31.1 @@ -4013,40 +3672,18 @@ snapshots: dependencies: tslib: 2.8.1 - '@smithy/node-http-handler@4.7.3': - dependencies: - '@smithy/core': 3.24.3 - '@smithy/types': 4.14.2 - tslib: 2.8.1 - '@smithy/node-http-handler@4.9.13': dependencies: '@smithy/core': 3.31.1 '@smithy/types': 4.16.1 tslib: 2.8.1 - '@smithy/node-http-handler@4.9.3': - dependencies: - '@smithy/core': 3.31.1 - '@smithy/types': 4.16.1 - tslib: 2.8.1 - - '@smithy/signature-v4@5.4.3': - dependencies: - '@smithy/core': 3.31.1 - '@smithy/types': 4.16.1 - tslib: 2.8.1 - '@smithy/signature-v4@5.6.12': dependencies: '@smithy/core': 3.31.1 '@smithy/types': 4.16.1 tslib: 2.8.1 - '@smithy/types@4.14.2': - dependencies: - tslib: 2.8.1 - '@smithy/types@4.16.1': dependencies: tslib: 2.8.1 @@ -4067,22 +3704,22 @@ snapshots: '@tootallnate/once@2.0.1': {} - '@turbo/darwin-64@2.10.7': + '@turbo/darwin-64@2.10.8': optional: true - '@turbo/darwin-arm64@2.10.7': + '@turbo/darwin-arm64@2.10.8': optional: true - '@turbo/linux-64@2.10.7': + '@turbo/linux-64@2.10.8': optional: true - '@turbo/linux-arm64@2.10.7': + '@turbo/linux-arm64@2.10.8': optional: true - '@turbo/windows-64@2.10.7': + '@turbo/windows-64@2.10.8': optional: true - '@turbo/windows-arm64@2.10.7': + '@turbo/windows-arm64@2.10.8': optional: true '@tybys/wasm-util@0.10.3': @@ -4092,7 +3729,7 @@ snapshots: '@types/amqplib@0.10.8': dependencies: - '@types/node': 25.8.0 + '@types/node': 26.1.2 '@types/caseless@0.12.5': {} @@ -4105,14 +3742,14 @@ snapshots: '@types/estree@1.0.9': {} - '@types/node@25.8.0': + '@types/node@26.1.2': dependencies: - undici-types: 7.24.6 + undici-types: 8.3.0 '@types/request@2.48.13': dependencies: '@types/caseless': 0.12.5 - '@types/node': 25.8.0 + '@types/node': 26.1.2 '@types/tough-cookie': 4.0.5 form-data: 2.5.6 @@ -4120,6 +3757,66 @@ snapshots: '@types/tough-cookie@4.0.5': {} + '@typescript/typescript-aix-ppc64@7.0.2': + optional: true + + '@typescript/typescript-darwin-arm64@7.0.2': + optional: true + + '@typescript/typescript-darwin-x64@7.0.2': + optional: true + + '@typescript/typescript-freebsd-arm64@7.0.2': + optional: true + + '@typescript/typescript-freebsd-x64@7.0.2': + optional: true + + '@typescript/typescript-linux-arm64@7.0.2': + optional: true + + '@typescript/typescript-linux-arm@7.0.2': + optional: true + + '@typescript/typescript-linux-loong64@7.0.2': + optional: true + + '@typescript/typescript-linux-mips64el@7.0.2': + optional: true + + '@typescript/typescript-linux-ppc64@7.0.2': + optional: true + + '@typescript/typescript-linux-riscv64@7.0.2': + optional: true + + '@typescript/typescript-linux-s390x@7.0.2': + optional: true + + '@typescript/typescript-linux-x64@7.0.2': + optional: true + + '@typescript/typescript-netbsd-arm64@7.0.2': + optional: true + + '@typescript/typescript-netbsd-x64@7.0.2': + optional: true + + '@typescript/typescript-openbsd-arm64@7.0.2': + optional: true + + '@typescript/typescript-openbsd-x64@7.0.2': + optional: true + + '@typescript/typescript-sunos-x64@7.0.2': + optional: true + + '@typescript/typescript-win32-arm64@7.0.2': + optional: true + + '@typescript/typescript-win32-x64@7.0.2': + optional: true + '@vitest/coverage-v8@4.1.10(vitest@4.1.10)': dependencies: '@bcoe/v8-coverage': 1.0.2 @@ -4132,7 +3829,7 @@ snapshots: obug: 2.1.3 std-env: 4.2.0 tinyrainbow: 3.1.0 - vitest: 4.1.10(@opentelemetry/api@1.9.1)(@types/node@25.8.0)(@vitest/coverage-v8@4.1.10)(vite@8.0.13(@types/node@25.8.0)) + vitest: 4.1.10(@opentelemetry/api@1.9.1)(@types/node@26.1.2)(@vitest/coverage-v8@4.1.10)(vite@8.0.13(@types/node@26.1.2)) '@vitest/expect@4.1.10': dependencies: @@ -4143,13 +3840,13 @@ snapshots: chai: 6.2.2 tinyrainbow: 3.1.0 - '@vitest/mocker@4.1.10(vite@8.0.13(@types/node@25.8.0))': + '@vitest/mocker@4.1.10(vite@8.0.13(@types/node@26.1.2))': dependencies: '@vitest/spy': 4.1.10 estree-walker: 3.0.3 magic-string: 0.30.21 optionalDependencies: - vite: 8.0.13(@types/node@25.8.0) + vite: 8.0.13(@types/node@26.1.2) '@vitest/pretty-format@4.1.10': dependencies: @@ -4181,9 +3878,9 @@ snapshots: abstract-logging@2.0.1: {} - agent-base@6.0.2: + agent-base@6.0.2(supports-color@7.2.0): dependencies: - debug: 4.4.3 + debug: 4.4.3(supports-color@7.2.0) transitivePeerDependencies: - supports-color @@ -4277,10 +3974,10 @@ snapshots: buffer-equal-constant-time@1.0.1: {} - bullmq@5.76.8: + bullmq@5.76.8(supports-color@7.2.0): dependencies: cron-parser: 4.9.0 - ioredis: 5.10.1 + ioredis: 5.10.1(supports-color@7.2.0) msgpackr: 2.0.1 node-abort-controller: 3.1.1 semver: 7.8.0 @@ -4325,7 +4022,7 @@ snapshots: dependencies: luxon: 3.7.2 - croner@8.1.2: {} + croner@10.0.1: {} cross-spawn@7.0.6: dependencies: @@ -4337,9 +4034,11 @@ snapshots: dateformat@4.6.3: {} - debug@4.4.3: + debug@4.4.3(supports-color@7.2.0): dependencies: ms: 2.1.3 + optionalDependencies: + supports-color: 7.2.0 delayed-stream@1.0.0: {} @@ -4451,13 +4150,6 @@ snapshots: path-expression-matcher: 1.6.1 xml-naming: 0.1.0 - fast-xml-parser@5.7.3: - dependencies: - '@nodable/entities': 2.2.0 - fast-xml-builder: 1.2.0 - path-expression-matcher: 1.6.1 - strnum: 2.4.1 - fast-xml-parser@5.9.3: dependencies: '@nodable/entities': 2.2.0 @@ -4491,16 +4183,16 @@ snapshots: dependencies: reusify: 1.1.0 - fauxqs@2.8.0(typescript@5.9.3): + fauxqs@2.8.0(typescript@7.0.2): dependencies: - '@aws-sdk/client-s3': 3.1081.0 - '@aws-sdk/client-sns': 3.1081.0 - '@aws-sdk/client-sqs': 3.1081.0 + '@aws-sdk/client-s3': 3.1106.0 + '@aws-sdk/client-sns': 3.1106.0 + '@aws-sdk/client-sqs': 3.1106.0 '@fastify/cors': 11.2.0 - '@smithy/node-http-handler': 4.9.3 + '@smithy/node-http-handler': 4.9.13 fastify: 5.10.0 toad-cache: 3.7.4 - valibot: 1.4.2(typescript@5.9.3) + valibot: 1.4.2(typescript@7.0.2) transitivePeerDependencies: - typescript @@ -4546,10 +4238,10 @@ snapshots: function-bind@1.1.2: {} - gaxios@6.7.1: + gaxios@6.7.1(supports-color@7.2.0): dependencies: extend: 3.0.2 - https-proxy-agent: 7.0.6 + https-proxy-agent: 7.0.6(supports-color@7.2.0) is-stream: 2.0.1 node-fetch: 2.7.0 uuid: 9.0.1 @@ -4557,43 +4249,43 @@ snapshots: - encoding - supports-color - gaxios@7.1.3: + gaxios@7.1.3(supports-color@7.2.0): dependencies: extend: 3.0.2 - https-proxy-agent: 7.0.6 + https-proxy-agent: 7.0.6(supports-color@7.2.0) node-fetch: 3.3.2 rimraf: 5.0.10 transitivePeerDependencies: - supports-color - gaxios@7.1.5: + gaxios@7.1.5(supports-color@7.2.0): dependencies: extend: 3.0.2 - https-proxy-agent: 7.0.6 + https-proxy-agent: 7.0.6(supports-color@7.2.0) node-fetch: 3.3.2 transitivePeerDependencies: - supports-color - gcp-metadata@6.1.1: + gcp-metadata@6.1.1(supports-color@7.2.0): dependencies: - gaxios: 6.7.1 + gaxios: 6.7.1(supports-color@7.2.0) google-logging-utils: 0.0.2 json-bigint: 1.0.0 transitivePeerDependencies: - encoding - supports-color - gcp-metadata@8.1.2: + gcp-metadata@8.1.2(supports-color@7.2.0): dependencies: - gaxios: 7.1.5 + gaxios: 7.1.5(supports-color@7.2.0) google-logging-utils: 1.1.4 json-bigint: 1.0.0 transitivePeerDependencies: - supports-color - gcp-metadata@8.1.3: + gcp-metadata@8.1.3(supports-color@7.2.0): dependencies: - gaxios: 7.1.3 + gaxios: 7.1.3(supports-color@7.2.0) google-logging-utils: 1.1.3 json-bigint: 1.0.0 transitivePeerDependencies: @@ -4638,53 +4330,53 @@ snapshots: minipass: 7.1.3 path-scurry: 2.0.2 - google-auth-library@10.5.0: + google-auth-library@10.5.0(supports-color@7.2.0): dependencies: base64-js: 1.5.1 ecdsa-sig-formatter: 1.0.11 - gaxios: 7.1.5 - gcp-metadata: 8.1.3 + gaxios: 7.1.5(supports-color@7.2.0) + gcp-metadata: 8.1.3(supports-color@7.2.0) google-logging-utils: 1.1.4 - gtoken: 8.0.0 + gtoken: 8.0.0(supports-color@7.2.0) jws: 4.0.1 transitivePeerDependencies: - supports-color - google-auth-library@10.7.0: + google-auth-library@10.7.0(supports-color@7.2.0): dependencies: base64-js: 1.5.1 ecdsa-sig-formatter: 1.0.11 - gaxios: 7.1.5 - gcp-metadata: 8.1.2 + gaxios: 7.1.5(supports-color@7.2.0) + gcp-metadata: 8.1.2(supports-color@7.2.0) google-logging-utils: 1.1.3 jws: 4.0.1 transitivePeerDependencies: - supports-color - google-auth-library@9.15.1: + google-auth-library@9.15.1(supports-color@7.2.0): dependencies: base64-js: 1.5.1 ecdsa-sig-formatter: 1.0.11 - gaxios: 6.7.1 - gcp-metadata: 6.1.1 - gtoken: 7.1.0 + gaxios: 6.7.1(supports-color@7.2.0) + gcp-metadata: 6.1.1(supports-color@7.2.0) + gtoken: 7.1.0(supports-color@7.2.0) jws: 4.0.1 transitivePeerDependencies: - encoding - supports-color - google-gax@5.0.7: + google-gax@5.0.7(supports-color@7.2.0): dependencies: '@grpc/grpc-js': 1.14.4 '@grpc/proto-loader': 0.8.1 duplexify: 4.1.3 - google-auth-library: 10.5.0 + google-auth-library: 10.5.0(supports-color@7.2.0) google-logging-utils: 1.1.3 node-fetch: 3.3.2 object-hash: 3.0.0 proto3-json-serializer: 3.0.4 protobufjs: 7.6.4 - retry-request: 8.0.3 + retry-request: 8.0.3(supports-color@7.2.0) rimraf: 5.0.10 transitivePeerDependencies: - supports-color @@ -4697,17 +4389,17 @@ snapshots: gopd@1.2.0: {} - gtoken@7.1.0: + gtoken@7.1.0(supports-color@7.2.0): dependencies: - gaxios: 6.7.1 + gaxios: 6.7.1(supports-color@7.2.0) jws: 4.0.1 transitivePeerDependencies: - encoding - supports-color - gtoken@8.0.0: + gtoken@8.0.0(supports-color@7.2.0): dependencies: - gaxios: 7.1.5 + gaxios: 7.1.5(supports-color@7.2.0) jws: 4.0.1 transitivePeerDependencies: - supports-color @@ -4732,42 +4424,42 @@ snapshots: html-escaper@2.0.2: {} - http-proxy-agent@5.0.0: + http-proxy-agent@5.0.0(supports-color@7.2.0): dependencies: '@tootallnate/once': 2.0.1 - agent-base: 6.0.2 - debug: 4.4.3 + agent-base: 6.0.2(supports-color@7.2.0) + debug: 4.4.3(supports-color@7.2.0) transitivePeerDependencies: - supports-color - http-proxy-agent@7.0.2: + http-proxy-agent@7.0.2(supports-color@7.2.0): dependencies: agent-base: 7.1.4 - debug: 4.4.3 + debug: 4.4.3(supports-color@7.2.0) transitivePeerDependencies: - supports-color - https-proxy-agent@5.0.1: + https-proxy-agent@5.0.1(supports-color@7.2.0): dependencies: - agent-base: 6.0.2 - debug: 4.4.3 + agent-base: 6.0.2(supports-color@7.2.0) + debug: 4.4.3(supports-color@7.2.0) transitivePeerDependencies: - supports-color - https-proxy-agent@7.0.6: + https-proxy-agent@7.0.6(supports-color@7.2.0): dependencies: agent-base: 7.1.4 - debug: 4.4.3 + debug: 4.4.3(supports-color@7.2.0) transitivePeerDependencies: - supports-color inherits@2.0.4: {} - ioredis@5.10.1: + ioredis@5.10.1(supports-color@7.2.0): dependencies: '@ioredis/commands': 1.5.1 cluster-key-slot: 1.1.2 - debug: 4.4.3 + debug: 4.4.3(supports-color@7.2.0) denque: 2.1.0 lodash.defaults: 4.2.0 lodash.isarguments: 3.1.0 @@ -4777,11 +4469,11 @@ snapshots: transitivePeerDependencies: - supports-color - ioredis@5.11.1: + ioredis@5.11.1(supports-color@7.2.0): dependencies: '@ioredis/commands': 1.10.0 cluster-key-slot: 1.1.1 - debug: 4.4.3 + debug: 4.4.3(supports-color@7.2.0) denque: 2.1.0 redis-errors: 1.2.0 redis-parser: 3.0.0 @@ -4995,7 +4687,7 @@ snapshots: optionalDependencies: msgpackr-extract: 3.0.4 - nanoid@3.3.17: {} + nanoid@3.3.16: {} node-abort-controller@3.1.1: {} @@ -5094,9 +4786,9 @@ snapshots: sonic-boom: 4.2.1 thread-stream: 4.2.0 - postcss@8.5.25: + postcss@8.5.24: dependencies: - nanoid: 3.3.17 + nanoid: 3.3.16 picocolors: 1.1.1 source-map-js: 1.2.1 @@ -5113,21 +4805,6 @@ snapshots: dependencies: protobufjs: 7.6.4 - protobufjs@7.6.1: - dependencies: - '@protobufjs/aspromise': 1.1.2 - '@protobufjs/base64': 1.1.2 - '@protobufjs/codegen': 2.0.5 - '@protobufjs/eventemitter': 1.1.1 - '@protobufjs/fetch': 1.1.1 - '@protobufjs/float': 1.0.2 - '@protobufjs/inquire': 1.1.2 - '@protobufjs/path': 1.1.2 - '@protobufjs/pool': 1.1.0 - '@protobufjs/utf8': 1.1.1 - '@types/node': 25.8.0 - long: 5.3.2 - protobufjs@7.6.4: dependencies: '@protobufjs/aspromise': 1.1.2 @@ -5139,7 +4816,7 @@ snapshots: '@protobufjs/path': 1.1.2 '@protobufjs/pool': 1.1.0 '@protobufjs/utf8': 1.1.1 - '@types/node': 25.8.0 + '@types/node': 26.1.2 long: 5.3.2 protobufjs@8.7.1: @@ -5172,11 +4849,11 @@ snapshots: dependencies: redis-errors: 1.2.0 - redis-semaphore@5.7.0(ioredis@5.11.1): + redis-semaphore@5.7.0(ioredis@5.11.1(supports-color@7.2.0))(supports-color@7.2.0): dependencies: - debug: 4.4.3 + debug: 4.4.3(supports-color@7.2.0) optionalDependencies: - ioredis: 5.11.1 + ioredis: 5.11.1(supports-color@7.2.0) transitivePeerDependencies: - supports-color @@ -5186,19 +4863,19 @@ snapshots: ret@0.5.0: {} - retry-request@7.0.2: + retry-request@7.0.2(supports-color@7.2.0): dependencies: '@types/request': 2.48.13 extend: 3.0.2 - teeny-request: 9.0.0 + teeny-request: 9.0.0(supports-color@7.2.0) transitivePeerDependencies: - encoding - supports-color - retry-request@8.0.3: + retry-request@8.0.3(supports-color@7.2.0): dependencies: extend: 3.0.2 - teeny-request: 10.1.3 + teeny-request: 10.1.3(supports-color@7.2.0) transitivePeerDependencies: - supports-color @@ -5278,10 +4955,10 @@ snapshots: split2@4.2.0: {} - sqs-consumer@15.0.3(@aws-sdk/client-sqs@3.1098.0): + sqs-consumer@15.0.3(@aws-sdk/client-sqs@3.1106.0)(supports-color@7.2.0): dependencies: - '@aws-sdk/client-sqs': 3.1098.0 - debug: 4.4.3 + '@aws-sdk/client-sqs': 3.1106.0 + debug: 4.4.3(supports-color@7.2.0) transitivePeerDependencies: - supports-color @@ -5339,19 +5016,19 @@ snapshots: dependencies: bintrees: 1.0.2 - teeny-request@10.1.3: + teeny-request@10.1.3(supports-color@7.2.0): dependencies: - http-proxy-agent: 7.0.2 - https-proxy-agent: 7.0.6 + http-proxy-agent: 7.0.2(supports-color@7.2.0) + https-proxy-agent: 7.0.6(supports-color@7.2.0) node-fetch: 3.3.2 stream-events: 1.0.5 transitivePeerDependencies: - supports-color - teeny-request@9.0.0: + teeny-request@9.0.0(supports-color@7.2.0): dependencies: - http-proxy-agent: 5.0.0 - https-proxy-agent: 5.0.1 + http-proxy-agent: 5.0.0(supports-color@7.2.0) + https-proxy-agent: 5.0.1(supports-color@7.2.0) node-fetch: 2.7.0 stream-events: 1.0.5 uuid: 9.0.1 @@ -5382,9 +5059,9 @@ snapshots: toad-cache@3.7.4: {} - toad-scheduler@3.1.0: + toad-scheduler@4.1.0: dependencies: - croner: 8.1.2 + croner: 10.0.1 tr46@0.0.3: {} @@ -5392,20 +5069,41 @@ snapshots: tslib@2.8.1: {} - turbo@2.10.7: + turbo@2.10.8: optionalDependencies: - '@turbo/darwin-64': 2.10.7 - '@turbo/darwin-arm64': 2.10.7 - '@turbo/linux-64': 2.10.7 - '@turbo/linux-arm64': 2.10.7 - '@turbo/windows-64': 2.10.7 - '@turbo/windows-arm64': 2.10.7 + '@turbo/darwin-64': 2.10.8 + '@turbo/darwin-arm64': 2.10.8 + '@turbo/linux-64': 2.10.8 + '@turbo/linux-arm64': 2.10.8 + '@turbo/windows-64': 2.10.8 + '@turbo/windows-arm64': 2.10.8 type-fest@5.8.0: dependencies: tagged-tag: 1.0.0 - typescript@5.9.3: {} + typescript@7.0.2: + optionalDependencies: + '@typescript/typescript-aix-ppc64': 7.0.2 + '@typescript/typescript-darwin-arm64': 7.0.2 + '@typescript/typescript-darwin-x64': 7.0.2 + '@typescript/typescript-freebsd-arm64': 7.0.2 + '@typescript/typescript-freebsd-x64': 7.0.2 + '@typescript/typescript-linux-arm': 7.0.2 + '@typescript/typescript-linux-arm64': 7.0.2 + '@typescript/typescript-linux-loong64': 7.0.2 + '@typescript/typescript-linux-mips64el': 7.0.2 + '@typescript/typescript-linux-ppc64': 7.0.2 + '@typescript/typescript-linux-riscv64': 7.0.2 + '@typescript/typescript-linux-s390x': 7.0.2 + '@typescript/typescript-linux-x64': 7.0.2 + '@typescript/typescript-netbsd-arm64': 7.0.2 + '@typescript/typescript-netbsd-x64': 7.0.2 + '@typescript/typescript-openbsd-arm64': 7.0.2 + '@typescript/typescript-openbsd-x64': 7.0.2 + '@typescript/typescript-sunos-x64': 7.0.2 + '@typescript/typescript-win32-arm64': 7.0.2 + '@typescript/typescript-win32-x64': 7.0.2 ulid-uuid-converter@1.0.4: {} @@ -5413,7 +5111,7 @@ snapshots: dependencies: layerr: 3.0.0 - undici-types@7.24.6: {} + undici-types@8.3.0: {} util-deprecate@1.0.2: {} @@ -5421,25 +5119,25 @@ snapshots: uuidv7@1.2.1: {} - valibot@1.4.2(typescript@5.9.3): + valibot@1.4.2(typescript@7.0.2): optionalDependencies: - typescript: 5.9.3 + typescript: 7.0.2 - vite@8.0.13(@types/node@25.8.0): + vite@8.0.13(@types/node@26.1.2): dependencies: lightningcss: 1.33.0 picomatch: 4.0.5 - postcss: 8.5.25 + postcss: 8.5.24 rolldown: 1.0.1 tinyglobby: 0.2.17 optionalDependencies: - '@types/node': 25.8.0 + '@types/node': 26.1.2 fsevents: 2.3.3 - vitest@4.1.10(@opentelemetry/api@1.9.1)(@types/node@25.8.0)(@vitest/coverage-v8@4.1.10)(vite@8.0.13(@types/node@25.8.0)): + vitest@4.1.10(@opentelemetry/api@1.9.1)(@types/node@26.1.2)(@vitest/coverage-v8@4.1.10)(vite@8.0.13(@types/node@26.1.2)): dependencies: '@vitest/expect': 4.1.10 - '@vitest/mocker': 4.1.10(vite@8.0.13(@types/node@25.8.0)) + '@vitest/mocker': 4.1.10(vite@8.0.13(@types/node@26.1.2)) '@vitest/pretty-format': 4.1.10 '@vitest/runner': 4.1.10 '@vitest/snapshot': 4.1.10 @@ -5456,11 +5154,11 @@ snapshots: tinyexec: 1.2.4 tinyglobby: 0.2.17 tinyrainbow: 3.1.0 - vite: 8.0.13(@types/node@25.8.0) + vite: 8.0.13(@types/node@26.1.2) why-is-node-running: 2.3.0 optionalDependencies: '@opentelemetry/api': 1.9.1 - '@types/node': 25.8.0 + '@types/node': 26.1.2 '@vitest/coverage-v8': 4.1.10(vitest@4.1.10) transitivePeerDependencies: - msw diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml index 5918a4e3b..d1a24c524 100644 --- a/pnpm-workspace.yaml +++ b/pnpm-workspace.yaml @@ -9,6 +9,22 @@ allowBuilds: msgpackr-extract: false protobufjs: false +# Deliberate exceptions to the minimum release age. Each entry is pinned to the exact version it +# waives, so a later release of the same package is gated again rather than silently inheriting +# the exemption. +minimumReleaseAgeExclude: + # Fixes the two upstream defects that made the consumer throw out of callback chains nothing + # can catch: the connection pool now reports its closed state as a NetworkError rather than a + # plain Error, and Consumer.#handleError classifies via the free `findErrorBy` instead of + # calling `findBy` as a method on whatever it was handed. + - '@platformatic/kafka@2.9.0' + # Kept on one AWS SDK line across the workspace. Mixed versions resolve duplicate + # `@aws-sdk/core` and `@smithy/types` copies, which makes the SNS/SQS payload-store test types + # mutually unassignable. + - '@aws-sdk/client-s3@3.1106.0' + - '@aws-sdk/client-sns@3.1106.0' + - '@aws-sdk/client-sqs@3.1106.0' + # Hoist all dependencies to the workspace root to preserve npm-compatible # resolution behavior for transitive deps used directly in test files. shamefullyHoist: true