From d74a0bda77b2a1d9da2b1b972b9076c0414f9f7b Mon Sep 17 00:00:00 2001 From: Steve Buxton Date: Thu, 22 Jan 2026 15:45:06 +0000 Subject: [PATCH 01/28] Switch letter_status_update lambda to use eventsub SNS topic --- ...ent_source_mapping_letter_status_update.tf | 9 + .../terraform/components/api/locals.tf | 2 + .../api/module_lambda_letter_status_update.tf | 16 +- internal/events/jest.config.ts | 2 +- internal/events/package.json | 3 +- .../events}/__tests__/letter-mapper.test.ts | 2 +- .../events/src/events}/letter-mapper.ts | 9 +- internal/events/src/index.ts | 1 + internal/events/tsconfig.json | 3 +- lambdas/api-handler/package.json | 2 + .../src/config/__tests__/env.test.ts | 8 + lambdas/api-handler/src/config/deps.ts | 3 + lambdas/api-handler/src/config/env.ts | 2 + .../__tests__/letter-status-update.test.ts | 203 ++++++++++-------- .../src/handlers/letter-status-update.ts | 39 +++- .../api-handler/src/mappers/letter-mapper.ts | 18 +- .../letter-updates-transformer.test.ts | 46 ++-- .../src/letter-updates-transformer.ts | 8 +- .../letter-updates-transformer/src/types.ts | 10 - .../letter-updates-transformer/tsconfig.json | 3 +- lambdas/mi-updates-transformer/tsconfig.json | 3 +- tsconfig.base.json | 1 + 22 files changed, 233 insertions(+), 160 deletions(-) create mode 100644 infrastructure/terraform/components/api/lambda_event_source_mapping_letter_status_update.tf rename {lambdas/letter-updates-transformer/src/mappers => internal/events/src/events}/__tests__/letter-mapper.test.ts (97%) rename {lambdas/letter-updates-transformer/src/mappers => internal/events/src/events}/letter-mapper.ts (86%) delete mode 100644 lambdas/letter-updates-transformer/src/types.ts diff --git a/infrastructure/terraform/components/api/lambda_event_source_mapping_letter_status_update.tf b/infrastructure/terraform/components/api/lambda_event_source_mapping_letter_status_update.tf new file mode 100644 index 000000000..82e1c54df --- /dev/null +++ b/infrastructure/terraform/components/api/lambda_event_source_mapping_letter_status_update.tf @@ -0,0 +1,9 @@ +resource "aws_lambda_event_source_mapping" "letter_status_update" { + event_source_arn = module.letter_status_updates_queue.sqs_queue_arn + function_name = module.letter_status_update.function_name + batch_size = 10 + maximum_batching_window_in_seconds = 5 + function_response_types = [ + "ReportBatchItemFailures" + ] +} diff --git a/infrastructure/terraform/components/api/locals.tf b/infrastructure/terraform/components/api/locals.tf index 683156a05..334ac5ac2 100644 --- a/infrastructure/terraform/components/api/locals.tf +++ b/infrastructure/terraform/components/api/locals.tf @@ -27,6 +27,8 @@ locals { SUPPLIER_ID_HEADER = "nhsd-supplier-id", APIM_CORRELATION_HEADER = "nhsd-correlation-id", DOWNLOAD_URL_TTL_SECONDS = 60 + SNS_TOPIC_ARN = "${module.eventsub.sns_topic.arn}", + EVENT_SOURCE = "/data-plane/supplier-api/${var.group}/${var.environment}/letters" } core_pdf_bucket_arn = "arn:aws:s3:::comms-${var.core_account_id}-eu-west-2-${var.core_environment}-api-stg-pdf-pipeline" diff --git a/infrastructure/terraform/components/api/module_lambda_letter_status_update.tf b/infrastructure/terraform/components/api/module_lambda_letter_status_update.tf index 59393bd29..d3ff8715a 100644 --- a/infrastructure/terraform/components/api/module_lambda_letter_status_update.tf +++ b/infrastructure/terraform/components/api/module_lambda_letter_status_update.tf @@ -59,7 +59,6 @@ data "aws_iam_policy_document" "letter_status_update" { actions = [ "dynamodb:GetItem", "dynamodb:Query", - "dynamodb:UpdateItem", ] resources = [ @@ -79,7 +78,20 @@ data "aws_iam_policy_document" "letter_status_update" { ] resources = [ - module.letter_status_updates_queue.sqs_queue_arn + module.letter_status_updates_queue.sqs_queue_arn + ] + } + + statement { + sid = "AllowSNSPublish" + effect = "Allow" + + actions = [ + "sns:Publish" + ] + + resources = [ + module.eventsub.sns_topic.arn ] } } diff --git a/internal/events/jest.config.ts b/internal/events/jest.config.ts index 84251001b..926706a37 100644 --- a/internal/events/jest.config.ts +++ b/internal/events/jest.config.ts @@ -24,7 +24,7 @@ export const baseJestConfig: Config = { }, }, - coveragePathIgnorePatterns: ["/__tests__/"], + coveragePathIgnorePatterns: ["/src/index.ts$", "/__tests__/"], transform: { "^.+\\.ts$": "ts-jest" }, testPathIgnorePatterns: [".build"], testMatch: ["**/?(*.)+(spec|test).[jt]s?(x)"], diff --git a/internal/events/package.json b/internal/events/package.json index 08abc7453..f8d819273 100644 --- a/internal/events/package.json +++ b/internal/events/package.json @@ -1,6 +1,7 @@ { "dependencies": { "@asyncapi/bundler": "^0.6.4", + "@internal/datastore": "*", "zod": "^4.1.11" }, "description": "Schemas for NHS Notify Supplier API events", @@ -50,5 +51,5 @@ "typecheck": "tsc --noEmit" }, "types": "dist/index.d.ts", - "version": "1.0.9" + "version": "1.0.10" } diff --git a/lambdas/letter-updates-transformer/src/mappers/__tests__/letter-mapper.test.ts b/internal/events/src/events/__tests__/letter-mapper.test.ts similarity index 97% rename from lambdas/letter-updates-transformer/src/mappers/__tests__/letter-mapper.test.ts rename to internal/events/src/events/__tests__/letter-mapper.test.ts index 077d73792..0166ac96d 100644 --- a/lambdas/letter-updates-transformer/src/mappers/__tests__/letter-mapper.test.ts +++ b/internal/events/src/events/__tests__/letter-mapper.test.ts @@ -1,6 +1,6 @@ import { $LetterEvent } from "@nhsdigital/nhs-notify-event-schemas-supplier-api/src"; import { Letter } from "@internal/datastore"; -import mapLetterToCloudEvent from "../letter-mapper"; +import { mapLetterToCloudEvent } from "../letter-mapper"; describe("letter-mapper", () => { it("maps a letter to a letter event", async () => { diff --git a/lambdas/letter-updates-transformer/src/mappers/letter-mapper.ts b/internal/events/src/events/letter-mapper.ts similarity index 86% rename from lambdas/letter-updates-transformer/src/mappers/letter-mapper.ts rename to internal/events/src/events/letter-mapper.ts index f2f25a827..91f72988a 100644 --- a/lambdas/letter-updates-transformer/src/mappers/letter-mapper.ts +++ b/internal/events/src/events/letter-mapper.ts @@ -1,10 +1,11 @@ -import { LetterEvent } from "@nhsdigital/nhs-notify-event-schemas-supplier-api/src"; import { randomBytes, randomUUID } from "node:crypto"; import eventSchemaPackage from "@nhsdigital/nhs-notify-event-schemas-supplier-api/package.json"; -import { LetterForEventPub } from "../types"; +import { Letter } from "@internal/datastore"; +import { LetterEvent } from "./letter-events"; -export default function mapLetterToCloudEvent( - letter: LetterForEventPub, +// eslint-disable-next-line import-x/prefer-default-export +export function mapLetterToCloudEvent( + letter: Letter, source: string, ): LetterEvent { const eventId = randomUUID(); diff --git a/internal/events/src/index.ts b/internal/events/src/index.ts index c4255d26c..8313c9b0f 100644 --- a/internal/events/src/index.ts +++ b/internal/events/src/index.ts @@ -4,3 +4,4 @@ export { default as DomainBase } from "./domain/domain-base"; export * from "./events/event-envelope"; export * from "./events/letter-events"; export * from "./events/mi-events"; +export * from "./events/letter-mapper"; diff --git a/internal/events/tsconfig.json b/internal/events/tsconfig.json index 167e805ad..ad730e287 100644 --- a/internal/events/tsconfig.json +++ b/internal/events/tsconfig.json @@ -3,8 +3,7 @@ "declaration": true, "isolatedModules": true, "module": "commonjs", - "outDir": "dist", - "resolveJsonModule": true + "outDir": "dist" }, "exclude": [ "node_modules", diff --git a/lambdas/api-handler/package.json b/lambdas/api-handler/package.json index 1306f33d3..5ebfed49f 100644 --- a/lambdas/api-handler/package.json +++ b/lambdas/api-handler/package.json @@ -2,11 +2,13 @@ "dependencies": { "@aws-sdk/client-dynamodb": "^3.925.0", "@aws-sdk/client-s3": "^3.925.0", + "@aws-sdk/client-sns": "^3.925.0", "@aws-sdk/client-sqs": "^3.925.0", "@aws-sdk/lib-dynamodb": "^3.925.0", "@aws-sdk/s3-request-presigner": "^3.925.0", "@internal/datastore": "*", "@internal/helpers": "*", + "@nhsdigital/nhs-notify-event-schemas-supplier-api": "*", "aws-lambda": "^1.0.7", "esbuild": "^0.25.11", "pino": "^9.7.0", diff --git a/lambdas/api-handler/src/config/__tests__/env.test.ts b/lambdas/api-handler/src/config/__tests__/env.test.ts index afbca1d82..6b52a3474 100644 --- a/lambdas/api-handler/src/config/__tests__/env.test.ts +++ b/lambdas/api-handler/src/config/__tests__/env.test.ts @@ -25,6 +25,8 @@ describe("lambdaEnv", () => { process.env.DOWNLOAD_URL_TTL_SECONDS = "60"; process.env.MAX_LIMIT = "2500"; process.env.QUEUE_URL = "url"; + process.env.EVENT_SOURCE = "supplier-api"; + process.env.SNS_TOPIC_ARN = "sns-topic.arn"; const { envVars } = require("../env"); @@ -38,6 +40,8 @@ describe("lambdaEnv", () => { DOWNLOAD_URL_TTL_SECONDS: 60, MAX_LIMIT: 2500, QUEUE_URL: "url", + EVENT_SOURCE: "supplier-api", + SNS_TOPIC_ARN: "sns-topic.arn", }); }); @@ -61,6 +65,8 @@ describe("lambdaEnv", () => { process.env.LETTER_TTL_HOURS = "12960"; process.env.MI_TTL_HOURS = "2160"; process.env.DOWNLOAD_URL_TTL_SECONDS = "60"; + process.env.EVENT_SOURCE = "supplier-api"; + process.env.SNS_TOPIC_ARN = "sns-topic.arn"; const { envVars } = require("../env"); @@ -73,6 +79,8 @@ describe("lambdaEnv", () => { MI_TTL_HOURS: 2160, DOWNLOAD_URL_TTL_SECONDS: 60, MAX_LIMIT: undefined, + EVENT_SOURCE: "supplier-api", + SNS_TOPIC_ARN: "sns-topic.arn", }); }); }); diff --git a/lambdas/api-handler/src/config/deps.ts b/lambdas/api-handler/src/config/deps.ts index c8d187bf4..0c5a6fa27 100644 --- a/lambdas/api-handler/src/config/deps.ts +++ b/lambdas/api-handler/src/config/deps.ts @@ -2,6 +2,7 @@ import { S3Client } from "@aws-sdk/client-s3"; import { DynamoDBClient } from "@aws-sdk/client-dynamodb"; import { DynamoDBDocumentClient } from "@aws-sdk/lib-dynamodb"; import { SQSClient } from "@aws-sdk/client-sqs"; +import { SNSClient } from "@aws-sdk/client-sns"; import pino from "pino"; import { DBHealthcheck, @@ -13,6 +14,7 @@ import { EnvVars, envVars } from "./env"; export type Deps = { s3Client: S3Client; sqsClient: SQSClient; + snsClient: SNSClient; letterRepo: LetterRepository; miRepo: MIRepository; dbHealthcheck: DBHealthcheck; @@ -64,6 +66,7 @@ export function createDependenciesContainer(): Deps { return { s3Client: new S3Client(), sqsClient: new SQSClient(), + snsClient: new SNSClient(), letterRepo: createLetterRepository(log, envVars), miRepo: createMIRepository(log, envVars), dbHealthcheck: createDBHealthcheck(envVars), diff --git a/lambdas/api-handler/src/config/env.ts b/lambdas/api-handler/src/config/env.ts index fbdc0924d..bb1ba609a 100644 --- a/lambdas/api-handler/src/config/env.ts +++ b/lambdas/api-handler/src/config/env.ts @@ -10,6 +10,8 @@ const EnvVarsSchema = z.object({ DOWNLOAD_URL_TTL_SECONDS: z.coerce.number().int(), MAX_LIMIT: z.coerce.number().int().optional(), QUEUE_URL: z.coerce.string().optional(), + EVENT_SOURCE: z.string(), + SNS_TOPIC_ARN: z.string(), }); export type EnvVars = z.infer; diff --git a/lambdas/api-handler/src/handlers/__tests__/letter-status-update.test.ts b/lambdas/api-handler/src/handlers/__tests__/letter-status-update.test.ts index 908ba1a3d..bd267f1d8 100644 --- a/lambdas/api-handler/src/handlers/__tests__/letter-status-update.test.ts +++ b/lambdas/api-handler/src/handlers/__tests__/letter-status-update.test.ts @@ -1,13 +1,25 @@ import { Context, SQSEvent, SQSRecord } from "aws-lambda"; import { mockDeep } from "jest-mock-extended"; -import { S3Client } from "@aws-sdk/client-s3"; import pino from "pino"; -import { LetterRepository } from "@internal/datastore/src"; +import { SNSClient } from "@aws-sdk/client-sns"; +import { mapLetterToCloudEvent } from "@nhsdigital/nhs-notify-event-schemas-supplier-api/src/events/letter-mapper"; +import { Letter, LetterRepository } from "@internal/datastore/src"; import { UpdateLetterCommand } from "../../contracts/letters"; import { EnvVars } from "../../config/env"; import { Deps } from "../../config/deps"; import createLetterStatusUpdateHandler from "../letter-status-update"; +// Make crypto return consistent values, since we"re calling it in both prod and test code and comparing the values +const realCrypto = jest.requireActual("crypto"); +const randomBytes: Record = { + "8": realCrypto.randomBytes(8), + "16": realCrypto.randomBytes(16), +}; +jest.mock("crypto", () => ({ + randomUUID: () => "4616b2d9-b7a5-45aa-8523-fa7419626b69", + randomBytes: (size: number) => randomBytes[String(size)], +})); + const buildEvent = (updateLetterCommand: UpdateLetterCommand[]): SQSEvent => { const records: Partial[] = updateLetterCommand.map((letter) => { return { @@ -30,51 +42,64 @@ const buildEvent = (updateLetterCommand: UpdateLetterCommand[]): SQSEvent => { }; describe("createLetterStatusUpdateHandler", () => { - beforeEach(() => { + beforeEach(async () => { jest.clearAllMocks(); }); + const mockedDeps: jest.Mocked = { + snsClient: { send: jest.fn() } as unknown as SNSClient, + letterRepo: { + getLetterById: jest.fn(), + } as unknown as LetterRepository, + logger: { info: jest.fn(), error: jest.fn() } as unknown as pino.Logger, + env: { + EVENT_SOURCE: "supplier-api", + SNS_TOPIC_ARN: "sns_topic.arn", + } as unknown as EnvVars, + } as Deps; + + const letters: Letter[] = [ + { + id: "id1", + supplierId: "s1", + status: "PENDING", + } as Letter, + { + id: "id2", + supplierId: "s2", + status: "PENDING", + } as Letter, + { + id: "id3", + supplierId: "s3", + status: "PENDING", + } as Letter, + ]; + + const updateLetterCommands: UpdateLetterCommand[] = [ + { + ...letters[0], + status: "REJECTED", + reasonCode: "123", + reasonText: "Reason text", + }, + { ...letters[1], status: "ACCEPTED" }, + { ...letters[2], status: "DELIVERED" }, + ]; + + beforeEach(() => { + jest.useFakeTimers(); + }); + + afterEach(() => { + jest.useRealTimers(); + }); + it("processes letters successfully", async () => { - const updateLetterCommands: UpdateLetterCommand[] = [ - { - id: "id1", - status: "REJECTED", - supplierId: "s1", - reasonCode: "123", - reasonText: "Reason text", - }, - { - id: "id2", - supplierId: "s2", - status: "ACCEPTED", - }, - { - id: "id3", - supplierId: "s3", - status: "DELIVERED", - }, - ]; - - const mockedDeps: jest.Mocked = { - s3Client: {} as unknown as S3Client, - letterRepo: { - updateLetterStatus: jest - .fn() - .mockResolvedValueOnce(updateLetterCommands[0]) - .mockResolvedValueOnce(updateLetterCommands[1]) - .mockResolvedValueOnce(updateLetterCommands[2]), - } as unknown as LetterRepository, - logger: { info: jest.fn(), error: jest.fn() } as unknown as pino.Logger, - env: { - SUPPLIER_ID_HEADER: "nhsd-supplier-id", - APIM_CORRELATION_HEADER: "nhsd-correlation-id", - LETTERS_TABLE_NAME: "LETTERS_TABLE_NAME", - LETTER_TTL_HOURS: 12_960, - DOWNLOAD_URL_TTL_SECONDS: 60, - MAX_LIMIT: 2500, - QUEUE_URL: "SQS_URL", - } as unknown as EnvVars, - } as Deps; + (mockedDeps.letterRepo.getLetterById as jest.Mock) + .mockResolvedValueOnce(letters[0]) + .mockResolvedValueOnce(letters[1]) + .mockResolvedValueOnce(letters[2]); const context = mockDeep(); const callback = jest.fn(); @@ -87,70 +112,74 @@ describe("createLetterStatusUpdateHandler", () => { callback, ); - expect(mockedDeps.letterRepo.updateLetterStatus).toHaveBeenNthCalledWith( - 1, - updateLetterCommands[0], - ); - expect(mockedDeps.letterRepo.updateLetterStatus).toHaveBeenNthCalledWith( - 2, - updateLetterCommands[1], - ); - expect(mockedDeps.letterRepo.updateLetterStatus).toHaveBeenNthCalledWith( - 3, - updateLetterCommands[2], - ); + for (let i = 0; i < 3; i++) { + expect(mockedDeps.snsClient.send).toHaveBeenNthCalledWith( + i + 1, + expect.objectContaining({ + input: expect.objectContaining({ + TopicArn: mockedDeps.env.SNS_TOPIC_ARN, + Message: JSON.stringify( + mapLetterToCloudEvent( + updateLetterCommands[i] as Letter, + mockedDeps.env.EVENT_SOURCE, + ), + ), + }), + }), + ); + } }); it("logs error if error thrown when updating", async () => { const mockError = new Error("Update error"); - - const mockedDeps: jest.Mocked = { - s3Client: {} as unknown as S3Client, - letterRepo: { - updateLetterStatus: jest.fn().mockRejectedValue(mockError), - } as unknown as LetterRepository, - logger: { info: jest.fn(), error: jest.fn() } as unknown as pino.Logger, - env: { - SUPPLIER_ID_HEADER: "nhsd-supplier-id", - APIM_CORRELATION_HEADER: "nhsd-correlation-id", - LETTERS_TABLE_NAME: "LETTERS_TABLE_NAME", - LETTER_TTL_HOURS: 12_960, - DOWNLOAD_URL_TTL_SECONDS: 60, - MAX_LIMIT: 2500, - QUEUE_URL: "SQS_URL", - } as unknown as EnvVars, - } as Deps; + (mockedDeps.snsClient.send as jest.Mock).mockRejectedValue(mockError); + (mockedDeps.letterRepo.getLetterById as jest.Mock).mockResolvedValueOnce( + letters[1], + ); const context = mockDeep(); const callback = jest.fn(); - const updateLetterCommands: UpdateLetterCommand[] = [ - { - id: "id1", - status: "ACCEPTED", - supplierId: "s1", - }, - ]; - const letterStatusUpdateHandler = createLetterStatusUpdateHandler(mockedDeps); await letterStatusUpdateHandler( - buildEvent(updateLetterCommands), + buildEvent([updateLetterCommands[1]]), context, callback, ); - expect(mockedDeps.letterRepo.updateLetterStatus).toHaveBeenCalledWith( - updateLetterCommands[0], - ); expect(mockedDeps.logger.error).toHaveBeenCalledWith( { err: mockError, - messageId: "mid-id1", - correlationId: "correlationId-id1", - messageBody: '{"id":"id1","status":"ACCEPTED","supplierId":"s1"}', + messageId: "mid-id2", + correlationId: "correlationId-id2", + messageBody: '{"id":"id2","supplierId":"s2","status":"ACCEPTED"}', }, "Error processing letter status update", ); }); + + it("returns batch update failures in the response", async () => { + (mockedDeps.letterRepo.getLetterById as jest.Mock) + .mockResolvedValueOnce(letters[0]) + .mockResolvedValueOnce(letters[1]) + .mockResolvedValueOnce(letters[2]); + (mockedDeps.snsClient.send as jest.Mock).mockResolvedValueOnce({}); + (mockedDeps.snsClient.send as jest.Mock).mockRejectedValueOnce( + new Error("Update error"), + ); + (mockedDeps.snsClient.send as jest.Mock).mockResolvedValueOnce({}); + + const letterStatusUpdateHandler = + createLetterStatusUpdateHandler(mockedDeps); + const sqsBatchResponse = await letterStatusUpdateHandler( + buildEvent(updateLetterCommands), + mockDeep(), + jest.fn(), + ); + + expect(sqsBatchResponse?.batchItemFailures).toEqual([ + { itemIdentifier: "mid-id2" }, + ]); + }); }); diff --git a/lambdas/api-handler/src/handlers/letter-status-update.ts b/lambdas/api-handler/src/handlers/letter-status-update.ts index fa14e672d..8f2d6f58a 100644 --- a/lambdas/api-handler/src/handlers/letter-status-update.ts +++ b/lambdas/api-handler/src/handlers/letter-status-update.ts @@ -1,21 +1,37 @@ -import { SQSEvent, SQSHandler } from "aws-lambda"; +import { SQSBatchItemFailure, SQSEvent, SQSHandler } from "aws-lambda"; +import { PublishCommand } from "@aws-sdk/client-sns"; +import { LetterEvent } from "@nhsdigital/nhs-notify-event-schemas-supplier-api/src/events/letter-events"; +import { mapLetterToCloudEvent } from "@nhsdigital/nhs-notify-event-schemas-supplier-api/src/events/letter-mapper"; import { UpdateLetterCommand, UpdateLetterCommandSchema, } from "../contracts/letters"; import { Deps } from "../config/deps"; -import { mapToUpdateLetter } from "../mappers/letter-mapper"; export default function createLetterStatusUpdateHandler( deps: Deps, ): SQSHandler { return async (event: SQSEvent) => { + const batchItemFailures: SQSBatchItemFailure[] = []; + const tasks = event.Records.map(async (message) => { try { - const letterToUpdate: UpdateLetterCommand = + const updateLetterCommand: UpdateLetterCommand = UpdateLetterCommandSchema.parse(JSON.parse(message.body)); - await deps.letterRepo.updateLetterStatus( - mapToUpdateLetter(letterToUpdate), + const letter = await deps.letterRepo.getLetterById( + updateLetterCommand.supplierId, + updateLetterCommand.id, + ); + letter.status = updateLetterCommand.status; + letter.reasonCode = updateLetterCommand.reasonCode; + letter.reasonText = updateLetterCommand.reasonText; + + const letterEvent = mapLetterToCloudEvent( + letter, + deps.env.EVENT_SOURCE, + ); + await deps.snsClient.send( + buildSnsCommand(letterEvent, deps.env.SNS_TOPIC_ARN), ); } catch (error) { deps.logger.error( @@ -27,9 +43,22 @@ export default function createLetterStatusUpdateHandler( }, "Error processing letter status update", ); + batchItemFailures.push({ itemIdentifier: message.messageId }); } }); await Promise.all(tasks); + + return { batchItemFailures }; }; } + +function buildSnsCommand( + letterEvent: LetterEvent, + topicArn: string, +): PublishCommand { + return new PublishCommand({ + TopicArn: topicArn, + Message: JSON.stringify(letterEvent), + }); +} diff --git a/lambdas/api-handler/src/mappers/letter-mapper.ts b/lambdas/api-handler/src/mappers/letter-mapper.ts index c11d6d8c0..c31d61b34 100644 --- a/lambdas/api-handler/src/mappers/letter-mapper.ts +++ b/lambdas/api-handler/src/mappers/letter-mapper.ts @@ -1,4 +1,4 @@ -import { LetterBase, LetterStatus, UpdateLetter } from "@internal/datastore"; +import { LetterBase, LetterStatus } from "@internal/datastore"; import { GetLetterResponse, GetLetterResponseSchema, @@ -68,22 +68,6 @@ export function mapToUpdateCommands( })); } -// --------------------------------------------- -// Map letter command to repository type -// --------------------------------------------- - -export function mapToUpdateLetter( - updateLetter: UpdateLetterCommand, -): UpdateLetter { - return { - id: updateLetter.id, - supplierId: updateLetter.supplierId, - status: updateLetter.status, - reasonCode: updateLetter.reasonCode, - reasonText: updateLetter.reasonText, - }; -} - // --------------------------------------------- // Map internal datastore letter to response // --------------------------------------------- diff --git a/lambdas/letter-updates-transformer/src/__tests__/letter-updates-transformer.test.ts b/lambdas/letter-updates-transformer/src/__tests__/letter-updates-transformer.test.ts index 065a9a1e3..583ea0143 100644 --- a/lambdas/letter-updates-transformer/src/__tests__/letter-updates-transformer.test.ts +++ b/lambdas/letter-updates-transformer/src/__tests__/letter-updates-transformer.test.ts @@ -7,13 +7,12 @@ import { KinesisStreamRecordPayload, } from "aws-lambda"; import { mockDeep } from "jest-mock-extended"; -import { LetterBase } from "@internal/datastore"; +import { Letter } from "@internal/datastore"; +import { mapLetterToCloudEvent } from "@nhsdigital/nhs-notify-event-schemas-supplier-api/src/events/letter-mapper"; import createHandler from "../letter-updates-transformer"; import { Deps } from "../deps"; import { EnvVars } from "../env"; -import mapLetterToCloudEvent from "../mappers/letter-mapper"; import { LetterStatus } from "../../../api-handler/src/contracts/letters"; -import { LetterForEventPub } from "../types"; // Make crypto return consistent values, since we"re calling it in both prod and test code and comparing the values const realCrypto = jest.requireActual("crypto"); @@ -171,7 +170,7 @@ describe("letter-updates-transformer Lambda", () => { it("does not publish invalid letter data", async () => { const handler = createHandler(mockedDeps); const oldLetter = generateLetter("ACCEPTED"); - const newLetter = { id: oldLetter.id } as LetterForEventPub; + const newLetter = { id: oldLetter.id } as Letter; const testData = generateKinesisEvent([ generateModifyRecord(oldLetter, newLetter), @@ -324,7 +323,7 @@ describe("letter-updates-transformer Lambda", () => { }); }); -function generateLetter(status: LetterStatus, id?: string): LetterForEventPub { +function generateLetter(status: LetterStatus, id?: string): Letter { return { id: id || "1", status, @@ -337,14 +336,14 @@ function generateLetter(status: LetterStatus, id?: string): LetterForEventPub { url: "https://example.com/letter.pdf", source: "test-source", subject: "test-source/subject-id", + supplierStatus: `supplier1#${status}`, + supplierStatusSk: "2025-12-10T11:12:54Z#1", + ttl: 1_234_567_890, }; } -function generateLetters( - numLetters: number, - status: LetterStatus, -): LetterForEventPub[] { - const letters: LetterForEventPub[] = Array.from({ length: numLetters }); +function generateLetters(numLetters: number, status: LetterStatus): Letter[] { + const letters: Letter[] = Array.from({ length: numLetters }); for (let i = 0; i < numLetters; i++) { letters[i] = generateLetter(status, String(i + 1)); } @@ -352,31 +351,34 @@ function generateLetters( } function generateModifyRecord( - oldLetter: LetterForEventPub, - newLetter: LetterForEventPub, + oldLetter: Letter, + newLetter: Letter, ): DynamoDBRecord { - const oldImage = Object.fromEntries( - Object.entries(oldLetter).map(([key, value]) => [key, { S: value }]), - ); - const newImage = Object.fromEntries( - Object.entries(newLetter).map(([key, value]) => [key, { S: value }]), - ); + const oldImage = buildStreamImage(oldLetter); + const newImage = buildStreamImage(newLetter); return { eventName: "MODIFY", dynamodb: { OldImage: oldImage, NewImage: newImage }, }; } -function generateInsertRecord(newLetter: LetterBase): DynamoDBRecord { - const newImage = Object.fromEntries( - Object.entries(newLetter).map(([key, value]) => [key, { S: value }]), - ); +function generateInsertRecord(newLetter: Letter): DynamoDBRecord { + const newImage = buildStreamImage(newLetter); return { eventName: "INSERT", dynamodb: { NewImage: newImage }, }; } +function buildStreamImage(letter: Letter) { + return Object.fromEntries( + Object.entries(letter).map(([key, value]) => [ + key, + typeof value === "number" ? { N: String(value) } : { S: value }, + ]), + ); +} + function generateKinesisEvent(letterEvents: object[]): KinesisStreamEvent { const records = letterEvents .map((letter) => Buffer.from(JSON.stringify(letter)).toString("base64")) diff --git a/lambdas/letter-updates-transformer/src/letter-updates-transformer.ts b/lambdas/letter-updates-transformer/src/letter-updates-transformer.ts index c53151c07..c0de285d9 100644 --- a/lambdas/letter-updates-transformer/src/letter-updates-transformer.ts +++ b/lambdas/letter-updates-transformer/src/letter-updates-transformer.ts @@ -10,9 +10,9 @@ import { PublishBatchRequestEntry, } from "@aws-sdk/client-sns"; import { LetterEvent } from "@nhsdigital/nhs-notify-event-schemas-supplier-api/src"; -import mapLetterToCloudEvent from "./mappers/letter-mapper"; +import { mapLetterToCloudEvent } from "@nhsdigital/nhs-notify-event-schemas-supplier-api/src/events/letter-mapper"; +import { Letter, LetterSchema } from "@internal/datastore"; import { Deps } from "./deps"; -import { LetterForEventPub, LetterSchemaForEventPub } from "./types"; // SNS PublishBatchCommand supports up to 10 messages per batch const BATCH_SIZE = 10; @@ -109,9 +109,9 @@ function isChanged(record: DynamoDBRecord, property: string): boolean { return oldValue?.S !== newValue?.S; } -function extractNewLetter(record: DynamoDBRecord): LetterForEventPub { +function extractNewLetter(record: DynamoDBRecord): Letter { const newImage = record.dynamodb?.NewImage!; - return LetterSchemaForEventPub.parse(unmarshall(newImage as any)); + return LetterSchema.parse(unmarshall(newImage as any)); } function* generateBatches(events: LetterEvent[]) { diff --git a/lambdas/letter-updates-transformer/src/types.ts b/lambdas/letter-updates-transformer/src/types.ts deleted file mode 100644 index 34920991b..000000000 --- a/lambdas/letter-updates-transformer/src/types.ts +++ /dev/null @@ -1,10 +0,0 @@ -import { LetterSchema } from "@internal/datastore"; -import { z } from "zod"; - -export const LetterSchemaForEventPub = LetterSchema.omit({ - supplierStatus: true, - supplierStatusSk: true, - ttl: true, -}); - -export type LetterForEventPub = z.infer; diff --git a/lambdas/letter-updates-transformer/tsconfig.json b/lambdas/letter-updates-transformer/tsconfig.json index f3fa0970e..bb8177b74 100644 --- a/lambdas/letter-updates-transformer/tsconfig.json +++ b/lambdas/letter-updates-transformer/tsconfig.json @@ -1,7 +1,6 @@ { "compilerOptions": { - "esModuleInterop": true, - "resolveJsonModule": true + "esModuleInterop": true }, "extends": "../../tsconfig.base.json", "include": [ diff --git a/lambdas/mi-updates-transformer/tsconfig.json b/lambdas/mi-updates-transformer/tsconfig.json index f3fa0970e..bb8177b74 100644 --- a/lambdas/mi-updates-transformer/tsconfig.json +++ b/lambdas/mi-updates-transformer/tsconfig.json @@ -1,7 +1,6 @@ { "compilerOptions": { - "esModuleInterop": true, - "resolveJsonModule": true + "esModuleInterop": true }, "extends": "../../tsconfig.base.json", "include": [ diff --git a/tsconfig.base.json b/tsconfig.base.json index b340a8fa2..a0f424750 100644 --- a/tsconfig.base.json +++ b/tsconfig.base.json @@ -7,6 +7,7 @@ "module": "ES2020", "moduleResolution": "node", "noEmit": true, + "resolveJsonModule": true, "skipLibCheck": true, "strict": true, "target": "ES2022" From aabf50d4916eaa2108bc7373dcd7f6886e29029e Mon Sep 17 00:00:00 2001 From: Steve Buxton Date: Fri, 23 Jan 2026 15:53:07 +0000 Subject: [PATCH 02/28] Introduce idempotency: replayed update with same ID will be ignored --- .../src/__test__/letter-repository.test.ts | 53 +++++++++++++ internal/datastore/src/letter-repository.ts | 75 +++++++++++-------- internal/datastore/src/types.ts | 2 + .../handler/__tests__/upsert-handler.test.ts | 1 + .../src/handler/upsert-handler.ts | 2 + 5 files changed, 103 insertions(+), 30 deletions(-) diff --git a/internal/datastore/src/__test__/letter-repository.test.ts b/internal/datastore/src/__test__/letter-repository.test.ts index 4c44ddbe6..a634b7872 100644 --- a/internal/datastore/src/__test__/letter-repository.test.ts +++ b/internal/datastore/src/__test__/letter-repository.test.ts @@ -14,10 +14,12 @@ function createLetter( supplierId: string, letterId: string, status: Letter["status"] = "PENDING", + eventId?: string, ): InsertLetter { const now = new Date().toISOString(); return { id: letterId, + eventId, supplierId, specificationId: "specification1", groupId: "group1", @@ -168,6 +170,7 @@ describe("LetterRepository", () => { const updateLetter: UpdateLetter = { id: "letter1", + eventId: "event1", supplierId: "supplier1", status: "REJECTED", reasonCode: "R01", @@ -199,6 +202,7 @@ describe("LetterRepository", () => { jest.setSystemTime(new Date(2020, 1, 2)); const letterDto: UpdateLetter = { id: "letter1", + eventId: "event1", supplierId: "supplier1", status: "DELIVERED", }; @@ -215,6 +219,7 @@ describe("LetterRepository", () => { test("can't update a letter that does not exist", async () => { const updateLetter: UpdateLetter = { id: "letter1", + eventId: "event1", supplierId: "supplier1", status: "DELIVERED", }; @@ -233,6 +238,7 @@ describe("LetterRepository", () => { const updateLetter: UpdateLetter = { id: "letter1", + eventId: "event1", supplierId: "supplier1", status: "DELIVERED", }; @@ -241,6 +247,52 @@ describe("LetterRepository", () => { ).rejects.toThrow("Cannot do operations on a non-existent table"); }); + test("does not update a letter if the same eventId is used", async () => { + const letter = createLetter("supplier1", "letter1", "DELIVERED", "event1"); + await letterRepository.putLetter(letter); + + const duplicateUpdate: UpdateLetter = { + id: "letter1", + eventId: "event1", + supplierId: "supplier1", + status: "REJECTED", + reasonCode: "R01", + }; + const result = await letterRepository.updateLetterStatus(duplicateUpdate); + + expect(result).toBeUndefined(); + const unchangedLetter = await letterRepository.getLetterById( + "supplier1", + "letter1", + ); + expect(unchangedLetter.status).toBe("DELIVERED"); + expect(unchangedLetter.eventId).toBe("event1"); + expect(unchangedLetter.reasonCode).toBeUndefined(); + }); + + test("updates a letter if a different eventId is used", async () => { + const letter = createLetter("supplier1", "letter1", "DELIVERED", "event1"); + await letterRepository.putLetter(letter); + + const duplicateUpdate: UpdateLetter = { + id: "letter1", + eventId: "event2", + supplierId: "supplier1", + status: "REJECTED", + reasonCode: "R01", + }; + const result = await letterRepository.updateLetterStatus(duplicateUpdate); + + expect(result).toBeDefined(); + const changedLetter = await letterRepository.getLetterById( + "supplier1", + "letter1", + ); + expect(changedLetter.status).toBe("REJECTED"); + expect(changedLetter.eventId).toBe("event2"); + expect(changedLetter.reasonCode).toBe("R01"); + }); + test("should return a list of letters matching status", async () => { await letterRepository.putLetter(createLetter("supplier1", "letter1")); await letterRepository.putLetter(createLetter("supplier1", "letter2")); @@ -278,6 +330,7 @@ describe("LetterRepository", () => { const updateLetter: UpdateLetter = { id: "letter1", + eventId: "event1", supplierId: "supplier1", status: "DELIVERED", }; diff --git a/internal/datastore/src/letter-repository.ts b/internal/datastore/src/letter-repository.ts index f22868789..f9947973f 100644 --- a/internal/datastore/src/letter-repository.ts +++ b/internal/datastore/src/letter-repository.ts @@ -7,6 +7,7 @@ import { UpdateCommand, UpdateCommandOutput, } from "@aws-sdk/lib-dynamodb"; +import { ConditionalCheckFailedException } from "@aws-sdk/client-dynamodb"; import { Logger } from "pino"; import { z } from "zod"; import { @@ -163,32 +164,16 @@ export class LetterRepository { }; } - async updateLetterStatus(letterToUpdate: UpdateLetter): Promise { + async updateLetterStatus( + letterToUpdate: UpdateLetter, + ): Promise { this.log.debug( `Updating letter ${letterToUpdate.id} to status ${letterToUpdate.status}`, ); let result: UpdateCommandOutput; try { - let updateExpression = - "set #status = :status, updatedAt = :updatedAt, supplierStatus = :supplierStatus, #ttl = :ttl"; - const expressionAttributeValues: Record = { - ":status": letterToUpdate.status, - ":updatedAt": new Date().toISOString(), - ":supplierStatus": `${letterToUpdate.supplierId}#${letterToUpdate.status}`, - ":ttl": Math.floor( - Date.now() / 1000 + 60 * 60 * this.config.lettersTtlHours, - ), - }; - - if (letterToUpdate.reasonCode) { - updateExpression += ", reasonCode = :reasonCode"; - expressionAttributeValues[":reasonCode"] = letterToUpdate.reasonCode; - } - - if (letterToUpdate.reasonText) { - updateExpression += ", reasonText = :reasonText"; - expressionAttributeValues[":reasonText"] = letterToUpdate.reasonText; - } + const { expressionAttributeValues, updateExpression } = + this.buildUpdateExpression(letterToUpdate); result = await this.ddbClient.send( new UpdateCommand({ @@ -198,31 +183,61 @@ export class LetterRepository { supplierId: letterToUpdate.supplierId, }, UpdateExpression: updateExpression, - ConditionExpression: "attribute_exists(id)", // Ensure letter exists + ConditionExpression: + "attribute_exists(id) AND (attribute_not_exists(eventId) OR eventId <> :eventId)", ExpressionAttributeNames: { "#status": "status", "#ttl": "ttl", }, ExpressionAttributeValues: expressionAttributeValues, ReturnValues: "ALL_NEW", + ReturnValuesOnConditionCheckFailure: "ALL_OLD", }), ); + + this.log.debug( + `Updated letter ${letterToUpdate.id} to status ${letterToUpdate.status}`, + ); + return LetterSchema.parse(result.Attributes); } catch (error) { - if ( - error instanceof Error && - error.name === "ConditionalCheckFailedException" - ) { + if (error instanceof ConditionalCheckFailedException) { + if (error.Item?.eventId.S === letterToUpdate.eventId) { + this.log.warn( + `Skipping update for letter ${letterToUpdate.id}: eventId ${letterToUpdate.eventId} already processed`, + ); + return undefined; + } throw new Error( `Letter with id ${letterToUpdate.id} not found for supplier ${letterToUpdate.supplierId}`, ); } throw error; } + } - this.log.debug( - `Updated letter ${letterToUpdate.id} to status ${letterToUpdate.status}`, - ); - return LetterSchema.parse(result.Attributes); + private buildUpdateExpression(letterToUpdate: UpdateLetter) { + let updateExpression = + "set #status = :status, updatedAt = :updatedAt, supplierStatus = :supplierStatus, #ttl = :ttl, eventId = :eventId"; + const expressionAttributeValues: Record = { + ":status": letterToUpdate.status, + ":updatedAt": new Date().toISOString(), + ":supplierStatus": `${letterToUpdate.supplierId}#${letterToUpdate.status}`, + ":ttl": Math.floor( + Date.now() / 1000 + 60 * 60 * this.config.lettersTtlHours, + ), + ":eventId": letterToUpdate.eventId, + }; + + if (letterToUpdate.reasonCode) { + updateExpression += ", reasonCode = :reasonCode"; + expressionAttributeValues[":reasonCode"] = letterToUpdate.reasonCode; + } + + if (letterToUpdate.reasonText) { + updateExpression += ", reasonText = :reasonText"; + expressionAttributeValues[":reasonText"] = letterToUpdate.reasonText; + } + return { updateExpression, expressionAttributeValues }; } async getLettersBySupplier( diff --git a/internal/datastore/src/types.ts b/internal/datastore/src/types.ts index a0b9f719c..7e4fa7e84 100644 --- a/internal/datastore/src/types.ts +++ b/internal/datastore/src/types.ts @@ -42,6 +42,7 @@ export const LetterSchemaBase = z.object({ export const LetterSchema = LetterSchemaBase.extend({ supplierId: idRef(SupplierSchema, "id"), + eventId: z.string().optional(), url: z.url(), createdAt: z.string(), updatedAt: z.string(), @@ -67,6 +68,7 @@ export type InsertLetter = Omit< >; export type UpdateLetter = { id: string; + eventId: string; supplierId: string; status: Letter["status"]; reasonCode?: string; diff --git a/lambdas/upsert-letter/src/handler/__tests__/upsert-handler.test.ts b/lambdas/upsert-letter/src/handler/__tests__/upsert-handler.test.ts index 3f4341340..5415b2f09 100644 --- a/lambdas/upsert-letter/src/handler/__tests__/upsert-handler.test.ts +++ b/lambdas/upsert-letter/src/handler/__tests__/upsert-handler.test.ts @@ -237,6 +237,7 @@ describe("createUpsertLetterHandler", () => { const firstArg = (mockedDeps.letterRepo.putLetter as jest.Mock).mock .calls[0][0]; expect(firstArg.id).toBe("letter1"); + expect(firstArg.eventId).toBe("7b9a03ca-342a-4150-b56b-989109c45613"); expect(firstArg.supplierId).toBe("supplier1"); expect(firstArg.specificationId).toBe("spec1"); expect(firstArg.url).toBe("s3://letterDataBucket/letter1.pdf"); diff --git a/lambdas/upsert-letter/src/handler/upsert-handler.ts b/lambdas/upsert-letter/src/handler/upsert-handler.ts index a1b2ea08b..850ce9f31 100644 --- a/lambdas/upsert-letter/src/handler/upsert-handler.ts +++ b/lambdas/upsert-letter/src/handler/upsert-handler.ts @@ -74,6 +74,7 @@ function mapToInsertLetter( const now = new Date().toISOString(); return { id: upsertRequest.data.domainId, + eventId: upsertRequest.id, supplierId: supplier, status: "PENDING", specificationId: spec, @@ -93,6 +94,7 @@ function mapToInsertLetter( function mapToUpdateLetter(upsertRequest: LetterEvent): UpdateLetter { return { id: upsertRequest.data.domainId, + eventId: upsertRequest.id, supplierId: upsertRequest.data.supplierId, status: upsertRequest.data.status, reasonCode: upsertRequest.data.reasonCode, From 966f6ebc781c54b2890fefced922aff514cdcf88 Mon Sep 17 00:00:00 2001 From: Steve Buxton Date: Mon, 26 Jan 2026 14:31:34 +0000 Subject: [PATCH 03/28] Store previous status --- internal/datastore/src/__test__/letter-repository.test.ts | 1 + internal/datastore/src/letter-repository.ts | 4 ++-- internal/datastore/src/types.ts | 1 + 3 files changed, 4 insertions(+), 2 deletions(-) diff --git a/internal/datastore/src/__test__/letter-repository.test.ts b/internal/datastore/src/__test__/letter-repository.test.ts index a634b7872..193c1c077 100644 --- a/internal/datastore/src/__test__/letter-repository.test.ts +++ b/internal/datastore/src/__test__/letter-repository.test.ts @@ -183,6 +183,7 @@ describe("LetterRepository", () => { "letter1", ); expect(updatedLetter.status).toBe("REJECTED"); + expect(updatedLetter.previousStatus).toBe("PENDING"); expect(updatedLetter.reasonCode).toBe("R01"); expect(updatedLetter.reasonText).toBe("Reason text"); }); diff --git a/internal/datastore/src/letter-repository.ts b/internal/datastore/src/letter-repository.ts index f9947973f..def7c1b36 100644 --- a/internal/datastore/src/letter-repository.ts +++ b/internal/datastore/src/letter-repository.ts @@ -216,8 +216,8 @@ export class LetterRepository { } private buildUpdateExpression(letterToUpdate: UpdateLetter) { - let updateExpression = - "set #status = :status, updatedAt = :updatedAt, supplierStatus = :supplierStatus, #ttl = :ttl, eventId = :eventId"; + let updateExpression = `set #status = :status, previousStatus = #status, updatedAt = :updatedAt, supplierStatus = :supplierStatus, + #ttl = :ttl, eventId = :eventId`; const expressionAttributeValues: Record = { ":status": letterToUpdate.status, ":updatedAt": new Date().toISOString(), diff --git a/internal/datastore/src/types.ts b/internal/datastore/src/types.ts index 7e4fa7e84..fd83e0403 100644 --- a/internal/datastore/src/types.ts +++ b/internal/datastore/src/types.ts @@ -46,6 +46,7 @@ export const LetterSchema = LetterSchemaBase.extend({ url: z.url(), createdAt: z.string(), updatedAt: z.string(), + previousStatus: LetterStatus.optional(), supplierStatus: z.string().describe("Secondary index PK"), supplierStatusSk: z.string().describe("Secondary index SK"), ttl: z.int(), From 69e39076c6edc99cc099bc951f63c7cedcf35286 Mon Sep 17 00:00:00 2001 From: Steve Buxton Date: Wed, 4 Feb 2026 15:19:52 +0000 Subject: [PATCH 04/28] Add missing test following merge with main --- internal/events/src/__tests__/version.test.ts | 11 +++++++++++ .../events/src/events/__tests__/letter-mapper.test.ts | 2 +- 2 files changed, 12 insertions(+), 1 deletion(-) create mode 100644 internal/events/src/__tests__/version.test.ts diff --git a/internal/events/src/__tests__/version.test.ts b/internal/events/src/__tests__/version.test.ts new file mode 100644 index 000000000..412eef4ce --- /dev/null +++ b/internal/events/src/__tests__/version.test.ts @@ -0,0 +1,11 @@ +import { MAJOR_VERSION, VERSION } from "../version"; + +describe("version exports", () => { + it("should export MAJOR_VERSION as the first segment of the version", () => { + expect(VERSION.startsWith(`${MAJOR_VERSION}.`)).toBeTruthy(); + }); + + it("should have VERSION in semver format", () => { + expect(VERSION).toMatch(/^\d+\.\d+\.\d+$/); + }); +}); diff --git a/internal/events/src/events/__tests__/letter-mapper.test.ts b/internal/events/src/events/__tests__/letter-mapper.test.ts index 0166ac96d..c870dc91b 100644 --- a/internal/events/src/events/__tests__/letter-mapper.test.ts +++ b/internal/events/src/events/__tests__/letter-mapper.test.ts @@ -1,6 +1,6 @@ import { $LetterEvent } from "@nhsdigital/nhs-notify-event-schemas-supplier-api/src"; import { Letter } from "@internal/datastore"; -import { mapLetterToCloudEvent } from "../letter-mapper"; +import { mapLetterToCloudEvent } from "@nhsdigital/nhs-notify-event-schemas-supplier-api/src/events/letter-mapper"; describe("letter-mapper", () => { it("maps a letter to a letter event", async () => { From 7dd6ceacdeef1c518b265252a778d17cb0433a6c Mon Sep 17 00:00:00 2001 From: Steve Buxton Date: Fri, 6 Feb 2026 10:38:26 +0000 Subject: [PATCH 05/28] Bump test version --- internal/events/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/internal/events/package.json b/internal/events/package.json index f8d819273..51fee7656 100644 --- a/internal/events/package.json +++ b/internal/events/package.json @@ -51,5 +51,5 @@ "typecheck": "tsc --noEmit" }, "types": "dist/index.d.ts", - "version": "1.0.10" + "version": "1.0.11" } From a93033c645271f4a3a0a01ade90c340984d6ef2d Mon Sep 17 00:00:00 2001 From: Steve Buxton Date: Fri, 6 Feb 2026 10:46:38 +0000 Subject: [PATCH 06/28] Re-enable event auditing --- infrastructure/terraform/components/api/README.md | 2 +- infrastructure/terraform/components/api/variables.tf | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/infrastructure/terraform/components/api/README.md b/infrastructure/terraform/components/api/README.md index 01fe4c4be..d91c28279 100644 --- a/infrastructure/terraform/components/api/README.md +++ b/infrastructure/terraform/components/api/README.md @@ -18,7 +18,7 @@ No requirements. | [default\_tags](#input\_default\_tags) | A map of default tags to apply to all taggable resources within the component | `map(string)` | `{}` | no | | [disable\_gateway\_execute\_endpoint](#input\_disable\_gateway\_execute\_endpoint) | Disable the execution endpoint for the API Gateway | `bool` | `true` | no | | [enable\_api\_data\_trace](#input\_enable\_api\_data\_trace) | Enable API Gateway data trace logging | `bool` | `false` | no | -| [enable\_event\_cache](#input\_enable\_event\_cache) | Enable caching of events to an S3 bucket | `bool` | `false` | no | +| [enable\_event\_cache](#input\_enable\_event\_cache) | Enable caching of events to an S3 bucket | `bool` | `true` | no | | [enable\_sns\_delivery\_logging](#input\_enable\_sns\_delivery\_logging) | Enable SNS Delivery Failure Notifications | `bool` | `false` | no | | [environment](#input\_environment) | The name of the tfscaffold environment | `string` | n/a | yes | | [eventpub\_control\_plane\_bus\_arn](#input\_eventpub\_control\_plane\_bus\_arn) | ARN of the EventBridge control plane bus for eventpub | `string` | `""` | no | diff --git a/infrastructure/terraform/components/api/variables.tf b/infrastructure/terraform/components/api/variables.tf index 47928a960..2439d69f2 100644 --- a/infrastructure/terraform/components/api/variables.tf +++ b/infrastructure/terraform/components/api/variables.tf @@ -167,7 +167,7 @@ variable "core_environment" { variable "enable_event_cache" { type = bool description = "Enable caching of events to an S3 bucket" - default = false + default = true } variable "enable_sns_delivery_logging" { From 92b45c77d3b17c5370db9f539b485914651bb69f Mon Sep 17 00:00:00 2001 From: David Wass Date: Thu, 5 Feb 2026 08:40:17 +0000 Subject: [PATCH 07/28] CVE-2026-25547 --- package-lock.json | 6 +++--- package.json | 1 + 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/package-lock.json b/package-lock.json index b52939b16..2150861f1 100644 --- a/package-lock.json +++ b/package-lock.json @@ -4212,9 +4212,9 @@ } }, "node_modules/@isaacs/brace-expansion": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/@isaacs/brace-expansion/-/brace-expansion-5.0.0.tgz", - "integrity": "sha512-ZT55BDLV0yv0RBm2czMiZ+SqCGO7AvmOM3G/w2xhVPH+te0aKgFjmBvGlL1dH+ql2tgGO3MVrbb3jCKyvpgnxA==", + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/@isaacs/brace-expansion/-/brace-expansion-5.0.1.tgz", + "integrity": "sha512-WMz71T1JS624nWj2n2fnYAuPovhv7EUhk69R6i9dsVyzxt5eM3bjwvgk9L+APE1TRscGysAVMANkB0jh0LQZrQ==", "dev": true, "license": "MIT", "dependencies": { diff --git a/package.json b/package.json index 833dc5d46..5277328d6 100644 --- a/package.json +++ b/package.json @@ -52,6 +52,7 @@ "name": "nhs-notify-supplier-api", "overrides": { "fast-xml-parser": "^5.3.4", + "@isaacs/brace-expansion": "^5.0.1", "pretty-format": { "react-is": "19.0.0" }, From d11f96fd1cebd9969c70e6878ce971145dce8b64 Mon Sep 17 00:00:00 2001 From: Steve Buxton Date: Mon, 9 Feb 2026 15:14:33 +0000 Subject: [PATCH 08/28] Post merge clean up --- lambdas/api-handler/package.json | 4 +- .../src/letter-updates-transformer.ts | 1 - package-lock.json | 50 ++++++++++++++++++- 3 files changed, 49 insertions(+), 6 deletions(-) diff --git a/lambdas/api-handler/package.json b/lambdas/api-handler/package.json index 3b37f48c5..b5ef4904d 100644 --- a/lambdas/api-handler/package.json +++ b/lambdas/api-handler/package.json @@ -9,10 +9,8 @@ "@internal/datastore": "*", "@internal/helpers": "*", "@nhsdigital/nhs-notify-event-schemas-supplier-api": "*", - "aws-lambda": "^1.0.7", - "esbuild": "^0.25.11", "aws-embedded-metrics": "^4.2.1", - "aws-lambda": "^1.0.6", + "aws-lambda": "^1.0.7", "esbuild": "0.27.2", "pino": "^9.7.0", "zod": "^4.1.11" diff --git a/lambdas/letter-updates-transformer/src/letter-updates-transformer.ts b/lambdas/letter-updates-transformer/src/letter-updates-transformer.ts index 0f4871bbf..022a634e4 100644 --- a/lambdas/letter-updates-transformer/src/letter-updates-transformer.ts +++ b/lambdas/letter-updates-transformer/src/letter-updates-transformer.ts @@ -13,7 +13,6 @@ import { LetterEvent } from "@nhsdigital/nhs-notify-event-schemas-supplier-api/s import { mapLetterToCloudEvent } from "@nhsdigital/nhs-notify-event-schemas-supplier-api/src/events/letter-mapper"; import { Letter, LetterSchema } from "@internal/datastore"; import { MetricsLogger, Unit, metricScope } from "aws-embedded-metrics"; -import mapLetterToCloudEvent from "./mappers/letter-mapper"; import { Deps } from "./deps"; // SNS PublishBatchCommand supports up to 10 messages per batch diff --git a/package-lock.json b/package-lock.json index ad4d169f8..536f0ccc3 100644 --- a/package-lock.json +++ b/package-lock.json @@ -127,10 +127,11 @@ }, "internal/events": { "name": "@nhsdigital/nhs-notify-event-schemas-supplier-api", - "version": "1.0.10", + "version": "1.0.11", "license": "MIT", "dependencies": { "@asyncapi/bundler": "^0.6.4", + "@internal/datastore": "*", "zod": "^4.1.11" }, "devDependencies": { @@ -175,13 +176,15 @@ "dependencies": { "@aws-sdk/client-dynamodb": "^3.981.0", "@aws-sdk/client-s3": "^3.925.0", + "@aws-sdk/client-sns": "^3.925.0", "@aws-sdk/client-sqs": "^3.925.0", "@aws-sdk/lib-dynamodb": "^3.925.0", "@aws-sdk/s3-request-presigner": "^3.925.0", "@internal/datastore": "*", "@internal/helpers": "*", + "@nhsdigital/nhs-notify-event-schemas-supplier-api": "*", "aws-embedded-metrics": "^4.2.1", - "aws-lambda": "^1.0.6", + "aws-lambda": "^1.0.7", "esbuild": "0.27.2", "pino": "^9.7.0", "zod": "^4.1.11" @@ -197,6 +200,49 @@ "zod": "^4.1.11" } }, + "lambdas/api-handler/node_modules/argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "license": "MIT", + "dependencies": { + "sprintf-js": "~1.0.2" + } + }, + "lambdas/api-handler/node_modules/aws-lambda": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/aws-lambda/-/aws-lambda-1.0.7.tgz", + "integrity": "sha512-9GNFMRrEMG5y3Jvv+V4azWvc+qNWdWLTjDdhf/zgMlz8haaaLWv0xeAIWxz9PuWUBawsVxy0zZotjCdR3Xq+2w==", + "license": "MIT", + "dependencies": { + "aws-sdk": "^2.814.0", + "commander": "^3.0.2", + "js-yaml": "^3.14.1", + "watchpack": "^2.0.0-beta.10" + }, + "bin": { + "lambda": "bin/lambda" + } + }, + "lambdas/api-handler/node_modules/commander": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/commander/-/commander-3.0.2.tgz", + "integrity": "sha512-Gar0ASD4BDyKC4hl4DwHqDrmvjoxWKZigVnAbn5H1owvm4CxCPdb0HQDehwNYMJpla5+M2tPmPARzhtYuwpHow==", + "license": "MIT" + }, + "lambdas/api-handler/node_modules/js-yaml": { + "version": "3.14.2", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.2.tgz", + "integrity": "sha512-PMSmkqxr106Xa156c2M265Z+FTrPl+oxd/rgOQy2tijQeK5TxQ43psO1ZCwhVOSdnn+RzkzlRz/eY4BgJBYVpg==", + "license": "MIT", + "dependencies": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, "lambdas/api-handler/node_modules/pino": { "version": "9.14.0", "resolved": "https://registry.npmjs.org/pino/-/pino-9.14.0.tgz", From 6e27c49170eedcb4c0cac18a17a20b34ae5ee019 Mon Sep 17 00:00:00 2001 From: Steve Buxton Date: Wed, 11 Feb 2026 11:28:46 +0000 Subject: [PATCH 09/28] Upgrade event schema version --- internal/events/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/internal/events/package.json b/internal/events/package.json index 3e81482db..4da8a4861 100644 --- a/internal/events/package.json +++ b/internal/events/package.json @@ -51,5 +51,5 @@ "typecheck": "tsc --noEmit" }, "types": "dist/index.d.ts", - "version": "1.0.11" + "version": "1.0.12" } From 630d113f3e01409ac9f3f8dd5e8d6d18165728dd Mon Sep 17 00:00:00 2001 From: Steve Buxton Date: Mon, 9 Feb 2026 16:09:52 +0000 Subject: [PATCH 10/28] Renamed queue and lambda --- .../terraform/components/api/README.md | 4 ++-- ...ource_mapping_status_updates_to_handler.tf | 8 ++++---- ...ent_source_mapping_letter_status_update.tf | 6 +++--- ...ule_lambda_amendment_event_transformer.tf} | 12 +++++------ .../api/module_lambda_patch_letter.tf | 4 ++-- .../api/module_lambda_post_letters.tf | 4 ++-- ...us_updates.tf => module_sqs_amendments.tf} | 6 +++--- .../terraform/components/api/moved.tf | 11 ++++++++++ ...ts => amendment-event-transformer.test.ts} | 20 +++++++++---------- ...date.ts => amendment-event-transformer.ts} | 2 +- lambdas/api-handler/src/index.ts | 5 +++-- 11 files changed, 47 insertions(+), 35 deletions(-) rename infrastructure/terraform/components/api/{module_lambda_letter_status_update.tf => module_lambda_amendment_event_transformer.tf} (86%) rename infrastructure/terraform/components/api/{module_sqs_letter_status_updates.tf => module_sqs_amendments.tf} (72%) create mode 100644 infrastructure/terraform/components/api/moved.tf rename lambdas/api-handler/src/handlers/__tests__/{letter-status-update.test.ts => amendment-event-transformer.test.ts} (90%) rename lambdas/api-handler/src/handlers/{letter-status-update.ts => amendment-event-transformer.ts} (97%) diff --git a/infrastructure/terraform/components/api/README.md b/infrastructure/terraform/components/api/README.md index d91c28279..29f18ba61 100644 --- a/infrastructure/terraform/components/api/README.md +++ b/infrastructure/terraform/components/api/README.md @@ -42,6 +42,8 @@ No requirements. | Name | Source | Version | |------|--------|---------| +| [amendment\_event\_transformer](#module\_amendment\_event\_transformer) | https://github.com/NHSDigital/nhs-notify-shared-modules/releases/download/v2.0.29/terraform-lambda.zip | n/a | +| [amendments\_queue](#module\_amendments\_queue) | https://github.com/NHSDigital/nhs-notify-shared-modules/releases/download/v2.0.24/terraform-sqs.zip | n/a | | [authorizer\_lambda](#module\_authorizer\_lambda) | https://github.com/NHSDigital/nhs-notify-shared-modules/releases/download/v2.0.29/terraform-lambda.zip | n/a | | [domain\_truststore](#module\_domain\_truststore) | https://github.com/NHSDigital/nhs-notify-shared-modules/releases/download/v2.0.26/terraform-s3bucket.zip | n/a | | [eventpub](#module\_eventpub) | https://github.com/NHSDigital/nhs-notify-shared-modules/releases/download/v2.0.26/terraform-eventpub.zip | n/a | @@ -51,8 +53,6 @@ No requirements. | [get\_letters](#module\_get\_letters) | https://github.com/NHSDigital/nhs-notify-shared-modules/releases/download/v2.0.29/terraform-lambda.zip | n/a | | [get\_status](#module\_get\_status) | https://github.com/NHSDigital/nhs-notify-shared-modules/releases/download/v2.0.29/terraform-lambda.zip | n/a | | [kms](#module\_kms) | https://github.com/NHSDigital/nhs-notify-shared-modules/releases/download/v2.0.26/terraform-kms.zip | n/a | -| [letter\_status\_update](#module\_letter\_status\_update) | https://github.com/NHSDigital/nhs-notify-shared-modules/releases/download/v2.0.29/terraform-lambda.zip | n/a | -| [letter\_status\_updates\_queue](#module\_letter\_status\_updates\_queue) | https://github.com/NHSDigital/nhs-notify-shared-modules/releases/download/v2.0.24/terraform-sqs.zip | n/a | | [letter\_updates\_transformer](#module\_letter\_updates\_transformer) | https://github.com/NHSDigital/nhs-notify-shared-modules/releases/download/v2.0.29/terraform-lambda.zip | n/a | | [logging\_bucket](#module\_logging\_bucket) | https://github.com/NHSDigital/nhs-notify-shared-modules/releases/download/v2.0.26/terraform-s3bucket.zip | n/a | | [mi\_updates\_transformer](#module\_mi\_updates\_transformer) | https://github.com/NHSDigital/nhs-notify-shared-modules/releases/download/v2.0.26/terraform-lambda.zip | n/a | diff --git a/infrastructure/terraform/components/api/event_source_mapping_status_updates_to_handler.tf b/infrastructure/terraform/components/api/event_source_mapping_status_updates_to_handler.tf index ab3634c43..71ecd8085 100644 --- a/infrastructure/terraform/components/api/event_source_mapping_status_updates_to_handler.tf +++ b/infrastructure/terraform/components/api/event_source_mapping_status_updates_to_handler.tf @@ -1,12 +1,12 @@ resource "aws_lambda_event_source_mapping" "status_updates_sqs_to_status_update_handler" { - event_source_arn = module.letter_status_updates_queue.sqs_queue_arn - function_name = module.letter_status_update.function_arn + event_source_arn = module.amendments_queue.sqs_queue_arn + function_name = module.amendment_event_transformer.function_arn batch_size = 10 maximum_batching_window_in_seconds = 1 scaling_config { maximum_concurrency = 10 } depends_on = [ - module.letter_status_updates_queue, # ensures queue exists - module.letter_status_update # ensures update handler exists + module.amendments_queue, # ensures queue exists + module.amendment_event_transformer # ensures update handler exists ] } diff --git a/infrastructure/terraform/components/api/lambda_event_source_mapping_letter_status_update.tf b/infrastructure/terraform/components/api/lambda_event_source_mapping_letter_status_update.tf index 82e1c54df..ffbf4bf8e 100644 --- a/infrastructure/terraform/components/api/lambda_event_source_mapping_letter_status_update.tf +++ b/infrastructure/terraform/components/api/lambda_event_source_mapping_letter_status_update.tf @@ -1,6 +1,6 @@ -resource "aws_lambda_event_source_mapping" "letter_status_update" { - event_source_arn = module.letter_status_updates_queue.sqs_queue_arn - function_name = module.letter_status_update.function_name +resource "aws_lambda_event_source_mapping" "amendment_event_transformer" { + event_source_arn = module.amendments_queue.sqs_queue_arn + function_name = module.amendment_event_transformer.function_name batch_size = 10 maximum_batching_window_in_seconds = 5 function_response_types = [ diff --git a/infrastructure/terraform/components/api/module_lambda_letter_status_update.tf b/infrastructure/terraform/components/api/module_lambda_amendment_event_transformer.tf similarity index 86% rename from infrastructure/terraform/components/api/module_lambda_letter_status_update.tf rename to infrastructure/terraform/components/api/module_lambda_amendment_event_transformer.tf index 059ef6699..2c4cbf82f 100644 --- a/infrastructure/terraform/components/api/module_lambda_letter_status_update.tf +++ b/infrastructure/terraform/components/api/module_lambda_amendment_event_transformer.tf @@ -1,7 +1,7 @@ -module "letter_status_update" { +module "amendment_event_transformer" { source = "https://github.com/NHSDigital/nhs-notify-shared-modules/releases/download/v2.0.29/terraform-lambda.zip" - function_name = "letter_status_update" + function_name = "amendment_event_transformer" description = "Processes letter status updates" aws_account_id = var.aws_account_id @@ -15,14 +15,14 @@ module "letter_status_update" { kms_key_arn = module.kms.key_arn iam_policy_document = { - body = data.aws_iam_policy_document.letter_status_update.json + body = data.aws_iam_policy_document.amendment_event_transformer.json } function_s3_bucket = local.acct.s3_buckets["lambda_function_artefacts"]["id"] function_code_base_path = local.aws_lambda_functions_dir_path function_code_dir = "api-handler/dist" function_include_common = true - handler_function_name = "letterStatusUpdate" + handler_function_name = "transformAmendmentEvent" runtime = "nodejs22.x" memory = 512 timeout = 29 @@ -37,7 +37,7 @@ module "letter_status_update" { lambda_env_vars = merge(local.common_lambda_env_vars, {}) } -data "aws_iam_policy_document" "letter_status_update" { +data "aws_iam_policy_document" "amendment_event_transformer" { statement { sid = "KMSPermissions" effect = "Allow" @@ -78,7 +78,7 @@ data "aws_iam_policy_document" "letter_status_update" { ] resources = [ - module.letter_status_updates_queue.sqs_queue_arn + module.amendments_queue.sqs_queue_arn ] } diff --git a/infrastructure/terraform/components/api/module_lambda_patch_letter.tf b/infrastructure/terraform/components/api/module_lambda_patch_letter.tf index d10e8f240..0298e0887 100644 --- a/infrastructure/terraform/components/api/module_lambda_patch_letter.tf +++ b/infrastructure/terraform/components/api/module_lambda_patch_letter.tf @@ -35,7 +35,7 @@ module "patch_letter" { log_subscription_role_arn = local.acct.log_subscription_role_arn lambda_env_vars = merge(local.common_lambda_env_vars, { - QUEUE_URL = module.letter_status_updates_queue.sqs_queue_url + QUEUE_URL = module.amendments_queue.sqs_queue_url }) } @@ -64,7 +64,7 @@ data "aws_iam_policy_document" "patch_letter_lambda" { ] resources = [ - module.letter_status_updates_queue.sqs_queue_arn + module.amendments_queue.sqs_queue_arn ] } } diff --git a/infrastructure/terraform/components/api/module_lambda_post_letters.tf b/infrastructure/terraform/components/api/module_lambda_post_letters.tf index 79b3b3f0b..55865da34 100644 --- a/infrastructure/terraform/components/api/module_lambda_post_letters.tf +++ b/infrastructure/terraform/components/api/module_lambda_post_letters.tf @@ -35,7 +35,7 @@ module "post_letters" { log_subscription_role_arn = local.acct.log_subscription_role_arn lambda_env_vars = merge(local.common_lambda_env_vars, { - QUEUE_URL = module.letter_status_updates_queue.sqs_queue_url, + QUEUE_URL = module.amendments_queue.sqs_queue_url, MAX_LIMIT = var.max_get_limit }) } @@ -65,7 +65,7 @@ data "aws_iam_policy_document" "post_letters" { ] resources = [ - module.letter_status_updates_queue.sqs_queue_arn + module.amendments_queue.sqs_queue_arn ] } } diff --git a/infrastructure/terraform/components/api/module_sqs_letter_status_updates.tf b/infrastructure/terraform/components/api/module_sqs_amendments.tf similarity index 72% rename from infrastructure/terraform/components/api/module_sqs_letter_status_updates.tf rename to infrastructure/terraform/components/api/module_sqs_amendments.tf index a604faaf5..264441e55 100644 --- a/infrastructure/terraform/components/api/module_sqs_letter_status_updates.tf +++ b/infrastructure/terraform/components/api/module_sqs_amendments.tf @@ -1,8 +1,8 @@ -# Queue to transport update letter status messages -module "letter_status_updates_queue" { +# Queue to transport letter status amendment messages +module "amendments_queue" { source = "https://github.com/NHSDigital/nhs-notify-shared-modules/releases/download/v2.0.24/terraform-sqs.zip" - name = "letter_status_updates_queue" + name = "amendments_queue" aws_account_id = var.aws_account_id component = var.component diff --git a/infrastructure/terraform/components/api/moved.tf b/infrastructure/terraform/components/api/moved.tf new file mode 100644 index 000000000..c0e2e7d2c --- /dev/null +++ b/infrastructure/terraform/components/api/moved.tf @@ -0,0 +1,11 @@ +# Moved blocks to handle resource renames without destroy/recreate + +moved { + from = module.letter_status_updates_queue + to = module.amendments_queue +} + +moved { + from = module.letter_status_update + to = module.amendment_event_transformer +} diff --git a/lambdas/api-handler/src/handlers/__tests__/letter-status-update.test.ts b/lambdas/api-handler/src/handlers/__tests__/amendment-event-transformer.test.ts similarity index 90% rename from lambdas/api-handler/src/handlers/__tests__/letter-status-update.test.ts rename to lambdas/api-handler/src/handlers/__tests__/amendment-event-transformer.test.ts index b859ab409..cce00574c 100644 --- a/lambdas/api-handler/src/handlers/__tests__/letter-status-update.test.ts +++ b/lambdas/api-handler/src/handlers/__tests__/amendment-event-transformer.test.ts @@ -7,7 +7,7 @@ import { Letter, LetterRepository } from "@internal/datastore/src"; import { UpdateLetterCommand } from "../../contracts/letters"; import { EnvVars } from "../../config/env"; import { Deps } from "../../config/deps"; -import createLetterStatusUpdateHandler from "../letter-status-update"; +import createTransformAmendmentEventHandler from "../amendment-event-transformer"; // Make crypto return consistent values, since we"re calling it in both prod and test code and comparing the values const realCrypto = jest.requireActual("crypto"); @@ -104,9 +104,9 @@ describe("createLetterStatusUpdateHandler", () => { const context = mockDeep(); const callback = jest.fn(); - const letterStatusUpdateHandler = - createLetterStatusUpdateHandler(mockedDeps); - await letterStatusUpdateHandler( + const transformAmendmentEventHandler = + createTransformAmendmentEventHandler(mockedDeps); + await transformAmendmentEventHandler( buildEvent(updateLetterCommands), context, callback, @@ -140,9 +140,9 @@ describe("createLetterStatusUpdateHandler", () => { const context = mockDeep(); const callback = jest.fn(); - const letterStatusUpdateHandler = - createLetterStatusUpdateHandler(mockedDeps); - await letterStatusUpdateHandler( + const transformAmendmentEventHandler = + createTransformAmendmentEventHandler(mockedDeps); + await transformAmendmentEventHandler( buildEvent([updateLetterCommands[1]]), context, callback, @@ -168,9 +168,9 @@ describe("createLetterStatusUpdateHandler", () => { ); (mockedDeps.snsClient.send as jest.Mock).mockResolvedValueOnce({}); - const letterStatusUpdateHandler = - createLetterStatusUpdateHandler(mockedDeps); - const sqsBatchResponse = await letterStatusUpdateHandler( + const transformAmendmentEventHandler = + createTransformAmendmentEventHandler(mockedDeps); + const sqsBatchResponse = await transformAmendmentEventHandler( buildEvent(updateLetterCommands), mockDeep(), jest.fn(), diff --git a/lambdas/api-handler/src/handlers/letter-status-update.ts b/lambdas/api-handler/src/handlers/amendment-event-transformer.ts similarity index 97% rename from lambdas/api-handler/src/handlers/letter-status-update.ts rename to lambdas/api-handler/src/handlers/amendment-event-transformer.ts index e9a24bac1..2ae233332 100644 --- a/lambdas/api-handler/src/handlers/letter-status-update.ts +++ b/lambdas/api-handler/src/handlers/amendment-event-transformer.ts @@ -8,7 +8,7 @@ import { } from "../contracts/letters"; import { Deps } from "../config/deps"; -export default function createLetterStatusUpdateHandler( +export default function createTransformAmendmentEventHandler( deps: Deps, ): SQSHandler { return async (event: SQSEvent) => { diff --git a/lambdas/api-handler/src/index.ts b/lambdas/api-handler/src/index.ts index 3a006e48d..573be050d 100644 --- a/lambdas/api-handler/src/index.ts +++ b/lambdas/api-handler/src/index.ts @@ -4,7 +4,7 @@ import createGetLetterDataHandler from "./handlers/get-letter-data"; import createGetLettersHandler from "./handlers/get-letters"; import createPatchLetterHandler from "./handlers/patch-letter"; import createPostLettersHandler from "./handlers/post-letters"; -import createLetterStatusUpdateHandler from "./handlers/letter-status-update"; +import createTransformAmendmentEventHandler from "./handlers/amendment-event-transformer"; import createPostMIHandler from "./handlers/post-mi"; import createGetStatusHandler from "./handlers/get-status"; @@ -14,7 +14,8 @@ export const getLetter = createGetLetterHandler(container); export const getLetterData = createGetLetterDataHandler(container); export const getLetters = createGetLettersHandler(container); export const patchLetter = createPatchLetterHandler(container); -export const letterStatusUpdate = createLetterStatusUpdateHandler(container); +export const transformAmendmentEvent = + createTransformAmendmentEventHandler(container); export const postLetters = createPostLettersHandler(container); export const postMI = createPostMIHandler(container); From 887fe3a99ad0f4f582d2a746cc098830b7d3da57 Mon Sep 17 00:00:00 2001 From: Steve Buxton Date: Thu, 12 Feb 2026 11:18:27 +0000 Subject: [PATCH 11/28] Removed moved blocks, keep existing queue but starve it --- .../terraform/components/api/README.md | 1 + .../lambda_event_source_mapping_amendments.tf | 9 +++++++++ ...event_source_mapping_letter_status_update.tf | 4 ++-- ...module_lambda_amendment_event_transformer.tf | 3 ++- .../api/module_sqs_letter_status_updates.tf | 17 +++++++++++++++++ .../terraform/components/api/moved.tf | 11 ----------- 6 files changed, 31 insertions(+), 14 deletions(-) create mode 100644 infrastructure/terraform/components/api/lambda_event_source_mapping_amendments.tf create mode 100644 infrastructure/terraform/components/api/module_sqs_letter_status_updates.tf delete mode 100644 infrastructure/terraform/components/api/moved.tf diff --git a/infrastructure/terraform/components/api/README.md b/infrastructure/terraform/components/api/README.md index 29f18ba61..93b22cb65 100644 --- a/infrastructure/terraform/components/api/README.md +++ b/infrastructure/terraform/components/api/README.md @@ -53,6 +53,7 @@ No requirements. | [get\_letters](#module\_get\_letters) | https://github.com/NHSDigital/nhs-notify-shared-modules/releases/download/v2.0.29/terraform-lambda.zip | n/a | | [get\_status](#module\_get\_status) | https://github.com/NHSDigital/nhs-notify-shared-modules/releases/download/v2.0.29/terraform-lambda.zip | n/a | | [kms](#module\_kms) | https://github.com/NHSDigital/nhs-notify-shared-modules/releases/download/v2.0.26/terraform-kms.zip | n/a | +| [letter\_status\_updates\_queue](#module\_letter\_status\_updates\_queue) | https://github.com/NHSDigital/nhs-notify-shared-modules/releases/download/v2.0.24/terraform-sqs.zip | n/a | | [letter\_updates\_transformer](#module\_letter\_updates\_transformer) | https://github.com/NHSDigital/nhs-notify-shared-modules/releases/download/v2.0.29/terraform-lambda.zip | n/a | | [logging\_bucket](#module\_logging\_bucket) | https://github.com/NHSDigital/nhs-notify-shared-modules/releases/download/v2.0.26/terraform-s3bucket.zip | n/a | | [mi\_updates\_transformer](#module\_mi\_updates\_transformer) | https://github.com/NHSDigital/nhs-notify-shared-modules/releases/download/v2.0.26/terraform-lambda.zip | n/a | diff --git a/infrastructure/terraform/components/api/lambda_event_source_mapping_amendments.tf b/infrastructure/terraform/components/api/lambda_event_source_mapping_amendments.tf new file mode 100644 index 000000000..ffbf4bf8e --- /dev/null +++ b/infrastructure/terraform/components/api/lambda_event_source_mapping_amendments.tf @@ -0,0 +1,9 @@ +resource "aws_lambda_event_source_mapping" "amendment_event_transformer" { + event_source_arn = module.amendments_queue.sqs_queue_arn + function_name = module.amendment_event_transformer.function_name + batch_size = 10 + maximum_batching_window_in_seconds = 5 + function_response_types = [ + "ReportBatchItemFailures" + ] +} diff --git a/infrastructure/terraform/components/api/lambda_event_source_mapping_letter_status_update.tf b/infrastructure/terraform/components/api/lambda_event_source_mapping_letter_status_update.tf index ffbf4bf8e..5813b8e3d 100644 --- a/infrastructure/terraform/components/api/lambda_event_source_mapping_letter_status_update.tf +++ b/infrastructure/terraform/components/api/lambda_event_source_mapping_letter_status_update.tf @@ -1,5 +1,5 @@ -resource "aws_lambda_event_source_mapping" "amendment_event_transformer" { - event_source_arn = module.amendments_queue.sqs_queue_arn +resource "aws_lambda_event_source_mapping" "letter_status_update" { + event_source_arn = module.letter_status_updates_queue.sqs_queue_arn function_name = module.amendment_event_transformer.function_name batch_size = 10 maximum_batching_window_in_seconds = 5 diff --git a/infrastructure/terraform/components/api/module_lambda_amendment_event_transformer.tf b/infrastructure/terraform/components/api/module_lambda_amendment_event_transformer.tf index 2c4cbf82f..d26d6d4f6 100644 --- a/infrastructure/terraform/components/api/module_lambda_amendment_event_transformer.tf +++ b/infrastructure/terraform/components/api/module_lambda_amendment_event_transformer.tf @@ -78,7 +78,8 @@ data "aws_iam_policy_document" "amendment_event_transformer" { ] resources = [ - module.amendments_queue.sqs_queue_arn + module.letter_status_updates_queue.sqs_queue_arn, + module.amendments_queue.sqs_queue_arn, ] } diff --git a/infrastructure/terraform/components/api/module_sqs_letter_status_updates.tf b/infrastructure/terraform/components/api/module_sqs_letter_status_updates.tf new file mode 100644 index 000000000..4d2c581b1 --- /dev/null +++ b/infrastructure/terraform/components/api/module_sqs_letter_status_updates.tf @@ -0,0 +1,17 @@ +# Queue to transport update letter status messages. Now replaced by module.amendments_queue. +# This queue will not be removed just yet, to allow it to be drained following the release in which module.amendments_queue replaces it. +module "letter_status_updates_queue" { + source = "https://github.com/NHSDigital/nhs-notify-shared-modules/releases/download/v2.0.24/terraform-sqs.zip" + + name = "letter_status_updates_queue" + + aws_account_id = var.aws_account_id + component = var.component + environment = var.environment + project = var.project + region = var.region + + sqs_kms_key_arn = module.kms.key_arn + + create_dlq = true +} diff --git a/infrastructure/terraform/components/api/moved.tf b/infrastructure/terraform/components/api/moved.tf deleted file mode 100644 index c0e2e7d2c..000000000 --- a/infrastructure/terraform/components/api/moved.tf +++ /dev/null @@ -1,11 +0,0 @@ -# Moved blocks to handle resource renames without destroy/recreate - -moved { - from = module.letter_status_updates_queue - to = module.amendments_queue -} - -moved { - from = module.letter_status_update - to = module.amendment_event_transformer -} From c8e17b90a5f4b464d215cc79b6abe7c74fd71405 Mon Sep 17 00:00:00 2001 From: David Wass Date: Thu, 5 Feb 2026 11:58:56 +0000 Subject: [PATCH 12/28] CCM-13399 Allocated letters queue --- .../terraform/components/api/README.md | 1 + .../api/module_sqs_allocated_letters.tf | 16 ++++++++++++++++ 2 files changed, 17 insertions(+) create mode 100644 infrastructure/terraform/components/api/module_sqs_allocated_letters.tf diff --git a/infrastructure/terraform/components/api/README.md b/infrastructure/terraform/components/api/README.md index c346bf431..d1a84b047 100644 --- a/infrastructure/terraform/components/api/README.md +++ b/infrastructure/terraform/components/api/README.md @@ -62,6 +62,7 @@ No requirements. | [post\_letters](#module\_post\_letters) | https://github.com/NHSDigital/nhs-notify-shared-modules/releases/download/v2.0.29/terraform-lambda.zip | n/a | | [post\_mi](#module\_post\_mi) | https://github.com/NHSDigital/nhs-notify-shared-modules/releases/download/v2.0.29/terraform-lambda.zip | n/a | | [s3bucket\_test\_letters](#module\_s3bucket\_test\_letters) | https://github.com/NHSDigital/nhs-notify-shared-modules/releases/download/v2.0.26/terraform-s3bucket.zip | n/a | +| [sqs\_allocated\_letters](#module\_sqs\_allocated\_letters) | https://github.com/NHSDigital/nhs-notify-shared-modules/releases/download/v2.0.26/terraform-sqs.zip | n/a | | [sqs\_letter\_updates](#module\_sqs\_letter\_updates) | https://github.com/NHSDigital/nhs-notify-shared-modules/releases/download/v2.0.26/terraform-sqs.zip | n/a | | [supplier\_ssl](#module\_supplier\_ssl) | https://github.com/NHSDigital/nhs-notify-shared-modules/releases/download/v2.0.26/terraform-ssl.zip | n/a | | [upsert\_letter](#module\_upsert\_letter) | https://github.com/NHSDigital/nhs-notify-shared-modules/releases/download/v2.0.29/terraform-lambda.zip | n/a | diff --git a/infrastructure/terraform/components/api/module_sqs_allocated_letters.tf b/infrastructure/terraform/components/api/module_sqs_allocated_letters.tf new file mode 100644 index 000000000..24a0df9ac --- /dev/null +++ b/infrastructure/terraform/components/api/module_sqs_allocated_letters.tf @@ -0,0 +1,16 @@ +module "sqs_allocated_letters" { + source = "https://github.com/NHSDigital/nhs-notify-shared-modules/releases/download/v2.0.26/terraform-sqs.zip" + + aws_account_id = var.aws_account_id + component = var.component + environment = var.environment + project = var.project + region = var.region + name = "allocated-letters" + + sqs_kms_key_arn = module.kms.key_arn + + visibility_timeout_seconds = 60 + + create_dlq = true +} From 917f4e4e77c1b3837fe1817f2edaaea9938edbe3 Mon Sep 17 00:00:00 2001 From: David Wass Date: Thu, 5 Feb 2026 15:00:54 +0000 Subject: [PATCH 13/28] create allocate lambda --- .../terraform/components/api/README.md | 1 + .../api/module_lambda_allocate_letter.tf | 85 +++ lambdas/allocate-letter/.eslintignore | 1 + lambdas/allocate-letter/.gitignore | 4 + lambdas/allocate-letter/jest.config.ts | 66 +++ lambdas/allocate-letter/package.json | 34 ++ .../src/config/__tests__/deps.test.ts | 53 ++ .../src/config/__tests__/env.test.ts | 48 ++ lambdas/allocate-letter/src/config/deps.ts | 42 ++ lambdas/allocate-letter/src/config/env.ts | 23 + .../__tests__/allocate-handler.test.ts | 489 ++++++++++++++++++ .../src/handler/allocate-handler.ts | 118 +++++ lambdas/allocate-letter/src/index.ts | 7 + lambdas/allocate-letter/tsconfig.json | 13 + .../src/handler/upsert-handler.ts | 82 +-- 15 files changed, 1012 insertions(+), 54 deletions(-) create mode 100644 infrastructure/terraform/components/api/module_lambda_allocate_letter.tf create mode 100644 lambdas/allocate-letter/.eslintignore create mode 100644 lambdas/allocate-letter/.gitignore create mode 100644 lambdas/allocate-letter/jest.config.ts create mode 100644 lambdas/allocate-letter/package.json create mode 100644 lambdas/allocate-letter/src/config/__tests__/deps.test.ts create mode 100644 lambdas/allocate-letter/src/config/__tests__/env.test.ts create mode 100644 lambdas/allocate-letter/src/config/deps.ts create mode 100644 lambdas/allocate-letter/src/config/env.ts create mode 100644 lambdas/allocate-letter/src/handler/__tests__/allocate-handler.test.ts create mode 100644 lambdas/allocate-letter/src/handler/allocate-handler.ts create mode 100644 lambdas/allocate-letter/src/index.ts create mode 100644 lambdas/allocate-letter/tsconfig.json diff --git a/infrastructure/terraform/components/api/README.md b/infrastructure/terraform/components/api/README.md index d1a84b047..9a2eaef98 100644 --- a/infrastructure/terraform/components/api/README.md +++ b/infrastructure/terraform/components/api/README.md @@ -45,6 +45,7 @@ No requirements. |------|--------|---------| | [amendment\_event\_transformer](#module\_amendment\_event\_transformer) | https://github.com/NHSDigital/nhs-notify-shared-modules/releases/download/v2.0.29/terraform-lambda.zip | n/a | | [amendments\_queue](#module\_amendments\_queue) | https://github.com/NHSDigital/nhs-notify-shared-modules/releases/download/v2.0.24/terraform-sqs.zip | n/a | +| [allocate\_letter](#module\_allocate\_letter) | https://github.com/NHSDigital/nhs-notify-shared-modules/releases/download/v2.0.29/terraform-lambda.zip | n/a | | [authorizer\_lambda](#module\_authorizer\_lambda) | https://github.com/NHSDigital/nhs-notify-shared-modules/releases/download/v2.0.29/terraform-lambda.zip | n/a | | [domain\_truststore](#module\_domain\_truststore) | https://github.com/NHSDigital/nhs-notify-shared-modules/releases/download/v2.0.26/terraform-s3bucket.zip | n/a | | [eventpub](#module\_eventpub) | https://github.com/NHSDigital/nhs-notify-shared-modules/releases/download/v2.0.31/terraform-eventpub.zip | n/a | diff --git a/infrastructure/terraform/components/api/module_lambda_allocate_letter.tf b/infrastructure/terraform/components/api/module_lambda_allocate_letter.tf new file mode 100644 index 000000000..dfd2a51aa --- /dev/null +++ b/infrastructure/terraform/components/api/module_lambda_allocate_letter.tf @@ -0,0 +1,85 @@ +module "allocate_letter" { + source = "https://github.com/NHSDigital/nhs-notify-shared-modules/releases/download/v2.0.29/terraform-lambda.zip" + + function_name = "allocate_letter" + description = "Allocate a letter to a supplier" + + aws_account_id = var.aws_account_id + component = var.component + environment = var.environment + project = var.project + region = var.region + group = var.group + + log_retention_in_days = var.log_retention_in_days + kms_key_arn = module.kms.key_arn + + iam_policy_document = { + body = data.aws_iam_policy_document.allocate_letter_lambda.json + } + + function_s3_bucket = local.acct.s3_buckets["lambda_function_artefacts"]["id"] + function_code_base_path = local.aws_lambda_functions_dir_path + function_code_dir = "allocate-letter/dist" + function_include_common = true + handler_function_name = "allocateLetterHandler" + runtime = "nodejs22.x" + memory = 512 + timeout = 29 + log_level = var.log_level + + force_lambda_code_deploy = var.force_lambda_code_deploy + enable_lambda_insights = false + + log_destination_arn = local.destination_arn + log_subscription_role_arn = local.acct.log_subscription_role_arn + + lambda_env_vars = merge(local.common_lambda_env_vars, { + VARIANT_MAP = jsonencode(var.letter_variant_map) + ALLOCATED_LETTERS_QUEUE_URL = module.sqs_allocated_letters.sqs_queue_url + }) +} + +data "aws_iam_policy_document" "allocate_letter_lambda" { + statement { + sid = "KMSPermissions" + effect = "Allow" + + actions = [ + "kms:Decrypt", + "kms:GenerateDataKey", + ] + + resources = [ + module.kms.key_arn, + ] + } + + statement { + sid = "AllowSQSRead" + effect = "Allow" + + actions = [ + "sqs:ReceiveMessage", + "sqs:DeleteMessage", + "sqs:GetQueueAttributes" + ] + + resources = [ + module.sqs_letter_updates.sqs_queue_arn + ] + } + + statement { + sid = "AllowSQSWrite" + effect = "Allow" + + actions = [ + "sqs:SendMessage" + ] + + resources = [ + module.sqs_allocated_letters.sqs_queue_arn + ] + } +} diff --git a/lambdas/allocate-letter/.eslintignore b/lambdas/allocate-letter/.eslintignore new file mode 100644 index 000000000..1521c8b76 --- /dev/null +++ b/lambdas/allocate-letter/.eslintignore @@ -0,0 +1 @@ +dist diff --git a/lambdas/allocate-letter/.gitignore b/lambdas/allocate-letter/.gitignore new file mode 100644 index 000000000..80323f7cf --- /dev/null +++ b/lambdas/allocate-letter/.gitignore @@ -0,0 +1,4 @@ +coverage +node_modules +dist +.reports diff --git a/lambdas/allocate-letter/jest.config.ts b/lambdas/allocate-letter/jest.config.ts new file mode 100644 index 000000000..872794514 --- /dev/null +++ b/lambdas/allocate-letter/jest.config.ts @@ -0,0 +1,66 @@ +export const baseJestConfig = { + preset: "ts-jest", + extensionsToTreatAsEsm: [".ts"], + transform: { + "^.+\\.ts$": [ + "ts-jest", + { + useESM: true, + }, + ], + }, + + // Automatically clear mock calls, instances, contexts and results before every test + clearMocks: true, + + // Indicates whether the coverage information should be collected while executing the test + collectCoverage: true, + + // The directory where Jest should output its coverage files + coverageDirectory: "./.reports/unit/coverage", + + // Indicates which provider should be used to instrument code for coverage + coverageProvider: "babel", + + coverageThreshold: { + global: { + branches: 100, + functions: 100, + lines: 100, + statements: -10, + }, + }, + + coveragePathIgnorePatterns: ["/__tests__/"], + testPathIgnorePatterns: [".build"], + testMatch: ["**/?(*.)+(spec|test).[jt]s?(x)"], + + // Use this configuration option to add custom reporters to Jest + reporters: [ + "default", + [ + "jest-html-reporter", + { + pageTitle: "Test Report", + outputPath: "./.reports/unit/test-report.html", + includeFailureMsg: true, + }, + ], + ], + + // The test environment that will be used for testing + testEnvironment: "jsdom", +}; + +const utilsJestConfig = { + ...baseJestConfig, + + testEnvironment: "node", + + coveragePathIgnorePatterns: [ + ...(baseJestConfig.coveragePathIgnorePatterns ?? []), + "zod-validators.ts", + ], +}; + +export default utilsJestConfig; diff --git a/lambdas/allocate-letter/package.json b/lambdas/allocate-letter/package.json new file mode 100644 index 000000000..dc9daa2c7 --- /dev/null +++ b/lambdas/allocate-letter/package.json @@ -0,0 +1,34 @@ +{ + "dependencies": { + "@aws-sdk/client-dynamodb": "^3.858.0", + "@aws-sdk/lib-dynamodb": "^3.858.0", + "@internal/datastore": "*", + "@nhsdigital/nhs-notify-event-schemas-letter-rendering": "^2.0.1", + "@nhsdigital/nhs-notify-event-schemas-letter-rendering-v1": "npm:@nhsdigital/nhs-notify-event-schemas-letter-rendering@^1.1.5", + "@nhsdigital/nhs-notify-event-schemas-supplier-api": "^1.0.8", + "@types/aws-lambda": "^8.10.148", + "aws-lambda": "^1.0.7", + "esbuild": "^0.27.2", + "pino": "^9.7.0", + "zod": "^4.1.11" + }, + "devDependencies": { + "@tsconfig/node22": "^22.0.2", + "@types/aws-lambda": "^8.10.148", + "@types/jest": "^30.0.0", + "jest": "^30.2.0", + "jest-mock-extended": "^4.0.0", + "ts-jest": "^29.4.0", + "typescript": "^5.8.3" + }, + "name": "nhs-notify-supplier-api-allocate-letter", + "private": true, + "scripts": { + "lambda-build": "rm -rf dist && npx esbuild --bundle --minify --sourcemap --target=es2020 --platform=node --loader:.node=file --entry-names=[name] --outdir=dist src/index.ts", + "lint": "eslint .", + "lint:fix": "eslint . --fix", + "test:unit": "jest", + "typecheck": "tsc --noEmit" + }, + "version": "0.0.1" +} diff --git a/lambdas/allocate-letter/src/config/__tests__/deps.test.ts b/lambdas/allocate-letter/src/config/__tests__/deps.test.ts new file mode 100644 index 000000000..e470ea969 --- /dev/null +++ b/lambdas/allocate-letter/src/config/__tests__/deps.test.ts @@ -0,0 +1,53 @@ +import type { Deps } from "lambdas/allocate-letter/src/config/deps"; + +describe("createDependenciesContainer", () => { + const env = { + LETTERS_TABLE_NAME: "LettersTable", + LETTER_TTL_HOURS: 12_960, + }; + + beforeEach(() => { + jest.clearAllMocks(); + jest.resetModules(); + + // pino + jest.mock("pino", () => ({ + __esModule: true, + default: jest.fn(() => ({ + info: jest.fn(), + error: jest.fn(), + warn: jest.fn(), + debug: jest.fn(), + })), + })); + + // Repo client + jest.mock("@internal/datastore", () => ({ + LetterRepository: jest.fn(), + })); + + // Env + jest.mock("../env", () => ({ envVars: env })); + }); + + test("constructs deps and wires repository config correctly", async () => { + // get current mock instances + const pinoMock = jest.requireMock("pino"); + const { LetterRepository } = jest.requireMock("@internal/datastore"); + + // eslint-disable-next-line @typescript-eslint/no-require-imports + const { createDependenciesContainer } = require("../deps"); + const deps: Deps = createDependenciesContainer(); + + expect(pinoMock.default).toHaveBeenCalledTimes(1); + + expect(LetterRepository).toHaveBeenCalledTimes(1); + const letterRepoCtorArgs = LetterRepository.mock.calls[0]; + expect(letterRepoCtorArgs[2]).toEqual({ + lettersTableName: "LettersTable", + lettersTtlHours: 12_960, + }); + + expect(deps.env).toEqual(env); + }); +}); diff --git a/lambdas/allocate-letter/src/config/__tests__/env.test.ts b/lambdas/allocate-letter/src/config/__tests__/env.test.ts new file mode 100644 index 000000000..3c3de2309 --- /dev/null +++ b/lambdas/allocate-letter/src/config/__tests__/env.test.ts @@ -0,0 +1,48 @@ +import { ZodError } from "zod"; +/* eslint-disable @typescript-eslint/no-require-imports */ +/* Allow require imports to enable re-import of modules */ + +describe("lambdaEnv", () => { + const OLD_ENV = process.env; + + beforeEach(() => { + jest.resetModules(); // Clears cached modules + process.env = { ...OLD_ENV }; // Clone original env + }); + + afterAll(() => { + process.env = OLD_ENV; // Restore + }); + + it("should load all environment variables successfully", () => { + process.env.LETTERS_TABLE_NAME = "letters-table"; + process.env.LETTER_TTL_HOURS = "12960"; + process.env.VARIANT_MAP = `{ + "lv1": { + "supplierId": "supplier1", + "specId": "spec1" + } + }`; + + const { envVars } = require("../env"); + + expect(envVars).toEqual({ + LETTERS_TABLE_NAME: "letters-table", + LETTER_TTL_HOURS: 12_960, + VARIANT_MAP: { + lv1: { + supplierId: "supplier1", + specId: "spec1", + }, + }, + }); + }); + + it("should throw if a required env var is missing", () => { + process.env.LETTERS_TABLE_NAME = "table"; + process.env.LETTER_TTL_HOURS = "12960"; + process.env.VARIANT_MAP = undefined; + + expect(() => require("../env")).toThrow(ZodError); + }); +}); diff --git a/lambdas/allocate-letter/src/config/deps.ts b/lambdas/allocate-letter/src/config/deps.ts new file mode 100644 index 000000000..de019252e --- /dev/null +++ b/lambdas/allocate-letter/src/config/deps.ts @@ -0,0 +1,42 @@ +import { DynamoDBClient } from "@aws-sdk/client-dynamodb"; +import { DynamoDBDocumentClient } from "@aws-sdk/lib-dynamodb"; +import { SQSClient } from "@aws-sdk/client-sqs"; +import pino from "pino"; +import { LetterRepository } from "@internal/datastore"; +import { EnvVars, envVars } from "./env"; + +export type Deps = { + letterRepo: LetterRepository; + logger: pino.Logger; + env: EnvVars; + sqsClient: SQSClient; +}; + +function createDocumentClient(): DynamoDBDocumentClient { + const ddbClient = new DynamoDBClient({}); + return DynamoDBDocumentClient.from(ddbClient); +} + +function createLetterRepository( + log: pino.Logger, + // eslint-disable-next-line @typescript-eslint/no-shadow + envVars: EnvVars, +): LetterRepository { + const config = { + lettersTableName: envVars.LETTERS_TABLE_NAME, + lettersTtlHours: envVars.LETTER_TTL_HOURS, + }; + + return new LetterRepository(createDocumentClient(), log, config); +} + +export function createDependenciesContainer(): Deps { + const log = pino(); + + return { + letterRepo: createLetterRepository(log, envVars), + logger: log, + env: envVars, + sqsClient: new SQSClient({}), + }; +} diff --git a/lambdas/allocate-letter/src/config/env.ts b/lambdas/allocate-letter/src/config/env.ts new file mode 100644 index 000000000..ef527258f --- /dev/null +++ b/lambdas/allocate-letter/src/config/env.ts @@ -0,0 +1,23 @@ +import { z } from "zod"; + +const LetterVariantSchema = z.record( + z.string(), + z.object({ + supplierId: z.string(), + specId: z.string(), + }), +); +export type LetterVariant = z.infer; + +const EnvVarsSchema = z.object({ + LETTERS_TABLE_NAME: z.string(), + LETTER_TTL_HOURS: z.coerce.number().int(), + VARIANT_MAP: z.string().transform((str, _) => { + const parsed = JSON.parse(str); + return LetterVariantSchema.parse(parsed); + }), +}); + +export type EnvVars = z.infer; + +export const envVars = EnvVarsSchema.parse(process.env); diff --git a/lambdas/allocate-letter/src/handler/__tests__/allocate-handler.test.ts b/lambdas/allocate-letter/src/handler/__tests__/allocate-handler.test.ts new file mode 100644 index 000000000..4284794aa --- /dev/null +++ b/lambdas/allocate-letter/src/handler/__tests__/allocate-handler.test.ts @@ -0,0 +1,489 @@ +import { SNSMessage, SQSEvent, SQSRecord } from "aws-lambda"; +import pino from "pino"; +import { LetterRepository } from "internal/datastore/src"; +import { LetterRequestPreparedEventV2 } from "@nhsdigital/nhs-notify-event-schemas-letter-rendering"; +import { LetterRequestPreparedEvent } from "@nhsdigital/nhs-notify-event-schemas-letter-rendering-v1"; +import { + $LetterEvent, + LetterEvent, +} from "@nhsdigital/nhs-notify-event-schemas-supplier-api/src/events/letter-events"; +import createUpsertLetterHandler from "../allocate-handler"; +import { Deps } from "../../config/deps"; +import { EnvVars } from "../../config/env"; + +function createSQSEvent(records: SQSRecord[]): SQSEvent { + return { + Records: records, + }; +} + +function createSqsRecord(msgId: string, body: string): SQSRecord { + return { + messageId: msgId, + receiptHandle: "", + body, + attributes: { + ApproximateReceiveCount: "", + SentTimestamp: "", + SenderId: "", + ApproximateFirstReceiveTimestamp: "", + }, + messageAttributes: {}, + md5OfBody: "", + eventSource: "", + eventSourceARN: "", + awsRegion: "", + }; +} + +type SupportedEvent = + | LetterRequestPreparedEventV2 + | LetterRequestPreparedEvent + | LetterEvent; + +function createEventBridgeNotification( + event: SupportedEvent, +): Partial { + return { + SignatureVersion: "", + Timestamp: "", + Signature: "", + SigningCertUrl: "", + MessageId: "", + Message: createEventBridgeEvent(event), + MessageAttributes: {}, + Type: "Notification", + UnsubscribeUrl: "", + TopicArn: "", + Subject: "", + Token: "", + }; +} + +function createNotification(event: SupportedEvent): Partial { + return { + SignatureVersion: "", + Timestamp: "", + Signature: "", + SigningCertUrl: "", + MessageId: "", + Message: JSON.stringify(event), + MessageAttributes: {}, + Type: "Notification", + UnsubscribeUrl: "", + TopicArn: "", + Subject: "", + Token: "", + }; +} + +function createEventBridgeEvent(event: SupportedEvent): string { + const now = new Date().toISOString(); + const eventBridgeEnvelope = { + version: "0", + id: "4f28e649-6832-18e8-7261-4b63e6dcd3b5", + "detail-type": event.type, + source: "custom.event", + account: "815490582396", + time: now, + region: "eu-west-2", + resources: [], + detail: event, + }; + return JSON.stringify(eventBridgeEnvelope); +} + +function createPreparedV1Event( + overrides: Partial = {}, +): LetterRequestPreparedEvent { + const now = new Date().toISOString(); + + return { + specversion: "1.0", + id: overrides.id ?? "7b9a03ca-342a-4150-b56b-989109c45613", + source: "/data-plane/letter-rendering/test", + subject: "client/client1/letter-request/letterRequest1", + type: "uk.nhs.notify.letter-rendering.letter-request.prepared.v1", + time: now, + dataschema: + "https://notify.nhs.uk/cloudevents/schemas/letter-rendering/letter-request.prepared.1.0.0.schema.json", + dataschemaversion: "1.0.0", + data: { + domainId: overrides.domainId ?? "letter1", + letterVariantId: "lv1", + requestId: "request1", + requestItemId: "requestItem1", + requestItemPlanId: "requestItemPlan1", + clientId: "client1", + campaignId: "campaign1", + templateId: "template1", + url: overrides.url ?? "s3://letterDataBucket/letter1.pdf", + sha256Hash: + "3a7bd3e2360a3d29eea436fcfb7e44c735d117c8f2f1d2d1e4f6e8f7e6e8f7e6", + createdAt: now, + pageCount: 1, + status: "PREPARED", + }, + traceparent: "00-0af7651916cd43dd8448eb211c803191-b7ad6b7169203331-01", + recordedtime: now, + severitynumber: 2, + severitytext: "INFO", + plane: "data", + }; +} + +function createPreparedV2Event( + overrides: Partial = {}, +): LetterRequestPreparedEventV2 { + return { + ...createPreparedV1Event(overrides), + type: "uk.nhs.notify.letter-rendering.letter-request.prepared.v2", + dataschema: + "https://notify.nhs.uk/cloudevents/schemas/letter-rendering/letter-request.prepared.2.0.1.schema.json", + dataschemaversion: "2.0.1", + }; +} + +function createSupplierStatusChangeEvent( + overrides: Partial = {}, +): LetterEvent { + const now = new Date().toISOString(); + + return $LetterEvent.parse({ + data: { + domainId: overrides.domainId ?? "f47ac10b-58cc-4372-a567-0e02b2c3d479", + groupId: "client_template", + origin: { + domain: "letter-rendering", + event: "f47ac10b-58cc-4372-a567-0e02b2c3d479", + source: "/data-plane/letter-rendering/prod/render-pdf", + subject: + "client/00f3b388-bbe9-41c9-9e76-052d37ee8988/letter-request/0o5Fs0EELR0fUjHjbCnEtdUwQe4_0o5Fs0EELR0fUjHjbCnEtdUwQe5", + }, + reasonCode: "R07", + reasonText: "No such address", + specificationId: "1y3q9v1zzzz", + billingRef: "1y3q9v1zzzz", + status: "RETURNED", + supplierId: "supplier1", + }, + datacontenttype: "application/json", + dataschema: + "https://notify.nhs.uk/cloudevents/schemas/supplier-api/letter.RETURNED.1.0.0.schema.json", + dataschemaversion: "1.0.0", + id: overrides.id ?? "23f1f09c-a555-4d9b-8405-0b33490bc920", + plane: "data", + recordedtime: now, + severitynumber: 2, + severitytext: "INFO", + source: "/data-plane/supplier-api/prod/update-status", + specversion: "1.0", + subject: + "letter-origin/letter-rendering/letter/f47ac10b-58cc-4372-a567-0e02b2c3d479", + time: now, + traceparent: "00-0af7651916cd43dd8448eb211c80319c-b7ad6b7169203331-01", + type: "uk.nhs.notify.supplier-api.letter.RETURNED.v1", + }); +} + +describe("createUpsertLetterHandler", () => { + const mockedDeps: jest.Mocked = { + letterRepo: { + putLetter: jest.fn(), + updateLetterStatus: jest.fn(), + } as unknown as LetterRepository, + logger: { error: jest.fn(), info: jest.fn() } as unknown as pino.Logger, + env: { + LETTERS_TABLE_NAME: "LETTERS_TABLE_NAME", + LETTER_TTL_HOURS: 12_960, + VARIANT_MAP: { + lv1: { + supplierId: "supplier1", + specId: "spec1", + }, + }, + } as EnvVars, + } as Deps; + + beforeEach(() => { + jest.clearAllMocks(); + }); + + test("processes all records successfully and returns no batch failures", async () => { + const evt: SQSEvent = createSQSEvent([ + createSqsRecord( + "msg1", + JSON.stringify(createEventBridgeNotification(createPreparedV2Event())), + ), + createSqsRecord( + "msg2", + JSON.stringify(createNotification(createSupplierStatusChangeEvent())), + ), + ]); + + const result = await createUpsertLetterHandler(mockedDeps)( + evt, + {} as any, + {} as any, + ); + + expect(result).toBeDefined(); + if (!result) throw new Error("expected BatchResponse, got void"); + expect(result.batchItemFailures).toHaveLength(0); + + expect(mockedDeps.letterRepo.putLetter).toHaveBeenCalledTimes(1); + expect(mockedDeps.letterRepo.updateLetterStatus).toHaveBeenCalledTimes(1); + + const firstArg = (mockedDeps.letterRepo.putLetter as jest.Mock).mock + .calls[0][0]; + expect(firstArg.id).toBe("letter1"); + expect(firstArg.supplierId).toBe("supplier1"); + expect(firstArg.specificationId).toBe("spec1"); + expect(firstArg.url).toBe("s3://letterDataBucket/letter1.pdf"); + expect(firstArg.status).toBe("PENDING"); + expect(firstArg.groupId).toBe("client1campaign1template1"); + expect(firstArg.source).toBe("/data-plane/letter-rendering/test"); + + const secondArg = (mockedDeps.letterRepo.updateLetterStatus as jest.Mock) + .mock.calls[0][0]; + expect(secondArg.id).toBe("f47ac10b-58cc-4372-a567-0e02b2c3d479"); + expect(secondArg.supplierId).toBe("supplier1"); + expect(secondArg.status).toBe("RETURNED"); + expect(secondArg.reasonCode).toBe("R07"); + expect(secondArg.reasonText).toBe("No such address"); + }); + + test("processes all v1 records successfully and returns no batch failures", async () => { + const evt: SQSEvent = createSQSEvent([ + createSqsRecord( + "msg1", + JSON.stringify(createNotification(createPreparedV1Event())), + ), + createSqsRecord( + "msg2", + JSON.stringify( + createNotification( + createPreparedV1Event({ + id: "7b9a03ca-342a-4150-b56b-989109c45614", + domainId: "letter2", + url: "s3://letterDataBucket/letter2.pdf", + }), + ), + ), + ), + ]); + + const result = await createUpsertLetterHandler(mockedDeps)( + evt, + {} as any, + {} as any, + ); + + expect(result).toBeDefined(); + if (!result) throw new Error("expected BatchResponse, got void"); + expect(result.batchItemFailures).toHaveLength(0); + + expect(mockedDeps.letterRepo.putLetter).toHaveBeenCalledTimes(2); + + const firstArg = (mockedDeps.letterRepo.putLetter as jest.Mock).mock + .calls[0][0]; + expect(firstArg.id).toBe("letter1"); + expect(firstArg.supplierId).toBe("supplier1"); + expect(firstArg.specificationId).toBe("spec1"); + expect(firstArg.url).toBe("s3://letterDataBucket/letter1.pdf"); + expect(firstArg.status).toBe("PENDING"); + expect(firstArg.groupId).toBe("client1campaign1template1"); + expect(firstArg.source).toBe("/data-plane/letter-rendering/test"); + + const secondArg = (mockedDeps.letterRepo.putLetter as jest.Mock).mock + .calls[1][0]; + expect(secondArg.id).toBe("letter2"); + expect(secondArg.supplierId).toBe("supplier1"); + expect(secondArg.specificationId).toBe("spec1"); + expect(secondArg.url).toBe("s3://letterDataBucket/letter2.pdf"); + expect(secondArg.status).toBe("PENDING"); + expect(secondArg.groupId).toBe("client1campaign1template1"); + expect(firstArg.source).toBe("/data-plane/letter-rendering/test"); + }); + + test("invalid JSON body produces batch failure and logs error", async () => { + const evt: SQSEvent = createSQSEvent([ + createSqsRecord("bad-json", "this-is-not-json"), + ]); + + const result = await createUpsertLetterHandler(mockedDeps)( + evt, + {} as any, + {} as any, + ); + + expect(result).toBeDefined(); + if (!result) throw new Error("expected BatchResponse, got void"); + expect(result.batchItemFailures).toHaveLength(1); + expect(result.batchItemFailures[0].itemIdentifier).toBe("bad-json"); + + expect((mockedDeps.logger.error as jest.Mock).mock.calls[0][1]).toBe( + "Error processing upsert of record bad-json", + ); + expect(mockedDeps.letterRepo.putLetter).not.toHaveBeenCalled(); + }); + + test("invalid notification schema produces batch failure and logs error", async () => { + const evt: SQSEvent = createSQSEvent([ + createSqsRecord( + "bad-notification-schema", + JSON.stringify({ not: "unexpected notification shape" }), + ), + ]); + + const result = await createUpsertLetterHandler(mockedDeps)( + evt, + {} as any, + {} as any, + ); + + expect(result).toBeDefined(); + if (!result) throw new Error("expected BatchResponse, got void"); + expect(result.batchItemFailures).toHaveLength(1); + expect(result.batchItemFailures[0].itemIdentifier).toBe( + "bad-notification-schema", + ); + + expect((mockedDeps.logger.error as jest.Mock).mock.calls[0][1]).toBe( + "Error processing upsert of record bad-notification-schema", + ); + expect(mockedDeps.letterRepo.putLetter).not.toHaveBeenCalled(); + }); + + test("no event type produces batch failure and logs error", async () => { + const evt: SQSEvent = createSQSEvent([ + createSqsRecord( + "bad-event-type", + JSON.stringify({ + Type: "Notification", + Message: JSON.stringify({ no: "type" }), + }), + ), + ]); + + const result = await createUpsertLetterHandler(mockedDeps)( + evt, + {} as any, + {} as any, + ); + + expect(result).toBeDefined(); + if (!result) throw new Error("expected BatchResponse, got void"); + expect(result.batchItemFailures).toHaveLength(1); + expect(result.batchItemFailures[0].itemIdentifier).toBe("bad-event-type"); + expect(mockedDeps.letterRepo.putLetter).not.toHaveBeenCalled(); + expect(mockedDeps.letterRepo.updateLetterStatus).not.toHaveBeenCalled(); + expect((mockedDeps.logger.error as jest.Mock).mock.calls[0][1]).toBe( + "Error processing upsert of record bad-event-type", + ); + }); + + test("invalid event type produces batch failure and logs error", async () => { + const evt: SQSEvent = createSQSEvent([ + createSqsRecord( + "bad-event-type", + JSON.stringify({ + Type: "Notification", + Message: JSON.stringify({ type: "unexpected type" }), + }), + ), + ]); + + const result = await createUpsertLetterHandler(mockedDeps)( + evt, + {} as any, + {} as any, + ); + + expect(result).toBeDefined(); + if (!result) throw new Error("expected BatchResponse, got void"); + expect(result.batchItemFailures).toHaveLength(1); + expect(result.batchItemFailures[0].itemIdentifier).toBe("bad-event-type"); + expect(mockedDeps.letterRepo.putLetter).not.toHaveBeenCalled(); + expect(mockedDeps.letterRepo.updateLetterStatus).not.toHaveBeenCalled(); + expect((mockedDeps.logger.error as jest.Mock).mock.calls[0][1]).toBe( + "Error processing upsert of record bad-event-type", + ); + }); + + test("valid event type and invalid schema produces batch failure and logs error", async () => { + const evt: SQSEvent = createSQSEvent([ + createSqsRecord( + "bad-event-schema", + JSON.stringify({ + Type: "Notification", + Message: JSON.stringify({ + type: "uk.nhs.notify.letter-rendering.letter-request.prepared", + some: "unexpected shape", + }), + }), + ), + ]); + + const result = await createUpsertLetterHandler(mockedDeps)( + evt, + {} as any, + {} as any, + ); + + expect(result).toBeDefined(); + if (!result) throw new Error("expected BatchResponse, got void"); + expect(result.batchItemFailures).toHaveLength(1); + expect(result.batchItemFailures[0].itemIdentifier).toBe("bad-event-schema"); + expect(mockedDeps.letterRepo.putLetter).not.toHaveBeenCalled(); + expect(mockedDeps.letterRepo.updateLetterStatus).not.toHaveBeenCalled(); + expect((mockedDeps.logger.error as jest.Mock).mock.calls[0][1]).toBe( + "Error processing upsert of record bad-event-schema", + ); + }); + + test("repository throwing for one record causes that message to be returned in batch failures while others succeed", async () => { + (mockedDeps.letterRepo.putLetter as jest.Mock) + .mockResolvedValueOnce({}) + .mockRejectedValueOnce(new Error("ddb error")); + + const evt: SQSEvent = createSQSEvent([ + createSqsRecord( + "ok-msg", + JSON.stringify( + createNotification( + createPreparedV2Event({ + id: "7b9a03ca-342a-4150-b56b-989109c45615", + domainId: "ok", + }), + ), + ), + ), + createSqsRecord( + "fail-msg", + JSON.stringify( + createNotification( + createPreparedV2Event({ + id: "7b9a03ca-342a-4150-b56b-989109c45616", + domainId: "fail", + }), + ), + ), + ), + ]); + + const result = await createUpsertLetterHandler(mockedDeps)( + evt, + {} as any, + {} as any, + ); + + expect(mockedDeps.letterRepo.putLetter).toHaveBeenCalledTimes(2); + + if (!result) throw new Error("expected BatchResponse, got void"); + expect(result.batchItemFailures).toHaveLength(1); + expect(result.batchItemFailures[0].itemIdentifier).toBe("fail-msg"); + + expect(mockedDeps.logger.error).toHaveBeenCalled(); + }); +}); diff --git a/lambdas/allocate-letter/src/handler/allocate-handler.ts b/lambdas/allocate-letter/src/handler/allocate-handler.ts new file mode 100644 index 000000000..d12860e75 --- /dev/null +++ b/lambdas/allocate-letter/src/handler/allocate-handler.ts @@ -0,0 +1,118 @@ +import { + SNSMessage, + SQSBatchItemFailure, + SQSEvent, + SQSHandler, + SQSRecord, +} from "aws-lambda"; +import { SendMessageCommand } from "@aws-sdk/client-sqs"; +import { LetterRequestPreparedEvent } from "@nhsdigital/nhs-notify-event-schemas-letter-rendering-v1"; + +import { LetterRequestPreparedEventV2 } from "@nhsdigital/nhs-notify-event-schemas-letter-rendering"; +import z from "zod"; +import { Deps } from "../config/deps"; + +type SupplierSpec = { supplierId: string; specId: string }; +type PreparedEvents = LetterRequestPreparedEventV2 | LetterRequestPreparedEvent; + +// small envelope that must exist in all inputs +const TypeEnvelope = z.object({ type: z.string().min(1) }); + +function resolveSupplierForVariant( + variantId: string, + deps: Deps, +): SupplierSpec { + return deps.env.VARIANT_MAP[variantId]; +} + +function parseSNSNotification(record: SQSRecord) { + const notification = JSON.parse(record.body) as Partial; + if ( + notification.Type !== "Notification" || + typeof notification.Message !== "string" + ) { + throw new Error( + "SQS record does not contain SNS Notification with string Message", + ); + } + return notification.Message; +} + +function removeEventBridgeWrapper(event: any) { + const maybeEventBridge = event; + if (maybeEventBridge.source && maybeEventBridge.detail) { + return maybeEventBridge.detail; + } + return event; +} + +function getType(event: unknown) { + const env = TypeEnvelope.safeParse(event); + if (!env.success) { + throw new Error("Missing or invalid envelope.type field"); + } + return env.data.type; +} + +function getSupplier(letterEvent: PreparedEvents, deps: Deps): SupplierSpec { + return resolveSupplierForVariant(letterEvent.data.letterVariantId, deps); +} + +function isInsert(type: string): boolean { + return ( + type === "uk.nhs.notify.letter-rendering.letter-request.prepared.v2" || + type === "uk.nhs.notify.letter-rendering.letter-request.prepared" // legacy schema + ); +} + +export default function createAllocatedLetterHandler(deps: Deps): SQSHandler { + return async (event: SQSEvent) => { + const batchItemFailures: SQSBatchItemFailure[] = []; + + const tasks = event.Records.map(async (record) => { + try { + const message: string = parseSNSNotification(record); + + const snsEvent = JSON.parse(message); + + const letterEvent: unknown = removeEventBridgeWrapper(snsEvent); + + const operationType = getType(letterEvent); + + let supplierSpec: SupplierSpec | undefined; + if (isInsert(operationType)) { + supplierSpec = getSupplier(letterEvent as PreparedEvents, deps); + } + + // Send to allocated letters queue + const queueUrl = process.env.ALLOCATED_LETTERS_QUEUE_URL; + if (!queueUrl) { + throw new Error("ALLOCATED_LETTERS_QUEUE_URL not configured"); + } + + const queueMessage = { + letterEvent, + operationType, + ...(supplierSpec && { supplierSpec }), + }; + + await deps.sqsClient.send( + new SendMessageCommand({ + QueueUrl: queueUrl, + MessageBody: JSON.stringify(queueMessage), + }), + ); + } catch (error) { + deps.logger.error( + { err: error, message: record.body }, + `Error processing allocation of record ${record.messageId}`, + ); + batchItemFailures.push({ itemIdentifier: record.messageId }); + } + }); + + await Promise.all(tasks); + + return { batchItemFailures }; + }; +} diff --git a/lambdas/allocate-letter/src/index.ts b/lambdas/allocate-letter/src/index.ts new file mode 100644 index 000000000..d458cd5bc --- /dev/null +++ b/lambdas/allocate-letter/src/index.ts @@ -0,0 +1,7 @@ +import { createDependenciesContainer } from "./config/deps"; +import createAllocateLetterHandler from "./handler/allocate-handler"; + +const container = createDependenciesContainer(); + +// eslint-disable-next-line import-x/prefer-default-export +export const allocateLetterHandler = createAllocateLetterHandler(container); diff --git a/lambdas/allocate-letter/tsconfig.json b/lambdas/allocate-letter/tsconfig.json new file mode 100644 index 000000000..528c0c8b5 --- /dev/null +++ b/lambdas/allocate-letter/tsconfig.json @@ -0,0 +1,13 @@ +{ + "compilerOptions": { + "types": [ + "jest", + "node" + ] + }, + "extends": "../../tsconfig.base.json", + "include": [ + "src/**/*", + "jest.config.ts" + ] +} diff --git a/lambdas/upsert-letter/src/handler/upsert-handler.ts b/lambdas/upsert-letter/src/handler/upsert-handler.ts index 67893ff22..6d9a88a81 100644 --- a/lambdas/upsert-letter/src/handler/upsert-handler.ts +++ b/lambdas/upsert-letter/src/handler/upsert-handler.ts @@ -24,10 +24,19 @@ import { Deps } from "../config/deps"; type SupplierSpec = { supplierId: string; specId: string }; type PreparedEvents = LetterRequestPreparedEventV2 | LetterRequestPreparedEvent; +type AllocatedLetterQueueMessage = { + letterEvent: unknown; + operationType: string; + supplierSpec: SupplierSpec; +}; type UpsertOperation = { name: "Insert" | "Update"; schemas: z.ZodSchema[]; - handler: (request: unknown, deps: Deps) => Promise; + handler: ( + request: unknown, + supplierSpec: SupplierSpec, + deps: Deps, + ) => Promise; }; // small envelope that must exist in all inputs @@ -38,12 +47,8 @@ function getOperationFromType(type: string): UpsertOperation { return { name: "Insert", schemas: [$LetterRequestPreparedEventV2, $LetterRequestPreparedEvent], - handler: async (request, deps) => { + handler: async (request, supplierSpec, deps) => { const preparedRequest = request as PreparedEvents; - const supplierSpec: SupplierSpec = resolveSupplierForVariant( - preparedRequest.data.letterVariantId, - deps, - ); const letterToInsert: InsertLetter = mapToInsertLetter( preparedRequest, supplierSpec.supplierId, @@ -64,7 +69,7 @@ function getOperationFromType(type: string): UpsertOperation { return { name: "Update", schemas: [$LetterEvent], - handler: async (request, deps) => { + handler: async (request, supplierSpec, deps) => { const supplierEvent = request as LetterEvent; const letterToUpdate: UpdateLetter = mapToUpdateLetter(supplierEvent); await deps.letterRepo.updateLetterStatus(letterToUpdate); @@ -117,51 +122,16 @@ function mapToUpdateLetter(upsertRequest: LetterEvent): UpdateLetter { }; } -function resolveSupplierForVariant( - variantId: string, - deps: Deps, -): SupplierSpec { - return deps.env.VARIANT_MAP[variantId]; -} - -function parseSNSNotification(record: SQSRecord) { - const notification = JSON.parse(record.body) as Partial; - if ( - notification.Type !== "Notification" || - typeof notification.Message !== "string" - ) { - throw new Error( - "SQS record does not contain SNS Notification with string Message", - ); - } - return notification.Message; -} - -function removeEventBridgeWrapper(event: any) { - const maybeEventBridge = event; - if (maybeEventBridge.source && maybeEventBridge.detail) { - return maybeEventBridge.detail; - } - return event; -} - -function getType(event: unknown) { - const env = TypeEnvelope.safeParse(event); - if (!env.success) { - throw new Error("Missing or invalid envelope.type field"); - } - return env.data.type; -} - async function runUpsert( operation: UpsertOperation, letterEvent: unknown, + supplierSpec: SupplierSpec, deps: Deps, ) { for (const schema of operation.schemas) { const r = schema.safeParse(letterEvent); if (r.success) { - await operation.handler(r.data, deps); + await operation.handler(r.data, supplierSpec, deps); return; } } @@ -191,9 +161,9 @@ async function emitMetrics( } } -function getSupplierId(snsEvent: any): string { - if (snsEvent && snsEvent.data && snsEvent.data.supplierId) { - return snsEvent.data.supplierId; +function getSupplierEventId(letterEvent: any): string { + if (letterEvent && letterEvent.data && letterEvent.data.supplierId) { + return letterEvent.data.supplierId; } return "unknown"; } @@ -208,20 +178,24 @@ export default function createUpsertLetterHandler(deps: Deps): SQSHandler { const tasks = event.Records.map(async (record) => { let supplier = "unknown"; try { - const message: string = parseSNSNotification(record); - const snsEvent = JSON.parse(message); - supplier = getSupplierId(snsEvent); - const letterEvent: unknown = removeEventBridgeWrapper(snsEvent); + const queueMessage: AllocatedLetterQueueMessage = JSON.parse( + record.body, + ); + const { letterEvent, operationType, supplierSpec } = queueMessage; deps.logger.info({ description: "Extracted letter event", messageId: record.messageId, }); - const type = getType(letterEvent); - const operation = getOperationFromType(type); + supplier = + !supplierSpec || !supplierSpec.supplierId + ? getSupplierEventId(letterEvent) + : supplierSpec.supplierId; + + const operation = getOperationFromType(operationType); - await runUpsert(operation, letterEvent, deps); + await runUpsert(operation, letterEvent, supplierSpec, deps); perSupplierSuccess.set( supplier, From 2a932712d2d3ea291e64859f8880471bfbe55a32 Mon Sep 17 00:00:00 2001 From: David Wass Date: Fri, 6 Feb 2026 11:26:12 +0000 Subject: [PATCH 14/28] allocate lambda --- ...a_event_source_mapping_allocate_letters.tf | 9 + ...mbda_event_source_mapping_upsert_letter.tf | 2 +- .../api/module_lambda_upsert_letter.tf | 2 +- lambdas/allocate-letter/package.json | 1 + .../src/config/__tests__/deps.test.ts | 9 - lambdas/allocate-letter/src/config/deps.ts | 23 - .../__tests__/allocate-handler.test.ts | 597 +- .../src/handler/allocate-handler.ts | 10 +- .../src/config/__tests__/env.test.ts | 14 - lambdas/upsert-letter/src/config/env.ts | 9 - .../handler/__tests__/upsert-handler.test.ts | 230 +- .../src/handler/upsert-handler.ts | 11 +- package-lock.json | 26569 +++++++++------- 13 files changed, 15219 insertions(+), 12267 deletions(-) create mode 100644 infrastructure/terraform/components/api/lambda_event_source_mapping_allocate_letters.tf diff --git a/infrastructure/terraform/components/api/lambda_event_source_mapping_allocate_letters.tf b/infrastructure/terraform/components/api/lambda_event_source_mapping_allocate_letters.tf new file mode 100644 index 000000000..d2e087847 --- /dev/null +++ b/infrastructure/terraform/components/api/lambda_event_source_mapping_allocate_letters.tf @@ -0,0 +1,9 @@ +resource "aws_lambda_event_source_mapping" "allocate_letter" { + event_source_arn = module.sqs_letter_updates.sqs_queue_arn + function_name = module.allocate_letter.function_name + batch_size = 10 + maximum_batching_window_in_seconds = 5 + function_response_types = [ + "ReportBatchItemFailures" + ] +} diff --git a/infrastructure/terraform/components/api/lambda_event_source_mapping_upsert_letter.tf b/infrastructure/terraform/components/api/lambda_event_source_mapping_upsert_letter.tf index a592ea9ec..3b9b62d03 100644 --- a/infrastructure/terraform/components/api/lambda_event_source_mapping_upsert_letter.tf +++ b/infrastructure/terraform/components/api/lambda_event_source_mapping_upsert_letter.tf @@ -1,5 +1,5 @@ resource "aws_lambda_event_source_mapping" "upsert_letter" { - event_source_arn = module.sqs_letter_updates.sqs_queue_arn + event_source_arn = module.sqs_allocated_letters.sqs_queue_arn function_name = module.upsert_letter.function_name batch_size = 10 maximum_batching_window_in_seconds = 5 diff --git a/infrastructure/terraform/components/api/module_lambda_upsert_letter.tf b/infrastructure/terraform/components/api/module_lambda_upsert_letter.tf index 201e10186..8a27ccdd0 100644 --- a/infrastructure/terraform/components/api/module_lambda_upsert_letter.tf +++ b/infrastructure/terraform/components/api/module_lambda_upsert_letter.tf @@ -82,7 +82,7 @@ data "aws_iam_policy_document" "upsert_letter_lambda" { ] resources = [ - module.sqs_letter_updates.sqs_queue_arn + module.sqs_allocated_letters.sqs_queue_arn ] } } diff --git a/lambdas/allocate-letter/package.json b/lambdas/allocate-letter/package.json index dc9daa2c7..b1d97b223 100644 --- a/lambdas/allocate-letter/package.json +++ b/lambdas/allocate-letter/package.json @@ -1,6 +1,7 @@ { "dependencies": { "@aws-sdk/client-dynamodb": "^3.858.0", + "@aws-sdk/client-sqs": "^3.984.0", "@aws-sdk/lib-dynamodb": "^3.858.0", "@internal/datastore": "*", "@nhsdigital/nhs-notify-event-schemas-letter-rendering": "^2.0.1", diff --git a/lambdas/allocate-letter/src/config/__tests__/deps.test.ts b/lambdas/allocate-letter/src/config/__tests__/deps.test.ts index e470ea969..d37c0bf94 100644 --- a/lambdas/allocate-letter/src/config/__tests__/deps.test.ts +++ b/lambdas/allocate-letter/src/config/__tests__/deps.test.ts @@ -33,21 +33,12 @@ describe("createDependenciesContainer", () => { test("constructs deps and wires repository config correctly", async () => { // get current mock instances const pinoMock = jest.requireMock("pino"); - const { LetterRepository } = jest.requireMock("@internal/datastore"); // eslint-disable-next-line @typescript-eslint/no-require-imports const { createDependenciesContainer } = require("../deps"); const deps: Deps = createDependenciesContainer(); expect(pinoMock.default).toHaveBeenCalledTimes(1); - - expect(LetterRepository).toHaveBeenCalledTimes(1); - const letterRepoCtorArgs = LetterRepository.mock.calls[0]; - expect(letterRepoCtorArgs[2]).toEqual({ - lettersTableName: "LettersTable", - lettersTtlHours: 12_960, - }); - expect(deps.env).toEqual(env); }); }); diff --git a/lambdas/allocate-letter/src/config/deps.ts b/lambdas/allocate-letter/src/config/deps.ts index de019252e..1f63d2c7c 100644 --- a/lambdas/allocate-letter/src/config/deps.ts +++ b/lambdas/allocate-letter/src/config/deps.ts @@ -1,40 +1,17 @@ -import { DynamoDBClient } from "@aws-sdk/client-dynamodb"; -import { DynamoDBDocumentClient } from "@aws-sdk/lib-dynamodb"; import { SQSClient } from "@aws-sdk/client-sqs"; import pino from "pino"; -import { LetterRepository } from "@internal/datastore"; import { EnvVars, envVars } from "./env"; export type Deps = { - letterRepo: LetterRepository; logger: pino.Logger; env: EnvVars; sqsClient: SQSClient; }; -function createDocumentClient(): DynamoDBDocumentClient { - const ddbClient = new DynamoDBClient({}); - return DynamoDBDocumentClient.from(ddbClient); -} - -function createLetterRepository( - log: pino.Logger, - // eslint-disable-next-line @typescript-eslint/no-shadow - envVars: EnvVars, -): LetterRepository { - const config = { - lettersTableName: envVars.LETTERS_TABLE_NAME, - lettersTtlHours: envVars.LETTER_TTL_HOURS, - }; - - return new LetterRepository(createDocumentClient(), log, config); -} - export function createDependenciesContainer(): Deps { const log = pino(); return { - letterRepo: createLetterRepository(log, envVars), logger: log, env: envVars, sqsClient: new SQSClient({}), diff --git a/lambdas/allocate-letter/src/handler/__tests__/allocate-handler.test.ts b/lambdas/allocate-letter/src/handler/__tests__/allocate-handler.test.ts index 4284794aa..14bfb2420 100644 --- a/lambdas/allocate-letter/src/handler/__tests__/allocate-handler.test.ts +++ b/lambdas/allocate-letter/src/handler/__tests__/allocate-handler.test.ts @@ -1,13 +1,13 @@ import { SNSMessage, SQSEvent, SQSRecord } from "aws-lambda"; import pino from "pino"; -import { LetterRepository } from "internal/datastore/src"; +import { SQSClient, SendMessageCommand } from "@aws-sdk/client-sqs"; import { LetterRequestPreparedEventV2 } from "@nhsdigital/nhs-notify-event-schemas-letter-rendering"; import { LetterRequestPreparedEvent } from "@nhsdigital/nhs-notify-event-schemas-letter-rendering-v1"; import { $LetterEvent, LetterEvent, } from "@nhsdigital/nhs-notify-event-schemas-supplier-api/src/events/letter-events"; -import createUpsertLetterHandler from "../allocate-handler"; +import createAllocatedLetterHandler from "../allocate-handler"; import { Deps } from "../../config/deps"; import { EnvVars } from "../../config/env"; @@ -41,58 +41,6 @@ type SupportedEvent = | LetterRequestPreparedEvent | LetterEvent; -function createEventBridgeNotification( - event: SupportedEvent, -): Partial { - return { - SignatureVersion: "", - Timestamp: "", - Signature: "", - SigningCertUrl: "", - MessageId: "", - Message: createEventBridgeEvent(event), - MessageAttributes: {}, - Type: "Notification", - UnsubscribeUrl: "", - TopicArn: "", - Subject: "", - Token: "", - }; -} - -function createNotification(event: SupportedEvent): Partial { - return { - SignatureVersion: "", - Timestamp: "", - Signature: "", - SigningCertUrl: "", - MessageId: "", - Message: JSON.stringify(event), - MessageAttributes: {}, - Type: "Notification", - UnsubscribeUrl: "", - TopicArn: "", - Subject: "", - Token: "", - }; -} - -function createEventBridgeEvent(event: SupportedEvent): string { - const now = new Date().toISOString(); - const eventBridgeEnvelope = { - version: "0", - id: "4f28e649-6832-18e8-7261-4b63e6dcd3b5", - "detail-type": event.type, - source: "custom.event", - account: "815490582396", - time: now, - region: "eu-west-2", - resources: [], - detail: event, - }; - return JSON.stringify(eventBridgeEnvelope); -} - function createPreparedV1Event( overrides: Partial = {}, ): LetterRequestPreparedEvent { @@ -186,304 +134,449 @@ function createSupplierStatusChangeEvent( }); } -describe("createUpsertLetterHandler", () => { - const mockedDeps: jest.Mocked = { - letterRepo: { - putLetter: jest.fn(), - updateLetterStatus: jest.fn(), - } as unknown as LetterRepository, - logger: { error: jest.fn(), info: jest.fn() } as unknown as pino.Logger, - env: { - LETTERS_TABLE_NAME: "LETTERS_TABLE_NAME", - LETTER_TTL_HOURS: 12_960, - VARIANT_MAP: { - lv1: { - supplierId: "supplier1", - specId: "spec1", - }, - }, - } as EnvVars, - } as Deps; +function createEventBridgeNotification( + event: LetterRequestPreparedEventV2 | LetterRequestPreparedEvent, +): Partial { + return { + SignatureVersion: "", + Timestamp: "", + Signature: "", + SigningCertUrl: "", + MessageId: "", + Message: createEventBridgeEvent(event), + MessageAttributes: {}, + Type: "Notification", + UnsubscribeUrl: "", + TopicArn: "", + Subject: "", + Token: "", + }; +} + +function createNotification(event: SupportedEvent): Partial { + return { + SignatureVersion: "", + Timestamp: "", + Signature: "", + SigningCertUrl: "", + MessageId: "", + Message: JSON.stringify(event), + MessageAttributes: {}, + Type: "Notification", + UnsubscribeUrl: "", + TopicArn: "", + Subject: "", + Token: "", + }; +} + +function createEventBridgeEvent(event: SupportedEvent): string { + const now = new Date().toISOString(); + const eventBridgeEnvelope = { + version: "0", + id: "4f28e649-6832-18e8-7261-4b63e6dcd3b5", + "detail-type": event.type, + source: "custom.event", + account: "815490582396", + time: now, + region: "eu-west-2", + resources: [], + detail: event, + }; + return JSON.stringify(eventBridgeEnvelope); +} + +describe("createAllocatedLetterHandler", () => { + let mockSqsClient: jest.Mocked; + let mockedDeps: jest.Mocked; beforeEach(() => { + mockSqsClient = { + send: jest.fn(), + } as unknown as jest.Mocked; + + mockedDeps = { + logger: { error: jest.fn(), info: jest.fn() } as unknown as pino.Logger, + env: { + LETTERS_TABLE_NAME: "LETTERS_TABLE_NAME", + LETTER_TTL_HOURS: 12_960, + VARIANT_MAP: { + lv1: { + supplierId: "supplier1", + specId: "spec1", + }, + }, + } as EnvVars, + sqsClient: mockSqsClient, + } as jest.Mocked; + jest.clearAllMocks(); }); - test("processes all records successfully and returns no batch failures", async () => { + test("parses SNS notification and sends message to SQS queue for v2 event", async () => { + const preparedEvent = createPreparedV2Event(); + const snsNotification = createEventBridgeNotification(preparedEvent); + const evt: SQSEvent = createSQSEvent([ - createSqsRecord( - "msg1", - JSON.stringify(createEventBridgeNotification(createPreparedV2Event())), - ), - createSqsRecord( - "msg2", - JSON.stringify(createNotification(createSupplierStatusChangeEvent())), - ), + createSqsRecord("msg1", JSON.stringify(snsNotification)), ]); - const result = await createUpsertLetterHandler(mockedDeps)( - evt, - {} as any, - {} as any, + process.env.ALLOCATED_LETTERS_QUEUE_URL = "https://sqs.test.queue"; + + const handler = createAllocatedLetterHandler(mockedDeps); + const result = await handler(evt, {} as any, {} as any); + + expect(result).toBeDefined(); + if (!result) throw new Error("expected BatchResponse, got void"); + + expect(result.batchItemFailures).toHaveLength(0); + + expect(mockSqsClient.send).toHaveBeenCalledTimes(1); + const sendCall = (mockSqsClient.send as jest.Mock).mock.calls[0][0]; + expect(sendCall).toBeInstanceOf(SendMessageCommand); + + const messageBody = JSON.parse(sendCall.input.MessageBody); + expect(messageBody.letterEvent).toEqual(preparedEvent); + expect(messageBody.operationType).toBe( + "uk.nhs.notify.letter-rendering.letter-request.prepared.v2", ); + expect(messageBody.supplierSpec).toEqual({ + supplierId: "supplier1", + specId: "spec1", + }); + }); + + test("parses SNS notification and sends message to SQS queue for v1 event", async () => { + const preparedEvent = createPreparedV1Event(); + const snsNotification = createEventBridgeNotification(preparedEvent); + + const evt: SQSEvent = createSQSEvent([ + createSqsRecord("msg1", JSON.stringify(snsNotification)), + ]); + + process.env.ALLOCATED_LETTERS_QUEUE_URL = "https://sqs.test.queue"; + + const handler = createAllocatedLetterHandler(mockedDeps); + const result = await handler(evt, {} as any, {} as any); expect(result).toBeDefined(); if (!result) throw new Error("expected BatchResponse, got void"); + expect(result.batchItemFailures).toHaveLength(0); - expect(mockedDeps.letterRepo.putLetter).toHaveBeenCalledTimes(1); - expect(mockedDeps.letterRepo.updateLetterStatus).toHaveBeenCalledTimes(1); - - const firstArg = (mockedDeps.letterRepo.putLetter as jest.Mock).mock - .calls[0][0]; - expect(firstArg.id).toBe("letter1"); - expect(firstArg.supplierId).toBe("supplier1"); - expect(firstArg.specificationId).toBe("spec1"); - expect(firstArg.url).toBe("s3://letterDataBucket/letter1.pdf"); - expect(firstArg.status).toBe("PENDING"); - expect(firstArg.groupId).toBe("client1campaign1template1"); - expect(firstArg.source).toBe("/data-plane/letter-rendering/test"); - - const secondArg = (mockedDeps.letterRepo.updateLetterStatus as jest.Mock) - .mock.calls[0][0]; - expect(secondArg.id).toBe("f47ac10b-58cc-4372-a567-0e02b2c3d479"); - expect(secondArg.supplierId).toBe("supplier1"); - expect(secondArg.status).toBe("RETURNED"); - expect(secondArg.reasonCode).toBe("R07"); - expect(secondArg.reasonText).toBe("No such address"); + expect(mockSqsClient.send).toHaveBeenCalledTimes(1); + const sendCall = (mockSqsClient.send as jest.Mock).mock.calls[0][0]; + const messageBody = JSON.parse(sendCall.input.MessageBody); + expect(messageBody.operationType).toBe( + "uk.nhs.notify.letter-rendering.letter-request.prepared.v1", + ); + expect(messageBody.supplierSpec).toEqual({ + supplierId: "supplier1", + specId: "spec1", + }); + }); + + test("parses SNS notification and sends message to SQS queue for update event", async () => { + const preparedEvent = createSupplierStatusChangeEvent(); + const snsNotification = createNotification(preparedEvent); + + const evt: SQSEvent = createSQSEvent([ + createSqsRecord("msg1", JSON.stringify(snsNotification)), + ]); + + process.env.ALLOCATED_LETTERS_QUEUE_URL = "https://sqs.test.queue"; + + const handler = createAllocatedLetterHandler(mockedDeps); + const result = await handler(evt, {} as any, {} as any); + + expect(result).toBeDefined(); + if (!result) throw new Error("expected BatchResponse, got void"); + + expect(result.batchItemFailures).toHaveLength(0); + + expect(mockSqsClient.send).toHaveBeenCalledTimes(1); + const sendCall = (mockSqsClient.send as jest.Mock).mock.calls[0][0]; + const messageBody = JSON.parse(sendCall.input.MessageBody); + expect(messageBody.operationType).toBe( + "uk.nhs.notify.supplier-api.letter.RETURNED.v1", + ); + expect(messageBody.supplierSpec).toBeUndefined(); + }); + + test("unwraps EventBridge envelope and extracts event details", async () => { + const preparedEvent = createPreparedV2Event({ domainId: "letter-test" }); + const snsNotification = createEventBridgeNotification(preparedEvent); + + const evt: SQSEvent = createSQSEvent([ + createSqsRecord("msg1", JSON.stringify(snsNotification)), + ]); + + process.env.ALLOCATED_LETTERS_QUEUE_URL = "https://sqs.test.queue"; + + const handler = createAllocatedLetterHandler(mockedDeps); + await handler(evt, {} as any, {} as any); + + const sendCall = (mockSqsClient.send as jest.Mock).mock.calls[0][0]; + const messageBody = JSON.parse(sendCall.input.MessageBody); + expect(messageBody.letterEvent.data.domainId).toBe("letter-test"); }); - test("processes all v1 records successfully and returns no batch failures", async () => { + test("resolves correct supplier spec from variant map", async () => { + const preparedEvent = createPreparedV2Event(); + const snsNotification = createEventBridgeNotification(preparedEvent); + + const evt: SQSEvent = createSQSEvent([ + createSqsRecord("msg1", JSON.stringify(snsNotification)), + ]); + + process.env.ALLOCATED_LETTERS_QUEUE_URL = "https://sqs.test.queue"; + + const handler = createAllocatedLetterHandler(mockedDeps); + await handler(evt, {} as any, {} as any); + + const sendCall = (mockSqsClient.send as jest.Mock).mock.calls[0][0]; + const messageBody = JSON.parse(sendCall.input.MessageBody); + expect(messageBody.supplierSpec.supplierId).toBe("supplier1"); + expect(messageBody.supplierSpec.specId).toBe("spec1"); + }); + + test("processes multiple messages in batch", async () => { const evt: SQSEvent = createSQSEvent([ createSqsRecord( "msg1", - JSON.stringify(createNotification(createPreparedV1Event())), + JSON.stringify( + createEventBridgeNotification( + createPreparedV2Event({ domainId: "letter1" }), + ), + ), ), createSqsRecord( "msg2", JSON.stringify( - createNotification( - createPreparedV1Event({ - id: "7b9a03ca-342a-4150-b56b-989109c45614", - domainId: "letter2", - url: "s3://letterDataBucket/letter2.pdf", - }), + createEventBridgeNotification( + createPreparedV2Event({ domainId: "letter2" }), ), ), ), ]); - const result = await createUpsertLetterHandler(mockedDeps)( - evt, - {} as any, - {} as any, - ); + process.env.ALLOCATED_LETTERS_QUEUE_URL = "https://sqs.test.queue"; + + const handler = createAllocatedLetterHandler(mockedDeps); + const result = await handler(evt, {} as any, {} as any); expect(result).toBeDefined(); if (!result) throw new Error("expected BatchResponse, got void"); - expect(result.batchItemFailures).toHaveLength(0); - expect(mockedDeps.letterRepo.putLetter).toHaveBeenCalledTimes(2); - - const firstArg = (mockedDeps.letterRepo.putLetter as jest.Mock).mock - .calls[0][0]; - expect(firstArg.id).toBe("letter1"); - expect(firstArg.supplierId).toBe("supplier1"); - expect(firstArg.specificationId).toBe("spec1"); - expect(firstArg.url).toBe("s3://letterDataBucket/letter1.pdf"); - expect(firstArg.status).toBe("PENDING"); - expect(firstArg.groupId).toBe("client1campaign1template1"); - expect(firstArg.source).toBe("/data-plane/letter-rendering/test"); - - const secondArg = (mockedDeps.letterRepo.putLetter as jest.Mock).mock - .calls[1][0]; - expect(secondArg.id).toBe("letter2"); - expect(secondArg.supplierId).toBe("supplier1"); - expect(secondArg.specificationId).toBe("spec1"); - expect(secondArg.url).toBe("s3://letterDataBucket/letter2.pdf"); - expect(secondArg.status).toBe("PENDING"); - expect(secondArg.groupId).toBe("client1campaign1template1"); - expect(firstArg.source).toBe("/data-plane/letter-rendering/test"); + expect(result.batchItemFailures).toHaveLength(0); + expect(mockSqsClient.send).toHaveBeenCalledTimes(2); }); - test("invalid JSON body produces batch failure and logs error", async () => { + test("returns batch failure for invalid JSON", async () => { const evt: SQSEvent = createSQSEvent([ createSqsRecord("bad-json", "this-is-not-json"), ]); - const result = await createUpsertLetterHandler(mockedDeps)( - evt, - {} as any, - {} as any, - ); + process.env.ALLOCATED_LETTERS_QUEUE_URL = "https://sqs.test.queue"; + + const handler = createAllocatedLetterHandler(mockedDeps); + const result = await handler(evt, {} as any, {} as any); expect(result).toBeDefined(); if (!result) throw new Error("expected BatchResponse, got void"); + expect(result.batchItemFailures).toHaveLength(1); expect(result.batchItemFailures[0].itemIdentifier).toBe("bad-json"); - - expect((mockedDeps.logger.error as jest.Mock).mock.calls[0][1]).toBe( - "Error processing upsert of record bad-json", - ); - expect(mockedDeps.letterRepo.putLetter).not.toHaveBeenCalled(); + expect((mockedDeps.logger.error as jest.Mock).mock.calls).toHaveLength(1); }); - test("invalid notification schema produces batch failure and logs error", async () => { + test("returns batch failure for invalid SNS notification schema", async () => { const evt: SQSEvent = createSQSEvent([ createSqsRecord( - "bad-notification-schema", - JSON.stringify({ not: "unexpected notification shape" }), + "bad-notification", + JSON.stringify({ not: "a valid notification" }), ), ]); - const result = await createUpsertLetterHandler(mockedDeps)( - evt, - {} as any, - {} as any, - ); + process.env.ALLOCATED_LETTERS_QUEUE_URL = "https://sqs.test.queue"; + + const handler = createAllocatedLetterHandler(mockedDeps); + const result = await handler(evt, {} as any, {} as any); expect(result).toBeDefined(); if (!result) throw new Error("expected BatchResponse, got void"); - expect(result.batchItemFailures).toHaveLength(1); - expect(result.batchItemFailures[0].itemIdentifier).toBe( - "bad-notification-schema", - ); - expect((mockedDeps.logger.error as jest.Mock).mock.calls[0][1]).toBe( - "Error processing upsert of record bad-notification-schema", - ); - expect(mockedDeps.letterRepo.putLetter).not.toHaveBeenCalled(); + expect(result.batchItemFailures).toHaveLength(1); + expect(result.batchItemFailures[0].itemIdentifier).toBe("bad-notification"); }); - test("no event type produces batch failure and logs error", async () => { + test("returns batch failure when SNS Message is missing", async () => { + const snsMessage: Partial = { + Type: "Notification", + MessageId: "test-id", + }; + const evt: SQSEvent = createSQSEvent([ - createSqsRecord( - "bad-event-type", - JSON.stringify({ - Type: "Notification", - Message: JSON.stringify({ no: "type" }), - }), - ), + createSqsRecord("no-message", JSON.stringify(snsMessage)), ]); - const result = await createUpsertLetterHandler(mockedDeps)( - evt, - {} as any, - {} as any, - ); + process.env.ALLOCATED_LETTERS_QUEUE_URL = "https://sqs.test.queue"; - expect(result).toBeDefined(); + const handler = createAllocatedLetterHandler(mockedDeps); + const result = await handler(evt, {} as any, {} as any); if (!result) throw new Error("expected BatchResponse, got void"); + expect(result.batchItemFailures).toHaveLength(1); - expect(result.batchItemFailures[0].itemIdentifier).toBe("bad-event-type"); - expect(mockedDeps.letterRepo.putLetter).not.toHaveBeenCalled(); - expect(mockedDeps.letterRepo.updateLetterStatus).not.toHaveBeenCalled(); - expect((mockedDeps.logger.error as jest.Mock).mock.calls[0][1]).toBe( - "Error processing upsert of record bad-event-type", - ); + expect(result.batchItemFailures[0].itemIdentifier).toBe("no-message"); }); - test("invalid event type produces batch failure and logs error", async () => { + test("returns batch failure when event type is missing", async () => { + const event = { no: "type" }; + const snsNotification: Partial = { + Type: "Notification", + Message: JSON.stringify(event), + MessageId: "test-id", + }; + const evt: SQSEvent = createSQSEvent([ - createSqsRecord( - "bad-event-type", - JSON.stringify({ - Type: "Notification", - Message: JSON.stringify({ type: "unexpected type" }), - }), - ), + createSqsRecord("no-type", JSON.stringify(snsNotification)), ]); - const result = await createUpsertLetterHandler(mockedDeps)( - evt, - {} as any, - {} as any, - ); + process.env.ALLOCATED_LETTERS_QUEUE_URL = "https://sqs.test.queue"; - expect(result).toBeDefined(); + const handler = createAllocatedLetterHandler(mockedDeps); + const result = await handler(evt, {} as any, {} as any); if (!result) throw new Error("expected BatchResponse, got void"); + expect(result.batchItemFailures).toHaveLength(1); - expect(result.batchItemFailures[0].itemIdentifier).toBe("bad-event-type"); - expect(mockedDeps.letterRepo.putLetter).not.toHaveBeenCalled(); - expect(mockedDeps.letterRepo.updateLetterStatus).not.toHaveBeenCalled(); - expect((mockedDeps.logger.error as jest.Mock).mock.calls[0][1]).toBe( - "Error processing upsert of record bad-event-type", - ); + expect(result.batchItemFailures[0].itemIdentifier).toBe("no-type"); }); - test("valid event type and invalid schema produces batch failure and logs error", async () => { + test("returns batch failure when ALLOCATED_LETTERS_QUEUE_URL is not set", async () => { + const preparedEvent = createPreparedV2Event(); + const snsNotification = createEventBridgeNotification(preparedEvent); + const evt: SQSEvent = createSQSEvent([ - createSqsRecord( - "bad-event-schema", - JSON.stringify({ - Type: "Notification", - Message: JSON.stringify({ - type: "uk.nhs.notify.letter-rendering.letter-request.prepared", - some: "unexpected shape", - }), - }), - ), + createSqsRecord("msg1", JSON.stringify(snsNotification)), ]); - const result = await createUpsertLetterHandler(mockedDeps)( - evt, - {} as any, - {} as any, - ); + delete process.env.ALLOCATED_LETTERS_QUEUE_URL; - expect(result).toBeDefined(); + const handler = createAllocatedLetterHandler(mockedDeps); + const result = await handler(evt, {} as any, {} as any); if (!result) throw new Error("expected BatchResponse, got void"); + expect(result.batchItemFailures).toHaveLength(1); - expect(result.batchItemFailures[0].itemIdentifier).toBe("bad-event-schema"); - expect(mockedDeps.letterRepo.putLetter).not.toHaveBeenCalled(); - expect(mockedDeps.letterRepo.updateLetterStatus).not.toHaveBeenCalled(); - expect((mockedDeps.logger.error as jest.Mock).mock.calls[0][1]).toBe( - "Error processing upsert of record bad-event-schema", + expect(result.batchItemFailures[0].itemIdentifier).toBe("msg1"); + expect((mockedDeps.logger.error as jest.Mock).mock.calls[0][0].err).toEqual( + expect.objectContaining({ + message: "ALLOCATED_LETTERS_QUEUE_URL not configured", + }), ); }); - test("repository throwing for one record causes that message to be returned in batch failures while others succeed", async () => { - (mockedDeps.letterRepo.putLetter as jest.Mock) - .mockResolvedValueOnce({}) - .mockRejectedValueOnce(new Error("ddb error")); + test("handles SQS send errors and returns batch failure", async () => { + const preparedEvent = createPreparedV2Event(); + const snsNotification = createEventBridgeNotification(preparedEvent); + + const evt: SQSEvent = createSQSEvent([ + createSqsRecord("msg1", JSON.stringify(snsNotification)), + ]); + + process.env.ALLOCATED_LETTERS_QUEUE_URL = "https://sqs.test.queue"; + const sqsError = new Error("SQS send failed"); + (mockSqsClient.send as jest.Mock).mockRejectedValueOnce(sqsError); + + const handler = createAllocatedLetterHandler(mockedDeps); + const result = await handler(evt, {} as any, {} as any); + if (!result) throw new Error("expected BatchResponse, got void"); + + expect(result.batchItemFailures).toHaveLength(1); + expect(result.batchItemFailures[0].itemIdentifier).toBe("msg1"); + expect((mockedDeps.logger.error as jest.Mock).mock.calls).toHaveLength(1); + }); + + test("processes mixed batch with successes and failures", async () => { const evt: SQSEvent = createSQSEvent([ createSqsRecord( "ok-msg", JSON.stringify( - createNotification( - createPreparedV2Event({ - id: "7b9a03ca-342a-4150-b56b-989109c45615", - domainId: "ok", - }), + createEventBridgeNotification( + createPreparedV2Event({ domainId: "letter1" }), ), ), ), + createSqsRecord("fail-msg", "invalid-json"), createSqsRecord( - "fail-msg", + "ok-msg-2", JSON.stringify( - createNotification( - createPreparedV2Event({ - id: "7b9a03ca-342a-4150-b56b-989109c45616", - domainId: "fail", - }), + createEventBridgeNotification( + createPreparedV2Event({ domainId: "letter2" }), ), ), ), ]); - const result = await createUpsertLetterHandler(mockedDeps)( - evt, - {} as any, - {} as any, - ); - - expect(mockedDeps.letterRepo.putLetter).toHaveBeenCalledTimes(2); + process.env.ALLOCATED_LETTERS_QUEUE_URL = "https://sqs.test.queue"; + const handler = createAllocatedLetterHandler(mockedDeps); + const result = await handler(evt, {} as any, {} as any); if (!result) throw new Error("expected BatchResponse, got void"); + expect(result.batchItemFailures).toHaveLength(1); expect(result.batchItemFailures[0].itemIdentifier).toBe("fail-msg"); - expect(mockedDeps.logger.error).toHaveBeenCalled(); + expect(mockSqsClient.send).toHaveBeenCalledTimes(2); + }); + + test("does not include supplierSpec for non-insert event types", async () => { + const event = { + type: "uk.nhs.notify.supplier-api.letter.RETURNED.v1", + data: { status: "RETURNED" }, + }; + const snsNotification: Partial = { + Type: "Notification", + Message: JSON.stringify(event), + MessageId: "test-id", + }; + + const evt: SQSEvent = createSQSEvent([ + createSqsRecord("supplier-event", JSON.stringify(snsNotification)), + ]); + + process.env.ALLOCATED_LETTERS_QUEUE_URL = "https://sqs.test.queue"; + + const handler = createAllocatedLetterHandler(mockedDeps); + const result = await handler(evt, {} as any, {} as any); + if (!result) throw new Error("expected BatchResponse, got void"); + + expect(result.batchItemFailures).toHaveLength(0); + + const sendCall = (mockSqsClient.send as jest.Mock).mock.calls[0][0]; + const messageBody = JSON.parse(sendCall.input.MessageBody); + expect(messageBody.letterEvent).toEqual(event); + expect(messageBody.operationType).toBe( + "uk.nhs.notify.supplier-api.letter.RETURNED.v1", + ); + expect(messageBody.supplierSpec).toBeUndefined(); + }); + + test("sends correct queue URL in SQS message command", async () => { + const preparedEvent = createPreparedV2Event(); + const snsNotification = createEventBridgeNotification(preparedEvent); + + const evt: SQSEvent = createSQSEvent([ + createSqsRecord("msg1", JSON.stringify(snsNotification)), + ]); + + const queueUrl = "https://sqs.eu-west-2.amazonaws.com/123456789/test-queue"; + process.env.ALLOCATED_LETTERS_QUEUE_URL = queueUrl; + + const handler = createAllocatedLetterHandler(mockedDeps); + await handler(evt, {} as any, {} as any); + + const sendCall = (mockSqsClient.send as jest.Mock).mock.calls[0][0]; + expect(sendCall.input.QueueUrl).toBe(queueUrl); }); }); diff --git a/lambdas/allocate-letter/src/handler/allocate-handler.ts b/lambdas/allocate-letter/src/handler/allocate-handler.ts index d12860e75..5809f1e60 100644 --- a/lambdas/allocate-letter/src/handler/allocate-handler.ts +++ b/lambdas/allocate-letter/src/handler/allocate-handler.ts @@ -9,8 +9,9 @@ import { SendMessageCommand } from "@aws-sdk/client-sqs"; import { LetterRequestPreparedEvent } from "@nhsdigital/nhs-notify-event-schemas-letter-rendering-v1"; import { LetterRequestPreparedEventV2 } from "@nhsdigital/nhs-notify-event-schemas-letter-rendering"; -import z from "zod"; +import z, { url } from "zod"; import { Deps } from "../config/deps"; +import { de } from "zod/v4/locales"; type SupplierSpec = { supplierId: string; specId: string }; type PreparedEvents = LetterRequestPreparedEventV2 | LetterRequestPreparedEvent; @@ -61,7 +62,7 @@ function getSupplier(letterEvent: PreparedEvents, deps: Deps): SupplierSpec { function isInsert(type: string): boolean { return ( type === "uk.nhs.notify.letter-rendering.letter-request.prepared.v2" || - type === "uk.nhs.notify.letter-rendering.letter-request.prepared" // legacy schema + type === "uk.nhs.notify.letter-rendering.letter-request.prepared.v1" // legacy schema ); } @@ -96,6 +97,11 @@ export default function createAllocatedLetterHandler(deps: Deps): SQSHandler { ...(supplierSpec && { supplierSpec }), }; + deps.logger.info( + { msg: queueMessage, url: queueUrl }, + "Sending message to allocated letters queue", + ); + await deps.sqsClient.send( new SendMessageCommand({ QueueUrl: queueUrl, diff --git a/lambdas/upsert-letter/src/config/__tests__/env.test.ts b/lambdas/upsert-letter/src/config/__tests__/env.test.ts index 3c3de2309..7f3462798 100644 --- a/lambdas/upsert-letter/src/config/__tests__/env.test.ts +++ b/lambdas/upsert-letter/src/config/__tests__/env.test.ts @@ -17,31 +17,17 @@ describe("lambdaEnv", () => { it("should load all environment variables successfully", () => { process.env.LETTERS_TABLE_NAME = "letters-table"; process.env.LETTER_TTL_HOURS = "12960"; - process.env.VARIANT_MAP = `{ - "lv1": { - "supplierId": "supplier1", - "specId": "spec1" - } - }`; const { envVars } = require("../env"); expect(envVars).toEqual({ LETTERS_TABLE_NAME: "letters-table", LETTER_TTL_HOURS: 12_960, - VARIANT_MAP: { - lv1: { - supplierId: "supplier1", - specId: "spec1", - }, - }, }); }); it("should throw if a required env var is missing", () => { process.env.LETTERS_TABLE_NAME = "table"; - process.env.LETTER_TTL_HOURS = "12960"; - process.env.VARIANT_MAP = undefined; expect(() => require("../env")).toThrow(ZodError); }); diff --git a/lambdas/upsert-letter/src/config/env.ts b/lambdas/upsert-letter/src/config/env.ts index 8230088bc..05fc909af 100644 --- a/lambdas/upsert-letter/src/config/env.ts +++ b/lambdas/upsert-letter/src/config/env.ts @@ -1,14 +1,5 @@ import { z } from "zod"; -const LetterVariantSchema = z.record( - z.string(), - z.object({ - supplierId: z.string(), - specId: z.string(), - }), -); -export type LetterVariant = z.infer; - const EnvVarsSchema = z.object({ LETTERS_TABLE_NAME: z.string(), LETTER_TTL_HOURS: z.coerce.number().int(), diff --git a/lambdas/upsert-letter/src/handler/__tests__/upsert-handler.test.ts b/lambdas/upsert-letter/src/handler/__tests__/upsert-handler.test.ts index a94942d06..0fa343750 100644 --- a/lambdas/upsert-letter/src/handler/__tests__/upsert-handler.test.ts +++ b/lambdas/upsert-letter/src/handler/__tests__/upsert-handler.test.ts @@ -1,4 +1,4 @@ -import { SNSMessage, SQSEvent, SQSRecord } from "aws-lambda"; +import { SQSEvent, SQSRecord } from "aws-lambda"; import pino from "pino"; import { LetterRepository } from "internal/datastore/src"; import { LetterRequestPreparedEventV2 } from "@nhsdigital/nhs-notify-event-schemas-letter-rendering"; @@ -36,63 +36,6 @@ function createSqsRecord(msgId: string, body: string): SQSRecord { }; } -type SupportedEvent = - | LetterRequestPreparedEventV2 - | LetterRequestPreparedEvent - | LetterEvent; - -function createEventBridgeNotification( - event: SupportedEvent, -): Partial { - return { - SignatureVersion: "", - Timestamp: "", - Signature: "", - SigningCertUrl: "", - MessageId: "", - Message: createEventBridgeEvent(event), - MessageAttributes: {}, - Type: "Notification", - UnsubscribeUrl: "", - TopicArn: "", - Subject: "", - Token: "", - }; -} - -function createNotification(event: SupportedEvent): Partial { - return { - SignatureVersion: "", - Timestamp: "", - Signature: "", - SigningCertUrl: "", - MessageId: "", - Message: JSON.stringify(event), - MessageAttributes: {}, - Type: "Notification", - UnsubscribeUrl: "", - TopicArn: "", - Subject: "", - Token: "", - }; -} - -function createEventBridgeEvent(event: SupportedEvent): string { - const now = new Date().toISOString(); - const eventBridgeEnvelope = { - version: "0", - id: "4f28e649-6832-18e8-7261-4b63e6dcd3b5", - "detail-type": event.type, - source: "custom.event", - account: "815490582396", - time: now, - region: "eu-west-2", - resources: [], - detail: event, - }; - return JSON.stringify(eventBridgeEnvelope); -} - function createPreparedV1Event( overrides: Partial = {}, ): LetterRequestPreparedEvent { @@ -196,12 +139,6 @@ describe("createUpsertLetterHandler", () => { env: { LETTERS_TABLE_NAME: "LETTERS_TABLE_NAME", LETTER_TTL_HOURS: 12_960, - VARIANT_MAP: { - lv1: { - supplierId: "supplier1", - specId: "spec1", - }, - }, } as EnvVars, } as Deps; @@ -210,68 +147,28 @@ describe("createUpsertLetterHandler", () => { }); test("processes all records successfully and returns no batch failures", async () => { - const evt: SQSEvent = createSQSEvent([ - createSqsRecord( - "msg1", - JSON.stringify(createEventBridgeNotification(createPreparedV2Event())), - ), - createSqsRecord( - "msg2", - JSON.stringify(createNotification(createSupplierStatusChangeEvent())), - ), - ]); - - const result = await createUpsertLetterHandler(mockedDeps)( - evt, - {} as any, - {} as any, - ); - - expect(result).toBeDefined(); - if (!result) throw new Error("expected BatchResponse, got void"); - expect(result.batchItemFailures).toHaveLength(0); - - expect(mockedDeps.letterRepo.putLetter).toHaveBeenCalledTimes(1); - expect(mockedDeps.letterRepo.updateLetterStatus).toHaveBeenCalledTimes(1); + const v2message = { + letterEvent: createPreparedV2Event(), + operationType: + "uk.nhs.notify.letter-rendering.letter-request.prepared.v2", + supplierSpec: { supplierId: "supplier1", specId: "spec1" }, + }; + const v1message = { + letterEvent: createPreparedV1Event(), + operationType: + "uk.nhs.notify.letter-rendering.letter-request.prepared.v1", + supplierSpec: { supplierId: "supplier1", specId: "spec1" }, + }; + const updateMessage = { + letterEvent: createSupplierStatusChangeEvent(), + operationType: "uk.nhs.notify.supplier-api.letter.RETURNED.v1", + supplierSpec: undefined, + }; - const firstArg = (mockedDeps.letterRepo.putLetter as jest.Mock).mock - .calls[0][0]; - expect(firstArg.id).toBe("letter1"); - expect(firstArg.eventId).toBe("7b9a03ca-342a-4150-b56b-989109c45613"); - expect(firstArg.supplierId).toBe("supplier1"); - expect(firstArg.specificationId).toBe("spec1"); - expect(firstArg.url).toBe("s3://letterDataBucket/letter1.pdf"); - expect(firstArg.status).toBe("PENDING"); - expect(firstArg.groupId).toBe("client1campaign1template1"); - expect(firstArg.source).toBe("/data-plane/letter-rendering/test"); - - const secondArg = (mockedDeps.letterRepo.updateLetterStatus as jest.Mock) - .mock.calls[0][0]; - expect(secondArg.id).toBe("f47ac10b-58cc-4372-a567-0e02b2c3d479"); - expect(secondArg.supplierId).toBe("supplier1"); - expect(secondArg.status).toBe("RETURNED"); - expect(secondArg.reasonCode).toBe("R07"); - expect(secondArg.reasonText).toBe("No such address"); - }); - - test("processes all v1 records successfully and returns no batch failures", async () => { const evt: SQSEvent = createSQSEvent([ - createSqsRecord( - "msg1", - JSON.stringify(createNotification(createPreparedV1Event())), - ), - createSqsRecord( - "msg2", - JSON.stringify( - createNotification( - createPreparedV1Event({ - id: "7b9a03ca-342a-4150-b56b-989109c45614", - domainId: "letter2", - url: "s3://letterDataBucket/letter2.pdf", - }), - ), - ), - ), + createSqsRecord("msg1", JSON.stringify(v2message)), + createSqsRecord("msg2", JSON.stringify(v1message)), + createSqsRecord("msg3", JSON.stringify(updateMessage)), ]); const result = await createUpsertLetterHandler(mockedDeps)( @@ -285,29 +182,40 @@ describe("createUpsertLetterHandler", () => { expect(result.batchItemFailures).toHaveLength(0); expect(mockedDeps.letterRepo.putLetter).toHaveBeenCalledTimes(2); - - const firstArg = (mockedDeps.letterRepo.putLetter as jest.Mock).mock + expect(mockedDeps.letterRepo.updateLetterStatus).toHaveBeenCalledTimes(1); + const insertedV2Letter = (mockedDeps.letterRepo.putLetter as jest.Mock).mock .calls[0][0]; - expect(firstArg.id).toBe("letter1"); - expect(firstArg.supplierId).toBe("supplier1"); - expect(firstArg.specificationId).toBe("spec1"); - expect(firstArg.url).toBe("s3://letterDataBucket/letter1.pdf"); - expect(firstArg.status).toBe("PENDING"); - expect(firstArg.groupId).toBe("client1campaign1template1"); - expect(firstArg.source).toBe("/data-plane/letter-rendering/test"); - - const secondArg = (mockedDeps.letterRepo.putLetter as jest.Mock).mock + expect(insertedV2Letter.id).toBe("letter1"); + expect(insertedV2Letter.supplierId).toBe("supplier1"); + expect(insertedV2Letter.specificationId).toBe("spec1"); + expect(insertedV2Letter.billingRef).toBe("spec1"); + expect(insertedV2Letter.url).toBe("s3://letterDataBucket/letter1.pdf"); + expect(insertedV2Letter.status).toBe("PENDING"); + expect(insertedV2Letter.groupId).toBe("client1campaign1template1"); + expect(insertedV2Letter.source).toBe("/data-plane/letter-rendering/test"); + + const insertedV1Letter = (mockedDeps.letterRepo.putLetter as jest.Mock).mock .calls[1][0]; - expect(secondArg.id).toBe("letter2"); - expect(secondArg.supplierId).toBe("supplier1"); - expect(secondArg.specificationId).toBe("spec1"); - expect(secondArg.url).toBe("s3://letterDataBucket/letter2.pdf"); - expect(secondArg.status).toBe("PENDING"); - expect(secondArg.groupId).toBe("client1campaign1template1"); - expect(firstArg.source).toBe("/data-plane/letter-rendering/test"); + expect(insertedV1Letter.id).toBe("letter1"); + expect(insertedV1Letter.supplierId).toBe("supplier1"); + expect(insertedV1Letter.specificationId).toBe("spec1"); + expect(insertedV1Letter.billingRef).toBe("spec1"); + expect(insertedV1Letter.url).toBe("s3://letterDataBucket/letter1.pdf"); + expect(insertedV1Letter.status).toBe("PENDING"); + expect(insertedV1Letter.groupId).toBe("client1campaign1template1"); + expect(insertedV1Letter.source).toBe("/data-plane/letter-rendering/test"); + + const updatedLetter = ( + mockedDeps.letterRepo.updateLetterStatus as jest.Mock + ).mock.calls[0][0]; + expect(updatedLetter.id).toBe("f47ac10b-58cc-4372-a567-0e02b2c3d479"); + expect(updatedLetter.status).toBe("RETURNED"); + expect(updatedLetter.reasonCode).toBe("R07"); + expect(updatedLetter.reasonText).toBe("No such address"); + expect(updatedLetter.supplierId).toBe("supplier1"); }); - test("invalid JSON body produces batch failure and logs error", async () => { + test("invalid JSON produces batch failure and logs error", async () => { const evt: SQSEvent = createSQSEvent([ createSqsRecord("bad-json", "this-is-not-json"), ]); @@ -332,12 +240,16 @@ describe("createUpsertLetterHandler", () => { expect(mockedDeps.letterRepo.putLetter).not.toHaveBeenCalled(); }); - test("invalid notification schema produces batch failure and logs error", async () => { + test("invalid letter event schema produces batch failure", async () => { + const message = { + letterEvent: { someField: "invalid" }, + operationType: + "uk.nhs.notify.letter-rendering.letter-request.prepared.v2", + supplierSpec: { supplierId: "supplier1", specId: "spec1" }, + }; + const evt: SQSEvent = createSQSEvent([ - createSqsRecord( - "bad-notification-schema", - JSON.stringify({ not: "unexpected notification shape" }), - ), + createSqsRecord("bad-schema", JSON.stringify(message)), ]); const result = await createUpsertLetterHandler(mockedDeps)( @@ -395,13 +307,7 @@ describe("createUpsertLetterHandler", () => { test("invalid event type produces batch failure and logs error", async () => { const evt: SQSEvent = createSQSEvent([ - createSqsRecord( - "bad-event-type", - JSON.stringify({ - Type: "Notification", - Message: JSON.stringify({ type: "unexpected type" }), - }), - ), + createSqsRecord("unknown-op", JSON.stringify(message)), ]); const result = await createUpsertLetterHandler(mockedDeps)( @@ -427,15 +333,15 @@ describe("createUpsertLetterHandler", () => { test("valid event type and invalid schema produces batch failure and logs error", async () => { const evt: SQSEvent = createSQSEvent([ createSqsRecord( - "bad-event-schema", + "ok-msg", JSON.stringify({ - Type: "Notification", - Message: JSON.stringify({ - type: "uk.nhs.notify.letter-rendering.letter-request.prepared", - some: "unexpected shape", - }), + letterEvent: createPreparedV2Event(), + operationType: + "uk.nhs.notify.letter-rendering.letter-request.prepared.v2", + supplierSpec: { supplierId: "supplier1", specId: "spec1" }, }), ), + createSqsRecord("fail-msg", "invalid-json"), ]); const result = await createUpsertLetterHandler(mockedDeps)( @@ -500,6 +406,6 @@ describe("createUpsertLetterHandler", () => { expect(result.batchItemFailures).toHaveLength(1); expect(result.batchItemFailures[0].itemIdentifier).toBe("fail-msg"); - expect(mockedDeps.logger.error).toHaveBeenCalled(); + expect(mockedDeps.letterRepo.putLetter).toHaveBeenCalledTimes(1); }); }); diff --git a/lambdas/upsert-letter/src/handler/upsert-handler.ts b/lambdas/upsert-letter/src/handler/upsert-handler.ts index 6d9a88a81..acfbb18a6 100644 --- a/lambdas/upsert-letter/src/handler/upsert-handler.ts +++ b/lambdas/upsert-letter/src/handler/upsert-handler.ts @@ -1,10 +1,4 @@ -import { - SNSMessage, - SQSBatchItemFailure, - SQSEvent, - SQSHandler, - SQSRecord, -} from "aws-lambda"; +import { SQSBatchItemFailure, SQSEvent, SQSHandler } from "aws-lambda"; import { InsertLetter, UpdateLetter } from "@internal/datastore"; import { $LetterRequestPreparedEvent, @@ -39,9 +33,6 @@ type UpsertOperation = { ) => Promise; }; -// small envelope that must exist in all inputs -const TypeEnvelope = z.object({ type: z.string().min(1) }); - function getOperationFromType(type: string): UpsertOperation { if (type.startsWith("uk.nhs.notify.letter-rendering.letter-request.prepared")) return { diff --git a/package-lock.json b/package-lock.json index d33bae5f3..ef2dbbcf1 100644 --- a/package-lock.json +++ b/package-lock.json @@ -103,6 +103,136 @@ "typescript": "^5.9.3" } }, + "internal/datastore/node_modules/@aws-sdk/client-dynamodb": { + "version": "3.986.0", + "license": "Apache-2.0", + "dependencies": { + "@aws-crypto/sha256-browser": "5.2.0", + "@aws-crypto/sha256-js": "5.2.0", + "@aws-sdk/core": "^3.973.7", + "@aws-sdk/credential-provider-node": "^3.972.6", + "@aws-sdk/dynamodb-codec": "^3.972.8", + "@aws-sdk/middleware-endpoint-discovery": "^3.972.3", + "@aws-sdk/middleware-host-header": "^3.972.3", + "@aws-sdk/middleware-logger": "^3.972.3", + "@aws-sdk/middleware-recursion-detection": "^3.972.3", + "@aws-sdk/middleware-user-agent": "^3.972.7", + "@aws-sdk/region-config-resolver": "^3.972.3", + "@aws-sdk/types": "^3.973.1", + "@aws-sdk/util-endpoints": "3.986.0", + "@aws-sdk/util-user-agent-browser": "^3.972.3", + "@aws-sdk/util-user-agent-node": "^3.972.5", + "@smithy/config-resolver": "^4.4.6", + "@smithy/core": "^3.22.1", + "@smithy/fetch-http-handler": "^5.3.9", + "@smithy/hash-node": "^4.2.8", + "@smithy/invalid-dependency": "^4.2.8", + "@smithy/middleware-content-length": "^4.2.8", + "@smithy/middleware-endpoint": "^4.4.13", + "@smithy/middleware-retry": "^4.4.30", + "@smithy/middleware-serde": "^4.2.9", + "@smithy/middleware-stack": "^4.2.8", + "@smithy/node-config-provider": "^4.3.8", + "@smithy/node-http-handler": "^4.4.9", + "@smithy/protocol-http": "^5.3.8", + "@smithy/smithy-client": "^4.11.2", + "@smithy/types": "^4.12.0", + "@smithy/url-parser": "^4.2.8", + "@smithy/util-base64": "^4.3.0", + "@smithy/util-body-length-browser": "^4.2.0", + "@smithy/util-body-length-node": "^4.2.1", + "@smithy/util-defaults-mode-browser": "^4.3.29", + "@smithy/util-defaults-mode-node": "^4.2.32", + "@smithy/util-endpoints": "^3.2.8", + "@smithy/util-middleware": "^4.2.8", + "@smithy/util-retry": "^4.2.8", + "@smithy/util-utf8": "^4.2.0", + "@smithy/util-waiter": "^4.2.8", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=20.0.0" + } + }, + "internal/datastore/node_modules/@aws-sdk/core": { + "version": "3.973.7", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/types": "^3.973.1", + "@aws-sdk/xml-builder": "^3.972.4", + "@smithy/core": "^3.22.1", + "@smithy/node-config-provider": "^4.3.8", + "@smithy/property-provider": "^4.2.8", + "@smithy/protocol-http": "^5.3.8", + "@smithy/signature-v4": "^5.3.8", + "@smithy/smithy-client": "^4.11.2", + "@smithy/types": "^4.12.0", + "@smithy/util-base64": "^4.3.0", + "@smithy/util-middleware": "^4.2.8", + "@smithy/util-utf8": "^4.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=20.0.0" + } + }, + "internal/datastore/node_modules/@aws-sdk/lib-dynamodb": { + "version": "3.986.0", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/core": "^3.973.7", + "@aws-sdk/util-dynamodb": "3.986.0", + "@smithy/core": "^3.22.1", + "@smithy/smithy-client": "^4.11.2", + "@smithy/types": "^4.12.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=20.0.0" + }, + "peerDependencies": { + "@aws-sdk/client-dynamodb": "^3.986.0" + } + }, + "internal/datastore/node_modules/@aws-sdk/util-dynamodb": { + "version": "3.986.0", + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=20.0.0" + }, + "peerDependencies": { + "@aws-sdk/client-dynamodb": "^3.986.0" + } + }, + "internal/datastore/node_modules/@aws-sdk/util-endpoints": { + "version": "3.986.0", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/types": "^3.973.1", + "@smithy/types": "^4.12.0", + "@smithy/url-parser": "^4.2.8", + "@smithy/util-endpoints": "^3.2.8", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=20.0.0" + } + }, + "internal/datastore/node_modules/@aws-sdk/xml-builder": { + "version": "3.972.4", + "license": "Apache-2.0", + "dependencies": { + "@smithy/types": "^4.12.0", + "fast-xml-parser": "5.3.4", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=20.0.0" + } + }, "internal/datastore/node_modules/@stylistic/eslint-plugin": { "version": "5.8.0", "dev": true, @@ -122,29 +252,9 @@ "eslint": ">=9.0.0" } }, - "internal/datastore/node_modules/pino": { - "version": "9.14.0", - "license": "MIT", - "dependencies": { - "@pinojs/redact": "^0.4.0", - "atomic-sleep": "^1.0.0", - "on-exit-leak-free": "^2.1.0", - "pino-abstract-transport": "^2.0.0", - "pino-std-serializers": "^7.0.0", - "process-warning": "^5.0.0", - "quick-format-unescaped": "^4.0.3", - "real-require": "^0.2.0", - "safe-stable-stringify": "^2.3.1", - "sonic-boom": "^4.0.1", - "thread-stream": "^3.0.0" - }, - "bin": { - "pino": "bin.js" - } - }, "internal/events": { "name": "@nhsdigital/nhs-notify-event-schemas-supplier-api", - "version": "1.0.11", + "version": "1.0.12", "license": "MIT", "dependencies": { "@asyncapi/bundler": "^0.6.4", @@ -226,43 +336,21 @@ "eslint": ">=9.0.0" } }, - "internal/helpers/node_modules/pino": { - "version": "9.14.0", - "license": "MIT", - "dependencies": { - "@pinojs/redact": "^0.4.0", - "atomic-sleep": "^1.0.0", - "on-exit-leak-free": "^2.1.0", - "pino-abstract-transport": "^2.0.0", - "pino-std-serializers": "^7.0.0", - "process-warning": "^5.0.0", - "quick-format-unescaped": "^4.0.3", - "real-require": "^0.2.0", - "safe-stable-stringify": "^2.3.1", - "sonic-boom": "^4.0.1", - "thread-stream": "^3.0.0" - }, - "bin": { - "pino": "bin.js" - } - }, - "lambdas/api-handler": { - "name": "nhs-notify-supplier-api-handler", + "lambdas/allocate-letter": { + "name": "nhs-notify-supplier-api-allocate-letter", "version": "0.0.1", "dependencies": { - "@aws-sdk/client-dynamodb": "^3.984.0", - "@aws-sdk/client-s3": "^3.925.0", - "@aws-sdk/client-sns": "^3.925.0", - "@aws-sdk/client-sqs": "^3.925.0", - "@aws-sdk/lib-dynamodb": "^3.925.0", - "@aws-sdk/s3-request-presigner": "^3.925.0", + "@aws-sdk/client-dynamodb": "^3.858.0", + "@aws-sdk/client-sqs": "^3.984.0", + "@aws-sdk/lib-dynamodb": "^3.858.0", "@internal/datastore": "*", - "@internal/helpers": "*", - "@nhsdigital/nhs-notify-event-schemas-supplier-api": "*", - "aws-embedded-metrics": "^4.2.1", + "@nhsdigital/nhs-notify-event-schemas-letter-rendering": "^2.0.1", + "@nhsdigital/nhs-notify-event-schemas-letter-rendering-v1": "npm:@nhsdigital/nhs-notify-event-schemas-letter-rendering@^1.1.5", + "@nhsdigital/nhs-notify-event-schemas-supplier-api": "^1.0.8", + "@types/aws-lambda": "^8.10.148", "aws-lambda": "^1.0.7", - "esbuild": "0.27.2", - "pino": "^10.3.0", + "esbuild": "^0.27.2", + "pino": "^9.7.0", "zod": "^4.1.11" }, "devDependencies": { @@ -272,11 +360,10 @@ "jest": "^30.2.0", "jest-mock-extended": "^4.0.0", "ts-jest": "^29.4.0", - "typescript": "^5.9.3", - "zod": "^4.1.11" + "typescript": "^5.8.3" } }, - "lambdas/api-handler/node_modules/argparse": { + "lambdas/allocate-letter/node_modules/argparse": { "version": "1.0.10", "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", @@ -285,7 +372,7 @@ "sprintf-js": "~1.0.2" } }, - "lambdas/api-handler/node_modules/aws-lambda": { + "lambdas/allocate-letter/node_modules/aws-lambda": { "version": "1.0.7", "resolved": "https://registry.npmjs.org/aws-lambda/-/aws-lambda-1.0.7.tgz", "integrity": "sha512-9GNFMRrEMG5y3Jvv+V4azWvc+qNWdWLTjDdhf/zgMlz8haaaLWv0xeAIWxz9PuWUBawsVxy0zZotjCdR3Xq+2w==", @@ -300,13 +387,13 @@ "lambda": "bin/lambda" } }, - "lambdas/api-handler/node_modules/commander": { + "lambdas/allocate-letter/node_modules/commander": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/commander/-/commander-3.0.2.tgz", "integrity": "sha512-Gar0ASD4BDyKC4hl4DwHqDrmvjoxWKZigVnAbn5H1owvm4CxCPdb0HQDehwNYMJpla5+M2tPmPARzhtYuwpHow==", "license": "MIT" }, - "lambdas/api-handler/node_modules/js-yaml": { + "lambdas/allocate-letter/node_modules/js-yaml": { "version": "3.14.2", "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.2.tgz", "integrity": "sha512-PMSmkqxr106Xa156c2M265Z+FTrPl+oxd/rgOQy2tijQeK5TxQ43psO1ZCwhVOSdnn+RzkzlRz/eY4BgJBYVpg==", @@ -319,8 +406,10 @@ "js-yaml": "bin/js-yaml.js" } }, - "lambdas/api-handler/node_modules/pino": { + "lambdas/allocate-letter/node_modules/pino": { "version": "9.14.0", + "resolved": "https://registry.npmjs.org/pino/-/pino-9.14.0.tgz", + "integrity": "sha512-8OEwKp5juEvb/MjpIc4hjqfgCNysrS94RIOMXYvpYCdm/jglrKEiAYmiumbmGhCvs+IcInsphYDFwqrjr7398w==", "license": "MIT", "dependencies": { "@pinojs/redact": "^0.4.0", @@ -339,14 +428,20 @@ "pino": "bin.js" } }, - "lambdas/authorizer": { - "name": "nhs-notify-supplier-authorizer", + "lambdas/api-handler": { + "name": "nhs-notify-supplier-api-handler", "version": "0.0.1", "dependencies": { "@aws-sdk/client-dynamodb": "^3.984.0", - "@aws-sdk/lib-dynamodb": "^3.858.0", + "@aws-sdk/client-s3": "^3.925.0", + "@aws-sdk/client-sns": "^3.925.0", + "@aws-sdk/client-sqs": "^3.925.0", + "@aws-sdk/lib-dynamodb": "^3.925.0", + "@aws-sdk/s3-request-presigner": "^3.925.0", "@internal/datastore": "*", "@internal/helpers": "*", + "@nhsdigital/nhs-notify-event-schemas-supplier-api": "*", + "aws-embedded-metrics": "^4.2.1", "aws-lambda": "^1.0.7", "esbuild": "0.27.2", "pino": "^10.3.0", @@ -359,20 +454,124 @@ "jest": "^30.2.0", "jest-mock-extended": "^4.0.0", "ts-jest": "^29.4.0", - "typescript": "^5.9.3" + "typescript": "^5.9.3", + "zod": "^4.1.11" } }, - "lambdas/authorizer/node_modules/argparse": { - "version": "1.0.10", - "license": "MIT", + "lambdas/api-handler/node_modules/@aws-sdk/client-dynamodb": { + "version": "3.986.0", + "license": "Apache-2.0", "dependencies": { - "sprintf-js": "~1.0.2" + "@aws-crypto/sha256-browser": "5.2.0", + "@aws-crypto/sha256-js": "5.2.0", + "@aws-sdk/core": "^3.973.7", + "@aws-sdk/credential-provider-node": "^3.972.6", + "@aws-sdk/dynamodb-codec": "^3.972.8", + "@aws-sdk/middleware-endpoint-discovery": "^3.972.3", + "@aws-sdk/middleware-host-header": "^3.972.3", + "@aws-sdk/middleware-logger": "^3.972.3", + "@aws-sdk/middleware-recursion-detection": "^3.972.3", + "@aws-sdk/middleware-user-agent": "^3.972.7", + "@aws-sdk/region-config-resolver": "^3.972.3", + "@aws-sdk/types": "^3.973.1", + "@aws-sdk/util-endpoints": "3.986.0", + "@aws-sdk/util-user-agent-browser": "^3.972.3", + "@aws-sdk/util-user-agent-node": "^3.972.5", + "@smithy/config-resolver": "^4.4.6", + "@smithy/core": "^3.22.1", + "@smithy/fetch-http-handler": "^5.3.9", + "@smithy/hash-node": "^4.2.8", + "@smithy/invalid-dependency": "^4.2.8", + "@smithy/middleware-content-length": "^4.2.8", + "@smithy/middleware-endpoint": "^4.4.13", + "@smithy/middleware-retry": "^4.4.30", + "@smithy/middleware-serde": "^4.2.9", + "@smithy/middleware-stack": "^4.2.8", + "@smithy/node-config-provider": "^4.3.8", + "@smithy/node-http-handler": "^4.4.9", + "@smithy/protocol-http": "^5.3.8", + "@smithy/smithy-client": "^4.11.2", + "@smithy/types": "^4.12.0", + "@smithy/url-parser": "^4.2.8", + "@smithy/util-base64": "^4.3.0", + "@smithy/util-body-length-browser": "^4.2.0", + "@smithy/util-body-length-node": "^4.2.1", + "@smithy/util-defaults-mode-browser": "^4.3.29", + "@smithy/util-defaults-mode-node": "^4.2.32", + "@smithy/util-endpoints": "^3.2.8", + "@smithy/util-middleware": "^4.2.8", + "@smithy/util-retry": "^4.2.8", + "@smithy/util-utf8": "^4.2.0", + "@smithy/util-waiter": "^4.2.8", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=20.0.0" } }, - "lambdas/authorizer/node_modules/aws-lambda": { - "version": "1.0.7", - "license": "MIT", - "dependencies": { + "lambdas/api-handler/node_modules/@aws-sdk/core": { + "version": "3.973.7", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/types": "^3.973.1", + "@aws-sdk/xml-builder": "^3.972.4", + "@smithy/core": "^3.22.1", + "@smithy/node-config-provider": "^4.3.8", + "@smithy/property-provider": "^4.2.8", + "@smithy/protocol-http": "^5.3.8", + "@smithy/signature-v4": "^5.3.8", + "@smithy/smithy-client": "^4.11.2", + "@smithy/types": "^4.12.0", + "@smithy/util-base64": "^4.3.0", + "@smithy/util-middleware": "^4.2.8", + "@smithy/util-utf8": "^4.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=20.0.0" + } + }, + "lambdas/api-handler/node_modules/@aws-sdk/util-endpoints": { + "version": "3.986.0", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/types": "^3.973.1", + "@smithy/types": "^4.12.0", + "@smithy/url-parser": "^4.2.8", + "@smithy/util-endpoints": "^3.2.8", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=20.0.0" + } + }, + "lambdas/api-handler/node_modules/@aws-sdk/xml-builder": { + "version": "3.972.4", + "license": "Apache-2.0", + "dependencies": { + "@smithy/types": "^4.12.0", + "fast-xml-parser": "5.3.4", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=20.0.0" + } + }, + "lambdas/api-handler/node_modules/argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "license": "MIT", + "dependencies": { + "sprintf-js": "~1.0.2" + } + }, + "lambdas/api-handler/node_modules/aws-lambda": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/aws-lambda/-/aws-lambda-1.0.7.tgz", + "integrity": "sha512-9GNFMRrEMG5y3Jvv+V4azWvc+qNWdWLTjDdhf/zgMlz8haaaLWv0xeAIWxz9PuWUBawsVxy0zZotjCdR3Xq+2w==", + "license": "MIT", + "dependencies": { "aws-sdk": "^2.814.0", "commander": "^3.0.2", "js-yaml": "^3.14.1", @@ -382,12 +581,16 @@ "lambda": "bin/lambda" } }, - "lambdas/authorizer/node_modules/commander": { + "lambdas/api-handler/node_modules/commander": { "version": "3.0.2", + "resolved": "https://registry.npmjs.org/commander/-/commander-3.0.2.tgz", + "integrity": "sha512-Gar0ASD4BDyKC4hl4DwHqDrmvjoxWKZigVnAbn5H1owvm4CxCPdb0HQDehwNYMJpla5+M2tPmPARzhtYuwpHow==", "license": "MIT" }, - "lambdas/authorizer/node_modules/js-yaml": { + "lambdas/api-handler/node_modules/js-yaml": { "version": "3.14.2", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.2.tgz", + "integrity": "sha512-PMSmkqxr106Xa156c2M265Z+FTrPl+oxd/rgOQy2tijQeK5TxQ43psO1ZCwhVOSdnn+RzkzlRz/eY4BgJBYVpg==", "license": "MIT", "dependencies": { "argparse": "^1.0.7", @@ -397,24 +600,161 @@ "js-yaml": "bin/js-yaml.js" } }, - "lambdas/authorizer/node_modules/pino": { - "version": "9.14.0", + "lambdas/authorizer": { + "name": "nhs-notify-supplier-authorizer", + "version": "0.0.1", + "dependencies": { + "@aws-sdk/client-dynamodb": "^3.984.0", + "@aws-sdk/lib-dynamodb": "^3.858.0", + "@internal/datastore": "*", + "@internal/helpers": "*", + "aws-lambda": "^1.0.7", + "esbuild": "0.27.2", + "pino": "^10.3.0", + "zod": "^4.1.11" + }, + "devDependencies": { + "@tsconfig/node22": "^22.0.2", + "@types/aws-lambda": "^8.10.148", + "@types/jest": "^30.0.0", + "jest": "^30.2.0", + "jest-mock-extended": "^4.0.0", + "ts-jest": "^29.4.0", + "typescript": "^5.9.3" + } + }, + "lambdas/authorizer/node_modules/@aws-sdk/client-dynamodb": { + "version": "3.986.0", + "license": "Apache-2.0", + "dependencies": { + "@aws-crypto/sha256-browser": "5.2.0", + "@aws-crypto/sha256-js": "5.2.0", + "@aws-sdk/core": "^3.973.7", + "@aws-sdk/credential-provider-node": "^3.972.6", + "@aws-sdk/dynamodb-codec": "^3.972.8", + "@aws-sdk/middleware-endpoint-discovery": "^3.972.3", + "@aws-sdk/middleware-host-header": "^3.972.3", + "@aws-sdk/middleware-logger": "^3.972.3", + "@aws-sdk/middleware-recursion-detection": "^3.972.3", + "@aws-sdk/middleware-user-agent": "^3.972.7", + "@aws-sdk/region-config-resolver": "^3.972.3", + "@aws-sdk/types": "^3.973.1", + "@aws-sdk/util-endpoints": "3.986.0", + "@aws-sdk/util-user-agent-browser": "^3.972.3", + "@aws-sdk/util-user-agent-node": "^3.972.5", + "@smithy/config-resolver": "^4.4.6", + "@smithy/core": "^3.22.1", + "@smithy/fetch-http-handler": "^5.3.9", + "@smithy/hash-node": "^4.2.8", + "@smithy/invalid-dependency": "^4.2.8", + "@smithy/middleware-content-length": "^4.2.8", + "@smithy/middleware-endpoint": "^4.4.13", + "@smithy/middleware-retry": "^4.4.30", + "@smithy/middleware-serde": "^4.2.9", + "@smithy/middleware-stack": "^4.2.8", + "@smithy/node-config-provider": "^4.3.8", + "@smithy/node-http-handler": "^4.4.9", + "@smithy/protocol-http": "^5.3.8", + "@smithy/smithy-client": "^4.11.2", + "@smithy/types": "^4.12.0", + "@smithy/url-parser": "^4.2.8", + "@smithy/util-base64": "^4.3.0", + "@smithy/util-body-length-browser": "^4.2.0", + "@smithy/util-body-length-node": "^4.2.1", + "@smithy/util-defaults-mode-browser": "^4.3.29", + "@smithy/util-defaults-mode-node": "^4.2.32", + "@smithy/util-endpoints": "^3.2.8", + "@smithy/util-middleware": "^4.2.8", + "@smithy/util-retry": "^4.2.8", + "@smithy/util-utf8": "^4.2.0", + "@smithy/util-waiter": "^4.2.8", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=20.0.0" + } + }, + "lambdas/authorizer/node_modules/@aws-sdk/core": { + "version": "3.973.7", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/types": "^3.973.1", + "@aws-sdk/xml-builder": "^3.972.4", + "@smithy/core": "^3.22.1", + "@smithy/node-config-provider": "^4.3.8", + "@smithy/property-provider": "^4.2.8", + "@smithy/protocol-http": "^5.3.8", + "@smithy/signature-v4": "^5.3.8", + "@smithy/smithy-client": "^4.11.2", + "@smithy/types": "^4.12.0", + "@smithy/util-base64": "^4.3.0", + "@smithy/util-middleware": "^4.2.8", + "@smithy/util-utf8": "^4.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=20.0.0" + } + }, + "lambdas/authorizer/node_modules/@aws-sdk/util-endpoints": { + "version": "3.986.0", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/types": "^3.973.1", + "@smithy/types": "^4.12.0", + "@smithy/url-parser": "^4.2.8", + "@smithy/util-endpoints": "^3.2.8", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=20.0.0" + } + }, + "lambdas/authorizer/node_modules/@aws-sdk/xml-builder": { + "version": "3.972.4", + "license": "Apache-2.0", + "dependencies": { + "@smithy/types": "^4.12.0", + "fast-xml-parser": "5.3.4", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=20.0.0" + } + }, + "lambdas/authorizer/node_modules/argparse": { + "version": "1.0.10", "license": "MIT", "dependencies": { - "@pinojs/redact": "^0.4.0", - "atomic-sleep": "^1.0.0", - "on-exit-leak-free": "^2.1.0", - "pino-abstract-transport": "^2.0.0", - "pino-std-serializers": "^7.0.0", - "process-warning": "^5.0.0", - "quick-format-unescaped": "^4.0.3", - "real-require": "^0.2.0", - "safe-stable-stringify": "^2.3.1", - "sonic-boom": "^4.0.1", - "thread-stream": "^3.0.0" + "sprintf-js": "~1.0.2" + } + }, + "lambdas/authorizer/node_modules/aws-lambda": { + "version": "1.0.7", + "license": "MIT", + "dependencies": { + "aws-sdk": "^2.814.0", + "commander": "^3.0.2", + "js-yaml": "^3.14.1", + "watchpack": "^2.0.0-beta.10" }, "bin": { - "pino": "bin.js" + "lambda": "bin/lambda" + } + }, + "lambdas/authorizer/node_modules/commander": { + "version": "3.0.2", + "license": "MIT" + }, + "lambdas/authorizer/node_modules/js-yaml": { + "version": "3.14.2", + "license": "MIT", + "dependencies": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" } }, "lambdas/letter-updates-transformer": { @@ -533,34 +873,113 @@ "typescript": "^5.8.3" } }, - "lambdas/upsert-letter/node_modules/pino": { - "version": "9.14.0", - "license": "MIT", - "dependencies": { - "@pinojs/redact": "^0.4.0", - "atomic-sleep": "^1.0.0", - "on-exit-leak-free": "^2.1.0", - "pino-abstract-transport": "^2.0.0", - "pino-std-serializers": "^7.0.0", - "process-warning": "^5.0.0", - "quick-format-unescaped": "^4.0.3", - "real-require": "^0.2.0", - "safe-stable-stringify": "^2.3.1", - "sonic-boom": "^4.0.1", - "thread-stream": "^3.0.0" - }, - "bin": { - "pino": "bin.js" - } - }, - "node_modules/@apidevtools/json-schema-ref-parser": { - "version": "11.9.3", - "license": "MIT", + "lambdas/upsert-letter/node_modules/@aws-sdk/client-dynamodb": { + "version": "3.986.0", + "license": "Apache-2.0", "dependencies": { - "@jsdevtools/ono": "^7.1.3", - "@types/json-schema": "^7.0.15", - "js-yaml": "^4.1.0" - }, + "@aws-crypto/sha256-browser": "5.2.0", + "@aws-crypto/sha256-js": "5.2.0", + "@aws-sdk/core": "^3.973.7", + "@aws-sdk/credential-provider-node": "^3.972.6", + "@aws-sdk/dynamodb-codec": "^3.972.8", + "@aws-sdk/middleware-endpoint-discovery": "^3.972.3", + "@aws-sdk/middleware-host-header": "^3.972.3", + "@aws-sdk/middleware-logger": "^3.972.3", + "@aws-sdk/middleware-recursion-detection": "^3.972.3", + "@aws-sdk/middleware-user-agent": "^3.972.7", + "@aws-sdk/region-config-resolver": "^3.972.3", + "@aws-sdk/types": "^3.973.1", + "@aws-sdk/util-endpoints": "3.986.0", + "@aws-sdk/util-user-agent-browser": "^3.972.3", + "@aws-sdk/util-user-agent-node": "^3.972.5", + "@smithy/config-resolver": "^4.4.6", + "@smithy/core": "^3.22.1", + "@smithy/fetch-http-handler": "^5.3.9", + "@smithy/hash-node": "^4.2.8", + "@smithy/invalid-dependency": "^4.2.8", + "@smithy/middleware-content-length": "^4.2.8", + "@smithy/middleware-endpoint": "^4.4.13", + "@smithy/middleware-retry": "^4.4.30", + "@smithy/middleware-serde": "^4.2.9", + "@smithy/middleware-stack": "^4.2.8", + "@smithy/node-config-provider": "^4.3.8", + "@smithy/node-http-handler": "^4.4.9", + "@smithy/protocol-http": "^5.3.8", + "@smithy/smithy-client": "^4.11.2", + "@smithy/types": "^4.12.0", + "@smithy/url-parser": "^4.2.8", + "@smithy/util-base64": "^4.3.0", + "@smithy/util-body-length-browser": "^4.2.0", + "@smithy/util-body-length-node": "^4.2.1", + "@smithy/util-defaults-mode-browser": "^4.3.29", + "@smithy/util-defaults-mode-node": "^4.2.32", + "@smithy/util-endpoints": "^3.2.8", + "@smithy/util-middleware": "^4.2.8", + "@smithy/util-retry": "^4.2.8", + "@smithy/util-utf8": "^4.2.0", + "@smithy/util-waiter": "^4.2.8", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=20.0.0" + } + }, + "lambdas/upsert-letter/node_modules/@aws-sdk/core": { + "version": "3.973.7", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/types": "^3.973.1", + "@aws-sdk/xml-builder": "^3.972.4", + "@smithy/core": "^3.22.1", + "@smithy/node-config-provider": "^4.3.8", + "@smithy/property-provider": "^4.2.8", + "@smithy/protocol-http": "^5.3.8", + "@smithy/signature-v4": "^5.3.8", + "@smithy/smithy-client": "^4.11.2", + "@smithy/types": "^4.12.0", + "@smithy/util-base64": "^4.3.0", + "@smithy/util-middleware": "^4.2.8", + "@smithy/util-utf8": "^4.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=20.0.0" + } + }, + "lambdas/upsert-letter/node_modules/@aws-sdk/util-endpoints": { + "version": "3.986.0", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/types": "^3.973.1", + "@smithy/types": "^4.12.0", + "@smithy/url-parser": "^4.2.8", + "@smithy/util-endpoints": "^3.2.8", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=20.0.0" + } + }, + "lambdas/upsert-letter/node_modules/@aws-sdk/xml-builder": { + "version": "3.972.4", + "license": "Apache-2.0", + "dependencies": { + "@smithy/types": "^4.12.0", + "fast-xml-parser": "5.3.4", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=20.0.0" + } + }, + "node_modules/@apidevtools/json-schema-ref-parser": { + "version": "11.9.3", + "license": "MIT", + "dependencies": { + "@jsdevtools/ono": "^7.1.3", + "@types/json-schema": "^7.0.15", + "js-yaml": "^4.1.0" + }, "engines": { "node": ">= 16" }, @@ -775,48 +1194,48 @@ } }, "node_modules/@aws-sdk/client-api-gateway": { - "version": "3.985.0", + "version": "3.971.0", "license": "Apache-2.0", "dependencies": { "@aws-crypto/sha256-browser": "5.2.0", "@aws-crypto/sha256-js": "5.2.0", - "@aws-sdk/core": "^3.973.7", - "@aws-sdk/credential-provider-node": "^3.972.6", - "@aws-sdk/middleware-host-header": "^3.972.3", - "@aws-sdk/middleware-logger": "^3.972.3", - "@aws-sdk/middleware-recursion-detection": "^3.972.3", - "@aws-sdk/middleware-sdk-api-gateway": "^3.972.3", - "@aws-sdk/middleware-user-agent": "^3.972.7", - "@aws-sdk/region-config-resolver": "^3.972.3", - "@aws-sdk/types": "^3.973.1", - "@aws-sdk/util-endpoints": "3.985.0", - "@aws-sdk/util-user-agent-browser": "^3.972.3", - "@aws-sdk/util-user-agent-node": "^3.972.5", + "@aws-sdk/core": "3.970.0", + "@aws-sdk/credential-provider-node": "3.971.0", + "@aws-sdk/middleware-host-header": "3.969.0", + "@aws-sdk/middleware-logger": "3.969.0", + "@aws-sdk/middleware-recursion-detection": "3.969.0", + "@aws-sdk/middleware-sdk-api-gateway": "3.969.0", + "@aws-sdk/middleware-user-agent": "3.970.0", + "@aws-sdk/region-config-resolver": "3.969.0", + "@aws-sdk/types": "3.969.0", + "@aws-sdk/util-endpoints": "3.970.0", + "@aws-sdk/util-user-agent-browser": "3.969.0", + "@aws-sdk/util-user-agent-node": "3.971.0", "@smithy/config-resolver": "^4.4.6", - "@smithy/core": "^3.22.1", + "@smithy/core": "^3.20.6", "@smithy/fetch-http-handler": "^5.3.9", "@smithy/hash-node": "^4.2.8", "@smithy/invalid-dependency": "^4.2.8", "@smithy/middleware-content-length": "^4.2.8", - "@smithy/middleware-endpoint": "^4.4.13", - "@smithy/middleware-retry": "^4.4.30", + "@smithy/middleware-endpoint": "^4.4.7", + "@smithy/middleware-retry": "^4.4.23", "@smithy/middleware-serde": "^4.2.9", "@smithy/middleware-stack": "^4.2.8", "@smithy/node-config-provider": "^4.3.8", - "@smithy/node-http-handler": "^4.4.9", + "@smithy/node-http-handler": "^4.4.8", "@smithy/protocol-http": "^5.3.8", - "@smithy/smithy-client": "^4.11.2", + "@smithy/smithy-client": "^4.10.8", "@smithy/types": "^4.12.0", "@smithy/url-parser": "^4.2.8", "@smithy/util-base64": "^4.3.0", "@smithy/util-body-length-browser": "^4.2.0", "@smithy/util-body-length-node": "^4.2.1", - "@smithy/util-defaults-mode-browser": "^4.3.29", - "@smithy/util-defaults-mode-node": "^4.2.32", + "@smithy/util-defaults-mode-browser": "^4.3.22", + "@smithy/util-defaults-mode-node": "^4.2.25", "@smithy/util-endpoints": "^3.2.8", "@smithy/util-middleware": "^4.2.8", "@smithy/util-retry": "^4.2.8", - "@smithy/util-stream": "^4.5.11", + "@smithy/util-stream": "^4.5.10", "@smithy/util-utf8": "^4.2.0", "tslib": "^2.6.2" }, @@ -824,344 +1243,177 @@ "node": ">=20.0.0" } }, - "node_modules/@aws-sdk/client-dynamodb": { - "version": "3.985.0", + "node_modules/@aws-sdk/client-api-gateway/node_modules/@aws-sdk/client-sso": { + "version": "3.971.0", "license": "Apache-2.0", "dependencies": { "@aws-crypto/sha256-browser": "5.2.0", "@aws-crypto/sha256-js": "5.2.0", - "@aws-sdk/core": "^3.973.7", - "@aws-sdk/credential-provider-node": "^3.972.6", - "@aws-sdk/dynamodb-codec": "^3.972.8", - "@aws-sdk/middleware-endpoint-discovery": "^3.972.3", - "@aws-sdk/middleware-host-header": "^3.972.3", - "@aws-sdk/middleware-logger": "^3.972.3", - "@aws-sdk/middleware-recursion-detection": "^3.972.3", - "@aws-sdk/middleware-user-agent": "^3.972.7", - "@aws-sdk/region-config-resolver": "^3.972.3", - "@aws-sdk/types": "^3.973.1", - "@aws-sdk/util-endpoints": "3.985.0", - "@aws-sdk/util-user-agent-browser": "^3.972.3", - "@aws-sdk/util-user-agent-node": "^3.972.5", + "@aws-sdk/core": "3.970.0", + "@aws-sdk/middleware-host-header": "3.969.0", + "@aws-sdk/middleware-logger": "3.969.0", + "@aws-sdk/middleware-recursion-detection": "3.969.0", + "@aws-sdk/middleware-user-agent": "3.970.0", + "@aws-sdk/region-config-resolver": "3.969.0", + "@aws-sdk/types": "3.969.0", + "@aws-sdk/util-endpoints": "3.970.0", + "@aws-sdk/util-user-agent-browser": "3.969.0", + "@aws-sdk/util-user-agent-node": "3.971.0", "@smithy/config-resolver": "^4.4.6", - "@smithy/core": "^3.22.1", + "@smithy/core": "^3.20.6", "@smithy/fetch-http-handler": "^5.3.9", "@smithy/hash-node": "^4.2.8", "@smithy/invalid-dependency": "^4.2.8", "@smithy/middleware-content-length": "^4.2.8", - "@smithy/middleware-endpoint": "^4.4.13", - "@smithy/middleware-retry": "^4.4.30", + "@smithy/middleware-endpoint": "^4.4.7", + "@smithy/middleware-retry": "^4.4.23", "@smithy/middleware-serde": "^4.2.9", "@smithy/middleware-stack": "^4.2.8", "@smithy/node-config-provider": "^4.3.8", - "@smithy/node-http-handler": "^4.4.9", + "@smithy/node-http-handler": "^4.4.8", "@smithy/protocol-http": "^5.3.8", - "@smithy/smithy-client": "^4.11.2", + "@smithy/smithy-client": "^4.10.8", "@smithy/types": "^4.12.0", "@smithy/url-parser": "^4.2.8", "@smithy/util-base64": "^4.3.0", "@smithy/util-body-length-browser": "^4.2.0", "@smithy/util-body-length-node": "^4.2.1", - "@smithy/util-defaults-mode-browser": "^4.3.29", - "@smithy/util-defaults-mode-node": "^4.2.32", + "@smithy/util-defaults-mode-browser": "^4.3.22", + "@smithy/util-defaults-mode-node": "^4.2.25", "@smithy/util-endpoints": "^3.2.8", "@smithy/util-middleware": "^4.2.8", "@smithy/util-retry": "^4.2.8", "@smithy/util-utf8": "^4.2.0", - "@smithy/util-waiter": "^4.2.8", "tslib": "^2.6.2" }, "engines": { "node": ">=20.0.0" } }, - "node_modules/@aws-sdk/client-kinesis": { - "version": "3.985.0", + "node_modules/@aws-sdk/client-api-gateway/node_modules/@aws-sdk/core": { + "version": "3.970.0", "license": "Apache-2.0", "dependencies": { - "@aws-crypto/sha256-browser": "5.2.0", - "@aws-crypto/sha256-js": "5.2.0", - "@aws-sdk/core": "^3.973.7", - "@aws-sdk/credential-provider-node": "^3.972.6", - "@aws-sdk/middleware-host-header": "^3.972.3", - "@aws-sdk/middleware-logger": "^3.972.3", - "@aws-sdk/middleware-recursion-detection": "^3.972.3", - "@aws-sdk/middleware-user-agent": "^3.972.7", - "@aws-sdk/region-config-resolver": "^3.972.3", - "@aws-sdk/types": "^3.973.1", - "@aws-sdk/util-endpoints": "3.985.0", - "@aws-sdk/util-user-agent-browser": "^3.972.3", - "@aws-sdk/util-user-agent-node": "^3.972.5", - "@smithy/config-resolver": "^4.4.6", - "@smithy/core": "^3.22.1", - "@smithy/eventstream-serde-browser": "^4.2.8", - "@smithy/eventstream-serde-config-resolver": "^4.3.8", - "@smithy/eventstream-serde-node": "^4.2.8", - "@smithy/fetch-http-handler": "^5.3.9", - "@smithy/hash-node": "^4.2.8", - "@smithy/invalid-dependency": "^4.2.8", - "@smithy/middleware-content-length": "^4.2.8", - "@smithy/middleware-endpoint": "^4.4.13", - "@smithy/middleware-retry": "^4.4.30", - "@smithy/middleware-serde": "^4.2.9", - "@smithy/middleware-stack": "^4.2.8", + "@aws-sdk/types": "3.969.0", + "@aws-sdk/xml-builder": "3.969.0", + "@smithy/core": "^3.20.6", "@smithy/node-config-provider": "^4.3.8", - "@smithy/node-http-handler": "^4.4.9", + "@smithy/property-provider": "^4.2.8", "@smithy/protocol-http": "^5.3.8", - "@smithy/smithy-client": "^4.11.2", + "@smithy/signature-v4": "^5.3.8", + "@smithy/smithy-client": "^4.10.8", "@smithy/types": "^4.12.0", - "@smithy/url-parser": "^4.2.8", "@smithy/util-base64": "^4.3.0", - "@smithy/util-body-length-browser": "^4.2.0", - "@smithy/util-body-length-node": "^4.2.1", - "@smithy/util-defaults-mode-browser": "^4.3.29", - "@smithy/util-defaults-mode-node": "^4.2.32", - "@smithy/util-endpoints": "^3.2.8", "@smithy/util-middleware": "^4.2.8", - "@smithy/util-retry": "^4.2.8", "@smithy/util-utf8": "^4.2.0", - "@smithy/util-waiter": "^4.2.8", "tslib": "^2.6.2" }, "engines": { "node": ">=20.0.0" } }, - "node_modules/@aws-sdk/client-s3": { - "version": "3.985.0", + "node_modules/@aws-sdk/client-api-gateway/node_modules/@aws-sdk/credential-provider-env": { + "version": "3.970.0", "license": "Apache-2.0", "dependencies": { - "@aws-crypto/sha1-browser": "5.2.0", - "@aws-crypto/sha256-browser": "5.2.0", - "@aws-crypto/sha256-js": "5.2.0", - "@aws-sdk/core": "^3.973.7", - "@aws-sdk/credential-provider-node": "^3.972.6", - "@aws-sdk/middleware-bucket-endpoint": "^3.972.3", - "@aws-sdk/middleware-expect-continue": "^3.972.3", - "@aws-sdk/middleware-flexible-checksums": "^3.972.5", - "@aws-sdk/middleware-host-header": "^3.972.3", - "@aws-sdk/middleware-location-constraint": "^3.972.3", - "@aws-sdk/middleware-logger": "^3.972.3", - "@aws-sdk/middleware-recursion-detection": "^3.972.3", - "@aws-sdk/middleware-sdk-s3": "^3.972.7", - "@aws-sdk/middleware-ssec": "^3.972.3", - "@aws-sdk/middleware-user-agent": "^3.972.7", - "@aws-sdk/region-config-resolver": "^3.972.3", - "@aws-sdk/signature-v4-multi-region": "3.985.0", - "@aws-sdk/types": "^3.973.1", - "@aws-sdk/util-endpoints": "3.985.0", - "@aws-sdk/util-user-agent-browser": "^3.972.3", - "@aws-sdk/util-user-agent-node": "^3.972.5", - "@smithy/config-resolver": "^4.4.6", - "@smithy/core": "^3.22.1", - "@smithy/eventstream-serde-browser": "^4.2.8", - "@smithy/eventstream-serde-config-resolver": "^4.3.8", - "@smithy/eventstream-serde-node": "^4.2.8", - "@smithy/fetch-http-handler": "^5.3.9", - "@smithy/hash-blob-browser": "^4.2.9", - "@smithy/hash-node": "^4.2.8", - "@smithy/hash-stream-node": "^4.2.8", - "@smithy/invalid-dependency": "^4.2.8", - "@smithy/md5-js": "^4.2.8", - "@smithy/middleware-content-length": "^4.2.8", - "@smithy/middleware-endpoint": "^4.4.13", - "@smithy/middleware-retry": "^4.4.30", - "@smithy/middleware-serde": "^4.2.9", - "@smithy/middleware-stack": "^4.2.8", - "@smithy/node-config-provider": "^4.3.8", - "@smithy/node-http-handler": "^4.4.9", - "@smithy/protocol-http": "^5.3.8", - "@smithy/smithy-client": "^4.11.2", + "@aws-sdk/core": "3.970.0", + "@aws-sdk/types": "3.969.0", + "@smithy/property-provider": "^4.2.8", "@smithy/types": "^4.12.0", - "@smithy/url-parser": "^4.2.8", - "@smithy/util-base64": "^4.3.0", - "@smithy/util-body-length-browser": "^4.2.0", - "@smithy/util-body-length-node": "^4.2.1", - "@smithy/util-defaults-mode-browser": "^4.3.29", - "@smithy/util-defaults-mode-node": "^4.2.32", - "@smithy/util-endpoints": "^3.2.8", - "@smithy/util-middleware": "^4.2.8", - "@smithy/util-retry": "^4.2.8", - "@smithy/util-stream": "^4.5.11", - "@smithy/util-utf8": "^4.2.0", - "@smithy/util-waiter": "^4.2.8", "tslib": "^2.6.2" }, "engines": { "node": ">=20.0.0" } }, - "node_modules/@aws-sdk/client-sns": { - "version": "3.985.0", + "node_modules/@aws-sdk/client-api-gateway/node_modules/@aws-sdk/credential-provider-http": { + "version": "3.970.0", "license": "Apache-2.0", "dependencies": { - "@aws-crypto/sha256-browser": "5.2.0", - "@aws-crypto/sha256-js": "5.2.0", - "@aws-sdk/core": "^3.973.7", - "@aws-sdk/credential-provider-node": "^3.972.6", - "@aws-sdk/middleware-host-header": "^3.972.3", - "@aws-sdk/middleware-logger": "^3.972.3", - "@aws-sdk/middleware-recursion-detection": "^3.972.3", - "@aws-sdk/middleware-user-agent": "^3.972.7", - "@aws-sdk/region-config-resolver": "^3.972.3", - "@aws-sdk/types": "^3.973.1", - "@aws-sdk/util-endpoints": "3.985.0", - "@aws-sdk/util-user-agent-browser": "^3.972.3", - "@aws-sdk/util-user-agent-node": "^3.972.5", - "@smithy/config-resolver": "^4.4.6", - "@smithy/core": "^3.22.1", + "@aws-sdk/core": "3.970.0", + "@aws-sdk/types": "3.969.0", "@smithy/fetch-http-handler": "^5.3.9", - "@smithy/hash-node": "^4.2.8", - "@smithy/invalid-dependency": "^4.2.8", - "@smithy/middleware-content-length": "^4.2.8", - "@smithy/middleware-endpoint": "^4.4.13", - "@smithy/middleware-retry": "^4.4.30", - "@smithy/middleware-serde": "^4.2.9", - "@smithy/middleware-stack": "^4.2.8", - "@smithy/node-config-provider": "^4.3.8", - "@smithy/node-http-handler": "^4.4.9", + "@smithy/node-http-handler": "^4.4.8", + "@smithy/property-provider": "^4.2.8", "@smithy/protocol-http": "^5.3.8", - "@smithy/smithy-client": "^4.11.2", + "@smithy/smithy-client": "^4.10.8", "@smithy/types": "^4.12.0", - "@smithy/url-parser": "^4.2.8", - "@smithy/util-base64": "^4.3.0", - "@smithy/util-body-length-browser": "^4.2.0", - "@smithy/util-body-length-node": "^4.2.1", - "@smithy/util-defaults-mode-browser": "^4.3.29", - "@smithy/util-defaults-mode-node": "^4.2.32", - "@smithy/util-endpoints": "^3.2.8", - "@smithy/util-middleware": "^4.2.8", - "@smithy/util-retry": "^4.2.8", - "@smithy/util-utf8": "^4.2.0", + "@smithy/util-stream": "^4.5.10", "tslib": "^2.6.2" }, "engines": { "node": ">=20.0.0" } }, - "node_modules/@aws-sdk/client-sqs": { - "version": "3.985.0", + "node_modules/@aws-sdk/client-api-gateway/node_modules/@aws-sdk/credential-provider-ini": { + "version": "3.971.0", "license": "Apache-2.0", "dependencies": { - "@aws-crypto/sha256-browser": "5.2.0", - "@aws-crypto/sha256-js": "5.2.0", - "@aws-sdk/core": "^3.973.7", - "@aws-sdk/credential-provider-node": "^3.972.6", - "@aws-sdk/middleware-host-header": "^3.972.3", - "@aws-sdk/middleware-logger": "^3.972.3", - "@aws-sdk/middleware-recursion-detection": "^3.972.3", - "@aws-sdk/middleware-sdk-sqs": "^3.972.6", - "@aws-sdk/middleware-user-agent": "^3.972.7", - "@aws-sdk/region-config-resolver": "^3.972.3", - "@aws-sdk/types": "^3.973.1", - "@aws-sdk/util-endpoints": "3.985.0", - "@aws-sdk/util-user-agent-browser": "^3.972.3", - "@aws-sdk/util-user-agent-node": "^3.972.5", - "@smithy/config-resolver": "^4.4.6", - "@smithy/core": "^3.22.1", - "@smithy/fetch-http-handler": "^5.3.9", - "@smithy/hash-node": "^4.2.8", - "@smithy/invalid-dependency": "^4.2.8", - "@smithy/md5-js": "^4.2.8", - "@smithy/middleware-content-length": "^4.2.8", - "@smithy/middleware-endpoint": "^4.4.13", - "@smithy/middleware-retry": "^4.4.30", - "@smithy/middleware-serde": "^4.2.9", - "@smithy/middleware-stack": "^4.2.8", - "@smithy/node-config-provider": "^4.3.8", - "@smithy/node-http-handler": "^4.4.9", - "@smithy/protocol-http": "^5.3.8", - "@smithy/smithy-client": "^4.11.2", + "@aws-sdk/core": "3.970.0", + "@aws-sdk/credential-provider-env": "3.970.0", + "@aws-sdk/credential-provider-http": "3.970.0", + "@aws-sdk/credential-provider-login": "3.971.0", + "@aws-sdk/credential-provider-process": "3.970.0", + "@aws-sdk/credential-provider-sso": "3.971.0", + "@aws-sdk/credential-provider-web-identity": "3.971.0", + "@aws-sdk/nested-clients": "3.971.0", + "@aws-sdk/types": "3.969.0", + "@smithy/credential-provider-imds": "^4.2.8", + "@smithy/property-provider": "^4.2.8", + "@smithy/shared-ini-file-loader": "^4.4.3", "@smithy/types": "^4.12.0", - "@smithy/url-parser": "^4.2.8", - "@smithy/util-base64": "^4.3.0", - "@smithy/util-body-length-browser": "^4.2.0", - "@smithy/util-body-length-node": "^4.2.1", - "@smithy/util-defaults-mode-browser": "^4.3.29", - "@smithy/util-defaults-mode-node": "^4.2.32", - "@smithy/util-endpoints": "^3.2.8", - "@smithy/util-middleware": "^4.2.8", - "@smithy/util-retry": "^4.2.8", - "@smithy/util-utf8": "^4.2.0", "tslib": "^2.6.2" }, "engines": { "node": ">=20.0.0" } }, - "node_modules/@aws-sdk/client-sso": { - "version": "3.985.0", + "node_modules/@aws-sdk/client-api-gateway/node_modules/@aws-sdk/credential-provider-login": { + "version": "3.971.0", "license": "Apache-2.0", "dependencies": { - "@aws-crypto/sha256-browser": "5.2.0", - "@aws-crypto/sha256-js": "5.2.0", - "@aws-sdk/core": "^3.973.7", - "@aws-sdk/middleware-host-header": "^3.972.3", - "@aws-sdk/middleware-logger": "^3.972.3", - "@aws-sdk/middleware-recursion-detection": "^3.972.3", - "@aws-sdk/middleware-user-agent": "^3.972.7", - "@aws-sdk/region-config-resolver": "^3.972.3", - "@aws-sdk/types": "^3.973.1", - "@aws-sdk/util-endpoints": "3.985.0", - "@aws-sdk/util-user-agent-browser": "^3.972.3", - "@aws-sdk/util-user-agent-node": "^3.972.5", - "@smithy/config-resolver": "^4.4.6", - "@smithy/core": "^3.22.1", - "@smithy/fetch-http-handler": "^5.3.9", - "@smithy/hash-node": "^4.2.8", - "@smithy/invalid-dependency": "^4.2.8", - "@smithy/middleware-content-length": "^4.2.8", - "@smithy/middleware-endpoint": "^4.4.13", - "@smithy/middleware-retry": "^4.4.30", - "@smithy/middleware-serde": "^4.2.9", - "@smithy/middleware-stack": "^4.2.8", - "@smithy/node-config-provider": "^4.3.8", - "@smithy/node-http-handler": "^4.4.9", + "@aws-sdk/core": "3.970.0", + "@aws-sdk/nested-clients": "3.971.0", + "@aws-sdk/types": "3.969.0", + "@smithy/property-provider": "^4.2.8", "@smithy/protocol-http": "^5.3.8", - "@smithy/smithy-client": "^4.11.2", + "@smithy/shared-ini-file-loader": "^4.4.3", "@smithy/types": "^4.12.0", - "@smithy/url-parser": "^4.2.8", - "@smithy/util-base64": "^4.3.0", - "@smithy/util-body-length-browser": "^4.2.0", - "@smithy/util-body-length-node": "^4.2.1", - "@smithy/util-defaults-mode-browser": "^4.3.29", - "@smithy/util-defaults-mode-node": "^4.2.32", - "@smithy/util-endpoints": "^3.2.8", - "@smithy/util-middleware": "^4.2.8", - "@smithy/util-retry": "^4.2.8", - "@smithy/util-utf8": "^4.2.0", "tslib": "^2.6.2" }, "engines": { "node": ">=20.0.0" } }, - "node_modules/@aws-sdk/core": { - "version": "3.973.7", + "node_modules/@aws-sdk/client-api-gateway/node_modules/@aws-sdk/credential-provider-node": { + "version": "3.971.0", "license": "Apache-2.0", "dependencies": { - "@aws-sdk/types": "^3.973.1", - "@aws-sdk/xml-builder": "^3.972.4", - "@smithy/core": "^3.22.1", - "@smithy/node-config-provider": "^4.3.8", + "@aws-sdk/credential-provider-env": "3.970.0", + "@aws-sdk/credential-provider-http": "3.970.0", + "@aws-sdk/credential-provider-ini": "3.971.0", + "@aws-sdk/credential-provider-process": "3.970.0", + "@aws-sdk/credential-provider-sso": "3.971.0", + "@aws-sdk/credential-provider-web-identity": "3.971.0", + "@aws-sdk/types": "3.969.0", + "@smithy/credential-provider-imds": "^4.2.8", "@smithy/property-provider": "^4.2.8", - "@smithy/protocol-http": "^5.3.8", - "@smithy/signature-v4": "^5.3.8", - "@smithy/smithy-client": "^4.11.2", + "@smithy/shared-ini-file-loader": "^4.4.3", "@smithy/types": "^4.12.0", - "@smithy/util-base64": "^4.3.0", - "@smithy/util-middleware": "^4.2.8", - "@smithy/util-utf8": "^4.2.0", "tslib": "^2.6.2" }, "engines": { "node": ">=20.0.0" } }, - "node_modules/@aws-sdk/crc64-nvme": { - "version": "3.972.0", + "node_modules/@aws-sdk/client-api-gateway/node_modules/@aws-sdk/credential-provider-process": { + "version": "3.970.0", "license": "Apache-2.0", "dependencies": { + "@aws-sdk/core": "3.970.0", + "@aws-sdk/types": "3.969.0", + "@smithy/property-provider": "^4.2.8", + "@smithy/shared-ini-file-loader": "^4.4.3", "@smithy/types": "^4.12.0", "tslib": "^2.6.2" }, @@ -1169,13 +1421,16 @@ "node": ">=20.0.0" } }, - "node_modules/@aws-sdk/credential-provider-env": { - "version": "3.972.5", + "node_modules/@aws-sdk/client-api-gateway/node_modules/@aws-sdk/credential-provider-sso": { + "version": "3.971.0", "license": "Apache-2.0", "dependencies": { - "@aws-sdk/core": "^3.973.7", - "@aws-sdk/types": "^3.973.1", + "@aws-sdk/client-sso": "3.971.0", + "@aws-sdk/core": "3.970.0", + "@aws-sdk/token-providers": "3.971.0", + "@aws-sdk/types": "3.969.0", "@smithy/property-provider": "^4.2.8", + "@smithy/shared-ini-file-loader": "^4.4.3", "@smithy/types": "^4.12.0", "tslib": "^2.6.2" }, @@ -1183,41 +1438,28 @@ "node": ">=20.0.0" } }, - "node_modules/@aws-sdk/credential-provider-http": { - "version": "3.972.7", + "node_modules/@aws-sdk/client-api-gateway/node_modules/@aws-sdk/credential-provider-web-identity": { + "version": "3.971.0", "license": "Apache-2.0", "dependencies": { - "@aws-sdk/core": "^3.973.7", - "@aws-sdk/types": "^3.973.1", - "@smithy/fetch-http-handler": "^5.3.9", - "@smithy/node-http-handler": "^4.4.9", + "@aws-sdk/core": "3.970.0", + "@aws-sdk/nested-clients": "3.971.0", + "@aws-sdk/types": "3.969.0", "@smithy/property-provider": "^4.2.8", - "@smithy/protocol-http": "^5.3.8", - "@smithy/smithy-client": "^4.11.2", + "@smithy/shared-ini-file-loader": "^4.4.3", "@smithy/types": "^4.12.0", - "@smithy/util-stream": "^4.5.11", "tslib": "^2.6.2" }, "engines": { "node": ">=20.0.0" } }, - "node_modules/@aws-sdk/credential-provider-ini": { - "version": "3.972.5", + "node_modules/@aws-sdk/client-api-gateway/node_modules/@aws-sdk/middleware-host-header": { + "version": "3.969.0", "license": "Apache-2.0", "dependencies": { - "@aws-sdk/core": "^3.973.7", - "@aws-sdk/credential-provider-env": "^3.972.5", - "@aws-sdk/credential-provider-http": "^3.972.7", - "@aws-sdk/credential-provider-login": "^3.972.5", - "@aws-sdk/credential-provider-process": "^3.972.5", - "@aws-sdk/credential-provider-sso": "^3.972.5", - "@aws-sdk/credential-provider-web-identity": "^3.972.5", - "@aws-sdk/nested-clients": "3.985.0", - "@aws-sdk/types": "^3.973.1", - "@smithy/credential-provider-imds": "^4.2.8", - "@smithy/property-provider": "^4.2.8", - "@smithy/shared-ini-file-loader": "^4.4.3", + "@aws-sdk/types": "3.969.0", + "@smithy/protocol-http": "^5.3.8", "@smithy/types": "^4.12.0", "tslib": "^2.6.2" }, @@ -1225,16 +1467,11 @@ "node": ">=20.0.0" } }, - "node_modules/@aws-sdk/credential-provider-login": { - "version": "3.972.5", + "node_modules/@aws-sdk/client-api-gateway/node_modules/@aws-sdk/middleware-logger": { + "version": "3.969.0", "license": "Apache-2.0", "dependencies": { - "@aws-sdk/core": "^3.973.7", - "@aws-sdk/nested-clients": "3.985.0", - "@aws-sdk/types": "^3.973.1", - "@smithy/property-provider": "^4.2.8", - "@smithy/protocol-http": "^5.3.8", - "@smithy/shared-ini-file-loader": "^4.4.3", + "@aws-sdk/types": "3.969.0", "@smithy/types": "^4.12.0", "tslib": "^2.6.2" }, @@ -1242,20 +1479,13 @@ "node": ">=20.0.0" } }, - "node_modules/@aws-sdk/credential-provider-node": { - "version": "3.972.6", + "node_modules/@aws-sdk/client-api-gateway/node_modules/@aws-sdk/middleware-recursion-detection": { + "version": "3.969.0", "license": "Apache-2.0", "dependencies": { - "@aws-sdk/credential-provider-env": "^3.972.5", - "@aws-sdk/credential-provider-http": "^3.972.7", - "@aws-sdk/credential-provider-ini": "^3.972.5", - "@aws-sdk/credential-provider-process": "^3.972.5", - "@aws-sdk/credential-provider-sso": "^3.972.5", - "@aws-sdk/credential-provider-web-identity": "^3.972.5", - "@aws-sdk/types": "^3.973.1", - "@smithy/credential-provider-imds": "^4.2.8", - "@smithy/property-provider": "^4.2.8", - "@smithy/shared-ini-file-loader": "^4.4.3", + "@aws-sdk/types": "3.969.0", + "@aws/lambda-invoke-store": "^0.2.2", + "@smithy/protocol-http": "^5.3.8", "@smithy/types": "^4.12.0", "tslib": "^2.6.2" }, @@ -1263,14 +1493,15 @@ "node": ">=20.0.0" } }, - "node_modules/@aws-sdk/credential-provider-process": { - "version": "3.972.5", + "node_modules/@aws-sdk/client-api-gateway/node_modules/@aws-sdk/middleware-user-agent": { + "version": "3.970.0", "license": "Apache-2.0", "dependencies": { - "@aws-sdk/core": "^3.973.7", - "@aws-sdk/types": "^3.973.1", - "@smithy/property-provider": "^4.2.8", - "@smithy/shared-ini-file-loader": "^4.4.3", + "@aws-sdk/core": "3.970.0", + "@aws-sdk/types": "3.969.0", + "@aws-sdk/util-endpoints": "3.970.0", + "@smithy/core": "^3.20.6", + "@smithy/protocol-http": "^5.3.8", "@smithy/types": "^4.12.0", "tslib": "^2.6.2" }, @@ -1278,32 +1509,60 @@ "node": ">=20.0.0" } }, - "node_modules/@aws-sdk/credential-provider-sso": { - "version": "3.972.5", + "node_modules/@aws-sdk/client-api-gateway/node_modules/@aws-sdk/nested-clients": { + "version": "3.971.0", "license": "Apache-2.0", "dependencies": { - "@aws-sdk/client-sso": "3.985.0", - "@aws-sdk/core": "^3.973.7", - "@aws-sdk/token-providers": "3.985.0", - "@aws-sdk/types": "^3.973.1", - "@smithy/property-provider": "^4.2.8", - "@smithy/shared-ini-file-loader": "^4.4.3", + "@aws-crypto/sha256-browser": "5.2.0", + "@aws-crypto/sha256-js": "5.2.0", + "@aws-sdk/core": "3.970.0", + "@aws-sdk/middleware-host-header": "3.969.0", + "@aws-sdk/middleware-logger": "3.969.0", + "@aws-sdk/middleware-recursion-detection": "3.969.0", + "@aws-sdk/middleware-user-agent": "3.970.0", + "@aws-sdk/region-config-resolver": "3.969.0", + "@aws-sdk/types": "3.969.0", + "@aws-sdk/util-endpoints": "3.970.0", + "@aws-sdk/util-user-agent-browser": "3.969.0", + "@aws-sdk/util-user-agent-node": "3.971.0", + "@smithy/config-resolver": "^4.4.6", + "@smithy/core": "^3.20.6", + "@smithy/fetch-http-handler": "^5.3.9", + "@smithy/hash-node": "^4.2.8", + "@smithy/invalid-dependency": "^4.2.8", + "@smithy/middleware-content-length": "^4.2.8", + "@smithy/middleware-endpoint": "^4.4.7", + "@smithy/middleware-retry": "^4.4.23", + "@smithy/middleware-serde": "^4.2.9", + "@smithy/middleware-stack": "^4.2.8", + "@smithy/node-config-provider": "^4.3.8", + "@smithy/node-http-handler": "^4.4.8", + "@smithy/protocol-http": "^5.3.8", + "@smithy/smithy-client": "^4.10.8", "@smithy/types": "^4.12.0", + "@smithy/url-parser": "^4.2.8", + "@smithy/util-base64": "^4.3.0", + "@smithy/util-body-length-browser": "^4.2.0", + "@smithy/util-body-length-node": "^4.2.1", + "@smithy/util-defaults-mode-browser": "^4.3.22", + "@smithy/util-defaults-mode-node": "^4.2.25", + "@smithy/util-endpoints": "^3.2.8", + "@smithy/util-middleware": "^4.2.8", + "@smithy/util-retry": "^4.2.8", + "@smithy/util-utf8": "^4.2.0", "tslib": "^2.6.2" }, "engines": { "node": ">=20.0.0" } }, - "node_modules/@aws-sdk/credential-provider-web-identity": { - "version": "3.972.5", + "node_modules/@aws-sdk/client-api-gateway/node_modules/@aws-sdk/region-config-resolver": { + "version": "3.969.0", "license": "Apache-2.0", "dependencies": { - "@aws-sdk/core": "^3.973.7", - "@aws-sdk/nested-clients": "3.985.0", - "@aws-sdk/types": "^3.973.1", - "@smithy/property-provider": "^4.2.8", - "@smithy/shared-ini-file-loader": "^4.4.3", + "@aws-sdk/types": "3.969.0", + "@smithy/config-resolver": "^4.4.6", + "@smithy/node-config-provider": "^4.3.8", "@smithy/types": "^4.12.0", "tslib": "^2.6.2" }, @@ -1311,161 +1570,270 @@ "node": ">=20.0.0" } }, - "node_modules/@aws-sdk/dynamodb-codec": { - "version": "3.972.8", + "node_modules/@aws-sdk/client-api-gateway/node_modules/@aws-sdk/token-providers": { + "version": "3.971.0", "license": "Apache-2.0", "dependencies": { - "@aws-sdk/core": "^3.973.7", - "@smithy/core": "^3.22.1", - "@smithy/smithy-client": "^4.11.2", + "@aws-sdk/core": "3.970.0", + "@aws-sdk/nested-clients": "3.971.0", + "@aws-sdk/types": "3.969.0", + "@smithy/property-provider": "^4.2.8", + "@smithy/shared-ini-file-loader": "^4.4.3", "@smithy/types": "^4.12.0", - "@smithy/util-base64": "^4.3.0", "tslib": "^2.6.2" }, "engines": { "node": ">=20.0.0" } }, - "node_modules/@aws-sdk/endpoint-cache": { - "version": "3.972.2", + "node_modules/@aws-sdk/client-api-gateway/node_modules/@aws-sdk/types": { + "version": "3.969.0", "license": "Apache-2.0", "dependencies": { - "mnemonist": "0.38.3", + "@smithy/types": "^4.12.0", "tslib": "^2.6.2" }, "engines": { "node": ">=20.0.0" } }, - "node_modules/@aws-sdk/lib-dynamodb": { - "version": "3.985.0", + "node_modules/@aws-sdk/client-api-gateway/node_modules/@aws-sdk/util-endpoints": { + "version": "3.970.0", "license": "Apache-2.0", "dependencies": { - "@aws-sdk/core": "^3.973.7", - "@aws-sdk/util-dynamodb": "3.985.0", - "@smithy/core": "^3.22.1", - "@smithy/smithy-client": "^4.11.2", + "@aws-sdk/types": "3.969.0", "@smithy/types": "^4.12.0", + "@smithy/url-parser": "^4.2.8", + "@smithy/util-endpoints": "^3.2.8", "tslib": "^2.6.2" }, "engines": { "node": ">=20.0.0" - }, - "peerDependencies": { - "@aws-sdk/client-dynamodb": "^3.985.0" } }, - "node_modules/@aws-sdk/middleware-bucket-endpoint": { - "version": "3.972.3", + "node_modules/@aws-sdk/client-api-gateway/node_modules/@aws-sdk/util-user-agent-browser": { + "version": "3.969.0", "license": "Apache-2.0", "dependencies": { - "@aws-sdk/types": "^3.973.1", - "@aws-sdk/util-arn-parser": "^3.972.2", - "@smithy/node-config-provider": "^4.3.8", - "@smithy/protocol-http": "^5.3.8", + "@aws-sdk/types": "3.969.0", "@smithy/types": "^4.12.0", - "@smithy/util-config-provider": "^4.2.0", + "bowser": "^2.11.0", "tslib": "^2.6.2" - }, - "engines": { - "node": ">=20.0.0" } }, - "node_modules/@aws-sdk/middleware-endpoint-discovery": { - "version": "3.972.3", + "node_modules/@aws-sdk/client-api-gateway/node_modules/@aws-sdk/util-user-agent-node": { + "version": "3.971.0", "license": "Apache-2.0", "dependencies": { - "@aws-sdk/endpoint-cache": "^3.972.2", - "@aws-sdk/types": "^3.973.1", + "@aws-sdk/middleware-user-agent": "3.970.0", + "@aws-sdk/types": "3.969.0", "@smithy/node-config-provider": "^4.3.8", - "@smithy/protocol-http": "^5.3.8", "@smithy/types": "^4.12.0", "tslib": "^2.6.2" }, "engines": { "node": ">=20.0.0" + }, + "peerDependencies": { + "aws-crt": ">=1.0.0" + }, + "peerDependenciesMeta": { + "aws-crt": { + "optional": true + } } }, - "node_modules/@aws-sdk/middleware-expect-continue": { - "version": "3.972.3", + "node_modules/@aws-sdk/client-api-gateway/node_modules/@aws-sdk/xml-builder": { + "version": "3.969.0", "license": "Apache-2.0", "dependencies": { - "@aws-sdk/types": "^3.973.1", - "@smithy/protocol-http": "^5.3.8", "@smithy/types": "^4.12.0", + "fast-xml-parser": "5.2.5", "tslib": "^2.6.2" }, "engines": { "node": ">=20.0.0" } }, - "node_modules/@aws-sdk/middleware-flexible-checksums": { - "version": "3.972.5", + "node_modules/@aws-sdk/client-dynamodb": { + "version": "3.981.0", "license": "Apache-2.0", "dependencies": { - "@aws-crypto/crc32": "5.2.0", - "@aws-crypto/crc32c": "5.2.0", - "@aws-crypto/util": "5.2.0", - "@aws-sdk/core": "^3.973.7", - "@aws-sdk/crc64-nvme": "3.972.0", + "@aws-crypto/sha256-browser": "5.2.0", + "@aws-crypto/sha256-js": "5.2.0", + "@aws-sdk/core": "^3.973.5", + "@aws-sdk/credential-provider-node": "^3.972.4", + "@aws-sdk/dynamodb-codec": "^3.972.5", + "@aws-sdk/middleware-endpoint-discovery": "^3.972.3", + "@aws-sdk/middleware-host-header": "^3.972.3", + "@aws-sdk/middleware-logger": "^3.972.3", + "@aws-sdk/middleware-recursion-detection": "^3.972.3", + "@aws-sdk/middleware-user-agent": "^3.972.5", + "@aws-sdk/region-config-resolver": "^3.972.3", "@aws-sdk/types": "^3.973.1", - "@smithy/is-array-buffer": "^4.2.0", + "@aws-sdk/util-endpoints": "3.981.0", + "@aws-sdk/util-user-agent-browser": "^3.972.3", + "@aws-sdk/util-user-agent-node": "^3.972.3", + "@smithy/config-resolver": "^4.4.6", + "@smithy/core": "^3.22.0", + "@smithy/fetch-http-handler": "^5.3.9", + "@smithy/hash-node": "^4.2.8", + "@smithy/invalid-dependency": "^4.2.8", + "@smithy/middleware-content-length": "^4.2.8", + "@smithy/middleware-endpoint": "^4.4.12", + "@smithy/middleware-retry": "^4.4.29", + "@smithy/middleware-serde": "^4.2.9", + "@smithy/middleware-stack": "^4.2.8", "@smithy/node-config-provider": "^4.3.8", + "@smithy/node-http-handler": "^4.4.8", "@smithy/protocol-http": "^5.3.8", + "@smithy/smithy-client": "^4.11.1", "@smithy/types": "^4.12.0", + "@smithy/url-parser": "^4.2.8", + "@smithy/util-base64": "^4.3.0", + "@smithy/util-body-length-browser": "^4.2.0", + "@smithy/util-body-length-node": "^4.2.1", + "@smithy/util-defaults-mode-browser": "^4.3.28", + "@smithy/util-defaults-mode-node": "^4.2.31", + "@smithy/util-endpoints": "^3.2.8", "@smithy/util-middleware": "^4.2.8", - "@smithy/util-stream": "^4.5.11", + "@smithy/util-retry": "^4.2.8", "@smithy/util-utf8": "^4.2.0", + "@smithy/util-waiter": "^4.2.8", "tslib": "^2.6.2" }, "engines": { "node": ">=20.0.0" } }, - "node_modules/@aws-sdk/middleware-host-header": { - "version": "3.972.3", + "node_modules/@aws-sdk/client-kinesis": { + "version": "3.971.0", "license": "Apache-2.0", "dependencies": { - "@aws-sdk/types": "^3.973.1", - "@smithy/protocol-http": "^5.3.8", - "@smithy/types": "^4.12.0", - "tslib": "^2.6.2" - }, + "@aws-crypto/sha256-browser": "5.2.0", + "@aws-crypto/sha256-js": "5.2.0", + "@aws-sdk/core": "3.970.0", + "@aws-sdk/credential-provider-node": "3.971.0", + "@aws-sdk/middleware-host-header": "3.969.0", + "@aws-sdk/middleware-logger": "3.969.0", + "@aws-sdk/middleware-recursion-detection": "3.969.0", + "@aws-sdk/middleware-user-agent": "3.970.0", + "@aws-sdk/region-config-resolver": "3.969.0", + "@aws-sdk/types": "3.969.0", + "@aws-sdk/util-endpoints": "3.970.0", + "@aws-sdk/util-user-agent-browser": "3.969.0", + "@aws-sdk/util-user-agent-node": "3.971.0", + "@smithy/config-resolver": "^4.4.6", + "@smithy/core": "^3.20.6", + "@smithy/eventstream-serde-browser": "^4.2.8", + "@smithy/eventstream-serde-config-resolver": "^4.3.8", + "@smithy/eventstream-serde-node": "^4.2.8", + "@smithy/fetch-http-handler": "^5.3.9", + "@smithy/hash-node": "^4.2.8", + "@smithy/invalid-dependency": "^4.2.8", + "@smithy/middleware-content-length": "^4.2.8", + "@smithy/middleware-endpoint": "^4.4.7", + "@smithy/middleware-retry": "^4.4.23", + "@smithy/middleware-serde": "^4.2.9", + "@smithy/middleware-stack": "^4.2.8", + "@smithy/node-config-provider": "^4.3.8", + "@smithy/node-http-handler": "^4.4.8", + "@smithy/protocol-http": "^5.3.8", + "@smithy/smithy-client": "^4.10.8", + "@smithy/types": "^4.12.0", + "@smithy/url-parser": "^4.2.8", + "@smithy/util-base64": "^4.3.0", + "@smithy/util-body-length-browser": "^4.2.0", + "@smithy/util-body-length-node": "^4.2.1", + "@smithy/util-defaults-mode-browser": "^4.3.22", + "@smithy/util-defaults-mode-node": "^4.2.25", + "@smithy/util-endpoints": "^3.2.8", + "@smithy/util-middleware": "^4.2.8", + "@smithy/util-retry": "^4.2.8", + "@smithy/util-utf8": "^4.2.0", + "@smithy/util-waiter": "^4.2.8", + "tslib": "^2.6.2" + }, "engines": { "node": ">=20.0.0" } }, - "node_modules/@aws-sdk/middleware-location-constraint": { - "version": "3.972.3", + "node_modules/@aws-sdk/client-kinesis/node_modules/@aws-sdk/client-sso": { + "version": "3.971.0", "license": "Apache-2.0", "dependencies": { - "@aws-sdk/types": "^3.973.1", + "@aws-crypto/sha256-browser": "5.2.0", + "@aws-crypto/sha256-js": "5.2.0", + "@aws-sdk/core": "3.970.0", + "@aws-sdk/middleware-host-header": "3.969.0", + "@aws-sdk/middleware-logger": "3.969.0", + "@aws-sdk/middleware-recursion-detection": "3.969.0", + "@aws-sdk/middleware-user-agent": "3.970.0", + "@aws-sdk/region-config-resolver": "3.969.0", + "@aws-sdk/types": "3.969.0", + "@aws-sdk/util-endpoints": "3.970.0", + "@aws-sdk/util-user-agent-browser": "3.969.0", + "@aws-sdk/util-user-agent-node": "3.971.0", + "@smithy/config-resolver": "^4.4.6", + "@smithy/core": "^3.20.6", + "@smithy/fetch-http-handler": "^5.3.9", + "@smithy/hash-node": "^4.2.8", + "@smithy/invalid-dependency": "^4.2.8", + "@smithy/middleware-content-length": "^4.2.8", + "@smithy/middleware-endpoint": "^4.4.7", + "@smithy/middleware-retry": "^4.4.23", + "@smithy/middleware-serde": "^4.2.9", + "@smithy/middleware-stack": "^4.2.8", + "@smithy/node-config-provider": "^4.3.8", + "@smithy/node-http-handler": "^4.4.8", + "@smithy/protocol-http": "^5.3.8", + "@smithy/smithy-client": "^4.10.8", "@smithy/types": "^4.12.0", + "@smithy/url-parser": "^4.2.8", + "@smithy/util-base64": "^4.3.0", + "@smithy/util-body-length-browser": "^4.2.0", + "@smithy/util-body-length-node": "^4.2.1", + "@smithy/util-defaults-mode-browser": "^4.3.22", + "@smithy/util-defaults-mode-node": "^4.2.25", + "@smithy/util-endpoints": "^3.2.8", + "@smithy/util-middleware": "^4.2.8", + "@smithy/util-retry": "^4.2.8", + "@smithy/util-utf8": "^4.2.0", "tslib": "^2.6.2" }, "engines": { "node": ">=20.0.0" } }, - "node_modules/@aws-sdk/middleware-logger": { - "version": "3.972.3", + "node_modules/@aws-sdk/client-kinesis/node_modules/@aws-sdk/core": { + "version": "3.970.0", "license": "Apache-2.0", "dependencies": { - "@aws-sdk/types": "^3.973.1", + "@aws-sdk/types": "3.969.0", + "@aws-sdk/xml-builder": "3.969.0", + "@smithy/core": "^3.20.6", + "@smithy/node-config-provider": "^4.3.8", + "@smithy/property-provider": "^4.2.8", + "@smithy/protocol-http": "^5.3.8", + "@smithy/signature-v4": "^5.3.8", + "@smithy/smithy-client": "^4.10.8", "@smithy/types": "^4.12.0", + "@smithy/util-base64": "^4.3.0", + "@smithy/util-middleware": "^4.2.8", + "@smithy/util-utf8": "^4.2.0", "tslib": "^2.6.2" }, "engines": { "node": ">=20.0.0" } }, - "node_modules/@aws-sdk/middleware-recursion-detection": { - "version": "3.972.3", + "node_modules/@aws-sdk/client-kinesis/node_modules/@aws-sdk/credential-provider-env": { + "version": "3.970.0", "license": "Apache-2.0", "dependencies": { - "@aws-sdk/types": "^3.973.1", - "@aws/lambda-invoke-store": "^0.2.2", - "@smithy/protocol-http": "^5.3.8", + "@aws-sdk/core": "3.970.0", + "@aws-sdk/types": "3.969.0", + "@smithy/property-provider": "^4.2.8", "@smithy/types": "^4.12.0", "tslib": "^2.6.2" }, @@ -1473,62 +1841,79 @@ "node": ">=20.0.0" } }, - "node_modules/@aws-sdk/middleware-sdk-api-gateway": { - "version": "3.972.3", + "node_modules/@aws-sdk/client-kinesis/node_modules/@aws-sdk/credential-provider-http": { + "version": "3.970.0", "license": "Apache-2.0", "dependencies": { - "@aws-sdk/types": "^3.973.1", + "@aws-sdk/core": "3.970.0", + "@aws-sdk/types": "3.969.0", + "@smithy/fetch-http-handler": "^5.3.9", + "@smithy/node-http-handler": "^4.4.8", + "@smithy/property-provider": "^4.2.8", "@smithy/protocol-http": "^5.3.8", + "@smithy/smithy-client": "^4.10.8", "@smithy/types": "^4.12.0", + "@smithy/util-stream": "^4.5.10", "tslib": "^2.6.2" }, "engines": { "node": ">=20.0.0" } }, - "node_modules/@aws-sdk/middleware-sdk-s3": { - "version": "3.972.7", + "node_modules/@aws-sdk/client-kinesis/node_modules/@aws-sdk/credential-provider-ini": { + "version": "3.971.0", "license": "Apache-2.0", "dependencies": { - "@aws-sdk/core": "^3.973.7", - "@aws-sdk/types": "^3.973.1", - "@aws-sdk/util-arn-parser": "^3.972.2", - "@smithy/core": "^3.22.1", - "@smithy/node-config-provider": "^4.3.8", - "@smithy/protocol-http": "^5.3.8", - "@smithy/signature-v4": "^5.3.8", - "@smithy/smithy-client": "^4.11.2", + "@aws-sdk/core": "3.970.0", + "@aws-sdk/credential-provider-env": "3.970.0", + "@aws-sdk/credential-provider-http": "3.970.0", + "@aws-sdk/credential-provider-login": "3.971.0", + "@aws-sdk/credential-provider-process": "3.970.0", + "@aws-sdk/credential-provider-sso": "3.971.0", + "@aws-sdk/credential-provider-web-identity": "3.971.0", + "@aws-sdk/nested-clients": "3.971.0", + "@aws-sdk/types": "3.969.0", + "@smithy/credential-provider-imds": "^4.2.8", + "@smithy/property-provider": "^4.2.8", + "@smithy/shared-ini-file-loader": "^4.4.3", "@smithy/types": "^4.12.0", - "@smithy/util-config-provider": "^4.2.0", - "@smithy/util-middleware": "^4.2.8", - "@smithy/util-stream": "^4.5.11", - "@smithy/util-utf8": "^4.2.0", "tslib": "^2.6.2" }, "engines": { "node": ">=20.0.0" } }, - "node_modules/@aws-sdk/middleware-sdk-sqs": { - "version": "3.972.6", + "node_modules/@aws-sdk/client-kinesis/node_modules/@aws-sdk/credential-provider-login": { + "version": "3.971.0", "license": "Apache-2.0", "dependencies": { - "@aws-sdk/types": "^3.973.1", - "@smithy/smithy-client": "^4.11.2", + "@aws-sdk/core": "3.970.0", + "@aws-sdk/nested-clients": "3.971.0", + "@aws-sdk/types": "3.969.0", + "@smithy/property-provider": "^4.2.8", + "@smithy/protocol-http": "^5.3.8", + "@smithy/shared-ini-file-loader": "^4.4.3", "@smithy/types": "^4.12.0", - "@smithy/util-hex-encoding": "^4.2.0", - "@smithy/util-utf8": "^4.2.0", "tslib": "^2.6.2" }, "engines": { "node": ">=20.0.0" } }, - "node_modules/@aws-sdk/middleware-ssec": { - "version": "3.972.3", + "node_modules/@aws-sdk/client-kinesis/node_modules/@aws-sdk/credential-provider-node": { + "version": "3.971.0", "license": "Apache-2.0", "dependencies": { - "@aws-sdk/types": "^3.973.1", + "@aws-sdk/credential-provider-env": "3.970.0", + "@aws-sdk/credential-provider-http": "3.970.0", + "@aws-sdk/credential-provider-ini": "3.971.0", + "@aws-sdk/credential-provider-process": "3.970.0", + "@aws-sdk/credential-provider-sso": "3.971.0", + "@aws-sdk/credential-provider-web-identity": "3.971.0", + "@aws-sdk/types": "3.969.0", + "@smithy/credential-provider-imds": "^4.2.8", + "@smithy/property-provider": "^4.2.8", + "@smithy/shared-ini-file-loader": "^4.4.3", "@smithy/types": "^4.12.0", "tslib": "^2.6.2" }, @@ -1536,15 +1921,14 @@ "node": ">=20.0.0" } }, - "node_modules/@aws-sdk/middleware-user-agent": { - "version": "3.972.7", + "node_modules/@aws-sdk/client-kinesis/node_modules/@aws-sdk/credential-provider-process": { + "version": "3.970.0", "license": "Apache-2.0", "dependencies": { - "@aws-sdk/core": "^3.973.7", - "@aws-sdk/types": "^3.973.1", - "@aws-sdk/util-endpoints": "3.985.0", - "@smithy/core": "^3.22.1", - "@smithy/protocol-http": "^5.3.8", + "@aws-sdk/core": "3.970.0", + "@aws-sdk/types": "3.969.0", + "@smithy/property-provider": "^4.2.8", + "@smithy/shared-ini-file-loader": "^4.4.3", "@smithy/types": "^4.12.0", "tslib": "^2.6.2" }, @@ -1552,60 +1936,32 @@ "node": ">=20.0.0" } }, - "node_modules/@aws-sdk/nested-clients": { - "version": "3.985.0", + "node_modules/@aws-sdk/client-kinesis/node_modules/@aws-sdk/credential-provider-sso": { + "version": "3.971.0", "license": "Apache-2.0", "dependencies": { - "@aws-crypto/sha256-browser": "5.2.0", - "@aws-crypto/sha256-js": "5.2.0", - "@aws-sdk/core": "^3.973.7", - "@aws-sdk/middleware-host-header": "^3.972.3", - "@aws-sdk/middleware-logger": "^3.972.3", - "@aws-sdk/middleware-recursion-detection": "^3.972.3", - "@aws-sdk/middleware-user-agent": "^3.972.7", - "@aws-sdk/region-config-resolver": "^3.972.3", - "@aws-sdk/types": "^3.973.1", - "@aws-sdk/util-endpoints": "3.985.0", - "@aws-sdk/util-user-agent-browser": "^3.972.3", - "@aws-sdk/util-user-agent-node": "^3.972.5", - "@smithy/config-resolver": "^4.4.6", - "@smithy/core": "^3.22.1", - "@smithy/fetch-http-handler": "^5.3.9", - "@smithy/hash-node": "^4.2.8", - "@smithy/invalid-dependency": "^4.2.8", - "@smithy/middleware-content-length": "^4.2.8", - "@smithy/middleware-endpoint": "^4.4.13", - "@smithy/middleware-retry": "^4.4.30", - "@smithy/middleware-serde": "^4.2.9", - "@smithy/middleware-stack": "^4.2.8", - "@smithy/node-config-provider": "^4.3.8", - "@smithy/node-http-handler": "^4.4.9", - "@smithy/protocol-http": "^5.3.8", - "@smithy/smithy-client": "^4.11.2", + "@aws-sdk/client-sso": "3.971.0", + "@aws-sdk/core": "3.970.0", + "@aws-sdk/token-providers": "3.971.0", + "@aws-sdk/types": "3.969.0", + "@smithy/property-provider": "^4.2.8", + "@smithy/shared-ini-file-loader": "^4.4.3", "@smithy/types": "^4.12.0", - "@smithy/url-parser": "^4.2.8", - "@smithy/util-base64": "^4.3.0", - "@smithy/util-body-length-browser": "^4.2.0", - "@smithy/util-body-length-node": "^4.2.1", - "@smithy/util-defaults-mode-browser": "^4.3.29", - "@smithy/util-defaults-mode-node": "^4.2.32", - "@smithy/util-endpoints": "^3.2.8", - "@smithy/util-middleware": "^4.2.8", - "@smithy/util-retry": "^4.2.8", - "@smithy/util-utf8": "^4.2.0", "tslib": "^2.6.2" }, "engines": { "node": ">=20.0.0" } }, - "node_modules/@aws-sdk/region-config-resolver": { - "version": "3.972.3", + "node_modules/@aws-sdk/client-kinesis/node_modules/@aws-sdk/credential-provider-web-identity": { + "version": "3.971.0", "license": "Apache-2.0", "dependencies": { - "@aws-sdk/types": "^3.973.1", - "@smithy/config-resolver": "^4.4.6", - "@smithy/node-config-provider": "^4.3.8", + "@aws-sdk/core": "3.970.0", + "@aws-sdk/nested-clients": "3.971.0", + "@aws-sdk/types": "3.969.0", + "@smithy/property-provider": "^4.2.8", + "@smithy/shared-ini-file-loader": "^4.4.3", "@smithy/types": "^4.12.0", "tslib": "^2.6.2" }, @@ -1613,16 +1969,12 @@ "node": ">=20.0.0" } }, - "node_modules/@aws-sdk/s3-request-presigner": { - "version": "3.985.0", + "node_modules/@aws-sdk/client-kinesis/node_modules/@aws-sdk/middleware-host-header": { + "version": "3.969.0", "license": "Apache-2.0", "dependencies": { - "@aws-sdk/signature-v4-multi-region": "3.985.0", - "@aws-sdk/types": "^3.973.1", - "@aws-sdk/util-format-url": "^3.972.3", - "@smithy/middleware-endpoint": "^4.4.13", + "@aws-sdk/types": "3.969.0", "@smithy/protocol-http": "^5.3.8", - "@smithy/smithy-client": "^4.11.2", "@smithy/types": "^4.12.0", "tslib": "^2.6.2" }, @@ -1630,14 +1982,11 @@ "node": ">=20.0.0" } }, - "node_modules/@aws-sdk/signature-v4-multi-region": { - "version": "3.985.0", + "node_modules/@aws-sdk/client-kinesis/node_modules/@aws-sdk/middleware-logger": { + "version": "3.969.0", "license": "Apache-2.0", "dependencies": { - "@aws-sdk/middleware-sdk-s3": "^3.972.7", - "@aws-sdk/types": "^3.973.1", - "@smithy/protocol-http": "^5.3.8", - "@smithy/signature-v4": "^5.3.8", + "@aws-sdk/types": "3.969.0", "@smithy/types": "^4.12.0", "tslib": "^2.6.2" }, @@ -1645,15 +1994,13 @@ "node": ">=20.0.0" } }, - "node_modules/@aws-sdk/token-providers": { - "version": "3.985.0", + "node_modules/@aws-sdk/client-kinesis/node_modules/@aws-sdk/middleware-recursion-detection": { + "version": "3.969.0", "license": "Apache-2.0", "dependencies": { - "@aws-sdk/core": "^3.973.7", - "@aws-sdk/nested-clients": "3.985.0", - "@aws-sdk/types": "^3.973.1", - "@smithy/property-provider": "^4.2.8", - "@smithy/shared-ini-file-loader": "^4.4.3", + "@aws-sdk/types": "3.969.0", + "@aws/lambda-invoke-store": "^0.2.2", + "@smithy/protocol-http": "^5.3.8", "@smithy/types": "^4.12.0", "tslib": "^2.6.2" }, @@ -1661,10 +2008,15 @@ "node": ">=20.0.0" } }, - "node_modules/@aws-sdk/types": { - "version": "3.973.1", + "node_modules/@aws-sdk/client-kinesis/node_modules/@aws-sdk/middleware-user-agent": { + "version": "3.970.0", "license": "Apache-2.0", "dependencies": { + "@aws-sdk/core": "3.970.0", + "@aws-sdk/types": "3.969.0", + "@aws-sdk/util-endpoints": "3.970.0", + "@smithy/core": "^3.20.6", + "@smithy/protocol-http": "^5.3.8", "@smithy/types": "^4.12.0", "tslib": "^2.6.2" }, @@ -1672,49 +2024,87 @@ "node": ">=20.0.0" } }, - "node_modules/@aws-sdk/util-arn-parser": { - "version": "3.972.2", + "node_modules/@aws-sdk/client-kinesis/node_modules/@aws-sdk/nested-clients": { + "version": "3.971.0", "license": "Apache-2.0", "dependencies": { + "@aws-crypto/sha256-browser": "5.2.0", + "@aws-crypto/sha256-js": "5.2.0", + "@aws-sdk/core": "3.970.0", + "@aws-sdk/middleware-host-header": "3.969.0", + "@aws-sdk/middleware-logger": "3.969.0", + "@aws-sdk/middleware-recursion-detection": "3.969.0", + "@aws-sdk/middleware-user-agent": "3.970.0", + "@aws-sdk/region-config-resolver": "3.969.0", + "@aws-sdk/types": "3.969.0", + "@aws-sdk/util-endpoints": "3.970.0", + "@aws-sdk/util-user-agent-browser": "3.969.0", + "@aws-sdk/util-user-agent-node": "3.971.0", + "@smithy/config-resolver": "^4.4.6", + "@smithy/core": "^3.20.6", + "@smithy/fetch-http-handler": "^5.3.9", + "@smithy/hash-node": "^4.2.8", + "@smithy/invalid-dependency": "^4.2.8", + "@smithy/middleware-content-length": "^4.2.8", + "@smithy/middleware-endpoint": "^4.4.7", + "@smithy/middleware-retry": "^4.4.23", + "@smithy/middleware-serde": "^4.2.9", + "@smithy/middleware-stack": "^4.2.8", + "@smithy/node-config-provider": "^4.3.8", + "@smithy/node-http-handler": "^4.4.8", + "@smithy/protocol-http": "^5.3.8", + "@smithy/smithy-client": "^4.10.8", + "@smithy/types": "^4.12.0", + "@smithy/url-parser": "^4.2.8", + "@smithy/util-base64": "^4.3.0", + "@smithy/util-body-length-browser": "^4.2.0", + "@smithy/util-body-length-node": "^4.2.1", + "@smithy/util-defaults-mode-browser": "^4.3.22", + "@smithy/util-defaults-mode-node": "^4.2.25", + "@smithy/util-endpoints": "^3.2.8", + "@smithy/util-middleware": "^4.2.8", + "@smithy/util-retry": "^4.2.8", + "@smithy/util-utf8": "^4.2.0", "tslib": "^2.6.2" }, "engines": { "node": ">=20.0.0" } }, - "node_modules/@aws-sdk/util-dynamodb": { - "version": "3.985.0", + "node_modules/@aws-sdk/client-kinesis/node_modules/@aws-sdk/region-config-resolver": { + "version": "3.969.0", "license": "Apache-2.0", "dependencies": { + "@aws-sdk/types": "3.969.0", + "@smithy/config-resolver": "^4.4.6", + "@smithy/node-config-provider": "^4.3.8", + "@smithy/types": "^4.12.0", "tslib": "^2.6.2" }, "engines": { "node": ">=20.0.0" - }, - "peerDependencies": { - "@aws-sdk/client-dynamodb": "^3.985.0" } }, - "node_modules/@aws-sdk/util-endpoints": { - "version": "3.985.0", + "node_modules/@aws-sdk/client-kinesis/node_modules/@aws-sdk/token-providers": { + "version": "3.971.0", "license": "Apache-2.0", "dependencies": { - "@aws-sdk/types": "^3.973.1", + "@aws-sdk/core": "3.970.0", + "@aws-sdk/nested-clients": "3.971.0", + "@aws-sdk/types": "3.969.0", + "@smithy/property-provider": "^4.2.8", + "@smithy/shared-ini-file-loader": "^4.4.3", "@smithy/types": "^4.12.0", - "@smithy/url-parser": "^4.2.8", - "@smithy/util-endpoints": "^3.2.8", "tslib": "^2.6.2" }, "engines": { "node": ">=20.0.0" } }, - "node_modules/@aws-sdk/util-format-url": { - "version": "3.972.3", + "node_modules/@aws-sdk/client-kinesis/node_modules/@aws-sdk/types": { + "version": "3.969.0", "license": "Apache-2.0", "dependencies": { - "@aws-sdk/types": "^3.973.1", - "@smithy/querystring-builder": "^4.2.8", "@smithy/types": "^4.12.0", "tslib": "^2.6.2" }, @@ -1722,32 +2112,36 @@ "node": ">=20.0.0" } }, - "node_modules/@aws-sdk/util-locate-window": { - "version": "3.965.4", + "node_modules/@aws-sdk/client-kinesis/node_modules/@aws-sdk/util-endpoints": { + "version": "3.970.0", "license": "Apache-2.0", "dependencies": { + "@aws-sdk/types": "3.969.0", + "@smithy/types": "^4.12.0", + "@smithy/url-parser": "^4.2.8", + "@smithy/util-endpoints": "^3.2.8", "tslib": "^2.6.2" }, "engines": { "node": ">=20.0.0" } }, - "node_modules/@aws-sdk/util-user-agent-browser": { - "version": "3.972.3", + "node_modules/@aws-sdk/client-kinesis/node_modules/@aws-sdk/util-user-agent-browser": { + "version": "3.969.0", "license": "Apache-2.0", "dependencies": { - "@aws-sdk/types": "^3.973.1", + "@aws-sdk/types": "3.969.0", "@smithy/types": "^4.12.0", "bowser": "^2.11.0", "tslib": "^2.6.2" } }, - "node_modules/@aws-sdk/util-user-agent-node": { - "version": "3.972.5", + "node_modules/@aws-sdk/client-kinesis/node_modules/@aws-sdk/util-user-agent-node": { + "version": "3.971.0", "license": "Apache-2.0", "dependencies": { - "@aws-sdk/middleware-user-agent": "^3.972.7", - "@aws-sdk/types": "^3.973.1", + "@aws-sdk/middleware-user-agent": "3.970.0", + "@aws-sdk/types": "3.969.0", "@smithy/node-config-provider": "^4.3.8", "@smithy/types": "^4.12.0", "tslib": "^2.6.2" @@ -1764,2703 +2158,3187 @@ } } }, - "node_modules/@aws-sdk/xml-builder": { - "version": "3.972.4", + "node_modules/@aws-sdk/client-kinesis/node_modules/@aws-sdk/xml-builder": { + "version": "3.969.0", "license": "Apache-2.0", "dependencies": { "@smithy/types": "^4.12.0", - "fast-xml-parser": "5.3.4", + "fast-xml-parser": "5.2.5", "tslib": "^2.6.2" }, "engines": { "node": ">=20.0.0" } }, - "node_modules/@aws/lambda-invoke-store": { - "version": "0.2.3", + "node_modules/@aws-sdk/client-lambda": { + "version": "3.986.0", "license": "Apache-2.0", - "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/@babel/code-frame": { - "version": "7.29.0", - "license": "MIT", - "dependencies": { - "@babel/helper-validator-identifier": "^7.28.5", - "js-tokens": "^4.0.0", - "picocolors": "^1.1.1" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/compat-data": { - "version": "7.29.0", - "license": "MIT", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/core": { - "version": "7.29.0", - "license": "MIT", "dependencies": { - "@babel/code-frame": "^7.29.0", - "@babel/generator": "^7.29.0", - "@babel/helper-compilation-targets": "^7.28.6", - "@babel/helper-module-transforms": "^7.28.6", - "@babel/helpers": "^7.28.6", - "@babel/parser": "^7.29.0", - "@babel/template": "^7.28.6", - "@babel/traverse": "^7.29.0", - "@babel/types": "^7.29.0", - "@jridgewell/remapping": "^2.3.5", - "convert-source-map": "^2.0.0", - "debug": "^4.1.0", - "gensync": "^1.0.0-beta.2", - "json5": "^2.2.3", - "semver": "^6.3.1" + "@aws-crypto/sha256-browser": "5.2.0", + "@aws-crypto/sha256-js": "5.2.0", + "@aws-sdk/core": "^3.973.7", + "@aws-sdk/credential-provider-node": "^3.972.6", + "@aws-sdk/middleware-host-header": "^3.972.3", + "@aws-sdk/middleware-logger": "^3.972.3", + "@aws-sdk/middleware-recursion-detection": "^3.972.3", + "@aws-sdk/middleware-user-agent": "^3.972.7", + "@aws-sdk/region-config-resolver": "^3.972.3", + "@aws-sdk/types": "^3.973.1", + "@aws-sdk/util-endpoints": "3.986.0", + "@aws-sdk/util-user-agent-browser": "^3.972.3", + "@aws-sdk/util-user-agent-node": "^3.972.5", + "@smithy/config-resolver": "^4.4.6", + "@smithy/core": "^3.22.1", + "@smithy/eventstream-serde-browser": "^4.2.8", + "@smithy/eventstream-serde-config-resolver": "^4.3.8", + "@smithy/eventstream-serde-node": "^4.2.8", + "@smithy/fetch-http-handler": "^5.3.9", + "@smithy/hash-node": "^4.2.8", + "@smithy/invalid-dependency": "^4.2.8", + "@smithy/middleware-content-length": "^4.2.8", + "@smithy/middleware-endpoint": "^4.4.13", + "@smithy/middleware-retry": "^4.4.30", + "@smithy/middleware-serde": "^4.2.9", + "@smithy/middleware-stack": "^4.2.8", + "@smithy/node-config-provider": "^4.3.8", + "@smithy/node-http-handler": "^4.4.9", + "@smithy/protocol-http": "^5.3.8", + "@smithy/smithy-client": "^4.11.2", + "@smithy/types": "^4.12.0", + "@smithy/url-parser": "^4.2.8", + "@smithy/util-base64": "^4.3.0", + "@smithy/util-body-length-browser": "^4.2.0", + "@smithy/util-body-length-node": "^4.2.1", + "@smithy/util-defaults-mode-browser": "^4.3.29", + "@smithy/util-defaults-mode-node": "^4.2.32", + "@smithy/util-endpoints": "^3.2.8", + "@smithy/util-middleware": "^4.2.8", + "@smithy/util-retry": "^4.2.8", + "@smithy/util-stream": "^4.5.11", + "@smithy/util-utf8": "^4.2.0", + "@smithy/util-waiter": "^4.2.8", + "tslib": "^2.6.2" }, "engines": { - "node": ">=6.9.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/babel" + "node": ">=20.0.0" } }, - "node_modules/@babel/core/node_modules/semver": { - "version": "6.3.1", - "license": "ISC", - "bin": { - "semver": "bin/semver.js" + "node_modules/@aws-sdk/client-lambda/node_modules/@aws-sdk/core": { + "version": "3.973.7", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/types": "^3.973.1", + "@aws-sdk/xml-builder": "^3.972.4", + "@smithy/core": "^3.22.1", + "@smithy/node-config-provider": "^4.3.8", + "@smithy/property-provider": "^4.2.8", + "@smithy/protocol-http": "^5.3.8", + "@smithy/signature-v4": "^5.3.8", + "@smithy/smithy-client": "^4.11.2", + "@smithy/types": "^4.12.0", + "@smithy/util-base64": "^4.3.0", + "@smithy/util-middleware": "^4.2.8", + "@smithy/util-utf8": "^4.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=20.0.0" } }, - "node_modules/@babel/generator": { - "version": "7.29.1", - "license": "MIT", + "node_modules/@aws-sdk/client-lambda/node_modules/@aws-sdk/util-endpoints": { + "version": "3.986.0", + "license": "Apache-2.0", "dependencies": { - "@babel/parser": "^7.29.0", - "@babel/types": "^7.29.0", - "@jridgewell/gen-mapping": "^0.3.12", - "@jridgewell/trace-mapping": "^0.3.28", - "jsesc": "^3.0.2" + "@aws-sdk/types": "^3.973.1", + "@smithy/types": "^4.12.0", + "@smithy/url-parser": "^4.2.8", + "@smithy/util-endpoints": "^3.2.8", + "tslib": "^2.6.2" }, "engines": { - "node": ">=6.9.0" + "node": ">=20.0.0" } }, - "node_modules/@babel/helper-compilation-targets": { - "version": "7.28.6", - "license": "MIT", + "node_modules/@aws-sdk/client-lambda/node_modules/@aws-sdk/xml-builder": { + "version": "3.972.4", + "license": "Apache-2.0", "dependencies": { - "@babel/compat-data": "^7.28.6", - "@babel/helper-validator-option": "^7.27.1", - "browserslist": "^4.24.0", - "lru-cache": "^5.1.1", - "semver": "^6.3.1" + "@smithy/types": "^4.12.0", + "fast-xml-parser": "5.3.4", + "tslib": "^2.6.2" }, "engines": { - "node": ">=6.9.0" + "node": ">=20.0.0" } }, - "node_modules/@babel/helper-compilation-targets/node_modules/semver": { - "version": "6.3.1", - "license": "ISC", - "bin": { - "semver": "bin/semver.js" + "node_modules/@aws-sdk/client-s3": { + "version": "3.971.0", + "license": "Apache-2.0", + "dependencies": { + "@aws-crypto/sha1-browser": "5.2.0", + "@aws-crypto/sha256-browser": "5.2.0", + "@aws-crypto/sha256-js": "5.2.0", + "@aws-sdk/core": "3.970.0", + "@aws-sdk/credential-provider-node": "3.971.0", + "@aws-sdk/middleware-bucket-endpoint": "3.969.0", + "@aws-sdk/middleware-expect-continue": "3.969.0", + "@aws-sdk/middleware-flexible-checksums": "3.971.0", + "@aws-sdk/middleware-host-header": "3.969.0", + "@aws-sdk/middleware-location-constraint": "3.969.0", + "@aws-sdk/middleware-logger": "3.969.0", + "@aws-sdk/middleware-recursion-detection": "3.969.0", + "@aws-sdk/middleware-sdk-s3": "3.970.0", + "@aws-sdk/middleware-ssec": "3.971.0", + "@aws-sdk/middleware-user-agent": "3.970.0", + "@aws-sdk/region-config-resolver": "3.969.0", + "@aws-sdk/signature-v4-multi-region": "3.970.0", + "@aws-sdk/types": "3.969.0", + "@aws-sdk/util-endpoints": "3.970.0", + "@aws-sdk/util-user-agent-browser": "3.969.0", + "@aws-sdk/util-user-agent-node": "3.971.0", + "@smithy/config-resolver": "^4.4.6", + "@smithy/core": "^3.20.6", + "@smithy/eventstream-serde-browser": "^4.2.8", + "@smithy/eventstream-serde-config-resolver": "^4.3.8", + "@smithy/eventstream-serde-node": "^4.2.8", + "@smithy/fetch-http-handler": "^5.3.9", + "@smithy/hash-blob-browser": "^4.2.9", + "@smithy/hash-node": "^4.2.8", + "@smithy/hash-stream-node": "^4.2.8", + "@smithy/invalid-dependency": "^4.2.8", + "@smithy/md5-js": "^4.2.8", + "@smithy/middleware-content-length": "^4.2.8", + "@smithy/middleware-endpoint": "^4.4.7", + "@smithy/middleware-retry": "^4.4.23", + "@smithy/middleware-serde": "^4.2.9", + "@smithy/middleware-stack": "^4.2.8", + "@smithy/node-config-provider": "^4.3.8", + "@smithy/node-http-handler": "^4.4.8", + "@smithy/protocol-http": "^5.3.8", + "@smithy/smithy-client": "^4.10.8", + "@smithy/types": "^4.12.0", + "@smithy/url-parser": "^4.2.8", + "@smithy/util-base64": "^4.3.0", + "@smithy/util-body-length-browser": "^4.2.0", + "@smithy/util-body-length-node": "^4.2.1", + "@smithy/util-defaults-mode-browser": "^4.3.22", + "@smithy/util-defaults-mode-node": "^4.2.25", + "@smithy/util-endpoints": "^3.2.8", + "@smithy/util-middleware": "^4.2.8", + "@smithy/util-retry": "^4.2.8", + "@smithy/util-stream": "^4.5.10", + "@smithy/util-utf8": "^4.2.0", + "@smithy/util-waiter": "^4.2.8", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=20.0.0" } }, - "node_modules/@babel/helper-globals": { - "version": "7.28.0", - "license": "MIT", + "node_modules/@aws-sdk/client-s3/node_modules/@aws-sdk/client-sso": { + "version": "3.971.0", + "license": "Apache-2.0", + "dependencies": { + "@aws-crypto/sha256-browser": "5.2.0", + "@aws-crypto/sha256-js": "5.2.0", + "@aws-sdk/core": "3.970.0", + "@aws-sdk/middleware-host-header": "3.969.0", + "@aws-sdk/middleware-logger": "3.969.0", + "@aws-sdk/middleware-recursion-detection": "3.969.0", + "@aws-sdk/middleware-user-agent": "3.970.0", + "@aws-sdk/region-config-resolver": "3.969.0", + "@aws-sdk/types": "3.969.0", + "@aws-sdk/util-endpoints": "3.970.0", + "@aws-sdk/util-user-agent-browser": "3.969.0", + "@aws-sdk/util-user-agent-node": "3.971.0", + "@smithy/config-resolver": "^4.4.6", + "@smithy/core": "^3.20.6", + "@smithy/fetch-http-handler": "^5.3.9", + "@smithy/hash-node": "^4.2.8", + "@smithy/invalid-dependency": "^4.2.8", + "@smithy/middleware-content-length": "^4.2.8", + "@smithy/middleware-endpoint": "^4.4.7", + "@smithy/middleware-retry": "^4.4.23", + "@smithy/middleware-serde": "^4.2.9", + "@smithy/middleware-stack": "^4.2.8", + "@smithy/node-config-provider": "^4.3.8", + "@smithy/node-http-handler": "^4.4.8", + "@smithy/protocol-http": "^5.3.8", + "@smithy/smithy-client": "^4.10.8", + "@smithy/types": "^4.12.0", + "@smithy/url-parser": "^4.2.8", + "@smithy/util-base64": "^4.3.0", + "@smithy/util-body-length-browser": "^4.2.0", + "@smithy/util-body-length-node": "^4.2.1", + "@smithy/util-defaults-mode-browser": "^4.3.22", + "@smithy/util-defaults-mode-node": "^4.2.25", + "@smithy/util-endpoints": "^3.2.8", + "@smithy/util-middleware": "^4.2.8", + "@smithy/util-retry": "^4.2.8", + "@smithy/util-utf8": "^4.2.0", + "tslib": "^2.6.2" + }, "engines": { - "node": ">=6.9.0" + "node": ">=20.0.0" } }, - "node_modules/@babel/helper-module-imports": { - "version": "7.28.6", - "license": "MIT", + "node_modules/@aws-sdk/client-s3/node_modules/@aws-sdk/core": { + "version": "3.970.0", + "license": "Apache-2.0", "dependencies": { - "@babel/traverse": "^7.28.6", - "@babel/types": "^7.28.6" + "@aws-sdk/types": "3.969.0", + "@aws-sdk/xml-builder": "3.969.0", + "@smithy/core": "^3.20.6", + "@smithy/node-config-provider": "^4.3.8", + "@smithy/property-provider": "^4.2.8", + "@smithy/protocol-http": "^5.3.8", + "@smithy/signature-v4": "^5.3.8", + "@smithy/smithy-client": "^4.10.8", + "@smithy/types": "^4.12.0", + "@smithy/util-base64": "^4.3.0", + "@smithy/util-middleware": "^4.2.8", + "@smithy/util-utf8": "^4.2.0", + "tslib": "^2.6.2" }, "engines": { - "node": ">=6.9.0" + "node": ">=20.0.0" } }, - "node_modules/@babel/helper-module-transforms": { - "version": "7.28.6", - "license": "MIT", + "node_modules/@aws-sdk/client-s3/node_modules/@aws-sdk/credential-provider-env": { + "version": "3.970.0", + "license": "Apache-2.0", "dependencies": { - "@babel/helper-module-imports": "^7.28.6", - "@babel/helper-validator-identifier": "^7.28.5", - "@babel/traverse": "^7.28.6" + "@aws-sdk/core": "3.970.0", + "@aws-sdk/types": "3.969.0", + "@smithy/property-provider": "^4.2.8", + "@smithy/types": "^4.12.0", + "tslib": "^2.6.2" }, "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" + "node": ">=20.0.0" } }, - "node_modules/@babel/helper-plugin-utils": { - "version": "7.28.6", - "license": "MIT", + "node_modules/@aws-sdk/client-s3/node_modules/@aws-sdk/credential-provider-http": { + "version": "3.970.0", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/core": "3.970.0", + "@aws-sdk/types": "3.969.0", + "@smithy/fetch-http-handler": "^5.3.9", + "@smithy/node-http-handler": "^4.4.8", + "@smithy/property-provider": "^4.2.8", + "@smithy/protocol-http": "^5.3.8", + "@smithy/smithy-client": "^4.10.8", + "@smithy/types": "^4.12.0", + "@smithy/util-stream": "^4.5.10", + "tslib": "^2.6.2" + }, "engines": { - "node": ">=6.9.0" + "node": ">=20.0.0" } }, - "node_modules/@babel/helper-string-parser": { - "version": "7.27.1", - "license": "MIT", + "node_modules/@aws-sdk/client-s3/node_modules/@aws-sdk/credential-provider-ini": { + "version": "3.971.0", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/core": "3.970.0", + "@aws-sdk/credential-provider-env": "3.970.0", + "@aws-sdk/credential-provider-http": "3.970.0", + "@aws-sdk/credential-provider-login": "3.971.0", + "@aws-sdk/credential-provider-process": "3.970.0", + "@aws-sdk/credential-provider-sso": "3.971.0", + "@aws-sdk/credential-provider-web-identity": "3.971.0", + "@aws-sdk/nested-clients": "3.971.0", + "@aws-sdk/types": "3.969.0", + "@smithy/credential-provider-imds": "^4.2.8", + "@smithy/property-provider": "^4.2.8", + "@smithy/shared-ini-file-loader": "^4.4.3", + "@smithy/types": "^4.12.0", + "tslib": "^2.6.2" + }, "engines": { - "node": ">=6.9.0" + "node": ">=20.0.0" } }, - "node_modules/@babel/helper-validator-identifier": { - "version": "7.28.5", - "license": "MIT", + "node_modules/@aws-sdk/client-s3/node_modules/@aws-sdk/credential-provider-login": { + "version": "3.971.0", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/core": "3.970.0", + "@aws-sdk/nested-clients": "3.971.0", + "@aws-sdk/types": "3.969.0", + "@smithy/property-provider": "^4.2.8", + "@smithy/protocol-http": "^5.3.8", + "@smithy/shared-ini-file-loader": "^4.4.3", + "@smithy/types": "^4.12.0", + "tslib": "^2.6.2" + }, "engines": { - "node": ">=6.9.0" + "node": ">=20.0.0" } }, - "node_modules/@babel/helper-validator-option": { - "version": "7.27.1", - "license": "MIT", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helpers": { - "version": "7.28.6", - "license": "MIT", + "node_modules/@aws-sdk/client-s3/node_modules/@aws-sdk/credential-provider-node": { + "version": "3.971.0", + "license": "Apache-2.0", "dependencies": { - "@babel/template": "^7.28.6", - "@babel/types": "^7.28.6" + "@aws-sdk/credential-provider-env": "3.970.0", + "@aws-sdk/credential-provider-http": "3.970.0", + "@aws-sdk/credential-provider-ini": "3.971.0", + "@aws-sdk/credential-provider-process": "3.970.0", + "@aws-sdk/credential-provider-sso": "3.971.0", + "@aws-sdk/credential-provider-web-identity": "3.971.0", + "@aws-sdk/types": "3.969.0", + "@smithy/credential-provider-imds": "^4.2.8", + "@smithy/property-provider": "^4.2.8", + "@smithy/shared-ini-file-loader": "^4.4.3", + "@smithy/types": "^4.12.0", + "tslib": "^2.6.2" }, "engines": { - "node": ">=6.9.0" + "node": ">=20.0.0" } }, - "node_modules/@babel/parser": { - "version": "7.29.0", - "license": "MIT", + "node_modules/@aws-sdk/client-s3/node_modules/@aws-sdk/credential-provider-process": { + "version": "3.970.0", + "license": "Apache-2.0", "dependencies": { - "@babel/types": "^7.29.0" - }, - "bin": { - "parser": "bin/babel-parser.js" + "@aws-sdk/core": "3.970.0", + "@aws-sdk/types": "3.969.0", + "@smithy/property-provider": "^4.2.8", + "@smithy/shared-ini-file-loader": "^4.4.3", + "@smithy/types": "^4.12.0", + "tslib": "^2.6.2" }, "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@babel/plugin-syntax-async-generators": { - "version": "7.8.4", - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-bigint": { - "version": "7.8.3", - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "node": ">=20.0.0" } }, - "node_modules/@babel/plugin-syntax-class-properties": { - "version": "7.12.13", - "license": "MIT", + "node_modules/@aws-sdk/client-s3/node_modules/@aws-sdk/credential-provider-sso": { + "version": "3.971.0", + "license": "Apache-2.0", "dependencies": { - "@babel/helper-plugin-utils": "^7.12.13" + "@aws-sdk/client-sso": "3.971.0", + "@aws-sdk/core": "3.970.0", + "@aws-sdk/token-providers": "3.971.0", + "@aws-sdk/types": "3.969.0", + "@smithy/property-provider": "^4.2.8", + "@smithy/shared-ini-file-loader": "^4.4.3", + "@smithy/types": "^4.12.0", + "tslib": "^2.6.2" }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "engines": { + "node": ">=20.0.0" } }, - "node_modules/@babel/plugin-syntax-class-static-block": { - "version": "7.14.5", - "license": "MIT", + "node_modules/@aws-sdk/client-s3/node_modules/@aws-sdk/credential-provider-web-identity": { + "version": "3.971.0", + "license": "Apache-2.0", "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5" + "@aws-sdk/core": "3.970.0", + "@aws-sdk/nested-clients": "3.971.0", + "@aws-sdk/types": "3.969.0", + "@smithy/property-provider": "^4.2.8", + "@smithy/shared-ini-file-loader": "^4.4.3", + "@smithy/types": "^4.12.0", + "tslib": "^2.6.2" }, "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "node": ">=20.0.0" } }, - "node_modules/@babel/plugin-syntax-import-attributes": { - "version": "7.28.6", - "license": "MIT", + "node_modules/@aws-sdk/client-s3/node_modules/@aws-sdk/middleware-host-header": { + "version": "3.969.0", + "license": "Apache-2.0", "dependencies": { - "@babel/helper-plugin-utils": "^7.28.6" + "@aws-sdk/types": "3.969.0", + "@smithy/protocol-http": "^5.3.8", + "@smithy/types": "^4.12.0", + "tslib": "^2.6.2" }, "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "node": ">=20.0.0" } }, - "node_modules/@babel/plugin-syntax-import-meta": { - "version": "7.10.4", - "license": "MIT", + "node_modules/@aws-sdk/client-s3/node_modules/@aws-sdk/middleware-logger": { + "version": "3.969.0", + "license": "Apache-2.0", "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4" + "@aws-sdk/types": "3.969.0", + "@smithy/types": "^4.12.0", + "tslib": "^2.6.2" }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "engines": { + "node": ">=20.0.0" } }, - "node_modules/@babel/plugin-syntax-json-strings": { - "version": "7.8.3", - "license": "MIT", + "node_modules/@aws-sdk/client-s3/node_modules/@aws-sdk/middleware-recursion-detection": { + "version": "3.969.0", + "license": "Apache-2.0", "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" + "@aws-sdk/types": "3.969.0", + "@aws/lambda-invoke-store": "^0.2.2", + "@smithy/protocol-http": "^5.3.8", + "@smithy/types": "^4.12.0", + "tslib": "^2.6.2" }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "engines": { + "node": ">=20.0.0" } }, - "node_modules/@babel/plugin-syntax-jsx": { - "version": "7.28.6", - "license": "MIT", + "node_modules/@aws-sdk/client-s3/node_modules/@aws-sdk/middleware-user-agent": { + "version": "3.970.0", + "license": "Apache-2.0", "dependencies": { - "@babel/helper-plugin-utils": "^7.28.6" + "@aws-sdk/core": "3.970.0", + "@aws-sdk/types": "3.969.0", + "@aws-sdk/util-endpoints": "3.970.0", + "@smithy/core": "^3.20.6", + "@smithy/protocol-http": "^5.3.8", + "@smithy/types": "^4.12.0", + "tslib": "^2.6.2" }, "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "node": ">=20.0.0" } }, - "node_modules/@babel/plugin-syntax-logical-assignment-operators": { - "version": "7.10.4", - "license": "MIT", + "node_modules/@aws-sdk/client-s3/node_modules/@aws-sdk/nested-clients": { + "version": "3.971.0", + "license": "Apache-2.0", "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4" + "@aws-crypto/sha256-browser": "5.2.0", + "@aws-crypto/sha256-js": "5.2.0", + "@aws-sdk/core": "3.970.0", + "@aws-sdk/middleware-host-header": "3.969.0", + "@aws-sdk/middleware-logger": "3.969.0", + "@aws-sdk/middleware-recursion-detection": "3.969.0", + "@aws-sdk/middleware-user-agent": "3.970.0", + "@aws-sdk/region-config-resolver": "3.969.0", + "@aws-sdk/types": "3.969.0", + "@aws-sdk/util-endpoints": "3.970.0", + "@aws-sdk/util-user-agent-browser": "3.969.0", + "@aws-sdk/util-user-agent-node": "3.971.0", + "@smithy/config-resolver": "^4.4.6", + "@smithy/core": "^3.20.6", + "@smithy/fetch-http-handler": "^5.3.9", + "@smithy/hash-node": "^4.2.8", + "@smithy/invalid-dependency": "^4.2.8", + "@smithy/middleware-content-length": "^4.2.8", + "@smithy/middleware-endpoint": "^4.4.7", + "@smithy/middleware-retry": "^4.4.23", + "@smithy/middleware-serde": "^4.2.9", + "@smithy/middleware-stack": "^4.2.8", + "@smithy/node-config-provider": "^4.3.8", + "@smithy/node-http-handler": "^4.4.8", + "@smithy/protocol-http": "^5.3.8", + "@smithy/smithy-client": "^4.10.8", + "@smithy/types": "^4.12.0", + "@smithy/url-parser": "^4.2.8", + "@smithy/util-base64": "^4.3.0", + "@smithy/util-body-length-browser": "^4.2.0", + "@smithy/util-body-length-node": "^4.2.1", + "@smithy/util-defaults-mode-browser": "^4.3.22", + "@smithy/util-defaults-mode-node": "^4.2.25", + "@smithy/util-endpoints": "^3.2.8", + "@smithy/util-middleware": "^4.2.8", + "@smithy/util-retry": "^4.2.8", + "@smithy/util-utf8": "^4.2.0", + "tslib": "^2.6.2" }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "engines": { + "node": ">=20.0.0" } }, - "node_modules/@babel/plugin-syntax-nullish-coalescing-operator": { - "version": "7.8.3", - "license": "MIT", + "node_modules/@aws-sdk/client-s3/node_modules/@aws-sdk/region-config-resolver": { + "version": "3.969.0", + "license": "Apache-2.0", "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" + "@aws-sdk/types": "3.969.0", + "@smithy/config-resolver": "^4.4.6", + "@smithy/node-config-provider": "^4.3.8", + "@smithy/types": "^4.12.0", + "tslib": "^2.6.2" }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "engines": { + "node": ">=20.0.0" } }, - "node_modules/@babel/plugin-syntax-numeric-separator": { - "version": "7.10.4", - "license": "MIT", + "node_modules/@aws-sdk/client-s3/node_modules/@aws-sdk/token-providers": { + "version": "3.971.0", + "license": "Apache-2.0", "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4" + "@aws-sdk/core": "3.970.0", + "@aws-sdk/nested-clients": "3.971.0", + "@aws-sdk/types": "3.969.0", + "@smithy/property-provider": "^4.2.8", + "@smithy/shared-ini-file-loader": "^4.4.3", + "@smithy/types": "^4.12.0", + "tslib": "^2.6.2" }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "engines": { + "node": ">=20.0.0" } }, - "node_modules/@babel/plugin-syntax-object-rest-spread": { - "version": "7.8.3", - "license": "MIT", + "node_modules/@aws-sdk/client-s3/node_modules/@aws-sdk/types": { + "version": "3.969.0", + "license": "Apache-2.0", "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" + "@smithy/types": "^4.12.0", + "tslib": "^2.6.2" }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "engines": { + "node": ">=20.0.0" } }, - "node_modules/@babel/plugin-syntax-optional-catch-binding": { - "version": "7.8.3", - "license": "MIT", + "node_modules/@aws-sdk/client-s3/node_modules/@aws-sdk/util-endpoints": { + "version": "3.970.0", + "license": "Apache-2.0", "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" + "@aws-sdk/types": "3.969.0", + "@smithy/types": "^4.12.0", + "@smithy/url-parser": "^4.2.8", + "@smithy/util-endpoints": "^3.2.8", + "tslib": "^2.6.2" }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "engines": { + "node": ">=20.0.0" } }, - "node_modules/@babel/plugin-syntax-optional-chaining": { - "version": "7.8.3", - "license": "MIT", + "node_modules/@aws-sdk/client-s3/node_modules/@aws-sdk/util-user-agent-browser": { + "version": "3.969.0", + "license": "Apache-2.0", "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "@aws-sdk/types": "3.969.0", + "@smithy/types": "^4.12.0", + "bowser": "^2.11.0", + "tslib": "^2.6.2" } }, - "node_modules/@babel/plugin-syntax-private-property-in-object": { - "version": "7.14.5", - "license": "MIT", + "node_modules/@aws-sdk/client-s3/node_modules/@aws-sdk/util-user-agent-node": { + "version": "3.971.0", + "license": "Apache-2.0", "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5" + "@aws-sdk/middleware-user-agent": "3.970.0", + "@aws-sdk/types": "3.969.0", + "@smithy/node-config-provider": "^4.3.8", + "@smithy/types": "^4.12.0", + "tslib": "^2.6.2" }, "engines": { - "node": ">=6.9.0" + "node": ">=20.0.0" }, "peerDependencies": { - "@babel/core": "^7.0.0-0" + "aws-crt": ">=1.0.0" + }, + "peerDependenciesMeta": { + "aws-crt": { + "optional": true + } } }, - "node_modules/@babel/plugin-syntax-top-level-await": { - "version": "7.14.5", - "license": "MIT", + "node_modules/@aws-sdk/client-s3/node_modules/@aws-sdk/xml-builder": { + "version": "3.969.0", + "license": "Apache-2.0", "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5" + "@smithy/types": "^4.12.0", + "fast-xml-parser": "5.2.5", + "tslib": "^2.6.2" }, "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "node": ">=20.0.0" } }, - "node_modules/@babel/plugin-syntax-typescript": { - "version": "7.28.6", - "license": "MIT", + "node_modules/@aws-sdk/client-sns": { + "version": "3.971.0", + "license": "Apache-2.0", "dependencies": { - "@babel/helper-plugin-utils": "^7.28.6" + "@aws-crypto/sha256-browser": "5.2.0", + "@aws-crypto/sha256-js": "5.2.0", + "@aws-sdk/core": "3.970.0", + "@aws-sdk/credential-provider-node": "3.971.0", + "@aws-sdk/middleware-host-header": "3.969.0", + "@aws-sdk/middleware-logger": "3.969.0", + "@aws-sdk/middleware-recursion-detection": "3.969.0", + "@aws-sdk/middleware-user-agent": "3.970.0", + "@aws-sdk/region-config-resolver": "3.969.0", + "@aws-sdk/types": "3.969.0", + "@aws-sdk/util-endpoints": "3.970.0", + "@aws-sdk/util-user-agent-browser": "3.969.0", + "@aws-sdk/util-user-agent-node": "3.971.0", + "@smithy/config-resolver": "^4.4.6", + "@smithy/core": "^3.20.6", + "@smithy/fetch-http-handler": "^5.3.9", + "@smithy/hash-node": "^4.2.8", + "@smithy/invalid-dependency": "^4.2.8", + "@smithy/middleware-content-length": "^4.2.8", + "@smithy/middleware-endpoint": "^4.4.7", + "@smithy/middleware-retry": "^4.4.23", + "@smithy/middleware-serde": "^4.2.9", + "@smithy/middleware-stack": "^4.2.8", + "@smithy/node-config-provider": "^4.3.8", + "@smithy/node-http-handler": "^4.4.8", + "@smithy/protocol-http": "^5.3.8", + "@smithy/smithy-client": "^4.10.8", + "@smithy/types": "^4.12.0", + "@smithy/url-parser": "^4.2.8", + "@smithy/util-base64": "^4.3.0", + "@smithy/util-body-length-browser": "^4.2.0", + "@smithy/util-body-length-node": "^4.2.1", + "@smithy/util-defaults-mode-browser": "^4.3.22", + "@smithy/util-defaults-mode-node": "^4.2.25", + "@smithy/util-endpoints": "^3.2.8", + "@smithy/util-middleware": "^4.2.8", + "@smithy/util-retry": "^4.2.8", + "@smithy/util-utf8": "^4.2.0", + "tslib": "^2.6.2" }, "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "node": ">=20.0.0" } }, - "node_modules/@babel/runtime": { - "version": "7.28.6", - "dev": true, - "license": "MIT", + "node_modules/@aws-sdk/client-sns/node_modules/@aws-sdk/client-sso": { + "version": "3.971.0", + "license": "Apache-2.0", + "dependencies": { + "@aws-crypto/sha256-browser": "5.2.0", + "@aws-crypto/sha256-js": "5.2.0", + "@aws-sdk/core": "3.970.0", + "@aws-sdk/middleware-host-header": "3.969.0", + "@aws-sdk/middleware-logger": "3.969.0", + "@aws-sdk/middleware-recursion-detection": "3.969.0", + "@aws-sdk/middleware-user-agent": "3.970.0", + "@aws-sdk/region-config-resolver": "3.969.0", + "@aws-sdk/types": "3.969.0", + "@aws-sdk/util-endpoints": "3.970.0", + "@aws-sdk/util-user-agent-browser": "3.969.0", + "@aws-sdk/util-user-agent-node": "3.971.0", + "@smithy/config-resolver": "^4.4.6", + "@smithy/core": "^3.20.6", + "@smithy/fetch-http-handler": "^5.3.9", + "@smithy/hash-node": "^4.2.8", + "@smithy/invalid-dependency": "^4.2.8", + "@smithy/middleware-content-length": "^4.2.8", + "@smithy/middleware-endpoint": "^4.4.7", + "@smithy/middleware-retry": "^4.4.23", + "@smithy/middleware-serde": "^4.2.9", + "@smithy/middleware-stack": "^4.2.8", + "@smithy/node-config-provider": "^4.3.8", + "@smithy/node-http-handler": "^4.4.8", + "@smithy/protocol-http": "^5.3.8", + "@smithy/smithy-client": "^4.10.8", + "@smithy/types": "^4.12.0", + "@smithy/url-parser": "^4.2.8", + "@smithy/util-base64": "^4.3.0", + "@smithy/util-body-length-browser": "^4.2.0", + "@smithy/util-body-length-node": "^4.2.1", + "@smithy/util-defaults-mode-browser": "^4.3.22", + "@smithy/util-defaults-mode-node": "^4.2.25", + "@smithy/util-endpoints": "^3.2.8", + "@smithy/util-middleware": "^4.2.8", + "@smithy/util-retry": "^4.2.8", + "@smithy/util-utf8": "^4.2.0", + "tslib": "^2.6.2" + }, "engines": { - "node": ">=6.9.0" + "node": ">=20.0.0" } }, - "node_modules/@babel/template": { - "version": "7.28.6", - "license": "MIT", + "node_modules/@aws-sdk/client-sns/node_modules/@aws-sdk/core": { + "version": "3.970.0", + "license": "Apache-2.0", "dependencies": { - "@babel/code-frame": "^7.28.6", - "@babel/parser": "^7.28.6", - "@babel/types": "^7.28.6" + "@aws-sdk/types": "3.969.0", + "@aws-sdk/xml-builder": "3.969.0", + "@smithy/core": "^3.20.6", + "@smithy/node-config-provider": "^4.3.8", + "@smithy/property-provider": "^4.2.8", + "@smithy/protocol-http": "^5.3.8", + "@smithy/signature-v4": "^5.3.8", + "@smithy/smithy-client": "^4.10.8", + "@smithy/types": "^4.12.0", + "@smithy/util-base64": "^4.3.0", + "@smithy/util-middleware": "^4.2.8", + "@smithy/util-utf8": "^4.2.0", + "tslib": "^2.6.2" }, "engines": { - "node": ">=6.9.0" + "node": ">=20.0.0" } }, - "node_modules/@babel/traverse": { - "version": "7.29.0", - "license": "MIT", + "node_modules/@aws-sdk/client-sns/node_modules/@aws-sdk/credential-provider-env": { + "version": "3.970.0", + "license": "Apache-2.0", "dependencies": { - "@babel/code-frame": "^7.29.0", - "@babel/generator": "^7.29.0", - "@babel/helper-globals": "^7.28.0", - "@babel/parser": "^7.29.0", - "@babel/template": "^7.28.6", - "@babel/types": "^7.29.0", - "debug": "^4.3.1" + "@aws-sdk/core": "3.970.0", + "@aws-sdk/types": "3.969.0", + "@smithy/property-provider": "^4.2.8", + "@smithy/types": "^4.12.0", + "tslib": "^2.6.2" }, "engines": { - "node": ">=6.9.0" + "node": ">=20.0.0" } }, - "node_modules/@babel/types": { - "version": "7.29.0", - "license": "MIT", + "node_modules/@aws-sdk/client-sns/node_modules/@aws-sdk/credential-provider-http": { + "version": "3.970.0", + "license": "Apache-2.0", "dependencies": { - "@babel/helper-string-parser": "^7.27.1", - "@babel/helper-validator-identifier": "^7.28.5" + "@aws-sdk/core": "3.970.0", + "@aws-sdk/types": "3.969.0", + "@smithy/fetch-http-handler": "^5.3.9", + "@smithy/node-http-handler": "^4.4.8", + "@smithy/property-provider": "^4.2.8", + "@smithy/protocol-http": "^5.3.8", + "@smithy/smithy-client": "^4.10.8", + "@smithy/types": "^4.12.0", + "@smithy/util-stream": "^4.5.10", + "tslib": "^2.6.2" }, "engines": { - "node": ">=6.9.0" + "node": ">=20.0.0" } }, - "node_modules/@balena/dockerignore": { - "version": "1.0.2", - "dev": true, - "license": "Apache-2.0" - }, - "node_modules/@bcoe/v8-coverage": { - "version": "0.2.3", - "dev": true, - "license": "MIT" - }, - "node_modules/@borewit/text-codec": { - "version": "0.2.1", - "dev": true, - "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/Borewit" + "node_modules/@aws-sdk/client-sns/node_modules/@aws-sdk/credential-provider-ini": { + "version": "3.971.0", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/core": "3.970.0", + "@aws-sdk/credential-provider-env": "3.970.0", + "@aws-sdk/credential-provider-http": "3.970.0", + "@aws-sdk/credential-provider-login": "3.971.0", + "@aws-sdk/credential-provider-process": "3.970.0", + "@aws-sdk/credential-provider-sso": "3.971.0", + "@aws-sdk/credential-provider-web-identity": "3.971.0", + "@aws-sdk/nested-clients": "3.971.0", + "@aws-sdk/types": "3.969.0", + "@smithy/credential-provider-imds": "^4.2.8", + "@smithy/property-provider": "^4.2.8", + "@smithy/shared-ini-file-loader": "^4.4.3", + "@smithy/types": "^4.12.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=20.0.0" } }, - "node_modules/@cspotcode/source-map-support": { - "version": "0.8.1", - "dev": true, - "license": "MIT", + "node_modules/@aws-sdk/client-sns/node_modules/@aws-sdk/credential-provider-login": { + "version": "3.971.0", + "license": "Apache-2.0", "dependencies": { - "@jridgewell/trace-mapping": "0.3.9" + "@aws-sdk/core": "3.970.0", + "@aws-sdk/nested-clients": "3.971.0", + "@aws-sdk/types": "3.969.0", + "@smithy/property-provider": "^4.2.8", + "@smithy/protocol-http": "^5.3.8", + "@smithy/shared-ini-file-loader": "^4.4.3", + "@smithy/types": "^4.12.0", + "tslib": "^2.6.2" }, "engines": { - "node": ">=12" + "node": ">=20.0.0" } }, - "node_modules/@cspotcode/source-map-support/node_modules/@jridgewell/trace-mapping": { - "version": "0.3.9", - "dev": true, - "license": "MIT", + "node_modules/@aws-sdk/client-sns/node_modules/@aws-sdk/credential-provider-node": { + "version": "3.971.0", + "license": "Apache-2.0", "dependencies": { - "@jridgewell/resolve-uri": "^3.0.3", - "@jridgewell/sourcemap-codec": "^1.4.10" + "@aws-sdk/credential-provider-env": "3.970.0", + "@aws-sdk/credential-provider-http": "3.970.0", + "@aws-sdk/credential-provider-ini": "3.971.0", + "@aws-sdk/credential-provider-process": "3.970.0", + "@aws-sdk/credential-provider-sso": "3.971.0", + "@aws-sdk/credential-provider-web-identity": "3.971.0", + "@aws-sdk/types": "3.969.0", + "@smithy/credential-provider-imds": "^4.2.8", + "@smithy/property-provider": "^4.2.8", + "@smithy/shared-ini-file-loader": "^4.4.3", + "@smithy/types": "^4.12.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=20.0.0" } }, - "node_modules/@csstools/color-helpers": { - "version": "5.1.0", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], - "license": "MIT-0", + "node_modules/@aws-sdk/client-sns/node_modules/@aws-sdk/credential-provider-process": { + "version": "3.970.0", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/core": "3.970.0", + "@aws-sdk/types": "3.969.0", + "@smithy/property-provider": "^4.2.8", + "@smithy/shared-ini-file-loader": "^4.4.3", + "@smithy/types": "^4.12.0", + "tslib": "^2.6.2" + }, "engines": { - "node": ">=18" + "node": ">=20.0.0" } }, - "node_modules/@csstools/css-calc": { - "version": "2.1.4", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], - "license": "MIT", + "node_modules/@aws-sdk/client-sns/node_modules/@aws-sdk/credential-provider-sso": { + "version": "3.971.0", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/client-sso": "3.971.0", + "@aws-sdk/core": "3.970.0", + "@aws-sdk/token-providers": "3.971.0", + "@aws-sdk/types": "3.969.0", + "@smithy/property-provider": "^4.2.8", + "@smithy/shared-ini-file-loader": "^4.4.3", + "@smithy/types": "^4.12.0", + "tslib": "^2.6.2" + }, "engines": { - "node": ">=18" + "node": ">=20.0.0" + } + }, + "node_modules/@aws-sdk/client-sns/node_modules/@aws-sdk/credential-provider-web-identity": { + "version": "3.971.0", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/core": "3.970.0", + "@aws-sdk/nested-clients": "3.971.0", + "@aws-sdk/types": "3.969.0", + "@smithy/property-provider": "^4.2.8", + "@smithy/shared-ini-file-loader": "^4.4.3", + "@smithy/types": "^4.12.0", + "tslib": "^2.6.2" }, - "peerDependencies": { - "@csstools/css-parser-algorithms": "^3.0.5", - "@csstools/css-tokenizer": "^3.0.4" + "engines": { + "node": ">=20.0.0" } }, - "node_modules/@csstools/css-color-parser": { - "version": "3.1.0", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], - "license": "MIT", + "node_modules/@aws-sdk/client-sns/node_modules/@aws-sdk/middleware-host-header": { + "version": "3.969.0", + "license": "Apache-2.0", "dependencies": { - "@csstools/color-helpers": "^5.1.0", - "@csstools/css-calc": "^2.1.4" + "@aws-sdk/types": "3.969.0", + "@smithy/protocol-http": "^5.3.8", + "@smithy/types": "^4.12.0", + "tslib": "^2.6.2" }, "engines": { - "node": ">=18" + "node": ">=20.0.0" + } + }, + "node_modules/@aws-sdk/client-sns/node_modules/@aws-sdk/middleware-logger": { + "version": "3.969.0", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/types": "3.969.0", + "@smithy/types": "^4.12.0", + "tslib": "^2.6.2" }, - "peerDependencies": { - "@csstools/css-parser-algorithms": "^3.0.5", - "@csstools/css-tokenizer": "^3.0.4" + "engines": { + "node": ">=20.0.0" } }, - "node_modules/@csstools/css-parser-algorithms": { - "version": "3.0.5", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], - "license": "MIT", - "engines": { - "node": ">=18" + "node_modules/@aws-sdk/client-sns/node_modules/@aws-sdk/middleware-recursion-detection": { + "version": "3.969.0", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/types": "3.969.0", + "@aws/lambda-invoke-store": "^0.2.2", + "@smithy/protocol-http": "^5.3.8", + "@smithy/types": "^4.12.0", + "tslib": "^2.6.2" }, - "peerDependencies": { - "@csstools/css-tokenizer": "^3.0.4" - } - }, - "node_modules/@csstools/css-tokenizer": { - "version": "3.0.4", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], - "license": "MIT", "engines": { - "node": ">=18" + "node": ">=20.0.0" } }, - "node_modules/@datastructures-js/heap": { - "version": "4.3.7", - "license": "MIT" - }, - "node_modules/@emotion/is-prop-valid": { - "version": "1.4.0", - "dev": true, - "license": "MIT", + "node_modules/@aws-sdk/client-sns/node_modules/@aws-sdk/middleware-user-agent": { + "version": "3.970.0", + "license": "Apache-2.0", "dependencies": { - "@emotion/memoize": "^0.9.0" + "@aws-sdk/core": "3.970.0", + "@aws-sdk/types": "3.969.0", + "@aws-sdk/util-endpoints": "3.970.0", + "@smithy/core": "^3.20.6", + "@smithy/protocol-http": "^5.3.8", + "@smithy/types": "^4.12.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=20.0.0" } }, - "node_modules/@emotion/memoize": { - "version": "0.9.0", - "dev": true, - "license": "MIT" - }, - "node_modules/@emotion/unitless": { - "version": "0.10.0", - "dev": true, - "license": "MIT" - }, - "node_modules/@esbuild/linux-x64": { - "version": "0.27.3", - "cpu": [ - "x64" - ], - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], + "node_modules/@aws-sdk/client-sns/node_modules/@aws-sdk/nested-clients": { + "version": "3.971.0", + "license": "Apache-2.0", + "dependencies": { + "@aws-crypto/sha256-browser": "5.2.0", + "@aws-crypto/sha256-js": "5.2.0", + "@aws-sdk/core": "3.970.0", + "@aws-sdk/middleware-host-header": "3.969.0", + "@aws-sdk/middleware-logger": "3.969.0", + "@aws-sdk/middleware-recursion-detection": "3.969.0", + "@aws-sdk/middleware-user-agent": "3.970.0", + "@aws-sdk/region-config-resolver": "3.969.0", + "@aws-sdk/types": "3.969.0", + "@aws-sdk/util-endpoints": "3.970.0", + "@aws-sdk/util-user-agent-browser": "3.969.0", + "@aws-sdk/util-user-agent-node": "3.971.0", + "@smithy/config-resolver": "^4.4.6", + "@smithy/core": "^3.20.6", + "@smithy/fetch-http-handler": "^5.3.9", + "@smithy/hash-node": "^4.2.8", + "@smithy/invalid-dependency": "^4.2.8", + "@smithy/middleware-content-length": "^4.2.8", + "@smithy/middleware-endpoint": "^4.4.7", + "@smithy/middleware-retry": "^4.4.23", + "@smithy/middleware-serde": "^4.2.9", + "@smithy/middleware-stack": "^4.2.8", + "@smithy/node-config-provider": "^4.3.8", + "@smithy/node-http-handler": "^4.4.8", + "@smithy/protocol-http": "^5.3.8", + "@smithy/smithy-client": "^4.10.8", + "@smithy/types": "^4.12.0", + "@smithy/url-parser": "^4.2.8", + "@smithy/util-base64": "^4.3.0", + "@smithy/util-body-length-browser": "^4.2.0", + "@smithy/util-body-length-node": "^4.2.1", + "@smithy/util-defaults-mode-browser": "^4.3.22", + "@smithy/util-defaults-mode-node": "^4.2.25", + "@smithy/util-endpoints": "^3.2.8", + "@smithy/util-middleware": "^4.2.8", + "@smithy/util-retry": "^4.2.8", + "@smithy/util-utf8": "^4.2.0", + "tslib": "^2.6.2" + }, "engines": { - "node": ">=18" + "node": ">=20.0.0" } }, - "node_modules/@eslint-community/eslint-utils": { - "version": "4.9.1", - "dev": true, - "license": "MIT", + "node_modules/@aws-sdk/client-sns/node_modules/@aws-sdk/region-config-resolver": { + "version": "3.969.0", + "license": "Apache-2.0", "dependencies": { - "eslint-visitor-keys": "^3.4.3" + "@aws-sdk/types": "3.969.0", + "@smithy/config-resolver": "^4.4.6", + "@smithy/node-config-provider": "^4.3.8", + "@smithy/types": "^4.12.0", + "tslib": "^2.6.2" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - }, - "peerDependencies": { - "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" + "node": ">=20.0.0" } }, - "node_modules/@eslint-community/eslint-utils/node_modules/eslint-visitor-keys": { - "version": "3.4.3", - "dev": true, + "node_modules/@aws-sdk/client-sns/node_modules/@aws-sdk/token-providers": { + "version": "3.971.0", "license": "Apache-2.0", - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "dependencies": { + "@aws-sdk/core": "3.970.0", + "@aws-sdk/nested-clients": "3.971.0", + "@aws-sdk/types": "3.969.0", + "@smithy/property-provider": "^4.2.8", + "@smithy/shared-ini-file-loader": "^4.4.3", + "@smithy/types": "^4.12.0", + "tslib": "^2.6.2" }, - "funding": { - "url": "https://opencollective.com/eslint" + "engines": { + "node": ">=20.0.0" } }, - "node_modules/@eslint-community/regexpp": { - "version": "4.12.2", - "dev": true, - "license": "MIT", + "node_modules/@aws-sdk/client-sns/node_modules/@aws-sdk/types": { + "version": "3.969.0", + "license": "Apache-2.0", + "dependencies": { + "@smithy/types": "^4.12.0", + "tslib": "^2.6.2" + }, "engines": { - "node": "^12.0.0 || ^14.0.0 || >=16.0.0" + "node": ">=20.0.0" } }, - "node_modules/@eslint/config-array": { - "version": "0.21.1", - "dev": true, + "node_modules/@aws-sdk/client-sns/node_modules/@aws-sdk/util-endpoints": { + "version": "3.970.0", "license": "Apache-2.0", "dependencies": { - "@eslint/object-schema": "^2.1.7", - "debug": "^4.3.1", - "minimatch": "^3.1.2" + "@aws-sdk/types": "3.969.0", + "@smithy/types": "^4.12.0", + "@smithy/url-parser": "^4.2.8", + "@smithy/util-endpoints": "^3.2.8", + "tslib": "^2.6.2" }, "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + "node": ">=20.0.0" } }, - "node_modules/@eslint/config-array/node_modules/brace-expansion": { - "version": "1.1.12", - "dev": true, - "license": "MIT", + "node_modules/@aws-sdk/client-sns/node_modules/@aws-sdk/util-user-agent-browser": { + "version": "3.969.0", + "license": "Apache-2.0", "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" + "@aws-sdk/types": "3.969.0", + "@smithy/types": "^4.12.0", + "bowser": "^2.11.0", + "tslib": "^2.6.2" } }, - "node_modules/@eslint/config-array/node_modules/minimatch": { - "version": "3.1.2", - "dev": true, - "license": "ISC", + "node_modules/@aws-sdk/client-sns/node_modules/@aws-sdk/util-user-agent-node": { + "version": "3.971.0", + "license": "Apache-2.0", "dependencies": { - "brace-expansion": "^1.1.7" + "@aws-sdk/middleware-user-agent": "3.970.0", + "@aws-sdk/types": "3.969.0", + "@smithy/node-config-provider": "^4.3.8", + "@smithy/types": "^4.12.0", + "tslib": "^2.6.2" }, "engines": { - "node": "*" + "node": ">=20.0.0" + }, + "peerDependencies": { + "aws-crt": ">=1.0.0" + }, + "peerDependenciesMeta": { + "aws-crt": { + "optional": true + } } }, - "node_modules/@eslint/config-helpers": { - "version": "0.4.2", - "dev": true, + "node_modules/@aws-sdk/client-sns/node_modules/@aws-sdk/xml-builder": { + "version": "3.969.0", "license": "Apache-2.0", "dependencies": { - "@eslint/core": "^0.17.0" + "@smithy/types": "^4.12.0", + "fast-xml-parser": "5.2.5", + "tslib": "^2.6.2" }, "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + "node": ">=20.0.0" } }, - "node_modules/@eslint/core": { - "version": "0.17.0", - "dev": true, + "node_modules/@aws-sdk/client-sqs": { + "version": "3.988.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-sqs/-/client-sqs-3.988.0.tgz", + "integrity": "sha512-Rwh+YhdhhGPFfZ0kLDl1GkLJ0xed0rgQnlGTHiVrwFE51nZm/Is6Car7m1nE4j0Rohom06qNClP3btt0mOf/pg==", "license": "Apache-2.0", "dependencies": { - "@types/json-schema": "^7.0.15" + "@aws-crypto/sha256-browser": "5.2.0", + "@aws-crypto/sha256-js": "5.2.0", + "@aws-sdk/core": "^3.973.8", + "@aws-sdk/credential-provider-node": "^3.972.7", + "@aws-sdk/middleware-host-header": "^3.972.3", + "@aws-sdk/middleware-logger": "^3.972.3", + "@aws-sdk/middleware-recursion-detection": "^3.972.3", + "@aws-sdk/middleware-sdk-sqs": "^3.972.7", + "@aws-sdk/middleware-user-agent": "^3.972.8", + "@aws-sdk/region-config-resolver": "^3.972.3", + "@aws-sdk/types": "^3.973.1", + "@aws-sdk/util-endpoints": "3.988.0", + "@aws-sdk/util-user-agent-browser": "^3.972.3", + "@aws-sdk/util-user-agent-node": "^3.972.6", + "@smithy/config-resolver": "^4.4.6", + "@smithy/core": "^3.23.0", + "@smithy/fetch-http-handler": "^5.3.9", + "@smithy/hash-node": "^4.2.8", + "@smithy/invalid-dependency": "^4.2.8", + "@smithy/md5-js": "^4.2.8", + "@smithy/middleware-content-length": "^4.2.8", + "@smithy/middleware-endpoint": "^4.4.14", + "@smithy/middleware-retry": "^4.4.31", + "@smithy/middleware-serde": "^4.2.9", + "@smithy/middleware-stack": "^4.2.8", + "@smithy/node-config-provider": "^4.3.8", + "@smithy/node-http-handler": "^4.4.10", + "@smithy/protocol-http": "^5.3.8", + "@smithy/smithy-client": "^4.11.3", + "@smithy/types": "^4.12.0", + "@smithy/url-parser": "^4.2.8", + "@smithy/util-base64": "^4.3.0", + "@smithy/util-body-length-browser": "^4.2.0", + "@smithy/util-body-length-node": "^4.2.1", + "@smithy/util-defaults-mode-browser": "^4.3.30", + "@smithy/util-defaults-mode-node": "^4.2.33", + "@smithy/util-endpoints": "^3.2.8", + "@smithy/util-middleware": "^4.2.8", + "@smithy/util-retry": "^4.2.8", + "@smithy/util-utf8": "^4.2.0", + "tslib": "^2.6.2" }, "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + "node": ">=20.0.0" } }, - "node_modules/@eslint/eslintrc": { - "version": "3.3.3", - "dev": true, - "license": "MIT", + "node_modules/@aws-sdk/client-sqs/node_modules/@aws-sdk/core": { + "version": "3.973.8", + "resolved": "https://registry.npmjs.org/@aws-sdk/core/-/core-3.973.8.tgz", + "integrity": "sha512-WeYJ2sfvRLbbUIrjGMUXcEHGu5SJk53jz3K9F8vFP42zWyROzPJ2NB6lMu9vWl5hnMwzwabX7pJc9Euh3JyMGw==", + "license": "Apache-2.0", "dependencies": { - "ajv": "^6.12.4", - "debug": "^4.3.2", - "espree": "^10.0.1", - "globals": "^14.0.0", - "ignore": "^5.2.0", - "import-fresh": "^3.2.1", - "js-yaml": "^4.1.1", - "minimatch": "^3.1.2", - "strip-json-comments": "^3.1.1" + "@aws-sdk/types": "^3.973.1", + "@aws-sdk/xml-builder": "^3.972.4", + "@smithy/core": "^3.23.0", + "@smithy/node-config-provider": "^4.3.8", + "@smithy/property-provider": "^4.2.8", + "@smithy/protocol-http": "^5.3.8", + "@smithy/signature-v4": "^5.3.8", + "@smithy/smithy-client": "^4.11.3", + "@smithy/types": "^4.12.0", + "@smithy/util-base64": "^4.3.0", + "@smithy/util-middleware": "^4.2.8", + "@smithy/util-utf8": "^4.2.0", + "tslib": "^2.6.2" }, "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" + "node": ">=20.0.0" } }, - "node_modules/@eslint/eslintrc/node_modules/ajv": { - "version": "6.12.6", - "dev": true, - "license": "MIT", + "node_modules/@aws-sdk/client-sqs/node_modules/@aws-sdk/util-endpoints": { + "version": "3.988.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-endpoints/-/util-endpoints-3.988.0.tgz", + "integrity": "sha512-HuXu4boeUWU0DQiLslbgdvuQ4ZMCo4Lsk97w8BIUokql2o9MvjE5dwqI5pzGt0K7afO1FybjidUQVTMLuZNTOA==", + "license": "Apache-2.0", "dependencies": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" + "@aws-sdk/types": "^3.973.1", + "@smithy/types": "^4.12.0", + "@smithy/url-parser": "^4.2.8", + "@smithy/util-endpoints": "^3.2.8", + "tslib": "^2.6.2" }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" + "engines": { + "node": ">=20.0.0" } }, - "node_modules/@eslint/eslintrc/node_modules/brace-expansion": { - "version": "1.1.12", - "dev": true, - "license": "MIT", + "node_modules/@aws-sdk/client-sqs/node_modules/@aws-sdk/xml-builder": { + "version": "3.972.4", + "resolved": "https://registry.npmjs.org/@aws-sdk/xml-builder/-/xml-builder-3.972.4.tgz", + "integrity": "sha512-0zJ05ANfYqI6+rGqj8samZBFod0dPPousBjLEqg8WdxSgbMAkRgLyn81lP215Do0rFJ/17LIXwr7q0yK24mP6Q==", + "license": "Apache-2.0", "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/@eslint/eslintrc/node_modules/ignore": { - "version": "5.3.2", - "dev": true, - "license": "MIT", + "@smithy/types": "^4.12.0", + "fast-xml-parser": "5.3.4", + "tslib": "^2.6.2" + }, "engines": { - "node": ">= 4" + "node": ">=20.0.0" } }, - "node_modules/@eslint/eslintrc/node_modules/json-schema-traverse": { - "version": "0.4.1", - "dev": true, - "license": "MIT" - }, - "node_modules/@eslint/eslintrc/node_modules/minimatch": { - "version": "3.1.2", - "dev": true, - "license": "ISC", + "node_modules/@aws-sdk/client-sso": { + "version": "3.988.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-sso/-/client-sso-3.988.0.tgz", + "integrity": "sha512-ThqQ7aF1k0Zz4yJRwegHw+T1rM3a7ZPvvEUSEdvn5Z8zTeWgJAbtqW/6ejPsMLmFOlHgNcwDQN/e69OvtEOoIQ==", + "license": "Apache-2.0", "dependencies": { - "brace-expansion": "^1.1.7" + "@aws-crypto/sha256-browser": "5.2.0", + "@aws-crypto/sha256-js": "5.2.0", + "@aws-sdk/core": "^3.973.8", + "@aws-sdk/middleware-host-header": "^3.972.3", + "@aws-sdk/middleware-logger": "^3.972.3", + "@aws-sdk/middleware-recursion-detection": "^3.972.3", + "@aws-sdk/middleware-user-agent": "^3.972.8", + "@aws-sdk/region-config-resolver": "^3.972.3", + "@aws-sdk/types": "^3.973.1", + "@aws-sdk/util-endpoints": "3.988.0", + "@aws-sdk/util-user-agent-browser": "^3.972.3", + "@aws-sdk/util-user-agent-node": "^3.972.6", + "@smithy/config-resolver": "^4.4.6", + "@smithy/core": "^3.23.0", + "@smithy/fetch-http-handler": "^5.3.9", + "@smithy/hash-node": "^4.2.8", + "@smithy/invalid-dependency": "^4.2.8", + "@smithy/middleware-content-length": "^4.2.8", + "@smithy/middleware-endpoint": "^4.4.14", + "@smithy/middleware-retry": "^4.4.31", + "@smithy/middleware-serde": "^4.2.9", + "@smithy/middleware-stack": "^4.2.8", + "@smithy/node-config-provider": "^4.3.8", + "@smithy/node-http-handler": "^4.4.10", + "@smithy/protocol-http": "^5.3.8", + "@smithy/smithy-client": "^4.11.3", + "@smithy/types": "^4.12.0", + "@smithy/url-parser": "^4.2.8", + "@smithy/util-base64": "^4.3.0", + "@smithy/util-body-length-browser": "^4.2.0", + "@smithy/util-body-length-node": "^4.2.1", + "@smithy/util-defaults-mode-browser": "^4.3.30", + "@smithy/util-defaults-mode-node": "^4.2.33", + "@smithy/util-endpoints": "^3.2.8", + "@smithy/util-middleware": "^4.2.8", + "@smithy/util-retry": "^4.2.8", + "@smithy/util-utf8": "^4.2.0", + "tslib": "^2.6.2" }, "engines": { - "node": "*" + "node": ">=20.0.0" } }, - "node_modules/@eslint/js": { - "version": "9.39.2", - "dev": true, - "license": "MIT", - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + "node_modules/@aws-sdk/client-sso/node_modules/@aws-sdk/core": { + "version": "3.973.8", + "resolved": "https://registry.npmjs.org/@aws-sdk/core/-/core-3.973.8.tgz", + "integrity": "sha512-WeYJ2sfvRLbbUIrjGMUXcEHGu5SJk53jz3K9F8vFP42zWyROzPJ2NB6lMu9vWl5hnMwzwabX7pJc9Euh3JyMGw==", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/types": "^3.973.1", + "@aws-sdk/xml-builder": "^3.972.4", + "@smithy/core": "^3.23.0", + "@smithy/node-config-provider": "^4.3.8", + "@smithy/property-provider": "^4.2.8", + "@smithy/protocol-http": "^5.3.8", + "@smithy/signature-v4": "^5.3.8", + "@smithy/smithy-client": "^4.11.3", + "@smithy/types": "^4.12.0", + "@smithy/util-base64": "^4.3.0", + "@smithy/util-middleware": "^4.2.8", + "@smithy/util-utf8": "^4.2.0", + "tslib": "^2.6.2" }, - "funding": { - "url": "https://eslint.org/donate" + "engines": { + "node": ">=20.0.0" } }, - "node_modules/@eslint/object-schema": { - "version": "2.1.7", - "dev": true, + "node_modules/@aws-sdk/client-sso/node_modules/@aws-sdk/util-endpoints": { + "version": "3.988.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-endpoints/-/util-endpoints-3.988.0.tgz", + "integrity": "sha512-HuXu4boeUWU0DQiLslbgdvuQ4ZMCo4Lsk97w8BIUokql2o9MvjE5dwqI5pzGt0K7afO1FybjidUQVTMLuZNTOA==", "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/types": "^3.973.1", + "@smithy/types": "^4.12.0", + "@smithy/url-parser": "^4.2.8", + "@smithy/util-endpoints": "^3.2.8", + "tslib": "^2.6.2" + }, "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + "node": ">=20.0.0" } }, - "node_modules/@eslint/plugin-kit": { - "version": "0.4.1", - "dev": true, + "node_modules/@aws-sdk/client-sso/node_modules/@aws-sdk/xml-builder": { + "version": "3.972.4", + "resolved": "https://registry.npmjs.org/@aws-sdk/xml-builder/-/xml-builder-3.972.4.tgz", + "integrity": "sha512-0zJ05ANfYqI6+rGqj8samZBFod0dPPousBjLEqg8WdxSgbMAkRgLyn81lP215Do0rFJ/17LIXwr7q0yK24mP6Q==", "license": "Apache-2.0", "dependencies": { - "@eslint/core": "^0.17.0", - "levn": "^0.4.1" + "@smithy/types": "^4.12.0", + "fast-xml-parser": "5.3.4", + "tslib": "^2.6.2" }, "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + "node": ">=20.0.0" } }, - "node_modules/@exodus/schemasafe": { - "version": "1.3.0", - "dev": true, - "license": "MIT" - }, - "node_modules/@grpc/grpc-js": { - "version": "1.14.3", - "dev": true, + "node_modules/@aws-sdk/core": { + "version": "3.973.5", "license": "Apache-2.0", "dependencies": { - "@grpc/proto-loader": "^0.8.0", - "@js-sdsl/ordered-map": "^4.4.2" + "@aws-sdk/types": "^3.973.1", + "@aws-sdk/xml-builder": "^3.972.2", + "@smithy/core": "^3.22.0", + "@smithy/node-config-provider": "^4.3.8", + "@smithy/property-provider": "^4.2.8", + "@smithy/protocol-http": "^5.3.8", + "@smithy/signature-v4": "^5.3.8", + "@smithy/smithy-client": "^4.11.1", + "@smithy/types": "^4.12.0", + "@smithy/util-base64": "^4.3.0", + "@smithy/util-middleware": "^4.2.8", + "@smithy/util-utf8": "^4.2.0", + "tslib": "^2.6.2" }, "engines": { - "node": ">=12.10.0" + "node": ">=20.0.0" } }, - "node_modules/@grpc/grpc-js/node_modules/@grpc/proto-loader": { - "version": "0.8.0", - "dev": true, + "node_modules/@aws-sdk/crc64-nvme": { + "version": "3.969.0", "license": "Apache-2.0", "dependencies": { - "lodash.camelcase": "^4.3.0", - "long": "^5.0.0", - "protobufjs": "^7.5.3", - "yargs": "^17.7.2" - }, - "bin": { - "proto-loader-gen-types": "build/bin/proto-loader-gen-types.js" + "@smithy/types": "^4.12.0", + "tslib": "^2.6.2" }, "engines": { - "node": ">=6" + "node": ">=20.0.0" } }, - "node_modules/@grpc/proto-loader": { - "version": "0.7.15", - "dev": true, + "node_modules/@aws-sdk/credential-provider-env": { + "version": "3.972.6", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-env/-/credential-provider-env-3.972.6.tgz", + "integrity": "sha512-+dYEBWgTqkQQHFUllvBL8SLyXyLKWdxLMD1LmKJRvmb0NMJuaJFG/qg78C+LE67eeGbipYcE+gJ48VlLBGHlMw==", "license": "Apache-2.0", "dependencies": { - "lodash.camelcase": "^4.3.0", - "long": "^5.0.0", - "protobufjs": "^7.2.5", - "yargs": "^17.7.2" - }, - "bin": { - "proto-loader-gen-types": "build/bin/proto-loader-gen-types.js" + "@aws-sdk/core": "^3.973.8", + "@aws-sdk/types": "^3.973.1", + "@smithy/property-provider": "^4.2.8", + "@smithy/types": "^4.12.0", + "tslib": "^2.6.2" }, "engines": { - "node": ">=6" + "node": ">=20.0.0" } }, - "node_modules/@humanfs/core": { - "version": "0.19.1", - "dev": true, + "node_modules/@aws-sdk/credential-provider-env/node_modules/@aws-sdk/core": { + "version": "3.973.8", + "resolved": "https://registry.npmjs.org/@aws-sdk/core/-/core-3.973.8.tgz", + "integrity": "sha512-WeYJ2sfvRLbbUIrjGMUXcEHGu5SJk53jz3K9F8vFP42zWyROzPJ2NB6lMu9vWl5hnMwzwabX7pJc9Euh3JyMGw==", "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/types": "^3.973.1", + "@aws-sdk/xml-builder": "^3.972.4", + "@smithy/core": "^3.23.0", + "@smithy/node-config-provider": "^4.3.8", + "@smithy/property-provider": "^4.2.8", + "@smithy/protocol-http": "^5.3.8", + "@smithy/signature-v4": "^5.3.8", + "@smithy/smithy-client": "^4.11.3", + "@smithy/types": "^4.12.0", + "@smithy/util-base64": "^4.3.0", + "@smithy/util-middleware": "^4.2.8", + "@smithy/util-utf8": "^4.2.0", + "tslib": "^2.6.2" + }, "engines": { - "node": ">=18.18.0" + "node": ">=20.0.0" } }, - "node_modules/@humanfs/node": { - "version": "0.16.7", - "dev": true, + "node_modules/@aws-sdk/credential-provider-env/node_modules/@aws-sdk/xml-builder": { + "version": "3.972.4", + "resolved": "https://registry.npmjs.org/@aws-sdk/xml-builder/-/xml-builder-3.972.4.tgz", + "integrity": "sha512-0zJ05ANfYqI6+rGqj8samZBFod0dPPousBjLEqg8WdxSgbMAkRgLyn81lP215Do0rFJ/17LIXwr7q0yK24mP6Q==", "license": "Apache-2.0", "dependencies": { - "@humanfs/core": "^0.19.1", - "@humanwhocodes/retry": "^0.4.0" + "@smithy/types": "^4.12.0", + "fast-xml-parser": "5.3.4", + "tslib": "^2.6.2" }, "engines": { - "node": ">=18.18.0" + "node": ">=20.0.0" } }, - "node_modules/@humanwhocodes/module-importer": { - "version": "1.0.1", - "dev": true, + "node_modules/@aws-sdk/credential-provider-http": { + "version": "3.972.8", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-http/-/credential-provider-http-3.972.8.tgz", + "integrity": "sha512-z3QkozMV8kOFisN2pgRag/f0zPDrw96mY+ejAM0xssV/+YQ2kklbylRNI/TcTQUDnGg0yPxNjyV6F2EM2zPTwg==", "license": "Apache-2.0", - "engines": { - "node": ">=12.22" + "dependencies": { + "@aws-sdk/core": "^3.973.8", + "@aws-sdk/types": "^3.973.1", + "@smithy/fetch-http-handler": "^5.3.9", + "@smithy/node-http-handler": "^4.4.10", + "@smithy/property-provider": "^4.2.8", + "@smithy/protocol-http": "^5.3.8", + "@smithy/smithy-client": "^4.11.3", + "@smithy/types": "^4.12.0", + "@smithy/util-stream": "^4.5.12", + "tslib": "^2.6.2" }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/nzakas" + "engines": { + "node": ">=20.0.0" } }, - "node_modules/@humanwhocodes/retry": { - "version": "0.4.3", - "dev": true, + "node_modules/@aws-sdk/credential-provider-http/node_modules/@aws-sdk/core": { + "version": "3.973.8", + "resolved": "https://registry.npmjs.org/@aws-sdk/core/-/core-3.973.8.tgz", + "integrity": "sha512-WeYJ2sfvRLbbUIrjGMUXcEHGu5SJk53jz3K9F8vFP42zWyROzPJ2NB6lMu9vWl5hnMwzwabX7pJc9Euh3JyMGw==", "license": "Apache-2.0", - "engines": { - "node": ">=18.18" + "dependencies": { + "@aws-sdk/types": "^3.973.1", + "@aws-sdk/xml-builder": "^3.972.4", + "@smithy/core": "^3.23.0", + "@smithy/node-config-provider": "^4.3.8", + "@smithy/property-provider": "^4.2.8", + "@smithy/protocol-http": "^5.3.8", + "@smithy/signature-v4": "^5.3.8", + "@smithy/smithy-client": "^4.11.3", + "@smithy/types": "^4.12.0", + "@smithy/util-base64": "^4.3.0", + "@smithy/util-middleware": "^4.2.8", + "@smithy/util-utf8": "^4.2.0", + "tslib": "^2.6.2" }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/nzakas" + "engines": { + "node": ">=20.0.0" } }, - "node_modules/@inquirer/external-editor": { - "version": "1.0.3", - "dev": true, - "license": "MIT", + "node_modules/@aws-sdk/credential-provider-http/node_modules/@aws-sdk/xml-builder": { + "version": "3.972.4", + "resolved": "https://registry.npmjs.org/@aws-sdk/xml-builder/-/xml-builder-3.972.4.tgz", + "integrity": "sha512-0zJ05ANfYqI6+rGqj8samZBFod0dPPousBjLEqg8WdxSgbMAkRgLyn81lP215Do0rFJ/17LIXwr7q0yK24mP6Q==", + "license": "Apache-2.0", "dependencies": { - "chardet": "^2.1.1", - "iconv-lite": "^0.7.0" + "@smithy/types": "^4.12.0", + "fast-xml-parser": "5.3.4", + "tslib": "^2.6.2" }, "engines": { - "node": ">=18" - }, - "peerDependencies": { - "@types/node": ">=18" - }, - "peerDependenciesMeta": { - "@types/node": { - "optional": true - } + "node": ">=20.0.0" } }, - "node_modules/@internal/datastore": { - "resolved": "internal/datastore", - "link": true - }, - "node_modules/@internal/helpers": { - "resolved": "internal/helpers", - "link": true - }, - "node_modules/@isaacs/balanced-match": { - "version": "4.0.1", - "dev": true, - "license": "MIT", + "node_modules/@aws-sdk/credential-provider-ini": { + "version": "3.972.6", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.972.6.tgz", + "integrity": "sha512-6tkIYFv3sZH1XsjQq+veOmx8XWRnyqTZ5zx/sMtdu/xFRIzrJM1Y2wAXeCJL1rhYSB7uJSZ1PgALI2WVTj78ow==", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/core": "^3.973.8", + "@aws-sdk/credential-provider-env": "^3.972.6", + "@aws-sdk/credential-provider-http": "^3.972.8", + "@aws-sdk/credential-provider-login": "^3.972.6", + "@aws-sdk/credential-provider-process": "^3.972.6", + "@aws-sdk/credential-provider-sso": "^3.972.6", + "@aws-sdk/credential-provider-web-identity": "^3.972.6", + "@aws-sdk/nested-clients": "3.988.0", + "@aws-sdk/types": "^3.973.1", + "@smithy/credential-provider-imds": "^4.2.8", + "@smithy/property-provider": "^4.2.8", + "@smithy/shared-ini-file-loader": "^4.4.3", + "@smithy/types": "^4.12.0", + "tslib": "^2.6.2" + }, "engines": { - "node": "20 || >=22" + "node": ">=20.0.0" } }, - "node_modules/@isaacs/brace-expansion": { - "version": "5.0.1", - "dev": true, - "license": "MIT", + "node_modules/@aws-sdk/credential-provider-ini/node_modules/@aws-sdk/core": { + "version": "3.973.8", + "resolved": "https://registry.npmjs.org/@aws-sdk/core/-/core-3.973.8.tgz", + "integrity": "sha512-WeYJ2sfvRLbbUIrjGMUXcEHGu5SJk53jz3K9F8vFP42zWyROzPJ2NB6lMu9vWl5hnMwzwabX7pJc9Euh3JyMGw==", + "license": "Apache-2.0", "dependencies": { - "@isaacs/balanced-match": "^4.0.1" + "@aws-sdk/types": "^3.973.1", + "@aws-sdk/xml-builder": "^3.972.4", + "@smithy/core": "^3.23.0", + "@smithy/node-config-provider": "^4.3.8", + "@smithy/property-provider": "^4.2.8", + "@smithy/protocol-http": "^5.3.8", + "@smithy/signature-v4": "^5.3.8", + "@smithy/smithy-client": "^4.11.3", + "@smithy/types": "^4.12.0", + "@smithy/util-base64": "^4.3.0", + "@smithy/util-middleware": "^4.2.8", + "@smithy/util-utf8": "^4.2.0", + "tslib": "^2.6.2" }, "engines": { - "node": "20 || >=22" + "node": ">=20.0.0" } }, - "node_modules/@isaacs/cliui": { - "version": "9.0.0", - "dev": true, - "license": "BlueOak-1.0.0", + "node_modules/@aws-sdk/credential-provider-ini/node_modules/@aws-sdk/xml-builder": { + "version": "3.972.4", + "resolved": "https://registry.npmjs.org/@aws-sdk/xml-builder/-/xml-builder-3.972.4.tgz", + "integrity": "sha512-0zJ05ANfYqI6+rGqj8samZBFod0dPPousBjLEqg8WdxSgbMAkRgLyn81lP215Do0rFJ/17LIXwr7q0yK24mP6Q==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/types": "^4.12.0", + "fast-xml-parser": "5.3.4", + "tslib": "^2.6.2" + }, "engines": { - "node": ">=18" + "node": ">=20.0.0" } }, - "node_modules/@istanbuljs/load-nyc-config": { - "version": "1.1.0", - "license": "ISC", + "node_modules/@aws-sdk/credential-provider-login": { + "version": "3.972.6", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-login/-/credential-provider-login-3.972.6.tgz", + "integrity": "sha512-LXsoBoaTSGHdRCQXlWSA0CHHh05KWncb592h9ElklnPus++8kYn1Ic6acBR4LKFQ0RjjMVgwe5ypUpmTSUOjPA==", + "license": "Apache-2.0", "dependencies": { - "camelcase": "^5.3.1", - "find-up": "^4.1.0", - "get-package-type": "^0.1.0", - "js-yaml": "^3.13.1", - "resolve-from": "^5.0.0" + "@aws-sdk/core": "^3.973.8", + "@aws-sdk/nested-clients": "3.988.0", + "@aws-sdk/types": "^3.973.1", + "@smithy/property-provider": "^4.2.8", + "@smithy/protocol-http": "^5.3.8", + "@smithy/shared-ini-file-loader": "^4.4.3", + "@smithy/types": "^4.12.0", + "tslib": "^2.6.2" }, "engines": { - "node": ">=8" + "node": ">=20.0.0" } }, - "node_modules/@istanbuljs/load-nyc-config/node_modules/argparse": { - "version": "1.0.10", - "license": "MIT", + "node_modules/@aws-sdk/credential-provider-login/node_modules/@aws-sdk/core": { + "version": "3.973.8", + "resolved": "https://registry.npmjs.org/@aws-sdk/core/-/core-3.973.8.tgz", + "integrity": "sha512-WeYJ2sfvRLbbUIrjGMUXcEHGu5SJk53jz3K9F8vFP42zWyROzPJ2NB6lMu9vWl5hnMwzwabX7pJc9Euh3JyMGw==", + "license": "Apache-2.0", "dependencies": { - "sprintf-js": "~1.0.2" + "@aws-sdk/types": "^3.973.1", + "@aws-sdk/xml-builder": "^3.972.4", + "@smithy/core": "^3.23.0", + "@smithy/node-config-provider": "^4.3.8", + "@smithy/property-provider": "^4.2.8", + "@smithy/protocol-http": "^5.3.8", + "@smithy/signature-v4": "^5.3.8", + "@smithy/smithy-client": "^4.11.3", + "@smithy/types": "^4.12.0", + "@smithy/util-base64": "^4.3.0", + "@smithy/util-middleware": "^4.2.8", + "@smithy/util-utf8": "^4.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=20.0.0" } }, - "node_modules/@istanbuljs/load-nyc-config/node_modules/find-up": { - "version": "4.1.0", - "license": "MIT", + "node_modules/@aws-sdk/credential-provider-login/node_modules/@aws-sdk/xml-builder": { + "version": "3.972.4", + "resolved": "https://registry.npmjs.org/@aws-sdk/xml-builder/-/xml-builder-3.972.4.tgz", + "integrity": "sha512-0zJ05ANfYqI6+rGqj8samZBFod0dPPousBjLEqg8WdxSgbMAkRgLyn81lP215Do0rFJ/17LIXwr7q0yK24mP6Q==", + "license": "Apache-2.0", "dependencies": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" + "@smithy/types": "^4.12.0", + "fast-xml-parser": "5.3.4", + "tslib": "^2.6.2" }, "engines": { - "node": ">=8" + "node": ">=20.0.0" } }, - "node_modules/@istanbuljs/load-nyc-config/node_modules/js-yaml": { - "version": "3.14.2", - "license": "MIT", + "node_modules/@aws-sdk/credential-provider-node": { + "version": "3.972.7", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-node/-/credential-provider-node-3.972.7.tgz", + "integrity": "sha512-PuJ1IkISG7ZDpBFYpGotaay6dYtmriBYuHJ/Oko4VHxh8YN5vfoWnMNYFEWuzOfyLmP7o9kDVW0BlYIpb3skvw==", + "license": "Apache-2.0", "dependencies": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" + "@aws-sdk/credential-provider-env": "^3.972.6", + "@aws-sdk/credential-provider-http": "^3.972.8", + "@aws-sdk/credential-provider-ini": "^3.972.6", + "@aws-sdk/credential-provider-process": "^3.972.6", + "@aws-sdk/credential-provider-sso": "^3.972.6", + "@aws-sdk/credential-provider-web-identity": "^3.972.6", + "@aws-sdk/types": "^3.973.1", + "@smithy/credential-provider-imds": "^4.2.8", + "@smithy/property-provider": "^4.2.8", + "@smithy/shared-ini-file-loader": "^4.4.3", + "@smithy/types": "^4.12.0", + "tslib": "^2.6.2" }, - "bin": { - "js-yaml": "bin/js-yaml.js" + "engines": { + "node": ">=20.0.0" } }, - "node_modules/@istanbuljs/load-nyc-config/node_modules/locate-path": { - "version": "5.0.0", - "license": "MIT", + "node_modules/@aws-sdk/credential-provider-process": { + "version": "3.972.6", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-process/-/credential-provider-process-3.972.6.tgz", + "integrity": "sha512-Yf34cjIZJHVnD92jnVYy3tNjM+Q4WJtffLK2Ehn0nKpZfqd1m7SI0ra22Lym4C53ED76oZENVSS2wimoXJtChQ==", + "license": "Apache-2.0", "dependencies": { - "p-locate": "^4.1.0" + "@aws-sdk/core": "^3.973.8", + "@aws-sdk/types": "^3.973.1", + "@smithy/property-provider": "^4.2.8", + "@smithy/shared-ini-file-loader": "^4.4.3", + "@smithy/types": "^4.12.0", + "tslib": "^2.6.2" }, "engines": { - "node": ">=8" + "node": ">=20.0.0" } }, - "node_modules/@istanbuljs/load-nyc-config/node_modules/p-limit": { - "version": "2.3.0", - "license": "MIT", + "node_modules/@aws-sdk/credential-provider-process/node_modules/@aws-sdk/core": { + "version": "3.973.8", + "resolved": "https://registry.npmjs.org/@aws-sdk/core/-/core-3.973.8.tgz", + "integrity": "sha512-WeYJ2sfvRLbbUIrjGMUXcEHGu5SJk53jz3K9F8vFP42zWyROzPJ2NB6lMu9vWl5hnMwzwabX7pJc9Euh3JyMGw==", + "license": "Apache-2.0", "dependencies": { - "p-try": "^2.0.0" + "@aws-sdk/types": "^3.973.1", + "@aws-sdk/xml-builder": "^3.972.4", + "@smithy/core": "^3.23.0", + "@smithy/node-config-provider": "^4.3.8", + "@smithy/property-provider": "^4.2.8", + "@smithy/protocol-http": "^5.3.8", + "@smithy/signature-v4": "^5.3.8", + "@smithy/smithy-client": "^4.11.3", + "@smithy/types": "^4.12.0", + "@smithy/util-base64": "^4.3.0", + "@smithy/util-middleware": "^4.2.8", + "@smithy/util-utf8": "^4.2.0", + "tslib": "^2.6.2" }, "engines": { - "node": ">=6" + "node": ">=20.0.0" + } + }, + "node_modules/@aws-sdk/credential-provider-process/node_modules/@aws-sdk/xml-builder": { + "version": "3.972.4", + "resolved": "https://registry.npmjs.org/@aws-sdk/xml-builder/-/xml-builder-3.972.4.tgz", + "integrity": "sha512-0zJ05ANfYqI6+rGqj8samZBFod0dPPousBjLEqg8WdxSgbMAkRgLyn81lP215Do0rFJ/17LIXwr7q0yK24mP6Q==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/types": "^4.12.0", + "fast-xml-parser": "5.3.4", + "tslib": "^2.6.2" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "engines": { + "node": ">=20.0.0" } }, - "node_modules/@istanbuljs/load-nyc-config/node_modules/p-locate": { - "version": "4.1.0", - "license": "MIT", + "node_modules/@aws-sdk/credential-provider-sso": { + "version": "3.972.6", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.972.6.tgz", + "integrity": "sha512-2+5UVwUYdD4BBOkLpKJ11MQ8wQeyJGDVMDRH5eWOULAh9d6HJq07R69M/mNNMC9NTjr3mB1T0KGDn4qyQh5jzg==", + "license": "Apache-2.0", "dependencies": { - "p-limit": "^2.2.0" + "@aws-sdk/client-sso": "3.988.0", + "@aws-sdk/core": "^3.973.8", + "@aws-sdk/token-providers": "3.988.0", + "@aws-sdk/types": "^3.973.1", + "@smithy/property-provider": "^4.2.8", + "@smithy/shared-ini-file-loader": "^4.4.3", + "@smithy/types": "^4.12.0", + "tslib": "^2.6.2" }, "engines": { - "node": ">=8" + "node": ">=20.0.0" } }, - "node_modules/@istanbuljs/load-nyc-config/node_modules/resolve-from": { - "version": "5.0.0", - "license": "MIT", + "node_modules/@aws-sdk/credential-provider-sso/node_modules/@aws-sdk/core": { + "version": "3.973.8", + "resolved": "https://registry.npmjs.org/@aws-sdk/core/-/core-3.973.8.tgz", + "integrity": "sha512-WeYJ2sfvRLbbUIrjGMUXcEHGu5SJk53jz3K9F8vFP42zWyROzPJ2NB6lMu9vWl5hnMwzwabX7pJc9Euh3JyMGw==", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/types": "^3.973.1", + "@aws-sdk/xml-builder": "^3.972.4", + "@smithy/core": "^3.23.0", + "@smithy/node-config-provider": "^4.3.8", + "@smithy/property-provider": "^4.2.8", + "@smithy/protocol-http": "^5.3.8", + "@smithy/signature-v4": "^5.3.8", + "@smithy/smithy-client": "^4.11.3", + "@smithy/types": "^4.12.0", + "@smithy/util-base64": "^4.3.0", + "@smithy/util-middleware": "^4.2.8", + "@smithy/util-utf8": "^4.2.0", + "tslib": "^2.6.2" + }, "engines": { - "node": ">=8" + "node": ">=20.0.0" } }, - "node_modules/@istanbuljs/schema": { - "version": "0.1.3", - "license": "MIT", + "node_modules/@aws-sdk/credential-provider-sso/node_modules/@aws-sdk/xml-builder": { + "version": "3.972.4", + "resolved": "https://registry.npmjs.org/@aws-sdk/xml-builder/-/xml-builder-3.972.4.tgz", + "integrity": "sha512-0zJ05ANfYqI6+rGqj8samZBFod0dPPousBjLEqg8WdxSgbMAkRgLyn81lP215Do0rFJ/17LIXwr7q0yK24mP6Q==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/types": "^4.12.0", + "fast-xml-parser": "5.3.4", + "tslib": "^2.6.2" + }, "engines": { - "node": ">=8" + "node": ">=20.0.0" } }, - "node_modules/@jest/console": { - "version": "30.2.0", - "dev": true, - "license": "MIT", + "node_modules/@aws-sdk/credential-provider-web-identity": { + "version": "3.972.6", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.972.6.tgz", + "integrity": "sha512-pdJzwKtlDxBnvZ04pWMqttijmkUIlwOsS0GcxCjzEVyUMpARysl0S0ks74+gs2Pdev3Ujz+BTAjOc1tQgAxGqA==", + "license": "Apache-2.0", "dependencies": { - "@jest/types": "30.2.0", - "@types/node": "*", - "chalk": "^4.1.2", - "jest-message-util": "30.2.0", - "jest-util": "30.2.0", - "slash": "^3.0.0" + "@aws-sdk/core": "^3.973.8", + "@aws-sdk/nested-clients": "3.988.0", + "@aws-sdk/types": "^3.973.1", + "@smithy/property-provider": "^4.2.8", + "@smithy/shared-ini-file-loader": "^4.4.3", + "@smithy/types": "^4.12.0", + "tslib": "^2.6.2" }, "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + "node": ">=20.0.0" } }, - "node_modules/@jest/core": { - "version": "30.2.0", - "dev": true, - "license": "MIT", + "node_modules/@aws-sdk/credential-provider-web-identity/node_modules/@aws-sdk/core": { + "version": "3.973.8", + "resolved": "https://registry.npmjs.org/@aws-sdk/core/-/core-3.973.8.tgz", + "integrity": "sha512-WeYJ2sfvRLbbUIrjGMUXcEHGu5SJk53jz3K9F8vFP42zWyROzPJ2NB6lMu9vWl5hnMwzwabX7pJc9Euh3JyMGw==", + "license": "Apache-2.0", "dependencies": { - "@jest/console": "30.2.0", - "@jest/pattern": "30.0.1", - "@jest/reporters": "30.2.0", - "@jest/test-result": "30.2.0", - "@jest/transform": "30.2.0", - "@jest/types": "30.2.0", - "@types/node": "*", - "ansi-escapes": "^4.3.2", - "chalk": "^4.1.2", - "ci-info": "^4.2.0", - "exit-x": "^0.2.2", - "graceful-fs": "^4.2.11", - "jest-changed-files": "30.2.0", - "jest-config": "30.2.0", - "jest-haste-map": "30.2.0", - "jest-message-util": "30.2.0", - "jest-regex-util": "30.0.1", - "jest-resolve": "30.2.0", - "jest-resolve-dependencies": "30.2.0", - "jest-runner": "30.2.0", - "jest-runtime": "30.2.0", - "jest-snapshot": "30.2.0", - "jest-util": "30.2.0", - "jest-validate": "30.2.0", - "jest-watcher": "30.2.0", - "micromatch": "^4.0.8", - "pretty-format": "30.2.0", - "slash": "^3.0.0" + "@aws-sdk/types": "^3.973.1", + "@aws-sdk/xml-builder": "^3.972.4", + "@smithy/core": "^3.23.0", + "@smithy/node-config-provider": "^4.3.8", + "@smithy/property-provider": "^4.2.8", + "@smithy/protocol-http": "^5.3.8", + "@smithy/signature-v4": "^5.3.8", + "@smithy/smithy-client": "^4.11.3", + "@smithy/types": "^4.12.0", + "@smithy/util-base64": "^4.3.0", + "@smithy/util-middleware": "^4.2.8", + "@smithy/util-utf8": "^4.2.0", + "tslib": "^2.6.2" }, "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" - }, - "peerDependencies": { - "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" - }, - "peerDependenciesMeta": { - "node-notifier": { - "optional": true - } + "node": ">=20.0.0" } }, - "node_modules/@jest/diff-sequences": { - "version": "30.0.1", - "license": "MIT", + "node_modules/@aws-sdk/credential-provider-web-identity/node_modules/@aws-sdk/xml-builder": { + "version": "3.972.4", + "resolved": "https://registry.npmjs.org/@aws-sdk/xml-builder/-/xml-builder-3.972.4.tgz", + "integrity": "sha512-0zJ05ANfYqI6+rGqj8samZBFod0dPPousBjLEqg8WdxSgbMAkRgLyn81lP215Do0rFJ/17LIXwr7q0yK24mP6Q==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/types": "^4.12.0", + "fast-xml-parser": "5.3.4", + "tslib": "^2.6.2" + }, "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + "node": ">=20.0.0" } }, - "node_modules/@jest/environment": { - "version": "30.2.0", - "license": "MIT", + "node_modules/@aws-sdk/dynamodb-codec": { + "version": "3.972.8", + "license": "Apache-2.0", "dependencies": { - "@jest/fake-timers": "30.2.0", - "@jest/types": "30.2.0", - "@types/node": "*", - "jest-mock": "30.2.0" + "@aws-sdk/core": "^3.973.7", + "@smithy/core": "^3.22.1", + "@smithy/smithy-client": "^4.11.2", + "@smithy/types": "^4.12.0", + "@smithy/util-base64": "^4.3.0", + "tslib": "^2.6.2" }, "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + "node": ">=20.0.0" } }, - "node_modules/@jest/environment-jsdom-abstract": { - "version": "30.2.0", - "dev": true, - "license": "MIT", + "node_modules/@aws-sdk/dynamodb-codec/node_modules/@aws-sdk/core": { + "version": "3.973.7", + "license": "Apache-2.0", "dependencies": { - "@jest/environment": "30.2.0", - "@jest/fake-timers": "30.2.0", - "@jest/types": "30.2.0", - "@types/jsdom": "^21.1.7", - "@types/node": "*", - "jest-mock": "30.2.0", - "jest-util": "30.2.0" + "@aws-sdk/types": "^3.973.1", + "@aws-sdk/xml-builder": "^3.972.4", + "@smithy/core": "^3.22.1", + "@smithy/node-config-provider": "^4.3.8", + "@smithy/property-provider": "^4.2.8", + "@smithy/protocol-http": "^5.3.8", + "@smithy/signature-v4": "^5.3.8", + "@smithy/smithy-client": "^4.11.2", + "@smithy/types": "^4.12.0", + "@smithy/util-base64": "^4.3.0", + "@smithy/util-middleware": "^4.2.8", + "@smithy/util-utf8": "^4.2.0", + "tslib": "^2.6.2" }, "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" - }, - "peerDependencies": { - "canvas": "^3.0.0", - "jsdom": "*" - }, - "peerDependenciesMeta": { - "canvas": { - "optional": true - } + "node": ">=20.0.0" } }, - "node_modules/@jest/expect": { - "version": "30.2.0", - "license": "MIT", + "node_modules/@aws-sdk/dynamodb-codec/node_modules/@aws-sdk/xml-builder": { + "version": "3.972.4", + "license": "Apache-2.0", "dependencies": { - "expect": "30.2.0", - "jest-snapshot": "30.2.0" + "@smithy/types": "^4.12.0", + "fast-xml-parser": "5.3.4", + "tslib": "^2.6.2" }, "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + "node": ">=20.0.0" } }, - "node_modules/@jest/expect-utils": { - "version": "30.2.0", - "license": "MIT", + "node_modules/@aws-sdk/endpoint-cache": { + "version": "3.972.2", + "license": "Apache-2.0", "dependencies": { - "@jest/get-type": "30.1.0" + "mnemonist": "0.38.3", + "tslib": "^2.6.2" }, "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + "node": ">=20.0.0" } }, - "node_modules/@jest/fake-timers": { - "version": "30.2.0", - "license": "MIT", + "node_modules/@aws-sdk/lib-dynamodb": { + "version": "3.981.0", + "license": "Apache-2.0", "dependencies": { - "@jest/types": "30.2.0", - "@sinonjs/fake-timers": "^13.0.0", - "@types/node": "*", - "jest-message-util": "30.2.0", - "jest-mock": "30.2.0", - "jest-util": "30.2.0" + "@aws-sdk/core": "^3.973.5", + "@aws-sdk/util-dynamodb": "3.981.0", + "@smithy/core": "^3.22.0", + "@smithy/smithy-client": "^4.11.1", + "@smithy/types": "^4.12.0", + "tslib": "^2.6.2" }, "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + "node": ">=20.0.0" + }, + "peerDependencies": { + "@aws-sdk/client-dynamodb": "3.981.0" } }, - "node_modules/@jest/get-type": { - "version": "30.1.0", - "license": "MIT", + "node_modules/@aws-sdk/middleware-bucket-endpoint": { + "version": "3.969.0", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/types": "3.969.0", + "@aws-sdk/util-arn-parser": "3.968.0", + "@smithy/node-config-provider": "^4.3.8", + "@smithy/protocol-http": "^5.3.8", + "@smithy/types": "^4.12.0", + "@smithy/util-config-provider": "^4.2.0", + "tslib": "^2.6.2" + }, "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + "node": ">=20.0.0" } }, - "node_modules/@jest/globals": { - "version": "30.2.0", - "license": "MIT", + "node_modules/@aws-sdk/middleware-bucket-endpoint/node_modules/@aws-sdk/types": { + "version": "3.969.0", + "license": "Apache-2.0", "dependencies": { - "@jest/environment": "30.2.0", - "@jest/expect": "30.2.0", - "@jest/types": "30.2.0", - "jest-mock": "30.2.0" + "@smithy/types": "^4.12.0", + "tslib": "^2.6.2" }, "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + "node": ">=20.0.0" } }, - "node_modules/@jest/pattern": { - "version": "30.0.1", - "license": "MIT", + "node_modules/@aws-sdk/middleware-endpoint-discovery": { + "version": "3.972.3", + "license": "Apache-2.0", "dependencies": { - "@types/node": "*", - "jest-regex-util": "30.0.1" + "@aws-sdk/endpoint-cache": "^3.972.2", + "@aws-sdk/types": "^3.973.1", + "@smithy/node-config-provider": "^4.3.8", + "@smithy/protocol-http": "^5.3.8", + "@smithy/types": "^4.12.0", + "tslib": "^2.6.2" }, "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + "node": ">=20.0.0" } }, - "node_modules/@jest/reporters": { - "version": "30.2.0", - "dev": true, - "license": "MIT", + "node_modules/@aws-sdk/middleware-expect-continue": { + "version": "3.969.0", + "license": "Apache-2.0", "dependencies": { - "@bcoe/v8-coverage": "^0.2.3", - "@jest/console": "30.2.0", - "@jest/test-result": "30.2.0", - "@jest/transform": "30.2.0", - "@jest/types": "30.2.0", - "@jridgewell/trace-mapping": "^0.3.25", - "@types/node": "*", - "chalk": "^4.1.2", - "collect-v8-coverage": "^1.0.2", - "exit-x": "^0.2.2", - "glob": "^10.3.10", - "graceful-fs": "^4.2.11", - "istanbul-lib-coverage": "^3.0.0", - "istanbul-lib-instrument": "^6.0.0", - "istanbul-lib-report": "^3.0.0", - "istanbul-lib-source-maps": "^5.0.0", - "istanbul-reports": "^3.1.3", - "jest-message-util": "30.2.0", - "jest-util": "30.2.0", - "jest-worker": "30.2.0", - "slash": "^3.0.0", - "string-length": "^4.0.2", - "v8-to-istanbul": "^9.0.1" + "@aws-sdk/types": "3.969.0", + "@smithy/protocol-http": "^5.3.8", + "@smithy/types": "^4.12.0", + "tslib": "^2.6.2" }, "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" - }, - "peerDependencies": { - "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" - }, - "peerDependenciesMeta": { - "node-notifier": { - "optional": true - } + "node": ">=20.0.0" } }, - "node_modules/@jest/reporters/node_modules/@isaacs/cliui": { - "version": "8.0.2", - "dev": true, - "license": "ISC", + "node_modules/@aws-sdk/middleware-expect-continue/node_modules/@aws-sdk/types": { + "version": "3.969.0", + "license": "Apache-2.0", "dependencies": { - "string-width": "^5.1.2", - "string-width-cjs": "npm:string-width@^4.2.0", - "strip-ansi": "^7.0.1", - "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", - "wrap-ansi": "^8.1.0", - "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" + "@smithy/types": "^4.12.0", + "tslib": "^2.6.2" }, "engines": { - "node": ">=12" + "node": ">=20.0.0" } }, - "node_modules/@jest/reporters/node_modules/ansi-regex": { - "version": "6.2.2", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12" + "node_modules/@aws-sdk/middleware-flexible-checksums": { + "version": "3.971.0", + "license": "Apache-2.0", + "dependencies": { + "@aws-crypto/crc32": "5.2.0", + "@aws-crypto/crc32c": "5.2.0", + "@aws-crypto/util": "5.2.0", + "@aws-sdk/core": "3.970.0", + "@aws-sdk/crc64-nvme": "3.969.0", + "@aws-sdk/types": "3.969.0", + "@smithy/is-array-buffer": "^4.2.0", + "@smithy/node-config-provider": "^4.3.8", + "@smithy/protocol-http": "^5.3.8", + "@smithy/types": "^4.12.0", + "@smithy/util-middleware": "^4.2.8", + "@smithy/util-stream": "^4.5.10", + "@smithy/util-utf8": "^4.2.0", + "tslib": "^2.6.2" }, - "funding": { - "url": "https://github.com/chalk/ansi-regex?sponsor=1" + "engines": { + "node": ">=20.0.0" } }, - "node_modules/@jest/reporters/node_modules/ansi-styles": { - "version": "6.2.3", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12" + "node_modules/@aws-sdk/middleware-flexible-checksums/node_modules/@aws-sdk/core": { + "version": "3.970.0", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/types": "3.969.0", + "@aws-sdk/xml-builder": "3.969.0", + "@smithy/core": "^3.20.6", + "@smithy/node-config-provider": "^4.3.8", + "@smithy/property-provider": "^4.2.8", + "@smithy/protocol-http": "^5.3.8", + "@smithy/signature-v4": "^5.3.8", + "@smithy/smithy-client": "^4.10.8", + "@smithy/types": "^4.12.0", + "@smithy/util-base64": "^4.3.0", + "@smithy/util-middleware": "^4.2.8", + "@smithy/util-utf8": "^4.2.0", + "tslib": "^2.6.2" }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "engines": { + "node": ">=20.0.0" } }, - "node_modules/@jest/reporters/node_modules/glob": { - "version": "10.5.0", - "dev": true, - "license": "ISC", + "node_modules/@aws-sdk/middleware-flexible-checksums/node_modules/@aws-sdk/types": { + "version": "3.969.0", + "license": "Apache-2.0", "dependencies": { - "foreground-child": "^3.1.0", - "jackspeak": "^3.1.2", - "minimatch": "^9.0.4", - "minipass": "^7.1.2", - "package-json-from-dist": "^1.0.0", - "path-scurry": "^1.11.1" - }, - "bin": { - "glob": "dist/esm/bin.mjs" + "@smithy/types": "^4.12.0", + "tslib": "^2.6.2" }, - "funding": { - "url": "https://github.com/sponsors/isaacs" + "engines": { + "node": ">=20.0.0" } }, - "node_modules/@jest/reporters/node_modules/jackspeak": { - "version": "3.4.3", - "dev": true, - "license": "BlueOak-1.0.0", + "node_modules/@aws-sdk/middleware-flexible-checksums/node_modules/@aws-sdk/xml-builder": { + "version": "3.969.0", + "license": "Apache-2.0", "dependencies": { - "@isaacs/cliui": "^8.0.2" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" + "@smithy/types": "^4.12.0", + "fast-xml-parser": "5.2.5", + "tslib": "^2.6.2" }, - "optionalDependencies": { - "@pkgjs/parseargs": "^0.11.0" + "engines": { + "node": ">=20.0.0" } }, - "node_modules/@jest/reporters/node_modules/lru-cache": { - "version": "10.4.3", - "dev": true, - "license": "ISC" - }, - "node_modules/@jest/reporters/node_modules/minimatch": { - "version": "9.0.5", - "dev": true, - "license": "ISC", + "node_modules/@aws-sdk/middleware-host-header": { + "version": "3.972.3", + "license": "Apache-2.0", "dependencies": { - "brace-expansion": "^2.0.1" + "@aws-sdk/types": "^3.973.1", + "@smithy/protocol-http": "^5.3.8", + "@smithy/types": "^4.12.0", + "tslib": "^2.6.2" }, "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" + "node": ">=20.0.0" } }, - "node_modules/@jest/reporters/node_modules/path-scurry": { - "version": "1.11.1", - "dev": true, - "license": "BlueOak-1.0.0", + "node_modules/@aws-sdk/middleware-location-constraint": { + "version": "3.969.0", + "license": "Apache-2.0", "dependencies": { - "lru-cache": "^10.2.0", - "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" + "@aws-sdk/types": "3.969.0", + "@smithy/types": "^4.12.0", + "tslib": "^2.6.2" }, "engines": { - "node": ">=16 || 14 >=14.18" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" + "node": ">=20.0.0" } }, - "node_modules/@jest/reporters/node_modules/string-width": { - "version": "5.1.2", - "dev": true, - "license": "MIT", + "node_modules/@aws-sdk/middleware-location-constraint/node_modules/@aws-sdk/types": { + "version": "3.969.0", + "license": "Apache-2.0", "dependencies": { - "eastasianwidth": "^0.2.0", - "emoji-regex": "^9.2.2", - "strip-ansi": "^7.0.1" + "@smithy/types": "^4.12.0", + "tslib": "^2.6.2" }, "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=20.0.0" } }, - "node_modules/@jest/reporters/node_modules/strip-ansi": { - "version": "7.1.2", - "dev": true, - "license": "MIT", + "node_modules/@aws-sdk/middleware-logger": { + "version": "3.972.3", + "license": "Apache-2.0", "dependencies": { - "ansi-regex": "^6.0.1" + "@aws-sdk/types": "^3.973.1", + "@smithy/types": "^4.12.0", + "tslib": "^2.6.2" }, "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/strip-ansi?sponsor=1" + "node": ">=20.0.0" } }, - "node_modules/@jest/reporters/node_modules/wrap-ansi": { - "version": "8.1.0", - "dev": true, - "license": "MIT", + "node_modules/@aws-sdk/middleware-recursion-detection": { + "version": "3.972.3", + "license": "Apache-2.0", "dependencies": { - "ansi-styles": "^6.1.0", - "string-width": "^5.0.1", - "strip-ansi": "^7.0.1" + "@aws-sdk/types": "^3.973.1", + "@aws/lambda-invoke-store": "^0.2.2", + "@smithy/protocol-http": "^5.3.8", + "@smithy/types": "^4.12.0", + "tslib": "^2.6.2" }, "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + "node": ">=20.0.0" } }, - "node_modules/@jest/schemas": { - "version": "30.0.5", - "license": "MIT", + "node_modules/@aws-sdk/middleware-sdk-api-gateway": { + "version": "3.969.0", + "license": "Apache-2.0", "dependencies": { - "@sinclair/typebox": "^0.34.0" + "@aws-sdk/types": "3.969.0", + "@smithy/protocol-http": "^5.3.8", + "@smithy/types": "^4.12.0", + "tslib": "^2.6.2" }, "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + "node": ">=20.0.0" } }, - "node_modules/@jest/snapshot-utils": { - "version": "30.2.0", - "license": "MIT", + "node_modules/@aws-sdk/middleware-sdk-api-gateway/node_modules/@aws-sdk/types": { + "version": "3.969.0", + "license": "Apache-2.0", "dependencies": { - "@jest/types": "30.2.0", - "chalk": "^4.1.2", - "graceful-fs": "^4.2.11", - "natural-compare": "^1.4.0" + "@smithy/types": "^4.12.0", + "tslib": "^2.6.2" }, "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + "node": ">=20.0.0" } }, - "node_modules/@jest/source-map": { - "version": "30.0.1", - "dev": true, - "license": "MIT", + "node_modules/@aws-sdk/middleware-sdk-s3": { + "version": "3.970.0", + "license": "Apache-2.0", "dependencies": { - "@jridgewell/trace-mapping": "^0.3.25", - "callsites": "^3.1.0", - "graceful-fs": "^4.2.11" + "@aws-sdk/core": "3.970.0", + "@aws-sdk/types": "3.969.0", + "@aws-sdk/util-arn-parser": "3.968.0", + "@smithy/core": "^3.20.6", + "@smithy/node-config-provider": "^4.3.8", + "@smithy/protocol-http": "^5.3.8", + "@smithy/signature-v4": "^5.3.8", + "@smithy/smithy-client": "^4.10.8", + "@smithy/types": "^4.12.0", + "@smithy/util-config-provider": "^4.2.0", + "@smithy/util-middleware": "^4.2.8", + "@smithy/util-stream": "^4.5.10", + "@smithy/util-utf8": "^4.2.0", + "tslib": "^2.6.2" }, "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + "node": ">=20.0.0" } }, - "node_modules/@jest/test-result": { - "version": "30.2.0", - "dev": true, - "license": "MIT", + "node_modules/@aws-sdk/middleware-sdk-s3/node_modules/@aws-sdk/core": { + "version": "3.970.0", + "license": "Apache-2.0", "dependencies": { - "@jest/console": "30.2.0", - "@jest/types": "30.2.0", - "@types/istanbul-lib-coverage": "^2.0.6", - "collect-v8-coverage": "^1.0.2" + "@aws-sdk/types": "3.969.0", + "@aws-sdk/xml-builder": "3.969.0", + "@smithy/core": "^3.20.6", + "@smithy/node-config-provider": "^4.3.8", + "@smithy/property-provider": "^4.2.8", + "@smithy/protocol-http": "^5.3.8", + "@smithy/signature-v4": "^5.3.8", + "@smithy/smithy-client": "^4.10.8", + "@smithy/types": "^4.12.0", + "@smithy/util-base64": "^4.3.0", + "@smithy/util-middleware": "^4.2.8", + "@smithy/util-utf8": "^4.2.0", + "tslib": "^2.6.2" }, "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + "node": ">=20.0.0" } }, - "node_modules/@jest/test-sequencer": { - "version": "30.2.0", - "dev": true, - "license": "MIT", + "node_modules/@aws-sdk/middleware-sdk-s3/node_modules/@aws-sdk/types": { + "version": "3.969.0", + "license": "Apache-2.0", "dependencies": { - "@jest/test-result": "30.2.0", - "graceful-fs": "^4.2.11", - "jest-haste-map": "30.2.0", - "slash": "^3.0.0" + "@smithy/types": "^4.12.0", + "tslib": "^2.6.2" }, "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + "node": ">=20.0.0" } }, - "node_modules/@jest/transform": { - "version": "30.2.0", - "license": "MIT", + "node_modules/@aws-sdk/middleware-sdk-s3/node_modules/@aws-sdk/xml-builder": { + "version": "3.969.0", + "license": "Apache-2.0", "dependencies": { - "@babel/core": "^7.27.4", - "@jest/types": "30.2.0", - "@jridgewell/trace-mapping": "^0.3.25", - "babel-plugin-istanbul": "^7.0.1", - "chalk": "^4.1.2", - "convert-source-map": "^2.0.0", - "fast-json-stable-stringify": "^2.1.0", - "graceful-fs": "^4.2.11", - "jest-haste-map": "30.2.0", - "jest-regex-util": "30.0.1", - "jest-util": "30.2.0", - "micromatch": "^4.0.8", - "pirates": "^4.0.7", - "slash": "^3.0.0", - "write-file-atomic": "^5.0.1" + "@smithy/types": "^4.12.0", + "fast-xml-parser": "5.2.5", + "tslib": "^2.6.2" }, "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + "node": ">=20.0.0" } }, - "node_modules/@jest/types": { - "version": "30.2.0", - "license": "MIT", + "node_modules/@aws-sdk/middleware-sdk-sqs": { + "version": "3.972.7", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-sdk-sqs/-/middleware-sdk-sqs-3.972.7.tgz", + "integrity": "sha512-DcJLYE4sRjgUyb2SupQGaRgBYc+j89N9nXeMT0PwwVvaBGmKqcxa7PFvz0kBnQrBckPWlfrPyyyMwOeT5BEp6Q==", + "license": "Apache-2.0", "dependencies": { - "@jest/pattern": "30.0.1", - "@jest/schemas": "30.0.5", - "@types/istanbul-lib-coverage": "^2.0.6", - "@types/istanbul-reports": "^3.0.4", - "@types/node": "*", - "@types/yargs": "^17.0.33", - "chalk": "^4.1.2" + "@aws-sdk/types": "^3.973.1", + "@smithy/smithy-client": "^4.11.3", + "@smithy/types": "^4.12.0", + "@smithy/util-hex-encoding": "^4.2.0", + "@smithy/util-utf8": "^4.2.0", + "tslib": "^2.6.2" }, "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + "node": ">=20.0.0" } }, - "node_modules/@jridgewell/gen-mapping": { - "version": "0.3.13", - "license": "MIT", + "node_modules/@aws-sdk/middleware-ssec": { + "version": "3.971.0", + "license": "Apache-2.0", "dependencies": { - "@jridgewell/sourcemap-codec": "^1.5.0", - "@jridgewell/trace-mapping": "^0.3.24" + "@aws-sdk/types": "3.969.0", + "@smithy/types": "^4.12.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=20.0.0" } }, - "node_modules/@jridgewell/remapping": { - "version": "2.3.5", - "license": "MIT", + "node_modules/@aws-sdk/middleware-ssec/node_modules/@aws-sdk/types": { + "version": "3.969.0", + "license": "Apache-2.0", "dependencies": { - "@jridgewell/gen-mapping": "^0.3.5", - "@jridgewell/trace-mapping": "^0.3.24" - } - }, - "node_modules/@jridgewell/resolve-uri": { - "version": "3.1.2", - "license": "MIT", + "@smithy/types": "^4.12.0", + "tslib": "^2.6.2" + }, "engines": { - "node": ">=6.0.0" + "node": ">=20.0.0" } }, - "node_modules/@jridgewell/sourcemap-codec": { - "version": "1.5.5", - "license": "MIT" - }, - "node_modules/@jridgewell/trace-mapping": { - "version": "0.3.31", - "license": "MIT", + "node_modules/@aws-sdk/middleware-user-agent": { + "version": "3.972.8", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-user-agent/-/middleware-user-agent-3.972.8.tgz", + "integrity": "sha512-3PGL+Kvh1PhB0EeJeqNqOWQgipdqFheO4OUKc6aYiFwEpM5t9AyE5hjjxZ5X6iSj8JiduWFZLPwASzF6wQRgFg==", + "license": "Apache-2.0", "dependencies": { - "@jridgewell/resolve-uri": "^3.1.0", - "@jridgewell/sourcemap-codec": "^1.4.14" + "@aws-sdk/core": "^3.973.8", + "@aws-sdk/types": "^3.973.1", + "@aws-sdk/util-endpoints": "3.988.0", + "@smithy/core": "^3.23.0", + "@smithy/protocol-http": "^5.3.8", + "@smithy/types": "^4.12.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=20.0.0" } }, - "node_modules/@js-sdsl/ordered-map": { - "version": "4.4.2", - "dev": true, - "license": "MIT", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/js-sdsl" + "node_modules/@aws-sdk/middleware-user-agent/node_modules/@aws-sdk/core": { + "version": "3.973.8", + "resolved": "https://registry.npmjs.org/@aws-sdk/core/-/core-3.973.8.tgz", + "integrity": "sha512-WeYJ2sfvRLbbUIrjGMUXcEHGu5SJk53jz3K9F8vFP42zWyROzPJ2NB6lMu9vWl5hnMwzwabX7pJc9Euh3JyMGw==", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/types": "^3.973.1", + "@aws-sdk/xml-builder": "^3.972.4", + "@smithy/core": "^3.23.0", + "@smithy/node-config-provider": "^4.3.8", + "@smithy/property-provider": "^4.2.8", + "@smithy/protocol-http": "^5.3.8", + "@smithy/signature-v4": "^5.3.8", + "@smithy/smithy-client": "^4.11.3", + "@smithy/types": "^4.12.0", + "@smithy/util-base64": "^4.3.0", + "@smithy/util-middleware": "^4.2.8", + "@smithy/util-utf8": "^4.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=20.0.0" } }, - "node_modules/@jsdevtools/ono": { - "version": "7.1.3", - "license": "MIT" - }, - "node_modules/@jsep-plugin/assignment": { - "version": "1.3.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 10.16.0" + "node_modules/@aws-sdk/middleware-user-agent/node_modules/@aws-sdk/util-endpoints": { + "version": "3.988.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-endpoints/-/util-endpoints-3.988.0.tgz", + "integrity": "sha512-HuXu4boeUWU0DQiLslbgdvuQ4ZMCo4Lsk97w8BIUokql2o9MvjE5dwqI5pzGt0K7afO1FybjidUQVTMLuZNTOA==", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/types": "^3.973.1", + "@smithy/types": "^4.12.0", + "@smithy/url-parser": "^4.2.8", + "@smithy/util-endpoints": "^3.2.8", + "tslib": "^2.6.2" }, - "peerDependencies": { - "jsep": "^0.4.0||^1.0.0" + "engines": { + "node": ">=20.0.0" } }, - "node_modules/@jsep-plugin/regex": { - "version": "1.0.4", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 10.16.0" + "node_modules/@aws-sdk/middleware-user-agent/node_modules/@aws-sdk/xml-builder": { + "version": "3.972.4", + "resolved": "https://registry.npmjs.org/@aws-sdk/xml-builder/-/xml-builder-3.972.4.tgz", + "integrity": "sha512-0zJ05ANfYqI6+rGqj8samZBFod0dPPousBjLEqg8WdxSgbMAkRgLyn81lP215Do0rFJ/17LIXwr7q0yK24mP6Q==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/types": "^4.12.0", + "fast-xml-parser": "5.3.4", + "tslib": "^2.6.2" }, - "peerDependencies": { - "jsep": "^0.4.0||^1.0.0" + "engines": { + "node": ">=20.0.0" } }, - "node_modules/@jsep-plugin/ternary": { - "version": "1.1.4", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 10.16.0" + "node_modules/@aws-sdk/nested-clients": { + "version": "3.988.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/nested-clients/-/nested-clients-3.988.0.tgz", + "integrity": "sha512-OgYV9k1oBCQ6dOM+wWAMNNehXA8L4iwr7ydFV+JDHyuuu0Ko7tDXnLEtEmeQGYRcAFU3MGasmlBkMB8vf4POrg==", + "license": "Apache-2.0", + "dependencies": { + "@aws-crypto/sha256-browser": "5.2.0", + "@aws-crypto/sha256-js": "5.2.0", + "@aws-sdk/core": "^3.973.8", + "@aws-sdk/middleware-host-header": "^3.972.3", + "@aws-sdk/middleware-logger": "^3.972.3", + "@aws-sdk/middleware-recursion-detection": "^3.972.3", + "@aws-sdk/middleware-user-agent": "^3.972.8", + "@aws-sdk/region-config-resolver": "^3.972.3", + "@aws-sdk/types": "^3.973.1", + "@aws-sdk/util-endpoints": "3.988.0", + "@aws-sdk/util-user-agent-browser": "^3.972.3", + "@aws-sdk/util-user-agent-node": "^3.972.6", + "@smithy/config-resolver": "^4.4.6", + "@smithy/core": "^3.23.0", + "@smithy/fetch-http-handler": "^5.3.9", + "@smithy/hash-node": "^4.2.8", + "@smithy/invalid-dependency": "^4.2.8", + "@smithy/middleware-content-length": "^4.2.8", + "@smithy/middleware-endpoint": "^4.4.14", + "@smithy/middleware-retry": "^4.4.31", + "@smithy/middleware-serde": "^4.2.9", + "@smithy/middleware-stack": "^4.2.8", + "@smithy/node-config-provider": "^4.3.8", + "@smithy/node-http-handler": "^4.4.10", + "@smithy/protocol-http": "^5.3.8", + "@smithy/smithy-client": "^4.11.3", + "@smithy/types": "^4.12.0", + "@smithy/url-parser": "^4.2.8", + "@smithy/util-base64": "^4.3.0", + "@smithy/util-body-length-browser": "^4.2.0", + "@smithy/util-body-length-node": "^4.2.1", + "@smithy/util-defaults-mode-browser": "^4.3.30", + "@smithy/util-defaults-mode-node": "^4.2.33", + "@smithy/util-endpoints": "^3.2.8", + "@smithy/util-middleware": "^4.2.8", + "@smithy/util-retry": "^4.2.8", + "@smithy/util-utf8": "^4.2.0", + "tslib": "^2.6.2" }, - "peerDependencies": { - "jsep": "^0.4.0||^1.0.0" + "engines": { + "node": ">=20.0.0" } }, - "node_modules/@lukeed/csprng": { - "version": "1.1.0", - "dev": true, - "license": "MIT", + "node_modules/@aws-sdk/nested-clients/node_modules/@aws-sdk/core": { + "version": "3.973.8", + "resolved": "https://registry.npmjs.org/@aws-sdk/core/-/core-3.973.8.tgz", + "integrity": "sha512-WeYJ2sfvRLbbUIrjGMUXcEHGu5SJk53jz3K9F8vFP42zWyROzPJ2NB6lMu9vWl5hnMwzwabX7pJc9Euh3JyMGw==", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/types": "^3.973.1", + "@aws-sdk/xml-builder": "^3.972.4", + "@smithy/core": "^3.23.0", + "@smithy/node-config-provider": "^4.3.8", + "@smithy/property-provider": "^4.2.8", + "@smithy/protocol-http": "^5.3.8", + "@smithy/signature-v4": "^5.3.8", + "@smithy/smithy-client": "^4.11.3", + "@smithy/types": "^4.12.0", + "@smithy/util-base64": "^4.3.0", + "@smithy/util-middleware": "^4.2.8", + "@smithy/util-utf8": "^4.2.0", + "tslib": "^2.6.2" + }, "engines": { - "node": ">=8" + "node": ">=20.0.0" } }, - "node_modules/@nestjs/axios": { - "version": "4.0.1", - "dev": true, - "license": "MIT", - "peerDependencies": { - "@nestjs/common": "^10.0.0 || ^11.0.0", - "axios": "^1.3.1", - "rxjs": "^7.0.0" + "node_modules/@aws-sdk/nested-clients/node_modules/@aws-sdk/util-endpoints": { + "version": "3.988.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-endpoints/-/util-endpoints-3.988.0.tgz", + "integrity": "sha512-HuXu4boeUWU0DQiLslbgdvuQ4ZMCo4Lsk97w8BIUokql2o9MvjE5dwqI5pzGt0K7afO1FybjidUQVTMLuZNTOA==", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/types": "^3.973.1", + "@smithy/types": "^4.12.0", + "@smithy/url-parser": "^4.2.8", + "@smithy/util-endpoints": "^3.2.8", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=20.0.0" } }, - "node_modules/@nestjs/common": { - "version": "11.1.13", - "dev": true, - "license": "MIT", + "node_modules/@aws-sdk/nested-clients/node_modules/@aws-sdk/xml-builder": { + "version": "3.972.4", + "resolved": "https://registry.npmjs.org/@aws-sdk/xml-builder/-/xml-builder-3.972.4.tgz", + "integrity": "sha512-0zJ05ANfYqI6+rGqj8samZBFod0dPPousBjLEqg8WdxSgbMAkRgLyn81lP215Do0rFJ/17LIXwr7q0yK24mP6Q==", + "license": "Apache-2.0", "dependencies": { - "file-type": "21.3.0", - "iterare": "1.2.1", - "load-esm": "1.0.3", - "tslib": "2.8.1", - "uid": "2.0.2" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/nest" - }, - "peerDependencies": { - "class-transformer": ">=0.4.1", - "class-validator": ">=0.13.2", - "reflect-metadata": "^0.1.12 || ^0.2.0", - "rxjs": "^7.1.0" + "@smithy/types": "^4.12.0", + "fast-xml-parser": "5.3.4", + "tslib": "^2.6.2" }, - "peerDependenciesMeta": { - "class-transformer": { - "optional": true - }, - "class-validator": { - "optional": true - } + "engines": { + "node": ">=20.0.0" } }, - "node_modules/@nestjs/core": { - "version": "11.1.13", - "dev": true, - "hasInstallScript": true, - "license": "MIT", + "node_modules/@aws-sdk/region-config-resolver": { + "version": "3.972.3", + "license": "Apache-2.0", "dependencies": { - "@nuxt/opencollective": "0.4.1", - "fast-safe-stringify": "2.1.1", - "iterare": "1.2.1", - "path-to-regexp": "8.3.0", - "tslib": "2.8.1", - "uid": "2.0.2" + "@aws-sdk/types": "^3.973.1", + "@smithy/config-resolver": "^4.4.6", + "@smithy/node-config-provider": "^4.3.8", + "@smithy/types": "^4.12.0", + "tslib": "^2.6.2" }, "engines": { - "node": ">= 20" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/nest" - }, - "peerDependencies": { - "@nestjs/common": "^11.0.0", - "@nestjs/microservices": "^11.0.0", - "@nestjs/platform-express": "^11.0.0", - "@nestjs/websockets": "^11.0.0", - "reflect-metadata": "^0.1.12 || ^0.2.0", - "rxjs": "^7.1.0" - }, - "peerDependenciesMeta": { - "@nestjs/microservices": { - "optional": true - }, - "@nestjs/platform-express": { - "optional": true - }, - "@nestjs/websockets": { - "optional": true - } - } - }, - "node_modules/@next/eslint-plugin-next": { - "version": "15.5.12", - "dev": true, - "license": "MIT", - "dependencies": { - "fast-glob": "3.3.1" - } - }, - "node_modules/@nhsdigital/nhs-notify-event-schemas-letter-rendering": { - "version": "2.0.1", - "license": "MIT", - "dependencies": { - "zod": "^4.0.17" + "node": ">=20.0.0" } }, - "node_modules/@nhsdigital/nhs-notify-event-schemas-letter-rendering-v1": { - "name": "@nhsdigital/nhs-notify-event-schemas-letter-rendering", - "version": "1.1.5", + "node_modules/@aws-sdk/s3-request-presigner": { + "version": "3.971.0", + "license": "Apache-2.0", "dependencies": { - "@asyncapi/bundler": "^0.6.4", - "zod": "^4.1.11" + "@aws-sdk/signature-v4-multi-region": "3.970.0", + "@aws-sdk/types": "3.969.0", + "@aws-sdk/util-format-url": "3.969.0", + "@smithy/middleware-endpoint": "^4.4.7", + "@smithy/protocol-http": "^5.3.8", + "@smithy/smithy-client": "^4.10.8", + "@smithy/types": "^4.12.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=20.0.0" } }, - "node_modules/@nhsdigital/nhs-notify-event-schemas-supplier-api": { - "resolved": "internal/events", - "link": true - }, - "node_modules/@nhsdigital/notify-supplier-api-consumer-contracts": { - "resolved": "pact-contracts", - "link": true - }, - "node_modules/@nodelib/fs.scandir": { - "version": "2.1.5", - "dev": true, - "license": "MIT", + "node_modules/@aws-sdk/signature-v4-multi-region": { + "version": "3.970.0", + "license": "Apache-2.0", "dependencies": { - "@nodelib/fs.stat": "2.0.5", - "run-parallel": "^1.1.9" + "@aws-sdk/middleware-sdk-s3": "3.970.0", + "@aws-sdk/types": "3.969.0", + "@smithy/protocol-http": "^5.3.8", + "@smithy/signature-v4": "^5.3.8", + "@smithy/types": "^4.12.0", + "tslib": "^2.6.2" }, "engines": { - "node": ">= 8" + "node": ">=20.0.0" } }, - "node_modules/@nodelib/fs.stat": { - "version": "2.0.5", - "dev": true, - "license": "MIT", + "node_modules/@aws-sdk/signature-v4-multi-region/node_modules/@aws-sdk/types": { + "version": "3.969.0", + "license": "Apache-2.0", + "dependencies": { + "@smithy/types": "^4.12.0", + "tslib": "^2.6.2" + }, "engines": { - "node": ">= 8" + "node": ">=20.0.0" } }, - "node_modules/@nodelib/fs.walk": { - "version": "1.2.8", - "dev": true, - "license": "MIT", + "node_modules/@aws-sdk/token-providers": { + "version": "3.988.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/token-providers/-/token-providers-3.988.0.tgz", + "integrity": "sha512-xvXVlRVKHnF2h6fgWBm64aPP5J+58aJyGfRrQa/uFh8a9mcK68mLfJOYq+ZSxQy/UN3McafJ2ILAy7IWzT9kRw==", + "license": "Apache-2.0", "dependencies": { - "@nodelib/fs.scandir": "2.1.5", - "fastq": "^1.6.0" + "@aws-sdk/core": "^3.973.8", + "@aws-sdk/nested-clients": "3.988.0", + "@aws-sdk/types": "^3.973.1", + "@smithy/property-provider": "^4.2.8", + "@smithy/shared-ini-file-loader": "^4.4.3", + "@smithy/types": "^4.12.0", + "tslib": "^2.6.2" }, "engines": { - "node": ">= 8" + "node": ">=20.0.0" } }, - "node_modules/@nolyfill/is-core-module": { - "version": "1.0.39", - "dev": true, - "license": "MIT", + "node_modules/@aws-sdk/token-providers/node_modules/@aws-sdk/core": { + "version": "3.973.8", + "resolved": "https://registry.npmjs.org/@aws-sdk/core/-/core-3.973.8.tgz", + "integrity": "sha512-WeYJ2sfvRLbbUIrjGMUXcEHGu5SJk53jz3K9F8vFP42zWyROzPJ2NB6lMu9vWl5hnMwzwabX7pJc9Euh3JyMGw==", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/types": "^3.973.1", + "@aws-sdk/xml-builder": "^3.972.4", + "@smithy/core": "^3.23.0", + "@smithy/node-config-provider": "^4.3.8", + "@smithy/property-provider": "^4.2.8", + "@smithy/protocol-http": "^5.3.8", + "@smithy/signature-v4": "^5.3.8", + "@smithy/smithy-client": "^4.11.3", + "@smithy/types": "^4.12.0", + "@smithy/util-base64": "^4.3.0", + "@smithy/util-middleware": "^4.2.8", + "@smithy/util-utf8": "^4.2.0", + "tslib": "^2.6.2" + }, "engines": { - "node": ">=12.4.0" + "node": ">=20.0.0" } }, - "node_modules/@nuxt/opencollective": { - "version": "0.4.1", - "dev": true, - "license": "MIT", + "node_modules/@aws-sdk/token-providers/node_modules/@aws-sdk/xml-builder": { + "version": "3.972.4", + "resolved": "https://registry.npmjs.org/@aws-sdk/xml-builder/-/xml-builder-3.972.4.tgz", + "integrity": "sha512-0zJ05ANfYqI6+rGqj8samZBFod0dPPousBjLEqg8WdxSgbMAkRgLyn81lP215Do0rFJ/17LIXwr7q0yK24mP6Q==", + "license": "Apache-2.0", "dependencies": { - "consola": "^3.2.3" - }, - "bin": { - "opencollective": "bin/opencollective.js" + "@smithy/types": "^4.12.0", + "fast-xml-parser": "5.3.4", + "tslib": "^2.6.2" }, "engines": { - "node": "^14.18.0 || >=16.10.0", - "npm": ">=5.10.0" + "node": ">=20.0.0" } }, - "node_modules/@nuxtjs/opencollective": { - "version": "0.3.2", - "dev": true, - "license": "MIT", + "node_modules/@aws-sdk/types": { + "version": "3.973.1", + "license": "Apache-2.0", "dependencies": { - "chalk": "^4.1.0", - "consola": "^2.15.0", - "node-fetch": "^2.6.1" - }, - "bin": { - "opencollective": "bin/opencollective.js" + "@smithy/types": "^4.12.0", + "tslib": "^2.6.2" }, "engines": { - "node": ">=8.0.0", - "npm": ">=5.0.0" + "node": ">=20.0.0" } }, - "node_modules/@nuxtjs/opencollective/node_modules/consola": { - "version": "2.15.3", - "dev": true, - "license": "MIT" - }, - "node_modules/@openapitools/openapi-generator-cli": { - "version": "2.28.2", - "dev": true, - "hasInstallScript": true, + "node_modules/@aws-sdk/util-arn-parser": { + "version": "3.968.0", "license": "Apache-2.0", "dependencies": { - "@nestjs/axios": "4.0.1", - "@nestjs/common": "11.1.13", - "@nestjs/core": "11.1.13", - "@nuxtjs/opencollective": "0.3.2", - "axios": "1.13.4", - "chalk": "4.1.2", - "commander": "8.3.0", - "compare-versions": "6.1.1", - "concurrently": "9.2.1", - "console.table": "0.10.0", - "fs-extra": "11.3.3", - "glob": "13.0.1", - "inquirer": "8.2.7", - "proxy-agent": "6.5.0", - "reflect-metadata": "0.2.2", - "rxjs": "7.8.2", - "tslib": "2.8.1" - }, - "bin": { - "openapi-generator-cli": "main.js" + "tslib": "^2.6.2" }, "engines": { - "node": ">=16" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/openapi_generator" + "node": ">=20.0.0" } }, - "node_modules/@openapitools/openapi-generator-cli/node_modules/glob": { - "version": "13.0.1", - "dev": true, - "license": "BlueOak-1.0.0", + "node_modules/@aws-sdk/util-dynamodb": { + "version": "3.981.0", + "license": "Apache-2.0", "dependencies": { - "minimatch": "^10.1.2", - "minipass": "^7.1.2", - "path-scurry": "^2.0.0" + "tslib": "^2.6.2" }, "engines": { - "node": "20 || >=22" + "node": ">=20.0.0" }, - "funding": { - "url": "https://github.com/sponsors/isaacs" + "peerDependencies": { + "@aws-sdk/client-dynamodb": "3.981.0" } }, - "node_modules/@openapitools/openapi-generator-cli/node_modules/minimatch": { - "version": "10.1.2", - "dev": true, - "license": "BlueOak-1.0.0", + "node_modules/@aws-sdk/util-endpoints": { + "version": "3.981.0", + "license": "Apache-2.0", "dependencies": { - "@isaacs/brace-expansion": "^5.0.1" + "@aws-sdk/types": "^3.973.1", + "@smithy/types": "^4.12.0", + "@smithy/url-parser": "^4.2.8", + "@smithy/util-endpoints": "^3.2.8", + "tslib": "^2.6.2" }, "engines": { - "node": "20 || >=22" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" + "node": ">=20.0.0" } }, - "node_modules/@opentelemetry/api": { - "version": "1.9.0", - "dev": true, + "node_modules/@aws-sdk/util-format-url": { + "version": "3.969.0", "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/types": "3.969.0", + "@smithy/querystring-builder": "^4.2.8", + "@smithy/types": "^4.12.0", + "tslib": "^2.6.2" + }, "engines": { - "node": ">=8.0.0" + "node": ">=20.0.0" } }, - "node_modules/@opentelemetry/api-logs": { - "version": "0.53.0", - "dev": true, + "node_modules/@aws-sdk/util-locate-window": { + "version": "3.965.4", "license": "Apache-2.0", "dependencies": { - "@opentelemetry/api": "^1.0.0" + "tslib": "^2.6.2" }, "engines": { - "node": ">=14" + "node": ">=20.0.0" } }, - "node_modules/@opentelemetry/context-async-hooks": { - "version": "1.26.0", - "dev": true, + "node_modules/@aws-sdk/util-user-agent-browser": { + "version": "3.972.3", "license": "Apache-2.0", - "engines": { - "node": ">=14" - }, - "peerDependencies": { - "@opentelemetry/api": ">=1.0.0 <1.10.0" + "dependencies": { + "@aws-sdk/types": "^3.973.1", + "@smithy/types": "^4.12.0", + "bowser": "^2.11.0", + "tslib": "^2.6.2" } }, - "node_modules/@opentelemetry/core": { - "version": "1.26.0", - "dev": true, + "node_modules/@aws-sdk/util-user-agent-node": { + "version": "3.972.6", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-node/-/util-user-agent-node-3.972.6.tgz", + "integrity": "sha512-966xH8TPqkqOXP7EwnEThcKKz0SNP9kVJBKd9M8bNXE4GSqVouMKKnFBwYnzbWVKuLXubzX5seokcX4a0JLJIA==", "license": "Apache-2.0", "dependencies": { - "@opentelemetry/semantic-conventions": "1.27.0" + "@aws-sdk/middleware-user-agent": "^3.972.8", + "@aws-sdk/types": "^3.973.1", + "@smithy/node-config-provider": "^4.3.8", + "@smithy/types": "^4.12.0", + "tslib": "^2.6.2" }, "engines": { - "node": ">=14" + "node": ">=20.0.0" }, "peerDependencies": { - "@opentelemetry/api": ">=1.0.0 <1.10.0" + "aws-crt": ">=1.0.0" + }, + "peerDependenciesMeta": { + "aws-crt": { + "optional": true + } } }, - "node_modules/@opentelemetry/exporter-trace-otlp-http": { - "version": "0.53.0", - "dev": true, + "node_modules/@aws-sdk/xml-builder": { + "version": "3.972.3", "license": "Apache-2.0", "dependencies": { - "@opentelemetry/core": "1.26.0", - "@opentelemetry/otlp-exporter-base": "0.53.0", - "@opentelemetry/otlp-transformer": "0.53.0", - "@opentelemetry/resources": "1.26.0", - "@opentelemetry/sdk-trace-base": "1.26.0" + "@smithy/types": "^4.12.0", + "fast-xml-parser": "5.3.4", + "tslib": "^2.6.2" }, "engines": { - "node": ">=14" - }, - "peerDependencies": { - "@opentelemetry/api": "^1.0.0" + "node": ">=20.0.0" } }, - "node_modules/@opentelemetry/otlp-exporter-base": { - "version": "0.53.0", - "dev": true, + "node_modules/@aws/lambda-invoke-store": { + "version": "0.2.3", "license": "Apache-2.0", - "dependencies": { - "@opentelemetry/core": "1.26.0", - "@opentelemetry/otlp-transformer": "0.53.0" - }, "engines": { - "node": ">=14" - }, - "peerDependencies": { - "@opentelemetry/api": "^1.0.0" + "node": ">=18.0.0" } }, - "node_modules/@opentelemetry/otlp-transformer": { - "version": "0.53.0", - "dev": true, - "license": "Apache-2.0", + "node_modules/@babel/code-frame": { + "version": "7.29.0", + "license": "MIT", "dependencies": { - "@opentelemetry/api-logs": "0.53.0", - "@opentelemetry/core": "1.26.0", - "@opentelemetry/resources": "1.26.0", - "@opentelemetry/sdk-logs": "0.53.0", - "@opentelemetry/sdk-metrics": "1.26.0", - "@opentelemetry/sdk-trace-base": "1.26.0", - "protobufjs": "^7.3.0" + "@babel/helper-validator-identifier": "^7.28.5", + "js-tokens": "^4.0.0", + "picocolors": "^1.1.1" }, "engines": { - "node": ">=14" - }, - "peerDependencies": { - "@opentelemetry/api": "^1.3.0" + "node": ">=6.9.0" } }, - "node_modules/@opentelemetry/propagator-b3": { - "version": "1.26.0", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@opentelemetry/core": "1.26.0" - }, + "node_modules/@babel/compat-data": { + "version": "7.29.0", + "license": "MIT", "engines": { - "node": ">=14" - }, - "peerDependencies": { - "@opentelemetry/api": ">=1.0.0 <1.10.0" + "node": ">=6.9.0" } }, - "node_modules/@opentelemetry/propagator-jaeger": { - "version": "1.26.0", - "dev": true, - "license": "Apache-2.0", + "node_modules/@babel/core": { + "version": "7.29.0", + "license": "MIT", "dependencies": { - "@opentelemetry/core": "1.26.0" + "@babel/code-frame": "^7.29.0", + "@babel/generator": "^7.29.0", + "@babel/helper-compilation-targets": "^7.28.6", + "@babel/helper-module-transforms": "^7.28.6", + "@babel/helpers": "^7.28.6", + "@babel/parser": "^7.29.0", + "@babel/template": "^7.28.6", + "@babel/traverse": "^7.29.0", + "@babel/types": "^7.29.0", + "@jridgewell/remapping": "^2.3.5", + "convert-source-map": "^2.0.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.2", + "json5": "^2.2.3", + "semver": "^6.3.1" }, "engines": { - "node": ">=14" + "node": ">=6.9.0" }, - "peerDependencies": { - "@opentelemetry/api": ">=1.0.0 <1.10.0" + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/babel" } }, - "node_modules/@opentelemetry/resources": { - "version": "1.26.0", - "dev": true, - "license": "Apache-2.0", + "node_modules/@babel/core/node_modules/semver": { + "version": "6.3.1", + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/generator": { + "version": "7.29.0", + "license": "MIT", "dependencies": { - "@opentelemetry/core": "1.26.0", - "@opentelemetry/semantic-conventions": "1.27.0" + "@babel/parser": "^7.29.0", + "@babel/types": "^7.29.0", + "@jridgewell/gen-mapping": "^0.3.12", + "@jridgewell/trace-mapping": "^0.3.28", + "jsesc": "^3.0.2" }, "engines": { - "node": ">=14" - }, - "peerDependencies": { - "@opentelemetry/api": ">=1.0.0 <1.10.0" + "node": ">=6.9.0" } }, - "node_modules/@opentelemetry/sdk-logs": { - "version": "0.53.0", - "dev": true, - "license": "Apache-2.0", + "node_modules/@babel/helper-compilation-targets": { + "version": "7.28.6", + "license": "MIT", "dependencies": { - "@opentelemetry/api-logs": "0.53.0", - "@opentelemetry/core": "1.26.0", - "@opentelemetry/resources": "1.26.0" + "@babel/compat-data": "^7.28.6", + "@babel/helper-validator-option": "^7.27.1", + "browserslist": "^4.24.0", + "lru-cache": "^5.1.1", + "semver": "^6.3.1" }, "engines": { - "node": ">=14" - }, - "peerDependencies": { - "@opentelemetry/api": ">=1.4.0 <1.10.0" + "node": ">=6.9.0" } }, - "node_modules/@opentelemetry/sdk-metrics": { - "version": "1.26.0", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@opentelemetry/core": "1.26.0", - "@opentelemetry/resources": "1.26.0" - }, + "node_modules/@babel/helper-compilation-targets/node_modules/semver": { + "version": "6.3.1", + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/helper-globals": { + "version": "7.28.0", + "license": "MIT", "engines": { - "node": ">=14" - }, - "peerDependencies": { - "@opentelemetry/api": ">=1.3.0 <1.10.0" + "node": ">=6.9.0" } }, - "node_modules/@opentelemetry/sdk-trace-base": { - "version": "1.26.0", - "dev": true, - "license": "Apache-2.0", + "node_modules/@babel/helper-module-imports": { + "version": "7.28.6", + "license": "MIT", "dependencies": { - "@opentelemetry/core": "1.26.0", - "@opentelemetry/resources": "1.26.0", - "@opentelemetry/semantic-conventions": "1.27.0" + "@babel/traverse": "^7.28.6", + "@babel/types": "^7.28.6" }, "engines": { - "node": ">=14" - }, - "peerDependencies": { - "@opentelemetry/api": ">=1.0.0 <1.10.0" + "node": ">=6.9.0" } }, - "node_modules/@opentelemetry/sdk-trace-node": { - "version": "1.26.0", - "dev": true, - "license": "Apache-2.0", + "node_modules/@babel/helper-module-transforms": { + "version": "7.28.6", + "license": "MIT", "dependencies": { - "@opentelemetry/context-async-hooks": "1.26.0", - "@opentelemetry/core": "1.26.0", - "@opentelemetry/propagator-b3": "1.26.0", - "@opentelemetry/propagator-jaeger": "1.26.0", - "@opentelemetry/sdk-trace-base": "1.26.0", - "semver": "^7.5.2" + "@babel/helper-module-imports": "^7.28.6", + "@babel/helper-validator-identifier": "^7.28.5", + "@babel/traverse": "^7.28.6" }, "engines": { - "node": ">=14" + "node": ">=6.9.0" }, "peerDependencies": { - "@opentelemetry/api": ">=1.0.0 <1.10.0" + "@babel/core": "^7.0.0" } }, - "node_modules/@opentelemetry/semantic-conventions": { - "version": "1.27.0", - "dev": true, - "license": "Apache-2.0", + "node_modules/@babel/helper-plugin-utils": { + "version": "7.28.6", + "license": "MIT", "engines": { - "node": ">=14" + "node": ">=6.9.0" } }, - "node_modules/@pact-foundation/pact": { - "version": "16.1.0", + "node_modules/@babel/helper-string-parser": { + "version": "7.27.1", "license": "MIT", - "dependencies": { - "@pact-foundation/pact-core": "^18.0.0", - "axios": "^1.12.2", - "body-parser": "^2.2.0", - "chalk": "4.1.2", - "express": "^5.1.0", - "graphql": "^16.11.0", - "graphql-tag": "^2.12.6", - "http-proxy": "^1.18.1", - "https-proxy-agent": "^7.0.6", - "js-base64": "^3.7.8", - "lodash": "^4.17.21", - "ramda": "^0.32.0", - "randexp": "^0.5.3", - "router": "^2.2.0", - "stack-utils": "^2.0.6" - }, "engines": { - "node": ">=20" + "node": ">=6.9.0" } }, - "node_modules/@pact-foundation/pact-core": { - "version": "17.1.0", - "cpu": [ - "x64", - "ia32", - "arm64" - ], + "node_modules/@babel/helper-validator-identifier": { + "version": "7.28.5", "license": "MIT", - "os": [ - "darwin", - "linux", - "win32" - ], - "dependencies": { - "check-types": "11.2.3", - "detect-libc": "^2.0.3", - "node-gyp-build": "^4.6.0", - "pino": "^10.0.0", - "pino-pretty": "^13.1.1", - "underscore": "1.13.7" - }, "engines": { - "node": ">=20" - }, - "optionalDependencies": { - "@pact-foundation/pact-core-darwin-arm64": "17.1.0", - "@pact-foundation/pact-core-darwin-x64": "17.1.0", - "@pact-foundation/pact-core-linux-arm64-glibc": "17.1.0", - "@pact-foundation/pact-core-linux-arm64-musl": "17.1.0", - "@pact-foundation/pact-core-linux-x64-glibc": "17.1.0", - "@pact-foundation/pact-core-linux-x64-musl": "17.1.0", - "@pact-foundation/pact-core-windows-x64": "17.1.0" + "node": ">=6.9.0" } }, - "node_modules/@pact-foundation/pact-core-linux-x64-glibc": { - "version": "17.1.0", - "cpu": [ - "x64" - ], - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@pact-foundation/pact-core-linux-x64-musl": { - "version": "17.1.0", - "cpu": [ - "x64" - ], + "node_modules/@babel/helper-validator-option": { + "version": "7.27.1", "license": "MIT", - "optional": true, - "os": [ - "linux" - ] + "engines": { + "node": ">=6.9.0" + } }, - "node_modules/@pact-foundation/pact/node_modules/@pact-foundation/pact-core": { - "version": "18.0.0", - "cpu": [ - "x64", - "ia32", - "arm64" - ], + "node_modules/@babel/helpers": { + "version": "7.28.6", "license": "MIT", - "os": [ - "darwin", - "linux", - "win32" - ], "dependencies": { - "check-types": "11.2.3", - "detect-libc": "^2.0.3", - "node-gyp-build": "^4.6.0", - "pino": "^10.0.0", - "pino-pretty": "^13.1.1", - "underscore": "1.13.7" + "@babel/template": "^7.28.6", + "@babel/types": "^7.28.6" }, "engines": { - "node": ">=20" - }, - "optionalDependencies": { - "@pact-foundation/pact-core-darwin-arm64": "18.0.0", - "@pact-foundation/pact-core-darwin-x64": "18.0.0", - "@pact-foundation/pact-core-linux-arm64-glibc": "18.0.0", - "@pact-foundation/pact-core-linux-arm64-musl": "18.0.0", - "@pact-foundation/pact-core-linux-x64-glibc": "18.0.0", - "@pact-foundation/pact-core-linux-x64-musl": "18.0.0", - "@pact-foundation/pact-core-windows-x64": "18.0.0" + "node": ">=6.9.0" } }, - "node_modules/@pact-foundation/pact/node_modules/@pact-foundation/pact-core-linux-x64-glibc": { - "version": "18.0.0", - "cpu": [ - "x64" - ], - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@pact-foundation/pact/node_modules/@pact-foundation/pact-core-linux-x64-musl": { - "version": "18.0.0", - "cpu": [ - "x64" - ], - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@pact-foundation/pact/node_modules/accepts": { - "version": "2.0.0", + "node_modules/@babel/parser": { + "version": "7.29.0", "license": "MIT", "dependencies": { - "mime-types": "^3.0.0", - "negotiator": "^1.0.0" + "@babel/types": "^7.29.0" + }, + "bin": { + "parser": "bin/babel-parser.js" }, "engines": { - "node": ">= 0.6" + "node": ">=6.0.0" } }, - "node_modules/@pact-foundation/pact/node_modules/content-disposition": { - "version": "1.0.1", + "node_modules/@babel/plugin-syntax-async-generators": { + "version": "7.8.4", "license": "MIT", - "engines": { - "node": ">=18" + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/express" + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@pact-foundation/pact/node_modules/cookie-signature": { - "version": "1.2.2", + "node_modules/@babel/plugin-syntax-bigint": { + "version": "7.8.3", "license": "MIT", - "engines": { - "node": ">=6.6.0" + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@pact-foundation/pact/node_modules/express": { - "version": "5.2.1", + "node_modules/@babel/plugin-syntax-class-properties": { + "version": "7.12.13", "license": "MIT", "dependencies": { - "accepts": "^2.0.0", - "body-parser": "^2.2.1", - "content-disposition": "^1.0.0", - "content-type": "^1.0.5", - "cookie": "^0.7.1", - "cookie-signature": "^1.2.1", - "debug": "^4.4.0", - "depd": "^2.0.0", - "encodeurl": "^2.0.0", - "escape-html": "^1.0.3", - "etag": "^1.8.1", - "finalhandler": "^2.1.0", - "fresh": "^2.0.0", - "http-errors": "^2.0.0", - "merge-descriptors": "^2.0.0", - "mime-types": "^3.0.0", - "on-finished": "^2.4.1", - "once": "^1.4.0", - "parseurl": "^1.3.3", - "proxy-addr": "^2.0.7", - "qs": "^6.14.0", - "range-parser": "^1.2.1", - "router": "^2.2.0", - "send": "^1.1.0", - "serve-static": "^2.2.0", - "statuses": "^2.0.1", - "type-is": "^2.0.1", - "vary": "^1.1.2" - }, - "engines": { - "node": ">= 18" + "@babel/helper-plugin-utils": "^7.12.13" }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/express" + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@pact-foundation/pact/node_modules/finalhandler": { - "version": "2.1.1", + "node_modules/@babel/plugin-syntax-class-static-block": { + "version": "7.14.5", "license": "MIT", "dependencies": { - "debug": "^4.4.0", - "encodeurl": "^2.0.0", - "escape-html": "^1.0.3", - "on-finished": "^2.4.1", - "parseurl": "^1.3.3", - "statuses": "^2.0.1" + "@babel/helper-plugin-utils": "^7.14.5" }, "engines": { - "node": ">= 18.0.0" + "node": ">=6.9.0" }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/express" + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@pact-foundation/pact/node_modules/fresh": { - "version": "2.0.0", + "node_modules/@babel/plugin-syntax-import-attributes": { + "version": "7.28.6", "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.28.6" + }, "engines": { - "node": ">= 0.8" + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@pact-foundation/pact/node_modules/merge-descriptors": { - "version": "2.0.0", + "node_modules/@babel/plugin-syntax-import-meta": { + "version": "7.10.4", "license": "MIT", - "engines": { - "node": ">=18" + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@pact-foundation/pact/node_modules/mime-db": { - "version": "1.54.0", + "node_modules/@babel/plugin-syntax-json-strings": { + "version": "7.8.3", "license": "MIT", - "engines": { - "node": ">= 0.6" + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@pact-foundation/pact/node_modules/mime-types": { - "version": "3.0.2", + "node_modules/@babel/plugin-syntax-jsx": { + "version": "7.28.6", "license": "MIT", "dependencies": { - "mime-db": "^1.54.0" + "@babel/helper-plugin-utils": "^7.28.6" }, "engines": { - "node": ">=18" + "node": ">=6.9.0" }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/express" + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@pact-foundation/pact/node_modules/negotiator": { - "version": "1.0.0", + "node_modules/@babel/plugin-syntax-logical-assignment-operators": { + "version": "7.10.4", "license": "MIT", - "engines": { - "node": ">= 0.6" + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@pact-foundation/pact/node_modules/send": { - "version": "1.2.1", + "node_modules/@babel/plugin-syntax-nullish-coalescing-operator": { + "version": "7.8.3", "license": "MIT", "dependencies": { - "debug": "^4.4.3", - "encodeurl": "^2.0.0", - "escape-html": "^1.0.3", - "etag": "^1.8.1", - "fresh": "^2.0.0", - "http-errors": "^2.0.1", - "mime-types": "^3.0.2", - "ms": "^2.1.3", - "on-finished": "^2.4.1", - "range-parser": "^1.2.1", - "statuses": "^2.0.2" - }, - "engines": { - "node": ">= 18" + "@babel/helper-plugin-utils": "^7.8.0" }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/express" + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@pact-foundation/pact/node_modules/serve-static": { - "version": "2.2.1", + "node_modules/@babel/plugin-syntax-numeric-separator": { + "version": "7.10.4", "license": "MIT", "dependencies": { - "encodeurl": "^2.0.0", - "escape-html": "^1.0.3", - "parseurl": "^1.3.3", - "send": "^1.2.0" + "@babel/helper-plugin-utils": "^7.10.4" }, - "engines": { - "node": ">= 18" + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-object-rest-spread": { + "version": "7.8.3", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/express" + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@pinojs/redact": { - "version": "0.4.0", - "license": "MIT" + "node_modules/@babel/plugin-syntax-optional-catch-binding": { + "version": "7.8.3", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } }, - "node_modules/@pkgjs/parseargs": { - "version": "0.11.0", - "dev": true, + "node_modules/@babel/plugin-syntax-optional-chaining": { + "version": "7.8.3", "license": "MIT", - "optional": true, - "engines": { - "node": ">=14" + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@pkgr/core": { - "version": "0.2.9", + "node_modules/@babel/plugin-syntax-private-property-in-object": { + "version": "7.14.5", "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, "engines": { - "node": "^12.20.0 || ^14.18.0 || >=16.0.0" + "node": ">=6.9.0" }, - "funding": { - "url": "https://opencollective.com/pkgr" + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@playwright/test": { - "version": "1.58.2", - "license": "Apache-2.0", + "node_modules/@babel/plugin-syntax-top-level-await": { + "version": "7.14.5", + "license": "MIT", "dependencies": { - "playwright": "1.58.2" - }, - "bin": { - "playwright": "cli.js" + "@babel/helper-plugin-utils": "^7.14.5" }, "engines": { - "node": ">=18" + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@protobufjs/aspromise": { - "version": "1.1.2", - "dev": true, - "license": "BSD-3-Clause" + "node_modules/@babel/plugin-syntax-typescript": { + "version": "7.28.6", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.28.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } }, - "node_modules/@protobufjs/base64": { - "version": "1.1.2", + "node_modules/@babel/runtime": { + "version": "7.28.6", "dev": true, - "license": "BSD-3-Clause" + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } }, - "node_modules/@protobufjs/codegen": { - "version": "2.0.4", - "dev": true, - "license": "BSD-3-Clause" + "node_modules/@babel/template": { + "version": "7.28.6", + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.28.6", + "@babel/parser": "^7.28.6", + "@babel/types": "^7.28.6" + }, + "engines": { + "node": ">=6.9.0" + } }, - "node_modules/@protobufjs/eventemitter": { - "version": "1.1.0", - "dev": true, - "license": "BSD-3-Clause" + "node_modules/@babel/traverse": { + "version": "7.29.0", + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.29.0", + "@babel/generator": "^7.29.0", + "@babel/helper-globals": "^7.28.0", + "@babel/parser": "^7.29.0", + "@babel/template": "^7.28.6", + "@babel/types": "^7.29.0", + "debug": "^4.3.1" + }, + "engines": { + "node": ">=6.9.0" + } }, - "node_modules/@protobufjs/fetch": { - "version": "1.1.0", - "dev": true, - "license": "BSD-3-Clause", + "node_modules/@babel/types": { + "version": "7.29.0", + "license": "MIT", "dependencies": { - "@protobufjs/aspromise": "^1.1.1", - "@protobufjs/inquire": "^1.1.0" + "@babel/helper-string-parser": "^7.27.1", + "@babel/helper-validator-identifier": "^7.28.5" + }, + "engines": { + "node": ">=6.9.0" } }, - "node_modules/@protobufjs/float": { + "node_modules/@balena/dockerignore": { "version": "1.0.2", "dev": true, - "license": "BSD-3-Clause" - }, - "node_modules/@protobufjs/inquire": { - "version": "1.1.0", - "dev": true, - "license": "BSD-3-Clause" - }, - "node_modules/@protobufjs/path": { - "version": "1.1.2", - "dev": true, - "license": "BSD-3-Clause" - }, - "node_modules/@protobufjs/pool": { - "version": "1.1.0", - "dev": true, - "license": "BSD-3-Clause" + "license": "Apache-2.0" }, - "node_modules/@protobufjs/utf8": { - "version": "1.1.0", + "node_modules/@bcoe/v8-coverage": { + "version": "0.2.3", "dev": true, - "license": "BSD-3-Clause" + "license": "MIT" }, - "node_modules/@redocly/ajv": { - "version": "8.17.3", + "node_modules/@borewit/text-codec": { + "version": "0.2.1", "dev": true, "license": "MIT", - "dependencies": { - "fast-deep-equal": "^3.1.3", - "fast-uri": "^3.0.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2" - }, "funding": { "type": "github", - "url": "https://github.com/sponsors/epoberezkin" + "url": "https://github.com/sponsors/Borewit" } }, - "node_modules/@redocly/cli": { - "version": "1.31.0", + "node_modules/@cspotcode/source-map-support": { + "version": "0.8.1", "dev": true, "license": "MIT", "dependencies": { - "@opentelemetry/api": "1.9.0", - "@opentelemetry/exporter-trace-otlp-http": "0.53.0", - "@opentelemetry/resources": "1.26.0", - "@opentelemetry/sdk-trace-node": "1.26.0", - "@opentelemetry/semantic-conventions": "1.27.0", - "@redocly/openapi-core": "1.31.0", - "abort-controller": "^3.0.0", - "chokidar": "^3.5.1", - "colorette": "^1.2.0", - "core-js": "^3.32.1", - "dotenv": "^16.4.7", - "form-data": "^4.0.0", - "get-port-please": "^3.0.1", - "glob": "^7.1.6", - "handlebars": "^4.7.6", - "mobx": "^6.0.4", - "pluralize": "^8.0.0", - "react": "^17.0.0 || ^18.2.0 || ^19.0.0", - "react-dom": "^17.0.0 || ^18.2.0 || ^19.0.0", - "redoc": "2.4.0", - "semver": "^7.5.2", - "simple-websocket": "^9.0.0", - "styled-components": "^6.0.7", - "yargs": "17.0.1" - }, - "bin": { - "openapi": "bin/cli.js", - "redocly": "bin/cli.js" + "@jridgewell/trace-mapping": "0.3.9" }, "engines": { - "node": ">=18.17.0", - "npm": ">=9.5.0" + "node": ">=12" } }, - "node_modules/@redocly/cli/node_modules/brace-expansion": { - "version": "1.1.12", + "node_modules/@cspotcode/source-map-support/node_modules/@jridgewell/trace-mapping": { + "version": "0.3.9", "dev": true, "license": "MIT", "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/@redocly/cli/node_modules/cliui": { - "version": "7.0.4", - "dev": true, - "license": "ISC", - "dependencies": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.0", - "wrap-ansi": "^7.0.0" + "@jridgewell/resolve-uri": "^3.0.3", + "@jridgewell/sourcemap-codec": "^1.4.10" } }, - "node_modules/@redocly/cli/node_modules/dotenv": { - "version": "16.6.1", + "node_modules/@csstools/color-helpers": { + "version": "5.1.0", "dev": true, - "license": "BSD-2-Clause", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT-0", "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://dotenvx.com" + "node": ">=18" } }, - "node_modules/@redocly/cli/node_modules/glob": { - "version": "7.2.3", + "node_modules/@csstools/css-calc": { + "version": "2.1.4", "dev": true, - "license": "ISC", - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT", "engines": { - "node": "*" + "node": ">=18" }, - "funding": { - "url": "https://github.com/sponsors/isaacs" + "peerDependencies": { + "@csstools/css-parser-algorithms": "^3.0.5", + "@csstools/css-tokenizer": "^3.0.4" } }, - "node_modules/@redocly/cli/node_modules/minimatch": { - "version": "3.1.2", + "node_modules/@csstools/css-color-parser": { + "version": "3.1.0", "dev": true, - "license": "ISC", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT", "dependencies": { - "brace-expansion": "^1.1.7" + "@csstools/color-helpers": "^5.1.0", + "@csstools/css-calc": "^2.1.4" }, "engines": { - "node": "*" + "node": ">=18" + }, + "peerDependencies": { + "@csstools/css-parser-algorithms": "^3.0.5", + "@csstools/css-tokenizer": "^3.0.4" } }, - "node_modules/@redocly/cli/node_modules/wrap-ansi": { - "version": "7.0.0", + "node_modules/@csstools/css-parser-algorithms": { + "version": "3.0.5", "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], "license": "MIT", - "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - }, "engines": { - "node": ">=10" + "node": ">=18" }, - "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + "peerDependencies": { + "@csstools/css-tokenizer": "^3.0.4" } }, - "node_modules/@redocly/cli/node_modules/yargs": { - "version": "17.0.1", + "node_modules/@csstools/css-tokenizer": { + "version": "3.0.4", "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], "license": "MIT", - "dependencies": { - "cliui": "^7.0.2", - "escalade": "^3.1.1", - "get-caller-file": "^2.0.5", - "require-directory": "^2.1.1", - "string-width": "^4.2.0", - "y18n": "^5.0.5", - "yargs-parser": "^20.2.2" - }, "engines": { - "node": ">=12" + "node": ">=18" } }, - "node_modules/@redocly/cli/node_modules/yargs-parser": { - "version": "20.2.9", + "node_modules/@datastructures-js/heap": { + "version": "4.3.7", + "license": "MIT" + }, + "node_modules/@emotion/is-prop-valid": { + "version": "1.4.0", "dev": true, - "license": "ISC", - "engines": { - "node": ">=10" + "license": "MIT", + "dependencies": { + "@emotion/memoize": "^0.9.0" } }, - "node_modules/@redocly/config": { - "version": "0.20.3", + "node_modules/@emotion/memoize": { + "version": "0.9.0", "dev": true, "license": "MIT" }, - "node_modules/@redocly/openapi-core": { - "version": "1.31.0", + "node_modules/@emotion/unitless": { + "version": "0.10.0", "dev": true, + "license": "MIT" + }, + "node_modules/@esbuild/linux-x64": { + "version": "0.27.3", + "cpu": [ + "x64" + ], "license": "MIT", - "dependencies": { - "@redocly/ajv": "^8.11.2", - "@redocly/config": "^0.20.1", - "colorette": "^1.2.0", - "https-proxy-agent": "^7.0.5", - "js-levenshtein": "^1.1.6", - "js-yaml": "^4.1.0", - "minimatch": "^5.0.1", - "pluralize": "^8.0.0", - "yaml-ast-parser": "0.0.43" - }, + "optional": true, + "os": [ + "linux" + ], "engines": { - "node": ">=18.17.0", - "npm": ">=9.5.0" + "node": ">=18" } }, - "node_modules/@rollup/plugin-commonjs": { - "version": "22.0.2", + "node_modules/@eslint-community/eslint-utils": { + "version": "4.9.1", "dev": true, "license": "MIT", "dependencies": { - "@rollup/pluginutils": "^3.1.0", - "commondir": "^1.0.1", - "estree-walker": "^2.0.1", - "glob": "^7.1.6", - "is-reference": "^1.2.1", - "magic-string": "^0.25.7", - "resolve": "^1.17.0" + "eslint-visitor-keys": "^3.4.3" }, "engines": { - "node": ">= 12.0.0" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" }, "peerDependencies": { - "rollup": "^2.68.0" + "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" } }, - "node_modules/@rollup/plugin-commonjs/node_modules/brace-expansion": { - "version": "1.1.12", + "node_modules/@eslint-community/eslint-utils/node_modules/eslint-visitor-keys": { + "version": "3.4.3", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/@eslint-community/regexpp": { + "version": "4.12.2", "dev": true, "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" + "engines": { + "node": "^12.0.0 || ^14.0.0 || >=16.0.0" } }, - "node_modules/@rollup/plugin-commonjs/node_modules/glob": { - "version": "7.2.3", + "node_modules/@eslint/config-array": { + "version": "0.21.1", "dev": true, - "license": "ISC", + "license": "Apache-2.0", "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" + "@eslint/object-schema": "^2.1.7", + "debug": "^4.3.1", + "minimatch": "^3.1.2" }, "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" } }, - "node_modules/@rollup/plugin-commonjs/node_modules/minimatch": { + "node_modules/@eslint/config-array/node_modules/brace-expansion": { + "version": "1.1.12", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/@eslint/config-array/node_modules/minimatch": { "version": "3.1.2", "dev": true, "license": "ISC", @@ -4471,4499 +5349,4184 @@ "node": "*" } }, - "node_modules/@rollup/pluginutils": { - "version": "3.1.0", + "node_modules/@eslint/config-helpers": { + "version": "0.4.2", "dev": true, - "license": "MIT", + "license": "Apache-2.0", "dependencies": { - "@types/estree": "0.0.39", - "estree-walker": "^1.0.1", - "picomatch": "^2.2.2" + "@eslint/core": "^0.17.0" }, "engines": { - "node": ">= 8.0.0" - }, - "peerDependencies": { - "rollup": "^1.20.0||^2.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" } }, - "node_modules/@rollup/pluginutils/node_modules/@types/estree": { - "version": "0.0.39", + "node_modules/@eslint/core": { + "version": "0.17.0", "dev": true, - "license": "MIT" + "license": "Apache-2.0", + "dependencies": { + "@types/json-schema": "^7.0.15" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } }, - "node_modules/@rollup/pluginutils/node_modules/estree-walker": { - "version": "1.0.1", - "dev": true, - "license": "MIT" - }, - "node_modules/@rollup/pluginutils/node_modules/picomatch": { - "version": "2.3.1", + "node_modules/@eslint/eslintrc": { + "version": "3.3.3", "dev": true, "license": "MIT", + "dependencies": { + "ajv": "^6.12.4", + "debug": "^4.3.2", + "espree": "^10.0.1", + "globals": "^14.0.0", + "ignore": "^5.2.0", + "import-fresh": "^3.2.1", + "js-yaml": "^4.1.1", + "minimatch": "^3.1.2", + "strip-json-comments": "^3.1.1" + }, "engines": { - "node": ">=8.6" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { - "url": "https://github.com/sponsors/jonschlinkert" + "url": "https://opencollective.com/eslint" } }, - "node_modules/@rtsao/scc": { - "version": "1.1.0", - "dev": true, - "license": "MIT" - }, - "node_modules/@rushstack/eslint-patch": { - "version": "1.15.0", + "node_modules/@eslint/eslintrc/node_modules/ajv": { + "version": "6.12.6", "dev": true, - "license": "MIT" - }, - "node_modules/@sap/contracts-provider": { - "resolved": "tests/contracts/provider", - "link": true - }, - "node_modules/@sinclair/typebox": { - "version": "0.34.48", - "license": "MIT" - }, - "node_modules/@sinonjs/commons": { - "version": "3.0.1", - "license": "BSD-3-Clause", + "license": "MIT", "dependencies": { - "type-detect": "4.0.8" + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" } }, - "node_modules/@sinonjs/fake-timers": { - "version": "13.0.5", - "license": "BSD-3-Clause", + "node_modules/@eslint/eslintrc/node_modules/brace-expansion": { + "version": "1.1.12", + "dev": true, + "license": "MIT", "dependencies": { - "@sinonjs/commons": "^3.0.1" + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" } }, - "node_modules/@smithy/abort-controller": { - "version": "4.2.8", - "license": "Apache-2.0", - "dependencies": { - "@smithy/types": "^4.12.0", - "tslib": "^2.6.2" - }, + "node_modules/@eslint/eslintrc/node_modules/ignore": { + "version": "5.3.2", + "dev": true, + "license": "MIT", "engines": { - "node": ">=18.0.0" + "node": ">= 4" } }, - "node_modules/@smithy/chunked-blob-reader": { - "version": "5.2.0", - "license": "Apache-2.0", + "node_modules/@eslint/eslintrc/node_modules/json-schema-traverse": { + "version": "0.4.1", + "dev": true, + "license": "MIT" + }, + "node_modules/@eslint/eslintrc/node_modules/minimatch": { + "version": "3.1.2", + "dev": true, + "license": "ISC", "dependencies": { - "tslib": "^2.6.2" + "brace-expansion": "^1.1.7" }, "engines": { - "node": ">=18.0.0" + "node": "*" } }, - "node_modules/@smithy/chunked-blob-reader-native": { - "version": "4.2.1", - "license": "Apache-2.0", - "dependencies": { - "@smithy/util-base64": "^4.3.0", - "tslib": "^2.6.2" - }, + "node_modules/@eslint/js": { + "version": "9.39.2", + "dev": true, + "license": "MIT", "engines": { - "node": ">=18.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://eslint.org/donate" } }, - "node_modules/@smithy/config-resolver": { - "version": "4.4.6", + "node_modules/@eslint/object-schema": { + "version": "2.1.7", + "dev": true, "license": "Apache-2.0", - "dependencies": { - "@smithy/node-config-provider": "^4.3.8", - "@smithy/types": "^4.12.0", - "@smithy/util-config-provider": "^4.2.0", - "@smithy/util-endpoints": "^3.2.8", - "@smithy/util-middleware": "^4.2.8", - "tslib": "^2.6.2" - }, "engines": { - "node": ">=18.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" } }, - "node_modules/@smithy/core": { - "version": "3.22.1", + "node_modules/@eslint/plugin-kit": { + "version": "0.4.1", + "dev": true, "license": "Apache-2.0", "dependencies": { - "@smithy/middleware-serde": "^4.2.9", - "@smithy/protocol-http": "^5.3.8", - "@smithy/types": "^4.12.0", - "@smithy/util-base64": "^4.3.0", - "@smithy/util-body-length-browser": "^4.2.0", - "@smithy/util-middleware": "^4.2.8", - "@smithy/util-stream": "^4.5.11", - "@smithy/util-utf8": "^4.2.0", - "@smithy/uuid": "^1.1.0", - "tslib": "^2.6.2" + "@eslint/core": "^0.17.0", + "levn": "^0.4.1" }, "engines": { - "node": ">=18.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" } }, - "node_modules/@smithy/credential-provider-imds": { - "version": "4.2.8", + "node_modules/@exodus/schemasafe": { + "version": "1.3.0", + "dev": true, + "license": "MIT" + }, + "node_modules/@grpc/grpc-js": { + "version": "1.14.3", + "dev": true, "license": "Apache-2.0", "dependencies": { - "@smithy/node-config-provider": "^4.3.8", - "@smithy/property-provider": "^4.2.8", - "@smithy/types": "^4.12.0", - "@smithy/url-parser": "^4.2.8", - "tslib": "^2.6.2" + "@grpc/proto-loader": "^0.8.0", + "@js-sdsl/ordered-map": "^4.4.2" }, "engines": { - "node": ">=18.0.0" + "node": ">=12.10.0" } }, - "node_modules/@smithy/eventstream-codec": { - "version": "4.2.8", + "node_modules/@grpc/grpc-js/node_modules/@grpc/proto-loader": { + "version": "0.8.0", + "dev": true, "license": "Apache-2.0", "dependencies": { - "@aws-crypto/crc32": "5.2.0", - "@smithy/types": "^4.12.0", - "@smithy/util-hex-encoding": "^4.2.0", - "tslib": "^2.6.2" + "lodash.camelcase": "^4.3.0", + "long": "^5.0.0", + "protobufjs": "^7.5.3", + "yargs": "^17.7.2" + }, + "bin": { + "proto-loader-gen-types": "build/bin/proto-loader-gen-types.js" }, "engines": { - "node": ">=18.0.0" + "node": ">=6" } }, - "node_modules/@smithy/eventstream-serde-browser": { - "version": "4.2.8", + "node_modules/@grpc/proto-loader": { + "version": "0.7.15", + "dev": true, "license": "Apache-2.0", "dependencies": { - "@smithy/eventstream-serde-universal": "^4.2.8", - "@smithy/types": "^4.12.0", - "tslib": "^2.6.2" + "lodash.camelcase": "^4.3.0", + "long": "^5.0.0", + "protobufjs": "^7.2.5", + "yargs": "^17.7.2" + }, + "bin": { + "proto-loader-gen-types": "build/bin/proto-loader-gen-types.js" }, "engines": { - "node": ">=18.0.0" + "node": ">=6" } }, - "node_modules/@smithy/eventstream-serde-config-resolver": { - "version": "4.3.8", + "node_modules/@humanfs/core": { + "version": "0.19.1", + "dev": true, "license": "Apache-2.0", - "dependencies": { - "@smithy/types": "^4.12.0", - "tslib": "^2.6.2" - }, "engines": { - "node": ">=18.0.0" + "node": ">=18.18.0" } }, - "node_modules/@smithy/eventstream-serde-node": { - "version": "4.2.8", + "node_modules/@humanfs/node": { + "version": "0.16.7", + "dev": true, "license": "Apache-2.0", "dependencies": { - "@smithy/eventstream-serde-universal": "^4.2.8", - "@smithy/types": "^4.12.0", - "tslib": "^2.6.2" + "@humanfs/core": "^0.19.1", + "@humanwhocodes/retry": "^0.4.0" }, "engines": { - "node": ">=18.0.0" + "node": ">=18.18.0" } }, - "node_modules/@smithy/eventstream-serde-universal": { - "version": "4.2.8", + "node_modules/@humanwhocodes/module-importer": { + "version": "1.0.1", + "dev": true, "license": "Apache-2.0", - "dependencies": { - "@smithy/eventstream-codec": "^4.2.8", - "@smithy/types": "^4.12.0", - "tslib": "^2.6.2" - }, "engines": { - "node": ">=18.0.0" + "node": ">=12.22" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" } }, - "node_modules/@smithy/fetch-http-handler": { - "version": "5.3.9", + "node_modules/@humanwhocodes/retry": { + "version": "0.4.3", + "dev": true, "license": "Apache-2.0", - "dependencies": { - "@smithy/protocol-http": "^5.3.8", - "@smithy/querystring-builder": "^4.2.8", - "@smithy/types": "^4.12.0", - "@smithy/util-base64": "^4.3.0", - "tslib": "^2.6.2" - }, "engines": { - "node": ">=18.0.0" + "node": ">=18.18" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" } }, - "node_modules/@smithy/hash-blob-browser": { - "version": "4.2.9", - "license": "Apache-2.0", + "node_modules/@inquirer/external-editor": { + "version": "1.0.3", + "dev": true, + "license": "MIT", "dependencies": { - "@smithy/chunked-blob-reader": "^5.2.0", - "@smithy/chunked-blob-reader-native": "^4.2.1", - "@smithy/types": "^4.12.0", - "tslib": "^2.6.2" + "chardet": "^2.1.1", + "iconv-lite": "^0.7.0" }, "engines": { - "node": ">=18.0.0" + "node": ">=18" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } } }, - "node_modules/@smithy/hash-node": { - "version": "4.2.8", - "license": "Apache-2.0", - "dependencies": { - "@smithy/types": "^4.12.0", - "@smithy/util-buffer-from": "^4.2.0", - "@smithy/util-utf8": "^4.2.0", - "tslib": "^2.6.2" - }, + "node_modules/@internal/datastore": { + "resolved": "internal/datastore", + "link": true + }, + "node_modules/@internal/helpers": { + "resolved": "internal/helpers", + "link": true + }, + "node_modules/@isaacs/balanced-match": { + "version": "4.0.1", + "dev": true, + "license": "MIT", "engines": { - "node": ">=18.0.0" + "node": "20 || >=22" } }, - "node_modules/@smithy/hash-stream-node": { - "version": "4.2.8", - "license": "Apache-2.0", + "node_modules/@isaacs/brace-expansion": { + "version": "5.0.1", + "dev": true, + "license": "MIT", "dependencies": { - "@smithy/types": "^4.12.0", - "@smithy/util-utf8": "^4.2.0", - "tslib": "^2.6.2" + "@isaacs/balanced-match": "^4.0.1" }, "engines": { - "node": ">=18.0.0" + "node": "20 || >=22" } }, - "node_modules/@smithy/invalid-dependency": { - "version": "4.2.8", - "license": "Apache-2.0", + "node_modules/@isaacs/cliui": { + "version": "8.0.2", + "dev": true, + "license": "ISC", "dependencies": { - "@smithy/types": "^4.12.0", - "tslib": "^2.6.2" + "string-width": "^5.1.2", + "string-width-cjs": "npm:string-width@^4.2.0", + "strip-ansi": "^7.0.1", + "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", + "wrap-ansi": "^8.1.0", + "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" }, "engines": { - "node": ">=18.0.0" + "node": ">=12" } }, - "node_modules/@smithy/is-array-buffer": { - "version": "4.2.0", - "license": "Apache-2.0", - "dependencies": { - "tslib": "^2.6.2" - }, + "node_modules/@isaacs/cliui/node_modules/ansi-regex": { + "version": "6.2.2", + "dev": true, + "license": "MIT", "engines": { - "node": ">=18.0.0" + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" } }, - "node_modules/@smithy/md5-js": { - "version": "4.2.8", - "license": "Apache-2.0", - "dependencies": { - "@smithy/types": "^4.12.0", - "@smithy/util-utf8": "^4.2.0", - "tslib": "^2.6.2" - }, + "node_modules/@isaacs/cliui/node_modules/ansi-styles": { + "version": "6.2.3", + "dev": true, + "license": "MIT", "engines": { - "node": ">=18.0.0" + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/@smithy/middleware-content-length": { - "version": "4.2.8", - "license": "Apache-2.0", + "node_modules/@isaacs/cliui/node_modules/string-width": { + "version": "5.1.2", + "dev": true, + "license": "MIT", "dependencies": { - "@smithy/protocol-http": "^5.3.8", - "@smithy/types": "^4.12.0", - "tslib": "^2.6.2" + "eastasianwidth": "^0.2.0", + "emoji-regex": "^9.2.2", + "strip-ansi": "^7.0.1" }, "engines": { - "node": ">=18.0.0" + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@smithy/middleware-endpoint": { - "version": "4.4.13", - "license": "Apache-2.0", + "node_modules/@isaacs/cliui/node_modules/strip-ansi": { + "version": "7.1.2", + "dev": true, + "license": "MIT", "dependencies": { - "@smithy/core": "^3.22.1", - "@smithy/middleware-serde": "^4.2.9", - "@smithy/node-config-provider": "^4.3.8", - "@smithy/shared-ini-file-loader": "^4.4.3", - "@smithy/types": "^4.12.0", - "@smithy/url-parser": "^4.2.8", - "@smithy/util-middleware": "^4.2.8", - "tslib": "^2.6.2" + "ansi-regex": "^6.0.1" }, "engines": { - "node": ">=18.0.0" + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" } }, - "node_modules/@smithy/middleware-retry": { - "version": "4.4.30", - "license": "Apache-2.0", + "node_modules/@isaacs/cliui/node_modules/wrap-ansi": { + "version": "8.1.0", + "dev": true, + "license": "MIT", "dependencies": { - "@smithy/node-config-provider": "^4.3.8", - "@smithy/protocol-http": "^5.3.8", - "@smithy/service-error-classification": "^4.2.8", - "@smithy/smithy-client": "^4.11.2", - "@smithy/types": "^4.12.0", - "@smithy/util-middleware": "^4.2.8", - "@smithy/util-retry": "^4.2.8", - "@smithy/uuid": "^1.1.0", - "tslib": "^2.6.2" + "ansi-styles": "^6.1.0", + "string-width": "^5.0.1", + "strip-ansi": "^7.0.1" }, "engines": { - "node": ">=18.0.0" + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" } }, - "node_modules/@smithy/middleware-serde": { - "version": "4.2.9", - "license": "Apache-2.0", + "node_modules/@istanbuljs/load-nyc-config": { + "version": "1.1.0", + "license": "ISC", "dependencies": { - "@smithy/protocol-http": "^5.3.8", - "@smithy/types": "^4.12.0", - "tslib": "^2.6.2" + "camelcase": "^5.3.1", + "find-up": "^4.1.0", + "get-package-type": "^0.1.0", + "js-yaml": "^3.13.1", + "resolve-from": "^5.0.0" }, "engines": { - "node": ">=18.0.0" + "node": ">=8" } }, - "node_modules/@smithy/middleware-stack": { - "version": "4.2.8", - "license": "Apache-2.0", + "node_modules/@istanbuljs/load-nyc-config/node_modules/argparse": { + "version": "1.0.10", + "license": "MIT", "dependencies": { - "@smithy/types": "^4.12.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" + "sprintf-js": "~1.0.2" } }, - "node_modules/@smithy/node-config-provider": { - "version": "4.3.8", - "license": "Apache-2.0", + "node_modules/@istanbuljs/load-nyc-config/node_modules/find-up": { + "version": "4.1.0", + "license": "MIT", "dependencies": { - "@smithy/property-provider": "^4.2.8", - "@smithy/shared-ini-file-loader": "^4.4.3", - "@smithy/types": "^4.12.0", - "tslib": "^2.6.2" + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" }, "engines": { - "node": ">=18.0.0" + "node": ">=8" } }, - "node_modules/@smithy/node-http-handler": { - "version": "4.4.9", - "license": "Apache-2.0", + "node_modules/@istanbuljs/load-nyc-config/node_modules/js-yaml": { + "version": "3.14.2", + "license": "MIT", "dependencies": { - "@smithy/abort-controller": "^4.2.8", - "@smithy/protocol-http": "^5.3.8", - "@smithy/querystring-builder": "^4.2.8", - "@smithy/types": "^4.12.0", - "tslib": "^2.6.2" + "argparse": "^1.0.7", + "esprima": "^4.0.0" }, - "engines": { - "node": ">=18.0.0" + "bin": { + "js-yaml": "bin/js-yaml.js" } }, - "node_modules/@smithy/property-provider": { - "version": "4.2.8", - "license": "Apache-2.0", + "node_modules/@istanbuljs/load-nyc-config/node_modules/locate-path": { + "version": "5.0.0", + "license": "MIT", "dependencies": { - "@smithy/types": "^4.12.0", - "tslib": "^2.6.2" + "p-locate": "^4.1.0" }, "engines": { - "node": ">=18.0.0" + "node": ">=8" } }, - "node_modules/@smithy/protocol-http": { - "version": "5.3.8", - "license": "Apache-2.0", + "node_modules/@istanbuljs/load-nyc-config/node_modules/p-limit": { + "version": "2.3.0", + "license": "MIT", "dependencies": { - "@smithy/types": "^4.12.0", - "tslib": "^2.6.2" + "p-try": "^2.0.0" }, "engines": { - "node": ">=18.0.0" + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@smithy/querystring-builder": { - "version": "4.2.8", - "license": "Apache-2.0", + "node_modules/@istanbuljs/load-nyc-config/node_modules/p-locate": { + "version": "4.1.0", + "license": "MIT", "dependencies": { - "@smithy/types": "^4.12.0", - "@smithy/util-uri-escape": "^4.2.0", - "tslib": "^2.6.2" + "p-limit": "^2.2.0" }, "engines": { - "node": ">=18.0.0" + "node": ">=8" } }, - "node_modules/@smithy/querystring-parser": { - "version": "4.2.8", - "license": "Apache-2.0", - "dependencies": { - "@smithy/types": "^4.12.0", - "tslib": "^2.6.2" - }, + "node_modules/@istanbuljs/load-nyc-config/node_modules/resolve-from": { + "version": "5.0.0", + "license": "MIT", "engines": { - "node": ">=18.0.0" + "node": ">=8" } }, - "node_modules/@smithy/service-error-classification": { - "version": "4.2.8", - "license": "Apache-2.0", - "dependencies": { - "@smithy/types": "^4.12.0" - }, + "node_modules/@istanbuljs/schema": { + "version": "0.1.3", + "license": "MIT", "engines": { - "node": ">=18.0.0" + "node": ">=8" } }, - "node_modules/@smithy/shared-ini-file-loader": { - "version": "4.4.3", - "license": "Apache-2.0", + "node_modules/@jest/console": { + "version": "30.2.0", + "dev": true, + "license": "MIT", "dependencies": { - "@smithy/types": "^4.12.0", - "tslib": "^2.6.2" + "@jest/types": "30.2.0", + "@types/node": "*", + "chalk": "^4.1.2", + "jest-message-util": "30.2.0", + "jest-util": "30.2.0", + "slash": "^3.0.0" }, "engines": { - "node": ">=18.0.0" + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" } }, - "node_modules/@smithy/signature-v4": { - "version": "5.3.8", - "license": "Apache-2.0", + "node_modules/@jest/core": { + "version": "30.2.0", + "dev": true, + "license": "MIT", "dependencies": { - "@smithy/is-array-buffer": "^4.2.0", - "@smithy/protocol-http": "^5.3.8", - "@smithy/types": "^4.12.0", - "@smithy/util-hex-encoding": "^4.2.0", - "@smithy/util-middleware": "^4.2.8", - "@smithy/util-uri-escape": "^4.2.0", - "@smithy/util-utf8": "^4.2.0", - "tslib": "^2.6.2" + "@jest/console": "30.2.0", + "@jest/pattern": "30.0.1", + "@jest/reporters": "30.2.0", + "@jest/test-result": "30.2.0", + "@jest/transform": "30.2.0", + "@jest/types": "30.2.0", + "@types/node": "*", + "ansi-escapes": "^4.3.2", + "chalk": "^4.1.2", + "ci-info": "^4.2.0", + "exit-x": "^0.2.2", + "graceful-fs": "^4.2.11", + "jest-changed-files": "30.2.0", + "jest-config": "30.2.0", + "jest-haste-map": "30.2.0", + "jest-message-util": "30.2.0", + "jest-regex-util": "30.0.1", + "jest-resolve": "30.2.0", + "jest-resolve-dependencies": "30.2.0", + "jest-runner": "30.2.0", + "jest-runtime": "30.2.0", + "jest-snapshot": "30.2.0", + "jest-util": "30.2.0", + "jest-validate": "30.2.0", + "jest-watcher": "30.2.0", + "micromatch": "^4.0.8", + "pretty-format": "30.2.0", + "slash": "^3.0.0" }, "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/@smithy/smithy-client": { - "version": "4.11.2", - "license": "Apache-2.0", - "dependencies": { - "@smithy/core": "^3.22.1", - "@smithy/middleware-endpoint": "^4.4.13", - "@smithy/middleware-stack": "^4.2.8", - "@smithy/protocol-http": "^5.3.8", - "@smithy/types": "^4.12.0", - "@smithy/util-stream": "^4.5.11", - "tslib": "^2.6.2" + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" }, - "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/@smithy/types": { - "version": "4.12.0", - "license": "Apache-2.0", - "dependencies": { - "tslib": "^2.6.2" + "peerDependencies": { + "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" }, - "engines": { - "node": ">=18.0.0" + "peerDependenciesMeta": { + "node-notifier": { + "optional": true + } } }, - "node_modules/@smithy/url-parser": { - "version": "4.2.8", - "license": "Apache-2.0", - "dependencies": { - "@smithy/querystring-parser": "^4.2.8", - "@smithy/types": "^4.12.0", - "tslib": "^2.6.2" - }, + "node_modules/@jest/diff-sequences": { + "version": "30.0.1", + "license": "MIT", "engines": { - "node": ">=18.0.0" + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" } }, - "node_modules/@smithy/util-base64": { - "version": "4.3.0", - "license": "Apache-2.0", + "node_modules/@jest/environment": { + "version": "30.2.0", + "license": "MIT", "dependencies": { - "@smithy/util-buffer-from": "^4.2.0", - "@smithy/util-utf8": "^4.2.0", - "tslib": "^2.6.2" + "@jest/fake-timers": "30.2.0", + "@jest/types": "30.2.0", + "@types/node": "*", + "jest-mock": "30.2.0" }, "engines": { - "node": ">=18.0.0" + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" } }, - "node_modules/@smithy/util-body-length-browser": { - "version": "4.2.0", - "license": "Apache-2.0", + "node_modules/@jest/environment-jsdom-abstract": { + "version": "30.2.0", + "dev": true, + "license": "MIT", "dependencies": { - "tslib": "^2.6.2" + "@jest/environment": "30.2.0", + "@jest/fake-timers": "30.2.0", + "@jest/types": "30.2.0", + "@types/jsdom": "^21.1.7", + "@types/node": "*", + "jest-mock": "30.2.0", + "jest-util": "30.2.0" }, "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/@smithy/util-body-length-node": { - "version": "4.2.1", - "license": "Apache-2.0", - "dependencies": { - "tslib": "^2.6.2" + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" }, - "engines": { - "node": ">=18.0.0" + "peerDependencies": { + "canvas": "^3.0.0", + "jsdom": "*" + }, + "peerDependenciesMeta": { + "canvas": { + "optional": true + } } }, - "node_modules/@smithy/util-buffer-from": { - "version": "4.2.0", - "license": "Apache-2.0", + "node_modules/@jest/expect": { + "version": "30.2.0", + "license": "MIT", "dependencies": { - "@smithy/is-array-buffer": "^4.2.0", - "tslib": "^2.6.2" + "expect": "30.2.0", + "jest-snapshot": "30.2.0" }, "engines": { - "node": ">=18.0.0" + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" } }, - "node_modules/@smithy/util-config-provider": { - "version": "4.2.0", - "license": "Apache-2.0", + "node_modules/@jest/expect-utils": { + "version": "30.2.0", + "license": "MIT", "dependencies": { - "tslib": "^2.6.2" + "@jest/get-type": "30.1.0" }, "engines": { - "node": ">=18.0.0" + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" } }, - "node_modules/@smithy/util-defaults-mode-browser": { - "version": "4.3.29", - "license": "Apache-2.0", + "node_modules/@jest/fake-timers": { + "version": "30.2.0", + "license": "MIT", "dependencies": { - "@smithy/property-provider": "^4.2.8", - "@smithy/smithy-client": "^4.11.2", - "@smithy/types": "^4.12.0", - "tslib": "^2.6.2" + "@jest/types": "30.2.0", + "@sinonjs/fake-timers": "^13.0.0", + "@types/node": "*", + "jest-message-util": "30.2.0", + "jest-mock": "30.2.0", + "jest-util": "30.2.0" }, "engines": { - "node": ">=18.0.0" + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" } }, - "node_modules/@smithy/util-defaults-mode-node": { - "version": "4.2.32", - "license": "Apache-2.0", - "dependencies": { - "@smithy/config-resolver": "^4.4.6", - "@smithy/credential-provider-imds": "^4.2.8", - "@smithy/node-config-provider": "^4.3.8", - "@smithy/property-provider": "^4.2.8", - "@smithy/smithy-client": "^4.11.2", - "@smithy/types": "^4.12.0", - "tslib": "^2.6.2" - }, + "node_modules/@jest/get-type": { + "version": "30.1.0", + "license": "MIT", "engines": { - "node": ">=18.0.0" + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" } }, - "node_modules/@smithy/util-endpoints": { - "version": "3.2.8", - "license": "Apache-2.0", + "node_modules/@jest/globals": { + "version": "30.2.0", + "license": "MIT", "dependencies": { - "@smithy/node-config-provider": "^4.3.8", - "@smithy/types": "^4.12.0", - "tslib": "^2.6.2" + "@jest/environment": "30.2.0", + "@jest/expect": "30.2.0", + "@jest/types": "30.2.0", + "jest-mock": "30.2.0" }, "engines": { - "node": ">=18.0.0" + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" } }, - "node_modules/@smithy/util-hex-encoding": { - "version": "4.2.0", - "license": "Apache-2.0", + "node_modules/@jest/pattern": { + "version": "30.0.1", + "license": "MIT", "dependencies": { - "tslib": "^2.6.2" + "@types/node": "*", + "jest-regex-util": "30.0.1" }, "engines": { - "node": ">=18.0.0" + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" } }, - "node_modules/@smithy/util-middleware": { - "version": "4.2.8", - "license": "Apache-2.0", + "node_modules/@jest/reporters": { + "version": "30.2.0", + "dev": true, + "license": "MIT", "dependencies": { - "@smithy/types": "^4.12.0", - "tslib": "^2.6.2" + "@bcoe/v8-coverage": "^0.2.3", + "@jest/console": "30.2.0", + "@jest/test-result": "30.2.0", + "@jest/transform": "30.2.0", + "@jest/types": "30.2.0", + "@jridgewell/trace-mapping": "^0.3.25", + "@types/node": "*", + "chalk": "^4.1.2", + "collect-v8-coverage": "^1.0.2", + "exit-x": "^0.2.2", + "glob": "^10.3.10", + "graceful-fs": "^4.2.11", + "istanbul-lib-coverage": "^3.0.0", + "istanbul-lib-instrument": "^6.0.0", + "istanbul-lib-report": "^3.0.0", + "istanbul-lib-source-maps": "^5.0.0", + "istanbul-reports": "^3.1.3", + "jest-message-util": "30.2.0", + "jest-util": "30.2.0", + "jest-worker": "30.2.0", + "slash": "^3.0.0", + "string-length": "^4.0.2", + "v8-to-istanbul": "^9.0.1" }, "engines": { - "node": ">=18.0.0" + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + }, + "peerDependencies": { + "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" + }, + "peerDependenciesMeta": { + "node-notifier": { + "optional": true + } } }, - "node_modules/@smithy/util-retry": { - "version": "4.2.8", - "license": "Apache-2.0", + "node_modules/@jest/reporters/node_modules/glob": { + "version": "10.5.0", + "dev": true, + "license": "ISC", "dependencies": { - "@smithy/service-error-classification": "^4.2.8", - "@smithy/types": "^4.12.0", - "tslib": "^2.6.2" + "foreground-child": "^3.1.0", + "jackspeak": "^3.1.2", + "minimatch": "^9.0.4", + "minipass": "^7.1.2", + "package-json-from-dist": "^1.0.0", + "path-scurry": "^1.11.1" }, - "engines": { - "node": ">=18.0.0" + "bin": { + "glob": "dist/esm/bin.mjs" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/@smithy/util-stream": { - "version": "4.5.11", - "license": "Apache-2.0", + "node_modules/@jest/reporters/node_modules/lru-cache": { + "version": "10.4.3", + "dev": true, + "license": "ISC" + }, + "node_modules/@jest/reporters/node_modules/path-scurry": { + "version": "1.11.1", + "dev": true, + "license": "BlueOak-1.0.0", "dependencies": { - "@smithy/fetch-http-handler": "^5.3.9", - "@smithy/node-http-handler": "^4.4.9", - "@smithy/types": "^4.12.0", - "@smithy/util-base64": "^4.3.0", - "@smithy/util-buffer-from": "^4.2.0", - "@smithy/util-hex-encoding": "^4.2.0", - "@smithy/util-utf8": "^4.2.0", - "tslib": "^2.6.2" + "lru-cache": "^10.2.0", + "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" }, "engines": { - "node": ">=18.0.0" + "node": ">=16 || 14 >=14.18" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/@smithy/util-uri-escape": { - "version": "4.2.0", - "license": "Apache-2.0", + "node_modules/@jest/schemas": { + "version": "30.0.5", + "license": "MIT", "dependencies": { - "tslib": "^2.6.2" + "@sinclair/typebox": "^0.34.0" }, "engines": { - "node": ">=18.0.0" + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" } }, - "node_modules/@smithy/util-utf8": { - "version": "4.2.0", - "license": "Apache-2.0", + "node_modules/@jest/snapshot-utils": { + "version": "30.2.0", + "license": "MIT", "dependencies": { - "@smithy/util-buffer-from": "^4.2.0", - "tslib": "^2.6.2" + "@jest/types": "30.2.0", + "chalk": "^4.1.2", + "graceful-fs": "^4.2.11", + "natural-compare": "^1.4.0" }, "engines": { - "node": ">=18.0.0" + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" } }, - "node_modules/@smithy/util-waiter": { - "version": "4.2.8", - "license": "Apache-2.0", + "node_modules/@jest/source-map": { + "version": "30.0.1", + "dev": true, + "license": "MIT", "dependencies": { - "@smithy/abort-controller": "^4.2.8", - "@smithy/types": "^4.12.0", - "tslib": "^2.6.2" + "@jridgewell/trace-mapping": "^0.3.25", + "callsites": "^3.1.0", + "graceful-fs": "^4.2.11" }, "engines": { - "node": ">=18.0.0" + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" } }, - "node_modules/@smithy/uuid": { - "version": "1.1.0", - "license": "Apache-2.0", + "node_modules/@jest/test-result": { + "version": "30.2.0", + "dev": true, + "license": "MIT", "dependencies": { - "tslib": "^2.6.2" + "@jest/console": "30.2.0", + "@jest/types": "30.2.0", + "@types/istanbul-lib-coverage": "^2.0.6", + "collect-v8-coverage": "^1.0.2" }, "engines": { - "node": ">=18.0.0" + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" } }, - "node_modules/@stoplight/better-ajv-errors": { - "version": "1.0.3", + "node_modules/@jest/test-sequencer": { + "version": "30.2.0", "dev": true, - "license": "Apache-2.0", + "license": "MIT", "dependencies": { - "jsonpointer": "^5.0.0", - "leven": "^3.1.0" + "@jest/test-result": "30.2.0", + "graceful-fs": "^4.2.11", + "jest-haste-map": "30.2.0", + "slash": "^3.0.0" }, "engines": { - "node": "^12.20 || >= 14.13" - }, - "peerDependencies": { - "ajv": ">=8" + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" } }, - "node_modules/@stoplight/json": { - "version": "3.21.7", - "dev": true, - "license": "Apache-2.0", + "node_modules/@jest/transform": { + "version": "30.2.0", + "license": "MIT", "dependencies": { - "@stoplight/ordered-object-literal": "^1.0.3", - "@stoplight/path": "^1.3.2", - "@stoplight/types": "^13.6.0", - "jsonc-parser": "~2.2.1", - "lodash": "^4.17.21", - "safe-stable-stringify": "^1.1" + "@babel/core": "^7.27.4", + "@jest/types": "30.2.0", + "@jridgewell/trace-mapping": "^0.3.25", + "babel-plugin-istanbul": "^7.0.1", + "chalk": "^4.1.2", + "convert-source-map": "^2.0.0", + "fast-json-stable-stringify": "^2.1.0", + "graceful-fs": "^4.2.11", + "jest-haste-map": "30.2.0", + "jest-regex-util": "30.0.1", + "jest-util": "30.2.0", + "micromatch": "^4.0.8", + "pirates": "^4.0.7", + "slash": "^3.0.0", + "write-file-atomic": "^5.0.1" }, "engines": { - "node": ">=8.3.0" + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" } }, - "node_modules/@stoplight/json-ref-readers": { - "version": "1.2.2", - "dev": true, - "license": "Apache-2.0", + "node_modules/@jest/types": { + "version": "30.2.0", + "license": "MIT", "dependencies": { - "node-fetch": "^2.6.0", - "tslib": "^1.14.1" + "@jest/pattern": "30.0.1", + "@jest/schemas": "30.0.5", + "@types/istanbul-lib-coverage": "^2.0.6", + "@types/istanbul-reports": "^3.0.4", + "@types/node": "*", + "@types/yargs": "^17.0.33", + "chalk": "^4.1.2" }, "engines": { - "node": ">=8.3.0" + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" } }, - "node_modules/@stoplight/json-ref-readers/node_modules/tslib": { - "version": "1.14.1", - "dev": true, - "license": "0BSD" + "node_modules/@jridgewell/gen-mapping": { + "version": "0.3.13", + "license": "MIT", + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.5.0", + "@jridgewell/trace-mapping": "^0.3.24" + } }, - "node_modules/@stoplight/json-ref-resolver": { - "version": "3.1.6", - "dev": true, - "license": "Apache-2.0", + "node_modules/@jridgewell/remapping": { + "version": "2.3.5", + "license": "MIT", "dependencies": { - "@stoplight/json": "^3.21.0", - "@stoplight/path": "^1.3.2", - "@stoplight/types": "^12.3.0 || ^13.0.0", - "@types/urijs": "^1.19.19", - "dependency-graph": "~0.11.0", - "fast-memoize": "^2.5.2", - "immer": "^9.0.6", - "lodash": "^4.17.21", - "tslib": "^2.6.0", - "urijs": "^1.19.11" - }, - "engines": { - "node": ">=8.3.0" + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.24" } }, - "node_modules/@stoplight/json/node_modules/jsonc-parser": { - "version": "2.2.1", - "dev": true, - "license": "MIT" + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.2", + "license": "MIT", + "engines": { + "node": ">=6.0.0" + } }, - "node_modules/@stoplight/json/node_modules/safe-stable-stringify": { - "version": "1.1.1", - "dev": true, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.5.5", "license": "MIT" }, - "node_modules/@stoplight/ordered-object-literal": { - "version": "1.0.5", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": ">=8" + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.31", + "license": "MIT", + "dependencies": { + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" } }, - "node_modules/@stoplight/path": { - "version": "1.3.2", + "node_modules/@js-sdsl/ordered-map": { + "version": "4.4.2", "dev": true, - "license": "Apache-2.0", - "engines": { - "node": ">=8" + "license": "MIT", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/js-sdsl" } }, - "node_modules/@stoplight/spectral-cli": { - "version": "6.15.0", + "node_modules/@jsdevtools/ono": { + "version": "7.1.3", + "license": "MIT" + }, + "node_modules/@jsep-plugin/assignment": { + "version": "1.3.0", "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@stoplight/json": "~3.21.0", - "@stoplight/path": "1.3.2", - "@stoplight/spectral-core": "^1.19.5", - "@stoplight/spectral-formatters": "^1.4.1", - "@stoplight/spectral-parsers": "^1.0.4", - "@stoplight/spectral-ref-resolver": "^1.0.4", - "@stoplight/spectral-ruleset-bundler": "^1.6.0", - "@stoplight/spectral-ruleset-migrator": "^1.11.0", - "@stoplight/spectral-rulesets": ">=1", - "@stoplight/spectral-runtime": "^1.1.2", - "@stoplight/types": "^13.6.0", - "chalk": "4.1.2", - "fast-glob": "~3.2.12", - "hpagent": "~1.2.0", - "lodash": "~4.17.21", - "pony-cause": "^1.1.1", - "stacktracey": "^2.1.8", - "tslib": "^2.8.1", - "yargs": "~17.7.2" - }, - "bin": { - "spectral": "dist/index.js" - }, + "license": "MIT", "engines": { - "node": "^16.20 || ^18.18 || >= 20.17" + "node": ">= 10.16.0" + }, + "peerDependencies": { + "jsep": "^0.4.0||^1.0.0" } }, - "node_modules/@stoplight/spectral-cli/node_modules/fast-glob": { - "version": "3.2.12", + "node_modules/@jsep-plugin/regex": { + "version": "1.0.4", "dev": true, "license": "MIT", - "dependencies": { - "@nodelib/fs.stat": "^2.0.2", - "@nodelib/fs.walk": "^1.2.3", - "glob-parent": "^5.1.2", - "merge2": "^1.3.0", - "micromatch": "^4.0.4" - }, "engines": { - "node": ">=8.6.0" + "node": ">= 10.16.0" + }, + "peerDependencies": { + "jsep": "^0.4.0||^1.0.0" } }, - "node_modules/@stoplight/spectral-core": { - "version": "1.21.0", + "node_modules/@jsep-plugin/ternary": { + "version": "1.1.4", "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@stoplight/better-ajv-errors": "1.0.3", - "@stoplight/json": "~3.21.0", - "@stoplight/path": "1.3.2", - "@stoplight/spectral-parsers": "^1.0.0", - "@stoplight/spectral-ref-resolver": "^1.0.4", - "@stoplight/spectral-runtime": "^1.1.2", - "@stoplight/types": "~13.6.0", - "@types/es-aggregate-error": "^1.0.2", - "@types/json-schema": "^7.0.11", - "ajv": "^8.17.1", - "ajv-errors": "~3.0.0", - "ajv-formats": "~2.1.1", - "es-aggregate-error": "^1.0.7", - "jsonpath-plus": "^10.3.0", - "lodash": "~4.17.23", - "lodash.topath": "^4.5.2", - "minimatch": "3.1.2", - "nimma": "0.2.3", - "pony-cause": "^1.1.1", - "simple-eval": "1.0.1", - "tslib": "^2.8.1" - }, + "license": "MIT", "engines": { - "node": "^16.20 || ^18.18 || >= 20.17" + "node": ">= 10.16.0" + }, + "peerDependencies": { + "jsep": "^0.4.0||^1.0.0" } }, - "node_modules/@stoplight/spectral-core/node_modules/@stoplight/types": { - "version": "13.6.0", + "node_modules/@lukeed/csprng": { + "version": "1.1.0", "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@types/json-schema": "^7.0.4", - "utility-types": "^3.10.0" - }, + "license": "MIT", "engines": { - "node": "^12.20 || >=14.13" + "node": ">=8" } }, - "node_modules/@stoplight/spectral-core/node_modules/brace-expansion": { - "version": "1.1.12", + "node_modules/@nestjs/axios": { + "version": "4.0.1", "dev": true, "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" + "peerDependencies": { + "@nestjs/common": "^10.0.0 || ^11.0.0", + "axios": "^1.3.1", + "rxjs": "^7.0.0" } }, - "node_modules/@stoplight/spectral-core/node_modules/minimatch": { - "version": "3.1.2", + "node_modules/@nestjs/common": { + "version": "11.1.11", "dev": true, - "license": "ISC", + "license": "MIT", "dependencies": { - "brace-expansion": "^1.1.7" + "file-type": "21.2.0", + "iterare": "1.2.1", + "load-esm": "1.0.3", + "tslib": "2.8.1", + "uid": "2.0.2" }, - "engines": { - "node": "*" - } - }, - "node_modules/@stoplight/spectral-formats": { - "version": "1.8.2", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@stoplight/json": "^3.17.0", - "@stoplight/spectral-core": "^1.19.2", - "@types/json-schema": "^7.0.7", - "tslib": "^2.8.1" + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/nest" }, - "engines": { - "node": "^16.20 || ^18.18 || >= 20.17" + "peerDependencies": { + "class-transformer": ">=0.4.1", + "class-validator": ">=0.13.2", + "reflect-metadata": "^0.1.12 || ^0.2.0", + "rxjs": "^7.1.0" + }, + "peerDependenciesMeta": { + "class-transformer": { + "optional": true + }, + "class-validator": { + "optional": true + } } }, - "node_modules/@stoplight/spectral-formatters": { - "version": "1.5.0", + "node_modules/@nestjs/core": { + "version": "11.1.11", "dev": true, - "license": "Apache-2.0", + "hasInstallScript": true, + "license": "MIT", "dependencies": { - "@stoplight/path": "^1.3.2", - "@stoplight/spectral-core": "^1.19.4", - "@stoplight/spectral-runtime": "^1.1.2", - "@stoplight/types": "^13.15.0", - "@types/markdown-escape": "^1.1.3", - "chalk": "4.1.2", - "cliui": "7.0.4", - "lodash": "^4.17.21", - "markdown-escape": "^2.0.0", - "node-sarif-builder": "^2.0.3", - "strip-ansi": "6.0", - "text-table": "^0.2.0", - "tslib": "^2.8.1" + "@nuxt/opencollective": "0.4.1", + "fast-safe-stringify": "2.1.1", + "iterare": "1.2.1", + "path-to-regexp": "8.3.0", + "tslib": "2.8.1", + "uid": "2.0.2" }, "engines": { - "node": "^16.20 || ^18.18 || >= 20.17" + "node": ">= 20" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/nest" + }, + "peerDependencies": { + "@nestjs/common": "^11.0.0", + "@nestjs/microservices": "^11.0.0", + "@nestjs/platform-express": "^11.0.0", + "@nestjs/websockets": "^11.0.0", + "reflect-metadata": "^0.1.12 || ^0.2.0", + "rxjs": "^7.1.0" + }, + "peerDependenciesMeta": { + "@nestjs/microservices": { + "optional": true + }, + "@nestjs/platform-express": { + "optional": true + }, + "@nestjs/websockets": { + "optional": true + } } }, - "node_modules/@stoplight/spectral-formatters/node_modules/cliui": { - "version": "7.0.4", + "node_modules/@next/eslint-plugin-next": { + "version": "15.5.9", "dev": true, - "license": "ISC", + "license": "MIT", "dependencies": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.0", - "wrap-ansi": "^7.0.0" + "fast-glob": "3.3.1" } }, - "node_modules/@stoplight/spectral-formatters/node_modules/wrap-ansi": { - "version": "7.0.0", - "dev": true, + "node_modules/@nhsdigital/nhs-notify-event-schemas-letter-rendering": { + "version": "2.0.1", "license": "MIT", "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + "zod": "^4.0.17" } }, - "node_modules/@stoplight/spectral-functions": { - "version": "1.10.1", - "dev": true, - "license": "Apache-2.0", + "node_modules/@nhsdigital/nhs-notify-event-schemas-letter-rendering-v1": { + "name": "@nhsdigital/nhs-notify-event-schemas-letter-rendering", + "version": "1.1.5", "dependencies": { - "@stoplight/better-ajv-errors": "1.0.3", - "@stoplight/json": "^3.17.1", - "@stoplight/spectral-core": "^1.19.4", - "@stoplight/spectral-formats": "^1.8.1", - "@stoplight/spectral-runtime": "^1.1.2", - "ajv": "^8.17.1", - "ajv-draft-04": "~1.0.0", - "ajv-errors": "~3.0.0", - "ajv-formats": "~2.1.1", - "lodash": "~4.17.21", - "tslib": "^2.8.1" - }, - "engines": { - "node": "^16.20 || ^18.18 || >= 20.17" + "@asyncapi/bundler": "^0.6.4", + "zod": "^4.1.11" } }, - "node_modules/@stoplight/spectral-parsers": { - "version": "1.0.5", + "node_modules/@nhsdigital/nhs-notify-event-schemas-supplier-api": { + "resolved": "internal/events", + "link": true + }, + "node_modules/@nhsdigital/notify-supplier-api-consumer-contracts": { + "resolved": "pact-contracts", + "link": true + }, + "node_modules/@nodelib/fs.scandir": { + "version": "2.1.5", "dev": true, - "license": "Apache-2.0", + "license": "MIT", "dependencies": { - "@stoplight/json": "~3.21.0", - "@stoplight/types": "^14.1.1", - "@stoplight/yaml": "~4.3.0", - "tslib": "^2.8.1" + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" }, "engines": { - "node": "^16.20 || ^18.18 || >= 20.17" + "node": ">= 8" } }, - "node_modules/@stoplight/spectral-parsers/node_modules/@stoplight/types": { - "version": "14.1.1", + "node_modules/@nodelib/fs.stat": { + "version": "2.0.5", "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@types/json-schema": "^7.0.4", - "utility-types": "^3.10.0" - }, + "license": "MIT", "engines": { - "node": "^12.20 || >=14.13" + "node": ">= 8" } }, - "node_modules/@stoplight/spectral-ref-resolver": { - "version": "1.0.5", + "node_modules/@nodelib/fs.walk": { + "version": "1.2.8", "dev": true, - "license": "Apache-2.0", + "license": "MIT", "dependencies": { - "@stoplight/json-ref-readers": "1.2.2", - "@stoplight/json-ref-resolver": "~3.1.6", - "@stoplight/spectral-runtime": "^1.1.2", - "dependency-graph": "0.11.0", - "tslib": "^2.8.1" + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" }, "engines": { - "node": "^16.20 || ^18.18 || >= 20.17" + "node": ">= 8" } }, - "node_modules/@stoplight/spectral-ruleset-bundler": { - "version": "1.6.3", + "node_modules/@nolyfill/is-core-module": { + "version": "1.0.39", "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@rollup/plugin-commonjs": "~22.0.2", - "@stoplight/path": "1.3.2", - "@stoplight/spectral-core": ">=1", - "@stoplight/spectral-formats": "^1.8.1", - "@stoplight/spectral-functions": ">=1", - "@stoplight/spectral-parsers": ">=1", - "@stoplight/spectral-ref-resolver": "^1.0.4", - "@stoplight/spectral-ruleset-migrator": "^1.9.6", - "@stoplight/spectral-rulesets": ">=1", - "@stoplight/spectral-runtime": "^1.1.2", - "@stoplight/types": "^13.6.0", - "@types/node": "*", - "pony-cause": "1.1.1", - "rollup": "~2.79.2", - "tslib": "^2.8.1", - "validate-npm-package-name": "3.0.0" - }, + "license": "MIT", "engines": { - "node": "^16.20 || ^18.18 || >= 20.17" + "node": ">=12.4.0" } }, - "node_modules/@stoplight/spectral-ruleset-migrator": { - "version": "1.11.3", + "node_modules/@nuxt/opencollective": { + "version": "0.4.1", "dev": true, - "license": "Apache-2.0", + "license": "MIT", "dependencies": { - "@stoplight/json": "~3.21.0", - "@stoplight/ordered-object-literal": "~1.0.4", - "@stoplight/path": "1.3.2", - "@stoplight/spectral-functions": "^1.9.1", - "@stoplight/spectral-runtime": "^1.1.2", - "@stoplight/types": "^13.6.0", - "@stoplight/yaml": "~4.2.3", - "@types/node": "*", - "ajv": "^8.17.1", - "ast-types": "0.14.2", - "astring": "^1.9.0", - "reserved": "0.1.2", - "tslib": "^2.8.1", - "validate-npm-package-name": "3.0.0" + "consola": "^3.2.3" + }, + "bin": { + "opencollective": "bin/opencollective.js" }, "engines": { - "node": "^16.20 || ^18.18 || >= 20.17" + "node": "^14.18.0 || >=16.10.0", + "npm": ">=5.10.0" } }, - "node_modules/@stoplight/spectral-ruleset-migrator/node_modules/@stoplight/yaml": { - "version": "4.2.3", + "node_modules/@nuxtjs/opencollective": { + "version": "0.3.2", "dev": true, - "license": "Apache-2.0", + "license": "MIT", "dependencies": { - "@stoplight/ordered-object-literal": "^1.0.1", - "@stoplight/types": "^13.0.0", - "@stoplight/yaml-ast-parser": "0.0.48", - "tslib": "^2.2.0" + "chalk": "^4.1.0", + "consola": "^2.15.0", + "node-fetch": "^2.6.1" + }, + "bin": { + "opencollective": "bin/opencollective.js" }, "engines": { - "node": ">=10.8" + "node": ">=8.0.0", + "npm": ">=5.0.0" } }, - "node_modules/@stoplight/spectral-ruleset-migrator/node_modules/@stoplight/yaml-ast-parser": { - "version": "0.0.48", + "node_modules/@nuxtjs/opencollective/node_modules/consola": { + "version": "2.15.3", "dev": true, - "license": "Apache-2.0" + "license": "MIT" }, - "node_modules/@stoplight/spectral-ruleset-migrator/node_modules/ast-types": { - "version": "0.14.2", + "node_modules/@openapitools/openapi-generator-cli": { + "version": "2.27.0", "dev": true, - "license": "MIT", + "hasInstallScript": true, + "license": "Apache-2.0", "dependencies": { - "tslib": "^2.0.1" + "@nestjs/axios": "4.0.1", + "@nestjs/common": "11.1.11", + "@nestjs/core": "11.1.11", + "@nuxtjs/opencollective": "0.3.2", + "axios": "1.13.2", + "chalk": "4.1.2", + "commander": "8.3.0", + "compare-versions": "6.1.1", + "concurrently": "9.2.1", + "console.table": "0.10.0", + "fs-extra": "11.3.3", + "glob": "13.0.0", + "inquirer": "8.2.7", + "proxy-agent": "6.5.0", + "reflect-metadata": "0.2.2", + "rxjs": "7.8.2", + "tslib": "2.8.1" + }, + "bin": { + "openapi-generator-cli": "main.js" }, "engines": { - "node": ">=4" + "node": ">=16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/openapi_generator" } }, - "node_modules/@stoplight/spectral-rulesets": { - "version": "1.22.0", + "node_modules/@opentelemetry/api": { + "version": "1.9.0", "dev": true, "license": "Apache-2.0", - "dependencies": { - "@asyncapi/specs": "^6.8.0", - "@stoplight/better-ajv-errors": "1.0.3", - "@stoplight/json": "^3.17.0", - "@stoplight/spectral-core": "^1.19.4", - "@stoplight/spectral-formats": "^1.8.1", - "@stoplight/spectral-functions": "^1.9.1", - "@stoplight/spectral-runtime": "^1.1.2", - "@stoplight/types": "^13.6.0", - "@types/json-schema": "^7.0.7", - "ajv": "^8.17.1", - "ajv-formats": "~2.1.1", - "json-schema-traverse": "^1.0.0", - "leven": "3.1.0", - "lodash": "~4.17.21", - "tslib": "^2.8.1" - }, "engines": { - "node": "^16.20 || ^18.18 || >= 20.17" + "node": ">=8.0.0" } }, - "node_modules/@stoplight/spectral-runtime": { - "version": "1.1.4", + "node_modules/@opentelemetry/api-logs": { + "version": "0.53.0", "dev": true, "license": "Apache-2.0", "dependencies": { - "@stoplight/json": "^3.20.1", - "@stoplight/path": "^1.3.2", - "@stoplight/types": "^13.6.0", - "abort-controller": "^3.0.0", - "lodash": "^4.17.21", - "node-fetch": "^2.7.0", - "tslib": "^2.8.1" + "@opentelemetry/api": "^1.0.0" }, "engines": { - "node": "^16.20 || ^18.18 || >= 20.17" + "node": ">=14" } }, - "node_modules/@stoplight/types": { - "version": "13.20.0", + "node_modules/@opentelemetry/context-async-hooks": { + "version": "1.26.0", "dev": true, "license": "Apache-2.0", - "dependencies": { - "@types/json-schema": "^7.0.4", - "utility-types": "^3.10.0" - }, "engines": { - "node": "^12.20 || >=14.13" + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": ">=1.0.0 <1.10.0" } }, - "node_modules/@stoplight/yaml": { - "version": "4.3.0", + "node_modules/@opentelemetry/core": { + "version": "1.26.0", "dev": true, "license": "Apache-2.0", "dependencies": { - "@stoplight/ordered-object-literal": "^1.0.5", - "@stoplight/types": "^14.1.1", - "@stoplight/yaml-ast-parser": "0.0.50", - "tslib": "^2.2.0" + "@opentelemetry/semantic-conventions": "1.27.0" }, "engines": { - "node": ">=10.8" + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": ">=1.0.0 <1.10.0" } }, - "node_modules/@stoplight/yaml-ast-parser": { - "version": "0.0.50", - "dev": true, - "license": "Apache-2.0" - }, - "node_modules/@stoplight/yaml/node_modules/@stoplight/types": { - "version": "14.1.1", + "node_modules/@opentelemetry/exporter-trace-otlp-http": { + "version": "0.53.0", "dev": true, "license": "Apache-2.0", "dependencies": { - "@types/json-schema": "^7.0.4", - "utility-types": "^3.10.0" + "@opentelemetry/core": "1.26.0", + "@opentelemetry/otlp-exporter-base": "0.53.0", + "@opentelemetry/otlp-transformer": "0.53.0", + "@opentelemetry/resources": "1.26.0", + "@opentelemetry/sdk-trace-base": "1.26.0" }, "engines": { - "node": "^12.20 || >=14.13" + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.0.0" } }, - "node_modules/@stylistic/eslint-plugin": { - "version": "3.1.0", + "node_modules/@opentelemetry/otlp-exporter-base": { + "version": "0.53.0", "dev": true, - "license": "MIT", - "optional": true, - "peer": true, + "license": "Apache-2.0", "dependencies": { - "@typescript-eslint/utils": "^8.13.0", - "eslint-visitor-keys": "^4.2.0", - "espree": "^10.3.0", - "estraverse": "^5.3.0", - "picomatch": "^4.0.2" + "@opentelemetry/core": "1.26.0", + "@opentelemetry/otlp-transformer": "0.53.0" }, "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + "node": ">=14" }, "peerDependencies": { - "eslint": ">=8.40.0" + "@opentelemetry/api": "^1.0.0" } }, - "node_modules/@tokenizer/inflate": { - "version": "0.4.1", + "node_modules/@opentelemetry/otlp-transformer": { + "version": "0.53.0", "dev": true, - "license": "MIT", + "license": "Apache-2.0", "dependencies": { - "debug": "^4.4.3", - "token-types": "^6.1.1" + "@opentelemetry/api-logs": "0.53.0", + "@opentelemetry/core": "1.26.0", + "@opentelemetry/resources": "1.26.0", + "@opentelemetry/sdk-logs": "0.53.0", + "@opentelemetry/sdk-metrics": "1.26.0", + "@opentelemetry/sdk-trace-base": "1.26.0", + "protobufjs": "^7.3.0" }, "engines": { - "node": ">=18" + "node": ">=14" }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/Borewit" + "peerDependencies": { + "@opentelemetry/api": "^1.3.0" } }, - "node_modules/@tokenizer/token": { - "version": "0.3.0", - "dev": true, - "license": "MIT" - }, - "node_modules/@tootallnate/quickjs-emscripten": { - "version": "0.23.0", - "dev": true, - "license": "MIT" - }, - "node_modules/@tsconfig/node10": { - "version": "1.0.12", - "dev": true, - "license": "MIT" - }, - "node_modules/@tsconfig/node12": { - "version": "1.0.11", - "dev": true, - "license": "MIT" - }, - "node_modules/@tsconfig/node14": { - "version": "1.0.3", - "dev": true, - "license": "MIT" - }, - "node_modules/@tsconfig/node16": { - "version": "1.0.4", - "dev": true, - "license": "MIT" - }, - "node_modules/@tsconfig/node22": { - "version": "22.0.5", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/aws-lambda": { - "version": "8.10.160", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/babel__core": { - "version": "7.20.5", + "node_modules/@opentelemetry/propagator-b3": { + "version": "1.26.0", "dev": true, - "license": "MIT", + "license": "Apache-2.0", "dependencies": { - "@babel/parser": "^7.20.7", - "@babel/types": "^7.20.7", - "@types/babel__generator": "*", - "@types/babel__template": "*", - "@types/babel__traverse": "*" + "@opentelemetry/core": "1.26.0" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": ">=1.0.0 <1.10.0" } }, - "node_modules/@types/babel__generator": { - "version": "7.27.0", + "node_modules/@opentelemetry/propagator-jaeger": { + "version": "1.26.0", "dev": true, - "license": "MIT", + "license": "Apache-2.0", "dependencies": { - "@babel/types": "^7.0.0" + "@opentelemetry/core": "1.26.0" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": ">=1.0.0 <1.10.0" } }, - "node_modules/@types/babel__template": { - "version": "7.4.4", + "node_modules/@opentelemetry/resources": { + "version": "1.26.0", "dev": true, - "license": "MIT", + "license": "Apache-2.0", "dependencies": { - "@babel/parser": "^7.1.0", - "@babel/types": "^7.0.0" + "@opentelemetry/core": "1.26.0", + "@opentelemetry/semantic-conventions": "1.27.0" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": ">=1.0.0 <1.10.0" } }, - "node_modules/@types/babel__traverse": { - "version": "7.28.0", + "node_modules/@opentelemetry/sdk-logs": { + "version": "0.53.0", "dev": true, - "license": "MIT", + "license": "Apache-2.0", "dependencies": { - "@babel/types": "^7.28.2" + "@opentelemetry/api-logs": "0.53.0", + "@opentelemetry/core": "1.26.0", + "@opentelemetry/resources": "1.26.0" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": ">=1.4.0 <1.10.0" } }, - "node_modules/@types/docker-modem": { - "version": "3.0.6", + "node_modules/@opentelemetry/sdk-metrics": { + "version": "1.26.0", "dev": true, - "license": "MIT", + "license": "Apache-2.0", "dependencies": { - "@types/node": "*", - "@types/ssh2": "*" + "@opentelemetry/core": "1.26.0", + "@opentelemetry/resources": "1.26.0" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": ">=1.3.0 <1.10.0" } }, - "node_modules/@types/dockerode": { - "version": "3.3.47", + "node_modules/@opentelemetry/sdk-trace-base": { + "version": "1.26.0", "dev": true, - "license": "MIT", + "license": "Apache-2.0", "dependencies": { - "@types/docker-modem": "*", - "@types/node": "*", - "@types/ssh2": "*" + "@opentelemetry/core": "1.26.0", + "@opentelemetry/resources": "1.26.0", + "@opentelemetry/semantic-conventions": "1.27.0" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": ">=1.0.0 <1.10.0" } }, - "node_modules/@types/es-aggregate-error": { - "version": "1.0.6", + "node_modules/@opentelemetry/sdk-trace-node": { + "version": "1.26.0", "dev": true, - "license": "MIT", + "license": "Apache-2.0", "dependencies": { - "@types/node": "*" + "@opentelemetry/context-async-hooks": "1.26.0", + "@opentelemetry/core": "1.26.0", + "@opentelemetry/propagator-b3": "1.26.0", + "@opentelemetry/propagator-jaeger": "1.26.0", + "@opentelemetry/sdk-trace-base": "1.26.0", + "semver": "^7.5.2" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": ">=1.0.0 <1.10.0" } }, - "node_modules/@types/estree": { - "version": "1.0.8", + "node_modules/@opentelemetry/semantic-conventions": { + "version": "1.27.0", "dev": true, - "license": "MIT" - }, - "node_modules/@types/istanbul-lib-coverage": { - "version": "2.0.6", - "license": "MIT" - }, - "node_modules/@types/istanbul-lib-report": { - "version": "3.0.3", - "license": "MIT", - "dependencies": { - "@types/istanbul-lib-coverage": "*" + "license": "Apache-2.0", + "engines": { + "node": ">=14" } }, - "node_modules/@types/istanbul-reports": { - "version": "3.0.4", + "node_modules/@pact-foundation/pact": { + "version": "16.0.4", "license": "MIT", "dependencies": { - "@types/istanbul-lib-report": "*" + "@pact-foundation/pact-core": "^17.0.2", + "axios": "^1.12.2", + "body-parser": "^2.2.0", + "chalk": "4.1.2", + "express": "^5.1.0", + "graphql": "^16.11.0", + "graphql-tag": "^2.12.6", + "http-proxy": "^1.18.1", + "https-proxy-agent": "^7.0.6", + "js-base64": "^3.7.8", + "lodash": "^4.17.21", + "ramda": "^0.32.0", + "randexp": "^0.5.3", + "router": "^2.2.0", + "stack-utils": "^2.0.6" + }, + "engines": { + "node": ">=20" } }, - "node_modules/@types/jest": { - "version": "30.0.0", - "dev": true, + "node_modules/@pact-foundation/pact-core": { + "version": "17.1.0", + "cpu": [ + "x64", + "ia32", + "arm64" + ], "license": "MIT", + "os": [ + "darwin", + "linux", + "win32" + ], "dependencies": { - "expect": "^30.0.0", - "pretty-format": "^30.0.0" - } + "check-types": "11.2.3", + "detect-libc": "^2.0.3", + "node-gyp-build": "^4.6.0", + "pino": "^10.0.0", + "pino-pretty": "^13.1.1", + "underscore": "1.13.7" + }, + "engines": { + "node": ">=20" + }, + "optionalDependencies": { + "@pact-foundation/pact-core-darwin-arm64": "17.1.0", + "@pact-foundation/pact-core-darwin-x64": "17.1.0", + "@pact-foundation/pact-core-linux-arm64-glibc": "17.1.0", + "@pact-foundation/pact-core-linux-arm64-musl": "17.1.0", + "@pact-foundation/pact-core-linux-x64-glibc": "17.1.0", + "@pact-foundation/pact-core-linux-x64-musl": "17.1.0", + "@pact-foundation/pact-core-windows-x64": "17.1.0" + } }, - "node_modules/@types/jsdom": { - "version": "21.1.7", - "dev": true, + "node_modules/@pact-foundation/pact-core-linux-x64-glibc": { + "version": "17.1.0", + "cpu": [ + "x64" + ], "license": "MIT", - "dependencies": { - "@types/node": "*", - "@types/tough-cookie": "*", - "parse5": "^7.0.0" - } + "optional": true, + "os": [ + "linux" + ] }, - "node_modules/@types/json-schema": { - "version": "7.0.15", - "license": "MIT" + "node_modules/@pact-foundation/pact-core-linux-x64-musl": { + "version": "17.1.0", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] }, - "node_modules/@types/json5": { - "version": "0.0.29", - "dev": true, + "node_modules/@pinojs/redact": { + "version": "0.4.0", "license": "MIT" }, - "node_modules/@types/markdown-escape": { - "version": "1.1.3", + "node_modules/@pkgjs/parseargs": { + "version": "0.11.0", "dev": true, - "license": "MIT" + "license": "MIT", + "optional": true, + "engines": { + "node": ">=14" + } }, - "node_modules/@types/node": { - "version": "25.2.2", + "node_modules/@pkgr/core": { + "version": "0.2.9", "license": "MIT", + "engines": { + "node": "^12.20.0 || ^14.18.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/pkgr" + } + }, + "node_modules/@playwright/test": { + "version": "1.57.0", + "license": "Apache-2.0", "dependencies": { - "undici-types": "~7.16.0" + "playwright": "1.57.0" + }, + "bin": { + "playwright": "cli.js" + }, + "engines": { + "node": ">=18" } }, - "node_modules/@types/node/node_modules/undici-types": { - "version": "7.16.0", - "license": "MIT" + "node_modules/@protobufjs/aspromise": { + "version": "1.1.2", + "dev": true, + "license": "BSD-3-Clause" }, - "node_modules/@types/sarif": { - "version": "2.1.7", + "node_modules/@protobufjs/base64": { + "version": "1.1.2", "dev": true, - "license": "MIT" + "license": "BSD-3-Clause" }, - "node_modules/@types/ssh2": { - "version": "1.15.5", + "node_modules/@protobufjs/codegen": { + "version": "2.0.4", "dev": true, - "license": "MIT", - "dependencies": { - "@types/node": "^18.11.18" - } + "license": "BSD-3-Clause" }, - "node_modules/@types/ssh2-streams": { - "version": "0.1.13", + "node_modules/@protobufjs/eventemitter": { + "version": "1.1.0", "dev": true, - "license": "MIT", - "dependencies": { - "@types/node": "*" - } + "license": "BSD-3-Clause" }, - "node_modules/@types/ssh2/node_modules/@types/node": { - "version": "18.19.130", + "node_modules/@protobufjs/fetch": { + "version": "1.1.0", "dev": true, - "license": "MIT", + "license": "BSD-3-Clause", "dependencies": { - "undici-types": "~5.26.4" + "@protobufjs/aspromise": "^1.1.1", + "@protobufjs/inquire": "^1.1.0" } }, - "node_modules/@types/ssh2/node_modules/undici-types": { - "version": "5.26.5", + "node_modules/@protobufjs/float": { + "version": "1.0.2", "dev": true, - "license": "MIT" - }, - "node_modules/@types/stack-utils": { - "version": "2.0.3", - "license": "MIT" + "license": "BSD-3-Clause" }, - "node_modules/@types/stylis": { - "version": "4.2.7", + "node_modules/@protobufjs/inquire": { + "version": "1.1.0", "dev": true, - "license": "MIT" + "license": "BSD-3-Clause" }, - "node_modules/@types/tough-cookie": { - "version": "4.0.5", + "node_modules/@protobufjs/path": { + "version": "1.1.2", "dev": true, - "license": "MIT" + "license": "BSD-3-Clause" }, - "node_modules/@types/trusted-types": { - "version": "2.0.7", + "node_modules/@protobufjs/pool": { + "version": "1.1.0", "dev": true, - "license": "MIT", - "optional": true + "license": "BSD-3-Clause" }, - "node_modules/@types/urijs": { - "version": "1.19.26", + "node_modules/@protobufjs/utf8": { + "version": "1.1.0", "dev": true, - "license": "MIT" - }, - "node_modules/@types/yargs": { - "version": "17.0.35", - "license": "MIT", - "dependencies": { - "@types/yargs-parser": "*" - } - }, - "node_modules/@types/yargs-parser": { - "version": "21.0.3", - "license": "MIT" + "license": "BSD-3-Clause" }, - "node_modules/@typescript-eslint/eslint-plugin": { - "version": "8.54.0", + "node_modules/@redocly/ajv": { + "version": "8.17.1", "dev": true, "license": "MIT", "dependencies": { - "@eslint-community/regexpp": "^4.12.2", - "@typescript-eslint/scope-manager": "8.54.0", - "@typescript-eslint/type-utils": "8.54.0", - "@typescript-eslint/utils": "8.54.0", - "@typescript-eslint/visitor-keys": "8.54.0", - "ignore": "^7.0.5", - "natural-compare": "^1.4.0", - "ts-api-utils": "^2.4.0" - }, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + "fast-deep-equal": "^3.1.3", + "fast-uri": "^3.0.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2" }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "@typescript-eslint/parser": "^8.54.0", - "eslint": "^8.57.0 || ^9.0.0", - "typescript": ">=4.8.4 <6.0.0" + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" } }, - "node_modules/@typescript-eslint/parser": { - "version": "8.54.0", + "node_modules/@redocly/cli": { + "version": "1.31.0", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/scope-manager": "8.54.0", - "@typescript-eslint/types": "8.54.0", - "@typescript-eslint/typescript-estree": "8.54.0", - "@typescript-eslint/visitor-keys": "8.54.0", - "debug": "^4.4.3" - }, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + "@opentelemetry/api": "1.9.0", + "@opentelemetry/exporter-trace-otlp-http": "0.53.0", + "@opentelemetry/resources": "1.26.0", + "@opentelemetry/sdk-trace-node": "1.26.0", + "@opentelemetry/semantic-conventions": "1.27.0", + "@redocly/openapi-core": "1.31.0", + "abort-controller": "^3.0.0", + "chokidar": "^3.5.1", + "colorette": "^1.2.0", + "core-js": "^3.32.1", + "dotenv": "^16.4.7", + "form-data": "^4.0.0", + "get-port-please": "^3.0.1", + "glob": "^7.1.6", + "handlebars": "^4.7.6", + "mobx": "^6.0.4", + "pluralize": "^8.0.0", + "react": "^17.0.0 || ^18.2.0 || ^19.0.0", + "react-dom": "^17.0.0 || ^18.2.0 || ^19.0.0", + "redoc": "2.4.0", + "semver": "^7.5.2", + "simple-websocket": "^9.0.0", + "styled-components": "^6.0.7", + "yargs": "17.0.1" }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" + "bin": { + "openapi": "bin/cli.js", + "redocly": "bin/cli.js" }, - "peerDependencies": { - "eslint": "^8.57.0 || ^9.0.0", - "typescript": ">=4.8.4 <6.0.0" + "engines": { + "node": ">=18.17.0", + "npm": ">=9.5.0" } }, - "node_modules/@typescript-eslint/project-service": { - "version": "8.54.0", + "node_modules/@redocly/cli/node_modules/brace-expansion": { + "version": "1.1.12", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/tsconfig-utils": "^8.54.0", - "@typescript-eslint/types": "^8.54.0", - "debug": "^4.4.3" - }, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "typescript": ">=4.8.4 <6.0.0" + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" } }, - "node_modules/@typescript-eslint/scope-manager": { - "version": "8.54.0", + "node_modules/@redocly/cli/node_modules/cliui": { + "version": "7.0.4", "dev": true, - "license": "MIT", + "license": "ISC", "dependencies": { - "@typescript-eslint/types": "8.54.0", - "@typescript-eslint/visitor-keys": "8.54.0" - }, + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^7.0.0" + } + }, + "node_modules/@redocly/cli/node_modules/dotenv": { + "version": "16.4.7", + "dev": true, + "license": "BSD-2-Clause", "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + "node": ">=12" }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" + "url": "https://dotenvx.com" } }, - "node_modules/@typescript-eslint/tsconfig-utils": { - "version": "8.54.0", + "node_modules/@redocly/cli/node_modules/glob": { + "version": "7.2.3", "dev": true, - "license": "MIT", + "license": "ISC", + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + "node": "*" }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/@redocly/cli/node_modules/minimatch": { + "version": "3.1.2", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" }, - "peerDependencies": { - "typescript": ">=4.8.4 <6.0.0" + "engines": { + "node": "*" } }, - "node_modules/@typescript-eslint/type-utils": { - "version": "8.54.0", + "node_modules/@redocly/cli/node_modules/wrap-ansi": { + "version": "7.0.0", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/types": "8.54.0", - "@typescript-eslint/typescript-estree": "8.54.0", - "@typescript-eslint/utils": "8.54.0", - "debug": "^4.4.3", - "ts-api-utils": "^2.4.0" + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" }, "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + "node": ">=10" }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "^8.57.0 || ^9.0.0", - "typescript": ">=4.8.4 <6.0.0" + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" } }, - "node_modules/@typescript-eslint/types": { - "version": "8.54.0", + "node_modules/@redocly/cli/node_modules/yargs": { + "version": "17.0.1", "dev": true, "license": "MIT", - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + "dependencies": { + "cliui": "^7.0.2", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.0", + "y18n": "^5.0.5", + "yargs-parser": "^20.2.2" }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" + "engines": { + "node": ">=12" } }, - "node_modules/@typescript-eslint/typescript-estree": { - "version": "8.54.0", + "node_modules/@redocly/cli/node_modules/yargs-parser": { + "version": "20.2.9", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=10" + } + }, + "node_modules/@redocly/config": { + "version": "0.20.3", + "dev": true, + "license": "MIT" + }, + "node_modules/@redocly/openapi-core": { + "version": "1.31.0", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/project-service": "8.54.0", - "@typescript-eslint/tsconfig-utils": "8.54.0", - "@typescript-eslint/types": "8.54.0", - "@typescript-eslint/visitor-keys": "8.54.0", - "debug": "^4.4.3", - "minimatch": "^9.0.5", - "semver": "^7.7.3", - "tinyglobby": "^0.2.15", - "ts-api-utils": "^2.4.0" + "@redocly/ajv": "^8.11.2", + "@redocly/config": "^0.20.1", + "colorette": "^1.2.0", + "https-proxy-agent": "^7.0.5", + "js-levenshtein": "^1.1.6", + "js-yaml": "^4.1.0", + "minimatch": "^5.0.1", + "pluralize": "^8.0.0", + "yaml-ast-parser": "0.0.43" }, "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "typescript": ">=4.8.4 <6.0.0" + "node": ">=18.17.0", + "npm": ">=9.5.0" } }, - "node_modules/@typescript-eslint/typescript-estree/node_modules/minimatch": { - "version": "9.0.5", + "node_modules/@redocly/openapi-core/node_modules/minimatch": { + "version": "5.1.6", "dev": true, "license": "ISC", "dependencies": { "brace-expansion": "^2.0.1" }, "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" + "node": ">=10" } }, - "node_modules/@typescript-eslint/utils": { - "version": "8.54.0", + "node_modules/@rollup/plugin-commonjs": { + "version": "22.0.2", "dev": true, "license": "MIT", "dependencies": { - "@eslint-community/eslint-utils": "^4.9.1", - "@typescript-eslint/scope-manager": "8.54.0", - "@typescript-eslint/types": "8.54.0", - "@typescript-eslint/typescript-estree": "8.54.0" + "@rollup/pluginutils": "^3.1.0", + "commondir": "^1.0.1", + "estree-walker": "^2.0.1", + "glob": "^7.1.6", + "is-reference": "^1.2.1", + "magic-string": "^0.25.7", + "resolve": "^1.17.0" }, "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" + "node": ">= 12.0.0" }, "peerDependencies": { - "eslint": "^8.57.0 || ^9.0.0", - "typescript": ">=4.8.4 <6.0.0" + "rollup": "^2.68.0" } }, - "node_modules/@typescript-eslint/visitor-keys": { - "version": "8.54.0", + "node_modules/@rollup/plugin-commonjs/node_modules/brace-expansion": { + "version": "1.1.12", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/types": "8.54.0", - "eslint-visitor-keys": "^4.2.1" + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/@rollup/plugin-commonjs/node_modules/glob": { + "version": "7.2.3", + "dev": true, + "license": "ISC", + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" }, "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + "node": "*" }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/@ungap/structured-clone": { - "version": "1.3.0", - "license": "ISC" - }, - "node_modules/@unrs/resolver-binding-linux-x64-gnu": { - "version": "1.11.1", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@unrs/resolver-binding-linux-x64-musl": { - "version": "1.11.1", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@zeit/schemas": { - "version": "2.36.0", - "license": "MIT" - }, - "node_modules/abort-controller": { - "version": "3.0.0", + "node_modules/@rollup/plugin-commonjs/node_modules/minimatch": { + "version": "3.1.2", "dev": true, - "license": "MIT", + "license": "ISC", "dependencies": { - "event-target-shim": "^5.0.0" + "brace-expansion": "^1.1.7" }, "engines": { - "node": ">=6.5" + "node": "*" } }, - "node_modules/accepts": { - "version": "1.3.8", + "node_modules/@rollup/pluginutils": { + "version": "3.1.0", + "dev": true, "license": "MIT", "dependencies": { - "mime-types": "~2.1.34", - "negotiator": "0.6.3" + "@types/estree": "0.0.39", + "estree-walker": "^1.0.1", + "picomatch": "^2.2.2" }, "engines": { - "node": ">= 0.6" - } - }, - "node_modules/acorn": { - "version": "8.15.0", - "dev": true, - "license": "MIT", - "bin": { - "acorn": "bin/acorn" + "node": ">= 8.0.0" }, - "engines": { - "node": ">=0.4.0" + "peerDependencies": { + "rollup": "^1.20.0||^2.0.0" } }, - "node_modules/acorn-jsx": { - "version": "5.3.2", + "node_modules/@rollup/pluginutils/node_modules/@types/estree": { + "version": "0.0.39", "dev": true, - "license": "MIT", - "peerDependencies": { - "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" - } + "license": "MIT" }, - "node_modules/acorn-walk": { - "version": "8.3.4", + "node_modules/@rollup/pluginutils/node_modules/estree-walker": { + "version": "1.0.1", "dev": true, - "license": "MIT", - "dependencies": { - "acorn": "^8.11.0" - }, - "engines": { - "node": ">=0.4.0" - } + "license": "MIT" }, - "node_modules/agent-base": { - "version": "7.1.4", + "node_modules/@rollup/pluginutils/node_modules/picomatch": { + "version": "2.3.1", + "dev": true, "license": "MIT", "engines": { - "node": ">= 14" - } - }, - "node_modules/ajv": { - "version": "8.17.1", - "license": "MIT", - "dependencies": { - "fast-deep-equal": "^3.1.3", - "fast-uri": "^3.0.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2" + "node": ">=8.6" }, "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" + "url": "https://github.com/sponsors/jonschlinkert" } }, - "node_modules/ajv-draft-04": { - "version": "1.0.0", + "node_modules/@rtsao/scc": { + "version": "1.1.0", "dev": true, - "license": "MIT", - "peerDependencies": { - "ajv": "^8.5.0" - }, - "peerDependenciesMeta": { - "ajv": { - "optional": true - } - } + "license": "MIT" }, - "node_modules/ajv-errors": { - "version": "3.0.0", + "node_modules/@rushstack/eslint-patch": { + "version": "1.15.0", "dev": true, - "license": "MIT", - "peerDependencies": { - "ajv": "^8.0.1" - } + "license": "MIT" }, - "node_modules/ajv-formats": { - "version": "2.1.1", - "dev": true, - "license": "MIT", + "node_modules/@sap/contracts-provider": { + "resolved": "tests/contracts/provider", + "link": true + }, + "node_modules/@sinclair/typebox": { + "version": "0.34.48", + "license": "MIT" + }, + "node_modules/@sinonjs/commons": { + "version": "3.0.1", + "license": "BSD-3-Clause", "dependencies": { - "ajv": "^8.0.0" - }, - "peerDependencies": { - "ajv": "^8.0.0" - }, - "peerDependenciesMeta": { - "ajv": { - "optional": true - } + "type-detect": "4.0.8" } }, - "node_modules/allure-commandline": { - "version": "2.36.0", - "dev": true, - "license": "Apache-2.0", - "bin": { - "allure": "bin/allure" + "node_modules/@sinonjs/fake-timers": { + "version": "13.0.5", + "license": "BSD-3-Clause", + "dependencies": { + "@sinonjs/commons": "^3.0.1" } }, - "node_modules/allure-js-commons": { - "version": "3.4.5", + "node_modules/@smithy/abort-controller": { + "version": "4.2.8", "license": "Apache-2.0", "dependencies": { - "md5": "^2.3.0" - }, - "peerDependencies": { - "allure-playwright": "3.4.5" + "@smithy/types": "^4.12.0", + "tslib": "^2.6.2" }, - "peerDependenciesMeta": { - "allure-playwright": { - "optional": true - } + "engines": { + "node": ">=18.0.0" } }, - "node_modules/allure-playwright": { - "version": "3.4.5", - "devOptional": true, + "node_modules/@smithy/chunked-blob-reader": { + "version": "5.2.0", "license": "Apache-2.0", "dependencies": { - "allure-js-commons": "3.4.5" + "tslib": "^2.6.2" }, - "peerDependencies": { - "@playwright/test": ">=1.53.0" + "engines": { + "node": ">=18.0.0" } }, - "node_modules/ansi-align": { - "version": "3.0.1", - "license": "ISC", + "node_modules/@smithy/chunked-blob-reader-native": { + "version": "4.2.1", + "license": "Apache-2.0", "dependencies": { - "string-width": "^4.1.0" + "@smithy/util-base64": "^4.3.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" } }, - "node_modules/ansi-colors": { - "version": "4.1.3", - "dev": true, - "license": "MIT", + "node_modules/@smithy/config-resolver": { + "version": "4.4.6", + "license": "Apache-2.0", + "dependencies": { + "@smithy/node-config-provider": "^4.3.8", + "@smithy/types": "^4.12.0", + "@smithy/util-config-provider": "^4.2.0", + "@smithy/util-endpoints": "^3.2.8", + "@smithy/util-middleware": "^4.2.8", + "tslib": "^2.6.2" + }, "engines": { - "node": ">=6" + "node": ">=18.0.0" } }, - "node_modules/ansi-escapes": { - "version": "4.3.2", - "dev": true, - "license": "MIT", + "node_modules/@smithy/core": { + "version": "3.23.0", + "resolved": "https://registry.npmjs.org/@smithy/core/-/core-3.23.0.tgz", + "integrity": "sha512-Yq4UPVoQICM9zHnByLmG8632t2M0+yap4T7ANVw482J0W7HW0pOuxwVmeOwzJqX2Q89fkXz0Vybz55Wj2Xzrsg==", + "license": "Apache-2.0", "dependencies": { - "type-fest": "^0.21.3" + "@smithy/middleware-serde": "^4.2.9", + "@smithy/protocol-http": "^5.3.8", + "@smithy/types": "^4.12.0", + "@smithy/util-base64": "^4.3.0", + "@smithy/util-body-length-browser": "^4.2.0", + "@smithy/util-middleware": "^4.2.8", + "@smithy/util-stream": "^4.5.12", + "@smithy/util-utf8": "^4.2.0", + "@smithy/uuid": "^1.1.0", + "tslib": "^2.6.2" }, "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=18.0.0" } }, - "node_modules/ansi-regex": { - "version": "5.0.1", - "license": "MIT", + "node_modules/@smithy/credential-provider-imds": { + "version": "4.2.8", + "license": "Apache-2.0", + "dependencies": { + "@smithy/node-config-provider": "^4.3.8", + "@smithy/property-provider": "^4.2.8", + "@smithy/types": "^4.12.0", + "@smithy/url-parser": "^4.2.8", + "tslib": "^2.6.2" + }, "engines": { - "node": ">=8" + "node": ">=18.0.0" } }, - "node_modules/ansi-styles": { - "version": "4.3.0", - "license": "MIT", + "node_modules/@smithy/eventstream-codec": { + "version": "4.2.8", + "license": "Apache-2.0", "dependencies": { - "color-convert": "^2.0.1" + "@aws-crypto/crc32": "5.2.0", + "@smithy/types": "^4.12.0", + "@smithy/util-hex-encoding": "^4.2.0", + "tslib": "^2.6.2" }, "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "node": ">=18.0.0" } }, - "node_modules/anymatch": { - "version": "3.1.3", - "license": "ISC", + "node_modules/@smithy/eventstream-serde-browser": { + "version": "4.2.8", + "license": "Apache-2.0", "dependencies": { - "normalize-path": "^3.0.0", - "picomatch": "^2.0.4" + "@smithy/eventstream-serde-universal": "^4.2.8", + "@smithy/types": "^4.12.0", + "tslib": "^2.6.2" }, "engines": { - "node": ">= 8" + "node": ">=18.0.0" } }, - "node_modules/anymatch/node_modules/picomatch": { - "version": "2.3.1", - "license": "MIT", - "engines": { - "node": ">=8.6" + "node_modules/@smithy/eventstream-serde-config-resolver": { + "version": "4.3.8", + "license": "Apache-2.0", + "dependencies": { + "@smithy/types": "^4.12.0", + "tslib": "^2.6.2" }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" + "engines": { + "node": ">=18.0.0" } }, - "node_modules/arch": { - "version": "2.2.0", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "MIT" - }, - "node_modules/archiver": { - "version": "7.0.1", - "dev": true, - "license": "MIT", + "node_modules/@smithy/eventstream-serde-node": { + "version": "4.2.8", + "license": "Apache-2.0", "dependencies": { - "archiver-utils": "^5.0.2", - "async": "^3.2.4", - "buffer-crc32": "^1.0.0", - "readable-stream": "^4.0.0", - "readdir-glob": "^1.1.2", - "tar-stream": "^3.0.0", - "zip-stream": "^6.0.1" + "@smithy/eventstream-serde-universal": "^4.2.8", + "@smithy/types": "^4.12.0", + "tslib": "^2.6.2" }, "engines": { - "node": ">= 14" + "node": ">=18.0.0" } }, - "node_modules/archiver-utils": { - "version": "5.0.2", - "dev": true, - "license": "MIT", + "node_modules/@smithy/eventstream-serde-universal": { + "version": "4.2.8", + "license": "Apache-2.0", "dependencies": { - "glob": "^10.0.0", - "graceful-fs": "^4.2.0", - "is-stream": "^2.0.1", - "lazystream": "^1.0.0", - "lodash": "^4.17.15", - "normalize-path": "^3.0.0", - "readable-stream": "^4.0.0" + "@smithy/eventstream-codec": "^4.2.8", + "@smithy/types": "^4.12.0", + "tslib": "^2.6.2" }, "engines": { - "node": ">= 14" + "node": ">=18.0.0" } }, - "node_modules/archiver-utils/node_modules/@isaacs/cliui": { - "version": "8.0.2", - "dev": true, - "license": "ISC", + "node_modules/@smithy/fetch-http-handler": { + "version": "5.3.9", + "license": "Apache-2.0", "dependencies": { - "string-width": "^5.1.2", - "string-width-cjs": "npm:string-width@^4.2.0", - "strip-ansi": "^7.0.1", - "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", - "wrap-ansi": "^8.1.0", - "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" + "@smithy/protocol-http": "^5.3.8", + "@smithy/querystring-builder": "^4.2.8", + "@smithy/types": "^4.12.0", + "@smithy/util-base64": "^4.3.0", + "tslib": "^2.6.2" }, "engines": { - "node": ">=12" + "node": ">=18.0.0" } }, - "node_modules/archiver-utils/node_modules/ansi-regex": { - "version": "6.2.2", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12" + "node_modules/@smithy/hash-blob-browser": { + "version": "4.2.9", + "license": "Apache-2.0", + "dependencies": { + "@smithy/chunked-blob-reader": "^5.2.0", + "@smithy/chunked-blob-reader-native": "^4.2.1", + "@smithy/types": "^4.12.0", + "tslib": "^2.6.2" }, - "funding": { - "url": "https://github.com/chalk/ansi-regex?sponsor=1" - } - }, - "node_modules/archiver-utils/node_modules/ansi-styles": { - "version": "6.2.3", - "dev": true, - "license": "MIT", "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "node": ">=18.0.0" } }, - "node_modules/archiver-utils/node_modules/buffer": { - "version": "6.0.3", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "MIT", + "node_modules/@smithy/hash-node": { + "version": "4.2.8", + "license": "Apache-2.0", "dependencies": { - "base64-js": "^1.3.1", - "ieee754": "^1.2.1" - } - }, - "node_modules/archiver-utils/node_modules/events": { - "version": "3.3.0", - "dev": true, - "license": "MIT", + "@smithy/types": "^4.12.0", + "@smithy/util-buffer-from": "^4.2.0", + "@smithy/util-utf8": "^4.2.0", + "tslib": "^2.6.2" + }, "engines": { - "node": ">=0.8.x" + "node": ">=18.0.0" } }, - "node_modules/archiver-utils/node_modules/glob": { - "version": "10.5.0", - "dev": true, - "license": "ISC", + "node_modules/@smithy/hash-stream-node": { + "version": "4.2.8", + "license": "Apache-2.0", "dependencies": { - "foreground-child": "^3.1.0", - "jackspeak": "^3.1.2", - "minimatch": "^9.0.4", - "minipass": "^7.1.2", - "package-json-from-dist": "^1.0.0", - "path-scurry": "^1.11.1" - }, - "bin": { - "glob": "dist/esm/bin.mjs" + "@smithy/types": "^4.12.0", + "@smithy/util-utf8": "^4.2.0", + "tslib": "^2.6.2" }, - "funding": { - "url": "https://github.com/sponsors/isaacs" + "engines": { + "node": ">=18.0.0" } }, - "node_modules/archiver-utils/node_modules/ieee754": { - "version": "1.2.1", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "BSD-3-Clause" - }, - "node_modules/archiver-utils/node_modules/jackspeak": { - "version": "3.4.3", - "dev": true, - "license": "BlueOak-1.0.0", + "node_modules/@smithy/invalid-dependency": { + "version": "4.2.8", + "license": "Apache-2.0", "dependencies": { - "@isaacs/cliui": "^8.0.2" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" + "@smithy/types": "^4.12.0", + "tslib": "^2.6.2" }, - "optionalDependencies": { - "@pkgjs/parseargs": "^0.11.0" + "engines": { + "node": ">=18.0.0" } }, - "node_modules/archiver-utils/node_modules/lru-cache": { - "version": "10.4.3", - "dev": true, - "license": "ISC" - }, - "node_modules/archiver-utils/node_modules/minimatch": { - "version": "9.0.5", - "dev": true, - "license": "ISC", + "node_modules/@smithy/is-array-buffer": { + "version": "4.2.0", + "license": "Apache-2.0", "dependencies": { - "brace-expansion": "^2.0.1" + "tslib": "^2.6.2" }, "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" + "node": ">=18.0.0" } }, - "node_modules/archiver-utils/node_modules/path-scurry": { - "version": "1.11.1", - "dev": true, - "license": "BlueOak-1.0.0", + "node_modules/@smithy/md5-js": { + "version": "4.2.8", + "license": "Apache-2.0", "dependencies": { - "lru-cache": "^10.2.0", - "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" + "@smithy/types": "^4.12.0", + "@smithy/util-utf8": "^4.2.0", + "tslib": "^2.6.2" }, "engines": { - "node": ">=16 || 14 >=14.18" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" + "node": ">=18.0.0" } }, - "node_modules/archiver-utils/node_modules/readable-stream": { - "version": "4.7.0", - "dev": true, - "license": "MIT", + "node_modules/@smithy/middleware-content-length": { + "version": "4.2.8", + "license": "Apache-2.0", "dependencies": { - "abort-controller": "^3.0.0", - "buffer": "^6.0.3", - "events": "^3.3.0", - "process": "^0.11.10", - "string_decoder": "^1.3.0" + "@smithy/protocol-http": "^5.3.8", + "@smithy/types": "^4.12.0", + "tslib": "^2.6.2" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": ">=18.0.0" } }, - "node_modules/archiver-utils/node_modules/string-width": { - "version": "5.1.2", - "dev": true, - "license": "MIT", + "node_modules/@smithy/middleware-endpoint": { + "version": "4.4.14", + "resolved": "https://registry.npmjs.org/@smithy/middleware-endpoint/-/middleware-endpoint-4.4.14.tgz", + "integrity": "sha512-FUFNE5KVeaY6U/GL0nzAAHkaCHzXLZcY1EhtQnsAqhD8Du13oPKtMB9/0WK4/LK6a/T5OZ24wPoSShff5iI6Ag==", + "license": "Apache-2.0", "dependencies": { - "eastasianwidth": "^0.2.0", - "emoji-regex": "^9.2.2", - "strip-ansi": "^7.0.1" + "@smithy/core": "^3.23.0", + "@smithy/middleware-serde": "^4.2.9", + "@smithy/node-config-provider": "^4.3.8", + "@smithy/shared-ini-file-loader": "^4.4.3", + "@smithy/types": "^4.12.0", + "@smithy/url-parser": "^4.2.8", + "@smithy/util-middleware": "^4.2.8", + "tslib": "^2.6.2" }, "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=18.0.0" } }, - "node_modules/archiver-utils/node_modules/strip-ansi": { - "version": "7.1.2", - "dev": true, - "license": "MIT", + "node_modules/@smithy/middleware-retry": { + "version": "4.4.31", + "resolved": "https://registry.npmjs.org/@smithy/middleware-retry/-/middleware-retry-4.4.31.tgz", + "integrity": "sha512-RXBzLpMkIrxBPe4C8OmEOHvS8aH9RUuCOH++Acb5jZDEblxDjyg6un72X9IcbrGTJoiUwmI7hLypNfuDACypbg==", + "license": "Apache-2.0", "dependencies": { - "ansi-regex": "^6.0.1" + "@smithy/node-config-provider": "^4.3.8", + "@smithy/protocol-http": "^5.3.8", + "@smithy/service-error-classification": "^4.2.8", + "@smithy/smithy-client": "^4.11.3", + "@smithy/types": "^4.12.0", + "@smithy/util-middleware": "^4.2.8", + "@smithy/util-retry": "^4.2.8", + "@smithy/uuid": "^1.1.0", + "tslib": "^2.6.2" }, "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/strip-ansi?sponsor=1" + "node": ">=18.0.0" } }, - "node_modules/archiver-utils/node_modules/wrap-ansi": { - "version": "8.1.0", - "dev": true, - "license": "MIT", + "node_modules/@smithy/middleware-serde": { + "version": "4.2.9", + "license": "Apache-2.0", "dependencies": { - "ansi-styles": "^6.1.0", - "string-width": "^5.0.1", - "strip-ansi": "^7.0.1" + "@smithy/protocol-http": "^5.3.8", + "@smithy/types": "^4.12.0", + "tslib": "^2.6.2" }, "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + "node": ">=18.0.0" } }, - "node_modules/archiver/node_modules/buffer": { - "version": "6.0.3", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "MIT", + "node_modules/@smithy/middleware-stack": { + "version": "4.2.8", + "license": "Apache-2.0", "dependencies": { - "base64-js": "^1.3.1", - "ieee754": "^1.2.1" - } - }, - "node_modules/archiver/node_modules/events": { - "version": "3.3.0", - "dev": true, - "license": "MIT", + "@smithy/types": "^4.12.0", + "tslib": "^2.6.2" + }, "engines": { - "node": ">=0.8.x" + "node": ">=18.0.0" } }, - "node_modules/archiver/node_modules/ieee754": { - "version": "1.2.1", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "BSD-3-Clause" - }, - "node_modules/archiver/node_modules/readable-stream": { - "version": "4.7.0", - "dev": true, - "license": "MIT", + "node_modules/@smithy/node-config-provider": { + "version": "4.3.8", + "license": "Apache-2.0", "dependencies": { - "abort-controller": "^3.0.0", - "buffer": "^6.0.3", - "events": "^3.3.0", - "process": "^0.11.10", - "string_decoder": "^1.3.0" + "@smithy/property-provider": "^4.2.8", + "@smithy/shared-ini-file-loader": "^4.4.3", + "@smithy/types": "^4.12.0", + "tslib": "^2.6.2" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": ">=18.0.0" } }, - "node_modules/arg": { - "version": "5.0.2", - "license": "MIT" - }, - "node_modules/argparse": { - "version": "2.0.1", - "license": "Python-2.0" - }, - "node_modules/aria-query": { - "version": "5.3.2", - "dev": true, + "node_modules/@smithy/node-http-handler": { + "version": "4.4.10", + "resolved": "https://registry.npmjs.org/@smithy/node-http-handler/-/node-http-handler-4.4.10.tgz", + "integrity": "sha512-u4YeUwOWRZaHbWaebvrs3UhwQwj+2VNmcVCwXcYTvPIuVyM7Ex1ftAj+fdbG/P4AkBwLq/+SKn+ydOI4ZJE9PA==", "license": "Apache-2.0", + "dependencies": { + "@smithy/abort-controller": "^4.2.8", + "@smithy/protocol-http": "^5.3.8", + "@smithy/querystring-builder": "^4.2.8", + "@smithy/types": "^4.12.0", + "tslib": "^2.6.2" + }, "engines": { - "node": ">= 0.4" + "node": ">=18.0.0" } }, - "node_modules/array-buffer-byte-length": { - "version": "1.0.2", - "dev": true, - "license": "MIT", + "node_modules/@smithy/property-provider": { + "version": "4.2.8", + "license": "Apache-2.0", "dependencies": { - "call-bound": "^1.0.3", - "is-array-buffer": "^3.0.5" + "@smithy/types": "^4.12.0", + "tslib": "^2.6.2" }, "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">=18.0.0" } }, - "node_modules/array-flatten": { - "version": "1.1.1", - "license": "MIT" - }, - "node_modules/array-includes": { - "version": "3.1.9", - "dev": true, - "license": "MIT", + "node_modules/@smithy/protocol-http": { + "version": "5.3.8", + "license": "Apache-2.0", "dependencies": { - "call-bind": "^1.0.8", - "call-bound": "^1.0.4", - "define-properties": "^1.2.1", - "es-abstract": "^1.24.0", - "es-object-atoms": "^1.1.1", - "get-intrinsic": "^1.3.0", - "is-string": "^1.1.1", - "math-intrinsics": "^1.1.0" + "@smithy/types": "^4.12.0", + "tslib": "^2.6.2" }, "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">=18.0.0" } }, - "node_modules/array.prototype.findlast": { - "version": "1.2.5", - "dev": true, - "license": "MIT", + "node_modules/@smithy/querystring-builder": { + "version": "4.2.8", + "license": "Apache-2.0", "dependencies": { - "call-bind": "^1.0.7", - "define-properties": "^1.2.1", - "es-abstract": "^1.23.2", - "es-errors": "^1.3.0", - "es-object-atoms": "^1.0.0", - "es-shim-unscopables": "^1.0.2" + "@smithy/types": "^4.12.0", + "@smithy/util-uri-escape": "^4.2.0", + "tslib": "^2.6.2" }, "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">=18.0.0" } }, - "node_modules/array.prototype.findlastindex": { - "version": "1.2.6", - "dev": true, - "license": "MIT", + "node_modules/@smithy/querystring-parser": { + "version": "4.2.8", + "license": "Apache-2.0", "dependencies": { - "call-bind": "^1.0.8", - "call-bound": "^1.0.4", - "define-properties": "^1.2.1", - "es-abstract": "^1.23.9", - "es-errors": "^1.3.0", - "es-object-atoms": "^1.1.1", - "es-shim-unscopables": "^1.1.0" + "@smithy/types": "^4.12.0", + "tslib": "^2.6.2" }, "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">=18.0.0" } }, - "node_modules/array.prototype.flat": { - "version": "1.3.3", - "dev": true, - "license": "MIT", + "node_modules/@smithy/service-error-classification": { + "version": "4.2.8", + "license": "Apache-2.0", "dependencies": { - "call-bind": "^1.0.8", - "define-properties": "^1.2.1", - "es-abstract": "^1.23.5", - "es-shim-unscopables": "^1.0.2" + "@smithy/types": "^4.12.0" }, "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">=18.0.0" } }, - "node_modules/array.prototype.flatmap": { - "version": "1.3.3", - "dev": true, - "license": "MIT", + "node_modules/@smithy/shared-ini-file-loader": { + "version": "4.4.3", + "license": "Apache-2.0", "dependencies": { - "call-bind": "^1.0.8", - "define-properties": "^1.2.1", - "es-abstract": "^1.23.5", - "es-shim-unscopables": "^1.0.2" + "@smithy/types": "^4.12.0", + "tslib": "^2.6.2" }, "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">=18.0.0" } }, - "node_modules/array.prototype.tosorted": { - "version": "1.1.4", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.7", - "define-properties": "^1.2.1", - "es-abstract": "^1.23.3", - "es-errors": "^1.3.0", - "es-shim-unscopables": "^1.0.2" + "node_modules/@smithy/signature-v4": { + "version": "5.3.8", + "license": "Apache-2.0", + "dependencies": { + "@smithy/is-array-buffer": "^4.2.0", + "@smithy/protocol-http": "^5.3.8", + "@smithy/types": "^4.12.0", + "@smithy/util-hex-encoding": "^4.2.0", + "@smithy/util-middleware": "^4.2.8", + "@smithy/util-uri-escape": "^4.2.0", + "@smithy/util-utf8": "^4.2.0", + "tslib": "^2.6.2" }, "engines": { - "node": ">= 0.4" + "node": ">=18.0.0" } }, - "node_modules/arraybuffer.prototype.slice": { - "version": "1.0.4", - "dev": true, - "license": "MIT", + "node_modules/@smithy/smithy-client": { + "version": "4.11.3", + "resolved": "https://registry.npmjs.org/@smithy/smithy-client/-/smithy-client-4.11.3.tgz", + "integrity": "sha512-Q7kY5sDau8OoE6Y9zJoRGgje8P4/UY0WzH8R2ok0PDh+iJ+ZnEKowhjEqYafVcubkbYxQVaqwm3iufktzhprGg==", + "license": "Apache-2.0", "dependencies": { - "array-buffer-byte-length": "^1.0.1", - "call-bind": "^1.0.8", - "define-properties": "^1.2.1", - "es-abstract": "^1.23.5", - "es-errors": "^1.3.0", - "get-intrinsic": "^1.2.6", - "is-array-buffer": "^3.0.4" + "@smithy/core": "^3.23.0", + "@smithy/middleware-endpoint": "^4.4.14", + "@smithy/middleware-stack": "^4.2.8", + "@smithy/protocol-http": "^5.3.8", + "@smithy/types": "^4.12.0", + "@smithy/util-stream": "^4.5.12", + "tslib": "^2.6.2" }, "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/as-table": { - "version": "1.0.55", - "dev": true, - "license": "MIT", - "dependencies": { - "printable-characters": "^1.0.42" - } - }, - "node_modules/asn1": { - "version": "0.2.6", - "dev": true, - "license": "MIT", - "dependencies": { - "safer-buffer": "~2.1.0" + "node": ">=18.0.0" } }, - "node_modules/ast-types": { - "version": "0.13.4", - "dev": true, - "license": "MIT", + "node_modules/@smithy/types": { + "version": "4.12.0", + "license": "Apache-2.0", "dependencies": { - "tslib": "^2.0.1" + "tslib": "^2.6.2" }, "engines": { - "node": ">=4" - } - }, - "node_modules/ast-types-flow": { - "version": "0.0.8", - "dev": true, - "license": "MIT" - }, - "node_modules/astring": { - "version": "1.9.0", - "dev": true, - "license": "MIT", - "bin": { - "astring": "bin/astring" + "node": ">=18.0.0" } }, - "node_modules/async": { - "version": "3.2.6", - "dev": true, - "license": "MIT" - }, - "node_modules/async-function": { - "version": "1.0.0", - "dev": true, - "license": "MIT", + "node_modules/@smithy/url-parser": { + "version": "4.2.8", + "license": "Apache-2.0", + "dependencies": { + "@smithy/querystring-parser": "^4.2.8", + "@smithy/types": "^4.12.0", + "tslib": "^2.6.2" + }, "engines": { - "node": ">= 0.4" + "node": ">=18.0.0" } }, - "node_modules/async-lock": { - "version": "1.4.1", - "dev": true, - "license": "MIT" - }, - "node_modules/asynckit": { - "version": "0.4.0", - "license": "MIT" - }, - "node_modules/atomic-sleep": { - "version": "1.0.0", - "license": "MIT", + "node_modules/@smithy/util-base64": { + "version": "4.3.0", + "license": "Apache-2.0", + "dependencies": { + "@smithy/util-buffer-from": "^4.2.0", + "@smithy/util-utf8": "^4.2.0", + "tslib": "^2.6.2" + }, "engines": { - "node": ">=8.0.0" + "node": ">=18.0.0" } }, - "node_modules/available-typed-arrays": { - "version": "1.0.7", - "license": "MIT", + "node_modules/@smithy/util-body-length-browser": { + "version": "4.2.0", + "license": "Apache-2.0", "dependencies": { - "possible-typed-array-names": "^1.0.0" + "tslib": "^2.6.2" }, "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">=18.0.0" } }, - "node_modules/aws-embedded-metrics": { + "node_modules/@smithy/util-body-length-node": { "version": "4.2.1", "license": "Apache-2.0", "dependencies": { - "@datastructures-js/heap": "^4.0.2" + "tslib": "^2.6.2" }, "engines": { - "node": ">=10.0.0" + "node": ">=18.0.0" } }, - "node_modules/aws-lambda": { - "version": "1.0.6", - "license": "MIT", + "node_modules/@smithy/util-buffer-from": { + "version": "4.2.0", + "license": "Apache-2.0", "dependencies": { - "aws-sdk": "*", - "commander": "^3.0.2", - "js-yaml": "^3.13.1", - "watchpack": "^2.0.0-beta.10" + "@smithy/is-array-buffer": "^4.2.0", + "tslib": "^2.6.2" }, - "bin": { - "lambda": "bin/lambda" + "engines": { + "node": ">=18.0.0" } }, - "node_modules/aws-lambda/node_modules/argparse": { - "version": "1.0.10", - "license": "MIT", + "node_modules/@smithy/util-config-provider": { + "version": "4.2.0", + "license": "Apache-2.0", "dependencies": { - "sprintf-js": "~1.0.2" + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" } }, - "node_modules/aws-lambda/node_modules/commander": { - "version": "3.0.2", - "license": "MIT" - }, - "node_modules/aws-lambda/node_modules/js-yaml": { - "version": "3.14.2", - "license": "MIT", + "node_modules/@smithy/util-defaults-mode-browser": { + "version": "4.3.30", + "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-browser/-/util-defaults-mode-browser-4.3.30.tgz", + "integrity": "sha512-cMni0uVU27zxOiU8TuC8pQLC1pYeZ/xEMxvchSK/ILwleRd1ugobOcIRr5vXtcRqKd4aBLWlpeBoDPJJ91LQng==", + "license": "Apache-2.0", "dependencies": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" + "@smithy/property-provider": "^4.2.8", + "@smithy/smithy-client": "^4.11.3", + "@smithy/types": "^4.12.0", + "tslib": "^2.6.2" }, - "bin": { - "js-yaml": "bin/js-yaml.js" + "engines": { + "node": ">=18.0.0" } }, - "node_modules/aws-sdk": { - "version": "2.1693.0", - "hasInstallScript": true, + "node_modules/@smithy/util-defaults-mode-node": { + "version": "4.2.33", + "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-node/-/util-defaults-mode-node-4.2.33.tgz", + "integrity": "sha512-LEb2aq5F4oZUSzWBG7S53d4UytZSkOEJPXcBq/xbG2/TmK9EW5naUZ8lKu1BEyWMzdHIzEVN16M3k8oxDq+DJA==", "license": "Apache-2.0", "dependencies": { - "buffer": "4.9.2", - "events": "1.1.1", - "ieee754": "1.1.13", - "jmespath": "0.16.0", - "querystring": "0.2.0", - "sax": "1.2.1", - "url": "0.10.3", - "util": "^0.12.4", - "uuid": "8.0.0", - "xml2js": "0.6.2" + "@smithy/config-resolver": "^4.4.6", + "@smithy/credential-provider-imds": "^4.2.8", + "@smithy/node-config-provider": "^4.3.8", + "@smithy/property-provider": "^4.2.8", + "@smithy/smithy-client": "^4.11.3", + "@smithy/types": "^4.12.0", + "tslib": "^2.6.2" }, "engines": { - "node": ">= 10.0.0" + "node": ">=18.0.0" } }, - "node_modules/axe-core": { - "version": "4.11.1", - "dev": true, - "license": "MPL-2.0", + "node_modules/@smithy/util-endpoints": { + "version": "3.2.8", + "license": "Apache-2.0", + "dependencies": { + "@smithy/node-config-provider": "^4.3.8", + "@smithy/types": "^4.12.0", + "tslib": "^2.6.2" + }, "engines": { - "node": ">=4" + "node": ">=18.0.0" } }, - "node_modules/axios": { - "version": "1.13.5", - "resolved": "https://registry.npmjs.org/axios/-/axios-1.13.5.tgz", - "integrity": "sha512-cz4ur7Vb0xS4/KUN0tPWe44eqxrIu31me+fbang3ijiNscE129POzipJJA6zniq2C/Z6sJCjMimjS8Lc/GAs8Q==", - "license": "MIT", + "node_modules/@smithy/util-hex-encoding": { + "version": "4.2.0", + "license": "Apache-2.0", "dependencies": { - "follow-redirects": "^1.15.11", - "form-data": "^4.0.5", - "proxy-from-env": "^1.1.0" + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" } }, - "node_modules/axobject-query": { - "version": "4.1.0", - "dev": true, + "node_modules/@smithy/util-middleware": { + "version": "4.2.8", "license": "Apache-2.0", + "dependencies": { + "@smithy/types": "^4.12.0", + "tslib": "^2.6.2" + }, "engines": { - "node": ">= 0.4" + "node": ">=18.0.0" } }, - "node_modules/b4a": { - "version": "1.7.3", - "dev": true, + "node_modules/@smithy/util-retry": { + "version": "4.2.8", "license": "Apache-2.0", - "peerDependencies": { - "react-native-b4a": "*" - }, - "peerDependenciesMeta": { - "react-native-b4a": { - "optional": true - } - } - }, - "node_modules/babel-jest": { - "version": "30.2.0", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/transform": "30.2.0", - "@types/babel__core": "^7.20.5", - "babel-plugin-istanbul": "^7.0.1", - "babel-preset-jest": "30.2.0", - "chalk": "^4.1.2", - "graceful-fs": "^4.2.11", - "slash": "^3.0.0" + "dependencies": { + "@smithy/service-error-classification": "^4.2.8", + "@smithy/types": "^4.12.0", + "tslib": "^2.6.2" }, "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" - }, - "peerDependencies": { - "@babel/core": "^7.11.0 || ^8.0.0-0" + "node": ">=18.0.0" } }, - "node_modules/babel-plugin-istanbul": { - "version": "7.0.1", - "license": "BSD-3-Clause", - "workspaces": [ - "test/babel-8" - ], + "node_modules/@smithy/util-stream": { + "version": "4.5.12", + "resolved": "https://registry.npmjs.org/@smithy/util-stream/-/util-stream-4.5.12.tgz", + "integrity": "sha512-D8tgkrmhAX/UNeCZbqbEO3uqyghUnEmmoO9YEvRuwxjlkKKUE7FOgCJnqpTlQPe9MApdWPky58mNQQHbnCzoNg==", + "license": "Apache-2.0", "dependencies": { - "@babel/helper-plugin-utils": "^7.0.0", - "@istanbuljs/load-nyc-config": "^1.0.0", - "@istanbuljs/schema": "^0.1.3", - "istanbul-lib-instrument": "^6.0.2", - "test-exclude": "^6.0.0" + "@smithy/fetch-http-handler": "^5.3.9", + "@smithy/node-http-handler": "^4.4.10", + "@smithy/types": "^4.12.0", + "@smithy/util-base64": "^4.3.0", + "@smithy/util-buffer-from": "^4.2.0", + "@smithy/util-hex-encoding": "^4.2.0", + "@smithy/util-utf8": "^4.2.0", + "tslib": "^2.6.2" }, "engines": { - "node": ">=12" + "node": ">=18.0.0" } }, - "node_modules/babel-plugin-jest-hoist": { - "version": "30.2.0", - "dev": true, - "license": "MIT", + "node_modules/@smithy/util-uri-escape": { + "version": "4.2.0", + "license": "Apache-2.0", "dependencies": { - "@types/babel__core": "^7.20.5" + "tslib": "^2.6.2" }, "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + "node": ">=18.0.0" } }, - "node_modules/babel-preset-current-node-syntax": { - "version": "1.2.0", - "license": "MIT", + "node_modules/@smithy/util-utf8": { + "version": "4.2.0", + "license": "Apache-2.0", "dependencies": { - "@babel/plugin-syntax-async-generators": "^7.8.4", - "@babel/plugin-syntax-bigint": "^7.8.3", - "@babel/plugin-syntax-class-properties": "^7.12.13", - "@babel/plugin-syntax-class-static-block": "^7.14.5", - "@babel/plugin-syntax-import-attributes": "^7.24.7", - "@babel/plugin-syntax-import-meta": "^7.10.4", - "@babel/plugin-syntax-json-strings": "^7.8.3", - "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4", - "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", - "@babel/plugin-syntax-numeric-separator": "^7.10.4", - "@babel/plugin-syntax-object-rest-spread": "^7.8.3", - "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", - "@babel/plugin-syntax-optional-chaining": "^7.8.3", - "@babel/plugin-syntax-private-property-in-object": "^7.14.5", - "@babel/plugin-syntax-top-level-await": "^7.14.5" + "@smithy/util-buffer-from": "^4.2.0", + "tslib": "^2.6.2" }, - "peerDependencies": { - "@babel/core": "^7.0.0 || ^8.0.0-0" + "engines": { + "node": ">=18.0.0" } }, - "node_modules/babel-preset-jest": { - "version": "30.2.0", - "dev": true, - "license": "MIT", + "node_modules/@smithy/util-waiter": { + "version": "4.2.8", + "license": "Apache-2.0", "dependencies": { - "babel-plugin-jest-hoist": "30.2.0", - "babel-preset-current-node-syntax": "^1.2.0" + "@smithy/abort-controller": "^4.2.8", + "@smithy/types": "^4.12.0", + "tslib": "^2.6.2" }, "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" - }, - "peerDependencies": { - "@babel/core": "^7.11.0 || ^8.0.0-beta.1" + "node": ">=18.0.0" } }, - "node_modules/balanced-match": { - "version": "1.0.2", - "license": "MIT" - }, - "node_modules/bare-events": { - "version": "2.8.2", - "dev": true, + "node_modules/@smithy/uuid": { + "version": "1.1.0", "license": "Apache-2.0", - "peerDependencies": { - "bare-abort-controller": "*" + "dependencies": { + "tslib": "^2.6.2" }, - "peerDependenciesMeta": { - "bare-abort-controller": { - "optional": true - } + "engines": { + "node": ">=18.0.0" } }, - "node_modules/bare-fs": { - "version": "4.5.3", + "node_modules/@stoplight/better-ajv-errors": { + "version": "1.0.3", "dev": true, "license": "Apache-2.0", - "optional": true, "dependencies": { - "bare-events": "^2.5.4", - "bare-path": "^3.0.0", - "bare-stream": "^2.6.4", - "bare-url": "^2.2.2", - "fast-fifo": "^1.3.2" + "jsonpointer": "^5.0.0", + "leven": "^3.1.0" }, "engines": { - "bare": ">=1.16.0" + "node": "^12.20 || >= 14.13" }, "peerDependencies": { - "bare-buffer": "*" - }, - "peerDependenciesMeta": { - "bare-buffer": { - "optional": true - } + "ajv": ">=8" } }, - "node_modules/bare-os": { - "version": "3.6.2", + "node_modules/@stoplight/json": { + "version": "3.21.7", "dev": true, "license": "Apache-2.0", - "optional": true, + "dependencies": { + "@stoplight/ordered-object-literal": "^1.0.3", + "@stoplight/path": "^1.3.2", + "@stoplight/types": "^13.6.0", + "jsonc-parser": "~2.2.1", + "lodash": "^4.17.21", + "safe-stable-stringify": "^1.1" + }, "engines": { - "bare": ">=1.14.0" + "node": ">=8.3.0" } }, - "node_modules/bare-path": { - "version": "3.0.0", + "node_modules/@stoplight/json-ref-readers": { + "version": "1.2.2", "dev": true, "license": "Apache-2.0", - "optional": true, "dependencies": { - "bare-os": "^3.0.1" + "node-fetch": "^2.6.0", + "tslib": "^1.14.1" + }, + "engines": { + "node": ">=8.3.0" } }, - "node_modules/bare-stream": { - "version": "2.7.0", + "node_modules/@stoplight/json-ref-readers/node_modules/tslib": { + "version": "1.14.1", + "dev": true, + "license": "0BSD" + }, + "node_modules/@stoplight/json-ref-resolver": { + "version": "3.1.6", "dev": true, "license": "Apache-2.0", - "optional": true, "dependencies": { - "streamx": "^2.21.0" - }, - "peerDependencies": { - "bare-buffer": "*", - "bare-events": "*" + "@stoplight/json": "^3.21.0", + "@stoplight/path": "^1.3.2", + "@stoplight/types": "^12.3.0 || ^13.0.0", + "@types/urijs": "^1.19.19", + "dependency-graph": "~0.11.0", + "fast-memoize": "^2.5.2", + "immer": "^9.0.6", + "lodash": "^4.17.21", + "tslib": "^2.6.0", + "urijs": "^1.19.11" }, - "peerDependenciesMeta": { - "bare-buffer": { - "optional": true - }, - "bare-events": { - "optional": true - } + "engines": { + "node": ">=8.3.0" } }, - "node_modules/bare-url": { - "version": "2.3.2", + "node_modules/@stoplight/json/node_modules/jsonc-parser": { + "version": "2.2.1", "dev": true, - "license": "Apache-2.0", - "optional": true, - "dependencies": { - "bare-path": "^3.0.0" - } + "license": "MIT" }, - "node_modules/base64-js": { - "version": "1.5.1", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], + "node_modules/@stoplight/json/node_modules/safe-stable-stringify": { + "version": "1.1.1", + "dev": true, "license": "MIT" }, - "node_modules/baseline-browser-mapping": { - "version": "2.9.19", + "node_modules/@stoplight/ordered-object-literal": { + "version": "1.0.5", + "dev": true, "license": "Apache-2.0", - "bin": { - "baseline-browser-mapping": "dist/cli.js" + "engines": { + "node": ">=8" } }, - "node_modules/basic-ftp": { - "version": "5.1.0", + "node_modules/@stoplight/path": { + "version": "1.3.2", "dev": true, - "license": "MIT", + "license": "Apache-2.0", "engines": { - "node": ">=10.0.0" + "node": ">=8" } }, - "node_modules/bcrypt-pbkdf": { - "version": "1.0.2", + "node_modules/@stoplight/spectral-cli": { + "version": "6.15.0", "dev": true, - "license": "BSD-3-Clause", + "license": "Apache-2.0", "dependencies": { - "tweetnacl": "^0.14.3" - } - }, - "node_modules/binary-extensions": { - "version": "2.3.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" + "@stoplight/json": "~3.21.0", + "@stoplight/path": "1.3.2", + "@stoplight/spectral-core": "^1.19.5", + "@stoplight/spectral-formatters": "^1.4.1", + "@stoplight/spectral-parsers": "^1.0.4", + "@stoplight/spectral-ref-resolver": "^1.0.4", + "@stoplight/spectral-ruleset-bundler": "^1.6.0", + "@stoplight/spectral-ruleset-migrator": "^1.11.0", + "@stoplight/spectral-rulesets": ">=1", + "@stoplight/spectral-runtime": "^1.1.2", + "@stoplight/types": "^13.6.0", + "chalk": "4.1.2", + "fast-glob": "~3.2.12", + "hpagent": "~1.2.0", + "lodash": "~4.17.21", + "pony-cause": "^1.1.1", + "stacktracey": "^2.1.8", + "tslib": "^2.8.1", + "yargs": "~17.7.2" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "bin": { + "spectral": "dist/index.js" + }, + "engines": { + "node": "^16.20 || ^18.18 || >= 20.17" } }, - "node_modules/bl": { - "version": "4.1.0", + "node_modules/@stoplight/spectral-cli/node_modules/fast-glob": { + "version": "3.2.12", "dev": true, "license": "MIT", "dependencies": { - "buffer": "^5.5.0", - "inherits": "^2.0.4", - "readable-stream": "^3.4.0" + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.4" + }, + "engines": { + "node": ">=8.6.0" } }, - "node_modules/bl/node_modules/buffer": { - "version": "5.7.1", + "node_modules/@stoplight/spectral-cli/node_modules/glob-parent": { + "version": "5.1.2", "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "MIT", + "license": "ISC", "dependencies": { - "base64-js": "^1.3.1", - "ieee754": "^1.1.13" + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" } }, - "node_modules/body-parser": { - "version": "2.2.2", - "license": "MIT", + "node_modules/@stoplight/spectral-core": { + "version": "1.21.0", + "dev": true, + "license": "Apache-2.0", "dependencies": { - "bytes": "^3.1.2", - "content-type": "^1.0.5", - "debug": "^4.4.3", - "http-errors": "^2.0.0", - "iconv-lite": "^0.7.0", - "on-finished": "^2.4.1", - "qs": "^6.14.1", - "raw-body": "^3.0.1", - "type-is": "^2.0.1" + "@stoplight/better-ajv-errors": "1.0.3", + "@stoplight/json": "~3.21.0", + "@stoplight/path": "1.3.2", + "@stoplight/spectral-parsers": "^1.0.0", + "@stoplight/spectral-ref-resolver": "^1.0.4", + "@stoplight/spectral-runtime": "^1.1.2", + "@stoplight/types": "~13.6.0", + "@types/es-aggregate-error": "^1.0.2", + "@types/json-schema": "^7.0.11", + "ajv": "^8.17.1", + "ajv-errors": "~3.0.0", + "ajv-formats": "~2.1.1", + "es-aggregate-error": "^1.0.7", + "jsonpath-plus": "^10.3.0", + "lodash": "~4.17.23", + "lodash.topath": "^4.5.2", + "minimatch": "3.1.2", + "nimma": "0.2.3", + "pony-cause": "^1.1.1", + "simple-eval": "1.0.1", + "tslib": "^2.8.1" }, "engines": { - "node": ">=18" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/express" + "node": "^16.20 || ^18.18 || >= 20.17" } }, - "node_modules/bowser": { - "version": "2.14.1", - "license": "MIT" - }, - "node_modules/boxen": { - "version": "7.0.0", - "license": "MIT", + "node_modules/@stoplight/spectral-core/node_modules/@stoplight/types": { + "version": "13.6.0", + "dev": true, + "license": "Apache-2.0", "dependencies": { - "ansi-align": "^3.0.1", - "camelcase": "^7.0.0", - "chalk": "^5.0.1", - "cli-boxes": "^3.0.0", - "string-width": "^5.1.2", - "type-fest": "^2.13.0", - "widest-line": "^4.0.1", - "wrap-ansi": "^8.0.1" + "@types/json-schema": "^7.0.4", + "utility-types": "^3.10.0" }, "engines": { - "node": ">=14.16" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": "^12.20 || >=14.13" } }, - "node_modules/boxen/node_modules/ansi-regex": { - "version": "6.2.2", + "node_modules/@stoplight/spectral-core/node_modules/ajv-formats": { + "version": "2.1.1", + "dev": true, "license": "MIT", - "engines": { - "node": ">=12" + "dependencies": { + "ajv": "^8.0.0" }, - "funding": { - "url": "https://github.com/chalk/ansi-regex?sponsor=1" + "peerDependencies": { + "ajv": "^8.0.0" + }, + "peerDependenciesMeta": { + "ajv": { + "optional": true + } } }, - "node_modules/boxen/node_modules/ansi-styles": { - "version": "6.2.3", + "node_modules/@stoplight/spectral-core/node_modules/brace-expansion": { + "version": "1.1.12", + "dev": true, "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" } }, - "node_modules/boxen/node_modules/camelcase": { - "version": "7.0.1", - "license": "MIT", - "engines": { - "node": ">=14.16" + "node_modules/@stoplight/spectral-core/node_modules/minimatch": { + "version": "3.1.2", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "engines": { + "node": "*" } }, - "node_modules/boxen/node_modules/chalk": { - "version": "5.6.2", - "license": "MIT", - "engines": { - "node": "^12.17.0 || ^14.13 || >=16.0.0" + "node_modules/@stoplight/spectral-formats": { + "version": "1.8.2", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@stoplight/json": "^3.17.0", + "@stoplight/spectral-core": "^1.19.2", + "@types/json-schema": "^7.0.7", + "tslib": "^2.8.1" }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" + "engines": { + "node": "^16.20 || ^18.18 || >= 20.17" } }, - "node_modules/boxen/node_modules/string-width": { - "version": "5.1.2", - "license": "MIT", + "node_modules/@stoplight/spectral-formatters": { + "version": "1.5.0", + "dev": true, + "license": "Apache-2.0", "dependencies": { - "eastasianwidth": "^0.2.0", - "emoji-regex": "^9.2.2", - "strip-ansi": "^7.0.1" + "@stoplight/path": "^1.3.2", + "@stoplight/spectral-core": "^1.19.4", + "@stoplight/spectral-runtime": "^1.1.2", + "@stoplight/types": "^13.15.0", + "@types/markdown-escape": "^1.1.3", + "chalk": "4.1.2", + "cliui": "7.0.4", + "lodash": "^4.17.21", + "markdown-escape": "^2.0.0", + "node-sarif-builder": "^2.0.3", + "strip-ansi": "6.0", + "text-table": "^0.2.0", + "tslib": "^2.8.1" }, "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": "^16.20 || ^18.18 || >= 20.17" } }, - "node_modules/boxen/node_modules/strip-ansi": { - "version": "7.1.2", + "node_modules/@stoplight/spectral-formatters/node_modules/cliui": { + "version": "7.0.4", + "dev": true, + "license": "ISC", + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^7.0.0" + } + }, + "node_modules/@stoplight/spectral-formatters/node_modules/wrap-ansi": { + "version": "7.0.0", + "dev": true, "license": "MIT", "dependencies": { - "ansi-regex": "^6.0.1" + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" }, "engines": { - "node": ">=12" + "node": ">=10" }, "funding": { - "url": "https://github.com/chalk/strip-ansi?sponsor=1" + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" } }, - "node_modules/boxen/node_modules/type-fest": { - "version": "2.19.0", - "license": "(MIT OR CC0-1.0)", - "engines": { - "node": ">=12.20" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/boxen/node_modules/wrap-ansi": { - "version": "8.1.0", - "license": "MIT", + "node_modules/@stoplight/spectral-functions": { + "version": "1.10.1", + "dev": true, + "license": "Apache-2.0", "dependencies": { - "ansi-styles": "^6.1.0", - "string-width": "^5.0.1", - "strip-ansi": "^7.0.1" + "@stoplight/better-ajv-errors": "1.0.3", + "@stoplight/json": "^3.17.1", + "@stoplight/spectral-core": "^1.19.4", + "@stoplight/spectral-formats": "^1.8.1", + "@stoplight/spectral-runtime": "^1.1.2", + "ajv": "^8.17.1", + "ajv-draft-04": "~1.0.0", + "ajv-errors": "~3.0.0", + "ajv-formats": "~2.1.1", + "lodash": "~4.17.21", + "tslib": "^2.8.1" }, "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + "node": "^16.20 || ^18.18 || >= 20.17" } }, - "node_modules/brace-expansion": { - "version": "2.0.2", + "node_modules/@stoplight/spectral-functions/node_modules/ajv-formats": { + "version": "2.1.1", "dev": true, "license": "MIT", "dependencies": { - "balanced-match": "^1.0.0" + "ajv": "^8.0.0" + }, + "peerDependencies": { + "ajv": "^8.0.0" + }, + "peerDependenciesMeta": { + "ajv": { + "optional": true + } } }, - "node_modules/braces": { - "version": "3.0.3", - "license": "MIT", + "node_modules/@stoplight/spectral-parsers": { + "version": "1.0.5", + "dev": true, + "license": "Apache-2.0", "dependencies": { - "fill-range": "^7.1.1" + "@stoplight/json": "~3.21.0", + "@stoplight/types": "^14.1.1", + "@stoplight/yaml": "~4.3.0", + "tslib": "^2.8.1" }, "engines": { - "node": ">=8" + "node": "^16.20 || ^18.18 || >= 20.17" } }, - "node_modules/browserslist": { - "version": "4.28.1", - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/browserslist" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "license": "MIT", + "node_modules/@stoplight/spectral-parsers/node_modules/@stoplight/types": { + "version": "14.1.1", + "dev": true, + "license": "Apache-2.0", "dependencies": { - "baseline-browser-mapping": "^2.9.0", - "caniuse-lite": "^1.0.30001759", - "electron-to-chromium": "^1.5.263", - "node-releases": "^2.0.27", - "update-browserslist-db": "^1.2.0" - }, - "bin": { - "browserslist": "cli.js" + "@types/json-schema": "^7.0.4", + "utility-types": "^3.10.0" }, "engines": { - "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + "node": "^12.20 || >=14.13" } }, - "node_modules/bs-logger": { - "version": "0.2.6", + "node_modules/@stoplight/spectral-ref-resolver": { + "version": "1.0.5", "dev": true, - "license": "MIT", + "license": "Apache-2.0", "dependencies": { - "fast-json-stable-stringify": "2.x" + "@stoplight/json-ref-readers": "1.2.2", + "@stoplight/json-ref-resolver": "~3.1.6", + "@stoplight/spectral-runtime": "^1.1.2", + "dependency-graph": "0.11.0", + "tslib": "^2.8.1" }, "engines": { - "node": ">= 6" + "node": "^16.20 || ^18.18 || >= 20.17" } }, - "node_modules/bser": { - "version": "2.1.1", + "node_modules/@stoplight/spectral-ruleset-bundler": { + "version": "1.6.3", + "dev": true, "license": "Apache-2.0", "dependencies": { - "node-int64": "^0.4.0" - } - }, - "node_modules/buffer": { - "version": "4.9.2", - "license": "MIT", - "dependencies": { - "base64-js": "^1.0.2", - "ieee754": "^1.1.4", - "isarray": "^1.0.0" - } - }, - "node_modules/buffer-crc32": { - "version": "1.0.0", - "dev": true, - "license": "MIT", + "@rollup/plugin-commonjs": "~22.0.2", + "@stoplight/path": "1.3.2", + "@stoplight/spectral-core": ">=1", + "@stoplight/spectral-formats": "^1.8.1", + "@stoplight/spectral-functions": ">=1", + "@stoplight/spectral-parsers": ">=1", + "@stoplight/spectral-ref-resolver": "^1.0.4", + "@stoplight/spectral-ruleset-migrator": "^1.9.6", + "@stoplight/spectral-rulesets": ">=1", + "@stoplight/spectral-runtime": "^1.1.2", + "@stoplight/types": "^13.6.0", + "@types/node": "*", + "pony-cause": "1.1.1", + "rollup": "~2.79.2", + "tslib": "^2.8.1", + "validate-npm-package-name": "3.0.0" + }, "engines": { - "node": ">=8.0.0" + "node": "^16.20 || ^18.18 || >= 20.17" } }, - "node_modules/buffer-from": { - "version": "1.1.2", - "dev": true, - "license": "MIT" - }, - "node_modules/buildcheck": { - "version": "0.0.7", + "node_modules/@stoplight/spectral-ruleset-migrator": { + "version": "1.11.3", "dev": true, - "optional": true, + "license": "Apache-2.0", + "dependencies": { + "@stoplight/json": "~3.21.0", + "@stoplight/ordered-object-literal": "~1.0.4", + "@stoplight/path": "1.3.2", + "@stoplight/spectral-functions": "^1.9.1", + "@stoplight/spectral-runtime": "^1.1.2", + "@stoplight/types": "^13.6.0", + "@stoplight/yaml": "~4.2.3", + "@types/node": "*", + "ajv": "^8.17.1", + "ast-types": "0.14.2", + "astring": "^1.9.0", + "reserved": "0.1.2", + "tslib": "^2.8.1", + "validate-npm-package-name": "3.0.0" + }, "engines": { - "node": ">=10.0.0" + "node": "^16.20 || ^18.18 || >= 20.17" } }, - "node_modules/builtin-modules": { - "version": "3.3.0", + "node_modules/@stoplight/spectral-ruleset-migrator/node_modules/@stoplight/yaml": { + "version": "4.2.3", "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" + "license": "Apache-2.0", + "dependencies": { + "@stoplight/ordered-object-literal": "^1.0.1", + "@stoplight/types": "^13.0.0", + "@stoplight/yaml-ast-parser": "0.0.48", + "tslib": "^2.2.0" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "engines": { + "node": ">=10.8" } }, - "node_modules/builtins": { - "version": "1.0.3", + "node_modules/@stoplight/spectral-ruleset-migrator/node_modules/@stoplight/yaml-ast-parser": { + "version": "0.0.48", "dev": true, - "license": "MIT" + "license": "Apache-2.0" }, - "node_modules/byline": { - "version": "5.0.0", + "node_modules/@stoplight/spectral-ruleset-migrator/node_modules/ast-types": { + "version": "0.14.2", "dev": true, "license": "MIT", + "dependencies": { + "tslib": "^2.0.1" + }, "engines": { - "node": ">=0.10.0" + "node": ">=4" } }, - "node_modules/bytes": { - "version": "3.1.2", - "license": "MIT", + "node_modules/@stoplight/spectral-rulesets": { + "version": "1.22.0", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@asyncapi/specs": "^6.8.0", + "@stoplight/better-ajv-errors": "1.0.3", + "@stoplight/json": "^3.17.0", + "@stoplight/spectral-core": "^1.19.4", + "@stoplight/spectral-formats": "^1.8.1", + "@stoplight/spectral-functions": "^1.9.1", + "@stoplight/spectral-runtime": "^1.1.2", + "@stoplight/types": "^13.6.0", + "@types/json-schema": "^7.0.7", + "ajv": "^8.17.1", + "ajv-formats": "~2.1.1", + "json-schema-traverse": "^1.0.0", + "leven": "3.1.0", + "lodash": "~4.17.21", + "tslib": "^2.8.1" + }, "engines": { - "node": ">= 0.8" + "node": "^16.20 || ^18.18 || >= 20.17" } }, - "node_modules/call-bind": { - "version": "1.0.8", + "node_modules/@stoplight/spectral-rulesets/node_modules/ajv-formats": { + "version": "2.1.1", + "dev": true, "license": "MIT", "dependencies": { - "call-bind-apply-helpers": "^1.0.0", - "es-define-property": "^1.0.0", - "get-intrinsic": "^1.2.4", - "set-function-length": "^1.2.2" + "ajv": "^8.0.0" }, - "engines": { - "node": ">= 0.4" + "peerDependencies": { + "ajv": "^8.0.0" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "peerDependenciesMeta": { + "ajv": { + "optional": true + } } }, - "node_modules/call-bind-apply-helpers": { - "version": "1.0.2", - "license": "MIT", + "node_modules/@stoplight/spectral-runtime": { + "version": "1.1.4", + "dev": true, + "license": "Apache-2.0", "dependencies": { - "es-errors": "^1.3.0", - "function-bind": "^1.1.2" + "@stoplight/json": "^3.20.1", + "@stoplight/path": "^1.3.2", + "@stoplight/types": "^13.6.0", + "abort-controller": "^3.0.0", + "lodash": "^4.17.21", + "node-fetch": "^2.7.0", + "tslib": "^2.8.1" }, "engines": { - "node": ">= 0.4" + "node": "^16.20 || ^18.18 || >= 20.17" } }, - "node_modules/call-bound": { - "version": "1.0.4", - "license": "MIT", + "node_modules/@stoplight/types": { + "version": "13.20.0", + "dev": true, + "license": "Apache-2.0", "dependencies": { - "call-bind-apply-helpers": "^1.0.2", - "get-intrinsic": "^1.3.0" + "@types/json-schema": "^7.0.4", + "utility-types": "^3.10.0" }, "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": "^12.20 || >=14.13" } }, - "node_modules/call-me-maybe": { - "version": "1.0.2", - "dev": true, - "license": "MIT" - }, - "node_modules/callsites": { - "version": "3.1.0", + "node_modules/@stoplight/yaml": { + "version": "4.3.0", "dev": true, - "license": "MIT", + "license": "Apache-2.0", + "dependencies": { + "@stoplight/ordered-object-literal": "^1.0.5", + "@stoplight/types": "^14.1.1", + "@stoplight/yaml-ast-parser": "0.0.50", + "tslib": "^2.2.0" + }, "engines": { - "node": ">=6" + "node": ">=10.8" } }, - "node_modules/camelcase": { - "version": "5.3.1", - "license": "MIT", - "engines": { - "node": ">=6" - } + "node_modules/@stoplight/yaml-ast-parser": { + "version": "0.0.50", + "dev": true, + "license": "Apache-2.0" }, - "node_modules/camelize": { - "version": "1.0.1", + "node_modules/@stoplight/yaml/node_modules/@stoplight/types": { + "version": "14.1.1", "dev": true, - "license": "MIT", - "funding": { - "url": "https://github.com/sponsors/ljharb" + "license": "Apache-2.0", + "dependencies": { + "@types/json-schema": "^7.0.4", + "utility-types": "^3.10.0" + }, + "engines": { + "node": "^12.20 || >=14.13" } }, - "node_modules/caniuse-lite": { - "version": "1.0.30001769", - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/caniuse-lite" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "license": "CC-BY-4.0" - }, - "node_modules/chalk": { - "version": "4.1.2", + "node_modules/@stylistic/eslint-plugin": { + "version": "3.1.0", + "dev": true, "license": "MIT", + "optional": true, + "peer": true, "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" + "@typescript-eslint/utils": "^8.13.0", + "eslint-visitor-keys": "^4.2.0", + "espree": "^10.3.0", + "estraverse": "^5.3.0", + "picomatch": "^4.0.2" }, "engines": { - "node": ">=10" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" + "peerDependencies": { + "eslint": ">=8.40.0" } }, - "node_modules/chalk-template": { - "version": "0.4.0", + "node_modules/@tokenizer/inflate": { + "version": "0.4.1", + "dev": true, "license": "MIT", "dependencies": { - "chalk": "^4.1.2" + "debug": "^4.4.3", + "token-types": "^6.1.1" }, "engines": { - "node": ">=12" + "node": ">=18" }, "funding": { - "url": "https://github.com/chalk/chalk-template?sponsor=1" + "type": "github", + "url": "https://github.com/sponsors/Borewit" } }, - "node_modules/change-case": { - "version": "5.4.4", + "node_modules/@tokenizer/token": { + "version": "0.3.0", "dev": true, "license": "MIT" }, - "node_modules/char-regex": { - "version": "1.0.2", + "node_modules/@tootallnate/quickjs-emscripten": { + "version": "0.23.0", "dev": true, - "license": "MIT", - "engines": { - "node": ">=10" - } + "license": "MIT" }, - "node_modules/chardet": { - "version": "2.1.1", + "node_modules/@tsconfig/node10": { + "version": "1.0.12", "dev": true, "license": "MIT" }, - "node_modules/charenc": { - "version": "0.0.2", - "license": "BSD-3-Clause", - "engines": { - "node": "*" - } - }, - "node_modules/check-types": { - "version": "11.2.3", + "node_modules/@tsconfig/node12": { + "version": "1.0.11", + "dev": true, "license": "MIT" }, - "node_modules/chokidar": { - "version": "3.6.0", + "node_modules/@tsconfig/node14": { + "version": "1.0.3", "dev": true, - "license": "MIT", - "dependencies": { - "anymatch": "~3.1.2", - "braces": "~3.0.2", - "glob-parent": "~5.1.2", - "is-binary-path": "~2.1.0", - "is-glob": "~4.0.1", - "normalize-path": "~3.0.0", - "readdirp": "~3.6.0" - }, - "engines": { - "node": ">= 8.10.0" - }, - "funding": { - "url": "https://paulmillr.com/funding/" - }, - "optionalDependencies": { - "fsevents": "~2.3.2" - } + "license": "MIT" }, - "node_modules/chownr": { - "version": "1.1.4", + "node_modules/@tsconfig/node16": { + "version": "1.0.4", "dev": true, - "license": "ISC" - }, - "node_modules/ci-info": { - "version": "4.4.0", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/sibiraj-s" - } - ], - "license": "MIT", - "engines": { - "node": ">=8" - } + "license": "MIT" }, - "node_modules/cjs-module-lexer": { - "version": "2.2.0", + "node_modules/@tsconfig/node22": { + "version": "22.0.5", "dev": true, "license": "MIT" }, - "node_modules/classnames": { - "version": "2.5.1", + "node_modules/@types/aws-lambda": { + "version": "8.10.160", "dev": true, "license": "MIT" }, - "node_modules/clean-regexp": { - "version": "1.0.0", + "node_modules/@types/babel__core": { + "version": "7.20.5", "dev": true, "license": "MIT", "dependencies": { - "escape-string-regexp": "^1.0.5" - }, - "engines": { - "node": ">=4" + "@babel/parser": "^7.20.7", + "@babel/types": "^7.20.7", + "@types/babel__generator": "*", + "@types/babel__template": "*", + "@types/babel__traverse": "*" } }, - "node_modules/clean-regexp/node_modules/escape-string-regexp": { - "version": "1.0.5", + "node_modules/@types/babel__generator": { + "version": "7.27.0", "dev": true, "license": "MIT", - "engines": { - "node": ">=0.8.0" + "dependencies": { + "@babel/types": "^7.0.0" } }, - "node_modules/cli-boxes": { - "version": "3.0.0", + "node_modules/@types/babel__template": { + "version": "7.4.4", + "dev": true, "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "dependencies": { + "@babel/parser": "^7.1.0", + "@babel/types": "^7.0.0" } }, - "node_modules/cli-cursor": { - "version": "3.1.0", + "node_modules/@types/babel__traverse": { + "version": "7.28.0", "dev": true, "license": "MIT", "dependencies": { - "restore-cursor": "^3.1.0" - }, - "engines": { - "node": ">=8" + "@babel/types": "^7.28.2" } }, - "node_modules/cli-spinners": { - "version": "2.9.2", + "node_modules/@types/docker-modem": { + "version": "3.0.6", "dev": true, "license": "MIT", - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "dependencies": { + "@types/node": "*", + "@types/ssh2": "*" } }, - "node_modules/cli-width": { - "version": "3.0.0", + "node_modules/@types/dockerode": { + "version": "3.3.47", "dev": true, - "license": "ISC", - "engines": { - "node": ">= 10" + "license": "MIT", + "dependencies": { + "@types/docker-modem": "*", + "@types/node": "*", + "@types/ssh2": "*" } }, - "node_modules/clipboardy": { - "version": "3.0.0", + "node_modules/@types/es-aggregate-error": { + "version": "1.0.6", + "dev": true, "license": "MIT", "dependencies": { - "arch": "^2.2.0", - "execa": "^5.1.1", - "is-wsl": "^2.2.0" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "@types/node": "*" } }, - "node_modules/cliui": { - "version": "8.0.1", - "license": "ISC", + "node_modules/@types/estree": { + "version": "1.0.8", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/istanbul-lib-coverage": { + "version": "2.0.6", + "license": "MIT" + }, + "node_modules/@types/istanbul-lib-report": { + "version": "3.0.3", + "license": "MIT", "dependencies": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.1", - "wrap-ansi": "^7.0.0" - }, - "engines": { - "node": ">=12" + "@types/istanbul-lib-coverage": "*" } }, - "node_modules/cliui/node_modules/wrap-ansi": { - "version": "7.0.0", + "node_modules/@types/istanbul-reports": { + "version": "3.0.4", "license": "MIT", "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + "@types/istanbul-lib-report": "*" } }, - "node_modules/clone": { - "version": "1.0.4", + "node_modules/@types/jest": { + "version": "30.0.0", "dev": true, "license": "MIT", - "engines": { - "node": ">=0.8" + "dependencies": { + "expect": "^30.0.0", + "pretty-format": "^30.0.0" } }, - "node_modules/clsx": { - "version": "2.1.1", + "node_modules/@types/jsdom": { + "version": "21.1.7", "dev": true, "license": "MIT", - "engines": { - "node": ">=6" + "dependencies": { + "@types/node": "*", + "@types/tough-cookie": "*", + "parse5": "^7.0.0" } }, - "node_modules/co": { - "version": "4.6.0", + "node_modules/@types/json-schema": { + "version": "7.0.15", + "license": "MIT" + }, + "node_modules/@types/json5": { + "version": "0.0.29", "dev": true, - "license": "MIT", - "engines": { - "iojs": ">= 1.0.0", - "node": ">= 0.12.0" - } + "license": "MIT" }, - "node_modules/collect-v8-coverage": { - "version": "1.0.3", + "node_modules/@types/markdown-escape": { + "version": "1.1.3", "dev": true, "license": "MIT" }, - "node_modules/color-convert": { - "version": "2.0.1", + "node_modules/@types/node": { + "version": "25.2.0", "license": "MIT", "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" + "undici-types": "~7.16.0" } }, - "node_modules/color-name": { - "version": "1.1.4", + "node_modules/@types/node/node_modules/undici-types": { + "version": "7.16.0", "license": "MIT" }, - "node_modules/colorette": { - "version": "1.4.0", + "node_modules/@types/sarif": { + "version": "2.1.7", "dev": true, "license": "MIT" }, - "node_modules/combined-stream": { - "version": "1.0.8", + "node_modules/@types/ssh2": { + "version": "1.15.5", + "dev": true, "license": "MIT", "dependencies": { - "delayed-stream": "~1.0.0" - }, - "engines": { - "node": ">= 0.8" + "@types/node": "^18.11.18" } }, - "node_modules/commander": { - "version": "8.3.0", + "node_modules/@types/ssh2-streams": { + "version": "0.1.13", "dev": true, "license": "MIT", - "engines": { - "node": ">= 12" + "dependencies": { + "@types/node": "*" } }, - "node_modules/comment-parser": { - "version": "1.4.5", + "node_modules/@types/ssh2/node_modules/@types/node": { + "version": "18.19.130", "dev": true, "license": "MIT", - "engines": { - "node": ">= 12.0.0" + "dependencies": { + "undici-types": "~5.26.4" } }, - "node_modules/commondir": { - "version": "1.0.1", + "node_modules/@types/ssh2/node_modules/undici-types": { + "version": "5.26.5", "dev": true, "license": "MIT" }, - "node_modules/compare-versions": { - "version": "6.1.1", - "dev": true, + "node_modules/@types/stack-utils": { + "version": "2.0.3", "license": "MIT" }, - "node_modules/compress-commons": { - "version": "6.0.2", + "node_modules/@types/stylis": { + "version": "4.2.7", "dev": true, - "license": "MIT", - "dependencies": { - "crc-32": "^1.2.0", - "crc32-stream": "^6.0.0", - "is-stream": "^2.0.1", - "normalize-path": "^3.0.0", - "readable-stream": "^4.0.0" - }, - "engines": { - "node": ">= 14" - } + "license": "MIT" }, - "node_modules/compress-commons/node_modules/buffer": { - "version": "6.0.3", + "node_modules/@types/tough-cookie": { + "version": "4.0.5", "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "MIT", - "dependencies": { - "base64-js": "^1.3.1", - "ieee754": "^1.2.1" - } + "license": "MIT" }, - "node_modules/compress-commons/node_modules/events": { - "version": "3.3.0", + "node_modules/@types/trusted-types": { + "version": "2.0.7", "dev": true, "license": "MIT", - "engines": { - "node": ">=0.8.x" - } + "optional": true }, - "node_modules/compress-commons/node_modules/ieee754": { - "version": "1.2.1", + "node_modules/@types/urijs": { + "version": "1.19.26", "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "BSD-3-Clause" + "license": "MIT" }, - "node_modules/compress-commons/node_modules/readable-stream": { - "version": "4.7.0", - "dev": true, + "node_modules/@types/yargs": { + "version": "17.0.35", "license": "MIT", "dependencies": { - "abort-controller": "^3.0.0", - "buffer": "^6.0.3", - "events": "^3.3.0", - "process": "^0.11.10", - "string_decoder": "^1.3.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "@types/yargs-parser": "*" } }, - "node_modules/compressible": { - "version": "2.0.18", + "node_modules/@types/yargs-parser": { + "version": "21.0.3", + "license": "MIT" + }, + "node_modules/@typescript-eslint/eslint-plugin": { + "version": "8.54.0", + "dev": true, "license": "MIT", "dependencies": { - "mime-db": ">= 1.43.0 < 2" + "@eslint-community/regexpp": "^4.12.2", + "@typescript-eslint/scope-manager": "8.54.0", + "@typescript-eslint/type-utils": "8.54.0", + "@typescript-eslint/utils": "8.54.0", + "@typescript-eslint/visitor-keys": "8.54.0", + "ignore": "^7.0.5", + "natural-compare": "^1.4.0", + "ts-api-utils": "^2.4.0" }, "engines": { - "node": ">= 0.6" - } - }, - "node_modules/compression": { - "version": "1.8.1", - "license": "MIT", - "dependencies": { - "bytes": "3.1.2", - "compressible": "~2.0.18", - "debug": "2.6.9", - "negotiator": "~0.6.4", - "on-headers": "~1.1.0", - "safe-buffer": "5.2.1", - "vary": "~1.1.2" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, - "engines": { - "node": ">= 0.8.0" + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "@typescript-eslint/parser": "^8.54.0", + "eslint": "^8.57.0 || ^9.0.0", + "typescript": ">=4.8.4 <6.0.0" } }, - "node_modules/compression/node_modules/debug": { - "version": "2.6.9", + "node_modules/@typescript-eslint/parser": { + "version": "8.54.0", + "dev": true, "license": "MIT", "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/compression/node_modules/ms": { - "version": "2.0.0", - "license": "MIT" - }, - "node_modules/compression/node_modules/negotiator": { - "version": "0.6.4", - "license": "MIT", + "@typescript-eslint/scope-manager": "8.54.0", + "@typescript-eslint/types": "8.54.0", + "@typescript-eslint/typescript-estree": "8.54.0", + "@typescript-eslint/visitor-keys": "8.54.0", + "debug": "^4.4.3" + }, "engines": { - "node": ">= 0.6" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^8.57.0 || ^9.0.0", + "typescript": ">=4.8.4 <6.0.0" } }, - "node_modules/concat-map": { - "version": "0.0.1", - "license": "MIT" - }, - "node_modules/concurrently": { - "version": "9.2.1", + "node_modules/@typescript-eslint/project-service": { + "version": "8.54.0", "dev": true, "license": "MIT", "dependencies": { - "chalk": "4.1.2", - "rxjs": "7.8.2", - "shell-quote": "1.8.3", - "supports-color": "8.1.1", - "tree-kill": "1.2.2", - "yargs": "17.7.2" - }, - "bin": { - "conc": "dist/bin/concurrently.js", - "concurrently": "dist/bin/concurrently.js" + "@typescript-eslint/tsconfig-utils": "^8.54.0", + "@typescript-eslint/types": "^8.54.0", + "debug": "^4.4.3" }, "engines": { - "node": ">=18" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { - "url": "https://github.com/open-cli-tools/concurrently?sponsor=1" + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "typescript": ">=4.8.4 <6.0.0" } }, - "node_modules/concurrently/node_modules/supports-color": { - "version": "8.1.1", + "node_modules/@typescript-eslint/scope-manager": { + "version": "8.54.0", "dev": true, "license": "MIT", "dependencies": { - "has-flag": "^4.0.0" + "@typescript-eslint/types": "8.54.0", + "@typescript-eslint/visitor-keys": "8.54.0" }, "engines": { - "node": ">=10" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { - "url": "https://github.com/chalk/supports-color?sponsor=1" + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" } }, - "node_modules/confusing-browser-globals": { - "version": "1.0.11", - "dev": true, - "license": "MIT" - }, - "node_modules/consola": { - "version": "3.4.2", + "node_modules/@typescript-eslint/tsconfig-utils": { + "version": "8.54.0", "dev": true, "license": "MIT", "engines": { - "node": "^14.18.0 || >=16.10.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "typescript": ">=4.8.4 <6.0.0" } }, - "node_modules/console.table": { - "version": "0.10.0", + "node_modules/@typescript-eslint/type-utils": { + "version": "8.54.0", "dev": true, "license": "MIT", "dependencies": { - "easy-table": "1.1.0" + "@typescript-eslint/types": "8.54.0", + "@typescript-eslint/typescript-estree": "8.54.0", + "@typescript-eslint/utils": "8.54.0", + "debug": "^4.4.3", + "ts-api-utils": "^2.4.0" }, "engines": { - "node": "> 0.10" - } - }, - "node_modules/content-disposition": { - "version": "0.5.4", - "license": "MIT", - "dependencies": { - "safe-buffer": "5.2.1" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/content-type": { - "version": "1.0.5", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/convert-source-map": { - "version": "2.0.0", - "license": "MIT" - }, - "node_modules/cookie": { - "version": "0.7.2", - "license": "MIT", - "engines": { - "node": ">= 0.6" + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^8.57.0 || ^9.0.0", + "typescript": ">=4.8.4 <6.0.0" } }, - "node_modules/cookie-signature": { - "version": "1.0.7", - "license": "MIT" - }, - "node_modules/core-js": { - "version": "3.48.0", + "node_modules/@typescript-eslint/types": { + "version": "8.54.0", "dev": true, - "hasInstallScript": true, "license": "MIT", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, "funding": { "type": "opencollective", - "url": "https://opencollective.com/core-js" + "url": "https://opencollective.com/typescript-eslint" } }, - "node_modules/core-js-compat": { - "version": "3.48.0", + "node_modules/@typescript-eslint/typescript-estree": { + "version": "8.54.0", "dev": true, "license": "MIT", "dependencies": { - "browserslist": "^4.28.1" + "@typescript-eslint/project-service": "8.54.0", + "@typescript-eslint/tsconfig-utils": "8.54.0", + "@typescript-eslint/types": "8.54.0", + "@typescript-eslint/visitor-keys": "8.54.0", + "debug": "^4.4.3", + "minimatch": "^9.0.5", + "semver": "^7.7.3", + "tinyglobby": "^0.2.15", + "ts-api-utils": "^2.4.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { "type": "opencollective", - "url": "https://opencollective.com/core-js" + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "typescript": ">=4.8.4 <6.0.0" } }, - "node_modules/core-util-is": { - "version": "1.0.3", - "dev": true, - "license": "MIT" - }, - "node_modules/cpu-features": { - "version": "0.0.10", + "node_modules/@typescript-eslint/utils": { + "version": "8.54.0", "dev": true, - "hasInstallScript": true, - "optional": true, + "license": "MIT", "dependencies": { - "buildcheck": "~0.0.6", - "nan": "^2.19.0" + "@eslint-community/eslint-utils": "^4.9.1", + "@typescript-eslint/scope-manager": "8.54.0", + "@typescript-eslint/types": "8.54.0", + "@typescript-eslint/typescript-estree": "8.54.0" }, "engines": { - "node": ">=10.0.0" - } - }, - "node_modules/crc-32": { - "version": "1.2.2", - "dev": true, - "license": "Apache-2.0", - "bin": { - "crc32": "bin/crc32.njs" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, - "engines": { - "node": ">=0.8" + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^8.57.0 || ^9.0.0", + "typescript": ">=4.8.4 <6.0.0" } }, - "node_modules/crc32-stream": { - "version": "6.0.0", + "node_modules/@typescript-eslint/visitor-keys": { + "version": "8.54.0", "dev": true, "license": "MIT", "dependencies": { - "crc-32": "^1.2.0", - "readable-stream": "^4.0.0" + "@typescript-eslint/types": "8.54.0", + "eslint-visitor-keys": "^4.2.1" }, "engines": { - "node": ">= 14" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" } }, - "node_modules/crc32-stream/node_modules/buffer": { - "version": "6.0.3", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } + "node_modules/@ungap/structured-clone": { + "version": "1.3.0", + "license": "ISC" + }, + "node_modules/@unrs/resolver-binding-linux-x64-gnu": { + "version": "1.11.1", + "cpu": [ + "x64" ], + "dev": true, "license": "MIT", - "dependencies": { - "base64-js": "^1.3.1", - "ieee754": "^1.2.1" - } + "optional": true, + "os": [ + "linux" + ] }, - "node_modules/crc32-stream/node_modules/events": { - "version": "3.3.0", + "node_modules/@unrs/resolver-binding-linux-x64-musl": { + "version": "1.11.1", + "cpu": [ + "x64" + ], "dev": true, "license": "MIT", - "engines": { - "node": ">=0.8.x" - } + "optional": true, + "os": [ + "linux" + ] }, - "node_modules/crc32-stream/node_modules/ieee754": { - "version": "1.2.1", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "BSD-3-Clause" + "node_modules/@zeit/schemas": { + "version": "2.36.0", + "license": "MIT" }, - "node_modules/crc32-stream/node_modules/readable-stream": { - "version": "4.7.0", + "node_modules/abort-controller": { + "version": "3.0.0", "dev": true, "license": "MIT", "dependencies": { - "abort-controller": "^3.0.0", - "buffer": "^6.0.3", - "events": "^3.3.0", - "process": "^0.11.10", - "string_decoder": "^1.3.0" + "event-target-shim": "^5.0.0" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": ">=6.5" } }, - "node_modules/create-require": { - "version": "1.1.1", - "dev": true, - "license": "MIT" - }, - "node_modules/cross-spawn": { - "version": "7.0.6", + "node_modules/accepts": { + "version": "2.0.0", "license": "MIT", "dependencies": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" + "mime-types": "^3.0.0", + "negotiator": "^1.0.0" }, "engines": { - "node": ">= 8" - } - }, - "node_modules/crypt": { - "version": "0.0.2", - "license": "BSD-3-Clause", - "engines": { - "node": "*" + "node": ">= 0.6" } }, - "node_modules/css-color-keywords": { - "version": "1.0.0", + "node_modules/acorn": { + "version": "8.15.0", "dev": true, - "license": "ISC", + "license": "MIT", + "bin": { + "acorn": "bin/acorn" + }, "engines": { - "node": ">=4" + "node": ">=0.4.0" } }, - "node_modules/css-to-react-native": { - "version": "3.2.0", + "node_modules/acorn-jsx": { + "version": "5.3.2", "dev": true, "license": "MIT", - "dependencies": { - "camelize": "^1.0.0", - "css-color-keywords": "^1.0.0", - "postcss-value-parser": "^4.0.2" + "peerDependencies": { + "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" } }, - "node_modules/cssstyle": { - "version": "4.6.0", + "node_modules/acorn-walk": { + "version": "8.3.4", "dev": true, "license": "MIT", "dependencies": { - "@asamuzakjp/css-color": "^3.2.0", - "rrweb-cssom": "^0.8.0" + "acorn": "^8.11.0" }, "engines": { - "node": ">=18" + "node": ">=0.4.0" } }, - "node_modules/csstype": { - "version": "3.2.3", - "dev": true, - "license": "MIT" - }, - "node_modules/damerau-levenshtein": { - "version": "1.0.8", - "dev": true, - "license": "BSD-2-Clause" - }, - "node_modules/data-uri-to-buffer": { - "version": "6.0.2", - "dev": true, + "node_modules/agent-base": { + "version": "7.1.4", "license": "MIT", "engines": { "node": ">= 14" } }, - "node_modules/data-urls": { - "version": "5.0.0", - "dev": true, + "node_modules/ajv": { + "version": "8.17.1", "license": "MIT", "dependencies": { - "whatwg-mimetype": "^4.0.0", - "whatwg-url": "^14.0.0" + "fast-deep-equal": "^3.1.3", + "fast-uri": "^3.0.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2" }, - "engines": { - "node": ">=18" + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" } }, - "node_modules/data-view-buffer": { - "version": "1.0.2", + "node_modules/ajv-draft-04": { + "version": "1.0.0", "dev": true, "license": "MIT", - "dependencies": { - "call-bound": "^1.0.3", - "es-errors": "^1.3.0", - "is-data-view": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" + "peerDependencies": { + "ajv": "^8.5.0" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "peerDependenciesMeta": { + "ajv": { + "optional": true + } } }, - "node_modules/data-view-byte-length": { - "version": "1.0.2", + "node_modules/ajv-errors": { + "version": "3.0.0", "dev": true, "license": "MIT", + "peerDependencies": { + "ajv": "^8.0.1" + } + }, + "node_modules/allure-commandline": { + "version": "2.36.0", + "dev": true, + "license": "Apache-2.0", + "bin": { + "allure": "bin/allure" + } + }, + "node_modules/allure-js-commons": { + "version": "3.4.5", + "license": "Apache-2.0", "dependencies": { - "call-bound": "^1.0.3", - "es-errors": "^1.3.0", - "is-data-view": "^1.0.2" + "md5": "^2.3.0" }, - "engines": { - "node": ">= 0.4" + "peerDependencies": { + "allure-playwright": "3.4.5" }, - "funding": { - "url": "https://github.com/sponsors/inspect-js" + "peerDependenciesMeta": { + "allure-playwright": { + "optional": true + } } }, - "node_modules/data-view-byte-offset": { - "version": "1.0.1", - "dev": true, - "license": "MIT", + "node_modules/allure-playwright": { + "version": "3.4.5", + "devOptional": true, + "license": "Apache-2.0", "dependencies": { - "call-bound": "^1.0.2", - "es-errors": "^1.3.0", - "is-data-view": "^1.0.1" - }, - "engines": { - "node": ">= 0.4" + "allure-js-commons": "3.4.5" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "peerDependencies": { + "@playwright/test": ">=1.53.0" } }, - "node_modules/dateformat": { - "version": "3.0.2", + "node_modules/ansi-align": { + "version": "3.0.1", + "license": "ISC", + "dependencies": { + "string-width": "^4.1.0" + } + }, + "node_modules/ansi-colors": { + "version": "4.1.3", "dev": true, "license": "MIT", "engines": { - "node": "*" + "node": ">=6" } }, - "node_modules/debug": { - "version": "4.4.3", + "node_modules/ansi-escapes": { + "version": "4.3.2", + "dev": true, "license": "MIT", "dependencies": { - "ms": "^2.1.3" + "type-fest": "^0.21.3" }, "engines": { - "node": ">=6.0" + "node": ">=8" }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/decimal.js": { - "version": "10.6.0", - "dev": true, - "license": "MIT" - }, - "node_modules/decko": { - "version": "1.2.0", - "dev": true - }, - "node_modules/dedent": { - "version": "1.7.1", - "dev": true, - "license": "MIT", - "peerDependencies": { - "babel-plugin-macros": "^3.1.0" - }, - "peerDependenciesMeta": { - "babel-plugin-macros": { - "optional": true - } - } - }, - "node_modules/deep-extend": { - "version": "0.6.0", - "license": "MIT", - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/deep-is": { - "version": "0.1.4", - "dev": true, - "license": "MIT" - }, - "node_modules/deepmerge": { - "version": "4.3.1", - "dev": true, + "node_modules/ansi-regex": { + "version": "5.0.1", "license": "MIT", "engines": { - "node": ">=0.10.0" + "node": ">=8" } }, - "node_modules/defaults": { - "version": "1.0.4", - "dev": true, + "node_modules/ansi-styles": { + "version": "4.3.0", "license": "MIT", "dependencies": { - "clone": "^1.0.2" + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/define-data-property": { - "version": "1.1.4", - "license": "MIT", + "node_modules/anymatch": { + "version": "3.1.3", + "license": "ISC", "dependencies": { - "es-define-property": "^1.0.0", - "es-errors": "^1.3.0", - "gopd": "^1.0.1" + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" }, "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">= 8" } }, - "node_modules/define-properties": { - "version": "1.2.1", - "dev": true, + "node_modules/anymatch/node_modules/picomatch": { + "version": "2.3.1", "license": "MIT", - "dependencies": { - "define-data-property": "^1.0.1", - "has-property-descriptors": "^1.0.0", - "object-keys": "^1.1.1" - }, "engines": { - "node": ">= 0.4" + "node": ">=8.6" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://github.com/sponsors/jonschlinkert" } }, - "node_modules/degenerator": { - "version": "5.0.1", + "node_modules/arch": { + "version": "2.2.0", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "node_modules/archiver": { + "version": "7.0.1", "dev": true, "license": "MIT", "dependencies": { - "ast-types": "^0.13.4", - "escodegen": "^2.1.0", - "esprima": "^4.0.1" + "archiver-utils": "^5.0.2", + "async": "^3.2.4", + "buffer-crc32": "^1.0.0", + "readable-stream": "^4.0.0", + "readdir-glob": "^1.1.2", + "tar-stream": "^3.0.0", + "zip-stream": "^6.0.1" }, "engines": { "node": ">= 14" } }, - "node_modules/delayed-stream": { - "version": "1.0.0", - "license": "MIT", - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/depd": { - "version": "2.0.0", + "node_modules/archiver-utils": { + "version": "5.0.2", + "dev": true, "license": "MIT", + "dependencies": { + "glob": "^10.0.0", + "graceful-fs": "^4.2.0", + "is-stream": "^2.0.1", + "lazystream": "^1.0.0", + "lodash": "^4.17.15", + "normalize-path": "^3.0.0", + "readable-stream": "^4.0.0" + }, "engines": { - "node": ">= 0.8" + "node": ">= 14" } }, - "node_modules/dependency-graph": { - "version": "0.11.0", + "node_modules/archiver-utils/node_modules/buffer": { + "version": "6.0.3", "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], "license": "MIT", - "engines": { - "node": ">= 0.6.0" + "dependencies": { + "base64-js": "^1.3.1", + "ieee754": "^1.2.1" } }, - "node_modules/destroy": { - "version": "1.2.0", + "node_modules/archiver-utils/node_modules/events": { + "version": "3.3.0", + "dev": true, "license": "MIT", "engines": { - "node": ">= 0.8", - "npm": "1.2.8000 || >= 1.4.16" + "node": ">=0.8.x" } }, - "node_modules/detect-libc": { - "version": "2.1.2", - "license": "Apache-2.0", - "engines": { - "node": ">=8" + "node_modules/archiver-utils/node_modules/glob": { + "version": "10.5.0", + "dev": true, + "license": "ISC", + "dependencies": { + "foreground-child": "^3.1.0", + "jackspeak": "^3.1.2", + "minimatch": "^9.0.4", + "minipass": "^7.1.2", + "package-json-from-dist": "^1.0.0", + "path-scurry": "^1.11.1" + }, + "bin": { + "glob": "dist/esm/bin.mjs" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/detect-newline": { - "version": "3.1.0", + "node_modules/archiver-utils/node_modules/ieee754": { + "version": "1.2.1", "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "BSD-3-Clause" }, - "node_modules/diff": { - "version": "4.0.4", + "node_modules/archiver-utils/node_modules/lru-cache": { + "version": "10.4.3", "dev": true, - "license": "BSD-3-Clause", - "engines": { - "node": ">=0.3.1" - } + "license": "ISC" }, - "node_modules/docker-compose": { - "version": "1.3.1", + "node_modules/archiver-utils/node_modules/path-scurry": { + "version": "1.11.1", "dev": true, - "license": "MIT", + "license": "BlueOak-1.0.0", "dependencies": { - "yaml": "^2.2.2" + "lru-cache": "^10.2.0", + "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" }, "engines": { - "node": ">= 6.0.0" + "node": ">=16 || 14 >=14.18" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/docker-modem": { - "version": "5.0.6", + "node_modules/archiver-utils/node_modules/readable-stream": { + "version": "4.7.0", "dev": true, - "license": "Apache-2.0", + "license": "MIT", "dependencies": { - "debug": "^4.1.1", - "readable-stream": "^3.5.0", - "split-ca": "^1.0.1", - "ssh2": "^1.15.0" + "abort-controller": "^3.0.0", + "buffer": "^6.0.3", + "events": "^3.3.0", + "process": "^0.11.10", + "string_decoder": "^1.3.0" }, "engines": { - "node": ">= 8.0" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" } }, - "node_modules/dockerode": { - "version": "4.0.9", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@balena/dockerignore": "^1.0.2", - "@grpc/grpc-js": "^1.11.1", - "@grpc/proto-loader": "^0.7.13", - "docker-modem": "^5.0.6", - "protobufjs": "^7.3.2", - "tar-fs": "^2.1.4", - "uuid": "^10.0.0" - }, - "engines": { - "node": ">= 8.0" - } - }, - "node_modules/dockerode/node_modules/tar-fs": { - "version": "2.1.4", + "node_modules/archiver/node_modules/buffer": { + "version": "6.0.3", "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], "license": "MIT", "dependencies": { - "chownr": "^1.1.1", - "mkdirp-classic": "^0.5.2", - "pump": "^3.0.0", - "tar-stream": "^2.1.4" + "base64-js": "^1.3.1", + "ieee754": "^1.2.1" } }, - "node_modules/dockerode/node_modules/tar-stream": { - "version": "2.2.0", + "node_modules/archiver/node_modules/events": { + "version": "3.3.0", "dev": true, "license": "MIT", - "dependencies": { - "bl": "^4.0.3", - "end-of-stream": "^1.4.1", - "fs-constants": "^1.0.0", - "inherits": "^2.0.3", - "readable-stream": "^3.1.1" - }, "engines": { - "node": ">=6" + "node": ">=0.8.x" } }, - "node_modules/dockerode/node_modules/uuid": { - "version": "10.0.0", + "node_modules/archiver/node_modules/ieee754": { + "version": "1.2.1", "dev": true, "funding": [ - "https://github.com/sponsors/broofa", - "https://github.com/sponsors/ctavan" + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } ], + "license": "BSD-3-Clause" + }, + "node_modules/archiver/node_modules/readable-stream": { + "version": "4.7.0", + "dev": true, "license": "MIT", - "bin": { - "uuid": "dist/bin/uuid" + "dependencies": { + "abort-controller": "^3.0.0", + "buffer": "^6.0.3", + "events": "^3.3.0", + "process": "^0.11.10", + "string_decoder": "^1.3.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" } }, - "node_modules/doctrine": { - "version": "2.1.0", + "node_modules/arg": { + "version": "5.0.2", + "license": "MIT" + }, + "node_modules/argparse": { + "version": "2.0.1", + "license": "Python-2.0" + }, + "node_modules/aria-query": { + "version": "5.3.2", "dev": true, "license": "Apache-2.0", - "dependencies": { - "esutils": "^2.0.2" - }, "engines": { - "node": ">=0.10.0" + "node": ">= 0.4" } }, - "node_modules/dom-serializer": { - "version": "2.0.0", + "node_modules/array-buffer-byte-length": { + "version": "1.0.2", "dev": true, "license": "MIT", "dependencies": { - "domelementtype": "^2.3.0", - "domhandler": "^5.0.2", - "entities": "^4.2.0" + "call-bound": "^1.0.3", + "is-array-buffer": "^3.0.5" + }, + "engines": { + "node": ">= 0.4" }, "funding": { - "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/dom-serializer/node_modules/entities": { - "version": "4.5.0", + "node_modules/array-flatten": { + "version": "1.1.1", + "license": "MIT" + }, + "node_modules/array-includes": { + "version": "3.1.9", "dev": true, - "license": "BSD-2-Clause", + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.4", + "define-properties": "^1.2.1", + "es-abstract": "^1.24.0", + "es-object-atoms": "^1.1.1", + "get-intrinsic": "^1.3.0", + "is-string": "^1.1.1", + "math-intrinsics": "^1.1.0" + }, "engines": { - "node": ">=0.12" + "node": ">= 0.4" }, "funding": { - "url": "https://github.com/fb55/entities?sponsor=1" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/domelementtype": { - "version": "2.3.0", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/fb55" - } - ], - "license": "BSD-2-Clause" - }, - "node_modules/domhandler": { - "version": "5.0.3", + "node_modules/array.prototype.findlast": { + "version": "1.2.5", "dev": true, - "license": "BSD-2-Clause", + "license": "MIT", "dependencies": { - "domelementtype": "^2.3.0" + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0", + "es-shim-unscopables": "^1.0.2" }, "engines": { - "node": ">= 4" + "node": ">= 0.4" }, "funding": { - "url": "https://github.com/fb55/domhandler?sponsor=1" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/dompurify": { - "version": "3.3.1", + "node_modules/array.prototype.findlastindex": { + "version": "1.2.6", "dev": true, - "license": "(MPL-2.0 OR Apache-2.0)", - "optionalDependencies": { - "@types/trusted-types": "^2.0.7" + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.4", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.9", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.1.1", + "es-shim-unscopables": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/domutils": { - "version": "3.2.2", + "node_modules/array.prototype.flat": { + "version": "1.3.3", "dev": true, - "license": "BSD-2-Clause", + "license": "MIT", "dependencies": { - "dom-serializer": "^2.0.0", - "domelementtype": "^2.3.0", - "domhandler": "^5.0.3" + "call-bind": "^1.0.8", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.5", + "es-shim-unscopables": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" }, "funding": { - "url": "https://github.com/fb55/domutils?sponsor=1" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/dotenv": { - "version": "17.2.4", - "license": "BSD-2-Clause", + "node_modules/array.prototype.flatmap": { + "version": "1.3.3", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.5", + "es-shim-unscopables": "^1.0.2" + }, "engines": { - "node": ">=12" + "node": ">= 0.4" }, "funding": { - "url": "https://dotenvx.com" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/drange": { - "version": "1.1.1", + "node_modules/array.prototype.tosorted": { + "version": "1.1.4", + "dev": true, "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.3", + "es-errors": "^1.3.0", + "es-shim-unscopables": "^1.0.2" + }, "engines": { - "node": ">=4" + "node": ">= 0.4" } }, - "node_modules/dunder-proto": { - "version": "1.0.1", + "node_modules/arraybuffer.prototype.slice": { + "version": "1.0.4", + "dev": true, "license": "MIT", "dependencies": { - "call-bind-apply-helpers": "^1.0.1", + "array-buffer-byte-length": "^1.0.1", + "call-bind": "^1.0.8", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.5", "es-errors": "^1.3.0", - "gopd": "^1.2.0" + "get-intrinsic": "^1.2.6", + "is-array-buffer": "^3.0.4" }, "engines": { "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/eastasianwidth": { - "version": "0.2.0", - "license": "MIT" - }, - "node_modules/easy-table": { - "version": "1.1.0", + "node_modules/as-table": { + "version": "1.0.55", "dev": true, "license": "MIT", - "optionalDependencies": { - "wcwidth": ">=1.0.1" + "dependencies": { + "printable-characters": "^1.0.42" } }, - "node_modules/ee-first": { - "version": "1.1.1", - "license": "MIT" - }, - "node_modules/electron-to-chromium": { - "version": "1.5.286", - "license": "ISC" + "node_modules/asn1": { + "version": "0.2.6", + "dev": true, + "license": "MIT", + "dependencies": { + "safer-buffer": "~2.1.0" + } }, - "node_modules/emittery": { - "version": "0.13.1", + "node_modules/ast-types": { + "version": "0.13.4", "dev": true, "license": "MIT", - "engines": { - "node": ">=12" + "dependencies": { + "tslib": "^2.0.1" }, - "funding": { - "url": "https://github.com/sindresorhus/emittery?sponsor=1" + "engines": { + "node": ">=4" } }, - "node_modules/emoji-regex": { - "version": "9.2.2", + "node_modules/ast-types-flow": { + "version": "0.0.8", + "dev": true, "license": "MIT" }, - "node_modules/encodeurl": { - "version": "2.0.0", + "node_modules/astring": { + "version": "1.9.0", + "dev": true, "license": "MIT", - "engines": { - "node": ">= 0.8" + "bin": { + "astring": "bin/astring" } }, - "node_modules/end-of-stream": { - "version": "1.4.5", - "license": "MIT", - "dependencies": { - "once": "^1.4.0" - } + "node_modules/async": { + "version": "3.2.6", + "dev": true, + "license": "MIT" }, - "node_modules/entities": { - "version": "7.0.1", + "node_modules/async-function": { + "version": "1.0.0", "dev": true, - "license": "BSD-2-Clause", + "license": "MIT", "engines": { - "node": ">=0.12" - }, - "funding": { - "url": "https://github.com/fb55/entities?sponsor=1" + "node": ">= 0.4" } }, - "node_modules/error-ex": { - "version": "1.3.4", + "node_modules/async-lock": { + "version": "1.4.1", "dev": true, + "license": "MIT" + }, + "node_modules/asynckit": { + "version": "0.4.0", + "license": "MIT" + }, + "node_modules/atomic-sleep": { + "version": "1.0.0", "license": "MIT", - "dependencies": { - "is-arrayish": "^0.2.1" + "engines": { + "node": ">=8.0.0" } }, - "node_modules/es-abstract": { - "version": "1.24.1", - "dev": true, + "node_modules/available-typed-arrays": { + "version": "1.0.7", "license": "MIT", "dependencies": { - "array-buffer-byte-length": "^1.0.2", - "arraybuffer.prototype.slice": "^1.0.4", - "available-typed-arrays": "^1.0.7", - "call-bind": "^1.0.8", - "call-bound": "^1.0.4", - "data-view-buffer": "^1.0.2", - "data-view-byte-length": "^1.0.2", - "data-view-byte-offset": "^1.0.1", - "es-define-property": "^1.0.1", - "es-errors": "^1.3.0", - "es-object-atoms": "^1.1.1", - "es-set-tostringtag": "^2.1.0", - "es-to-primitive": "^1.3.0", - "function.prototype.name": "^1.1.8", - "get-intrinsic": "^1.3.0", - "get-proto": "^1.0.1", - "get-symbol-description": "^1.1.0", - "globalthis": "^1.0.4", - "gopd": "^1.2.0", - "has-property-descriptors": "^1.0.2", - "has-proto": "^1.2.0", - "has-symbols": "^1.1.0", - "hasown": "^2.0.2", - "internal-slot": "^1.1.0", - "is-array-buffer": "^3.0.5", - "is-callable": "^1.2.7", - "is-data-view": "^1.0.2", - "is-negative-zero": "^2.0.3", - "is-regex": "^1.2.1", - "is-set": "^2.0.3", - "is-shared-array-buffer": "^1.0.4", - "is-string": "^1.1.1", - "is-typed-array": "^1.1.15", - "is-weakref": "^1.1.1", - "math-intrinsics": "^1.1.0", - "object-inspect": "^1.13.4", - "object-keys": "^1.1.1", - "object.assign": "^4.1.7", - "own-keys": "^1.0.1", - "regexp.prototype.flags": "^1.5.4", - "safe-array-concat": "^1.1.3", - "safe-push-apply": "^1.0.0", - "safe-regex-test": "^1.1.0", - "set-proto": "^1.0.0", - "stop-iteration-iterator": "^1.1.0", - "string.prototype.trim": "^1.2.10", - "string.prototype.trimend": "^1.0.9", - "string.prototype.trimstart": "^1.0.8", - "typed-array-buffer": "^1.0.3", - "typed-array-byte-length": "^1.0.3", - "typed-array-byte-offset": "^1.0.4", - "typed-array-length": "^1.0.7", - "unbox-primitive": "^1.1.0", - "which-typed-array": "^1.1.19" + "possible-typed-array-names": "^1.0.0" }, "engines": { "node": ">= 0.4" @@ -8972,1825 +9535,1473 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/es-aggregate-error": { - "version": "1.0.14", - "dev": true, - "license": "MIT", + "node_modules/aws-embedded-metrics": { + "version": "4.2.1", + "license": "Apache-2.0", "dependencies": { - "define-data-property": "^1.1.4", - "define-properties": "^1.2.1", - "es-abstract": "^1.24.0", - "es-errors": "^1.3.0", - "function-bind": "^1.1.2", - "globalthis": "^1.0.4", - "has-property-descriptors": "^1.0.2", - "set-function-name": "^2.0.2" + "@datastructures-js/heap": "^4.0.2" }, "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">=10.0.0" } }, - "node_modules/es-define-property": { - "version": "1.0.1", + "node_modules/aws-lambda": { + "version": "1.0.6", "license": "MIT", - "engines": { - "node": ">= 0.4" + "dependencies": { + "aws-sdk": "*", + "commander": "^3.0.2", + "js-yaml": "^3.13.1", + "watchpack": "^2.0.0-beta.10" + }, + "bin": { + "lambda": "bin/lambda" } }, - "node_modules/es-errors": { - "version": "1.3.0", + "node_modules/aws-lambda/node_modules/argparse": { + "version": "1.0.10", "license": "MIT", - "engines": { - "node": ">= 0.4" + "dependencies": { + "sprintf-js": "~1.0.2" } }, - "node_modules/es-iterator-helpers": { - "version": "1.2.2", - "dev": true, + "node_modules/aws-lambda/node_modules/commander": { + "version": "3.0.2", + "license": "MIT" + }, + "node_modules/aws-lambda/node_modules/js-yaml": { + "version": "3.14.2", "license": "MIT", "dependencies": { - "call-bind": "^1.0.8", - "call-bound": "^1.0.4", - "define-properties": "^1.2.1", - "es-abstract": "^1.24.1", - "es-errors": "^1.3.0", - "es-set-tostringtag": "^2.1.0", - "function-bind": "^1.1.2", - "get-intrinsic": "^1.3.0", - "globalthis": "^1.0.4", - "gopd": "^1.2.0", - "has-property-descriptors": "^1.0.2", - "has-proto": "^1.2.0", - "has-symbols": "^1.1.0", - "internal-slot": "^1.1.0", - "iterator.prototype": "^1.1.5", - "safe-array-concat": "^1.1.3" + "argparse": "^1.0.7", + "esprima": "^4.0.0" }, - "engines": { - "node": ">= 0.4" + "bin": { + "js-yaml": "bin/js-yaml.js" } }, - "node_modules/es-object-atoms": { - "version": "1.1.1", - "license": "MIT", + "node_modules/aws-sdk": { + "version": "2.1693.0", + "hasInstallScript": true, + "license": "Apache-2.0", "dependencies": { - "es-errors": "^1.3.0" + "buffer": "4.9.2", + "events": "1.1.1", + "ieee754": "1.1.13", + "jmespath": "0.16.0", + "querystring": "0.2.0", + "sax": "1.2.1", + "url": "0.10.3", + "util": "^0.12.4", + "uuid": "8.0.0", + "xml2js": "0.6.2" }, "engines": { - "node": ">= 0.4" + "node": ">= 10.0.0" } }, - "node_modules/es-set-tostringtag": { - "version": "2.1.0", - "license": "MIT", - "dependencies": { - "es-errors": "^1.3.0", - "get-intrinsic": "^1.2.6", - "has-tostringtag": "^1.0.2", - "hasown": "^2.0.2" - }, + "node_modules/axe-core": { + "version": "4.11.1", + "dev": true, + "license": "MPL-2.0", "engines": { - "node": ">= 0.4" + "node": ">=4" } }, - "node_modules/es-shim-unscopables": { - "version": "1.1.0", - "dev": true, + "node_modules/axios": { + "version": "1.13.5", "license": "MIT", "dependencies": { - "hasown": "^2.0.2" - }, - "engines": { - "node": ">= 0.4" + "follow-redirects": "^1.15.11", + "form-data": "^4.0.5", + "proxy-from-env": "^1.1.0" } }, - "node_modules/es-to-primitive": { - "version": "1.3.0", + "node_modules/axobject-query": { + "version": "4.1.0", "dev": true, - "license": "MIT", - "dependencies": { - "is-callable": "^1.2.7", - "is-date-object": "^1.0.5", - "is-symbol": "^1.0.4" - }, + "license": "Apache-2.0", "engines": { "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/es6-promise": { - "version": "3.3.1", + "node_modules/b4a": { + "version": "1.7.3", "dev": true, - "license": "MIT" + "license": "Apache-2.0", + "peerDependencies": { + "react-native-b4a": "*" + }, + "peerDependenciesMeta": { + "react-native-b4a": { + "optional": true + } + } }, - "node_modules/esbuild": { - "version": "0.27.2", - "hasInstallScript": true, + "node_modules/babel-jest": { + "version": "30.2.0", + "dev": true, "license": "MIT", - "bin": { - "esbuild": "bin/esbuild" + "dependencies": { + "@jest/transform": "30.2.0", + "@types/babel__core": "^7.20.5", + "babel-plugin-istanbul": "^7.0.1", + "babel-preset-jest": "30.2.0", + "chalk": "^4.1.2", + "graceful-fs": "^4.2.11", + "slash": "^3.0.0" }, "engines": { - "node": ">=18" + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" }, - "optionalDependencies": { - "@esbuild/aix-ppc64": "0.27.2", - "@esbuild/android-arm": "0.27.2", - "@esbuild/android-arm64": "0.27.2", - "@esbuild/android-x64": "0.27.2", - "@esbuild/darwin-arm64": "0.27.2", - "@esbuild/darwin-x64": "0.27.2", - "@esbuild/freebsd-arm64": "0.27.2", - "@esbuild/freebsd-x64": "0.27.2", - "@esbuild/linux-arm": "0.27.2", - "@esbuild/linux-arm64": "0.27.2", - "@esbuild/linux-ia32": "0.27.2", - "@esbuild/linux-loong64": "0.27.2", - "@esbuild/linux-mips64el": "0.27.2", - "@esbuild/linux-ppc64": "0.27.2", - "@esbuild/linux-riscv64": "0.27.2", - "@esbuild/linux-s390x": "0.27.2", - "@esbuild/linux-x64": "0.27.2", - "@esbuild/netbsd-arm64": "0.27.2", - "@esbuild/netbsd-x64": "0.27.2", - "@esbuild/openbsd-arm64": "0.27.2", - "@esbuild/openbsd-x64": "0.27.2", - "@esbuild/openharmony-arm64": "0.27.2", - "@esbuild/sunos-x64": "0.27.2", - "@esbuild/win32-arm64": "0.27.2", - "@esbuild/win32-ia32": "0.27.2", - "@esbuild/win32-x64": "0.27.2" + "peerDependencies": { + "@babel/core": "^7.11.0 || ^8.0.0-0" } }, - "node_modules/esbuild/node_modules/@esbuild/linux-x64": { - "version": "0.27.2", - "cpu": [ - "x64" - ], - "license": "MIT", - "optional": true, - "os": [ - "linux" + "node_modules/babel-plugin-istanbul": { + "version": "7.0.1", + "license": "BSD-3-Clause", + "workspaces": [ + "test/babel-8" ], + "dependencies": { + "@babel/helper-plugin-utils": "^7.0.0", + "@istanbuljs/load-nyc-config": "^1.0.0", + "@istanbuljs/schema": "^0.1.3", + "istanbul-lib-instrument": "^6.0.2", + "test-exclude": "^6.0.0" + }, "engines": { - "node": ">=18" + "node": ">=12" } }, - "node_modules/escalade": { - "version": "3.2.0", + "node_modules/babel-plugin-jest-hoist": { + "version": "30.2.0", + "dev": true, "license": "MIT", + "dependencies": { + "@types/babel__core": "^7.20.5" + }, "engines": { - "node": ">=6" + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" } }, - "node_modules/escape-html": { - "version": "1.0.3", - "license": "MIT" - }, - "node_modules/escape-string-regexp": { - "version": "4.0.0", - "dev": true, + "node_modules/babel-preset-current-node-syntax": { + "version": "1.2.0", "license": "MIT", - "engines": { - "node": ">=10" + "dependencies": { + "@babel/plugin-syntax-async-generators": "^7.8.4", + "@babel/plugin-syntax-bigint": "^7.8.3", + "@babel/plugin-syntax-class-properties": "^7.12.13", + "@babel/plugin-syntax-class-static-block": "^7.14.5", + "@babel/plugin-syntax-import-attributes": "^7.24.7", + "@babel/plugin-syntax-import-meta": "^7.10.4", + "@babel/plugin-syntax-json-strings": "^7.8.3", + "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", + "@babel/plugin-syntax-numeric-separator": "^7.10.4", + "@babel/plugin-syntax-object-rest-spread": "^7.8.3", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", + "@babel/plugin-syntax-optional-chaining": "^7.8.3", + "@babel/plugin-syntax-private-property-in-object": "^7.14.5", + "@babel/plugin-syntax-top-level-await": "^7.14.5" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "peerDependencies": { + "@babel/core": "^7.0.0 || ^8.0.0-0" } }, - "node_modules/escodegen": { - "version": "2.1.0", + "node_modules/babel-preset-jest": { + "version": "30.2.0", "dev": true, - "license": "BSD-2-Clause", + "license": "MIT", "dependencies": { - "esprima": "^4.0.1", - "estraverse": "^5.2.0", - "esutils": "^2.0.2" - }, - "bin": { - "escodegen": "bin/escodegen.js", - "esgenerate": "bin/esgenerate.js" + "babel-plugin-jest-hoist": "30.2.0", + "babel-preset-current-node-syntax": "^1.2.0" }, "engines": { - "node": ">=6.0" + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" }, - "optionalDependencies": { - "source-map": "~0.6.1" + "peerDependencies": { + "@babel/core": "^7.11.0 || ^8.0.0-beta.1" } }, - "node_modules/eslint": { - "version": "9.39.2", + "node_modules/balanced-match": { + "version": "1.0.2", + "license": "MIT" + }, + "node_modules/bare-events": { + "version": "2.8.2", "dev": true, - "license": "MIT", - "dependencies": { - "@eslint-community/eslint-utils": "^4.8.0", - "@eslint-community/regexpp": "^4.12.1", - "@eslint/config-array": "^0.21.1", - "@eslint/config-helpers": "^0.4.2", - "@eslint/core": "^0.17.0", - "@eslint/eslintrc": "^3.3.1", - "@eslint/js": "9.39.2", - "@eslint/plugin-kit": "^0.4.1", - "@humanfs/node": "^0.16.6", - "@humanwhocodes/module-importer": "^1.0.1", - "@humanwhocodes/retry": "^0.4.2", - "@types/estree": "^1.0.6", - "ajv": "^6.12.4", - "chalk": "^4.0.0", - "cross-spawn": "^7.0.6", - "debug": "^4.3.2", - "escape-string-regexp": "^4.0.0", - "eslint-scope": "^8.4.0", - "eslint-visitor-keys": "^4.2.1", - "espree": "^10.4.0", - "esquery": "^1.5.0", - "esutils": "^2.0.2", - "fast-deep-equal": "^3.1.3", - "file-entry-cache": "^8.0.0", - "find-up": "^5.0.0", - "glob-parent": "^6.0.2", - "ignore": "^5.2.0", - "imurmurhash": "^0.1.4", - "is-glob": "^4.0.0", - "json-stable-stringify-without-jsonify": "^1.0.1", - "lodash.merge": "^4.6.2", - "minimatch": "^3.1.2", - "natural-compare": "^1.4.0", - "optionator": "^0.9.3" + "license": "Apache-2.0", + "peerDependencies": { + "bare-abort-controller": "*" }, - "bin": { - "eslint": "bin/eslint.js" + "peerDependenciesMeta": { + "bare-abort-controller": { + "optional": true + } + } + }, + "node_modules/bare-fs": { + "version": "4.5.3", + "dev": true, + "license": "Apache-2.0", + "optional": true, + "dependencies": { + "bare-events": "^2.5.4", + "bare-path": "^3.0.0", + "bare-stream": "^2.6.4", + "bare-url": "^2.2.2", + "fast-fifo": "^1.3.2" }, "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "url": "https://eslint.org/donate" + "bare": ">=1.16.0" }, "peerDependencies": { - "jiti": "*" + "bare-buffer": "*" }, "peerDependenciesMeta": { - "jiti": { + "bare-buffer": { "optional": true } } }, - "node_modules/eslint-config-airbnb-extended": { - "version": "1.0.11", + "node_modules/bare-os": { + "version": "3.6.2", "dev": true, - "license": "MIT", - "dependencies": { - "confusing-browser-globals": "^1.0.11", - "globals": "^16.0.0" - }, - "peerDependencies": { - "@next/eslint-plugin-next": "15.x", - "@stylistic/eslint-plugin": "3.x", - "@types/eslint-plugin-jsx-a11y": "6.x", - "eslint": "9.x", - "eslint-import-resolver-typescript": "4.x", - "eslint-plugin-import-x": "4.x", - "eslint-plugin-jsx-a11y": "6.x", - "eslint-plugin-n": "17.x", - "eslint-plugin-react": "7.x", - "eslint-plugin-react-hooks": "5.x", - "typescript-eslint": "8.x" - }, - "peerDependenciesMeta": { - "@next/eslint-plugin-next": { - "optional": true - }, - "@stylistic/eslint-plugin": { - "optional": true - }, - "@types/eslint-plugin-jsx-a11y": { - "optional": true - }, - "eslint": { - "optional": false - }, - "eslint-import-resolver-typescript": { - "optional": false - }, - "eslint-plugin-jsx-a11y": { - "optional": false - }, - "eslint-plugin-n": { - "optional": true - }, - "eslint-plugin-react": { - "optional": true - }, - "eslint-plugin-react-hooks": { - "optional": true - }, - "typescript-eslint": { - "optional": true - } - } - }, - "node_modules/eslint-config-airbnb-extended/node_modules/globals": { - "version": "16.5.0", - "dev": true, - "license": "MIT", + "license": "Apache-2.0", + "optional": true, "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "bare": ">=1.14.0" } }, - "node_modules/eslint-config-next": { - "version": "15.5.12", + "node_modules/bare-path": { + "version": "3.0.0", "dev": true, - "license": "MIT", + "license": "Apache-2.0", + "optional": true, "dependencies": { - "@next/eslint-plugin-next": "15.5.12", - "@rushstack/eslint-patch": "^1.10.3", - "@typescript-eslint/eslint-plugin": "^5.4.2 || ^6.0.0 || ^7.0.0 || ^8.0.0", - "@typescript-eslint/parser": "^5.4.2 || ^6.0.0 || ^7.0.0 || ^8.0.0", - "eslint-import-resolver-node": "^0.3.6", - "eslint-import-resolver-typescript": "^3.5.2", - "eslint-plugin-import": "^2.31.0", - "eslint-plugin-jsx-a11y": "^6.10.0", - "eslint-plugin-react": "^7.37.0", - "eslint-plugin-react-hooks": "^5.0.0" - }, - "peerDependencies": { - "eslint": "^7.23.0 || ^8.0.0 || ^9.0.0", - "typescript": ">=3.3.1" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } + "bare-os": "^3.0.1" } }, - "node_modules/eslint-config-next/node_modules/eslint-import-resolver-typescript": { - "version": "3.10.1", + "node_modules/bare-stream": { + "version": "2.7.0", "dev": true, - "license": "ISC", + "license": "Apache-2.0", + "optional": true, "dependencies": { - "@nolyfill/is-core-module": "1.0.39", - "debug": "^4.4.0", - "get-tsconfig": "^4.10.0", - "is-bun-module": "^2.0.0", - "stable-hash": "^0.0.5", - "tinyglobby": "^0.2.13", - "unrs-resolver": "^1.6.2" - }, - "engines": { - "node": "^14.18.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint-import-resolver-typescript" + "streamx": "^2.21.0" }, "peerDependencies": { - "eslint": "*", - "eslint-plugin-import": "*", - "eslint-plugin-import-x": "*" + "bare-buffer": "*", + "bare-events": "*" }, "peerDependenciesMeta": { - "eslint-plugin-import": { + "bare-buffer": { "optional": true }, - "eslint-plugin-import-x": { + "bare-events": { "optional": true } } }, - "node_modules/eslint-config-prettier": { - "version": "10.1.8", + "node_modules/bare-url": { + "version": "2.3.2", "dev": true, - "license": "MIT", - "bin": { - "eslint-config-prettier": "bin/cli.js" - }, - "funding": { - "url": "https://opencollective.com/eslint-config-prettier" - }, - "peerDependencies": { - "eslint": ">=7.0.0" + "license": "Apache-2.0", + "optional": true, + "dependencies": { + "bare-path": "^3.0.0" } }, - "node_modules/eslint-import-context": { - "version": "0.1.9", - "dev": true, - "license": "MIT", - "dependencies": { - "get-tsconfig": "^4.10.1", - "stable-hash-x": "^0.2.0" - }, - "engines": { - "node": "^12.20.0 || ^14.18.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint-import-context" - }, - "peerDependencies": { - "unrs-resolver": "^1.0.0" - }, - "peerDependenciesMeta": { - "unrs-resolver": { - "optional": true + "node_modules/base64-js": { + "version": "1.5.1", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" } + ], + "license": "MIT" + }, + "node_modules/baseline-browser-mapping": { + "version": "2.9.19", + "license": "Apache-2.0", + "bin": { + "baseline-browser-mapping": "dist/cli.js" } }, - "node_modules/eslint-import-resolver-node": { - "version": "0.3.9", + "node_modules/basic-ftp": { + "version": "5.1.0", "dev": true, "license": "MIT", - "dependencies": { - "debug": "^3.2.7", - "is-core-module": "^2.13.0", - "resolve": "^1.22.4" + "engines": { + "node": ">=10.0.0" } }, - "node_modules/eslint-import-resolver-node/node_modules/debug": { - "version": "3.2.7", + "node_modules/bcrypt-pbkdf": { + "version": "1.0.2", "dev": true, - "license": "MIT", + "license": "BSD-3-Clause", "dependencies": { - "ms": "^2.1.1" + "tweetnacl": "^0.14.3" } }, - "node_modules/eslint-import-resolver-typescript": { - "version": "4.4.4", + "node_modules/binary-extensions": { + "version": "2.3.0", "dev": true, - "license": "ISC", - "dependencies": { - "debug": "^4.4.1", - "eslint-import-context": "^0.1.8", - "get-tsconfig": "^4.10.1", - "is-bun-module": "^2.0.0", - "stable-hash-x": "^0.2.0", - "tinyglobby": "^0.2.14", - "unrs-resolver": "^1.7.11" - }, + "license": "MIT", "engines": { - "node": "^16.17.0 || >=18.6.0" + "node": ">=8" }, "funding": { - "url": "https://opencollective.com/eslint-import-resolver-typescript" - }, - "peerDependencies": { - "eslint": "*", - "eslint-plugin-import": "*", - "eslint-plugin-import-x": "*" - }, - "peerDependenciesMeta": { - "eslint-plugin-import": { - "optional": true - }, - "eslint-plugin-import-x": { - "optional": true - } + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/eslint-module-utils": { - "version": "2.12.1", + "node_modules/bl": { + "version": "4.1.0", "dev": true, "license": "MIT", "dependencies": { - "debug": "^3.2.7" - }, - "engines": { - "node": ">=4" - }, - "peerDependenciesMeta": { - "eslint": { - "optional": true - } + "buffer": "^5.5.0", + "inherits": "^2.0.4", + "readable-stream": "^3.4.0" } }, - "node_modules/eslint-module-utils/node_modules/debug": { - "version": "3.2.7", + "node_modules/bl/node_modules/buffer": { + "version": "5.7.1", "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], "license": "MIT", "dependencies": { - "ms": "^2.1.1" + "base64-js": "^1.3.1", + "ieee754": "^1.1.13" } }, - "node_modules/eslint-plugin-html": { - "version": "8.1.4", - "dev": true, - "license": "ISC", + "node_modules/body-parser": { + "version": "2.2.2", + "license": "MIT", "dependencies": { - "htmlparser2": "^10.0.0" + "bytes": "^3.1.2", + "content-type": "^1.0.5", + "debug": "^4.4.3", + "http-errors": "^2.0.0", + "iconv-lite": "^0.7.0", + "on-finished": "^2.4.1", + "qs": "^6.14.1", + "raw-body": "^3.0.1", + "type-is": "^2.0.1" }, "engines": { - "node": ">=16.0.0" + "node": ">=18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" } }, - "node_modules/eslint-plugin-import": { - "version": "2.32.0", - "dev": true, + "node_modules/bowser": { + "version": "2.13.1", + "license": "MIT" + }, + "node_modules/boxen": { + "version": "7.0.0", "license": "MIT", "dependencies": { - "@rtsao/scc": "^1.1.0", - "array-includes": "^3.1.9", - "array.prototype.findlastindex": "^1.2.6", - "array.prototype.flat": "^1.3.3", - "array.prototype.flatmap": "^1.3.3", - "debug": "^3.2.7", - "doctrine": "^2.1.0", - "eslint-import-resolver-node": "^0.3.9", - "eslint-module-utils": "^2.12.1", - "hasown": "^2.0.2", - "is-core-module": "^2.16.1", - "is-glob": "^4.0.3", - "minimatch": "^3.1.2", - "object.fromentries": "^2.0.8", - "object.groupby": "^1.0.3", - "object.values": "^1.2.1", - "semver": "^6.3.1", - "string.prototype.trimend": "^1.0.9", - "tsconfig-paths": "^3.15.0" + "ansi-align": "^3.0.1", + "camelcase": "^7.0.0", + "chalk": "^5.0.1", + "cli-boxes": "^3.0.0", + "string-width": "^5.1.2", + "type-fest": "^2.13.0", + "widest-line": "^4.0.1", + "wrap-ansi": "^8.0.1" }, "engines": { - "node": ">=4" + "node": ">=14.16" }, - "peerDependencies": { - "eslint": "^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8 || ^9" + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/eslint-plugin-import-x": { - "version": "4.16.1", - "dev": true, + "node_modules/boxen/node_modules/ansi-regex": { + "version": "6.2.2", "license": "MIT", - "dependencies": { - "@typescript-eslint/types": "^8.35.0", - "comment-parser": "^1.4.1", - "debug": "^4.4.1", - "eslint-import-context": "^0.1.9", - "is-glob": "^4.0.3", - "minimatch": "^9.0.3 || ^10.0.1", - "semver": "^7.7.2", - "stable-hash-x": "^0.2.0", - "unrs-resolver": "^1.9.2" - }, "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + "node": ">=12" }, "funding": { - "url": "https://opencollective.com/eslint-plugin-import-x" - }, - "peerDependencies": { - "@typescript-eslint/utils": "^8.0.0", - "eslint": "^8.57.0 || ^9.0.0", - "eslint-import-resolver-node": "*" - }, - "peerDependenciesMeta": { - "@typescript-eslint/utils": { - "optional": true - }, - "eslint-import-resolver-node": { - "optional": true - } + "url": "https://github.com/chalk/ansi-regex?sponsor=1" } }, - "node_modules/eslint-plugin-import-x/node_modules/minimatch": { - "version": "10.1.2", - "dev": true, - "license": "BlueOak-1.0.0", - "dependencies": { - "@isaacs/brace-expansion": "^5.0.1" - }, + "node_modules/boxen/node_modules/ansi-styles": { + "version": "6.2.3", + "license": "MIT", "engines": { - "node": "20 || >=22" + "node": ">=12" }, "funding": { - "url": "https://github.com/sponsors/isaacs" + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/eslint-plugin-import/node_modules/brace-expansion": { - "version": "1.1.12", - "dev": true, + "node_modules/boxen/node_modules/camelcase": { + "version": "7.0.1", "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/eslint-plugin-import/node_modules/debug": { - "version": "3.2.7", - "dev": true, + "node_modules/boxen/node_modules/chalk": { + "version": "5.6.2", "license": "MIT", - "dependencies": { - "ms": "^2.1.1" + "engines": { + "node": "^12.17.0 || ^14.13 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/eslint-plugin-import/node_modules/minimatch": { - "version": "3.1.2", - "dev": true, - "license": "ISC", + "node_modules/boxen/node_modules/string-width": { + "version": "5.1.2", + "license": "MIT", "dependencies": { - "brace-expansion": "^1.1.7" + "eastasianwidth": "^0.2.0", + "emoji-regex": "^9.2.2", + "strip-ansi": "^7.0.1" }, "engines": { - "node": "*" - } - }, - "node_modules/eslint-plugin-import/node_modules/semver": { - "version": "6.3.1", - "dev": true, - "license": "ISC", - "bin": { - "semver": "bin/semver.js" + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/eslint-plugin-jest": { - "version": "29.13.0", - "dev": true, + "node_modules/boxen/node_modules/strip-ansi": { + "version": "7.1.2", "license": "MIT", "dependencies": { - "@typescript-eslint/utils": "^8.0.0" + "ansi-regex": "^6.0.1" }, "engines": { - "node": "^20.12.0 || ^22.0.0 || >=24.0.0" - }, - "peerDependencies": { - "@typescript-eslint/eslint-plugin": "^8.0.0", - "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0", - "jest": "*", - "typescript": ">=4.8.4 <6.0.0" + "node": ">=12" }, - "peerDependenciesMeta": { - "@typescript-eslint/eslint-plugin": { - "optional": true - }, - "jest": { - "optional": true - }, - "typescript": { - "optional": true - } + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" } }, - "node_modules/eslint-plugin-json": { - "version": "4.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "lodash": "^4.17.21", - "vscode-json-languageservice": "^4.1.6" - }, + "node_modules/boxen/node_modules/type-fest": { + "version": "2.19.0", + "license": "(MIT OR CC0-1.0)", "engines": { - "node": ">=18.0" + "node": ">=12.20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/eslint-plugin-jsx-a11y": { - "version": "6.10.2", - "dev": true, + "node_modules/boxen/node_modules/wrap-ansi": { + "version": "8.1.0", "license": "MIT", "dependencies": { - "aria-query": "^5.3.2", - "array-includes": "^3.1.8", - "array.prototype.flatmap": "^1.3.2", - "ast-types-flow": "^0.0.8", - "axe-core": "^4.10.0", - "axobject-query": "^4.1.0", - "damerau-levenshtein": "^1.0.8", - "emoji-regex": "^9.2.2", - "hasown": "^2.0.2", - "jsx-ast-utils": "^3.3.5", - "language-tags": "^1.0.9", - "minimatch": "^3.1.2", - "object.fromentries": "^2.0.8", - "safe-regex-test": "^1.0.3", - "string.prototype.includes": "^2.0.1" + "ansi-styles": "^6.1.0", + "string-width": "^5.0.1", + "strip-ansi": "^7.0.1" }, "engines": { - "node": ">=4.0" + "node": ">=12" }, - "peerDependencies": { - "eslint": "^3 || ^4 || ^5 || ^6 || ^7 || ^8 || ^9" + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" } }, - "node_modules/eslint-plugin-jsx-a11y/node_modules/brace-expansion": { - "version": "1.1.12", + "node_modules/brace-expansion": { + "version": "2.0.2", "dev": true, "license": "MIT", "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" + "balanced-match": "^1.0.0" } }, - "node_modules/eslint-plugin-jsx-a11y/node_modules/minimatch": { - "version": "3.1.2", - "dev": true, - "license": "ISC", + "node_modules/braces": { + "version": "3.0.3", + "license": "MIT", "dependencies": { - "brace-expansion": "^1.1.7" + "fill-range": "^7.1.1" }, "engines": { - "node": "*" + "node": ">=8" } }, - "node_modules/eslint-plugin-no-relative-import-paths": { - "version": "v1.6.1", - "dev": true, - "license": "ISC" - }, - "node_modules/eslint-plugin-prettier": { - "version": "5.5.5", - "dev": true, - "license": "MIT", - "dependencies": { - "prettier-linter-helpers": "^1.0.1", - "synckit": "^0.11.12" - }, - "engines": { - "node": "^14.18.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint-plugin-prettier" - }, - "peerDependencies": { - "@types/eslint": ">=8.0.0", - "eslint": ">=8.0.0", - "eslint-config-prettier": ">= 7.0.0 <10.0.0 || >=10.1.0", - "prettier": ">=3.0.0" - }, - "peerDependenciesMeta": { - "@types/eslint": { - "optional": true + "node_modules/browserslist": { + "version": "4.28.1", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" }, - "eslint-config-prettier": { - "optional": true + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" } - } - }, - "node_modules/eslint-plugin-react": { - "version": "7.37.5", - "dev": true, + ], "license": "MIT", "dependencies": { - "array-includes": "^3.1.8", - "array.prototype.findlast": "^1.2.5", - "array.prototype.flatmap": "^1.3.3", - "array.prototype.tosorted": "^1.1.4", - "doctrine": "^2.1.0", - "es-iterator-helpers": "^1.2.1", - "estraverse": "^5.3.0", - "hasown": "^2.0.2", - "jsx-ast-utils": "^2.4.1 || ^3.0.0", - "minimatch": "^3.1.2", - "object.entries": "^1.1.9", - "object.fromentries": "^2.0.8", - "object.values": "^1.2.1", - "prop-types": "^15.8.1", - "resolve": "^2.0.0-next.5", - "semver": "^6.3.1", - "string.prototype.matchall": "^4.0.12", - "string.prototype.repeat": "^1.0.0" + "baseline-browser-mapping": "^2.9.0", + "caniuse-lite": "^1.0.30001759", + "electron-to-chromium": "^1.5.263", + "node-releases": "^2.0.27", + "update-browserslist-db": "^1.2.0" }, - "engines": { - "node": ">=4" + "bin": { + "browserslist": "cli.js" }, - "peerDependencies": { - "eslint": "^3 || ^4 || ^5 || ^6 || ^7 || ^8 || ^9.7" + "engines": { + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" } }, - "node_modules/eslint-plugin-react-hooks": { - "version": "5.2.0", + "node_modules/bs-logger": { + "version": "0.2.6", "dev": true, "license": "MIT", - "engines": { - "node": ">=10" + "dependencies": { + "fast-json-stable-stringify": "2.x" }, - "peerDependencies": { - "eslint": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0 || ^9.0.0" + "engines": { + "node": ">= 6" } }, - "node_modules/eslint-plugin-react/node_modules/brace-expansion": { - "version": "1.1.12", - "dev": true, - "license": "MIT", + "node_modules/bser": { + "version": "2.1.1", + "license": "Apache-2.0", "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" + "node-int64": "^0.4.0" } }, - "node_modules/eslint-plugin-react/node_modules/minimatch": { - "version": "3.1.2", - "dev": true, - "license": "ISC", + "node_modules/buffer": { + "version": "4.9.2", + "license": "MIT", "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" + "base64-js": "^1.0.2", + "ieee754": "^1.1.4", + "isarray": "^1.0.0" } }, - "node_modules/eslint-plugin-react/node_modules/resolve": { - "version": "2.0.0-next.5", + "node_modules/buffer-crc32": { + "version": "1.0.0", "dev": true, "license": "MIT", - "dependencies": { - "is-core-module": "^2.13.0", - "path-parse": "^1.0.7", - "supports-preserve-symlinks-flag": "^1.0.0" - }, - "bin": { - "resolve": "bin/resolve" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "engines": { + "node": ">=8.0.0" } }, - "node_modules/eslint-plugin-react/node_modules/semver": { - "version": "6.3.1", + "node_modules/buffer-from": { + "version": "1.1.2", "dev": true, - "license": "ISC", - "bin": { - "semver": "bin/semver.js" + "license": "MIT" + }, + "node_modules/buildcheck": { + "version": "0.0.7", + "dev": true, + "optional": true, + "engines": { + "node": ">=10.0.0" } }, - "node_modules/eslint-plugin-security": { - "version": "3.0.1", + "node_modules/builtin-modules": { + "version": "3.3.0", "dev": true, - "license": "Apache-2.0", - "dependencies": { - "safe-regex": "^2.1.1" - }, + "license": "MIT", "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + "node": ">=6" }, "funding": { - "url": "https://opencollective.com/eslint" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/eslint-plugin-sonarjs": { - "version": "3.0.6", + "node_modules/builtins": { + "version": "1.0.3", "dev": true, - "license": "LGPL-3.0-only", - "dependencies": { - "@eslint-community/regexpp": "4.12.2", - "builtin-modules": "3.3.0", - "bytes": "3.1.2", - "functional-red-black-tree": "1.0.1", - "jsx-ast-utils-x": "0.1.0", - "lodash.merge": "4.6.2", - "minimatch": "10.1.1", - "scslre": "0.3.0", - "semver": "7.7.3", - "typescript": ">=5" - }, - "peerDependencies": { - "eslint": "^8.0.0 || ^9.0.0" - } + "license": "MIT" }, - "node_modules/eslint-plugin-sonarjs/node_modules/minimatch": { - "version": "10.1.1", + "node_modules/byline": { + "version": "5.0.0", "dev": true, - "license": "BlueOak-1.0.0", - "dependencies": { - "@isaacs/brace-expansion": "^5.0.0" - }, + "license": "MIT", "engines": { - "node": "20 || >=22" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" + "node": ">=0.10.0" } }, - "node_modules/eslint-plugin-sonarjs/node_modules/semver": { - "version": "7.7.3", - "dev": true, - "license": "ISC", - "bin": { - "semver": "bin/semver.js" - }, + "node_modules/bytes": { + "version": "3.1.2", + "license": "MIT", "engines": { - "node": ">=10" + "node": ">= 0.8" } }, - "node_modules/eslint-plugin-sort-destructure-keys": { - "version": "2.0.0", - "dev": true, - "license": "ISC", + "node_modules/call-bind": { + "version": "1.0.8", + "license": "MIT", "dependencies": { - "natural-compare-lite": "^1.4.0" + "call-bind-apply-helpers": "^1.0.0", + "es-define-property": "^1.0.0", + "get-intrinsic": "^1.2.4", + "set-function-length": "^1.2.2" }, "engines": { - "node": ">=12" + "node": ">= 0.4" }, - "peerDependencies": { - "eslint": "5 - 9" + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/eslint-plugin-unicorn": { - "version": "62.0.0", - "dev": true, + "node_modules/call-bind-apply-helpers": { + "version": "1.0.2", "license": "MIT", "dependencies": { - "@babel/helper-validator-identifier": "^7.28.5", - "@eslint-community/eslint-utils": "^4.9.0", - "@eslint/plugin-kit": "^0.4.0", - "change-case": "^5.4.4", - "ci-info": "^4.3.1", - "clean-regexp": "^1.0.0", - "core-js-compat": "^3.46.0", - "esquery": "^1.6.0", - "find-up-simple": "^1.0.1", - "globals": "^16.4.0", - "indent-string": "^5.0.0", - "is-builtin-module": "^5.0.0", - "jsesc": "^3.1.0", - "pluralize": "^8.0.0", - "regexp-tree": "^0.1.27", - "regjsparser": "^0.13.0", - "semver": "^7.7.3", - "strip-indent": "^4.1.1" + "es-errors": "^1.3.0", + "function-bind": "^1.1.2" }, "engines": { - "node": "^20.10.0 || >=21.0.0" - }, - "funding": { - "url": "https://github.com/sindresorhus/eslint-plugin-unicorn?sponsor=1" - }, - "peerDependencies": { - "eslint": ">=9.38.0" + "node": ">= 0.4" } }, - "node_modules/eslint-plugin-unicorn/node_modules/globals": { - "version": "16.5.0", - "dev": true, + "node_modules/call-bound": { + "version": "1.0.4", "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.2", + "get-intrinsic": "^1.3.0" + }, "engines": { - "node": ">=18" + "node": ">= 0.4" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/eslint-scope": { - "version": "8.4.0", + "node_modules/call-me-maybe": { + "version": "1.0.2", "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "esrecurse": "^4.3.0", - "estraverse": "^5.2.0" - }, + "license": "MIT" + }, + "node_modules/callsites": { + "version": "3.1.0", + "dev": true, + "license": "MIT", "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" + "node": ">=6" } }, - "node_modules/eslint-visitor-keys": { - "version": "4.2.1", - "dev": true, - "license": "Apache-2.0", + "node_modules/camelcase": { + "version": "5.3.1", + "license": "MIT", "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" + "node": ">=6" } }, - "node_modules/eslint/node_modules/ajv": { - "version": "6.12.6", + "node_modules/camelize": { + "version": "1.0.1", "dev": true, "license": "MIT", - "dependencies": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - }, "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/eslint/node_modules/brace-expansion": { - "version": "1.1.12", - "dev": true, + "node_modules/caniuse-lite": { + "version": "1.0.30001767", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/caniuse-lite" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "CC-BY-4.0" + }, + "node_modules/chalk": { + "version": "4.1.2", "license": "MIT", "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/eslint/node_modules/glob-parent": { - "version": "6.0.2", - "dev": true, - "license": "ISC", + "node_modules/chalk-template": { + "version": "0.4.0", + "license": "MIT", "dependencies": { - "is-glob": "^4.0.3" + "chalk": "^4.1.2" }, "engines": { - "node": ">=10.13.0" + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/chalk-template?sponsor=1" } }, - "node_modules/eslint/node_modules/ignore": { - "version": "5.3.2", + "node_modules/change-case": { + "version": "5.4.4", + "dev": true, + "license": "MIT" + }, + "node_modules/char-regex": { + "version": "1.0.2", "dev": true, "license": "MIT", "engines": { - "node": ">= 4" + "node": ">=10" } }, - "node_modules/eslint/node_modules/json-schema-traverse": { - "version": "0.4.1", + "node_modules/chardet": { + "version": "2.1.1", "dev": true, "license": "MIT" }, - "node_modules/eslint/node_modules/minimatch": { - "version": "3.1.2", - "dev": true, - "license": "ISC", - "dependencies": { - "brace-expansion": "^1.1.7" - }, + "node_modules/charenc": { + "version": "0.0.2", + "license": "BSD-3-Clause", "engines": { "node": "*" } }, - "node_modules/espree": { - "version": "10.4.0", + "node_modules/check-types": { + "version": "11.2.3", + "license": "MIT" + }, + "node_modules/chokidar": { + "version": "3.6.0", "dev": true, - "license": "BSD-2-Clause", + "license": "MIT", "dependencies": { - "acorn": "^8.15.0", - "acorn-jsx": "^5.3.2", - "eslint-visitor-keys": "^4.2.1" + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" }, "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + "node": ">= 8.10.0" }, "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/esprima": { - "version": "4.0.1", - "license": "BSD-2-Clause", - "bin": { - "esparse": "bin/esparse.js", - "esvalidate": "bin/esvalidate.js" + "url": "https://paulmillr.com/funding/" }, - "engines": { - "node": ">=4" + "optionalDependencies": { + "fsevents": "~2.3.2" } }, - "node_modules/esquery": { - "version": "1.7.0", + "node_modules/chokidar/node_modules/glob-parent": { + "version": "5.1.2", "dev": true, - "license": "BSD-3-Clause", + "license": "ISC", "dependencies": { - "estraverse": "^5.1.0" + "is-glob": "^4.0.1" }, "engines": { - "node": ">=0.10" + "node": ">= 6" } }, - "node_modules/esrecurse": { - "version": "4.3.0", + "node_modules/chownr": { + "version": "1.1.4", "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "estraverse": "^5.2.0" - }, - "engines": { - "node": ">=4.0" - } + "license": "ISC" }, - "node_modules/estraverse": { - "version": "5.3.0", - "dev": true, - "license": "BSD-2-Clause", + "node_modules/ci-info": { + "version": "4.4.0", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/sibiraj-s" + } + ], + "license": "MIT", "engines": { - "node": ">=4.0" + "node": ">=8" } }, - "node_modules/estree-walker": { - "version": "2.0.2", + "node_modules/cjs-module-lexer": { + "version": "2.2.0", "dev": true, "license": "MIT" }, - "node_modules/esutils": { - "version": "2.0.3", + "node_modules/classnames": { + "version": "2.5.1", "dev": true, - "license": "BSD-2-Clause", - "engines": { - "node": ">=0.10.0" - } + "license": "MIT" }, - "node_modules/etag": { - "version": "1.8.1", + "node_modules/clean-regexp": { + "version": "1.0.0", + "dev": true, "license": "MIT", + "dependencies": { + "escape-string-regexp": "^1.0.5" + }, "engines": { - "node": ">= 0.6" + "node": ">=4" } }, - "node_modules/event-target-shim": { - "version": "5.0.1", + "node_modules/clean-regexp/node_modules/escape-string-regexp": { + "version": "1.0.5", "dev": true, "license": "MIT", "engines": { - "node": ">=6" + "node": ">=0.8.0" } }, - "node_modules/eventemitter3": { - "version": "4.0.7", - "license": "MIT" - }, - "node_modules/events": { - "version": "1.1.1", + "node_modules/cli-boxes": { + "version": "3.0.0", "license": "MIT", "engines": { - "node": ">=0.4.x" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/events-universal": { - "version": "1.0.1", + "node_modules/cli-cursor": { + "version": "3.1.0", "dev": true, - "license": "Apache-2.0", - "dependencies": { - "bare-events": "^2.7.0" - } - }, - "node_modules/execa": { - "version": "5.1.1", "license": "MIT", "dependencies": { - "cross-spawn": "^7.0.3", - "get-stream": "^6.0.0", - "human-signals": "^2.1.0", - "is-stream": "^2.0.0", - "merge-stream": "^2.0.0", - "npm-run-path": "^4.0.1", - "onetime": "^5.1.2", - "signal-exit": "^3.0.3", - "strip-final-newline": "^2.0.0" + "restore-cursor": "^3.1.0" }, "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sindresorhus/execa?sponsor=1" + "node": ">=8" } }, - "node_modules/execa/node_modules/signal-exit": { - "version": "3.0.7", - "license": "ISC" - }, - "node_modules/exit-x": { - "version": "0.2.2", + "node_modules/cli-spinners": { + "version": "2.9.2", "dev": true, "license": "MIT", "engines": { - "node": ">= 0.8.0" + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/expect": { - "version": "30.2.0", - "license": "MIT", - "dependencies": { - "@jest/expect-utils": "30.2.0", - "@jest/get-type": "30.1.0", - "jest-matcher-utils": "30.2.0", - "jest-message-util": "30.2.0", - "jest-mock": "30.2.0", - "jest-util": "30.2.0" - }, + "node_modules/cli-width": { + "version": "3.0.0", + "dev": true, + "license": "ISC", "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + "node": ">= 10" } }, - "node_modules/express": { - "version": "4.22.1", + "node_modules/clipboardy": { + "version": "3.0.0", "license": "MIT", "dependencies": { - "accepts": "~1.3.8", - "array-flatten": "1.1.1", - "body-parser": "~1.20.3", - "content-disposition": "~0.5.4", - "content-type": "~1.0.4", - "cookie": "~0.7.1", - "cookie-signature": "~1.0.6", - "debug": "2.6.9", - "depd": "2.0.0", - "encodeurl": "~2.0.0", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "finalhandler": "~1.3.1", - "fresh": "~0.5.2", - "http-errors": "~2.0.0", - "merge-descriptors": "1.0.3", - "methods": "~1.1.2", - "on-finished": "~2.4.1", - "parseurl": "~1.3.3", - "path-to-regexp": "~0.1.12", - "proxy-addr": "~2.0.7", - "qs": "~6.14.0", - "range-parser": "~1.2.1", - "safe-buffer": "5.2.1", - "send": "~0.19.0", - "serve-static": "~1.16.2", - "setprototypeof": "1.2.0", - "statuses": "~2.0.1", - "type-is": "~1.6.18", - "utils-merge": "1.0.1", - "vary": "~1.1.2" + "arch": "^2.2.0", + "execa": "^5.1.1", + "is-wsl": "^2.2.0" }, "engines": { - "node": ">= 0.10.0" + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/express" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/express/node_modules/body-parser": { - "version": "1.20.4", - "license": "MIT", + "node_modules/cliui": { + "version": "8.0.1", + "license": "ISC", "dependencies": { - "bytes": "~3.1.2", - "content-type": "~1.0.5", - "debug": "2.6.9", - "depd": "2.0.0", - "destroy": "~1.2.0", - "http-errors": "~2.0.1", - "iconv-lite": "~0.4.24", - "on-finished": "~2.4.1", - "qs": "~6.14.0", - "raw-body": "~2.5.3", - "type-is": "~1.6.18", - "unpipe": "~1.0.0" + "string-width": "^4.2.0", + "strip-ansi": "^6.0.1", + "wrap-ansi": "^7.0.0" }, "engines": { - "node": ">= 0.8", - "npm": "1.2.8000 || >= 1.4.16" + "node": ">=12" } }, - "node_modules/express/node_modules/debug": { - "version": "2.6.9", + "node_modules/cliui/node_modules/wrap-ansi": { + "version": "7.0.0", "license": "MIT", "dependencies": { - "ms": "2.0.0" + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" } }, - "node_modules/express/node_modules/iconv-lite": { - "version": "0.4.24", + "node_modules/clone": { + "version": "1.0.4", + "dev": true, "license": "MIT", - "dependencies": { - "safer-buffer": ">= 2.1.2 < 3" - }, "engines": { - "node": ">=0.10.0" + "node": ">=0.8" } }, - "node_modules/express/node_modules/media-typer": { - "version": "0.3.0", + "node_modules/clsx": { + "version": "2.1.1", + "dev": true, "license": "MIT", "engines": { - "node": ">= 0.6" + "node": ">=6" } }, - "node_modules/express/node_modules/ms": { - "version": "2.0.0", - "license": "MIT" + "node_modules/co": { + "version": "4.6.0", + "dev": true, + "license": "MIT", + "engines": { + "iojs": ">= 1.0.0", + "node": ">= 0.12.0" + } }, - "node_modules/express/node_modules/path-to-regexp": { - "version": "0.1.12", + "node_modules/collect-v8-coverage": { + "version": "1.0.3", + "dev": true, "license": "MIT" }, - "node_modules/express/node_modules/raw-body": { - "version": "2.5.3", + "node_modules/color-convert": { + "version": "2.0.1", "license": "MIT", "dependencies": { - "bytes": "~3.1.2", - "http-errors": "~2.0.1", - "iconv-lite": "~0.4.24", - "unpipe": "~1.0.0" + "color-name": "~1.1.4" }, "engines": { - "node": ">= 0.8" + "node": ">=7.0.0" } }, - "node_modules/express/node_modules/type-is": { - "version": "1.6.18", + "node_modules/color-name": { + "version": "1.1.4", + "license": "MIT" + }, + "node_modules/colorette": { + "version": "1.4.0", + "dev": true, + "license": "MIT" + }, + "node_modules/combined-stream": { + "version": "1.0.8", "license": "MIT", "dependencies": { - "media-typer": "0.3.0", - "mime-types": "~2.1.24" + "delayed-stream": "~1.0.0" }, "engines": { - "node": ">= 0.6" + "node": ">= 0.8" } }, - "node_modules/fast-copy": { - "version": "4.0.2", - "license": "MIT" + "node_modules/commander": { + "version": "8.3.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 12" + } }, - "node_modules/fast-deep-equal": { - "version": "3.1.3", - "license": "MIT" + "node_modules/comment-parser": { + "version": "1.4.4", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 12.0.0" + } }, - "node_modules/fast-diff": { - "version": "1.3.0", + "node_modules/commondir": { + "version": "1.0.1", "dev": true, - "license": "Apache-2.0" + "license": "MIT" }, - "node_modules/fast-fifo": { - "version": "1.3.2", + "node_modules/compare-versions": { + "version": "6.1.1", "dev": true, "license": "MIT" }, - "node_modules/fast-glob": { - "version": "3.3.1", + "node_modules/compress-commons": { + "version": "6.0.2", "dev": true, "license": "MIT", "dependencies": { - "@nodelib/fs.stat": "^2.0.2", - "@nodelib/fs.walk": "^1.2.3", - "glob-parent": "^5.1.2", - "merge2": "^1.3.0", - "micromatch": "^4.0.4" + "crc-32": "^1.2.0", + "crc32-stream": "^6.0.0", + "is-stream": "^2.0.1", + "normalize-path": "^3.0.0", + "readable-stream": "^4.0.0" }, "engines": { - "node": ">=8.6.0" + "node": ">= 14" } }, - "node_modules/fast-json-stable-stringify": { - "version": "2.1.0", - "license": "MIT" - }, - "node_modules/fast-levenshtein": { - "version": "2.0.6", - "dev": true, - "license": "MIT" - }, - "node_modules/fast-memoize": { - "version": "2.5.2", + "node_modules/compress-commons/node_modules/buffer": { + "version": "6.0.3", "dev": true, - "license": "MIT" - }, - "node_modules/fast-safe-stringify": { - "version": "2.1.1", - "license": "MIT" - }, - "node_modules/fast-uri": { - "version": "3.1.0", "funding": [ { "type": "github", - "url": "https://github.com/sponsors/fastify" + "url": "https://github.com/sponsors/feross" }, { - "type": "opencollective", - "url": "https://opencollective.com/fastify" - } - ], - "license": "BSD-3-Clause" - }, - "node_modules/fast-xml-parser": { - "version": "5.3.5", - "funding": [ + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, { - "type": "github", - "url": "https://github.com/sponsors/NaturalIntelligence" + "type": "consulting", + "url": "https://feross.org/support" } ], "license": "MIT", "dependencies": { - "strnum": "^2.1.2" - }, - "bin": { - "fxparser": "src/cli/cli.js" + "base64-js": "^1.3.1", + "ieee754": "^1.2.1" } }, - "node_modules/fastq": { - "version": "1.20.1", - "dev": true, - "license": "ISC", - "dependencies": { - "reusify": "^1.0.4" - } - }, - "node_modules/fb-watchman": { - "version": "2.0.2", - "license": "Apache-2.0", - "dependencies": { - "bser": "2.1.1" - } - }, - "node_modules/fdir": { - "version": "6.5.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12.0.0" - }, - "peerDependencies": { - "picomatch": "^3 || ^4" - }, - "peerDependenciesMeta": { - "picomatch": { - "optional": true - } - } - }, - "node_modules/figures": { - "version": "3.2.0", - "dev": true, - "license": "MIT", - "dependencies": { - "escape-string-regexp": "^1.0.5" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/figures/node_modules/escape-string-regexp": { - "version": "1.0.5", + "node_modules/compress-commons/node_modules/events": { + "version": "3.3.0", "dev": true, "license": "MIT", "engines": { - "node": ">=0.8.0" + "node": ">=0.8.x" } }, - "node_modules/file-entry-cache": { - "version": "8.0.0", + "node_modules/compress-commons/node_modules/ieee754": { + "version": "1.2.1", "dev": true, - "license": "MIT", - "dependencies": { - "flat-cache": "^4.0.0" - }, - "engines": { - "node": ">=16.0.0" - } + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "BSD-3-Clause" }, - "node_modules/file-type": { - "version": "21.3.0", + "node_modules/compress-commons/node_modules/readable-stream": { + "version": "4.7.0", "dev": true, "license": "MIT", "dependencies": { - "@tokenizer/inflate": "^0.4.1", - "strtok3": "^10.3.4", - "token-types": "^6.1.1", - "uint8array-extras": "^1.4.0" + "abort-controller": "^3.0.0", + "buffer": "^6.0.3", + "events": "^3.3.0", + "process": "^0.11.10", + "string_decoder": "^1.3.0" }, "engines": { - "node": ">=20" - }, - "funding": { - "url": "https://github.com/sindresorhus/file-type?sponsor=1" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" } }, - "node_modules/fill-range": { - "version": "7.1.1", + "node_modules/compressible": { + "version": "2.0.18", "license": "MIT", "dependencies": { - "to-regex-range": "^5.0.1" + "mime-db": ">= 1.43.0 < 2" }, "engines": { - "node": ">=8" + "node": ">= 0.6" } }, - "node_modules/finalhandler": { - "version": "1.3.2", + "node_modules/compression": { + "version": "1.8.1", "license": "MIT", "dependencies": { + "bytes": "3.1.2", + "compressible": "~2.0.18", "debug": "2.6.9", - "encodeurl": "~2.0.0", - "escape-html": "~1.0.3", - "on-finished": "~2.4.1", - "parseurl": "~1.3.3", - "statuses": "~2.0.2", - "unpipe": "~1.0.0" + "negotiator": "~0.6.4", + "on-headers": "~1.1.0", + "safe-buffer": "5.2.1", + "vary": "~1.1.2" }, "engines": { - "node": ">= 0.8" + "node": ">= 0.8.0" } }, - "node_modules/finalhandler/node_modules/debug": { + "node_modules/compression/node_modules/debug": { "version": "2.6.9", "license": "MIT", "dependencies": { "ms": "2.0.0" } }, - "node_modules/finalhandler/node_modules/ms": { + "node_modules/compression/node_modules/ms": { "version": "2.0.0", "license": "MIT" }, - "node_modules/find-up": { - "version": "5.0.0", - "dev": true, + "node_modules/compression/node_modules/negotiator": { + "version": "0.6.4", "license": "MIT", - "dependencies": { - "locate-path": "^6.0.0", - "path-exists": "^4.0.0" - }, "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">= 0.6" } }, - "node_modules/find-up-simple": { - "version": "1.0.1", + "node_modules/concat-map": { + "version": "0.0.1", + "license": "MIT" + }, + "node_modules/concurrently": { + "version": "9.2.1", "dev": true, "license": "MIT", + "dependencies": { + "chalk": "4.1.2", + "rxjs": "7.8.2", + "shell-quote": "1.8.3", + "supports-color": "8.1.1", + "tree-kill": "1.2.2", + "yargs": "17.7.2" + }, + "bin": { + "conc": "dist/bin/concurrently.js", + "concurrently": "dist/bin/concurrently.js" + }, "engines": { "node": ">=18" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/open-cli-tools/concurrently?sponsor=1" } }, - "node_modules/flat-cache": { - "version": "4.0.1", + "node_modules/concurrently/node_modules/supports-color": { + "version": "8.1.1", "dev": true, "license": "MIT", "dependencies": { - "flatted": "^3.2.9", - "keyv": "^4.5.4" + "has-flag": "^4.0.0" }, "engines": { - "node": ">=16" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" } }, - "node_modules/flatted": { - "version": "3.3.3", + "node_modules/confusing-browser-globals": { + "version": "1.0.11", "dev": true, - "license": "ISC" + "license": "MIT" }, - "node_modules/follow-redirects": { - "version": "1.15.11", - "funding": [ - { - "type": "individual", - "url": "https://github.com/sponsors/RubenVerborgh" - } - ], + "node_modules/consola": { + "version": "3.4.2", + "dev": true, "license": "MIT", "engines": { - "node": ">=4.0" - }, - "peerDependenciesMeta": { - "debug": { - "optional": true - } + "node": "^14.18.0 || >=16.10.0" } }, - "node_modules/for-each": { - "version": "0.3.5", + "node_modules/console.table": { + "version": "0.10.0", + "dev": true, "license": "MIT", "dependencies": { - "is-callable": "^1.2.7" + "easy-table": "1.1.0" }, "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": "> 0.10" } }, - "node_modules/foreach": { - "version": "2.0.6", - "dev": true, - "license": "MIT" - }, - "node_modules/foreground-child": { - "version": "3.3.1", - "dev": true, - "license": "ISC", - "dependencies": { - "cross-spawn": "^7.0.6", - "signal-exit": "^4.0.1" - }, + "node_modules/content-disposition": { + "version": "1.0.1", + "license": "MIT", "engines": { - "node": ">=14" + "node": ">=18" }, "funding": { - "url": "https://github.com/sponsors/isaacs" + "type": "opencollective", + "url": "https://opencollective.com/express" } }, - "node_modules/form-data": { - "version": "4.0.5", + "node_modules/content-type": { + "version": "1.0.5", "license": "MIT", - "dependencies": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.8", - "es-set-tostringtag": "^2.1.0", - "hasown": "^2.0.2", - "mime-types": "^2.1.12" - }, "engines": { - "node": ">= 6" + "node": ">= 0.6" } }, - "node_modules/forwarded": { - "version": "0.2.0", + "node_modules/convert-source-map": { + "version": "2.0.0", + "license": "MIT" + }, + "node_modules/cookie": { + "version": "0.7.2", "license": "MIT", "engines": { "node": ">= 0.6" } }, - "node_modules/fresh": { - "version": "0.5.2", + "node_modules/cookie-signature": { + "version": "1.2.2", "license": "MIT", "engines": { - "node": ">= 0.6" + "node": ">=6.6.0" } }, - "node_modules/fs-constants": { - "version": "1.0.0", + "node_modules/core-js": { + "version": "3.48.0", "dev": true, - "license": "MIT" - }, - "node_modules/fs-extra": { - "version": "11.3.3", - "dev": true, - "license": "MIT", - "dependencies": { - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - }, - "engines": { - "node": ">=14.14" - } - }, - "node_modules/fs.realpath": { - "version": "1.0.0", - "license": "ISC" - }, - "node_modules/function-bind": { - "version": "1.1.2", + "hasInstallScript": true, "license": "MIT", "funding": { - "url": "https://github.com/sponsors/ljharb" + "type": "opencollective", + "url": "https://opencollective.com/core-js" } }, - "node_modules/function.prototype.name": { - "version": "1.1.8", + "node_modules/core-js-compat": { + "version": "3.47.0", "dev": true, "license": "MIT", "dependencies": { - "call-bind": "^1.0.8", - "call-bound": "^1.0.3", - "define-properties": "^1.2.1", - "functions-have-names": "^1.2.3", - "hasown": "^2.0.2", - "is-callable": "^1.2.7" - }, - "engines": { - "node": ">= 0.4" + "browserslist": "^4.28.0" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "type": "opencollective", + "url": "https://opencollective.com/core-js" } }, - "node_modules/functional-red-black-tree": { - "version": "1.0.1", + "node_modules/core-util-is": { + "version": "1.0.3", "dev": true, "license": "MIT" }, - "node_modules/functions-have-names": { - "version": "1.2.3", + "node_modules/cpu-features": { + "version": "0.0.10", "dev": true, - "license": "MIT", - "funding": { - "url": "https://github.com/sponsors/ljharb" + "hasInstallScript": true, + "optional": true, + "dependencies": { + "buildcheck": "~0.0.6", + "nan": "^2.19.0" + }, + "engines": { + "node": ">=10.0.0" } }, - "node_modules/generator-function": { - "version": "2.0.1", - "license": "MIT", + "node_modules/crc-32": { + "version": "1.2.2", + "dev": true, + "license": "Apache-2.0", + "bin": { + "crc32": "bin/crc32.njs" + }, "engines": { - "node": ">= 0.4" + "node": ">=0.8" } }, - "node_modules/gensync": { - "version": "1.0.0-beta.2", + "node_modules/crc32-stream": { + "version": "6.0.0", + "dev": true, "license": "MIT", + "dependencies": { + "crc-32": "^1.2.0", + "readable-stream": "^4.0.0" + }, "engines": { - "node": ">=6.9.0" + "node": ">= 14" } }, - "node_modules/get-caller-file": { - "version": "2.0.5", - "license": "ISC", - "engines": { - "node": "6.* || 8.* || >= 10.*" + "node_modules/crc32-stream/node_modules/buffer": { + "version": "6.0.3", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT", + "dependencies": { + "base64-js": "^1.3.1", + "ieee754": "^1.2.1" } }, - "node_modules/get-east-asian-width": { - "version": "1.4.0", + "node_modules/crc32-stream/node_modules/events": { + "version": "3.3.0", + "dev": true, "license": "MIT", "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=0.8.x" } }, - "node_modules/get-intrinsic": { - "version": "1.3.0", + "node_modules/crc32-stream/node_modules/ieee754": { + "version": "1.2.1", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "BSD-3-Clause" + }, + "node_modules/crc32-stream/node_modules/readable-stream": { + "version": "4.7.0", + "dev": true, "license": "MIT", "dependencies": { - "call-bind-apply-helpers": "^1.0.2", - "es-define-property": "^1.0.1", - "es-errors": "^1.3.0", - "es-object-atoms": "^1.1.1", - "function-bind": "^1.1.2", - "get-proto": "^1.0.1", - "gopd": "^1.2.0", - "has-symbols": "^1.1.0", - "hasown": "^2.0.2", - "math-intrinsics": "^1.1.0" + "abort-controller": "^3.0.0", + "buffer": "^6.0.3", + "events": "^3.3.0", + "process": "^0.11.10", + "string_decoder": "^1.3.0" }, "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" } }, - "node_modules/get-package-type": { - "version": "0.1.0", + "node_modules/create-require": { + "version": "1.1.1", + "dev": true, + "license": "MIT" + }, + "node_modules/cross-spawn": { + "version": "7.0.6", "license": "MIT", + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, "engines": { - "node": ">=8.0.0" + "node": ">= 8" } }, - "node_modules/get-port": { - "version": "7.1.0", + "node_modules/crypt": { + "version": "0.0.2", + "license": "BSD-3-Clause", + "engines": { + "node": "*" + } + }, + "node_modules/css-color-keywords": { + "version": "1.0.0", "dev": true, - "license": "MIT", + "license": "ISC", "engines": { - "node": ">=16" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=4" } }, - "node_modules/get-port-please": { + "node_modules/css-to-react-native": { "version": "3.2.0", "dev": true, - "license": "MIT" - }, - "node_modules/get-proto": { - "version": "1.0.1", "license": "MIT", "dependencies": { - "dunder-proto": "^1.0.1", - "es-object-atoms": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" + "camelize": "^1.0.0", + "css-color-keywords": "^1.0.0", + "postcss-value-parser": "^4.0.2" } }, - "node_modules/get-source": { - "version": "2.0.12", + "node_modules/cssstyle": { + "version": "4.6.0", "dev": true, - "license": "Unlicense", + "license": "MIT", "dependencies": { - "data-uri-to-buffer": "^2.0.0", - "source-map": "^0.6.1" + "@asamuzakjp/css-color": "^3.2.0", + "rrweb-cssom": "^0.8.0" + }, + "engines": { + "node": ">=18" } }, - "node_modules/get-source/node_modules/data-uri-to-buffer": { - "version": "2.0.2", + "node_modules/csstype": { + "version": "3.2.3", "dev": true, "license": "MIT" }, - "node_modules/get-stream": { - "version": "6.0.1", + "node_modules/damerau-levenshtein": { + "version": "1.0.8", + "dev": true, + "license": "BSD-2-Clause" + }, + "node_modules/data-uri-to-buffer": { + "version": "6.0.2", + "dev": true, "license": "MIT", "engines": { - "node": ">=10" + "node": ">= 14" + } + }, + "node_modules/data-urls": { + "version": "5.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "whatwg-mimetype": "^4.0.0", + "whatwg-url": "^14.0.0" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "engines": { + "node": ">=18" } }, - "node_modules/get-symbol-description": { - "version": "1.1.0", + "node_modules/data-view-buffer": { + "version": "1.0.2", "dev": true, "license": "MIT", "dependencies": { "call-bound": "^1.0.3", "es-errors": "^1.3.0", - "get-intrinsic": "^1.2.6" + "is-data-view": "^1.0.2" }, "engines": { "node": ">= 0.4" @@ -10799,98 +11010,120 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/get-tsconfig": { - "version": "4.13.6", - "dev": true, + "node_modules/data-view-byte-length": { + "version": "1.0.2", + "dev": true, "license": "MIT", "dependencies": { - "resolve-pkg-maps": "^1.0.0" + "call-bound": "^1.0.3", + "es-errors": "^1.3.0", + "is-data-view": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" }, "funding": { - "url": "https://github.com/privatenumber/get-tsconfig?sponsor=1" + "url": "https://github.com/sponsors/inspect-js" } }, - "node_modules/get-uri": { - "version": "6.0.5", + "node_modules/data-view-byte-offset": { + "version": "1.0.1", "dev": true, "license": "MIT", "dependencies": { - "basic-ftp": "^5.0.2", - "data-uri-to-buffer": "^6.0.2", - "debug": "^4.3.4" + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "is-data-view": "^1.0.1" }, "engines": { - "node": ">= 14" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/glob": { - "version": "11.1.0", + "node_modules/dateformat": { + "version": "3.0.2", "dev": true, - "license": "BlueOak-1.0.0", + "license": "MIT", + "engines": { + "node": "*" + } + }, + "node_modules/debug": { + "version": "4.4.3", + "license": "MIT", "dependencies": { - "foreground-child": "^3.3.1", - "jackspeak": "^4.1.1", - "minimatch": "^10.1.1", - "minipass": "^7.1.2", - "package-json-from-dist": "^1.0.0", - "path-scurry": "^2.0.0" - }, - "bin": { - "glob": "dist/esm/bin.mjs" + "ms": "^2.1.3" }, "engines": { - "node": "20 || >=22" + "node": ">=6.0" }, - "funding": { - "url": "https://github.com/sponsors/isaacs" + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } } }, - "node_modules/glob-parent": { - "version": "5.1.2", + "node_modules/decimal.js": { + "version": "10.6.0", "dev": true, - "license": "ISC", - "dependencies": { - "is-glob": "^4.0.1" + "license": "MIT" + }, + "node_modules/decko": { + "version": "1.2.0", + "dev": true + }, + "node_modules/dedent": { + "version": "1.7.1", + "dev": true, + "license": "MIT", + "peerDependencies": { + "babel-plugin-macros": "^3.1.0" }, + "peerDependenciesMeta": { + "babel-plugin-macros": { + "optional": true + } + } + }, + "node_modules/deep-extend": { + "version": "0.6.0", + "license": "MIT", "engines": { - "node": ">= 6" + "node": ">=4.0.0" } }, - "node_modules/glob-to-regexp": { - "version": "0.4.1", - "license": "BSD-2-Clause" + "node_modules/deep-is": { + "version": "0.1.4", + "dev": true, + "license": "MIT" }, - "node_modules/glob/node_modules/minimatch": { - "version": "10.1.2", + "node_modules/deepmerge": { + "version": "4.3.1", "dev": true, - "license": "BlueOak-1.0.0", - "dependencies": { - "@isaacs/brace-expansion": "^5.0.1" - }, + "license": "MIT", "engines": { - "node": "20 || >=22" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" + "node": ">=0.10.0" } }, - "node_modules/globals": { - "version": "14.0.0", + "node_modules/defaults": { + "version": "1.0.4", "dev": true, "license": "MIT", - "engines": { - "node": ">=18" + "dependencies": { + "clone": "^1.0.2" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/globalthis": { - "version": "1.0.4", - "dev": true, + "node_modules/define-data-property": { + "version": "1.1.4", "license": "MIT", "dependencies": { - "define-properties": "^1.2.1", + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", "gopd": "^1.0.1" }, "engines": { @@ -10900,9 +11133,15 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/gopd": { - "version": "1.2.0", + "node_modules/define-properties": { + "version": "1.2.1", + "dev": true, "license": "MIT", + "dependencies": { + "define-data-property": "^1.0.1", + "has-property-descriptors": "^1.0.0", + "object-keys": "^1.1.1" + }, "engines": { "node": ">= 0.4" }, @@ -10910,487 +11149,500 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/graceful-fs": { - "version": "4.2.11", - "license": "ISC" - }, - "node_modules/graphql": { - "version": "16.12.0", + "node_modules/degenerator": { + "version": "5.0.1", + "dev": true, "license": "MIT", + "dependencies": { + "ast-types": "^0.13.4", + "escodegen": "^2.1.0", + "esprima": "^4.0.1" + }, "engines": { - "node": "^12.22.0 || ^14.16.0 || ^16.0.0 || >=17.0.0" + "node": ">= 14" } }, - "node_modules/graphql-tag": { - "version": "2.12.6", + "node_modules/delayed-stream": { + "version": "1.0.0", "license": "MIT", - "dependencies": { - "tslib": "^2.1.0" - }, "engines": { - "node": ">=10" - }, - "peerDependencies": { - "graphql": "^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0" + "node": ">=0.4.0" } }, - "node_modules/handlebars": { - "version": "4.7.8", - "dev": true, + "node_modules/depd": { + "version": "2.0.0", "license": "MIT", - "dependencies": { - "minimist": "^1.2.5", - "neo-async": "^2.6.2", - "source-map": "^0.6.1", - "wordwrap": "^1.0.0" - }, - "bin": { - "handlebars": "bin/handlebars" - }, "engines": { - "node": ">=0.4.7" - }, - "optionalDependencies": { - "uglify-js": "^3.1.4" + "node": ">= 0.8" } }, - "node_modules/has-bigints": { - "version": "1.1.0", + "node_modules/dependency-graph": { + "version": "0.11.0", "dev": true, "license": "MIT", "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">= 0.6.0" } }, - "node_modules/has-flag": { - "version": "4.0.0", + "node_modules/destroy": { + "version": "1.2.0", "license": "MIT", "engines": { - "node": ">=8" + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" } }, - "node_modules/has-property-descriptors": { - "version": "1.0.2", - "license": "MIT", - "dependencies": { - "es-define-property": "^1.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node_modules/detect-libc": { + "version": "2.1.2", + "license": "Apache-2.0", + "engines": { + "node": ">=8" } }, - "node_modules/has-proto": { - "version": "1.2.0", + "node_modules/detect-newline": { + "version": "3.1.0", "dev": true, "license": "MIT", - "dependencies": { - "dunder-proto": "^1.0.0" - }, "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">=8" } }, - "node_modules/has-symbols": { - "version": "1.1.0", - "license": "MIT", + "node_modules/diff": { + "version": "4.0.4", + "dev": true, + "license": "BSD-3-Clause", "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">=0.3.1" } }, - "node_modules/has-tostringtag": { - "version": "1.0.2", + "node_modules/docker-compose": { + "version": "1.3.1", + "dev": true, "license": "MIT", "dependencies": { - "has-symbols": "^1.0.3" + "yaml": "^2.2.2" }, "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">= 6.0.0" } }, - "node_modules/hasown": { - "version": "2.0.2", - "license": "MIT", + "node_modules/docker-modem": { + "version": "5.0.6", + "dev": true, + "license": "Apache-2.0", "dependencies": { - "function-bind": "^1.1.2" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/help-me": { - "version": "5.0.0", - "license": "MIT" - }, - "node_modules/hpagent": { - "version": "1.2.0", - "dev": true, - "license": "MIT", + "debug": "^4.1.1", + "readable-stream": "^3.5.0", + "split-ca": "^1.0.1", + "ssh2": "^1.15.0" + }, "engines": { - "node": ">=14" + "node": ">= 8.0" } }, - "node_modules/html-encoding-sniffer": { - "version": "4.0.0", + "node_modules/dockerode": { + "version": "4.0.9", "dev": true, - "license": "MIT", + "license": "Apache-2.0", "dependencies": { - "whatwg-encoding": "^3.1.1" + "@balena/dockerignore": "^1.0.2", + "@grpc/grpc-js": "^1.11.1", + "@grpc/proto-loader": "^0.7.13", + "docker-modem": "^5.0.6", + "protobufjs": "^7.3.2", + "tar-fs": "^2.1.4", + "uuid": "^10.0.0" }, "engines": { - "node": ">=18" + "node": ">= 8.0" } }, - "node_modules/html-escaper": { - "version": "2.0.2", - "dev": true, - "license": "MIT" - }, - "node_modules/htmlparser2": { - "version": "10.1.0", + "node_modules/dockerode/node_modules/tar-fs": { + "version": "2.1.4", "dev": true, - "funding": [ - "https://github.com/fb55/htmlparser2?sponsor=1", - { - "type": "github", - "url": "https://github.com/sponsors/fb55" - } - ], "license": "MIT", "dependencies": { - "domelementtype": "^2.3.0", - "domhandler": "^5.0.3", - "domutils": "^3.2.2", - "entities": "^7.0.1" + "chownr": "^1.1.1", + "mkdirp-classic": "^0.5.2", + "pump": "^3.0.0", + "tar-stream": "^2.1.4" } }, - "node_modules/http-errors": { - "version": "2.0.1", + "node_modules/dockerode/node_modules/tar-stream": { + "version": "2.2.0", + "dev": true, "license": "MIT", "dependencies": { - "depd": "~2.0.0", - "inherits": "~2.0.4", - "setprototypeof": "~1.2.0", - "statuses": "~2.0.2", - "toidentifier": "~1.0.1" + "bl": "^4.0.3", + "end-of-stream": "^1.4.1", + "fs-constants": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^3.1.1" }, "engines": { - "node": ">= 0.8" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/express" + "node": ">=6" } }, - "node_modules/http-proxy": { - "version": "1.18.1", + "node_modules/dockerode/node_modules/uuid": { + "version": "10.0.0", + "dev": true, + "funding": [ + "https://github.com/sponsors/broofa", + "https://github.com/sponsors/ctavan" + ], "license": "MIT", - "dependencies": { - "eventemitter3": "^4.0.0", - "follow-redirects": "^1.0.0", - "requires-port": "^1.0.0" - }, - "engines": { - "node": ">=8.0.0" + "bin": { + "uuid": "dist/bin/uuid" } }, - "node_modules/http-proxy-agent": { - "version": "7.0.2", + "node_modules/doctrine": { + "version": "2.1.0", "dev": true, - "license": "MIT", + "license": "Apache-2.0", "dependencies": { - "agent-base": "^7.1.0", - "debug": "^4.3.4" + "esutils": "^2.0.2" }, "engines": { - "node": ">= 14" + "node": ">=0.10.0" } }, - "node_modules/http2-client": { - "version": "1.3.5", + "node_modules/dom-serializer": { + "version": "2.0.0", "dev": true, - "license": "MIT" - }, - "node_modules/https-proxy-agent": { - "version": "7.0.6", "license": "MIT", "dependencies": { - "agent-base": "^7.1.2", - "debug": "4" + "domelementtype": "^2.3.0", + "domhandler": "^5.0.2", + "entities": "^4.2.0" }, - "engines": { - "node": ">= 14" - } - }, - "node_modules/human-signals": { - "version": "2.1.0", - "license": "Apache-2.0", - "engines": { - "node": ">=10.17.0" + "funding": { + "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1" } }, - "node_modules/iconv-lite": { - "version": "0.7.2", - "license": "MIT", - "dependencies": { - "safer-buffer": ">= 2.1.2 < 3.0.0" - }, + "node_modules/dom-serializer/node_modules/entities": { + "version": "4.5.0", + "dev": true, + "license": "BSD-2-Clause", "engines": { - "node": ">=0.10.0" + "node": ">=0.12" }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/express" + "url": "https://github.com/fb55/entities?sponsor=1" } }, - "node_modules/ieee754": { - "version": "1.1.13", - "license": "BSD-3-Clause" + "node_modules/domelementtype": { + "version": "2.3.0", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/fb55" + } + ], + "license": "BSD-2-Clause" }, - "node_modules/ignore": { - "version": "7.0.5", + "node_modules/domhandler": { + "version": "5.0.3", "dev": true, - "license": "MIT", + "license": "BSD-2-Clause", + "dependencies": { + "domelementtype": "^2.3.0" + }, "engines": { "node": ">= 4" + }, + "funding": { + "url": "https://github.com/fb55/domhandler?sponsor=1" } }, - "node_modules/immer": { - "version": "9.0.21", + "node_modules/dompurify": { + "version": "3.3.1", "dev": true, - "license": "MIT", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/immer" + "license": "(MPL-2.0 OR Apache-2.0)", + "optionalDependencies": { + "@types/trusted-types": "^2.0.7" } }, - "node_modules/import-fresh": { - "version": "3.3.1", + "node_modules/domutils": { + "version": "3.2.2", "dev": true, - "license": "MIT", + "license": "BSD-2-Clause", "dependencies": { - "parent-module": "^1.0.0", - "resolve-from": "^4.0.0" + "dom-serializer": "^2.0.0", + "domelementtype": "^2.3.0", + "domhandler": "^5.0.3" }, + "funding": { + "url": "https://github.com/fb55/domutils?sponsor=1" + } + }, + "node_modules/dotenv": { + "version": "17.2.3", + "license": "BSD-2-Clause", "engines": { - "node": ">=6" + "node": ">=12" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://dotenvx.com" } }, - "node_modules/import-local": { - "version": "3.2.0", - "dev": true, + "node_modules/drange": { + "version": "1.1.1", + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/dunder-proto": { + "version": "1.0.1", "license": "MIT", "dependencies": { - "pkg-dir": "^4.2.0", - "resolve-cwd": "^3.0.0" - }, - "bin": { - "import-local-fixture": "fixtures/cli.js" + "call-bind-apply-helpers": "^1.0.1", + "es-errors": "^1.3.0", + "gopd": "^1.2.0" }, "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">= 0.4" } }, - "node_modules/imurmurhash": { - "version": "0.1.4", + "node_modules/eastasianwidth": { + "version": "0.2.0", + "license": "MIT" + }, + "node_modules/easy-table": { + "version": "1.1.0", + "dev": true, "license": "MIT", - "engines": { - "node": ">=0.8.19" + "optionalDependencies": { + "wcwidth": ">=1.0.1" } }, - "node_modules/indent-string": { - "version": "5.0.0", + "node_modules/ee-first": { + "version": "1.1.1", + "license": "MIT" + }, + "node_modules/electron-to-chromium": { + "version": "1.5.286", + "license": "ISC" + }, + "node_modules/emittery": { + "version": "0.13.1", "dev": true, "license": "MIT", "engines": { "node": ">=12" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/sindresorhus/emittery?sponsor=1" } }, - "node_modules/index-to-position": { - "version": "1.2.0", - "dev": true, + "node_modules/emoji-regex": { + "version": "9.2.2", + "license": "MIT" + }, + "node_modules/encodeurl": { + "version": "2.0.0", "license": "MIT", "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">= 0.8" } }, - "node_modules/inflight": { - "version": "1.0.6", - "license": "ISC", + "node_modules/end-of-stream": { + "version": "1.4.5", + "license": "MIT", "dependencies": { - "once": "^1.3.0", - "wrappy": "1" + "once": "^1.4.0" } }, - "node_modules/inherits": { - "version": "2.0.4", - "license": "ISC" - }, - "node_modules/ini": { - "version": "1.3.8", - "license": "ISC" + "node_modules/entities": { + "version": "6.0.1", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=0.12" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } }, - "node_modules/inquirer": { - "version": "8.2.7", + "node_modules/error-ex": { + "version": "1.3.4", "dev": true, "license": "MIT", "dependencies": { - "@inquirer/external-editor": "^1.0.0", - "ansi-escapes": "^4.2.1", - "chalk": "^4.1.1", - "cli-cursor": "^3.1.0", - "cli-width": "^3.0.0", - "figures": "^3.0.0", - "lodash": "^4.17.21", - "mute-stream": "0.0.8", - "ora": "^5.4.1", - "run-async": "^2.4.0", - "rxjs": "^7.5.5", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0", - "through": "^2.3.6", - "wrap-ansi": "^6.0.1" - }, - "engines": { - "node": ">=12.0.0" + "is-arrayish": "^0.2.1" } }, - "node_modules/internal-slot": { - "version": "1.1.0", + "node_modules/es-abstract": { + "version": "1.24.1", "dev": true, "license": "MIT", "dependencies": { + "array-buffer-byte-length": "^1.0.2", + "arraybuffer.prototype.slice": "^1.0.4", + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.8", + "call-bound": "^1.0.4", + "data-view-buffer": "^1.0.2", + "data-view-byte-length": "^1.0.2", + "data-view-byte-offset": "^1.0.1", + "es-define-property": "^1.0.1", "es-errors": "^1.3.0", + "es-object-atoms": "^1.1.1", + "es-set-tostringtag": "^2.1.0", + "es-to-primitive": "^1.3.0", + "function.prototype.name": "^1.1.8", + "get-intrinsic": "^1.3.0", + "get-proto": "^1.0.1", + "get-symbol-description": "^1.1.0", + "globalthis": "^1.0.4", + "gopd": "^1.2.0", + "has-property-descriptors": "^1.0.2", + "has-proto": "^1.2.0", + "has-symbols": "^1.1.0", "hasown": "^2.0.2", - "side-channel": "^1.1.0" + "internal-slot": "^1.1.0", + "is-array-buffer": "^3.0.5", + "is-callable": "^1.2.7", + "is-data-view": "^1.0.2", + "is-negative-zero": "^2.0.3", + "is-regex": "^1.2.1", + "is-set": "^2.0.3", + "is-shared-array-buffer": "^1.0.4", + "is-string": "^1.1.1", + "is-typed-array": "^1.1.15", + "is-weakref": "^1.1.1", + "math-intrinsics": "^1.1.0", + "object-inspect": "^1.13.4", + "object-keys": "^1.1.1", + "object.assign": "^4.1.7", + "own-keys": "^1.0.1", + "regexp.prototype.flags": "^1.5.4", + "safe-array-concat": "^1.1.3", + "safe-push-apply": "^1.0.0", + "safe-regex-test": "^1.1.0", + "set-proto": "^1.0.0", + "stop-iteration-iterator": "^1.1.0", + "string.prototype.trim": "^1.2.10", + "string.prototype.trimend": "^1.0.9", + "string.prototype.trimstart": "^1.0.8", + "typed-array-buffer": "^1.0.3", + "typed-array-byte-length": "^1.0.3", + "typed-array-byte-offset": "^1.0.4", + "typed-array-length": "^1.0.7", + "unbox-primitive": "^1.1.0", + "which-typed-array": "^1.1.19" }, "engines": { "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/ip-address": { - "version": "10.1.0", + "node_modules/es-aggregate-error": { + "version": "1.0.14", "dev": true, "license": "MIT", + "dependencies": { + "define-data-property": "^1.1.4", + "define-properties": "^1.2.1", + "es-abstract": "^1.24.0", + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "globalthis": "^1.0.4", + "has-property-descriptors": "^1.0.2", + "set-function-name": "^2.0.2" + }, "engines": { - "node": ">= 12" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/ipaddr.js": { - "version": "1.9.1", + "node_modules/es-define-property": { + "version": "1.0.1", "license": "MIT", "engines": { - "node": ">= 0.10" + "node": ">= 0.4" } }, - "node_modules/is-arguments": { - "version": "1.2.0", + "node_modules/es-errors": { + "version": "1.3.0", "license": "MIT", - "dependencies": { - "call-bound": "^1.0.2", - "has-tostringtag": "^1.0.2" - }, "engines": { "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/is-array-buffer": { - "version": "3.0.5", + "node_modules/es-iterator-helpers": { + "version": "1.2.2", "dev": true, "license": "MIT", "dependencies": { "call-bind": "^1.0.8", - "call-bound": "^1.0.3", - "get-intrinsic": "^1.2.6" + "call-bound": "^1.0.4", + "define-properties": "^1.2.1", + "es-abstract": "^1.24.1", + "es-errors": "^1.3.0", + "es-set-tostringtag": "^2.1.0", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.3.0", + "globalthis": "^1.0.4", + "gopd": "^1.2.0", + "has-property-descriptors": "^1.0.2", + "has-proto": "^1.2.0", + "has-symbols": "^1.1.0", + "internal-slot": "^1.1.0", + "iterator.prototype": "^1.1.5", + "safe-array-concat": "^1.1.3" }, "engines": { "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/is-arrayish": { - "version": "0.2.1", - "dev": true, - "license": "MIT" - }, - "node_modules/is-async-function": { - "version": "2.1.1", - "dev": true, + "node_modules/es-object-atoms": { + "version": "1.1.1", "license": "MIT", "dependencies": { - "async-function": "^1.0.0", - "call-bound": "^1.0.3", - "get-proto": "^1.0.1", - "has-tostringtag": "^1.0.2", - "safe-regex-test": "^1.1.0" + "es-errors": "^1.3.0" }, "engines": { "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/is-bigint": { - "version": "1.1.0", - "dev": true, + "node_modules/es-set-tostringtag": { + "version": "2.1.0", "license": "MIT", "dependencies": { - "has-bigints": "^1.0.2" + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.6", + "has-tostringtag": "^1.0.2", + "hasown": "^2.0.2" }, "engines": { "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/is-binary-path": { - "version": "2.1.0", + "node_modules/es-shim-unscopables": { + "version": "1.1.0", "dev": true, "license": "MIT", "dependencies": { - "binary-extensions": "^2.0.0" + "hasown": "^2.0.2" }, "engines": { - "node": ">=8" + "node": ">= 0.4" } }, - "node_modules/is-boolean-object": { - "version": "1.2.2", + "node_modules/es-to-primitive": { + "version": "1.3.0", "dev": true, "license": "MIT", "dependencies": { - "call-bound": "^1.0.3", - "has-tostringtag": "^1.0.2" + "is-callable": "^1.2.7", + "is-date-object": "^1.0.5", + "is-symbol": "^1.0.4" }, "engines": { "node": ">= 0.4" @@ -11399,2460 +11651,2270 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/is-buffer": { - "version": "1.1.6", + "node_modules/es6-promise": { + "version": "3.3.1", + "dev": true, "license": "MIT" }, - "node_modules/is-builtin-module": { - "version": "5.0.0", - "dev": true, + "node_modules/esbuild": { + "version": "0.27.2", + "hasInstallScript": true, "license": "MIT", - "dependencies": { - "builtin-modules": "^5.0.0" + "bin": { + "esbuild": "bin/esbuild" }, "engines": { - "node": ">=18.20" + "node": ">=18" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/is-builtin-module/node_modules/builtin-modules": { - "version": "5.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=18.20" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "optionalDependencies": { + "@esbuild/aix-ppc64": "0.27.2", + "@esbuild/android-arm": "0.27.2", + "@esbuild/android-arm64": "0.27.2", + "@esbuild/android-x64": "0.27.2", + "@esbuild/darwin-arm64": "0.27.2", + "@esbuild/darwin-x64": "0.27.2", + "@esbuild/freebsd-arm64": "0.27.2", + "@esbuild/freebsd-x64": "0.27.2", + "@esbuild/linux-arm": "0.27.2", + "@esbuild/linux-arm64": "0.27.2", + "@esbuild/linux-ia32": "0.27.2", + "@esbuild/linux-loong64": "0.27.2", + "@esbuild/linux-mips64el": "0.27.2", + "@esbuild/linux-ppc64": "0.27.2", + "@esbuild/linux-riscv64": "0.27.2", + "@esbuild/linux-s390x": "0.27.2", + "@esbuild/linux-x64": "0.27.2", + "@esbuild/netbsd-arm64": "0.27.2", + "@esbuild/netbsd-x64": "0.27.2", + "@esbuild/openbsd-arm64": "0.27.2", + "@esbuild/openbsd-x64": "0.27.2", + "@esbuild/openharmony-arm64": "0.27.2", + "@esbuild/sunos-x64": "0.27.2", + "@esbuild/win32-arm64": "0.27.2", + "@esbuild/win32-ia32": "0.27.2", + "@esbuild/win32-x64": "0.27.2" } }, - "node_modules/is-bun-module": { - "version": "2.0.0", - "dev": true, + "node_modules/esbuild/node_modules/@esbuild/linux-x64": { + "version": "0.27.2", + "cpu": [ + "x64" + ], "license": "MIT", - "dependencies": { - "semver": "^7.7.1" + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" } }, - "node_modules/is-callable": { - "version": "1.2.7", + "node_modules/escalade": { + "version": "3.2.0", "license": "MIT", "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">=6" } }, - "node_modules/is-core-module": { - "version": "2.16.1", + "node_modules/escape-html": { + "version": "1.0.3", + "license": "MIT" + }, + "node_modules/escape-string-regexp": { + "version": "4.0.0", "dev": true, "license": "MIT", - "dependencies": { - "hasown": "^2.0.2" - }, "engines": { - "node": ">= 0.4" + "node": ">=10" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/is-data-view": { - "version": "1.0.2", + "node_modules/escodegen": { + "version": "2.1.0", "dev": true, - "license": "MIT", + "license": "BSD-2-Clause", "dependencies": { - "call-bound": "^1.0.2", - "get-intrinsic": "^1.2.6", - "is-typed-array": "^1.1.13" + "esprima": "^4.0.1", + "estraverse": "^5.2.0", + "esutils": "^2.0.2" + }, + "bin": { + "escodegen": "bin/escodegen.js", + "esgenerate": "bin/esgenerate.js" }, "engines": { - "node": ">= 0.4" + "node": ">=6.0" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "optionalDependencies": { + "source-map": "~0.6.1" } }, - "node_modules/is-date-object": { - "version": "1.1.0", + "node_modules/eslint": { + "version": "9.39.2", "dev": true, "license": "MIT", "dependencies": { - "call-bound": "^1.0.2", - "has-tostringtag": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" + "@eslint-community/eslint-utils": "^4.8.0", + "@eslint-community/regexpp": "^4.12.1", + "@eslint/config-array": "^0.21.1", + "@eslint/config-helpers": "^0.4.2", + "@eslint/core": "^0.17.0", + "@eslint/eslintrc": "^3.3.1", + "@eslint/js": "9.39.2", + "@eslint/plugin-kit": "^0.4.1", + "@humanfs/node": "^0.16.6", + "@humanwhocodes/module-importer": "^1.0.1", + "@humanwhocodes/retry": "^0.4.2", + "@types/estree": "^1.0.6", + "ajv": "^6.12.4", + "chalk": "^4.0.0", + "cross-spawn": "^7.0.6", + "debug": "^4.3.2", + "escape-string-regexp": "^4.0.0", + "eslint-scope": "^8.4.0", + "eslint-visitor-keys": "^4.2.1", + "espree": "^10.4.0", + "esquery": "^1.5.0", + "esutils": "^2.0.2", + "fast-deep-equal": "^3.1.3", + "file-entry-cache": "^8.0.0", + "find-up": "^5.0.0", + "glob-parent": "^6.0.2", + "ignore": "^5.2.0", + "imurmurhash": "^0.1.4", + "is-glob": "^4.0.0", + "json-stable-stringify-without-jsonify": "^1.0.1", + "lodash.merge": "^4.6.2", + "minimatch": "^3.1.2", + "natural-compare": "^1.4.0", + "optionator": "^0.9.3" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-docker": { - "version": "2.2.1", - "license": "MIT", "bin": { - "is-docker": "cli.js" + "eslint": "bin/eslint.js" }, "engines": { - "node": ">=8" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/is-extglob": { - "version": "2.1.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" + "url": "https://eslint.org/donate" + }, + "peerDependencies": { + "jiti": "*" + }, + "peerDependenciesMeta": { + "jiti": { + "optional": true + } } }, - "node_modules/is-finalizationregistry": { - "version": "1.1.1", + "node_modules/eslint-config-airbnb-extended": { + "version": "1.0.11", "dev": true, "license": "MIT", "dependencies": { - "call-bound": "^1.0.3" + "confusing-browser-globals": "^1.0.11", + "globals": "^16.0.0" }, - "engines": { - "node": ">= 0.4" + "peerDependencies": { + "@next/eslint-plugin-next": "15.x", + "@stylistic/eslint-plugin": "3.x", + "@types/eslint-plugin-jsx-a11y": "6.x", + "eslint": "9.x", + "eslint-import-resolver-typescript": "4.x", + "eslint-plugin-import-x": "4.x", + "eslint-plugin-jsx-a11y": "6.x", + "eslint-plugin-n": "17.x", + "eslint-plugin-react": "7.x", + "eslint-plugin-react-hooks": "5.x", + "typescript-eslint": "8.x" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-fullwidth-code-point": { - "version": "3.0.0", - "license": "MIT", - "engines": { - "node": ">=8" + "peerDependenciesMeta": { + "@next/eslint-plugin-next": { + "optional": true + }, + "@stylistic/eslint-plugin": { + "optional": true + }, + "@types/eslint-plugin-jsx-a11y": { + "optional": true + }, + "eslint": { + "optional": false + }, + "eslint-import-resolver-typescript": { + "optional": false + }, + "eslint-plugin-jsx-a11y": { + "optional": false + }, + "eslint-plugin-n": { + "optional": true + }, + "eslint-plugin-react": { + "optional": true + }, + "eslint-plugin-react-hooks": { + "optional": true + }, + "typescript-eslint": { + "optional": true + } } }, - "node_modules/is-generator-fn": { - "version": "2.1.0", + "node_modules/eslint-config-airbnb-extended/node_modules/globals": { + "version": "16.5.0", "dev": true, "license": "MIT", "engines": { - "node": ">=6" - } - }, - "node_modules/is-generator-function": { - "version": "1.1.2", - "license": "MIT", - "dependencies": { - "call-bound": "^1.0.4", - "generator-function": "^2.0.0", - "get-proto": "^1.0.1", - "has-tostringtag": "^1.0.2", - "safe-regex-test": "^1.1.0" - }, - "engines": { - "node": ">= 0.4" + "node": ">=18" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/is-glob": { - "version": "4.0.3", + "node_modules/eslint-config-next": { + "version": "15.5.9", "dev": true, "license": "MIT", "dependencies": { - "is-extglob": "^2.1.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-interactive": { - "version": "1.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" + "@next/eslint-plugin-next": "15.5.9", + "@rushstack/eslint-patch": "^1.10.3", + "@typescript-eslint/eslint-plugin": "^5.4.2 || ^6.0.0 || ^7.0.0 || ^8.0.0", + "@typescript-eslint/parser": "^5.4.2 || ^6.0.0 || ^7.0.0 || ^8.0.0", + "eslint-import-resolver-node": "^0.3.6", + "eslint-import-resolver-typescript": "^3.5.2", + "eslint-plugin-import": "^2.31.0", + "eslint-plugin-jsx-a11y": "^6.10.0", + "eslint-plugin-react": "^7.37.0", + "eslint-plugin-react-hooks": "^5.0.0" + }, + "peerDependencies": { + "eslint": "^7.23.0 || ^8.0.0 || ^9.0.0", + "typescript": ">=3.3.1" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } } }, - "node_modules/is-map": { - "version": "2.0.3", + "node_modules/eslint-config-next/node_modules/eslint-import-resolver-typescript": { + "version": "3.10.1", "dev": true, - "license": "MIT", + "license": "ISC", + "dependencies": { + "@nolyfill/is-core-module": "1.0.39", + "debug": "^4.4.0", + "get-tsconfig": "^4.10.0", + "is-bun-module": "^2.0.0", + "stable-hash": "^0.0.5", + "tinyglobby": "^0.2.13", + "unrs-resolver": "^1.6.2" + }, "engines": { - "node": ">= 0.4" + "node": "^14.18.0 || >=16.0.0" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://opencollective.com/eslint-import-resolver-typescript" + }, + "peerDependencies": { + "eslint": "*", + "eslint-plugin-import": "*", + "eslint-plugin-import-x": "*" + }, + "peerDependenciesMeta": { + "eslint-plugin-import": { + "optional": true + }, + "eslint-plugin-import-x": { + "optional": true + } } }, - "node_modules/is-negative-zero": { - "version": "2.0.3", + "node_modules/eslint-config-prettier": { + "version": "10.1.8", "dev": true, "license": "MIT", - "engines": { - "node": ">= 0.4" + "bin": { + "eslint-config-prettier": "bin/cli.js" }, "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-number": { - "version": "7.0.0", - "license": "MIT", - "engines": { - "node": ">=0.12.0" + "url": "https://opencollective.com/eslint-config-prettier" + }, + "peerDependencies": { + "eslint": ">=7.0.0" } }, - "node_modules/is-number-object": { - "version": "1.1.1", + "node_modules/eslint-import-context": { + "version": "0.1.9", "dev": true, "license": "MIT", "dependencies": { - "call-bound": "^1.0.3", - "has-tostringtag": "^1.0.2" + "get-tsconfig": "^4.10.1", + "stable-hash-x": "^0.2.0" }, "engines": { - "node": ">= 0.4" + "node": "^12.20.0 || ^14.18.0 || >=16.0.0" }, "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-port-reachable": { - "version": "4.0.0", - "license": "MIT", - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + "url": "https://opencollective.com/eslint-import-context" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "peerDependencies": { + "unrs-resolver": "^1.0.0" + }, + "peerDependenciesMeta": { + "unrs-resolver": { + "optional": true + } } }, - "node_modules/is-potential-custom-element-name": { - "version": "1.0.1", - "dev": true, - "license": "MIT" - }, - "node_modules/is-promise": { - "version": "4.0.0", - "license": "MIT" - }, - "node_modules/is-reference": { - "version": "1.2.1", + "node_modules/eslint-import-resolver-node": { + "version": "0.3.9", "dev": true, "license": "MIT", "dependencies": { - "@types/estree": "*" + "debug": "^3.2.7", + "is-core-module": "^2.13.0", + "resolve": "^1.22.4" } }, - "node_modules/is-regex": { - "version": "1.2.1", + "node_modules/eslint-import-resolver-node/node_modules/debug": { + "version": "3.2.7", + "dev": true, "license": "MIT", "dependencies": { - "call-bound": "^1.0.2", - "gopd": "^1.2.0", - "has-tostringtag": "^1.0.2", - "hasown": "^2.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "ms": "^2.1.1" } }, - "node_modules/is-set": { - "version": "2.0.3", + "node_modules/eslint-import-resolver-typescript": { + "version": "4.4.4", "dev": true, - "license": "MIT", + "license": "ISC", + "dependencies": { + "debug": "^4.4.1", + "eslint-import-context": "^0.1.8", + "get-tsconfig": "^4.10.1", + "is-bun-module": "^2.0.0", + "stable-hash-x": "^0.2.0", + "tinyglobby": "^0.2.14", + "unrs-resolver": "^1.7.11" + }, "engines": { - "node": ">= 0.4" + "node": "^16.17.0 || >=18.6.0" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://opencollective.com/eslint-import-resolver-typescript" + }, + "peerDependencies": { + "eslint": "*", + "eslint-plugin-import": "*", + "eslint-plugin-import-x": "*" + }, + "peerDependenciesMeta": { + "eslint-plugin-import": { + "optional": true + }, + "eslint-plugin-import-x": { + "optional": true + } } }, - "node_modules/is-shared-array-buffer": { - "version": "1.0.4", + "node_modules/eslint-module-utils": { + "version": "2.12.1", "dev": true, "license": "MIT", "dependencies": { - "call-bound": "^1.0.3" + "debug": "^3.2.7" }, "engines": { - "node": ">= 0.4" + "node": ">=4" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "peerDependenciesMeta": { + "eslint": { + "optional": true + } } }, - "node_modules/is-stream": { - "version": "2.0.1", + "node_modules/eslint-module-utils/node_modules/debug": { + "version": "3.2.7", + "dev": true, "license": "MIT", - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "dependencies": { + "ms": "^2.1.1" } }, - "node_modules/is-string": { - "version": "1.1.1", + "node_modules/eslint-plugin-html": { + "version": "8.1.3", "dev": true, - "license": "MIT", + "license": "ISC", "dependencies": { - "call-bound": "^1.0.3", - "has-tostringtag": "^1.0.2" + "htmlparser2": "^10.0.0" }, "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">=16.0.0" } }, - "node_modules/is-symbol": { - "version": "1.1.1", + "node_modules/eslint-plugin-import": { + "version": "2.32.0", "dev": true, "license": "MIT", "dependencies": { - "call-bound": "^1.0.2", - "has-symbols": "^1.1.0", - "safe-regex-test": "^1.1.0" + "@rtsao/scc": "^1.1.0", + "array-includes": "^3.1.9", + "array.prototype.findlastindex": "^1.2.6", + "array.prototype.flat": "^1.3.3", + "array.prototype.flatmap": "^1.3.3", + "debug": "^3.2.7", + "doctrine": "^2.1.0", + "eslint-import-resolver-node": "^0.3.9", + "eslint-module-utils": "^2.12.1", + "hasown": "^2.0.2", + "is-core-module": "^2.16.1", + "is-glob": "^4.0.3", + "minimatch": "^3.1.2", + "object.fromentries": "^2.0.8", + "object.groupby": "^1.0.3", + "object.values": "^1.2.1", + "semver": "^6.3.1", + "string.prototype.trimend": "^1.0.9", + "tsconfig-paths": "^3.15.0" }, "engines": { - "node": ">= 0.4" + "node": ">=4" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "peerDependencies": { + "eslint": "^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8 || ^9" } }, - "node_modules/is-typed-array": { - "version": "1.1.15", + "node_modules/eslint-plugin-import-x": { + "version": "4.16.1", + "dev": true, "license": "MIT", "dependencies": { - "which-typed-array": "^1.1.16" + "@typescript-eslint/types": "^8.35.0", + "comment-parser": "^1.4.1", + "debug": "^4.4.1", + "eslint-import-context": "^0.1.9", + "is-glob": "^4.0.3", + "minimatch": "^9.0.3 || ^10.0.1", + "semver": "^7.7.2", + "stable-hash-x": "^0.2.0", + "unrs-resolver": "^1.9.2" }, "engines": { - "node": ">= 0.4" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-unicode-supported": { - "version": "0.1.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10" + "url": "https://opencollective.com/eslint-plugin-import-x" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/is-weakmap": { - "version": "2.0.2", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" + "peerDependencies": { + "@typescript-eslint/utils": "^8.0.0", + "eslint": "^8.57.0 || ^9.0.0", + "eslint-import-resolver-node": "*" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "peerDependenciesMeta": { + "@typescript-eslint/utils": { + "optional": true + }, + "eslint-import-resolver-node": { + "optional": true + } } }, - "node_modules/is-weakref": { - "version": "1.1.1", + "node_modules/eslint-plugin-import/node_modules/brace-expansion": { + "version": "1.1.12", "dev": true, "license": "MIT", "dependencies": { - "call-bound": "^1.0.3" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" } }, - "node_modules/is-weakset": { - "version": "2.0.4", + "node_modules/eslint-plugin-import/node_modules/debug": { + "version": "3.2.7", "dev": true, "license": "MIT", "dependencies": { - "call-bound": "^1.0.3", - "get-intrinsic": "^1.2.6" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "ms": "^2.1.1" } }, - "node_modules/is-wsl": { - "version": "2.2.0", - "license": "MIT", + "node_modules/eslint-plugin-import/node_modules/minimatch": { + "version": "3.1.2", + "dev": true, + "license": "ISC", "dependencies": { - "is-docker": "^2.0.0" + "brace-expansion": "^1.1.7" }, "engines": { - "node": ">=8" + "node": "*" } }, - "node_modules/isarray": { - "version": "1.0.0", - "license": "MIT" - }, - "node_modules/isexe": { - "version": "2.0.0", - "license": "ISC" - }, - "node_modules/istanbul-lib-coverage": { - "version": "3.2.2", - "license": "BSD-3-Clause", - "engines": { - "node": ">=8" + "node_modules/eslint-plugin-import/node_modules/semver": { + "version": "6.3.1", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" } }, - "node_modules/istanbul-lib-instrument": { - "version": "6.0.3", - "license": "BSD-3-Clause", + "node_modules/eslint-plugin-jest": { + "version": "29.12.2", + "dev": true, + "license": "MIT", "dependencies": { - "@babel/core": "^7.23.9", - "@babel/parser": "^7.23.9", - "@istanbuljs/schema": "^0.1.3", - "istanbul-lib-coverage": "^3.2.0", - "semver": "^7.5.4" + "@typescript-eslint/utils": "^8.0.0" }, "engines": { - "node": ">=10" + "node": "^20.12.0 || ^22.0.0 || >=24.0.0" + }, + "peerDependencies": { + "@typescript-eslint/eslint-plugin": "^8.0.0", + "eslint": "^8.57.0 || ^9.0.0", + "jest": "*", + "typescript": ">=4.8.4 <6.0.0" + }, + "peerDependenciesMeta": { + "@typescript-eslint/eslint-plugin": { + "optional": true + }, + "jest": { + "optional": true + }, + "typescript": { + "optional": true + } } }, - "node_modules/istanbul-lib-report": { - "version": "3.0.1", + "node_modules/eslint-plugin-json": { + "version": "4.0.1", "dev": true, - "license": "BSD-3-Clause", + "license": "MIT", "dependencies": { - "istanbul-lib-coverage": "^3.0.0", - "make-dir": "^4.0.0", - "supports-color": "^7.1.0" + "lodash": "^4.17.21", + "vscode-json-languageservice": "^4.1.6" }, "engines": { - "node": ">=10" + "node": ">=18.0" } }, - "node_modules/istanbul-lib-source-maps": { - "version": "5.0.6", + "node_modules/eslint-plugin-jsx-a11y": { + "version": "6.10.2", "dev": true, - "license": "BSD-3-Clause", + "license": "MIT", "dependencies": { - "@jridgewell/trace-mapping": "^0.3.23", - "debug": "^4.1.1", - "istanbul-lib-coverage": "^3.0.0" + "aria-query": "^5.3.2", + "array-includes": "^3.1.8", + "array.prototype.flatmap": "^1.3.2", + "ast-types-flow": "^0.0.8", + "axe-core": "^4.10.0", + "axobject-query": "^4.1.0", + "damerau-levenshtein": "^1.0.8", + "emoji-regex": "^9.2.2", + "hasown": "^2.0.2", + "jsx-ast-utils": "^3.3.5", + "language-tags": "^1.0.9", + "minimatch": "^3.1.2", + "object.fromentries": "^2.0.8", + "safe-regex-test": "^1.0.3", + "string.prototype.includes": "^2.0.1" }, "engines": { - "node": ">=10" + "node": ">=4.0" + }, + "peerDependencies": { + "eslint": "^3 || ^4 || ^5 || ^6 || ^7 || ^8 || ^9" } }, - "node_modules/istanbul-reports": { - "version": "3.2.0", + "node_modules/eslint-plugin-jsx-a11y/node_modules/brace-expansion": { + "version": "1.1.12", "dev": true, - "license": "BSD-3-Clause", + "license": "MIT", "dependencies": { - "html-escaper": "^2.0.0", - "istanbul-lib-report": "^3.0.0" - }, - "engines": { - "node": ">=8" + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" } }, - "node_modules/iterare": { - "version": "1.2.1", + "node_modules/eslint-plugin-jsx-a11y/node_modules/minimatch": { + "version": "3.1.2", "dev": true, "license": "ISC", - "engines": { - "node": ">=6" - } - }, - "node_modules/iterator.prototype": { - "version": "1.1.5", - "dev": true, - "license": "MIT", "dependencies": { - "define-data-property": "^1.1.4", - "es-object-atoms": "^1.0.0", - "get-intrinsic": "^1.2.6", - "get-proto": "^1.0.0", - "has-symbols": "^1.1.0", - "set-function-name": "^2.0.2" + "brace-expansion": "^1.1.7" }, "engines": { - "node": ">= 0.4" + "node": "*" } }, - "node_modules/jackspeak": { - "version": "4.2.3", + "node_modules/eslint-plugin-no-relative-import-paths": { + "version": "v1.6.1", "dev": true, - "license": "BlueOak-1.0.0", - "dependencies": { - "@isaacs/cliui": "^9.0.0" - }, - "engines": { - "node": "20 || >=22" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } + "license": "ISC" }, - "node_modules/jest": { - "version": "30.2.0", + "node_modules/eslint-plugin-prettier": { + "version": "5.5.5", "dev": true, "license": "MIT", "dependencies": { - "@jest/core": "30.2.0", - "@jest/types": "30.2.0", - "import-local": "^3.2.0", - "jest-cli": "30.2.0" - }, - "bin": { - "jest": "bin/jest.js" + "prettier-linter-helpers": "^1.0.1", + "synckit": "^0.11.12" }, "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + "node": "^14.18.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint-plugin-prettier" }, "peerDependencies": { - "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" + "@types/eslint": ">=8.0.0", + "eslint": ">=8.0.0", + "eslint-config-prettier": ">= 7.0.0 <10.0.0 || >=10.1.0", + "prettier": ">=3.0.0" }, "peerDependenciesMeta": { - "node-notifier": { + "@types/eslint": { + "optional": true + }, + "eslint-config-prettier": { "optional": true } } }, - "node_modules/jest-changed-files": { - "version": "30.2.0", - "dev": true, - "license": "MIT", - "dependencies": { - "execa": "^5.1.1", - "jest-util": "30.2.0", - "p-limit": "^3.1.0" - }, - "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" - } - }, - "node_modules/jest-circus": { - "version": "30.2.0", + "node_modules/eslint-plugin-react": { + "version": "7.37.5", "dev": true, "license": "MIT", "dependencies": { - "@jest/environment": "30.2.0", - "@jest/expect": "30.2.0", - "@jest/test-result": "30.2.0", - "@jest/types": "30.2.0", - "@types/node": "*", - "chalk": "^4.1.2", - "co": "^4.6.0", - "dedent": "^1.6.0", - "is-generator-fn": "^2.1.0", - "jest-each": "30.2.0", - "jest-matcher-utils": "30.2.0", - "jest-message-util": "30.2.0", - "jest-runtime": "30.2.0", - "jest-snapshot": "30.2.0", - "jest-util": "30.2.0", - "p-limit": "^3.1.0", - "pretty-format": "30.2.0", - "pure-rand": "^7.0.0", - "slash": "^3.0.0", - "stack-utils": "^2.0.6" + "array-includes": "^3.1.8", + "array.prototype.findlast": "^1.2.5", + "array.prototype.flatmap": "^1.3.3", + "array.prototype.tosorted": "^1.1.4", + "doctrine": "^2.1.0", + "es-iterator-helpers": "^1.2.1", + "estraverse": "^5.3.0", + "hasown": "^2.0.2", + "jsx-ast-utils": "^2.4.1 || ^3.0.0", + "minimatch": "^3.1.2", + "object.entries": "^1.1.9", + "object.fromentries": "^2.0.8", + "object.values": "^1.2.1", + "prop-types": "^15.8.1", + "resolve": "^2.0.0-next.5", + "semver": "^6.3.1", + "string.prototype.matchall": "^4.0.12", + "string.prototype.repeat": "^1.0.0" }, "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + "node": ">=4" + }, + "peerDependencies": { + "eslint": "^3 || ^4 || ^5 || ^6 || ^7 || ^8 || ^9.7" } }, - "node_modules/jest-cli": { - "version": "30.2.0", + "node_modules/eslint-plugin-react-hooks": { + "version": "5.2.0", "dev": true, "license": "MIT", - "dependencies": { - "@jest/core": "30.2.0", - "@jest/test-result": "30.2.0", - "@jest/types": "30.2.0", - "chalk": "^4.1.2", - "exit-x": "^0.2.2", - "import-local": "^3.2.0", - "jest-config": "30.2.0", - "jest-util": "30.2.0", - "jest-validate": "30.2.0", - "yargs": "^17.7.2" - }, - "bin": { - "jest": "bin/jest.js" - }, "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + "node": ">=10" }, "peerDependencies": { - "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" - }, - "peerDependenciesMeta": { - "node-notifier": { - "optional": true - } + "eslint": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0 || ^9.0.0" } }, - "node_modules/jest-config": { - "version": "30.2.0", + "node_modules/eslint-plugin-react/node_modules/brace-expansion": { + "version": "1.1.12", "dev": true, "license": "MIT", "dependencies": { - "@babel/core": "^7.27.4", - "@jest/get-type": "30.1.0", - "@jest/pattern": "30.0.1", - "@jest/test-sequencer": "30.2.0", - "@jest/types": "30.2.0", - "babel-jest": "30.2.0", - "chalk": "^4.1.2", - "ci-info": "^4.2.0", - "deepmerge": "^4.3.1", - "glob": "^10.3.10", - "graceful-fs": "^4.2.11", - "jest-circus": "30.2.0", - "jest-docblock": "30.2.0", - "jest-environment-node": "30.2.0", - "jest-regex-util": "30.0.1", - "jest-resolve": "30.2.0", - "jest-runner": "30.2.0", - "jest-util": "30.2.0", - "jest-validate": "30.2.0", - "micromatch": "^4.0.8", - "parse-json": "^5.2.0", - "pretty-format": "30.2.0", - "slash": "^3.0.0", - "strip-json-comments": "^3.1.1" - }, - "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" - }, - "peerDependencies": { - "@types/node": "*", - "esbuild-register": ">=3.4.0", - "ts-node": ">=9.0.0" - }, - "peerDependenciesMeta": { - "@types/node": { - "optional": true - }, - "esbuild-register": { - "optional": true - }, - "ts-node": { - "optional": true - } + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" } }, - "node_modules/jest-config/node_modules/@isaacs/cliui": { - "version": "8.0.2", + "node_modules/eslint-plugin-react/node_modules/minimatch": { + "version": "3.1.2", "dev": true, "license": "ISC", "dependencies": { - "string-width": "^5.1.2", - "string-width-cjs": "npm:string-width@^4.2.0", - "strip-ansi": "^7.0.1", - "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", - "wrap-ansi": "^8.1.0", - "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" + "brace-expansion": "^1.1.7" }, "engines": { - "node": ">=12" + "node": "*" } }, - "node_modules/jest-config/node_modules/ansi-regex": { - "version": "6.2.2", + "node_modules/eslint-plugin-react/node_modules/resolve": { + "version": "2.0.0-next.5", "dev": true, "license": "MIT", - "engines": { - "node": ">=12" + "dependencies": { + "is-core-module": "^2.13.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" }, - "funding": { - "url": "https://github.com/chalk/ansi-regex?sponsor=1" - } - }, - "node_modules/jest-config/node_modules/ansi-styles": { - "version": "6.2.3", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12" + "bin": { + "resolve": "bin/resolve" }, "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/jest-config/node_modules/glob": { - "version": "10.5.0", + "node_modules/eslint-plugin-react/node_modules/semver": { + "version": "6.3.1", "dev": true, "license": "ISC", - "dependencies": { - "foreground-child": "^3.1.0", - "jackspeak": "^3.1.2", - "minimatch": "^9.0.4", - "minipass": "^7.1.2", - "package-json-from-dist": "^1.0.0", - "path-scurry": "^1.11.1" - }, "bin": { - "glob": "dist/esm/bin.mjs" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" + "semver": "bin/semver.js" } }, - "node_modules/jest-config/node_modules/jackspeak": { - "version": "3.4.3", + "node_modules/eslint-plugin-security": { + "version": "3.0.1", "dev": true, - "license": "BlueOak-1.0.0", + "license": "Apache-2.0", "dependencies": { - "@isaacs/cliui": "^8.0.2" + "safe-regex": "^2.1.1" }, - "funding": { - "url": "https://github.com/sponsors/isaacs" + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, - "optionalDependencies": { - "@pkgjs/parseargs": "^0.11.0" + "funding": { + "url": "https://opencollective.com/eslint" } }, - "node_modules/jest-config/node_modules/lru-cache": { - "version": "10.4.3", - "dev": true, - "license": "ISC" - }, - "node_modules/jest-config/node_modules/minimatch": { - "version": "9.0.5", + "node_modules/eslint-plugin-sonarjs": { + "version": "3.0.5", "dev": true, - "license": "ISC", + "license": "LGPL-3.0-only", "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": ">=16 || 14 >=14.17" + "@eslint-community/regexpp": "4.12.1", + "builtin-modules": "3.3.0", + "bytes": "3.1.2", + "functional-red-black-tree": "1.0.1", + "jsx-ast-utils-x": "0.1.0", + "lodash.merge": "4.6.2", + "minimatch": "9.0.5", + "scslre": "0.3.0", + "semver": "7.7.2", + "typescript": ">=5" }, - "funding": { - "url": "https://github.com/sponsors/isaacs" + "peerDependencies": { + "eslint": "^8.0.0 || ^9.0.0" } }, - "node_modules/jest-config/node_modules/path-scurry": { - "version": "1.11.1", + "node_modules/eslint-plugin-sonarjs/node_modules/@eslint-community/regexpp": { + "version": "4.12.1", "dev": true, - "license": "BlueOak-1.0.0", - "dependencies": { - "lru-cache": "^10.2.0", - "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" - }, + "license": "MIT", "engines": { - "node": ">=16 || 14 >=14.18" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" + "node": "^12.0.0 || ^14.0.0 || >=16.0.0" } }, - "node_modules/jest-config/node_modules/string-width": { - "version": "5.1.2", + "node_modules/eslint-plugin-sonarjs/node_modules/semver": { + "version": "7.7.2", "dev": true, - "license": "MIT", - "dependencies": { - "eastasianwidth": "^0.2.0", - "emoji-regex": "^9.2.2", - "strip-ansi": "^7.0.1" + "license": "ISC", + "bin": { + "semver": "bin/semver.js" }, "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=10" } }, - "node_modules/jest-config/node_modules/strip-ansi": { - "version": "7.1.2", + "node_modules/eslint-plugin-sort-destructure-keys": { + "version": "2.0.0", "dev": true, - "license": "MIT", + "license": "ISC", "dependencies": { - "ansi-regex": "^6.0.1" + "natural-compare-lite": "^1.4.0" }, "engines": { "node": ">=12" }, - "funding": { - "url": "https://github.com/chalk/strip-ansi?sponsor=1" + "peerDependencies": { + "eslint": "5 - 9" } }, - "node_modules/jest-config/node_modules/wrap-ansi": { - "version": "8.1.0", + "node_modules/eslint-plugin-unicorn": { + "version": "62.0.0", "dev": true, "license": "MIT", "dependencies": { - "ansi-styles": "^6.1.0", - "string-width": "^5.0.1", - "strip-ansi": "^7.0.1" + "@babel/helper-validator-identifier": "^7.28.5", + "@eslint-community/eslint-utils": "^4.9.0", + "@eslint/plugin-kit": "^0.4.0", + "change-case": "^5.4.4", + "ci-info": "^4.3.1", + "clean-regexp": "^1.0.0", + "core-js-compat": "^3.46.0", + "esquery": "^1.6.0", + "find-up-simple": "^1.0.1", + "globals": "^16.4.0", + "indent-string": "^5.0.0", + "is-builtin-module": "^5.0.0", + "jsesc": "^3.1.0", + "pluralize": "^8.0.0", + "regexp-tree": "^0.1.27", + "regjsparser": "^0.13.0", + "semver": "^7.7.3", + "strip-indent": "^4.1.1" }, "engines": { - "node": ">=12" + "node": "^20.10.0 || >=21.0.0" }, "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" - } - }, - "node_modules/jest-diff": { - "version": "30.2.0", - "license": "MIT", - "dependencies": { - "@jest/diff-sequences": "30.0.1", - "@jest/get-type": "30.1.0", - "chalk": "^4.1.2", - "pretty-format": "30.2.0" + "url": "https://github.com/sindresorhus/eslint-plugin-unicorn?sponsor=1" }, - "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + "peerDependencies": { + "eslint": ">=9.38.0" } }, - "node_modules/jest-docblock": { - "version": "30.2.0", + "node_modules/eslint-plugin-unicorn/node_modules/globals": { + "version": "16.5.0", "dev": true, "license": "MIT", - "dependencies": { - "detect-newline": "^3.1.0" - }, "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/jest-each": { - "version": "30.2.0", + "node_modules/eslint-scope": { + "version": "8.4.0", "dev": true, - "license": "MIT", + "license": "BSD-2-Clause", "dependencies": { - "@jest/get-type": "30.1.0", - "@jest/types": "30.2.0", - "chalk": "^4.1.2", - "jest-util": "30.2.0", - "pretty-format": "30.2.0" + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" }, "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" } }, - "node_modules/jest-environment-jsdom": { - "version": "30.2.0", + "node_modules/eslint-visitor-keys": { + "version": "4.2.1", "dev": true, - "license": "MIT", - "dependencies": { - "@jest/environment": "30.2.0", - "@jest/environment-jsdom-abstract": "30.2.0", - "@types/jsdom": "^21.1.7", - "@types/node": "*", - "jsdom": "^26.1.0" - }, + "license": "Apache-2.0", "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" - }, - "peerDependencies": { - "canvas": "^3.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, - "peerDependenciesMeta": { - "canvas": { - "optional": true - } + "funding": { + "url": "https://opencollective.com/eslint" } }, - "node_modules/jest-environment-node": { - "version": "30.2.0", + "node_modules/eslint/node_modules/ajv": { + "version": "6.12.6", "dev": true, "license": "MIT", "dependencies": { - "@jest/environment": "30.2.0", - "@jest/fake-timers": "30.2.0", - "@jest/types": "30.2.0", - "@types/node": "*", - "jest-mock": "30.2.0", - "jest-util": "30.2.0", - "jest-validate": "30.2.0" + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" }, - "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" } }, - "node_modules/jest-haste-map": { - "version": "30.2.0", + "node_modules/eslint/node_modules/brace-expansion": { + "version": "1.1.12", + "dev": true, "license": "MIT", "dependencies": { - "@jest/types": "30.2.0", - "@types/node": "*", - "anymatch": "^3.1.3", - "fb-watchman": "^2.0.2", - "graceful-fs": "^4.2.11", - "jest-regex-util": "30.0.1", - "jest-util": "30.2.0", - "jest-worker": "30.2.0", - "micromatch": "^4.0.8", - "walker": "^1.0.8" - }, - "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" - }, - "optionalDependencies": { - "fsevents": "^2.3.3" + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" } }, - "node_modules/jest-html-reporter": { - "version": "4.3.0", + "node_modules/eslint/node_modules/ignore": { + "version": "5.3.2", "dev": true, "license": "MIT", - "dependencies": { - "@jest/reporters": "^30.0.2", - "@jest/test-result": "^30.0.2", - "@jest/types": "^30.0.1", - "dateformat": "3.0.2", - "mkdirp": "^1.0.3", - "strip-ansi": "6.0.1", - "xmlbuilder": "15.0.0" - }, "engines": { - "node": ">=14.0.0" - }, - "peerDependencies": { - "jest": "19.x - 30.x", - "typescript": "^3.7.x || ^4.3.x || ^5.x" + "node": ">= 4" } }, - "node_modules/jest-leak-detector": { - "version": "30.2.0", + "node_modules/eslint/node_modules/json-schema-traverse": { + "version": "0.4.1", "dev": true, - "license": "MIT", + "license": "MIT" + }, + "node_modules/eslint/node_modules/minimatch": { + "version": "3.1.2", + "dev": true, + "license": "ISC", "dependencies": { - "@jest/get-type": "30.1.0", - "pretty-format": "30.2.0" + "brace-expansion": "^1.1.7" }, "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + "node": "*" } }, - "node_modules/jest-matcher-utils": { - "version": "30.2.0", - "license": "MIT", + "node_modules/espree": { + "version": "10.4.0", + "dev": true, + "license": "BSD-2-Clause", "dependencies": { - "@jest/get-type": "30.1.0", - "chalk": "^4.1.2", - "jest-diff": "30.2.0", - "pretty-format": "30.2.0" + "acorn": "^8.15.0", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^4.2.1" }, "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" } }, - "node_modules/jest-message-util": { - "version": "30.2.0", - "license": "MIT", - "dependencies": { - "@babel/code-frame": "^7.27.1", - "@jest/types": "30.2.0", - "@types/stack-utils": "^2.0.3", - "chalk": "^4.1.2", - "graceful-fs": "^4.2.11", - "micromatch": "^4.0.8", - "pretty-format": "30.2.0", - "slash": "^3.0.0", - "stack-utils": "^2.0.6" + "node_modules/esprima": { + "version": "4.0.1", + "license": "BSD-2-Clause", + "bin": { + "esparse": "bin/esparse.js", + "esvalidate": "bin/esvalidate.js" }, "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + "node": ">=4" } }, - "node_modules/jest-mock": { - "version": "30.2.0", - "license": "MIT", + "node_modules/esquery": { + "version": "1.7.0", + "dev": true, + "license": "BSD-3-Clause", "dependencies": { - "@jest/types": "30.2.0", - "@types/node": "*", - "jest-util": "30.2.0" + "estraverse": "^5.1.0" }, "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + "node": ">=0.10" } }, - "node_modules/jest-mock-extended": { - "version": "4.0.0", + "node_modules/esrecurse": { + "version": "4.3.0", "dev": true, - "license": "MIT", + "license": "BSD-2-Clause", "dependencies": { - "ts-essentials": "^10.0.2" + "estraverse": "^5.2.0" }, - "peerDependencies": { - "@jest/globals": "^28.0.0 || ^29.0.0 || ^30.0.0", - "jest": "^24.0.0 || ^25.0.0 || ^26.0.0 || ^27.0.0 || ^28.0.0 || ^29.0.0 || ^30.0.0", - "typescript": "^3.0.0 || ^4.0.0 || ^5.0.0" + "engines": { + "node": ">=4.0" } }, - "node_modules/jest-pnp-resolver": { - "version": "1.2.3", + "node_modules/estraverse": { + "version": "5.3.0", "dev": true, - "license": "MIT", + "license": "BSD-2-Clause", "engines": { - "node": ">=6" - }, - "peerDependencies": { - "jest-resolve": "*" - }, - "peerDependenciesMeta": { - "jest-resolve": { - "optional": true - } + "node": ">=4.0" } }, - "node_modules/jest-regex-util": { - "version": "30.0.1", - "license": "MIT", - "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" - } + "node_modules/estree-walker": { + "version": "2.0.2", + "dev": true, + "license": "MIT" }, - "node_modules/jest-resolve": { - "version": "30.2.0", + "node_modules/esutils": { + "version": "2.0.3", "dev": true, - "license": "MIT", - "dependencies": { - "chalk": "^4.1.2", - "graceful-fs": "^4.2.11", - "jest-haste-map": "30.2.0", - "jest-pnp-resolver": "^1.2.3", - "jest-util": "30.2.0", - "jest-validate": "30.2.0", - "slash": "^3.0.0", - "unrs-resolver": "^1.7.11" - }, + "license": "BSD-2-Clause", "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + "node": ">=0.10.0" } }, - "node_modules/jest-resolve-dependencies": { - "version": "30.2.0", - "dev": true, + "node_modules/etag": { + "version": "1.8.1", "license": "MIT", - "dependencies": { - "jest-regex-util": "30.0.1", - "jest-snapshot": "30.2.0" - }, "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + "node": ">= 0.6" } }, - "node_modules/jest-runner": { - "version": "30.2.0", + "node_modules/event-target-shim": { + "version": "5.0.1", "dev": true, "license": "MIT", - "dependencies": { - "@jest/console": "30.2.0", - "@jest/environment": "30.2.0", - "@jest/test-result": "30.2.0", - "@jest/transform": "30.2.0", - "@jest/types": "30.2.0", - "@types/node": "*", - "chalk": "^4.1.2", - "emittery": "^0.13.1", - "exit-x": "^0.2.2", - "graceful-fs": "^4.2.11", - "jest-docblock": "30.2.0", - "jest-environment-node": "30.2.0", - "jest-haste-map": "30.2.0", - "jest-leak-detector": "30.2.0", - "jest-message-util": "30.2.0", - "jest-resolve": "30.2.0", - "jest-runtime": "30.2.0", - "jest-util": "30.2.0", - "jest-watcher": "30.2.0", - "jest-worker": "30.2.0", - "p-limit": "^3.1.0", - "source-map-support": "0.5.13" - }, "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + "node": ">=6" } }, - "node_modules/jest-runtime": { - "version": "30.2.0", - "dev": true, + "node_modules/eventemitter3": { + "version": "4.0.7", + "license": "MIT" + }, + "node_modules/events": { + "version": "1.1.1", "license": "MIT", - "dependencies": { - "@jest/environment": "30.2.0", - "@jest/fake-timers": "30.2.0", - "@jest/globals": "30.2.0", - "@jest/source-map": "30.0.1", - "@jest/test-result": "30.2.0", - "@jest/transform": "30.2.0", - "@jest/types": "30.2.0", - "@types/node": "*", - "chalk": "^4.1.2", - "cjs-module-lexer": "^2.1.0", - "collect-v8-coverage": "^1.0.2", - "glob": "^10.3.10", - "graceful-fs": "^4.2.11", - "jest-haste-map": "30.2.0", - "jest-message-util": "30.2.0", - "jest-mock": "30.2.0", - "jest-regex-util": "30.0.1", - "jest-resolve": "30.2.0", - "jest-snapshot": "30.2.0", - "jest-util": "30.2.0", - "slash": "^3.0.0", - "strip-bom": "^4.0.0" - }, "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + "node": ">=0.4.x" } }, - "node_modules/jest-runtime/node_modules/@isaacs/cliui": { - "version": "8.0.2", + "node_modules/events-universal": { + "version": "1.0.1", "dev": true, - "license": "ISC", + "license": "Apache-2.0", "dependencies": { - "string-width": "^5.1.2", - "string-width-cjs": "npm:string-width@^4.2.0", - "strip-ansi": "^7.0.1", - "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", - "wrap-ansi": "^8.1.0", - "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" - }, - "engines": { - "node": ">=12" + "bare-events": "^2.7.0" } }, - "node_modules/jest-runtime/node_modules/ansi-regex": { - "version": "6.2.2", - "dev": true, + "node_modules/execa": { + "version": "5.1.1", "license": "MIT", + "dependencies": { + "cross-spawn": "^7.0.3", + "get-stream": "^6.0.0", + "human-signals": "^2.1.0", + "is-stream": "^2.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^4.0.1", + "onetime": "^5.1.2", + "signal-exit": "^3.0.3", + "strip-final-newline": "^2.0.0" + }, "engines": { - "node": ">=12" + "node": ">=10" }, "funding": { - "url": "https://github.com/chalk/ansi-regex?sponsor=1" + "url": "https://github.com/sindresorhus/execa?sponsor=1" } }, - "node_modules/jest-runtime/node_modules/ansi-styles": { - "version": "6.2.3", + "node_modules/exit-x": { + "version": "0.2.2", "dev": true, "license": "MIT", "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "node": ">= 0.8.0" } }, - "node_modules/jest-runtime/node_modules/glob": { - "version": "10.5.0", - "dev": true, - "license": "ISC", + "node_modules/expect": { + "version": "30.2.0", + "license": "MIT", "dependencies": { - "foreground-child": "^3.1.0", - "jackspeak": "^3.1.2", - "minimatch": "^9.0.4", - "minipass": "^7.1.2", - "package-json-from-dist": "^1.0.0", - "path-scurry": "^1.11.1" - }, - "bin": { - "glob": "dist/esm/bin.mjs" + "@jest/expect-utils": "30.2.0", + "@jest/get-type": "30.1.0", + "jest-matcher-utils": "30.2.0", + "jest-message-util": "30.2.0", + "jest-mock": "30.2.0", + "jest-util": "30.2.0" }, - "funding": { - "url": "https://github.com/sponsors/isaacs" + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" } }, - "node_modules/jest-runtime/node_modules/jackspeak": { - "version": "3.4.3", - "dev": true, - "license": "BlueOak-1.0.0", + "node_modules/express": { + "version": "5.2.1", + "license": "MIT", "dependencies": { - "@isaacs/cliui": "^8.0.2" + "accepts": "^2.0.0", + "body-parser": "^2.2.1", + "content-disposition": "^1.0.0", + "content-type": "^1.0.5", + "cookie": "^0.7.1", + "cookie-signature": "^1.2.1", + "debug": "^4.4.0", + "depd": "^2.0.0", + "encodeurl": "^2.0.0", + "escape-html": "^1.0.3", + "etag": "^1.8.1", + "finalhandler": "^2.1.0", + "fresh": "^2.0.0", + "http-errors": "^2.0.0", + "merge-descriptors": "^2.0.0", + "mime-types": "^3.0.0", + "on-finished": "^2.4.1", + "once": "^1.4.0", + "parseurl": "^1.3.3", + "proxy-addr": "^2.0.7", + "qs": "^6.14.0", + "range-parser": "^1.2.1", + "router": "^2.2.0", + "send": "^1.1.0", + "serve-static": "^2.2.0", + "statuses": "^2.0.1", + "type-is": "^2.0.1", + "vary": "^1.1.2" }, - "funding": { - "url": "https://github.com/sponsors/isaacs" + "engines": { + "node": ">= 18" }, - "optionalDependencies": { - "@pkgjs/parseargs": "^0.11.0" + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" } }, - "node_modules/jest-runtime/node_modules/lru-cache": { - "version": "10.4.3", + "node_modules/fast-copy": { + "version": "4.0.2", + "license": "MIT" + }, + "node_modules/fast-deep-equal": { + "version": "3.1.3", + "license": "MIT" + }, + "node_modules/fast-diff": { + "version": "1.3.0", "dev": true, - "license": "ISC" + "license": "Apache-2.0" }, - "node_modules/jest-runtime/node_modules/minimatch": { - "version": "9.0.5", + "node_modules/fast-fifo": { + "version": "1.3.2", "dev": true, - "license": "ISC", + "license": "MIT" + }, + "node_modules/fast-glob": { + "version": "3.3.1", + "dev": true, + "license": "MIT", "dependencies": { - "brace-expansion": "^2.0.1" + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.4" }, "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" + "node": ">=8.6.0" } }, - "node_modules/jest-runtime/node_modules/path-scurry": { - "version": "1.11.1", + "node_modules/fast-glob/node_modules/glob-parent": { + "version": "5.1.2", "dev": true, - "license": "BlueOak-1.0.0", + "license": "ISC", "dependencies": { - "lru-cache": "^10.2.0", - "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" + "is-glob": "^4.0.1" }, "engines": { - "node": ">=16 || 14 >=14.18" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" + "node": ">= 6" } }, - "node_modules/jest-runtime/node_modules/string-width": { - "version": "5.1.2", + "node_modules/fast-json-stable-stringify": { + "version": "2.1.0", + "license": "MIT" + }, + "node_modules/fast-levenshtein": { + "version": "2.0.6", + "dev": true, + "license": "MIT" + }, + "node_modules/fast-memoize": { + "version": "2.5.2", "dev": true, + "license": "MIT" + }, + "node_modules/fast-safe-stringify": { + "version": "2.1.1", + "license": "MIT" + }, + "node_modules/fast-uri": { + "version": "3.1.0", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/fastify" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/fastify" + } + ], + "license": "BSD-3-Clause" + }, + "node_modules/fast-xml-parser": { + "version": "5.3.4", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/NaturalIntelligence" + } + ], "license": "MIT", "dependencies": { - "eastasianwidth": "^0.2.0", - "emoji-regex": "^9.2.2", - "strip-ansi": "^7.0.1" + "strnum": "^2.1.0" + }, + "bin": { + "fxparser": "src/cli/cli.js" + } + }, + "node_modules/fastq": { + "version": "1.20.1", + "dev": true, + "license": "ISC", + "dependencies": { + "reusify": "^1.0.4" + } + }, + "node_modules/fb-watchman": { + "version": "2.0.2", + "license": "Apache-2.0", + "dependencies": { + "bser": "2.1.1" + } + }, + "node_modules/fdir": { + "version": "6.5.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12.0.0" + }, + "peerDependencies": { + "picomatch": "^3 || ^4" + }, + "peerDependenciesMeta": { + "picomatch": { + "optional": true + } + } + }, + "node_modules/figures": { + "version": "3.2.0", + "dev": true, + "license": "MIT", + "dependencies": { + "escape-string-regexp": "^1.0.5" }, "engines": { - "node": ">=12" + "node": ">=8" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/jest-runtime/node_modules/strip-ansi": { - "version": "7.1.2", + "node_modules/figures/node_modules/escape-string-regexp": { + "version": "1.0.5", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/file-entry-cache": { + "version": "8.0.0", "dev": true, "license": "MIT", "dependencies": { - "ansi-regex": "^6.0.1" + "flat-cache": "^4.0.0" }, "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/strip-ansi?sponsor=1" + "node": ">=16.0.0" } }, - "node_modules/jest-runtime/node_modules/wrap-ansi": { - "version": "8.1.0", + "node_modules/file-type": { + "version": "21.2.0", "dev": true, "license": "MIT", "dependencies": { - "ansi-styles": "^6.1.0", - "string-width": "^5.0.1", - "strip-ansi": "^7.0.1" + "@tokenizer/inflate": "^0.4.1", + "strtok3": "^10.3.4", + "token-types": "^6.1.1", + "uint8array-extras": "^1.4.0" }, "engines": { - "node": ">=12" + "node": ">=20" }, "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + "url": "https://github.com/sindresorhus/file-type?sponsor=1" } }, - "node_modules/jest-snapshot": { - "version": "30.2.0", + "node_modules/fill-range": { + "version": "7.1.1", "license": "MIT", "dependencies": { - "@babel/core": "^7.27.4", - "@babel/generator": "^7.27.5", - "@babel/plugin-syntax-jsx": "^7.27.1", - "@babel/plugin-syntax-typescript": "^7.27.1", - "@babel/types": "^7.27.3", - "@jest/expect-utils": "30.2.0", - "@jest/get-type": "30.1.0", - "@jest/snapshot-utils": "30.2.0", - "@jest/transform": "30.2.0", - "@jest/types": "30.2.0", - "babel-preset-current-node-syntax": "^1.2.0", - "chalk": "^4.1.2", - "expect": "30.2.0", - "graceful-fs": "^4.2.11", - "jest-diff": "30.2.0", - "jest-matcher-utils": "30.2.0", - "jest-message-util": "30.2.0", - "jest-util": "30.2.0", - "pretty-format": "30.2.0", - "semver": "^7.7.2", - "synckit": "^0.11.8" + "to-regex-range": "^5.0.1" }, "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + "node": ">=8" } }, - "node_modules/jest-util": { - "version": "30.2.0", + "node_modules/finalhandler": { + "version": "2.1.1", "license": "MIT", "dependencies": { - "@jest/types": "30.2.0", - "@types/node": "*", - "chalk": "^4.1.2", - "ci-info": "^4.2.0", - "graceful-fs": "^4.2.11", - "picomatch": "^4.0.2" + "debug": "^4.4.0", + "encodeurl": "^2.0.0", + "escape-html": "^1.0.3", + "on-finished": "^2.4.1", + "parseurl": "^1.3.3", + "statuses": "^2.0.1" }, "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + "node": ">= 18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" } }, - "node_modules/jest-validate": { - "version": "30.2.0", + "node_modules/find-up": { + "version": "5.0.0", "dev": true, "license": "MIT", "dependencies": { - "@jest/get-type": "30.1.0", - "@jest/types": "30.2.0", - "camelcase": "^6.3.0", - "chalk": "^4.1.2", - "leven": "^3.1.0", - "pretty-format": "30.2.0" + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" }, "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/jest-validate/node_modules/camelcase": { - "version": "6.3.0", + "node_modules/find-up-simple": { + "version": "1.0.1", "dev": true, "license": "MIT", "engines": { - "node": ">=10" + "node": ">=18" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/jest-watcher": { - "version": "30.2.0", + "node_modules/flat-cache": { + "version": "4.0.1", "dev": true, "license": "MIT", "dependencies": { - "@jest/test-result": "30.2.0", - "@jest/types": "30.2.0", - "@types/node": "*", - "ansi-escapes": "^4.3.2", - "chalk": "^4.1.2", - "emittery": "^0.13.1", - "jest-util": "30.2.0", - "string-length": "^4.0.2" + "flatted": "^3.2.9", + "keyv": "^4.5.4" }, "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + "node": ">=16" } }, - "node_modules/jest-worker": { - "version": "30.2.0", + "node_modules/flatted": { + "version": "3.3.3", + "dev": true, + "license": "ISC" + }, + "node_modules/follow-redirects": { + "version": "1.15.11", + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/RubenVerborgh" + } + ], "license": "MIT", - "dependencies": { - "@types/node": "*", - "@ungap/structured-clone": "^1.3.0", - "jest-util": "30.2.0", - "merge-stream": "^2.0.0", - "supports-color": "^8.1.1" - }, "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + "node": ">=4.0" + }, + "peerDependenciesMeta": { + "debug": { + "optional": true + } } }, - "node_modules/jest-worker/node_modules/supports-color": { - "version": "8.1.1", + "node_modules/for-each": { + "version": "0.3.5", "license": "MIT", "dependencies": { - "has-flag": "^4.0.0" + "is-callable": "^1.2.7" }, "engines": { - "node": ">=10" + "node": ">= 0.4" }, "funding": { - "url": "https://github.com/chalk/supports-color?sponsor=1" - } - }, - "node_modules/jmespath": { - "version": "0.16.0", - "license": "Apache-2.0", - "engines": { - "node": ">= 0.6.0" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/joycon": { - "version": "3.1.1", - "license": "MIT", + "node_modules/foreach": { + "version": "2.0.6", + "dev": true, + "license": "MIT" + }, + "node_modules/foreground-child": { + "version": "3.3.1", + "dev": true, + "license": "ISC", + "dependencies": { + "cross-spawn": "^7.0.6", + "signal-exit": "^4.0.1" + }, "engines": { - "node": ">=10" + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/js-base64": { - "version": "3.7.8", - "license": "BSD-3-Clause" - }, - "node_modules/js-levenshtein": { - "version": "1.1.6", + "node_modules/foreground-child/node_modules/signal-exit": { + "version": "4.1.0", "dev": true, - "license": "MIT", + "license": "ISC", "engines": { - "node": ">=0.10.0" + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/js-tokens": { - "version": "4.0.0", - "license": "MIT" - }, - "node_modules/js-yaml": { - "version": "4.1.1", + "node_modules/form-data": { + "version": "4.0.5", "license": "MIT", "dependencies": { - "argparse": "^2.0.1" + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "es-set-tostringtag": "^2.1.0", + "hasown": "^2.0.2", + "mime-types": "^2.1.12" }, - "bin": { - "js-yaml": "bin/js-yaml.js" + "engines": { + "node": ">= 6" } }, - "node_modules/jsdom": { - "version": "26.1.0", - "dev": true, + "node_modules/form-data/node_modules/mime-db": { + "version": "1.52.0", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/form-data/node_modules/mime-types": { + "version": "2.1.35", "license": "MIT", "dependencies": { - "cssstyle": "^4.2.1", - "data-urls": "^5.0.0", - "decimal.js": "^10.5.0", - "html-encoding-sniffer": "^4.0.0", - "http-proxy-agent": "^7.0.2", - "https-proxy-agent": "^7.0.6", - "is-potential-custom-element-name": "^1.0.1", - "nwsapi": "^2.2.16", - "parse5": "^7.2.1", - "rrweb-cssom": "^0.8.0", - "saxes": "^6.0.0", - "symbol-tree": "^3.2.4", - "tough-cookie": "^5.1.1", - "w3c-xmlserializer": "^5.0.0", - "webidl-conversions": "^7.0.0", - "whatwg-encoding": "^3.1.1", - "whatwg-mimetype": "^4.0.0", - "whatwg-url": "^14.1.1", - "ws": "^8.18.0", - "xml-name-validator": "^5.0.0" + "mime-db": "1.52.0" }, "engines": { - "node": ">=18" - }, - "peerDependencies": { - "canvas": "^3.0.0" - }, - "peerDependenciesMeta": { - "canvas": { - "optional": true - } + "node": ">= 0.6" } }, - "node_modules/jsep": { - "version": "1.4.0", - "dev": true, + "node_modules/forwarded": { + "version": "0.2.0", "license": "MIT", "engines": { - "node": ">= 10.16.0" + "node": ">= 0.6" } }, - "node_modules/jsesc": { - "version": "3.1.0", + "node_modules/fresh": { + "version": "2.0.0", "license": "MIT", - "bin": { - "jsesc": "bin/jsesc" - }, "engines": { - "node": ">=6" + "node": ">= 0.8" } }, - "node_modules/json-buffer": { - "version": "3.0.1", - "dev": true, - "license": "MIT" - }, - "node_modules/json-parse-even-better-errors": { - "version": "2.3.1", + "node_modules/fs-constants": { + "version": "1.0.0", "dev": true, "license": "MIT" }, - "node_modules/json-pointer": { - "version": "0.6.2", + "node_modules/fs-extra": { + "version": "11.3.3", "dev": true, "license": "MIT", "dependencies": { - "foreach": "^2.0.4" + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=14.14" } }, - "node_modules/json-schema-traverse": { + "node_modules/fs.realpath": { "version": "1.0.0", - "license": "MIT" + "license": "ISC" }, - "node_modules/json-stable-stringify-without-jsonify": { - "version": "1.0.1", - "dev": true, - "license": "MIT" + "node_modules/function-bind": { + "version": "1.1.2", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } }, - "node_modules/json5": { - "version": "2.2.3", + "node_modules/function.prototype.name": { + "version": "1.1.8", + "dev": true, "license": "MIT", - "bin": { - "json5": "lib/cli.js" + "dependencies": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.3", + "define-properties": "^1.2.1", + "functions-have-names": "^1.2.3", + "hasown": "^2.0.2", + "is-callable": "^1.2.7" }, "engines": { - "node": ">=6" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/jsonc-parser": { - "version": "3.3.1", + "node_modules/functional-red-black-tree": { + "version": "1.0.1", "dev": true, "license": "MIT" }, - "node_modules/jsonfile": { - "version": "6.2.0", + "node_modules/functions-have-names": { + "version": "1.2.3", "dev": true, "license": "MIT", - "dependencies": { - "universalify": "^2.0.0" - }, - "optionalDependencies": { - "graceful-fs": "^4.1.6" + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/jsonpath-plus": { - "version": "10.3.0", - "dev": true, + "node_modules/generator-function": { + "version": "2.0.1", "license": "MIT", - "dependencies": { - "@jsep-plugin/assignment": "^1.3.0", - "@jsep-plugin/regex": "^1.0.4", - "jsep": "^1.4.0" - }, - "bin": { - "jsonpath": "bin/jsonpath-cli.js", - "jsonpath-plus": "bin/jsonpath-cli.js" - }, "engines": { - "node": ">=18.0.0" + "node": ">= 0.4" } }, - "node_modules/jsonpointer": { - "version": "5.0.1", - "dev": true, + "node_modules/gensync": { + "version": "1.0.0-beta.2", "license": "MIT", "engines": { - "node": ">=0.10.0" + "node": ">=6.9.0" } }, - "node_modules/jsx-ast-utils": { - "version": "3.3.5", - "dev": true, + "node_modules/get-caller-file": { + "version": "2.0.5", + "license": "ISC", + "engines": { + "node": "6.* || 8.* || >= 10.*" + } + }, + "node_modules/get-east-asian-width": { + "version": "1.4.0", + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/get-intrinsic": { + "version": "1.3.0", "license": "MIT", "dependencies": { - "array-includes": "^3.1.6", - "array.prototype.flat": "^1.3.1", - "object.assign": "^4.1.4", - "object.values": "^1.1.6" + "call-bind-apply-helpers": "^1.0.2", + "es-define-property": "^1.0.1", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.1.1", + "function-bind": "^1.1.2", + "get-proto": "^1.0.1", + "gopd": "^1.2.0", + "has-symbols": "^1.1.0", + "hasown": "^2.0.2", + "math-intrinsics": "^1.1.0" }, "engines": { - "node": ">=4.0" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/jsx-ast-utils-x": { + "node_modules/get-package-type": { "version": "0.1.0", - "dev": true, "license": "MIT", "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + "node": ">=8.0.0" } }, - "node_modules/keyv": { - "version": "4.5.4", + "node_modules/get-port": { + "version": "7.1.0", "dev": true, "license": "MIT", - "dependencies": { - "json-buffer": "3.0.1" - } - }, - "node_modules/language-subtag-registry": { - "version": "0.3.23", - "dev": true, - "license": "CC0-1.0" - }, - "node_modules/language-tags": { - "version": "1.0.9", - "dev": true, - "license": "MIT", - "dependencies": { - "language-subtag-registry": "^0.3.20" - }, "engines": { - "node": ">=0.10" + "node": ">=16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/lazystream": { - "version": "1.0.1", + "node_modules/get-port-please": { + "version": "3.2.0", "dev": true, + "license": "MIT" + }, + "node_modules/get-proto": { + "version": "1.0.1", "license": "MIT", "dependencies": { - "readable-stream": "^2.0.5" + "dunder-proto": "^1.0.1", + "es-object-atoms": "^1.0.0" }, "engines": { - "node": ">= 0.6.3" + "node": ">= 0.4" } }, - "node_modules/lazystream/node_modules/readable-stream": { - "version": "2.3.8", + "node_modules/get-source": { + "version": "2.0.12", "dev": true, - "license": "MIT", + "license": "Unlicense", "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" + "data-uri-to-buffer": "^2.0.0", + "source-map": "^0.6.1" } }, - "node_modules/lazystream/node_modules/safe-buffer": { - "version": "5.1.2", + "node_modules/get-source/node_modules/data-uri-to-buffer": { + "version": "2.0.2", "dev": true, "license": "MIT" }, - "node_modules/lazystream/node_modules/string_decoder": { - "version": "1.1.1", - "dev": true, + "node_modules/get-stream": { + "version": "6.0.1", "license": "MIT", - "dependencies": { - "safe-buffer": "~5.1.0" + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/lcov-result-merger": { - "version": "5.0.1", + "node_modules/get-symbol-description": { + "version": "1.1.0", "dev": true, "license": "MIT", "dependencies": { - "fast-glob": "^3.2.11", - "yargs": "^16.2.0" - }, - "bin": { - "lcov-result-merger": "bin/lcov-result-merger.js" + "call-bound": "^1.0.3", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.6" }, "engines": { - "node": ">=14" - } - }, - "node_modules/lcov-result-merger/node_modules/cliui": { - "version": "7.0.4", - "dev": true, - "license": "ISC", - "dependencies": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.0", - "wrap-ansi": "^7.0.0" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/lcov-result-merger/node_modules/wrap-ansi": { - "version": "7.0.0", + "node_modules/get-tsconfig": { + "version": "4.13.0", "dev": true, "license": "MIT", "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=10" + "resolve-pkg-maps": "^1.0.0" }, "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + "url": "https://github.com/privatenumber/get-tsconfig?sponsor=1" } }, - "node_modules/lcov-result-merger/node_modules/yargs": { - "version": "16.2.0", + "node_modules/get-uri": { + "version": "6.0.5", "dev": true, "license": "MIT", "dependencies": { - "cliui": "^7.0.2", - "escalade": "^3.1.1", - "get-caller-file": "^2.0.5", - "require-directory": "^2.1.1", - "string-width": "^4.2.0", - "y18n": "^5.0.5", - "yargs-parser": "^20.2.2" + "basic-ftp": "^5.0.2", + "data-uri-to-buffer": "^6.0.2", + "debug": "^4.3.4" }, "engines": { - "node": ">=10" + "node": ">= 14" } }, - "node_modules/lcov-result-merger/node_modules/yargs-parser": { - "version": "20.2.9", + "node_modules/glob": { + "version": "13.0.0", "dev": true, - "license": "ISC", + "license": "BlueOak-1.0.0", + "dependencies": { + "minimatch": "^10.1.1", + "minipass": "^7.1.2", + "path-scurry": "^2.0.0" + }, "engines": { - "node": ">=10" + "node": "20 || >=22" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/leven": { - "version": "3.1.0", + "node_modules/glob-parent": { + "version": "6.0.2", "dev": true, - "license": "MIT", + "license": "ISC", + "dependencies": { + "is-glob": "^4.0.3" + }, "engines": { - "node": ">=6" + "node": ">=10.13.0" } }, - "node_modules/levn": { + "node_modules/glob-to-regexp": { "version": "0.4.1", + "license": "BSD-2-Clause" + }, + "node_modules/glob/node_modules/minimatch": { + "version": "10.1.1", "dev": true, - "license": "MIT", + "license": "BlueOak-1.0.0", "dependencies": { - "prelude-ls": "^1.2.1", - "type-check": "~0.4.0" + "@isaacs/brace-expansion": "^5.0.0" }, "engines": { - "node": ">= 0.8.0" + "node": "20 || >=22" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/lines-and-columns": { - "version": "1.2.4", - "dev": true, - "license": "MIT" - }, - "node_modules/load-esm": { - "version": "1.0.3", + "node_modules/globals": { + "version": "14.0.0", "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/Borewit" - }, - { - "type": "buymeacoffee", - "url": "https://buymeacoffee.com/borewit" - } - ], "license": "MIT", "engines": { - "node": ">=13.2.0" + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/locate-path": { - "version": "6.0.0", + "node_modules/globalthis": { + "version": "1.0.4", "dev": true, "license": "MIT", "dependencies": { - "p-locate": "^5.0.0" + "define-properties": "^1.2.1", + "gopd": "^1.0.1" }, "engines": { - "node": ">=10" + "node": ">= 0.4" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/lodash": { - "version": "4.17.23", - "license": "MIT" - }, - "node_modules/lodash.camelcase": { - "version": "4.3.0", - "dev": true, - "license": "MIT" - }, - "node_modules/lodash.memoize": { - "version": "4.1.2", - "dev": true, - "license": "MIT" + "node_modules/gopd": { + "version": "1.2.0", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } }, - "node_modules/lodash.merge": { - "version": "4.6.2", - "dev": true, - "license": "MIT" + "node_modules/graceful-fs": { + "version": "4.2.11", + "license": "ISC" }, - "node_modules/lodash.topath": { - "version": "4.5.2", - "dev": true, - "license": "MIT" + "node_modules/graphql": { + "version": "16.12.0", + "license": "MIT", + "engines": { + "node": "^12.22.0 || ^14.16.0 || ^16.0.0 || >=17.0.0" + } }, - "node_modules/log-symbols": { - "version": "4.1.0", - "dev": true, + "node_modules/graphql-tag": { + "version": "2.12.6", "license": "MIT", "dependencies": { - "chalk": "^4.1.0", - "is-unicode-supported": "^0.1.0" + "tslib": "^2.1.0" }, "engines": { "node": ">=10" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "peerDependencies": { + "graphql": "^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0" } }, - "node_modules/long": { - "version": "5.3.2", - "dev": true, - "license": "Apache-2.0" - }, - "node_modules/loose-envify": { - "version": "1.4.0", + "node_modules/handlebars": { + "version": "4.7.8", "dev": true, "license": "MIT", "dependencies": { - "js-tokens": "^3.0.0 || ^4.0.0" + "minimist": "^1.2.5", + "neo-async": "^2.6.2", + "source-map": "^0.6.1", + "wordwrap": "^1.0.0" }, "bin": { - "loose-envify": "cli.js" - } - }, - "node_modules/lru-cache": { - "version": "5.1.1", - "license": "ISC", - "dependencies": { - "yallist": "^3.0.2" + "handlebars": "bin/handlebars" + }, + "engines": { + "node": ">=0.4.7" + }, + "optionalDependencies": { + "uglify-js": "^3.1.4" } }, - "node_modules/lunr": { - "version": "2.3.9", - "dev": true, - "license": "MIT" - }, - "node_modules/magic-string": { - "version": "0.25.9", + "node_modules/has-bigints": { + "version": "1.1.0", "dev": true, "license": "MIT", - "dependencies": { - "sourcemap-codec": "^1.4.8" + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/make-dir": { + "node_modules/has-flag": { "version": "4.0.0", - "dev": true, "license": "MIT", - "dependencies": { - "semver": "^7.5.3" - }, "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=8" } }, - "node_modules/make-error": { - "version": "1.3.6", - "dev": true, - "license": "ISC" - }, - "node_modules/makeerror": { - "version": "1.0.12", - "license": "BSD-3-Clause", + "node_modules/has-property-descriptors": { + "version": "1.0.2", + "license": "MIT", "dependencies": { - "tmpl": "1.0.5" + "es-define-property": "^1.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/mark.js": { - "version": "8.11.1", - "dev": true, - "license": "MIT" - }, - "node_modules/markdown-escape": { - "version": "2.0.0", - "dev": true, - "license": "MIT" - }, - "node_modules/marked": { - "version": "4.3.0", + "node_modules/has-proto": { + "version": "1.2.0", "dev": true, "license": "MIT", - "bin": { - "marked": "bin/marked.js" + "dependencies": { + "dunder-proto": "^1.0.0" }, "engines": { - "node": ">= 12" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/math-intrinsics": { + "node_modules/has-symbols": { "version": "1.1.0", "license": "MIT", "engines": { "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/md5": { - "version": "2.3.0", - "license": "BSD-3-Clause", - "dependencies": { - "charenc": "0.0.2", - "crypt": "0.0.2", - "is-buffer": "~1.1.6" - } - }, - "node_modules/media-typer": { - "version": "1.1.0", + "node_modules/has-tostringtag": { + "version": "1.0.2", "license": "MIT", + "dependencies": { + "has-symbols": "^1.0.3" + }, "engines": { - "node": ">= 0.8" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/merge-descriptors": { - "version": "1.0.3", + "node_modules/hasown": { + "version": "2.0.2", "license": "MIT", - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "dependencies": { + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" } }, - "node_modules/merge-stream": { - "version": "2.0.0", + "node_modules/help-me": { + "version": "5.0.0", "license": "MIT" }, - "node_modules/merge2": { - "version": "1.4.1", + "node_modules/hpagent": { + "version": "1.2.0", "dev": true, "license": "MIT", "engines": { - "node": ">= 8" + "node": ">=14" } }, - "node_modules/methods": { - "version": "1.1.2", + "node_modules/html-encoding-sniffer": { + "version": "4.0.0", + "dev": true, "license": "MIT", + "dependencies": { + "whatwg-encoding": "^3.1.1" + }, "engines": { - "node": ">= 0.6" + "node": ">=18" } }, - "node_modules/micromatch": { - "version": "4.0.8", + "node_modules/html-escaper": { + "version": "2.0.2", + "dev": true, + "license": "MIT" + }, + "node_modules/htmlparser2": { + "version": "10.0.0", + "dev": true, + "funding": [ + "https://github.com/fb55/htmlparser2?sponsor=1", + { + "type": "github", + "url": "https://github.com/sponsors/fb55" + } + ], "license": "MIT", "dependencies": { - "braces": "^3.0.3", - "picomatch": "^2.3.1" - }, - "engines": { - "node": ">=8.6" + "domelementtype": "^2.3.0", + "domhandler": "^5.0.3", + "domutils": "^3.2.1", + "entities": "^6.0.0" } }, - "node_modules/micromatch/node_modules/picomatch": { - "version": "2.3.1", + "node_modules/http-errors": { + "version": "2.0.1", "license": "MIT", + "dependencies": { + "depd": "~2.0.0", + "inherits": "~2.0.4", + "setprototypeof": "~1.2.0", + "statuses": "~2.0.2", + "toidentifier": "~1.0.1" + }, "engines": { - "node": ">=8.6" + "node": ">= 0.8" }, "funding": { - "url": "https://github.com/sponsors/jonschlinkert" + "type": "opencollective", + "url": "https://opencollective.com/express" } }, - "node_modules/mime": { - "version": "1.6.0", + "node_modules/http-proxy": { + "version": "1.18.1", "license": "MIT", - "bin": { - "mime": "cli.js" + "dependencies": { + "eventemitter3": "^4.0.0", + "follow-redirects": "^1.0.0", + "requires-port": "^1.0.0" }, "engines": { - "node": ">=4" + "node": ">=8.0.0" } }, - "node_modules/mime-db": { - "version": "1.52.0", + "node_modules/http-proxy-agent": { + "version": "7.0.2", + "dev": true, "license": "MIT", + "dependencies": { + "agent-base": "^7.1.0", + "debug": "^4.3.4" + }, "engines": { - "node": ">= 0.6" + "node": ">= 14" } }, - "node_modules/mime-types": { - "version": "2.1.35", + "node_modules/http2-client": { + "version": "1.3.5", + "dev": true, + "license": "MIT" + }, + "node_modules/https-proxy-agent": { + "version": "7.0.6", "license": "MIT", "dependencies": { - "mime-db": "1.52.0" + "agent-base": "^7.1.2", + "debug": "4" }, "engines": { - "node": ">= 0.6" + "node": ">= 14" } }, - "node_modules/mimic-fn": { + "node_modules/human-signals": { "version": "2.1.0", - "license": "MIT", + "license": "Apache-2.0", "engines": { - "node": ">=6" + "node": ">=10.17.0" } }, - "node_modules/minimatch": { - "version": "5.1.6", - "dev": true, - "license": "ISC", + "node_modules/iconv-lite": { + "version": "0.7.2", + "license": "MIT", "dependencies": { - "brace-expansion": "^2.0.1" + "safer-buffer": ">= 2.1.2 < 3.0.0" }, "engines": { - "node": ">=10" - } - }, - "node_modules/minimist": { - "version": "1.2.8", - "license": "MIT", + "node": ">=0.10.0" + }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "type": "opencollective", + "url": "https://opencollective.com/express" } }, - "node_modules/minipass": { - "version": "7.1.2", + "node_modules/ieee754": { + "version": "1.1.13", + "license": "BSD-3-Clause" + }, + "node_modules/ignore": { + "version": "7.0.5", "dev": true, - "license": "ISC", + "license": "MIT", "engines": { - "node": ">=16 || 14 >=14.17" + "node": ">= 4" } }, - "node_modules/mkdirp": { - "version": "1.0.4", - "dev": true, - "license": "MIT", - "bin": { - "mkdirp": "bin/cmd.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/mkdirp-classic": { - "version": "0.5.3", - "dev": true, - "license": "MIT" - }, - "node_modules/mnemonist": { - "version": "0.38.3", - "license": "MIT", - "dependencies": { - "obliterator": "^1.6.1" - } - }, - "node_modules/mobx": { - "version": "6.15.0", + "node_modules/immer": { + "version": "9.0.21", "dev": true, "license": "MIT", "funding": { "type": "opencollective", - "url": "https://opencollective.com/mobx" + "url": "https://opencollective.com/immer" } }, - "node_modules/mobx-react": { - "version": "9.2.1", + "node_modules/import-fresh": { + "version": "3.3.1", "dev": true, "license": "MIT", "dependencies": { - "mobx-react-lite": "^4.1.1" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/mobx" + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" }, - "peerDependencies": { - "mobx": "^6.9.0", - "react": "^16.8.0 || ^17 || ^18 || ^19" + "engines": { + "node": ">=6" }, - "peerDependenciesMeta": { - "react-dom": { - "optional": true - }, - "react-native": { - "optional": true - } + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/mobx-react-lite": { - "version": "4.1.1", + "node_modules/import-local": { + "version": "3.2.0", "dev": true, "license": "MIT", "dependencies": { - "use-sync-external-store": "^1.4.0" + "pkg-dir": "^4.2.0", + "resolve-cwd": "^3.0.0" }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/mobx" + "bin": { + "import-local-fixture": "fixtures/cli.js" }, - "peerDependencies": { - "mobx": "^6.9.0", - "react": "^16.8.0 || ^17 || ^18 || ^19" + "engines": { + "node": ">=8" }, - "peerDependenciesMeta": { - "react-dom": { - "optional": true - }, - "react-native": { - "optional": true - } + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/ms": { - "version": "2.1.3", - "license": "MIT" - }, - "node_modules/mute-stream": { - "version": "0.0.8", - "dev": true, - "license": "ISC" - }, - "node_modules/nan": { - "version": "2.25.0", - "dev": true, + "node_modules/imurmurhash": { + "version": "0.1.4", "license": "MIT", - "optional": true + "engines": { + "node": ">=0.8.19" + } }, - "node_modules/nanoid": { - "version": "3.3.11", + "node_modules/indent-string": { + "version": "5.0.0", "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], "license": "MIT", - "bin": { - "nanoid": "bin/nanoid.cjs" - }, "engines": { - "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/napi-postinstall": { - "version": "0.3.4", + "node_modules/index-to-position": { + "version": "1.2.0", "dev": true, "license": "MIT", - "bin": { - "napi-postinstall": "lib/cli.js" - }, "engines": { - "node": "^12.20.0 || ^14.18.0 || >=16.0.0" + "node": ">=18" }, "funding": { - "url": "https://opencollective.com/napi-postinstall" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/natural-compare": { - "version": "1.4.0", - "license": "MIT" + "node_modules/inflight": { + "version": "1.0.6", + "license": "ISC", + "dependencies": { + "once": "^1.3.0", + "wrappy": "1" + } }, - "node_modules/natural-compare-lite": { - "version": "1.4.0", - "dev": true, - "license": "MIT" + "node_modules/inherits": { + "version": "2.0.4", + "license": "ISC" }, - "node_modules/negotiator": { - "version": "0.6.3", + "node_modules/ini": { + "version": "1.3.8", + "license": "ISC" + }, + "node_modules/inquirer": { + "version": "8.2.7", + "dev": true, "license": "MIT", + "dependencies": { + "@inquirer/external-editor": "^1.0.0", + "ansi-escapes": "^4.2.1", + "chalk": "^4.1.1", + "cli-cursor": "^3.1.0", + "cli-width": "^3.0.0", + "figures": "^3.0.0", + "lodash": "^4.17.21", + "mute-stream": "0.0.8", + "ora": "^5.4.1", + "run-async": "^2.4.0", + "rxjs": "^7.5.5", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0", + "through": "^2.3.6", + "wrap-ansi": "^6.0.1" + }, "engines": { - "node": ">= 0.6" + "node": ">=12.0.0" } }, - "node_modules/neo-async": { - "version": "2.6.2", + "node_modules/internal-slot": { + "version": "1.1.0", "dev": true, - "license": "MIT" + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "hasown": "^2.0.2", + "side-channel": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + } }, - "node_modules/netmask": { - "version": "2.0.2", + "node_modules/ip-address": { + "version": "10.1.0", "dev": true, "license": "MIT", "engines": { - "node": ">= 0.4.0" + "node": ">= 12" } }, - "node_modules/nhs-notify-docs": { - "resolved": "docs", - "link": true - }, - "node_modules/nhs-notify-supplier-api-handler": { - "resolved": "lambdas/api-handler", - "link": true - }, - "node_modules/nhs-notify-supplier-api-letter-test-data-utility": { - "resolved": "scripts/utilities/letter-test-data", - "link": true - }, - "node_modules/nhs-notify-supplier-api-letter-updates-transformer": { - "resolved": "lambdas/letter-updates-transformer", - "link": true - }, - "node_modules/nhs-notify-supplier-api-mi-updates-transformer": { - "resolved": "lambdas/mi-updates-transformer", - "link": true - }, - "node_modules/nhs-notify-supplier-api-suppliers-data-utility": { - "resolved": "scripts/utilities/supplier-data", - "link": true - }, - "node_modules/nhs-notify-supplier-api-tests": { - "resolved": "tests", - "link": true - }, - "node_modules/nhs-notify-supplier-api-upsert-letter": { - "resolved": "lambdas/upsert-letter", - "link": true - }, - "node_modules/nhs-notify-supplier-authorizer": { - "resolved": "lambdas/authorizer", - "link": true - }, - "node_modules/nhsuk-frontend": { - "version": "10.3.1", + "node_modules/ipaddr.js": { + "version": "1.9.1", "license": "MIT", "engines": { - "node": "^20.9.0 || ^22.11.0 || ^24.11.0" + "node": ">= 0.10" } }, - "node_modules/nimma": { - "version": "0.2.3", - "dev": true, - "license": "Apache-2.0", + "node_modules/is-arguments": { + "version": "1.2.0", + "license": "MIT", "dependencies": { - "@jsep-plugin/regex": "^1.0.1", - "@jsep-plugin/ternary": "^1.0.2", - "astring": "^1.8.1", - "jsep": "^1.2.0" + "call-bound": "^1.0.2", + "has-tostringtag": "^1.0.2" }, "engines": { - "node": "^12.20 || >=14.13" + "node": ">= 0.4" }, - "optionalDependencies": { - "jsonpath-plus": "^6.0.1 || ^10.1.0", - "lodash.topath": "^4.5.2" + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/node-fetch": { - "version": "2.7.0", + "node_modules/is-array-buffer": { + "version": "3.0.5", "dev": true, "license": "MIT", "dependencies": { - "whatwg-url": "^5.0.0" + "call-bind": "^1.0.8", + "call-bound": "^1.0.3", + "get-intrinsic": "^1.2.6" }, "engines": { - "node": "4.x || >=6.0.0" - }, - "peerDependencies": { - "encoding": "^0.1.0" - }, - "peerDependenciesMeta": { - "encoding": { - "optional": true - } - } - }, - "node_modules/node-fetch-h2": { - "version": "2.3.0", - "dev": true, - "license": "MIT", - "dependencies": { - "http2-client": "^1.2.5" + "node": ">= 0.4" }, - "engines": { - "node": "4.x || >=6.0.0" - } - }, - "node_modules/node-fetch/node_modules/tr46": { - "version": "0.0.3", - "dev": true, - "license": "MIT" - }, - "node_modules/node-fetch/node_modules/webidl-conversions": { - "version": "3.0.1", - "dev": true, - "license": "BSD-2-Clause" - }, - "node_modules/node-fetch/node_modules/whatwg-url": { - "version": "5.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "tr46": "~0.0.3", - "webidl-conversions": "^3.0.0" - } - }, - "node_modules/node-gyp-build": { - "version": "4.8.4", - "license": "MIT", - "bin": { - "node-gyp-build": "bin.js", - "node-gyp-build-optional": "optional.js", - "node-gyp-build-test": "build-test.js" + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/node-int64": { - "version": "0.4.0", - "license": "MIT" - }, - "node_modules/node-readfiles": { - "version": "0.2.0", + "node_modules/is-arrayish": { + "version": "0.2.1", "dev": true, - "license": "MIT", - "dependencies": { - "es6-promise": "^3.2.1" - } - }, - "node_modules/node-releases": { - "version": "2.0.27", "license": "MIT" }, - "node_modules/node-sarif-builder": { - "version": "2.0.3", + "node_modules/is-async-function": { + "version": "2.1.1", "dev": true, "license": "MIT", "dependencies": { - "@types/sarif": "^2.1.4", - "fs-extra": "^10.0.0" + "async-function": "^1.0.0", + "call-bound": "^1.0.3", + "get-proto": "^1.0.1", + "has-tostringtag": "^1.0.2", + "safe-regex-test": "^1.1.0" }, "engines": { - "node": ">=14" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/node-sarif-builder/node_modules/fs-extra": { - "version": "10.1.0", + "node_modules/is-bigint": { + "version": "1.1.0", "dev": true, "license": "MIT", "dependencies": { - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" + "has-bigints": "^1.0.2" }, "engines": { - "node": ">=12" - } - }, - "node_modules/normalize-path": { - "version": "3.0.0", - "license": "MIT", - "engines": { - "node": ">=0.10.0" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/npm-run-path": { - "version": "4.0.1", + "node_modules/is-binary-path": { + "version": "2.1.0", + "dev": true, "license": "MIT", "dependencies": { - "path-key": "^3.0.0" + "binary-extensions": "^2.0.0" }, "engines": { "node": ">=8" } }, - "node_modules/nwsapi": { - "version": "2.2.23", - "dev": true, - "license": "MIT" - }, - "node_modules/oas-kit-common": { - "version": "1.0.8", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "fast-safe-stringify": "^2.0.7" - } - }, - "node_modules/oas-linter": { - "version": "3.2.2", + "node_modules/is-boolean-object": { + "version": "1.2.2", "dev": true, - "license": "BSD-3-Clause", + "license": "MIT", "dependencies": { - "@exodus/schemasafe": "^1.0.0-rc.2", - "should": "^13.2.1", - "yaml": "^1.10.0" + "call-bound": "^1.0.3", + "has-tostringtag": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" }, "funding": { - "url": "https://github.com/Mermade/oas-kit?sponsor=1" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/oas-linter/node_modules/yaml": { - "version": "1.10.2", - "dev": true, - "license": "ISC", - "engines": { - "node": ">= 6" - } + "node_modules/is-buffer": { + "version": "1.1.6", + "license": "MIT" }, - "node_modules/oas-resolver": { - "version": "2.5.6", + "node_modules/is-builtin-module": { + "version": "5.0.0", "dev": true, - "license": "BSD-3-Clause", + "license": "MIT", "dependencies": { - "node-fetch-h2": "^2.3.0", - "oas-kit-common": "^1.0.8", - "reftools": "^1.1.9", - "yaml": "^1.10.0", - "yargs": "^17.0.1" + "builtin-modules": "^5.0.0" }, - "bin": { - "resolve": "resolve.js" + "engines": { + "node": ">=18.20" }, "funding": { - "url": "https://github.com/Mermade/oas-kit?sponsor=1" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/oas-resolver/node_modules/yaml": { - "version": "1.10.2", + "node_modules/is-builtin-module/node_modules/builtin-modules": { + "version": "5.0.0", "dev": true, - "license": "ISC", + "license": "MIT", "engines": { - "node": ">= 6" - } - }, - "node_modules/oas-schema-walker": { - "version": "1.1.5", - "dev": true, - "license": "BSD-3-Clause", - "funding": { - "url": "https://github.com/Mermade/oas-kit?sponsor=1" - } - }, - "node_modules/oas-validator": { - "version": "5.0.8", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "call-me-maybe": "^1.0.1", - "oas-kit-common": "^1.0.8", - "oas-linter": "^3.2.2", - "oas-resolver": "^2.5.6", - "oas-schema-walker": "^1.1.5", - "reftools": "^1.1.9", - "should": "^13.2.1", - "yaml": "^1.10.0" + "node": ">=18.20" }, "funding": { - "url": "https://github.com/Mermade/oas-kit?sponsor=1" - } - }, - "node_modules/oas-validator/node_modules/yaml": { - "version": "1.10.2", - "dev": true, - "license": "ISC", - "engines": { - "node": ">= 6" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/object-assign": { - "version": "4.1.1", + "node_modules/is-bun-module": { + "version": "2.0.0", "dev": true, "license": "MIT", - "engines": { - "node": ">=0.10.0" + "dependencies": { + "semver": "^7.7.1" } }, - "node_modules/object-inspect": { - "version": "1.13.4", + "node_modules/is-callable": { + "version": "1.2.7", "license": "MIT", "engines": { "node": ">= 0.4" @@ -13861,25 +13923,28 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/object-keys": { - "version": "1.1.1", + "node_modules/is-core-module": { + "version": "2.16.1", "dev": true, "license": "MIT", + "dependencies": { + "hasown": "^2.0.2" + }, "engines": { "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/object.assign": { - "version": "4.1.7", + "node_modules/is-data-view": { + "version": "1.0.2", "dev": true, "license": "MIT", "dependencies": { - "call-bind": "^1.0.8", - "call-bound": "^1.0.3", - "define-properties": "^1.2.1", - "es-object-atoms": "^1.0.0", - "has-symbols": "^1.1.0", - "object-keys": "^1.1.1" + "call-bound": "^1.0.2", + "get-intrinsic": "^1.2.6", + "is-typed-array": "^1.1.13" }, "engines": { "node": ">= 0.4" @@ -13888,59 +13953,48 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/object.entries": { - "version": "1.1.9", + "node_modules/is-date-object": { + "version": "1.1.0", "dev": true, "license": "MIT", "dependencies": { - "call-bind": "^1.0.8", - "call-bound": "^1.0.4", - "define-properties": "^1.2.1", - "es-object-atoms": "^1.1.1" + "call-bound": "^1.0.2", + "has-tostringtag": "^1.0.2" }, "engines": { "node": ">= 0.4" - } + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } }, - "node_modules/object.fromentries": { - "version": "2.0.8", - "dev": true, + "node_modules/is-docker": { + "version": "2.2.1", "license": "MIT", - "dependencies": { - "call-bind": "^1.0.7", - "define-properties": "^1.2.1", - "es-abstract": "^1.23.2", - "es-object-atoms": "^1.0.0" + "bin": { + "is-docker": "cli.js" }, "engines": { - "node": ">= 0.4" + "node": ">=8" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/object.groupby": { - "version": "1.0.3", + "node_modules/is-extglob": { + "version": "2.1.1", "dev": true, "license": "MIT", - "dependencies": { - "call-bind": "^1.0.7", - "define-properties": "^1.2.1", - "es-abstract": "^1.23.2" - }, "engines": { - "node": ">= 0.4" + "node": ">=0.10.0" } }, - "node_modules/object.values": { - "version": "1.2.1", + "node_modules/is-finalizationregistry": { + "version": "1.1.1", "dev": true, "license": "MIT", "dependencies": { - "call-bind": "^1.0.8", - "call-bound": "^1.0.3", - "define-properties": "^1.2.1", - "es-object-atoms": "^1.0.0" + "call-bound": "^1.0.3" }, "engines": { "node": ">= 0.4" @@ -13949,205 +14003,148 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/obliterator": { - "version": "1.6.1", - "license": "MIT" - }, - "node_modules/on-exit-leak-free": { - "version": "2.1.2", - "license": "MIT", - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/on-finished": { - "version": "2.4.1", + "node_modules/is-fullwidth-code-point": { + "version": "3.0.0", "license": "MIT", - "dependencies": { - "ee-first": "1.1.1" - }, "engines": { - "node": ">= 0.8" + "node": ">=8" } }, - "node_modules/on-headers": { - "version": "1.1.0", + "node_modules/is-generator-fn": { + "version": "2.1.0", + "dev": true, "license": "MIT", "engines": { - "node": ">= 0.8" - } - }, - "node_modules/once": { - "version": "1.4.0", - "license": "ISC", - "dependencies": { - "wrappy": "1" + "node": ">=6" } }, - "node_modules/onetime": { - "version": "5.1.2", + "node_modules/is-generator-function": { + "version": "1.1.2", "license": "MIT", "dependencies": { - "mimic-fn": "^2.1.0" + "call-bound": "^1.0.4", + "generator-function": "^2.0.0", + "get-proto": "^1.0.1", + "has-tostringtag": "^1.0.2", + "safe-regex-test": "^1.1.0" }, "engines": { - "node": ">=6" + "node": ">= 0.4" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/openapi-response-validator": { - "version": "12.1.3", + "node_modules/is-glob": { + "version": "4.0.3", + "dev": true, "license": "MIT", "dependencies": { - "ajv": "^8.4.0", - "openapi-types": "^12.1.3" + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" } }, - "node_modules/openapi-sampler": { - "version": "1.6.2", + "node_modules/is-interactive": { + "version": "1.0.0", "dev": true, "license": "MIT", - "dependencies": { - "@types/json-schema": "^7.0.7", - "fast-xml-parser": "^4.5.0", - "json-pointer": "0.6.2" + "engines": { + "node": ">=8" } }, - "node_modules/openapi-types": { - "version": "12.1.3", - "license": "MIT" - }, - "node_modules/openapi-typescript": { - "version": "7.12.0", + "node_modules/is-map": { + "version": "2.0.3", "dev": true, "license": "MIT", - "dependencies": { - "@redocly/openapi-core": "^1.34.6", - "ansi-colors": "^4.1.3", - "change-case": "^5.4.4", - "parse-json": "^8.3.0", - "supports-color": "^10.2.2", - "yargs-parser": "^21.1.1" - }, - "bin": { - "openapi-typescript": "bin/cli.js" + "engines": { + "node": ">= 0.4" }, - "peerDependencies": { - "typescript": "^5.x" + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/openapi-typescript/node_modules/@redocly/config": { - "version": "0.22.2", - "dev": true, - "license": "MIT" - }, - "node_modules/openapi-typescript/node_modules/@redocly/openapi-core": { - "version": "1.34.6", + "node_modules/is-negative-zero": { + "version": "2.0.3", "dev": true, "license": "MIT", - "dependencies": { - "@redocly/ajv": "^8.11.2", - "@redocly/config": "^0.22.0", - "colorette": "^1.2.0", - "https-proxy-agent": "^7.0.5", - "js-levenshtein": "^1.1.6", - "js-yaml": "^4.1.0", - "minimatch": "^5.0.1", - "pluralize": "^8.0.0", - "yaml-ast-parser": "0.0.43" + "engines": { + "node": ">= 0.4" }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-number": { + "version": "7.0.0", + "license": "MIT", "engines": { - "node": ">=18.17.0", - "npm": ">=9.5.0" + "node": ">=0.12.0" } }, - "node_modules/openapi-typescript/node_modules/parse-json": { - "version": "8.3.0", + "node_modules/is-number-object": { + "version": "1.1.1", "dev": true, "license": "MIT", "dependencies": { - "@babel/code-frame": "^7.26.2", - "index-to-position": "^1.1.0", - "type-fest": "^4.39.1" + "call-bound": "^1.0.3", + "has-tostringtag": "^1.0.2" }, "engines": { - "node": ">=18" + "node": ">= 0.4" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/openapi-typescript/node_modules/supports-color": { - "version": "10.2.2", - "dev": true, + "node_modules/is-port-reachable": { + "version": "4.0.0", "license": "MIT", "engines": { - "node": ">=18" + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" }, "funding": { - "url": "https://github.com/chalk/supports-color?sponsor=1" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/openapi-typescript/node_modules/type-fest": { - "version": "4.41.0", + "node_modules/is-potential-custom-element-name": { + "version": "1.0.1", "dev": true, - "license": "(MIT OR CC0-1.0)", - "engines": { - "node": ">=16" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } + "license": "MIT" }, - "node_modules/optionator": { - "version": "0.9.4", + "node_modules/is-promise": { + "version": "4.0.0", + "license": "MIT" + }, + "node_modules/is-reference": { + "version": "1.2.1", "dev": true, "license": "MIT", "dependencies": { - "deep-is": "^0.1.3", - "fast-levenshtein": "^2.0.6", - "levn": "^0.4.1", - "prelude-ls": "^1.2.1", - "type-check": "^0.4.0", - "word-wrap": "^1.2.5" - }, - "engines": { - "node": ">= 0.8.0" + "@types/estree": "*" } }, - "node_modules/ora": { - "version": "5.4.1", - "dev": true, + "node_modules/is-regex": { + "version": "1.2.1", "license": "MIT", "dependencies": { - "bl": "^4.1.0", - "chalk": "^4.1.0", - "cli-cursor": "^3.1.0", - "cli-spinners": "^2.5.0", - "is-interactive": "^1.0.0", - "is-unicode-supported": "^0.1.0", - "log-symbols": "^4.1.0", - "strip-ansi": "^6.0.0", - "wcwidth": "^1.0.1" + "call-bound": "^1.0.2", + "gopd": "^1.2.0", + "has-tostringtag": "^1.0.2", + "hasown": "^2.0.2" }, "engines": { - "node": ">=10" + "node": ">= 0.4" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/own-keys": { - "version": "1.0.1", + "node_modules/is-set": { + "version": "2.0.3", "dev": true, "license": "MIT", - "dependencies": { - "get-intrinsic": "^1.2.6", - "object-keys": "^1.1.1", - "safe-push-apply": "^1.0.0" - }, "engines": { "node": ">= 0.4" }, @@ -14155,3946 +14152,6573 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/p-limit": { - "version": "3.1.0", + "node_modules/is-shared-array-buffer": { + "version": "1.0.4", "dev": true, "license": "MIT", "dependencies": { - "yocto-queue": "^0.1.0" + "call-bound": "^1.0.3" }, "engines": { - "node": ">=10" + "node": ">= 0.4" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/p-locate": { - "version": "5.0.0", - "dev": true, + "node_modules/is-stream": { + "version": "2.0.1", "license": "MIT", - "dependencies": { - "p-limit": "^3.0.2" - }, "engines": { - "node": ">=10" + "node": ">=8" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/p-try": { - "version": "2.2.0", + "node_modules/is-string": { + "version": "1.1.1", + "dev": true, "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", + "has-tostringtag": "^1.0.2" + }, "engines": { - "node": ">=6" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/pac-proxy-agent": { - "version": "7.2.0", + "node_modules/is-symbol": { + "version": "1.1.1", "dev": true, "license": "MIT", "dependencies": { - "@tootallnate/quickjs-emscripten": "^0.23.0", - "agent-base": "^7.1.2", - "debug": "^4.3.4", - "get-uri": "^6.0.1", - "http-proxy-agent": "^7.0.0", - "https-proxy-agent": "^7.0.6", - "pac-resolver": "^7.0.1", - "socks-proxy-agent": "^8.0.5" + "call-bound": "^1.0.2", + "has-symbols": "^1.1.0", + "safe-regex-test": "^1.1.0" }, "engines": { - "node": ">= 14" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/pac-resolver": { - "version": "7.0.1", - "dev": true, + "node_modules/is-typed-array": { + "version": "1.1.15", "license": "MIT", "dependencies": { - "degenerator": "^5.0.0", - "netmask": "^2.0.2" + "which-typed-array": "^1.1.16" }, "engines": { - "node": ">= 14" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/package-json-from-dist": { - "version": "1.0.1", - "dev": true, - "license": "BlueOak-1.0.0" - }, - "node_modules/parent-module": { - "version": "1.0.1", + "node_modules/is-unicode-supported": { + "version": "0.1.0", "dev": true, "license": "MIT", - "dependencies": { - "callsites": "^3.0.0" - }, "engines": { - "node": ">=6" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/parse-json": { - "version": "5.2.0", + "node_modules/is-weakmap": { + "version": "2.0.2", "dev": true, "license": "MIT", - "dependencies": { - "@babel/code-frame": "^7.0.0", - "error-ex": "^1.3.1", - "json-parse-even-better-errors": "^2.3.0", - "lines-and-columns": "^1.1.6" - }, "engines": { - "node": ">=8" + "node": ">= 0.4" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/parse5": { - "version": "7.3.0", + "node_modules/is-weakref": { + "version": "1.1.1", "dev": true, "license": "MIT", "dependencies": { - "entities": "^6.0.0" + "call-bound": "^1.0.3" + }, + "engines": { + "node": ">= 0.4" }, "funding": { - "url": "https://github.com/inikulin/parse5?sponsor=1" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/parse5/node_modules/entities": { - "version": "6.0.1", + "node_modules/is-weakset": { + "version": "2.0.4", "dev": true, - "license": "BSD-2-Clause", + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", + "get-intrinsic": "^1.2.6" + }, "engines": { - "node": ">=0.12" + "node": ">= 0.4" }, "funding": { - "url": "https://github.com/fb55/entities?sponsor=1" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/parseurl": { - "version": "1.3.3", + "node_modules/is-wsl": { + "version": "2.2.0", "license": "MIT", + "dependencies": { + "is-docker": "^2.0.0" + }, "engines": { - "node": ">= 0.8" + "node": ">=8" } }, - "node_modules/path-browserify": { - "version": "1.0.1", - "dev": true, + "node_modules/isarray": { + "version": "1.0.0", "license": "MIT" }, - "node_modules/path-exists": { - "version": "4.0.0", - "license": "MIT", + "node_modules/isexe": { + "version": "2.0.0", + "license": "ISC" + }, + "node_modules/istanbul-lib-coverage": { + "version": "3.2.2", + "license": "BSD-3-Clause", "engines": { "node": ">=8" } }, - "node_modules/path-is-absolute": { - "version": "1.0.1", - "license": "MIT", + "node_modules/istanbul-lib-instrument": { + "version": "6.0.3", + "license": "BSD-3-Clause", + "dependencies": { + "@babel/core": "^7.23.9", + "@babel/parser": "^7.23.9", + "@istanbuljs/schema": "^0.1.3", + "istanbul-lib-coverage": "^3.2.0", + "semver": "^7.5.4" + }, "engines": { - "node": ">=0.10.0" + "node": ">=10" } }, - "node_modules/path-is-inside": { - "version": "1.0.2", - "license": "(WTFPL OR MIT)" - }, - "node_modules/path-key": { - "version": "3.1.1", - "license": "MIT", + "node_modules/istanbul-lib-report": { + "version": "3.0.1", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "istanbul-lib-coverage": "^3.0.0", + "make-dir": "^4.0.0", + "supports-color": "^7.1.0" + }, "engines": { - "node": ">=8" + "node": ">=10" } }, - "node_modules/path-parse": { - "version": "1.0.7", + "node_modules/istanbul-lib-source-maps": { + "version": "5.0.6", "dev": true, - "license": "MIT" + "license": "BSD-3-Clause", + "dependencies": { + "@jridgewell/trace-mapping": "^0.3.23", + "debug": "^4.1.1", + "istanbul-lib-coverage": "^3.0.0" + }, + "engines": { + "node": ">=10" + } }, - "node_modules/path-scurry": { - "version": "2.0.1", + "node_modules/istanbul-reports": { + "version": "3.2.0", "dev": true, - "license": "BlueOak-1.0.0", + "license": "BSD-3-Clause", "dependencies": { - "lru-cache": "^11.0.0", - "minipass": "^7.1.2" + "html-escaper": "^2.0.0", + "istanbul-lib-report": "^3.0.0" }, "engines": { - "node": "20 || >=22" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" + "node": ">=8" } }, - "node_modules/path-scurry/node_modules/lru-cache": { - "version": "11.2.5", + "node_modules/iterare": { + "version": "1.2.1", "dev": true, - "license": "BlueOak-1.0.0", + "license": "ISC", "engines": { - "node": "20 || >=22" + "node": ">=6" } }, - "node_modules/path-to-regexp": { - "version": "8.3.0", + "node_modules/iterator.prototype": { + "version": "1.1.5", + "dev": true, "license": "MIT", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/express" + "dependencies": { + "define-data-property": "^1.1.4", + "es-object-atoms": "^1.0.0", + "get-intrinsic": "^1.2.6", + "get-proto": "^1.0.0", + "has-symbols": "^1.1.0", + "set-function-name": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" } }, - "node_modules/perfect-scrollbar": { - "version": "1.5.6", + "node_modules/jackspeak": { + "version": "3.4.3", "dev": true, - "license": "MIT" - }, - "node_modules/picocolors": { - "version": "1.1.1", - "license": "ISC" - }, - "node_modules/picomatch": { - "version": "4.0.3", - "license": "MIT", - "engines": { - "node": ">=12" + "license": "BlueOak-1.0.0", + "dependencies": { + "@isaacs/cliui": "^8.0.2" }, "funding": { - "url": "https://github.com/sponsors/jonschlinkert" + "url": "https://github.com/sponsors/isaacs" + }, + "optionalDependencies": { + "@pkgjs/parseargs": "^0.11.0" } }, - "node_modules/pino": { - "version": "10.3.0", + "node_modules/jest": { + "version": "30.2.0", + "dev": true, "license": "MIT", "dependencies": { - "@pinojs/redact": "^0.4.0", - "atomic-sleep": "^1.0.0", - "on-exit-leak-free": "^2.1.0", - "pino-abstract-transport": "^3.0.0", - "pino-std-serializers": "^7.0.0", - "process-warning": "^5.0.0", - "quick-format-unescaped": "^4.0.3", - "real-require": "^0.2.0", - "safe-stable-stringify": "^2.3.1", - "sonic-boom": "^4.0.1", - "thread-stream": "^4.0.0" + "@jest/core": "30.2.0", + "@jest/types": "30.2.0", + "import-local": "^3.2.0", + "jest-cli": "30.2.0" }, "bin": { - "pino": "bin.js" + "jest": "bin/jest.js" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + }, + "peerDependencies": { + "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" + }, + "peerDependenciesMeta": { + "node-notifier": { + "optional": true + } } }, - "node_modules/pino-abstract-transport": { - "version": "2.0.0", + "node_modules/jest-changed-files": { + "version": "30.2.0", + "dev": true, "license": "MIT", "dependencies": { - "split2": "^4.0.0" + "execa": "^5.1.1", + "jest-util": "30.2.0", + "p-limit": "^3.1.0" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" } }, - "node_modules/pino-pretty": { - "version": "13.1.3", + "node_modules/jest-circus": { + "version": "30.2.0", + "dev": true, "license": "MIT", "dependencies": { - "colorette": "^2.0.7", - "dateformat": "^4.6.3", - "fast-copy": "^4.0.0", - "fast-safe-stringify": "^2.1.1", - "help-me": "^5.0.0", - "joycon": "^3.1.1", - "minimist": "^1.2.6", - "on-exit-leak-free": "^2.1.0", - "pino-abstract-transport": "^3.0.0", - "pump": "^3.0.0", - "secure-json-parse": "^4.0.0", - "sonic-boom": "^4.0.1", - "strip-json-comments": "^5.0.2" + "@jest/environment": "30.2.0", + "@jest/expect": "30.2.0", + "@jest/test-result": "30.2.0", + "@jest/types": "30.2.0", + "@types/node": "*", + "chalk": "^4.1.2", + "co": "^4.6.0", + "dedent": "^1.6.0", + "is-generator-fn": "^2.1.0", + "jest-each": "30.2.0", + "jest-matcher-utils": "30.2.0", + "jest-message-util": "30.2.0", + "jest-runtime": "30.2.0", + "jest-snapshot": "30.2.0", + "jest-util": "30.2.0", + "p-limit": "^3.1.0", + "pretty-format": "30.2.0", + "pure-rand": "^7.0.0", + "slash": "^3.0.0", + "stack-utils": "^2.0.6" }, - "bin": { - "pino-pretty": "bin.js" - } - }, - "node_modules/pino-pretty/node_modules/colorette": { - "version": "2.0.20", - "license": "MIT" - }, - "node_modules/pino-pretty/node_modules/dateformat": { - "version": "4.6.3", - "license": "MIT", "engines": { - "node": "*" + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" } }, - "node_modules/pino-pretty/node_modules/pino-abstract-transport": { - "version": "3.0.0", + "node_modules/jest-cli": { + "version": "30.2.0", + "dev": true, "license": "MIT", "dependencies": { - "split2": "^4.0.0" - } - }, - "node_modules/pino-pretty/node_modules/strip-json-comments": { - "version": "5.0.3", - "license": "MIT", + "@jest/core": "30.2.0", + "@jest/test-result": "30.2.0", + "@jest/types": "30.2.0", + "chalk": "^4.1.2", + "exit-x": "^0.2.2", + "import-local": "^3.2.0", + "jest-config": "30.2.0", + "jest-util": "30.2.0", + "jest-validate": "30.2.0", + "yargs": "^17.7.2" + }, + "bin": { + "jest": "bin/jest.js" + }, "engines": { - "node": ">=14.16" + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "peerDependencies": { + "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" + }, + "peerDependenciesMeta": { + "node-notifier": { + "optional": true + } } }, - "node_modules/pino-std-serializers": { - "version": "7.1.0", - "license": "MIT" - }, - "node_modules/pino/node_modules/pino-abstract-transport": { - "version": "3.0.0", + "node_modules/jest-config": { + "version": "30.2.0", + "dev": true, "license": "MIT", "dependencies": { - "split2": "^4.0.0" + "@babel/core": "^7.27.4", + "@jest/get-type": "30.1.0", + "@jest/pattern": "30.0.1", + "@jest/test-sequencer": "30.2.0", + "@jest/types": "30.2.0", + "babel-jest": "30.2.0", + "chalk": "^4.1.2", + "ci-info": "^4.2.0", + "deepmerge": "^4.3.1", + "glob": "^10.3.10", + "graceful-fs": "^4.2.11", + "jest-circus": "30.2.0", + "jest-docblock": "30.2.0", + "jest-environment-node": "30.2.0", + "jest-regex-util": "30.0.1", + "jest-resolve": "30.2.0", + "jest-runner": "30.2.0", + "jest-util": "30.2.0", + "jest-validate": "30.2.0", + "micromatch": "^4.0.8", + "parse-json": "^5.2.0", + "pretty-format": "30.2.0", + "slash": "^3.0.0", + "strip-json-comments": "^3.1.1" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + }, + "peerDependencies": { + "@types/node": "*", + "esbuild-register": ">=3.4.0", + "ts-node": ">=9.0.0" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + }, + "esbuild-register": { + "optional": true + }, + "ts-node": { + "optional": true + } } }, - "node_modules/pino/node_modules/thread-stream": { - "version": "4.0.0", - "license": "MIT", + "node_modules/jest-config/node_modules/glob": { + "version": "10.5.0", + "dev": true, + "license": "ISC", "dependencies": { - "real-require": "^0.2.0" + "foreground-child": "^3.1.0", + "jackspeak": "^3.1.2", + "minimatch": "^9.0.4", + "minipass": "^7.1.2", + "package-json-from-dist": "^1.0.0", + "path-scurry": "^1.11.1" }, - "engines": { - "node": ">=20" + "bin": { + "glob": "dist/esm/bin.mjs" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/pirates": { - "version": "4.0.7", - "license": "MIT", - "engines": { - "node": ">= 6" - } + "node_modules/jest-config/node_modules/lru-cache": { + "version": "10.4.3", + "dev": true, + "license": "ISC" }, - "node_modules/pkg-dir": { - "version": "4.2.0", + "node_modules/jest-config/node_modules/path-scurry": { + "version": "1.11.1", "dev": true, - "license": "MIT", + "license": "BlueOak-1.0.0", "dependencies": { - "find-up": "^4.0.0" + "lru-cache": "^10.2.0", + "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" }, "engines": { - "node": ">=8" + "node": ">=16 || 14 >=14.18" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/pkg-dir/node_modules/find-up": { - "version": "4.1.0", - "dev": true, + "node_modules/jest-diff": { + "version": "30.2.0", "license": "MIT", "dependencies": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" + "@jest/diff-sequences": "30.0.1", + "@jest/get-type": "30.1.0", + "chalk": "^4.1.2", + "pretty-format": "30.2.0" }, "engines": { - "node": ">=8" + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" } }, - "node_modules/pkg-dir/node_modules/locate-path": { - "version": "5.0.0", + "node_modules/jest-docblock": { + "version": "30.2.0", "dev": true, "license": "MIT", "dependencies": { - "p-locate": "^4.1.0" + "detect-newline": "^3.1.0" }, "engines": { - "node": ">=8" + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" } }, - "node_modules/pkg-dir/node_modules/p-limit": { - "version": "2.3.0", + "node_modules/jest-each": { + "version": "30.2.0", "dev": true, "license": "MIT", "dependencies": { - "p-try": "^2.0.0" + "@jest/get-type": "30.1.0", + "@jest/types": "30.2.0", + "chalk": "^4.1.2", + "jest-util": "30.2.0", + "pretty-format": "30.2.0" }, "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" } }, - "node_modules/pkg-dir/node_modules/p-locate": { - "version": "4.1.0", + "node_modules/jest-environment-jsdom": { + "version": "30.2.0", "dev": true, "license": "MIT", "dependencies": { - "p-limit": "^2.2.0" + "@jest/environment": "30.2.0", + "@jest/environment-jsdom-abstract": "30.2.0", + "@types/jsdom": "^21.1.7", + "@types/node": "*", + "jsdom": "^26.1.0" }, "engines": { - "node": ">=8" + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + }, + "peerDependencies": { + "canvas": "^3.0.0" + }, + "peerDependenciesMeta": { + "canvas": { + "optional": true + } } }, - "node_modules/playwright": { - "version": "1.58.2", - "license": "Apache-2.0", + "node_modules/jest-environment-node": { + "version": "30.2.0", + "dev": true, + "license": "MIT", "dependencies": { - "playwright-core": "1.58.2" - }, - "bin": { - "playwright": "cli.js" + "@jest/environment": "30.2.0", + "@jest/fake-timers": "30.2.0", + "@jest/types": "30.2.0", + "@types/node": "*", + "jest-mock": "30.2.0", + "jest-util": "30.2.0", + "jest-validate": "30.2.0" }, "engines": { - "node": ">=18" - }, - "optionalDependencies": { - "fsevents": "2.3.2" + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" } }, - "node_modules/playwright-core": { - "version": "1.58.2", - "license": "Apache-2.0", - "bin": { - "playwright-core": "cli.js" + "node_modules/jest-haste-map": { + "version": "30.2.0", + "license": "MIT", + "dependencies": { + "@jest/types": "30.2.0", + "@types/node": "*", + "anymatch": "^3.1.3", + "fb-watchman": "^2.0.2", + "graceful-fs": "^4.2.11", + "jest-regex-util": "30.0.1", + "jest-util": "30.2.0", + "jest-worker": "30.2.0", + "micromatch": "^4.0.8", + "walker": "^1.0.8" }, "engines": { - "node": ">=18" + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + }, + "optionalDependencies": { + "fsevents": "^2.3.3" } }, - "node_modules/pluralize": { - "version": "8.0.0", + "node_modules/jest-html-reporter": { + "version": "4.3.0", "dev": true, "license": "MIT", + "dependencies": { + "@jest/reporters": "^30.0.2", + "@jest/test-result": "^30.0.2", + "@jest/types": "^30.0.1", + "dateformat": "3.0.2", + "mkdirp": "^1.0.3", + "strip-ansi": "6.0.1", + "xmlbuilder": "15.0.0" + }, "engines": { - "node": ">=4" + "node": ">=14.0.0" + }, + "peerDependencies": { + "jest": "19.x - 30.x", + "typescript": "^3.7.x || ^4.3.x || ^5.x" } }, - "node_modules/polished": { - "version": "4.3.1", + "node_modules/jest-leak-detector": { + "version": "30.2.0", "dev": true, "license": "MIT", "dependencies": { - "@babel/runtime": "^7.17.8" + "@jest/get-type": "30.1.0", + "pretty-format": "30.2.0" }, "engines": { - "node": ">=10" + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" } }, - "node_modules/pony-cause": { - "version": "1.1.1", - "dev": true, - "license": "0BSD", + "node_modules/jest-matcher-utils": { + "version": "30.2.0", + "license": "MIT", + "dependencies": { + "@jest/get-type": "30.1.0", + "chalk": "^4.1.2", + "jest-diff": "30.2.0", + "pretty-format": "30.2.0" + }, "engines": { - "node": ">=12.0.0" + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" } }, - "node_modules/possible-typed-array-names": { - "version": "1.1.0", + "node_modules/jest-message-util": { + "version": "30.2.0", "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.27.1", + "@jest/types": "30.2.0", + "@types/stack-utils": "^2.0.3", + "chalk": "^4.1.2", + "graceful-fs": "^4.2.11", + "micromatch": "^4.0.8", + "pretty-format": "30.2.0", + "slash": "^3.0.0", + "stack-utils": "^2.0.6" + }, "engines": { - "node": ">= 0.4" + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" } }, - "node_modules/postcss": { - "version": "8.4.49", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/postcss" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], + "node_modules/jest-mock": { + "version": "30.2.0", "license": "MIT", "dependencies": { - "nanoid": "^3.3.7", - "picocolors": "^1.1.1", - "source-map-js": "^1.2.1" + "@jest/types": "30.2.0", + "@types/node": "*", + "jest-util": "30.2.0" }, "engines": { - "node": "^10 || ^12 || >=14" + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" } }, - "node_modules/postcss-value-parser": { - "version": "4.2.0", + "node_modules/jest-mock-extended": { + "version": "4.0.0", "dev": true, - "license": "MIT" + "license": "MIT", + "dependencies": { + "ts-essentials": "^10.0.2" + }, + "peerDependencies": { + "@jest/globals": "^28.0.0 || ^29.0.0 || ^30.0.0", + "jest": "^24.0.0 || ^25.0.0 || ^26.0.0 || ^27.0.0 || ^28.0.0 || ^29.0.0 || ^30.0.0", + "typescript": "^3.0.0 || ^4.0.0 || ^5.0.0" + } }, - "node_modules/prelude-ls": { - "version": "1.2.1", + "node_modules/jest-pnp-resolver": { + "version": "1.2.3", "dev": true, "license": "MIT", "engines": { - "node": ">= 0.8.0" + "node": ">=6" + }, + "peerDependencies": { + "jest-resolve": "*" + }, + "peerDependenciesMeta": { + "jest-resolve": { + "optional": true + } } }, - "node_modules/prettier": { - "version": "3.8.1", - "dev": true, + "node_modules/jest-regex-util": { + "version": "30.0.1", "license": "MIT", - "peer": true, - "bin": { - "prettier": "bin/prettier.cjs" - }, "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/prettier/prettier?sponsor=1" + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" } }, - "node_modules/prettier-linter-helpers": { - "version": "1.0.1", + "node_modules/jest-resolve": { + "version": "30.2.0", "dev": true, "license": "MIT", "dependencies": { - "fast-diff": "^1.1.2" + "chalk": "^4.1.2", + "graceful-fs": "^4.2.11", + "jest-haste-map": "30.2.0", + "jest-pnp-resolver": "^1.2.3", + "jest-util": "30.2.0", + "jest-validate": "30.2.0", + "slash": "^3.0.0", + "unrs-resolver": "^1.7.11" }, "engines": { - "node": ">=6.0.0" + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" } }, - "node_modules/pretty-format": { + "node_modules/jest-resolve-dependencies": { "version": "30.2.0", + "dev": true, "license": "MIT", "dependencies": { - "@jest/schemas": "30.0.5", - "ansi-styles": "^5.2.0", - "react-is": "^18.3.1" + "jest-regex-util": "30.0.1", + "jest-snapshot": "30.2.0" }, "engines": { "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" } }, - "node_modules/pretty-format/node_modules/ansi-styles": { - "version": "5.2.0", + "node_modules/jest-runner": { + "version": "30.2.0", + "dev": true, "license": "MIT", - "engines": { - "node": ">=10" + "dependencies": { + "@jest/console": "30.2.0", + "@jest/environment": "30.2.0", + "@jest/test-result": "30.2.0", + "@jest/transform": "30.2.0", + "@jest/types": "30.2.0", + "@types/node": "*", + "chalk": "^4.1.2", + "emittery": "^0.13.1", + "exit-x": "^0.2.2", + "graceful-fs": "^4.2.11", + "jest-docblock": "30.2.0", + "jest-environment-node": "30.2.0", + "jest-haste-map": "30.2.0", + "jest-leak-detector": "30.2.0", + "jest-message-util": "30.2.0", + "jest-resolve": "30.2.0", + "jest-runtime": "30.2.0", + "jest-util": "30.2.0", + "jest-watcher": "30.2.0", + "jest-worker": "30.2.0", + "p-limit": "^3.1.0", + "source-map-support": "0.5.13" }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" } }, - "node_modules/printable-characters": { - "version": "1.0.42", - "dev": true, - "license": "Unlicense" - }, - "node_modules/prismjs": { - "version": "1.30.0", + "node_modules/jest-runtime": { + "version": "30.2.0", "dev": true, "license": "MIT", + "dependencies": { + "@jest/environment": "30.2.0", + "@jest/fake-timers": "30.2.0", + "@jest/globals": "30.2.0", + "@jest/source-map": "30.0.1", + "@jest/test-result": "30.2.0", + "@jest/transform": "30.2.0", + "@jest/types": "30.2.0", + "@types/node": "*", + "chalk": "^4.1.2", + "cjs-module-lexer": "^2.1.0", + "collect-v8-coverage": "^1.0.2", + "glob": "^10.3.10", + "graceful-fs": "^4.2.11", + "jest-haste-map": "30.2.0", + "jest-message-util": "30.2.0", + "jest-mock": "30.2.0", + "jest-regex-util": "30.0.1", + "jest-resolve": "30.2.0", + "jest-snapshot": "30.2.0", + "jest-util": "30.2.0", + "slash": "^3.0.0", + "strip-bom": "^4.0.0" + }, "engines": { - "node": ">=6" + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" } }, - "node_modules/process": { - "version": "0.11.10", + "node_modules/jest-runtime/node_modules/glob": { + "version": "10.5.0", "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.6.0" + "license": "ISC", + "dependencies": { + "foreground-child": "^3.1.0", + "jackspeak": "^3.1.2", + "minimatch": "^9.0.4", + "minipass": "^7.1.2", + "package-json-from-dist": "^1.0.0", + "path-scurry": "^1.11.1" + }, + "bin": { + "glob": "dist/esm/bin.mjs" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/process-nextick-args": { - "version": "2.0.1", + "node_modules/jest-runtime/node_modules/lru-cache": { + "version": "10.4.3", "dev": true, - "license": "MIT" - }, - "node_modules/process-warning": { - "version": "5.0.0", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/fastify" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/fastify" - } - ], - "license": "MIT" + "license": "ISC" }, - "node_modules/prop-types": { - "version": "15.8.1", + "node_modules/jest-runtime/node_modules/path-scurry": { + "version": "1.11.1", "dev": true, - "license": "MIT", + "license": "BlueOak-1.0.0", "dependencies": { - "loose-envify": "^1.4.0", - "object-assign": "^4.1.1", - "react-is": "^16.13.1" + "lru-cache": "^10.2.0", + "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" + }, + "engines": { + "node": ">=16 || 14 >=14.18" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/prop-types/node_modules/react-is": { - "version": "16.13.1", - "dev": true, - "license": "MIT" - }, - "node_modules/proper-lockfile": { - "version": "4.1.2", - "dev": true, + "node_modules/jest-snapshot": { + "version": "30.2.0", "license": "MIT", "dependencies": { - "graceful-fs": "^4.2.4", - "retry": "^0.12.0", - "signal-exit": "^3.0.2" + "@babel/core": "^7.27.4", + "@babel/generator": "^7.27.5", + "@babel/plugin-syntax-jsx": "^7.27.1", + "@babel/plugin-syntax-typescript": "^7.27.1", + "@babel/types": "^7.27.3", + "@jest/expect-utils": "30.2.0", + "@jest/get-type": "30.1.0", + "@jest/snapshot-utils": "30.2.0", + "@jest/transform": "30.2.0", + "@jest/types": "30.2.0", + "babel-preset-current-node-syntax": "^1.2.0", + "chalk": "^4.1.2", + "expect": "30.2.0", + "graceful-fs": "^4.2.11", + "jest-diff": "30.2.0", + "jest-matcher-utils": "30.2.0", + "jest-message-util": "30.2.0", + "jest-util": "30.2.0", + "pretty-format": "30.2.0", + "semver": "^7.7.2", + "synckit": "^0.11.8" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" } }, - "node_modules/proper-lockfile/node_modules/signal-exit": { - "version": "3.0.7", - "dev": true, - "license": "ISC" + "node_modules/jest-util": { + "version": "30.2.0", + "license": "MIT", + "dependencies": { + "@jest/types": "30.2.0", + "@types/node": "*", + "chalk": "^4.1.2", + "ci-info": "^4.2.0", + "graceful-fs": "^4.2.11", + "picomatch": "^4.0.2" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + } }, - "node_modules/properties-reader": { - "version": "2.3.0", + "node_modules/jest-validate": { + "version": "30.2.0", "dev": true, "license": "MIT", "dependencies": { - "mkdirp": "^1.0.4" + "@jest/get-type": "30.1.0", + "@jest/types": "30.2.0", + "camelcase": "^6.3.0", + "chalk": "^4.1.2", + "leven": "^3.1.0", + "pretty-format": "30.2.0" }, "engines": { - "node": ">=14" + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + } + }, + "node_modules/jest-validate/node_modules/camelcase": { + "version": "6.3.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" }, "funding": { - "type": "github", - "url": "https://github.com/steveukx/properties?sponsor=1" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/protobufjs": { - "version": "7.5.4", + "node_modules/jest-watcher": { + "version": "30.2.0", "dev": true, - "hasInstallScript": true, - "license": "BSD-3-Clause", + "license": "MIT", "dependencies": { - "@protobufjs/aspromise": "^1.1.2", - "@protobufjs/base64": "^1.1.2", - "@protobufjs/codegen": "^2.0.4", - "@protobufjs/eventemitter": "^1.1.0", - "@protobufjs/fetch": "^1.1.0", - "@protobufjs/float": "^1.0.2", - "@protobufjs/inquire": "^1.1.0", - "@protobufjs/path": "^1.1.2", - "@protobufjs/pool": "^1.1.0", - "@protobufjs/utf8": "^1.1.0", - "@types/node": ">=13.7.0", - "long": "^5.0.0" + "@jest/test-result": "30.2.0", + "@jest/types": "30.2.0", + "@types/node": "*", + "ansi-escapes": "^4.3.2", + "chalk": "^4.1.2", + "emittery": "^0.13.1", + "jest-util": "30.2.0", + "string-length": "^4.0.2" }, "engines": { - "node": ">=12.0.0" + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" } }, - "node_modules/proxy-addr": { - "version": "2.0.7", + "node_modules/jest-worker": { + "version": "30.2.0", "license": "MIT", "dependencies": { - "forwarded": "0.2.0", - "ipaddr.js": "1.9.1" + "@types/node": "*", + "@ungap/structured-clone": "^1.3.0", + "jest-util": "30.2.0", + "merge-stream": "^2.0.0", + "supports-color": "^8.1.1" }, "engines": { - "node": ">= 0.10" + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" } }, - "node_modules/proxy-agent": { - "version": "6.5.0", - "dev": true, + "node_modules/jest-worker/node_modules/supports-color": { + "version": "8.1.1", "license": "MIT", "dependencies": { - "agent-base": "^7.1.2", - "debug": "^4.3.4", - "http-proxy-agent": "^7.0.1", - "https-proxy-agent": "^7.0.6", - "lru-cache": "^7.14.1", - "pac-proxy-agent": "^7.1.0", - "proxy-from-env": "^1.1.0", - "socks-proxy-agent": "^8.0.5" + "has-flag": "^4.0.0" }, "engines": { - "node": ">= 14" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" } }, - "node_modules/proxy-agent/node_modules/lru-cache": { - "version": "7.18.3", - "dev": true, - "license": "ISC", + "node_modules/jmespath": { + "version": "0.16.0", + "license": "Apache-2.0", "engines": { - "node": ">=12" + "node": ">= 0.6.0" } }, - "node_modules/proxy-from-env": { - "version": "1.1.0", - "license": "MIT" - }, - "node_modules/pump": { - "version": "3.0.3", + "node_modules/joycon": { + "version": "3.1.1", "license": "MIT", - "dependencies": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" + "engines": { + "node": ">=10" } }, - "node_modules/punycode": { - "version": "1.3.2", - "license": "MIT" + "node_modules/js-base64": { + "version": "3.7.8", + "license": "BSD-3-Clause" }, - "node_modules/pure-rand": { - "version": "7.0.1", + "node_modules/js-levenshtein": { + "version": "1.1.6", "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://github.com/sponsors/dubzzz" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/fast-check" - } - ], + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/js-tokens": { + "version": "4.0.0", "license": "MIT" }, - "node_modules/qs": { - "version": "6.14.1", - "license": "BSD-3-Clause", + "node_modules/js-yaml": { + "version": "4.1.1", + "license": "MIT", "dependencies": { - "side-channel": "^1.1.0" - }, - "engines": { - "node": ">=0.6" + "argparse": "^2.0.1" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "bin": { + "js-yaml": "bin/js-yaml.js" } }, - "node_modules/querystring": { - "version": "0.2.0", + "node_modules/jsdom": { + "version": "26.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "cssstyle": "^4.2.1", + "data-urls": "^5.0.0", + "decimal.js": "^10.5.0", + "html-encoding-sniffer": "^4.0.0", + "http-proxy-agent": "^7.0.2", + "https-proxy-agent": "^7.0.6", + "is-potential-custom-element-name": "^1.0.1", + "nwsapi": "^2.2.16", + "parse5": "^7.2.1", + "rrweb-cssom": "^0.8.0", + "saxes": "^6.0.0", + "symbol-tree": "^3.2.4", + "tough-cookie": "^5.1.1", + "w3c-xmlserializer": "^5.0.0", + "webidl-conversions": "^7.0.0", + "whatwg-encoding": "^3.1.1", + "whatwg-mimetype": "^4.0.0", + "whatwg-url": "^14.1.1", + "ws": "^8.18.0", + "xml-name-validator": "^5.0.0" + }, "engines": { - "node": ">=0.4.x" + "node": ">=18" + }, + "peerDependencies": { + "canvas": "^3.0.0" + }, + "peerDependenciesMeta": { + "canvas": { + "optional": true + } } }, - "node_modules/queue-microtask": { - "version": "1.2.3", + "node_modules/jsep": { + "version": "1.4.0", "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "MIT" - }, - "node_modules/quick-format-unescaped": { - "version": "4.0.4", - "license": "MIT" - }, - "node_modules/ramda": { - "version": "0.32.0", "license": "MIT", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/ramda" + "engines": { + "node": ">= 10.16.0" } }, - "node_modules/randexp": { - "version": "0.5.3", + "node_modules/jsesc": { + "version": "3.1.0", "license": "MIT", - "dependencies": { - "drange": "^1.0.2", - "ret": "^0.2.0" + "bin": { + "jsesc": "bin/jsesc" }, "engines": { - "node": ">=4" + "node": ">=6" } }, - "node_modules/randombytes": { - "version": "2.1.0", + "node_modules/json-buffer": { + "version": "3.0.1", + "dev": true, + "license": "MIT" + }, + "node_modules/json-parse-even-better-errors": { + "version": "2.3.1", + "dev": true, + "license": "MIT" + }, + "node_modules/json-pointer": { + "version": "0.6.2", "dev": true, "license": "MIT", "dependencies": { - "safe-buffer": "^5.1.0" + "foreach": "^2.0.4" } }, - "node_modules/range-parser": { - "version": "1.2.1", + "node_modules/json-schema-traverse": { + "version": "1.0.0", + "license": "MIT" + }, + "node_modules/json-stable-stringify-without-jsonify": { + "version": "1.0.1", + "dev": true, + "license": "MIT" + }, + "node_modules/json5": { + "version": "2.2.3", "license": "MIT", + "bin": { + "json5": "lib/cli.js" + }, "engines": { - "node": ">= 0.6" + "node": ">=6" } }, - "node_modules/raw-body": { - "version": "3.0.2", + "node_modules/jsonc-parser": { + "version": "3.3.1", + "dev": true, + "license": "MIT" + }, + "node_modules/jsonfile": { + "version": "6.2.0", + "dev": true, "license": "MIT", "dependencies": { - "bytes": "~3.1.2", - "http-errors": "~2.0.1", - "iconv-lite": "~0.7.0", - "unpipe": "~1.0.0" + "universalify": "^2.0.0" }, - "engines": { - "node": ">= 0.10" + "optionalDependencies": { + "graceful-fs": "^4.1.6" } }, - "node_modules/rc": { - "version": "1.2.8", - "license": "(BSD-2-Clause OR MIT OR Apache-2.0)", + "node_modules/jsonpath-plus": { + "version": "10.3.0", + "dev": true, + "license": "MIT", "dependencies": { - "deep-extend": "^0.6.0", - "ini": "~1.3.0", - "minimist": "^1.2.0", - "strip-json-comments": "~2.0.1" + "@jsep-plugin/assignment": "^1.3.0", + "@jsep-plugin/regex": "^1.0.4", + "jsep": "^1.4.0" }, "bin": { - "rc": "cli.js" - } - }, - "node_modules/rc/node_modules/strip-json-comments": { - "version": "2.0.1", - "license": "MIT", + "jsonpath": "bin/jsonpath-cli.js", + "jsonpath-plus": "bin/jsonpath-cli.js" + }, "engines": { - "node": ">=0.10.0" + "node": ">=18.0.0" } }, - "node_modules/react": { - "version": "19.2.4", + "node_modules/jsonpointer": { + "version": "5.0.1", "dev": true, "license": "MIT", "engines": { "node": ">=0.10.0" } }, - "node_modules/react-dom": { - "version": "19.2.4", + "node_modules/jsx-ast-utils": { + "version": "3.3.5", "dev": true, "license": "MIT", "dependencies": { - "scheduler": "^0.27.0" + "array-includes": "^3.1.6", + "array.prototype.flat": "^1.3.1", + "object.assign": "^4.1.4", + "object.values": "^1.1.6" }, - "peerDependencies": { - "react": "^19.2.4" + "engines": { + "node": ">=4.0" } }, - "node_modules/react-is": { - "version": "19.0.0", - "license": "MIT" - }, - "node_modules/react-tabs": { - "version": "6.1.0", + "node_modules/jsx-ast-utils-x": { + "version": "0.1.0", "dev": true, "license": "MIT", - "dependencies": { - "clsx": "^2.0.0", - "prop-types": "^15.5.0" - }, - "peerDependencies": { - "react": "^18.0.0 || ^19.0.0" + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" } }, - "node_modules/readable-stream": { - "version": "3.6.2", + "node_modules/keyv": { + "version": "4.5.4", "dev": true, "license": "MIT", "dependencies": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - }, - "engines": { - "node": ">= 6" + "json-buffer": "3.0.1" } }, - "node_modules/readdir-glob": { - "version": "1.1.3", + "node_modules/language-subtag-registry": { + "version": "0.3.23", "dev": true, - "license": "Apache-2.0", - "dependencies": { - "minimatch": "^5.1.0" - } + "license": "CC0-1.0" }, - "node_modules/readdirp": { - "version": "3.6.0", + "node_modules/language-tags": { + "version": "1.0.9", "dev": true, "license": "MIT", "dependencies": { - "picomatch": "^2.2.1" + "language-subtag-registry": "^0.3.20" }, "engines": { - "node": ">=8.10.0" + "node": ">=0.10" } }, - "node_modules/readdirp/node_modules/picomatch": { - "version": "2.3.1", + "node_modules/lazystream": { + "version": "1.0.1", "dev": true, "license": "MIT", - "engines": { - "node": ">=8.6" + "dependencies": { + "readable-stream": "^2.0.5" }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" - } - }, - "node_modules/real-require": { - "version": "0.2.0", - "license": "MIT", "engines": { - "node": ">= 12.13.0" + "node": ">= 0.6.3" } }, - "node_modules/redoc": { - "version": "2.4.0", + "node_modules/lazystream/node_modules/readable-stream": { + "version": "2.3.8", "dev": true, "license": "MIT", "dependencies": { - "@redocly/openapi-core": "^1.4.0", - "classnames": "^2.3.2", - "decko": "^1.2.0", - "dompurify": "^3.0.6", - "eventemitter3": "^5.0.1", - "json-pointer": "^0.6.2", - "lunr": "^2.3.9", - "mark.js": "^8.11.1", - "marked": "^4.3.0", - "mobx-react": "^9.1.1", - "openapi-sampler": "^1.5.0", - "path-browserify": "^1.0.1", - "perfect-scrollbar": "^1.5.5", - "polished": "^4.2.2", - "prismjs": "^1.29.0", - "prop-types": "^15.8.1", - "react-tabs": "^6.0.2", - "slugify": "~1.4.7", - "stickyfill": "^1.1.1", - "swagger2openapi": "^7.0.8", - "url-template": "^2.0.8" - }, - "engines": { - "node": ">=6.9", - "npm": ">=3.0.0" - }, - "peerDependencies": { - "core-js": "^3.1.4", - "mobx": "^6.0.4", - "react": "^16.8.4 || ^17.0.0 || ^18.0.0 || ^19.0.0", - "react-dom": "^16.8.4 || ^17.0.0 || ^18.0.0 || ^19.0.0", - "styled-components": "^4.1.1 || ^5.1.1 || ^6.0.5" + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" } }, - "node_modules/redoc/node_modules/eventemitter3": { - "version": "5.0.4", + "node_modules/lazystream/node_modules/safe-buffer": { + "version": "5.1.2", "dev": true, "license": "MIT" }, - "node_modules/refa": { - "version": "0.12.1", + "node_modules/lazystream/node_modules/string_decoder": { + "version": "1.1.1", "dev": true, "license": "MIT", "dependencies": { - "@eslint-community/regexpp": "^4.8.0" - }, - "engines": { - "node": "^12.0.0 || ^14.0.0 || >=16.0.0" + "safe-buffer": "~5.1.0" } }, - "node_modules/reflect-metadata": { - "version": "0.2.2", - "dev": true, - "license": "Apache-2.0" - }, - "node_modules/reflect.getprototypeof": { - "version": "1.0.10", + "node_modules/lcov-result-merger": { + "version": "5.0.1", "dev": true, "license": "MIT", "dependencies": { - "call-bind": "^1.0.8", - "define-properties": "^1.2.1", - "es-abstract": "^1.23.9", - "es-errors": "^1.3.0", - "es-object-atoms": "^1.0.0", - "get-intrinsic": "^1.2.7", - "get-proto": "^1.0.1", - "which-builtin-type": "^1.2.1" - }, - "engines": { - "node": ">= 0.4" + "fast-glob": "^3.2.11", + "yargs": "^16.2.0" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/reftools": { - "version": "1.1.9", - "dev": true, - "license": "BSD-3-Clause", - "funding": { - "url": "https://github.com/Mermade/oas-kit?sponsor=1" - } - }, - "node_modules/regexp-ast-analysis": { - "version": "0.7.1", - "dev": true, - "license": "MIT", - "dependencies": { - "@eslint-community/regexpp": "^4.8.0", - "refa": "^0.12.1" + "bin": { + "lcov-result-merger": "bin/lcov-result-merger.js" }, "engines": { - "node": "^12.0.0 || ^14.0.0 || >=16.0.0" + "node": ">=14" } }, - "node_modules/regexp-tree": { - "version": "0.1.27", + "node_modules/lcov-result-merger/node_modules/cliui": { + "version": "7.0.4", "dev": true, - "license": "MIT", - "bin": { - "regexp-tree": "bin/regexp-tree" + "license": "ISC", + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^7.0.0" } }, - "node_modules/regexp.prototype.flags": { - "version": "1.5.4", + "node_modules/lcov-result-merger/node_modules/wrap-ansi": { + "version": "7.0.0", "dev": true, "license": "MIT", "dependencies": { - "call-bind": "^1.0.8", - "define-properties": "^1.2.1", - "es-errors": "^1.3.0", - "get-proto": "^1.0.1", - "gopd": "^1.2.0", - "set-function-name": "^2.0.2" + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" }, "engines": { - "node": ">= 0.4" + "node": ">=10" }, "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/registry-auth-token": { - "version": "3.3.2", - "license": "MIT", - "dependencies": { - "rc": "^1.1.6", - "safe-buffer": "^5.0.1" + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" } }, - "node_modules/registry-url": { - "version": "3.1.0", + "node_modules/lcov-result-merger/node_modules/yargs": { + "version": "16.2.0", + "dev": true, "license": "MIT", "dependencies": { - "rc": "^1.0.1" + "cliui": "^7.0.2", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.0", + "y18n": "^5.0.5", + "yargs-parser": "^20.2.2" }, "engines": { - "node": ">=0.10.0" + "node": ">=10" } }, - "node_modules/regjsparser": { - "version": "0.13.0", + "node_modules/lcov-result-merger/node_modules/yargs-parser": { + "version": "20.2.9", "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "jsesc": "~3.1.0" - }, - "bin": { - "regjsparser": "bin/parser" + "license": "ISC", + "engines": { + "node": ">=10" } }, - "node_modules/require-directory": { - "version": "2.1.1", + "node_modules/leven": { + "version": "3.1.0", + "dev": true, "license": "MIT", "engines": { - "node": ">=0.10.0" + "node": ">=6" } }, - "node_modules/require-from-string": { - "version": "2.0.2", + "node_modules/levn": { + "version": "0.4.1", + "dev": true, "license": "MIT", + "dependencies": { + "prelude-ls": "^1.2.1", + "type-check": "~0.4.0" + }, "engines": { - "node": ">=0.10.0" + "node": ">= 0.8.0" } }, - "node_modules/requires-port": { - "version": "1.0.0", + "node_modules/lines-and-columns": { + "version": "1.2.4", + "dev": true, "license": "MIT" }, - "node_modules/reserved": { - "version": "0.1.2", + "node_modules/load-esm": { + "version": "1.0.3", "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/Borewit" + }, + { + "type": "buymeacoffee", + "url": "https://buymeacoffee.com/borewit" + } + ], + "license": "MIT", "engines": { - "node": ">=0.8" + "node": ">=13.2.0" } }, - "node_modules/resolve": { - "version": "1.22.11", + "node_modules/locate-path": { + "version": "6.0.0", "dev": true, "license": "MIT", "dependencies": { - "is-core-module": "^2.16.1", - "path-parse": "^1.0.7", - "supports-preserve-symlinks-flag": "^1.0.0" - }, - "bin": { - "resolve": "bin/resolve" + "p-locate": "^5.0.0" }, "engines": { - "node": ">= 0.4" + "node": ">=10" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/resolve-cwd": { - "version": "3.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "resolve-from": "^5.0.0" - }, - "engines": { - "node": ">=8" - } + "node_modules/lodash": { + "version": "4.17.23", + "license": "MIT" }, - "node_modules/resolve-cwd/node_modules/resolve-from": { - "version": "5.0.0", + "node_modules/lodash.camelcase": { + "version": "4.3.0", "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } + "license": "MIT" }, - "node_modules/resolve-from": { - "version": "4.0.0", + "node_modules/lodash.memoize": { + "version": "4.1.2", "dev": true, - "license": "MIT", - "engines": { - "node": ">=4" - } + "license": "MIT" }, - "node_modules/resolve-pkg-maps": { - "version": "1.0.0", + "node_modules/lodash.merge": { + "version": "4.6.2", "dev": true, - "license": "MIT", - "funding": { - "url": "https://github.com/privatenumber/resolve-pkg-maps?sponsor=1" - } + "license": "MIT" }, - "node_modules/restore-cursor": { - "version": "3.1.0", + "node_modules/lodash.topath": { + "version": "4.5.2", + "dev": true, + "license": "MIT" + }, + "node_modules/log-symbols": { + "version": "4.1.0", "dev": true, "license": "MIT", "dependencies": { - "onetime": "^5.1.0", - "signal-exit": "^3.0.2" + "chalk": "^4.1.0", + "is-unicode-supported": "^0.1.0" }, "engines": { - "node": ">=8" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/restore-cursor/node_modules/signal-exit": { - "version": "3.0.7", + "node_modules/long": { + "version": "5.3.2", "dev": true, - "license": "ISC" + "license": "Apache-2.0" }, - "node_modules/ret": { - "version": "0.2.2", + "node_modules/loose-envify": { + "version": "1.4.0", + "dev": true, "license": "MIT", - "engines": { - "node": ">=4" + "dependencies": { + "js-tokens": "^3.0.0 || ^4.0.0" + }, + "bin": { + "loose-envify": "cli.js" } }, - "node_modules/retry": { - "version": "0.12.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 4" + "node_modules/lru-cache": { + "version": "5.1.1", + "license": "ISC", + "dependencies": { + "yallist": "^3.0.2" } }, - "node_modules/reusify": { - "version": "1.1.0", + "node_modules/lunr": { + "version": "2.3.9", + "dev": true, + "license": "MIT" + }, + "node_modules/magic-string": { + "version": "0.25.9", "dev": true, "license": "MIT", - "engines": { - "iojs": ">=1.0.0", - "node": ">=0.10.0" + "dependencies": { + "sourcemap-codec": "^1.4.8" } }, - "node_modules/rollup": { - "version": "2.79.2", + "node_modules/make-dir": { + "version": "4.0.0", "dev": true, "license": "MIT", - "bin": { - "rollup": "dist/bin/rollup" + "dependencies": { + "semver": "^7.5.3" }, "engines": { - "node": ">=10.0.0" + "node": ">=10" }, - "optionalDependencies": { - "fsevents": "~2.3.2" + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/router": { - "version": "2.2.0", - "license": "MIT", + "node_modules/make-error": { + "version": "1.3.6", + "dev": true, + "license": "ISC" + }, + "node_modules/makeerror": { + "version": "1.0.12", + "license": "BSD-3-Clause", "dependencies": { - "debug": "^4.4.0", - "depd": "^2.0.0", - "is-promise": "^4.0.0", - "parseurl": "^1.3.3", - "path-to-regexp": "^8.0.0" - }, - "engines": { - "node": ">= 18" + "tmpl": "1.0.5" } }, - "node_modules/rrweb-cssom": { - "version": "0.8.0", + "node_modules/mark.js": { + "version": "8.11.1", "dev": true, "license": "MIT" }, - "node_modules/run-async": { - "version": "2.4.1", + "node_modules/markdown-escape": { + "version": "2.0.0", + "dev": true, + "license": "MIT" + }, + "node_modules/marked": { + "version": "4.3.0", "dev": true, "license": "MIT", + "bin": { + "marked": "bin/marked.js" + }, "engines": { - "node": ">=0.12.0" + "node": ">= 12" } }, - "node_modules/run-parallel": { - "version": "1.2.0", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], + "node_modules/math-intrinsics": { + "version": "1.1.0", "license": "MIT", - "dependencies": { - "queue-microtask": "^1.2.2" + "engines": { + "node": ">= 0.4" } }, - "node_modules/rxjs": { - "version": "7.8.2", - "dev": true, - "license": "Apache-2.0", + "node_modules/md5": { + "version": "2.3.0", + "license": "BSD-3-Clause", "dependencies": { - "tslib": "^2.1.0" + "charenc": "0.0.2", + "crypt": "0.0.2", + "is-buffer": "~1.1.6" } }, - "node_modules/safe-array-concat": { - "version": "1.1.3", - "dev": true, + "node_modules/media-typer": { + "version": "1.1.0", "license": "MIT", - "dependencies": { - "call-bind": "^1.0.8", - "call-bound": "^1.0.2", - "get-intrinsic": "^1.2.6", - "has-symbols": "^1.1.0", - "isarray": "^2.0.5" - }, "engines": { - "node": ">=0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">= 0.8" } }, - "node_modules/safe-array-concat/node_modules/isarray": { - "version": "2.0.5", - "dev": true, - "license": "MIT" - }, - "node_modules/safe-buffer": { - "version": "5.2.1", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "MIT" - }, - "node_modules/safe-push-apply": { - "version": "1.0.0", - "dev": true, + "node_modules/merge-descriptors": { + "version": "2.0.0", "license": "MIT", - "dependencies": { - "es-errors": "^1.3.0", - "isarray": "^2.0.5" - }, "engines": { - "node": ">= 0.4" + "node": ">=18" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/safe-push-apply/node_modules/isarray": { - "version": "2.0.5", - "dev": true, + "node_modules/merge-stream": { + "version": "2.0.0", "license": "MIT" }, - "node_modules/safe-regex": { - "version": "2.1.1", + "node_modules/merge2": { + "version": "1.4.1", "dev": true, "license": "MIT", - "dependencies": { - "regexp-tree": "~0.1.1" + "engines": { + "node": ">= 8" } }, - "node_modules/safe-regex-test": { - "version": "1.1.0", + "node_modules/methods": { + "version": "1.1.2", "license": "MIT", - "dependencies": { - "call-bound": "^1.0.2", - "es-errors": "^1.3.0", - "is-regex": "^1.2.1" - }, "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">= 0.6" } }, - "node_modules/safe-stable-stringify": { - "version": "2.5.0", + "node_modules/micromatch": { + "version": "4.0.8", "license": "MIT", + "dependencies": { + "braces": "^3.0.3", + "picomatch": "^2.3.1" + }, "engines": { - "node": ">=10" + "node": ">=8.6" } }, - "node_modules/safer-buffer": { - "version": "2.1.2", - "license": "MIT" - }, - "node_modules/sax": { - "version": "1.2.1", - "license": "ISC" - }, - "node_modules/saxes": { - "version": "6.0.0", - "dev": true, - "license": "ISC", - "dependencies": { - "xmlchars": "^2.2.0" - }, - "engines": { - "node": ">=v12.22.7" - } - }, - "node_modules/scheduler": { - "version": "0.27.0", - "dev": true, - "license": "MIT" - }, - "node_modules/scslre": { - "version": "0.3.0", - "dev": true, + "node_modules/micromatch/node_modules/picomatch": { + "version": "2.3.1", "license": "MIT", - "dependencies": { - "@eslint-community/regexpp": "^4.8.0", - "refa": "^0.12.0", - "regexp-ast-analysis": "^0.7.0" - }, "engines": { - "node": "^14.0.0 || >=16.0.0" - } - }, - "node_modules/secure-json-parse": { - "version": "4.1.0", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/fastify" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/fastify" - } - ], - "license": "BSD-3-Clause" - }, - "node_modules/semver": { - "version": "7.7.4", - "license": "ISC", - "bin": { - "semver": "bin/semver.js" + "node": ">=8.6" }, - "engines": { - "node": ">=10" + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" } }, - "node_modules/send": { - "version": "0.19.2", + "node_modules/mime": { + "version": "1.6.0", "license": "MIT", - "dependencies": { - "debug": "2.6.9", - "depd": "2.0.0", - "destroy": "1.2.0", - "encodeurl": "~2.0.0", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "fresh": "~0.5.2", - "http-errors": "~2.0.1", - "mime": "1.6.0", - "ms": "2.1.3", - "on-finished": "~2.4.1", - "range-parser": "~1.2.1", - "statuses": "~2.0.2" + "bin": { + "mime": "cli.js" }, "engines": { - "node": ">= 0.8.0" + "node": ">=4" } }, - "node_modules/send/node_modules/debug": { - "version": "2.6.9", + "node_modules/mime-db": { + "version": "1.54.0", "license": "MIT", - "dependencies": { - "ms": "2.0.0" + "engines": { + "node": ">= 0.6" } }, - "node_modules/send/node_modules/debug/node_modules/ms": { - "version": "2.0.0", - "license": "MIT" - }, - "node_modules/serve": { - "version": "14.2.5", + "node_modules/mime-types": { + "version": "3.0.2", "license": "MIT", "dependencies": { - "@zeit/schemas": "2.36.0", - "ajv": "8.12.0", - "arg": "5.0.2", - "boxen": "7.0.0", - "chalk": "5.0.1", - "chalk-template": "0.4.0", - "clipboardy": "3.0.0", - "compression": "1.8.1", - "is-port-reachable": "4.0.0", - "serve-handler": "6.1.6", - "update-check": "1.5.4" - }, - "bin": { - "serve": "build/main.js" + "mime-db": "^1.54.0" }, "engines": { - "node": ">= 14" + "node": ">=18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" } }, - "node_modules/serve-handler": { - "version": "6.1.6", + "node_modules/mimic-fn": { + "version": "2.1.0", "license": "MIT", - "dependencies": { - "bytes": "3.0.0", - "content-disposition": "0.5.2", - "mime-types": "2.1.18", - "minimatch": "3.1.2", - "path-is-inside": "1.0.2", - "path-to-regexp": "3.3.0", - "range-parser": "1.2.0" + "engines": { + "node": ">=6" } }, - "node_modules/serve-handler/node_modules/brace-expansion": { - "version": "1.1.12", - "license": "MIT", + "node_modules/minimatch": { + "version": "9.0.5", + "dev": true, + "license": "ISC", "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/serve-handler/node_modules/bytes": { - "version": "3.0.0", - "license": "MIT", + "brace-expansion": "^2.0.1" + }, "engines": { - "node": ">= 0.8" + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/serve-handler/node_modules/content-disposition": { - "version": "0.5.2", + "node_modules/minimist": { + "version": "1.2.8", "license": "MIT", - "engines": { - "node": ">= 0.6" + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/serve-handler/node_modules/mime-db": { - "version": "1.33.0", - "license": "MIT", + "node_modules/minipass": { + "version": "7.1.2", + "dev": true, + "license": "ISC", "engines": { - "node": ">= 0.6" + "node": ">=16 || 14 >=14.17" } }, - "node_modules/serve-handler/node_modules/mime-types": { - "version": "2.1.18", + "node_modules/mkdirp": { + "version": "1.0.4", + "dev": true, "license": "MIT", - "dependencies": { - "mime-db": "~1.33.0" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/serve-handler/node_modules/minimatch": { - "version": "3.1.2", - "license": "ISC", - "dependencies": { - "brace-expansion": "^1.1.7" + "bin": { + "mkdirp": "bin/cmd.js" }, "engines": { - "node": "*" + "node": ">=10" } }, - "node_modules/serve-handler/node_modules/path-to-regexp": { - "version": "3.3.0", + "node_modules/mkdirp-classic": { + "version": "0.5.3", + "dev": true, "license": "MIT" }, - "node_modules/serve-handler/node_modules/range-parser": { - "version": "1.2.0", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/serve-static": { - "version": "1.16.3", + "node_modules/mnemonist": { + "version": "0.38.3", "license": "MIT", "dependencies": { - "encodeurl": "~2.0.0", - "escape-html": "~1.0.3", - "parseurl": "~1.3.3", - "send": "~0.19.1" - }, - "engines": { - "node": ">= 0.8.0" + "obliterator": "^1.6.1" } }, - "node_modules/serve/node_modules/ajv": { - "version": "8.12.0", + "node_modules/mobx": { + "version": "6.15.0", + "dev": true, "license": "MIT", - "dependencies": { - "fast-deep-equal": "^3.1.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2", - "uri-js": "^4.2.2" - }, "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" + "type": "opencollective", + "url": "https://opencollective.com/mobx" } }, - "node_modules/serve/node_modules/chalk": { - "version": "5.0.1", + "node_modules/mobx-react": { + "version": "9.2.1", + "dev": true, "license": "MIT", - "engines": { - "node": "^12.17.0 || ^14.13 || >=16.0.0" + "dependencies": { + "mobx-react-lite": "^4.1.1" }, "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" + "type": "opencollective", + "url": "https://opencollective.com/mobx" + }, + "peerDependencies": { + "mobx": "^6.9.0", + "react": "^16.8.0 || ^17 || ^18 || ^19" + }, + "peerDependenciesMeta": { + "react-dom": { + "optional": true + }, + "react-native": { + "optional": true + } } }, - "node_modules/set-function-length": { - "version": "1.2.2", + "node_modules/mobx-react-lite": { + "version": "4.1.1", + "dev": true, "license": "MIT", "dependencies": { - "define-data-property": "^1.1.4", - "es-errors": "^1.3.0", - "function-bind": "^1.1.2", - "get-intrinsic": "^1.2.4", - "gopd": "^1.0.1", - "has-property-descriptors": "^1.0.2" + "use-sync-external-store": "^1.4.0" }, - "engines": { - "node": ">= 0.4" + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/mobx" + }, + "peerDependencies": { + "mobx": "^6.9.0", + "react": "^16.8.0 || ^17 || ^18 || ^19" + }, + "peerDependenciesMeta": { + "react-dom": { + "optional": true + }, + "react-native": { + "optional": true + } } }, - "node_modules/set-function-name": { - "version": "2.0.2", + "node_modules/ms": { + "version": "2.1.3", + "license": "MIT" + }, + "node_modules/mute-stream": { + "version": "0.0.8", + "dev": true, + "license": "ISC" + }, + "node_modules/nan": { + "version": "2.25.0", "dev": true, "license": "MIT", - "dependencies": { - "define-data-property": "^1.1.4", - "es-errors": "^1.3.0", - "functions-have-names": "^1.2.3", - "has-property-descriptors": "^1.0.2" + "optional": true + }, + "node_modules/nanoid": { + "version": "3.3.11", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "bin": { + "nanoid": "bin/nanoid.cjs" }, "engines": { - "node": ">= 0.4" + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" } }, - "node_modules/set-proto": { - "version": "1.0.0", + "node_modules/napi-postinstall": { + "version": "0.3.4", "dev": true, "license": "MIT", - "dependencies": { - "dunder-proto": "^1.0.1", - "es-errors": "^1.3.0", - "es-object-atoms": "^1.0.0" + "bin": { + "napi-postinstall": "lib/cli.js" }, "engines": { - "node": ">= 0.4" + "node": "^12.20.0 || ^14.18.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/napi-postinstall" } }, - "node_modules/setprototypeof": { - "version": "1.2.0", - "license": "ISC" + "node_modules/natural-compare": { + "version": "1.4.0", + "license": "MIT" }, - "node_modules/shallowequal": { - "version": "1.1.0", + "node_modules/natural-compare-lite": { + "version": "1.4.0", "dev": true, "license": "MIT" }, - "node_modules/shebang-command": { - "version": "2.0.0", + "node_modules/negotiator": { + "version": "1.0.0", "license": "MIT", - "dependencies": { - "shebang-regex": "^3.0.0" - }, "engines": { - "node": ">=8" + "node": ">= 0.6" } }, - "node_modules/shebang-regex": { - "version": "3.0.0", + "node_modules/neo-async": { + "version": "2.6.2", + "dev": true, + "license": "MIT" + }, + "node_modules/netmask": { + "version": "2.0.2", + "dev": true, "license": "MIT", "engines": { - "node": ">=8" + "node": ">= 0.4.0" } }, - "node_modules/shell-quote": { - "version": "1.8.3", - "dev": true, + "node_modules/nhs-notify-docs": { + "resolved": "docs", + "link": true + }, + "node_modules/nhs-notify-supplier-api-allocate-letter": { + "resolved": "lambdas/allocate-letter", + "link": true + }, + "node_modules/nhs-notify-supplier-api-handler": { + "resolved": "lambdas/api-handler", + "link": true + }, + "node_modules/nhs-notify-supplier-api-letter-test-data-utility": { + "resolved": "scripts/utilities/letter-test-data", + "link": true + }, + "node_modules/nhs-notify-supplier-api-letter-updates-transformer": { + "resolved": "lambdas/letter-updates-transformer", + "link": true + }, + "node_modules/nhs-notify-supplier-api-mi-updates-transformer": { + "resolved": "lambdas/mi-updates-transformer", + "link": true + }, + "node_modules/nhs-notify-supplier-api-suppliers-data-utility": { + "resolved": "scripts/utilities/supplier-data", + "link": true + }, + "node_modules/nhs-notify-supplier-api-tests": { + "resolved": "tests", + "link": true + }, + "node_modules/nhs-notify-supplier-api-upsert-letter": { + "resolved": "lambdas/upsert-letter", + "link": true + }, + "node_modules/nhs-notify-supplier-authorizer": { + "resolved": "lambdas/authorizer", + "link": true + }, + "node_modules/nhsuk-frontend": { + "version": "10.3.1", "license": "MIT", "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": "^20.9.0 || ^22.11.0 || ^24.11.0" } }, - "node_modules/should": { - "version": "13.2.3", + "node_modules/nimma": { + "version": "0.2.3", "dev": true, - "license": "MIT", + "license": "Apache-2.0", "dependencies": { - "should-equal": "^2.0.0", - "should-format": "^3.0.3", - "should-type": "^1.4.0", - "should-type-adaptors": "^1.0.1", - "should-util": "^1.0.0" + "@jsep-plugin/regex": "^1.0.1", + "@jsep-plugin/ternary": "^1.0.2", + "astring": "^1.8.1", + "jsep": "^1.2.0" + }, + "engines": { + "node": "^12.20 || >=14.13" + }, + "optionalDependencies": { + "jsonpath-plus": "^6.0.1 || ^10.1.0", + "lodash.topath": "^4.5.2" } }, - "node_modules/should-equal": { - "version": "2.0.0", + "node_modules/node-fetch": { + "version": "2.7.0", "dev": true, "license": "MIT", "dependencies": { - "should-type": "^1.4.0" + "whatwg-url": "^5.0.0" + }, + "engines": { + "node": "4.x || >=6.0.0" + }, + "peerDependencies": { + "encoding": "^0.1.0" + }, + "peerDependenciesMeta": { + "encoding": { + "optional": true + } } }, - "node_modules/should-format": { - "version": "3.0.3", + "node_modules/node-fetch-h2": { + "version": "2.3.0", "dev": true, "license": "MIT", "dependencies": { - "should-type": "^1.3.0", - "should-type-adaptors": "^1.0.1" + "http2-client": "^1.2.5" + }, + "engines": { + "node": "4.x || >=6.0.0" } }, - "node_modules/should-type": { - "version": "1.4.0", + "node_modules/node-fetch/node_modules/tr46": { + "version": "0.0.3", "dev": true, "license": "MIT" }, - "node_modules/should-type-adaptors": { - "version": "1.1.0", + "node_modules/node-fetch/node_modules/webidl-conversions": { + "version": "3.0.1", + "dev": true, + "license": "BSD-2-Clause" + }, + "node_modules/node-fetch/node_modules/whatwg-url": { + "version": "5.0.0", "dev": true, "license": "MIT", "dependencies": { - "should-type": "^1.3.0", - "should-util": "^1.0.0" + "tr46": "~0.0.3", + "webidl-conversions": "^3.0.0" } }, - "node_modules/should-util": { - "version": "1.0.1", + "node_modules/node-gyp-build": { + "version": "4.8.4", + "license": "MIT", + "bin": { + "node-gyp-build": "bin.js", + "node-gyp-build-optional": "optional.js", + "node-gyp-build-test": "build-test.js" + } + }, + "node_modules/node-int64": { + "version": "0.4.0", + "license": "MIT" + }, + "node_modules/node-readfiles": { + "version": "0.2.0", "dev": true, + "license": "MIT", + "dependencies": { + "es6-promise": "^3.2.1" + } + }, + "node_modules/node-releases": { + "version": "2.0.27", "license": "MIT" }, - "node_modules/side-channel": { - "version": "1.1.0", + "node_modules/node-sarif-builder": { + "version": "2.0.3", + "dev": true, "license": "MIT", "dependencies": { - "es-errors": "^1.3.0", - "object-inspect": "^1.13.3", - "side-channel-list": "^1.0.0", - "side-channel-map": "^1.0.1", - "side-channel-weakmap": "^1.0.2" + "@types/sarif": "^2.1.4", + "fs-extra": "^10.0.0" }, "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">=14" } }, - "node_modules/side-channel-list": { - "version": "1.0.0", + "node_modules/node-sarif-builder/node_modules/fs-extra": { + "version": "10.1.0", + "dev": true, "license": "MIT", "dependencies": { - "es-errors": "^1.3.0", - "object-inspect": "^1.13.3" + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" }, "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">=12" } }, - "node_modules/side-channel-map": { - "version": "1.0.1", + "node_modules/normalize-path": { + "version": "3.0.0", "license": "MIT", - "dependencies": { - "call-bound": "^1.0.2", - "es-errors": "^1.3.0", - "get-intrinsic": "^1.2.5", - "object-inspect": "^1.13.3" - }, "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">=0.10.0" } }, - "node_modules/side-channel-weakmap": { - "version": "1.0.2", + "node_modules/npm-run-path": { + "version": "4.0.1", "license": "MIT", "dependencies": { - "call-bound": "^1.0.2", - "es-errors": "^1.3.0", - "get-intrinsic": "^1.2.5", - "object-inspect": "^1.13.3", - "side-channel-map": "^1.0.1" + "path-key": "^3.0.0" }, "engines": { - "node": ">= 0.4" + "node": ">=8" + } + }, + "node_modules/nwsapi": { + "version": "2.2.23", + "dev": true, + "license": "MIT" + }, + "node_modules/oas-kit-common": { + "version": "1.0.8", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "fast-safe-stringify": "^2.0.7" + } + }, + "node_modules/oas-linter": { + "version": "3.2.2", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "@exodus/schemasafe": "^1.0.0-rc.2", + "should": "^13.2.1", + "yaml": "^1.10.0" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://github.com/Mermade/oas-kit?sponsor=1" } }, - "node_modules/signal-exit": { - "version": "4.1.0", + "node_modules/oas-linter/node_modules/yaml": { + "version": "1.10.2", + "dev": true, "license": "ISC", "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" + "node": ">= 6" } }, - "node_modules/simple-eval": { - "version": "1.0.1", + "node_modules/oas-resolver": { + "version": "2.5.6", "dev": true, - "license": "MIT", + "license": "BSD-3-Clause", "dependencies": { - "jsep": "^1.3.6" + "node-fetch-h2": "^2.3.0", + "oas-kit-common": "^1.0.8", + "reftools": "^1.1.9", + "yaml": "^1.10.0", + "yargs": "^17.0.1" + }, + "bin": { + "resolve": "resolve.js" }, + "funding": { + "url": "https://github.com/Mermade/oas-kit?sponsor=1" + } + }, + "node_modules/oas-resolver/node_modules/yaml": { + "version": "1.10.2", + "dev": true, + "license": "ISC", "engines": { - "node": ">=12" + "node": ">= 6" } }, - "node_modules/simple-websocket": { - "version": "9.1.0", + "node_modules/oas-schema-walker": { + "version": "1.1.5", "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "MIT", + "license": "BSD-3-Clause", + "funding": { + "url": "https://github.com/Mermade/oas-kit?sponsor=1" + } + }, + "node_modules/oas-validator": { + "version": "5.0.8", + "dev": true, + "license": "BSD-3-Clause", "dependencies": { - "debug": "^4.3.1", - "queue-microtask": "^1.2.2", - "randombytes": "^2.1.0", - "readable-stream": "^3.6.0", - "ws": "^7.4.2" + "call-me-maybe": "^1.0.1", + "oas-kit-common": "^1.0.8", + "oas-linter": "^3.2.2", + "oas-resolver": "^2.5.6", + "oas-schema-walker": "^1.1.5", + "reftools": "^1.1.9", + "should": "^13.2.1", + "yaml": "^1.10.0" + }, + "funding": { + "url": "https://github.com/Mermade/oas-kit?sponsor=1" } }, - "node_modules/simple-websocket/node_modules/ws": { - "version": "7.5.10", + "node_modules/oas-validator/node_modules/yaml": { + "version": "1.10.2", "dev": true, - "license": "MIT", + "license": "ISC", "engines": { - "node": ">=8.3.0" - }, - "peerDependencies": { - "bufferutil": "^4.0.1", - "utf-8-validate": "^5.0.2" - }, - "peerDependenciesMeta": { - "bufferutil": { - "optional": true - }, - "utf-8-validate": { - "optional": true - } + "node": ">= 6" } }, - "node_modules/slash": { - "version": "3.0.0", + "node_modules/object-assign": { + "version": "4.1.1", + "dev": true, "license": "MIT", "engines": { - "node": ">=8" + "node": ">=0.10.0" } }, - "node_modules/slugify": { - "version": "1.4.7", - "dev": true, + "node_modules/object-inspect": { + "version": "1.13.4", "license": "MIT", "engines": { - "node": ">=8.0.0" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/smart-buffer": { - "version": "4.2.0", + "node_modules/object-keys": { + "version": "1.1.1", "dev": true, "license": "MIT", "engines": { - "node": ">= 6.0.0", - "npm": ">= 3.0.0" + "node": ">= 0.4" } }, - "node_modules/socks": { - "version": "2.8.7", + "node_modules/object.assign": { + "version": "4.1.7", "dev": true, "license": "MIT", "dependencies": { - "ip-address": "^10.0.1", - "smart-buffer": "^4.2.0" + "call-bind": "^1.0.8", + "call-bound": "^1.0.3", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0", + "has-symbols": "^1.1.0", + "object-keys": "^1.1.1" }, "engines": { - "node": ">= 10.0.0", - "npm": ">= 3.0.0" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/socks-proxy-agent": { - "version": "8.0.5", + "node_modules/object.entries": { + "version": "1.1.9", "dev": true, "license": "MIT", "dependencies": { - "agent-base": "^7.1.2", - "debug": "^4.3.4", - "socks": "^2.8.3" + "call-bind": "^1.0.8", + "call-bound": "^1.0.4", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.1.1" }, "engines": { - "node": ">= 14" + "node": ">= 0.4" } }, - "node_modules/sonic-boom": { - "version": "4.2.0", + "node_modules/object.fromentries": { + "version": "2.0.8", + "dev": true, "license": "MIT", "dependencies": { - "atomic-sleep": "^1.0.0" + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/source-map": { - "version": "0.6.1", + "node_modules/object.groupby": { + "version": "1.0.3", "dev": true, - "license": "BSD-3-Clause", + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2" + }, "engines": { - "node": ">=0.10.0" + "node": ">= 0.4" } }, - "node_modules/source-map-js": { + "node_modules/object.values": { "version": "1.2.1", "dev": true, - "license": "BSD-3-Clause", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/source-map-support": { - "version": "0.5.13", - "dev": true, "license": "MIT", "dependencies": { - "buffer-from": "^1.0.0", - "source-map": "^0.6.0" + "call-bind": "^1.0.8", + "call-bound": "^1.0.3", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/sourcemap-codec": { - "version": "1.4.8", - "dev": true, + "node_modules/obliterator": { + "version": "1.6.1", "license": "MIT" }, - "node_modules/split-ca": { - "version": "1.0.1", - "dev": true, - "license": "ISC" + "node_modules/on-exit-leak-free": { + "version": "2.1.2", + "license": "MIT", + "engines": { + "node": ">=14.0.0" + } }, - "node_modules/split2": { - "version": "4.2.0", - "license": "ISC", + "node_modules/on-finished": { + "version": "2.4.1", + "license": "MIT", + "dependencies": { + "ee-first": "1.1.1" + }, "engines": { - "node": ">= 10.x" + "node": ">= 0.8" } }, - "node_modules/sprintf-js": { - "version": "1.0.3", - "license": "BSD-3-Clause" + "node_modules/on-headers": { + "version": "1.1.0", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } }, - "node_modules/ssh-remote-port-forward": { - "version": "1.0.4", - "dev": true, + "node_modules/once": { + "version": "1.4.0", + "license": "ISC", + "dependencies": { + "wrappy": "1" + } + }, + "node_modules/onetime": { + "version": "5.1.2", "license": "MIT", "dependencies": { - "@types/ssh2": "^0.5.48", - "ssh2": "^1.4.0" + "mimic-fn": "^2.1.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/ssh-remote-port-forward/node_modules/@types/ssh2": { - "version": "0.5.52", + "node_modules/openapi-response-validator": { + "version": "12.1.3", + "license": "MIT", + "dependencies": { + "ajv": "^8.4.0", + "openapi-types": "^12.1.3" + } + }, + "node_modules/openapi-sampler": { + "version": "1.6.2", "dev": true, "license": "MIT", "dependencies": { - "@types/node": "*", - "@types/ssh2-streams": "*" + "@types/json-schema": "^7.0.7", + "fast-xml-parser": "^4.5.0", + "json-pointer": "0.6.2" } }, - "node_modules/ssh2": { - "version": "1.17.0", + "node_modules/openapi-types": { + "version": "12.1.3", + "license": "MIT" + }, + "node_modules/openapi-typescript": { + "version": "7.10.1", "dev": true, - "hasInstallScript": true, + "license": "MIT", "dependencies": { - "asn1": "^0.2.6", - "bcrypt-pbkdf": "^1.0.2" + "@redocly/openapi-core": "^1.34.5", + "ansi-colors": "^4.1.3", + "change-case": "^5.4.4", + "parse-json": "^8.3.0", + "supports-color": "^10.2.2", + "yargs-parser": "^21.1.1" }, - "engines": { - "node": ">=10.16.0" + "bin": { + "openapi-typescript": "bin/cli.js" }, - "optionalDependencies": { - "cpu-features": "~0.0.10", - "nan": "^2.23.0" + "peerDependencies": { + "typescript": "^5.x" } }, - "node_modules/stable-hash": { - "version": "0.0.5", + "node_modules/openapi-typescript/node_modules/@redocly/config": { + "version": "0.22.2", "dev": true, "license": "MIT" }, - "node_modules/stable-hash-x": { - "version": "0.2.0", + "node_modules/openapi-typescript/node_modules/@redocly/openapi-core": { + "version": "1.34.6", "dev": true, "license": "MIT", + "dependencies": { + "@redocly/ajv": "^8.11.2", + "@redocly/config": "^0.22.0", + "colorette": "^1.2.0", + "https-proxy-agent": "^7.0.5", + "js-levenshtein": "^1.1.6", + "js-yaml": "^4.1.0", + "minimatch": "^5.0.1", + "pluralize": "^8.0.0", + "yaml-ast-parser": "0.0.43" + }, "engines": { - "node": ">=12.0.0" + "node": ">=18.17.0", + "npm": ">=9.5.0" } }, - "node_modules/stack-utils": { - "version": "2.0.6", - "license": "MIT", + "node_modules/openapi-typescript/node_modules/minimatch": { + "version": "5.1.6", + "dev": true, + "license": "ISC", "dependencies": { - "escape-string-regexp": "^2.0.0" + "brace-expansion": "^2.0.1" }, "engines": { "node": ">=10" } }, - "node_modules/stack-utils/node_modules/escape-string-regexp": { - "version": "2.0.0", + "node_modules/openapi-typescript/node_modules/parse-json": { + "version": "8.3.0", + "dev": true, "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.26.2", + "index-to-position": "^1.1.0", + "type-fest": "^4.39.1" + }, "engines": { - "node": ">=8" + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/stacktracey": { - "version": "2.1.8", + "node_modules/openapi-typescript/node_modules/supports-color": { + "version": "10.2.2", "dev": true, - "license": "Unlicense", - "dependencies": { - "as-table": "^1.0.36", - "get-source": "^2.0.12" - } - }, - "node_modules/statuses": { - "version": "2.0.2", "license": "MIT", "engines": { - "node": ">= 0.8" + "node": ">=18" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" } }, - "node_modules/stickyfill": { - "version": "1.1.1", - "dev": true + "node_modules/openapi-typescript/node_modules/type-fest": { + "version": "4.41.0", + "dev": true, + "license": "(MIT OR CC0-1.0)", + "engines": { + "node": ">=16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } }, - "node_modules/stop-iteration-iterator": { - "version": "1.1.0", + "node_modules/optionator": { + "version": "0.9.4", "dev": true, "license": "MIT", "dependencies": { - "es-errors": "^1.3.0", - "internal-slot": "^1.1.0" + "deep-is": "^0.1.3", + "fast-levenshtein": "^2.0.6", + "levn": "^0.4.1", + "prelude-ls": "^1.2.1", + "type-check": "^0.4.0", + "word-wrap": "^1.2.5" }, "engines": { - "node": ">= 0.4" + "node": ">= 0.8.0" } }, - "node_modules/streamx": { - "version": "2.23.0", + "node_modules/ora": { + "version": "5.4.1", "dev": true, "license": "MIT", "dependencies": { - "events-universal": "^1.0.0", - "fast-fifo": "^1.3.2", - "text-decoder": "^1.1.0" + "bl": "^4.1.0", + "chalk": "^4.1.0", + "cli-cursor": "^3.1.0", + "cli-spinners": "^2.5.0", + "is-interactive": "^1.0.0", + "is-unicode-supported": "^0.1.0", + "log-symbols": "^4.1.0", + "strip-ansi": "^6.0.0", + "wcwidth": "^1.0.1" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/string_decoder": { - "version": "1.3.0", + "node_modules/own-keys": { + "version": "1.0.1", "dev": true, "license": "MIT", "dependencies": { - "safe-buffer": "~5.2.0" + "get-intrinsic": "^1.2.6", + "object-keys": "^1.1.1", + "safe-push-apply": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/string-length": { - "version": "4.0.2", + "node_modules/p-limit": { + "version": "3.1.0", "dev": true, "license": "MIT", "dependencies": { - "char-regex": "^1.0.2", - "strip-ansi": "^6.0.0" + "yocto-queue": "^0.1.0" }, "engines": { "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/string-width": { - "version": "4.2.3", + "node_modules/p-locate": { + "version": "5.0.0", + "dev": true, "license": "MIT", "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" + "p-limit": "^3.0.2" }, "engines": { - "node": ">=8" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/string-width-cjs": { - "name": "string-width", - "version": "4.2.3", - "dev": true, + "node_modules/p-try": { + "version": "2.2.0", "license": "MIT", - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, "engines": { - "node": ">=8" + "node": ">=6" } }, - "node_modules/string-width-cjs/node_modules/emoji-regex": { - "version": "8.0.0", - "dev": true, - "license": "MIT" - }, - "node_modules/string-width/node_modules/emoji-regex": { - "version": "8.0.0", - "license": "MIT" - }, - "node_modules/string.prototype.includes": { - "version": "2.0.1", + "node_modules/pac-proxy-agent": { + "version": "7.2.0", "dev": true, "license": "MIT", "dependencies": { - "call-bind": "^1.0.7", - "define-properties": "^1.2.1", - "es-abstract": "^1.23.3" + "@tootallnate/quickjs-emscripten": "^0.23.0", + "agent-base": "^7.1.2", + "debug": "^4.3.4", + "get-uri": "^6.0.1", + "http-proxy-agent": "^7.0.0", + "https-proxy-agent": "^7.0.6", + "pac-resolver": "^7.0.1", + "socks-proxy-agent": "^8.0.5" }, "engines": { - "node": ">= 0.4" + "node": ">= 14" } }, - "node_modules/string.prototype.matchall": { - "version": "4.0.12", + "node_modules/pac-resolver": { + "version": "7.0.1", "dev": true, "license": "MIT", "dependencies": { - "call-bind": "^1.0.8", - "call-bound": "^1.0.3", - "define-properties": "^1.2.1", - "es-abstract": "^1.23.6", - "es-errors": "^1.3.0", - "es-object-atoms": "^1.0.0", - "get-intrinsic": "^1.2.6", - "gopd": "^1.2.0", - "has-symbols": "^1.1.0", - "internal-slot": "^1.1.0", - "regexp.prototype.flags": "^1.5.3", - "set-function-name": "^2.0.2", - "side-channel": "^1.1.0" + "degenerator": "^5.0.0", + "netmask": "^2.0.2" }, "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">= 14" } }, - "node_modules/string.prototype.repeat": { - "version": "1.0.0", + "node_modules/package-json-from-dist": { + "version": "1.0.1", "dev": true, - "license": "MIT", - "dependencies": { - "define-properties": "^1.1.3", - "es-abstract": "^1.17.5" - } + "license": "BlueOak-1.0.0" }, - "node_modules/string.prototype.trim": { - "version": "1.2.10", + "node_modules/parent-module": { + "version": "1.0.1", "dev": true, "license": "MIT", "dependencies": { - "call-bind": "^1.0.8", - "call-bound": "^1.0.2", - "define-data-property": "^1.1.4", - "define-properties": "^1.2.1", - "es-abstract": "^1.23.5", - "es-object-atoms": "^1.0.0", - "has-property-descriptors": "^1.0.2" + "callsites": "^3.0.0" }, "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">=6" } }, - "node_modules/string.prototype.trimend": { - "version": "1.0.9", + "node_modules/parse-json": { + "version": "5.2.0", "dev": true, "license": "MIT", "dependencies": { - "call-bind": "^1.0.8", - "call-bound": "^1.0.2", - "define-properties": "^1.2.1", - "es-object-atoms": "^1.0.0" + "@babel/code-frame": "^7.0.0", + "error-ex": "^1.3.1", + "json-parse-even-better-errors": "^2.3.0", + "lines-and-columns": "^1.1.6" }, "engines": { - "node": ">= 0.4" + "node": ">=8" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/string.prototype.trimstart": { - "version": "1.0.8", + "node_modules/parse5": { + "version": "7.3.0", "dev": true, "license": "MIT", "dependencies": { - "call-bind": "^1.0.7", - "define-properties": "^1.2.1", - "es-object-atoms": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" + "entities": "^6.0.0" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://github.com/inikulin/parse5?sponsor=1" } }, - "node_modules/strip-ansi": { - "version": "6.0.1", + "node_modules/parseurl": { + "version": "1.3.3", "license": "MIT", - "dependencies": { - "ansi-regex": "^5.0.1" - }, "engines": { - "node": ">=8" + "node": ">= 0.8" } }, - "node_modules/strip-ansi-cjs": { - "name": "strip-ansi", - "version": "6.0.1", + "node_modules/path-browserify": { + "version": "1.0.1", "dev": true, - "license": "MIT", - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } + "license": "MIT" }, - "node_modules/strip-bom": { + "node_modules/path-exists": { "version": "4.0.0", - "dev": true, "license": "MIT", "engines": { "node": ">=8" } }, - "node_modules/strip-final-newline": { - "version": "2.0.0", + "node_modules/path-is-absolute": { + "version": "1.0.1", "license": "MIT", "engines": { - "node": ">=6" + "node": ">=0.10.0" } }, - "node_modules/strip-indent": { - "version": "4.1.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } + "node_modules/path-is-inside": { + "version": "1.0.2", + "license": "(WTFPL OR MIT)" }, - "node_modules/strip-json-comments": { + "node_modules/path-key": { "version": "3.1.1", - "dev": true, "license": "MIT", "engines": { "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/strnum": { - "version": "2.1.2", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/NaturalIntelligence" - } - ], + "node_modules/path-parse": { + "version": "1.0.7", + "dev": true, "license": "MIT" }, - "node_modules/strtok3": { - "version": "10.3.4", + "node_modules/path-scurry": { + "version": "2.0.1", "dev": true, - "license": "MIT", + "license": "BlueOak-1.0.0", "dependencies": { - "@tokenizer/token": "^0.3.0" + "lru-cache": "^11.0.0", + "minipass": "^7.1.2" }, "engines": { - "node": ">=18" + "node": "20 || >=22" }, "funding": { - "type": "github", - "url": "https://github.com/sponsors/Borewit" + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/styled-components": { - "version": "6.3.9", + "node_modules/path-scurry/node_modules/lru-cache": { + "version": "11.2.4", "dev": true, - "license": "MIT", - "dependencies": { - "@emotion/is-prop-valid": "1.4.0", - "@emotion/unitless": "0.10.0", - "@types/stylis": "4.2.7", - "css-to-react-native": "3.2.0", - "csstype": "3.2.3", - "postcss": "8.4.49", - "shallowequal": "1.1.0", - "stylis": "4.3.6", - "tslib": "2.8.1" - }, + "license": "BlueOak-1.0.0", "engines": { - "node": ">= 16" - }, + "node": "20 || >=22" + } + }, + "node_modules/path-to-regexp": { + "version": "8.3.0", + "license": "MIT", "funding": { "type": "opencollective", - "url": "https://opencollective.com/styled-components" - }, - "peerDependencies": { - "react": ">= 16.8.0", - "react-dom": ">= 16.8.0" - }, - "peerDependenciesMeta": { - "react-dom": { - "optional": true - } + "url": "https://opencollective.com/express" } }, - "node_modules/stylis": { - "version": "4.3.6", + "node_modules/perfect-scrollbar": { + "version": "1.5.6", "dev": true, "license": "MIT" }, - "node_modules/supports-color": { - "version": "7.2.0", + "node_modules/picocolors": { + "version": "1.1.1", + "license": "ISC" + }, + "node_modules/picomatch": { + "version": "4.0.3", "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, "engines": { - "node": ">=8" - } - }, - "node_modules/supports-preserve-symlinks-flag": { - "version": "1.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" + "node": ">=12" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://github.com/sponsors/jonschlinkert" } }, - "node_modules/swagger2openapi": { - "version": "7.0.8", - "dev": true, - "license": "BSD-3-Clause", + "node_modules/pino": { + "version": "10.3.1", + "license": "MIT", "dependencies": { - "call-me-maybe": "^1.0.1", - "node-fetch": "^2.6.1", - "node-fetch-h2": "^2.3.0", - "node-readfiles": "^0.2.0", - "oas-kit-common": "^1.0.8", - "oas-resolver": "^2.5.6", - "oas-schema-walker": "^1.1.5", - "oas-validator": "^5.0.8", - "reftools": "^1.1.9", - "yaml": "^1.10.0", - "yargs": "^17.0.1" + "@pinojs/redact": "^0.4.0", + "atomic-sleep": "^1.0.0", + "on-exit-leak-free": "^2.1.0", + "pino-abstract-transport": "^3.0.0", + "pino-std-serializers": "^7.0.0", + "process-warning": "^5.0.0", + "quick-format-unescaped": "^4.0.3", + "real-require": "^0.2.0", + "safe-stable-stringify": "^2.3.1", + "sonic-boom": "^4.0.1", + "thread-stream": "^4.0.0" }, "bin": { - "boast": "boast.js", - "oas-validate": "oas-validate.js", - "swagger2openapi": "swagger2openapi.js" - }, - "funding": { - "url": "https://github.com/Mermade/oas-kit?sponsor=1" - } - }, - "node_modules/swagger2openapi/node_modules/yaml": { - "version": "1.10.2", - "dev": true, - "license": "ISC", - "engines": { - "node": ">= 6" + "pino": "bin.js" } }, - "node_modules/symbol-tree": { - "version": "3.2.4", - "dev": true, - "license": "MIT" - }, - "node_modules/synckit": { - "version": "0.11.12", + "node_modules/pino-abstract-transport": { + "version": "2.0.0", "license": "MIT", "dependencies": { - "@pkgr/core": "^0.2.9" - }, - "engines": { - "node": "^14.18.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/synckit" + "split2": "^4.0.0" } }, - "node_modules/tar-fs": { - "version": "3.1.1", - "dev": true, + "node_modules/pino-pretty": { + "version": "13.1.3", "license": "MIT", "dependencies": { + "colorette": "^2.0.7", + "dateformat": "^4.6.3", + "fast-copy": "^4.0.0", + "fast-safe-stringify": "^2.1.1", + "help-me": "^5.0.0", + "joycon": "^3.1.1", + "minimist": "^1.2.6", + "on-exit-leak-free": "^2.1.0", + "pino-abstract-transport": "^3.0.0", "pump": "^3.0.0", - "tar-stream": "^3.1.5" + "secure-json-parse": "^4.0.0", + "sonic-boom": "^4.0.1", + "strip-json-comments": "^5.0.2" }, - "optionalDependencies": { - "bare-fs": "^4.0.1", - "bare-path": "^3.0.0" + "bin": { + "pino-pretty": "bin.js" } }, - "node_modules/tar-stream": { - "version": "3.1.7", - "dev": true, + "node_modules/pino-pretty/node_modules/colorette": { + "version": "2.0.20", + "license": "MIT" + }, + "node_modules/pino-pretty/node_modules/dateformat": { + "version": "4.6.3", "license": "MIT", - "dependencies": { - "b4a": "^1.6.4", - "fast-fifo": "^1.2.0", - "streamx": "^2.15.0" + "engines": { + "node": "*" } }, - "node_modules/test-exclude": { - "version": "6.0.0", - "license": "ISC", + "node_modules/pino-pretty/node_modules/pino-abstract-transport": { + "version": "3.0.0", + "license": "MIT", "dependencies": { - "@istanbuljs/schema": "^0.1.2", - "glob": "^7.1.4", - "minimatch": "^3.0.4" - }, + "split2": "^4.0.0" + } + }, + "node_modules/pino-pretty/node_modules/strip-json-comments": { + "version": "5.0.3", + "license": "MIT", "engines": { - "node": ">=8" + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/test-exclude/node_modules/brace-expansion": { - "version": "1.1.12", + "node_modules/pino-std-serializers": { + "version": "7.1.0", + "license": "MIT" + }, + "node_modules/pino/node_modules/pino-abstract-transport": { + "version": "3.0.0", "license": "MIT", "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" + "split2": "^4.0.0" } }, - "node_modules/test-exclude/node_modules/glob": { - "version": "7.2.3", - "license": "ISC", + "node_modules/pino/node_modules/thread-stream": { + "version": "4.0.0", + "license": "MIT", "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" + "real-require": "^0.2.0" }, "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" + "node": ">=20" } }, - "node_modules/test-exclude/node_modules/minimatch": { - "version": "3.1.2", - "license": "ISC", - "dependencies": { - "brace-expansion": "^1.1.7" - }, + "node_modules/pirates": { + "version": "4.0.7", + "license": "MIT", "engines": { - "node": "*" + "node": ">= 6" } }, - "node_modules/testcontainers": { - "version": "11.11.0", + "node_modules/pkg-dir": { + "version": "4.2.0", "dev": true, "license": "MIT", "dependencies": { - "@balena/dockerignore": "^1.0.2", - "@types/dockerode": "^3.3.47", - "archiver": "^7.0.1", - "async-lock": "^1.4.1", - "byline": "^5.0.0", - "debug": "^4.4.3", - "docker-compose": "^1.3.0", - "dockerode": "^4.0.9", - "get-port": "^7.1.0", - "proper-lockfile": "^4.1.2", - "properties-reader": "^2.3.0", - "ssh-remote-port-forward": "^1.0.4", - "tar-fs": "^3.1.1", - "tmp": "^0.2.5", - "undici": "^7.16.0" + "find-up": "^4.0.0" + }, + "engines": { + "node": ">=8" } }, - "node_modules/text-decoder": { - "version": "1.2.3", + "node_modules/pkg-dir/node_modules/find-up": { + "version": "4.1.0", "dev": true, - "license": "Apache-2.0", + "license": "MIT", "dependencies": { - "b4a": "^1.6.4" + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=8" } }, - "node_modules/text-table": { - "version": "0.2.0", + "node_modules/pkg-dir/node_modules/locate-path": { + "version": "5.0.0", "dev": true, - "license": "MIT" - }, - "node_modules/thread-stream": { - "version": "3.1.0", "license": "MIT", "dependencies": { - "real-require": "^0.2.0" + "p-locate": "^4.1.0" + }, + "engines": { + "node": ">=8" } }, - "node_modules/through": { - "version": "2.3.8", - "dev": true, - "license": "MIT" - }, - "node_modules/tinyglobby": { - "version": "0.2.15", + "node_modules/pkg-dir/node_modules/p-limit": { + "version": "2.3.0", "dev": true, "license": "MIT", "dependencies": { - "fdir": "^6.5.0", - "picomatch": "^4.0.3" + "p-try": "^2.0.0" }, "engines": { - "node": ">=12.0.0" + "node": ">=6" }, "funding": { - "url": "https://github.com/sponsors/SuperchupuDev" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/tldts": { - "version": "6.1.86", + "node_modules/pkg-dir/node_modules/p-locate": { + "version": "4.1.0", "dev": true, "license": "MIT", "dependencies": { - "tldts-core": "^6.1.86" + "p-limit": "^2.2.0" }, - "bin": { - "tldts": "bin/cli.js" - } - }, - "node_modules/tldts-core": { - "version": "6.1.86", - "dev": true, - "license": "MIT" - }, - "node_modules/tmp": { - "version": "0.2.5", - "dev": true, - "license": "MIT", "engines": { - "node": ">=14.14" + "node": ">=8" } }, - "node_modules/tmpl": { - "version": "1.0.5", - "license": "BSD-3-Clause" - }, - "node_modules/to-regex-range": { - "version": "5.0.1", - "license": "MIT", + "node_modules/playwright": { + "version": "1.57.0", + "license": "Apache-2.0", "dependencies": { - "is-number": "^7.0.0" + "playwright-core": "1.57.0" + }, + "bin": { + "playwright": "cli.js" }, "engines": { - "node": ">=8.0" + "node": ">=18" + }, + "optionalDependencies": { + "fsevents": "2.3.2" } }, - "node_modules/toidentifier": { - "version": "1.0.1", + "node_modules/playwright-core": { + "version": "1.57.0", + "license": "Apache-2.0", + "bin": { + "playwright-core": "cli.js" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/pluralize": { + "version": "8.0.0", + "dev": true, "license": "MIT", "engines": { - "node": ">=0.6" + "node": ">=4" } }, - "node_modules/token-types": { - "version": "6.1.2", + "node_modules/polished": { + "version": "4.3.1", "dev": true, "license": "MIT", "dependencies": { - "@borewit/text-codec": "^0.2.1", - "@tokenizer/token": "^0.3.0", - "ieee754": "^1.2.1" + "@babel/runtime": "^7.17.8" }, "engines": { - "node": ">=14.16" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/Borewit" + "node": ">=10" } }, - "node_modules/token-types/node_modules/ieee754": { - "version": "1.2.1", + "node_modules/pony-cause": { + "version": "1.1.1", + "dev": true, + "license": "0BSD", + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/possible-typed-array-names": { + "version": "1.1.0", + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/postcss": { + "version": "8.4.49", "dev": true, "funding": [ { - "type": "github", - "url": "https://github.com/sponsors/feross" + "type": "opencollective", + "url": "https://opencollective.com/postcss/" }, { - "type": "patreon", - "url": "https://www.patreon.com/feross" + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss" }, { - "type": "consulting", - "url": "https://feross.org/support" + "type": "github", + "url": "https://github.com/sponsors/ai" } ], - "license": "BSD-3-Clause" - }, - "node_modules/tough-cookie": { - "version": "5.1.2", - "dev": true, - "license": "BSD-3-Clause", + "license": "MIT", "dependencies": { - "tldts": "^6.1.32" + "nanoid": "^3.3.7", + "picocolors": "^1.1.1", + "source-map-js": "^1.2.1" }, "engines": { - "node": ">=16" + "node": "^10 || ^12 || >=14" } }, - "node_modules/tr46": { - "version": "5.1.1", + "node_modules/postcss-value-parser": { + "version": "4.2.0", "dev": true, - "license": "MIT", - "dependencies": { - "punycode": "^2.3.1" - }, - "engines": { - "node": ">=18" - } + "license": "MIT" }, - "node_modules/tr46/node_modules/punycode": { - "version": "2.3.1", + "node_modules/prelude-ls": { + "version": "1.2.1", "dev": true, "license": "MIT", "engines": { - "node": ">=6" + "node": ">= 0.8.0" } }, - "node_modules/tree-kill": { - "version": "1.2.2", + "node_modules/prettier": { + "version": "3.8.0", "dev": true, "license": "MIT", + "peer": true, "bin": { - "tree-kill": "cli.js" - } - }, - "node_modules/ts-api-utils": { - "version": "2.4.0", - "dev": true, - "license": "MIT", + "prettier": "bin/prettier.cjs" + }, "engines": { - "node": ">=18.12" + "node": ">=14" }, - "peerDependencies": { - "typescript": ">=4.8.4" + "funding": { + "url": "https://github.com/prettier/prettier?sponsor=1" } }, - "node_modules/ts-essentials": { - "version": "10.1.1", + "node_modules/prettier-linter-helpers": { + "version": "1.0.1", "dev": true, "license": "MIT", - "peerDependencies": { - "typescript": ">=4.5.0" + "dependencies": { + "fast-diff": "^1.1.2" }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } + "engines": { + "node": ">=6.0.0" } }, - "node_modules/ts-jest": { - "version": "29.4.6", - "dev": true, + "node_modules/pretty-format": { + "version": "30.2.0", "license": "MIT", "dependencies": { - "bs-logger": "^0.2.6", - "fast-json-stable-stringify": "^2.1.0", - "handlebars": "^4.7.8", - "json5": "^2.2.3", - "lodash.memoize": "^4.1.2", - "make-error": "^1.3.6", - "semver": "^7.7.3", - "type-fest": "^4.41.0", - "yargs-parser": "^21.1.1" - }, - "bin": { - "ts-jest": "cli.js" + "@jest/schemas": "30.0.5", + "ansi-styles": "^5.2.0", + "react-is": "^18.3.1" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || ^18.0.0 || >=20.0.0" - }, - "peerDependencies": { - "@babel/core": ">=7.0.0-beta.0 <8", - "@jest/transform": "^29.0.0 || ^30.0.0", - "@jest/types": "^29.0.0 || ^30.0.0", - "babel-jest": "^29.0.0 || ^30.0.0", - "jest": "^29.0.0 || ^30.0.0", - "jest-util": "^29.0.0 || ^30.0.0", - "typescript": ">=4.3 <6" - }, - "peerDependenciesMeta": { - "@babel/core": { - "optional": true - }, - "@jest/transform": { - "optional": true - }, - "@jest/types": { - "optional": true - }, - "babel-jest": { - "optional": true - }, - "esbuild": { - "optional": true - }, - "jest-util": { - "optional": true - } + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" } }, - "node_modules/ts-jest/node_modules/type-fest": { - "version": "4.41.0", - "dev": true, - "license": "(MIT OR CC0-1.0)", + "node_modules/pretty-format/node_modules/ansi-styles": { + "version": "5.2.0", + "license": "MIT", "engines": { - "node": ">=16" + "node": ">=10" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/ts-node": { - "version": "10.9.2", + "node_modules/printable-characters": { + "version": "1.0.42", + "dev": true, + "license": "Unlicense" + }, + "node_modules/prismjs": { + "version": "1.30.0", "dev": true, "license": "MIT", - "dependencies": { - "@cspotcode/source-map-support": "^0.8.0", - "@tsconfig/node10": "^1.0.7", - "@tsconfig/node12": "^1.0.7", - "@tsconfig/node14": "^1.0.0", - "@tsconfig/node16": "^1.0.2", - "acorn": "^8.4.1", - "acorn-walk": "^8.1.1", - "arg": "^4.1.0", - "create-require": "^1.1.0", - "diff": "^4.0.1", - "make-error": "^1.1.1", - "v8-compile-cache-lib": "^3.0.1", - "yn": "3.1.1" - }, - "bin": { - "ts-node": "dist/bin.js", - "ts-node-cwd": "dist/bin-cwd.js", - "ts-node-esm": "dist/bin-esm.js", - "ts-node-script": "dist/bin-script.js", - "ts-node-transpile-only": "dist/bin-transpile.js", - "ts-script": "dist/bin-script-deprecated.js" - }, - "peerDependencies": { - "@swc/core": ">=1.2.50", - "@swc/wasm": ">=1.2.50", - "@types/node": "*", - "typescript": ">=2.7" - }, - "peerDependenciesMeta": { - "@swc/core": { - "optional": true - }, - "@swc/wasm": { - "optional": true - } + "engines": { + "node": ">=6" } }, - "node_modules/ts-node/node_modules/arg": { - "version": "4.1.3", - "dev": true, - "license": "MIT" - }, - "node_modules/tsconfig-paths": { - "version": "3.15.0", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/json5": "^0.0.29", - "json5": "^1.0.2", - "minimist": "^1.2.6", - "strip-bom": "^3.0.0" - } - }, - "node_modules/tsconfig-paths/node_modules/json5": { - "version": "1.0.2", + "node_modules/process": { + "version": "0.11.10", "dev": true, "license": "MIT", - "dependencies": { - "minimist": "^1.2.0" - }, - "bin": { - "json5": "lib/cli.js" + "engines": { + "node": ">= 0.6.0" } }, - "node_modules/tsconfig-paths/node_modules/strip-bom": { - "version": "3.0.0", + "node_modules/process-nextick-args": { + "version": "2.0.1", "dev": true, - "license": "MIT", - "engines": { - "node": ">=4" - } + "license": "MIT" }, - "node_modules/tslib": { - "version": "2.8.1", - "license": "0BSD" + "node_modules/process-warning": { + "version": "5.0.0", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/fastify" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/fastify" + } + ], + "license": "MIT" }, - "node_modules/tsx": { - "version": "4.21.0", + "node_modules/prop-types": { + "version": "15.8.1", "dev": true, "license": "MIT", "dependencies": { - "esbuild": "~0.27.0", - "get-tsconfig": "^4.7.5" - }, - "bin": { - "tsx": "dist/cli.mjs" - }, - "engines": { - "node": ">=18.0.0" - }, - "optionalDependencies": { - "fsevents": "~2.3.3" + "loose-envify": "^1.4.0", + "object-assign": "^4.1.1", + "react-is": "^16.13.1" } }, - "node_modules/tweetnacl": { - "version": "0.14.5", + "node_modules/prop-types/node_modules/react-is": { + "version": "16.13.1", "dev": true, - "license": "Unlicense" + "license": "MIT" }, - "node_modules/type-check": { - "version": "0.4.0", + "node_modules/proper-lockfile": { + "version": "4.1.2", "dev": true, "license": "MIT", "dependencies": { - "prelude-ls": "^1.2.1" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/type-detect": { - "version": "4.0.8", - "license": "MIT", - "engines": { - "node": ">=4" + "graceful-fs": "^4.2.4", + "retry": "^0.12.0", + "signal-exit": "^3.0.2" } }, - "node_modules/type-fest": { - "version": "0.21.3", + "node_modules/properties-reader": { + "version": "2.3.0", "dev": true, - "license": "(MIT OR CC0-1.0)", + "license": "MIT", + "dependencies": { + "mkdirp": "^1.0.4" + }, "engines": { - "node": ">=10" + "node": ">=14" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "type": "github", + "url": "https://github.com/steveukx/properties?sponsor=1" } }, - "node_modules/type-is": { - "version": "2.0.1", - "license": "MIT", + "node_modules/protobufjs": { + "version": "7.5.4", + "dev": true, + "hasInstallScript": true, + "license": "BSD-3-Clause", "dependencies": { - "content-type": "^1.0.5", - "media-typer": "^1.1.0", - "mime-types": "^3.0.0" + "@protobufjs/aspromise": "^1.1.2", + "@protobufjs/base64": "^1.1.2", + "@protobufjs/codegen": "^2.0.4", + "@protobufjs/eventemitter": "^1.1.0", + "@protobufjs/fetch": "^1.1.0", + "@protobufjs/float": "^1.0.2", + "@protobufjs/inquire": "^1.1.0", + "@protobufjs/path": "^1.1.2", + "@protobufjs/pool": "^1.1.0", + "@protobufjs/utf8": "^1.1.0", + "@types/node": ">=13.7.0", + "long": "^5.0.0" }, "engines": { - "node": ">= 0.6" - } - }, - "node_modules/type-is/node_modules/mime-db": { - "version": "1.54.0", - "license": "MIT", - "engines": { - "node": ">= 0.6" + "node": ">=12.0.0" } }, - "node_modules/type-is/node_modules/mime-types": { - "version": "3.0.2", + "node_modules/proxy-addr": { + "version": "2.0.7", "license": "MIT", "dependencies": { - "mime-db": "^1.54.0" + "forwarded": "0.2.0", + "ipaddr.js": "1.9.1" }, "engines": { - "node": ">=18" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/express" + "node": ">= 0.10" } }, - "node_modules/typed-array-buffer": { - "version": "1.0.3", + "node_modules/proxy-agent": { + "version": "6.5.0", "dev": true, "license": "MIT", "dependencies": { - "call-bound": "^1.0.3", - "es-errors": "^1.3.0", - "is-typed-array": "^1.1.14" + "agent-base": "^7.1.2", + "debug": "^4.3.4", + "http-proxy-agent": "^7.0.1", + "https-proxy-agent": "^7.0.6", + "lru-cache": "^7.14.1", + "pac-proxy-agent": "^7.1.0", + "proxy-from-env": "^1.1.0", + "socks-proxy-agent": "^8.0.5" }, "engines": { - "node": ">= 0.4" + "node": ">= 14" } }, - "node_modules/typed-array-byte-length": { - "version": "1.0.3", + "node_modules/proxy-agent/node_modules/lru-cache": { + "version": "7.18.3", "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.8", - "for-each": "^0.3.3", - "gopd": "^1.2.0", - "has-proto": "^1.2.0", - "is-typed-array": "^1.1.14" - }, + "license": "ISC", "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">=12" } }, - "node_modules/typed-array-byte-offset": { - "version": "1.0.4", - "dev": true, + "node_modules/proxy-from-env": { + "version": "1.1.0", + "license": "MIT" + }, + "node_modules/pump": { + "version": "3.0.3", "license": "MIT", "dependencies": { - "available-typed-arrays": "^1.0.7", - "call-bind": "^1.0.8", - "for-each": "^0.3.3", - "gopd": "^1.2.0", - "has-proto": "^1.2.0", - "is-typed-array": "^1.1.15", - "reflect.getprototypeof": "^1.0.9" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "end-of-stream": "^1.1.0", + "once": "^1.3.1" } }, - "node_modules/typed-array-length": { - "version": "1.0.7", + "node_modules/punycode": { + "version": "1.3.2", + "license": "MIT" + }, + "node_modules/pure-rand": { + "version": "7.0.1", "dev": true, - "license": "MIT", + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/dubzzz" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/fast-check" + } + ], + "license": "MIT" + }, + "node_modules/qs": { + "version": "6.14.1", + "license": "BSD-3-Clause", "dependencies": { - "call-bind": "^1.0.7", - "for-each": "^0.3.3", - "gopd": "^1.0.1", - "is-typed-array": "^1.1.13", - "possible-typed-array-names": "^1.0.0", - "reflect.getprototypeof": "^1.0.6" + "side-channel": "^1.1.0" }, "engines": { - "node": ">= 0.4" + "node": ">=0.6" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/typescript": { - "version": "5.9.3", - "dev": true, - "license": "Apache-2.0", - "bin": { - "tsc": "bin/tsc", - "tsserver": "bin/tsserver" - }, + "node_modules/querystring": { + "version": "0.2.0", "engines": { - "node": ">=14.17" + "node": ">=0.4.x" } }, - "node_modules/typescript-eslint": { - "version": "8.54.0", + "node_modules/queue-microtask": { + "version": "1.2.3", "dev": true, - "license": "MIT", - "dependencies": { - "@typescript-eslint/eslint-plugin": "8.54.0", - "@typescript-eslint/parser": "8.54.0", - "@typescript-eslint/typescript-estree": "8.54.0", - "@typescript-eslint/utils": "8.54.0" - }, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "node_modules/quick-format-unescaped": { + "version": "4.0.4", + "license": "MIT" + }, + "node_modules/ramda": { + "version": "0.32.0", + "license": "MIT", "funding": { "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "^8.57.0 || ^9.0.0", - "typescript": ">=4.8.4 <6.0.0" + "url": "https://opencollective.com/ramda" } }, - "node_modules/uglify-js": { - "version": "3.19.3", - "dev": true, - "license": "BSD-2-Clause", - "optional": true, - "bin": { - "uglifyjs": "bin/uglifyjs" + "node_modules/randexp": { + "version": "0.5.3", + "license": "MIT", + "dependencies": { + "drange": "^1.0.2", + "ret": "^0.2.0" }, "engines": { - "node": ">=0.8.0" + "node": ">=4" } }, - "node_modules/uid": { - "version": "2.0.2", + "node_modules/randombytes": { + "version": "2.1.0", "dev": true, "license": "MIT", "dependencies": { - "@lukeed/csprng": "^1.0.0" - }, - "engines": { - "node": ">=8" + "safe-buffer": "^5.1.0" } }, - "node_modules/uint8array-extras": { - "version": "1.5.0", - "dev": true, + "node_modules/range-parser": { + "version": "1.2.1", "license": "MIT", "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">= 0.6" } }, - "node_modules/unbox-primitive": { - "version": "1.1.0", - "dev": true, + "node_modules/raw-body": { + "version": "3.0.2", "license": "MIT", "dependencies": { - "call-bound": "^1.0.3", - "has-bigints": "^1.0.2", - "has-symbols": "^1.1.0", - "which-boxed-primitive": "^1.1.1" + "bytes": "~3.1.2", + "http-errors": "~2.0.1", + "iconv-lite": "~0.7.0", + "unpipe": "~1.0.0" }, "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">= 0.10" } }, - "node_modules/underscore": { - "version": "1.13.7", - "license": "MIT" - }, - "node_modules/undici": { - "version": "7.21.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=20.18.1" + "node_modules/rc": { + "version": "1.2.8", + "license": "(BSD-2-Clause OR MIT OR Apache-2.0)", + "dependencies": { + "deep-extend": "^0.6.0", + "ini": "~1.3.0", + "minimist": "^1.2.0", + "strip-json-comments": "~2.0.1" + }, + "bin": { + "rc": "cli.js" } }, - "node_modules/universalify": { + "node_modules/rc/node_modules/strip-json-comments": { "version": "2.0.1", - "dev": true, "license": "MIT", "engines": { - "node": ">= 10.0.0" + "node": ">=0.10.0" } }, - "node_modules/unpipe": { - "version": "1.0.0", + "node_modules/react": { + "version": "19.2.4", + "dev": true, "license": "MIT", "engines": { - "node": ">= 0.8" + "node": ">=0.10.0" } }, - "node_modules/unrs-resolver": { - "version": "1.11.1", + "node_modules/react-dom": { + "version": "19.2.4", "dev": true, - "hasInstallScript": true, "license": "MIT", "dependencies": { - "napi-postinstall": "^0.3.0" - }, - "funding": { - "url": "https://opencollective.com/unrs-resolver" + "scheduler": "^0.27.0" }, - "optionalDependencies": { - "@unrs/resolver-binding-android-arm-eabi": "1.11.1", - "@unrs/resolver-binding-android-arm64": "1.11.1", - "@unrs/resolver-binding-darwin-arm64": "1.11.1", - "@unrs/resolver-binding-darwin-x64": "1.11.1", - "@unrs/resolver-binding-freebsd-x64": "1.11.1", - "@unrs/resolver-binding-linux-arm-gnueabihf": "1.11.1", - "@unrs/resolver-binding-linux-arm-musleabihf": "1.11.1", - "@unrs/resolver-binding-linux-arm64-gnu": "1.11.1", - "@unrs/resolver-binding-linux-arm64-musl": "1.11.1", - "@unrs/resolver-binding-linux-ppc64-gnu": "1.11.1", - "@unrs/resolver-binding-linux-riscv64-gnu": "1.11.1", - "@unrs/resolver-binding-linux-riscv64-musl": "1.11.1", - "@unrs/resolver-binding-linux-s390x-gnu": "1.11.1", - "@unrs/resolver-binding-linux-x64-gnu": "1.11.1", - "@unrs/resolver-binding-linux-x64-musl": "1.11.1", - "@unrs/resolver-binding-wasm32-wasi": "1.11.1", - "@unrs/resolver-binding-win32-arm64-msvc": "1.11.1", - "@unrs/resolver-binding-win32-ia32-msvc": "1.11.1", - "@unrs/resolver-binding-win32-x64-msvc": "1.11.1" + "peerDependencies": { + "react": "^19.2.4" } }, - "node_modules/update-browserslist-db": { - "version": "1.2.3", - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/browserslist" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], + "node_modules/react-is": { + "version": "19.0.0", + "license": "MIT" + }, + "node_modules/react-tabs": { + "version": "6.1.0", + "dev": true, "license": "MIT", "dependencies": { - "escalade": "^3.2.0", - "picocolors": "^1.1.1" - }, - "bin": { - "update-browserslist-db": "cli.js" + "clsx": "^2.0.0", + "prop-types": "^15.5.0" }, "peerDependencies": { - "browserslist": ">= 4.21.0" + "react": "^18.0.0 || ^19.0.0" } }, - "node_modules/update-check": { - "version": "1.5.4", + "node_modules/readable-stream": { + "version": "3.6.2", + "dev": true, "license": "MIT", "dependencies": { - "registry-auth-token": "3.3.2", - "registry-url": "3.1.0" + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" } }, - "node_modules/uri-js": { - "version": "4.4.1", - "license": "BSD-2-Clause", + "node_modules/readdir-glob": { + "version": "1.1.3", + "dev": true, + "license": "Apache-2.0", "dependencies": { - "punycode": "^2.1.0" + "minimatch": "^5.1.0" } }, - "node_modules/uri-js/node_modules/punycode": { - "version": "2.3.1", - "license": "MIT", + "node_modules/readdir-glob/node_modules/minimatch": { + "version": "5.1.6", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" + }, "engines": { - "node": ">=6" + "node": ">=10" } }, - "node_modules/urijs": { - "version": "1.19.11", + "node_modules/readdirp": { + "version": "3.6.0", "dev": true, - "license": "MIT" - }, - "node_modules/url": { - "version": "0.10.3", "license": "MIT", "dependencies": { - "punycode": "1.3.2", - "querystring": "0.2.0" + "picomatch": "^2.2.1" + }, + "engines": { + "node": ">=8.10.0" } }, - "node_modules/url-template": { - "version": "2.0.8", - "dev": true, - "license": "BSD" - }, - "node_modules/use-sync-external-store": { - "version": "1.6.0", + "node_modules/readdirp/node_modules/picomatch": { + "version": "2.3.1", "dev": true, "license": "MIT", - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" } }, - "node_modules/util": { - "version": "0.12.5", + "node_modules/real-require": { + "version": "0.2.0", "license": "MIT", - "dependencies": { - "inherits": "^2.0.3", - "is-arguments": "^1.0.4", - "is-generator-function": "^1.0.7", - "is-typed-array": "^1.1.3", - "which-typed-array": "^1.1.2" + "engines": { + "node": ">= 12.13.0" } }, - "node_modules/util-deprecate": { - "version": "1.0.2", - "dev": true, - "license": "MIT" - }, - "node_modules/utility-types": { - "version": "3.11.0", + "node_modules/redoc": { + "version": "2.4.0", "dev": true, "license": "MIT", + "dependencies": { + "@redocly/openapi-core": "^1.4.0", + "classnames": "^2.3.2", + "decko": "^1.2.0", + "dompurify": "^3.0.6", + "eventemitter3": "^5.0.1", + "json-pointer": "^0.6.2", + "lunr": "^2.3.9", + "mark.js": "^8.11.1", + "marked": "^4.3.0", + "mobx-react": "^9.1.1", + "openapi-sampler": "^1.5.0", + "path-browserify": "^1.0.1", + "perfect-scrollbar": "^1.5.5", + "polished": "^4.2.2", + "prismjs": "^1.29.0", + "prop-types": "^15.8.1", + "react-tabs": "^6.0.2", + "slugify": "~1.4.7", + "stickyfill": "^1.1.1", + "swagger2openapi": "^7.0.8", + "url-template": "^2.0.8" + }, "engines": { - "node": ">= 4" + "node": ">=6.9", + "npm": ">=3.0.0" + }, + "peerDependencies": { + "core-js": "^3.1.4", + "mobx": "^6.0.4", + "react": "^16.8.4 || ^17.0.0 || ^18.0.0 || ^19.0.0", + "react-dom": "^16.8.4 || ^17.0.0 || ^18.0.0 || ^19.0.0", + "styled-components": "^4.1.1 || ^5.1.1 || ^6.0.5" } }, - "node_modules/utils-merge": { - "version": "1.0.1", - "license": "MIT", - "engines": { - "node": ">= 0.4.0" - } + "node_modules/redoc/node_modules/eventemitter3": { + "version": "5.0.4", + "dev": true, + "license": "MIT" }, - "node_modules/uuid": { - "version": "8.0.0", + "node_modules/refa": { + "version": "0.12.1", + "dev": true, "license": "MIT", - "bin": { - "uuid": "dist/bin/uuid" + "dependencies": { + "@eslint-community/regexpp": "^4.8.0" + }, + "engines": { + "node": "^12.0.0 || ^14.0.0 || >=16.0.0" } }, - "node_modules/v8-compile-cache-lib": { - "version": "3.0.1", + "node_modules/reflect-metadata": { + "version": "0.2.2", "dev": true, - "license": "MIT" + "license": "Apache-2.0" }, - "node_modules/v8-to-istanbul": { - "version": "9.3.0", + "node_modules/reflect.getprototypeof": { + "version": "1.0.10", "dev": true, - "license": "ISC", + "license": "MIT", "dependencies": { - "@jridgewell/trace-mapping": "^0.3.12", - "@types/istanbul-lib-coverage": "^2.0.1", - "convert-source-map": "^2.0.0" + "call-bind": "^1.0.8", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.9", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0", + "get-intrinsic": "^1.2.7", + "get-proto": "^1.0.1", + "which-builtin-type": "^1.2.1" }, "engines": { - "node": ">=10.12.0" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/validate-npm-package-name": { - "version": "3.0.0", + "node_modules/reftools": { + "version": "1.1.9", "dev": true, - "license": "ISC", - "dependencies": { - "builtins": "^1.0.3" + "license": "BSD-3-Clause", + "funding": { + "url": "https://github.com/Mermade/oas-kit?sponsor=1" } }, - "node_modules/vary": { - "version": "1.1.2", + "node_modules/regexp-ast-analysis": { + "version": "0.7.1", + "dev": true, "license": "MIT", + "dependencies": { + "@eslint-community/regexpp": "^4.8.0", + "refa": "^0.12.1" + }, "engines": { - "node": ">= 0.8" + "node": "^12.0.0 || ^14.0.0 || >=16.0.0" } }, - "node_modules/vscode-json-languageservice": { - "version": "4.2.1", + "node_modules/regexp-tree": { + "version": "0.1.27", "dev": true, "license": "MIT", - "dependencies": { - "jsonc-parser": "^3.0.0", - "vscode-languageserver-textdocument": "^1.0.3", - "vscode-languageserver-types": "^3.16.0", - "vscode-nls": "^5.0.0", - "vscode-uri": "^3.0.3" + "bin": { + "regexp-tree": "bin/regexp-tree" } }, - "node_modules/vscode-languageserver-textdocument": { - "version": "1.0.12", - "dev": true, - "license": "MIT" - }, - "node_modules/vscode-languageserver-types": { - "version": "3.17.5", - "dev": true, - "license": "MIT" - }, - "node_modules/vscode-nls": { - "version": "5.2.0", - "dev": true, - "license": "MIT" - }, - "node_modules/vscode-uri": { - "version": "3.1.0", - "dev": true, - "license": "MIT" - }, - "node_modules/w3c-xmlserializer": { - "version": "5.0.0", + "node_modules/regexp.prototype.flags": { + "version": "1.5.4", "dev": true, "license": "MIT", "dependencies": { - "xml-name-validator": "^5.0.0" + "call-bind": "^1.0.8", + "define-properties": "^1.2.1", + "es-errors": "^1.3.0", + "get-proto": "^1.0.1", + "gopd": "^1.2.0", + "set-function-name": "^2.0.2" }, "engines": { - "node": ">=18" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/walker": { - "version": "1.0.8", - "license": "Apache-2.0", + "node_modules/registry-auth-token": { + "version": "3.3.2", + "license": "MIT", "dependencies": { - "makeerror": "1.0.12" + "rc": "^1.1.6", + "safe-buffer": "^5.0.1" } }, - "node_modules/watchpack": { - "version": "2.5.1", + "node_modules/registry-url": { + "version": "3.1.0", "license": "MIT", "dependencies": { - "glob-to-regexp": "^0.4.1", - "graceful-fs": "^4.1.2" + "rc": "^1.0.1" }, "engines": { - "node": ">=10.13.0" + "node": ">=0.10.0" } }, - "node_modules/wcwidth": { - "version": "1.0.1", + "node_modules/regjsparser": { + "version": "0.13.0", "dev": true, - "license": "MIT", + "license": "BSD-2-Clause", "dependencies": { - "defaults": "^1.0.3" + "jsesc": "~3.1.0" + }, + "bin": { + "regjsparser": "bin/parser" } }, - "node_modules/webidl-conversions": { - "version": "7.0.0", + "node_modules/require-directory": { + "version": "2.1.1", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/require-from-string": { + "version": "2.0.2", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/requires-port": { + "version": "1.0.0", + "license": "MIT" + }, + "node_modules/reserved": { + "version": "0.1.2", "dev": true, - "license": "BSD-2-Clause", "engines": { - "node": ">=12" + "node": ">=0.8" } }, - "node_modules/whatwg-encoding": { - "version": "3.1.1", + "node_modules/resolve": { + "version": "1.22.11", "dev": true, "license": "MIT", "dependencies": { - "iconv-lite": "0.6.3" + "is-core-module": "^2.16.1", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" }, "engines": { - "node": ">=18" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/whatwg-encoding/node_modules/iconv-lite": { - "version": "0.6.3", + "node_modules/resolve-cwd": { + "version": "3.0.0", "dev": true, "license": "MIT", "dependencies": { - "safer-buffer": ">= 2.1.2 < 3.0.0" + "resolve-from": "^5.0.0" }, "engines": { - "node": ">=0.10.0" + "node": ">=8" } }, - "node_modules/whatwg-mimetype": { - "version": "4.0.0", + "node_modules/resolve-cwd/node_modules/resolve-from": { + "version": "5.0.0", "dev": true, "license": "MIT", "engines": { - "node": ">=18" + "node": ">=8" } }, - "node_modules/whatwg-url": { - "version": "14.2.0", + "node_modules/resolve-from": { + "version": "4.0.0", "dev": true, "license": "MIT", - "dependencies": { - "tr46": "^5.1.0", - "webidl-conversions": "^7.0.0" - }, "engines": { - "node": ">=18" + "node": ">=4" } }, - "node_modules/which": { - "version": "2.0.2", - "license": "ISC", - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "node-which": "bin/node-which" - }, - "engines": { - "node": ">= 8" + "node_modules/resolve-pkg-maps": { + "version": "1.0.0", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/privatenumber/resolve-pkg-maps?sponsor=1" } }, - "node_modules/which-boxed-primitive": { - "version": "1.1.1", + "node_modules/restore-cursor": { + "version": "3.1.0", "dev": true, "license": "MIT", "dependencies": { - "is-bigint": "^1.1.0", - "is-boolean-object": "^1.2.1", - "is-number-object": "^1.1.1", - "is-string": "^1.1.1", - "is-symbol": "^1.1.1" + "onetime": "^5.1.0", + "signal-exit": "^3.0.2" }, "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">=8" } }, - "node_modules/which-builtin-type": { - "version": "1.2.1", - "dev": true, + "node_modules/ret": { + "version": "0.2.2", "license": "MIT", - "dependencies": { - "call-bound": "^1.0.2", - "function.prototype.name": "^1.1.6", - "has-tostringtag": "^1.0.2", - "is-async-function": "^2.0.0", - "is-date-object": "^1.1.0", - "is-finalizationregistry": "^1.1.0", - "is-generator-function": "^1.0.10", - "is-regex": "^1.2.1", - "is-weakref": "^1.0.2", - "isarray": "^2.0.5", - "which-boxed-primitive": "^1.1.0", - "which-collection": "^1.0.2", - "which-typed-array": "^1.1.16" - }, "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">=4" } }, - "node_modules/which-builtin-type/node_modules/isarray": { - "version": "2.0.5", + "node_modules/retry": { + "version": "0.12.0", "dev": true, - "license": "MIT" + "license": "MIT", + "engines": { + "node": ">= 4" + } }, - "node_modules/which-collection": { - "version": "1.0.2", + "node_modules/reusify": { + "version": "1.1.0", "dev": true, "license": "MIT", - "dependencies": { - "is-map": "^2.0.3", - "is-set": "^2.0.3", - "is-weakmap": "^2.0.2", - "is-weakset": "^2.0.3" - }, "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "iojs": ">=1.0.0", + "node": ">=0.10.0" } }, - "node_modules/which-typed-array": { - "version": "1.1.20", + "node_modules/rollup": { + "version": "2.79.2", + "dev": true, "license": "MIT", - "dependencies": { - "available-typed-arrays": "^1.0.7", - "call-bind": "^1.0.8", - "call-bound": "^1.0.4", - "for-each": "^0.3.5", - "get-proto": "^1.0.1", - "gopd": "^1.2.0", - "has-tostringtag": "^1.0.2" + "bin": { + "rollup": "dist/bin/rollup" }, "engines": { - "node": ">= 0.4" + "node": ">=10.0.0" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "optionalDependencies": { + "fsevents": "~2.3.2" } }, - "node_modules/widest-line": { - "version": "4.0.1", + "node_modules/router": { + "version": "2.2.0", "license": "MIT", "dependencies": { - "string-width": "^5.0.1" + "debug": "^4.4.0", + "depd": "^2.0.0", + "is-promise": "^4.0.0", + "parseurl": "^1.3.3", + "path-to-regexp": "^8.0.0" }, "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">= 18" } }, - "node_modules/widest-line/node_modules/ansi-regex": { - "version": "6.2.2", + "node_modules/rrweb-cssom": { + "version": "0.8.0", + "dev": true, + "license": "MIT" + }, + "node_modules/run-async": { + "version": "2.4.1", + "dev": true, "license": "MIT", "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/ansi-regex?sponsor=1" + "node": ">=0.12.0" } }, - "node_modules/widest-line/node_modules/string-width": { - "version": "5.1.2", + "node_modules/run-parallel": { + "version": "1.2.0", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], "license": "MIT", "dependencies": { - "eastasianwidth": "^0.2.0", - "emoji-regex": "^9.2.2", - "strip-ansi": "^7.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "queue-microtask": "^1.2.2" } }, - "node_modules/widest-line/node_modules/strip-ansi": { - "version": "7.1.2", + "node_modules/rxjs": { + "version": "7.8.2", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.1.0" + } + }, + "node_modules/safe-array-concat": { + "version": "1.1.3", + "dev": true, "license": "MIT", "dependencies": { - "ansi-regex": "^6.0.1" + "call-bind": "^1.0.8", + "call-bound": "^1.0.2", + "get-intrinsic": "^1.2.6", + "has-symbols": "^1.1.0", + "isarray": "^2.0.5" }, "engines": { - "node": ">=12" + "node": ">=0.4" }, "funding": { - "url": "https://github.com/chalk/strip-ansi?sponsor=1" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/word-wrap": { - "version": "1.2.5", + "node_modules/safe-array-concat/node_modules/isarray": { + "version": "2.0.5", + "dev": true, + "license": "MIT" + }, + "node_modules/safe-buffer": { + "version": "5.2.1", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "node_modules/safe-push-apply": { + "version": "1.0.0", "dev": true, "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "isarray": "^2.0.5" + }, "engines": { - "node": ">=0.10.0" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/wordwrap": { - "version": "1.0.0", + "node_modules/safe-push-apply/node_modules/isarray": { + "version": "2.0.5", "dev": true, "license": "MIT" }, - "node_modules/wrap-ansi": { - "version": "6.2.0", + "node_modules/safe-regex": { + "version": "2.1.1", "dev": true, "license": "MIT", "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=8" + "regexp-tree": "~0.1.1" } }, - "node_modules/wrap-ansi-cjs": { - "name": "wrap-ansi", - "version": "7.0.0", - "dev": true, + "node_modules/safe-regex-test": { + "version": "1.1.0", "license": "MIT", "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "is-regex": "^1.2.1" }, "engines": { - "node": ">=10" + "node": ">= 0.4" }, "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/wrappy": { - "version": "1.0.2", - "license": "ISC" - }, - "node_modules/write-file-atomic": { - "version": "5.0.1", + "node_modules/safe-stable-stringify": { + "version": "2.5.0", + "license": "MIT", + "engines": { + "node": ">=10" + } + }, + "node_modules/safer-buffer": { + "version": "2.1.2", + "license": "MIT" + }, + "node_modules/sax": { + "version": "1.2.1", + "license": "ISC" + }, + "node_modules/saxes": { + "version": "6.0.0", + "dev": true, "license": "ISC", "dependencies": { - "imurmurhash": "^0.1.4", - "signal-exit": "^4.0.1" + "xmlchars": "^2.2.0" }, "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + "node": ">=v12.22.7" } }, - "node_modules/ws": { - "version": "8.19.0", + "node_modules/scheduler": { + "version": "0.27.0", + "dev": true, + "license": "MIT" + }, + "node_modules/scslre": { + "version": "0.3.0", "dev": true, "license": "MIT", - "engines": { - "node": ">=10.0.0" - }, - "peerDependencies": { - "bufferutil": "^4.0.1", - "utf-8-validate": ">=5.0.2" + "dependencies": { + "@eslint-community/regexpp": "^4.8.0", + "refa": "^0.12.0", + "regexp-ast-analysis": "^0.7.0" }, - "peerDependenciesMeta": { - "bufferutil": { - "optional": true + "engines": { + "node": "^14.0.0 || >=16.0.0" + } + }, + "node_modules/secure-json-parse": { + "version": "4.1.0", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/fastify" }, - "utf-8-validate": { - "optional": true + { + "type": "opencollective", + "url": "https://opencollective.com/fastify" } - } + ], + "license": "BSD-3-Clause" }, - "node_modules/xml-name-validator": { - "version": "5.0.0", - "dev": true, - "license": "Apache-2.0", + "node_modules/semver": { + "version": "7.7.3", + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, "engines": { - "node": ">=18" + "node": ">=10" } }, - "node_modules/xml2js": { - "version": "0.6.2", + "node_modules/send": { + "version": "1.2.1", "license": "MIT", "dependencies": { - "sax": ">=0.6.0", - "xmlbuilder": "~11.0.0" + "debug": "^4.4.3", + "encodeurl": "^2.0.0", + "escape-html": "^1.0.3", + "etag": "^1.8.1", + "fresh": "^2.0.0", + "http-errors": "^2.0.1", + "mime-types": "^3.0.2", + "ms": "^2.1.3", + "on-finished": "^2.4.1", + "range-parser": "^1.2.1", + "statuses": "^2.0.2" }, "engines": { - "node": ">=4.0.0" + "node": ">= 18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" } }, - "node_modules/xml2js/node_modules/xmlbuilder": { - "version": "11.0.1", + "node_modules/serve": { + "version": "14.2.5", "license": "MIT", + "dependencies": { + "@zeit/schemas": "2.36.0", + "ajv": "8.12.0", + "arg": "5.0.2", + "boxen": "7.0.0", + "chalk": "5.0.1", + "chalk-template": "0.4.0", + "clipboardy": "3.0.0", + "compression": "1.8.1", + "is-port-reachable": "4.0.0", + "serve-handler": "6.1.6", + "update-check": "1.5.4" + }, + "bin": { + "serve": "build/main.js" + }, "engines": { - "node": ">=4.0" + "node": ">= 14" } }, - "node_modules/xmlbuilder": { - "version": "15.0.0", - "dev": true, + "node_modules/serve-handler": { + "version": "6.1.6", "license": "MIT", - "engines": { - "node": ">=8.0" + "dependencies": { + "bytes": "3.0.0", + "content-disposition": "0.5.2", + "mime-types": "2.1.18", + "minimatch": "3.1.2", + "path-is-inside": "1.0.2", + "path-to-regexp": "3.3.0", + "range-parser": "1.2.0" } }, - "node_modules/xmlchars": { - "version": "2.2.0", - "dev": true, - "license": "MIT" + "node_modules/serve-handler/node_modules/brace-expansion": { + "version": "1.1.12", + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } }, - "node_modules/y18n": { - "version": "5.0.8", - "license": "ISC", + "node_modules/serve-handler/node_modules/bytes": { + "version": "3.0.0", + "license": "MIT", "engines": { - "node": ">=10" + "node": ">= 0.8" } }, - "node_modules/yallist": { - "version": "3.1.1", - "license": "ISC" - }, - "node_modules/yaml": { - "version": "2.8.2", - "dev": true, - "license": "ISC", - "bin": { - "yaml": "bin.mjs" - }, + "node_modules/serve-handler/node_modules/content-disposition": { + "version": "0.5.2", + "license": "MIT", "engines": { - "node": ">= 14.6" - }, - "funding": { - "url": "https://github.com/sponsors/eemeli" + "node": ">= 0.6" } }, - "node_modules/yaml-ast-parser": { - "version": "0.0.43", - "dev": true, - "license": "Apache-2.0" + "node_modules/serve-handler/node_modules/mime-db": { + "version": "1.33.0", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } }, - "node_modules/yargs": { - "version": "17.7.2", + "node_modules/serve-handler/node_modules/mime-types": { + "version": "2.1.18", "license": "MIT", "dependencies": { - "cliui": "^8.0.1", - "escalade": "^3.1.1", - "get-caller-file": "^2.0.5", - "require-directory": "^2.1.1", - "string-width": "^4.2.3", - "y18n": "^5.0.5", - "yargs-parser": "^21.1.1" + "mime-db": "~1.33.0" }, "engines": { - "node": ">=12" + "node": ">= 0.6" } }, - "node_modules/yargs-parser": { - "version": "21.1.1", + "node_modules/serve-handler/node_modules/minimatch": { + "version": "3.1.2", "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, "engines": { - "node": ">=12" + "node": "*" } }, - "node_modules/yn": { - "version": "3.1.1", - "dev": true, + "node_modules/serve-handler/node_modules/path-to-regexp": { + "version": "3.3.0", + "license": "MIT" + }, + "node_modules/serve-handler/node_modules/range-parser": { + "version": "1.2.0", "license": "MIT", "engines": { - "node": ">=6" + "node": ">= 0.6" } }, - "node_modules/yocto-queue": { - "version": "0.1.0", - "dev": true, + "node_modules/serve-static": { + "version": "2.2.1", "license": "MIT", + "dependencies": { + "encodeurl": "^2.0.0", + "escape-html": "^1.0.3", + "parseurl": "^1.3.3", + "send": "^1.2.0" + }, "engines": { - "node": ">=10" + "node": ">= 18" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "type": "opencollective", + "url": "https://opencollective.com/express" } }, - "node_modules/zip-stream": { - "version": "6.0.1", - "dev": true, + "node_modules/serve/node_modules/ajv": { + "version": "8.12.0", "license": "MIT", "dependencies": { - "archiver-utils": "^5.0.0", - "compress-commons": "^6.0.2", - "readable-stream": "^4.0.0" + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" }, - "engines": { - "node": ">= 14" + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" } }, - "node_modules/zip-stream/node_modules/buffer": { - "version": "6.0.3", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], + "node_modules/serve/node_modules/chalk": { + "version": "5.0.1", "license": "MIT", - "dependencies": { - "base64-js": "^1.3.1", - "ieee754": "^1.2.1" + "engines": { + "node": "^12.17.0 || ^14.13 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/zip-stream/node_modules/events": { - "version": "3.3.0", - "dev": true, + "node_modules/set-function-length": { + "version": "1.2.2", "license": "MIT", + "dependencies": { + "define-data-property": "^1.1.4", + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.4", + "gopd": "^1.0.1", + "has-property-descriptors": "^1.0.2" + }, "engines": { - "node": ">=0.8.x" + "node": ">= 0.4" } }, - "node_modules/zip-stream/node_modules/ieee754": { - "version": "1.2.1", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "BSD-3-Clause" - }, - "node_modules/zip-stream/node_modules/readable-stream": { - "version": "4.7.0", + "node_modules/set-function-name": { + "version": "2.0.2", "dev": true, "license": "MIT", "dependencies": { - "abort-controller": "^3.0.0", - "buffer": "^6.0.3", - "events": "^3.3.0", - "process": "^0.11.10", - "string_decoder": "^1.3.0" + "define-data-property": "^1.1.4", + "es-errors": "^1.3.0", + "functions-have-names": "^1.2.3", + "has-property-descriptors": "^1.0.2" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - } - }, - "node_modules/zod": { - "version": "4.3.6", - "license": "MIT", - "funding": { - "url": "https://github.com/sponsors/colinhacks" + "node": ">= 0.4" } }, - "node_modules/zod-mermaid": { - "version": "1.3.0", + "node_modules/set-proto": { + "version": "1.0.0", + "dev": true, "license": "MIT", "dependencies": { - "zod": "^4.0.5" + "dunder-proto": "^1.0.1", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0" }, "engines": { - "node": ">=18.0.0" + "node": ">= 0.4" } }, - "pact-contracts": { - "name": "@nhsdigital/notify-supplier-api-consumer-contracts", - "version": "1.0.1", + "node_modules/setprototypeof": { + "version": "1.2.0", + "license": "ISC" + }, + "node_modules/shallowequal": { + "version": "1.1.0", + "dev": true, "license": "MIT" }, - "scripts/utilities/letter-test-data": { - "name": "nhs-notify-supplier-api-letter-test-data-utility", - "version": "0.0.1", + "node_modules/shebang-command": { + "version": "2.0.0", + "license": "MIT", "dependencies": { - "@aws-sdk/client-dynamodb": "^3.984.0", - "@aws-sdk/client-s3": "^3.858.0", - "@aws-sdk/lib-dynamodb": "^3.858.0", - "@internal/datastore": "*", - "@jest/globals": "^30.2.0", - "esbuild": "^0.25.11", - "pino": "^10.3.0", - "yargs": "^17.7.2" + "shebang-regex": "^3.0.0" }, - "devDependencies": { - "@tsconfig/node22": "^22.0.2", - "@types/jest": "^30.0.0", - "jest": "^30.2.0", - "jest-mock-extended": "^4.0.0", - "typescript": "^5.9.3" + "engines": { + "node": ">=8" } }, - "scripts/utilities/letter-test-data/node_modules/@esbuild/linux-x64": { - "version": "0.25.12", - "cpu": [ - "x64" - ], + "node_modules/shebang-regex": { + "version": "3.0.0", "license": "MIT", - "optional": true, - "os": [ - "linux" - ], "engines": { - "node": ">=18" + "node": ">=8" } }, - "scripts/utilities/letter-test-data/node_modules/esbuild": { - "version": "0.25.12", - "hasInstallScript": true, + "node_modules/shell-quote": { + "version": "1.8.3", + "dev": true, "license": "MIT", - "bin": { - "esbuild": "bin/esbuild" - }, "engines": { - "node": ">=18" + "node": ">= 0.4" }, - "optionalDependencies": { - "@esbuild/aix-ppc64": "0.25.12", - "@esbuild/android-arm": "0.25.12", - "@esbuild/android-arm64": "0.25.12", - "@esbuild/android-x64": "0.25.12", - "@esbuild/darwin-arm64": "0.25.12", - "@esbuild/darwin-x64": "0.25.12", - "@esbuild/freebsd-arm64": "0.25.12", - "@esbuild/freebsd-x64": "0.25.12", - "@esbuild/linux-arm": "0.25.12", - "@esbuild/linux-arm64": "0.25.12", - "@esbuild/linux-ia32": "0.25.12", - "@esbuild/linux-loong64": "0.25.12", - "@esbuild/linux-mips64el": "0.25.12", - "@esbuild/linux-ppc64": "0.25.12", - "@esbuild/linux-riscv64": "0.25.12", - "@esbuild/linux-s390x": "0.25.12", - "@esbuild/linux-x64": "0.25.12", - "@esbuild/netbsd-arm64": "0.25.12", - "@esbuild/netbsd-x64": "0.25.12", - "@esbuild/openbsd-arm64": "0.25.12", - "@esbuild/openbsd-x64": "0.25.12", - "@esbuild/openharmony-arm64": "0.25.12", - "@esbuild/sunos-x64": "0.25.12", - "@esbuild/win32-arm64": "0.25.12", - "@esbuild/win32-ia32": "0.25.12", - "@esbuild/win32-x64": "0.25.12" + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "scripts/utilities/letter-test-data/node_modules/pino": { - "version": "9.14.0", + "node_modules/should": { + "version": "13.2.3", + "dev": true, "license": "MIT", "dependencies": { - "@pinojs/redact": "^0.4.0", - "atomic-sleep": "^1.0.0", - "on-exit-leak-free": "^2.1.0", - "pino-abstract-transport": "^2.0.0", - "pino-std-serializers": "^7.0.0", - "process-warning": "^5.0.0", - "quick-format-unescaped": "^4.0.3", - "real-require": "^0.2.0", - "safe-stable-stringify": "^2.3.1", - "sonic-boom": "^4.0.1", - "thread-stream": "^3.0.0" - }, - "bin": { - "pino": "bin.js" + "should-equal": "^2.0.0", + "should-format": "^3.0.3", + "should-type": "^1.4.0", + "should-type-adaptors": "^1.0.1", + "should-util": "^1.0.0" } }, - "scripts/utilities/supplier-data": { - "name": "nhs-notify-supplier-api-suppliers-data-utility", - "version": "0.0.1", + "node_modules/should-equal": { + "version": "2.0.0", + "dev": true, + "license": "MIT", "dependencies": { - "@aws-sdk/client-dynamodb": "^3.984.0", - "@aws-sdk/lib-dynamodb": "^3.858.0", - "@internal/datastore": "*", - "esbuild": "^0.25.11", - "pino": "^10.3.0", - "yargs": "^17.7.2" - }, - "devDependencies": { - "@tsconfig/node22": "^22.0.2", - "@types/jest": "^30.0.0", - "jest": "^30.2.0", - "jest-mock-extended": "^4.0.0", - "typescript": "^5.8.3" + "should-type": "^1.4.0" } }, - "scripts/utilities/supplier-data/node_modules/@esbuild/linux-x64": { - "version": "0.25.12", - "cpu": [ - "x64" - ], + "node_modules/should-format": { + "version": "3.0.3", + "dev": true, "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" + "dependencies": { + "should-type": "^1.3.0", + "should-type-adaptors": "^1.0.1" } }, - "scripts/utilities/supplier-data/node_modules/esbuild": { - "version": "0.25.12", - "hasInstallScript": true, + "node_modules/should-type": { + "version": "1.4.0", + "dev": true, + "license": "MIT" + }, + "node_modules/should-type-adaptors": { + "version": "1.1.0", + "dev": true, "license": "MIT", - "bin": { - "esbuild": "bin/esbuild" - }, - "engines": { - "node": ">=18" - }, - "optionalDependencies": { - "@esbuild/aix-ppc64": "0.25.12", - "@esbuild/android-arm": "0.25.12", + "dependencies": { + "should-type": "^1.3.0", + "should-util": "^1.0.0" + } + }, + "node_modules/should-util": { + "version": "1.0.1", + "dev": true, + "license": "MIT" + }, + "node_modules/side-channel": { + "version": "1.1.0", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "object-inspect": "^1.13.3", + "side-channel-list": "^1.0.0", + "side-channel-map": "^1.0.1", + "side-channel-weakmap": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel-list": { + "version": "1.0.0", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "object-inspect": "^1.13.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel-map": { + "version": "1.0.1", + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.5", + "object-inspect": "^1.13.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel-weakmap": { + "version": "1.0.2", + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.5", + "object-inspect": "^1.13.3", + "side-channel-map": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/signal-exit": { + "version": "3.0.7", + "license": "ISC" + }, + "node_modules/simple-eval": { + "version": "1.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "jsep": "^1.3.6" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/simple-websocket": { + "version": "9.1.0", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT", + "dependencies": { + "debug": "^4.3.1", + "queue-microtask": "^1.2.2", + "randombytes": "^2.1.0", + "readable-stream": "^3.6.0", + "ws": "^7.4.2" + } + }, + "node_modules/simple-websocket/node_modules/ws": { + "version": "7.5.10", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8.3.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": "^5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + }, + "node_modules/slash": { + "version": "3.0.0", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/slugify": { + "version": "1.4.7", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/smart-buffer": { + "version": "4.2.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 6.0.0", + "npm": ">= 3.0.0" + } + }, + "node_modules/socks": { + "version": "2.8.7", + "dev": true, + "license": "MIT", + "dependencies": { + "ip-address": "^10.0.1", + "smart-buffer": "^4.2.0" + }, + "engines": { + "node": ">= 10.0.0", + "npm": ">= 3.0.0" + } + }, + "node_modules/socks-proxy-agent": { + "version": "8.0.5", + "dev": true, + "license": "MIT", + "dependencies": { + "agent-base": "^7.1.2", + "debug": "^4.3.4", + "socks": "^2.8.3" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/sonic-boom": { + "version": "4.2.0", + "license": "MIT", + "dependencies": { + "atomic-sleep": "^1.0.0" + } + }, + "node_modules/source-map": { + "version": "0.6.1", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/source-map-js": { + "version": "1.2.1", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/source-map-support": { + "version": "0.5.13", + "dev": true, + "license": "MIT", + "dependencies": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + }, + "node_modules/sourcemap-codec": { + "version": "1.4.8", + "dev": true, + "license": "MIT" + }, + "node_modules/split-ca": { + "version": "1.0.1", + "dev": true, + "license": "ISC" + }, + "node_modules/split2": { + "version": "4.2.0", + "license": "ISC", + "engines": { + "node": ">= 10.x" + } + }, + "node_modules/sprintf-js": { + "version": "1.0.3", + "license": "BSD-3-Clause" + }, + "node_modules/ssh-remote-port-forward": { + "version": "1.0.4", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/ssh2": "^0.5.48", + "ssh2": "^1.4.0" + } + }, + "node_modules/ssh-remote-port-forward/node_modules/@types/ssh2": { + "version": "0.5.52", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "*", + "@types/ssh2-streams": "*" + } + }, + "node_modules/ssh2": { + "version": "1.17.0", + "dev": true, + "hasInstallScript": true, + "dependencies": { + "asn1": "^0.2.6", + "bcrypt-pbkdf": "^1.0.2" + }, + "engines": { + "node": ">=10.16.0" + }, + "optionalDependencies": { + "cpu-features": "~0.0.10", + "nan": "^2.23.0" + } + }, + "node_modules/stable-hash": { + "version": "0.0.5", + "dev": true, + "license": "MIT" + }, + "node_modules/stable-hash-x": { + "version": "0.2.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/stack-utils": { + "version": "2.0.6", + "license": "MIT", + "dependencies": { + "escape-string-regexp": "^2.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/stack-utils/node_modules/escape-string-regexp": { + "version": "2.0.0", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/stacktracey": { + "version": "2.1.8", + "dev": true, + "license": "Unlicense", + "dependencies": { + "as-table": "^1.0.36", + "get-source": "^2.0.12" + } + }, + "node_modules/statuses": { + "version": "2.0.2", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/stickyfill": { + "version": "1.1.1", + "dev": true + }, + "node_modules/stop-iteration-iterator": { + "version": "1.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "internal-slot": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/streamx": { + "version": "2.23.0", + "dev": true, + "license": "MIT", + "dependencies": { + "events-universal": "^1.0.0", + "fast-fifo": "^1.3.2", + "text-decoder": "^1.1.0" + } + }, + "node_modules/string_decoder": { + "version": "1.3.0", + "dev": true, + "license": "MIT", + "dependencies": { + "safe-buffer": "~5.2.0" + } + }, + "node_modules/string-length": { + "version": "4.0.2", + "dev": true, + "license": "MIT", + "dependencies": { + "char-regex": "^1.0.2", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/string-width": { + "version": "4.2.3", + "license": "MIT", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/string-width-cjs": { + "name": "string-width", + "version": "4.2.3", + "dev": true, + "license": "MIT", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/string-width-cjs/node_modules/emoji-regex": { + "version": "8.0.0", + "dev": true, + "license": "MIT" + }, + "node_modules/string-width/node_modules/emoji-regex": { + "version": "8.0.0", + "license": "MIT" + }, + "node_modules/string.prototype.includes": { + "version": "2.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.3" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/string.prototype.matchall": { + "version": "4.0.12", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.3", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.6", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0", + "get-intrinsic": "^1.2.6", + "gopd": "^1.2.0", + "has-symbols": "^1.1.0", + "internal-slot": "^1.1.0", + "regexp.prototype.flags": "^1.5.3", + "set-function-name": "^2.0.2", + "side-channel": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/string.prototype.repeat": { + "version": "1.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "define-properties": "^1.1.3", + "es-abstract": "^1.17.5" + } + }, + "node_modules/string.prototype.trim": { + "version": "1.2.10", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.2", + "define-data-property": "^1.1.4", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.5", + "es-object-atoms": "^1.0.0", + "has-property-descriptors": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/string.prototype.trimend": { + "version": "1.0.9", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.2", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/string.prototype.trimstart": { + "version": "1.0.8", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/strip-ansi": { + "version": "6.0.1", + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-ansi-cjs": { + "name": "strip-ansi", + "version": "6.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-bom": { + "version": "4.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-final-newline": { + "version": "2.0.0", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/strip-indent": { + "version": "4.1.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/strip-json-comments": { + "version": "3.1.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/strnum": { + "version": "2.1.2", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/NaturalIntelligence" + } + ], + "license": "MIT" + }, + "node_modules/strtok3": { + "version": "10.3.4", + "dev": true, + "license": "MIT", + "dependencies": { + "@tokenizer/token": "^0.3.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/Borewit" + } + }, + "node_modules/styled-components": { + "version": "6.3.9", + "dev": true, + "license": "MIT", + "dependencies": { + "@emotion/is-prop-valid": "1.4.0", + "@emotion/unitless": "0.10.0", + "@types/stylis": "4.2.7", + "css-to-react-native": "3.2.0", + "csstype": "3.2.3", + "postcss": "8.4.49", + "shallowequal": "1.1.0", + "stylis": "4.3.6", + "tslib": "2.8.1" + }, + "engines": { + "node": ">= 16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/styled-components" + }, + "peerDependencies": { + "react": ">= 16.8.0", + "react-dom": ">= 16.8.0" + }, + "peerDependenciesMeta": { + "react-dom": { + "optional": true + } + } + }, + "node_modules/stylis": { + "version": "4.3.6", + "dev": true, + "license": "MIT" + }, + "node_modules/supports-color": { + "version": "7.2.0", + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/supports-preserve-symlinks-flag": { + "version": "1.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/swagger2openapi": { + "version": "7.0.8", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "call-me-maybe": "^1.0.1", + "node-fetch": "^2.6.1", + "node-fetch-h2": "^2.3.0", + "node-readfiles": "^0.2.0", + "oas-kit-common": "^1.0.8", + "oas-resolver": "^2.5.6", + "oas-schema-walker": "^1.1.5", + "oas-validator": "^5.0.8", + "reftools": "^1.1.9", + "yaml": "^1.10.0", + "yargs": "^17.0.1" + }, + "bin": { + "boast": "boast.js", + "oas-validate": "oas-validate.js", + "swagger2openapi": "swagger2openapi.js" + }, + "funding": { + "url": "https://github.com/Mermade/oas-kit?sponsor=1" + } + }, + "node_modules/swagger2openapi/node_modules/yaml": { + "version": "1.10.2", + "dev": true, + "license": "ISC", + "engines": { + "node": ">= 6" + } + }, + "node_modules/symbol-tree": { + "version": "3.2.4", + "dev": true, + "license": "MIT" + }, + "node_modules/synckit": { + "version": "0.11.12", + "license": "MIT", + "dependencies": { + "@pkgr/core": "^0.2.9" + }, + "engines": { + "node": "^14.18.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/synckit" + } + }, + "node_modules/tar-fs": { + "version": "3.1.1", + "dev": true, + "license": "MIT", + "dependencies": { + "pump": "^3.0.0", + "tar-stream": "^3.1.5" + }, + "optionalDependencies": { + "bare-fs": "^4.0.1", + "bare-path": "^3.0.0" + } + }, + "node_modules/tar-stream": { + "version": "3.1.7", + "dev": true, + "license": "MIT", + "dependencies": { + "b4a": "^1.6.4", + "fast-fifo": "^1.2.0", + "streamx": "^2.15.0" + } + }, + "node_modules/test-exclude": { + "version": "6.0.0", + "license": "ISC", + "dependencies": { + "@istanbuljs/schema": "^0.1.2", + "glob": "^7.1.4", + "minimatch": "^3.0.4" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/test-exclude/node_modules/brace-expansion": { + "version": "1.1.12", + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/test-exclude/node_modules/glob": { + "version": "7.2.3", + "license": "ISC", + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/test-exclude/node_modules/minimatch": { + "version": "3.1.2", + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/testcontainers": { + "version": "11.11.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@balena/dockerignore": "^1.0.2", + "@types/dockerode": "^3.3.47", + "archiver": "^7.0.1", + "async-lock": "^1.4.1", + "byline": "^5.0.0", + "debug": "^4.4.3", + "docker-compose": "^1.3.0", + "dockerode": "^4.0.9", + "get-port": "^7.1.0", + "proper-lockfile": "^4.1.2", + "properties-reader": "^2.3.0", + "ssh-remote-port-forward": "^1.0.4", + "tar-fs": "^3.1.1", + "tmp": "^0.2.5", + "undici": "^7.16.0" + } + }, + "node_modules/testcontainers/node_modules/undici": { + "version": "7.20.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=20.18.1" + } + }, + "node_modules/text-decoder": { + "version": "1.2.3", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "b4a": "^1.6.4" + } + }, + "node_modules/text-table": { + "version": "0.2.0", + "dev": true, + "license": "MIT" + }, + "node_modules/thread-stream": { + "version": "3.1.0", + "license": "MIT", + "dependencies": { + "real-require": "^0.2.0" + } + }, + "node_modules/through": { + "version": "2.3.8", + "dev": true, + "license": "MIT" + }, + "node_modules/tinyglobby": { + "version": "0.2.15", + "dev": true, + "license": "MIT", + "dependencies": { + "fdir": "^6.5.0", + "picomatch": "^4.0.3" + }, + "engines": { + "node": ">=12.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/SuperchupuDev" + } + }, + "node_modules/tldts": { + "version": "6.1.86", + "dev": true, + "license": "MIT", + "dependencies": { + "tldts-core": "^6.1.86" + }, + "bin": { + "tldts": "bin/cli.js" + } + }, + "node_modules/tldts-core": { + "version": "6.1.86", + "dev": true, + "license": "MIT" + }, + "node_modules/tmp": { + "version": "0.2.5", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=14.14" + } + }, + "node_modules/tmpl": { + "version": "1.0.5", + "license": "BSD-3-Clause" + }, + "node_modules/to-regex-range": { + "version": "5.0.1", + "license": "MIT", + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/toidentifier": { + "version": "1.0.1", + "license": "MIT", + "engines": { + "node": ">=0.6" + } + }, + "node_modules/token-types": { + "version": "6.1.2", + "dev": true, + "license": "MIT", + "dependencies": { + "@borewit/text-codec": "^0.2.1", + "@tokenizer/token": "^0.3.0", + "ieee754": "^1.2.1" + }, + "engines": { + "node": ">=14.16" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/Borewit" + } + }, + "node_modules/token-types/node_modules/ieee754": { + "version": "1.2.1", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "BSD-3-Clause" + }, + "node_modules/tough-cookie": { + "version": "5.1.2", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "tldts": "^6.1.32" + }, + "engines": { + "node": ">=16" + } + }, + "node_modules/tr46": { + "version": "5.1.1", + "dev": true, + "license": "MIT", + "dependencies": { + "punycode": "^2.3.1" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/tr46/node_modules/punycode": { + "version": "2.3.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/tree-kill": { + "version": "1.2.2", + "dev": true, + "license": "MIT", + "bin": { + "tree-kill": "cli.js" + } + }, + "node_modules/ts-api-utils": { + "version": "2.4.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18.12" + }, + "peerDependencies": { + "typescript": ">=4.8.4" + } + }, + "node_modules/ts-essentials": { + "version": "10.1.1", + "dev": true, + "license": "MIT", + "peerDependencies": { + "typescript": ">=4.5.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/ts-jest": { + "version": "29.4.6", + "dev": true, + "license": "MIT", + "dependencies": { + "bs-logger": "^0.2.6", + "fast-json-stable-stringify": "^2.1.0", + "handlebars": "^4.7.8", + "json5": "^2.2.3", + "lodash.memoize": "^4.1.2", + "make-error": "^1.3.6", + "semver": "^7.7.3", + "type-fest": "^4.41.0", + "yargs-parser": "^21.1.1" + }, + "bin": { + "ts-jest": "cli.js" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || ^18.0.0 || >=20.0.0" + }, + "peerDependencies": { + "@babel/core": ">=7.0.0-beta.0 <8", + "@jest/transform": "^29.0.0 || ^30.0.0", + "@jest/types": "^29.0.0 || ^30.0.0", + "babel-jest": "^29.0.0 || ^30.0.0", + "jest": "^29.0.0 || ^30.0.0", + "jest-util": "^29.0.0 || ^30.0.0", + "typescript": ">=4.3 <6" + }, + "peerDependenciesMeta": { + "@babel/core": { + "optional": true + }, + "@jest/transform": { + "optional": true + }, + "@jest/types": { + "optional": true + }, + "babel-jest": { + "optional": true + }, + "esbuild": { + "optional": true + }, + "jest-util": { + "optional": true + } + } + }, + "node_modules/ts-jest/node_modules/type-fest": { + "version": "4.41.0", + "dev": true, + "license": "(MIT OR CC0-1.0)", + "engines": { + "node": ">=16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ts-node": { + "version": "10.9.2", + "dev": true, + "license": "MIT", + "dependencies": { + "@cspotcode/source-map-support": "^0.8.0", + "@tsconfig/node10": "^1.0.7", + "@tsconfig/node12": "^1.0.7", + "@tsconfig/node14": "^1.0.0", + "@tsconfig/node16": "^1.0.2", + "acorn": "^8.4.1", + "acorn-walk": "^8.1.1", + "arg": "^4.1.0", + "create-require": "^1.1.0", + "diff": "^4.0.1", + "make-error": "^1.1.1", + "v8-compile-cache-lib": "^3.0.1", + "yn": "3.1.1" + }, + "bin": { + "ts-node": "dist/bin.js", + "ts-node-cwd": "dist/bin-cwd.js", + "ts-node-esm": "dist/bin-esm.js", + "ts-node-script": "dist/bin-script.js", + "ts-node-transpile-only": "dist/bin-transpile.js", + "ts-script": "dist/bin-script-deprecated.js" + }, + "peerDependencies": { + "@swc/core": ">=1.2.50", + "@swc/wasm": ">=1.2.50", + "@types/node": "*", + "typescript": ">=2.7" + }, + "peerDependenciesMeta": { + "@swc/core": { + "optional": true + }, + "@swc/wasm": { + "optional": true + } + } + }, + "node_modules/ts-node/node_modules/arg": { + "version": "4.1.3", + "dev": true, + "license": "MIT" + }, + "node_modules/tsconfig-paths": { + "version": "3.15.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/json5": "^0.0.29", + "json5": "^1.0.2", + "minimist": "^1.2.6", + "strip-bom": "^3.0.0" + } + }, + "node_modules/tsconfig-paths/node_modules/json5": { + "version": "1.0.2", + "dev": true, + "license": "MIT", + "dependencies": { + "minimist": "^1.2.0" + }, + "bin": { + "json5": "lib/cli.js" + } + }, + "node_modules/tsconfig-paths/node_modules/strip-bom": { + "version": "3.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/tslib": { + "version": "2.8.1", + "license": "0BSD" + }, + "node_modules/tsx": { + "version": "4.21.0", + "dev": true, + "license": "MIT", + "dependencies": { + "esbuild": "~0.27.0", + "get-tsconfig": "^4.7.5" + }, + "bin": { + "tsx": "dist/cli.mjs" + }, + "engines": { + "node": ">=18.0.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.3" + } + }, + "node_modules/tweetnacl": { + "version": "0.14.5", + "dev": true, + "license": "Unlicense" + }, + "node_modules/type-check": { + "version": "0.4.0", + "dev": true, + "license": "MIT", + "dependencies": { + "prelude-ls": "^1.2.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/type-detect": { + "version": "4.0.8", + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/type-fest": { + "version": "0.21.3", + "dev": true, + "license": "(MIT OR CC0-1.0)", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/type-is": { + "version": "2.0.1", + "license": "MIT", + "dependencies": { + "content-type": "^1.0.5", + "media-typer": "^1.1.0", + "mime-types": "^3.0.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/typed-array-buffer": { + "version": "1.0.3", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", + "es-errors": "^1.3.0", + "is-typed-array": "^1.1.14" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/typed-array-byte-length": { + "version": "1.0.3", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "for-each": "^0.3.3", + "gopd": "^1.2.0", + "has-proto": "^1.2.0", + "is-typed-array": "^1.1.14" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/typed-array-byte-offset": { + "version": "1.0.4", + "dev": true, + "license": "MIT", + "dependencies": { + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.8", + "for-each": "^0.3.3", + "gopd": "^1.2.0", + "has-proto": "^1.2.0", + "is-typed-array": "^1.1.15", + "reflect.getprototypeof": "^1.0.9" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/typed-array-length": { + "version": "1.0.7", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "is-typed-array": "^1.1.13", + "possible-typed-array-names": "^1.0.0", + "reflect.getprototypeof": "^1.0.6" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/typescript": { + "version": "5.9.3", + "dev": true, + "license": "Apache-2.0", + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=14.17" + } + }, + "node_modules/typescript-eslint": { + "version": "8.53.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/eslint-plugin": "8.53.0", + "@typescript-eslint/parser": "8.53.0", + "@typescript-eslint/typescript-estree": "8.53.0", + "@typescript-eslint/utils": "8.53.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^8.57.0 || ^9.0.0", + "typescript": ">=4.8.4 <6.0.0" + } + }, + "node_modules/typescript-eslint/node_modules/@typescript-eslint/eslint-plugin": { + "version": "8.53.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@eslint-community/regexpp": "^4.12.2", + "@typescript-eslint/scope-manager": "8.53.0", + "@typescript-eslint/type-utils": "8.53.0", + "@typescript-eslint/utils": "8.53.0", + "@typescript-eslint/visitor-keys": "8.53.0", + "ignore": "^7.0.5", + "natural-compare": "^1.4.0", + "ts-api-utils": "^2.4.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "@typescript-eslint/parser": "^8.53.0", + "eslint": "^8.57.0 || ^9.0.0", + "typescript": ">=4.8.4 <6.0.0" + } + }, + "node_modules/typescript-eslint/node_modules/@typescript-eslint/parser": { + "version": "8.53.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/scope-manager": "8.53.0", + "@typescript-eslint/types": "8.53.0", + "@typescript-eslint/typescript-estree": "8.53.0", + "@typescript-eslint/visitor-keys": "8.53.0", + "debug": "^4.4.3" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^8.57.0 || ^9.0.0", + "typescript": ">=4.8.4 <6.0.0" + } + }, + "node_modules/typescript-eslint/node_modules/@typescript-eslint/project-service": { + "version": "8.53.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/tsconfig-utils": "^8.53.0", + "@typescript-eslint/types": "^8.53.0", + "debug": "^4.4.3" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "typescript": ">=4.8.4 <6.0.0" + } + }, + "node_modules/typescript-eslint/node_modules/@typescript-eslint/scope-manager": { + "version": "8.53.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/types": "8.53.0", + "@typescript-eslint/visitor-keys": "8.53.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/typescript-eslint/node_modules/@typescript-eslint/tsconfig-utils": { + "version": "8.53.0", + "dev": true, + "license": "MIT", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "typescript": ">=4.8.4 <6.0.0" + } + }, + "node_modules/typescript-eslint/node_modules/@typescript-eslint/type-utils": { + "version": "8.53.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/types": "8.53.0", + "@typescript-eslint/typescript-estree": "8.53.0", + "@typescript-eslint/utils": "8.53.0", + "debug": "^4.4.3", + "ts-api-utils": "^2.4.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^8.57.0 || ^9.0.0", + "typescript": ">=4.8.4 <6.0.0" + } + }, + "node_modules/typescript-eslint/node_modules/@typescript-eslint/types": { + "version": "8.53.0", + "dev": true, + "license": "MIT", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/typescript-eslint/node_modules/@typescript-eslint/typescript-estree": { + "version": "8.53.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/project-service": "8.53.0", + "@typescript-eslint/tsconfig-utils": "8.53.0", + "@typescript-eslint/types": "8.53.0", + "@typescript-eslint/visitor-keys": "8.53.0", + "debug": "^4.4.3", + "minimatch": "^9.0.5", + "semver": "^7.7.3", + "tinyglobby": "^0.2.15", + "ts-api-utils": "^2.4.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "typescript": ">=4.8.4 <6.0.0" + } + }, + "node_modules/typescript-eslint/node_modules/@typescript-eslint/utils": { + "version": "8.53.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@eslint-community/eslint-utils": "^4.9.1", + "@typescript-eslint/scope-manager": "8.53.0", + "@typescript-eslint/types": "8.53.0", + "@typescript-eslint/typescript-estree": "8.53.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^8.57.0 || ^9.0.0", + "typescript": ">=4.8.4 <6.0.0" + } + }, + "node_modules/typescript-eslint/node_modules/@typescript-eslint/visitor-keys": { + "version": "8.53.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/types": "8.53.0", + "eslint-visitor-keys": "^4.2.1" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/uglify-js": { + "version": "3.19.3", + "dev": true, + "license": "BSD-2-Clause", + "optional": true, + "bin": { + "uglifyjs": "bin/uglifyjs" + }, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/uid": { + "version": "2.0.2", + "dev": true, + "license": "MIT", + "dependencies": { + "@lukeed/csprng": "^1.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/uint8array-extras": { + "version": "1.5.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/unbox-primitive": { + "version": "1.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", + "has-bigints": "^1.0.2", + "has-symbols": "^1.1.0", + "which-boxed-primitive": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/underscore": { + "version": "1.13.7", + "license": "MIT" + }, + "node_modules/universalify": { + "version": "2.0.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/unpipe": { + "version": "1.0.0", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/unrs-resolver": { + "version": "1.11.1", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "dependencies": { + "napi-postinstall": "^0.3.0" + }, + "funding": { + "url": "https://opencollective.com/unrs-resolver" + }, + "optionalDependencies": { + "@unrs/resolver-binding-android-arm-eabi": "1.11.1", + "@unrs/resolver-binding-android-arm64": "1.11.1", + "@unrs/resolver-binding-darwin-arm64": "1.11.1", + "@unrs/resolver-binding-darwin-x64": "1.11.1", + "@unrs/resolver-binding-freebsd-x64": "1.11.1", + "@unrs/resolver-binding-linux-arm-gnueabihf": "1.11.1", + "@unrs/resolver-binding-linux-arm-musleabihf": "1.11.1", + "@unrs/resolver-binding-linux-arm64-gnu": "1.11.1", + "@unrs/resolver-binding-linux-arm64-musl": "1.11.1", + "@unrs/resolver-binding-linux-ppc64-gnu": "1.11.1", + "@unrs/resolver-binding-linux-riscv64-gnu": "1.11.1", + "@unrs/resolver-binding-linux-riscv64-musl": "1.11.1", + "@unrs/resolver-binding-linux-s390x-gnu": "1.11.1", + "@unrs/resolver-binding-linux-x64-gnu": "1.11.1", + "@unrs/resolver-binding-linux-x64-musl": "1.11.1", + "@unrs/resolver-binding-wasm32-wasi": "1.11.1", + "@unrs/resolver-binding-win32-arm64-msvc": "1.11.1", + "@unrs/resolver-binding-win32-ia32-msvc": "1.11.1", + "@unrs/resolver-binding-win32-x64-msvc": "1.11.1" + } + }, + "node_modules/update-browserslist-db": { + "version": "1.2.3", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "escalade": "^3.2.0", + "picocolors": "^1.1.1" + }, + "bin": { + "update-browserslist-db": "cli.js" + }, + "peerDependencies": { + "browserslist": ">= 4.21.0" + } + }, + "node_modules/update-check": { + "version": "1.5.4", + "license": "MIT", + "dependencies": { + "registry-auth-token": "3.3.2", + "registry-url": "3.1.0" + } + }, + "node_modules/uri-js": { + "version": "4.4.1", + "license": "BSD-2-Clause", + "dependencies": { + "punycode": "^2.1.0" + } + }, + "node_modules/uri-js/node_modules/punycode": { + "version": "2.3.1", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/urijs": { + "version": "1.19.11", + "dev": true, + "license": "MIT" + }, + "node_modules/url": { + "version": "0.10.3", + "license": "MIT", + "dependencies": { + "punycode": "1.3.2", + "querystring": "0.2.0" + } + }, + "node_modules/url-template": { + "version": "2.0.8", + "dev": true, + "license": "BSD" + }, + "node_modules/use-sync-external-store": { + "version": "1.6.0", + "dev": true, + "license": "MIT", + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" + } + }, + "node_modules/util": { + "version": "0.12.5", + "license": "MIT", + "dependencies": { + "inherits": "^2.0.3", + "is-arguments": "^1.0.4", + "is-generator-function": "^1.0.7", + "is-typed-array": "^1.1.3", + "which-typed-array": "^1.1.2" + } + }, + "node_modules/util-deprecate": { + "version": "1.0.2", + "dev": true, + "license": "MIT" + }, + "node_modules/utility-types": { + "version": "3.11.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 4" + } + }, + "node_modules/utils-merge": { + "version": "1.0.1", + "license": "MIT", + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/uuid": { + "version": "8.0.0", + "license": "MIT", + "bin": { + "uuid": "dist/bin/uuid" + } + }, + "node_modules/v8-compile-cache-lib": { + "version": "3.0.1", + "dev": true, + "license": "MIT" + }, + "node_modules/v8-to-istanbul": { + "version": "9.3.0", + "dev": true, + "license": "ISC", + "dependencies": { + "@jridgewell/trace-mapping": "^0.3.12", + "@types/istanbul-lib-coverage": "^2.0.1", + "convert-source-map": "^2.0.0" + }, + "engines": { + "node": ">=10.12.0" + } + }, + "node_modules/validate-npm-package-name": { + "version": "3.0.0", + "dev": true, + "license": "ISC", + "dependencies": { + "builtins": "^1.0.3" + } + }, + "node_modules/vary": { + "version": "1.1.2", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/vscode-json-languageservice": { + "version": "4.2.1", + "dev": true, + "license": "MIT", + "dependencies": { + "jsonc-parser": "^3.0.0", + "vscode-languageserver-textdocument": "^1.0.3", + "vscode-languageserver-types": "^3.16.0", + "vscode-nls": "^5.0.0", + "vscode-uri": "^3.0.3" + } + }, + "node_modules/vscode-languageserver-textdocument": { + "version": "1.0.12", + "dev": true, + "license": "MIT" + }, + "node_modules/vscode-languageserver-types": { + "version": "3.17.5", + "dev": true, + "license": "MIT" + }, + "node_modules/vscode-nls": { + "version": "5.2.0", + "dev": true, + "license": "MIT" + }, + "node_modules/vscode-uri": { + "version": "3.1.0", + "dev": true, + "license": "MIT" + }, + "node_modules/w3c-xmlserializer": { + "version": "5.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "xml-name-validator": "^5.0.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/walker": { + "version": "1.0.8", + "license": "Apache-2.0", + "dependencies": { + "makeerror": "1.0.12" + } + }, + "node_modules/watchpack": { + "version": "2.5.1", + "license": "MIT", + "dependencies": { + "glob-to-regexp": "^0.4.1", + "graceful-fs": "^4.1.2" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/wcwidth": { + "version": "1.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "defaults": "^1.0.3" + } + }, + "node_modules/webidl-conversions": { + "version": "7.0.0", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=12" + } + }, + "node_modules/whatwg-encoding": { + "version": "3.1.1", + "dev": true, + "license": "MIT", + "dependencies": { + "iconv-lite": "0.6.3" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/whatwg-encoding/node_modules/iconv-lite": { + "version": "0.6.3", + "dev": true, + "license": "MIT", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/whatwg-mimetype": { + "version": "4.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + } + }, + "node_modules/whatwg-url": { + "version": "14.2.0", + "dev": true, + "license": "MIT", + "dependencies": { + "tr46": "^5.1.0", + "webidl-conversions": "^7.0.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/which": { + "version": "2.0.2", + "license": "ISC", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/which-boxed-primitive": { + "version": "1.1.1", + "dev": true, + "license": "MIT", + "dependencies": { + "is-bigint": "^1.1.0", + "is-boolean-object": "^1.2.1", + "is-number-object": "^1.1.1", + "is-string": "^1.1.1", + "is-symbol": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/which-builtin-type": { + "version": "1.2.1", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "function.prototype.name": "^1.1.6", + "has-tostringtag": "^1.0.2", + "is-async-function": "^2.0.0", + "is-date-object": "^1.1.0", + "is-finalizationregistry": "^1.1.0", + "is-generator-function": "^1.0.10", + "is-regex": "^1.2.1", + "is-weakref": "^1.0.2", + "isarray": "^2.0.5", + "which-boxed-primitive": "^1.1.0", + "which-collection": "^1.0.2", + "which-typed-array": "^1.1.16" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/which-builtin-type/node_modules/isarray": { + "version": "2.0.5", + "dev": true, + "license": "MIT" + }, + "node_modules/which-collection": { + "version": "1.0.2", + "dev": true, + "license": "MIT", + "dependencies": { + "is-map": "^2.0.3", + "is-set": "^2.0.3", + "is-weakmap": "^2.0.2", + "is-weakset": "^2.0.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/which-typed-array": { + "version": "1.1.20", + "license": "MIT", + "dependencies": { + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.8", + "call-bound": "^1.0.4", + "for-each": "^0.3.5", + "get-proto": "^1.0.1", + "gopd": "^1.2.0", + "has-tostringtag": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/widest-line": { + "version": "4.0.1", + "license": "MIT", + "dependencies": { + "string-width": "^5.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/widest-line/node_modules/ansi-regex": { + "version": "6.2.2", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "node_modules/widest-line/node_modules/string-width": { + "version": "5.1.2", + "license": "MIT", + "dependencies": { + "eastasianwidth": "^0.2.0", + "emoji-regex": "^9.2.2", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/widest-line/node_modules/strip-ansi": { + "version": "7.1.2", + "license": "MIT", + "dependencies": { + "ansi-regex": "^6.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, + "node_modules/word-wrap": { + "version": "1.2.5", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/wordwrap": { + "version": "1.0.0", + "dev": true, + "license": "MIT" + }, + "node_modules/wrap-ansi": { + "version": "6.2.0", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/wrap-ansi-cjs": { + "name": "wrap-ansi", + "version": "7.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/wrappy": { + "version": "1.0.2", + "license": "ISC" + }, + "node_modules/write-file-atomic": { + "version": "5.0.1", + "license": "ISC", + "dependencies": { + "imurmurhash": "^0.1.4", + "signal-exit": "^4.0.1" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/write-file-atomic/node_modules/signal-exit": { + "version": "4.1.0", + "license": "ISC", + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/ws": { + "version": "8.19.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": ">=5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + }, + "node_modules/xml-name-validator": { + "version": "5.0.0", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=18" + } + }, + "node_modules/xml2js": { + "version": "0.6.2", + "license": "MIT", + "dependencies": { + "sax": ">=0.6.0", + "xmlbuilder": "~11.0.0" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/xml2js/node_modules/xmlbuilder": { + "version": "11.0.1", + "license": "MIT", + "engines": { + "node": ">=4.0" + } + }, + "node_modules/xmlbuilder": { + "version": "15.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8.0" + } + }, + "node_modules/xmlchars": { + "version": "2.2.0", + "dev": true, + "license": "MIT" + }, + "node_modules/y18n": { + "version": "5.0.8", + "license": "ISC", + "engines": { + "node": ">=10" + } + }, + "node_modules/yallist": { + "version": "3.1.1", + "license": "ISC" + }, + "node_modules/yaml": { + "version": "2.8.2", + "dev": true, + "license": "ISC", + "bin": { + "yaml": "bin.mjs" + }, + "engines": { + "node": ">= 14.6" + }, + "funding": { + "url": "https://github.com/sponsors/eemeli" + } + }, + "node_modules/yaml-ast-parser": { + "version": "0.0.43", + "dev": true, + "license": "Apache-2.0" + }, + "node_modules/yargs": { + "version": "17.7.2", + "license": "MIT", + "dependencies": { + "cliui": "^8.0.1", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.3", + "y18n": "^5.0.5", + "yargs-parser": "^21.1.1" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/yargs-parser": { + "version": "21.1.1", + "license": "ISC", + "engines": { + "node": ">=12" + } + }, + "node_modules/yn": { + "version": "3.1.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/yocto-queue": { + "version": "0.1.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/zip-stream": { + "version": "6.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "archiver-utils": "^5.0.0", + "compress-commons": "^6.0.2", + "readable-stream": "^4.0.0" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/zip-stream/node_modules/buffer": { + "version": "6.0.3", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT", + "dependencies": { + "base64-js": "^1.3.1", + "ieee754": "^1.2.1" + } + }, + "node_modules/zip-stream/node_modules/events": { + "version": "3.3.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.8.x" + } + }, + "node_modules/zip-stream/node_modules/ieee754": { + "version": "1.2.1", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "BSD-3-Clause" + }, + "node_modules/zip-stream/node_modules/readable-stream": { + "version": "4.7.0", + "dev": true, + "license": "MIT", + "dependencies": { + "abort-controller": "^3.0.0", + "buffer": "^6.0.3", + "events": "^3.3.0", + "process": "^0.11.10", + "string_decoder": "^1.3.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + } + }, + "node_modules/zod": { + "version": "4.3.6", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/colinhacks" + } + }, + "node_modules/zod-mermaid": { + "version": "1.3.0", + "license": "MIT", + "dependencies": { + "zod": "^4.0.5" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "pact-contracts": { + "name": "@nhsdigital/notify-supplier-api-consumer-contracts", + "version": "1.0.1", + "license": "MIT" + }, + "scripts/utilities/letter-test-data": { + "name": "nhs-notify-supplier-api-letter-test-data-utility", + "version": "0.0.1", + "dependencies": { + "@aws-sdk/client-dynamodb": "^3.984.0", + "@aws-sdk/client-s3": "^3.858.0", + "@aws-sdk/lib-dynamodb": "^3.858.0", + "@internal/datastore": "*", + "@jest/globals": "^30.2.0", + "esbuild": "^0.25.11", + "pino": "^10.3.0", + "yargs": "^17.7.2" + }, + "devDependencies": { + "@tsconfig/node22": "^22.0.2", + "@types/jest": "^30.0.0", + "jest": "^30.2.0", + "jest-mock-extended": "^4.0.0", + "typescript": "^5.9.3" + } + }, + "scripts/utilities/letter-test-data/node_modules/@aws-sdk/client-dynamodb": { + "version": "3.986.0", + "license": "Apache-2.0", + "dependencies": { + "@aws-crypto/sha256-browser": "5.2.0", + "@aws-crypto/sha256-js": "5.2.0", + "@aws-sdk/core": "^3.973.7", + "@aws-sdk/credential-provider-node": "^3.972.6", + "@aws-sdk/dynamodb-codec": "^3.972.8", + "@aws-sdk/middleware-endpoint-discovery": "^3.972.3", + "@aws-sdk/middleware-host-header": "^3.972.3", + "@aws-sdk/middleware-logger": "^3.972.3", + "@aws-sdk/middleware-recursion-detection": "^3.972.3", + "@aws-sdk/middleware-user-agent": "^3.972.7", + "@aws-sdk/region-config-resolver": "^3.972.3", + "@aws-sdk/types": "^3.973.1", + "@aws-sdk/util-endpoints": "3.986.0", + "@aws-sdk/util-user-agent-browser": "^3.972.3", + "@aws-sdk/util-user-agent-node": "^3.972.5", + "@smithy/config-resolver": "^4.4.6", + "@smithy/core": "^3.22.1", + "@smithy/fetch-http-handler": "^5.3.9", + "@smithy/hash-node": "^4.2.8", + "@smithy/invalid-dependency": "^4.2.8", + "@smithy/middleware-content-length": "^4.2.8", + "@smithy/middleware-endpoint": "^4.4.13", + "@smithy/middleware-retry": "^4.4.30", + "@smithy/middleware-serde": "^4.2.9", + "@smithy/middleware-stack": "^4.2.8", + "@smithy/node-config-provider": "^4.3.8", + "@smithy/node-http-handler": "^4.4.9", + "@smithy/protocol-http": "^5.3.8", + "@smithy/smithy-client": "^4.11.2", + "@smithy/types": "^4.12.0", + "@smithy/url-parser": "^4.2.8", + "@smithy/util-base64": "^4.3.0", + "@smithy/util-body-length-browser": "^4.2.0", + "@smithy/util-body-length-node": "^4.2.1", + "@smithy/util-defaults-mode-browser": "^4.3.29", + "@smithy/util-defaults-mode-node": "^4.2.32", + "@smithy/util-endpoints": "^3.2.8", + "@smithy/util-middleware": "^4.2.8", + "@smithy/util-retry": "^4.2.8", + "@smithy/util-utf8": "^4.2.0", + "@smithy/util-waiter": "^4.2.8", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=20.0.0" + } + }, + "scripts/utilities/letter-test-data/node_modules/@aws-sdk/core": { + "version": "3.973.7", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/types": "^3.973.1", + "@aws-sdk/xml-builder": "^3.972.4", + "@smithy/core": "^3.22.1", + "@smithy/node-config-provider": "^4.3.8", + "@smithy/property-provider": "^4.2.8", + "@smithy/protocol-http": "^5.3.8", + "@smithy/signature-v4": "^5.3.8", + "@smithy/smithy-client": "^4.11.2", + "@smithy/types": "^4.12.0", + "@smithy/util-base64": "^4.3.0", + "@smithy/util-middleware": "^4.2.8", + "@smithy/util-utf8": "^4.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=20.0.0" + } + }, + "scripts/utilities/letter-test-data/node_modules/@aws-sdk/util-endpoints": { + "version": "3.986.0", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/types": "^3.973.1", + "@smithy/types": "^4.12.0", + "@smithy/url-parser": "^4.2.8", + "@smithy/util-endpoints": "^3.2.8", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=20.0.0" + } + }, + "scripts/utilities/letter-test-data/node_modules/@aws-sdk/xml-builder": { + "version": "3.972.4", + "license": "Apache-2.0", + "dependencies": { + "@smithy/types": "^4.12.0", + "fast-xml-parser": "5.3.4", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=20.0.0" + } + }, + "scripts/utilities/letter-test-data/node_modules/@esbuild/linux-x64": { + "version": "0.25.12", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "scripts/utilities/letter-test-data/node_modules/esbuild": { + "version": "0.25.12", + "hasInstallScript": true, + "license": "MIT", + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=18" + }, + "optionalDependencies": { + "@esbuild/aix-ppc64": "0.25.12", + "@esbuild/android-arm": "0.25.12", + "@esbuild/android-arm64": "0.25.12", + "@esbuild/android-x64": "0.25.12", + "@esbuild/darwin-arm64": "0.25.12", + "@esbuild/darwin-x64": "0.25.12", + "@esbuild/freebsd-arm64": "0.25.12", + "@esbuild/freebsd-x64": "0.25.12", + "@esbuild/linux-arm": "0.25.12", + "@esbuild/linux-arm64": "0.25.12", + "@esbuild/linux-ia32": "0.25.12", + "@esbuild/linux-loong64": "0.25.12", + "@esbuild/linux-mips64el": "0.25.12", + "@esbuild/linux-ppc64": "0.25.12", + "@esbuild/linux-riscv64": "0.25.12", + "@esbuild/linux-s390x": "0.25.12", + "@esbuild/linux-x64": "0.25.12", + "@esbuild/netbsd-arm64": "0.25.12", + "@esbuild/netbsd-x64": "0.25.12", + "@esbuild/openbsd-arm64": "0.25.12", + "@esbuild/openbsd-x64": "0.25.12", + "@esbuild/openharmony-arm64": "0.25.12", + "@esbuild/sunos-x64": "0.25.12", + "@esbuild/win32-arm64": "0.25.12", + "@esbuild/win32-ia32": "0.25.12", + "@esbuild/win32-x64": "0.25.12" + } + }, + "scripts/utilities/supplier-data": { + "name": "nhs-notify-supplier-api-suppliers-data-utility", + "version": "0.0.1", + "dependencies": { + "@aws-sdk/client-dynamodb": "^3.984.0", + "@aws-sdk/lib-dynamodb": "^3.858.0", + "@internal/datastore": "*", + "esbuild": "^0.25.11", + "pino": "^10.3.0", + "yargs": "^17.7.2" + }, + "devDependencies": { + "@tsconfig/node22": "^22.0.2", + "@types/jest": "^30.0.0", + "jest": "^30.2.0", + "jest-mock-extended": "^4.0.0", + "typescript": "^5.8.3" + } + }, + "scripts/utilities/supplier-data/node_modules/@aws-sdk/client-dynamodb": { + "version": "3.986.0", + "license": "Apache-2.0", + "dependencies": { + "@aws-crypto/sha256-browser": "5.2.0", + "@aws-crypto/sha256-js": "5.2.0", + "@aws-sdk/core": "^3.973.7", + "@aws-sdk/credential-provider-node": "^3.972.6", + "@aws-sdk/dynamodb-codec": "^3.972.8", + "@aws-sdk/middleware-endpoint-discovery": "^3.972.3", + "@aws-sdk/middleware-host-header": "^3.972.3", + "@aws-sdk/middleware-logger": "^3.972.3", + "@aws-sdk/middleware-recursion-detection": "^3.972.3", + "@aws-sdk/middleware-user-agent": "^3.972.7", + "@aws-sdk/region-config-resolver": "^3.972.3", + "@aws-sdk/types": "^3.973.1", + "@aws-sdk/util-endpoints": "3.986.0", + "@aws-sdk/util-user-agent-browser": "^3.972.3", + "@aws-sdk/util-user-agent-node": "^3.972.5", + "@smithy/config-resolver": "^4.4.6", + "@smithy/core": "^3.22.1", + "@smithy/fetch-http-handler": "^5.3.9", + "@smithy/hash-node": "^4.2.8", + "@smithy/invalid-dependency": "^4.2.8", + "@smithy/middleware-content-length": "^4.2.8", + "@smithy/middleware-endpoint": "^4.4.13", + "@smithy/middleware-retry": "^4.4.30", + "@smithy/middleware-serde": "^4.2.9", + "@smithy/middleware-stack": "^4.2.8", + "@smithy/node-config-provider": "^4.3.8", + "@smithy/node-http-handler": "^4.4.9", + "@smithy/protocol-http": "^5.3.8", + "@smithy/smithy-client": "^4.11.2", + "@smithy/types": "^4.12.0", + "@smithy/url-parser": "^4.2.8", + "@smithy/util-base64": "^4.3.0", + "@smithy/util-body-length-browser": "^4.2.0", + "@smithy/util-body-length-node": "^4.2.1", + "@smithy/util-defaults-mode-browser": "^4.3.29", + "@smithy/util-defaults-mode-node": "^4.2.32", + "@smithy/util-endpoints": "^3.2.8", + "@smithy/util-middleware": "^4.2.8", + "@smithy/util-retry": "^4.2.8", + "@smithy/util-utf8": "^4.2.0", + "@smithy/util-waiter": "^4.2.8", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=20.0.0" + } + }, + "scripts/utilities/supplier-data/node_modules/@aws-sdk/core": { + "version": "3.973.7", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/types": "^3.973.1", + "@aws-sdk/xml-builder": "^3.972.4", + "@smithy/core": "^3.22.1", + "@smithy/node-config-provider": "^4.3.8", + "@smithy/property-provider": "^4.2.8", + "@smithy/protocol-http": "^5.3.8", + "@smithy/signature-v4": "^5.3.8", + "@smithy/smithy-client": "^4.11.2", + "@smithy/types": "^4.12.0", + "@smithy/util-base64": "^4.3.0", + "@smithy/util-middleware": "^4.2.8", + "@smithy/util-utf8": "^4.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=20.0.0" + } + }, + "scripts/utilities/supplier-data/node_modules/@aws-sdk/util-endpoints": { + "version": "3.986.0", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/types": "^3.973.1", + "@smithy/types": "^4.12.0", + "@smithy/url-parser": "^4.2.8", + "@smithy/util-endpoints": "^3.2.8", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=20.0.0" + } + }, + "scripts/utilities/supplier-data/node_modules/@aws-sdk/xml-builder": { + "version": "3.972.4", + "license": "Apache-2.0", + "dependencies": { + "@smithy/types": "^4.12.0", + "fast-xml-parser": "5.3.4", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=20.0.0" + } + }, + "scripts/utilities/supplier-data/node_modules/@esbuild/linux-x64": { + "version": "0.25.12", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "scripts/utilities/supplier-data/node_modules/esbuild": { + "version": "0.25.12", + "hasInstallScript": true, + "license": "MIT", + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=18" + }, + "optionalDependencies": { + "@esbuild/aix-ppc64": "0.25.12", + "@esbuild/android-arm": "0.25.12", "@esbuild/android-arm64": "0.25.12", "@esbuild/android-x64": "0.25.12", "@esbuild/darwin-arm64": "0.25.12", @@ -18121,158 +20745,535 @@ "@esbuild/win32-x64": "0.25.12" } }, - "scripts/utilities/supplier-data/node_modules/pino": { - "version": "9.14.0", + "tests": { + "name": "nhs-notify-supplier-api-tests", + "version": "0.0.1", + "license": "ISC", + "dependencies": { + "@aws-sdk/client-api-gateway": "^3.906.0", + "@aws-sdk/client-dynamodb": "^3.984.0", + "@aws-sdk/client-kinesis": "^3.964.0", + "@aws-sdk/client-lambda": "^3.986.0", + "@aws-sdk/client-sns": "^3.984.0", + "@aws-sdk/lib-dynamodb": "^3.984.0", + "@nhsdigital/nhs-notify-event-schemas-letter-rendering": "^2.0.1", + "@pact-foundation/pact": "^16.0.4", + "@pact-foundation/pact-core": "^17.0.2", + "@playwright/test": "^1.57.0", + "allure-js-commons": "^3.3.3", + "dotenv": "^17.2.2", + "express": "^4.16.4", + "graphql": "^16.11.0", + "graphql-tag": "^2.12.6", + "md5": "^2.3.0", + "openapi-response-validator": "^12.1.3", + "pino": "^10.3.0", + "pino-pretty": "^13.1.3", + "playwright": "^1.54.2", + "playwright-core": "^1.54.2", + "ramda": "^0.32.0", + "randexp": "^0.5.3", + "undici-types": "^7.10.0", + "zod": "^4.1.11" + }, + "devDependencies": { + "@types/node": "^25.2.2", + "allure-commandline": "^2.34.1", + "allure-playwright": "^3.4.3", + "jest": "^30.1.3", + "ts-jest": "^29.4.0", + "ts-node": "^10.9.2", + "typescript": "^5.9.3" + } + }, + "tests/contracts/provider": { + "name": "@sap/contracts-provider", + "version": "1.0.0", + "dependencies": { + "@nhsdigital/nhs-notify-event-schemas-supplier-api": "*", + "@pact-foundation/pact": "^16.0.4" + }, + "devDependencies": { + "@tsconfig/node22": "^22.0.2", + "@types/jest": "^30.0.0", + "@types/node": "^25.2.2", + "eslint": "^9.27.0", + "glob": "^11.0.0", + "jest": "^30.0.0", + "ts-jest": "^29.4.0", + "typescript": "^5.9.3" + } + }, + "tests/node_modules/@aws-sdk/client-dynamodb": { + "version": "3.986.0", + "license": "Apache-2.0", + "dependencies": { + "@aws-crypto/sha256-browser": "5.2.0", + "@aws-crypto/sha256-js": "5.2.0", + "@aws-sdk/core": "^3.973.7", + "@aws-sdk/credential-provider-node": "^3.972.6", + "@aws-sdk/dynamodb-codec": "^3.972.8", + "@aws-sdk/middleware-endpoint-discovery": "^3.972.3", + "@aws-sdk/middleware-host-header": "^3.972.3", + "@aws-sdk/middleware-logger": "^3.972.3", + "@aws-sdk/middleware-recursion-detection": "^3.972.3", + "@aws-sdk/middleware-user-agent": "^3.972.7", + "@aws-sdk/region-config-resolver": "^3.972.3", + "@aws-sdk/types": "^3.973.1", + "@aws-sdk/util-endpoints": "3.986.0", + "@aws-sdk/util-user-agent-browser": "^3.972.3", + "@aws-sdk/util-user-agent-node": "^3.972.5", + "@smithy/config-resolver": "^4.4.6", + "@smithy/core": "^3.22.1", + "@smithy/fetch-http-handler": "^5.3.9", + "@smithy/hash-node": "^4.2.8", + "@smithy/invalid-dependency": "^4.2.8", + "@smithy/middleware-content-length": "^4.2.8", + "@smithy/middleware-endpoint": "^4.4.13", + "@smithy/middleware-retry": "^4.4.30", + "@smithy/middleware-serde": "^4.2.9", + "@smithy/middleware-stack": "^4.2.8", + "@smithy/node-config-provider": "^4.3.8", + "@smithy/node-http-handler": "^4.4.9", + "@smithy/protocol-http": "^5.3.8", + "@smithy/smithy-client": "^4.11.2", + "@smithy/types": "^4.12.0", + "@smithy/url-parser": "^4.2.8", + "@smithy/util-base64": "^4.3.0", + "@smithy/util-body-length-browser": "^4.2.0", + "@smithy/util-body-length-node": "^4.2.1", + "@smithy/util-defaults-mode-browser": "^4.3.29", + "@smithy/util-defaults-mode-node": "^4.2.32", + "@smithy/util-endpoints": "^3.2.8", + "@smithy/util-middleware": "^4.2.8", + "@smithy/util-retry": "^4.2.8", + "@smithy/util-utf8": "^4.2.0", + "@smithy/util-waiter": "^4.2.8", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=20.0.0" + } + }, + "tests/node_modules/@aws-sdk/client-sns": { + "version": "3.986.0", + "license": "Apache-2.0", + "dependencies": { + "@aws-crypto/sha256-browser": "5.2.0", + "@aws-crypto/sha256-js": "5.2.0", + "@aws-sdk/core": "^3.973.7", + "@aws-sdk/credential-provider-node": "^3.972.6", + "@aws-sdk/middleware-host-header": "^3.972.3", + "@aws-sdk/middleware-logger": "^3.972.3", + "@aws-sdk/middleware-recursion-detection": "^3.972.3", + "@aws-sdk/middleware-user-agent": "^3.972.7", + "@aws-sdk/region-config-resolver": "^3.972.3", + "@aws-sdk/types": "^3.973.1", + "@aws-sdk/util-endpoints": "3.986.0", + "@aws-sdk/util-user-agent-browser": "^3.972.3", + "@aws-sdk/util-user-agent-node": "^3.972.5", + "@smithy/config-resolver": "^4.4.6", + "@smithy/core": "^3.22.1", + "@smithy/fetch-http-handler": "^5.3.9", + "@smithy/hash-node": "^4.2.8", + "@smithy/invalid-dependency": "^4.2.8", + "@smithy/middleware-content-length": "^4.2.8", + "@smithy/middleware-endpoint": "^4.4.13", + "@smithy/middleware-retry": "^4.4.30", + "@smithy/middleware-serde": "^4.2.9", + "@smithy/middleware-stack": "^4.2.8", + "@smithy/node-config-provider": "^4.3.8", + "@smithy/node-http-handler": "^4.4.9", + "@smithy/protocol-http": "^5.3.8", + "@smithy/smithy-client": "^4.11.2", + "@smithy/types": "^4.12.0", + "@smithy/url-parser": "^4.2.8", + "@smithy/util-base64": "^4.3.0", + "@smithy/util-body-length-browser": "^4.2.0", + "@smithy/util-body-length-node": "^4.2.1", + "@smithy/util-defaults-mode-browser": "^4.3.29", + "@smithy/util-defaults-mode-node": "^4.2.32", + "@smithy/util-endpoints": "^3.2.8", + "@smithy/util-middleware": "^4.2.8", + "@smithy/util-retry": "^4.2.8", + "@smithy/util-utf8": "^4.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=20.0.0" + } + }, + "tests/node_modules/@aws-sdk/core": { + "version": "3.973.7", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/types": "^3.973.1", + "@aws-sdk/xml-builder": "^3.972.4", + "@smithy/core": "^3.22.1", + "@smithy/node-config-provider": "^4.3.8", + "@smithy/property-provider": "^4.2.8", + "@smithy/protocol-http": "^5.3.8", + "@smithy/signature-v4": "^5.3.8", + "@smithy/smithy-client": "^4.11.2", + "@smithy/types": "^4.12.0", + "@smithy/util-base64": "^4.3.0", + "@smithy/util-middleware": "^4.2.8", + "@smithy/util-utf8": "^4.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=20.0.0" + } + }, + "tests/node_modules/@aws-sdk/lib-dynamodb": { + "version": "3.986.0", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/core": "^3.973.7", + "@aws-sdk/util-dynamodb": "3.986.0", + "@smithy/core": "^3.22.1", + "@smithy/smithy-client": "^4.11.2", + "@smithy/types": "^4.12.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=20.0.0" + }, + "peerDependencies": { + "@aws-sdk/client-dynamodb": "^3.986.0" + } + }, + "tests/node_modules/@aws-sdk/util-dynamodb": { + "version": "3.986.0", + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=20.0.0" + }, + "peerDependencies": { + "@aws-sdk/client-dynamodb": "^3.986.0" + } + }, + "tests/node_modules/@aws-sdk/util-endpoints": { + "version": "3.986.0", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/types": "^3.973.1", + "@smithy/types": "^4.12.0", + "@smithy/url-parser": "^4.2.8", + "@smithy/util-endpoints": "^3.2.8", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=20.0.0" + } + }, + "tests/node_modules/@aws-sdk/xml-builder": { + "version": "3.972.4", + "license": "Apache-2.0", + "dependencies": { + "@smithy/types": "^4.12.0", + "fast-xml-parser": "5.3.4", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=20.0.0" + } + }, + "tests/node_modules/@types/node": { + "version": "25.2.2", + "dev": true, + "license": "MIT", + "dependencies": { + "undici-types": "~7.16.0" + } + }, + "tests/node_modules/accepts": { + "version": "1.3.8", + "license": "MIT", + "dependencies": { + "mime-types": "~2.1.34", + "negotiator": "0.6.3" + }, + "engines": { + "node": ">= 0.6" + } + }, + "tests/node_modules/body-parser": { + "version": "1.20.4", + "license": "MIT", + "dependencies": { + "bytes": "~3.1.2", + "content-type": "~1.0.5", + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "~1.2.0", + "http-errors": "~2.0.1", + "iconv-lite": "~0.4.24", + "on-finished": "~2.4.1", + "qs": "~6.14.0", + "raw-body": "~2.5.3", + "type-is": "~1.6.18", + "unpipe": "~1.0.0" + }, + "engines": { + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" + } + }, + "tests/node_modules/content-disposition": { + "version": "0.5.4", + "license": "MIT", + "dependencies": { + "safe-buffer": "5.2.1" + }, + "engines": { + "node": ">= 0.6" + } + }, + "tests/node_modules/cookie-signature": { + "version": "1.0.7", + "license": "MIT" + }, + "tests/node_modules/debug": { + "version": "2.6.9", + "license": "MIT", + "dependencies": { + "ms": "2.0.0" + } + }, + "tests/node_modules/debug/node_modules/ms": { + "version": "2.0.0", + "license": "MIT" + }, + "tests/node_modules/express": { + "version": "4.22.1", + "license": "MIT", + "dependencies": { + "accepts": "~1.3.8", + "array-flatten": "1.1.1", + "body-parser": "~1.20.3", + "content-disposition": "~0.5.4", + "content-type": "~1.0.4", + "cookie": "~0.7.1", + "cookie-signature": "~1.0.6", + "debug": "2.6.9", + "depd": "2.0.0", + "encodeurl": "~2.0.0", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "finalhandler": "~1.3.1", + "fresh": "~0.5.2", + "http-errors": "~2.0.0", + "merge-descriptors": "1.0.3", + "methods": "~1.1.2", + "on-finished": "~2.4.1", + "parseurl": "~1.3.3", + "path-to-regexp": "~0.1.12", + "proxy-addr": "~2.0.7", + "qs": "~6.14.0", + "range-parser": "~1.2.1", + "safe-buffer": "5.2.1", + "send": "~0.19.0", + "serve-static": "~1.16.2", + "setprototypeof": "1.2.0", + "statuses": "~2.0.1", + "type-is": "~1.6.18", + "utils-merge": "1.0.1", + "vary": "~1.1.2" + }, + "engines": { + "node": ">= 0.10.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "tests/node_modules/finalhandler": { + "version": "1.3.2", + "license": "MIT", + "dependencies": { + "debug": "2.6.9", + "encodeurl": "~2.0.0", + "escape-html": "~1.0.3", + "on-finished": "~2.4.1", + "parseurl": "~1.3.3", + "statuses": "~2.0.2", + "unpipe": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "tests/node_modules/fresh": { + "version": "0.5.2", "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "tests/node_modules/glob": { + "version": "11.1.0", + "dev": true, + "license": "BlueOak-1.0.0", "dependencies": { - "@pinojs/redact": "^0.4.0", - "atomic-sleep": "^1.0.0", - "on-exit-leak-free": "^2.1.0", - "pino-abstract-transport": "^2.0.0", - "pino-std-serializers": "^7.0.0", - "process-warning": "^5.0.0", - "quick-format-unescaped": "^4.0.3", - "real-require": "^0.2.0", - "safe-stable-stringify": "^2.3.1", - "sonic-boom": "^4.0.1", - "thread-stream": "^3.0.0" + "foreground-child": "^3.3.1", + "jackspeak": "^4.1.1", + "minimatch": "^10.1.1", + "minipass": "^7.1.2", + "package-json-from-dist": "^1.0.0", + "path-scurry": "^2.0.0" }, "bin": { - "pino": "bin.js" + "glob": "dist/esm/bin.mjs" + }, + "engines": { + "node": "20 || >=22" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "tests": { - "name": "nhs-notify-supplier-api-tests", - "version": "0.0.1", - "license": "ISC", + "tests/node_modules/iconv-lite": { + "version": "0.4.24", + "license": "MIT", "dependencies": { - "@aws-sdk/client-api-gateway": "^3.906.0", - "@aws-sdk/client-dynamodb": "^3.984.0", - "@aws-sdk/client-kinesis": "^3.964.0", - "@aws-sdk/client-lambda": "^3.986.0", - "@aws-sdk/client-sns": "^3.984.0", - "@aws-sdk/lib-dynamodb": "^3.984.0", - "@nhsdigital/nhs-notify-event-schemas-letter-rendering": "^2.0.1", - "@pact-foundation/pact": "^16.0.4", - "@pact-foundation/pact-core": "^17.0.2", - "@playwright/test": "^1.57.0", - "allure-js-commons": "^3.3.3", - "dotenv": "^17.2.2", - "express": "^4.16.4", - "graphql": "^16.11.0", - "graphql-tag": "^2.12.6", - "md5": "^2.3.0", - "openapi-response-validator": "^12.1.3", - "pino": "^10.3.0", - "pino-pretty": "^13.1.3", - "playwright": "^1.54.2", - "playwright-core": "^1.54.2", - "ramda": "^0.32.0", - "randexp": "^0.5.3", - "undici-types": "^7.10.0", - "zod": "^4.1.11" + "safer-buffer": ">= 2.1.2 < 3" }, - "devDependencies": { - "@types/node": "^25.2.2", - "allure-commandline": "^2.34.1", - "allure-playwright": "^3.4.3", - "jest": "^30.1.3", - "ts-jest": "^29.4.0", - "ts-node": "^10.9.2", - "typescript": "^5.9.3" + "engines": { + "node": ">=0.10.0" } }, - "tests/contracts/provider": { - "name": "@sap/contracts-provider", - "version": "1.0.0", + "tests/node_modules/jackspeak": { + "version": "4.1.1", + "dev": true, + "license": "BlueOak-1.0.0", "dependencies": { - "@nhsdigital/nhs-notify-event-schemas-supplier-api": "*", - "@pact-foundation/pact": "^16.0.4" + "@isaacs/cliui": "^8.0.2" }, - "devDependencies": { - "@tsconfig/node22": "^22.0.2", - "@types/jest": "^30.0.0", - "@types/node": "^25.2.2", - "eslint": "^9.27.0", - "glob": "^11.0.0", - "jest": "^30.0.0", - "ts-jest": "^29.4.0", - "typescript": "^5.9.3" + "engines": { + "node": "20 || >=22" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "tests/node_modules/@aws-sdk/client-lambda": { - "version": "3.986.0", - "license": "Apache-2.0", + "tests/node_modules/media-typer": { + "version": "0.3.0", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "tests/node_modules/merge-descriptors": { + "version": "1.0.3", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "tests/node_modules/mime-db": { + "version": "1.52.0", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "tests/node_modules/mime-types": { + "version": "2.1.35", + "license": "MIT", "dependencies": { - "@aws-crypto/sha256-browser": "5.2.0", - "@aws-crypto/sha256-js": "5.2.0", - "@aws-sdk/core": "^3.973.7", - "@aws-sdk/credential-provider-node": "^3.972.6", - "@aws-sdk/middleware-host-header": "^3.972.3", - "@aws-sdk/middleware-logger": "^3.972.3", - "@aws-sdk/middleware-recursion-detection": "^3.972.3", - "@aws-sdk/middleware-user-agent": "^3.972.7", - "@aws-sdk/region-config-resolver": "^3.972.3", - "@aws-sdk/types": "^3.973.1", - "@aws-sdk/util-endpoints": "3.986.0", - "@aws-sdk/util-user-agent-browser": "^3.972.3", - "@aws-sdk/util-user-agent-node": "^3.972.5", - "@smithy/config-resolver": "^4.4.6", - "@smithy/core": "^3.22.1", - "@smithy/eventstream-serde-browser": "^4.2.8", - "@smithy/eventstream-serde-config-resolver": "^4.3.8", - "@smithy/eventstream-serde-node": "^4.2.8", - "@smithy/fetch-http-handler": "^5.3.9", - "@smithy/hash-node": "^4.2.8", - "@smithy/invalid-dependency": "^4.2.8", - "@smithy/middleware-content-length": "^4.2.8", - "@smithy/middleware-endpoint": "^4.4.13", - "@smithy/middleware-retry": "^4.4.30", - "@smithy/middleware-serde": "^4.2.9", - "@smithy/middleware-stack": "^4.2.8", - "@smithy/node-config-provider": "^4.3.8", - "@smithy/node-http-handler": "^4.4.9", - "@smithy/protocol-http": "^5.3.8", - "@smithy/smithy-client": "^4.11.2", - "@smithy/types": "^4.12.0", - "@smithy/url-parser": "^4.2.8", - "@smithy/util-base64": "^4.3.0", - "@smithy/util-body-length-browser": "^4.2.0", - "@smithy/util-body-length-node": "^4.2.1", - "@smithy/util-defaults-mode-browser": "^4.3.29", - "@smithy/util-defaults-mode-node": "^4.2.32", - "@smithy/util-endpoints": "^3.2.8", - "@smithy/util-middleware": "^4.2.8", - "@smithy/util-retry": "^4.2.8", - "@smithy/util-stream": "^4.5.11", - "@smithy/util-utf8": "^4.2.0", - "@smithy/util-waiter": "^4.2.8", - "tslib": "^2.6.2" + "mime-db": "1.52.0" }, "engines": { - "node": ">=20.0.0" + "node": ">= 0.6" } }, - "tests/node_modules/@aws-sdk/util-endpoints": { - "version": "3.986.0", - "license": "Apache-2.0", + "tests/node_modules/minimatch": { + "version": "10.1.1", + "dev": true, + "license": "BlueOak-1.0.0", "dependencies": { - "@aws-sdk/types": "^3.973.1", - "@smithy/types": "^4.12.0", - "@smithy/url-parser": "^4.2.8", - "@smithy/util-endpoints": "^3.2.8", - "tslib": "^2.6.2" + "@isaacs/brace-expansion": "^5.0.0" }, "engines": { - "node": ">=20.0.0" + "node": "20 || >=22" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "tests/node_modules/@types/node": { - "version": "24.10.12", - "dev": true, + "tests/node_modules/negotiator": { + "version": "0.6.3", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "tests/node_modules/path-to-regexp": { + "version": "0.1.12", + "license": "MIT" + }, + "tests/node_modules/raw-body": { + "version": "2.5.3", "license": "MIT", "dependencies": { - "undici-types": "~7.16.0" + "bytes": "~3.1.2", + "http-errors": "~2.0.1", + "iconv-lite": "~0.4.24", + "unpipe": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "tests/node_modules/send": { + "version": "0.19.2", + "license": "MIT", + "dependencies": { + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "encodeurl": "~2.0.0", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "fresh": "~0.5.2", + "http-errors": "~2.0.1", + "mime": "1.6.0", + "ms": "2.1.3", + "on-finished": "~2.4.1", + "range-parser": "~1.2.1", + "statuses": "~2.0.2" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "tests/node_modules/serve-static": { + "version": "1.16.3", + "license": "MIT", + "dependencies": { + "encodeurl": "~2.0.0", + "escape-html": "~1.0.3", + "parseurl": "~1.3.3", + "send": "~0.19.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "tests/node_modules/type-is": { + "version": "1.6.18", + "license": "MIT", + "dependencies": { + "media-typer": "0.3.0", + "mime-types": "~2.1.24" + }, + "engines": { + "node": ">= 0.6" } }, "tests/node_modules/undici-types": { From b4cfcbfcee9a13611e237cfddafb6898eaf0c950 Mon Sep 17 00:00:00 2001 From: David Wass Date: Mon, 9 Feb 2026 15:10:05 +0000 Subject: [PATCH 15/28] Unit tests --- .../handler/__tests__/upsert-handler.test.ts | 123 ++++++++++++++++++ 1 file changed, 123 insertions(+) diff --git a/lambdas/upsert-letter/src/handler/__tests__/upsert-handler.test.ts b/lambdas/upsert-letter/src/handler/__tests__/upsert-handler.test.ts index 0fa343750..864926935 100644 --- a/lambdas/upsert-letter/src/handler/__tests__/upsert-handler.test.ts +++ b/lambdas/upsert-letter/src/handler/__tests__/upsert-handler.test.ts @@ -75,6 +75,48 @@ function createPreparedV1Event( }; } +function createSupplierStatusChangeEventWithoutSupplier( + overrides: Partial = {}, +): LetterEvent { + const now = new Date().toISOString(); + + return $LetterEvent.parse({ + data: { + domainId: overrides.domainId ?? "f47ac10b-58cc-4372-a567-0e02b2c3d479", + groupId: "client_template", + origin: { + domain: "letter-rendering", + event: "f47ac10b-58cc-4372-a567-0e02b2c3d479", + source: "/data-plane/letter-rendering/prod/render-pdf", + subject: + "client/00f3b388-bbe9-41c9-9e76-052d37ee8988/letter-request/0o5Fs0EELR0fUjHjbCnEtdUwQe4_0o5Fs0EELR0fUjHjbCnEtdUwQe5", + }, + reasonCode: "R07", + reasonText: "No such address", + specificationId: "1y3q9v1zzzz", + billingRef: "1y3q9v1zzzz", + status: "RETURNED", + supplierId: "", + }, + datacontenttype: "application/json", + dataschema: + "https://notify.nhs.uk/cloudevents/schemas/supplier-api/letter.RETURNED.1.0.0.schema.json", + dataschemaversion: "1.0.0", + id: overrides.id ?? "23f1f09c-a555-4d9b-8405-0b33490bc920", + plane: "data", + recordedtime: now, + severitynumber: 2, + severitytext: "INFO", + source: "/data-plane/supplier-api/prod/update-status", + specversion: "1.0", + subject: + "letter-origin/letter-rendering/letter/f47ac10b-58cc-4372-a567-0e02b2c3d479", + time: now, + traceparent: "00-0af7651916cd43dd8448eb211c80319c-b7ad6b7169203331-01", + type: "uk.nhs.notify.supplier-api.letter.RETURNED.v1", + }); +} + function createPreparedV2Event( overrides: Partial = {}, ): LetterRequestPreparedEventV2 { @@ -129,6 +171,26 @@ function createSupplierStatusChangeEvent( }); } +// Mock aws-embedded-metrics +let mockMetrics: any; +jest.mock("aws-embedded-metrics", () => ({ + metricScope: ( + handler: (metrics: any) => (event: SQSEvent) => Promise, + ) => { + return async (event: SQSEvent) => { + mockMetrics = { + setNamespace: jest.fn(), + putDimensions: jest.fn(), + putMetric: jest.fn(), + }; + return handler(mockMetrics)(event); + }; + }, + Unit: { + Count: "Count", + }, +})); + describe("createUpsertLetterHandler", () => { const mockedDeps: jest.Mocked = { letterRepo: { @@ -213,6 +275,40 @@ describe("createUpsertLetterHandler", () => { expect(updatedLetter.reasonCode).toBe("R07"); expect(updatedLetter.reasonText).toBe("No such address"); expect(updatedLetter.supplierId).toBe("supplier1"); + expect(mockMetrics.setNamespace).toHaveBeenCalledWith("upsertLetter"); + expect(mockMetrics.putDimensions).toHaveBeenCalledWith({ + Supplier: "supplier1", + }); + expect(mockMetrics.putMetric).toHaveBeenCalledWith( + "MessagesProcessed", + 3, + "Count", + ); + }); + + test("unknown supplier has metric emitted with 'unknown' supplier dimension", async () => { + const letterEvent = createSupplierStatusChangeEventWithoutSupplier(); + + const message = { + letterEvent, + operationType: "uk.nhs.notify.supplier-api.letter.RETURNED.v1", + supplierSpec: undefined, + }; + const evt: SQSEvent = createSQSEvent([ + createSqsRecord("unknown-supplier", JSON.stringify(message)), + ]); + + await createUpsertLetterHandler(mockedDeps)(evt, {} as any, {} as any); + + expect(mockMetrics.setNamespace).toHaveBeenCalledWith("upsertLetter"); + expect(mockMetrics.putDimensions).toHaveBeenCalledWith({ + Supplier: "unknown", + }); + expect(mockMetrics.putMetric).toHaveBeenCalledWith( + "MessagesProcessed", + 1, + "Count", + ); }); test("invalid JSON produces batch failure and logs error", async () => { @@ -238,6 +334,15 @@ describe("createUpsertLetterHandler", () => { }), ); expect(mockedDeps.letterRepo.putLetter).not.toHaveBeenCalled(); + expect(mockMetrics.setNamespace).toHaveBeenCalledWith("upsertLetter"); + expect(mockMetrics.putDimensions).toHaveBeenCalledWith({ + Supplier: "unknown", + }); + expect(mockMetrics.putMetric).toHaveBeenCalledWith( + "MessageFailed", + 1, + "Count", + ); }); test("invalid letter event schema produces batch failure", async () => { @@ -272,6 +377,15 @@ describe("createUpsertLetterHandler", () => { }), ); expect(mockedDeps.letterRepo.putLetter).not.toHaveBeenCalled(); + expect(mockMetrics.setNamespace).toHaveBeenCalledWith("upsertLetter"); + expect(mockMetrics.putDimensions).toHaveBeenCalledWith({ + Supplier: "supplier1", + }); + expect(mockMetrics.putMetric).toHaveBeenCalledWith( + "MessageFailed", + 1, + "Count", + ); }); test("no event type produces batch failure and logs error", async () => { @@ -328,6 +442,15 @@ describe("createUpsertLetterHandler", () => { messageId: "bad-event-type", }), ); + expect(mockMetrics.setNamespace).toHaveBeenCalledWith("upsertLetter"); + expect(mockMetrics.putDimensions).toHaveBeenCalledWith({ + Supplier: "supplier1", + }); + expect(mockMetrics.putMetric).toHaveBeenCalledWith( + "MessageFailed", + 1, + "Count", + ); }); test("valid event type and invalid schema produces batch failure and logs error", async () => { From 30cac09ec668fa582e72ea8166e16f6517c089c4 Mon Sep 17 00:00:00 2001 From: David Wass Date: Tue, 10 Feb 2026 14:45:25 +0000 Subject: [PATCH 16/28] axios vulnerability --- package-lock.json | 2 ++ 1 file changed, 2 insertions(+) diff --git a/package-lock.json b/package-lock.json index ef2dbbcf1..089fb808a 100644 --- a/package-lock.json +++ b/package-lock.json @@ -9610,6 +9610,8 @@ }, "node_modules/axios": { "version": "1.13.5", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.13.5.tgz", + "integrity": "sha512-cz4ur7Vb0xS4/KUN0tPWe44eqxrIu31me+fbang3ijiNscE129POzipJJA6zniq2C/Z6sJCjMimjS8Lc/GAs8Q==", "license": "MIT", "dependencies": { "follow-redirects": "^1.15.11", From c250376db9ce3fd3ea54d64ee31451d0852e91f0 Mon Sep 17 00:00:00 2001 From: David Wass Date: Tue, 10 Feb 2026 15:03:39 +0000 Subject: [PATCH 17/28] lint fix --- lambdas/allocate-letter/src/handler/allocate-handler.ts | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/lambdas/allocate-letter/src/handler/allocate-handler.ts b/lambdas/allocate-letter/src/handler/allocate-handler.ts index 5809f1e60..8638fe6b8 100644 --- a/lambdas/allocate-letter/src/handler/allocate-handler.ts +++ b/lambdas/allocate-letter/src/handler/allocate-handler.ts @@ -9,9 +9,8 @@ import { SendMessageCommand } from "@aws-sdk/client-sqs"; import { LetterRequestPreparedEvent } from "@nhsdigital/nhs-notify-event-schemas-letter-rendering-v1"; import { LetterRequestPreparedEventV2 } from "@nhsdigital/nhs-notify-event-schemas-letter-rendering"; -import z, { url } from "zod"; +import z from "zod"; import { Deps } from "../config/deps"; -import { de } from "zod/v4/locales"; type SupplierSpec = { supplierId: string; specId: string }; type PreparedEvents = LetterRequestPreparedEventV2 | LetterRequestPreparedEvent; From de50f5b35c2a8ae4094eeb952f9d2461a2b24635 Mon Sep 17 00:00:00 2001 From: David Wass Date: Wed, 11 Feb 2026 09:52:54 +0000 Subject: [PATCH 18/28] remove variant map after merge conflict --- lambdas/upsert-letter/src/config/env.ts | 4 ---- 1 file changed, 4 deletions(-) diff --git a/lambdas/upsert-letter/src/config/env.ts b/lambdas/upsert-letter/src/config/env.ts index 05fc909af..fd205813a 100644 --- a/lambdas/upsert-letter/src/config/env.ts +++ b/lambdas/upsert-letter/src/config/env.ts @@ -3,10 +3,6 @@ import { z } from "zod"; const EnvVarsSchema = z.object({ LETTERS_TABLE_NAME: z.string(), LETTER_TTL_HOURS: z.coerce.number().int(), - VARIANT_MAP: z.string().transform((str, _) => { - const parsed = JSON.parse(str); - return LetterVariantSchema.parse(parsed); - }), PINO_LOG_LEVEL: z.coerce.string().optional(), }); From cb9ddb13baca8fa43b87b706beaf275ce810f899 Mon Sep 17 00:00:00 2001 From: David Wass Date: Wed, 11 Feb 2026 10:32:03 +0000 Subject: [PATCH 19/28] More unit test fixes --- .../handler/__tests__/upsert-handler.test.ts | 106 ++++++++++++------ 1 file changed, 71 insertions(+), 35 deletions(-) diff --git a/lambdas/upsert-letter/src/handler/__tests__/upsert-handler.test.ts b/lambdas/upsert-letter/src/handler/__tests__/upsert-handler.test.ts index 864926935..c06c57785 100644 --- a/lambdas/upsert-letter/src/handler/__tests__/upsert-handler.test.ts +++ b/lambdas/upsert-letter/src/handler/__tests__/upsert-handler.test.ts @@ -354,7 +354,7 @@ describe("createUpsertLetterHandler", () => { }; const evt: SQSEvent = createSQSEvent([ - createSqsRecord("bad-schema", JSON.stringify(message)), + createSqsRecord("bad-notification-schema", JSON.stringify(message)), ]); const result = await createUpsertLetterHandler(mockedDeps)( @@ -420,8 +420,14 @@ describe("createUpsertLetterHandler", () => { }); test("invalid event type produces batch failure and logs error", async () => { + const message = { + letterEvent: { someField: "invalid" }, + operationType: + "uk.nhs.notify.letter-rendering.letter-request.prepared.v2", + supplierSpec: { supplierId: "supplier1", specId: "spec1" }, + }; const evt: SQSEvent = createSQSEvent([ - createSqsRecord("unknown-op", JSON.stringify(message)), + createSqsRecord("bad-event-type", JSON.stringify(message)), ]); const result = await createUpsertLetterHandler(mockedDeps)( @@ -453,18 +459,50 @@ describe("createUpsertLetterHandler", () => { ); }); + test("unknown operation type produces batch failure and logs error", async () => { + const message = { + letterEvent: createPreparedV1Event(), + operationType: "unknown.operation.type", + supplierSpec: { supplierId: "supplier1", specId: "spec1" }, + }; + const evt: SQSEvent = createSQSEvent([ + createSqsRecord("bad-operation-type", JSON.stringify(message)), + ]); + + const result = await createUpsertLetterHandler(mockedDeps)( + evt, + {} as any, + {} as any, + ); + + expect(result).toBeDefined(); + if (!result) throw new Error("expected BatchResponse, got void"); + expect(result.batchItemFailures).toHaveLength(1); + expect(result.batchItemFailures[0].itemIdentifier).toBe( + "bad-operation-type", + ); + expect(mockedDeps.letterRepo.putLetter).not.toHaveBeenCalled(); + expect(mockedDeps.letterRepo.updateLetterStatus).not.toHaveBeenCalled(); + expect((mockedDeps.logger.error as jest.Mock).mock.calls[0][0]).toEqual( + expect.objectContaining({ + description: "Error processing upsert of record", + messageId: "bad-operation-type", + }), + ); + expect(mockMetrics.setNamespace).toHaveBeenCalledWith("upsertLetter"); + expect(mockMetrics.putDimensions).toHaveBeenCalledWith({ + Supplier: "supplier1", + }); + expect(mockMetrics.putMetric).toHaveBeenCalledWith( + "MessageFailed", + 1, + "Count", + ); + }); + test("valid event type and invalid schema produces batch failure and logs error", async () => { const evt: SQSEvent = createSQSEvent([ - createSqsRecord( - "ok-msg", - JSON.stringify({ - letterEvent: createPreparedV2Event(), - operationType: - "uk.nhs.notify.letter-rendering.letter-request.prepared.v2", - supplierSpec: { supplierId: "supplier1", specId: "spec1" }, - }), - ), - createSqsRecord("fail-msg", "invalid-json"), + createSqsRecord("bad-event-schema", "invalid-json"), ]); const result = await createUpsertLetterHandler(mockedDeps)( @@ -492,29 +530,27 @@ describe("createUpsertLetterHandler", () => { .mockResolvedValueOnce({}) .mockRejectedValueOnce(new Error("ddb error")); + const message1 = { + letterEvent: createPreparedV2Event({ + id: "7b9a03ca-342a-4150-b56b-989109c45615", + domainId: "ok", + }), + operationType: + "uk.nhs.notify.letter-rendering.letter-request.prepared.v2", + supplierSpec: { supplierId: "supplier1", specId: "spec1" }, + }; + const message2 = { + letterEvent: createPreparedV2Event({ + id: "7b9a03ca-342a-4150-b56b-989109c45616", + domainId: "fail", + }), + operationType: + "uk.nhs.notify.letter-rendering.letter-request.prepared.v2", + supplierSpec: { supplierId: "supplier1", specId: "spec1" }, + }; const evt: SQSEvent = createSQSEvent([ - createSqsRecord( - "ok-msg", - JSON.stringify( - createNotification( - createPreparedV2Event({ - id: "7b9a03ca-342a-4150-b56b-989109c45615", - domainId: "ok", - }), - ), - ), - ), - createSqsRecord( - "fail-msg", - JSON.stringify( - createNotification( - createPreparedV2Event({ - id: "7b9a03ca-342a-4150-b56b-989109c45616", - domainId: "fail", - }), - ), - ), - ), + createSqsRecord("ok-msg", JSON.stringify(message1)), + createSqsRecord("fail-msg", JSON.stringify(message2)), ]); const result = await createUpsertLetterHandler(mockedDeps)( @@ -529,6 +565,6 @@ describe("createUpsertLetterHandler", () => { expect(result.batchItemFailures).toHaveLength(1); expect(result.batchItemFailures[0].itemIdentifier).toBe("fail-msg"); - expect(mockedDeps.letterRepo.putLetter).toHaveBeenCalledTimes(1); + expect(mockedDeps.logger.error).toHaveBeenCalled(); }); }); From 9cc1221ad0a8aa4b58bfc196de2007ff4c51c157 Mon Sep 17 00:00:00 2001 From: David Wass Date: Wed, 11 Feb 2026 11:02:33 +0000 Subject: [PATCH 20/28] logging --- lambdas/allocate-letter/src/handler/allocate-handler.ts | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/lambdas/allocate-letter/src/handler/allocate-handler.ts b/lambdas/allocate-letter/src/handler/allocate-handler.ts index 8638fe6b8..9ffbfbc6b 100644 --- a/lambdas/allocate-letter/src/handler/allocate-handler.ts +++ b/lambdas/allocate-letter/src/handler/allocate-handler.ts @@ -77,6 +77,11 @@ export default function createAllocatedLetterHandler(deps: Deps): SQSHandler { const letterEvent: unknown = removeEventBridgeWrapper(snsEvent); + deps.logger.info({ + description: "Extracted letter event", + messageId: record.messageId, + }); + const operationType = getType(letterEvent); let supplierSpec: SupplierSpec | undefined; From 7f44d7c5fe049c206e79a525b8fd64a6a4a7d5a5 Mon Sep 17 00:00:00 2001 From: David Wass Date: Thu, 12 Feb 2026 09:14:57 +0000 Subject: [PATCH 21/28] rename allocate-letter to supplier-allocator --- ...a_event_source_mapping_allocate_letters.tf | 9 -- ...event_source_mapping_supplier_allocator.tf | 9 ++ ...mbda_event_source_mapping_upsert_letter.tf | 2 +- ...tf => module_lambda_supplier_allocator.tf} | 4 +- ...rs.tf => module_sqs_supplier_allocator.tf} | 2 +- .../.eslintignore | 0 .../.gitignore | 0 .../jest.config.ts | 0 .../package.json | 0 .../src/config/__tests__/deps.test.ts | 2 +- .../src/config/__tests__/env.test.ts | 0 .../src/config/deps.ts | 0 .../src/config/env.ts | 0 .../__tests__/allocate-handler.test.ts | 86 +++++-------------- .../src/handler/allocate-handler.ts | 29 +++---- .../src/index.ts | 5 +- .../tsconfig.json | 0 .../src/handler/upsert-handler.ts | 19 +++- 18 files changed, 65 insertions(+), 102 deletions(-) delete mode 100644 infrastructure/terraform/components/api/lambda_event_source_mapping_allocate_letters.tf create mode 100644 infrastructure/terraform/components/api/lambda_event_source_mapping_supplier_allocator.tf rename infrastructure/terraform/components/api/{module_lambda_allocate_letter.tf => module_lambda_supplier_allocator.tf} (95%) rename infrastructure/terraform/components/api/{module_sqs_allocated_letters.tf => module_sqs_supplier_allocator.tf} (91%) rename lambdas/{allocate-letter => supplier-allocator}/.eslintignore (100%) rename lambdas/{allocate-letter => supplier-allocator}/.gitignore (100%) rename lambdas/{allocate-letter => supplier-allocator}/jest.config.ts (100%) rename lambdas/{allocate-letter => supplier-allocator}/package.json (100%) rename lambdas/{allocate-letter => supplier-allocator}/src/config/__tests__/deps.test.ts (93%) rename lambdas/{allocate-letter => supplier-allocator}/src/config/__tests__/env.test.ts (100%) rename lambdas/{allocate-letter => supplier-allocator}/src/config/deps.ts (100%) rename lambdas/{allocate-letter => supplier-allocator}/src/config/env.ts (100%) rename lambdas/{allocate-letter => supplier-allocator}/src/handler/__tests__/allocate-handler.test.ts (85%) rename lambdas/{allocate-letter => supplier-allocator}/src/handler/allocate-handler.ts (82%) rename lambdas/{allocate-letter => supplier-allocator}/src/index.ts (51%) rename lambdas/{allocate-letter => supplier-allocator}/tsconfig.json (100%) diff --git a/infrastructure/terraform/components/api/lambda_event_source_mapping_allocate_letters.tf b/infrastructure/terraform/components/api/lambda_event_source_mapping_allocate_letters.tf deleted file mode 100644 index d2e087847..000000000 --- a/infrastructure/terraform/components/api/lambda_event_source_mapping_allocate_letters.tf +++ /dev/null @@ -1,9 +0,0 @@ -resource "aws_lambda_event_source_mapping" "allocate_letter" { - event_source_arn = module.sqs_letter_updates.sqs_queue_arn - function_name = module.allocate_letter.function_name - batch_size = 10 - maximum_batching_window_in_seconds = 5 - function_response_types = [ - "ReportBatchItemFailures" - ] -} diff --git a/infrastructure/terraform/components/api/lambda_event_source_mapping_supplier_allocator.tf b/infrastructure/terraform/components/api/lambda_event_source_mapping_supplier_allocator.tf new file mode 100644 index 000000000..66bfd6792 --- /dev/null +++ b/infrastructure/terraform/components/api/lambda_event_source_mapping_supplier_allocator.tf @@ -0,0 +1,9 @@ +resource "aws_lambda_event_source_mapping" "supplier_allocator" { + event_source_arn = module.sqs_supplier_allocator.sqs_queue_arn + function_name = module.supplier_allocator.function_name + batch_size = 10 + maximum_batching_window_in_seconds = 5 + function_response_types = [ + "ReportBatchItemFailures" + ] +} diff --git a/infrastructure/terraform/components/api/lambda_event_source_mapping_upsert_letter.tf b/infrastructure/terraform/components/api/lambda_event_source_mapping_upsert_letter.tf index 3b9b62d03..a592ea9ec 100644 --- a/infrastructure/terraform/components/api/lambda_event_source_mapping_upsert_letter.tf +++ b/infrastructure/terraform/components/api/lambda_event_source_mapping_upsert_letter.tf @@ -1,5 +1,5 @@ resource "aws_lambda_event_source_mapping" "upsert_letter" { - event_source_arn = module.sqs_allocated_letters.sqs_queue_arn + event_source_arn = module.sqs_letter_updates.sqs_queue_arn function_name = module.upsert_letter.function_name batch_size = 10 maximum_batching_window_in_seconds = 5 diff --git a/infrastructure/terraform/components/api/module_lambda_allocate_letter.tf b/infrastructure/terraform/components/api/module_lambda_supplier_allocator.tf similarity index 95% rename from infrastructure/terraform/components/api/module_lambda_allocate_letter.tf rename to infrastructure/terraform/components/api/module_lambda_supplier_allocator.tf index dfd2a51aa..7e9064e34 100644 --- a/infrastructure/terraform/components/api/module_lambda_allocate_letter.tf +++ b/infrastructure/terraform/components/api/module_lambda_supplier_allocator.tf @@ -20,9 +20,9 @@ module "allocate_letter" { function_s3_bucket = local.acct.s3_buckets["lambda_function_artefacts"]["id"] function_code_base_path = local.aws_lambda_functions_dir_path - function_code_dir = "allocate-letter/dist" + function_code_dir = "supplier-allocator/dist" function_include_common = true - handler_function_name = "allocateLetterHandler" + handler_function_name = "supplierAllocatorHandler" runtime = "nodejs22.x" memory = 512 timeout = 29 diff --git a/infrastructure/terraform/components/api/module_sqs_allocated_letters.tf b/infrastructure/terraform/components/api/module_sqs_supplier_allocator.tf similarity index 91% rename from infrastructure/terraform/components/api/module_sqs_allocated_letters.tf rename to infrastructure/terraform/components/api/module_sqs_supplier_allocator.tf index 24a0df9ac..025e73210 100644 --- a/infrastructure/terraform/components/api/module_sqs_allocated_letters.tf +++ b/infrastructure/terraform/components/api/module_sqs_supplier_allocator.tf @@ -6,7 +6,7 @@ module "sqs_allocated_letters" { environment = var.environment project = var.project region = var.region - name = "allocated-letters" + name = "supplier-allocator" sqs_kms_key_arn = module.kms.key_arn diff --git a/lambdas/allocate-letter/.eslintignore b/lambdas/supplier-allocator/.eslintignore similarity index 100% rename from lambdas/allocate-letter/.eslintignore rename to lambdas/supplier-allocator/.eslintignore diff --git a/lambdas/allocate-letter/.gitignore b/lambdas/supplier-allocator/.gitignore similarity index 100% rename from lambdas/allocate-letter/.gitignore rename to lambdas/supplier-allocator/.gitignore diff --git a/lambdas/allocate-letter/jest.config.ts b/lambdas/supplier-allocator/jest.config.ts similarity index 100% rename from lambdas/allocate-letter/jest.config.ts rename to lambdas/supplier-allocator/jest.config.ts diff --git a/lambdas/allocate-letter/package.json b/lambdas/supplier-allocator/package.json similarity index 100% rename from lambdas/allocate-letter/package.json rename to lambdas/supplier-allocator/package.json diff --git a/lambdas/allocate-letter/src/config/__tests__/deps.test.ts b/lambdas/supplier-allocator/src/config/__tests__/deps.test.ts similarity index 93% rename from lambdas/allocate-letter/src/config/__tests__/deps.test.ts rename to lambdas/supplier-allocator/src/config/__tests__/deps.test.ts index d37c0bf94..d7b96d89f 100644 --- a/lambdas/allocate-letter/src/config/__tests__/deps.test.ts +++ b/lambdas/supplier-allocator/src/config/__tests__/deps.test.ts @@ -1,4 +1,4 @@ -import type { Deps } from "lambdas/allocate-letter/src/config/deps"; +import type { Deps } from "lambdas/supplier-allocator/src/config/deps"; describe("createDependenciesContainer", () => { const env = { diff --git a/lambdas/allocate-letter/src/config/__tests__/env.test.ts b/lambdas/supplier-allocator/src/config/__tests__/env.test.ts similarity index 100% rename from lambdas/allocate-letter/src/config/__tests__/env.test.ts rename to lambdas/supplier-allocator/src/config/__tests__/env.test.ts diff --git a/lambdas/allocate-letter/src/config/deps.ts b/lambdas/supplier-allocator/src/config/deps.ts similarity index 100% rename from lambdas/allocate-letter/src/config/deps.ts rename to lambdas/supplier-allocator/src/config/deps.ts diff --git a/lambdas/allocate-letter/src/config/env.ts b/lambdas/supplier-allocator/src/config/env.ts similarity index 100% rename from lambdas/allocate-letter/src/config/env.ts rename to lambdas/supplier-allocator/src/config/env.ts diff --git a/lambdas/allocate-letter/src/handler/__tests__/allocate-handler.test.ts b/lambdas/supplier-allocator/src/handler/__tests__/allocate-handler.test.ts similarity index 85% rename from lambdas/allocate-letter/src/handler/__tests__/allocate-handler.test.ts rename to lambdas/supplier-allocator/src/handler/__tests__/allocate-handler.test.ts index 14bfb2420..bfadf4b6a 100644 --- a/lambdas/allocate-letter/src/handler/__tests__/allocate-handler.test.ts +++ b/lambdas/supplier-allocator/src/handler/__tests__/allocate-handler.test.ts @@ -7,7 +7,7 @@ import { $LetterEvent, LetterEvent, } from "@nhsdigital/nhs-notify-event-schemas-supplier-api/src/events/letter-events"; -import createAllocatedLetterHandler from "../allocate-handler"; +import createSupplierAllocatorHandler from "../allocate-handler"; import { Deps } from "../../config/deps"; import { EnvVars } from "../../config/env"; @@ -186,7 +186,7 @@ function createEventBridgeEvent(event: SupportedEvent): string { return JSON.stringify(eventBridgeEnvelope); } -describe("createAllocatedLetterHandler", () => { +describe("createSupplierAllocatorHandler", () => { let mockSqsClient: jest.Mocked; let mockedDeps: jest.Mocked; @@ -223,7 +223,7 @@ describe("createAllocatedLetterHandler", () => { process.env.ALLOCATED_LETTERS_QUEUE_URL = "https://sqs.test.queue"; - const handler = createAllocatedLetterHandler(mockedDeps); + const handler = createSupplierAllocatorHandler(mockedDeps); const result = await handler(evt, {} as any, {} as any); expect(result).toBeDefined(); @@ -237,9 +237,6 @@ describe("createAllocatedLetterHandler", () => { const messageBody = JSON.parse(sendCall.input.MessageBody); expect(messageBody.letterEvent).toEqual(preparedEvent); - expect(messageBody.operationType).toBe( - "uk.nhs.notify.letter-rendering.letter-request.prepared.v2", - ); expect(messageBody.supplierSpec).toEqual({ supplierId: "supplier1", specId: "spec1", @@ -256,7 +253,7 @@ describe("createAllocatedLetterHandler", () => { process.env.ALLOCATED_LETTERS_QUEUE_URL = "https://sqs.test.queue"; - const handler = createAllocatedLetterHandler(mockedDeps); + const handler = createSupplierAllocatorHandler(mockedDeps); const result = await handler(evt, {} as any, {} as any); expect(result).toBeDefined(); @@ -267,40 +264,31 @@ describe("createAllocatedLetterHandler", () => { expect(mockSqsClient.send).toHaveBeenCalledTimes(1); const sendCall = (mockSqsClient.send as jest.Mock).mock.calls[0][0]; const messageBody = JSON.parse(sendCall.input.MessageBody); - expect(messageBody.operationType).toBe( - "uk.nhs.notify.letter-rendering.letter-request.prepared.v1", - ); expect(messageBody.supplierSpec).toEqual({ supplierId: "supplier1", specId: "spec1", }); }); - test("parses SNS notification and sends message to SQS queue for update event", async () => { + test("returns batch failure for Update event", async () => { const preparedEvent = createSupplierStatusChangeEvent(); const snsNotification = createNotification(preparedEvent); const evt: SQSEvent = createSQSEvent([ - createSqsRecord("msg1", JSON.stringify(snsNotification)), + createSqsRecord("invalid-event", JSON.stringify(snsNotification)), ]); process.env.ALLOCATED_LETTERS_QUEUE_URL = "https://sqs.test.queue"; - const handler = createAllocatedLetterHandler(mockedDeps); + const handler = createSupplierAllocatorHandler(mockedDeps); const result = await handler(evt, {} as any, {} as any); expect(result).toBeDefined(); if (!result) throw new Error("expected BatchResponse, got void"); - expect(result.batchItemFailures).toHaveLength(0); - - expect(mockSqsClient.send).toHaveBeenCalledTimes(1); - const sendCall = (mockSqsClient.send as jest.Mock).mock.calls[0][0]; - const messageBody = JSON.parse(sendCall.input.MessageBody); - expect(messageBody.operationType).toBe( - "uk.nhs.notify.supplier-api.letter.RETURNED.v1", - ); - expect(messageBody.supplierSpec).toBeUndefined(); + expect(result.batchItemFailures).toHaveLength(1); + expect(result.batchItemFailures[0].itemIdentifier).toBe("invalid-event"); + expect((mockedDeps.logger.error as jest.Mock).mock.calls).toHaveLength(1); }); test("unwraps EventBridge envelope and extracts event details", async () => { @@ -313,7 +301,7 @@ describe("createAllocatedLetterHandler", () => { process.env.ALLOCATED_LETTERS_QUEUE_URL = "https://sqs.test.queue"; - const handler = createAllocatedLetterHandler(mockedDeps); + const handler = createSupplierAllocatorHandler(mockedDeps); await handler(evt, {} as any, {} as any); const sendCall = (mockSqsClient.send as jest.Mock).mock.calls[0][0]; @@ -331,7 +319,7 @@ describe("createAllocatedLetterHandler", () => { process.env.ALLOCATED_LETTERS_QUEUE_URL = "https://sqs.test.queue"; - const handler = createAllocatedLetterHandler(mockedDeps); + const handler = createSupplierAllocatorHandler(mockedDeps); await handler(evt, {} as any, {} as any); const sendCall = (mockSqsClient.send as jest.Mock).mock.calls[0][0]; @@ -362,7 +350,7 @@ describe("createAllocatedLetterHandler", () => { process.env.ALLOCATED_LETTERS_QUEUE_URL = "https://sqs.test.queue"; - const handler = createAllocatedLetterHandler(mockedDeps); + const handler = createSupplierAllocatorHandler(mockedDeps); const result = await handler(evt, {} as any, {} as any); expect(result).toBeDefined(); @@ -379,7 +367,7 @@ describe("createAllocatedLetterHandler", () => { process.env.ALLOCATED_LETTERS_QUEUE_URL = "https://sqs.test.queue"; - const handler = createAllocatedLetterHandler(mockedDeps); + const handler = createSupplierAllocatorHandler(mockedDeps); const result = await handler(evt, {} as any, {} as any); expect(result).toBeDefined(); @@ -400,7 +388,7 @@ describe("createAllocatedLetterHandler", () => { process.env.ALLOCATED_LETTERS_QUEUE_URL = "https://sqs.test.queue"; - const handler = createAllocatedLetterHandler(mockedDeps); + const handler = createSupplierAllocatorHandler(mockedDeps); const result = await handler(evt, {} as any, {} as any); expect(result).toBeDefined(); @@ -422,7 +410,7 @@ describe("createAllocatedLetterHandler", () => { process.env.ALLOCATED_LETTERS_QUEUE_URL = "https://sqs.test.queue"; - const handler = createAllocatedLetterHandler(mockedDeps); + const handler = createSupplierAllocatorHandler(mockedDeps); const result = await handler(evt, {} as any, {} as any); if (!result) throw new Error("expected BatchResponse, got void"); @@ -444,7 +432,7 @@ describe("createAllocatedLetterHandler", () => { process.env.ALLOCATED_LETTERS_QUEUE_URL = "https://sqs.test.queue"; - const handler = createAllocatedLetterHandler(mockedDeps); + const handler = createSupplierAllocatorHandler(mockedDeps); const result = await handler(evt, {} as any, {} as any); if (!result) throw new Error("expected BatchResponse, got void"); @@ -462,7 +450,7 @@ describe("createAllocatedLetterHandler", () => { delete process.env.ALLOCATED_LETTERS_QUEUE_URL; - const handler = createAllocatedLetterHandler(mockedDeps); + const handler = createSupplierAllocatorHandler(mockedDeps); const result = await handler(evt, {} as any, {} as any); if (!result) throw new Error("expected BatchResponse, got void"); @@ -488,7 +476,7 @@ describe("createAllocatedLetterHandler", () => { const sqsError = new Error("SQS send failed"); (mockSqsClient.send as jest.Mock).mockRejectedValueOnce(sqsError); - const handler = createAllocatedLetterHandler(mockedDeps); + const handler = createSupplierAllocatorHandler(mockedDeps); const result = await handler(evt, {} as any, {} as any); if (!result) throw new Error("expected BatchResponse, got void"); @@ -520,7 +508,7 @@ describe("createAllocatedLetterHandler", () => { process.env.ALLOCATED_LETTERS_QUEUE_URL = "https://sqs.test.queue"; - const handler = createAllocatedLetterHandler(mockedDeps); + const handler = createSupplierAllocatorHandler(mockedDeps); const result = await handler(evt, {} as any, {} as any); if (!result) throw new Error("expected BatchResponse, got void"); @@ -530,38 +518,6 @@ describe("createAllocatedLetterHandler", () => { expect(mockSqsClient.send).toHaveBeenCalledTimes(2); }); - test("does not include supplierSpec for non-insert event types", async () => { - const event = { - type: "uk.nhs.notify.supplier-api.letter.RETURNED.v1", - data: { status: "RETURNED" }, - }; - const snsNotification: Partial = { - Type: "Notification", - Message: JSON.stringify(event), - MessageId: "test-id", - }; - - const evt: SQSEvent = createSQSEvent([ - createSqsRecord("supplier-event", JSON.stringify(snsNotification)), - ]); - - process.env.ALLOCATED_LETTERS_QUEUE_URL = "https://sqs.test.queue"; - - const handler = createAllocatedLetterHandler(mockedDeps); - const result = await handler(evt, {} as any, {} as any); - if (!result) throw new Error("expected BatchResponse, got void"); - - expect(result.batchItemFailures).toHaveLength(0); - - const sendCall = (mockSqsClient.send as jest.Mock).mock.calls[0][0]; - const messageBody = JSON.parse(sendCall.input.MessageBody); - expect(messageBody.letterEvent).toEqual(event); - expect(messageBody.operationType).toBe( - "uk.nhs.notify.supplier-api.letter.RETURNED.v1", - ); - expect(messageBody.supplierSpec).toBeUndefined(); - }); - test("sends correct queue URL in SQS message command", async () => { const preparedEvent = createPreparedV2Event(); const snsNotification = createEventBridgeNotification(preparedEvent); @@ -573,7 +529,7 @@ describe("createAllocatedLetterHandler", () => { const queueUrl = "https://sqs.eu-west-2.amazonaws.com/123456789/test-queue"; process.env.ALLOCATED_LETTERS_QUEUE_URL = queueUrl; - const handler = createAllocatedLetterHandler(mockedDeps); + const handler = createSupplierAllocatorHandler(mockedDeps); await handler(evt, {} as any, {} as any); const sendCall = (mockSqsClient.send as jest.Mock).mock.calls[0][0]; diff --git a/lambdas/allocate-letter/src/handler/allocate-handler.ts b/lambdas/supplier-allocator/src/handler/allocate-handler.ts similarity index 82% rename from lambdas/allocate-letter/src/handler/allocate-handler.ts rename to lambdas/supplier-allocator/src/handler/allocate-handler.ts index 9ffbfbc6b..0e1aebb4b 100644 --- a/lambdas/allocate-letter/src/handler/allocate-handler.ts +++ b/lambdas/supplier-allocator/src/handler/allocate-handler.ts @@ -46,26 +46,25 @@ function removeEventBridgeWrapper(event: any) { return event; } -function getType(event: unknown) { +function validateType(event: unknown) { const env = TypeEnvelope.safeParse(event); if (!env.success) { throw new Error("Missing or invalid envelope.type field"); } - return env.data.type; + if ( + !env.data.type.startsWith( + "uk.nhs.notify.letter-rendering.letter-request.prepared", + ) + ) { + throw new Error(`Unexpected event type: ${env.data.type}`); + } } function getSupplier(letterEvent: PreparedEvents, deps: Deps): SupplierSpec { return resolveSupplierForVariant(letterEvent.data.letterVariantId, deps); } -function isInsert(type: string): boolean { - return ( - type === "uk.nhs.notify.letter-rendering.letter-request.prepared.v2" || - type === "uk.nhs.notify.letter-rendering.letter-request.prepared.v1" // legacy schema - ); -} - -export default function createAllocatedLetterHandler(deps: Deps): SQSHandler { +export default function createSupplierAllocatorHandler(deps: Deps): SQSHandler { return async (event: SQSEvent) => { const batchItemFailures: SQSBatchItemFailure[] = []; @@ -82,12 +81,9 @@ export default function createAllocatedLetterHandler(deps: Deps): SQSHandler { messageId: record.messageId, }); - const operationType = getType(letterEvent); + validateType(letterEvent); - let supplierSpec: SupplierSpec | undefined; - if (isInsert(operationType)) { - supplierSpec = getSupplier(letterEvent as PreparedEvents, deps); - } + const supplierSpec = getSupplier(letterEvent as PreparedEvents, deps); // Send to allocated letters queue const queueUrl = process.env.ALLOCATED_LETTERS_QUEUE_URL; @@ -97,8 +93,7 @@ export default function createAllocatedLetterHandler(deps: Deps): SQSHandler { const queueMessage = { letterEvent, - operationType, - ...(supplierSpec && { supplierSpec }), + supplierSpec, }; deps.logger.info( diff --git a/lambdas/allocate-letter/src/index.ts b/lambdas/supplier-allocator/src/index.ts similarity index 51% rename from lambdas/allocate-letter/src/index.ts rename to lambdas/supplier-allocator/src/index.ts index d458cd5bc..56d6b8e10 100644 --- a/lambdas/allocate-letter/src/index.ts +++ b/lambdas/supplier-allocator/src/index.ts @@ -1,7 +1,8 @@ import { createDependenciesContainer } from "./config/deps"; -import createAllocateLetterHandler from "./handler/allocate-handler"; +import createSupplierAllocatorHandler from "./handler/allocate-handler"; const container = createDependenciesContainer(); // eslint-disable-next-line import-x/prefer-default-export -export const allocateLetterHandler = createAllocateLetterHandler(container); +export const supplierAllocatorHandler = + createSupplierAllocatorHandler(container); diff --git a/lambdas/allocate-letter/tsconfig.json b/lambdas/supplier-allocator/tsconfig.json similarity index 100% rename from lambdas/allocate-letter/tsconfig.json rename to lambdas/supplier-allocator/tsconfig.json diff --git a/lambdas/upsert-letter/src/handler/upsert-handler.ts b/lambdas/upsert-letter/src/handler/upsert-handler.ts index acfbb18a6..2bb961700 100644 --- a/lambdas/upsert-letter/src/handler/upsert-handler.ts +++ b/lambdas/upsert-letter/src/handler/upsert-handler.ts @@ -33,6 +33,9 @@ type UpsertOperation = { ) => Promise; }; +// small envelope that must exist in all inputs +const TypeEnvelope = z.object({ type: z.string().min(1) }); + function getOperationFromType(type: string): UpsertOperation { if (type.startsWith("uk.nhs.notify.letter-rendering.letter-request.prepared")) return { @@ -112,6 +115,13 @@ function mapToUpdateLetter(upsertRequest: LetterEvent): UpdateLetter { reasonText: upsertRequest.data.reasonText, }; } +function getType(event: unknown) { + const env = TypeEnvelope.safeParse(event); + if (!env.success) { + throw new Error("Missing or invalid envelope.type field"); + } + return env.data.type; +} async function runUpsert( operation: UpsertOperation, @@ -152,7 +162,7 @@ async function emitMetrics( } } -function getSupplierEventId(letterEvent: any): string { +function getSupplierIdFromEvent(letterEvent: any): string { if (letterEvent && letterEvent.data && letterEvent.data.supplierId) { return letterEvent.data.supplierId; } @@ -172,7 +182,7 @@ export default function createUpsertLetterHandler(deps: Deps): SQSHandler { const queueMessage: AllocatedLetterQueueMessage = JSON.parse( record.body, ); - const { letterEvent, operationType, supplierSpec } = queueMessage; + const { letterEvent, supplierSpec } = queueMessage; deps.logger.info({ description: "Extracted letter event", @@ -181,10 +191,11 @@ export default function createUpsertLetterHandler(deps: Deps): SQSHandler { supplier = !supplierSpec || !supplierSpec.supplierId - ? getSupplierEventId(letterEvent) + ? getSupplierIdFromEvent(letterEvent) : supplierSpec.supplierId; - const operation = getOperationFromType(operationType); + const type = getType(letterEvent); + const operation = getOperationFromType(type); await runUpsert(operation, letterEvent, supplierSpec, deps); From a69afaed9c8c5954464d5004408d602794be5b9e Mon Sep 17 00:00:00 2001 From: David Wass Date: Thu, 12 Feb 2026 11:38:28 +0000 Subject: [PATCH 22/28] separate allocate and update queues --- .../terraform/components/api/README.md | 4 +- .../api/module_lambda_supplier_allocator.tf | 14 +- .../api/module_lambda_upsert_letter.tf | 2 +- .../api/module_sqs_supplier_allocator.tf | 2 +- ...ubscription_eventsub_sqs_letter_updates.tf | 12 +- ...ription_eventsub_sqs_supplier_allocator.tf | 11 ++ .../__tests__/allocate-handler.test.ts | 183 +++--------------- .../src/handler/allocate-handler.ts | 41 +--- .../handler/__tests__/upsert-handler.test.ts | 101 ++-------- .../src/handler/upsert-handler.ts | 12 +- 10 files changed, 87 insertions(+), 295 deletions(-) create mode 100644 infrastructure/terraform/components/api/sns_topic_subscription_eventsub_sqs_supplier_allocator.tf diff --git a/infrastructure/terraform/components/api/README.md b/infrastructure/terraform/components/api/README.md index 9a2eaef98..8184dc84d 100644 --- a/infrastructure/terraform/components/api/README.md +++ b/infrastructure/terraform/components/api/README.md @@ -45,7 +45,6 @@ No requirements. |------|--------|---------| | [amendment\_event\_transformer](#module\_amendment\_event\_transformer) | https://github.com/NHSDigital/nhs-notify-shared-modules/releases/download/v2.0.29/terraform-lambda.zip | n/a | | [amendments\_queue](#module\_amendments\_queue) | https://github.com/NHSDigital/nhs-notify-shared-modules/releases/download/v2.0.24/terraform-sqs.zip | n/a | -| [allocate\_letter](#module\_allocate\_letter) | https://github.com/NHSDigital/nhs-notify-shared-modules/releases/download/v2.0.29/terraform-lambda.zip | n/a | | [authorizer\_lambda](#module\_authorizer\_lambda) | https://github.com/NHSDigital/nhs-notify-shared-modules/releases/download/v2.0.29/terraform-lambda.zip | n/a | | [domain\_truststore](#module\_domain\_truststore) | https://github.com/NHSDigital/nhs-notify-shared-modules/releases/download/v2.0.26/terraform-s3bucket.zip | n/a | | [eventpub](#module\_eventpub) | https://github.com/NHSDigital/nhs-notify-shared-modules/releases/download/v2.0.31/terraform-eventpub.zip | n/a | @@ -63,8 +62,9 @@ No requirements. | [post\_letters](#module\_post\_letters) | https://github.com/NHSDigital/nhs-notify-shared-modules/releases/download/v2.0.29/terraform-lambda.zip | n/a | | [post\_mi](#module\_post\_mi) | https://github.com/NHSDigital/nhs-notify-shared-modules/releases/download/v2.0.29/terraform-lambda.zip | n/a | | [s3bucket\_test\_letters](#module\_s3bucket\_test\_letters) | https://github.com/NHSDigital/nhs-notify-shared-modules/releases/download/v2.0.26/terraform-s3bucket.zip | n/a | -| [sqs\_allocated\_letters](#module\_sqs\_allocated\_letters) | https://github.com/NHSDigital/nhs-notify-shared-modules/releases/download/v2.0.26/terraform-sqs.zip | n/a | | [sqs\_letter\_updates](#module\_sqs\_letter\_updates) | https://github.com/NHSDigital/nhs-notify-shared-modules/releases/download/v2.0.26/terraform-sqs.zip | n/a | +| [sqs\_supplier\_allocator](#module\_sqs\_supplier\_allocator) | https://github.com/NHSDigital/nhs-notify-shared-modules/releases/download/v2.0.26/terraform-sqs.zip | n/a | +| [supplier\_allocator](#module\_supplier\_allocator) | https://github.com/NHSDigital/nhs-notify-shared-modules/releases/download/v2.0.29/terraform-lambda.zip | n/a | | [supplier\_ssl](#module\_supplier\_ssl) | https://github.com/NHSDigital/nhs-notify-shared-modules/releases/download/v2.0.26/terraform-ssl.zip | n/a | | [upsert\_letter](#module\_upsert\_letter) | https://github.com/NHSDigital/nhs-notify-shared-modules/releases/download/v2.0.29/terraform-lambda.zip | n/a | ## Outputs diff --git a/infrastructure/terraform/components/api/module_lambda_supplier_allocator.tf b/infrastructure/terraform/components/api/module_lambda_supplier_allocator.tf index 7e9064e34..0518573a4 100644 --- a/infrastructure/terraform/components/api/module_lambda_supplier_allocator.tf +++ b/infrastructure/terraform/components/api/module_lambda_supplier_allocator.tf @@ -1,7 +1,7 @@ -module "allocate_letter" { +module "supplier_allocator" { source = "https://github.com/NHSDigital/nhs-notify-shared-modules/releases/download/v2.0.29/terraform-lambda.zip" - function_name = "allocate_letter" + function_name = "supplier-allocator" description = "Allocate a letter to a supplier" aws_account_id = var.aws_account_id @@ -15,7 +15,7 @@ module "allocate_letter" { kms_key_arn = module.kms.key_arn iam_policy_document = { - body = data.aws_iam_policy_document.allocate_letter_lambda.json + body = data.aws_iam_policy_document.sqs_supplier_allocator_lambda.json } function_s3_bucket = local.acct.s3_buckets["lambda_function_artefacts"]["id"] @@ -35,12 +35,12 @@ module "allocate_letter" { log_subscription_role_arn = local.acct.log_subscription_role_arn lambda_env_vars = merge(local.common_lambda_env_vars, { - VARIANT_MAP = jsonencode(var.letter_variant_map) - ALLOCATED_LETTERS_QUEUE_URL = module.sqs_allocated_letters.sqs_queue_url + VARIANT_MAP = jsonencode(var.letter_variant_map) + UPSERT_LETTERS_QUEUE_URL = module.sqs_letter_updates.sqs_queue_url }) } -data "aws_iam_policy_document" "allocate_letter_lambda" { +data "aws_iam_policy_document" "sqs_supplier_allocator_lambda" { statement { sid = "KMSPermissions" effect = "Allow" @@ -79,7 +79,7 @@ data "aws_iam_policy_document" "allocate_letter_lambda" { ] resources = [ - module.sqs_allocated_letters.sqs_queue_arn + module.sqs_supplier_allocator.sqs_queue_arn ] } } diff --git a/infrastructure/terraform/components/api/module_lambda_upsert_letter.tf b/infrastructure/terraform/components/api/module_lambda_upsert_letter.tf index 8a27ccdd0..201e10186 100644 --- a/infrastructure/terraform/components/api/module_lambda_upsert_letter.tf +++ b/infrastructure/terraform/components/api/module_lambda_upsert_letter.tf @@ -82,7 +82,7 @@ data "aws_iam_policy_document" "upsert_letter_lambda" { ] resources = [ - module.sqs_allocated_letters.sqs_queue_arn + module.sqs_letter_updates.sqs_queue_arn ] } } diff --git a/infrastructure/terraform/components/api/module_sqs_supplier_allocator.tf b/infrastructure/terraform/components/api/module_sqs_supplier_allocator.tf index 025e73210..2f3208933 100644 --- a/infrastructure/terraform/components/api/module_sqs_supplier_allocator.tf +++ b/infrastructure/terraform/components/api/module_sqs_supplier_allocator.tf @@ -1,4 +1,4 @@ -module "sqs_allocated_letters" { +module "sqs_supplier_allocator" { source = "https://github.com/NHSDigital/nhs-notify-shared-modules/releases/download/v2.0.26/terraform-sqs.zip" aws_account_id = var.aws_account_id diff --git a/infrastructure/terraform/components/api/sns_topic_subscription_eventsub_sqs_letter_updates.tf b/infrastructure/terraform/components/api/sns_topic_subscription_eventsub_sqs_letter_updates.tf index 9c232c149..96cba64d9 100644 --- a/infrastructure/terraform/components/api/sns_topic_subscription_eventsub_sqs_letter_updates.tf +++ b/infrastructure/terraform/components/api/sns_topic_subscription_eventsub_sqs_letter_updates.tf @@ -1,5 +1,11 @@ resource "aws_sns_topic_subscription" "eventsub_sqs_letter_updates" { - topic_arn = module.eventsub.sns_topic.arn - protocol = "sqs" - endpoint = module.sqs_letter_updates.sqs_queue_arn + topic_arn = module.eventsub.sns_topic.arn + protocol = "sqs" + endpoint = module.sqs_letter_updates.sqs_queue_arn + raw_message_delivery = true + + filter_policy_scope = "MessageBody" + filter_policy = jsonencode({ + type = [{ prefix = "uk.nhs.notify.supplier-api.letter" }] + }) } diff --git a/infrastructure/terraform/components/api/sns_topic_subscription_eventsub_sqs_supplier_allocator.tf b/infrastructure/terraform/components/api/sns_topic_subscription_eventsub_sqs_supplier_allocator.tf new file mode 100644 index 000000000..59afab801 --- /dev/null +++ b/infrastructure/terraform/components/api/sns_topic_subscription_eventsub_sqs_supplier_allocator.tf @@ -0,0 +1,11 @@ +resource "aws_sns_topic_subscription" "eventsub_sqs_supplier_allocator" { + topic_arn = module.eventsub.sns_topic.arn + protocol = "sqs" + endpoint = module.sqs_supplier_allocator.sqs_queue_arn + raw_message_delivery = true + + filter_policy_scope = "MessageBody" + filter_policy = jsonencode({ + type = [{ prefix = "uk.nhs.notify.letter-rendering.letter-request.prepared" }] + }) +} diff --git a/lambdas/supplier-allocator/src/handler/__tests__/allocate-handler.test.ts b/lambdas/supplier-allocator/src/handler/__tests__/allocate-handler.test.ts index bfadf4b6a..2ac61fd05 100644 --- a/lambdas/supplier-allocator/src/handler/__tests__/allocate-handler.test.ts +++ b/lambdas/supplier-allocator/src/handler/__tests__/allocate-handler.test.ts @@ -1,4 +1,4 @@ -import { SNSMessage, SQSEvent, SQSRecord } from "aws-lambda"; +import { SQSEvent, SQSRecord } from "aws-lambda"; import pino from "pino"; import { SQSClient, SendMessageCommand } from "@aws-sdk/client-sqs"; import { LetterRequestPreparedEventV2 } from "@nhsdigital/nhs-notify-event-schemas-letter-rendering"; @@ -36,11 +36,6 @@ function createSqsRecord(msgId: string, body: string): SQSRecord { }; } -type SupportedEvent = - | LetterRequestPreparedEventV2 - | LetterRequestPreparedEvent - | LetterEvent; - function createPreparedV1Event( overrides: Partial = {}, ): LetterRequestPreparedEvent { @@ -134,58 +129,6 @@ function createSupplierStatusChangeEvent( }); } -function createEventBridgeNotification( - event: LetterRequestPreparedEventV2 | LetterRequestPreparedEvent, -): Partial { - return { - SignatureVersion: "", - Timestamp: "", - Signature: "", - SigningCertUrl: "", - MessageId: "", - Message: createEventBridgeEvent(event), - MessageAttributes: {}, - Type: "Notification", - UnsubscribeUrl: "", - TopicArn: "", - Subject: "", - Token: "", - }; -} - -function createNotification(event: SupportedEvent): Partial { - return { - SignatureVersion: "", - Timestamp: "", - Signature: "", - SigningCertUrl: "", - MessageId: "", - Message: JSON.stringify(event), - MessageAttributes: {}, - Type: "Notification", - UnsubscribeUrl: "", - TopicArn: "", - Subject: "", - Token: "", - }; -} - -function createEventBridgeEvent(event: SupportedEvent): string { - const now = new Date().toISOString(); - const eventBridgeEnvelope = { - version: "0", - id: "4f28e649-6832-18e8-7261-4b63e6dcd3b5", - "detail-type": event.type, - source: "custom.event", - account: "815490582396", - time: now, - region: "eu-west-2", - resources: [], - detail: event, - }; - return JSON.stringify(eventBridgeEnvelope); -} - describe("createSupplierAllocatorHandler", () => { let mockSqsClient: jest.Mocked; let mockedDeps: jest.Mocked; @@ -215,13 +158,11 @@ describe("createSupplierAllocatorHandler", () => { test("parses SNS notification and sends message to SQS queue for v2 event", async () => { const preparedEvent = createPreparedV2Event(); - const snsNotification = createEventBridgeNotification(preparedEvent); - const evt: SQSEvent = createSQSEvent([ - createSqsRecord("msg1", JSON.stringify(snsNotification)), + createSqsRecord("msg1", JSON.stringify(preparedEvent)), ]); - process.env.ALLOCATED_LETTERS_QUEUE_URL = "https://sqs.test.queue"; + process.env.UPSERT_LETTERS_QUEUE_URL = "https://sqs.test.queue"; const handler = createSupplierAllocatorHandler(mockedDeps); const result = await handler(evt, {} as any, {} as any); @@ -245,13 +186,12 @@ describe("createSupplierAllocatorHandler", () => { test("parses SNS notification and sends message to SQS queue for v1 event", async () => { const preparedEvent = createPreparedV1Event(); - const snsNotification = createEventBridgeNotification(preparedEvent); const evt: SQSEvent = createSQSEvent([ - createSqsRecord("msg1", JSON.stringify(snsNotification)), + createSqsRecord("msg1", JSON.stringify(preparedEvent)), ]); - process.env.ALLOCATED_LETTERS_QUEUE_URL = "https://sqs.test.queue"; + process.env.UPSERT_LETTERS_QUEUE_URL = "https://sqs.test.queue"; const handler = createSupplierAllocatorHandler(mockedDeps); const result = await handler(evt, {} as any, {} as any); @@ -272,13 +212,12 @@ describe("createSupplierAllocatorHandler", () => { test("returns batch failure for Update event", async () => { const preparedEvent = createSupplierStatusChangeEvent(); - const snsNotification = createNotification(preparedEvent); const evt: SQSEvent = createSQSEvent([ - createSqsRecord("invalid-event", JSON.stringify(snsNotification)), + createSqsRecord("invalid-event", JSON.stringify(preparedEvent)), ]); - process.env.ALLOCATED_LETTERS_QUEUE_URL = "https://sqs.test.queue"; + process.env.UPSERT_LETTERS_QUEUE_URL = "https://sqs.test.queue"; const handler = createSupplierAllocatorHandler(mockedDeps); const result = await handler(evt, {} as any, {} as any); @@ -293,13 +232,12 @@ describe("createSupplierAllocatorHandler", () => { test("unwraps EventBridge envelope and extracts event details", async () => { const preparedEvent = createPreparedV2Event({ domainId: "letter-test" }); - const snsNotification = createEventBridgeNotification(preparedEvent); const evt: SQSEvent = createSQSEvent([ - createSqsRecord("msg1", JSON.stringify(snsNotification)), + createSqsRecord("msg1", JSON.stringify(preparedEvent)), ]); - process.env.ALLOCATED_LETTERS_QUEUE_URL = "https://sqs.test.queue"; + process.env.UPSERT_LETTERS_QUEUE_URL = "https://sqs.test.queue"; const handler = createSupplierAllocatorHandler(mockedDeps); await handler(evt, {} as any, {} as any); @@ -311,13 +249,12 @@ describe("createSupplierAllocatorHandler", () => { test("resolves correct supplier spec from variant map", async () => { const preparedEvent = createPreparedV2Event(); - const snsNotification = createEventBridgeNotification(preparedEvent); const evt: SQSEvent = createSQSEvent([ - createSqsRecord("msg1", JSON.stringify(snsNotification)), + createSqsRecord("msg1", JSON.stringify(preparedEvent)), ]); - process.env.ALLOCATED_LETTERS_QUEUE_URL = "https://sqs.test.queue"; + process.env.UPSERT_LETTERS_QUEUE_URL = "https://sqs.test.queue"; const handler = createSupplierAllocatorHandler(mockedDeps); await handler(evt, {} as any, {} as any); @@ -332,23 +269,15 @@ describe("createSupplierAllocatorHandler", () => { const evt: SQSEvent = createSQSEvent([ createSqsRecord( "msg1", - JSON.stringify( - createEventBridgeNotification( - createPreparedV2Event({ domainId: "letter1" }), - ), - ), + JSON.stringify(createPreparedV2Event({ domainId: "letter1" })), ), createSqsRecord( "msg2", - JSON.stringify( - createEventBridgeNotification( - createPreparedV2Event({ domainId: "letter2" }), - ), - ), + JSON.stringify(createPreparedV2Event({ domainId: "letter2" })), ), ]); - process.env.ALLOCATED_LETTERS_QUEUE_URL = "https://sqs.test.queue"; + process.env.UPSERT_LETTERS_QUEUE_URL = "https://sqs.test.queue"; const handler = createSupplierAllocatorHandler(mockedDeps); const result = await handler(evt, {} as any, {} as any); @@ -365,7 +294,7 @@ describe("createSupplierAllocatorHandler", () => { createSqsRecord("bad-json", "this-is-not-json"), ]); - process.env.ALLOCATED_LETTERS_QUEUE_URL = "https://sqs.test.queue"; + process.env.UPSERT_LETTERS_QUEUE_URL = "https://sqs.test.queue"; const handler = createSupplierAllocatorHandler(mockedDeps); const result = await handler(evt, {} as any, {} as any); @@ -378,59 +307,14 @@ describe("createSupplierAllocatorHandler", () => { expect((mockedDeps.logger.error as jest.Mock).mock.calls).toHaveLength(1); }); - test("returns batch failure for invalid SNS notification schema", async () => { - const evt: SQSEvent = createSQSEvent([ - createSqsRecord( - "bad-notification", - JSON.stringify({ not: "a valid notification" }), - ), - ]); - - process.env.ALLOCATED_LETTERS_QUEUE_URL = "https://sqs.test.queue"; - - const handler = createSupplierAllocatorHandler(mockedDeps); - const result = await handler(evt, {} as any, {} as any); - - expect(result).toBeDefined(); - if (!result) throw new Error("expected BatchResponse, got void"); - - expect(result.batchItemFailures).toHaveLength(1); - expect(result.batchItemFailures[0].itemIdentifier).toBe("bad-notification"); - }); - - test("returns batch failure when SNS Message is missing", async () => { - const snsMessage: Partial = { - Type: "Notification", - MessageId: "test-id", - }; - - const evt: SQSEvent = createSQSEvent([ - createSqsRecord("no-message", JSON.stringify(snsMessage)), - ]); - - process.env.ALLOCATED_LETTERS_QUEUE_URL = "https://sqs.test.queue"; - - const handler = createSupplierAllocatorHandler(mockedDeps); - const result = await handler(evt, {} as any, {} as any); - if (!result) throw new Error("expected BatchResponse, got void"); - - expect(result.batchItemFailures).toHaveLength(1); - expect(result.batchItemFailures[0].itemIdentifier).toBe("no-message"); - }); - test("returns batch failure when event type is missing", async () => { const event = { no: "type" }; - const snsNotification: Partial = { - Type: "Notification", - Message: JSON.stringify(event), - MessageId: "test-id", - }; const evt: SQSEvent = createSQSEvent([ - createSqsRecord("no-type", JSON.stringify(snsNotification)), + createSqsRecord("no-type", JSON.stringify(event)), ]); - process.env.ALLOCATED_LETTERS_QUEUE_URL = "https://sqs.test.queue"; + process.env.UPSERT_LETTERS_QUEUE_URL = "https://sqs.test.queue"; const handler = createSupplierAllocatorHandler(mockedDeps); const result = await handler(evt, {} as any, {} as any); @@ -440,15 +324,14 @@ describe("createSupplierAllocatorHandler", () => { expect(result.batchItemFailures[0].itemIdentifier).toBe("no-type"); }); - test("returns batch failure when ALLOCATED_LETTERS_QUEUE_URL is not set", async () => { + test("returns batch failure when UPSERT_LETTERS_QUEUE_URL is not set", async () => { const preparedEvent = createPreparedV2Event(); - const snsNotification = createEventBridgeNotification(preparedEvent); const evt: SQSEvent = createSQSEvent([ - createSqsRecord("msg1", JSON.stringify(snsNotification)), + createSqsRecord("msg1", JSON.stringify(preparedEvent)), ]); - delete process.env.ALLOCATED_LETTERS_QUEUE_URL; + delete process.env.UPSERT_LETTERS_QUEUE_URL; const handler = createSupplierAllocatorHandler(mockedDeps); const result = await handler(evt, {} as any, {} as any); @@ -458,20 +341,19 @@ describe("createSupplierAllocatorHandler", () => { expect(result.batchItemFailures[0].itemIdentifier).toBe("msg1"); expect((mockedDeps.logger.error as jest.Mock).mock.calls[0][0].err).toEqual( expect.objectContaining({ - message: "ALLOCATED_LETTERS_QUEUE_URL not configured", + message: "UPSERT_LETTERS_QUEUE_URL not configured", }), ); }); test("handles SQS send errors and returns batch failure", async () => { const preparedEvent = createPreparedV2Event(); - const snsNotification = createEventBridgeNotification(preparedEvent); const evt: SQSEvent = createSQSEvent([ - createSqsRecord("msg1", JSON.stringify(snsNotification)), + createSqsRecord("msg1", JSON.stringify(preparedEvent)), ]); - process.env.ALLOCATED_LETTERS_QUEUE_URL = "https://sqs.test.queue"; + process.env.UPSERT_LETTERS_QUEUE_URL = "https://sqs.test.queue"; const sqsError = new Error("SQS send failed"); (mockSqsClient.send as jest.Mock).mockRejectedValueOnce(sqsError); @@ -489,24 +371,16 @@ describe("createSupplierAllocatorHandler", () => { const evt: SQSEvent = createSQSEvent([ createSqsRecord( "ok-msg", - JSON.stringify( - createEventBridgeNotification( - createPreparedV2Event({ domainId: "letter1" }), - ), - ), + JSON.stringify(createPreparedV2Event({ domainId: "letter1" })), ), createSqsRecord("fail-msg", "invalid-json"), createSqsRecord( "ok-msg-2", - JSON.stringify( - createEventBridgeNotification( - createPreparedV2Event({ domainId: "letter2" }), - ), - ), + JSON.stringify(createPreparedV2Event({ domainId: "letter2" })), ), ]); - process.env.ALLOCATED_LETTERS_QUEUE_URL = "https://sqs.test.queue"; + process.env.UPSERT_LETTERS_QUEUE_URL = "https://sqs.test.queue"; const handler = createSupplierAllocatorHandler(mockedDeps); const result = await handler(evt, {} as any, {} as any); @@ -520,14 +394,13 @@ describe("createSupplierAllocatorHandler", () => { test("sends correct queue URL in SQS message command", async () => { const preparedEvent = createPreparedV2Event(); - const snsNotification = createEventBridgeNotification(preparedEvent); const evt: SQSEvent = createSQSEvent([ - createSqsRecord("msg1", JSON.stringify(snsNotification)), + createSqsRecord("msg1", JSON.stringify(preparedEvent)), ]); const queueUrl = "https://sqs.eu-west-2.amazonaws.com/123456789/test-queue"; - process.env.ALLOCATED_LETTERS_QUEUE_URL = queueUrl; + process.env.UPSERT_LETTERS_QUEUE_URL = queueUrl; const handler = createSupplierAllocatorHandler(mockedDeps); await handler(evt, {} as any, {} as any); diff --git a/lambdas/supplier-allocator/src/handler/allocate-handler.ts b/lambdas/supplier-allocator/src/handler/allocate-handler.ts index 0e1aebb4b..6d9a9cb62 100644 --- a/lambdas/supplier-allocator/src/handler/allocate-handler.ts +++ b/lambdas/supplier-allocator/src/handler/allocate-handler.ts @@ -1,10 +1,4 @@ -import { - SNSMessage, - SQSBatchItemFailure, - SQSEvent, - SQSHandler, - SQSRecord, -} from "aws-lambda"; +import { SQSBatchItemFailure, SQSEvent, SQSHandler } from "aws-lambda"; import { SendMessageCommand } from "@aws-sdk/client-sqs"; import { LetterRequestPreparedEvent } from "@nhsdigital/nhs-notify-event-schemas-letter-rendering-v1"; @@ -25,27 +19,6 @@ function resolveSupplierForVariant( return deps.env.VARIANT_MAP[variantId]; } -function parseSNSNotification(record: SQSRecord) { - const notification = JSON.parse(record.body) as Partial; - if ( - notification.Type !== "Notification" || - typeof notification.Message !== "string" - ) { - throw new Error( - "SQS record does not contain SNS Notification with string Message", - ); - } - return notification.Message; -} - -function removeEventBridgeWrapper(event: any) { - const maybeEventBridge = event; - if (maybeEventBridge.source && maybeEventBridge.detail) { - return maybeEventBridge.detail; - } - return event; -} - function validateType(event: unknown) { const env = TypeEnvelope.safeParse(event); if (!env.success) { @@ -70,11 +43,7 @@ export default function createSupplierAllocatorHandler(deps: Deps): SQSHandler { const tasks = event.Records.map(async (record) => { try { - const message: string = parseSNSNotification(record); - - const snsEvent = JSON.parse(message); - - const letterEvent: unknown = removeEventBridgeWrapper(snsEvent); + const letterEvent: unknown = JSON.parse(record.body); deps.logger.info({ description: "Extracted letter event", @@ -86,9 +55,9 @@ export default function createSupplierAllocatorHandler(deps: Deps): SQSHandler { const supplierSpec = getSupplier(letterEvent as PreparedEvents, deps); // Send to allocated letters queue - const queueUrl = process.env.ALLOCATED_LETTERS_QUEUE_URL; + const queueUrl = process.env.UPSERT_LETTERS_QUEUE_URL; if (!queueUrl) { - throw new Error("ALLOCATED_LETTERS_QUEUE_URL not configured"); + throw new Error("UPSERT_LETTERS_QUEUE_URL not configured"); } const queueMessage = { @@ -98,7 +67,7 @@ export default function createSupplierAllocatorHandler(deps: Deps): SQSHandler { deps.logger.info( { msg: queueMessage, url: queueUrl }, - "Sending message to allocated letters queue", + "Sending message to upsert letter queue", ); await deps.sqsClient.send( diff --git a/lambdas/upsert-letter/src/handler/__tests__/upsert-handler.test.ts b/lambdas/upsert-letter/src/handler/__tests__/upsert-handler.test.ts index c06c57785..eaf824720 100644 --- a/lambdas/upsert-letter/src/handler/__tests__/upsert-handler.test.ts +++ b/lambdas/upsert-letter/src/handler/__tests__/upsert-handler.test.ts @@ -211,20 +211,14 @@ describe("createUpsertLetterHandler", () => { test("processes all records successfully and returns no batch failures", async () => { const v2message = { letterEvent: createPreparedV2Event(), - operationType: - "uk.nhs.notify.letter-rendering.letter-request.prepared.v2", supplierSpec: { supplierId: "supplier1", specId: "spec1" }, }; const v1message = { letterEvent: createPreparedV1Event(), - operationType: - "uk.nhs.notify.letter-rendering.letter-request.prepared.v1", supplierSpec: { supplierId: "supplier1", specId: "spec1" }, }; const updateMessage = { letterEvent: createSupplierStatusChangeEvent(), - operationType: "uk.nhs.notify.supplier-api.letter.RETURNED.v1", - supplierSpec: undefined, }; const evt: SQSEvent = createSQSEvent([ @@ -291,7 +285,6 @@ describe("createUpsertLetterHandler", () => { const message = { letterEvent, - operationType: "uk.nhs.notify.supplier-api.letter.RETURNED.v1", supplierSpec: undefined, }; const evt: SQSEvent = createSQSEvent([ @@ -345,58 +338,13 @@ describe("createUpsertLetterHandler", () => { ); }); - test("invalid letter event schema produces batch failure", async () => { + test("invalid event type produces batch failure and logs error", async () => { const message = { - letterEvent: { someField: "invalid" }, - operationType: - "uk.nhs.notify.letter-rendering.letter-request.prepared.v2", - supplierSpec: { supplierId: "supplier1", specId: "spec1" }, + letterEvent: { type: "unexpected type" }, }; const evt: SQSEvent = createSQSEvent([ - createSqsRecord("bad-notification-schema", JSON.stringify(message)), - ]); - - const result = await createUpsertLetterHandler(mockedDeps)( - evt, - {} as any, - {} as any, - ); - - expect(result).toBeDefined(); - if (!result) throw new Error("expected BatchResponse, got void"); - expect(result.batchItemFailures).toHaveLength(1); - expect(result.batchItemFailures[0].itemIdentifier).toBe( - "bad-notification-schema", - ); - - expect((mockedDeps.logger.error as jest.Mock).mock.calls[0][0]).toEqual( - expect.objectContaining({ - description: "Error processing upsert of record", - messageId: "bad-notification-schema", - }), - ); - expect(mockedDeps.letterRepo.putLetter).not.toHaveBeenCalled(); - expect(mockMetrics.setNamespace).toHaveBeenCalledWith("upsertLetter"); - expect(mockMetrics.putDimensions).toHaveBeenCalledWith({ - Supplier: "supplier1", - }); - expect(mockMetrics.putMetric).toHaveBeenCalledWith( - "MessageFailed", - 1, - "Count", - ); - }); - - test("no event type produces batch failure and logs error", async () => { - const evt: SQSEvent = createSQSEvent([ - createSqsRecord( - "bad-event-type", - JSON.stringify({ - Type: "Notification", - Message: JSON.stringify({ no: "type" }), - }), - ), + createSqsRecord("bad-event-type", JSON.stringify(message)), ]); const result = await createUpsertLetterHandler(mockedDeps)( @@ -419,13 +367,11 @@ describe("createUpsertLetterHandler", () => { ); }); - test("invalid event type produces batch failure and logs error", async () => { + test("no event type produces batch failure and logs error", async () => { const message = { - letterEvent: { someField: "invalid" }, - operationType: - "uk.nhs.notify.letter-rendering.letter-request.prepared.v2", - supplierSpec: { supplierId: "supplier1", specId: "spec1" }, + letterEvent: { no: "type" }, }; + const evt: SQSEvent = createSQSEvent([ createSqsRecord("bad-event-type", JSON.stringify(message)), ]); @@ -448,25 +394,15 @@ describe("createUpsertLetterHandler", () => { messageId: "bad-event-type", }), ); - expect(mockMetrics.setNamespace).toHaveBeenCalledWith("upsertLetter"); - expect(mockMetrics.putDimensions).toHaveBeenCalledWith({ - Supplier: "supplier1", - }); - expect(mockMetrics.putMetric).toHaveBeenCalledWith( - "MessageFailed", - 1, - "Count", - ); }); - test("unknown operation type produces batch failure and logs error", async () => { + test("invalid event produces batch failure and logs error", async () => { const message = { - letterEvent: createPreparedV1Event(), - operationType: "unknown.operation.type", + letterEvent: { someField: "invalid" }, supplierSpec: { supplierId: "supplier1", specId: "spec1" }, }; const evt: SQSEvent = createSQSEvent([ - createSqsRecord("bad-operation-type", JSON.stringify(message)), + createSqsRecord("bad-event", JSON.stringify(message)), ]); const result = await createUpsertLetterHandler(mockedDeps)( @@ -478,15 +414,13 @@ describe("createUpsertLetterHandler", () => { expect(result).toBeDefined(); if (!result) throw new Error("expected BatchResponse, got void"); expect(result.batchItemFailures).toHaveLength(1); - expect(result.batchItemFailures[0].itemIdentifier).toBe( - "bad-operation-type", - ); + expect(result.batchItemFailures[0].itemIdentifier).toBe("bad-event"); expect(mockedDeps.letterRepo.putLetter).not.toHaveBeenCalled(); expect(mockedDeps.letterRepo.updateLetterStatus).not.toHaveBeenCalled(); expect((mockedDeps.logger.error as jest.Mock).mock.calls[0][0]).toEqual( expect.objectContaining({ description: "Error processing upsert of record", - messageId: "bad-operation-type", + messageId: "bad-event", }), ); expect(mockMetrics.setNamespace).toHaveBeenCalledWith("upsertLetter"); @@ -501,8 +435,15 @@ describe("createUpsertLetterHandler", () => { }); test("valid event type and invalid schema produces batch failure and logs error", async () => { + const message = { + letterEvent: { + type: "uk.nhs.notify.letter-rendering.letter-request.prepared", + some: "unexpected shape", + }, + }; + const evt: SQSEvent = createSQSEvent([ - createSqsRecord("bad-event-schema", "invalid-json"), + createSqsRecord("bad-event-schema", JSON.stringify(message)), ]); const result = await createUpsertLetterHandler(mockedDeps)( @@ -535,8 +476,6 @@ describe("createUpsertLetterHandler", () => { id: "7b9a03ca-342a-4150-b56b-989109c45615", domainId: "ok", }), - operationType: - "uk.nhs.notify.letter-rendering.letter-request.prepared.v2", supplierSpec: { supplierId: "supplier1", specId: "spec1" }, }; const message2 = { @@ -544,8 +483,6 @@ describe("createUpsertLetterHandler", () => { id: "7b9a03ca-342a-4150-b56b-989109c45616", domainId: "fail", }), - operationType: - "uk.nhs.notify.letter-rendering.letter-request.prepared.v2", supplierSpec: { supplierId: "supplier1", specId: "spec1" }, }; const evt: SQSEvent = createSQSEvent([ diff --git a/lambdas/upsert-letter/src/handler/upsert-handler.ts b/lambdas/upsert-letter/src/handler/upsert-handler.ts index 2bb961700..29d21f901 100644 --- a/lambdas/upsert-letter/src/handler/upsert-handler.ts +++ b/lambdas/upsert-letter/src/handler/upsert-handler.ts @@ -18,11 +18,7 @@ import { Deps } from "../config/deps"; type SupplierSpec = { supplierId: string; specId: string }; type PreparedEvents = LetterRequestPreparedEventV2 | LetterRequestPreparedEvent; -type AllocatedLetterQueueMessage = { - letterEvent: unknown; - operationType: string; - supplierSpec: SupplierSpec; -}; + type UpsertOperation = { name: "Insert" | "Update"; schemas: z.ZodSchema[]; @@ -179,9 +175,8 @@ export default function createUpsertLetterHandler(deps: Deps): SQSHandler { const tasks = event.Records.map(async (record) => { let supplier = "unknown"; try { - const queueMessage: AllocatedLetterQueueMessage = JSON.parse( - record.body, - ); + const queueMessage = JSON.parse(record.body); + const { letterEvent, supplierSpec } = queueMessage; deps.logger.info({ @@ -195,6 +190,7 @@ export default function createUpsertLetterHandler(deps: Deps): SQSHandler { : supplierSpec.supplierId; const type = getType(letterEvent); + const operation = getOperationFromType(type); await runUpsert(operation, letterEvent, supplierSpec, deps); From 3db9c679fadb4af79b15f85ae1d75d4512b417be Mon Sep 17 00:00:00 2001 From: David Wass Date: Thu, 12 Feb 2026 11:57:29 +0000 Subject: [PATCH 23/28] package lock again! --- package-lock.json | 160 +++++++++++++++++++++++++++------------------- 1 file changed, 94 insertions(+), 66 deletions(-) diff --git a/package-lock.json b/package-lock.json index 089fb808a..fc5dfd836 100644 --- a/package-lock.json +++ b/package-lock.json @@ -339,6 +339,7 @@ "lambdas/allocate-letter": { "name": "nhs-notify-supplier-api-allocate-letter", "version": "0.0.1", + "extraneous": true, "dependencies": { "@aws-sdk/client-dynamodb": "^3.858.0", "@aws-sdk/client-sqs": "^3.984.0", @@ -363,71 +364,6 @@ "typescript": "^5.8.3" } }, - "lambdas/allocate-letter/node_modules/argparse": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", - "license": "MIT", - "dependencies": { - "sprintf-js": "~1.0.2" - } - }, - "lambdas/allocate-letter/node_modules/aws-lambda": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/aws-lambda/-/aws-lambda-1.0.7.tgz", - "integrity": "sha512-9GNFMRrEMG5y3Jvv+V4azWvc+qNWdWLTjDdhf/zgMlz8haaaLWv0xeAIWxz9PuWUBawsVxy0zZotjCdR3Xq+2w==", - "license": "MIT", - "dependencies": { - "aws-sdk": "^2.814.0", - "commander": "^3.0.2", - "js-yaml": "^3.14.1", - "watchpack": "^2.0.0-beta.10" - }, - "bin": { - "lambda": "bin/lambda" - } - }, - "lambdas/allocate-letter/node_modules/commander": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/commander/-/commander-3.0.2.tgz", - "integrity": "sha512-Gar0ASD4BDyKC4hl4DwHqDrmvjoxWKZigVnAbn5H1owvm4CxCPdb0HQDehwNYMJpla5+M2tPmPARzhtYuwpHow==", - "license": "MIT" - }, - "lambdas/allocate-letter/node_modules/js-yaml": { - "version": "3.14.2", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.2.tgz", - "integrity": "sha512-PMSmkqxr106Xa156c2M265Z+FTrPl+oxd/rgOQy2tijQeK5TxQ43psO1ZCwhVOSdnn+RzkzlRz/eY4BgJBYVpg==", - "license": "MIT", - "dependencies": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, - "lambdas/allocate-letter/node_modules/pino": { - "version": "9.14.0", - "resolved": "https://registry.npmjs.org/pino/-/pino-9.14.0.tgz", - "integrity": "sha512-8OEwKp5juEvb/MjpIc4hjqfgCNysrS94RIOMXYvpYCdm/jglrKEiAYmiumbmGhCvs+IcInsphYDFwqrjr7398w==", - "license": "MIT", - "dependencies": { - "@pinojs/redact": "^0.4.0", - "atomic-sleep": "^1.0.0", - "on-exit-leak-free": "^2.1.0", - "pino-abstract-transport": "^2.0.0", - "pino-std-serializers": "^7.0.0", - "process-warning": "^5.0.0", - "quick-format-unescaped": "^4.0.3", - "real-require": "^0.2.0", - "safe-stable-stringify": "^2.3.1", - "sonic-boom": "^4.0.1", - "thread-stream": "^3.0.0" - }, - "bin": { - "pino": "bin.js" - } - }, "lambdas/api-handler": { "name": "nhs-notify-supplier-api-handler", "version": "0.0.1", @@ -845,6 +781,98 @@ "@esbuild/win32-x64": "0.27.3" } }, + "lambdas/supplier-allocator": { + "name": "nhs-notify-supplier-api-allocate-letter", + "version": "0.0.1", + "dependencies": { + "@aws-sdk/client-dynamodb": "^3.858.0", + "@aws-sdk/client-sqs": "^3.984.0", + "@aws-sdk/lib-dynamodb": "^3.858.0", + "@internal/datastore": "*", + "@nhsdigital/nhs-notify-event-schemas-letter-rendering": "^2.0.1", + "@nhsdigital/nhs-notify-event-schemas-letter-rendering-v1": "npm:@nhsdigital/nhs-notify-event-schemas-letter-rendering@^1.1.5", + "@nhsdigital/nhs-notify-event-schemas-supplier-api": "^1.0.8", + "@types/aws-lambda": "^8.10.148", + "aws-lambda": "^1.0.7", + "esbuild": "^0.27.2", + "pino": "^9.7.0", + "zod": "^4.1.11" + }, + "devDependencies": { + "@tsconfig/node22": "^22.0.2", + "@types/aws-lambda": "^8.10.148", + "@types/jest": "^30.0.0", + "jest": "^30.2.0", + "jest-mock-extended": "^4.0.0", + "ts-jest": "^29.4.0", + "typescript": "^5.8.3" + } + }, + "lambdas/supplier-allocator/node_modules/argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "license": "MIT", + "dependencies": { + "sprintf-js": "~1.0.2" + } + }, + "lambdas/supplier-allocator/node_modules/aws-lambda": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/aws-lambda/-/aws-lambda-1.0.7.tgz", + "integrity": "sha512-9GNFMRrEMG5y3Jvv+V4azWvc+qNWdWLTjDdhf/zgMlz8haaaLWv0xeAIWxz9PuWUBawsVxy0zZotjCdR3Xq+2w==", + "license": "MIT", + "dependencies": { + "aws-sdk": "^2.814.0", + "commander": "^3.0.2", + "js-yaml": "^3.14.1", + "watchpack": "^2.0.0-beta.10" + }, + "bin": { + "lambda": "bin/lambda" + } + }, + "lambdas/supplier-allocator/node_modules/commander": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/commander/-/commander-3.0.2.tgz", + "integrity": "sha512-Gar0ASD4BDyKC4hl4DwHqDrmvjoxWKZigVnAbn5H1owvm4CxCPdb0HQDehwNYMJpla5+M2tPmPARzhtYuwpHow==", + "license": "MIT" + }, + "lambdas/supplier-allocator/node_modules/js-yaml": { + "version": "3.14.2", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.2.tgz", + "integrity": "sha512-PMSmkqxr106Xa156c2M265Z+FTrPl+oxd/rgOQy2tijQeK5TxQ43psO1ZCwhVOSdnn+RzkzlRz/eY4BgJBYVpg==", + "license": "MIT", + "dependencies": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "lambdas/supplier-allocator/node_modules/pino": { + "version": "9.14.0", + "resolved": "https://registry.npmjs.org/pino/-/pino-9.14.0.tgz", + "integrity": "sha512-8OEwKp5juEvb/MjpIc4hjqfgCNysrS94RIOMXYvpYCdm/jglrKEiAYmiumbmGhCvs+IcInsphYDFwqrjr7398w==", + "license": "MIT", + "dependencies": { + "@pinojs/redact": "^0.4.0", + "atomic-sleep": "^1.0.0", + "on-exit-leak-free": "^2.1.0", + "pino-abstract-transport": "^2.0.0", + "pino-std-serializers": "^7.0.0", + "process-warning": "^5.0.0", + "quick-format-unescaped": "^4.0.3", + "real-require": "^0.2.0", + "safe-stable-stringify": "^2.3.1", + "sonic-boom": "^4.0.1", + "thread-stream": "^3.0.0" + }, + "bin": { + "pino": "bin.js" + } + }, "lambdas/upsert-letter": { "name": "nhs-notify-supplier-api-upsert-letter", "version": "0.0.1", @@ -15842,7 +15870,7 @@ "link": true }, "node_modules/nhs-notify-supplier-api-allocate-letter": { - "resolved": "lambdas/allocate-letter", + "resolved": "lambdas/supplier-allocator", "link": true }, "node_modules/nhs-notify-supplier-api-handler": { From 4b38704c755107669340330d86d84e1a03a03e48 Mon Sep 17 00:00:00 2001 From: David Wass Date: Thu, 12 Feb 2026 14:30:49 +0000 Subject: [PATCH 24/28] permissions --- .../components/api/module_lambda_supplier_allocator.tf | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/infrastructure/terraform/components/api/module_lambda_supplier_allocator.tf b/infrastructure/terraform/components/api/module_lambda_supplier_allocator.tf index 0518573a4..41a10ac92 100644 --- a/infrastructure/terraform/components/api/module_lambda_supplier_allocator.tf +++ b/infrastructure/terraform/components/api/module_lambda_supplier_allocator.tf @@ -66,7 +66,7 @@ data "aws_iam_policy_document" "sqs_supplier_allocator_lambda" { ] resources = [ - module.sqs_letter_updates.sqs_queue_arn + module.sqs_supplier_allocator.sqs_queue_arn ] } @@ -79,7 +79,7 @@ data "aws_iam_policy_document" "sqs_supplier_allocator_lambda" { ] resources = [ - module.sqs_supplier_allocator.sqs_queue_arn + module.sqs_letter_updates.sqs_queue_arn ] } } From 0315d61d15b4bd06c070b47f69d0419be69de610 Mon Sep 17 00:00:00 2001 From: David Wass Date: Thu, 12 Feb 2026 16:09:09 +0000 Subject: [PATCH 25/28] extra logging --- lambdas/upsert-letter/src/handler/upsert-handler.ts | 2 ++ 1 file changed, 2 insertions(+) diff --git a/lambdas/upsert-letter/src/handler/upsert-handler.ts b/lambdas/upsert-letter/src/handler/upsert-handler.ts index 29d21f901..614eb64fc 100644 --- a/lambdas/upsert-letter/src/handler/upsert-handler.ts +++ b/lambdas/upsert-letter/src/handler/upsert-handler.ts @@ -182,6 +182,8 @@ export default function createUpsertLetterHandler(deps: Deps): SQSHandler { deps.logger.info({ description: "Extracted letter event", messageId: record.messageId, + event: letterEvent, + supplier: supplierSpec, }); supplier = From d1caf750a4b1eebee439fbd47a037f63d079b8e9 Mon Sep 17 00:00:00 2001 From: David Wass Date: Fri, 13 Feb 2026 09:57:13 +0000 Subject: [PATCH 26/28] queue permissions --- .../api/module_lambda_supplier_allocator.tf | 4 +- .../api/module_sqs_supplier_allocator.tf | 57 ++++++++++++++++++- 2 files changed, 58 insertions(+), 3 deletions(-) diff --git a/infrastructure/terraform/components/api/module_lambda_supplier_allocator.tf b/infrastructure/terraform/components/api/module_lambda_supplier_allocator.tf index 41a10ac92..76cfb22a6 100644 --- a/infrastructure/terraform/components/api/module_lambda_supplier_allocator.tf +++ b/infrastructure/terraform/components/api/module_lambda_supplier_allocator.tf @@ -15,7 +15,7 @@ module "supplier_allocator" { kms_key_arn = module.kms.key_arn iam_policy_document = { - body = data.aws_iam_policy_document.sqs_supplier_allocator_lambda.json + body = data.aws_iam_policy_document.supplier_allocator_lambda.json } function_s3_bucket = local.acct.s3_buckets["lambda_function_artefacts"]["id"] @@ -40,7 +40,7 @@ module "supplier_allocator" { }) } -data "aws_iam_policy_document" "sqs_supplier_allocator_lambda" { +data "aws_iam_policy_document" "supplier_allocator_lambda" { statement { sid = "KMSPermissions" effect = "Allow" diff --git a/infrastructure/terraform/components/api/module_sqs_supplier_allocator.tf b/infrastructure/terraform/components/api/module_sqs_supplier_allocator.tf index 2f3208933..97437dbb3 100644 --- a/infrastructure/terraform/components/api/module_sqs_supplier_allocator.tf +++ b/infrastructure/terraform/components/api/module_sqs_supplier_allocator.tf @@ -12,5 +12,60 @@ module "sqs_supplier_allocator" { visibility_timeout_seconds = 60 - create_dlq = true + create_dlq = true + sqs_policy_overload = data.aws_iam_policy_document.supplier_allocator_queue_policy.json +} + +data "aws_iam_policy_document" "supplier_allocator_queue_policy" { + version = "2012-10-17" + statement { + sid = "AllowSNSToSendMessage" + effect = "Allow" + + principals { + type = "Service" + identifiers = ["sns.amazonaws.com"] + } + + actions = [ + "sqs:SendMessage" + ] + + resources = [ + "arn:aws:sqs:${var.region}:${var.aws_account_id}:${var.project}-${var.environment}-${var.component}-supplier-allocator-queue" + ] + + condition { + test = "ArnEquals" + variable = "aws:SourceArn" + values = [module.eventsub.sns_topic.arn] + } + } + + statement { + sid = "AllowSNSPermissions" + effect = "Allow" + + principals { + type = "Service" + identifiers = ["sns.amazonaws.com"] + } + + actions = [ + "sqs:SendMessage", + "sqs:ListQueueTags", + "sqs:GetQueueUrl", + "sqs:GetQueueAttributes", + ] + + resources = [ + "arn:aws:sqs:${var.region}:${var.aws_account_id}:${var.project}-${var.environment}-${var.component}-supplier-allocator-queue" + ] + + condition { + test = "ArnEquals" + variable = "aws:SourceArn" + values = [module.eventsub.sns_topic.arn] + } + } } From 8e8fc86bd4c8ef5ad929908a7e288a5bf45e8d8e Mon Sep 17 00:00:00 2001 From: David Wass Date: Fri, 13 Feb 2026 13:48:56 +0000 Subject: [PATCH 27/28] more logging --- .../src/handler/upsert-handler.ts | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) diff --git a/lambdas/upsert-letter/src/handler/upsert-handler.ts b/lambdas/upsert-letter/src/handler/upsert-handler.ts index 614eb64fc..f58fc2004 100644 --- a/lambdas/upsert-letter/src/handler/upsert-handler.ts +++ b/lambdas/upsert-letter/src/handler/upsert-handler.ts @@ -114,7 +114,13 @@ function mapToUpdateLetter(upsertRequest: LetterEvent): UpdateLetter { function getType(event: unknown) { const env = TypeEnvelope.safeParse(event); if (!env.success) { - throw new Error("Missing or invalid envelope.type field"); + // Helpful debugging info: + const pretty = (() => { + return JSON.stringify(event, null, 2); + })(); + throw new Error( + `Missing or invalid envelope.type field. Payload seen:\n${pretty}`, + ); } return env.data.type; } @@ -175,7 +181,17 @@ export default function createUpsertLetterHandler(deps: Deps): SQSHandler { const tasks = event.Records.map(async (record) => { let supplier = "unknown"; try { + deps.logger.info({ + description: "Processing record", + messageId: record.messageId, + message: record.body, + }); const queueMessage = JSON.parse(record.body); + deps.logger.info({ + description: "Parsed message body", + messageId: record.messageId, + queueMessage, + }); const { letterEvent, supplierSpec } = queueMessage; From 9e00f622e99c6966ba994d53e86d031b5669e189 Mon Sep 17 00:00:00 2001 From: David Wass Date: Fri, 13 Feb 2026 15:51:33 +0000 Subject: [PATCH 28/28] type checking up front --- .../handler/__tests__/upsert-handler.test.ts | 10 +- .../src/handler/upsert-handler.ts | 107 +++++++++++------- 2 files changed, 70 insertions(+), 47 deletions(-) diff --git a/lambdas/upsert-letter/src/handler/__tests__/upsert-handler.test.ts b/lambdas/upsert-letter/src/handler/__tests__/upsert-handler.test.ts index eaf824720..5800cfa0c 100644 --- a/lambdas/upsert-letter/src/handler/__tests__/upsert-handler.test.ts +++ b/lambdas/upsert-letter/src/handler/__tests__/upsert-handler.test.ts @@ -217,14 +217,14 @@ describe("createUpsertLetterHandler", () => { letterEvent: createPreparedV1Event(), supplierSpec: { supplierId: "supplier1", specId: "spec1" }, }; - const updateMessage = { - letterEvent: createSupplierStatusChangeEvent(), - }; const evt: SQSEvent = createSQSEvent([ createSqsRecord("msg1", JSON.stringify(v2message)), createSqsRecord("msg2", JSON.stringify(v1message)), - createSqsRecord("msg3", JSON.stringify(updateMessage)), + createSqsRecord( + "msg3", + JSON.stringify(createSupplierStatusChangeEvent()), + ), ]); const result = await createUpsertLetterHandler(mockedDeps)( @@ -425,7 +425,7 @@ describe("createUpsertLetterHandler", () => { ); expect(mockMetrics.setNamespace).toHaveBeenCalledWith("upsertLetter"); expect(mockMetrics.putDimensions).toHaveBeenCalledWith({ - Supplier: "supplier1", + Supplier: "unknown", }); expect(mockMetrics.putMetric).toHaveBeenCalledWith( "MessageFailed", diff --git a/lambdas/upsert-letter/src/handler/upsert-handler.ts b/lambdas/upsert-letter/src/handler/upsert-handler.ts index f58fc2004..684c6e87d 100644 --- a/lambdas/upsert-letter/src/handler/upsert-handler.ts +++ b/lambdas/upsert-letter/src/handler/upsert-handler.ts @@ -19,8 +19,27 @@ import { Deps } from "../config/deps"; type SupplierSpec = { supplierId: string; specId: string }; type PreparedEvents = LetterRequestPreparedEventV2 | LetterRequestPreparedEvent; +const SupplierSpecSchema = z.object({ + supplierId: z.string().min(1), + specId: z.string().min(1), +}); + +const LetterEventUnionSchema = z.discriminatedUnion("type", [ + $LetterRequestPreparedEventV2, + $LetterRequestPreparedEvent, + $LetterEvent, +]); + +const QueueMessageSchema = z.union([ + $LetterEvent, + z.object({ + letterEvent: LetterEventUnionSchema, + supplierSpec: SupplierSpecSchema.optional(), + }), +]); + type UpsertOperation = { - name: "Insert" | "Update"; + name: "Insert" | "Update" | "Unknown"; schemas: z.ZodSchema[]; handler: ( request: unknown, @@ -29,11 +48,10 @@ type UpsertOperation = { ) => Promise; }; -// small envelope that must exist in all inputs -const TypeEnvelope = z.object({ type: z.string().min(1) }); - function getOperationFromType(type: string): UpsertOperation { - if (type.startsWith("uk.nhs.notify.letter-rendering.letter-request.prepared")) + if ( + type.startsWith("uk.nhs.notify.letter-rendering.letter-request.prepared") + ) { return { name: "Insert", schemas: [$LetterRequestPreparedEventV2, $LetterRequestPreparedEvent], @@ -55,24 +73,24 @@ function getOperationFromType(type: string): UpsertOperation { }); }, }; - if (type.startsWith("uk.nhs.notify.supplier-api.letter")) - return { - name: "Update", - schemas: [$LetterEvent], - handler: async (request, supplierSpec, deps) => { - const supplierEvent = request as LetterEvent; - const letterToUpdate: UpdateLetter = mapToUpdateLetter(supplierEvent); - await deps.letterRepo.updateLetterStatus(letterToUpdate); + } + // if it's not an insert type, it must be an update as we've already parsed the message, but we want to have a separate operation for better logging and metrics + return { + name: "Update", + schemas: [$LetterEvent], + handler: async (request, supplierSpec, deps) => { + const supplierEvent = request as LetterEvent; + const letterToUpdate: UpdateLetter = mapToUpdateLetter(supplierEvent); + await deps.letterRepo.updateLetterStatus(letterToUpdate); - deps.logger.info({ - description: "Updated letter", - eventId: supplierEvent.id, - letterId: letterToUpdate.id, - supplierId: letterToUpdate.supplierId, - }); - }, - }; - throw new Error(`Unknown operation from type=${type}`); + deps.logger.info({ + description: "Updated letter", + eventId: supplierEvent.id, + letterId: letterToUpdate.id, + supplierId: letterToUpdate.supplierId, + }); + }, + }; } function mapToInsertLetter( @@ -111,19 +129,6 @@ function mapToUpdateLetter(upsertRequest: LetterEvent): UpdateLetter { reasonText: upsertRequest.data.reasonText, }; } -function getType(event: unknown) { - const env = TypeEnvelope.safeParse(event); - if (!env.success) { - // Helpful debugging info: - const pretty = (() => { - return JSON.stringify(event, null, 2); - })(); - throw new Error( - `Missing or invalid envelope.type field. Payload seen:\n${pretty}`, - ); - } - return env.data.type; -} async function runUpsert( operation: UpsertOperation, @@ -138,8 +143,6 @@ async function runUpsert( return; } } - // none matched - throw new Error("No matching schema for received message"); } async function emitMetrics( @@ -193,7 +196,24 @@ export default function createUpsertLetterHandler(deps: Deps): SQSHandler { queueMessage, }); - const { letterEvent, supplierSpec } = queueMessage; + const result = QueueMessageSchema.safeParse(queueMessage); + if (!result.success) { + throw new Error( + `Message did not match expected schema: ${JSON.stringify( + result.error.issues, + )}`, + ); + } + let letterEvent: any; + let supplierSpec: SupplierSpec | undefined; + + if ("letterEvent" in result.data) { + letterEvent = result.data.letterEvent; + supplierSpec = result.data.supplierSpec; + } else { + letterEvent = result.data; + supplierSpec = undefined; + } deps.logger.info({ description: "Extracted letter event", @@ -207,11 +227,14 @@ export default function createUpsertLetterHandler(deps: Deps): SQSHandler { ? getSupplierIdFromEvent(letterEvent) : supplierSpec.supplierId; - const type = getType(letterEvent); + const operation = getOperationFromType(letterEvent.type); - const operation = getOperationFromType(type); - - await runUpsert(operation, letterEvent, supplierSpec, deps); + await runUpsert( + operation, + letterEvent, + supplierSpec ?? { supplierId: "unknown", specId: "unknown" }, + deps, + ); perSupplierSuccess.set( supplier,