@swype-org/react-sdk 0.2.215 → 0.2.221
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 +337 -287
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +33 -4
- package/dist/index.d.ts +33 -4
- package/dist/index.js +337 -287
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
package/dist/index.cjs
CHANGED
|
@@ -986,7 +986,8 @@ function sanitizeAdvertisedWallets(value) {
|
|
|
986
986
|
}
|
|
987
987
|
var STATIC_BRIDGE_DEDUPE_RDNS = /* @__PURE__ */ new Set([
|
|
988
988
|
"com.coinbase.wallet",
|
|
989
|
-
"io.metamask"
|
|
989
|
+
"io.metamask",
|
|
990
|
+
"app.phantom"
|
|
990
991
|
]);
|
|
991
992
|
function buildBridgedConnector(wallet) {
|
|
992
993
|
return connectors.injected({
|
|
@@ -1064,6 +1065,7 @@ function BlinkProvider({
|
|
|
1064
1065
|
privyAppId,
|
|
1065
1066
|
minTransferAmountUsd,
|
|
1066
1067
|
enableFullWidget = false,
|
|
1068
|
+
isMobileApp = false,
|
|
1067
1069
|
children
|
|
1068
1070
|
}) {
|
|
1069
1071
|
const queryClientRef = react.useRef(null);
|
|
@@ -1102,9 +1104,10 @@ function BlinkProvider({
|
|
|
1102
1104
|
minTransferAmountUsd: resolvedMinTransferAmountUsd,
|
|
1103
1105
|
depositAmount,
|
|
1104
1106
|
setDepositAmount,
|
|
1105
|
-
enableFullWidget
|
|
1107
|
+
enableFullWidget,
|
|
1108
|
+
isMobileApp
|
|
1106
1109
|
}),
|
|
1107
|
-
[apiBaseUrl, theme, resolvedMinTransferAmountUsd, depositAmount, setDepositAmount, enableFullWidget]
|
|
1110
|
+
[apiBaseUrl, theme, resolvedMinTransferAmountUsd, depositAmount, setDepositAmount, enableFullWidget, isMobileApp]
|
|
1108
1111
|
);
|
|
1109
1112
|
return /* @__PURE__ */ jsxRuntime.jsx(reactQuery.QueryClientProvider, { client: queryClientRef.current, children: /* @__PURE__ */ jsxRuntime.jsx(wagmi.WagmiProvider, { config: wagmiConfig, reconnectOnMount: false, children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
1110
1113
|
reactAuth.PrivyProvider,
|
|
@@ -2161,7 +2164,19 @@ async function getWalletCapabilities(walletClient, address, chainId) {
|
|
|
2161
2164
|
params: chainScopedParams ?? legacyParams
|
|
2162
2165
|
});
|
|
2163
2166
|
if (result && typeof result === "object" && !Array.isArray(result)) {
|
|
2164
|
-
|
|
2167
|
+
const caps = result;
|
|
2168
|
+
const hexKey = chainId != null ? `0x${chainId.toString(16)}` : null;
|
|
2169
|
+
const chainMissing = chainScopedParams && hexKey && !caps[hexKey] && !caps[String(chainId)];
|
|
2170
|
+
if (chainMissing) {
|
|
2171
|
+
const legacyResult = await walletClient.request({
|
|
2172
|
+
method: "wallet_getCapabilities",
|
|
2173
|
+
params: legacyParams
|
|
2174
|
+
});
|
|
2175
|
+
if (legacyResult && typeof legacyResult === "object" && !Array.isArray(legacyResult)) {
|
|
2176
|
+
return legacyResult;
|
|
2177
|
+
}
|
|
2178
|
+
}
|
|
2179
|
+
return caps;
|
|
2165
2180
|
}
|
|
2166
2181
|
return {};
|
|
2167
2182
|
} catch (err) {
|
|
@@ -3482,8 +3497,54 @@ function isUserRejection(msg) {
|
|
|
3482
3497
|
const lower = msg.toLowerCase();
|
|
3483
3498
|
return lower.includes("rejected") || lower.includes("denied");
|
|
3484
3499
|
}
|
|
3485
|
-
function
|
|
3486
|
-
return connectorMatchesWallet(account?.connector, { providerName: "trust" });
|
|
3500
|
+
function requiresExplicitEvmNonce(account) {
|
|
3501
|
+
return connectorMatchesWallet(account?.connector, { providerName: "trust" }) || connectorMatchesWallet(account?.connector, { providerName: "phantom" });
|
|
3502
|
+
}
|
|
3503
|
+
function getEvmNonceTrackerKey(sender, chainId) {
|
|
3504
|
+
return `${chainId ?? "unknown"}:${sender.toLowerCase()}`;
|
|
3505
|
+
}
|
|
3506
|
+
async function snapshotExplicitEvmNonce(params) {
|
|
3507
|
+
const {
|
|
3508
|
+
walletClient,
|
|
3509
|
+
sender,
|
|
3510
|
+
chainId,
|
|
3511
|
+
nonceTracker,
|
|
3512
|
+
logContext,
|
|
3513
|
+
actionId,
|
|
3514
|
+
extraDebug
|
|
3515
|
+
} = params;
|
|
3516
|
+
const trackerKey = getEvmNonceTrackerKey(sender, chainId);
|
|
3517
|
+
const trackedNonce = nonceTracker?.get(trackerKey) ?? null;
|
|
3518
|
+
try {
|
|
3519
|
+
const providerPendingNonce = await fetchLatestNonce(walletClient, sender, "pending");
|
|
3520
|
+
const nonce = trackedNonce == null ? providerPendingNonce : Math.max(providerPendingNonce, trackedNonce);
|
|
3521
|
+
appendDebug("info", `${logContext}: explicit nonce snapshot`, {
|
|
3522
|
+
actionId,
|
|
3523
|
+
sender,
|
|
3524
|
+
chainId: chainId ?? null,
|
|
3525
|
+
providerPendingNonce,
|
|
3526
|
+
trackedNonce,
|
|
3527
|
+
selectedNonce: nonce,
|
|
3528
|
+
...extraDebug ?? {}
|
|
3529
|
+
});
|
|
3530
|
+
return { nonce, trackerKey };
|
|
3531
|
+
} catch (err) {
|
|
3532
|
+
appendDebug(trackedNonce == null ? "warn" : "info", `${logContext}: pre-send nonce snapshot failed`, {
|
|
3533
|
+
actionId,
|
|
3534
|
+
sender,
|
|
3535
|
+
chainId: chainId ?? null,
|
|
3536
|
+
trackedNonce,
|
|
3537
|
+
selectedNonce: trackedNonce,
|
|
3538
|
+
error: err instanceof Error ? err.message : String(err),
|
|
3539
|
+
...extraDebug ?? {}
|
|
3540
|
+
});
|
|
3541
|
+
return { nonce: trackedNonce, trackerKey: trackedNonce == null ? null : trackerKey };
|
|
3542
|
+
}
|
|
3543
|
+
}
|
|
3544
|
+
function advanceTrackedEvmNonce(nonceTracker, trackerKey, nextNonce) {
|
|
3545
|
+
if (!nonceTracker || !trackerKey) return;
|
|
3546
|
+
const current = nonceTracker.get(trackerKey);
|
|
3547
|
+
nonceTracker.set(trackerKey, current == null ? nextNonce : Math.max(current, nextNonce));
|
|
3487
3548
|
}
|
|
3488
3549
|
async function waitForWalletClient(wagmiConfig, params = {}) {
|
|
3489
3550
|
for (let i = 0; i < WALLET_CLIENT_MAX_ATTEMPTS; i++) {
|
|
@@ -4235,10 +4296,11 @@ function failBothActions(approveAction, bridgeAction, message) {
|
|
|
4235
4296
|
]
|
|
4236
4297
|
};
|
|
4237
4298
|
}
|
|
4238
|
-
async function executeApprovePermit2(action, wagmiConfig) {
|
|
4299
|
+
async function executeApprovePermit2(action, wagmiConfig, options = {}) {
|
|
4239
4300
|
let walletClient = null;
|
|
4240
4301
|
let sender = null;
|
|
4241
4302
|
let preSendNonce = null;
|
|
4303
|
+
let nonceTrackerKey = null;
|
|
4242
4304
|
try {
|
|
4243
4305
|
walletClient = await waitForWalletClient(wagmiConfig);
|
|
4244
4306
|
const account = core.getAccount(wagmiConfig);
|
|
@@ -4262,19 +4324,20 @@ async function executeApprovePermit2(action, wagmiConfig) {
|
|
|
4262
4324
|
"APPROVE_PERMIT2 metadata is missing transaction parameters (to, data)."
|
|
4263
4325
|
);
|
|
4264
4326
|
}
|
|
4265
|
-
const
|
|
4266
|
-
if (
|
|
4267
|
-
|
|
4268
|
-
|
|
4269
|
-
|
|
4270
|
-
|
|
4271
|
-
|
|
4272
|
-
|
|
4273
|
-
|
|
4274
|
-
|
|
4275
|
-
|
|
4327
|
+
const shouldUseExplicitNonce = requiresExplicitEvmNonce(account);
|
|
4328
|
+
if (shouldUseExplicitNonce) {
|
|
4329
|
+
const snapshot = await snapshotExplicitEvmNonce({
|
|
4330
|
+
walletClient,
|
|
4331
|
+
sender,
|
|
4332
|
+
chainId: account.chainId,
|
|
4333
|
+
nonceTracker: options.nonceTracker,
|
|
4334
|
+
logContext: "APPROVE_PERMIT2",
|
|
4335
|
+
actionId: action.id
|
|
4336
|
+
});
|
|
4337
|
+
preSendNonce = snapshot.nonce;
|
|
4338
|
+
nonceTrackerKey = snapshot.trackerKey;
|
|
4276
4339
|
}
|
|
4277
|
-
const useExplicitNonce =
|
|
4340
|
+
const useExplicitNonce = shouldUseExplicitNonce && preSendNonce != null;
|
|
4278
4341
|
const txParams = {
|
|
4279
4342
|
from: sender,
|
|
4280
4343
|
to,
|
|
@@ -4304,6 +4367,9 @@ async function executeApprovePermit2(action, wagmiConfig) {
|
|
|
4304
4367
|
),
|
|
4305
4368
|
approveLabel
|
|
4306
4369
|
);
|
|
4370
|
+
if (preSendNonce != null) {
|
|
4371
|
+
advanceTrackedEvmNonce(options.nonceTracker, nonceTrackerKey, preSendNonce + 1);
|
|
4372
|
+
}
|
|
4307
4373
|
appendDebug("info", "APPROVE_PERMIT2: tx sent, awaiting settlement", {
|
|
4308
4374
|
actionId: action.id,
|
|
4309
4375
|
txHash,
|
|
@@ -4394,6 +4460,7 @@ async function executeApprovePermit2(action, wagmiConfig) {
|
|
|
4394
4460
|
actionId: action.id
|
|
4395
4461
|
});
|
|
4396
4462
|
if (recovery) {
|
|
4463
|
+
advanceTrackedEvmNonce(options.nonceTracker, nonceTrackerKey, recovery.latestNonce);
|
|
4397
4464
|
return actionRecovery(
|
|
4398
4465
|
action,
|
|
4399
4466
|
"Approval transaction was submitted but the wallet did not return a confirmation. Verifying on-chain\u2026",
|
|
@@ -4580,10 +4647,11 @@ async function executeSignPermit2(action, wagmiConfig, apiBaseUrl, sessionId) {
|
|
|
4580
4647
|
);
|
|
4581
4648
|
}
|
|
4582
4649
|
}
|
|
4583
|
-
async function executeExecuteBridge(action, wagmiConfig) {
|
|
4650
|
+
async function executeExecuteBridge(action, wagmiConfig, options = {}) {
|
|
4584
4651
|
let walletClient = null;
|
|
4585
4652
|
let sender = null;
|
|
4586
4653
|
let lastPreSendNonce = null;
|
|
4654
|
+
let lastNonceTrackerKey = null;
|
|
4587
4655
|
try {
|
|
4588
4656
|
walletClient = await waitForWalletClient(wagmiConfig);
|
|
4589
4657
|
const account = core.getAccount(wagmiConfig);
|
|
@@ -4604,22 +4672,25 @@ async function executeExecuteBridge(action, wagmiConfig) {
|
|
|
4604
4672
|
for (let i = 0; i < calls.length; i++) {
|
|
4605
4673
|
const call = calls[i];
|
|
4606
4674
|
const isIntermediateCall = i < calls.length - 1;
|
|
4607
|
-
const
|
|
4675
|
+
const shouldUseExplicitNonce = requiresExplicitEvmNonce(account);
|
|
4608
4676
|
let preSendNonce = null;
|
|
4609
|
-
|
|
4610
|
-
|
|
4611
|
-
|
|
4612
|
-
|
|
4613
|
-
|
|
4614
|
-
|
|
4615
|
-
|
|
4616
|
-
|
|
4617
|
-
|
|
4618
|
-
|
|
4619
|
-
|
|
4620
|
-
|
|
4677
|
+
let nonceTrackerKey = null;
|
|
4678
|
+
if (shouldUseExplicitNonce) {
|
|
4679
|
+
const snapshot = await snapshotExplicitEvmNonce({
|
|
4680
|
+
walletClient,
|
|
4681
|
+
sender,
|
|
4682
|
+
chainId: account.chainId,
|
|
4683
|
+
nonceTracker: options.nonceTracker,
|
|
4684
|
+
logContext: "EXECUTE_BRIDGE",
|
|
4685
|
+
actionId: action.id,
|
|
4686
|
+
extraDebug: { callIndex: i }
|
|
4687
|
+
});
|
|
4688
|
+
preSendNonce = snapshot.nonce;
|
|
4689
|
+
nonceTrackerKey = snapshot.trackerKey;
|
|
4690
|
+
lastPreSendNonce = preSendNonce;
|
|
4691
|
+
lastNonceTrackerKey = nonceTrackerKey;
|
|
4621
4692
|
}
|
|
4622
|
-
const useExplicitNonce =
|
|
4693
|
+
const useExplicitNonce = shouldUseExplicitNonce && preSendNonce != null;
|
|
4623
4694
|
const txParams = {
|
|
4624
4695
|
from: sender,
|
|
4625
4696
|
to: call.to,
|
|
@@ -4648,6 +4719,9 @@ async function executeExecuteBridge(action, wagmiConfig) {
|
|
|
4648
4719
|
),
|
|
4649
4720
|
watchdogLabel
|
|
4650
4721
|
);
|
|
4722
|
+
if (preSendNonce != null) {
|
|
4723
|
+
advanceTrackedEvmNonce(options.nonceTracker, nonceTrackerKey, preSendNonce + 1);
|
|
4724
|
+
}
|
|
4651
4725
|
appendDebug("info", "EXECUTE_BRIDGE: tx sent", {
|
|
4652
4726
|
actionId: action.id,
|
|
4653
4727
|
callIndex: i,
|
|
@@ -4733,6 +4807,7 @@ async function executeExecuteBridge(action, wagmiConfig) {
|
|
|
4733
4807
|
actionId: action.id
|
|
4734
4808
|
});
|
|
4735
4809
|
if (recovery) {
|
|
4810
|
+
advanceTrackedEvmNonce(options.nonceTracker, lastNonceTrackerKey, recovery.latestNonce);
|
|
4736
4811
|
return actionRecovery(
|
|
4737
4812
|
action,
|
|
4738
4813
|
"Bridge transaction was submitted but the wallet did not return a confirmation. Verifying on-chain\u2026",
|
|
@@ -5277,6 +5352,7 @@ function useAuthorizationExecutor(options) {
|
|
|
5277
5352
|
const walletConnectRuntimeRef = react.useRef(/* @__PURE__ */ new Map());
|
|
5278
5353
|
const activeWalletConnectRuntimeKeyRef = react.useRef(void 0);
|
|
5279
5354
|
const activeEvmTransportRef = react.useRef("wagmi");
|
|
5355
|
+
const evmNonceTrackerRef = react.useRef(/* @__PURE__ */ new Map());
|
|
5280
5356
|
const [batchTxHash, setBatchTxHash] = react.useState(null);
|
|
5281
5357
|
const externalAuthorizationAvailableRef = react.useRef(false);
|
|
5282
5358
|
const setExternalAuthorizationAvailable = react.useCallback((available) => {
|
|
@@ -5332,6 +5408,7 @@ function useAuthorizationExecutor(options) {
|
|
|
5332
5408
|
setApproveSplConfirming(null);
|
|
5333
5409
|
activeEvmTransportRef.current = "wagmi";
|
|
5334
5410
|
activeWalletConnectRuntimeKeyRef.current = void 0;
|
|
5411
|
+
evmNonceTrackerRef.current.clear();
|
|
5335
5412
|
setExecuting(false);
|
|
5336
5413
|
executingRef.current = false;
|
|
5337
5414
|
}, []);
|
|
@@ -5357,6 +5434,7 @@ function useAuthorizationExecutor(options) {
|
|
|
5357
5434
|
if (result2.status === "success" && result2.data?.transport === "wagmi") {
|
|
5358
5435
|
activeEvmTransportRef.current = "wagmi";
|
|
5359
5436
|
activeWalletConnectRuntimeKeyRef.current = void 0;
|
|
5437
|
+
evmNonceTrackerRef.current.clear();
|
|
5360
5438
|
if (action.metadata?.chainFamily !== "svm") {
|
|
5361
5439
|
walletCapabilitiesRef.current = await refreshWalletCapabilities(
|
|
5362
5440
|
wagmiConfig,
|
|
@@ -5369,6 +5447,7 @@ function useAuthorizationExecutor(options) {
|
|
|
5369
5447
|
walletCapabilitiesRef.current = {};
|
|
5370
5448
|
walletCapabilitiesRefreshedRef.current = true;
|
|
5371
5449
|
batchCapabilityDecisionRef.current = null;
|
|
5450
|
+
evmNonceTrackerRef.current.clear();
|
|
5372
5451
|
}
|
|
5373
5452
|
return result2;
|
|
5374
5453
|
}
|
|
@@ -5378,6 +5457,7 @@ function useAuthorizationExecutor(options) {
|
|
|
5378
5457
|
externalAuthorizationAvailable: externalAuthorizationAvailableRef.current
|
|
5379
5458
|
});
|
|
5380
5459
|
if (result.status === "success" && action.metadata?.chainFamily !== "svm") {
|
|
5460
|
+
evmNonceTrackerRef.current.clear();
|
|
5381
5461
|
walletCapabilitiesRef.current = await refreshWalletCapabilities(
|
|
5382
5462
|
wagmiConfig,
|
|
5383
5463
|
"open-provider"
|
|
@@ -5401,11 +5481,13 @@ function useAuthorizationExecutor(options) {
|
|
|
5401
5481
|
walletCapabilitiesRef.current = {};
|
|
5402
5482
|
walletCapabilitiesRefreshedRef.current = true;
|
|
5403
5483
|
batchCapabilityDecisionRef.current = null;
|
|
5484
|
+
evmNonceTrackerRef.current.clear();
|
|
5404
5485
|
}
|
|
5405
5486
|
return result2;
|
|
5406
5487
|
}
|
|
5407
5488
|
const result = await executeSwitchChain(action, wagmiConfig, switchChainAsync);
|
|
5408
5489
|
if (result.status === "success" && action.metadata?.chainFamily !== "svm") {
|
|
5490
|
+
evmNonceTrackerRef.current.clear();
|
|
5409
5491
|
walletCapabilitiesRef.current = await refreshWalletCapabilities(
|
|
5410
5492
|
wagmiConfig,
|
|
5411
5493
|
"switch-chain"
|
|
@@ -5423,7 +5505,9 @@ function useAuthorizationExecutor(options) {
|
|
|
5423
5505
|
dispatchOptions?.onWalletConnectDisplayUri
|
|
5424
5506
|
);
|
|
5425
5507
|
}
|
|
5426
|
-
return executeApprovePermit2(action, wagmiConfig
|
|
5508
|
+
return executeApprovePermit2(action, wagmiConfig, {
|
|
5509
|
+
nonceTracker: evmNonceTrackerRef.current
|
|
5510
|
+
});
|
|
5427
5511
|
case "DEPLOY_SMART_ACCOUNT":
|
|
5428
5512
|
return actionSuccess(action, "Smart account deployment acknowledged.");
|
|
5429
5513
|
case "SIGN_PERMIT2": {
|
|
@@ -5482,7 +5566,9 @@ function useAuthorizationExecutor(options) {
|
|
|
5482
5566
|
dispatchOptions?.onWalletConnectDisplayUri
|
|
5483
5567
|
);
|
|
5484
5568
|
}
|
|
5485
|
-
return executeExecuteBridge(action, wagmiConfig
|
|
5569
|
+
return executeExecuteBridge(action, wagmiConfig, {
|
|
5570
|
+
nonceTracker: evmNonceTrackerRef.current
|
|
5571
|
+
});
|
|
5486
5572
|
default:
|
|
5487
5573
|
return actionError(action, `Unsupported action type: ${action.type}`);
|
|
5488
5574
|
}
|
|
@@ -5635,6 +5721,7 @@ function useAuthorizationExecutor(options) {
|
|
|
5635
5721
|
setError(null);
|
|
5636
5722
|
setBatchTxHash(null);
|
|
5637
5723
|
setApproveSplConfirming(null);
|
|
5724
|
+
evmNonceTrackerRef.current.clear();
|
|
5638
5725
|
return true;
|
|
5639
5726
|
}, []);
|
|
5640
5727
|
const endExecution = react.useCallback(() => {
|
|
@@ -5643,6 +5730,7 @@ function useAuthorizationExecutor(options) {
|
|
|
5643
5730
|
setApproveSplConfirming(null);
|
|
5644
5731
|
activeEvmTransportRef.current = "wagmi";
|
|
5645
5732
|
activeWalletConnectRuntimeKeyRef.current = void 0;
|
|
5733
|
+
evmNonceTrackerRef.current.clear();
|
|
5646
5734
|
setExecuting(false);
|
|
5647
5735
|
executingRef.current = false;
|
|
5648
5736
|
}, []);
|
|
@@ -6065,6 +6153,8 @@ var ACTION_POLL_INTERVAL_MS2 = 500;
|
|
|
6065
6153
|
var ACTION_POLL_MAX_RETRIES2 = 20;
|
|
6066
6154
|
var REPORT_COMPLETION_TIMEOUT_MS = 9e4;
|
|
6067
6155
|
var REPORT_COMPLETION_TIMEOUT_MESSAGE = "REPORT_COMPLETION_TIMEOUT";
|
|
6156
|
+
var APPROVE_PERMIT2_CONFIRMING_MESSAGE = "Your Permit2 approval transaction was submitted and is still confirming on-chain. Please wait a moment and retry. Do not approve again in your wallet.";
|
|
6157
|
+
var SIGN_PERMIT2_CONFIRMING_MESSAGE = "Your Permit2 signature was submitted and is still confirming on-chain. Please wait a moment and retry. Do not sign again in your wallet.";
|
|
6068
6158
|
function useAuthorizationOrchestrator(deps) {
|
|
6069
6159
|
const blinkConfig = useOptionalBlinkConfig();
|
|
6070
6160
|
const resolvedApiBaseUrl = deps.apiBaseUrl ?? blinkConfig?.apiBaseUrl;
|
|
@@ -6078,6 +6168,8 @@ function useAuthorizationOrchestrator(deps) {
|
|
|
6078
6168
|
const selectSourceRejectRef = react.useRef(null);
|
|
6079
6169
|
const oneTapResolverRef = react.useRef(null);
|
|
6080
6170
|
const oneTapRejectRef = react.useRef(null);
|
|
6171
|
+
const submittedApprovePermit2ActionIdsRef = react.useRef(/* @__PURE__ */ new Set());
|
|
6172
|
+
const submittedSignPermit2ActionIdsRef = react.useRef(/* @__PURE__ */ new Set());
|
|
6081
6173
|
const oneTapPauseRequestedRef = react.useRef(false);
|
|
6082
6174
|
const addSession = react.useCallback((sessionId) => {
|
|
6083
6175
|
pendingSessionIdsRef.current.push(sessionId);
|
|
@@ -6500,6 +6592,12 @@ function useAuthorizationOrchestrator(deps) {
|
|
|
6500
6592
|
completedIds.add(batchedAction.id);
|
|
6501
6593
|
oneTapCompletedActionIds.delete(batchedAction.id);
|
|
6502
6594
|
authExecutor.addResult(result2);
|
|
6595
|
+
if (isSubmittedApprovePermit2Result(batchedAction, result2)) {
|
|
6596
|
+
submittedApprovePermit2ActionIdsRef.current.add(batchedAction.id);
|
|
6597
|
+
}
|
|
6598
|
+
if (isSubmittedSignPermit2Result(batchedAction, result2)) {
|
|
6599
|
+
submittedSignPermit2ActionIdsRef.current.add(batchedAction.id);
|
|
6600
|
+
}
|
|
6503
6601
|
const batchedOwnerSessionId = actionSessionMap.get(batchedAction.id) ?? ownerSessionId;
|
|
6504
6602
|
const reportedSession2 = await reportActionCompletionWithLogging(
|
|
6505
6603
|
apiBaseUrl,
|
|
@@ -6527,7 +6625,9 @@ function useAuthorizationOrchestrator(deps) {
|
|
|
6527
6625
|
continue;
|
|
6528
6626
|
}
|
|
6529
6627
|
}
|
|
6530
|
-
const
|
|
6628
|
+
const approvePermit2WasSubmitted = action.type === "APPROVE_PERMIT2" && submittedApprovePermit2ActionIdsRef.current.has(action.id);
|
|
6629
|
+
const signPermit2WasSubmitted = action.type === "SIGN_PERMIT2" && submittedSignPermit2ActionIdsRef.current.has(action.id);
|
|
6630
|
+
const isPrePromptProbableActionType = action.type === "SIGN_PERMIT2" || action.type === "APPROVE_SPL" || approvePermit2WasSubmitted;
|
|
6531
6631
|
if (isPrePromptProbableActionType && probeBeforePrompt && !preProbedIds.has(action.id)) {
|
|
6532
6632
|
preProbedIds.add(action.id);
|
|
6533
6633
|
appendDebug("info", `${action.type}: pre-prompt probe start`, {
|
|
@@ -6560,13 +6660,19 @@ function useAuthorizationOrchestrator(deps) {
|
|
|
6560
6660
|
});
|
|
6561
6661
|
continue;
|
|
6562
6662
|
}
|
|
6563
|
-
appendDebug("info", `${action.type}: pre-prompt probe did not detect; presenting wallet`, {
|
|
6663
|
+
appendDebug("info", approvePermit2WasSubmitted || signPermit2WasSubmitted ? `${action.type}: submitted action not detected yet; waiting for confirmation` : `${action.type}: pre-prompt probe did not detect; presenting wallet`, {
|
|
6564
6664
|
actionId: action.id,
|
|
6565
6665
|
ownerSessionId,
|
|
6566
6666
|
reason: probe.reason,
|
|
6567
6667
|
status: probe.status,
|
|
6568
6668
|
code: probe.code
|
|
6569
6669
|
});
|
|
6670
|
+
if (approvePermit2WasSubmitted) {
|
|
6671
|
+
throw new Error(APPROVE_PERMIT2_CONFIRMING_MESSAGE);
|
|
6672
|
+
}
|
|
6673
|
+
if (signPermit2WasSubmitted) {
|
|
6674
|
+
throw new Error(SIGN_PERMIT2_CONFIRMING_MESSAGE);
|
|
6675
|
+
}
|
|
6570
6676
|
}
|
|
6571
6677
|
appendDebug("info", `orchestrator:executeAction start ${action.type}`, {
|
|
6572
6678
|
actionId: action.id,
|
|
@@ -6600,6 +6706,9 @@ function useAuthorizationOrchestrator(deps) {
|
|
|
6600
6706
|
const probedIds = action.type === "APPROVE_PERMIT2" ? approvePermit2ProbedIds : action.type === "EXECUTE_BRIDGE" ? executeBridgeProbedIds : null;
|
|
6601
6707
|
if (probedIds && !probedIds.has(action.id)) {
|
|
6602
6708
|
probedIds.add(action.id);
|
|
6709
|
+
if (action.type === "APPROVE_PERMIT2") {
|
|
6710
|
+
submittedApprovePermit2ActionIdsRef.current.add(action.id);
|
|
6711
|
+
}
|
|
6603
6712
|
appendDebug("warn", `${action.type}: client error with nonce advancement, probing on-chain`, {
|
|
6604
6713
|
actionId: action.id,
|
|
6605
6714
|
ownerSessionId,
|
|
@@ -6640,6 +6749,9 @@ function useAuthorizationOrchestrator(deps) {
|
|
|
6640
6749
|
status: probe.status,
|
|
6641
6750
|
code: probe.code
|
|
6642
6751
|
});
|
|
6752
|
+
if (action.type === "APPROVE_PERMIT2" && probe.reason === "not-found") {
|
|
6753
|
+
throw new Error(APPROVE_PERMIT2_CONFIRMING_MESSAGE);
|
|
6754
|
+
}
|
|
6643
6755
|
}
|
|
6644
6756
|
}
|
|
6645
6757
|
if (result.status === "error" && action.type === "EXECUTE_BRIDGE" && result.message === EXECUTE_BRIDGE_TX_TIMEOUT_MESSAGE && !executeBridgeProbedIds.has(action.id)) {
|
|
@@ -6701,6 +6813,12 @@ function useAuthorizationOrchestrator(deps) {
|
|
|
6701
6813
|
completedIds.add(action.id);
|
|
6702
6814
|
oneTapCompletedActionIds.delete(action.id);
|
|
6703
6815
|
authExecutor.addResult(result);
|
|
6816
|
+
if (isSubmittedApprovePermit2Result(action, result)) {
|
|
6817
|
+
submittedApprovePermit2ActionIdsRef.current.add(action.id);
|
|
6818
|
+
}
|
|
6819
|
+
if (isSubmittedSignPermit2Result(action, result)) {
|
|
6820
|
+
submittedSignPermit2ActionIdsRef.current.add(action.id);
|
|
6821
|
+
}
|
|
6704
6822
|
const reportedSession = await reportActionCompletionWithLogging(
|
|
6705
6823
|
apiBaseUrl,
|
|
6706
6824
|
action,
|
|
@@ -6788,6 +6906,25 @@ function createSelectSourceResult(action, selection) {
|
|
|
6788
6906
|
}
|
|
6789
6907
|
};
|
|
6790
6908
|
}
|
|
6909
|
+
function isSubmittedApprovePermit2Result(action, result) {
|
|
6910
|
+
if (action.type !== "APPROVE_PERMIT2" || result.status !== "success") {
|
|
6911
|
+
return false;
|
|
6912
|
+
}
|
|
6913
|
+
if (!result.data || typeof result.data !== "object") {
|
|
6914
|
+
return false;
|
|
6915
|
+
}
|
|
6916
|
+
return typeof result.data.txHash === "string";
|
|
6917
|
+
}
|
|
6918
|
+
function isSubmittedSignPermit2Result(action, result) {
|
|
6919
|
+
if (action.type !== "SIGN_PERMIT2" || result.status !== "success") {
|
|
6920
|
+
return false;
|
|
6921
|
+
}
|
|
6922
|
+
if (!result.data || typeof result.data !== "object") {
|
|
6923
|
+
return false;
|
|
6924
|
+
}
|
|
6925
|
+
const data = result.data;
|
|
6926
|
+
return typeof data.signature === "string" || data.batchApprove === true;
|
|
6927
|
+
}
|
|
6791
6928
|
function getLeadingBatchableActions(mergedPending) {
|
|
6792
6929
|
const firstAction = mergedPending[0];
|
|
6793
6930
|
if (!firstAction || !isBatchableAction(firstAction)) {
|
|
@@ -7155,6 +7292,9 @@ function resolveStickyPhase(state) {
|
|
|
7155
7292
|
if (currentPhase.step === "manual-transfer" && !state.loginRequested) {
|
|
7156
7293
|
return currentPhase;
|
|
7157
7294
|
}
|
|
7295
|
+
if (currentPhase.step === "deposit-options" && !state.loginRequested) {
|
|
7296
|
+
return currentPhase;
|
|
7297
|
+
}
|
|
7158
7298
|
if (!state.loginRequested && state.setupFlowScreen === "one-tap-setup") {
|
|
7159
7299
|
return { step: "one-tap-setup", action: null };
|
|
7160
7300
|
}
|
|
@@ -7672,6 +7812,8 @@ function applyAction(state, action) {
|
|
|
7672
7812
|
pendingTransferId: null,
|
|
7673
7813
|
creatingTransfer: false
|
|
7674
7814
|
};
|
|
7815
|
+
case "CANCEL_LOGIN_REQUEST":
|
|
7816
|
+
return { ...state, loginRequested: false, error: null };
|
|
7675
7817
|
case "SET_ERROR":
|
|
7676
7818
|
return { ...state, error: action.error };
|
|
7677
7819
|
case "AMOUNT_TOO_LOW":
|
|
@@ -7853,10 +7995,10 @@ function planConfirmSetupDeposit(input) {
|
|
|
7853
7995
|
};
|
|
7854
7996
|
}
|
|
7855
7997
|
function ScreenLayout({ children, footer }) {
|
|
7856
|
-
const { tokens, theme } = useBlinkConfig();
|
|
7998
|
+
const { tokens, theme, isMobileApp } = useBlinkConfig();
|
|
7857
7999
|
const isRedesign = theme.endsWith("New");
|
|
7858
8000
|
const useAccentWash = !isRedesign;
|
|
7859
|
-
const sheetRadius = isRedesign ? tokens.radiusLg : void 0;
|
|
8001
|
+
const sheetRadius = isRedesign && !isMobileApp ? tokens.radiusLg : void 0;
|
|
7860
8002
|
const sheetClass = sheetRadius ? "blink-screen-sheet blink-screen-sheet--responsive-radius" : "blink-screen-sheet";
|
|
7861
8003
|
return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: sheetClass, style: containerStyle(tokens.bgCard, useAccentWash, sheetRadius, tokens.fontFamily), children: [
|
|
7862
8004
|
sheetRadius && /* @__PURE__ */ jsxRuntime.jsx("style", { children: responsiveRadiusCss }),
|
|
@@ -9260,7 +9402,7 @@ var labelStyle4 = (color, disabled) => ({
|
|
|
9260
9402
|
var rightSlotStyle2 = {
|
|
9261
9403
|
display: "inline-flex",
|
|
9262
9404
|
alignItems: "center",
|
|
9263
|
-
justifyContent: "
|
|
9405
|
+
justifyContent: "flex-end",
|
|
9264
9406
|
minWidth: 40,
|
|
9265
9407
|
minHeight: 40,
|
|
9266
9408
|
flexShrink: 0,
|
|
@@ -9560,9 +9702,9 @@ function LoginScreen({
|
|
|
9560
9702
|
const { tokens } = useBlinkConfig();
|
|
9561
9703
|
const heading = heroTitle ?? "Deposit instantly\nwith Blink";
|
|
9562
9704
|
const primaryAction = preferSignup ? onLoginWithPasskey : onSignupWithPasskey;
|
|
9563
|
-
const primaryLabel = preferSignup ? "
|
|
9705
|
+
const primaryLabel = preferSignup ? "Sign in with Blink" : "Create a Passkey";
|
|
9564
9706
|
const secondaryAction = preferSignup ? onSignupWithPasskey : onLoginWithPasskey;
|
|
9565
|
-
const secondaryLabel = preferSignup ? " Create a Passkey" : "
|
|
9707
|
+
const secondaryLabel = preferSignup ? " Create a Passkey" : "Sign in with Blink";
|
|
9566
9708
|
const headerRight = onClose ? /* @__PURE__ */ jsxRuntime.jsx(
|
|
9567
9709
|
"button",
|
|
9568
9710
|
{
|
|
@@ -9602,7 +9744,7 @@ function LoginScreen({
|
|
|
9602
9744
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
9603
9745
|
ScreenHeader,
|
|
9604
9746
|
{
|
|
9605
|
-
onBack
|
|
9747
|
+
onBack,
|
|
9606
9748
|
right: headerRight,
|
|
9607
9749
|
left: /* @__PURE__ */ jsxRuntime.jsx(
|
|
9608
9750
|
"img",
|
|
@@ -9758,9 +9900,13 @@ function DepositOptionsScreen({
|
|
|
9758
9900
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
9759
9901
|
SourceRow,
|
|
9760
9902
|
{
|
|
9761
|
-
name: "Wallet",
|
|
9903
|
+
name: "Connect Wallet",
|
|
9762
9904
|
icon: /* @__PURE__ */ jsxRuntime.jsx(WalletIcon, { color: tokens.text }),
|
|
9763
|
-
onClick: onFromWallet
|
|
9905
|
+
onClick: onFromWallet,
|
|
9906
|
+
right: /* @__PURE__ */ jsxRuntime.jsxs("span", { style: badgeWithArrowStyle, children: [
|
|
9907
|
+
/* @__PURE__ */ jsxRuntime.jsx(RecommendedBadge, { tokens }),
|
|
9908
|
+
/* @__PURE__ */ jsxRuntime.jsx("svg", { width: "24", height: "24", viewBox: "0 0 24 24", fill: "none", "aria-hidden": "true", children: /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M9 6l6 6-6 6", stroke: tokens.textMuted, strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round" }) })
|
|
9909
|
+
] })
|
|
9764
9910
|
}
|
|
9765
9911
|
),
|
|
9766
9912
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
@@ -9788,38 +9934,14 @@ function DepositOptionsScreen({
|
|
|
9788
9934
|
);
|
|
9789
9935
|
}
|
|
9790
9936
|
function DepositTypeToggle({ tokens }) {
|
|
9791
|
-
return /* @__PURE__ */ jsxRuntime.
|
|
9792
|
-
"div",
|
|
9793
|
-
{
|
|
9794
|
-
role: "tablist",
|
|
9795
|
-
"aria-label": "Deposit type",
|
|
9796
|
-
"aria-disabled": "true",
|
|
9797
|
-
style: toggleContainerStyle(tokens.bgRecessed),
|
|
9798
|
-
children: [
|
|
9799
|
-
/* @__PURE__ */ jsxRuntime.jsx(ToggleSegment, { selected: true, label: "Crypto", tokens }),
|
|
9800
|
-
/* @__PURE__ */ jsxRuntime.jsx(ToggleSegment, { selected: false, label: "Cash", subLabel: "Coming soon", tokens })
|
|
9801
|
-
]
|
|
9802
|
-
}
|
|
9803
|
-
);
|
|
9804
|
-
}
|
|
9805
|
-
function ToggleSegment({ selected, label, subLabel, tokens }) {
|
|
9806
|
-
return /* @__PURE__ */ jsxRuntime.jsxs(
|
|
9807
|
-
"div",
|
|
9808
|
-
{
|
|
9809
|
-
role: "tab",
|
|
9810
|
-
"aria-selected": selected,
|
|
9811
|
-
"aria-disabled": "true",
|
|
9812
|
-
style: toggleSegmentStyle(selected, tokens),
|
|
9813
|
-
children: [
|
|
9814
|
-
/* @__PURE__ */ jsxRuntime.jsx("span", { children: label }),
|
|
9815
|
-
subLabel ? /* @__PURE__ */ jsxRuntime.jsx("span", { style: toggleSubLabelStyle, children: subLabel }) : null
|
|
9816
|
-
]
|
|
9817
|
-
}
|
|
9818
|
-
);
|
|
9937
|
+
return /* @__PURE__ */ jsxRuntime.jsx(jsxRuntime.Fragment, {});
|
|
9819
9938
|
}
|
|
9820
9939
|
function ComingSoonBadge({ tokens }) {
|
|
9821
9940
|
return /* @__PURE__ */ jsxRuntime.jsx("span", { style: comingSoonBadgeStyle(tokens.bgRecessed, tokens.textMuted), children: "Coming soon" });
|
|
9822
9941
|
}
|
|
9942
|
+
function RecommendedBadge({ tokens }) {
|
|
9943
|
+
return /* @__PURE__ */ jsxRuntime.jsx("span", { style: recommendedBadgeStyle(tokens.successBg, tokens.success), children: "Recommended" });
|
|
9944
|
+
}
|
|
9823
9945
|
function WalletIcon({ color }) {
|
|
9824
9946
|
return /* @__PURE__ */ jsxRuntime.jsxs("svg", { width: "24", height: "24", viewBox: "0 0 24 24", fill: "none", "aria-hidden": "true", children: [
|
|
9825
9947
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
@@ -9956,39 +10078,25 @@ var cardStyle = (bg) => ({
|
|
|
9956
10078
|
borderRadius: 28,
|
|
9957
10079
|
padding: "8px 8px 8px 20px"
|
|
9958
10080
|
});
|
|
9959
|
-
var
|
|
9960
|
-
display: "flex",
|
|
9961
|
-
width: "100%",
|
|
9962
|
-
background: bg,
|
|
9963
|
-
borderRadius: 999,
|
|
9964
|
-
padding: 4,
|
|
9965
|
-
boxSizing: "border-box"
|
|
9966
|
-
});
|
|
9967
|
-
var toggleSegmentStyle = (selected, tokens) => ({
|
|
9968
|
-
flex: 1,
|
|
9969
|
-
display: "flex",
|
|
9970
|
-
flexDirection: "column",
|
|
10081
|
+
var comingSoonBadgeStyle = (bg, color) => ({
|
|
10082
|
+
display: "inline-flex",
|
|
9971
10083
|
alignItems: "center",
|
|
9972
10084
|
justifyContent: "center",
|
|
9973
|
-
|
|
9974
|
-
|
|
9975
|
-
|
|
9976
|
-
fontSize: "0.95rem",
|
|
9977
|
-
fontWeight: 600,
|
|
9978
|
-
lineHeight: 1.15,
|
|
9979
|
-
color: selected ? tokens.text : tokens.textMuted,
|
|
9980
|
-
background: selected ? tokens.bg : "transparent",
|
|
9981
|
-
boxShadow: selected ? tokens.shadow : "none",
|
|
9982
|
-
cursor: "default",
|
|
9983
|
-
userSelect: "none"
|
|
9984
|
-
});
|
|
9985
|
-
var toggleSubLabelStyle = {
|
|
9986
|
-
fontSize: "0.7rem",
|
|
10085
|
+
background: bg,
|
|
10086
|
+
color,
|
|
10087
|
+
fontSize: 10,
|
|
9987
10088
|
fontWeight: 500,
|
|
9988
|
-
|
|
9989
|
-
|
|
10089
|
+
lineHeight: 1,
|
|
10090
|
+
padding: "4px 8px",
|
|
10091
|
+
borderRadius: 8,
|
|
10092
|
+
marginRight: 8,
|
|
10093
|
+
whiteSpace: "nowrap"
|
|
10094
|
+
});
|
|
10095
|
+
var badgeWithArrowStyle = {
|
|
10096
|
+
display: "flex",
|
|
10097
|
+
alignItems: "center"
|
|
9990
10098
|
};
|
|
9991
|
-
var
|
|
10099
|
+
var recommendedBadgeStyle = (bg, color) => ({
|
|
9992
10100
|
display: "inline-flex",
|
|
9993
10101
|
alignItems: "center",
|
|
9994
10102
|
justifyContent: "center",
|
|
@@ -9999,7 +10107,6 @@ var comingSoonBadgeStyle = (bg, color) => ({
|
|
|
9999
10107
|
lineHeight: 1,
|
|
10000
10108
|
padding: "4px 8px",
|
|
10001
10109
|
borderRadius: 8,
|
|
10002
|
-
marginRight: 8,
|
|
10003
10110
|
whiteSpace: "nowrap"
|
|
10004
10111
|
});
|
|
10005
10112
|
var linkIconImageStyle = (color) => ({
|
|
@@ -10925,70 +11032,59 @@ function WalletPickerScreen({
|
|
|
10925
11032
|
),
|
|
10926
11033
|
/* @__PURE__ */ jsxRuntime.jsx("h1", { style: titleStyle3(tokens.text), children: "Link wallet" }),
|
|
10927
11034
|
error && /* @__PURE__ */ jsxRuntime.jsx("div", { style: errorBannerStyle5(tokens), children: error }),
|
|
10928
|
-
/* @__PURE__ */ jsxRuntime.
|
|
10929
|
-
|
|
10930
|
-
|
|
10931
|
-
|
|
10932
|
-
|
|
10933
|
-
|
|
10934
|
-
|
|
10935
|
-
|
|
10936
|
-
|
|
10937
|
-
|
|
10938
|
-
|
|
10939
|
-
|
|
10940
|
-
|
|
10941
|
-
|
|
10942
|
-
void onSelectWalletConnectWallet(wallet);
|
|
10943
|
-
}
|
|
11035
|
+
/* @__PURE__ */ jsxRuntime.jsx("div", { style: sheetStackStyle, children: /* @__PURE__ */ jsxRuntime.jsx("div", { style: cardStyle2(tokens.bgCardTranslucent), children: showOtherWallets ? /* @__PURE__ */ jsxRuntime.jsx(
|
|
11036
|
+
OtherWalletsPanel,
|
|
11037
|
+
{
|
|
11038
|
+
wallets: filteredReownWallets,
|
|
11039
|
+
loading: reownLoading,
|
|
11040
|
+
error: reownError,
|
|
11041
|
+
search: reownSearch,
|
|
11042
|
+
onSearchChange: setReownSearch,
|
|
11043
|
+
onRetry: () => {
|
|
11044
|
+
setReownWallets([]);
|
|
11045
|
+
setReownFetchAttempt((attempt) => attempt + 1);
|
|
11046
|
+
},
|
|
11047
|
+
onSelectWallet: (wallet) => {
|
|
11048
|
+
void onSelectWalletConnectWallet(wallet);
|
|
10944
11049
|
}
|
|
10945
|
-
|
|
10946
|
-
|
|
10947
|
-
|
|
10948
|
-
|
|
10949
|
-
|
|
10950
|
-
|
|
10951
|
-
|
|
10952
|
-
|
|
10953
|
-
|
|
10954
|
-
|
|
10955
|
-
|
|
10956
|
-
SourceRow,
|
|
10957
|
-
{
|
|
10958
|
-
logo: logoSrc,
|
|
10959
|
-
name: provider.name,
|
|
10960
|
-
href: directPreparedSession.uri,
|
|
10961
|
-
target: navigation.anchorTarget,
|
|
10962
|
-
rel: navigation.anchorRel,
|
|
10963
|
-
onClick: (e) => {
|
|
10964
|
-
if (openWithJavaScript) {
|
|
10965
|
-
e.preventDefault();
|
|
10966
|
-
}
|
|
10967
|
-
setSelectedProviderId(provider.id);
|
|
10968
|
-
if (directPreparedSession.sessionId) {
|
|
10969
|
-
void setAuthorizationSessionProvider(
|
|
10970
|
-
apiBaseUrl,
|
|
10971
|
-
directPreparedSession.sessionId,
|
|
10972
|
-
provider.id
|
|
10973
|
-
).catch((err) => {
|
|
10974
|
-
captureException(err);
|
|
10975
|
-
});
|
|
10976
|
-
}
|
|
10977
|
-
if (openWithJavaScript) {
|
|
10978
|
-
openDeeplink(directPreparedSession.uri);
|
|
10979
|
-
}
|
|
10980
|
-
void onSelectProvider(provider.id, directPreparedSession);
|
|
10981
|
-
}
|
|
10982
|
-
},
|
|
10983
|
-
provider.id
|
|
10984
|
-
);
|
|
10985
|
-
}
|
|
11050
|
+
}
|
|
11051
|
+
) : showWalletListSpinner ? /* @__PURE__ */ jsxRuntime.jsx("div", { style: spinnerRowStyle, children: /* @__PURE__ */ jsxRuntime.jsx(Spinner, { label: providersLoading ? "Loading wallets..." : "Preparing wallet links..." }) }) : /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
|
|
11052
|
+
visibleProviders.map((provider) => {
|
|
11053
|
+
const logoSrc = "logoURI" in provider && provider.logoURI || KNOWN_LOGOS[provider.name.toLowerCase()];
|
|
11054
|
+
const directPreparedSession = directPreparedSessions[provider.id];
|
|
11055
|
+
const isRowPreparing = preparing && selectedProviderId === provider.id;
|
|
11056
|
+
const rowLoader = isRowPreparing ? /* @__PURE__ */ jsxRuntime.jsx(Spinner, { size: 20 }) : void 0;
|
|
11057
|
+
if (usesDirectLinkCards) {
|
|
11058
|
+
if (directPreparedSession?.uri) {
|
|
11059
|
+
const navigation = classifyWalletDeeplinkNavigation(directPreparedSession.uri);
|
|
11060
|
+
const openWithJavaScript = shouldOpenWithJavaScript(navigation);
|
|
10986
11061
|
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
10987
11062
|
SourceRow,
|
|
10988
11063
|
{
|
|
10989
11064
|
logo: logoSrc,
|
|
10990
11065
|
name: provider.name,
|
|
10991
|
-
|
|
11066
|
+
href: directPreparedSession.uri,
|
|
11067
|
+
target: navigation.anchorTarget,
|
|
11068
|
+
rel: navigation.anchorRel,
|
|
11069
|
+
onClick: (e) => {
|
|
11070
|
+
if (openWithJavaScript) {
|
|
11071
|
+
e.preventDefault();
|
|
11072
|
+
}
|
|
11073
|
+
setSelectedProviderId(provider.id);
|
|
11074
|
+
if (directPreparedSession.sessionId) {
|
|
11075
|
+
void setAuthorizationSessionProvider(
|
|
11076
|
+
apiBaseUrl,
|
|
11077
|
+
directPreparedSession.sessionId,
|
|
11078
|
+
provider.id
|
|
11079
|
+
).catch((err) => {
|
|
11080
|
+
captureException(err);
|
|
11081
|
+
});
|
|
11082
|
+
}
|
|
11083
|
+
if (openWithJavaScript) {
|
|
11084
|
+
openDeeplink(directPreparedSession.uri);
|
|
11085
|
+
}
|
|
11086
|
+
void onSelectProvider(provider.id, directPreparedSession);
|
|
11087
|
+
}
|
|
10992
11088
|
},
|
|
10993
11089
|
provider.id
|
|
10994
11090
|
);
|
|
@@ -10998,36 +11094,35 @@ function WalletPickerScreen({
|
|
|
10998
11094
|
{
|
|
10999
11095
|
logo: logoSrc,
|
|
11000
11096
|
name: provider.name,
|
|
11001
|
-
|
|
11002
|
-
onClick: () => {
|
|
11003
|
-
void handleRowSelect(provider.id);
|
|
11004
|
-
}
|
|
11097
|
+
disabled: true
|
|
11005
11098
|
},
|
|
11006
11099
|
provider.id
|
|
11007
11100
|
);
|
|
11008
|
-
}
|
|
11009
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
|
11101
|
+
}
|
|
11102
|
+
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
11010
11103
|
SourceRow,
|
|
11011
11104
|
{
|
|
11012
|
-
|
|
11013
|
-
|
|
11105
|
+
logo: logoSrc,
|
|
11106
|
+
name: provider.name,
|
|
11107
|
+
right: rowLoader,
|
|
11014
11108
|
onClick: () => {
|
|
11015
|
-
|
|
11109
|
+
void handleRowSelect(provider.id);
|
|
11016
11110
|
}
|
|
11017
|
-
}
|
|
11018
|
-
|
|
11019
|
-
|
|
11020
|
-
|
|
11111
|
+
},
|
|
11112
|
+
provider.id
|
|
11113
|
+
);
|
|
11114
|
+
}),
|
|
11115
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
11021
11116
|
SourceRow,
|
|
11022
11117
|
{
|
|
11023
|
-
|
|
11024
|
-
|
|
11025
|
-
|
|
11026
|
-
|
|
11027
|
-
|
|
11118
|
+
name: "Other",
|
|
11119
|
+
icon: /* @__PURE__ */ jsxRuntime.jsx(OtherWalletsIcon, {}),
|
|
11120
|
+
onClick: () => {
|
|
11121
|
+
setShowOtherWallets(true);
|
|
11122
|
+
}
|
|
11028
11123
|
}
|
|
11029
|
-
)
|
|
11030
|
-
] })
|
|
11124
|
+
)
|
|
11125
|
+
] }) }) })
|
|
11031
11126
|
] });
|
|
11032
11127
|
}
|
|
11033
11128
|
function OtherWalletsPanel({
|
|
@@ -11096,77 +11191,29 @@ function ReownWalletLogo({ wallet }) {
|
|
|
11096
11191
|
}
|
|
11097
11192
|
);
|
|
11098
11193
|
}
|
|
11099
|
-
function OtherWalletsIcon(
|
|
11100
|
-
return /* @__PURE__ */ jsxRuntime.jsxs(
|
|
11101
|
-
|
|
11102
|
-
|
|
11103
|
-
|
|
11104
|
-
|
|
11105
|
-
|
|
11106
|
-
|
|
11107
|
-
|
|
11108
|
-
|
|
11109
|
-
|
|
11110
|
-
|
|
11111
|
-
|
|
11112
|
-
|
|
11113
|
-
|
|
11114
|
-
|
|
11115
|
-
|
|
11116
|
-
|
|
11117
|
-
|
|
11118
|
-
|
|
11119
|
-
|
|
11120
|
-
|
|
11121
|
-
|
|
11122
|
-
d: "M10 12.5C11.1 11.7 12.9 11.7 14 12.5",
|
|
11123
|
-
stroke: color,
|
|
11124
|
-
strokeWidth: "1.8",
|
|
11125
|
-
strokeLinecap: "round"
|
|
11126
|
-
}
|
|
11127
|
-
),
|
|
11128
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
|
11129
|
-
"path",
|
|
11130
|
-
{
|
|
11131
|
-
d: "M12 16H12.01",
|
|
11132
|
-
stroke: color,
|
|
11133
|
-
strokeWidth: "2.4",
|
|
11134
|
-
strokeLinecap: "round"
|
|
11135
|
-
}
|
|
11136
|
-
)
|
|
11137
|
-
] });
|
|
11138
|
-
}
|
|
11139
|
-
function BankIcon({ color }) {
|
|
11140
|
-
return /* @__PURE__ */ jsxRuntime.jsxs("svg", { width: "28", height: "28", viewBox: "0 0 24 24", fill: "none", "aria-hidden": "true", children: [
|
|
11141
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
|
11142
|
-
"path",
|
|
11143
|
-
{
|
|
11144
|
-
d: "M3 10L12 4L21 10",
|
|
11145
|
-
stroke: color,
|
|
11146
|
-
strokeWidth: "1.8",
|
|
11147
|
-
strokeLinecap: "round",
|
|
11148
|
-
strokeLinejoin: "round"
|
|
11149
|
-
}
|
|
11150
|
-
),
|
|
11151
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
|
11152
|
-
"path",
|
|
11153
|
-
{
|
|
11154
|
-
d: "M5 10V18M9 10V18M15 10V18M19 10V18",
|
|
11155
|
-
stroke: color,
|
|
11156
|
-
strokeWidth: "1.8",
|
|
11157
|
-
strokeLinecap: "round"
|
|
11158
|
-
}
|
|
11159
|
-
),
|
|
11160
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
|
11161
|
-
"path",
|
|
11162
|
-
{
|
|
11163
|
-
d: "M3 20H21",
|
|
11164
|
-
stroke: color,
|
|
11165
|
-
strokeWidth: "1.8",
|
|
11166
|
-
strokeLinecap: "round"
|
|
11167
|
-
}
|
|
11168
|
-
)
|
|
11169
|
-
] });
|
|
11194
|
+
function OtherWalletsIcon() {
|
|
11195
|
+
return /* @__PURE__ */ jsxRuntime.jsxs(
|
|
11196
|
+
"svg",
|
|
11197
|
+
{
|
|
11198
|
+
width: "34",
|
|
11199
|
+
height: "34",
|
|
11200
|
+
viewBox: "0 0 400 400",
|
|
11201
|
+
fill: "none",
|
|
11202
|
+
xmlns: "http://www.w3.org/2000/svg",
|
|
11203
|
+
"aria-hidden": "true",
|
|
11204
|
+
style: { borderRadius: "50%" },
|
|
11205
|
+
children: [
|
|
11206
|
+
/* @__PURE__ */ jsxRuntime.jsx("circle", { cx: "200", cy: "200", fill: "#3396ff", r: "199.5", stroke: "#66b1ff" }),
|
|
11207
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
11208
|
+
"path",
|
|
11209
|
+
{
|
|
11210
|
+
d: "m122.519 148.965c42.791-41.729 112.171-41.729 154.962 0l5.15 5.022c2.14 2.086 2.14 5.469 0 7.555l-17.617 17.18c-1.07 1.043-2.804 1.043-3.874 0l-7.087-6.911c-29.853-29.111-78.253-29.111-108.106 0l-7.59 7.401c-1.07 1.043-2.804 1.043-3.874 0l-17.617-17.18c-2.14-2.086-2.14-5.469 0-7.555zm191.397 35.529 15.679 15.29c2.14 2.086 2.14 5.469 0 7.555l-70.7 68.944c-2.139 2.087-5.608 2.087-7.748 0l-50.178-48.931c-.535-.522-1.402-.522-1.937 0l-50.178 48.931c-2.139 2.087-5.608 2.087-7.748 0l-70.7015-68.945c-2.1396-2.086-2.1396-5.469 0-7.555l15.6795-15.29c2.1396-2.086 5.6085-2.086 7.7481 0l50.1789 48.932c.535.522 1.402.522 1.937 0l50.177-48.932c2.139-2.087 5.608-2.087 7.748 0l50.179 48.932c.535.522 1.402.522 1.937 0l50.179-48.931c2.139-2.087 5.608-2.087 7.748 0z",
|
|
11211
|
+
fill: "#fff"
|
|
11212
|
+
}
|
|
11213
|
+
)
|
|
11214
|
+
]
|
|
11215
|
+
}
|
|
11216
|
+
);
|
|
11170
11217
|
}
|
|
11171
11218
|
function isAbortError(err) {
|
|
11172
11219
|
return err instanceof DOMException && err.name === "AbortError";
|
|
@@ -11215,19 +11262,6 @@ var cardStyle2 = (bg) => ({
|
|
|
11215
11262
|
borderRadius: 28,
|
|
11216
11263
|
padding: "8px 8px 8px 20px"
|
|
11217
11264
|
});
|
|
11218
|
-
var disabledCardStyle = (bg) => ({
|
|
11219
|
-
display: "flex",
|
|
11220
|
-
flexDirection: "column",
|
|
11221
|
-
background: bg,
|
|
11222
|
-
borderRadius: 28,
|
|
11223
|
-
padding: "8px 8px 8px 20px"
|
|
11224
|
-
});
|
|
11225
|
-
var comingSoonStyle = (color) => ({
|
|
11226
|
-
fontSize: "1rem",
|
|
11227
|
-
color,
|
|
11228
|
-
paddingRight: 8,
|
|
11229
|
-
whiteSpace: "nowrap"
|
|
11230
|
-
});
|
|
11231
11265
|
var spinnerRowStyle = {
|
|
11232
11266
|
display: "flex",
|
|
11233
11267
|
alignItems: "center",
|
|
@@ -12348,13 +12382,14 @@ function DepositScreen({
|
|
|
12348
12382
|
(opt) => opt.balance == null || isSelectableDepositSourceAmountUsd(opt.balance, minDepositFloor)
|
|
12349
12383
|
) ?? [];
|
|
12350
12384
|
const hasTokenDropdown = selectableTokenOptions.length > 0 && onPickToken != null;
|
|
12385
|
+
const canOpenInlineSheet = onPickToken != null && (hasTokenDropdown || (accounts?.length ?? 0) > 0);
|
|
12351
12386
|
const handleOpenSourceSheet = react.useCallback(() => {
|
|
12352
|
-
if (
|
|
12387
|
+
if (canOpenInlineSheet) {
|
|
12353
12388
|
setTokenPickerOpen((v) => !v);
|
|
12354
12389
|
} else {
|
|
12355
12390
|
onSelectToken?.();
|
|
12356
12391
|
}
|
|
12357
|
-
}, [
|
|
12392
|
+
}, [canOpenInlineSheet, onSelectToken]);
|
|
12358
12393
|
const handleCloseSourceSheet = react.useCallback(() => {
|
|
12359
12394
|
setTokenPickerOpen(false);
|
|
12360
12395
|
}, []);
|
|
@@ -12366,9 +12401,9 @@ function DepositScreen({
|
|
|
12366
12401
|
const exceedsLimit = remainingLimit != null && amount > remainingLimit && !isLowBalance && !needsAuthorization;
|
|
12367
12402
|
const canDeposit = amount >= minDepositFloor && !exceedsLimit && !isLowBalance && !insufficientFunds && !needsAuthorization && !processing;
|
|
12368
12403
|
const hasAccountPill = !!accounts && accounts.length > 0;
|
|
12369
|
-
const pillClickable =
|
|
12404
|
+
const pillClickable = canOpenInlineSheet || !!onSelectToken;
|
|
12370
12405
|
const tokenAriaLabel = selectedTokenSymbol && selectedChainName ? `Selected token: ${selectedTokenSymbol} on ${selectedChainName}` : selectedTokenSymbol ? `Selected token: ${selectedTokenSymbol}` : "Select token";
|
|
12371
|
-
if (tokenPickerOpen &&
|
|
12406
|
+
if (tokenPickerOpen && canOpenInlineSheet) {
|
|
12372
12407
|
const depositSourceAccounts = (accounts ?? []).map((a) => {
|
|
12373
12408
|
const preferred = getPreferredDepositWallet(a, amount);
|
|
12374
12409
|
return {
|
|
@@ -12429,8 +12464,8 @@ function DepositScreen({
|
|
|
12429
12464
|
onClick: handleOpenSourceSheet,
|
|
12430
12465
|
style: redesignPillButtonStyle(pillClickable),
|
|
12431
12466
|
"aria-label": tokenAriaLabel,
|
|
12432
|
-
"aria-expanded":
|
|
12433
|
-
"aria-haspopup":
|
|
12467
|
+
"aria-expanded": canOpenInlineSheet ? tokenPickerOpen : void 0,
|
|
12468
|
+
"aria-haspopup": canOpenInlineSheet ? "listbox" : void 0,
|
|
12434
12469
|
children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
12435
12470
|
SourcePill,
|
|
12436
12471
|
{
|
|
@@ -12543,8 +12578,8 @@ function SuccessScreen({
|
|
|
12543
12578
|
onLogout,
|
|
12544
12579
|
returnMessage
|
|
12545
12580
|
}) {
|
|
12546
|
-
const { tokens } = useBlinkConfig();
|
|
12547
|
-
const headerRight = succeeded && onDone ? /* @__PURE__ */ jsxRuntime.jsx(
|
|
12581
|
+
const { tokens, isMobileApp } = useBlinkConfig();
|
|
12582
|
+
const headerRight = succeeded && onDone && !isMobileApp ? /* @__PURE__ */ jsxRuntime.jsx(
|
|
12548
12583
|
"button",
|
|
12549
12584
|
{
|
|
12550
12585
|
type: "button",
|
|
@@ -12745,7 +12780,7 @@ function SelectSourceScreen({
|
|
|
12745
12780
|
/* @__PURE__ */ jsxRuntime.jsxs("div", { style: optionContentStyle, children: [
|
|
12746
12781
|
/* @__PURE__ */ jsxRuntime.jsxs("span", { style: optionNameStyle(tokens.text), children: [
|
|
12747
12782
|
chain.chainName,
|
|
12748
|
-
isRecommended && /* @__PURE__ */ jsxRuntime.jsx("span", { style:
|
|
12783
|
+
isRecommended && /* @__PURE__ */ jsxRuntime.jsx("span", { style: recommendedBadgeStyle2(tokens.textMuted), children: " recommended" })
|
|
12749
12784
|
] }),
|
|
12750
12785
|
/* @__PURE__ */ jsxRuntime.jsxs("span", { style: optionBalanceStyle(tokens.textMuted), children: [
|
|
12751
12786
|
"$",
|
|
@@ -12841,7 +12876,7 @@ var optionNameStyle = (color) => ({
|
|
|
12841
12876
|
fontWeight: 600,
|
|
12842
12877
|
color
|
|
12843
12878
|
});
|
|
12844
|
-
var
|
|
12879
|
+
var recommendedBadgeStyle2 = (color) => ({
|
|
12845
12880
|
fontSize: "0.7rem",
|
|
12846
12881
|
fontWeight: 500,
|
|
12847
12882
|
color,
|
|
@@ -15351,10 +15386,10 @@ function buildLoginScreenProps({ flow, handlers }) {
|
|
|
15351
15386
|
onSignupWithPasskey: handlers.onSignupWithPasskey,
|
|
15352
15387
|
loading: flow.passkeyLoading,
|
|
15353
15388
|
error: flow.state.error,
|
|
15354
|
-
//
|
|
15355
|
-
//
|
|
15356
|
-
|
|
15357
|
-
|
|
15389
|
+
// Inside a native mobile in-app browser the host's chrome handles
|
|
15390
|
+
// dismissal, so suppress the in-screen (X) close button.
|
|
15391
|
+
onClose: flow.isMobileApp ? void 0 : flow.onBack,
|
|
15392
|
+
onBack: flow.state.enableFullWidget ? handlers.onCancelLogin : void 0,
|
|
15358
15393
|
merchantInitials: flow.merchantName ? flow.merchantName.slice(0, 2).toUpperCase() : void 0
|
|
15359
15394
|
};
|
|
15360
15395
|
}
|
|
@@ -15369,8 +15404,9 @@ function buildDepositOptionsScreenProps({ flow, handlers }) {
|
|
|
15369
15404
|
// Deposit-options is the root screen for the full-widget flow, so the
|
|
15370
15405
|
// top-right (X) closes the widget through the same `onBack` the host
|
|
15371
15406
|
// provides. Falling back to `undefined` hides the close button when the
|
|
15372
|
-
// host did not pass an onBack (matches LoginScreen behavior).
|
|
15373
|
-
|
|
15407
|
+
// host did not pass an onBack (matches LoginScreen behavior). Inside a
|
|
15408
|
+
// native mobile in-app browser the host chrome handles dismissal.
|
|
15409
|
+
onClose: flow.isMobileApp ? void 0 : flow.onBack
|
|
15374
15410
|
};
|
|
15375
15411
|
}
|
|
15376
15412
|
function buildPasskeyReadyScreenProps({ handlers }) {
|
|
@@ -15608,7 +15644,7 @@ function buildDepositScreenProps({
|
|
|
15608
15644
|
error: state.error,
|
|
15609
15645
|
onDeposit: handlers.onPay,
|
|
15610
15646
|
onSwitchWallet: () => handlers.onSetPhase({ step: "wallet-picker", reason: "switch" }),
|
|
15611
|
-
onBack: onBack ?? (() => handlers.onLogout()),
|
|
15647
|
+
onBack: state.enableFullWidget ? () => handlers.onSetPhase({ step: "deposit-options" }) : onBack ?? (() => handlers.onLogout()),
|
|
15612
15648
|
onLogout: handlers.onLogout,
|
|
15613
15649
|
onIncreaseLimit: handlers.onIncreaseLimit,
|
|
15614
15650
|
increasingLimit: state.increasingLimit,
|
|
@@ -15621,7 +15657,7 @@ function buildDepositScreenProps({
|
|
|
15621
15657
|
// the inline sheet can't render). Hosts with sources get the inline
|
|
15622
15658
|
// SelectDepositSourceScreen via onPickToken below.
|
|
15623
15659
|
onSelectToken: handlers.onSelectToken,
|
|
15624
|
-
tokenOptions: depositTokenOptions
|
|
15660
|
+
tokenOptions: depositTokenOptions,
|
|
15625
15661
|
useDeeplink: !flow.isDesktop,
|
|
15626
15662
|
onPickToken: (symbol, chainName, walletId) => {
|
|
15627
15663
|
const match = depositTokenOptions.find(
|
|
@@ -15775,13 +15811,15 @@ function buildAmountTooLowScreenProps({
|
|
|
15775
15811
|
flow,
|
|
15776
15812
|
handlers
|
|
15777
15813
|
}) {
|
|
15778
|
-
const { state, onDismiss } = flow;
|
|
15814
|
+
const { state, onDismiss, isMobileApp } = flow;
|
|
15779
15815
|
const minAmountUsd = state.phase.step === "amount-too-low" ? state.phase.minAmountUsd : state.amountTooLow?.minAmountUsd ?? flow.minTransferAmountUsd;
|
|
15780
15816
|
const canRetry = flow.depositAmount == null;
|
|
15781
15817
|
return {
|
|
15782
15818
|
minAmountUsd,
|
|
15783
15819
|
onRetry: canRetry ? handlers.onNewPayment : void 0,
|
|
15784
|
-
|
|
15820
|
+
// Inside a native mobile in-app browser the host's chrome handles
|
|
15821
|
+
// dismissal, so suppress the in-screen (X) close button.
|
|
15822
|
+
onClose: isMobileApp ? void 0 : onDismiss
|
|
15785
15823
|
};
|
|
15786
15824
|
}
|
|
15787
15825
|
function StepRenderer(props) {
|
|
@@ -18948,7 +18986,7 @@ function BlinkPaymentInner({
|
|
|
18948
18986
|
onBack,
|
|
18949
18987
|
onDismiss
|
|
18950
18988
|
}) {
|
|
18951
|
-
const { apiBaseUrl, depositAmount, minTransferAmountUsd, enableFullWidget } = useBlinkConfig();
|
|
18989
|
+
const { apiBaseUrl, depositAmount, minTransferAmountUsd, enableFullWidget, isMobileApp } = useBlinkConfig();
|
|
18952
18990
|
const { ready, authenticated, logout, getAccessToken } = reactAuth.usePrivy();
|
|
18953
18991
|
const popupAuthRef = react.useRef(loadPopupAuth());
|
|
18954
18992
|
const popupAuthValid = (() => {
|
|
@@ -19460,6 +19498,11 @@ function BlinkPaymentInner({
|
|
|
19460
19498
|
onNewPayment: handleNewPayment,
|
|
19461
19499
|
onSetPhase: (phase) => {
|
|
19462
19500
|
clearScreenErrors();
|
|
19501
|
+
if (phase.step === "deposit") {
|
|
19502
|
+
dispatch({ type: "SET_SETUP_DEPOSIT_AMOUNT", amount: null });
|
|
19503
|
+
dispatch({ type: "CLEAR_SETUP_DEPOSIT_TOKEN" });
|
|
19504
|
+
dispatch({ type: "SET_SETUP_FLOW_SCREEN", screen: null });
|
|
19505
|
+
}
|
|
19463
19506
|
dispatch({ type: "SET_USER_INTENT", intent: phase });
|
|
19464
19507
|
},
|
|
19465
19508
|
onAddProviderFromDeposit: (amount) => {
|
|
@@ -19473,6 +19516,11 @@ function BlinkPaymentInner({
|
|
|
19473
19516
|
authExecutor.cancelPendingExecution();
|
|
19474
19517
|
clearScreenErrors();
|
|
19475
19518
|
dispatch({ type: "RESTORE_SELECTION" });
|
|
19519
|
+
dispatch({ type: "SET_SETUP_DEPOSIT_AMOUNT", amount: null });
|
|
19520
|
+
dispatch({ type: "CLEAR_SETUP_DEPOSIT_TOKEN" });
|
|
19521
|
+
dispatch({ type: "SET_SETUP_FLOW_SCREEN", screen: null });
|
|
19522
|
+
dispatch({ type: "DESKTOP_WAIT_CLEARED" });
|
|
19523
|
+
dispatch({ type: "SET_STANDARD_DESKTOP_INLINE_OPEN_WALLET", value: false });
|
|
19476
19524
|
dispatch({ type: "SET_USER_INTENT", intent: { step: "deposit" } });
|
|
19477
19525
|
},
|
|
19478
19526
|
onSelectSourceChainChange: sourceSelection.handleSelectSourceChainChange,
|
|
@@ -19485,6 +19533,7 @@ function BlinkPaymentInner({
|
|
|
19485
19533
|
onPrepareTokenAuthorization: provider.handlePrepareTokenAuthorization,
|
|
19486
19534
|
onCommitTokenAuthorization: provider.handleCommitTokenAuthorization,
|
|
19487
19535
|
onLogin: () => dispatch({ type: "REQUEST_LOGIN" }),
|
|
19536
|
+
onCancelLogin: () => dispatch({ type: "CANCEL_LOGIN_REQUEST" }),
|
|
19488
19537
|
onSetDepositAmount: handleSetDepositAmount,
|
|
19489
19538
|
onSetDepositToken: handleSetDepositToken,
|
|
19490
19539
|
onConfirmSetupDeposit: handleConfirmSetupDeposit
|
|
@@ -19516,6 +19565,7 @@ function BlinkPaymentInner({
|
|
|
19516
19565
|
authenticated: effectiveAuthenticated,
|
|
19517
19566
|
passkeyLoading: auth.passkeyLoginStatus !== "initial" && auth.passkeyLoginStatus !== "done" && auth.passkeyLoginStatus !== "error" || auth.passkeySignupStatus !== "initial" && auth.passkeySignupStatus !== "done" && auth.passkeySignupStatus !== "error" || auth.passkeySignupPopupActive,
|
|
19518
19567
|
isDesktop,
|
|
19568
|
+
isMobileApp: isMobileApp ?? false,
|
|
19519
19569
|
merchantName,
|
|
19520
19570
|
onBack,
|
|
19521
19571
|
onDismiss,
|