Initial commit
This commit is contained in:
47
lib/payment-uri.ts
Normal file
47
lib/payment-uri.ts
Normal file
@@ -0,0 +1,47 @@
|
||||
import { PaymentMethodType } from "@prisma/client";
|
||||
|
||||
function looksLikeUrl(value: string) {
|
||||
try {
|
||||
const url = new URL(value);
|
||||
return ["http:", "https:"].includes(url.protocol);
|
||||
} catch {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
export function buildPaymentUri(type: PaymentMethodType, value: string, network?: string | null) {
|
||||
const cleaned = value.trim();
|
||||
|
||||
switch (type) {
|
||||
case "PAYPAL": {
|
||||
if (looksLikeUrl(cleaned)) {
|
||||
return cleaned;
|
||||
}
|
||||
return `https://paypal.me/${cleaned}`;
|
||||
}
|
||||
case "BITCOIN":
|
||||
return `bitcoin:${cleaned}`;
|
||||
case "ETHEREUM":
|
||||
return `ethereum:${cleaned}`;
|
||||
case "MONERO":
|
||||
return `monero:${cleaned}`;
|
||||
case "LITECOIN":
|
||||
return `litecoin:${cleaned}`;
|
||||
case "SOLANA":
|
||||
return `solana:${cleaned}`;
|
||||
case "USDT":
|
||||
return network ? `usdt:${network}:${cleaned}` : `usdt:${cleaned}`;
|
||||
case "REVOLUT": {
|
||||
if (looksLikeUrl(cleaned)) {
|
||||
return cleaned;
|
||||
}
|
||||
return `https://revolut.me/${cleaned}`;
|
||||
}
|
||||
case "BANK_TRANSFER":
|
||||
return cleaned;
|
||||
case "CUSTOM":
|
||||
return cleaned;
|
||||
default:
|
||||
return cleaned;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user