From b9d8e24d229c481b6de7c63fcae398cfe690633e Mon Sep 17 00:00:00 2001 From: Mark Slowey Date: Fri, 16 Jan 2026 14:36:38 +0000 Subject: [PATCH 1/4] remove eventbridge wrapper if present --- .../handler/__tests__/upsert-handler.test.ts | 40 ++++++++++++++++++- .../src/handler/upsert-handler.ts | 12 +++++- 2 files changed, 50 insertions(+), 2 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 85df0df99..ded5892fc 100644 --- a/lambdas/upsert-letter/src/handler/__tests__/upsert-handler.test.ts +++ b/lambdas/upsert-letter/src/handler/__tests__/upsert-handler.test.ts @@ -36,6 +36,28 @@ function createSqsRecord(msgId: string, body: string): SQSRecord { }; } +function createEventBridgeNotification( + event: + | LetterRequestPreparedEventV2 + | LetterRequestPreparedEvent + | LetterEvent, +): Partial { + return { + SignatureVersion: "", + Timestamp: "", + Signature: "", + SigningCertUrl: "", + MessageId: "", + Message: createEventBridgeEvent(event), + MessageAttributes: {}, + Type: "Notification", + UnsubscribeUrl: "", + TopicArn: "", + Subject: "", + Token: "", + }; +} + function createNotification( event: | LetterRequestPreparedEventV2 @@ -58,6 +80,22 @@ function createNotification( }; } +function createEventBridgeEvent(event: any): 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 { @@ -178,7 +216,7 @@ describe("createUpsertLetterHandler", () => { const evt: SQSEvent = createSQSEvent([ createSqsRecord( "msg1", - JSON.stringify(createNotification(createPreparedV2Event())), + JSON.stringify(createEventBridgeNotification(createPreparedV2Event())), ), createSqsRecord( "msg2", diff --git a/lambdas/upsert-letter/src/handler/upsert-handler.ts b/lambdas/upsert-letter/src/handler/upsert-handler.ts index 6849fbcce..5d280985a 100644 --- a/lambdas/upsert-letter/src/handler/upsert-handler.ts +++ b/lambdas/upsert-letter/src/handler/upsert-handler.ts @@ -120,6 +120,14 @@ function parseSNSNotification(record: SQSRecord) { return notification.Message; } +function removeEventBridgeWrapper(event: any) { + const maybeEventBridge = event as any; + if (maybeEventBridge.source && maybeEventBridge.detail) { + return maybeEventBridge.detail; + } + return event; +} + function getType(event: unknown) { const env = TypeEnvelope.safeParse(event); if (!env.success) { @@ -152,7 +160,9 @@ export default function createUpsertLetterHandler(deps: Deps): SQSHandler { try { const message: string = parseSNSNotification(record); - const letterEvent: unknown = JSON.parse(message); + const event = JSON.parse(message); + + const letterEvent: unknown = removeEventBridgeWrapper(event); const type = getType(letterEvent); From d09c07176298c01c9ca3aa8fefdff9dcd1f0b9e5 Mon Sep 17 00:00:00 2001 From: Mark Slowey Date: Fri, 16 Jan 2026 14:45:25 +0000 Subject: [PATCH 2/4] lint --- lambdas/upsert-letter/src/handler/upsert-handler.ts | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/lambdas/upsert-letter/src/handler/upsert-handler.ts b/lambdas/upsert-letter/src/handler/upsert-handler.ts index 5d280985a..a1b2ea08b 100644 --- a/lambdas/upsert-letter/src/handler/upsert-handler.ts +++ b/lambdas/upsert-letter/src/handler/upsert-handler.ts @@ -121,7 +121,7 @@ function parseSNSNotification(record: SQSRecord) { } function removeEventBridgeWrapper(event: any) { - const maybeEventBridge = event as any; + const maybeEventBridge = event; if (maybeEventBridge.source && maybeEventBridge.detail) { return maybeEventBridge.detail; } @@ -160,9 +160,9 @@ export default function createUpsertLetterHandler(deps: Deps): SQSHandler { try { const message: string = parseSNSNotification(record); - const event = JSON.parse(message); + const snsEvent = JSON.parse(message); - const letterEvent: unknown = removeEventBridgeWrapper(event); + const letterEvent: unknown = removeEventBridgeWrapper(snsEvent); const type = getType(letterEvent); From 6e26b126139a8747f3ac7d56fae5742d82334363 Mon Sep 17 00:00:00 2001 From: Mark Slowey Date: Fri, 16 Jan 2026 15:56:41 +0000 Subject: [PATCH 3/4] test type --- .../src/handler/__tests__/upsert-handler.test.ts | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) 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 63b5a1db4..012295a3b 100644 --- a/lambdas/upsert-letter/src/handler/__tests__/upsert-handler.test.ts +++ b/lambdas/upsert-letter/src/handler/__tests__/upsert-handler.test.ts @@ -80,7 +80,12 @@ function createNotification( }; } -function createEventBridgeEvent(event: any): string { +function createEventBridgeEvent( + event: + | LetterRequestPreparedEventV2 + | LetterRequestPreparedEvent + | LetterEvent, + ): string { const now = new Date().toISOString(); const eventBridgeEnvelope = { version: "0", From 7e2e2c989f312595f3e79e6ee060358621d0f6a8 Mon Sep 17 00:00:00 2001 From: Mark Slowey Date: Fri, 16 Jan 2026 16:04:54 +0000 Subject: [PATCH 4/4] lint pass --- .../handler/__tests__/upsert-handler.test.ts | 24 +++++++------------ 1 file changed, 8 insertions(+), 16 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 012295a3b..3f4341340 100644 --- a/lambdas/upsert-letter/src/handler/__tests__/upsert-handler.test.ts +++ b/lambdas/upsert-letter/src/handler/__tests__/upsert-handler.test.ts @@ -36,11 +36,13 @@ function createSqsRecord(msgId: string, body: string): SQSRecord { }; } +type SupportedEvent = + | LetterRequestPreparedEventV2 + | LetterRequestPreparedEvent + | LetterEvent; + function createEventBridgeNotification( - event: - | LetterRequestPreparedEventV2 - | LetterRequestPreparedEvent - | LetterEvent, + event: SupportedEvent, ): Partial { return { SignatureVersion: "", @@ -58,12 +60,7 @@ function createEventBridgeNotification( }; } -function createNotification( - event: - | LetterRequestPreparedEventV2 - | LetterRequestPreparedEvent - | LetterEvent, -): Partial { +function createNotification(event: SupportedEvent): Partial { return { SignatureVersion: "", Timestamp: "", @@ -80,12 +77,7 @@ function createNotification( }; } -function createEventBridgeEvent( - event: - | LetterRequestPreparedEventV2 - | LetterRequestPreparedEvent - | LetterEvent, - ): string { +function createEventBridgeEvent(event: SupportedEvent): string { const now = new Date().toISOString(); const eventBridgeEnvelope = { version: "0",