@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.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 MIN_SEND_AMOUNT_USD = 0.25;
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
- if (state.guestPreauthSetupCompletePending && state.privyReady && state.privyAuthenticated) {
2026
- return { step: "guest-setup-complete" };
2027
- }
2028
- if (state.transfer?.status === "COMPLETED" && state.guestPreauthorizing && !state.verificationTarget && isGuestPreauthCompletedTransferPinPhase(p)) {
2029
- return p;
2030
- }
2031
- if (state.transfer?.status === "COMPLETED" && state.isGuestFlow && state.guestPreauthSessionId && !state.guestPreauthorizing && !state.verificationTarget && !state.privyAuthenticated) {
2032
- return { step: "login" };
2033
- }
2034
- if (state.transfer?.status === "COMPLETED" && !state.verificationTarget) {
2035
- const needsPasskeyBootstrap = state.privyAuthenticated && !state.activeCredentialId;
2036
- if (!needsPasskeyBootstrap) {
2037
- return { step: "completed", transfer: state.transfer };
2038
- }
2039
- }
2040
- if (state.transfer?.status === "FAILED") {
2041
- return { step: "failed", transfer: state.transfer, error: state.error ?? "Transfer failed." };
2042
- }
2043
- if (state.creatingTransfer || isTransferInFlight(state.transfer)) {
2044
- return { step: "processing", transfer: state.transfer };
2045
- }
2046
- if (!state.loginRequested && (p.step === "token-picker" || p.step === "one-tap-setup" || p.step === "select-source" || p.step === "confirm-sign" || p.step === "guest-token-picker")) {
2047
- return p;
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
- if (state.mobileFlow && state.deeplinkUri) {
2050
- return {
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
- if (p.step === "wallet-setup" && p.mobile == null && state.guestPreauthorizing) {
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 < MIN_DEPOSIT;
4504
+ const isLowBalance = availableBalance < minDepositFloor;
4404
4505
  const exceedsLimit = remainingLimit != null && amount > remainingLimit && !isLowBalance;
4405
- const canDeposit = amount >= MIN_DEPOSIT && !exceedsLimit && !isLowBalance && !processing;
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
- MIN_DEPOSIT.toFixed(2),
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
- if (isNaN(payAmount) || payAmount < MIN_SEND_AMOUNT_USD) {
6875
- dispatch({ type: "SET_ERROR", error: `Minimum amount is $${MIN_SEND_AMOUNT_USD.toFixed(2)}.` });
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
- dispatch({ type: "SET_USER_INTENT", intent: { step: "deposit" } });
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 || state.transfer != null && ["CREATED", "SENDING", "SENT"].includes(state.transfer.status);
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,