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