diff --git a/internal/events/package.json b/internal/events/package.json index d8b6626c9..cf2e4f0e4 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/internal/events/src/events/__tests__/event-envelope.test.ts b/internal/events/src/events/__tests__/event-envelope.test.ts index 4842ef4fb..cad95ea10 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 ba9d41449..9541d6dab 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", @@ -90,8 +91,10 @@ export function EventEnvelope( subject: z .string() - - .regex(new RegExp(`^${subjectPrefixRegex}${resourceName}/[a-z0-9-]+$`)) + .regex( + // eslint-disable-next-line security/detect-non-literal-regexp + new RegExp(`^${subjectPrefixRegex}${resourceName}/[^/]+(?:/.*)?$`), + ) .meta({ title: "Event Subject", description: