@moneydevkit/core 0.7.0-beta.7 → 0.7.0-beta.8
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/components/Checkout.d.ts +1 -1
- package/dist/components/Checkout.js +35 -1
- package/dist/components/Checkout.js.map +1 -1
- package/dist/handlers/checkout.d.ts +52 -0
- package/dist/handlers/checkout.js +170 -0
- package/dist/handlers/checkout.js.map +1 -1
- package/dist/route.d.ts +16 -1
- package/dist/route.js +64 -1
- package/dist/route.js.map +1 -1
- package/package.json +1 -1
|
@@ -16,7 +16,13 @@ function CheckoutLayout({ checkout, children }) {
|
|
|
16
16
|
const description = checkout?.userMetadata?.description;
|
|
17
17
|
return (_jsxs("div", { className: "w-fit mx-auto", style: { width: '380px' }, children: [(title || description) && (_jsxs("div", { className: "text-center mb-6", children: [title && (_jsx("h2", { className: "text-2xl font-semibold text-white mb-2 font-sans tracking-tight", children: title })), description && (_jsx("p", { className: "text-gray-300", children: description }))] })), _jsx("div", { className: "bg-gray-800 rounded-2xl p-6 text-white font-sans", children: children }), _jsx("div", { className: "text-center mt-6", children: _jsxs("p", { className: "text-xs text-gray-500 font-sans", children: ["Powered by", ' ', _jsx("a", { href: "https://www.moneydevkit.com", target: "_blank", rel: "noopener noreferrer", className: "text-gray-400 hover:text-white transition-colors underline decoration-gray-600 hover:decoration-white", children: "moneydevkit" })] }) })] }));
|
|
18
18
|
}
|
|
19
|
+
function CheckoutError({ error }) {
|
|
20
|
+
return (_jsx("div", { className: "flex justify-center min-h-screen p-4 pt-8 bg-gradient-to-br from-slate-900 via-gray-900 to-slate-800", children: _jsx("div", { className: "w-full max-w-md", children: _jsxs("div", { className: "w-fit mx-auto", style: { width: '380px' }, children: [_jsx("div", { className: "bg-gray-800 rounded-2xl p-6 text-white font-sans", children: _jsxs("div", { className: "text-center", children: [_jsx("div", { className: "w-16 h-16 mx-auto mb-4 rounded-full bg-red-500/20 flex items-center justify-center", children: _jsx("svg", { className: "w-8 h-8 text-red-500", fill: "none", stroke: "currentColor", viewBox: "0 0 24 24", children: _jsx("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 2, d: "M12 9v2m0 4h.01m-6.938 4h13.856c1.54 0 2.502-1.667 1.732-3L13.732 4c-.77-1.333-2.694-1.333-3.464 0L3.34 16c-.77 1.333.192 3 1.732 3z" }) }) }), _jsx("h2", { className: "text-xl font-semibold mb-2", children: "Unable to create checkout" }), _jsx("p", { className: "text-gray-400", children: error.message })] }) }), _jsx("div", { className: "text-center mt-6", children: _jsxs("p", { className: "text-xs text-gray-500 font-sans", children: ["Powered by", ' ', _jsx("a", { href: "https://www.moneydevkit.com", target: "_blank", rel: "noopener noreferrer", className: "text-gray-400 hover:text-white transition-colors underline decoration-gray-600 hover:decoration-white", children: "moneydevkit" })] }) })] }) }) }));
|
|
21
|
+
}
|
|
19
22
|
function CheckoutInternal({ id }) {
|
|
23
|
+
// Track whether we've checked for URL errors after hydration
|
|
24
|
+
const [hasCheckedUrlError, setHasCheckedUrlError] = useState(false);
|
|
25
|
+
const [errorFromUrl, setErrorFromUrl] = useState(null);
|
|
20
26
|
const [isWindowVisible, setIsWindowVisible] = useState(() => {
|
|
21
27
|
if (typeof document === 'undefined') {
|
|
22
28
|
return true;
|
|
@@ -24,6 +30,23 @@ function CheckoutInternal({ id }) {
|
|
|
24
30
|
return document.visibilityState === 'visible';
|
|
25
31
|
});
|
|
26
32
|
const [isRestarting, setIsRestarting] = useState(false);
|
|
33
|
+
// Check for URL errors after mount (to handle SSR hydration correctly)
|
|
34
|
+
useEffect(() => {
|
|
35
|
+
if (typeof window === 'undefined') {
|
|
36
|
+
setHasCheckedUrlError(true);
|
|
37
|
+
return;
|
|
38
|
+
}
|
|
39
|
+
const params = new URLSearchParams(window.location.search);
|
|
40
|
+
const errorCode = params.get('error');
|
|
41
|
+
const errorMessage = params.get('message');
|
|
42
|
+
if (errorCode) {
|
|
43
|
+
setErrorFromUrl({
|
|
44
|
+
code: errorCode,
|
|
45
|
+
message: errorMessage ?? 'An error occurred while creating the checkout.',
|
|
46
|
+
});
|
|
47
|
+
}
|
|
48
|
+
setHasCheckedUrlError(true);
|
|
49
|
+
}, []);
|
|
27
50
|
useEffect(() => {
|
|
28
51
|
if (typeof document === 'undefined' || typeof window === 'undefined') {
|
|
29
52
|
return;
|
|
@@ -44,7 +67,7 @@ function CheckoutInternal({ id }) {
|
|
|
44
67
|
const { data: checkout } = useQuery({
|
|
45
68
|
queryKey: ['mdk-checkout', id],
|
|
46
69
|
queryFn: () => clientGetCheckout(id).then((checkout) => checkout),
|
|
47
|
-
enabled: !!id,
|
|
70
|
+
enabled: !!id && hasCheckedUrlError && !errorFromUrl,
|
|
48
71
|
refetchInterval: ({ state: { data } }) => {
|
|
49
72
|
if (!isWindowVisible) {
|
|
50
73
|
return false;
|
|
@@ -107,6 +130,17 @@ function CheckoutInternal({ id }) {
|
|
|
107
130
|
}
|
|
108
131
|
window.location.href = `${checkoutPath}/${result.data.id}`;
|
|
109
132
|
}, [checkout]);
|
|
133
|
+
// Show error UI if there was an error from URL-based checkout creation
|
|
134
|
+
if (errorFromUrl) {
|
|
135
|
+
return _jsx(CheckoutError, { error: errorFromUrl });
|
|
136
|
+
}
|
|
137
|
+
// Show error if no checkout ID provided
|
|
138
|
+
if (!id) {
|
|
139
|
+
return (_jsx(CheckoutError, { error: {
|
|
140
|
+
code: 'missing_id',
|
|
141
|
+
message: 'No checkout ID provided.',
|
|
142
|
+
} }));
|
|
143
|
+
}
|
|
110
144
|
if (!checkout) {
|
|
111
145
|
return (_jsx("div", { className: "flex items-center justify-center min-h-screen", children: _jsx("div", { className: "animate-spin rounded-full h-8 w-8 border-b-2 border-white" }) }));
|
|
112
146
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Checkout.js","sourceRoot":"","sources":["../../src/components/Checkout.tsx"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"Checkout.js","sourceRoot":"","sources":["../../src/components/Checkout.tsx"],"names":[],"mappings":";AACA,OAAO,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAA;AAChD,OAAO,EAAa,WAAW,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAA;AACnE,OAAO,EAAE,uBAAuB,EAAE,MAAM,cAAc,CAAA;AACtD,OAAO,mBAAmB,CAAA;AAC1B,OAAO,EAAE,oBAAoB,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAA;AAC3E,OAAO,EAAE,GAAG,EAAE,MAAM,YAAY,CAAA;AAChC,OAAO,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAA;AAClD,OAAO,eAAe,MAAM,4BAA4B,CAAA;AACxD,OAAO,uBAAuB,MAAM,oCAAoC,CAAA;AACxE,OAAO,sBAAsB,MAAM,mCAAmC,CAAA;AACtE,OAAO,mBAAmB,MAAM,gCAAgC,CAAA;AAEhE,MAAM,gBAAgB,GAAG,IAAI,GAAG,CAAyB,CAAC,aAAa,EAAE,WAAW,EAAE,iBAAiB,CAAC,CAAC,CAAA;AAWzG,SAAS,cAAc,CAAC,EAAE,QAAQ,EAAE,QAAQ,EAAuB;IACjE,MAAM,KAAK,GAAG,QAAQ,EAAE,YAAY,EAAE,KAAK,CAAA;IAC3C,MAAM,WAAW,GAAG,QAAQ,EAAE,YAAY,EAAE,WAAW,CAAA;IACvD,OAAO,CACL,eAAK,SAAS,EAAC,eAAe,EAAC,KAAK,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,aACrD,CAAC,KAAK,IAAI,WAAW,CAAC,IAAI,CACzB,eAAK,SAAS,EAAC,kBAAkB,aAC9B,KAAK,IAAI,CACR,aAAI,SAAS,EAAC,iEAAiE,YAC5E,KAAK,GACH,CACN,EACA,WAAW,IAAI,CACd,YAAG,SAAS,EAAC,eAAe,YAAE,WAAW,GAAK,CAC/C,IACG,CACP,EACD,cAAK,SAAS,EAAC,kDAAkD,YAAE,QAAQ,GAAO,EAClF,cAAK,SAAS,EAAC,kBAAkB,YAC/B,aAAG,SAAS,EAAC,iCAAiC,2BACjC,GAAG,EACd,YACE,IAAI,EAAC,6BAA6B,EAClC,MAAM,EAAC,QAAQ,EACf,GAAG,EAAC,qBAAqB,EACzB,SAAS,EAAC,uGAAuG,4BAG/G,IACF,GACA,IACF,CACP,CAAA;AACH,CAAC;AAOD,SAAS,aAAa,CAAC,EAAE,KAAK,EAA+B;IAC3D,OAAO,CACL,cAAK,SAAS,EAAC,sGAAsG,YACnH,cAAK,SAAS,EAAC,iBAAiB,YAC9B,eAAK,SAAS,EAAC,eAAe,EAAC,KAAK,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,aACtD,cAAK,SAAS,EAAC,kDAAkD,YAC/D,eAAK,SAAS,EAAC,aAAa,aAC1B,cAAK,SAAS,EAAC,oFAAoF,YACjG,cACE,SAAS,EAAC,sBAAsB,EAChC,IAAI,EAAC,MAAM,EACX,MAAM,EAAC,cAAc,EACrB,OAAO,EAAC,WAAW,YAEnB,eACE,aAAa,EAAC,OAAO,EACrB,cAAc,EAAC,OAAO,EACtB,WAAW,EAAE,CAAC,EACd,CAAC,EAAC,sIAAsI,GACxI,GACE,GACF,EACN,aAAI,SAAS,EAAC,4BAA4B,0CAA+B,EACzE,YAAG,SAAS,EAAC,eAAe,YAAE,KAAK,CAAC,OAAO,GAAK,IAC5C,GACF,EACN,cAAK,SAAS,EAAC,kBAAkB,YAC/B,aAAG,SAAS,EAAC,iCAAiC,2BACjC,GAAG,EACd,YACE,IAAI,EAAC,6BAA6B,EAClC,MAAM,EAAC,QAAQ,EACf,GAAG,EAAC,qBAAqB,EACzB,SAAS,EAAC,uGAAuG,4BAG/G,IACF,GACA,IACF,GACF,GACF,CACP,CAAA;AACH,CAAC;AAED,SAAS,gBAAgB,CAAC,EAAE,EAAE,EAAiB;IAC7C,6DAA6D;IAC7D,MAAM,CAAC,kBAAkB,EAAE,qBAAqB,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAA;IACnE,MAAM,CAAC,YAAY,EAAE,eAAe,CAAC,GAAG,QAAQ,CAA0B,IAAI,CAAC,CAAA;IAC/E,MAAM,CAAC,eAAe,EAAE,kBAAkB,CAAC,GAAG,QAAQ,CAAC,GAAG,EAAE;QAC1D,IAAI,OAAO,QAAQ,KAAK,WAAW,EAAE,CAAC;YACpC,OAAO,IAAI,CAAA;QACb,CAAC;QACD,OAAO,QAAQ,CAAC,eAAe,KAAK,SAAS,CAAA;IAC/C,CAAC,CAAC,CAAA;IACF,MAAM,CAAC,YAAY,EAAE,eAAe,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAA;IAEvD,uEAAuE;IACvE,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,OAAO,MAAM,KAAK,WAAW,EAAE,CAAC;YAClC,qBAAqB,CAAC,IAAI,CAAC,CAAA;YAC3B,OAAM;QACR,CAAC;QAED,MAAM,MAAM,GAAG,IAAI,eAAe,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAA;QAC1D,MAAM,SAAS,GAAG,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,CAAA;QACrC,MAAM,YAAY,GAAG,MAAM,CAAC,GAAG,CAAC,SAAS,CAAC,CAAA;QAE1C,IAAI,SAAS,EAAE,CAAC;YACd,eAAe,CAAC;gBACd,IAAI,EAAE,SAAS;gBACf,OAAO,EAAE,YAAY,IAAI,gDAAgD;aAC1E,CAAC,CAAA;QACJ,CAAC;QACD,qBAAqB,CAAC,IAAI,CAAC,CAAA;IAC7B,CAAC,EAAE,EAAE,CAAC,CAAA;IAEN,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,OAAO,QAAQ,KAAK,WAAW,IAAI,OAAO,MAAM,KAAK,WAAW,EAAE,CAAC;YACrE,OAAM;QACR,CAAC;QAED,MAAM,gBAAgB,GAAG,GAAG,EAAE;YAC5B,kBAAkB,CAAC,QAAQ,CAAC,eAAe,KAAK,SAAS,CAAC,CAAA;QAC5D,CAAC,CAAA;QAED,MAAM,cAAc,GAAG,GAAG,EAAE;YAC1B,kBAAkB,CAAC,KAAK,CAAC,CAAA;QAC3B,CAAC,CAAA;QAED,QAAQ,CAAC,gBAAgB,CAAC,kBAAkB,EAAE,gBAAgB,CAAC,CAAA;QAC/D,MAAM,CAAC,gBAAgB,CAAC,UAAU,EAAE,cAAc,CAAC,CAAA;QAEnD,OAAO,GAAG,EAAE;YACV,QAAQ,CAAC,mBAAmB,CAAC,kBAAkB,EAAE,gBAAgB,CAAC,CAAA;YAClE,MAAM,CAAC,mBAAmB,CAAC,UAAU,EAAE,cAAc,CAAC,CAAA;QACxD,CAAC,CAAA;IACH,CAAC,EAAE,EAAE,CAAC,CAAA;IAEN,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,GAAG,QAAQ,CAAC;QAClC,QAAQ,EAAE,CAAC,cAAc,EAAE,EAAE,CAAC;QAC9B,OAAO,EAAE,GAAG,EAAE,CAAC,iBAAiB,CAAC,EAAG,CAAC,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAoC,CAAC;QAC9F,OAAO,EAAE,CAAC,CAAC,EAAE,IAAI,kBAAkB,IAAI,CAAC,YAAY;QACpD,eAAe,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,EAAE;YACvC,IAAI,CAAC,eAAe,EAAE,CAAC;gBACrB,OAAO,KAAK,CAAA;YACd,CAAC;YAED,IAAI,CAAC,IAAI,EAAE,CAAC;gBACV,OAAO,IAAI,CAAA;YACb,CAAC;YAED,MAAM,cAAc,GAAG,CAAC,IAAI,CAAC,OAAO,EAAE,kBAAkB,IAAI,CAAC,CAAC,GAAG,CAAC,CAAA;YAElE,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,cAAc,EAAE,CAAC;gBACzD,OAAO,KAAK,CAAA;YACd,CAAC;YAED,OAAO,IAAI,CAAA;QACb,CAAC;KACF,CAAC,CAAA;IAEF,MAAM,eAAe,GACnB,QAAQ,EAAE,MAAM,KAAK,kBAAkB;QACvC,CAAC,QAAQ,EAAE,OAAO,EAAE,kBAAkB,IAAI,CAAC,CAAC,GAAG,CAAC,CAAA;IAElD,MAAM,aAAa,GAAG,WAAW,CAAC,CAAC,YAA0B,EAAE,EAAE;QAC/D,IAAI,OAAO,MAAM,KAAK,WAAW,EAAE,CAAC;YAClC,OAAM;QACR,CAAC;QAED,MAAM,oBAAoB,GAAI,YAAY,CAAC,YAAY,EAAE,UAAqB,IAAI,YAAY,CAAC,UAAU,IAAI,UAAU,CAAA;QACvH,IAAI,WAAW,GAAG,oBAAoB,CAAA;QAEtC,IAAI,CAAC;YACH,MAAM,UAAU,GAAG,IAAI,GAAG,CAAC,oBAAoB,EAAE,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAA;YACxE,UAAU,CAAC,YAAY,CAAC,GAAG,CAAC,uBAAuB,EAAE,YAAY,CAAC,EAAE,CAAC,CAAA;YACrE,WAAW,GAAG,UAAU,CAAC,QAAQ,EAAE,CAAA;QACrC,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,GAAG,CAAC,yEAAyE,EAAE,KAAK,CAAC,CAAA;QACvF,CAAC;QAED,MAAM,CAAC,QAAQ,CAAC,IAAI,GAAG,WAAW,CAAA;IACpC,CAAC,EAAE,EAAE,CAAC,CAAA;IAEN,MAAM,aAAa,GAAG,WAAW,CAAC,KAAK,IAAI,EAAE;QAC3C,IAAI,CAAC,QAAQ;YAAE,OAAM;QAErB,MAAM,MAAM,GAAG,QAAQ,CAAC,QAAQ,KAAK,KAAK;YACxC,CAAC,CAAC,QAAQ,CAAC,iBAAiB,IAAI,QAAQ,CAAC,SAAS,IAAI,QAAQ,CAAC,cAAc,IAAI,QAAQ,CAAC,WAAW;YACrG,CAAC,CAAC,QAAQ,CAAC,cAAc,IAAI,QAAQ,CAAC,WAAW,IAAI,QAAQ,CAAC,SAAS,IAAI,QAAQ,CAAC,OAAO,EAAE,UAAU,CAAA;QAEzG,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,MAAM,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAA;YACxB,OAAM;QACR,CAAC;QAED,MAAM,YAAY,GAAG,OAAO,MAAM,KAAK,WAAW;YAChD,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,WAAW;YAC3E,CAAC,CAAC,WAAW,CAAA;QAEf,eAAe,CAAC,IAAI,CAAC,CAAA;QAErB,MAAM,MAAM,GAAG,MAAM,oBAAoB,CAAC;YACxC,IAAI,EAAE,QAAQ;YACd,KAAK,EAAG,QAAQ,CAAC,YAAY,EAAE,KAAgB,IAAI,UAAU;YAC7D,WAAW,EAAG,QAAQ,CAAC,YAAY,EAAE,WAAsB,IAAI,EAAE;YACjE,MAAM;YACN,QAAQ,EAAE,QAAQ,CAAC,QAAyB;YAC5C,UAAU,EAAG,QAAQ,CAAC,YAAY,EAAE,UAAqB,IAAI,QAAQ,CAAC,UAAU,IAAI,SAAS;YAC7F,QAAQ,EAAE,QAAQ,CAAC,YAAY,IAAI,SAAS;SAC7C,CAAC,CAAA;QAEF,IAAI,MAAM,CAAC,KAAK,EAAE,CAAC;YACjB,OAAO,CAAC,KAAK,CAAC,4BAA4B,EAAE,MAAM,CAAC,KAAK,CAAC,CAAA;YACzD,eAAe,CAAC,KAAK,CAAC,CAAA;YACtB,OAAM;QACR,CAAC;QAED,MAAM,CAAC,QAAQ,CAAC,IAAI,GAAG,GAAG,YAAY,IAAI,MAAM,CAAC,IAAI,CAAC,EAAE,EAAE,CAAA;IAC5D,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAA;IAEd,uEAAuE;IACvE,IAAI,YAAY,EAAE,CAAC;QACjB,OAAO,KAAC,aAAa,IAAC,KAAK,EAAE,YAAY,GAAI,CAAA;IAC/C,CAAC;IAED,wCAAwC;IACxC,IAAI,CAAC,EAAE,EAAE,CAAC;QACR,OAAO,CACL,KAAC,aAAa,IACZ,KAAK,EAAE;gBACL,IAAI,EAAE,YAAY;gBAClB,OAAO,EAAE,0BAA0B;aACpC,GACD,CACH,CAAA;IACH,CAAC;IAED,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,OAAO,CACL,cAAK,SAAS,EAAC,+CAA+C,YAC5D,cAAK,SAAS,EAAC,2DAA2D,GAAG,GACzE,CACP,CAAA;IACH,CAAC;IAED,OAAO,CACL,cAAK,SAAS,EAAC,sGAAsG,YACnH,cAAK,SAAS,EAAC,iBAAiB,YAC7B,CAAC,GAAG,EAAE;gBACL,IAAI,eAAe,EAAE,CAAC;oBACpB,OAAO,CACL,KAAC,cAAc,IAAC,QAAQ,EAAE,QAAQ,YAChC,KAAC,uBAAuB,IAAC,QAAQ,EAAE,QAAQ,EAAE,SAAS,EAAE,aAAa,GAAI,GAC1D,CAClB,CAAA;gBACH,CAAC;gBAED,QAAQ,QAAQ,CAAC,MAAM,EAAE,CAAC;oBACxB,KAAK,aAAa;wBAChB,OAAO,CACL,KAAC,cAAc,IAAC,QAAQ,EAAE,QAAQ,YAChC,KAAC,mBAAmB,IAAC,QAAQ,EAAE,QAA4D,GAAI,GAChF,CAClB,CAAA;oBACH,KAAK,WAAW;wBACd,OAAO,CACL,KAAC,cAAc,IAAC,QAAQ,EAAE,QAAQ,YAChC,eAAK,SAAS,EAAC,aAAa,aAC1B,cAAK,SAAS,EAAC,wEAAwE,GAAG,EAC1F,YAAG,SAAS,EAAC,eAAe,sCAA0B,IAClD,GACS,CAClB,CAAA;oBACH,KAAK,iBAAiB;wBACpB,OAAO,CACL,KAAC,cAAc,IAAC,QAAQ,EAAE,QAAQ,YAChC,KAAC,sBAAsB,IAAC,QAAQ,EAAE,QAAgE,GAAI,GACvF,CAClB,CAAA;oBACH,KAAK,SAAS;wBACZ,OAAO,CACL,KAAC,cAAc,IAAC,QAAQ,EAAE,QAAQ,YAChC,KAAC,eAAe,IACd,QAAQ,EAAE,QAAwD,EAClE,SAAS,EAAE,aAAa,EACxB,YAAY,EAAE,YAAY,GAC1B,GACa,CAClB,CAAA;oBACH;wBACE,OAAO,IAAI,CAAA;gBACf,CAAC;YACH,CAAC,CAAC,EAAE,GACA,GACF,CACP,CAAA;AACH,CAAC;AAED,MAAM,UAAU,QAAQ,CAAC,KAAoB;IAC3C,OAAO,CACL,KAAC,mBAAmB,cAClB,KAAC,gBAAgB,OAAK,KAAK,GAAI,GACX,CACvB,CAAA;AACH,CAAC;AAED,eAAe,QAAQ,CAAA"}
|
|
@@ -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';
|
|
@@ -122,4 +123,173 @@ export async function handleConfirmCheckout(request) {
|
|
|
122
123
|
return jsonResponse(500, { error: 'Failed to confirm checkout' });
|
|
123
124
|
}
|
|
124
125
|
}
|
|
126
|
+
/**
|
|
127
|
+
* Generate a signed checkout URL for URL-based checkout creation.
|
|
128
|
+
* All params are HMAC-signed using MDK_ACCESS_TOKEN to prevent tampering.
|
|
129
|
+
*
|
|
130
|
+
* @example
|
|
131
|
+
* const url = createCheckoutUrl({
|
|
132
|
+
* title: 'Product',
|
|
133
|
+
* description: 'Payment for product',
|
|
134
|
+
* amount: 2999,
|
|
135
|
+
* currency: 'USD',
|
|
136
|
+
* })
|
|
137
|
+
* // Returns: /api/mdk?action=createCheckout&amount=2999&...&signature=abc123
|
|
138
|
+
*/
|
|
139
|
+
export function createCheckoutUrl(params, options) {
|
|
140
|
+
const basePath = options?.basePath ?? '/api/mdk';
|
|
141
|
+
const accessToken = process.env.MDK_ACCESS_TOKEN;
|
|
142
|
+
if (!accessToken) {
|
|
143
|
+
throw new Error('MDK_ACCESS_TOKEN is required for creating checkout URLs');
|
|
144
|
+
}
|
|
145
|
+
// Build URL params
|
|
146
|
+
const urlParams = new URLSearchParams();
|
|
147
|
+
urlParams.set('action', 'createCheckout');
|
|
148
|
+
// Add all params, JSON-stringify objects
|
|
149
|
+
for (const [key, value] of Object.entries(params)) {
|
|
150
|
+
if (value === undefined)
|
|
151
|
+
continue;
|
|
152
|
+
if (typeof value === 'object' && value !== null) {
|
|
153
|
+
urlParams.set(key, JSON.stringify(value));
|
|
154
|
+
}
|
|
155
|
+
else {
|
|
156
|
+
urlParams.set(key, String(value));
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
// Sort params alphabetically for consistent signature
|
|
160
|
+
urlParams.sort();
|
|
161
|
+
const canonicalString = urlParams.toString();
|
|
162
|
+
// Compute HMAC-SHA256 signature
|
|
163
|
+
const signature = createHmac('sha256', accessToken)
|
|
164
|
+
.update(canonicalString)
|
|
165
|
+
.digest('hex');
|
|
166
|
+
urlParams.set('signature', signature);
|
|
167
|
+
return `${basePath}?${urlParams.toString()}`;
|
|
168
|
+
}
|
|
169
|
+
/**
|
|
170
|
+
* Verify the HMAC signature of checkout URL params.
|
|
171
|
+
* Uses constant-time comparison to prevent timing attacks.
|
|
172
|
+
*/
|
|
173
|
+
export function verifyCheckoutSignature(params, signature) {
|
|
174
|
+
const accessToken = process.env.MDK_ACCESS_TOKEN;
|
|
175
|
+
if (!accessToken)
|
|
176
|
+
return false;
|
|
177
|
+
// Clone params and remove signature for verification
|
|
178
|
+
const paramsToVerify = new URLSearchParams(params);
|
|
179
|
+
paramsToVerify.delete('signature');
|
|
180
|
+
paramsToVerify.sort();
|
|
181
|
+
const canonicalString = paramsToVerify.toString();
|
|
182
|
+
const expectedSignature = createHmac('sha256', accessToken)
|
|
183
|
+
.update(canonicalString)
|
|
184
|
+
.digest('hex');
|
|
185
|
+
// Constant-time comparison to prevent timing attacks
|
|
186
|
+
try {
|
|
187
|
+
const sigBuffer = Buffer.from(signature, 'hex');
|
|
188
|
+
const expectedBuffer = Buffer.from(expectedSignature, 'hex');
|
|
189
|
+
if (sigBuffer.length !== expectedBuffer.length) {
|
|
190
|
+
return false;
|
|
191
|
+
}
|
|
192
|
+
return timingSafeEqual(sigBuffer, expectedBuffer);
|
|
193
|
+
}
|
|
194
|
+
catch {
|
|
195
|
+
return false;
|
|
196
|
+
}
|
|
197
|
+
}
|
|
198
|
+
/**
|
|
199
|
+
* Parse URL query params into checkout params.
|
|
200
|
+
* Handles JSON parsing for nested objects (metadata, customer, requireCustomerData).
|
|
201
|
+
*/
|
|
202
|
+
export function parseCheckoutQueryParams(params) {
|
|
203
|
+
const raw = {};
|
|
204
|
+
for (const [key, value] of params) {
|
|
205
|
+
// Skip action and signature - they're not checkout params
|
|
206
|
+
if (key === 'action' || key === 'signature')
|
|
207
|
+
continue;
|
|
208
|
+
// JSON parse for objects/arrays
|
|
209
|
+
if (key === 'metadata' || key === 'customer' || key === 'requireCustomerData' || key === 'products') {
|
|
210
|
+
try {
|
|
211
|
+
raw[key] = JSON.parse(value);
|
|
212
|
+
}
|
|
213
|
+
catch {
|
|
214
|
+
// If JSON parsing fails, keep as string
|
|
215
|
+
raw[key] = value;
|
|
216
|
+
}
|
|
217
|
+
}
|
|
218
|
+
else if (key === 'amount') {
|
|
219
|
+
// Parse amount as number
|
|
220
|
+
raw[key] = Number(value);
|
|
221
|
+
}
|
|
222
|
+
else {
|
|
223
|
+
raw[key] = value;
|
|
224
|
+
}
|
|
225
|
+
}
|
|
226
|
+
return raw;
|
|
227
|
+
}
|
|
228
|
+
/**
|
|
229
|
+
* Validates and sanitizes checkoutPath to prevent open redirect attacks.
|
|
230
|
+
* Returns a safe relative path or the default '/checkout'.
|
|
231
|
+
*
|
|
232
|
+
* Security considerations:
|
|
233
|
+
* - Must start with / (relative path)
|
|
234
|
+
* - Must not contain :// or // (prevents protocol-relative URLs and absolute URLs)
|
|
235
|
+
*/
|
|
236
|
+
export function sanitizeCheckoutPath(checkoutPath) {
|
|
237
|
+
const defaultPath = '/checkout';
|
|
238
|
+
if (!checkoutPath) {
|
|
239
|
+
return defaultPath;
|
|
240
|
+
}
|
|
241
|
+
// Must start with / (relative path)
|
|
242
|
+
if (!checkoutPath.startsWith('/')) {
|
|
243
|
+
return defaultPath;
|
|
244
|
+
}
|
|
245
|
+
// Must not contain :// or // (prevents protocol-relative URLs and absolute URLs)
|
|
246
|
+
if (checkoutPath.includes('://') || checkoutPath.includes('//')) {
|
|
247
|
+
return defaultPath;
|
|
248
|
+
}
|
|
249
|
+
// Strip query string and hash - they would break URL construction when appending /{id}
|
|
250
|
+
// e.g., /checkout?foo=bar + /abc123 would become /checkout?foo=bar/abc123 (broken)
|
|
251
|
+
const queryIndex = checkoutPath.indexOf('?');
|
|
252
|
+
const hashIndex = checkoutPath.indexOf('#');
|
|
253
|
+
let endIndex = checkoutPath.length;
|
|
254
|
+
if (queryIndex !== -1)
|
|
255
|
+
endIndex = Math.min(endIndex, queryIndex);
|
|
256
|
+
if (hashIndex !== -1)
|
|
257
|
+
endIndex = Math.min(endIndex, hashIndex);
|
|
258
|
+
return checkoutPath.slice(0, endIndex);
|
|
259
|
+
}
|
|
260
|
+
/**
|
|
261
|
+
* Create a checkout from parsed query params.
|
|
262
|
+
* Validates against the same schema as handleCreateCheckout.
|
|
263
|
+
*/
|
|
264
|
+
export async function handleCreateCheckoutFromUrl(params) {
|
|
265
|
+
// Infer type if not provided - the schema requires it for discriminated union
|
|
266
|
+
if (!params.type) {
|
|
267
|
+
params.type = params.products ? 'PRODUCTS' : 'AMOUNT';
|
|
268
|
+
}
|
|
269
|
+
const parsed = createCheckoutSchema.safeParse(params);
|
|
270
|
+
if (!parsed.success) {
|
|
271
|
+
const firstError = parsed.error.issues[0];
|
|
272
|
+
return {
|
|
273
|
+
error: {
|
|
274
|
+
code: 'validation_error',
|
|
275
|
+
message: firstError?.message ?? 'Invalid checkout parameters',
|
|
276
|
+
},
|
|
277
|
+
};
|
|
278
|
+
}
|
|
279
|
+
const result = await createCheckout(parsed.data);
|
|
280
|
+
if (result.error) {
|
|
281
|
+
return {
|
|
282
|
+
error: {
|
|
283
|
+
code: result.error.code,
|
|
284
|
+
message: result.error.message,
|
|
285
|
+
},
|
|
286
|
+
};
|
|
287
|
+
}
|
|
288
|
+
return {
|
|
289
|
+
data: {
|
|
290
|
+
id: result.data.checkout.id,
|
|
291
|
+
checkoutPath: parsed.data.checkoutPath ?? '/checkout',
|
|
292
|
+
},
|
|
293
|
+
};
|
|
294
|
+
}
|
|
125
295
|
//# 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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"}
|
package/dist/route.d.ts
CHANGED
|
@@ -1,4 +1,6 @@
|
|
|
1
1
|
import { z } from 'zod';
|
|
2
|
+
export { createCheckoutUrl } from './handlers/checkout';
|
|
3
|
+
export type { CreateCheckoutUrlOptions } from './handlers/checkout';
|
|
2
4
|
export type RouteHandler = (request: Request) => Promise<Response>;
|
|
3
5
|
declare const routeSchema: z.ZodEnum<["webhook", "webhooks", "pay_bolt_12", "balance", "ping", "pay_ln_url", "list_channels", "pay_bolt11", "create_checkout", "get_checkout", "confirm_checkout", "pay_invoice", "sync_rgs", "list_products"]>;
|
|
4
6
|
export type UnifiedRoute = z.infer<typeof routeSchema>;
|
|
@@ -6,4 +8,17 @@ export declare function __setHandlerForTest(route: UnifiedRoute, handler: RouteH
|
|
|
6
8
|
export declare function __resetHandlersForTest(): void;
|
|
7
9
|
export declare function createUnifiedHandler(): (request: Request) => Promise<Response>;
|
|
8
10
|
export declare function POST(request: Request): Promise<Response>;
|
|
9
|
-
|
|
11
|
+
/**
|
|
12
|
+
* GET handler for URL-based checkout creation.
|
|
13
|
+
*
|
|
14
|
+
* Creates a checkout from signed URL query params and redirects to the checkout page.
|
|
15
|
+
*
|
|
16
|
+
* @example
|
|
17
|
+
* GET /api/mdk?action=createCheckout&title=Product&amount=2999&signature=abc123
|
|
18
|
+
* -> Verifies signature
|
|
19
|
+
* -> Creates checkout
|
|
20
|
+
* -> 302 redirect to /checkout/{id}
|
|
21
|
+
*
|
|
22
|
+
* Users should generate URLs using the `createCheckoutUrl` helper to ensure proper signing.
|
|
23
|
+
*/
|
|
24
|
+
export declare function GET(request: Request): Promise<Response>;
|
package/dist/route.js
CHANGED
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
import { z } from 'zod';
|
|
2
2
|
import { handleBalance } from './handlers/balance';
|
|
3
|
-
import { handleConfirmCheckout, handleCreateCheckout, handleGetCheckout } from './handlers/checkout';
|
|
3
|
+
import { handleConfirmCheckout, handleCreateCheckout, handleGetCheckout, handleCreateCheckoutFromUrl, parseCheckoutQueryParams, verifyCheckoutSignature, sanitizeCheckoutPath, } from './handlers/checkout';
|
|
4
|
+
// Re-export for use in nextjs package
|
|
5
|
+
export { createCheckoutUrl } from './handlers/checkout';
|
|
4
6
|
import { listChannels } from './handlers/list_channels';
|
|
5
7
|
import { handlePayBolt11 } from './handlers/pay_bolt_11';
|
|
6
8
|
import { handlePayBolt12 } from './handlers/pay_bolt_12';
|
|
@@ -194,4 +196,65 @@ export async function POST(request) {
|
|
|
194
196
|
const handler = createUnifiedHandler();
|
|
195
197
|
return handler(request);
|
|
196
198
|
}
|
|
199
|
+
/**
|
|
200
|
+
* Safely join a base path with a segment, avoiding double slashes.
|
|
201
|
+
* e.g., joinPath('/', 'abc') -> '/abc', joinPath('/checkout', 'abc') -> '/checkout/abc'
|
|
202
|
+
*/
|
|
203
|
+
function joinPath(base, segment) {
|
|
204
|
+
if (base === '/')
|
|
205
|
+
return `/${segment}`;
|
|
206
|
+
return `${base}/${segment}`;
|
|
207
|
+
}
|
|
208
|
+
/**
|
|
209
|
+
* Helper to redirect to checkout error page.
|
|
210
|
+
* Uses 'error' as a placeholder ID so it matches the /checkout/[id] route.
|
|
211
|
+
*/
|
|
212
|
+
function redirectToCheckoutError(baseUrl, checkoutPath, code, message) {
|
|
213
|
+
const errorUrl = new URL(joinPath(checkoutPath, 'error'), baseUrl.origin);
|
|
214
|
+
errorUrl.searchParams.set('error', code);
|
|
215
|
+
errorUrl.searchParams.set('message', message);
|
|
216
|
+
return Response.redirect(errorUrl.toString(), 302);
|
|
217
|
+
}
|
|
218
|
+
/**
|
|
219
|
+
* GET handler for URL-based checkout creation.
|
|
220
|
+
*
|
|
221
|
+
* Creates a checkout from signed URL query params and redirects to the checkout page.
|
|
222
|
+
*
|
|
223
|
+
* @example
|
|
224
|
+
* GET /api/mdk?action=createCheckout&title=Product&amount=2999&signature=abc123
|
|
225
|
+
* -> Verifies signature
|
|
226
|
+
* -> Creates checkout
|
|
227
|
+
* -> 302 redirect to /checkout/{id}
|
|
228
|
+
*
|
|
229
|
+
* Users should generate URLs using the `createCheckoutUrl` helper to ensure proper signing.
|
|
230
|
+
*/
|
|
231
|
+
export async function GET(request) {
|
|
232
|
+
const url = new URL(request.url);
|
|
233
|
+
const params = url.searchParams;
|
|
234
|
+
// Only handle createCheckout action
|
|
235
|
+
if (params.get('action') !== 'createCheckout') {
|
|
236
|
+
return new Response('Not found', { status: 404 });
|
|
237
|
+
}
|
|
238
|
+
// Sanitize checkoutPath early to prevent open redirect attacks
|
|
239
|
+
const checkoutPath = sanitizeCheckoutPath(params.get('checkoutPath'));
|
|
240
|
+
// Verify signature is present
|
|
241
|
+
const signature = params.get('signature');
|
|
242
|
+
if (!signature) {
|
|
243
|
+
return redirectToCheckoutError(url, checkoutPath, 'missing_signature', 'Missing signature');
|
|
244
|
+
}
|
|
245
|
+
// Verify signature is valid
|
|
246
|
+
const isValid = verifyCheckoutSignature(params, signature);
|
|
247
|
+
if (!isValid) {
|
|
248
|
+
return redirectToCheckoutError(url, checkoutPath, 'invalid_signature', 'Invalid signature');
|
|
249
|
+
}
|
|
250
|
+
// Parse and validate params
|
|
251
|
+
const checkoutParams = parseCheckoutQueryParams(params);
|
|
252
|
+
const result = await handleCreateCheckoutFromUrl(checkoutParams);
|
|
253
|
+
if ('error' in result) {
|
|
254
|
+
return redirectToCheckoutError(url, checkoutPath, result.error.code, result.error.message);
|
|
255
|
+
}
|
|
256
|
+
// Success - redirect to checkout page (use sanitized checkoutPath, not result.data.checkoutPath)
|
|
257
|
+
const checkoutUrl = new URL(joinPath(checkoutPath, result.data.id), url.origin);
|
|
258
|
+
return Response.redirect(checkoutUrl.toString(), 302);
|
|
259
|
+
}
|
|
197
260
|
//# sourceMappingURL=route.js.map
|
package/dist/route.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"route.js","sourceRoot":"","sources":["../src/route.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAEvB,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAA;AAClD,OAAO,
|
|
1
|
+
{"version":3,"file":"route.js","sourceRoot":"","sources":["../src/route.ts"],"names":[],"mappings":"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"}
|