@swype-org/react-sdk 0.1.251 → 0.1.257
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/index.cjs +219 -114
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +219 -114
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
package/dist/index.js
CHANGED
|
@@ -1847,7 +1847,10 @@ function useTransferSigning(pollIntervalMs = 2e3, options) {
|
|
|
1847
1847
|
// src/paymentHelpers.ts
|
|
1848
1848
|
var ACTIVE_CREDENTIAL_STORAGE_KEY = "blink_active_credential_id";
|
|
1849
1849
|
var MOBILE_FLOW_STORAGE_KEY = "blink_mobile_flow";
|
|
1850
|
-
var
|
|
1850
|
+
var DEFAULT_MIN_SEND_AMOUNT_USD = 0.25;
|
|
1851
|
+
function effectiveMinTransferAmountUsd(depositAmount) {
|
|
1852
|
+
return depositAmount != null ? depositAmount : DEFAULT_MIN_SEND_AMOUNT_USD;
|
|
1853
|
+
}
|
|
1851
1854
|
function persistMobileFlowState(data) {
|
|
1852
1855
|
try {
|
|
1853
1856
|
sessionStorage.setItem(MOBILE_FLOW_STORAGE_KEY, JSON.stringify(data));
|
|
@@ -1993,14 +1996,47 @@ function shouldUseWalletConnector(options) {
|
|
|
1993
1996
|
return options.useWalletConnector ?? !isMobileUserAgent(options.userAgent);
|
|
1994
1997
|
}
|
|
1995
1998
|
|
|
1999
|
+
// src/processingStatus.ts
|
|
2000
|
+
var PROCESSING_TIMEOUT_MS = 18e4;
|
|
2001
|
+
var TERMINAL_TRANSFER_STATUSES = /* @__PURE__ */ new Set(["COMPLETED", "FAILED", "EXPIRED"]);
|
|
2002
|
+
function isTerminalTransferStatus(status) {
|
|
2003
|
+
return TERMINAL_TRANSFER_STATUSES.has(status);
|
|
2004
|
+
}
|
|
2005
|
+
function isTransferAwaitingCompletion(transfer) {
|
|
2006
|
+
if (!transfer) return false;
|
|
2007
|
+
return !isTerminalTransferStatus(transfer.status);
|
|
2008
|
+
}
|
|
2009
|
+
function resolvePreferredTransfer(polledTransfer, localTransfer) {
|
|
2010
|
+
return polledTransfer ?? localTransfer;
|
|
2011
|
+
}
|
|
2012
|
+
function getTransferStatus(polledTransfer, localTransfer) {
|
|
2013
|
+
const transfer = resolvePreferredTransfer(polledTransfer, localTransfer);
|
|
2014
|
+
return transfer?.status ?? "UNKNOWN";
|
|
2015
|
+
}
|
|
2016
|
+
function hasProcessingTimedOut(processingStartedAtMs, nowMs) {
|
|
2017
|
+
if (!processingStartedAtMs) return false;
|
|
2018
|
+
return nowMs - processingStartedAtMs >= PROCESSING_TIMEOUT_MS;
|
|
2019
|
+
}
|
|
2020
|
+
var STATUS_DISPLAY_LABELS = {
|
|
2021
|
+
CREATED: "created",
|
|
2022
|
+
AUTHORIZED: "authorized",
|
|
2023
|
+
SENDING: "sending",
|
|
2024
|
+
SENT: "confirming delivery",
|
|
2025
|
+
COMPLETED: "completed",
|
|
2026
|
+
FAILED: "failed"
|
|
2027
|
+
};
|
|
2028
|
+
function getStatusDisplayLabel(status) {
|
|
2029
|
+
return STATUS_DISPLAY_LABELS[status] ?? status;
|
|
2030
|
+
}
|
|
2031
|
+
function buildProcessingTimeoutMessage(status) {
|
|
2032
|
+
const label = getStatusDisplayLabel(status);
|
|
2033
|
+
return `Payment is taking longer than expected (status: ${label}). Please try again.`;
|
|
2034
|
+
}
|
|
2035
|
+
|
|
1996
2036
|
// src/paymentResolvePhase.ts
|
|
1997
2037
|
function hasActiveWallet(accounts) {
|
|
1998
2038
|
return accounts.some((a) => a.wallets.some((w) => w.status === "ACTIVE"));
|
|
1999
2039
|
}
|
|
2000
|
-
function isTransferInFlight(transfer) {
|
|
2001
|
-
if (!transfer) return false;
|
|
2002
|
-
return ["CREATED", "SENDING", "SENT"].includes(transfer.status);
|
|
2003
|
-
}
|
|
2004
2040
|
function isGuestPreauthCompletedTransferPinPhase(phase) {
|
|
2005
2041
|
switch (phase.step) {
|
|
2006
2042
|
case "completed":
|
|
@@ -2022,77 +2058,142 @@ function isGuestPreauthCompletedTransferPinPhase(phase) {
|
|
|
2022
2058
|
}
|
|
2023
2059
|
function resolvePhase(state) {
|
|
2024
2060
|
const p = state.phase;
|
|
2025
|
-
|
|
2026
|
-
|
|
2027
|
-
|
|
2028
|
-
|
|
2029
|
-
|
|
2030
|
-
|
|
2031
|
-
|
|
2032
|
-
|
|
2033
|
-
|
|
2034
|
-
|
|
2035
|
-
|
|
2036
|
-
|
|
2037
|
-
|
|
2038
|
-
|
|
2039
|
-
|
|
2040
|
-
|
|
2041
|
-
|
|
2042
|
-
|
|
2043
|
-
|
|
2044
|
-
|
|
2045
|
-
|
|
2046
|
-
|
|
2047
|
-
|
|
2061
|
+
const transferCompleted = state.transfer?.status === "COMPLETED";
|
|
2062
|
+
const needsPasskeyBootstrap = state.privyAuthenticated && !state.activeCredentialId;
|
|
2063
|
+
const guestPreauthPin = transferCompleted && state.guestPreauthorizing && !state.verificationTarget && isGuestPreauthCompletedTransferPinPhase(p);
|
|
2064
|
+
const guestPostPayLogin = transferCompleted && state.isGuestFlow && state.guestPreauthSessionId != null && !state.guestPreauthorizing && !state.verificationTarget && !state.privyAuthenticated;
|
|
2065
|
+
const pinSubflow = !state.loginRequested && (p.step === "token-picker" || p.step === "one-tap-setup" || p.step === "select-source" || p.step === "confirm-sign" || p.step === "guest-token-picker");
|
|
2066
|
+
const guestTokenPicker = state.isGuestFlow && state.selectedProviderId != null && !state.transfer && !state.guestPreauthAccountId;
|
|
2067
|
+
const walletPickerSwitch = p.step === "wallet-picker" && p.reason === "switch" && !state.creatingTransfer && !(state.mobileFlow && state.deeplinkUri);
|
|
2068
|
+
const passkeyBlock = state.passkeyConfigLoaded && !state.activeCredentialId;
|
|
2069
|
+
const passkeyVerify = passkeyBlock && state.knownCredentialIds.length > 0 && state.passkeyPopupNeeded;
|
|
2070
|
+
const c1 = state.guestPreauthSetupCompletePending && state.privyReady && state.privyAuthenticated;
|
|
2071
|
+
const c2 = !c1 && guestPreauthPin;
|
|
2072
|
+
const c3 = !c1 && !c2 && guestPostPayLogin;
|
|
2073
|
+
const c4 = !c1 && !c2 && !c3 && transferCompleted && !state.verificationTarget && !needsPasskeyBootstrap;
|
|
2074
|
+
const c5 = !c1 && !c2 && !c3 && !c4 && state.transfer?.status === "FAILED";
|
|
2075
|
+
const c6 = !c1 && !c2 && !c3 && !c4 && !c5 && (state.creatingTransfer || isTransferAwaitingCompletion(state.transfer));
|
|
2076
|
+
const c7 = !c1 && !c2 && !c3 && !c4 && !c5 && !c6 && pinSubflow;
|
|
2077
|
+
const c8 = !c1 && !c2 && !c3 && !c4 && !c5 && !c6 && !c7 && state.mobileFlow && state.deeplinkUri != null;
|
|
2078
|
+
const c9 = !c1 && !c2 && !c3 && !c4 && !c5 && !c6 && !c7 && !c8 && p.step === "wallet-setup" && p.mobile == null && state.guestPreauthorizing;
|
|
2079
|
+
const c10 = !c1 && !c2 && !c3 && !c4 && !c5 && !c6 && !c7 && !c8 && !c9 && guestTokenPicker;
|
|
2080
|
+
const c11 = !c1 && !c2 && !c3 && !c4 && !c5 && !c6 && !c7 && !c8 && !c9 && !c10 && walletPickerSwitch;
|
|
2081
|
+
const c12 = !c1 && !c2 && !c3 && !c4 && !c5 && !c6 && !c7 && !c8 && !c9 && !c10 && !c11 && !state.privyReady;
|
|
2082
|
+
const c13 = !c1 && !c2 && !c3 && !c4 && !c5 && !c6 && !c7 && !c8 && !c9 && !c10 && !c11 && !c12 && state.privyAuthenticated && !state.activeCredentialId && !state.passkeyConfigLoaded;
|
|
2083
|
+
const c14 = !c1 && !c2 && !c3 && !c4 && !c5 && !c6 && !c7 && !c8 && !c9 && !c10 && !c11 && !c12 && !c13 && state.verificationTarget != null && !state.privyAuthenticated;
|
|
2084
|
+
const c15 = !c1 && !c2 && !c3 && !c4 && !c5 && !c6 && !c7 && !c8 && !c9 && !c10 && !c11 && !c12 && !c13 && !c14 && state.loginRequested;
|
|
2085
|
+
const c16 = !c1 && !c2 && !c3 && !c4 && !c5 && !c6 && !c7 && !c8 && !c9 && !c10 && !c11 && !c12 && !c13 && !c14 && !c15 && passkeyVerify;
|
|
2086
|
+
const c17 = !c1 && !c2 && !c3 && !c4 && !c5 && !c6 && !c7 && !c8 && !c9 && !c10 && !c11 && !c12 && !c13 && !c14 && !c15 && !c16 && passkeyBlock;
|
|
2087
|
+
const c18 = !c1 && !c2 && !c3 && !c4 && !c5 && !c6 && !c7 && !c8 && !c9 && !c10 && !c11 && !c12 && !c13 && !c14 && !c15 && !c16 && !c17 && state.loadingData && state.activeCredentialId != null && hasActiveWallet(state.accounts);
|
|
2088
|
+
const c19 = !c1 && !c2 && !c3 && !c4 && !c5 && !c6 && !c7 && !c8 && !c9 && !c10 && !c11 && !c12 && !c13 && !c14 && !c15 && !c16 && !c17 && !c18 && state.activeCredentialId != null && !hasActiveWallet(state.accounts) && !state.mobileFlow;
|
|
2089
|
+
const c20 = !c1 && !c2 && !c3 && !c4 && !c5 && !c6 && !c7 && !c8 && !c9 && !c10 && !c11 && !c12 && !c13 && !c14 && !c15 && !c16 && !c17 && !c18 && !c19 && state.activeCredentialId != null && hasActiveWallet(state.accounts) && !state.loadingData;
|
|
2090
|
+
const c21 = !c1 && !c2 && !c3 && !c4 && !c5 && !c6 && !c7 && !c8 && !c9 && !c10 && !c11 && !c12 && !c13 && !c14 && !c15 && !c16 && !c17 && !c18 && !c19 && !c20 && state.isGuestFlow;
|
|
2091
|
+
const flags = [
|
|
2092
|
+
c1,
|
|
2093
|
+
c2,
|
|
2094
|
+
c3,
|
|
2095
|
+
c4,
|
|
2096
|
+
c5,
|
|
2097
|
+
c6,
|
|
2098
|
+
c7,
|
|
2099
|
+
c8,
|
|
2100
|
+
c9,
|
|
2101
|
+
c10,
|
|
2102
|
+
c11,
|
|
2103
|
+
c12,
|
|
2104
|
+
c13,
|
|
2105
|
+
c14,
|
|
2106
|
+
c15,
|
|
2107
|
+
c16,
|
|
2108
|
+
c17,
|
|
2109
|
+
c18,
|
|
2110
|
+
c19,
|
|
2111
|
+
c20,
|
|
2112
|
+
c21
|
|
2113
|
+
];
|
|
2114
|
+
const matchCount = flags.filter(Boolean).length;
|
|
2115
|
+
if (matchCount > 1) {
|
|
2116
|
+
console.error("resolvePhase: multiple exclusive branches matched", {
|
|
2117
|
+
flags: {
|
|
2118
|
+
c1,
|
|
2119
|
+
c2,
|
|
2120
|
+
c3,
|
|
2121
|
+
c4,
|
|
2122
|
+
c5,
|
|
2123
|
+
c6,
|
|
2124
|
+
c7,
|
|
2125
|
+
c8,
|
|
2126
|
+
c9,
|
|
2127
|
+
c10,
|
|
2128
|
+
c11,
|
|
2129
|
+
c12,
|
|
2130
|
+
c13,
|
|
2131
|
+
c14,
|
|
2132
|
+
c15,
|
|
2133
|
+
c16,
|
|
2134
|
+
c17,
|
|
2135
|
+
c18,
|
|
2136
|
+
c19,
|
|
2137
|
+
c20,
|
|
2138
|
+
c21
|
|
2139
|
+
}
|
|
2140
|
+
});
|
|
2048
2141
|
}
|
|
2049
|
-
|
|
2050
|
-
|
|
2142
|
+
let resolved;
|
|
2143
|
+
if (c1) {
|
|
2144
|
+
resolved = { step: "guest-setup-complete" };
|
|
2145
|
+
} else if (c2) {
|
|
2146
|
+
resolved = p;
|
|
2147
|
+
} else if (c3) {
|
|
2148
|
+
resolved = { step: "login" };
|
|
2149
|
+
} else if (c4) {
|
|
2150
|
+
resolved = { step: "completed", transfer: state.transfer };
|
|
2151
|
+
} else if (c5) {
|
|
2152
|
+
resolved = {
|
|
2153
|
+
step: "failed",
|
|
2154
|
+
transfer: state.transfer,
|
|
2155
|
+
error: state.error ?? "Transfer failed."
|
|
2156
|
+
};
|
|
2157
|
+
} else if (c6) {
|
|
2158
|
+
resolved = { step: "processing", transfer: state.transfer };
|
|
2159
|
+
} else if (c7) {
|
|
2160
|
+
resolved = p;
|
|
2161
|
+
} else if (c8) {
|
|
2162
|
+
resolved = {
|
|
2051
2163
|
step: "wallet-setup",
|
|
2052
2164
|
mobile: { deeplinkUri: state.deeplinkUri, providerId: state.selectedProviderId },
|
|
2053
2165
|
accountId: null
|
|
2054
2166
|
};
|
|
2167
|
+
} else if (c9) {
|
|
2168
|
+
resolved = p;
|
|
2169
|
+
} else if (c10) {
|
|
2170
|
+
resolved = { step: "guest-token-picker" };
|
|
2171
|
+
} else if (c11) {
|
|
2172
|
+
resolved = p;
|
|
2173
|
+
} else if (c12) {
|
|
2174
|
+
resolved = { step: "initializing" };
|
|
2175
|
+
} else if (c13) {
|
|
2176
|
+
resolved = { step: "initializing" };
|
|
2177
|
+
} else if (c14) {
|
|
2178
|
+
resolved = { step: "otp-verify", target: state.verificationTarget };
|
|
2179
|
+
} else if (c15) {
|
|
2180
|
+
resolved = { step: "login" };
|
|
2181
|
+
} else if (c16) {
|
|
2182
|
+
resolved = { step: "passkey-verify" };
|
|
2183
|
+
} else if (c17) {
|
|
2184
|
+
resolved = { step: "passkey-create", popupFallback: state.passkeyPopupNeeded };
|
|
2185
|
+
} else if (c18) {
|
|
2186
|
+
resolved = { step: "data-loading" };
|
|
2187
|
+
} else if (c19) {
|
|
2188
|
+
resolved = { step: "wallet-picker", reason: "link" };
|
|
2189
|
+
} else if (c20) {
|
|
2190
|
+
resolved = { step: "deposit" };
|
|
2191
|
+
} else if (c21) {
|
|
2192
|
+
resolved = { step: "wallet-picker", reason: "guest-entry" };
|
|
2193
|
+
} else {
|
|
2194
|
+
resolved = { step: "wallet-picker", reason: "entry" };
|
|
2055
2195
|
}
|
|
2056
|
-
|
|
2057
|
-
return p;
|
|
2058
|
-
}
|
|
2059
|
-
if (state.isGuestFlow && state.selectedProviderId != null && !state.transfer && !state.guestPreauthAccountId) {
|
|
2060
|
-
return { step: "guest-token-picker" };
|
|
2061
|
-
}
|
|
2062
|
-
if (p.step === "wallet-picker" && !state.creatingTransfer && !(state.mobileFlow && state.deeplinkUri)) {
|
|
2063
|
-
return p;
|
|
2064
|
-
}
|
|
2065
|
-
if (!state.privyReady) {
|
|
2066
|
-
return { step: "initializing" };
|
|
2067
|
-
}
|
|
2068
|
-
if (state.privyAuthenticated && !state.activeCredentialId && !state.passkeyConfigLoaded) {
|
|
2069
|
-
return { step: "initializing" };
|
|
2070
|
-
}
|
|
2071
|
-
if (state.verificationTarget && !state.privyAuthenticated) {
|
|
2072
|
-
return { step: "otp-verify", target: state.verificationTarget };
|
|
2073
|
-
}
|
|
2074
|
-
if (state.loginRequested) {
|
|
2075
|
-
return { step: "login" };
|
|
2076
|
-
}
|
|
2077
|
-
if (state.passkeyConfigLoaded && !state.activeCredentialId) {
|
|
2078
|
-
if (state.knownCredentialIds.length > 0 && state.passkeyPopupNeeded) {
|
|
2079
|
-
return { step: "passkey-verify" };
|
|
2080
|
-
}
|
|
2081
|
-
return { step: "passkey-create", popupFallback: state.passkeyPopupNeeded };
|
|
2082
|
-
}
|
|
2083
|
-
if (state.loadingData && state.activeCredentialId && hasActiveWallet(state.accounts)) {
|
|
2084
|
-
return { step: "data-loading" };
|
|
2085
|
-
}
|
|
2086
|
-
if (state.activeCredentialId && !hasActiveWallet(state.accounts) && !state.mobileFlow) {
|
|
2087
|
-
return { step: "wallet-picker", reason: "link" };
|
|
2088
|
-
}
|
|
2089
|
-
if (state.activeCredentialId && hasActiveWallet(state.accounts) && !state.loadingData) {
|
|
2090
|
-
return { step: "deposit" };
|
|
2091
|
-
}
|
|
2092
|
-
if (state.isGuestFlow) {
|
|
2093
|
-
return { step: "wallet-picker", reason: "guest-entry" };
|
|
2094
|
-
}
|
|
2095
|
-
return { step: "wallet-picker", reason: "entry" };
|
|
2196
|
+
return resolved;
|
|
2096
2197
|
}
|
|
2097
2198
|
|
|
2098
2199
|
// src/paymentReducer.ts
|
|
@@ -4358,13 +4459,13 @@ var waitHintStyle = (color) => ({
|
|
|
4358
4459
|
color,
|
|
4359
4460
|
margin: 0
|
|
4360
4461
|
});
|
|
4361
|
-
var MIN_DEPOSIT = 0.25;
|
|
4362
4462
|
function DepositScreen({
|
|
4363
4463
|
merchantName,
|
|
4364
4464
|
availableBalance,
|
|
4365
4465
|
remainingLimit,
|
|
4366
4466
|
tokenCount,
|
|
4367
4467
|
initialAmount,
|
|
4468
|
+
minDepositFloor,
|
|
4368
4469
|
processing,
|
|
4369
4470
|
error,
|
|
4370
4471
|
onDeposit,
|
|
@@ -4400,9 +4501,9 @@ function DepositScreen({
|
|
|
4400
4501
|
const selectedProviderName = selectedAccount?.name ?? "Wallet";
|
|
4401
4502
|
const selectedProviderLogo = KNOWN_LOGOS[selectedProviderName.toLowerCase()];
|
|
4402
4503
|
const totalAccountBalance = selectedAccount ? selectedAccount.wallets.reduce((sum, w) => sum + w.balance.available.amount, 0) : availableBalance;
|
|
4403
|
-
const isLowBalance = availableBalance <
|
|
4504
|
+
const isLowBalance = availableBalance < minDepositFloor;
|
|
4404
4505
|
const exceedsLimit = remainingLimit != null && amount > remainingLimit && !isLowBalance;
|
|
4405
|
-
const canDeposit = amount >=
|
|
4506
|
+
const canDeposit = amount >= minDepositFloor && !exceedsLimit && !isLowBalance && !processing;
|
|
4406
4507
|
return /* @__PURE__ */ jsxs(
|
|
4407
4508
|
ScreenLayout,
|
|
4408
4509
|
{
|
|
@@ -4537,7 +4638,7 @@ function DepositScreen({
|
|
|
4537
4638
|
"Your wallet balance is $",
|
|
4538
4639
|
availableBalance.toFixed(2),
|
|
4539
4640
|
" \u2014 you need at least $",
|
|
4540
|
-
|
|
4641
|
+
minDepositFloor.toFixed(2),
|
|
4541
4642
|
" to deposit via One-Tap."
|
|
4542
4643
|
] }),
|
|
4543
4644
|
error && /* @__PURE__ */ jsx("div", { style: errorBannerStyle5(tokens), children: error })
|
|
@@ -6114,6 +6215,7 @@ var DEPOSIT_SCREENS = /* @__PURE__ */ new Set([
|
|
|
6114
6215
|
"processing",
|
|
6115
6216
|
"success"
|
|
6116
6217
|
]);
|
|
6218
|
+
var DEFAULT_MIN_DEPOSIT_USD = 0.25;
|
|
6117
6219
|
function getFlowPhase(screen, phase) {
|
|
6118
6220
|
if (LINK_SCREENS.has(screen)) return "link";
|
|
6119
6221
|
if (DEPOSIT_SCREENS.has(screen)) return "deposit";
|
|
@@ -6322,6 +6424,7 @@ function StepRendererContent({
|
|
|
6322
6424
|
}
|
|
6323
6425
|
case "deposit": {
|
|
6324
6426
|
const parsedAmt = depositAmount != null ? depositAmount : 5;
|
|
6427
|
+
const minDepositFloor = depositAmount != null ? depositAmount : DEFAULT_MIN_DEPOSIT_USD;
|
|
6325
6428
|
return /* @__PURE__ */ jsx(
|
|
6326
6429
|
DepositScreen,
|
|
6327
6430
|
{
|
|
@@ -6345,7 +6448,8 @@ function StepRendererContent({
|
|
|
6345
6448
|
onAddProvider: () => handlers.onSetPhase({ step: "wallet-picker", reason: "switch" }),
|
|
6346
6449
|
onSelectToken: handlers.onSelectToken,
|
|
6347
6450
|
selectedSourceLabel,
|
|
6348
|
-
selectedTokenSymbol: selectedSource?.token.symbol
|
|
6451
|
+
selectedTokenSymbol: selectedSource?.token.symbol,
|
|
6452
|
+
minDepositFloor
|
|
6349
6453
|
}
|
|
6350
6454
|
);
|
|
6351
6455
|
}
|
|
@@ -6871,8 +6975,9 @@ function useTransferHandlers(deps) {
|
|
|
6871
6975
|
dispatch({ type: "ACCOUNTS_RELOADED", accounts: accts, providers: prov, defaults });
|
|
6872
6976
|
}, [getAccessToken, activeCredentialId, selectedAccountId, apiBaseUrl, depositAmount, dispatch]);
|
|
6873
6977
|
const handlePay = useCallback(async (payAmount, sourceOverrides) => {
|
|
6874
|
-
|
|
6875
|
-
|
|
6978
|
+
const minUsd = effectiveMinTransferAmountUsd(depositAmount);
|
|
6979
|
+
if (isNaN(payAmount) || payAmount < minUsd) {
|
|
6980
|
+
dispatch({ type: "SET_ERROR", error: `Minimum amount is $${minUsd.toFixed(2)}.` });
|
|
6876
6981
|
return;
|
|
6877
6982
|
}
|
|
6878
6983
|
if (!sourceOverrides?.sourceId && !sourceId) {
|
|
@@ -6951,7 +7056,8 @@ function useTransferHandlers(deps) {
|
|
|
6951
7056
|
onComplete,
|
|
6952
7057
|
idempotencyKey,
|
|
6953
7058
|
merchantAuthorization,
|
|
6954
|
-
dispatch
|
|
7059
|
+
dispatch,
|
|
7060
|
+
depositAmount
|
|
6955
7061
|
]);
|
|
6956
7062
|
const handleConfirmSign = useCallback(async () => {
|
|
6957
7063
|
const t = transfer ?? polling.transfer;
|
|
@@ -7903,7 +8009,9 @@ function useOneTapSetupHandlers(deps) {
|
|
|
7903
8009
|
authExecutor,
|
|
7904
8010
|
selectSourceChainName,
|
|
7905
8011
|
selectSourceTokenSymbol,
|
|
7906
|
-
authorizationSessionIdForGuest
|
|
8012
|
+
authorizationSessionIdForGuest,
|
|
8013
|
+
guestPostPayPreauth,
|
|
8014
|
+
guestPreauthAccountId
|
|
7907
8015
|
} = deps;
|
|
7908
8016
|
const [savingOneTapLimit, setSavingOneTapLimit] = useState(false);
|
|
7909
8017
|
const handleSetupOneTap = useCallback(async (limit) => {
|
|
@@ -7920,6 +8028,19 @@ function useOneTapSetupHandlers(deps) {
|
|
|
7920
8028
|
if (!token) throw new Error("Not authenticated");
|
|
7921
8029
|
await updateUserConfig(apiBaseUrl, token, { defaultAllowance: limit });
|
|
7922
8030
|
}
|
|
8031
|
+
const willResolveSession = authExecutor.pendingSelectSource != null || authExecutor.pendingOneTapSetup != null;
|
|
8032
|
+
if (guestPostPayPreauth && willResolveSession) {
|
|
8033
|
+
dispatch({ type: "REQUEST_LOGIN" });
|
|
8034
|
+
if (guestPreauthAccountId != null) {
|
|
8035
|
+
const intent = {
|
|
8036
|
+
step: "wallet-setup",
|
|
8037
|
+
mobile: null,
|
|
8038
|
+
accountId: guestPreauthAccountId,
|
|
8039
|
+
guestDesktopExtension: true
|
|
8040
|
+
};
|
|
8041
|
+
dispatch({ type: "SET_USER_INTENT", intent });
|
|
8042
|
+
}
|
|
8043
|
+
}
|
|
7923
8044
|
if (authExecutor.pendingSelectSource) {
|
|
7924
8045
|
const action = authExecutor.pendingSelectSource;
|
|
7925
8046
|
const recommended = action.metadata?.recommended;
|
|
@@ -7939,7 +8060,9 @@ function useOneTapSetupHandlers(deps) {
|
|
|
7939
8060
|
} else if (authExecutor.pendingOneTapSetup) {
|
|
7940
8061
|
authExecutor.resolveOneTapSetup();
|
|
7941
8062
|
}
|
|
7942
|
-
|
|
8063
|
+
if (!guestPostPayPreauth || !willResolveSession) {
|
|
8064
|
+
dispatch({ type: "SET_USER_INTENT", intent: { step: "deposit" } });
|
|
8065
|
+
}
|
|
7943
8066
|
} catch (err) {
|
|
7944
8067
|
captureException(err);
|
|
7945
8068
|
dispatch({
|
|
@@ -7956,7 +8079,9 @@ function useOneTapSetupHandlers(deps) {
|
|
|
7956
8079
|
dispatch,
|
|
7957
8080
|
selectSourceChainName,
|
|
7958
8081
|
selectSourceTokenSymbol,
|
|
7959
|
-
authorizationSessionIdForGuest
|
|
8082
|
+
authorizationSessionIdForGuest,
|
|
8083
|
+
guestPostPayPreauth,
|
|
8084
|
+
guestPreauthAccountId
|
|
7960
8085
|
]);
|
|
7961
8086
|
return {
|
|
7962
8087
|
handleSetupOneTap,
|
|
@@ -8379,37 +8504,6 @@ function useDataLoadEffect(deps) {
|
|
|
8379
8504
|
deps
|
|
8380
8505
|
]);
|
|
8381
8506
|
}
|
|
8382
|
-
|
|
8383
|
-
// src/processingStatus.ts
|
|
8384
|
-
var PROCESSING_TIMEOUT_MS = 18e4;
|
|
8385
|
-
function resolvePreferredTransfer(polledTransfer, localTransfer) {
|
|
8386
|
-
return polledTransfer ?? localTransfer;
|
|
8387
|
-
}
|
|
8388
|
-
function getTransferStatus(polledTransfer, localTransfer) {
|
|
8389
|
-
const transfer = resolvePreferredTransfer(polledTransfer, localTransfer);
|
|
8390
|
-
return transfer?.status ?? "UNKNOWN";
|
|
8391
|
-
}
|
|
8392
|
-
function hasProcessingTimedOut(processingStartedAtMs, nowMs) {
|
|
8393
|
-
if (!processingStartedAtMs) return false;
|
|
8394
|
-
return nowMs - processingStartedAtMs >= PROCESSING_TIMEOUT_MS;
|
|
8395
|
-
}
|
|
8396
|
-
var STATUS_DISPLAY_LABELS = {
|
|
8397
|
-
CREATED: "created",
|
|
8398
|
-
AUTHORIZED: "authorized",
|
|
8399
|
-
SENDING: "sending",
|
|
8400
|
-
SENT: "confirming delivery",
|
|
8401
|
-
COMPLETED: "completed",
|
|
8402
|
-
FAILED: "failed"
|
|
8403
|
-
};
|
|
8404
|
-
function getStatusDisplayLabel(status) {
|
|
8405
|
-
return STATUS_DISPLAY_LABELS[status] ?? status;
|
|
8406
|
-
}
|
|
8407
|
-
function buildProcessingTimeoutMessage(status) {
|
|
8408
|
-
const label = getStatusDisplayLabel(status);
|
|
8409
|
-
return `Payment is taking longer than expected (status: ${label}). Please try again.`;
|
|
8410
|
-
}
|
|
8411
|
-
|
|
8412
|
-
// src/hooks/useProcessingEffect.ts
|
|
8413
8507
|
function useProcessingEffect(deps) {
|
|
8414
8508
|
const {
|
|
8415
8509
|
state,
|
|
@@ -8445,7 +8539,7 @@ function useProcessingEffect(deps) {
|
|
|
8445
8539
|
reloadAccounts
|
|
8446
8540
|
]);
|
|
8447
8541
|
useEffect(() => {
|
|
8448
|
-
const isProcessing = state.creatingTransfer ||
|
|
8542
|
+
const isProcessing = state.creatingTransfer || isTransferAwaitingCompletion(state.transfer);
|
|
8449
8543
|
if (!isProcessing) {
|
|
8450
8544
|
processingStartedAtRef.current = null;
|
|
8451
8545
|
return;
|
|
@@ -9016,6 +9110,15 @@ function BlinkPaymentInner({
|
|
|
9016
9110
|
guestSessionToken: state.guestSessionToken,
|
|
9017
9111
|
selectedProviderId: state.selectedProviderId
|
|
9018
9112
|
});
|
|
9113
|
+
const guestPostPayPreauth = useMemo(
|
|
9114
|
+
() => !!state.guestPreauthSessionId && state.isGuestFlow || state.guestPreauthorizing && isDesktop,
|
|
9115
|
+
[
|
|
9116
|
+
state.guestPreauthSessionId,
|
|
9117
|
+
state.isGuestFlow,
|
|
9118
|
+
state.guestPreauthorizing,
|
|
9119
|
+
isDesktop
|
|
9120
|
+
]
|
|
9121
|
+
);
|
|
9019
9122
|
const oneTapSetup = useOneTapSetupHandlers({
|
|
9020
9123
|
dispatch,
|
|
9021
9124
|
getAccessToken,
|
|
@@ -9023,7 +9126,9 @@ function BlinkPaymentInner({
|
|
|
9023
9126
|
authExecutor,
|
|
9024
9127
|
selectSourceChainName: sourceSelection.selectSourceChainName,
|
|
9025
9128
|
selectSourceTokenSymbol: sourceSelection.selectSourceTokenSymbol,
|
|
9026
|
-
authorizationSessionIdForGuest: state.guestPreauthSessionId
|
|
9129
|
+
authorizationSessionIdForGuest: state.guestPreauthSessionId,
|
|
9130
|
+
guestPostPayPreauth,
|
|
9131
|
+
guestPreauthAccountId: state.guestPreauthAccountId
|
|
9027
9132
|
});
|
|
9028
9133
|
const guestTransfer = useGuestTransferHandlers({
|
|
9029
9134
|
dispatch,
|