@daimo/sdk 1.4.0 → 1.4.1
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/client/createDaimoClient.d.ts +31 -21
- package/dist/client/createDaimoClient.d.ts.map +1 -1
- package/dist/client/createDaimoClient.js +24 -16
- package/dist/client/createDaimoClient.js.map +1 -1
- package/dist/common/account.d.ts +75 -8
- package/dist/common/account.d.ts.map +1 -1
- package/dist/common/account.js +7 -1
- package/dist/common/account.js.map +1 -1
- package/dist/common/api.d.ts +19 -8
- package/dist/common/api.d.ts.map +1 -1
- package/dist/common/api.js +6 -1
- package/dist/common/api.js.map +1 -1
- package/dist/common/chain.d.ts +0 -1
- package/dist/common/chain.d.ts.map +1 -1
- package/dist/common/chain.js +0 -10
- package/dist/common/chain.js.map +1 -1
- package/dist/common/session.d.ts +6 -3
- package/dist/common/session.d.ts.map +1 -1
- package/dist/common/session.js.map +1 -1
- package/dist/common/token.d.ts +16 -4
- package/dist/common/token.d.ts.map +1 -1
- package/dist/common/token.js +12 -42
- package/dist/common/token.js.map +1 -1
- package/dist/version.d.ts +1 -1
- package/dist/version.js +1 -1
- package/dist/web/api/index.d.ts +3 -3
- package/dist/web/api/index.d.ts.map +1 -1
- package/dist/web/api/navTree.d.ts +5 -5
- package/dist/web/api/navTree.d.ts.map +1 -1
- package/dist/web/api/walletTypes.d.ts +2 -15
- package/dist/web/api/walletTypes.d.ts.map +1 -1
- package/dist/web/components/ConfirmationPage.d.ts.map +1 -1
- package/dist/web/components/ConfirmationPage.js +3 -3
- package/dist/web/components/ConfirmationPage.js.map +1 -1
- package/dist/web/components/DaimoModal.d.ts.map +1 -1
- package/dist/web/components/DaimoModal.js +28 -9
- package/dist/web/components/DaimoModal.js.map +1 -1
- package/dist/web/components/QRCode.d.ts.map +1 -1
- package/dist/web/components/QRCode.js +2 -2
- package/dist/web/components/QRCode.js.map +1 -1
- package/dist/web/components/TokenAmountEntry.d.ts +57 -0
- package/dist/web/components/TokenAmountEntry.d.ts.map +1 -0
- package/dist/web/components/TokenAmountEntry.js +157 -0
- package/dist/web/components/TokenAmountEntry.js.map +1 -0
- package/dist/web/components/WalletAmountPage.d.ts +2 -2
- package/dist/web/components/WalletAmountPage.d.ts.map +1 -1
- package/dist/web/components/WalletAmountPage.js +11 -146
- package/dist/web/components/WalletAmountPage.js.map +1 -1
- package/dist/web/components/account/AccountApplePayPage.d.ts +24 -0
- package/dist/web/components/account/AccountApplePayPage.d.ts.map +1 -0
- package/dist/web/components/account/AccountApplePayPage.js +253 -0
- package/dist/web/components/account/AccountApplePayPage.js.map +1 -0
- package/dist/web/components/account/AccountBankDetailsPage.d.ts +16 -0
- package/dist/web/components/account/AccountBankDetailsPage.d.ts.map +1 -0
- package/dist/web/components/account/AccountBankDetailsPage.js +140 -0
- package/dist/web/components/account/AccountBankDetailsPage.js.map +1 -0
- package/dist/web/components/account/AccountBankPickerPage.d.ts +8 -8
- package/dist/web/components/account/AccountBankPickerPage.d.ts.map +1 -1
- package/dist/web/components/account/AccountBankPickerPage.js +66 -19
- package/dist/web/components/account/AccountBankPickerPage.js.map +1 -1
- package/dist/web/components/account/AccountBankTransferSubmittedPage.d.ts +13 -0
- package/dist/web/components/account/AccountBankTransferSubmittedPage.d.ts.map +1 -0
- package/dist/web/components/account/AccountBankTransferSubmittedPage.js +27 -0
- package/dist/web/components/account/AccountBankTransferSubmittedPage.js.map +1 -0
- package/dist/web/components/account/AccountDeeplinkPage.d.ts +0 -2
- package/dist/web/components/account/AccountDeeplinkPage.d.ts.map +1 -1
- package/dist/web/components/account/AccountDeeplinkPage.js +7 -6
- package/dist/web/components/account/AccountDeeplinkPage.js.map +1 -1
- package/dist/web/components/account/AccountEnrollmentPage.d.ts +5 -18
- package/dist/web/components/account/AccountEnrollmentPage.d.ts.map +1 -1
- package/dist/web/components/account/AccountEnrollmentPage.js +86 -20
- package/dist/web/components/account/AccountEnrollmentPage.js.map +1 -1
- package/dist/web/components/account/AccountFlowProvider.d.ts.map +1 -1
- package/dist/web/components/account/AccountFlowProvider.js +23 -2
- package/dist/web/components/account/AccountFlowProvider.js.map +1 -1
- package/dist/web/components/account/AccountOtpCodeEntry.d.ts +16 -0
- package/dist/web/components/account/AccountOtpCodeEntry.d.ts.map +1 -0
- package/dist/web/components/account/AccountOtpCodeEntry.js +101 -0
- package/dist/web/components/account/AccountOtpCodeEntry.js.map +1 -0
- package/dist/web/components/account/AccountOtpPage.d.ts.map +1 -1
- package/dist/web/components/account/AccountOtpPage.js +10 -53
- package/dist/web/components/account/AccountOtpPage.js.map +1 -1
- package/dist/web/components/account/AccountPaymentPage.d.ts +7 -4
- package/dist/web/components/account/AccountPaymentPage.d.ts.map +1 -1
- package/dist/web/components/account/AccountPaymentPage.js +29 -34
- package/dist/web/components/account/AccountPaymentPage.js.map +1 -1
- package/dist/web/components/account/AccountPhoneOtpPage.d.ts +14 -0
- package/dist/web/components/account/AccountPhoneOtpPage.d.ts.map +1 -0
- package/dist/web/components/account/AccountPhoneOtpPage.js +56 -0
- package/dist/web/components/account/AccountPhoneOtpPage.js.map +1 -0
- package/dist/web/components/account/AccountPhonePage.d.ts +11 -0
- package/dist/web/components/account/AccountPhonePage.d.ts.map +1 -0
- package/dist/web/components/account/AccountPhonePage.js +100 -0
- package/dist/web/components/account/AccountPhonePage.js.map +1 -0
- package/dist/web/components/account/AccountReadyPage.d.ts +2 -0
- package/dist/web/components/account/AccountReadyPage.d.ts.map +1 -0
- package/dist/web/components/account/AccountReadyPage.js +7 -0
- package/dist/web/components/account/AccountReadyPage.js.map +1 -0
- package/dist/web/components/account/AccountStatusPage.d.ts +1 -3
- package/dist/web/components/account/AccountStatusPage.d.ts.map +1 -1
- package/dist/web/components/account/AccountStatusPage.js +8 -8
- package/dist/web/components/account/AccountStatusPage.js.map +1 -1
- package/dist/web/components/account/accountNav.d.ts +14 -0
- package/dist/web/components/account/accountNav.d.ts.map +1 -0
- package/dist/web/components/account/accountNav.js +35 -0
- package/dist/web/components/account/accountNav.js.map +1 -0
- package/dist/web/components/account/openDeeplink.js +30 -14
- package/dist/web/components/account/openDeeplink.js.map +1 -1
- package/dist/web/components/account/phone.d.ts +6 -0
- package/dist/web/components/account/phone.d.ts.map +1 -0
- package/dist/web/components/account/phone.js +35 -0
- package/dist/web/components/account/phone.js.map +1 -0
- package/dist/web/components/account/useCoinbaseApplePayWidget.d.ts +20 -0
- package/dist/web/components/account/useCoinbaseApplePayWidget.d.ts.map +1 -0
- package/dist/web/components/account/useCoinbaseApplePayWidget.js +159 -0
- package/dist/web/components/account/useCoinbaseApplePayWidget.js.map +1 -0
- package/dist/web/components/buttons.d.ts +11 -1
- package/dist/web/components/buttons.d.ts.map +1 -1
- package/dist/web/components/buttons.js +11 -3
- package/dist/web/components/buttons.js.map +1 -1
- package/dist/web/components/shared.d.ts +8 -3
- package/dist/web/components/shared.d.ts.map +1 -1
- package/dist/web/components/shared.js +44 -15
- package/dist/web/components/shared.js.map +1 -1
- package/dist/web/hooks/locale.d.ts +4 -0
- package/dist/web/hooks/locale.d.ts.map +1 -1
- package/dist/web/hooks/locale.js +23 -1
- package/dist/web/hooks/locale.js.map +1 -1
- package/dist/web/hooks/locales/en.d.ts +17 -0
- package/dist/web/hooks/locales/en.d.ts.map +1 -1
- package/dist/web/hooks/locales/en.js +19 -2
- package/dist/web/hooks/locales/en.js.map +1 -1
- package/dist/web/hooks/locales/es.d.ts.map +1 -1
- package/dist/web/hooks/locales/es.js +17 -0
- package/dist/web/hooks/locales/es.js.map +1 -1
- package/dist/web/hooks/locales/ja.d.ts +4 -0
- package/dist/web/hooks/locales/ja.d.ts.map +1 -0
- package/dist/web/hooks/locales/ja.js +140 -0
- package/dist/web/hooks/locales/ja.js.map +1 -0
- package/dist/web/hooks/locales/ko.d.ts +4 -0
- package/dist/web/hooks/locales/ko.d.ts.map +1 -0
- package/dist/web/hooks/locales/ko.js +140 -0
- package/dist/web/hooks/locales/ko.js.map +1 -0
- package/dist/web/hooks/locales/zh.d.ts +4 -0
- package/dist/web/hooks/locales/zh.d.ts.map +1 -0
- package/dist/web/hooks/locales/zh.js +140 -0
- package/dist/web/hooks/locales/zh.js.map +1 -0
- package/dist/web/hooks/types.d.ts +13 -3
- package/dist/web/hooks/types.d.ts.map +1 -1
- package/dist/web/hooks/types.js.map +1 -1
- package/dist/web/hooks/useAccountFlow.d.ts +49 -13
- package/dist/web/hooks/useAccountFlow.d.ts.map +1 -1
- package/dist/web/hooks/useAccountFlow.js +90 -13
- package/dist/web/hooks/useAccountFlow.js.map +1 -1
- package/dist/web/hooks/useCreateDeposit.d.ts +1 -1
- package/dist/web/hooks/useCreateDeposit.d.ts.map +1 -1
- package/dist/web/hooks/useCreateDeposit.js +103 -15
- package/dist/web/hooks/useCreateDeposit.js.map +1 -1
- package/dist/web/hooks/useDepositAddress.d.ts.map +1 -1
- package/dist/web/hooks/useDepositAddress.js +21 -2
- package/dist/web/hooks/useDepositAddress.js.map +1 -1
- package/dist/web/hooks/useDraftDeposit.d.ts +35 -0
- package/dist/web/hooks/useDraftDeposit.d.ts.map +1 -0
- package/dist/web/hooks/useDraftDeposit.js +155 -0
- package/dist/web/hooks/useDraftDeposit.js.map +1 -0
- package/dist/web/hooks/useSessionNav.d.ts +1 -1
- package/dist/web/hooks/useSessionNav.d.ts.map +1 -1
- package/dist/web/hooks/useSessionNav.js +17 -11
- package/dist/web/hooks/useSessionNav.js.map +1 -1
- package/dist/web/hooks/useWalletFlow.d.ts.map +1 -1
- package/dist/web/hooks/useWalletFlow.js +9 -0
- package/dist/web/hooks/useWalletFlow.js.map +1 -1
- package/dist/web/index.d.ts +1 -1
- package/dist/web/index.d.ts.map +1 -1
- package/dist/web/index.js +1 -1
- package/dist/web/index.js.map +1 -1
- package/dist/web/platform.d.ts +1 -0
- package/dist/web/platform.d.ts.map +1 -1
- package/dist/web/platform.js +11 -0
- package/dist/web/platform.js.map +1 -1
- package/dist/web/styles.css +1 -1
- package/dist/web/theme.css +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { useCallback, useMemo, useRef, useState } from "react";
|
|
3
|
+
import { t } from "../../hooks/locale.js";
|
|
4
|
+
import { useAccountFlow } from "../../hooks/useAccountFlow.js";
|
|
5
|
+
import { PrimaryButton } from "../buttons.js";
|
|
6
|
+
import { CenteredContent, ErrorMessage, PageHeader, } from "../shared.js";
|
|
7
|
+
import { formatUsPhoneLocal, normalizeUsPhoneDigits, toUsPhoneE164, } from "./phone.js";
|
|
8
|
+
/**
|
|
9
|
+
* Phone entry step for Coinbase Headless enrollment. Keeps the field to a
|
|
10
|
+
* single line like email entry, but formats the US number as the user types.
|
|
11
|
+
*/
|
|
12
|
+
export function AccountPhonePage({ onBack, onOtpSent }) {
|
|
13
|
+
const account = useAccountFlow();
|
|
14
|
+
const [phoneDigits, setPhoneDigits] = useState(() => normalizeUsPhoneDigits(account?.phoneNumber ?? ""));
|
|
15
|
+
const inputRef = useRef(null);
|
|
16
|
+
const e164 = useMemo(() => toUsPhoneE164(phoneDigits), [phoneDigits]);
|
|
17
|
+
const isValidPhone = e164.length === 12;
|
|
18
|
+
const formattedPhone = useMemo(() => formatUsPhoneLocal(phoneDigits), [phoneDigits]);
|
|
19
|
+
const restoreCaret = useCallback((digitIndex, nextDigits) => {
|
|
20
|
+
requestAnimationFrame(() => {
|
|
21
|
+
const input = inputRef.current;
|
|
22
|
+
if (!input)
|
|
23
|
+
return;
|
|
24
|
+
const nextFormatted = formatUsPhoneLocal(nextDigits);
|
|
25
|
+
const nextCaret = getCaretForDigitIndex(nextFormatted, digitIndex);
|
|
26
|
+
input.setSelectionRange(nextCaret, nextCaret);
|
|
27
|
+
});
|
|
28
|
+
}, []);
|
|
29
|
+
const handleSubmit = useCallback(async () => {
|
|
30
|
+
if (!account || !isValidPhone)
|
|
31
|
+
return;
|
|
32
|
+
account.setPhoneNumber(e164);
|
|
33
|
+
const sent = await account.sendPhoneOtp(e164);
|
|
34
|
+
if (sent)
|
|
35
|
+
onOtpSent();
|
|
36
|
+
}, [account, e164, isValidPhone, onOtpSent]);
|
|
37
|
+
const handleChange = useCallback((e) => {
|
|
38
|
+
if (account?.authError)
|
|
39
|
+
account.setAuthError(null);
|
|
40
|
+
const rawValue = e.target.value;
|
|
41
|
+
const nextDigits = normalizeUsPhoneDigits(rawValue);
|
|
42
|
+
const selectionStart = e.target.selectionStart ?? rawValue.length;
|
|
43
|
+
const digitIndex = Math.min(countDigits(rawValue.slice(0, selectionStart)), nextDigits.length);
|
|
44
|
+
setPhoneDigits(nextDigits);
|
|
45
|
+
restoreCaret(digitIndex, nextDigits);
|
|
46
|
+
}, [account, restoreCaret]);
|
|
47
|
+
const handleKeyDown = useCallback((e) => {
|
|
48
|
+
if (e.key === "Enter" && isValidPhone) {
|
|
49
|
+
e.preventDefault();
|
|
50
|
+
handleSubmit();
|
|
51
|
+
return;
|
|
52
|
+
}
|
|
53
|
+
if (e.key !== "Backspace" && e.key !== "Delete")
|
|
54
|
+
return;
|
|
55
|
+
const input = e.currentTarget;
|
|
56
|
+
const start = input.selectionStart ?? 0;
|
|
57
|
+
const end = input.selectionEnd ?? start;
|
|
58
|
+
if (start !== end)
|
|
59
|
+
return;
|
|
60
|
+
const digitIndex = countDigits(formattedPhone.slice(0, start));
|
|
61
|
+
const removeIndex = e.key === "Backspace" ? digitIndex - 1 : digitIndex;
|
|
62
|
+
if (removeIndex < 0 || removeIndex >= phoneDigits.length)
|
|
63
|
+
return;
|
|
64
|
+
e.preventDefault();
|
|
65
|
+
if (account?.authError)
|
|
66
|
+
account.setAuthError(null);
|
|
67
|
+
const nextDigits = phoneDigits.slice(0, removeIndex) + phoneDigits.slice(removeIndex + 1);
|
|
68
|
+
setPhoneDigits(nextDigits);
|
|
69
|
+
restoreCaret(removeIndex, nextDigits);
|
|
70
|
+
}, [account, formattedPhone, handleSubmit, isValidPhone, phoneDigits, restoreCaret]);
|
|
71
|
+
const handlePaste = useCallback((e) => {
|
|
72
|
+
e.preventDefault();
|
|
73
|
+
if (account?.authError)
|
|
74
|
+
account.setAuthError(null);
|
|
75
|
+
const nextDigits = normalizeUsPhoneDigits(e.clipboardData.getData("text"));
|
|
76
|
+
setPhoneDigits(nextDigits);
|
|
77
|
+
restoreCaret(nextDigits.length, nextDigits);
|
|
78
|
+
}, [account, restoreCaret]);
|
|
79
|
+
const handleFocus = useCallback(() => {
|
|
80
|
+
restoreCaret(phoneDigits.length, phoneDigits);
|
|
81
|
+
}, [phoneDigits, restoreCaret]);
|
|
82
|
+
return (_jsxs("div", { className: "daimo-flex daimo-flex-col daimo-flex-1 daimo-min-h-0", children: [_jsx(PageHeader, { title: t.accountPhone, onBack: onBack }), _jsxs(CenteredContent, { children: [_jsx("p", { className: "daimo-text-sm daimo-text-[var(--daimo-text-secondary)] daimo-text-center", children: t.accountPhoneDesc }), _jsxs("div", { className: "daimo-w-full daimo-max-w-xs daimo-flex daimo-items-center daimo-gap-3 daimo-px-4 daimo-py-3 daimo-bg-[var(--daimo-surface-secondary)] daimo-rounded-[var(--daimo-radius-md)] focus-within:daimo-ring-2 focus-within:daimo-ring-[var(--daimo-accent)] daimo-transition-shadow", children: [_jsx("span", { className: "daimo-text-base daimo-font-medium daimo-text-[var(--daimo-text-secondary)] daimo-select-none", children: "+1" }), _jsx("input", { ref: inputRef, type: "tel", inputMode: "tel", autoComplete: "tel-national", value: formattedPhone, onChange: handleChange, onKeyDown: handleKeyDown, onPaste: handlePaste, onFocus: handleFocus, placeholder: "555 123 4567", "aria-label": t.accountPhone, autoFocus: true, className: "daimo-flex-1 daimo-min-w-0 daimo-bg-transparent daimo-border-none daimo-outline-none daimo-shadow-none daimo-ring-0 daimo-text-base daimo-text-[var(--daimo-text)] daimo-placeholder-[var(--daimo-placeholder)] daimo-caret-[var(--daimo-accent)] focus:daimo-outline-none focus:daimo-ring-0 focus:daimo-border-none focus:daimo-shadow-none" })] }), account?.authError && _jsx(ErrorMessage, { message: account.authError })] }), _jsx("div", { className: "daimo-px-6 daimo-pb-6 daimo-flex daimo-flex-col daimo-items-center", children: _jsx(PrimaryButton, { onClick: handleSubmit, disabled: !isValidPhone || account?.isLoggingIn, children: account?.isLoggingIn ? t.loading : t.continue }) })] }));
|
|
83
|
+
}
|
|
84
|
+
function countDigits(value) {
|
|
85
|
+
return value.replace(/\D/g, "").length;
|
|
86
|
+
}
|
|
87
|
+
function getCaretForDigitIndex(formatted, digitIndex) {
|
|
88
|
+
if (digitIndex <= 0)
|
|
89
|
+
return 0;
|
|
90
|
+
let seenDigits = 0;
|
|
91
|
+
for (let i = 0; i < formatted.length; i++) {
|
|
92
|
+
if (!/\d/.test(formatted[i]))
|
|
93
|
+
continue;
|
|
94
|
+
seenDigits += 1;
|
|
95
|
+
if (seenDigits === digitIndex)
|
|
96
|
+
return i + 1;
|
|
97
|
+
}
|
|
98
|
+
return formatted.length;
|
|
99
|
+
}
|
|
100
|
+
//# sourceMappingURL=AccountPhonePage.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AccountPhonePage.js","sourceRoot":"","sources":["../../../../src/web/components/account/AccountPhonePage.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AccountReadyPage.d.ts","sourceRoot":"","sources":["../../../../src/web/components/account/AccountReadyPage.tsx"],"names":[],"mappings":"AAGA,wBAAgB,gBAAgB,4CAqB/B"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { t } from "../../hooks/locale.js";
|
|
3
|
+
import { CenteredContent, PageHeader } from "../shared.js";
|
|
4
|
+
export function AccountReadyPage() {
|
|
5
|
+
return (_jsxs("div", { className: "daimo-flex daimo-flex-col daimo-flex-1 daimo-min-h-0", children: [_jsx(PageHeader, { title: t.accountReadyTitle, onBack: null }), _jsx(CenteredContent, { children: _jsxs("div", { className: "daimo-flex daimo-flex-col daimo-items-center daimo-gap-4 daimo-px-6 daimo-text-center", children: [_jsx("div", { className: "daimo-flex daimo-h-16 daimo-w-16 daimo-items-center daimo-justify-center daimo-rounded-full daimo-bg-[var(--daimo-surface-secondary)]", children: _jsx("div", { className: "daimo-h-7 daimo-w-7 daimo-rounded-full daimo-bg-[var(--daimo-accent)]" }) }), _jsxs("div", { className: "daimo-flex daimo-flex-col daimo-gap-2", children: [_jsx("h2", { className: "daimo-text-xl daimo-font-semibold daimo-text-[var(--daimo-text)]", children: t.accountReadyHeading }), _jsx("p", { className: "daimo-text-sm daimo-leading-relaxed daimo-text-[var(--daimo-text-secondary)]", children: t.accountReadyDescription })] })] }) })] }));
|
|
6
|
+
}
|
|
7
|
+
//# sourceMappingURL=AccountReadyPage.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AccountReadyPage.js","sourceRoot":"","sources":["../../../../src/web/components/account/AccountReadyPage.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,uBAAuB,CAAC;AAC1C,OAAO,EAAE,eAAe,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAE3D,MAAM,UAAU,gBAAgB;IAC9B,OAAO,CACL,eAAK,SAAS,EAAC,sDAAsD,aACnE,KAAC,UAAU,IAAC,KAAK,EAAE,CAAC,CAAC,iBAAiB,EAAE,MAAM,EAAE,IAAI,GAAI,EACxD,KAAC,eAAe,cACd,eAAK,SAAS,EAAC,uFAAuF,aACpG,cAAK,SAAS,EAAC,uIAAuI,YACpJ,cAAK,SAAS,EAAC,uEAAuE,GAAG,GACrF,EACN,eAAK,SAAS,EAAC,uCAAuC,aACpD,aAAI,SAAS,EAAC,kEAAkE,YAC7E,CAAC,CAAC,mBAAmB,GACnB,EACL,YAAG,SAAS,EAAC,8EAA8E,YACxF,CAAC,CAAC,uBAAuB,GACxB,IACA,IACF,GACU,IACd,CACP,CAAC;AACJ,CAAC"}
|
|
@@ -1,6 +1,4 @@
|
|
|
1
|
-
import type { AccountRegion } from "../../../common/account.js";
|
|
2
1
|
type AccountStatusPageProps = {
|
|
3
|
-
region: AccountRegion;
|
|
4
2
|
sessionId: string;
|
|
5
3
|
clientSecret: string;
|
|
6
4
|
baseUrl: string;
|
|
@@ -8,6 +6,6 @@ type AccountStatusPageProps = {
|
|
|
8
6
|
/**
|
|
9
7
|
* Async deposit status — ConfirmationSpinner + progress steps + action rows.
|
|
10
8
|
*/
|
|
11
|
-
export declare function AccountStatusPage({
|
|
9
|
+
export declare function AccountStatusPage({ sessionId, clientSecret, baseUrl, }: AccountStatusPageProps): import("react/jsx-runtime").JSX.Element;
|
|
12
10
|
export {};
|
|
13
11
|
//# sourceMappingURL=AccountStatusPage.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AccountStatusPage.d.ts","sourceRoot":"","sources":["../../../../src/web/components/account/AccountStatusPage.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"AccountStatusPage.d.ts","sourceRoot":"","sources":["../../../../src/web/components/account/AccountStatusPage.tsx"],"names":[],"mappings":"AASA,KAAK,sBAAsB,GAAG;IAC5B,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,EAAE,MAAM,CAAC;IACrB,OAAO,EAAE,MAAM,CAAC;CACjB,CAAC;AAoBF;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,EAChC,SAAS,EACT,YAAY,EACZ,OAAO,GACR,EAAE,sBAAsB,2CAuDxB"}
|
|
@@ -10,10 +10,6 @@ const TERMINAL_STATUSES = [
|
|
|
10
10
|
"failed",
|
|
11
11
|
"expired",
|
|
12
12
|
];
|
|
13
|
-
const REGION_ETA = {
|
|
14
|
-
CA: "5–30 min",
|
|
15
|
-
US: "1–3 days",
|
|
16
|
-
};
|
|
17
13
|
/** Map status to a 0-2 step index for the progress indicator. */
|
|
18
14
|
function getStep(status) {
|
|
19
15
|
switch (status) {
|
|
@@ -27,14 +23,18 @@ const STEP_LABELS = ["Received", "Processing", "Complete"];
|
|
|
27
23
|
/**
|
|
28
24
|
* Async deposit status — ConfirmationSpinner + progress steps + action rows.
|
|
29
25
|
*/
|
|
30
|
-
export function AccountStatusPage({
|
|
26
|
+
export function AccountStatusPage({ sessionId, clientSecret, baseUrl, }) {
|
|
31
27
|
const client = useDaimoClient();
|
|
32
28
|
const [status, setStatus] = useState("payment_received");
|
|
29
|
+
const [eta, setEta] = useState(null);
|
|
33
30
|
useDepositPoller({
|
|
34
31
|
client,
|
|
35
32
|
sessionId,
|
|
36
33
|
clientSecret,
|
|
37
|
-
onUpdate: (deposit) =>
|
|
34
|
+
onUpdate: (deposit) => {
|
|
35
|
+
setStatus(deposit.status);
|
|
36
|
+
setEta(deposit.eta);
|
|
37
|
+
},
|
|
38
38
|
shouldStop: (deposit) => TERMINAL_STATUSES.includes(deposit.status),
|
|
39
39
|
});
|
|
40
40
|
const isComplete = status === "completed";
|
|
@@ -45,11 +45,11 @@ export function AccountStatusPage({ region, sessionId, clientSecret, baseUrl, })
|
|
|
45
45
|
const title = isComplete ? t.accountDepositComplete : t.accountDepositReceived;
|
|
46
46
|
const receiptUrl = `${baseUrl}/receipt?id=${sessionId}`;
|
|
47
47
|
const accountUrl = `${baseUrl}/account?session=${sessionId}`;
|
|
48
|
-
return (_jsxs("div", { className: "daimo-flex daimo-flex-col daimo-flex-1 daimo-min-h-0", children: [_jsx(PageHeader, { title: title }), _jsx(CenteredContent, { children: _jsxs("div", { className: "daimo-flex daimo-flex-col daimo-items-center daimo-gap-3", children: [_jsx(DepositProgress, { step: step }), !isComplete && (_jsxs("span", { className: "daimo-text-[10px] daimo-px-2.5 daimo-py-1 daimo-rounded-full", style: {
|
|
48
|
+
return (_jsxs("div", { className: "daimo-flex daimo-flex-col daimo-flex-1 daimo-min-h-0", children: [_jsx(PageHeader, { title: title }), _jsx(CenteredContent, { children: _jsxs("div", { className: "daimo-flex daimo-flex-col daimo-items-center daimo-gap-3", children: [_jsx(DepositProgress, { step: step }), !isComplete && eta && (_jsxs("span", { className: "daimo-text-[10px] daimo-px-2.5 daimo-py-1 daimo-rounded-full", style: {
|
|
49
49
|
backgroundColor: "var(--daimo-surface-secondary)",
|
|
50
50
|
color: "var(--daimo-text-muted)",
|
|
51
51
|
fontVariantNumeric: "tabular-nums",
|
|
52
|
-
}, children: ["ETA ",
|
|
52
|
+
}, children: ["ETA ", eta] }))] }) }), _jsxs("div", { className: "daimo-px-8 daimo-pb-4 daimo-flex daimo-flex-col daimo-gap-1", children: [_jsx(LinkPill, { href: accountUrl, icon: "user", label: t.accountViewAccount }), _jsx(LinkPill, { href: receiptUrl, icon: "receipt", label: t.showReceipt })] })] }));
|
|
53
53
|
}
|
|
54
54
|
/** Three-dot progress indicator with current step label. */
|
|
55
55
|
function DepositProgress({ step }) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AccountStatusPage.js","sourceRoot":"","sources":["../../../../src/web/components/account/AccountStatusPage.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AAGjC,OAAO,EAAE,cAAc,EAAE,MAAM,mCAAmC,CAAC;AACnE,OAAO,EAAE,CAAC,EAAE,MAAM,uBAAuB,CAAC;AAC1C,OAAO,EAAE,gBAAgB,EAAE,MAAM,iCAAiC,CAAC;
|
|
1
|
+
{"version":3,"file":"AccountStatusPage.js","sourceRoot":"","sources":["../../../../src/web/components/account/AccountStatusPage.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import type { AccountRail } from "../../../common/account.js";
|
|
2
|
+
/**
|
|
3
|
+
* Pick the modal entry page for a rail. Each rail has its own payment UX:
|
|
4
|
+
* - interac: two-step amount entry → bank picker
|
|
5
|
+
* - ach/sepa: two-step amount entry → bank details
|
|
6
|
+
* - apple_pay: single unified amount+Apple Pay page (Coinbase Headless)
|
|
7
|
+
*/
|
|
8
|
+
export declare function getAccountPaymentEntryTarget(rail: AccountRail): "account-payment" | "account-apple-pay";
|
|
9
|
+
/**
|
|
10
|
+
* Pick the modal page that follows the deposit amount screen (for rails
|
|
11
|
+
* that use the two-step flow).
|
|
12
|
+
*/
|
|
13
|
+
export declare function getAccountPaymentAdvanceTarget(rail: AccountRail): "account-canada-bank-picker" | "account-bank-details" | "account-apple-pay";
|
|
14
|
+
//# sourceMappingURL=accountNav.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"accountNav.d.ts","sourceRoot":"","sources":["../../../../src/web/components/account/accountNav.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAC;AAE9D;;;;;GAKG;AACH,wBAAgB,4BAA4B,CAAC,IAAI,EAAE,WAAW,2CAW7D;AAED;;;GAGG;AACH,wBAAgB,8BAA8B,CAAC,IAAI,EAAE,WAAW,+EAW/D"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Pick the modal entry page for a rail. Each rail has its own payment UX:
|
|
3
|
+
* - interac: two-step amount entry → bank picker
|
|
4
|
+
* - ach/sepa: two-step amount entry → bank details
|
|
5
|
+
* - apple_pay: single unified amount+Apple Pay page (Coinbase Headless)
|
|
6
|
+
*/
|
|
7
|
+
export function getAccountPaymentEntryTarget(rail) {
|
|
8
|
+
switch (rail) {
|
|
9
|
+
case "apple_pay":
|
|
10
|
+
// Coinbase Headless: amount input + Apple Pay live in the same page.
|
|
11
|
+
return "account-apple-pay";
|
|
12
|
+
case "interac":
|
|
13
|
+
case "ach":
|
|
14
|
+
case "sepa":
|
|
15
|
+
// Old two-step flow: amount first, then picker/details.
|
|
16
|
+
return "account-payment";
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* Pick the modal page that follows the deposit amount screen (for rails
|
|
21
|
+
* that use the two-step flow).
|
|
22
|
+
*/
|
|
23
|
+
export function getAccountPaymentAdvanceTarget(rail) {
|
|
24
|
+
switch (rail) {
|
|
25
|
+
case "interac":
|
|
26
|
+
return "account-canada-bank-picker";
|
|
27
|
+
case "ach":
|
|
28
|
+
case "sepa":
|
|
29
|
+
return "account-bank-details";
|
|
30
|
+
case "apple_pay":
|
|
31
|
+
// Never used — apple_pay skips account-payment entirely.
|
|
32
|
+
return "account-apple-pay";
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
//# sourceMappingURL=accountNav.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"accountNav.js","sourceRoot":"","sources":["../../../../src/web/components/account/accountNav.ts"],"names":[],"mappings":"AAEA;;;;;GAKG;AACH,MAAM,UAAU,4BAA4B,CAAC,IAAiB;IAC5D,QAAQ,IAAI,EAAE,CAAC;QACb,KAAK,WAAW;YACd,qEAAqE;YACrE,OAAO,mBAA4B,CAAC;QACtC,KAAK,SAAS,CAAC;QACf,KAAK,KAAK,CAAC;QACX,KAAK,MAAM;YACT,wDAAwD;YACxD,OAAO,iBAA0B,CAAC;IACtC,CAAC;AACH,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,8BAA8B,CAAC,IAAiB;IAC9D,QAAQ,IAAI,EAAE,CAAC;QACb,KAAK,SAAS;YACZ,OAAO,4BAAqC,CAAC;QAC/C,KAAK,KAAK,CAAC;QACX,KAAK,MAAM;YACT,OAAO,sBAA+B,CAAC;QACzC,KAAK,WAAW;YACd,yDAAyD;YACzD,OAAO,mBAA4B,CAAC;IACxC,CAAC;AACH,CAAC"}
|
|
@@ -25,23 +25,39 @@ function openFormPost(deeplink) {
|
|
|
25
25
|
if (!popup)
|
|
26
26
|
return;
|
|
27
27
|
setTimeout(() => {
|
|
28
|
+
if (popup.closed)
|
|
29
|
+
return;
|
|
28
30
|
popup.location.href = "about:blank";
|
|
29
|
-
|
|
30
|
-
popup.document.open();
|
|
31
|
-
const fields = Object.entries(deeplink.formFields)
|
|
32
|
-
.map(([k, v]) => `<input type="hidden" name="${escAttr(k)}" value="${escAttr(v)}"/>`)
|
|
33
|
-
.join("\n");
|
|
34
|
-
popup.document.write(`<html><body>` +
|
|
35
|
-
`<p style="font-family:system-ui;color:#666;text-align:center;margin-top:40vh">` +
|
|
36
|
-
`Connecting to your bank\u2026</p>` +
|
|
37
|
-
`<form id="f" method="POST" action="${escAttr(deeplink.formAction)}">` +
|
|
38
|
-
`${fields}</form>` +
|
|
39
|
-
`<script>document.getElementById('f').submit();</script>` +
|
|
40
|
-
`</body></html>`);
|
|
41
|
-
popup.document.close();
|
|
42
|
-
}, 500);
|
|
31
|
+
writeFormPostPage(popup, deeplink);
|
|
43
32
|
}, deeplink.warmDelayMs);
|
|
44
33
|
}
|
|
34
|
+
function writeFormPostPage(popup, deeplink, attempt = 0) {
|
|
35
|
+
if (popup.closed)
|
|
36
|
+
return;
|
|
37
|
+
try {
|
|
38
|
+
popup.document.open();
|
|
39
|
+
const fields = Object.entries(deeplink.formFields)
|
|
40
|
+
.map(([k, v]) => `<input type="hidden" name="${escAttr(k)}" value="${escAttr(v)}"/>`)
|
|
41
|
+
.join("\n");
|
|
42
|
+
popup.document.write(`<html><body>` +
|
|
43
|
+
`<p style="font-family:system-ui;color:#666;text-align:center;margin-top:40vh">` +
|
|
44
|
+
`Connecting to your bank\u2026</p>` +
|
|
45
|
+
`<form id="f" method="POST" action="${escAttr(deeplink.formAction)}">` +
|
|
46
|
+
`${fields}</form>` +
|
|
47
|
+
`<script>document.getElementById('f').submit();</script>` +
|
|
48
|
+
`</body></html>`);
|
|
49
|
+
popup.document.close();
|
|
50
|
+
}
|
|
51
|
+
catch (error) {
|
|
52
|
+
if (attempt >= 20) {
|
|
53
|
+
console.error("[openDeeplink] failed to prepare form-post popup:", error);
|
|
54
|
+
return;
|
|
55
|
+
}
|
|
56
|
+
setTimeout(() => {
|
|
57
|
+
writeFormPostPage(popup, deeplink, attempt + 1);
|
|
58
|
+
}, 100);
|
|
59
|
+
}
|
|
60
|
+
}
|
|
45
61
|
/** Escape a string for safe embedding in an HTML attribute (double-quoted). */
|
|
46
62
|
function escAttr(s) {
|
|
47
63
|
return s
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"openDeeplink.js","sourceRoot":"","sources":["../../../../src/web/components/account/openDeeplink.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAsB,MAAM,mBAAmB,CAAC;AAElE,yDAAyD;AACzD,MAAM,UAAU,YAAY,CAC1B,QAAyB,EACzB,QAAuB;IAEvB,MAAM,OAAO,GAAG,SAAS,CAAC,QAAQ,CAAC,CAAC;IAEpC,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,MAAM,GAAG,GACP,QAAQ,CAAC,IAAI,KAAK,WAAW,CAAC,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC;QAClE,oEAAoE;QACpE,IAAI,iBAAiB,CAAC,GAAG,CAAC;YAAE,OAAO;QACnC,qEAAqE;QACrE,MAAM,CAAC,QAAQ,CAAC,IAAI,GAAG,GAAG,CAAC;QAC3B,OAAO;IACT,CAAC;IAED,QAAQ,QAAQ,CAAC,IAAI,EAAE,CAAC;QACtB,KAAK,UAAU;YACb,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;YACpC,MAAM;QACR,KAAK,WAAW;YACd,YAAY,CAAC,QAAQ,CAAC,CAAC;YACvB,MAAM;IACV,CAAC;AACH,CAAC;AAED,SAAS,YAAY,CAAC,QAAiD;IACrE,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;IACtD,IAAI,CAAC,KAAK;QAAE,OAAO;IAEnB,UAAU,CAAC,GAAG,EAAE;QACd,KAAK,CAAC,QAAQ,CAAC,IAAI,GAAG,aAAa,CAAC;QACpC,
|
|
1
|
+
{"version":3,"file":"openDeeplink.js","sourceRoot":"","sources":["../../../../src/web/components/account/openDeeplink.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
export declare function normalizeUsPhoneDigits(raw: string): string;
|
|
2
|
+
export declare function formatUsPhoneInput(digits: string): string;
|
|
3
|
+
export declare function formatUsPhoneLocal(digits: string): string;
|
|
4
|
+
export declare function formatUsPhoneDisplay(raw: string): string;
|
|
5
|
+
export declare function toUsPhoneE164(digits: string): string;
|
|
6
|
+
//# sourceMappingURL=phone.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"phone.d.ts","sourceRoot":"","sources":["../../../../src/web/components/account/phone.ts"],"names":[],"mappings":"AAAA,wBAAgB,sBAAsB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAO1D;AAED,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAOzD;AAED,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAOzD;AAED,wBAAgB,oBAAoB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAGxD;AAED,wBAAgB,aAAa,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAEpD"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
export function normalizeUsPhoneDigits(raw) {
|
|
2
|
+
const allDigits = raw.replace(/\D/g, "");
|
|
3
|
+
const withoutCountryCode = allDigits.length > 10 && allDigits.startsWith("1")
|
|
4
|
+
? allDigits.slice(1)
|
|
5
|
+
: allDigits;
|
|
6
|
+
return withoutCountryCode.slice(0, 10);
|
|
7
|
+
}
|
|
8
|
+
export function formatUsPhoneInput(digits) {
|
|
9
|
+
if (digits.length === 0)
|
|
10
|
+
return "";
|
|
11
|
+
if (digits.length <= 3)
|
|
12
|
+
return `+1 ${digits}`;
|
|
13
|
+
if (digits.length <= 6) {
|
|
14
|
+
return `+1 ${digits.slice(0, 3)} ${digits.slice(3)}`;
|
|
15
|
+
}
|
|
16
|
+
return `+1 ${digits.slice(0, 3)} ${digits.slice(3, 6)} ${digits.slice(6)}`;
|
|
17
|
+
}
|
|
18
|
+
export function formatUsPhoneLocal(digits) {
|
|
19
|
+
if (digits.length === 0)
|
|
20
|
+
return "";
|
|
21
|
+
if (digits.length <= 3)
|
|
22
|
+
return digits;
|
|
23
|
+
if (digits.length <= 6) {
|
|
24
|
+
return `${digits.slice(0, 3)} ${digits.slice(3)}`;
|
|
25
|
+
}
|
|
26
|
+
return `${digits.slice(0, 3)} ${digits.slice(3, 6)} ${digits.slice(6)}`;
|
|
27
|
+
}
|
|
28
|
+
export function formatUsPhoneDisplay(raw) {
|
|
29
|
+
const digits = normalizeUsPhoneDigits(raw);
|
|
30
|
+
return digits.length === 0 ? raw : formatUsPhoneInput(digits);
|
|
31
|
+
}
|
|
32
|
+
export function toUsPhoneE164(digits) {
|
|
33
|
+
return digits.length === 10 ? `+1${digits}` : "";
|
|
34
|
+
}
|
|
35
|
+
//# sourceMappingURL=phone.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"phone.js","sourceRoot":"","sources":["../../../../src/web/components/account/phone.ts"],"names":[],"mappings":"AAAA,MAAM,UAAU,sBAAsB,CAAC,GAAW;IAChD,MAAM,SAAS,GAAG,GAAG,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;IACzC,MAAM,kBAAkB,GACtB,SAAS,CAAC,MAAM,GAAG,EAAE,IAAI,SAAS,CAAC,UAAU,CAAC,GAAG,CAAC;QAChD,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC;QACpB,CAAC,CAAC,SAAS,CAAC;IAChB,OAAO,kBAAkB,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;AACzC,CAAC;AAED,MAAM,UAAU,kBAAkB,CAAC,MAAc;IAC/C,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,CAAC;IACnC,IAAI,MAAM,CAAC,MAAM,IAAI,CAAC;QAAE,OAAO,MAAM,MAAM,EAAE,CAAC;IAC9C,IAAI,MAAM,CAAC,MAAM,IAAI,CAAC,EAAE,CAAC;QACvB,OAAO,MAAM,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC;IACvD,CAAC;IACD,OAAO,MAAM,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC;AAC7E,CAAC;AAED,MAAM,UAAU,kBAAkB,CAAC,MAAc;IAC/C,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,CAAC;IACnC,IAAI,MAAM,CAAC,MAAM,IAAI,CAAC;QAAE,OAAO,MAAM,CAAC;IACtC,IAAI,MAAM,CAAC,MAAM,IAAI,CAAC,EAAE,CAAC;QACvB,OAAO,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC;IACpD,CAAC;IACD,OAAO,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC;AAC1E,CAAC;AAED,MAAM,UAAU,oBAAoB,CAAC,GAAW;IAC9C,MAAM,MAAM,GAAG,sBAAsB,CAAC,GAAG,CAAC,CAAC;IAC3C,OAAO,MAAM,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,kBAAkB,CAAC,MAAM,CAAC,CAAC;AAChE,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,MAAc;IAC1C,OAAO,MAAM,CAAC,MAAM,KAAK,EAAE,CAAC,CAAC,CAAC,KAAK,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;AACnD,CAAC"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
type UseCoinbaseApplePayWidgetArgs = {
|
|
2
|
+
allowExpandedView: boolean;
|
|
3
|
+
onRefreshDeposit: () => Promise<void>;
|
|
4
|
+
paymentLinkUrl: string | null;
|
|
5
|
+
};
|
|
6
|
+
type UseCoinbaseApplePayWidgetResult = {
|
|
7
|
+
iframeExpanded: boolean;
|
|
8
|
+
onIframeLoad: () => void;
|
|
9
|
+
iframeReady: boolean;
|
|
10
|
+
iframeRef: React.RefObject<HTMLIFrameElement | null>;
|
|
11
|
+
resetWidget: () => void;
|
|
12
|
+
widgetError: string | null;
|
|
13
|
+
};
|
|
14
|
+
/**
|
|
15
|
+
* Coinbase iframe lifecycle and postMessage handling. Keeps the account page
|
|
16
|
+
* focused on amount entry / layout while this hook owns hosted-widget state.
|
|
17
|
+
*/
|
|
18
|
+
export declare function useCoinbaseApplePayWidget({ allowExpandedView, onRefreshDeposit, paymentLinkUrl, }: UseCoinbaseApplePayWidgetArgs): UseCoinbaseApplePayWidgetResult;
|
|
19
|
+
export {};
|
|
20
|
+
//# sourceMappingURL=useCoinbaseApplePayWidget.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useCoinbaseApplePayWidget.d.ts","sourceRoot":"","sources":["../../../../src/web/components/account/useCoinbaseApplePayWidget.ts"],"names":[],"mappings":"AASA,KAAK,6BAA6B,GAAG;IACnC,iBAAiB,EAAE,OAAO,CAAC;IAC3B,gBAAgB,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IACtC,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC;CAC/B,CAAC;AAEF,KAAK,+BAA+B,GAAG;IACrC,cAAc,EAAE,OAAO,CAAC;IACxB,YAAY,EAAE,MAAM,IAAI,CAAC;IACzB,WAAW,EAAE,OAAO,CAAC;IACrB,SAAS,EAAE,KAAK,CAAC,SAAS,CAAC,iBAAiB,GAAG,IAAI,CAAC,CAAC;IACrD,WAAW,EAAE,MAAM,IAAI,CAAC;IACxB,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;CAC5B,CAAC;AAEF;;;GAGG;AACH,wBAAgB,yBAAyB,CAAC,EACxC,iBAAiB,EACjB,gBAAgB,EAChB,cAAc,GACf,EAAE,6BAA6B,GAAG,+BAA+B,CAsIjE"}
|
|
@@ -0,0 +1,159 @@
|
|
|
1
|
+
import { useCallback, useEffect, useRef, useState } from "react";
|
|
2
|
+
/**
|
|
3
|
+
* Coinbase iframe lifecycle and postMessage handling. Keeps the account page
|
|
4
|
+
* focused on amount entry / layout while this hook owns hosted-widget state.
|
|
5
|
+
*/
|
|
6
|
+
export function useCoinbaseApplePayWidget({ allowExpandedView, onRefreshDeposit, paymentLinkUrl, }) {
|
|
7
|
+
const [widgetError, setWidgetError] = useState(null);
|
|
8
|
+
const [iframeReady, setIframeReady] = useState(false);
|
|
9
|
+
const [iframeExpanded, setIframeExpanded] = useState(false);
|
|
10
|
+
const iframeRef = useRef(null);
|
|
11
|
+
const refreshRef = useRef(onRefreshDeposit);
|
|
12
|
+
const resetWidget = useCallback(() => {
|
|
13
|
+
debugApplePay("reset widget", { paymentLinkUrl });
|
|
14
|
+
setWidgetError(null);
|
|
15
|
+
setIframeReady(false);
|
|
16
|
+
setIframeExpanded(false);
|
|
17
|
+
}, [paymentLinkUrl]);
|
|
18
|
+
useEffect(() => {
|
|
19
|
+
refreshRef.current = onRefreshDeposit;
|
|
20
|
+
}, [onRefreshDeposit]);
|
|
21
|
+
useEffect(() => {
|
|
22
|
+
if (!allowExpandedView)
|
|
23
|
+
setIframeExpanded(false);
|
|
24
|
+
}, [allowExpandedView]);
|
|
25
|
+
useEffect(() => {
|
|
26
|
+
debugApplePay("payment link updated", { paymentLinkUrl });
|
|
27
|
+
resetWidget();
|
|
28
|
+
}, [paymentLinkUrl, resetWidget]);
|
|
29
|
+
const updateExpandedView = useCallback((expanded) => {
|
|
30
|
+
if (!allowExpandedView) {
|
|
31
|
+
if (!expanded)
|
|
32
|
+
setIframeExpanded(false);
|
|
33
|
+
return;
|
|
34
|
+
}
|
|
35
|
+
setIframeExpanded(expanded);
|
|
36
|
+
}, [allowExpandedView]);
|
|
37
|
+
useEffect(() => {
|
|
38
|
+
const handler = (event) => {
|
|
39
|
+
if (typeof event.origin !== "string" || !isCoinbaseOrigin(event.origin)) {
|
|
40
|
+
return;
|
|
41
|
+
}
|
|
42
|
+
const iframeWindow = iframeRef.current?.contentWindow;
|
|
43
|
+
if (iframeWindow && event.source !== iframeWindow) {
|
|
44
|
+
return;
|
|
45
|
+
}
|
|
46
|
+
const parsed = parseCoinbaseEvent(event.data);
|
|
47
|
+
if (!parsed)
|
|
48
|
+
return;
|
|
49
|
+
debugApplePay("coinbase event", {
|
|
50
|
+
eventName: parsed.eventName,
|
|
51
|
+
data: parsed.data,
|
|
52
|
+
});
|
|
53
|
+
switch (parsed.eventName) {
|
|
54
|
+
case "onramp_api.load_pending":
|
|
55
|
+
setIframeReady(false);
|
|
56
|
+
return;
|
|
57
|
+
case "onramp_api.load_success":
|
|
58
|
+
setWidgetError(null);
|
|
59
|
+
setIframeReady(true);
|
|
60
|
+
return;
|
|
61
|
+
case "onramp_api.load_error":
|
|
62
|
+
if (parsed.data?.errorCode ===
|
|
63
|
+
"ERROR_CODE_GUEST_APPLE_PAY_NOT_SUPPORTED") {
|
|
64
|
+
setIframeReady(false);
|
|
65
|
+
return;
|
|
66
|
+
}
|
|
67
|
+
setWidgetError(parsed.data?.errorMessage ?? "failed to load payment widget");
|
|
68
|
+
return;
|
|
69
|
+
case "onramp_api.apple_pay_button_pressed":
|
|
70
|
+
updateExpandedView(true);
|
|
71
|
+
return;
|
|
72
|
+
case "onramp_api.pending_payment_auth":
|
|
73
|
+
case "onramp_api.payment_authorized":
|
|
74
|
+
updateExpandedView(true);
|
|
75
|
+
return;
|
|
76
|
+
case "onramp_api.commit_success":
|
|
77
|
+
updateExpandedView(false);
|
|
78
|
+
void refreshRef.current();
|
|
79
|
+
return;
|
|
80
|
+
case "onramp_api.commit_error":
|
|
81
|
+
updateExpandedView(false);
|
|
82
|
+
setWidgetError(parsed.data?.errorMessage ?? "payment failed");
|
|
83
|
+
return;
|
|
84
|
+
case "onramp_api.cancel":
|
|
85
|
+
debugApplePay("collapsing widget after cancel event");
|
|
86
|
+
updateExpandedView(false);
|
|
87
|
+
return;
|
|
88
|
+
case "onramp_api.apple_pay_session_cancelled":
|
|
89
|
+
updateExpandedView(false);
|
|
90
|
+
return;
|
|
91
|
+
case "onramp_api.polling_start":
|
|
92
|
+
updateExpandedView(true);
|
|
93
|
+
void refreshRef.current();
|
|
94
|
+
return;
|
|
95
|
+
case "onramp_api.polling_success":
|
|
96
|
+
updateExpandedView(false);
|
|
97
|
+
void refreshRef.current();
|
|
98
|
+
return;
|
|
99
|
+
case "onramp_api.polling_error":
|
|
100
|
+
updateExpandedView(false);
|
|
101
|
+
setWidgetError(parsed.data?.errorMessage ?? "transaction processing error");
|
|
102
|
+
return;
|
|
103
|
+
default:
|
|
104
|
+
debugApplePay("unhandled coinbase event", {
|
|
105
|
+
eventName: parsed.eventName,
|
|
106
|
+
data: parsed.data,
|
|
107
|
+
});
|
|
108
|
+
return;
|
|
109
|
+
}
|
|
110
|
+
};
|
|
111
|
+
window.addEventListener("message", handler);
|
|
112
|
+
return () => window.removeEventListener("message", handler);
|
|
113
|
+
}, [updateExpandedView]);
|
|
114
|
+
const onIframeLoad = useCallback(() => {
|
|
115
|
+
debugApplePay("iframe load", { paymentLinkUrl });
|
|
116
|
+
}, [paymentLinkUrl]);
|
|
117
|
+
return {
|
|
118
|
+
iframeExpanded,
|
|
119
|
+
onIframeLoad,
|
|
120
|
+
iframeReady,
|
|
121
|
+
iframeRef,
|
|
122
|
+
resetWidget,
|
|
123
|
+
widgetError,
|
|
124
|
+
};
|
|
125
|
+
}
|
|
126
|
+
/**
|
|
127
|
+
* Coinbase sends postMessage payloads as JSON strings. Parse and narrow them
|
|
128
|
+
* before the page reacts to lifecycle events.
|
|
129
|
+
*/
|
|
130
|
+
function parseCoinbaseEvent(raw) {
|
|
131
|
+
let parsed;
|
|
132
|
+
try {
|
|
133
|
+
parsed = typeof raw === "string" ? JSON.parse(raw) : raw;
|
|
134
|
+
}
|
|
135
|
+
catch {
|
|
136
|
+
return null;
|
|
137
|
+
}
|
|
138
|
+
if (!parsed || typeof parsed !== "object")
|
|
139
|
+
return null;
|
|
140
|
+
const maybe = parsed;
|
|
141
|
+
if (typeof maybe.eventName !== "string")
|
|
142
|
+
return null;
|
|
143
|
+
if (!maybe.eventName.startsWith("onramp_api."))
|
|
144
|
+
return null;
|
|
145
|
+
return maybe;
|
|
146
|
+
}
|
|
147
|
+
function isCoinbaseOrigin(origin) {
|
|
148
|
+
try {
|
|
149
|
+
const { hostname } = new URL(origin);
|
|
150
|
+
return hostname === "coinbase.com" || hostname.endsWith(".coinbase.com");
|
|
151
|
+
}
|
|
152
|
+
catch {
|
|
153
|
+
return false;
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
function debugApplePay(message, fields) {
|
|
157
|
+
console.info("[apple-pay]", message, fields ?? {});
|
|
158
|
+
}
|
|
159
|
+
//# sourceMappingURL=useCoinbaseApplePayWidget.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useCoinbaseApplePayWidget.js","sourceRoot":"","sources":["../../../../src/web/components/account/useCoinbaseApplePayWidget.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { ReactNode } from "react";
|
|
1
|
+
import { CSSProperties, ReactNode } from "react";
|
|
2
2
|
import { ExternalLinkIcon } from "./icons.js";
|
|
3
3
|
export { ExternalLinkIcon };
|
|
4
4
|
type ButtonProps = {
|
|
@@ -12,4 +12,14 @@ type ButtonProps = {
|
|
|
12
12
|
export declare function PrimaryButton({ children, onClick, disabled, icon, className, }: ButtonProps): import("react/jsx-runtime").JSX.Element;
|
|
13
13
|
/** Secondary action button - for less prominent actions like "Done", "Close" */
|
|
14
14
|
export declare function SecondaryButton({ children, onClick, disabled, icon, className, }: ButtonProps): import("react/jsx-runtime").JSX.Element;
|
|
15
|
+
type SecondaryLinkButtonProps = {
|
|
16
|
+
children: ReactNode;
|
|
17
|
+
href?: string;
|
|
18
|
+
onClick?: () => void;
|
|
19
|
+
disabled?: boolean;
|
|
20
|
+
className?: string;
|
|
21
|
+
style?: CSSProperties;
|
|
22
|
+
};
|
|
23
|
+
/** Small underlined text link. Renders <a> when href is set, <button> otherwise. */
|
|
24
|
+
export declare function SecondaryLinkButton({ children, href, onClick, disabled, className, style, }: SecondaryLinkButtonProps): import("react/jsx-runtime").JSX.Element;
|
|
15
25
|
//# sourceMappingURL=buttons.d.ts.map
|