From 70d5f02e9e083a86007c270d38639ed8b4114ba5 Mon Sep 17 00:00:00 2001 From: Francisco Videira Date: Tue, 10 Mar 2026 11:11:11 +0000 Subject: [PATCH 1/4] Init --- lambdas/api-handler/src/handlers/amendment-event-transformer.ts | 2 ++ 1 file changed, 2 insertions(+) diff --git a/lambdas/api-handler/src/handlers/amendment-event-transformer.ts b/lambdas/api-handler/src/handlers/amendment-event-transformer.ts index d881ce5e..1cc7ba81 100644 --- a/lambdas/api-handler/src/handlers/amendment-event-transformer.ts +++ b/lambdas/api-handler/src/handlers/amendment-event-transformer.ts @@ -29,6 +29,8 @@ export default function createTransformAmendmentEventHandler( letter.reasonCode = updateLetterCommand.reasonCode; letter.reasonText = updateLetterCommand.reasonText; + // validate given the letter status change event schema allows "uuid" style only? + const letterEvent = mapLetterToCloudEvent( letter, deps.env.EVENT_SOURCE, From 360e83a863e2d95c916479ca981879551e76ea8f Mon Sep 17 00:00:00 2001 From: Francisco Videira Date: Tue, 10 Mar 2026 12:45:10 +0000 Subject: [PATCH 2/4] Event envelope allows wider subject resource id --- .../events/__tests__/event-envelope.test.ts | 22 +++++++++++++++++++ internal/events/src/events/event-envelope.ts | 5 +++-- 2 files changed, 25 insertions(+), 2 deletions(-) diff --git a/internal/events/src/events/__tests__/event-envelope.test.ts b/internal/events/src/events/__tests__/event-envelope.test.ts index 4842ef4f..cad95ea1 100644 --- a/internal/events/src/events/__tests__/event-envelope.test.ts +++ b/internal/events/src/events/__tests__/event-envelope.test.ts @@ -364,5 +364,27 @@ describe("EventEnvelope schema validation", () => { const result = $EnvelopeNoPrefix.safeParse(envelope); expect(result.success).toBe(false); }); + + it("should accept subject with non uuid resource id", () => { + const envelope = { + ...baseLetterEnvelope, + subject: "letter-origin/letter-rendering/letter/Some_Letter_12345", + }; + + const result = $EnvelopeWithPrefix.safeParse(envelope); + expect(result.error).toBeUndefined(); + expect(result.success).toBe(true); + }); + + it("should accept subject with multi sub path resource id", () => { + const envelope = { + ...baseLetterEnvelope, + subject: "letter-origin/letter-rendering/letter/a/B/c/123", + }; + + const result = $EnvelopeWithPrefix.safeParse(envelope); + expect(result.error).toBeUndefined(); + expect(result.success).toBe(true); + }); }); }); diff --git a/internal/events/src/events/event-envelope.ts b/internal/events/src/events/event-envelope.ts index ba9d4144..f3602bf4 100644 --- a/internal/events/src/events/event-envelope.ts +++ b/internal/events/src/events/event-envelope.ts @@ -90,8 +90,9 @@ export function EventEnvelope( subject: z .string() - - .regex(new RegExp(`^${subjectPrefixRegex}${resourceName}/[a-z0-9-]+$`)) + .regex( + new RegExp(`^${subjectPrefixRegex}${resourceName}/[^/]+(?:/.*)?$`), + ) .meta({ title: "Event Subject", description: From d7ef2488c9bad4c2463b547997842b2f4af369c6 Mon Sep 17 00:00:00 2001 From: Francisco Videira Date: Tue, 10 Mar 2026 16:40:42 +0000 Subject: [PATCH 3/4] Bump bersion and clean up --- internal/events/package.json | 2 +- lambdas/api-handler/src/handlers/amendment-event-transformer.ts | 2 -- 2 files changed, 1 insertion(+), 3 deletions(-) diff --git a/internal/events/package.json b/internal/events/package.json index d8b6626c..cf2e4f0e 100644 --- a/internal/events/package.json +++ b/internal/events/package.json @@ -37,5 +37,5 @@ "typecheck": "tsc --noEmit" }, "types": "dist/index.d.ts", - "version": "1.0.13" + "version": "1.0.14" } diff --git a/lambdas/api-handler/src/handlers/amendment-event-transformer.ts b/lambdas/api-handler/src/handlers/amendment-event-transformer.ts index 1cc7ba81..d881ce5e 100644 --- a/lambdas/api-handler/src/handlers/amendment-event-transformer.ts +++ b/lambdas/api-handler/src/handlers/amendment-event-transformer.ts @@ -29,8 +29,6 @@ export default function createTransformAmendmentEventHandler( letter.reasonCode = updateLetterCommand.reasonCode; letter.reasonText = updateLetterCommand.reasonText; - // validate given the letter status change event schema allows "uuid" style only? - const letterEvent = mapLetterToCloudEvent( letter, deps.env.EVENT_SOURCE, From 0719b5d2b3c532d708413db61f7c137c33ef9703 Mon Sep 17 00:00:00 2001 From: Francisco Videira Date: Wed, 11 Mar 2026 12:21:40 +0000 Subject: [PATCH 4/4] Ignore regex false positives --- internal/events/src/events/event-envelope.ts | 2 ++ 1 file changed, 2 insertions(+) diff --git a/internal/events/src/events/event-envelope.ts b/internal/events/src/events/event-envelope.ts index f3602bf4..9541d6da 100644 --- a/internal/events/src/events/event-envelope.ts +++ b/internal/events/src/events/event-envelope.ts @@ -81,6 +81,7 @@ export function EventEnvelope( source: z .string() + // eslint-disable-next-line security/detect-unsafe-regex .regex(/^\/data-plane\/supplier-api(?:\/.*)?$/) .meta({ title: "Event Source", @@ -91,6 +92,7 @@ export function EventEnvelope( subject: z .string() .regex( + // eslint-disable-next-line security/detect-non-literal-regexp new RegExp(`^${subjectPrefixRegex}${resourceName}/[^/]+(?:/.*)?$`), ) .meta({