@moneydevkit/core 0.7.0-beta.0 → 0.7.0-beta.10
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/actions.d.ts +30 -11
- package/dist/actions.js +51 -32
- package/dist/actions.js.map +1 -1
- package/dist/client-actions.d.ts +4 -2
- package/dist/client-actions.js +64 -22
- package/dist/client-actions.js.map +1 -1
- package/dist/client.d.ts +3 -0
- package/dist/client.js +2 -0
- package/dist/client.js.map +1 -1
- package/dist/components/Checkout.d.ts +1 -1
- package/dist/components/Checkout.js +49 -15
- package/dist/components/Checkout.js.map +1 -1
- package/dist/components/checkout/PendingPaymentCheckout.js +27 -7
- package/dist/components/checkout/PendingPaymentCheckout.js.map +1 -1
- package/dist/components/checkout/UnconfirmedCheckout.js +46 -1
- package/dist/components/checkout/UnconfirmedCheckout.js.map +1 -1
- package/dist/handlers/checkout.d.ts +52 -0
- package/dist/handlers/checkout.js +196 -11
- package/dist/handlers/checkout.js.map +1 -1
- package/dist/handlers/products.d.ts +1 -0
- package/dist/handlers/products.js +18 -0
- package/dist/handlers/products.js.map +1 -0
- package/dist/hooks/useCheckout.d.ts +33 -0
- package/dist/hooks/useCheckout.js +57 -15
- package/dist/hooks/useCheckout.js.map +1 -1
- package/dist/hooks/useProducts.d.ts +17 -0
- package/dist/hooks/useProducts.js +34 -0
- package/dist/hooks/useProducts.js.map +1 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -1
- package/dist/lightning-node.js +3 -3
- package/dist/lightning-node.js.map +1 -1
- package/dist/mdk-client.d.ts +18 -2
- package/dist/mdk-client.js +10 -1
- package/dist/mdk-client.js.map +1 -1
- package/dist/mdk.js +6 -0
- package/dist/mdk.js.map +1 -1
- package/dist/preview.js +10 -1
- package/dist/preview.js.map +1 -1
- package/dist/route.d.ts +17 -2
- package/dist/route.js +72 -5
- package/dist/route.js.map +1 -1
- package/dist/startup-validation.d.ts +12 -0
- package/dist/startup-validation.js +15 -0
- package/dist/startup-validation.js.map +1 -0
- package/dist/types.d.ts +24 -0
- package/dist/types.js +13 -0
- package/dist/types.js.map +1 -0
- package/package.json +3 -3
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PendingPaymentCheckout.js","sourceRoot":"","sources":["../../../src/components/checkout/PendingPaymentCheckout.tsx"],"names":[],"mappings":";AACA,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAA;AACtD,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAA;AAC1C,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAA;AACxC,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAA;AACxD,OAAO,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAA;AACvD,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"PendingPaymentCheckout.js","sourceRoot":"","sources":["../../../src/components/checkout/PendingPaymentCheckout.tsx"],"names":[],"mappings":"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"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
|
|
2
2
|
import { zodResolver } from '@hookform/resolvers/zod';
|
|
3
3
|
import { useMutation, useQueryClient } from '@tanstack/react-query';
|
|
4
|
+
import { useState } from 'react';
|
|
4
5
|
import { useForm } from 'react-hook-form';
|
|
5
6
|
import { z } from 'zod';
|
|
6
7
|
import { clientConfirmCheckout } from '../../client-actions';
|
|
@@ -32,6 +33,16 @@ function getMissingRequiredFields(checkout) {
|
|
|
32
33
|
export default function UnconfirmedCheckout({ checkout }) {
|
|
33
34
|
const queryClient = useQueryClient();
|
|
34
35
|
const missingFields = getMissingRequiredFields(checkout);
|
|
36
|
+
// Track selected product for confirm call and CUSTOM price handling.
|
|
37
|
+
// Setter intentionally omitted - single product only for now (multi-product selection coming later)
|
|
38
|
+
const [selectedProductId] = useState(checkout.products?.[0]?.id ?? null);
|
|
39
|
+
// For CUSTOM price types, track the user-entered amount
|
|
40
|
+
const [customAmount, setCustomAmount] = useState('');
|
|
41
|
+
const [customAmountError, setCustomAmountError] = useState(null);
|
|
42
|
+
// Get the selected product and check if it has a CUSTOM price
|
|
43
|
+
const selectedProduct = checkout.products?.find((p) => p.id === selectedProductId);
|
|
44
|
+
const selectedPrice = selectedProduct?.prices?.[0];
|
|
45
|
+
const isCustomPrice = selectedPrice?.amountType === 'CUSTOM';
|
|
35
46
|
// Build dynamic schema based on missing required fields
|
|
36
47
|
const schemaShape = {};
|
|
37
48
|
for (const field of missingFields) {
|
|
@@ -54,9 +65,28 @@ export default function UnconfirmedCheckout({ checkout }) {
|
|
|
54
65
|
});
|
|
55
66
|
const confirmMutation = useMutation({
|
|
56
67
|
mutationFn: async (data) => {
|
|
68
|
+
// For product checkouts, include the selected product
|
|
69
|
+
const productId = selectedProductId ?? checkout.products?.[0]?.id;
|
|
70
|
+
// Build the products payload
|
|
71
|
+
let productsPayload;
|
|
72
|
+
if (checkout.type === 'PRODUCTS' && productId) {
|
|
73
|
+
const product = { productId };
|
|
74
|
+
// If CUSTOM price, include the user-entered amount
|
|
75
|
+
// USD: convert dollars to cents (multiply by 100, with EPSILON for float precision)
|
|
76
|
+
// SAT: use directly (amounts are in sats)
|
|
77
|
+
if (isCustomPrice && customAmount) {
|
|
78
|
+
const parsedAmount = Number.parseFloat(customAmount);
|
|
79
|
+
const amountInSmallestUnit = checkout.currency === 'USD'
|
|
80
|
+
? Math.round(parsedAmount * 100 + Number.EPSILON)
|
|
81
|
+
: Math.round(parsedAmount);
|
|
82
|
+
product.priceAmount = amountInSmallestUnit;
|
|
83
|
+
}
|
|
84
|
+
productsPayload = [product];
|
|
85
|
+
}
|
|
57
86
|
return await clientConfirmCheckout({
|
|
58
87
|
checkoutId: checkout.id,
|
|
59
88
|
customer: data,
|
|
89
|
+
...(productsPayload ? { products: productsPayload } : {}),
|
|
60
90
|
});
|
|
61
91
|
},
|
|
62
92
|
onSuccess: () => {
|
|
@@ -69,6 +99,18 @@ export default function UnconfirmedCheckout({ checkout }) {
|
|
|
69
99
|
},
|
|
70
100
|
});
|
|
71
101
|
const onSubmit = (data) => {
|
|
102
|
+
// Validate custom amount if required
|
|
103
|
+
if (isCustomPrice) {
|
|
104
|
+
const amount = Number.parseFloat(customAmount);
|
|
105
|
+
const minAmount = checkout.currency === 'SAT' ? 1 : 0.01;
|
|
106
|
+
if (!customAmount || Number.isNaN(amount) || amount < minAmount) {
|
|
107
|
+
setCustomAmountError(checkout.currency === 'SAT'
|
|
108
|
+
? 'Please enter at least 1 sat'
|
|
109
|
+
: 'Please enter a valid amount');
|
|
110
|
+
return;
|
|
111
|
+
}
|
|
112
|
+
setCustomAmountError(null);
|
|
113
|
+
}
|
|
72
114
|
confirmMutation.mutate(data);
|
|
73
115
|
};
|
|
74
116
|
const formatCurrency = (amount, currency) => {
|
|
@@ -77,6 +119,9 @@ export default function UnconfirmedCheckout({ checkout }) {
|
|
|
77
119
|
currency,
|
|
78
120
|
}).format(amount / 100);
|
|
79
121
|
};
|
|
80
|
-
return (_jsxs(_Fragment, { children: [_jsxs("div", { className: "text-center mb-6", children: [checkout.type === 'PRODUCTS' && checkout.products && (_jsx("div", { className: "space-y-2", children: checkout.products.map((product) => (_jsxs("div", { className: "text-left", children: [_jsx("h3", { className: "font-medium text-white", children: product.name }), product.description && _jsx("p", { className: "text-sm text-gray-400", children: product.description }), product.prices
|
|
122
|
+
return (_jsxs(_Fragment, { children: [_jsxs("div", { className: "text-center mb-6", children: [checkout.type === 'PRODUCTS' && checkout.products && (_jsx("div", { className: "space-y-2", children: checkout.products.map((product) => (_jsxs("div", { className: "text-left", children: [_jsx("h3", { className: "font-medium text-white", children: product.name }), product.description && _jsx("p", { className: "text-sm text-gray-400", children: product.description }), product.prices?.[0] && (_jsxs("div", { className: "text-sm text-gray-300", children: [product.prices[0].amountType === 'FIXED' && product.prices[0].priceAmount && (_jsx("span", { children: formatCurrency(product.prices[0].priceAmount, checkout.currency) })), product.prices[0].amountType === 'CUSTOM' && (_jsx("span", { className: "text-gray-400", children: "Pay what you want" })), product.recurringInterval && (_jsxs("span", { className: "text-gray-400", children: ["/", product.recurringInterval.toLowerCase()] }))] }))] }, product.id))) })), checkout.type === 'AMOUNT' && checkout.providedAmount && (_jsx("div", { className: "text-sm font-medium text-white" })), checkout.type === 'TOP_UP' && _jsx("div", { className: "text-lg text-white", children: "Account Top-up" })] }), isCustomPrice && (_jsxs("div", { className: "mb-4", children: [_jsxs("label", { htmlFor: "customAmount", className: "block text-sm font-medium text-gray-300 mb-2", children: ["Enter Amount (", checkout.currency, ")"] }), _jsxs("div", { className: "relative", children: [checkout.currency === 'USD' && (_jsx("span", { className: "absolute left-3 top-1/2 -translate-y-1/2 text-gray-400", children: "$" })), _jsx(Input, { id: "customAmount", type: "number", min: checkout.currency === 'SAT' ? '1' : '0.01', step: checkout.currency === 'SAT' ? '1' : '0.01', value: customAmount, onChange: (e) => {
|
|
123
|
+
setCustomAmount(e.target.value);
|
|
124
|
+
setCustomAmountError(null);
|
|
125
|
+
}, placeholder: checkout.currency === 'SAT' ? '1000' : '0.00', className: `bg-gray-700 border-gray-600 focus:ring-purple-500 focus:border-purple-500 text-white placeholder-gray-400 ${checkout.currency === 'USD' ? 'pl-8' : 'pr-12'}` }), checkout.currency === 'SAT' && (_jsx("span", { className: "absolute right-3 top-1/2 -translate-y-1/2 text-gray-400", children: "sats" }))] }), customAmountError && (_jsx("p", { className: "text-red-400 text-sm mt-1", children: customAmountError }))] })), _jsx(Form, { ...form, children: _jsxs("form", { onSubmit: form.handleSubmit(onSubmit), className: "space-y-4", children: [missingFields.map((field) => (_jsx(FormField, { control: form.control, name: field, render: ({ field: formField }) => (_jsxs(FormItem, { children: [_jsxs(FormLabel, { className: "text-gray-300", children: [fieldToLabel(field), " *"] }), _jsx(FormControl, { children: _jsx(Input, { ...formField, type: field === 'email' ? 'email' : 'text', placeholder: `Enter your ${fieldToLabel(field).toLowerCase()}`, className: "bg-gray-700 border-gray-600 focus:ring-purple-500 focus:border-purple-500 text-white placeholder-gray-400" }) }), _jsx(FormMessage, {})] })) }, field))), form.formState.errors.root && (_jsxs("div", { className: "text-red-400 text-sm", children: ["Error: ", form.formState.errors.root.message] })), _jsx(Button, { type: "submit", disabled: form.formState.isSubmitting || confirmMutation.isPending, className: "w-full bg-white hover:bg-gray-100 text-black font-medium py-3 px-4 rounded-lg transition-colors border border-gray-200", children: form.formState.isSubmitting || confirmMutation.isPending ? (_jsxs("div", { className: "flex items-center justify-center", children: [_jsx("div", { className: "animate-spin rounded-full h-4 w-4 border-b-2 border-white mr-2" }), "Generating invoice..."] })) : ('Proceed to Payment') })] }) })] }));
|
|
81
126
|
}
|
|
82
127
|
//# sourceMappingURL=UnconfirmedCheckout.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"UnconfirmedCheckout.js","sourceRoot":"","sources":["../../../src/components/checkout/UnconfirmedCheckout.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAA;AAErD,OAAO,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAA;AACnE,OAAO,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAA;AACzC,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AACvB,OAAO,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAA;AAC5D,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAA;AACrC,OAAO,EACL,IAAI,EACJ,WAAW,EACX,SAAS,EACT,QAAQ,EACR,SAAS,EACT,WAAW,GACZ,MAAM,YAAY,CAAA;AACnB,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAA;AAQnC;;;GAGG;AACH,SAAS,YAAY,CAAC,KAAa;IACjC,OAAO,KAAK;SACT,OAAO,CAAC,UAAU,EAAE,KAAK,CAAC;SAC1B,OAAO,CAAC,IAAI,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,WAAW,EAAE,CAAC;SACzC,IAAI,EAAE,CAAA;AACX,CAAC;AAED;;;GAGG;AACH,SAAS,wBAAwB,CAAC,QAAiC;IACjE,IAAI,CAAC,QAAQ,CAAC,mBAAmB;QAAE,OAAO,EAAE,CAAA;IAE5C,OAAO,QAAQ,CAAC,mBAAmB,CAAC,MAAM,CAAC,CAAC,KAAa,EAAE,EAAE;QAC3D,MAAM,KAAK,GAAG,QAAQ,CAAC,QAAQ,EAAE,CAAC,KAAK,CAAC,CAAA;QACxC,OAAO,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,EAAE,CAAA;IAC9D,CAAC,CAAC,CAAA;AACJ,CAAC;AAED,MAAM,CAAC,OAAO,UAAU,mBAAmB,CAAC,EAAE,QAAQ,EAA4B;IAChF,MAAM,WAAW,GAAG,cAAc,EAAE,CAAA;IACpC,MAAM,aAAa,GAAG,wBAAwB,CAAC,QAAQ,CAAC,CAAA;IAExD,wDAAwD;IACxD,MAAM,WAAW,GAAiC,EAAE,CAAA;IACpD,KAAK,MAAM,KAAK,IAAI,aAAa,EAAE,CAAC;QAClC,IAAI,KAAK,KAAK,OAAO,EAAE,CAAC;YACtB,WAAW,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,KAAK,CAAC,oCAAoC,CAAC,CAAA;QAC7E,CAAC;aAAM,CAAC;YACN,WAAW,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,YAAY,CAAC,KAAK,CAAC,cAAc,CAAC,CAAA;QAC9E,CAAC;IACH,CAAC;IACD,MAAM,kBAAkB,GAAG,CAAC,CAAC,MAAM,CAAC,WAAW,CAAC,CAAA;IAGhD,mDAAmD;IACnD,MAAM,aAAa,GAA2B,EAAE,CAAA;IAChD,KAAK,MAAM,KAAK,IAAI,aAAa,EAAE,CAAC;QAClC,aAAa,CAAC,KAAK,CAAC,GAAG,EAAE,CAAA;IAC3B,CAAC;IAED,MAAM,IAAI,GAAG,OAAO,CAAmB;QACrC,QAAQ,EAAE,WAAW,CAAC,kBAAkB,CAAC;QACzC,aAAa;KACd,CAAC,CAAA;IAEF,MAAM,eAAe,GAAG,WAAW,CAAC;QAClC,UAAU,EAAE,KAAK,EAAE,IAAsB,EAAE,EAAE;YAC3C,OAAO,MAAM,qBAAqB,CAAC;gBACjC,UAAU,EAAE,QAAQ,CAAC,EAAE;gBACvB,QAAQ,EAAE,IAAI;
|
|
1
|
+
{"version":3,"file":"UnconfirmedCheckout.js","sourceRoot":"","sources":["../../../src/components/checkout/UnconfirmedCheckout.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAA;AAErD,OAAO,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAA;AACnE,OAAO,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAA;AAChC,OAAO,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAA;AACzC,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AACvB,OAAO,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAA;AAC5D,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAA;AACrC,OAAO,EACL,IAAI,EACJ,WAAW,EACX,SAAS,EACT,QAAQ,EACR,SAAS,EACT,WAAW,GACZ,MAAM,YAAY,CAAA;AACnB,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAA;AAQnC;;;GAGG;AACH,SAAS,YAAY,CAAC,KAAa;IACjC,OAAO,KAAK;SACT,OAAO,CAAC,UAAU,EAAE,KAAK,CAAC;SAC1B,OAAO,CAAC,IAAI,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,WAAW,EAAE,CAAC;SACzC,IAAI,EAAE,CAAA;AACX,CAAC;AAED;;;GAGG;AACH,SAAS,wBAAwB,CAAC,QAAiC;IACjE,IAAI,CAAC,QAAQ,CAAC,mBAAmB;QAAE,OAAO,EAAE,CAAA;IAE5C,OAAO,QAAQ,CAAC,mBAAmB,CAAC,MAAM,CAAC,CAAC,KAAa,EAAE,EAAE;QAC3D,MAAM,KAAK,GAAG,QAAQ,CAAC,QAAQ,EAAE,CAAC,KAAK,CAAC,CAAA;QACxC,OAAO,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,EAAE,CAAA;IAC9D,CAAC,CAAC,CAAA;AACJ,CAAC;AAED,MAAM,CAAC,OAAO,UAAU,mBAAmB,CAAC,EAAE,QAAQ,EAA4B;IAChF,MAAM,WAAW,GAAG,cAAc,EAAE,CAAA;IACpC,MAAM,aAAa,GAAG,wBAAwB,CAAC,QAAQ,CAAC,CAAA;IAExD,qEAAqE;IACrE,oGAAoG;IACpG,MAAM,CAAC,iBAAiB,CAAC,GAAG,QAAQ,CAClC,QAAQ,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,IAAI,IAAI,CACnC,CAAA;IAED,wDAAwD;IACxD,MAAM,CAAC,YAAY,EAAE,eAAe,CAAC,GAAG,QAAQ,CAAS,EAAE,CAAC,CAAA;IAC5D,MAAM,CAAC,iBAAiB,EAAE,oBAAoB,CAAC,GAAG,QAAQ,CAAgB,IAAI,CAAC,CAAA;IAE/E,8DAA8D;IAC9D,MAAM,eAAe,GAAG,QAAQ,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,iBAAiB,CAAC,CAAA;IAClF,MAAM,aAAa,GAAG,eAAe,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,CAAA;IAClD,MAAM,aAAa,GAAG,aAAa,EAAE,UAAU,KAAK,QAAQ,CAAA;IAE5D,wDAAwD;IACxD,MAAM,WAAW,GAAiC,EAAE,CAAA;IACpD,KAAK,MAAM,KAAK,IAAI,aAAa,EAAE,CAAC;QAClC,IAAI,KAAK,KAAK,OAAO,EAAE,CAAC;YACtB,WAAW,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,KAAK,CAAC,oCAAoC,CAAC,CAAA;QAC7E,CAAC;aAAM,CAAC;YACN,WAAW,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,YAAY,CAAC,KAAK,CAAC,cAAc,CAAC,CAAA;QAC9E,CAAC;IACH,CAAC;IACD,MAAM,kBAAkB,GAAG,CAAC,CAAC,MAAM,CAAC,WAAW,CAAC,CAAA;IAGhD,mDAAmD;IACnD,MAAM,aAAa,GAA2B,EAAE,CAAA;IAChD,KAAK,MAAM,KAAK,IAAI,aAAa,EAAE,CAAC;QAClC,aAAa,CAAC,KAAK,CAAC,GAAG,EAAE,CAAA;IAC3B,CAAC;IAED,MAAM,IAAI,GAAG,OAAO,CAAmB;QACrC,QAAQ,EAAE,WAAW,CAAC,kBAAkB,CAAC;QACzC,aAAa;KACd,CAAC,CAAA;IAEF,MAAM,eAAe,GAAG,WAAW,CAAC;QAClC,UAAU,EAAE,KAAK,EAAE,IAAsB,EAAE,EAAE;YAC3C,sDAAsD;YACtD,MAAM,SAAS,GAAG,iBAAiB,IAAI,QAAQ,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAA;YAEjE,6BAA6B;YAC7B,IAAI,eAA0E,CAAA;YAC9E,IAAI,QAAQ,CAAC,IAAI,KAAK,UAAU,IAAI,SAAS,EAAE,CAAC;gBAC9C,MAAM,OAAO,GAAgD,EAAE,SAAS,EAAE,CAAA;gBAE1E,mDAAmD;gBACnD,oFAAoF;gBACpF,0CAA0C;gBAC1C,IAAI,aAAa,IAAI,YAAY,EAAE,CAAC;oBAClC,MAAM,YAAY,GAAG,MAAM,CAAC,UAAU,CAAC,YAAY,CAAC,CAAA;oBACpD,MAAM,oBAAoB,GAAG,QAAQ,CAAC,QAAQ,KAAK,KAAK;wBACtD,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,YAAY,GAAG,GAAG,GAAG,MAAM,CAAC,OAAO,CAAC;wBACjD,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,CAAA;oBAC5B,OAAO,CAAC,WAAW,GAAG,oBAAoB,CAAA;gBAC5C,CAAC;gBAED,eAAe,GAAG,CAAC,OAAO,CAAC,CAAA;YAC7B,CAAC;YAED,OAAO,MAAM,qBAAqB,CAAC;gBACjC,UAAU,EAAE,QAAQ,CAAC,EAAE;gBACvB,QAAQ,EAAE,IAAI;gBACd,GAAG,CAAC,eAAe,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,eAAe,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;aAC1D,CAAC,CAAA;QACJ,CAAC;QACD,SAAS,EAAE,GAAG,EAAE;YACd,WAAW,CAAC,iBAAiB,CAAC,EAAE,QAAQ,EAAE,CAAC,cAAc,EAAE,QAAQ,CAAC,EAAE,CAAC,EAAE,CAAC,CAAA;QAC5E,CAAC;QACD,OAAO,EAAE,CAAC,KAAK,EAAE,EAAE;YACjB,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE;gBACpB,OAAO,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,sBAAsB;aACzE,CAAC,CAAA;QACJ,CAAC;KACF,CAAC,CAAA;IAEF,MAAM,QAAQ,GAAG,CAAC,IAAsB,EAAE,EAAE;QAC1C,qCAAqC;QACrC,IAAI,aAAa,EAAE,CAAC;YAClB,MAAM,MAAM,GAAG,MAAM,CAAC,UAAU,CAAC,YAAY,CAAC,CAAA;YAC9C,MAAM,SAAS,GAAG,QAAQ,CAAC,QAAQ,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAA;YACxD,IAAI,CAAC,YAAY,IAAI,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,MAAM,GAAG,SAAS,EAAE,CAAC;gBAChE,oBAAoB,CAAC,QAAQ,CAAC,QAAQ,KAAK,KAAK;oBAC9C,CAAC,CAAC,6BAA6B;oBAC/B,CAAC,CAAC,6BAA6B,CAAC,CAAA;gBAClC,OAAM;YACR,CAAC;YACD,oBAAoB,CAAC,IAAI,CAAC,CAAA;QAC5B,CAAC;QAED,eAAe,CAAC,MAAM,CAAC,IAAI,CAAC,CAAA;IAC9B,CAAC,CAAA;IAED,MAAM,cAAc,GAAG,CAAC,MAAc,EAAE,QAAgB,EAAE,EAAE;QAC1D,OAAO,IAAI,IAAI,CAAC,YAAY,CAAC,OAAO,EAAE;YACpC,KAAK,EAAE,UAAU;YACjB,QAAQ;SACT,CAAC,CAAC,MAAM,CAAC,MAAM,GAAG,GAAG,CAAC,CAAA;IACzB,CAAC,CAAA;IAED,OAAO,CACL,8BACE,eAAK,SAAS,EAAC,kBAAkB,aAC9B,QAAQ,CAAC,IAAI,KAAK,UAAU,IAAI,QAAQ,CAAC,QAAQ,IAAI,CACpD,cAAK,SAAS,EAAC,WAAW,YACvB,QAAQ,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,CAClC,eAAsB,SAAS,EAAC,WAAW,aACzC,aAAI,SAAS,EAAC,wBAAwB,YAAE,OAAO,CAAC,IAAI,GAAM,EACzD,OAAO,CAAC,WAAW,IAAI,YAAG,SAAS,EAAC,uBAAuB,YAAE,OAAO,CAAC,WAAW,GAAK,EACrF,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,IAAI,CACtB,eAAK,SAAS,EAAC,uBAAuB,aACnC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,UAAU,KAAK,OAAO,IAAI,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,IAAI,CAC5E,yBAAO,cAAc,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,QAAQ,CAAC,QAAQ,CAAC,GAAQ,CAChF,EACA,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,UAAU,KAAK,QAAQ,IAAI,CAC5C,eAAM,SAAS,EAAC,eAAe,kCAAyB,CACzD,EACA,OAAO,CAAC,iBAAiB,IAAI,CAC5B,gBAAM,SAAS,EAAC,eAAe,kBAC3B,OAAO,CAAC,iBAAiB,CAAC,WAAW,EAAE,IACpC,CACR,IACG,CACP,KAjBO,OAAO,CAAC,EAAE,CAkBd,CACP,CAAC,GACE,CACP,EACA,QAAQ,CAAC,IAAI,KAAK,QAAQ,IAAI,QAAQ,CAAC,cAAc,IAAI,CACxD,cAAK,SAAS,EAAC,gCAAgC,GAAG,CACnD,EACA,QAAQ,CAAC,IAAI,KAAK,QAAQ,IAAI,cAAK,SAAS,EAAC,oBAAoB,+BAAqB,IACnF,EAGL,aAAa,IAAI,CAChB,eAAK,SAAS,EAAC,MAAM,aACnB,iBAAO,OAAO,EAAC,cAAc,EAAC,SAAS,EAAC,8CAA8C,+BACrE,QAAQ,CAAC,QAAQ,SAC1B,EACR,eAAK,SAAS,EAAC,UAAU,aACtB,QAAQ,CAAC,QAAQ,KAAK,KAAK,IAAI,CAC9B,eAAM,SAAS,EAAC,wDAAwD,kBAAS,CAClF,EACD,KAAC,KAAK,IACJ,EAAE,EAAC,cAAc,EACjB,IAAI,EAAC,QAAQ,EACb,GAAG,EAAE,QAAQ,CAAC,QAAQ,KAAK,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,EAC/C,IAAI,EAAE,QAAQ,CAAC,QAAQ,KAAK,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,EAChD,KAAK,EAAE,YAAY,EACnB,QAAQ,EAAE,CAAC,CAAC,EAAE,EAAE;oCACd,eAAe,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA;oCAC/B,oBAAoB,CAAC,IAAI,CAAC,CAAA;gCAC5B,CAAC,EACD,WAAW,EAAE,QAAQ,CAAC,QAAQ,KAAK,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,EAC1D,SAAS,EAAE,6GAA6G,QAAQ,CAAC,QAAQ,KAAK,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,EAAE,GACxK,EACD,QAAQ,CAAC,QAAQ,KAAK,KAAK,IAAI,CAC9B,eAAM,SAAS,EAAC,yDAAyD,qBAAY,CACtF,IACG,EACL,iBAAiB,IAAI,CACpB,YAAG,SAAS,EAAC,2BAA2B,YAAE,iBAAiB,GAAK,CACjE,IACG,CACP,EAED,KAAC,IAAI,OAAK,IAAI,YACZ,gBAAM,QAAQ,EAAE,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,EAAE,SAAS,EAAC,WAAW,aAC/D,aAAa,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAC5B,KAAC,SAAS,IAER,OAAO,EAAE,IAAI,CAAC,OAAO,EACrB,IAAI,EAAE,KAAK,EACX,MAAM,EAAE,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,EAAE,EAAE,CAAC,CAChC,MAAC,QAAQ,eACP,MAAC,SAAS,IAAC,SAAS,EAAC,eAAe,aAAE,YAAY,CAAC,KAAK,CAAC,UAAe,EACxE,KAAC,WAAW,cACV,KAAC,KAAK,OACA,SAAS,EACb,IAAI,EAAE,KAAK,KAAK,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,EAC1C,WAAW,EAAE,cAAc,YAAY,CAAC,KAAK,CAAC,CAAC,WAAW,EAAE,EAAE,EAC9D,SAAS,EAAC,2GAA2G,GACrH,GACU,EACd,KAAC,WAAW,KAAG,IACN,CACZ,IAhBI,KAAK,CAiBV,CACH,CAAC,EAED,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,IAAI,CAC7B,eAAK,SAAS,EAAC,sBAAsB,wBAAS,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,IAAO,CACxF,EAED,KAAC,MAAM,IACL,IAAI,EAAC,QAAQ,EACb,QAAQ,EAAE,IAAI,CAAC,SAAS,CAAC,YAAY,IAAI,eAAe,CAAC,SAAS,EAClE,SAAS,EAAC,wHAAwH,YAEjI,IAAI,CAAC,SAAS,CAAC,YAAY,IAAI,eAAe,CAAC,SAAS,CAAC,CAAC,CAAC,CAC1D,eAAK,SAAS,EAAC,kCAAkC,aAC/C,cAAK,SAAS,EAAC,gEAAgE,GAAG,6BAE9E,CACP,CAAC,CAAC,CAAC,CACF,oBAAoB,CACrB,GACM,IACJ,GACF,IACN,CACJ,CAAA;AACH,CAAC"}
|
|
@@ -1,3 +1,55 @@
|
|
|
1
|
+
import type { CreateCheckoutParams } from '../actions';
|
|
1
2
|
export declare function handleCreateCheckout(request: Request): Promise<Response>;
|
|
2
3
|
export declare function handleGetCheckout(request: Request): Promise<Response>;
|
|
3
4
|
export declare function handleConfirmCheckout(request: Request): Promise<Response>;
|
|
5
|
+
export interface CreateCheckoutUrlOptions {
|
|
6
|
+
basePath?: string;
|
|
7
|
+
}
|
|
8
|
+
/**
|
|
9
|
+
* Generate a signed checkout URL for URL-based checkout creation.
|
|
10
|
+
* All params are HMAC-signed using MDK_ACCESS_TOKEN to prevent tampering.
|
|
11
|
+
*
|
|
12
|
+
* @example
|
|
13
|
+
* const url = createCheckoutUrl({
|
|
14
|
+
* title: 'Product',
|
|
15
|
+
* description: 'Payment for product',
|
|
16
|
+
* amount: 2999,
|
|
17
|
+
* currency: 'USD',
|
|
18
|
+
* })
|
|
19
|
+
* // Returns: /api/mdk?action=createCheckout&amount=2999&...&signature=abc123
|
|
20
|
+
*/
|
|
21
|
+
export declare function createCheckoutUrl(params: CreateCheckoutParams, options?: CreateCheckoutUrlOptions): string;
|
|
22
|
+
/**
|
|
23
|
+
* Verify the HMAC signature of checkout URL params.
|
|
24
|
+
* Uses constant-time comparison to prevent timing attacks.
|
|
25
|
+
*/
|
|
26
|
+
export declare function verifyCheckoutSignature(params: URLSearchParams, signature: string): boolean;
|
|
27
|
+
/**
|
|
28
|
+
* Parse URL query params into checkout params.
|
|
29
|
+
* Handles JSON parsing for nested objects (metadata, customer, requireCustomerData).
|
|
30
|
+
*/
|
|
31
|
+
export declare function parseCheckoutQueryParams(params: URLSearchParams): Record<string, unknown>;
|
|
32
|
+
/**
|
|
33
|
+
* Validates and sanitizes checkoutPath to prevent open redirect attacks.
|
|
34
|
+
* Returns a safe relative path or the default '/checkout'.
|
|
35
|
+
*
|
|
36
|
+
* Security considerations:
|
|
37
|
+
* - Must start with / (relative path)
|
|
38
|
+
* - Must not contain :// or // (prevents protocol-relative URLs and absolute URLs)
|
|
39
|
+
*/
|
|
40
|
+
export declare function sanitizeCheckoutPath(checkoutPath: string | null): string;
|
|
41
|
+
/**
|
|
42
|
+
* Create a checkout from parsed query params.
|
|
43
|
+
* Validates against the same schema as handleCreateCheckout.
|
|
44
|
+
*/
|
|
45
|
+
export declare function handleCreateCheckoutFromUrl(params: Record<string, unknown>): Promise<{
|
|
46
|
+
error: {
|
|
47
|
+
code: string;
|
|
48
|
+
message: string;
|
|
49
|
+
};
|
|
50
|
+
} | {
|
|
51
|
+
data: {
|
|
52
|
+
id: string;
|
|
53
|
+
checkoutPath: string;
|
|
54
|
+
};
|
|
55
|
+
}>;
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { createHmac, timingSafeEqual } from 'crypto';
|
|
1
2
|
import { z } from 'zod';
|
|
2
3
|
import { confirmCheckout, createCheckout, getCheckout } from '../actions';
|
|
3
4
|
import { validateMetadata } from '@moneydevkit/api-contract';
|
|
@@ -10,10 +11,7 @@ const customerInputSchema = z.object({
|
|
|
10
11
|
email: z.string().email().optional().or(z.literal('')),
|
|
11
12
|
externalId: z.string().optional(),
|
|
12
13
|
}).catchall(z.string());
|
|
13
|
-
const
|
|
14
|
-
title: z.string(),
|
|
15
|
-
description: z.string(),
|
|
16
|
-
amount: z.number(),
|
|
14
|
+
const commonCheckoutFields = {
|
|
17
15
|
currency: z.enum(['USD', 'SAT']).optional(),
|
|
18
16
|
successUrl: z.string().optional(),
|
|
19
17
|
checkoutPath: z.string().optional(),
|
|
@@ -32,10 +30,30 @@ const createCheckoutSchema = z.object({
|
|
|
32
30
|
}),
|
|
33
31
|
customer: customerInputSchema.optional(),
|
|
34
32
|
requireCustomerData: z.array(z.string()).optional(),
|
|
33
|
+
};
|
|
34
|
+
const amountCheckoutSchema = z.object({
|
|
35
|
+
type: z.literal('AMOUNT'),
|
|
36
|
+
amount: z.number(),
|
|
37
|
+
title: z.string().optional(),
|
|
38
|
+
description: z.string().optional(),
|
|
39
|
+
...commonCheckoutFields,
|
|
40
|
+
});
|
|
41
|
+
const productCheckoutSchema = z.object({
|
|
42
|
+
type: z.literal('PRODUCTS'),
|
|
43
|
+
product: z.string(),
|
|
44
|
+
...commonCheckoutFields,
|
|
35
45
|
});
|
|
46
|
+
const createCheckoutSchema = z.discriminatedUnion('type', [
|
|
47
|
+
amountCheckoutSchema,
|
|
48
|
+
productCheckoutSchema,
|
|
49
|
+
]);
|
|
36
50
|
const confirmCheckoutSchema = z.object({
|
|
37
51
|
checkoutId: z.string(),
|
|
38
52
|
customer: customerInputSchema.optional(),
|
|
53
|
+
products: z.array(z.object({
|
|
54
|
+
productId: z.string(),
|
|
55
|
+
priceAmount: z.number().optional(),
|
|
56
|
+
})).max(1).optional(),
|
|
39
57
|
});
|
|
40
58
|
function jsonResponse(status, body) {
|
|
41
59
|
return new Response(JSON.stringify(body), {
|
|
@@ -55,14 +73,12 @@ export async function handleCreateCheckout(request) {
|
|
|
55
73
|
if (!parsed.success) {
|
|
56
74
|
return jsonResponse(400, { error: 'Invalid checkout params', details: parsed.error.issues });
|
|
57
75
|
}
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
catch (error) {
|
|
63
|
-
console.error(error);
|
|
64
|
-
return jsonResponse(500, { error: 'Failed to create checkout' });
|
|
76
|
+
const result = await createCheckout(parsed.data.params);
|
|
77
|
+
if (result.error) {
|
|
78
|
+
const statusCode = result.error.code === 'webhook_unreachable' ? 400 : 500;
|
|
79
|
+
return jsonResponse(statusCode, { error: result.error.message, code: result.error.code });
|
|
65
80
|
}
|
|
81
|
+
return jsonResponse(200, { data: result.data.checkout });
|
|
66
82
|
}
|
|
67
83
|
export async function handleGetCheckout(request) {
|
|
68
84
|
let body;
|
|
@@ -110,4 +126,173 @@ export async function handleConfirmCheckout(request) {
|
|
|
110
126
|
return jsonResponse(500, { error: 'Failed to confirm checkout' });
|
|
111
127
|
}
|
|
112
128
|
}
|
|
129
|
+
/**
|
|
130
|
+
* Generate a signed checkout URL for URL-based checkout creation.
|
|
131
|
+
* All params are HMAC-signed using MDK_ACCESS_TOKEN to prevent tampering.
|
|
132
|
+
*
|
|
133
|
+
* @example
|
|
134
|
+
* const url = createCheckoutUrl({
|
|
135
|
+
* title: 'Product',
|
|
136
|
+
* description: 'Payment for product',
|
|
137
|
+
* amount: 2999,
|
|
138
|
+
* currency: 'USD',
|
|
139
|
+
* })
|
|
140
|
+
* // Returns: /api/mdk?action=createCheckout&amount=2999&...&signature=abc123
|
|
141
|
+
*/
|
|
142
|
+
export function createCheckoutUrl(params, options) {
|
|
143
|
+
const basePath = options?.basePath ?? '/api/mdk';
|
|
144
|
+
const accessToken = process.env.MDK_ACCESS_TOKEN;
|
|
145
|
+
if (!accessToken) {
|
|
146
|
+
throw new Error('MDK_ACCESS_TOKEN is required for creating checkout URLs');
|
|
147
|
+
}
|
|
148
|
+
// Build URL params
|
|
149
|
+
const urlParams = new URLSearchParams();
|
|
150
|
+
urlParams.set('action', 'createCheckout');
|
|
151
|
+
// Add all params, JSON-stringify objects
|
|
152
|
+
for (const [key, value] of Object.entries(params)) {
|
|
153
|
+
if (value === undefined)
|
|
154
|
+
continue;
|
|
155
|
+
if (typeof value === 'object' && value !== null) {
|
|
156
|
+
urlParams.set(key, JSON.stringify(value));
|
|
157
|
+
}
|
|
158
|
+
else {
|
|
159
|
+
urlParams.set(key, String(value));
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
// Sort params alphabetically for consistent signature
|
|
163
|
+
urlParams.sort();
|
|
164
|
+
const canonicalString = urlParams.toString();
|
|
165
|
+
// Compute HMAC-SHA256 signature
|
|
166
|
+
const signature = createHmac('sha256', accessToken)
|
|
167
|
+
.update(canonicalString)
|
|
168
|
+
.digest('hex');
|
|
169
|
+
urlParams.set('signature', signature);
|
|
170
|
+
return `${basePath}?${urlParams.toString()}`;
|
|
171
|
+
}
|
|
172
|
+
/**
|
|
173
|
+
* Verify the HMAC signature of checkout URL params.
|
|
174
|
+
* Uses constant-time comparison to prevent timing attacks.
|
|
175
|
+
*/
|
|
176
|
+
export function verifyCheckoutSignature(params, signature) {
|
|
177
|
+
const accessToken = process.env.MDK_ACCESS_TOKEN;
|
|
178
|
+
if (!accessToken)
|
|
179
|
+
return false;
|
|
180
|
+
// Clone params and remove signature for verification
|
|
181
|
+
const paramsToVerify = new URLSearchParams(params);
|
|
182
|
+
paramsToVerify.delete('signature');
|
|
183
|
+
paramsToVerify.sort();
|
|
184
|
+
const canonicalString = paramsToVerify.toString();
|
|
185
|
+
const expectedSignature = createHmac('sha256', accessToken)
|
|
186
|
+
.update(canonicalString)
|
|
187
|
+
.digest('hex');
|
|
188
|
+
// Constant-time comparison to prevent timing attacks
|
|
189
|
+
try {
|
|
190
|
+
const sigBuffer = Buffer.from(signature, 'hex');
|
|
191
|
+
const expectedBuffer = Buffer.from(expectedSignature, 'hex');
|
|
192
|
+
if (sigBuffer.length !== expectedBuffer.length) {
|
|
193
|
+
return false;
|
|
194
|
+
}
|
|
195
|
+
return timingSafeEqual(sigBuffer, expectedBuffer);
|
|
196
|
+
}
|
|
197
|
+
catch {
|
|
198
|
+
return false;
|
|
199
|
+
}
|
|
200
|
+
}
|
|
201
|
+
/**
|
|
202
|
+
* Parse URL query params into checkout params.
|
|
203
|
+
* Handles JSON parsing for nested objects (metadata, customer, requireCustomerData).
|
|
204
|
+
*/
|
|
205
|
+
export function parseCheckoutQueryParams(params) {
|
|
206
|
+
const raw = {};
|
|
207
|
+
for (const [key, value] of params) {
|
|
208
|
+
// Skip action and signature - they're not checkout params
|
|
209
|
+
if (key === 'action' || key === 'signature')
|
|
210
|
+
continue;
|
|
211
|
+
// JSON parse for objects/arrays
|
|
212
|
+
if (key === 'metadata' || key === 'customer' || key === 'requireCustomerData' || key === 'products') {
|
|
213
|
+
try {
|
|
214
|
+
raw[key] = JSON.parse(value);
|
|
215
|
+
}
|
|
216
|
+
catch {
|
|
217
|
+
// If JSON parsing fails, keep as string
|
|
218
|
+
raw[key] = value;
|
|
219
|
+
}
|
|
220
|
+
}
|
|
221
|
+
else if (key === 'amount') {
|
|
222
|
+
// Parse amount as number
|
|
223
|
+
raw[key] = Number(value);
|
|
224
|
+
}
|
|
225
|
+
else {
|
|
226
|
+
raw[key] = value;
|
|
227
|
+
}
|
|
228
|
+
}
|
|
229
|
+
return raw;
|
|
230
|
+
}
|
|
231
|
+
/**
|
|
232
|
+
* Validates and sanitizes checkoutPath to prevent open redirect attacks.
|
|
233
|
+
* Returns a safe relative path or the default '/checkout'.
|
|
234
|
+
*
|
|
235
|
+
* Security considerations:
|
|
236
|
+
* - Must start with / (relative path)
|
|
237
|
+
* - Must not contain :// or // (prevents protocol-relative URLs and absolute URLs)
|
|
238
|
+
*/
|
|
239
|
+
export function sanitizeCheckoutPath(checkoutPath) {
|
|
240
|
+
const defaultPath = '/checkout';
|
|
241
|
+
if (!checkoutPath) {
|
|
242
|
+
return defaultPath;
|
|
243
|
+
}
|
|
244
|
+
// Must start with / (relative path)
|
|
245
|
+
if (!checkoutPath.startsWith('/')) {
|
|
246
|
+
return defaultPath;
|
|
247
|
+
}
|
|
248
|
+
// Must not contain :// or // (prevents protocol-relative URLs and absolute URLs)
|
|
249
|
+
if (checkoutPath.includes('://') || checkoutPath.includes('//')) {
|
|
250
|
+
return defaultPath;
|
|
251
|
+
}
|
|
252
|
+
// Strip query string and hash - they would break URL construction when appending /{id}
|
|
253
|
+
// e.g., /checkout?foo=bar + /abc123 would become /checkout?foo=bar/abc123 (broken)
|
|
254
|
+
const queryIndex = checkoutPath.indexOf('?');
|
|
255
|
+
const hashIndex = checkoutPath.indexOf('#');
|
|
256
|
+
let endIndex = checkoutPath.length;
|
|
257
|
+
if (queryIndex !== -1)
|
|
258
|
+
endIndex = Math.min(endIndex, queryIndex);
|
|
259
|
+
if (hashIndex !== -1)
|
|
260
|
+
endIndex = Math.min(endIndex, hashIndex);
|
|
261
|
+
return checkoutPath.slice(0, endIndex);
|
|
262
|
+
}
|
|
263
|
+
/**
|
|
264
|
+
* Create a checkout from parsed query params.
|
|
265
|
+
* Validates against the same schema as handleCreateCheckout.
|
|
266
|
+
*/
|
|
267
|
+
export async function handleCreateCheckoutFromUrl(params) {
|
|
268
|
+
// Infer type if not provided - the schema requires it for discriminated union
|
|
269
|
+
if (!params.type) {
|
|
270
|
+
params.type = params.products ? 'PRODUCTS' : 'AMOUNT';
|
|
271
|
+
}
|
|
272
|
+
const parsed = createCheckoutSchema.safeParse(params);
|
|
273
|
+
if (!parsed.success) {
|
|
274
|
+
const firstError = parsed.error.issues[0];
|
|
275
|
+
return {
|
|
276
|
+
error: {
|
|
277
|
+
code: 'validation_error',
|
|
278
|
+
message: firstError?.message ?? 'Invalid checkout parameters',
|
|
279
|
+
},
|
|
280
|
+
};
|
|
281
|
+
}
|
|
282
|
+
const result = await createCheckout(parsed.data);
|
|
283
|
+
if (result.error) {
|
|
284
|
+
return {
|
|
285
|
+
error: {
|
|
286
|
+
code: result.error.code,
|
|
287
|
+
message: result.error.message,
|
|
288
|
+
},
|
|
289
|
+
};
|
|
290
|
+
}
|
|
291
|
+
return {
|
|
292
|
+
data: {
|
|
293
|
+
id: result.data.checkout.id,
|
|
294
|
+
checkoutPath: parsed.data.checkoutPath ?? '/checkout',
|
|
295
|
+
},
|
|
296
|
+
};
|
|
297
|
+
}
|
|
113
298
|
//# sourceMappingURL=checkout.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"checkout.js","sourceRoot":"","sources":["../../src/handlers/checkout.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAEvB,OAAO,EAAE,eAAe,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,YAAY,CAAA;
|
|
1
|
+
{"version":3,"file":"checkout.js","sourceRoot":"","sources":["../../src/handlers/checkout.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare function handleListProducts(_request: Request): Promise<Response>;
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { listProducts } from '../actions';
|
|
2
|
+
function jsonResponse(status, body) {
|
|
3
|
+
return new Response(JSON.stringify(body), {
|
|
4
|
+
status,
|
|
5
|
+
headers: { 'content-type': 'application/json' },
|
|
6
|
+
});
|
|
7
|
+
}
|
|
8
|
+
export async function handleListProducts(_request) {
|
|
9
|
+
try {
|
|
10
|
+
const products = await listProducts();
|
|
11
|
+
return jsonResponse(200, { data: { products } });
|
|
12
|
+
}
|
|
13
|
+
catch (error) {
|
|
14
|
+
console.error(error);
|
|
15
|
+
return jsonResponse(500, { error: 'Failed to list products' });
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
//# sourceMappingURL=products.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"products.js","sourceRoot":"","sources":["../../src/handlers/products.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAA;AAEzC,SAAS,YAAY,CAAC,MAAc,EAAE,IAA6B;IACjE,OAAO,IAAI,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE;QACxC,MAAM;QACN,OAAO,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE;KAChD,CAAC,CAAA;AACJ,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,kBAAkB,CAAC,QAAiB;IACxD,IAAI,CAAC;QACH,MAAM,QAAQ,GAAG,MAAM,YAAY,EAAE,CAAA;QACrC,OAAO,YAAY,CAAC,GAAG,EAAE,EAAE,IAAI,EAAE,EAAE,QAAQ,EAAE,EAAE,CAAC,CAAA;IAClD,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,CAAA;QACpB,OAAO,YAAY,CAAC,GAAG,EAAE,EAAE,KAAK,EAAE,yBAAyB,EAAE,CAAC,CAAA;IAChE,CAAC;AACH,CAAC"}
|
|
@@ -1,5 +1,38 @@
|
|
|
1
1
|
import type { CreateCheckoutParams } from '../actions';
|
|
2
|
+
import type { MdkError, Result } from '../types';
|
|
3
|
+
/**
|
|
4
|
+
* Hook for creating checkout sessions.
|
|
5
|
+
*
|
|
6
|
+
* @example
|
|
7
|
+
* ```tsx
|
|
8
|
+
* const { createCheckout } = useCheckout()
|
|
9
|
+
*
|
|
10
|
+
* // Amount-based checkout (donations, tips)
|
|
11
|
+
* await createCheckout({ type: 'AMOUNT', amount: 1000, title: 'Donation' })
|
|
12
|
+
*
|
|
13
|
+
* // Product checkout
|
|
14
|
+
* await createCheckout({ type: 'PRODUCTS', product: 'prod_123' })
|
|
15
|
+
*
|
|
16
|
+
* // With useProducts hook
|
|
17
|
+
* const { products } = useProducts()
|
|
18
|
+
* await createCheckout({ type: 'PRODUCTS', product: products[0].id })
|
|
19
|
+
* ```
|
|
20
|
+
*/
|
|
2
21
|
export declare function useCheckout(): {
|
|
22
|
+
/** Create a checkout and return the URL. Does not redirect automatically. */
|
|
23
|
+
createCheckout: (params: CreateCheckoutParams) => Promise<Result<{
|
|
24
|
+
checkoutUrl: string;
|
|
25
|
+
}>>;
|
|
26
|
+
/**
|
|
27
|
+
* @deprecated Use `createCheckout()` instead for better error handling.
|
|
28
|
+
*/
|
|
3
29
|
navigate: (params: CreateCheckoutParams) => Promise<void>;
|
|
30
|
+
/** Whether a checkout operation is in progress */
|
|
31
|
+
isLoading: boolean;
|
|
32
|
+
/**
|
|
33
|
+
* @deprecated Use `isLoading` instead.
|
|
34
|
+
*/
|
|
4
35
|
isNavigating: boolean;
|
|
36
|
+
/** The last error that occurred, if any */
|
|
37
|
+
error: MdkError | null;
|
|
5
38
|
};
|
|
@@ -1,26 +1,68 @@
|
|
|
1
1
|
import { useCallback, useState } from 'react';
|
|
2
2
|
import { clientCreateCheckout } from '../client-actions';
|
|
3
3
|
import { log } from '../logging';
|
|
4
|
+
import { failure, success } from '../types';
|
|
5
|
+
/**
|
|
6
|
+
* Hook for creating checkout sessions.
|
|
7
|
+
*
|
|
8
|
+
* @example
|
|
9
|
+
* ```tsx
|
|
10
|
+
* const { createCheckout } = useCheckout()
|
|
11
|
+
*
|
|
12
|
+
* // Amount-based checkout (donations, tips)
|
|
13
|
+
* await createCheckout({ type: 'AMOUNT', amount: 1000, title: 'Donation' })
|
|
14
|
+
*
|
|
15
|
+
* // Product checkout
|
|
16
|
+
* await createCheckout({ type: 'PRODUCTS', product: 'prod_123' })
|
|
17
|
+
*
|
|
18
|
+
* // With useProducts hook
|
|
19
|
+
* const { products } = useProducts()
|
|
20
|
+
* await createCheckout({ type: 'PRODUCTS', product: products[0].id })
|
|
21
|
+
* ```
|
|
22
|
+
*/
|
|
4
23
|
export function useCheckout() {
|
|
5
|
-
const [
|
|
6
|
-
const
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
catch (error) {
|
|
16
|
-
setIsNavigating(false);
|
|
17
|
-
const err = error instanceof Error ? error : new Error('Checkout creation failed');
|
|
18
|
-
log('Checkout navigation error:', err);
|
|
24
|
+
const [isLoading, setIsLoading] = useState(false);
|
|
25
|
+
const [error, setError] = useState(null);
|
|
26
|
+
const createCheckout = useCallback(async (params) => {
|
|
27
|
+
setIsLoading(true);
|
|
28
|
+
setError(null);
|
|
29
|
+
const result = await clientCreateCheckout(params);
|
|
30
|
+
setIsLoading(false);
|
|
31
|
+
if (result.error) {
|
|
32
|
+
setError(result.error);
|
|
33
|
+
return failure(result.error);
|
|
19
34
|
}
|
|
35
|
+
const checkoutPath = params.checkoutPath || '/checkout';
|
|
36
|
+
const checkoutUrl = `${checkoutPath}/${result.data.id}`;
|
|
37
|
+
return success({ checkoutUrl });
|
|
20
38
|
}, []);
|
|
39
|
+
/**
|
|
40
|
+
* @deprecated Use `createCheckout()` instead for better error handling.
|
|
41
|
+
* This function auto-redirects on success and silently logs errors.
|
|
42
|
+
*/
|
|
43
|
+
const navigate = useCallback(async (params) => {
|
|
44
|
+
const result = await createCheckout(params);
|
|
45
|
+
if (result.error) {
|
|
46
|
+
log('Checkout navigation error:', result.error);
|
|
47
|
+
return;
|
|
48
|
+
}
|
|
49
|
+
window.location.href = result.data.checkoutUrl;
|
|
50
|
+
}, [createCheckout]);
|
|
21
51
|
return {
|
|
52
|
+
/** Create a checkout and return the URL. Does not redirect automatically. */
|
|
53
|
+
createCheckout,
|
|
54
|
+
/**
|
|
55
|
+
* @deprecated Use `createCheckout()` instead for better error handling.
|
|
56
|
+
*/
|
|
22
57
|
navigate,
|
|
23
|
-
|
|
58
|
+
/** Whether a checkout operation is in progress */
|
|
59
|
+
isLoading,
|
|
60
|
+
/**
|
|
61
|
+
* @deprecated Use `isLoading` instead.
|
|
62
|
+
*/
|
|
63
|
+
isNavigating: isLoading,
|
|
64
|
+
/** The last error that occurred, if any */
|
|
65
|
+
error,
|
|
24
66
|
};
|
|
25
67
|
}
|
|
26
68
|
//# sourceMappingURL=useCheckout.js.map
|