@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.cjs
CHANGED
|
@@ -1850,7 +1850,10 @@ function useTransferSigning(pollIntervalMs = 2e3, options) {
|
|
|
1850
1850
|
// src/paymentHelpers.ts
|
|
1851
1851
|
var ACTIVE_CREDENTIAL_STORAGE_KEY = "blink_active_credential_id";
|
|
1852
1852
|
var MOBILE_FLOW_STORAGE_KEY = "blink_mobile_flow";
|
|
1853
|
-
var
|
|
1853
|
+
var DEFAULT_MIN_SEND_AMOUNT_USD = 0.25;
|
|
1854
|
+
function effectiveMinTransferAmountUsd(depositAmount) {
|
|
1855
|
+
return depositAmount != null ? depositAmount : DEFAULT_MIN_SEND_AMOUNT_USD;
|
|
1856
|
+
}
|
|
1854
1857
|
function persistMobileFlowState(data) {
|
|
1855
1858
|
try {
|
|
1856
1859
|
sessionStorage.setItem(MOBILE_FLOW_STORAGE_KEY, JSON.stringify(data));
|
|
@@ -1996,14 +1999,47 @@ function shouldUseWalletConnector(options) {
|
|
|
1996
1999
|
return options.useWalletConnector ?? !isMobileUserAgent(options.userAgent);
|
|
1997
2000
|
}
|
|
1998
2001
|
|
|
2002
|
+
// src/processingStatus.ts
|
|
2003
|
+
var PROCESSING_TIMEOUT_MS = 18e4;
|
|
2004
|
+
var TERMINAL_TRANSFER_STATUSES = /* @__PURE__ */ new Set(["COMPLETED", "FAILED", "EXPIRED"]);
|
|
2005
|
+
function isTerminalTransferStatus(status) {
|
|
2006
|
+
return TERMINAL_TRANSFER_STATUSES.has(status);
|
|
2007
|
+
}
|
|
2008
|
+
function isTransferAwaitingCompletion(transfer) {
|
|
2009
|
+
if (!transfer) return false;
|
|
2010
|
+
return !isTerminalTransferStatus(transfer.status);
|
|
2011
|
+
}
|
|
2012
|
+
function resolvePreferredTransfer(polledTransfer, localTransfer) {
|
|
2013
|
+
return polledTransfer ?? localTransfer;
|
|
2014
|
+
}
|
|
2015
|
+
function getTransferStatus(polledTransfer, localTransfer) {
|
|
2016
|
+
const transfer = resolvePreferredTransfer(polledTransfer, localTransfer);
|
|
2017
|
+
return transfer?.status ?? "UNKNOWN";
|
|
2018
|
+
}
|
|
2019
|
+
function hasProcessingTimedOut(processingStartedAtMs, nowMs) {
|
|
2020
|
+
if (!processingStartedAtMs) return false;
|
|
2021
|
+
return nowMs - processingStartedAtMs >= PROCESSING_TIMEOUT_MS;
|
|
2022
|
+
}
|
|
2023
|
+
var STATUS_DISPLAY_LABELS = {
|
|
2024
|
+
CREATED: "created",
|
|
2025
|
+
AUTHORIZED: "authorized",
|
|
2026
|
+
SENDING: "sending",
|
|
2027
|
+
SENT: "confirming delivery",
|
|
2028
|
+
COMPLETED: "completed",
|
|
2029
|
+
FAILED: "failed"
|
|
2030
|
+
};
|
|
2031
|
+
function getStatusDisplayLabel(status) {
|
|
2032
|
+
return STATUS_DISPLAY_LABELS[status] ?? status;
|
|
2033
|
+
}
|
|
2034
|
+
function buildProcessingTimeoutMessage(status) {
|
|
2035
|
+
const label = getStatusDisplayLabel(status);
|
|
2036
|
+
return `Payment is taking longer than expected (status: ${label}). Please try again.`;
|
|
2037
|
+
}
|
|
2038
|
+
|
|
1999
2039
|
// src/paymentResolvePhase.ts
|
|
2000
2040
|
function hasActiveWallet(accounts) {
|
|
2001
2041
|
return accounts.some((a) => a.wallets.some((w) => w.status === "ACTIVE"));
|
|
2002
2042
|
}
|
|
2003
|
-
function isTransferInFlight(transfer) {
|
|
2004
|
-
if (!transfer) return false;
|
|
2005
|
-
return ["CREATED", "SENDING", "SENT"].includes(transfer.status);
|
|
2006
|
-
}
|
|
2007
2043
|
function isGuestPreauthCompletedTransferPinPhase(phase) {
|
|
2008
2044
|
switch (phase.step) {
|
|
2009
2045
|
case "completed":
|
|
@@ -2025,77 +2061,142 @@ function isGuestPreauthCompletedTransferPinPhase(phase) {
|
|
|
2025
2061
|
}
|
|
2026
2062
|
function resolvePhase(state) {
|
|
2027
2063
|
const p = state.phase;
|
|
2028
|
-
|
|
2029
|
-
|
|
2030
|
-
|
|
2031
|
-
|
|
2032
|
-
|
|
2033
|
-
|
|
2034
|
-
|
|
2035
|
-
|
|
2036
|
-
|
|
2037
|
-
|
|
2038
|
-
|
|
2039
|
-
|
|
2040
|
-
|
|
2041
|
-
|
|
2042
|
-
|
|
2043
|
-
|
|
2044
|
-
|
|
2045
|
-
|
|
2046
|
-
|
|
2047
|
-
|
|
2048
|
-
|
|
2049
|
-
|
|
2050
|
-
|
|
2064
|
+
const transferCompleted = state.transfer?.status === "COMPLETED";
|
|
2065
|
+
const needsPasskeyBootstrap = state.privyAuthenticated && !state.activeCredentialId;
|
|
2066
|
+
const guestPreauthPin = transferCompleted && state.guestPreauthorizing && !state.verificationTarget && isGuestPreauthCompletedTransferPinPhase(p);
|
|
2067
|
+
const guestPostPayLogin = transferCompleted && state.isGuestFlow && state.guestPreauthSessionId != null && !state.guestPreauthorizing && !state.verificationTarget && !state.privyAuthenticated;
|
|
2068
|
+
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");
|
|
2069
|
+
const guestTokenPicker = state.isGuestFlow && state.selectedProviderId != null && !state.transfer && !state.guestPreauthAccountId;
|
|
2070
|
+
const walletPickerSwitch = p.step === "wallet-picker" && p.reason === "switch" && !state.creatingTransfer && !(state.mobileFlow && state.deeplinkUri);
|
|
2071
|
+
const passkeyBlock = state.passkeyConfigLoaded && !state.activeCredentialId;
|
|
2072
|
+
const passkeyVerify = passkeyBlock && state.knownCredentialIds.length > 0 && state.passkeyPopupNeeded;
|
|
2073
|
+
const c1 = state.guestPreauthSetupCompletePending && state.privyReady && state.privyAuthenticated;
|
|
2074
|
+
const c2 = !c1 && guestPreauthPin;
|
|
2075
|
+
const c3 = !c1 && !c2 && guestPostPayLogin;
|
|
2076
|
+
const c4 = !c1 && !c2 && !c3 && transferCompleted && !state.verificationTarget && !needsPasskeyBootstrap;
|
|
2077
|
+
const c5 = !c1 && !c2 && !c3 && !c4 && state.transfer?.status === "FAILED";
|
|
2078
|
+
const c6 = !c1 && !c2 && !c3 && !c4 && !c5 && (state.creatingTransfer || isTransferAwaitingCompletion(state.transfer));
|
|
2079
|
+
const c7 = !c1 && !c2 && !c3 && !c4 && !c5 && !c6 && pinSubflow;
|
|
2080
|
+
const c8 = !c1 && !c2 && !c3 && !c4 && !c5 && !c6 && !c7 && state.mobileFlow && state.deeplinkUri != null;
|
|
2081
|
+
const c9 = !c1 && !c2 && !c3 && !c4 && !c5 && !c6 && !c7 && !c8 && p.step === "wallet-setup" && p.mobile == null && state.guestPreauthorizing;
|
|
2082
|
+
const c10 = !c1 && !c2 && !c3 && !c4 && !c5 && !c6 && !c7 && !c8 && !c9 && guestTokenPicker;
|
|
2083
|
+
const c11 = !c1 && !c2 && !c3 && !c4 && !c5 && !c6 && !c7 && !c8 && !c9 && !c10 && walletPickerSwitch;
|
|
2084
|
+
const c12 = !c1 && !c2 && !c3 && !c4 && !c5 && !c6 && !c7 && !c8 && !c9 && !c10 && !c11 && !state.privyReady;
|
|
2085
|
+
const c13 = !c1 && !c2 && !c3 && !c4 && !c5 && !c6 && !c7 && !c8 && !c9 && !c10 && !c11 && !c12 && state.privyAuthenticated && !state.activeCredentialId && !state.passkeyConfigLoaded;
|
|
2086
|
+
const c14 = !c1 && !c2 && !c3 && !c4 && !c5 && !c6 && !c7 && !c8 && !c9 && !c10 && !c11 && !c12 && !c13 && state.verificationTarget != null && !state.privyAuthenticated;
|
|
2087
|
+
const c15 = !c1 && !c2 && !c3 && !c4 && !c5 && !c6 && !c7 && !c8 && !c9 && !c10 && !c11 && !c12 && !c13 && !c14 && state.loginRequested;
|
|
2088
|
+
const c16 = !c1 && !c2 && !c3 && !c4 && !c5 && !c6 && !c7 && !c8 && !c9 && !c10 && !c11 && !c12 && !c13 && !c14 && !c15 && passkeyVerify;
|
|
2089
|
+
const c17 = !c1 && !c2 && !c3 && !c4 && !c5 && !c6 && !c7 && !c8 && !c9 && !c10 && !c11 && !c12 && !c13 && !c14 && !c15 && !c16 && passkeyBlock;
|
|
2090
|
+
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);
|
|
2091
|
+
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;
|
|
2092
|
+
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;
|
|
2093
|
+
const c21 = !c1 && !c2 && !c3 && !c4 && !c5 && !c6 && !c7 && !c8 && !c9 && !c10 && !c11 && !c12 && !c13 && !c14 && !c15 && !c16 && !c17 && !c18 && !c19 && !c20 && state.isGuestFlow;
|
|
2094
|
+
const flags = [
|
|
2095
|
+
c1,
|
|
2096
|
+
c2,
|
|
2097
|
+
c3,
|
|
2098
|
+
c4,
|
|
2099
|
+
c5,
|
|
2100
|
+
c6,
|
|
2101
|
+
c7,
|
|
2102
|
+
c8,
|
|
2103
|
+
c9,
|
|
2104
|
+
c10,
|
|
2105
|
+
c11,
|
|
2106
|
+
c12,
|
|
2107
|
+
c13,
|
|
2108
|
+
c14,
|
|
2109
|
+
c15,
|
|
2110
|
+
c16,
|
|
2111
|
+
c17,
|
|
2112
|
+
c18,
|
|
2113
|
+
c19,
|
|
2114
|
+
c20,
|
|
2115
|
+
c21
|
|
2116
|
+
];
|
|
2117
|
+
const matchCount = flags.filter(Boolean).length;
|
|
2118
|
+
if (matchCount > 1) {
|
|
2119
|
+
console.error("resolvePhase: multiple exclusive branches matched", {
|
|
2120
|
+
flags: {
|
|
2121
|
+
c1,
|
|
2122
|
+
c2,
|
|
2123
|
+
c3,
|
|
2124
|
+
c4,
|
|
2125
|
+
c5,
|
|
2126
|
+
c6,
|
|
2127
|
+
c7,
|
|
2128
|
+
c8,
|
|
2129
|
+
c9,
|
|
2130
|
+
c10,
|
|
2131
|
+
c11,
|
|
2132
|
+
c12,
|
|
2133
|
+
c13,
|
|
2134
|
+
c14,
|
|
2135
|
+
c15,
|
|
2136
|
+
c16,
|
|
2137
|
+
c17,
|
|
2138
|
+
c18,
|
|
2139
|
+
c19,
|
|
2140
|
+
c20,
|
|
2141
|
+
c21
|
|
2142
|
+
}
|
|
2143
|
+
});
|
|
2051
2144
|
}
|
|
2052
|
-
|
|
2053
|
-
|
|
2145
|
+
let resolved;
|
|
2146
|
+
if (c1) {
|
|
2147
|
+
resolved = { step: "guest-setup-complete" };
|
|
2148
|
+
} else if (c2) {
|
|
2149
|
+
resolved = p;
|
|
2150
|
+
} else if (c3) {
|
|
2151
|
+
resolved = { step: "login" };
|
|
2152
|
+
} else if (c4) {
|
|
2153
|
+
resolved = { step: "completed", transfer: state.transfer };
|
|
2154
|
+
} else if (c5) {
|
|
2155
|
+
resolved = {
|
|
2156
|
+
step: "failed",
|
|
2157
|
+
transfer: state.transfer,
|
|
2158
|
+
error: state.error ?? "Transfer failed."
|
|
2159
|
+
};
|
|
2160
|
+
} else if (c6) {
|
|
2161
|
+
resolved = { step: "processing", transfer: state.transfer };
|
|
2162
|
+
} else if (c7) {
|
|
2163
|
+
resolved = p;
|
|
2164
|
+
} else if (c8) {
|
|
2165
|
+
resolved = {
|
|
2054
2166
|
step: "wallet-setup",
|
|
2055
2167
|
mobile: { deeplinkUri: state.deeplinkUri, providerId: state.selectedProviderId },
|
|
2056
2168
|
accountId: null
|
|
2057
2169
|
};
|
|
2170
|
+
} else if (c9) {
|
|
2171
|
+
resolved = p;
|
|
2172
|
+
} else if (c10) {
|
|
2173
|
+
resolved = { step: "guest-token-picker" };
|
|
2174
|
+
} else if (c11) {
|
|
2175
|
+
resolved = p;
|
|
2176
|
+
} else if (c12) {
|
|
2177
|
+
resolved = { step: "initializing" };
|
|
2178
|
+
} else if (c13) {
|
|
2179
|
+
resolved = { step: "initializing" };
|
|
2180
|
+
} else if (c14) {
|
|
2181
|
+
resolved = { step: "otp-verify", target: state.verificationTarget };
|
|
2182
|
+
} else if (c15) {
|
|
2183
|
+
resolved = { step: "login" };
|
|
2184
|
+
} else if (c16) {
|
|
2185
|
+
resolved = { step: "passkey-verify" };
|
|
2186
|
+
} else if (c17) {
|
|
2187
|
+
resolved = { step: "passkey-create", popupFallback: state.passkeyPopupNeeded };
|
|
2188
|
+
} else if (c18) {
|
|
2189
|
+
resolved = { step: "data-loading" };
|
|
2190
|
+
} else if (c19) {
|
|
2191
|
+
resolved = { step: "wallet-picker", reason: "link" };
|
|
2192
|
+
} else if (c20) {
|
|
2193
|
+
resolved = { step: "deposit" };
|
|
2194
|
+
} else if (c21) {
|
|
2195
|
+
resolved = { step: "wallet-picker", reason: "guest-entry" };
|
|
2196
|
+
} else {
|
|
2197
|
+
resolved = { step: "wallet-picker", reason: "entry" };
|
|
2058
2198
|
}
|
|
2059
|
-
|
|
2060
|
-
return p;
|
|
2061
|
-
}
|
|
2062
|
-
if (state.isGuestFlow && state.selectedProviderId != null && !state.transfer && !state.guestPreauthAccountId) {
|
|
2063
|
-
return { step: "guest-token-picker" };
|
|
2064
|
-
}
|
|
2065
|
-
if (p.step === "wallet-picker" && !state.creatingTransfer && !(state.mobileFlow && state.deeplinkUri)) {
|
|
2066
|
-
return p;
|
|
2067
|
-
}
|
|
2068
|
-
if (!state.privyReady) {
|
|
2069
|
-
return { step: "initializing" };
|
|
2070
|
-
}
|
|
2071
|
-
if (state.privyAuthenticated && !state.activeCredentialId && !state.passkeyConfigLoaded) {
|
|
2072
|
-
return { step: "initializing" };
|
|
2073
|
-
}
|
|
2074
|
-
if (state.verificationTarget && !state.privyAuthenticated) {
|
|
2075
|
-
return { step: "otp-verify", target: state.verificationTarget };
|
|
2076
|
-
}
|
|
2077
|
-
if (state.loginRequested) {
|
|
2078
|
-
return { step: "login" };
|
|
2079
|
-
}
|
|
2080
|
-
if (state.passkeyConfigLoaded && !state.activeCredentialId) {
|
|
2081
|
-
if (state.knownCredentialIds.length > 0 && state.passkeyPopupNeeded) {
|
|
2082
|
-
return { step: "passkey-verify" };
|
|
2083
|
-
}
|
|
2084
|
-
return { step: "passkey-create", popupFallback: state.passkeyPopupNeeded };
|
|
2085
|
-
}
|
|
2086
|
-
if (state.loadingData && state.activeCredentialId && hasActiveWallet(state.accounts)) {
|
|
2087
|
-
return { step: "data-loading" };
|
|
2088
|
-
}
|
|
2089
|
-
if (state.activeCredentialId && !hasActiveWallet(state.accounts) && !state.mobileFlow) {
|
|
2090
|
-
return { step: "wallet-picker", reason: "link" };
|
|
2091
|
-
}
|
|
2092
|
-
if (state.activeCredentialId && hasActiveWallet(state.accounts) && !state.loadingData) {
|
|
2093
|
-
return { step: "deposit" };
|
|
2094
|
-
}
|
|
2095
|
-
if (state.isGuestFlow) {
|
|
2096
|
-
return { step: "wallet-picker", reason: "guest-entry" };
|
|
2097
|
-
}
|
|
2098
|
-
return { step: "wallet-picker", reason: "entry" };
|
|
2199
|
+
return resolved;
|
|
2099
2200
|
}
|
|
2100
2201
|
|
|
2101
2202
|
// src/paymentReducer.ts
|
|
@@ -4361,13 +4462,13 @@ var waitHintStyle = (color) => ({
|
|
|
4361
4462
|
color,
|
|
4362
4463
|
margin: 0
|
|
4363
4464
|
});
|
|
4364
|
-
var MIN_DEPOSIT = 0.25;
|
|
4365
4465
|
function DepositScreen({
|
|
4366
4466
|
merchantName,
|
|
4367
4467
|
availableBalance,
|
|
4368
4468
|
remainingLimit,
|
|
4369
4469
|
tokenCount,
|
|
4370
4470
|
initialAmount,
|
|
4471
|
+
minDepositFloor,
|
|
4371
4472
|
processing,
|
|
4372
4473
|
error,
|
|
4373
4474
|
onDeposit,
|
|
@@ -4403,9 +4504,9 @@ function DepositScreen({
|
|
|
4403
4504
|
const selectedProviderName = selectedAccount?.name ?? "Wallet";
|
|
4404
4505
|
const selectedProviderLogo = KNOWN_LOGOS[selectedProviderName.toLowerCase()];
|
|
4405
4506
|
const totalAccountBalance = selectedAccount ? selectedAccount.wallets.reduce((sum, w) => sum + w.balance.available.amount, 0) : availableBalance;
|
|
4406
|
-
const isLowBalance = availableBalance <
|
|
4507
|
+
const isLowBalance = availableBalance < minDepositFloor;
|
|
4407
4508
|
const exceedsLimit = remainingLimit != null && amount > remainingLimit && !isLowBalance;
|
|
4408
|
-
const canDeposit = amount >=
|
|
4509
|
+
const canDeposit = amount >= minDepositFloor && !exceedsLimit && !isLowBalance && !processing;
|
|
4409
4510
|
return /* @__PURE__ */ jsxRuntime.jsxs(
|
|
4410
4511
|
ScreenLayout,
|
|
4411
4512
|
{
|
|
@@ -4540,7 +4641,7 @@ function DepositScreen({
|
|
|
4540
4641
|
"Your wallet balance is $",
|
|
4541
4642
|
availableBalance.toFixed(2),
|
|
4542
4643
|
" \u2014 you need at least $",
|
|
4543
|
-
|
|
4644
|
+
minDepositFloor.toFixed(2),
|
|
4544
4645
|
" to deposit via One-Tap."
|
|
4545
4646
|
] }),
|
|
4546
4647
|
error && /* @__PURE__ */ jsxRuntime.jsx("div", { style: errorBannerStyle5(tokens), children: error })
|
|
@@ -6117,6 +6218,7 @@ var DEPOSIT_SCREENS = /* @__PURE__ */ new Set([
|
|
|
6117
6218
|
"processing",
|
|
6118
6219
|
"success"
|
|
6119
6220
|
]);
|
|
6221
|
+
var DEFAULT_MIN_DEPOSIT_USD = 0.25;
|
|
6120
6222
|
function getFlowPhase(screen, phase) {
|
|
6121
6223
|
if (LINK_SCREENS.has(screen)) return "link";
|
|
6122
6224
|
if (DEPOSIT_SCREENS.has(screen)) return "deposit";
|
|
@@ -6325,6 +6427,7 @@ function StepRendererContent({
|
|
|
6325
6427
|
}
|
|
6326
6428
|
case "deposit": {
|
|
6327
6429
|
const parsedAmt = depositAmount != null ? depositAmount : 5;
|
|
6430
|
+
const minDepositFloor = depositAmount != null ? depositAmount : DEFAULT_MIN_DEPOSIT_USD;
|
|
6328
6431
|
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
6329
6432
|
DepositScreen,
|
|
6330
6433
|
{
|
|
@@ -6348,7 +6451,8 @@ function StepRendererContent({
|
|
|
6348
6451
|
onAddProvider: () => handlers.onSetPhase({ step: "wallet-picker", reason: "switch" }),
|
|
6349
6452
|
onSelectToken: handlers.onSelectToken,
|
|
6350
6453
|
selectedSourceLabel,
|
|
6351
|
-
selectedTokenSymbol: selectedSource?.token.symbol
|
|
6454
|
+
selectedTokenSymbol: selectedSource?.token.symbol,
|
|
6455
|
+
minDepositFloor
|
|
6352
6456
|
}
|
|
6353
6457
|
);
|
|
6354
6458
|
}
|
|
@@ -6874,8 +6978,9 @@ function useTransferHandlers(deps) {
|
|
|
6874
6978
|
dispatch({ type: "ACCOUNTS_RELOADED", accounts: accts, providers: prov, defaults });
|
|
6875
6979
|
}, [getAccessToken, activeCredentialId, selectedAccountId, apiBaseUrl, depositAmount, dispatch]);
|
|
6876
6980
|
const handlePay = react.useCallback(async (payAmount, sourceOverrides) => {
|
|
6877
|
-
|
|
6878
|
-
|
|
6981
|
+
const minUsd = effectiveMinTransferAmountUsd(depositAmount);
|
|
6982
|
+
if (isNaN(payAmount) || payAmount < minUsd) {
|
|
6983
|
+
dispatch({ type: "SET_ERROR", error: `Minimum amount is $${minUsd.toFixed(2)}.` });
|
|
6879
6984
|
return;
|
|
6880
6985
|
}
|
|
6881
6986
|
if (!sourceOverrides?.sourceId && !sourceId) {
|
|
@@ -6954,7 +7059,8 @@ function useTransferHandlers(deps) {
|
|
|
6954
7059
|
onComplete,
|
|
6955
7060
|
idempotencyKey,
|
|
6956
7061
|
merchantAuthorization,
|
|
6957
|
-
dispatch
|
|
7062
|
+
dispatch,
|
|
7063
|
+
depositAmount
|
|
6958
7064
|
]);
|
|
6959
7065
|
const handleConfirmSign = react.useCallback(async () => {
|
|
6960
7066
|
const t = transfer ?? polling.transfer;
|
|
@@ -7906,7 +8012,9 @@ function useOneTapSetupHandlers(deps) {
|
|
|
7906
8012
|
authExecutor,
|
|
7907
8013
|
selectSourceChainName,
|
|
7908
8014
|
selectSourceTokenSymbol,
|
|
7909
|
-
authorizationSessionIdForGuest
|
|
8015
|
+
authorizationSessionIdForGuest,
|
|
8016
|
+
guestPostPayPreauth,
|
|
8017
|
+
guestPreauthAccountId
|
|
7910
8018
|
} = deps;
|
|
7911
8019
|
const [savingOneTapLimit, setSavingOneTapLimit] = react.useState(false);
|
|
7912
8020
|
const handleSetupOneTap = react.useCallback(async (limit) => {
|
|
@@ -7923,6 +8031,19 @@ function useOneTapSetupHandlers(deps) {
|
|
|
7923
8031
|
if (!token) throw new Error("Not authenticated");
|
|
7924
8032
|
await updateUserConfig(apiBaseUrl, token, { defaultAllowance: limit });
|
|
7925
8033
|
}
|
|
8034
|
+
const willResolveSession = authExecutor.pendingSelectSource != null || authExecutor.pendingOneTapSetup != null;
|
|
8035
|
+
if (guestPostPayPreauth && willResolveSession) {
|
|
8036
|
+
dispatch({ type: "REQUEST_LOGIN" });
|
|
8037
|
+
if (guestPreauthAccountId != null) {
|
|
8038
|
+
const intent = {
|
|
8039
|
+
step: "wallet-setup",
|
|
8040
|
+
mobile: null,
|
|
8041
|
+
accountId: guestPreauthAccountId,
|
|
8042
|
+
guestDesktopExtension: true
|
|
8043
|
+
};
|
|
8044
|
+
dispatch({ type: "SET_USER_INTENT", intent });
|
|
8045
|
+
}
|
|
8046
|
+
}
|
|
7926
8047
|
if (authExecutor.pendingSelectSource) {
|
|
7927
8048
|
const action = authExecutor.pendingSelectSource;
|
|
7928
8049
|
const recommended = action.metadata?.recommended;
|
|
@@ -7942,7 +8063,9 @@ function useOneTapSetupHandlers(deps) {
|
|
|
7942
8063
|
} else if (authExecutor.pendingOneTapSetup) {
|
|
7943
8064
|
authExecutor.resolveOneTapSetup();
|
|
7944
8065
|
}
|
|
7945
|
-
|
|
8066
|
+
if (!guestPostPayPreauth || !willResolveSession) {
|
|
8067
|
+
dispatch({ type: "SET_USER_INTENT", intent: { step: "deposit" } });
|
|
8068
|
+
}
|
|
7946
8069
|
} catch (err) {
|
|
7947
8070
|
captureException(err);
|
|
7948
8071
|
dispatch({
|
|
@@ -7959,7 +8082,9 @@ function useOneTapSetupHandlers(deps) {
|
|
|
7959
8082
|
dispatch,
|
|
7960
8083
|
selectSourceChainName,
|
|
7961
8084
|
selectSourceTokenSymbol,
|
|
7962
|
-
authorizationSessionIdForGuest
|
|
8085
|
+
authorizationSessionIdForGuest,
|
|
8086
|
+
guestPostPayPreauth,
|
|
8087
|
+
guestPreauthAccountId
|
|
7963
8088
|
]);
|
|
7964
8089
|
return {
|
|
7965
8090
|
handleSetupOneTap,
|
|
@@ -8382,37 +8507,6 @@ function useDataLoadEffect(deps) {
|
|
|
8382
8507
|
deps
|
|
8383
8508
|
]);
|
|
8384
8509
|
}
|
|
8385
|
-
|
|
8386
|
-
// src/processingStatus.ts
|
|
8387
|
-
var PROCESSING_TIMEOUT_MS = 18e4;
|
|
8388
|
-
function resolvePreferredTransfer(polledTransfer, localTransfer) {
|
|
8389
|
-
return polledTransfer ?? localTransfer;
|
|
8390
|
-
}
|
|
8391
|
-
function getTransferStatus(polledTransfer, localTransfer) {
|
|
8392
|
-
const transfer = resolvePreferredTransfer(polledTransfer, localTransfer);
|
|
8393
|
-
return transfer?.status ?? "UNKNOWN";
|
|
8394
|
-
}
|
|
8395
|
-
function hasProcessingTimedOut(processingStartedAtMs, nowMs) {
|
|
8396
|
-
if (!processingStartedAtMs) return false;
|
|
8397
|
-
return nowMs - processingStartedAtMs >= PROCESSING_TIMEOUT_MS;
|
|
8398
|
-
}
|
|
8399
|
-
var STATUS_DISPLAY_LABELS = {
|
|
8400
|
-
CREATED: "created",
|
|
8401
|
-
AUTHORIZED: "authorized",
|
|
8402
|
-
SENDING: "sending",
|
|
8403
|
-
SENT: "confirming delivery",
|
|
8404
|
-
COMPLETED: "completed",
|
|
8405
|
-
FAILED: "failed"
|
|
8406
|
-
};
|
|
8407
|
-
function getStatusDisplayLabel(status) {
|
|
8408
|
-
return STATUS_DISPLAY_LABELS[status] ?? status;
|
|
8409
|
-
}
|
|
8410
|
-
function buildProcessingTimeoutMessage(status) {
|
|
8411
|
-
const label = getStatusDisplayLabel(status);
|
|
8412
|
-
return `Payment is taking longer than expected (status: ${label}). Please try again.`;
|
|
8413
|
-
}
|
|
8414
|
-
|
|
8415
|
-
// src/hooks/useProcessingEffect.ts
|
|
8416
8510
|
function useProcessingEffect(deps) {
|
|
8417
8511
|
const {
|
|
8418
8512
|
state,
|
|
@@ -8448,7 +8542,7 @@ function useProcessingEffect(deps) {
|
|
|
8448
8542
|
reloadAccounts
|
|
8449
8543
|
]);
|
|
8450
8544
|
react.useEffect(() => {
|
|
8451
|
-
const isProcessing = state.creatingTransfer ||
|
|
8545
|
+
const isProcessing = state.creatingTransfer || isTransferAwaitingCompletion(state.transfer);
|
|
8452
8546
|
if (!isProcessing) {
|
|
8453
8547
|
processingStartedAtRef.current = null;
|
|
8454
8548
|
return;
|
|
@@ -9019,6 +9113,15 @@ function BlinkPaymentInner({
|
|
|
9019
9113
|
guestSessionToken: state.guestSessionToken,
|
|
9020
9114
|
selectedProviderId: state.selectedProviderId
|
|
9021
9115
|
});
|
|
9116
|
+
const guestPostPayPreauth = react.useMemo(
|
|
9117
|
+
() => !!state.guestPreauthSessionId && state.isGuestFlow || state.guestPreauthorizing && isDesktop,
|
|
9118
|
+
[
|
|
9119
|
+
state.guestPreauthSessionId,
|
|
9120
|
+
state.isGuestFlow,
|
|
9121
|
+
state.guestPreauthorizing,
|
|
9122
|
+
isDesktop
|
|
9123
|
+
]
|
|
9124
|
+
);
|
|
9022
9125
|
const oneTapSetup = useOneTapSetupHandlers({
|
|
9023
9126
|
dispatch,
|
|
9024
9127
|
getAccessToken,
|
|
@@ -9026,7 +9129,9 @@ function BlinkPaymentInner({
|
|
|
9026
9129
|
authExecutor,
|
|
9027
9130
|
selectSourceChainName: sourceSelection.selectSourceChainName,
|
|
9028
9131
|
selectSourceTokenSymbol: sourceSelection.selectSourceTokenSymbol,
|
|
9029
|
-
authorizationSessionIdForGuest: state.guestPreauthSessionId
|
|
9132
|
+
authorizationSessionIdForGuest: state.guestPreauthSessionId,
|
|
9133
|
+
guestPostPayPreauth,
|
|
9134
|
+
guestPreauthAccountId: state.guestPreauthAccountId
|
|
9030
9135
|
});
|
|
9031
9136
|
const guestTransfer = useGuestTransferHandlers({
|
|
9032
9137
|
dispatch,
|