@funkit/connect 6.14.2 → 6.14.4
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/CHANGELOG.md +36 -0
- package/dist/consts/customers.d.ts +0 -1
- package/dist/hooks/useCheckoutAccountBalanceTransfer.d.ts +1 -1
- package/dist/hooks/useCheckoutDirectExecution.d.ts +2 -1
- package/dist/hooks/useIsTokenWhitelisted.d.ts +30 -0
- package/dist/index.css +2 -2
- package/dist/index.d.ts +0 -1
- package/dist/index.js +689 -598
- package/dist/utils/checkout.d.ts +2 -1
- package/dist/utils/flags/config.d.ts +6 -14
- package/dist/wallets/walletConnectors/bifrostWallet/bifrostWallet.js +2 -2
- package/dist/wallets/walletConnectors/bitgetWallet/bitgetWallet.js +2 -2
- package/dist/wallets/walletConnectors/bybitWallet/bybitWallet.js +2 -2
- package/dist/wallets/walletConnectors/clvWallet/clvWallet.js +2 -2
- package/dist/wallets/walletConnectors/coin98Wallet/coin98Wallet.js +2 -2
- package/dist/wallets/walletConnectors/coreWallet/coreWallet.js +2 -2
- package/dist/wallets/walletConnectors/foxWallet/foxWallet.js +2 -2
- package/dist/wallets/walletConnectors/frontierWallet/frontierWallet.js +2 -2
- package/dist/wallets/walletConnectors/gateWallet/gateWallet.js +2 -2
- package/dist/wallets/walletConnectors/index.js +60 -60
- package/dist/wallets/walletConnectors/metaMaskWallet/metaMaskWallet.js +2 -2
- package/dist/wallets/walletConnectors/okxWallet/okxWallet.js +2 -2
- package/dist/wallets/walletConnectors/rainbowWallet/rainbowWallet.js +2 -2
- package/dist/wallets/walletConnectors/roninWallet/roninWallet.js +2 -2
- package/dist/wallets/walletConnectors/safepalWallet/safepalWallet.js +2 -2
- package/dist/wallets/walletConnectors/subWallet/subWallet.js +2 -2
- package/dist/wallets/walletConnectors/tokenPocketWallet/tokenPocketWallet.js +2 -2
- package/dist/wallets/walletConnectors/trustWallet/trustWallet.js +2 -2
- package/dist/wallets/walletConnectors/zerionWallet/zerionWallet.js +2 -2
- package/package.json +7 -7
- package/dist/hooks/useGooeyFilter.d.ts +0 -21
- package/dist/hooks/useIsFunkitCheckoutActivated.d.ts +0 -7
- package/dist/hooks/useMountEffect.d.ts +0 -8
- package/dist/hooks/usePathMorph.d.ts +0 -16
package/dist/index.js
CHANGED
|
@@ -519,13 +519,13 @@ import PrivyJS, {
|
|
|
519
519
|
} from "@privy-io/js-sdk-core";
|
|
520
520
|
import React227, {
|
|
521
521
|
createContext as createContext17,
|
|
522
|
-
useCallback as
|
|
522
|
+
useCallback as useCallback49,
|
|
523
523
|
useContext as useContext17,
|
|
524
524
|
useEffect as useEffect54,
|
|
525
|
-
useMemo as
|
|
525
|
+
useMemo as useMemo42,
|
|
526
526
|
useState as useState71
|
|
527
527
|
} from "react";
|
|
528
|
-
import { useConfig as
|
|
528
|
+
import { useConfig as useConfig7, useConnect as useConnect2, useDisconnect as useDisconnect2 } from "wagmi";
|
|
529
529
|
|
|
530
530
|
// src/components/ConnectButton/formatAccountName.ts
|
|
531
531
|
function formatAccountName(accountName, isEmail) {
|
|
@@ -825,6 +825,7 @@ function useFunkitConfig() {
|
|
|
825
825
|
// src/providers/provideFunkitConnectChains.ts
|
|
826
826
|
import {
|
|
827
827
|
BITCOIN_MAINNET_CHAIN_ID,
|
|
828
|
+
ETHEREAL_CHAIN_ID,
|
|
828
829
|
HYPERCORE_CHAIN_ID,
|
|
829
830
|
HYPER_EVM_CHAIN_ID,
|
|
830
831
|
KATANA_CHAIN_ID,
|
|
@@ -871,6 +872,10 @@ var ethereumIcon = {
|
|
|
871
872
|
iconBackground: "#484c50",
|
|
872
873
|
iconUrl: "https://sdk-cdn.fun.xyz/images/ethereum.svg"
|
|
873
874
|
};
|
|
875
|
+
var etherealIcon = {
|
|
876
|
+
iconBackground: "#000000",
|
|
877
|
+
iconUrl: "https://sdk-cdn.fun.xyz/images/ethereal.svg"
|
|
878
|
+
};
|
|
874
879
|
var hardhatIcon = {
|
|
875
880
|
iconBackground: "#f9f7ec",
|
|
876
881
|
iconUrl: "https://sdk-cdn.fun.xyz/images/hardhat.svg"
|
|
@@ -955,6 +960,7 @@ var chainMetadataByName = {
|
|
|
955
960
|
bscTestnet: { chainId: 97, name: "BSC Testnet", ...bscIcon },
|
|
956
961
|
cronos: { chainId: 25, name: "Cronos", ...cronosIcon },
|
|
957
962
|
cronosTestnet: { chainId: 338, name: "Cronos Testnet", ...cronosIcon },
|
|
963
|
+
ethereal: { chainId: ETHEREAL_CHAIN_ID, name: "Ethereal", ...etherealIcon },
|
|
958
964
|
goerli: { chainId: 5, name: "Goerli", ...ethereumIcon },
|
|
959
965
|
hardhat: { chainId: 31337, name: "Hardhat", ...hardhatIcon },
|
|
960
966
|
holesky: { chainId: 17e3, name: "Holesky", ...ethereumIcon },
|
|
@@ -1081,13 +1087,13 @@ var useInitialChainId = () => useContext4(FunkitConnectChainContext).initialChai
|
|
|
1081
1087
|
// src/providers/ModalContext.tsx
|
|
1082
1088
|
import React226, {
|
|
1083
1089
|
createContext as createContext16,
|
|
1084
|
-
useCallback as
|
|
1090
|
+
useCallback as useCallback48,
|
|
1085
1091
|
useContext as useContext16,
|
|
1086
1092
|
useEffect as useEffect53,
|
|
1087
|
-
useMemo as
|
|
1093
|
+
useMemo as useMemo41,
|
|
1088
1094
|
useState as useState70
|
|
1089
1095
|
} from "react";
|
|
1090
|
-
import { useAccount as useAccount10, useAccountEffect as useAccountEffect2, useConfig as
|
|
1096
|
+
import { useAccount as useAccount10, useAccountEffect as useAccountEffect2, useConfig as useConfig6 } from "wagmi";
|
|
1091
1097
|
|
|
1092
1098
|
// src/components/Dialog/Dialog.css.ts
|
|
1093
1099
|
var DialogAnimationTimeIn = 0.25;
|
|
@@ -1173,7 +1179,7 @@ import {
|
|
|
1173
1179
|
import { isNotNullish as isNotNullish3 } from "@funkit/utils";
|
|
1174
1180
|
import React14, {
|
|
1175
1181
|
createContext as createContext10,
|
|
1176
|
-
useCallback as
|
|
1182
|
+
useCallback as useCallback9,
|
|
1177
1183
|
useContext as useContext10,
|
|
1178
1184
|
useEffect as useEffect8,
|
|
1179
1185
|
useRef as useRef2,
|
|
@@ -1230,7 +1236,7 @@ import {
|
|
|
1230
1236
|
} from "@funkit/core";
|
|
1231
1237
|
import {
|
|
1232
1238
|
formatCryptoAndStringify,
|
|
1233
|
-
isTokenAddressEquivalent as
|
|
1239
|
+
isTokenAddressEquivalent as isTokenAddressEquivalent4,
|
|
1234
1240
|
round as round2,
|
|
1235
1241
|
roundUpToXDecimalPlaces
|
|
1236
1242
|
} from "@funkit/utils";
|
|
@@ -2114,10 +2120,10 @@ import {
|
|
|
2114
2120
|
initializeCheckout as postApiInitializeCheckout
|
|
2115
2121
|
} from "@funkit/api-base";
|
|
2116
2122
|
import { FUNKIT_CONNECT_SUPPORTED_CHAINS_INFO as FUNKIT_CONNECT_SUPPORTED_CHAINS_INFO3 } from "@funkit/chains";
|
|
2117
|
-
import { FlagKey as
|
|
2123
|
+
import { FlagKey as FlagKey6, isNotNullish as isNotNullish2 } from "@funkit/utils";
|
|
2118
2124
|
import React13, {
|
|
2119
2125
|
createContext as createContext9,
|
|
2120
|
-
useCallback as
|
|
2126
|
+
useCallback as useCallback8,
|
|
2121
2127
|
useContext as useContext9,
|
|
2122
2128
|
useEffect as useEffect7,
|
|
2123
2129
|
useState as useState6
|
|
@@ -2128,8 +2134,9 @@ import { v4 as uuid } from "uuid";
|
|
|
2128
2134
|
// src/hooks/useCheckoutDirectExecution.ts
|
|
2129
2135
|
import { DirectExecutionType, getCheckoutQuoteV2 } from "@funkit/api-base";
|
|
2130
2136
|
import { executeRelayQuote } from "@funkit/fun-relay";
|
|
2131
|
-
import {
|
|
2132
|
-
import {
|
|
2137
|
+
import { FlagKey as FlagKey4 } from "@funkit/utils";
|
|
2138
|
+
import { useCallback as useCallback5 } from "react";
|
|
2139
|
+
import { useConfig as useConfig2, useWalletClient } from "wagmi";
|
|
2133
2140
|
|
|
2134
2141
|
// src/consts/checkout.ts
|
|
2135
2142
|
var CHECKOUT_STEP_MESSAGE = {
|
|
@@ -2146,48 +2153,10 @@ var WEB3_ACCOUNT_BALANCE_MESSAGE = {
|
|
|
2146
2153
|
[2 /* APPROVE_TRANSFER */]: (tokenSymbol) => `Confirm ${tokenSymbol} transfer`
|
|
2147
2154
|
};
|
|
2148
2155
|
|
|
2149
|
-
// src/hooks/
|
|
2150
|
-
import {
|
|
2156
|
+
// src/hooks/useIsTokenWhitelisted.ts
|
|
2157
|
+
import { isTokenAddressEquivalent as isTokenAddressEquivalent2 } from "@funkit/utils";
|
|
2151
2158
|
import { useCallback as useCallback3, useMemo as useMemo7 } from "react";
|
|
2152
2159
|
|
|
2153
|
-
// src/consts/customers.ts
|
|
2154
|
-
import {
|
|
2155
|
-
BANKR_API_KEY,
|
|
2156
|
-
BASED_API_KEY,
|
|
2157
|
-
BSX_API_KEY,
|
|
2158
|
-
ETHEREAL_API_KEY,
|
|
2159
|
-
HYPERBEAT_API_KEY,
|
|
2160
|
-
KALSHI_API_KEY,
|
|
2161
|
-
KATANA_API_KEY,
|
|
2162
|
-
MONKEY_TILT_API_KEY,
|
|
2163
|
-
OSTIUM_API_KEY,
|
|
2164
|
-
POLYMARKET_API_KEY
|
|
2165
|
-
} from "@funkit/api-base";
|
|
2166
|
-
function isPolymarketCustomer(apiKey) {
|
|
2167
|
-
return apiKey === POLYMARKET_API_KEY;
|
|
2168
|
-
}
|
|
2169
|
-
function isOstiumCustomer(apiKey) {
|
|
2170
|
-
return apiKey === OSTIUM_API_KEY;
|
|
2171
|
-
}
|
|
2172
|
-
function isBankrCustomer(apiKey) {
|
|
2173
|
-
return apiKey === BANKR_API_KEY;
|
|
2174
|
-
}
|
|
2175
|
-
function isEtherealCustomer(apiKey) {
|
|
2176
|
-
return apiKey === ETHEREAL_API_KEY;
|
|
2177
|
-
}
|
|
2178
|
-
function isKatanaCustomer(apiKey) {
|
|
2179
|
-
return apiKey === KATANA_API_KEY;
|
|
2180
|
-
}
|
|
2181
|
-
function isHyperbeatCustomer(apiKey) {
|
|
2182
|
-
return apiKey === HYPERBEAT_API_KEY;
|
|
2183
|
-
}
|
|
2184
|
-
function isBasedCustomer(apiKey) {
|
|
2185
|
-
return apiKey === BASED_API_KEY;
|
|
2186
|
-
}
|
|
2187
|
-
function isKalshiCustomer(apiKey) {
|
|
2188
|
-
return apiKey === KALSHI_API_KEY;
|
|
2189
|
-
}
|
|
2190
|
-
|
|
2191
2160
|
// src/providers/FunkitFlagsProvider.tsx
|
|
2192
2161
|
import { datadogLogs as datadogLogs2 } from "@datadog/browser-logs";
|
|
2193
2162
|
import { useQuery as useQuery2 } from "@tanstack/react-query";
|
|
@@ -2200,19 +2169,18 @@ import React12, {
|
|
|
2200
2169
|
|
|
2201
2170
|
// src/utils/flags/config.ts
|
|
2202
2171
|
import {
|
|
2203
|
-
BANKR_API_KEY
|
|
2204
|
-
BASED_API_KEY
|
|
2172
|
+
BANKR_API_KEY,
|
|
2173
|
+
BASED_API_KEY,
|
|
2205
2174
|
CAMBRIA_API_KEY,
|
|
2206
2175
|
DEGEN_API_KEY,
|
|
2207
2176
|
DEV_API_KEY as DEV_API_KEY2,
|
|
2208
|
-
HYPERBEAT_API_KEY
|
|
2177
|
+
HYPERBEAT_API_KEY,
|
|
2209
2178
|
HYPERDASH_API_KEY,
|
|
2210
2179
|
HYPERSWAP_API_KEY,
|
|
2211
|
-
|
|
2212
|
-
|
|
2213
|
-
|
|
2214
|
-
|
|
2215
|
-
POLYMARKET_API_KEY as POLYMARKET_API_KEY2,
|
|
2180
|
+
KATANA_API_KEY,
|
|
2181
|
+
MONKEY_TILT_API_KEY,
|
|
2182
|
+
OSTIUM_API_KEY,
|
|
2183
|
+
POLYMARKET_API_KEY,
|
|
2216
2184
|
SUSHI_API_KEY,
|
|
2217
2185
|
VENTUALS_API_KEY
|
|
2218
2186
|
} from "@funkit/api-base";
|
|
@@ -2274,7 +2242,7 @@ var QR_CODE_EVM = {
|
|
|
2274
2242
|
// abstract
|
|
2275
2243
|
2741: ["USDC.e", "ETH", "WETH", "USDT"],
|
|
2276
2244
|
// hyperevm. TODO: Consider adding UETH, hbHYPE, stHYPE once their icons are in assets.ts. Also holding back as they are lower mkt cap tokens and would overcrowd our UI.
|
|
2277
|
-
999: ["HYPE", "WETH", "USDT", "UBTC", "USDe"]
|
|
2245
|
+
999: ["USDC", "HYPE", "WETH", "USDT", "UBTC", "USDe"]
|
|
2278
2246
|
};
|
|
2279
2247
|
var QR_CODE_WITH_SOLANA = {
|
|
2280
2248
|
...QR_CODE_EVM,
|
|
@@ -2301,7 +2269,7 @@ var flagConfig = {
|
|
|
2301
2269
|
{
|
|
2302
2270
|
key: "apiKey",
|
|
2303
2271
|
type: "isAnyOf",
|
|
2304
|
-
values: [DEGEN_API_KEY,
|
|
2272
|
+
values: [DEGEN_API_KEY, BANKR_API_KEY, BASED_API_KEY]
|
|
2305
2273
|
}
|
|
2306
2274
|
],
|
|
2307
2275
|
// Do not block US for Degen, since its still pure slow flow
|
|
@@ -2315,10 +2283,10 @@ var flagConfig = {
|
|
|
2315
2283
|
{
|
|
2316
2284
|
key: "apiKey",
|
|
2317
2285
|
type: "isAnyOf",
|
|
2318
|
-
values: [
|
|
2286
|
+
values: [POLYMARKET_API_KEY, KATANA_API_KEY]
|
|
2319
2287
|
}
|
|
2320
2288
|
],
|
|
2321
|
-
// Turn off geoblock for PM / Katana
|
|
2289
|
+
// Turn off geoblock for PM / Katana on our end.
|
|
2322
2290
|
// These clients will handle the conditional display of the Deposit button.
|
|
2323
2291
|
value: ""
|
|
2324
2292
|
}
|
|
@@ -2342,7 +2310,7 @@ var flagConfig = {
|
|
|
2342
2310
|
{
|
|
2343
2311
|
key: "apiKey",
|
|
2344
2312
|
type: "isAnyOf",
|
|
2345
|
-
values: [
|
|
2313
|
+
values: [KATANA_API_KEY]
|
|
2346
2314
|
}
|
|
2347
2315
|
],
|
|
2348
2316
|
value: true
|
|
@@ -2359,18 +2327,17 @@ var flagConfig = {
|
|
|
2359
2327
|
key: "apiKey",
|
|
2360
2328
|
type: "isAnyOf",
|
|
2361
2329
|
values: [
|
|
2362
|
-
|
|
2363
|
-
|
|
2364
|
-
|
|
2365
|
-
|
|
2366
|
-
|
|
2330
|
+
POLYMARKET_API_KEY,
|
|
2331
|
+
OSTIUM_API_KEY,
|
|
2332
|
+
BANKR_API_KEY,
|
|
2333
|
+
BASED_API_KEY,
|
|
2334
|
+
KATANA_API_KEY,
|
|
2367
2335
|
CAMBRIA_API_KEY,
|
|
2368
|
-
|
|
2336
|
+
HYPERBEAT_API_KEY,
|
|
2369
2337
|
HYPERSWAP_API_KEY,
|
|
2370
2338
|
HYPERDASH_API_KEY,
|
|
2371
|
-
|
|
2372
|
-
VENTUALS_API_KEY
|
|
2373
|
-
KALSHI_API_KEY2
|
|
2339
|
+
MONKEY_TILT_API_KEY,
|
|
2340
|
+
VENTUALS_API_KEY
|
|
2374
2341
|
]
|
|
2375
2342
|
}
|
|
2376
2343
|
],
|
|
@@ -2415,13 +2382,12 @@ var flagConfig = {
|
|
|
2415
2382
|
type: "isAnyOf",
|
|
2416
2383
|
values: [
|
|
2417
2384
|
DEV_API_KEY2,
|
|
2418
|
-
|
|
2419
|
-
|
|
2385
|
+
POLYMARKET_API_KEY,
|
|
2386
|
+
OSTIUM_API_KEY
|
|
2420
2387
|
// HYPERBEAT_API_KEY,
|
|
2421
2388
|
// HYPERDASH_API_KEY,
|
|
2422
2389
|
// BASED_API_KEY,
|
|
2423
2390
|
// VENTUALS_API_KEY
|
|
2424
|
-
// KALSHI_API_KEY
|
|
2425
2391
|
]
|
|
2426
2392
|
}
|
|
2427
2393
|
],
|
|
@@ -2475,10 +2441,10 @@ var flagConfig = {
|
|
|
2475
2441
|
key: "apiKey",
|
|
2476
2442
|
type: "isAnyOf",
|
|
2477
2443
|
values: [
|
|
2478
|
-
|
|
2479
|
-
|
|
2480
|
-
|
|
2481
|
-
|
|
2444
|
+
POLYMARKET_API_KEY,
|
|
2445
|
+
OSTIUM_API_KEY,
|
|
2446
|
+
BANKR_API_KEY,
|
|
2447
|
+
KATANA_API_KEY
|
|
2482
2448
|
]
|
|
2483
2449
|
}
|
|
2484
2450
|
],
|
|
@@ -2502,7 +2468,7 @@ var flagConfig = {
|
|
|
2502
2468
|
{
|
|
2503
2469
|
key: "apiKey",
|
|
2504
2470
|
type: "isAnyOf",
|
|
2505
|
-
values: [
|
|
2471
|
+
values: [OSTIUM_API_KEY]
|
|
2506
2472
|
}
|
|
2507
2473
|
],
|
|
2508
2474
|
value: arbitrum.id.toString()
|
|
@@ -2512,7 +2478,7 @@ var flagConfig = {
|
|
|
2512
2478
|
{
|
|
2513
2479
|
key: "apiKey",
|
|
2514
2480
|
type: "isAnyOf",
|
|
2515
|
-
values: [
|
|
2481
|
+
values: [BANKR_API_KEY]
|
|
2516
2482
|
}
|
|
2517
2483
|
],
|
|
2518
2484
|
value: base3.id.toString()
|
|
@@ -2535,7 +2501,7 @@ var flagConfig = {
|
|
|
2535
2501
|
{
|
|
2536
2502
|
key: "apiKey",
|
|
2537
2503
|
type: "isAnyOf",
|
|
2538
|
-
values: [
|
|
2504
|
+
values: [POLYMARKET_API_KEY]
|
|
2539
2505
|
}
|
|
2540
2506
|
],
|
|
2541
2507
|
value: JSON.stringify({
|
|
@@ -2653,7 +2619,7 @@ var flagConfig = {
|
|
|
2653
2619
|
{
|
|
2654
2620
|
key: "apiKey",
|
|
2655
2621
|
type: "isAnyOf",
|
|
2656
|
-
values: [
|
|
2622
|
+
values: [KATANA_API_KEY]
|
|
2657
2623
|
}
|
|
2658
2624
|
],
|
|
2659
2625
|
value: false
|
|
@@ -2737,13 +2703,12 @@ var flagConfig = {
|
|
|
2737
2703
|
values: [
|
|
2738
2704
|
SUSHI_API_KEY,
|
|
2739
2705
|
HYPERSWAP_API_KEY,
|
|
2740
|
-
|
|
2706
|
+
HYPERBEAT_API_KEY,
|
|
2741
2707
|
HYPERDASH_API_KEY,
|
|
2742
|
-
|
|
2743
|
-
|
|
2744
|
-
|
|
2745
|
-
VENTUALS_API_KEY
|
|
2746
|
-
KALSHI_API_KEY2
|
|
2708
|
+
BASED_API_KEY,
|
|
2709
|
+
OSTIUM_API_KEY,
|
|
2710
|
+
POLYMARKET_API_KEY,
|
|
2711
|
+
VENTUALS_API_KEY
|
|
2747
2712
|
]
|
|
2748
2713
|
}
|
|
2749
2714
|
],
|
|
@@ -2795,14 +2760,6 @@ var flagConfig = {
|
|
|
2795
2760
|
137: []
|
|
2796
2761
|
})
|
|
2797
2762
|
},
|
|
2798
|
-
[FlagKey.WithdrawalExcludeChains]: {
|
|
2799
|
-
type: "string",
|
|
2800
|
-
default_value: JSON.stringify([56, 10])
|
|
2801
|
-
},
|
|
2802
|
-
[FlagKey.EnableSourceNavigationWidget]: {
|
|
2803
|
-
type: "boolean",
|
|
2804
|
-
default_value: false
|
|
2805
|
-
},
|
|
2806
2763
|
[FlagKey.TokenTransferDefaultTokens]: {
|
|
2807
2764
|
type: "string",
|
|
2808
2765
|
default_value: "",
|
|
@@ -2812,7 +2769,7 @@ var flagConfig = {
|
|
|
2812
2769
|
{
|
|
2813
2770
|
key: "apiKey",
|
|
2814
2771
|
type: "isAnyOf",
|
|
2815
|
-
values: [
|
|
2772
|
+
values: [POLYMARKET_API_KEY]
|
|
2816
2773
|
}
|
|
2817
2774
|
],
|
|
2818
2775
|
value: JSON.stringify(["USDC", "USDC.e"])
|
|
@@ -2862,7 +2819,7 @@ var flagConfig = {
|
|
|
2862
2819
|
{
|
|
2863
2820
|
key: "apiKey",
|
|
2864
2821
|
type: "isAnyOf",
|
|
2865
|
-
values: [
|
|
2822
|
+
values: [BASED_API_KEY]
|
|
2866
2823
|
}
|
|
2867
2824
|
],
|
|
2868
2825
|
value: JSON.stringify({
|
|
@@ -3002,6 +2959,40 @@ import React11, {
|
|
|
3002
2959
|
} from "react";
|
|
3003
2960
|
import { FlagKey as FlagKey2 } from "@funkit/utils";
|
|
3004
2961
|
|
|
2962
|
+
// src/consts/customers.ts
|
|
2963
|
+
import {
|
|
2964
|
+
BANKR_API_KEY as BANKR_API_KEY2,
|
|
2965
|
+
BASED_API_KEY as BASED_API_KEY2,
|
|
2966
|
+
BSX_API_KEY,
|
|
2967
|
+
ETHEREAL_API_KEY,
|
|
2968
|
+
HYPERBEAT_API_KEY as HYPERBEAT_API_KEY2,
|
|
2969
|
+
KATANA_API_KEY as KATANA_API_KEY2,
|
|
2970
|
+
MONKEY_TILT_API_KEY as MONKEY_TILT_API_KEY2,
|
|
2971
|
+
OSTIUM_API_KEY as OSTIUM_API_KEY2,
|
|
2972
|
+
POLYMARKET_API_KEY as POLYMARKET_API_KEY2
|
|
2973
|
+
} from "@funkit/api-base";
|
|
2974
|
+
function isPolymarketCustomer(apiKey) {
|
|
2975
|
+
return apiKey === POLYMARKET_API_KEY2;
|
|
2976
|
+
}
|
|
2977
|
+
function isOstiumCustomer(apiKey) {
|
|
2978
|
+
return apiKey === OSTIUM_API_KEY2;
|
|
2979
|
+
}
|
|
2980
|
+
function isBankrCustomer(apiKey) {
|
|
2981
|
+
return apiKey === BANKR_API_KEY2;
|
|
2982
|
+
}
|
|
2983
|
+
function isEtherealCustomer(apiKey) {
|
|
2984
|
+
return apiKey === ETHEREAL_API_KEY;
|
|
2985
|
+
}
|
|
2986
|
+
function isKatanaCustomer(apiKey) {
|
|
2987
|
+
return apiKey === KATANA_API_KEY2;
|
|
2988
|
+
}
|
|
2989
|
+
function isHyperbeatCustomer(apiKey) {
|
|
2990
|
+
return apiKey === HYPERBEAT_API_KEY2;
|
|
2991
|
+
}
|
|
2992
|
+
function isBasedCustomer(apiKey) {
|
|
2993
|
+
return apiKey === BASED_API_KEY2;
|
|
2994
|
+
}
|
|
2995
|
+
|
|
3005
2996
|
// src/providers/FunkitSandboxContext.tsx
|
|
3006
2997
|
import { createContext as createContext6, useContext as useContext6 } from "react";
|
|
3007
2998
|
var FunkitSandboxContext = createContext6(false);
|
|
@@ -3079,7 +3070,6 @@ function useFunkitUserIp() {
|
|
|
3079
3070
|
const { apiKey } = useFunkitConfig();
|
|
3080
3071
|
const isPolymarket = isPolymarketCustomer(apiKey);
|
|
3081
3072
|
const isHyperbeat = isHyperbeatCustomer(apiKey);
|
|
3082
|
-
const isKalshi = isKalshiCustomer(apiKey);
|
|
3083
3073
|
const { data: userIpInfo, isLoading: isLoadingGeoCheck } = useQuery({
|
|
3084
3074
|
queryKey: ["getUserIpInfo"],
|
|
3085
3075
|
queryFn: async () => {
|
|
@@ -3110,7 +3100,7 @@ function useFunkitUserIp() {
|
|
|
3110
3100
|
refetchOnWindowFocus: false
|
|
3111
3101
|
});
|
|
3112
3102
|
const isUserGeoblocked = useMemo5(() => {
|
|
3113
|
-
if (isLoadingFlags || isLoadingGeoCheck || isPolymarket || isHyperbeat
|
|
3103
|
+
if (isLoadingFlags || isLoadingGeoCheck || isPolymarket || isHyperbeat) {
|
|
3114
3104
|
return false;
|
|
3115
3105
|
}
|
|
3116
3106
|
if (!userIpInfo) {
|
|
@@ -3124,8 +3114,7 @@ function useFunkitUserIp() {
|
|
|
3124
3114
|
isLoadingGeoCheck,
|
|
3125
3115
|
userIpInfo,
|
|
3126
3116
|
isPolymarket,
|
|
3127
|
-
isHyperbeat
|
|
3128
|
-
isKalshi
|
|
3117
|
+
isHyperbeat
|
|
3129
3118
|
]);
|
|
3130
3119
|
return {
|
|
3131
3120
|
isLoadingGeoCheck: isLoadingFlags || isLoadingGeoCheck,
|
|
@@ -3211,13 +3200,57 @@ function safeJSONParse(src) {
|
|
|
3211
3200
|
});
|
|
3212
3201
|
}
|
|
3213
3202
|
|
|
3203
|
+
// src/hooks/useIsTokenWhitelisted.ts
|
|
3204
|
+
var MATCH_ALL = "*";
|
|
3205
|
+
var useIsTokenWhitelisted = (flagKey) => {
|
|
3206
|
+
const whitelistedTokensString = useFlag(flagKey);
|
|
3207
|
+
const whitelistedTokensByChainId = useMemo7(
|
|
3208
|
+
() => safeJSONParse(whitelistedTokensString),
|
|
3209
|
+
[whitelistedTokensString]
|
|
3210
|
+
);
|
|
3211
|
+
const isTokenWhitelisted = useCallback3(
|
|
3212
|
+
(chainId, tokenAddress) => {
|
|
3213
|
+
const tokensForChainId = toArrayIfString(whitelistedTokensByChainId?.[chainId]) ?? [];
|
|
3214
|
+
const tokensForAllChains = toArrayIfString(whitelistedTokensByChainId?.[MATCH_ALL]) ?? [];
|
|
3215
|
+
const tokens = [
|
|
3216
|
+
...tokensForChainId,
|
|
3217
|
+
// whitelisted tokens for the `chainId` provided
|
|
3218
|
+
...tokensForAllChains
|
|
3219
|
+
// whitelisted tokens for all chains
|
|
3220
|
+
];
|
|
3221
|
+
if (tokens.length === 0) {
|
|
3222
|
+
return false;
|
|
3223
|
+
}
|
|
3224
|
+
if (tokens.includes("*")) {
|
|
3225
|
+
return true;
|
|
3226
|
+
}
|
|
3227
|
+
return tokens.some(
|
|
3228
|
+
(currentTokenAddress) => isTokenAddressEquivalent2({
|
|
3229
|
+
firstTokenAddress: currentTokenAddress,
|
|
3230
|
+
secondTokenAddress: tokenAddress
|
|
3231
|
+
})
|
|
3232
|
+
);
|
|
3233
|
+
},
|
|
3234
|
+
[whitelistedTokensByChainId]
|
|
3235
|
+
);
|
|
3236
|
+
return isTokenWhitelisted;
|
|
3237
|
+
};
|
|
3238
|
+
var toArrayIfString = (value) => {
|
|
3239
|
+
if (typeof value === "string") {
|
|
3240
|
+
return [value];
|
|
3241
|
+
}
|
|
3242
|
+
return value;
|
|
3243
|
+
};
|
|
3244
|
+
|
|
3214
3245
|
// src/hooks/useRelayBypass.ts
|
|
3246
|
+
import { FlagKey as FlagKey3, isTokenAddressEquivalent as isTokenAddressEquivalent3 } from "@funkit/utils";
|
|
3247
|
+
import { useCallback as useCallback4, useMemo as useMemo8 } from "react";
|
|
3215
3248
|
var isTokenFlagEnabled = (tokenList, tokenAddress) => {
|
|
3216
3249
|
if (tokenList.includes("*")) {
|
|
3217
3250
|
return true;
|
|
3218
3251
|
}
|
|
3219
3252
|
return tokenList.some(
|
|
3220
|
-
(t) =>
|
|
3253
|
+
(t) => isTokenAddressEquivalent3({
|
|
3221
3254
|
firstTokenAddress: t,
|
|
3222
3255
|
secondTokenAddress: tokenAddress
|
|
3223
3256
|
})
|
|
@@ -3228,11 +3261,11 @@ function useSourceTokenRelayEnabled() {
|
|
|
3228
3261
|
const sourceTokensJsonString = useFlag(
|
|
3229
3262
|
FlagKey3.RelayBypassSourceChainsAndAssets
|
|
3230
3263
|
);
|
|
3231
|
-
const sourceTokens =
|
|
3264
|
+
const sourceTokens = useMemo8(
|
|
3232
3265
|
() => safeJSONParse(sourceTokensJsonString),
|
|
3233
3266
|
[sourceTokensJsonString]
|
|
3234
3267
|
);
|
|
3235
|
-
const isAllowed =
|
|
3268
|
+
const isAllowed = useCallback4(
|
|
3236
3269
|
(chainId, tokenAddress) => {
|
|
3237
3270
|
return isRelayBypassEnabled && isTokenFlagEnabled(
|
|
3238
3271
|
sourceTokens?.[Number.parseInt(`${chainId}`)] || [],
|
|
@@ -3258,7 +3291,7 @@ function useRelayBypass() {
|
|
|
3258
3291
|
const targetTokens = safeJSONParse(
|
|
3259
3292
|
targetTokensJsonString
|
|
3260
3293
|
);
|
|
3261
|
-
const paymentMethodWhitelistConfig =
|
|
3294
|
+
const paymentMethodWhitelistConfig = useMemo8(() => {
|
|
3262
3295
|
if (isKatanaCustomer(apiKey)) {
|
|
3263
3296
|
return {
|
|
3264
3297
|
relayPaymentMethods: [
|
|
@@ -3276,7 +3309,7 @@ function useRelayBypass() {
|
|
|
3276
3309
|
};
|
|
3277
3310
|
}, [apiKey]);
|
|
3278
3311
|
return {
|
|
3279
|
-
getIsRelayEnabled:
|
|
3312
|
+
getIsRelayEnabled: useCallback4(
|
|
3280
3313
|
({
|
|
3281
3314
|
fromChainId,
|
|
3282
3315
|
fromTokenAddress,
|
|
@@ -3323,7 +3356,9 @@ function useCheckoutDirectExecution() {
|
|
|
3323
3356
|
const { data: walletClient } = useWalletClient();
|
|
3324
3357
|
const { getIsRelayEnabled } = useRelayBypass();
|
|
3325
3358
|
const { apiKey } = useFunkitConfig();
|
|
3326
|
-
const
|
|
3359
|
+
const isPermitEnabledForToken = useIsTokenWhitelisted(FlagKey4.Permit2Tokens);
|
|
3360
|
+
const wagmiConfig = useConfig2();
|
|
3361
|
+
const getRelayDirectExecutionBaseQuote = useCallback5(
|
|
3327
3362
|
async (params) => {
|
|
3328
3363
|
const {
|
|
3329
3364
|
actionParams,
|
|
@@ -3334,6 +3369,13 @@ function useCheckoutDirectExecution() {
|
|
|
3334
3369
|
recipientAddress,
|
|
3335
3370
|
senderAddress = address
|
|
3336
3371
|
} = params;
|
|
3372
|
+
const doesHaveGasToken = await hasGasToken(
|
|
3373
|
+
wagmiConfig,
|
|
3374
|
+
address,
|
|
3375
|
+
fromChainId
|
|
3376
|
+
);
|
|
3377
|
+
const usePermit = doesHaveGasToken === false && // Check if the wallet has gas token (e.g. ETH > 0 on eth mainnet)
|
|
3378
|
+
isPermitEnabledForToken(fromChainId, fromTokenAddress);
|
|
3337
3379
|
const getCheckoutQuoteParams = {
|
|
3338
3380
|
actionParams,
|
|
3339
3381
|
apiKey,
|
|
@@ -3343,7 +3385,8 @@ function useCheckoutDirectExecution() {
|
|
|
3343
3385
|
recipientAddress,
|
|
3344
3386
|
toChainId,
|
|
3345
3387
|
toTokenAddress,
|
|
3346
|
-
userAddress: senderAddress
|
|
3388
|
+
userAddress: senderAddress,
|
|
3389
|
+
usePermit
|
|
3347
3390
|
};
|
|
3348
3391
|
if (params.isExactIn) {
|
|
3349
3392
|
const { fromTokenDecimals, fromTokenAmount } = params;
|
|
@@ -3360,9 +3403,9 @@ function useCheckoutDirectExecution() {
|
|
|
3360
3403
|
toAmountBaseUnit: BigInt(Math.floor(toTokenAmount * multiplier))
|
|
3361
3404
|
});
|
|
3362
3405
|
},
|
|
3363
|
-
[address, apiKey]
|
|
3406
|
+
[address, apiKey, isPermitEnabledForToken, wagmiConfig]
|
|
3364
3407
|
);
|
|
3365
|
-
const checkAndSwitchChains =
|
|
3408
|
+
const checkAndSwitchChains = useCallback5(
|
|
3366
3409
|
async ({
|
|
3367
3410
|
executionChainId,
|
|
3368
3411
|
stepMessageSetter
|
|
@@ -3386,7 +3429,7 @@ function useCheckoutDirectExecution() {
|
|
|
3386
3429
|
},
|
|
3387
3430
|
[connector, switchChainAsync]
|
|
3388
3431
|
);
|
|
3389
|
-
const startRelayDirectExecution =
|
|
3432
|
+
const startRelayDirectExecution = useCallback5(
|
|
3390
3433
|
async ({
|
|
3391
3434
|
checkoutItem,
|
|
3392
3435
|
latestQuote,
|
|
@@ -3463,7 +3506,7 @@ function useCheckoutDirectExecution() {
|
|
|
3463
3506
|
},
|
|
3464
3507
|
[walletClient, checkAndSwitchChains]
|
|
3465
3508
|
);
|
|
3466
|
-
const getDirectExecutionInfo =
|
|
3509
|
+
const getDirectExecutionInfo = useCallback5(
|
|
3467
3510
|
(checkoutItem) => {
|
|
3468
3511
|
const noop10 = {
|
|
3469
3512
|
isDirectExecution: false,
|
|
@@ -3501,7 +3544,7 @@ function useCheckoutDirectExecution() {
|
|
|
3501
3544
|
startRelayDirectExecution
|
|
3502
3545
|
]
|
|
3503
3546
|
);
|
|
3504
|
-
const getWithdrawalDirectExecution =
|
|
3547
|
+
const getWithdrawalDirectExecution = useCallback5(() => {
|
|
3505
3548
|
const quoteAction = getRelayDirectExecutionBaseQuote;
|
|
3506
3549
|
const executeAction = startRelayDirectExecution;
|
|
3507
3550
|
return {
|
|
@@ -3521,9 +3564,9 @@ function useCheckoutDirectExecution() {
|
|
|
3521
3564
|
import {
|
|
3522
3565
|
initializeCheckoutTokenTransferAddress
|
|
3523
3566
|
} from "@funkit/api-base";
|
|
3524
|
-
import { FlagKey as
|
|
3567
|
+
import { FlagKey as FlagKey5 } from "@funkit/utils";
|
|
3525
3568
|
import { useQuery as useQuery3 } from "@tanstack/react-query";
|
|
3526
|
-
import { useCallback as
|
|
3569
|
+
import { useCallback as useCallback6 } from "react";
|
|
3527
3570
|
|
|
3528
3571
|
// src/domains/clientMetadata.ts
|
|
3529
3572
|
function generateClientMetadataForBackend({
|
|
@@ -3596,7 +3639,7 @@ var useCheckoutTransferInit = () => {
|
|
|
3596
3639
|
const checkoutConfig = checkoutItem?.initSettings.config;
|
|
3597
3640
|
const { walletAddress, userInfo } = useGeneralWallet();
|
|
3598
3641
|
const { apiKey } = useFunkitConfig();
|
|
3599
|
-
const isQrCodeEnabled = useFlag(
|
|
3642
|
+
const isQrCodeEnabled = useFlag(FlagKey5.EnableTokenTransfer, false);
|
|
3600
3643
|
const recipientAddr = checkoutConfig?.customRecipient || walletAddress || "0x";
|
|
3601
3644
|
const queryKey = {
|
|
3602
3645
|
userId: userInfo.id || "",
|
|
@@ -3606,7 +3649,7 @@ var useCheckoutTransferInit = () => {
|
|
|
3606
3649
|
apiKey,
|
|
3607
3650
|
actionType: checkoutConfig?.qrcodeActionType
|
|
3608
3651
|
};
|
|
3609
|
-
const queryFunction =
|
|
3652
|
+
const queryFunction = useCallback6(
|
|
3610
3653
|
async (params) => {
|
|
3611
3654
|
return await initializeCheckoutTokenTransferAddress({
|
|
3612
3655
|
...params,
|
|
@@ -3638,13 +3681,13 @@ var useCheckoutTransferInit = () => {
|
|
|
3638
3681
|
};
|
|
3639
3682
|
|
|
3640
3683
|
// src/hooks/useEffectEvent.ts
|
|
3641
|
-
import { useCallback as
|
|
3684
|
+
import { useCallback as useCallback7, useInsertionEffect, useRef } from "react";
|
|
3642
3685
|
function useEffectEvent(fn) {
|
|
3643
3686
|
const savedCallback = useRef(fn);
|
|
3644
3687
|
useInsertionEffect(() => {
|
|
3645
3688
|
savedCallback.current = fn;
|
|
3646
3689
|
}, [fn]);
|
|
3647
|
-
return
|
|
3690
|
+
return useCallback7(
|
|
3648
3691
|
((...args) => {
|
|
3649
3692
|
const f = savedCallback.current;
|
|
3650
3693
|
return f(...args);
|
|
@@ -3714,13 +3757,13 @@ function FunkitCheckoutProvider({ children }) {
|
|
|
3714
3757
|
const [activeCheckout, setActiveCheckout] = useState6(null);
|
|
3715
3758
|
const [activeWithdrawal, setActiveWithdrawal] = useState6(null);
|
|
3716
3759
|
const [checkoutsProgress, setCheckoutsProgress] = useState6({});
|
|
3717
|
-
const getCheckoutProgress =
|
|
3760
|
+
const getCheckoutProgress = useCallback8(
|
|
3718
3761
|
(checkoutId) => {
|
|
3719
3762
|
return checkoutsProgress[checkoutId];
|
|
3720
3763
|
},
|
|
3721
3764
|
[checkoutsProgress]
|
|
3722
3765
|
);
|
|
3723
|
-
const setCheckoutProgress =
|
|
3766
|
+
const setCheckoutProgress = useCallback8(
|
|
3724
3767
|
(checkoutId, progress) => {
|
|
3725
3768
|
setCheckoutsProgress((data) => ({ ...data, [checkoutId]: progress }));
|
|
3726
3769
|
},
|
|
@@ -3742,7 +3785,7 @@ function FunkitCheckoutProvider({ children }) {
|
|
|
3742
3785
|
});
|
|
3743
3786
|
}
|
|
3744
3787
|
);
|
|
3745
|
-
const initNewWithdrawal =
|
|
3788
|
+
const initNewWithdrawal = useCallback8(
|
|
3746
3789
|
(props) => {
|
|
3747
3790
|
const { onWithdrawalConfirmation, onWithdrawalError, config } = props;
|
|
3748
3791
|
const newWithdrawalId = uuid();
|
|
@@ -3760,7 +3803,7 @@ function FunkitCheckoutProvider({ children }) {
|
|
|
3760
3803
|
},
|
|
3761
3804
|
[]
|
|
3762
3805
|
);
|
|
3763
|
-
const initNewCheckout =
|
|
3806
|
+
const initNewCheckout = useCallback8(
|
|
3764
3807
|
({ config, ...initSettings }) => {
|
|
3765
3808
|
const newCheckoutId = uuid();
|
|
3766
3809
|
const newActiveCheckoutItem = {
|
|
@@ -3835,7 +3878,7 @@ function FunkitCheckoutProvider({ children }) {
|
|
|
3835
3878
|
});
|
|
3836
3879
|
}
|
|
3837
3880
|
);
|
|
3838
|
-
const startDirectExecutionCheckout =
|
|
3881
|
+
const startDirectExecutionCheckout = useCallback8(
|
|
3839
3882
|
async ({
|
|
3840
3883
|
stepMessageSetter,
|
|
3841
3884
|
latestQuote,
|
|
@@ -3921,7 +3964,7 @@ function FunkitCheckoutProvider({ children }) {
|
|
|
3921
3964
|
manualFetch
|
|
3922
3965
|
]
|
|
3923
3966
|
);
|
|
3924
|
-
const startRegularCheckout =
|
|
3967
|
+
const startRegularCheckout = useCallback8(
|
|
3925
3968
|
async ({
|
|
3926
3969
|
stepMessageSetter,
|
|
3927
3970
|
latestQuote,
|
|
@@ -4121,15 +4164,15 @@ function useFunkitCheckout(props) {
|
|
|
4121
4164
|
const { openWithdrawalModal } = useWithdrawalModal();
|
|
4122
4165
|
const { connectModalOpen, openConnectModal } = useConnectModal();
|
|
4123
4166
|
const { isUserLoggedIn } = useGeneralWallet();
|
|
4124
|
-
const isCheckoutActivated = useFlag(
|
|
4125
|
-
const onErrorWrapper =
|
|
4167
|
+
const isCheckoutActivated = useFlag(FlagKey6.IsCheckoutActivated);
|
|
4168
|
+
const onErrorWrapper = useCallback8(
|
|
4126
4169
|
(payload) => {
|
|
4127
4170
|
logger.warn(payload.message, payload);
|
|
4128
4171
|
onError?.(payload);
|
|
4129
4172
|
},
|
|
4130
4173
|
[onError]
|
|
4131
4174
|
);
|
|
4132
|
-
const onOpenWrapper =
|
|
4175
|
+
const onOpenWrapper = useCallback8(
|
|
4133
4176
|
(newId) => {
|
|
4134
4177
|
props?.onOpen?.();
|
|
4135
4178
|
openFunCheckoutModal?.(newId);
|
|
@@ -4321,18 +4364,6 @@ async function validateCheckoutConfig(config) {
|
|
|
4321
4364
|
message: `Invalid targetChain configuration: Unsupported chain id ${config.targetChain} for checkout.`
|
|
4322
4365
|
};
|
|
4323
4366
|
}
|
|
4324
|
-
const chainCheckoutAssetWhitelist = FUNKIT_CONNECT_SUPPORTED_CHAINS_INFO4[config.targetChain]?.checkoutAssetWhitelist || [];
|
|
4325
|
-
if (chainCheckoutAssetWhitelist?.[0] !== "*" && !chainCheckoutAssetWhitelist.some(
|
|
4326
|
-
(asset) => isTokenAddressEquivalent3({
|
|
4327
|
-
firstTokenAddress: asset,
|
|
4328
|
-
secondTokenAddress: config.targetAsset || ""
|
|
4329
|
-
})
|
|
4330
|
-
)) {
|
|
4331
|
-
return {
|
|
4332
|
-
isValid: false,
|
|
4333
|
-
message: `Invalid targetAsset ${config.targetAsset} for targetChain ${config.targetChain}.`
|
|
4334
|
-
};
|
|
4335
|
-
}
|
|
4336
4367
|
if (config.customRecipient && !isAddress(config.customRecipient)) {
|
|
4337
4368
|
return {
|
|
4338
4369
|
isValid: false,
|
|
@@ -4364,7 +4395,7 @@ async function validateCheckoutConfig(config) {
|
|
|
4364
4395
|
};
|
|
4365
4396
|
}
|
|
4366
4397
|
var hasSufficientBalance = async (wagmiConfig, walletAddress, tokenAddress, tokenChainId, requiredAssetAmount) => {
|
|
4367
|
-
const finalTokenAddress =
|
|
4398
|
+
const finalTokenAddress = isTokenAddressEquivalent4({
|
|
4368
4399
|
firstTokenAddress: tokenAddress,
|
|
4369
4400
|
secondTokenAddress: FUNKIT_CONNECT_CHECKOUT_NATIVE_CURRENCY_ADDRESS2
|
|
4370
4401
|
}) ? void 0 : tokenAddress;
|
|
@@ -4385,6 +4416,27 @@ var hasSufficientBalance = async (wagmiConfig, walletAddress, tokenAddress, toke
|
|
|
4385
4416
|
}
|
|
4386
4417
|
return { balance, result: false, tokenTicker: null };
|
|
4387
4418
|
};
|
|
4419
|
+
var hasGasToken = async (wagmiConfig, walletAddress, chainId) => {
|
|
4420
|
+
try {
|
|
4421
|
+
const data = await getBalance(wagmiConfig, {
|
|
4422
|
+
address: walletAddress,
|
|
4423
|
+
chainId: Number(chainId),
|
|
4424
|
+
blockTag: "latest"
|
|
4425
|
+
});
|
|
4426
|
+
logger.log("hasGasToken_info", {
|
|
4427
|
+
data,
|
|
4428
|
+
walletAddress,
|
|
4429
|
+
chainId
|
|
4430
|
+
});
|
|
4431
|
+
return data.value > 0;
|
|
4432
|
+
} catch (err) {
|
|
4433
|
+
logger.error("hasGasToken_error", err, {
|
|
4434
|
+
walletAddress,
|
|
4435
|
+
chainId
|
|
4436
|
+
});
|
|
4437
|
+
return false;
|
|
4438
|
+
}
|
|
4439
|
+
};
|
|
4388
4440
|
function getFunkitEnvForCheckoutEstimation({
|
|
4389
4441
|
chainId,
|
|
4390
4442
|
bypassWalletInit
|
|
@@ -4707,7 +4759,7 @@ function FunkitCheckoutHistoryProvider({
|
|
|
4707
4759
|
const [isInited, setIsInited] = useState7(false);
|
|
4708
4760
|
const [isRefreshing, setIsRefreshing] = useState7(true);
|
|
4709
4761
|
const isGuestUserOnCheckoutHistory = !isUserLoggedIn && !!historyDepositAddress;
|
|
4710
|
-
const _refreshCheckoutHistory =
|
|
4762
|
+
const _refreshCheckoutHistory = useCallback9(async () => {
|
|
4711
4763
|
if (!funkitConfig.apiKey) {
|
|
4712
4764
|
return;
|
|
4713
4765
|
}
|
|
@@ -4775,7 +4827,7 @@ function FunkitCheckoutHistoryProvider({
|
|
|
4775
4827
|
clearInterval(intervalRef.current);
|
|
4776
4828
|
}
|
|
4777
4829
|
}, [logoutSymbol]);
|
|
4778
|
-
const startCheckoutHistoryListener =
|
|
4830
|
+
const startCheckoutHistoryListener = useCallback9(
|
|
4779
4831
|
(singleDepositAddr, expedited = false) => {
|
|
4780
4832
|
setHistoryDepositAddress(singleDepositAddr);
|
|
4781
4833
|
clearInterval(intervalRef.current);
|
|
@@ -4791,7 +4843,7 @@ function FunkitCheckoutHistoryProvider({
|
|
|
4791
4843
|
},
|
|
4792
4844
|
[triggerRefreshSymbol]
|
|
4793
4845
|
);
|
|
4794
|
-
const stopCheckoutHistoryListener =
|
|
4846
|
+
const stopCheckoutHistoryListener = useCallback9(
|
|
4795
4847
|
(cancelIntervalId) => {
|
|
4796
4848
|
clearInterval(cancelIntervalId);
|
|
4797
4849
|
if (cancelIntervalId === intervalRef.current) {
|
|
@@ -4943,7 +4995,7 @@ var useFunkitPostCheckoutInternal = (checkoutId) => {
|
|
|
4943
4995
|
};
|
|
4944
4996
|
|
|
4945
4997
|
// src/components/FunCheckoutHistory/FunCheckoutStatus.tsx
|
|
4946
|
-
import React22, { useEffect as useEffect11, useMemo as
|
|
4998
|
+
import React22, { useEffect as useEffect11, useMemo as useMemo9, useState as useState10 } from "react";
|
|
4947
4999
|
|
|
4948
5000
|
// src/components/TransactionStatus/TransactionStatus.tsx
|
|
4949
5001
|
import {
|
|
@@ -4952,7 +5004,7 @@ import {
|
|
|
4952
5004
|
useAnimate
|
|
4953
5005
|
} from "motion/react";
|
|
4954
5006
|
import React21, {
|
|
4955
|
-
useCallback as
|
|
5007
|
+
useCallback as useCallback10,
|
|
4956
5008
|
useEffect as useEffect10,
|
|
4957
5009
|
useRef as useRef3,
|
|
4958
5010
|
useState as useState9
|
|
@@ -5675,11 +5727,11 @@ function TransactionStatus({
|
|
|
5675
5727
|
const [transitioningToStatus, setTransitioningToStatus] = useState9(status);
|
|
5676
5728
|
const [transitioningToStep, setTransitioningToStep] = useState9(step);
|
|
5677
5729
|
const spinAnimationRef = useRef3();
|
|
5678
|
-
const stopSpinning =
|
|
5730
|
+
const stopSpinning = useCallback10(() => {
|
|
5679
5731
|
spinAnimationRef.current?.cancel();
|
|
5680
5732
|
spinAnimationRef.current = void 0;
|
|
5681
5733
|
}, []);
|
|
5682
|
-
const startSpinning =
|
|
5734
|
+
const startSpinning = useCallback10(
|
|
5683
5735
|
(step2) => {
|
|
5684
5736
|
stopSpinning();
|
|
5685
5737
|
spinAnimationRef.current = animate(
|
|
@@ -5697,7 +5749,7 @@ function TransactionStatus({
|
|
|
5697
5749
|
},
|
|
5698
5750
|
[animate, stopSpinning]
|
|
5699
5751
|
);
|
|
5700
|
-
const animateCircleToSuccess =
|
|
5752
|
+
const animateCircleToSuccess = useCallback10(
|
|
5701
5753
|
async (step2) => {
|
|
5702
5754
|
const durationMs = 300;
|
|
5703
5755
|
const checkmarkDelayMs = 50;
|
|
@@ -6093,7 +6145,7 @@ function FunCheckoutStatusLoaded({
|
|
|
6093
6145
|
checkoutHistoryItem.state,
|
|
6094
6146
|
checkoutHistoryItem.refundState
|
|
6095
6147
|
);
|
|
6096
|
-
const startTimeMs =
|
|
6148
|
+
const startTimeMs = useMemo9(
|
|
6097
6149
|
() => extractStartTimeMs(
|
|
6098
6150
|
checkoutHistoryItem.clientMetadata.id,
|
|
6099
6151
|
activeCheckoutItem,
|
|
@@ -6349,7 +6401,7 @@ function isCustomWithdrawalConfig(config) {
|
|
|
6349
6401
|
import { isMobile as isMobile2, isSafari } from "@funkit/utils";
|
|
6350
6402
|
import clsx8 from "clsx";
|
|
6351
6403
|
import React43, {
|
|
6352
|
-
useCallback as
|
|
6404
|
+
useCallback as useCallback13,
|
|
6353
6405
|
useContext as useContext12,
|
|
6354
6406
|
useEffect as useEffect18,
|
|
6355
6407
|
useRef as useRef8
|
|
@@ -6665,7 +6717,7 @@ var ErrorFallback = () => /* @__PURE__ */ React31.createElement(
|
|
|
6665
6717
|
);
|
|
6666
6718
|
|
|
6667
6719
|
// src/components/FunBottomBar/FunBottomBar.tsx
|
|
6668
|
-
import { FlagKey as
|
|
6720
|
+
import { FlagKey as FlagKey7, isMobile } from "@funkit/utils";
|
|
6669
6721
|
import React35 from "react";
|
|
6670
6722
|
|
|
6671
6723
|
// src/components/FunButton/FunButton.tsx
|
|
@@ -6953,7 +7005,7 @@ var FunBottomBar = ({
|
|
|
6953
7005
|
onClose
|
|
6954
7006
|
}) => {
|
|
6955
7007
|
const { uiCustomizations } = useFunkitConfig();
|
|
6956
|
-
const showTagline = useFlag(
|
|
7008
|
+
const showTagline = useFlag(FlagKey7.ShowPoweredTagline);
|
|
6957
7009
|
const defaultBottomSection = showTagline ? /* @__PURE__ */ React35.createElement(FunPoweredTagline, null) : void 0;
|
|
6958
7010
|
const bottomSectionComponent = bottomSection ?? defaultBottomSection;
|
|
6959
7011
|
const hasMultipleButtons = !!onClose;
|
|
@@ -7086,7 +7138,7 @@ function FunDivider({
|
|
|
7086
7138
|
|
|
7087
7139
|
// src/components/FunTooltip/FunTooltip.tsx
|
|
7088
7140
|
import React40, {
|
|
7089
|
-
useCallback as
|
|
7141
|
+
useCallback as useCallback11,
|
|
7090
7142
|
useEffect as useEffect14,
|
|
7091
7143
|
useRef as useRef6,
|
|
7092
7144
|
useState as useState14
|
|
@@ -7177,7 +7229,7 @@ var FunTooltip = ({
|
|
|
7177
7229
|
const startDelayRef = useRef6();
|
|
7178
7230
|
const delayRef = useRef6();
|
|
7179
7231
|
const tooltipRef = useRef6(null);
|
|
7180
|
-
const show =
|
|
7232
|
+
const show = useCallback11(
|
|
7181
7233
|
(startHiding) => {
|
|
7182
7234
|
startDelayRef.current = setTimeout(() => {
|
|
7183
7235
|
setIsDisplayed(true);
|
|
@@ -7187,7 +7239,7 @@ var FunTooltip = ({
|
|
|
7187
7239
|
},
|
|
7188
7240
|
[startDelay]
|
|
7189
7241
|
);
|
|
7190
|
-
const hide =
|
|
7242
|
+
const hide = useCallback11(() => {
|
|
7191
7243
|
clearTimeout(startDelayRef.current);
|
|
7192
7244
|
delayRef.current = setTimeout(() => {
|
|
7193
7245
|
setIsDisplayed(false);
|
|
@@ -7300,7 +7352,7 @@ var HelpIcon = () => {
|
|
|
7300
7352
|
};
|
|
7301
7353
|
|
|
7302
7354
|
// src/components/Dialog/FocusTrap.tsx
|
|
7303
|
-
import React42, { useCallback as
|
|
7355
|
+
import React42, { useCallback as useCallback12, useEffect as useEffect15, useRef as useRef7 } from "react";
|
|
7304
7356
|
var moveFocusWithin = (element2, position) => {
|
|
7305
7357
|
const focusableElements = element2.querySelectorAll(
|
|
7306
7358
|
"button:not(:disabled), a[href]"
|
|
@@ -7333,7 +7385,7 @@ function FocusTrap(props) {
|
|
|
7333
7385
|
return /* @__PURE__ */ React42.createElement(React42.Fragment, null, /* @__PURE__ */ React42.createElement(
|
|
7334
7386
|
"div",
|
|
7335
7387
|
{
|
|
7336
|
-
onFocus:
|
|
7388
|
+
onFocus: useCallback12(
|
|
7337
7389
|
() => contentRef.current && moveFocusWithin(contentRef.current, "end"),
|
|
7338
7390
|
[]
|
|
7339
7391
|
),
|
|
@@ -7350,7 +7402,7 @@ function FocusTrap(props) {
|
|
|
7350
7402
|
), /* @__PURE__ */ React42.createElement(
|
|
7351
7403
|
"div",
|
|
7352
7404
|
{
|
|
7353
|
-
onFocus:
|
|
7405
|
+
onFocus: useCallback12(
|
|
7354
7406
|
() => contentRef.current && moveFocusWithin(contentRef.current, "start"),
|
|
7355
7407
|
[]
|
|
7356
7408
|
),
|
|
@@ -7486,7 +7538,7 @@ function Dialog({
|
|
|
7486
7538
|
}
|
|
7487
7539
|
return () => document.removeEventListener("keydown", handleEscape);
|
|
7488
7540
|
}, [open, onClose, isSmartCloseable]);
|
|
7489
|
-
const handleBackdropClick =
|
|
7541
|
+
const handleBackdropClick = useCallback13(
|
|
7490
7542
|
() => isSmartCloseable ? onClose() : () => void 0,
|
|
7491
7543
|
[isSmartCloseable, onClose]
|
|
7492
7544
|
);
|
|
@@ -7842,17 +7894,17 @@ Dialog.BottomBar = FunBottomBar;
|
|
|
7842
7894
|
// src/modals/WithdrwalModal/WithdrawalContent.tsx
|
|
7843
7895
|
import { FUNKIT_CONNECT_SUPPORTED_CHAINS_INFO as FUNKIT_CONNECT_SUPPORTED_CHAINS_INFO7 } from "@funkit/chains";
|
|
7844
7896
|
import {
|
|
7845
|
-
FlagKey as
|
|
7897
|
+
FlagKey as FlagKey14,
|
|
7846
7898
|
formatCryptoAndStringify as formatCryptoAndStringify2,
|
|
7847
7899
|
formatCurrencyAndStringify as formatCurrencyAndStringify3
|
|
7848
7900
|
} from "@funkit/utils";
|
|
7849
|
-
import React67, { useEffect as useEffect27, useMemo as
|
|
7901
|
+
import React67, { useEffect as useEffect27, useMemo as useMemo14, useState as useState26 } from "react";
|
|
7850
7902
|
import { createPortal as createPortal2 } from "react-dom";
|
|
7851
7903
|
import { useDebounce } from "use-debounce";
|
|
7852
7904
|
import { useAccount as useAccount3 } from "wagmi";
|
|
7853
7905
|
|
|
7854
7906
|
// src/components/AsyncImage/AsyncImage.tsx
|
|
7855
|
-
import React44, { useMemo as
|
|
7907
|
+
import React44, { useMemo as useMemo10, useReducer as useReducer2, useState as useState16 } from "react";
|
|
7856
7908
|
|
|
7857
7909
|
// src/components/AsyncImage/useAsyncImage.ts
|
|
7858
7910
|
import { useEffect as useEffect19, useReducer } from "react";
|
|
@@ -7920,7 +7972,7 @@ function AsyncImage({
|
|
|
7920
7972
|
const [hasError, setHasError] = useState16(
|
|
7921
7973
|
srcProp === void 0 && fallbackSrc === void 0
|
|
7922
7974
|
);
|
|
7923
|
-
const { asyncStyle, imgProps } =
|
|
7975
|
+
const { asyncStyle, imgProps } = useMemo10(() => {
|
|
7924
7976
|
const asyncStyle2 = !useAsImage ? getRemoteImageStyles(isRemoteImage, isRemoteImageLoaded, src) : {};
|
|
7925
7977
|
if (useAsImage || isRemoteImage) {
|
|
7926
7978
|
const imgProps2 = {
|
|
@@ -8022,13 +8074,13 @@ var getRemoteImageStyles = (isRemoteImage, isRemoteImageLoaded, src) => {
|
|
|
8022
8074
|
import React59 from "react";
|
|
8023
8075
|
|
|
8024
8076
|
// src/components/Dropdown/ChainDropdown.tsx
|
|
8025
|
-
import { FlagKey as
|
|
8077
|
+
import { FlagKey as FlagKey8 } from "@funkit/utils";
|
|
8026
8078
|
import React56 from "react";
|
|
8027
8079
|
|
|
8028
8080
|
// src/components/Dropdown/BaseDropdown.tsx
|
|
8029
8081
|
import { isMobile as isMobile3, noop as noop2 } from "@funkit/utils";
|
|
8030
8082
|
import { AnimatePresence as AnimatePresence4, motion as motion5 } from "motion/react";
|
|
8031
|
-
import React53, { useCallback as
|
|
8083
|
+
import React53, { useCallback as useCallback14, useEffect as useEffect22, useMemo as useMemo11, useRef as useRef10, useState as useState18 } from "react";
|
|
8032
8084
|
|
|
8033
8085
|
// src/consts/layout.ts
|
|
8034
8086
|
var VERTICAL_SECTION_GAP = "18";
|
|
@@ -8652,13 +8704,13 @@ function BaseDropdown({
|
|
|
8652
8704
|
const handleSearch = (event) => {
|
|
8653
8705
|
setSearchInput(event.target.value);
|
|
8654
8706
|
};
|
|
8655
|
-
const filteredOptions =
|
|
8707
|
+
const filteredOptions = useMemo11(
|
|
8656
8708
|
() => options.filter(
|
|
8657
8709
|
(singleOption) => singleOption.label.toLowerCase().includes(searchInput?.toLowerCase())
|
|
8658
8710
|
),
|
|
8659
8711
|
[options, searchInput]
|
|
8660
8712
|
);
|
|
8661
|
-
const closeDropdown =
|
|
8713
|
+
const closeDropdown = useCallback14(() => {
|
|
8662
8714
|
setIsOpened(false);
|
|
8663
8715
|
resetSearchOnClose && setSearchInput("");
|
|
8664
8716
|
}, [resetSearchOnClose]);
|
|
@@ -8931,9 +8983,9 @@ var ChainDropdown = ({
|
|
|
8931
8983
|
maxDropdownHeight,
|
|
8932
8984
|
tagComponent
|
|
8933
8985
|
}) => {
|
|
8934
|
-
const defaultChainIdJson = useFlag(
|
|
8986
|
+
const defaultChainIdJson = useFlag(FlagKey8.TokenTransferDefaultChainId);
|
|
8935
8987
|
const defaultChainId = safeJSONParse(defaultChainIdJson);
|
|
8936
|
-
const chainSortOrderJson = useFlag(
|
|
8988
|
+
const chainSortOrderJson = useFlag(FlagKey8.ChainIdSortOrder);
|
|
8937
8989
|
const chainSortOrder = safeJSONParse(chainSortOrderJson) || [];
|
|
8938
8990
|
const chainIds = getSortedChainIds();
|
|
8939
8991
|
const options = allowUnselect ? [DEFAULT_VALUE, ...chainIds] : chainIds;
|
|
@@ -9040,7 +9092,7 @@ var ChainDropdown = ({
|
|
|
9040
9092
|
};
|
|
9041
9093
|
|
|
9042
9094
|
// src/components/Dropdown/TokenDropdown.tsx
|
|
9043
|
-
import { FlagKey as
|
|
9095
|
+
import { FlagKey as FlagKey9, safeParseJson as safeParseJson3 } from "@funkit/utils";
|
|
9044
9096
|
import React58, { useState as useState19 } from "react";
|
|
9045
9097
|
|
|
9046
9098
|
// src/utils/flags/patches/enable-bitcoin-patch.ts
|
|
@@ -9181,12 +9233,12 @@ var NewTokenBadge = ({ iconSymbol }) => {
|
|
|
9181
9233
|
// src/components/Dropdown/TokenDropdown.tsx
|
|
9182
9234
|
var TOKEN_ICON_SIZE = 16;
|
|
9183
9235
|
var useNewTokens = () => {
|
|
9184
|
-
const enableBitcoin = useFlag(
|
|
9185
|
-
const bannerJson = useFlag(
|
|
9236
|
+
const enableBitcoin = useFlag(FlagKey9.EnableBitcoin);
|
|
9237
|
+
const bannerJson = useFlag(FlagKey9.NewTokenAssetSelectionBanner);
|
|
9186
9238
|
const bannerData = safeParseJson3(bannerJson);
|
|
9187
9239
|
const addBitcoinToNewTokensMiddleware = enableBitcoin ? addBitcoinToNewTokens : void 0;
|
|
9188
9240
|
const newBadgeTokensJson = useFlag(
|
|
9189
|
-
|
|
9241
|
+
FlagKey9.TokenTransferNewTokens,
|
|
9190
9242
|
void 0,
|
|
9191
9243
|
addBitcoinToNewTokensMiddleware
|
|
9192
9244
|
);
|
|
@@ -9206,7 +9258,7 @@ var TokenDropdown = ({
|
|
|
9206
9258
|
maxDropdownHeight,
|
|
9207
9259
|
hideNewTokenBadge
|
|
9208
9260
|
}) => {
|
|
9209
|
-
const defaultTokensJson = useFlag(
|
|
9261
|
+
const defaultTokensJson = useFlag(FlagKey9.TokenTransferDefaultTokens);
|
|
9210
9262
|
const defaultTokens = safeJSONParse(defaultTokensJson);
|
|
9211
9263
|
const enabledTokens = assets[selectedChainId];
|
|
9212
9264
|
const allTokens = getSortedTokens();
|
|
@@ -9606,7 +9658,7 @@ import {
|
|
|
9606
9658
|
formatPercent,
|
|
9607
9659
|
noop as noop4
|
|
9608
9660
|
} from "@funkit/utils";
|
|
9609
|
-
import React64, { useEffect as useEffect23, useMemo as
|
|
9661
|
+
import React64, { useEffect as useEffect23, useMemo as useMemo12, useState as useState20 } from "react";
|
|
9610
9662
|
import clsx14 from "clsx";
|
|
9611
9663
|
import { motion as motion6, useAnimationControls } from "motion/react";
|
|
9612
9664
|
import { mainnet as mainnet5 } from "viem/chains";
|
|
@@ -10002,7 +10054,7 @@ function PaymentFeesSummary({
|
|
|
10002
10054
|
}
|
|
10003
10055
|
}, [valuesNotAvailable, isExpanded]);
|
|
10004
10056
|
const { uiCustomizations } = useFunkitConfig();
|
|
10005
|
-
const { collapsed: collapsedItem, expanded: expandedItems } =
|
|
10057
|
+
const { collapsed: collapsedItem, expanded: expandedItems } = useMemo12(() => {
|
|
10006
10058
|
const fees = quote?.finalFeesBreakdown ?? fallbackFees;
|
|
10007
10059
|
if (!fees) {
|
|
10008
10060
|
return NO_DATA;
|
|
@@ -10156,7 +10208,7 @@ var EvmWallet = ({ size = 20 }) => /* @__PURE__ */ React65.createElement(
|
|
|
10156
10208
|
|
|
10157
10209
|
// src/hooks/queries/useWithdrawalQuote.ts
|
|
10158
10210
|
import { useQuery as useQuery6 } from "@tanstack/react-query";
|
|
10159
|
-
import { useConfig as
|
|
10211
|
+
import { useConfig as useConfig3 } from "wagmi";
|
|
10160
10212
|
|
|
10161
10213
|
// src/domains/quote.ts
|
|
10162
10214
|
import { getCheckoutQuote as getApiCheckoutQuote } from "@funkit/api-base";
|
|
@@ -10592,7 +10644,7 @@ function useWithdrawalQuote({
|
|
|
10592
10644
|
});
|
|
10593
10645
|
const { loginType, userInfo } = useGeneralWallet();
|
|
10594
10646
|
const { apiKey } = useFunkitConfig();
|
|
10595
|
-
const wagmiConfig =
|
|
10647
|
+
const wagmiConfig = useConfig3();
|
|
10596
10648
|
const { getWithdrawalDirectExecution } = useCheckoutDirectExecution();
|
|
10597
10649
|
const { checkoutItem } = useCheckoutContext();
|
|
10598
10650
|
const isInstantQuoting = (symbol === "USDC" || symbol === "USDT") && chainId !== "1";
|
|
@@ -10805,13 +10857,13 @@ var useAssetSymbolPrice = ({
|
|
|
10805
10857
|
};
|
|
10806
10858
|
|
|
10807
10859
|
// src/hooks/useTokenChain.ts
|
|
10808
|
-
import { FlagKey as
|
|
10860
|
+
import { FlagKey as FlagKey11 } from "@funkit/utils";
|
|
10809
10861
|
import { useEffect as useEffect24, useState as useState21 } from "react";
|
|
10810
10862
|
import { polygon as polygon3 } from "viem/chains";
|
|
10811
10863
|
|
|
10812
10864
|
// src/hooks/useEnabledTokenTransferChainTokens.ts
|
|
10813
10865
|
import { bitcoinChain as bitcoinChain2, solanaChain as solanaChain3 } from "@funkit/chains";
|
|
10814
|
-
import { FlagKey as
|
|
10866
|
+
import { FlagKey as FlagKey10 } from "@funkit/utils";
|
|
10815
10867
|
import { base as base4 } from "viem/chains";
|
|
10816
10868
|
|
|
10817
10869
|
// src/hooks/useIsUsUser.ts
|
|
@@ -10833,14 +10885,14 @@ function useIsUsKatanaUser() {
|
|
|
10833
10885
|
// src/hooks/useEnabledTokenTransferChainTokens.ts
|
|
10834
10886
|
function useEnabledTokenTransferChainTokens(transferInit, isWithdrawal) {
|
|
10835
10887
|
const isBankrUsUser = useIsUsBankrUser();
|
|
10836
|
-
const enableBitcoin = useFlag(
|
|
10888
|
+
const enableBitcoin = useFlag(FlagKey10.EnableBitcoin);
|
|
10837
10889
|
const addBitcoinToSourceChainsAndAssetsMiddleware = enableBitcoin ? addBitcoinToSourceChainsAndAssets : void 0;
|
|
10838
10890
|
const depositAssets = useFlag(
|
|
10839
|
-
|
|
10891
|
+
FlagKey10.TokenTransferSourceChainsAndAssets,
|
|
10840
10892
|
void 0,
|
|
10841
10893
|
addBitcoinToSourceChainsAndAssetsMiddleware
|
|
10842
10894
|
);
|
|
10843
|
-
const withdrawalAssets = useFlag(
|
|
10895
|
+
const withdrawalAssets = useFlag(FlagKey10.WithdrawalChainsAndAssets);
|
|
10844
10896
|
const assetsJsonString = isWithdrawal ? withdrawalAssets : depositAssets;
|
|
10845
10897
|
const assets = safeJSONParse(assetsJsonString);
|
|
10846
10898
|
if (!assets) {
|
|
@@ -10877,7 +10929,7 @@ var useTokenAndChainSelection = (transferInit, defaultValues, isWithdrawal) => {
|
|
|
10877
10929
|
transferInit ?? null,
|
|
10878
10930
|
isWithdrawal
|
|
10879
10931
|
);
|
|
10880
|
-
const defaultChainIdFlag = useFlag(
|
|
10932
|
+
const defaultChainIdFlag = useFlag(FlagKey11.TokenTransferDefaultChainId);
|
|
10881
10933
|
const defaultChainId = defaultValues?.chainId ?? Number(defaultChainIdFlag);
|
|
10882
10934
|
const validDefaultChainId = filteredAssets[defaultChainId] !== void 0 ? defaultChainId : polygon3.id;
|
|
10883
10935
|
const [selectedChainId, setSelectedChainId] = useState21(validDefaultChainId);
|
|
@@ -10932,7 +10984,7 @@ var useTokenAndChainSelection = (transferInit, defaultValues, isWithdrawal) => {
|
|
|
10932
10984
|
import { useState as useState25 } from "react";
|
|
10933
10985
|
|
|
10934
10986
|
// src/hooks/useAutoClearState.ts
|
|
10935
|
-
import { useCallback as
|
|
10987
|
+
import { useCallback as useCallback15, useEffect as useEffect25, useRef as useRef11, useState as useState22 } from "react";
|
|
10936
10988
|
function useAutoClearState(initialValue = null) {
|
|
10937
10989
|
const [state, setState] = useState22(initialValue);
|
|
10938
10990
|
const timeoutRef = useRef11();
|
|
@@ -10945,7 +10997,7 @@ function useAutoClearState(initialValue = null) {
|
|
|
10945
10997
|
}, []);
|
|
10946
10998
|
return [
|
|
10947
10999
|
state,
|
|
10948
|
-
|
|
11000
|
+
useCallback15((newState, durationMs) => {
|
|
10949
11001
|
if (timeoutRef.current) {
|
|
10950
11002
|
clearTimeout(timeoutRef.current);
|
|
10951
11003
|
timeoutRef.current = void 0;
|
|
@@ -10963,11 +11015,11 @@ import { ClientError as ClientError2 } from "@funkit/utils";
|
|
|
10963
11015
|
import { useState as useState24 } from "react";
|
|
10964
11016
|
|
|
10965
11017
|
// src/hooks/useIsBlacklisted.ts
|
|
10966
|
-
import { FlagKey as
|
|
10967
|
-
import { useMemo as
|
|
11018
|
+
import { FlagKey as FlagKey12 } from "@funkit/utils";
|
|
11019
|
+
import { useMemo as useMemo13 } from "react";
|
|
10968
11020
|
var useIsBlacklisted = (walletAddress, customRecipient) => {
|
|
10969
|
-
const flagStr = useFlag(
|
|
10970
|
-
const blacklist =
|
|
11021
|
+
const flagStr = useFlag(FlagKey12.AddressBlacklist);
|
|
11022
|
+
const blacklist = useMemo13(
|
|
10971
11023
|
() => safeJSONParse(flagStr)?.map((addr) => addr.toLowerCase()) || [],
|
|
10972
11024
|
[flagStr]
|
|
10973
11025
|
);
|
|
@@ -10978,15 +11030,15 @@ var useIsBlacklisted = (walletAddress, customRecipient) => {
|
|
|
10978
11030
|
};
|
|
10979
11031
|
|
|
10980
11032
|
// src/providers/FunkitQuoteContext.tsx
|
|
10981
|
-
import { FlagKey as
|
|
11033
|
+
import { FlagKey as FlagKey13, isNotNullish as isNotNullish4 } from "@funkit/utils";
|
|
10982
11034
|
import React66, {
|
|
10983
11035
|
createContext as createContext13,
|
|
10984
|
-
useCallback as
|
|
11036
|
+
useCallback as useCallback16,
|
|
10985
11037
|
useContext as useContext13,
|
|
10986
11038
|
useEffect as useEffect26,
|
|
10987
11039
|
useState as useState23
|
|
10988
11040
|
} from "react";
|
|
10989
|
-
import { useConfig as
|
|
11041
|
+
import { useConfig as useConfig4 } from "wagmi";
|
|
10990
11042
|
|
|
10991
11043
|
// src/consts/quote.ts
|
|
10992
11044
|
import { ClientError } from "@funkit/utils";
|
|
@@ -11077,9 +11129,9 @@ var FunkitQuoteContext = createContext13({
|
|
|
11077
11129
|
function FunkitQuoteProvider({ children }) {
|
|
11078
11130
|
const { checkoutItem, setCheckout } = useCheckoutContext();
|
|
11079
11131
|
const funkitConfig = useFunkitConfig();
|
|
11080
|
-
const wagmiConfig =
|
|
11132
|
+
const wagmiConfig = useConfig4();
|
|
11081
11133
|
const { walletAddress, logoutSymbol, loginType, userInfo } = useGeneralWallet();
|
|
11082
|
-
const enableFrogProxyServer = useFlag(
|
|
11134
|
+
const enableFrogProxyServer = useFlag(FlagKey13.EnableFrogProxyServer);
|
|
11083
11135
|
const { getDirectExecutionInfo } = useCheckoutDirectExecution();
|
|
11084
11136
|
const [latestQuote, setLatestQuote] = useState23(null);
|
|
11085
11137
|
const [isQuoting, setIsQuoting] = useState23(false);
|
|
@@ -11095,7 +11147,7 @@ function FunkitQuoteProvider({ children }) {
|
|
|
11095
11147
|
});
|
|
11096
11148
|
}
|
|
11097
11149
|
}, [logoutSymbol]);
|
|
11098
|
-
const setQuoteProgress =
|
|
11150
|
+
const setQuoteProgress = useCallback16(
|
|
11099
11151
|
(state) => {
|
|
11100
11152
|
setQuoteErrorMessage(state.quoteErrorMessage);
|
|
11101
11153
|
setQuoteStepMessage(state.quoteStepMessage);
|
|
@@ -11103,7 +11155,7 @@ function FunkitQuoteProvider({ children }) {
|
|
|
11103
11155
|
},
|
|
11104
11156
|
[]
|
|
11105
11157
|
);
|
|
11106
|
-
const clearCheckoutQuoteMessages =
|
|
11158
|
+
const clearCheckoutQuoteMessages = useCallback16(() => {
|
|
11107
11159
|
setQuoteStepMessage("");
|
|
11108
11160
|
setQuoteErrorMessage("");
|
|
11109
11161
|
}, []);
|
|
@@ -11538,7 +11590,7 @@ function useWithdrawalAssets(config) {
|
|
|
11538
11590
|
},
|
|
11539
11591
|
true
|
|
11540
11592
|
);
|
|
11541
|
-
const excludedTokenStr = useFlag(
|
|
11593
|
+
const excludedTokenStr = useFlag(FlagKey14.WithdrawalExcludeTokens);
|
|
11542
11594
|
const excludedTokens = safeJSONParse(excludedTokenStr);
|
|
11543
11595
|
if (excludedTokens) {
|
|
11544
11596
|
for (const chainIdStr of Object.keys(excludedTokens)) {
|
|
@@ -11630,26 +11682,60 @@ function getErrorNotification(quoteErrorObject, withdrawalError, targetAssetFetc
|
|
|
11630
11682
|
}
|
|
11631
11683
|
return null;
|
|
11632
11684
|
}
|
|
11685
|
+
function useShowConnectWallet({
|
|
11686
|
+
config
|
|
11687
|
+
}) {
|
|
11688
|
+
const withdrawalWalletAddress = "wallet" in config ? config.wallet.address() : "0x";
|
|
11689
|
+
const { isConnected, address: connectedWalletAddress } = useAccount3();
|
|
11690
|
+
const showUseConnected = !config.disableConnectedWallet && isConnected && connectedWalletAddress && withdrawalWalletAddress.toLowerCase() !== connectedWalletAddress.toLowerCase();
|
|
11691
|
+
useEffect27(() => {
|
|
11692
|
+
logger.debug("withdrawalContent:showUseConnected", {
|
|
11693
|
+
isConnected,
|
|
11694
|
+
connectedWalletAddress,
|
|
11695
|
+
withdrawalWalletAddress
|
|
11696
|
+
});
|
|
11697
|
+
}, [isConnected, connectedWalletAddress, withdrawalWalletAddress]);
|
|
11698
|
+
return showUseConnected;
|
|
11699
|
+
}
|
|
11700
|
+
function isValidWithdrawal({
|
|
11701
|
+
config,
|
|
11702
|
+
checkoutConfig,
|
|
11703
|
+
withdrawalUSD,
|
|
11704
|
+
recipientAddress,
|
|
11705
|
+
selectedChainId,
|
|
11706
|
+
sourceTokenBalance
|
|
11707
|
+
}) {
|
|
11708
|
+
const isValidAddress = isAddressSupported(recipientAddress);
|
|
11709
|
+
const isValidAddressAndChain = isAddressCompatibleWithChain(
|
|
11710
|
+
recipientAddress,
|
|
11711
|
+
selectedChainId
|
|
11712
|
+
);
|
|
11713
|
+
const minWithdrawalUsd = config.getMinWithdrawalUSD?.({
|
|
11714
|
+
tokenAddress: checkoutConfig?.sourceTokenAddress || "0x",
|
|
11715
|
+
tokenChainId: checkoutConfig?.sourceChain || "0"
|
|
11716
|
+
}) || 0.01;
|
|
11717
|
+
const isWithdrawAmountTooLow = Number(withdrawalUSD) < minWithdrawalUsd;
|
|
11718
|
+
const isWithdrawAmountValid = !isWithdrawAmountTooLow && Number(withdrawalUSD) <= sourceTokenBalance;
|
|
11719
|
+
return {
|
|
11720
|
+
isValidAddress,
|
|
11721
|
+
isValidAddressAndChain,
|
|
11722
|
+
isWithdrawAmountTooLow,
|
|
11723
|
+
isWithdrawAmountValid,
|
|
11724
|
+
minWithdrawalUsd
|
|
11725
|
+
};
|
|
11726
|
+
}
|
|
11633
11727
|
var WithdrawContent = ({
|
|
11634
11728
|
onContinue,
|
|
11635
11729
|
config,
|
|
11636
11730
|
withdrawalItem
|
|
11637
|
-
// biome-ignore lint/complexity/noExcessiveCognitiveComplexity: refactor this later
|
|
11638
11731
|
}) => {
|
|
11639
11732
|
const sourceTokenBalance = withdrawalItem?.withdrawalSourceTokenBalance?.() || 0;
|
|
11640
11733
|
const token = config.sourceTokenSymbol;
|
|
11641
11734
|
const [confirmingQuote, setConfirmingQuote] = useState26(false);
|
|
11642
11735
|
const [recipientAddress, setRecipientAddress] = useState26("");
|
|
11643
|
-
const [withdrawalUSD,
|
|
11736
|
+
const [withdrawalUSD, setWithdrawalUSD] = useState26("");
|
|
11644
11737
|
const [debouncedUSD] = useDebounce(withdrawalUSD, 500);
|
|
11645
|
-
const
|
|
11646
|
-
const [amountInputTouched, setAmountInputTouched] = useState26(false);
|
|
11647
|
-
const {
|
|
11648
|
-
updateCustomRecipient,
|
|
11649
|
-
updateTargetAsset,
|
|
11650
|
-
updateWithdrawalSourceAssetAmount,
|
|
11651
|
-
updateTargetAssetAmount
|
|
11652
|
-
} = useCheckoutContext();
|
|
11738
|
+
const { updateTargetAsset, updateTargetAssetAmount } = useCheckoutContext();
|
|
11653
11739
|
const {
|
|
11654
11740
|
assets,
|
|
11655
11741
|
selectedChainId,
|
|
@@ -11685,7 +11771,6 @@ var WithdrawContent = ({
|
|
|
11685
11771
|
iconSrc: getTokenIconUrl(selectedToken)
|
|
11686
11772
|
});
|
|
11687
11773
|
}, [targetAssetInfo, updateTargetAsset, selectedChainId, selectedToken]);
|
|
11688
|
-
const withdrawalWalletAddress = "wallet" in config ? config.wallet.address() : "0x";
|
|
11689
11774
|
const {
|
|
11690
11775
|
isLoading: isQuoteLoading,
|
|
11691
11776
|
data: quote,
|
|
@@ -11701,11 +11786,6 @@ var WithdrawContent = ({
|
|
|
11701
11786
|
symbol: selectedToken,
|
|
11702
11787
|
targetAsset: targetAssetInfo?.address
|
|
11703
11788
|
});
|
|
11704
|
-
const {
|
|
11705
|
-
isConnected,
|
|
11706
|
-
connector,
|
|
11707
|
-
address: connectedWalletAddress
|
|
11708
|
-
} = useAccount3();
|
|
11709
11789
|
const { handleWithdrawal, isWithdrawing, withdrawalError } = useWithdrawal({
|
|
11710
11790
|
config,
|
|
11711
11791
|
withdrawalItem,
|
|
@@ -11720,62 +11800,24 @@ var WithdrawContent = ({
|
|
|
11720
11800
|
}, 150);
|
|
11721
11801
|
}
|
|
11722
11802
|
}, [isPlaceholderData, confirmingQuote, isQuoteLoading, isInstantQuoting]);
|
|
11723
|
-
const showCheckAddressAlert = false;
|
|
11724
|
-
const wallets = usePreparedWalletConnectors();
|
|
11725
11803
|
const { apiKey } = useFunkitConfig();
|
|
11726
|
-
const connectedWalletIconUrl = wallets.find(
|
|
11727
|
-
(wallet) => wallet.id === connector?.id
|
|
11728
|
-
)?.iconUrl;
|
|
11729
11804
|
const normalizedSelectedToken = selectedToken.toUpperCase();
|
|
11730
|
-
const isValidAddress = isAddressSupported(recipientAddress);
|
|
11731
|
-
const isValidAddressAndChain = isAddressCompatibleWithChain(
|
|
11732
|
-
recipientAddress,
|
|
11733
|
-
selectedChainId
|
|
11734
|
-
);
|
|
11735
11805
|
const { checkoutItem } = useCheckoutContext();
|
|
11736
11806
|
const checkoutConfig = checkoutItem?.initSettings.config;
|
|
11737
|
-
const
|
|
11738
|
-
|
|
11739
|
-
|
|
11740
|
-
|
|
11741
|
-
|
|
11742
|
-
|
|
11743
|
-
|
|
11744
|
-
|
|
11745
|
-
|
|
11746
|
-
|
|
11747
|
-
|
|
11748
|
-
|
|
11749
|
-
|
|
11750
|
-
}
|
|
11751
|
-
const handleUseConnectedClick = () => {
|
|
11752
|
-
if (!connectedWalletAddress) {
|
|
11753
|
-
return;
|
|
11754
|
-
}
|
|
11755
|
-
setRecipientAddress(connectedWalletAddress);
|
|
11756
|
-
updateCustomRecipient(connectedWalletAddress);
|
|
11757
|
-
};
|
|
11758
|
-
const handleAddressChange = (e) => {
|
|
11759
|
-
setRecipientAddress(e.target.value);
|
|
11760
|
-
updateCustomRecipient(e.target.value);
|
|
11761
|
-
};
|
|
11762
|
-
const handleAddressBlur = () => {
|
|
11763
|
-
if (!isValidAddress && recipientAddress !== "") {
|
|
11764
|
-
setAddressInputTouched(true);
|
|
11765
|
-
}
|
|
11766
|
-
};
|
|
11767
|
-
const handleAmountChange = (e) => {
|
|
11768
|
-
if (!amountInputTouched) {
|
|
11769
|
-
setAmountInputTouched(true);
|
|
11770
|
-
}
|
|
11771
|
-
setAmount(e.target.value);
|
|
11772
|
-
const withdrawalUSD2 = Number.parseFloat(e.target.value);
|
|
11773
|
-
updateWithdrawalSourceAssetAmount(withdrawalUSD2);
|
|
11774
|
-
};
|
|
11775
|
-
const setMaxAmount = () => {
|
|
11776
|
-
setAmount(sourceTokenBalance.toString());
|
|
11777
|
-
updateWithdrawalSourceAssetAmount(sourceTokenBalance);
|
|
11778
|
-
};
|
|
11807
|
+
const {
|
|
11808
|
+
isValidAddress,
|
|
11809
|
+
isValidAddressAndChain,
|
|
11810
|
+
isWithdrawAmountValid,
|
|
11811
|
+
isWithdrawAmountTooLow,
|
|
11812
|
+
minWithdrawalUsd
|
|
11813
|
+
} = isValidWithdrawal({
|
|
11814
|
+
config,
|
|
11815
|
+
checkoutConfig,
|
|
11816
|
+
withdrawalUSD,
|
|
11817
|
+
sourceTokenBalance,
|
|
11818
|
+
recipientAddress,
|
|
11819
|
+
selectedChainId
|
|
11820
|
+
});
|
|
11779
11821
|
const handleSubmit = () => {
|
|
11780
11822
|
if (isPlaceholderData || isQuoteLoading && isInstantQuoting) {
|
|
11781
11823
|
setConfirmingQuote(true);
|
|
@@ -11799,13 +11841,16 @@ var WithdrawContent = ({
|
|
|
11799
11841
|
quote: quote.finalEstimation
|
|
11800
11842
|
});
|
|
11801
11843
|
};
|
|
11802
|
-
const { data:
|
|
11844
|
+
const { data: isRisky, isLoading: isCheckingAddressRisk } = useWithdrawalRisk(
|
|
11845
|
+
apiKey,
|
|
11846
|
+
recipientAddress
|
|
11847
|
+
);
|
|
11803
11848
|
const isReceipentBlacklisted = isBlacklistedWithdrawAddress(recipientAddress);
|
|
11804
11849
|
const bottomSectionRef = useBottomSectionRef("withdrawal");
|
|
11805
|
-
const
|
|
11806
|
-
const
|
|
11850
|
+
const hasAddressError = !isValidAddress && recipientAddress !== "";
|
|
11851
|
+
const hasAmountError = withdrawalUSD !== "" && !isWithdrawAmountValid;
|
|
11807
11852
|
function computeCanContinue() {
|
|
11808
|
-
return recipientAddress && withdrawalUSD && token && selectedChainId && (quote || isPlaceholderData || isQuoteLoading && isInstantQuoting) && !
|
|
11853
|
+
return recipientAddress && withdrawalUSD && token && selectedChainId && (quote || isPlaceholderData || isQuoteLoading && isInstantQuoting) && !hasAmountError && !hasAddressError && !isCheckingAddressRisk && !isRisky && !isReceipentBlacklisted && isValidAddressAndChain && withdrawalUSD === debouncedUSD;
|
|
11809
11854
|
}
|
|
11810
11855
|
const canContinue = computeCanContinue();
|
|
11811
11856
|
const { totalImpactUsd, gasUsd } = extractRelayFeeInfo(
|
|
@@ -11824,7 +11869,7 @@ var WithdrawContent = ({
|
|
|
11824
11869
|
isValidAddressAndChain,
|
|
11825
11870
|
selectedChainName
|
|
11826
11871
|
});
|
|
11827
|
-
const errorNotification =
|
|
11872
|
+
const errorNotification = useMemo14(
|
|
11828
11873
|
() => getErrorNotification(
|
|
11829
11874
|
quoteErrorObject,
|
|
11830
11875
|
withdrawalError,
|
|
@@ -11832,7 +11877,129 @@ var WithdrawContent = ({
|
|
|
11832
11877
|
),
|
|
11833
11878
|
[quoteErrorObject, targetAssetFetchError, withdrawalError]
|
|
11834
11879
|
);
|
|
11835
|
-
|
|
11880
|
+
const isRiskyAddress = !!isRisky && !isCheckingAddressRisk;
|
|
11881
|
+
return /* @__PURE__ */ React67.createElement(Box, { id: "withdrawal-flow", display: "flex", flexDirection: "column", gap: "18" }, /* @__PURE__ */ React67.createElement(
|
|
11882
|
+
WithdrawRecipientAddress,
|
|
11883
|
+
{
|
|
11884
|
+
recipientAddress,
|
|
11885
|
+
config,
|
|
11886
|
+
setRecipientAddress,
|
|
11887
|
+
selectedToken,
|
|
11888
|
+
selectedChainId,
|
|
11889
|
+
isRiskyAddress
|
|
11890
|
+
}
|
|
11891
|
+
), /* @__PURE__ */ React67.createElement(
|
|
11892
|
+
WithdrawAmountInput,
|
|
11893
|
+
{
|
|
11894
|
+
config,
|
|
11895
|
+
withdrawalUSD,
|
|
11896
|
+
setWithdrawalUSD,
|
|
11897
|
+
isWithdrawAmountTooLow,
|
|
11898
|
+
isWithdrawAmountValid,
|
|
11899
|
+
minWithdrawalUsd,
|
|
11900
|
+
sourceTokenBalance
|
|
11901
|
+
}
|
|
11902
|
+
), /* @__PURE__ */ React67.createElement(
|
|
11903
|
+
TokenAndChainDropdown,
|
|
11904
|
+
{
|
|
11905
|
+
isLoading: false,
|
|
11906
|
+
assets,
|
|
11907
|
+
selectedToken,
|
|
11908
|
+
onTokenSelected: handleTokenChange,
|
|
11909
|
+
selectedChainId,
|
|
11910
|
+
onChainSelected: handleChainChange,
|
|
11911
|
+
tokenLabel: "Receive token",
|
|
11912
|
+
chainLabel: "Receive chain",
|
|
11913
|
+
alwaysOpenToTop: true,
|
|
11914
|
+
maxTokenDropdownHeight: 195,
|
|
11915
|
+
hideNewTokenBadge: true
|
|
11916
|
+
}
|
|
11917
|
+
), /* @__PURE__ */ React67.createElement(Box, { display: "flex", justifyContent: "space-between", alignItems: "center" }, /* @__PURE__ */ React67.createElement(Text, { size: "12" }, "You will receive"), isQuoteLoading && !isInstantQuoting ? /* @__PURE__ */ React67.createElement(FunSkeletonBlock, { height: "14", width: "54" }) : /* @__PURE__ */ React67.createElement(
|
|
11918
|
+
Box,
|
|
11919
|
+
{
|
|
11920
|
+
display: "flex",
|
|
11921
|
+
alignItems: "center",
|
|
11922
|
+
justifyContent: "center",
|
|
11923
|
+
gap: "8"
|
|
11924
|
+
},
|
|
11925
|
+
quoteEnabled ? /* @__PURE__ */ React67.createElement(React67.Fragment, null, /* @__PURE__ */ React67.createElement(Text, { size: "12", weight: "medium" }, formatCryptoAndStringify2(receiveAmountCrypto, selectedToken)), /* @__PURE__ */ React67.createElement(Text, { size: "12", color: "secondaryText" }, formatCurrencyAndStringify3(receiveAmountFiatTotal))) : /* @__PURE__ */ React67.createElement(Text, { size: "12", color: "secondaryText" }, NO_DATA_VALUE)
|
|
11926
|
+
)), /* @__PURE__ */ React67.createElement(
|
|
11927
|
+
PaymentFeesSummary,
|
|
11928
|
+
{
|
|
11929
|
+
fallbackFees: FALLBACK_FEES,
|
|
11930
|
+
isLoading: isQuoteLoading && !isInstantQuoting,
|
|
11931
|
+
quote: quote?.finalEstimation,
|
|
11932
|
+
key: `${isQuoteLoading}`,
|
|
11933
|
+
valuesNotAvailable: !quoteEnabled
|
|
11934
|
+
}
|
|
11935
|
+
), normalizedSelectedToken === "USDC.E" && /* @__PURE__ */ React67.createElement(
|
|
11936
|
+
InfoBanner,
|
|
11937
|
+
{
|
|
11938
|
+
message: "<strong>USDCe is not widely supported by most exchanges.</strong><br />Sending USDCe to an unsupported platform may result in a permanent loss of funds. Always double-check token compatibility before transferring.",
|
|
11939
|
+
type: "warning"
|
|
11940
|
+
}
|
|
11941
|
+
), bottomSectionRef && createPortal2(
|
|
11942
|
+
/* @__PURE__ */ React67.createElement(
|
|
11943
|
+
Dialog.BottomBar,
|
|
11944
|
+
{
|
|
11945
|
+
topSection: /* @__PURE__ */ React67.createElement(
|
|
11946
|
+
FunNotification,
|
|
11947
|
+
{
|
|
11948
|
+
description: errorNotification?.message,
|
|
11949
|
+
type: errorNotification?.type,
|
|
11950
|
+
isVisible: !!errorNotification
|
|
11951
|
+
}
|
|
11952
|
+
),
|
|
11953
|
+
actionButtonProps: {
|
|
11954
|
+
title: withdrawButtonText,
|
|
11955
|
+
isDisabled: !canContinue || isWithdrawing,
|
|
11956
|
+
isLoading: isWithdrawing || confirmingQuote,
|
|
11957
|
+
onClick: handleSubmit
|
|
11958
|
+
}
|
|
11959
|
+
}
|
|
11960
|
+
),
|
|
11961
|
+
bottomSectionRef
|
|
11962
|
+
));
|
|
11963
|
+
};
|
|
11964
|
+
function WithdrawRecipientAddress({
|
|
11965
|
+
config,
|
|
11966
|
+
recipientAddress,
|
|
11967
|
+
setRecipientAddress,
|
|
11968
|
+
selectedChainId,
|
|
11969
|
+
selectedToken,
|
|
11970
|
+
isRiskyAddress
|
|
11971
|
+
}) {
|
|
11972
|
+
const isValidAddress = isAddressSupported(recipientAddress);
|
|
11973
|
+
const hasAddressError = !isValidAddress && recipientAddress !== "";
|
|
11974
|
+
const [addressInputTouched, setAddressInputTouched] = useState26(false);
|
|
11975
|
+
const { updateCustomRecipient } = useCheckoutContext();
|
|
11976
|
+
const { connector, address: connectedWalletAddress } = useAccount3();
|
|
11977
|
+
const wallets = usePreparedWalletConnectors();
|
|
11978
|
+
const showCheckAddressAlert = false;
|
|
11979
|
+
const connectedWalletIconUrl = wallets.find(
|
|
11980
|
+
(wallet) => wallet.id === connector?.id
|
|
11981
|
+
)?.iconUrl;
|
|
11982
|
+
const showUseConnected = useShowConnectWallet({
|
|
11983
|
+
config
|
|
11984
|
+
});
|
|
11985
|
+
const handleUseConnectedClick = () => {
|
|
11986
|
+
if (!connectedWalletAddress) {
|
|
11987
|
+
return;
|
|
11988
|
+
}
|
|
11989
|
+
setRecipientAddress(connectedWalletAddress);
|
|
11990
|
+
updateCustomRecipient(connectedWalletAddress);
|
|
11991
|
+
};
|
|
11992
|
+
const handleAddressChange = (e) => {
|
|
11993
|
+
setRecipientAddress(e.target.value);
|
|
11994
|
+
updateCustomRecipient(e.target.value);
|
|
11995
|
+
};
|
|
11996
|
+
const handleAddressBlur = () => {
|
|
11997
|
+
if (hasAddressError) {
|
|
11998
|
+
setAddressInputTouched(true);
|
|
11999
|
+
}
|
|
12000
|
+
};
|
|
12001
|
+
const showAddressError = addressInputTouched && hasAddressError;
|
|
12002
|
+
return /* @__PURE__ */ React67.createElement(Box, { display: "flex", flexDirection: "column", gap: "8" }, /* @__PURE__ */ React67.createElement(Box, { display: "flex", flexDirection: "column", gap: "4" }, /* @__PURE__ */ React67.createElement(Text, { size: "12", weight: "medium" }, "Recipient address"), /* @__PURE__ */ React67.createElement(
|
|
11836
12003
|
FunInput,
|
|
11837
12004
|
{
|
|
11838
12005
|
allowMultiline: true,
|
|
@@ -11879,7 +12046,7 @@ var WithdrawContent = ({
|
|
|
11879
12046
|
)
|
|
11880
12047
|
) : void 0
|
|
11881
12048
|
}
|
|
11882
|
-
)), /* @__PURE__ */ React67.createElement(Box, { display: "flex", flexDirection: "column", gap: "4" },
|
|
12049
|
+
)), /* @__PURE__ */ React67.createElement(Box, { display: "flex", flexDirection: "column", gap: "4" }, isRiskyAddress && /* @__PURE__ */ React67.createElement(
|
|
11883
12050
|
InfoBanner,
|
|
11884
12051
|
{
|
|
11885
12052
|
message: "This wallet address cannot be used due to restrictions.",
|
|
@@ -11891,7 +12058,33 @@ var WithdrawContent = ({
|
|
|
11891
12058
|
message: getAlertMessage(selectedChainId, selectedToken),
|
|
11892
12059
|
type: "alert"
|
|
11893
12060
|
}
|
|
11894
|
-
)))
|
|
12061
|
+
)));
|
|
12062
|
+
}
|
|
12063
|
+
function WithdrawAmountInput({
|
|
12064
|
+
withdrawalUSD,
|
|
12065
|
+
setWithdrawalUSD,
|
|
12066
|
+
sourceTokenBalance,
|
|
12067
|
+
isWithdrawAmountTooLow,
|
|
12068
|
+
isWithdrawAmountValid,
|
|
12069
|
+
minWithdrawalUsd,
|
|
12070
|
+
config
|
|
12071
|
+
}) {
|
|
12072
|
+
const { updateWithdrawalSourceAssetAmount } = useCheckoutContext();
|
|
12073
|
+
const [amountInputTouched, setAmountInputTouched] = useState26(false);
|
|
12074
|
+
const handleAmountChange = (e) => {
|
|
12075
|
+
if (!amountInputTouched) {
|
|
12076
|
+
setAmountInputTouched(true);
|
|
12077
|
+
}
|
|
12078
|
+
setWithdrawalUSD(e.target.value);
|
|
12079
|
+
const withdrawalUSD2 = Number.parseFloat(e.target.value);
|
|
12080
|
+
updateWithdrawalSourceAssetAmount(withdrawalUSD2);
|
|
12081
|
+
};
|
|
12082
|
+
const setMaxAmount = () => {
|
|
12083
|
+
setWithdrawalUSD(sourceTokenBalance.toString());
|
|
12084
|
+
updateWithdrawalSourceAssetAmount(sourceTokenBalance);
|
|
12085
|
+
};
|
|
12086
|
+
const showAmountError = amountInputTouched && withdrawalUSD !== "" && !isWithdrawAmountValid;
|
|
12087
|
+
return /* @__PURE__ */ React67.createElement(Box, { display: "flex", flexDirection: "column", gap: "4" }, /* @__PURE__ */ React67.createElement(Text, { size: "12", weight: "medium" }, "Amount"), /* @__PURE__ */ React67.createElement(Box, { display: "flex", flexDirection: "column", gap: "4" }, /* @__PURE__ */ React67.createElement(
|
|
11895
12088
|
FunInput,
|
|
11896
12089
|
{
|
|
11897
12090
|
value: withdrawalUSD,
|
|
@@ -11925,80 +12118,8 @@ var WithdrawContent = ({
|
|
|
11925
12118
|
)
|
|
11926
12119
|
)
|
|
11927
12120
|
}
|
|
11928
|
-
), /* @__PURE__ */ React67.createElement(
|
|
11929
|
-
|
|
11930
|
-
{
|
|
11931
|
-
display: "flex",
|
|
11932
|
-
alignItems: "center",
|
|
11933
|
-
justifyContent: "space-between"
|
|
11934
|
-
},
|
|
11935
|
-
/* @__PURE__ */ React67.createElement(Text, { size: "12", color: "secondaryText" }, formatCurrencyAndStringify3(Number(withdrawalUSD))),
|
|
11936
|
-
sourceTokenBalance && /* @__PURE__ */ React67.createElement(Text, { size: "12", color: "secondaryText" }, "Balance:", " ", formatCurrencyAndStringify3(sourceTokenBalance).replace(
|
|
11937
|
-
"$",
|
|
11938
|
-
""
|
|
11939
|
-
), " ", config.sourceTokenSymbol)
|
|
11940
|
-
))), /* @__PURE__ */ React67.createElement(
|
|
11941
|
-
TokenAndChainDropdown,
|
|
11942
|
-
{
|
|
11943
|
-
isLoading: false,
|
|
11944
|
-
assets,
|
|
11945
|
-
selectedToken,
|
|
11946
|
-
onTokenSelected: handleTokenChange,
|
|
11947
|
-
selectedChainId,
|
|
11948
|
-
onChainSelected: handleChainChange,
|
|
11949
|
-
tokenLabel: "Receive token",
|
|
11950
|
-
chainLabel: "Receive chain",
|
|
11951
|
-
alwaysOpenToTop: true,
|
|
11952
|
-
maxTokenDropdownHeight: 195,
|
|
11953
|
-
hideNewTokenBadge: true
|
|
11954
|
-
}
|
|
11955
|
-
), /* @__PURE__ */ React67.createElement(Box, { display: "flex", justifyContent: "space-between", alignItems: "center" }, /* @__PURE__ */ React67.createElement(Text, { size: "12" }, "You will receive"), isQuoteLoading && !isInstantQuoting ? /* @__PURE__ */ React67.createElement(FunSkeletonBlock, { height: "14", width: "54" }) : /* @__PURE__ */ React67.createElement(
|
|
11956
|
-
Box,
|
|
11957
|
-
{
|
|
11958
|
-
display: "flex",
|
|
11959
|
-
alignItems: "center",
|
|
11960
|
-
justifyContent: "center",
|
|
11961
|
-
gap: "8"
|
|
11962
|
-
},
|
|
11963
|
-
quoteEnabled ? /* @__PURE__ */ React67.createElement(React67.Fragment, null, /* @__PURE__ */ React67.createElement(Text, { size: "12", weight: "medium" }, formatCryptoAndStringify2(receiveAmountCrypto, selectedToken)), /* @__PURE__ */ React67.createElement(Text, { size: "12", color: "secondaryText" }, formatCurrencyAndStringify3(receiveAmountFiatTotal))) : /* @__PURE__ */ React67.createElement(Text, { size: "12", color: "secondaryText" }, NO_DATA_VALUE)
|
|
11964
|
-
)), /* @__PURE__ */ React67.createElement(
|
|
11965
|
-
PaymentFeesSummary,
|
|
11966
|
-
{
|
|
11967
|
-
fallbackFees: FALLBACK_FEES,
|
|
11968
|
-
isLoading: isQuoteLoading && !isInstantQuoting,
|
|
11969
|
-
quote: quote?.finalEstimation,
|
|
11970
|
-
key: `${isQuoteLoading}`,
|
|
11971
|
-
valuesNotAvailable: !quoteEnabled
|
|
11972
|
-
}
|
|
11973
|
-
), normalizedSelectedToken === "USDC.E" && /* @__PURE__ */ React67.createElement(
|
|
11974
|
-
InfoBanner,
|
|
11975
|
-
{
|
|
11976
|
-
message: "<strong>USDCe is not widely supported by most exchanges.</strong><br />Sending USDCe to an unsupported platform may result in a permanent loss of funds. Always double-check token compatibility before transferring.",
|
|
11977
|
-
type: "warning"
|
|
11978
|
-
}
|
|
11979
|
-
), bottomSectionRef && createPortal2(
|
|
11980
|
-
/* @__PURE__ */ React67.createElement(
|
|
11981
|
-
Dialog.BottomBar,
|
|
11982
|
-
{
|
|
11983
|
-
topSection: /* @__PURE__ */ React67.createElement(
|
|
11984
|
-
FunNotification,
|
|
11985
|
-
{
|
|
11986
|
-
description: errorNotification?.message,
|
|
11987
|
-
type: errorNotification?.type,
|
|
11988
|
-
isVisible: !!errorNotification
|
|
11989
|
-
}
|
|
11990
|
-
),
|
|
11991
|
-
actionButtonProps: {
|
|
11992
|
-
title: withdrawButtonText,
|
|
11993
|
-
isDisabled: !canContinue || isWithdrawing,
|
|
11994
|
-
isLoading: isWithdrawing || confirmingQuote,
|
|
11995
|
-
onClick: handleSubmit
|
|
11996
|
-
}
|
|
11997
|
-
}
|
|
11998
|
-
),
|
|
11999
|
-
bottomSectionRef
|
|
12000
|
-
));
|
|
12001
|
-
};
|
|
12121
|
+
), /* @__PURE__ */ React67.createElement(Box, { display: "flex", alignItems: "center", justifyContent: "space-between" }, /* @__PURE__ */ React67.createElement(Text, { size: "12", color: "secondaryText" }, formatCurrencyAndStringify3(Number(withdrawalUSD))), sourceTokenBalance && /* @__PURE__ */ React67.createElement(Text, { size: "12", color: "secondaryText" }, "Balance:", " ", formatCurrencyAndStringify3(sourceTokenBalance).replace("$", ""), " ", config.sourceTokenSymbol))));
|
|
12122
|
+
}
|
|
12002
12123
|
|
|
12003
12124
|
// src/modals/WithdrwalModal/WithdrawalNotification.tsx
|
|
12004
12125
|
import React202 from "react";
|
|
@@ -12070,7 +12191,7 @@ import { useAccount as useAccount6 } from "wagmi";
|
|
|
12070
12191
|
// src/components/FunPayments/FunPaymentMethods.tsx
|
|
12071
12192
|
import { BridgeCustomerStatus as BridgeCustomerStatus3 } from "@funkit/api-base";
|
|
12072
12193
|
import {
|
|
12073
|
-
FlagKey as
|
|
12194
|
+
FlagKey as FlagKey17,
|
|
12074
12195
|
formatCurrencyAndStringify as formatCurrencyAndStringify4,
|
|
12075
12196
|
formatSecondsToReadableForm,
|
|
12076
12197
|
safeParseJson as safeParseJson4
|
|
@@ -12157,9 +12278,9 @@ var isSoftRejected = (customer) => customer && isKycUninitialized(customer.statu
|
|
|
12157
12278
|
var FIAT_PROCESSING_TIME = "1-2 business days";
|
|
12158
12279
|
|
|
12159
12280
|
// src/hooks/useCheckoutTimeEstimate.ts
|
|
12160
|
-
import { FlagKey as
|
|
12281
|
+
import { FlagKey as FlagKey15 } from "@funkit/utils";
|
|
12161
12282
|
function useCheckoutTimeEstimate(originalTimeEstimationMs, paymentMethod = "card" /* CARD */, bypassFlag = false) {
|
|
12162
|
-
const timeEstimatesJsonString = useFlag(
|
|
12283
|
+
const timeEstimatesJsonString = useFlag(FlagKey15.CheckoutTimeEstimateOverrides);
|
|
12163
12284
|
const timeEstimates = safeJSONParse(
|
|
12164
12285
|
timeEstimatesJsonString
|
|
12165
12286
|
);
|
|
@@ -12176,9 +12297,9 @@ import {
|
|
|
12176
12297
|
getBridgeKycLink
|
|
12177
12298
|
} from "@funkit/api-base";
|
|
12178
12299
|
import { FUNKIT_CONNECT_SUPPORTED_CHAINS_INFO as FUNKIT_CONNECT_SUPPORTED_CHAINS_INFO9 } from "@funkit/chains";
|
|
12179
|
-
import { FlagKey as
|
|
12300
|
+
import { FlagKey as FlagKey16 } from "@funkit/utils";
|
|
12180
12301
|
import { useQuery as useQuery10, useQueryClient } from "@tanstack/react-query";
|
|
12181
|
-
import { useCallback as
|
|
12302
|
+
import { useCallback as useCallback17 } from "react";
|
|
12182
12303
|
var sepaCountryCode = [
|
|
12183
12304
|
// EU countries that are part of SEPA
|
|
12184
12305
|
"AT",
|
|
@@ -12256,8 +12377,8 @@ function useFiatEnabled() {
|
|
|
12256
12377
|
const isEuSepaUser = sepaCountryCode.includes(
|
|
12257
12378
|
userIpInfo?.alpha2 || "PLACEHOLDER"
|
|
12258
12379
|
);
|
|
12259
|
-
const isTokenTransferEnabled = useFlag(
|
|
12260
|
-
const isFiatEnabled = useFlag(
|
|
12380
|
+
const isTokenTransferEnabled = useFlag(FlagKey16.EnableTokenTransfer);
|
|
12381
|
+
const isFiatEnabled = useFlag(FlagKey16.EnableFiatDeposit);
|
|
12261
12382
|
return isEuSepaUser && isTokenTransferEnabled && isFiatEnabled;
|
|
12262
12383
|
}
|
|
12263
12384
|
function useFrogAccounts() {
|
|
@@ -12277,13 +12398,13 @@ function useFrogAccounts() {
|
|
|
12277
12398
|
function useClearFrogAccountsCache() {
|
|
12278
12399
|
const { walletAddress } = useGeneralWallet();
|
|
12279
12400
|
const queryClient = useQueryClient();
|
|
12280
|
-
const clearFrogAccounts =
|
|
12401
|
+
const clearFrogAccounts = useCallback17(() => {
|
|
12281
12402
|
queryClient.removeQueries({
|
|
12282
12403
|
queryKey: ["frogSubAccounts", walletAddress],
|
|
12283
12404
|
exact: true
|
|
12284
12405
|
});
|
|
12285
12406
|
}, [queryClient, walletAddress]);
|
|
12286
|
-
const clearVirtualFiatAccounts =
|
|
12407
|
+
const clearVirtualFiatAccounts = useCallback17(() => {
|
|
12287
12408
|
queryClient.removeQueries({
|
|
12288
12409
|
queryKey: ["useVirtualFiatAccounts"]
|
|
12289
12410
|
});
|
|
@@ -12358,7 +12479,7 @@ function useCreateVirtualBankAccount() {
|
|
|
12358
12479
|
const chainName = targetChainId && FUNKIT_CONNECT_SUPPORTED_CHAINS_INFO9[targetChainId]?.name?.toLowerCase();
|
|
12359
12480
|
const subAccountId = allFiatAccounts?.bridgeCustomer?.id;
|
|
12360
12481
|
const { clearVirtualFiatAccounts } = useClearFrogAccountsCache();
|
|
12361
|
-
const handleCreateVirtualFiatAccount =
|
|
12482
|
+
const handleCreateVirtualFiatAccount = useCallback17(async () => {
|
|
12362
12483
|
try {
|
|
12363
12484
|
if (!subAccountId || !chainName) {
|
|
12364
12485
|
return {
|
|
@@ -12408,7 +12529,7 @@ import {
|
|
|
12408
12529
|
FUNKIT_CONNECT_CHECKOUT_NATIVE_CURRENCY_ADDRESS as FUNKIT_CONNECT_CHECKOUT_NATIVE_CURRENCY_ADDRESS3,
|
|
12409
12530
|
FUNKIT_CONNECT_SUPPORTED_CHAINS_INFO as FUNKIT_CONNECT_SUPPORTED_CHAINS_INFO10
|
|
12410
12531
|
} from "@funkit/chains";
|
|
12411
|
-
import { useMemo as
|
|
12532
|
+
import { useMemo as useMemo15 } from "react";
|
|
12412
12533
|
|
|
12413
12534
|
// src/hooks/useWalletAssets.ts
|
|
12414
12535
|
import {
|
|
@@ -12585,7 +12706,7 @@ var processWalletAssets = (walletAssets, targetChain) => {
|
|
|
12585
12706
|
};
|
|
12586
12707
|
function useWalletAssetHoldings(targetChain) {
|
|
12587
12708
|
const { walletAssets, isLoading, totalWalletAssetsUsd } = useWalletAssets();
|
|
12588
|
-
const processedAssets =
|
|
12709
|
+
const processedAssets = useMemo15(
|
|
12589
12710
|
() => processWalletAssets(walletAssets, targetChain),
|
|
12590
12711
|
[targetChain, walletAssets]
|
|
12591
12712
|
);
|
|
@@ -13833,16 +13954,6 @@ var CardPaymentMethodItem = ({
|
|
|
13833
13954
|
valueIcon: customValueIcon ?? /* @__PURE__ */ React74.createElement(CombinedCreditCardOptionsIcon, null),
|
|
13834
13955
|
onClick,
|
|
13835
13956
|
isDisabled: !isClickable,
|
|
13836
|
-
badge: /* @__PURE__ */ React74.createElement(
|
|
13837
|
-
FunBadge,
|
|
13838
|
-
{
|
|
13839
|
-
background: "approvedBadgeBackground",
|
|
13840
|
-
borderColor: "approvedBadgeBorder",
|
|
13841
|
-
color: "approvedBadgeText",
|
|
13842
|
-
hasShine: true
|
|
13843
|
-
},
|
|
13844
|
-
"NEW"
|
|
13845
|
-
),
|
|
13846
13957
|
disclaimerText: `$50,000 limit \u2022 ${formatSecondsToReadableForm(timeEstimate, true)}`
|
|
13847
13958
|
}
|
|
13848
13959
|
);
|
|
@@ -13855,12 +13966,12 @@ var TransferPaymentMethodItem = ({
|
|
|
13855
13966
|
paymentIcon
|
|
13856
13967
|
}) => {
|
|
13857
13968
|
const { textCustomizations } = useFunkitConfig();
|
|
13858
|
-
const enableBitcoin = useFlag(
|
|
13859
|
-
const bannerJson = useFlag(
|
|
13969
|
+
const enableBitcoin = useFlag(FlagKey17.EnableBitcoin);
|
|
13970
|
+
const bannerJson = useFlag(FlagKey17.NewTokenAssetSelectionBanner);
|
|
13860
13971
|
const bannerData = safeParseJson4(bannerJson);
|
|
13861
13972
|
const addBitcoinToSourceChainsAndAssetsMiddleware = enableBitcoin ? addBitcoinToSourceChainsAndAssets : void 0;
|
|
13862
13973
|
const depositAssetsJson = useFlag(
|
|
13863
|
-
|
|
13974
|
+
FlagKey17.TokenTransferSourceChainsAndAssets,
|
|
13864
13975
|
void 0,
|
|
13865
13976
|
addBitcoinToSourceChainsAndAssetsMiddleware
|
|
13866
13977
|
);
|
|
@@ -13977,16 +14088,6 @@ function PayPalPaymentMethodItem({
|
|
|
13977
14088
|
keyText: "Deposit with PayPal",
|
|
13978
14089
|
onClick,
|
|
13979
14090
|
isDisabled: !isClickable,
|
|
13980
|
-
badge: /* @__PURE__ */ React74.createElement(
|
|
13981
|
-
FunBadge,
|
|
13982
|
-
{
|
|
13983
|
-
background: "approvedBadgeBackground",
|
|
13984
|
-
borderColor: "approvedBadgeBorder",
|
|
13985
|
-
color: "approvedBadgeText",
|
|
13986
|
-
hasShine: true
|
|
13987
|
-
},
|
|
13988
|
-
"NEW"
|
|
13989
|
-
),
|
|
13990
14091
|
disclaimerText: "$10,000 limit \u2022 5 min"
|
|
13991
14092
|
}
|
|
13992
14093
|
);
|
|
@@ -14078,7 +14179,7 @@ var BankIconActive = ({ size = 20 }) => {
|
|
|
14078
14179
|
|
|
14079
14180
|
// src/components/FunConnectOptions/FunSignInStep.tsx
|
|
14080
14181
|
import { groupBy, isMobile as isMobile8, isSafari as isSafari3, redirectInMobile as redirectInMobile2 } from "@funkit/utils";
|
|
14081
|
-
import React191, { Fragment as Fragment2, useCallback as
|
|
14182
|
+
import React191, { Fragment as Fragment2, useCallback as useCallback43, useMemo as useMemo38, useState as useState62 } from "react";
|
|
14082
14183
|
|
|
14083
14184
|
// src/providers/walletConnectDeepLink.ts
|
|
14084
14185
|
var storageKey = "WALLETCONNECT_DEEPLINK_CHOICE";
|
|
@@ -14496,10 +14597,10 @@ var SocialsIcon = () => {
|
|
|
14496
14597
|
};
|
|
14497
14598
|
|
|
14498
14599
|
// src/components/FunConnectOptions/FunConnectOptions.tsx
|
|
14499
|
-
import React190, { useCallback as
|
|
14600
|
+
import React190, { useCallback as useCallback42, useMemo as useMemo37, useState as useState61 } from "react";
|
|
14500
14601
|
|
|
14501
14602
|
// src/hooks/useAnimatedNavigation.ts
|
|
14502
|
-
import { useCallback as
|
|
14603
|
+
import { useCallback as useCallback18, useState as useState28 } from "react";
|
|
14503
14604
|
|
|
14504
14605
|
// src/css/modalTransitionStyles.css.ts
|
|
14505
14606
|
var animateContentInClass = "stgjxl2";
|
|
@@ -14527,7 +14628,7 @@ function useAnimatedNavigation(callback) {
|
|
|
14527
14628
|
const [animateOut, setAnimateOut] = useState28(false);
|
|
14528
14629
|
const [isSkipped, setIsSkipped] = useState28(false);
|
|
14529
14630
|
const [isReversed, setIsReversed] = useState28(false);
|
|
14530
|
-
const navigateTo =
|
|
14631
|
+
const navigateTo = useCallback18(
|
|
14531
14632
|
(page, params = {}) => {
|
|
14532
14633
|
setIsSkipped(!!params.skip);
|
|
14533
14634
|
if (params.skip) {
|
|
@@ -14542,7 +14643,7 @@ function useAnimatedNavigation(callback) {
|
|
|
14542
14643
|
},
|
|
14543
14644
|
[callback]
|
|
14544
14645
|
);
|
|
14545
|
-
const animate =
|
|
14646
|
+
const animate = useCallback18(
|
|
14546
14647
|
(callback2, params = {}) => {
|
|
14547
14648
|
setIsSkipped(!!params.skip);
|
|
14548
14649
|
if (params.skip) {
|
|
@@ -14570,17 +14671,17 @@ import React180, { useEffect as useEffect45, useRef as useRef23, useState as use
|
|
|
14570
14671
|
|
|
14571
14672
|
// src/modals/CheckoutModal/stepTransition.ts
|
|
14572
14673
|
import {
|
|
14573
|
-
useCallback as
|
|
14674
|
+
useCallback as useCallback38,
|
|
14574
14675
|
useRef as useRef22,
|
|
14575
14676
|
useState as useState57
|
|
14576
14677
|
} from "react";
|
|
14577
14678
|
|
|
14578
14679
|
// src/hooks/useCheckoutQuoteNotification.ts
|
|
14579
|
-
import { useMemo as
|
|
14680
|
+
import { useMemo as useMemo16 } from "react";
|
|
14580
14681
|
function useCheckoutQuoteNotification() {
|
|
14581
14682
|
const { clearCheckoutQuoteMessages } = useQuoteContext();
|
|
14582
14683
|
const { quoteErrorMessage, quoteStepMessage } = useQuoteContext();
|
|
14583
|
-
const quoteNotification =
|
|
14684
|
+
const quoteNotification = useMemo16(() => {
|
|
14584
14685
|
if (quoteErrorMessage !== "") {
|
|
14585
14686
|
return {
|
|
14586
14687
|
messageType: "error",
|
|
@@ -14864,7 +14965,7 @@ import {
|
|
|
14864
14965
|
BridgeCustomerStatus as BridgeCustomerStatus4
|
|
14865
14966
|
} from "@funkit/api-base";
|
|
14866
14967
|
import { exhaustiveCheck as exhaustiveCheck4 } from "@funkit/utils";
|
|
14867
|
-
import React92, { useCallback as
|
|
14968
|
+
import React92, { useCallback as useCallback19, useState as useState30 } from "react";
|
|
14868
14969
|
import { createPortal as createPortal4 } from "react-dom";
|
|
14869
14970
|
|
|
14870
14971
|
// src/components/Icons/HomeIcon.tsx
|
|
@@ -15466,7 +15567,7 @@ var VerifyAccountScreen = ({
|
|
|
15466
15567
|
const kycUninitialized = !isSoftRejected2 && customerStatus && isKycUninitialized(customerStatus);
|
|
15467
15568
|
const canStartKyc = kycUninitialized || isSoftRejected2;
|
|
15468
15569
|
const handleCreateVirtualFiatAccount = useCreateVirtualBankAccount();
|
|
15469
|
-
const onClick =
|
|
15570
|
+
const onClick = useCallback19(async () => {
|
|
15470
15571
|
if (customerStatus === BridgeCustomerStatus4.ACTIVE) {
|
|
15471
15572
|
setCreating(true);
|
|
15472
15573
|
const result = await handleCreateVirtualFiatAccount();
|
|
@@ -15998,7 +16099,7 @@ function getCheckoutCompletionTime(checkout) {
|
|
|
15998
16099
|
}
|
|
15999
16100
|
|
|
16000
16101
|
// src/components/FunCheckoutHistory/FunCheckoutHistoryDetail.tsx
|
|
16001
|
-
import React108, { useCallback as
|
|
16102
|
+
import React108, { useCallback as useCallback21, useMemo as useMemo17, useState as useState32 } from "react";
|
|
16002
16103
|
import { createPortal as createPortal6 } from "react-dom";
|
|
16003
16104
|
|
|
16004
16105
|
// src/components/HelpAlert/HelpAlert.tsx
|
|
@@ -16014,7 +16115,7 @@ var HelpAlert = ({ onHelp: onHelp2 }) => {
|
|
|
16014
16115
|
};
|
|
16015
16116
|
|
|
16016
16117
|
// src/hooks/useFunListeners.ts
|
|
16017
|
-
import { useCallback as
|
|
16118
|
+
import { useCallback as useCallback20, useEffect as useEffect28, useRef as useRef13 } from "react";
|
|
16018
16119
|
function useCheckoutHistoryListener(activate = true, singleDepositAddr) {
|
|
16019
16120
|
const activeIntervalRef = useRef13();
|
|
16020
16121
|
const { startCheckoutHistoryListener, stopCheckoutHistoryListener } = useCheckoutHistoryContext();
|
|
@@ -16037,21 +16138,21 @@ function useSIWFarcasterListener(channelToken) {
|
|
|
16037
16138
|
const { getFcConnectionStatus, handleFunkitWeb2Login } = useFunkitWeb2Login();
|
|
16038
16139
|
const intervalRef = useRef13();
|
|
16039
16140
|
const [refreshSymbol, triggerRefreshSymbol] = useSymbolRefresh_default();
|
|
16040
|
-
const startStatusListener =
|
|
16141
|
+
const startStatusListener = useCallback20(() => {
|
|
16041
16142
|
clearInterval(intervalRef.current);
|
|
16042
16143
|
triggerRefreshSymbol();
|
|
16043
16144
|
intervalRef.current = setInterval(() => {
|
|
16044
16145
|
triggerRefreshSymbol();
|
|
16045
16146
|
}, FARCASTER_STATUS_INTERVAL);
|
|
16046
16147
|
}, [triggerRefreshSymbol]);
|
|
16047
|
-
const stopStatusListener =
|
|
16148
|
+
const stopStatusListener = useCallback20(() => {
|
|
16048
16149
|
clearInterval(intervalRef.current);
|
|
16049
16150
|
}, []);
|
|
16050
16151
|
useEffect28(() => {
|
|
16051
16152
|
startStatusListener();
|
|
16052
16153
|
return () => stopStatusListener();
|
|
16053
16154
|
}, []);
|
|
16054
|
-
const check =
|
|
16155
|
+
const check = useCallback20(async () => {
|
|
16055
16156
|
if (!channelToken || !initalChainid) {
|
|
16056
16157
|
return;
|
|
16057
16158
|
}
|
|
@@ -16365,7 +16466,7 @@ function FunCheckoutHistoryDetail({
|
|
|
16365
16466
|
useCheckoutHistoryListener(isProcessing, checkoutHistoryInfo?.depositAddr);
|
|
16366
16467
|
useWalletAssets({ enableRefetchInterval: isProcessing || isCompleted });
|
|
16367
16468
|
const { beginCheckout } = useFunkitCheckout({});
|
|
16368
|
-
const handleNewCheckout =
|
|
16469
|
+
const handleNewCheckout = useCallback21(
|
|
16369
16470
|
(fromCheckout) => {
|
|
16370
16471
|
onClose({ isNewDeposit: true });
|
|
16371
16472
|
const historicalCheckout = fromCheckout.clientMetadata;
|
|
@@ -16384,7 +16485,7 @@ function FunCheckoutHistoryDetail({
|
|
|
16384
16485
|
isActiveCheckout
|
|
16385
16486
|
]
|
|
16386
16487
|
);
|
|
16387
|
-
const primaryButtonProps =
|
|
16488
|
+
const primaryButtonProps = useMemo17(() => {
|
|
16388
16489
|
if (!isCheckoutLoaded) {
|
|
16389
16490
|
return void 0;
|
|
16390
16491
|
}
|
|
@@ -16473,7 +16574,7 @@ var CheckoutAlert = ({ state, refundState, onHelp: onHelp2 }) => {
|
|
|
16473
16574
|
|
|
16474
16575
|
// src/components/FunCheckoutHistory/FunCheckoutHistoryHelp.tsx
|
|
16475
16576
|
import { sendSupportMessage } from "@funkit/api-base";
|
|
16476
|
-
import React112, { useEffect as useEffect30, useMemo as
|
|
16577
|
+
import React112, { useEffect as useEffect30, useMemo as useMemo18, useRef as useRef15, useState as useState33 } from "react";
|
|
16477
16578
|
import { createPortal as createPortal7 } from "react-dom";
|
|
16478
16579
|
|
|
16479
16580
|
// src/components/FunInput/FunTextAreaInput.tsx
|
|
@@ -16650,7 +16751,7 @@ function FunCheckoutHistoryHelp({
|
|
|
16650
16751
|
);
|
|
16651
16752
|
const [descriptionInput, setDescriptionInput] = useState33("");
|
|
16652
16753
|
const [errorMessage, setErrorMessage] = useState33();
|
|
16653
|
-
const isEmailInputValid =
|
|
16754
|
+
const isEmailInputValid = useMemo18(() => {
|
|
16654
16755
|
return validateEmailString(emailInput);
|
|
16655
16756
|
}, [emailInput]);
|
|
16656
16757
|
const [processStage, setProcessStage] = useState33(
|
|
@@ -16842,7 +16943,7 @@ import {
|
|
|
16842
16943
|
formatTimestamp as formatTimestamp2,
|
|
16843
16944
|
isTokenEquivalent as isTokenEquivalent3
|
|
16844
16945
|
} from "@funkit/utils";
|
|
16845
|
-
import React113, { useCallback as
|
|
16946
|
+
import React113, { useCallback as useCallback22, useMemo as useMemo19, useRef as useRef16, useState as useState34 } from "react";
|
|
16846
16947
|
import { createPortal as createPortal8 } from "react-dom";
|
|
16847
16948
|
|
|
16848
16949
|
// src/hooks/useReceiveAmountLabel.ts
|
|
@@ -16871,7 +16972,7 @@ function FunDirectExecutionHistoryDetail({
|
|
|
16871
16972
|
const bottomSectionRef = document.getElementById(bottomBarId);
|
|
16872
16973
|
const { checkoutItem } = useCheckoutContext();
|
|
16873
16974
|
const { beginCheckout } = useFunkitCheckout({});
|
|
16874
|
-
const handleNewCheckout =
|
|
16975
|
+
const handleNewCheckout = useCallback22(
|
|
16875
16976
|
(fromCheckout) => {
|
|
16876
16977
|
onClose({ isNewDeposit: true });
|
|
16877
16978
|
const historicalCheckout = fromCheckout.clientMetadata;
|
|
@@ -16891,7 +16992,7 @@ function FunDirectExecutionHistoryDetail({
|
|
|
16891
16992
|
]
|
|
16892
16993
|
);
|
|
16893
16994
|
const isWithdrawal = directExecution?.clientMetadata?.isWithdrawal;
|
|
16894
|
-
const buttonProps =
|
|
16995
|
+
const buttonProps = useMemo19(() => {
|
|
16895
16996
|
if (!isLoaded) {
|
|
16896
16997
|
return void 0;
|
|
16897
16998
|
}
|
|
@@ -17114,11 +17215,11 @@ function FunCheckoutHistoryContent({
|
|
|
17114
17215
|
}
|
|
17115
17216
|
|
|
17116
17217
|
// src/modals/CheckoutModal/CheckoutComplete/useLogCheckoutCompletion.ts
|
|
17117
|
-
import { useCallback as
|
|
17218
|
+
import { useCallback as useCallback23 } from "react";
|
|
17118
17219
|
function useLogCheckoutCompletion() {
|
|
17119
17220
|
const { latestQuote } = useQuoteContext();
|
|
17120
17221
|
const { checkoutItem } = useCheckoutContext();
|
|
17121
|
-
const logCheckoutCompletion =
|
|
17222
|
+
const logCheckoutCompletion = useCallback23(
|
|
17122
17223
|
(depositAddress) => {
|
|
17123
17224
|
if (depositAddress) {
|
|
17124
17225
|
logger.log("checkoutFundingCompleted", {
|
|
@@ -17214,7 +17315,7 @@ function CheckoutHelp({
|
|
|
17214
17315
|
}
|
|
17215
17316
|
|
|
17216
17317
|
// src/modals/CheckoutModal/ConfirmationStep/ConfirmationStep.tsx
|
|
17217
|
-
import React131, { useEffect as useEffect36, useMemo as
|
|
17318
|
+
import React131, { useEffect as useEffect36, useMemo as useMemo24, useState as useState43 } from "react";
|
|
17218
17319
|
import { createPortal as createPortal10 } from "react-dom";
|
|
17219
17320
|
|
|
17220
17321
|
// src/providers/UserPresenceContext.tsx
|
|
@@ -17255,7 +17356,7 @@ import { DirectExecutionType as DirectExecutionType2 } from "@funkit/api-base";
|
|
|
17255
17356
|
|
|
17256
17357
|
// src/components/FunInfoBanner/FunInfoBanner.tsx
|
|
17257
17358
|
import React119 from "react";
|
|
17258
|
-
import { FlagKey as
|
|
17359
|
+
import { FlagKey as FlagKey18, safeParseJson as safeParseJson5 } from "@funkit/utils";
|
|
17259
17360
|
|
|
17260
17361
|
// src/components/FunInfoBanner/EphemeralInfoBanner.tsx
|
|
17261
17362
|
import React118, { useState as useState36 } from "react";
|
|
@@ -17293,7 +17394,7 @@ var EphemeralInfoBanner = ({
|
|
|
17293
17394
|
|
|
17294
17395
|
// src/components/FunInfoBanner/FunInfoBanner.tsx
|
|
17295
17396
|
var FunInfoBanner = () => {
|
|
17296
|
-
const bannerJson = useFlag(
|
|
17397
|
+
const bannerJson = useFlag(FlagKey18.ShowInfoBanner);
|
|
17297
17398
|
const bannerData = safeParseJson5(bannerJson);
|
|
17298
17399
|
if (!bannerData || !bannerData.message) {
|
|
17299
17400
|
return null;
|
|
@@ -17311,12 +17412,12 @@ var FunInfoBanner = () => {
|
|
|
17311
17412
|
// src/components/FunTransactionSummary/PaymentAmountSummary.tsx
|
|
17312
17413
|
import {
|
|
17313
17414
|
formatCurrencyAndStringify as formatCurrencyAndStringify5,
|
|
17314
|
-
isTokenAddressEquivalent as
|
|
17415
|
+
isTokenAddressEquivalent as isTokenAddressEquivalent5,
|
|
17315
17416
|
isTokenEquivalent as isTokenEquivalent4
|
|
17316
17417
|
} from "@funkit/utils";
|
|
17317
17418
|
import NumberFlow from "@number-flow/react";
|
|
17318
17419
|
import { motion as motion7 } from "motion/react";
|
|
17319
|
-
import React121, { useMemo as
|
|
17420
|
+
import React121, { useMemo as useMemo21 } from "react";
|
|
17320
17421
|
|
|
17321
17422
|
// src/consts/design.ts
|
|
17322
17423
|
var mapFontLineHeightToNumberFlowHeight = {
|
|
@@ -17329,7 +17430,7 @@ var defaultTransition = "all 150ms cubic-bezier(0.3, 0, 0.06, 1)";
|
|
|
17329
17430
|
// src/components/FunAssetAvatar/FunAssetAvatar.tsx
|
|
17330
17431
|
import { isNotNullish as isNotNullish5 } from "@funkit/utils";
|
|
17331
17432
|
import clsx16 from "clsx";
|
|
17332
|
-
import React120, { useMemo as
|
|
17433
|
+
import React120, { useMemo as useMemo20 } from "react";
|
|
17333
17434
|
|
|
17334
17435
|
// src/components/FunAssetAvatar/FunAssetAvatar.css.ts
|
|
17335
17436
|
var chainContainerStyle = "uwrdc22 _1rsrm2f19 _1rsrm2fa _1rsrm2f4 _1rsrm2f4i";
|
|
@@ -17349,7 +17450,7 @@ function FunAssetAvatar({
|
|
|
17349
17450
|
largeChainIcon = false
|
|
17350
17451
|
}) {
|
|
17351
17452
|
const chainMetadata = chainMetadataById[Number.parseInt((chainId || "").toString())] || null;
|
|
17352
|
-
const finalAssetSrc =
|
|
17453
|
+
const finalAssetSrc = useMemo20(() => {
|
|
17353
17454
|
const normalizedTicker = assetTicker?.toUpperCase() || "";
|
|
17354
17455
|
const defaultSrc = ASSET_LOGO_SRCS[normalizedTicker];
|
|
17355
17456
|
if (prioritizeDefaults) {
|
|
@@ -17449,7 +17550,7 @@ function PaymentAmountSummary({
|
|
|
17449
17550
|
})
|
|
17450
17551
|
});
|
|
17451
17552
|
const sourceTokenAmount = quote?.finalPaymentTokenAmount ? Number.parseFloat(quote.finalPaymentTokenAmount) : void 0;
|
|
17452
|
-
const paymentTokenUsdAmount =
|
|
17553
|
+
const paymentTokenUsdAmount = useMemo21(() => {
|
|
17453
17554
|
if (!quote) {
|
|
17454
17555
|
return void 0;
|
|
17455
17556
|
}
|
|
@@ -17457,7 +17558,7 @@ function PaymentAmountSummary({
|
|
|
17457
17558
|
quote.baseQuote.estSubtotalUsd + Number.parseFloat(quote.finalPaymentFeeUsd) - Number.parseFloat(quote.finalSpreadUsd)
|
|
17458
17559
|
);
|
|
17459
17560
|
}, [quote]);
|
|
17460
|
-
const receiveTokenUsdAmount =
|
|
17561
|
+
const receiveTokenUsdAmount = useMemo21(() => {
|
|
17461
17562
|
if (!quote) {
|
|
17462
17563
|
return void 0;
|
|
17463
17564
|
}
|
|
@@ -17471,7 +17572,7 @@ function PaymentAmountSummary({
|
|
|
17471
17572
|
const sourceChainId = sourceAssetInfo?.chainId;
|
|
17472
17573
|
const areSameChains = sourceChainId === targetChainId;
|
|
17473
17574
|
const sourceIcon = sourceAssetInfo?.iconSrc ?? void 0;
|
|
17474
|
-
const isSameTokenAddress =
|
|
17575
|
+
const isSameTokenAddress = isTokenAddressEquivalent5({
|
|
17475
17576
|
firstTokenAddress: sourceTokenAddress,
|
|
17476
17577
|
secondTokenAddress: targetTokenAddress
|
|
17477
17578
|
});
|
|
@@ -17748,7 +17849,7 @@ var DirectExecutionBrokerageAndCardAlert = () => {
|
|
|
17748
17849
|
};
|
|
17749
17850
|
|
|
17750
17851
|
// src/modals/CheckoutModal/ConfirmationStep/DisclaimerText.tsx
|
|
17751
|
-
import React126, { useMemo as
|
|
17852
|
+
import React126, { useMemo as useMemo22 } from "react";
|
|
17752
17853
|
var DisclaimerText = ({
|
|
17753
17854
|
continueText,
|
|
17754
17855
|
isCardPayment,
|
|
@@ -17783,7 +17884,7 @@ var DisclaimerText = ({
|
|
|
17783
17884
|
), ", and the ", /* @__PURE__ */ React126.createElement(FunLinkButton, { href: "https://morpho.org/", inline: true, text: "terms" }), " applicable to third-party Morpho vaults", ".") : /* @__PURE__ */ React126.createElement(React126.Fragment, null, showCardDisclaimer && `${cardDisclaimer} `, "By clicking on ", continueText, ", you agree to our", " ", /* @__PURE__ */ React126.createElement(FunLinkButton, { href: FUN_TERMS_URL, inline: true, text: "terms" }), ".");
|
|
17784
17885
|
};
|
|
17785
17886
|
function useCardDisclaimer(checkoutItem, finalConvertedAssetName) {
|
|
17786
|
-
const cardDisclaimer =
|
|
17887
|
+
const cardDisclaimer = useMemo22(() => {
|
|
17787
17888
|
if (!checkoutItem || !finalConvertedAssetName) {
|
|
17788
17889
|
return null;
|
|
17789
17890
|
}
|
|
@@ -17828,11 +17929,11 @@ import { useState as useState38 } from "react";
|
|
|
17828
17929
|
import { useEffect as useEffect33, useState as useState37 } from "react";
|
|
17829
17930
|
|
|
17830
17931
|
// src/hooks/useCheckoutAccountBalanceTransfer.ts
|
|
17831
|
-
import { useCallback as
|
|
17932
|
+
import { useCallback as useCallback24 } from "react";
|
|
17832
17933
|
function useCheckoutAccountBalanceTransfer() {
|
|
17833
17934
|
const { checkoutItem } = useCheckoutContext();
|
|
17834
17935
|
const { funWallet, funWalletAuth } = useGeneralWallet();
|
|
17835
|
-
const generateCheckoutTransferOpItems =
|
|
17936
|
+
const generateCheckoutTransferOpItems = useCallback24(
|
|
17836
17937
|
async (toAddress, tokenAmount) => {
|
|
17837
17938
|
if (checkoutItem?.selectedSourceAssetInfo?.chainId) {
|
|
17838
17939
|
const newConfig = getFunkitEnvForCheckoutEstimation({
|
|
@@ -18042,7 +18143,7 @@ import React128, { useState as useState39 } from "react";
|
|
|
18042
18143
|
// src/modals/CheckoutModal/ConfirmationStep/useAccountBalanceTransfer.ts
|
|
18043
18144
|
import { getPaymasterDataForCheckoutSponsoredTransfer } from "@funkit/api-base";
|
|
18044
18145
|
import { ERC20_ABI, USDT_ABI } from "@funkit/core";
|
|
18045
|
-
import { useCallback as
|
|
18146
|
+
import { useCallback as useCallback25 } from "react";
|
|
18046
18147
|
import { useAccount as useAccount5, useSendTransaction, useWriteContract } from "wagmi";
|
|
18047
18148
|
|
|
18048
18149
|
// src/utils/isMainnetUsdt.ts
|
|
@@ -18066,7 +18167,7 @@ function useWeb3AccountBalancePostCheckout(setPostCheckoutStepMessage) {
|
|
|
18066
18167
|
const { sendTransactionAsync } = useSendTransaction();
|
|
18067
18168
|
const { cancelCheckout, checkoutItem } = useCheckoutContext();
|
|
18068
18169
|
const { latestQuote } = useQuoteContext();
|
|
18069
|
-
const handleWeb3AccountBalancePostCheckout =
|
|
18170
|
+
const handleWeb3AccountBalancePostCheckout = useCallback25(
|
|
18070
18171
|
async (depositAddress) => {
|
|
18071
18172
|
if (!latestQuote?.baseQuote.estTotalFromAmountBaseUnit) {
|
|
18072
18173
|
return;
|
|
@@ -18172,7 +18273,7 @@ function useWeb3AccountBalancePostCheckout(setPostCheckoutStepMessage) {
|
|
|
18172
18273
|
function useWeb2AccountBalancePostCheckout(apiKey) {
|
|
18173
18274
|
const { latestQuote } = useQuoteContext();
|
|
18174
18275
|
const { generateCheckoutTransferOpItems } = useCheckoutAccountBalanceTransfer();
|
|
18175
|
-
const handleWeb2AccountBalancePostCheckout =
|
|
18276
|
+
const handleWeb2AccountBalancePostCheckout = useCallback25(
|
|
18176
18277
|
async (depositAddress) => {
|
|
18177
18278
|
const { rFunWallet, rFunWalletAuth, transferOp, envConfig } = await generateCheckoutTransferOpItems(
|
|
18178
18279
|
depositAddress,
|
|
@@ -18221,7 +18322,7 @@ function useAccountBalancePostCheckout(setPostCheckoutStepMessage, apiKey) {
|
|
|
18221
18322
|
const { loginType } = useGeneralWallet();
|
|
18222
18323
|
const handleWeb2AccountBalancePostCheckout = useWeb2AccountBalancePostCheckout(apiKey);
|
|
18223
18324
|
const handleWeb3AccountBalancePostCheckout = useWeb3AccountBalancePostCheckout(setPostCheckoutStepMessage);
|
|
18224
|
-
const handleAccountBalancePostCheckout =
|
|
18325
|
+
const handleAccountBalancePostCheckout = useCallback25(
|
|
18225
18326
|
async (depositAddress) => {
|
|
18226
18327
|
if (loginType === "web2" /* Web2 */) {
|
|
18227
18328
|
await handleWeb2AccountBalancePostCheckout(depositAddress);
|
|
@@ -18372,15 +18473,15 @@ function usePostCheckout({
|
|
|
18372
18473
|
}
|
|
18373
18474
|
|
|
18374
18475
|
// src/modals/CheckoutModal/ConfirmationStep/useQuoteRefresh.ts
|
|
18375
|
-
import { useCallback as
|
|
18476
|
+
import { useCallback as useCallback28, useEffect as useEffect35, useMemo as useMemo23, useRef as useRef18, useState as useState42 } from "react";
|
|
18376
18477
|
|
|
18377
18478
|
// src/hooks/useCountdown.tsx
|
|
18378
18479
|
import React130 from "react";
|
|
18379
|
-
import { useCallback as
|
|
18480
|
+
import { useCallback as useCallback27, useState as useState41 } from "react";
|
|
18380
18481
|
|
|
18381
18482
|
// src/components/FunCountdown/FunCountdown.tsx
|
|
18382
18483
|
import { noop as noop7 } from "@funkit/utils";
|
|
18383
|
-
import React129, { useCallback as
|
|
18484
|
+
import React129, { useCallback as useCallback26, useEffect as useEffect34, useState as useState40 } from "react";
|
|
18384
18485
|
|
|
18385
18486
|
// src/components/FunCountdown/FunCountdown.css.ts
|
|
18386
18487
|
var backgroundRing = "_1t0bc111 _1rsrm2f1l4";
|
|
@@ -18416,7 +18517,7 @@ var FunCountdown = ({
|
|
|
18416
18517
|
const onCountdownEndedOnce = useEffectEvent(onCountdownEnded);
|
|
18417
18518
|
const onBeforeCountdownEndsOnce = useEffectEvent(onBeforeCountdownEnds);
|
|
18418
18519
|
const onCountdownLastSecondOnce = useEffectEvent(onCountdownLastSecond);
|
|
18419
|
-
const handleInterval =
|
|
18520
|
+
const handleInterval = useCallback26(() => {
|
|
18420
18521
|
if (isPaused) {
|
|
18421
18522
|
return;
|
|
18422
18523
|
}
|
|
@@ -18534,7 +18635,7 @@ function useCountdown({
|
|
|
18534
18635
|
}) {
|
|
18535
18636
|
const [countdownKey, setCountdownKey] = useState41(0);
|
|
18536
18637
|
const [isLastSecond, setIsLastSecond] = useState41(false);
|
|
18537
|
-
const restartCountdown =
|
|
18638
|
+
const restartCountdown = useCallback27(() => {
|
|
18538
18639
|
setIsLastSecond(false);
|
|
18539
18640
|
setCountdownKey((key) => key + 1);
|
|
18540
18641
|
}, []);
|
|
@@ -18589,7 +18690,7 @@ function useQuoteRefresh({
|
|
|
18589
18690
|
preloadedQuoteRef.current = data;
|
|
18590
18691
|
}
|
|
18591
18692
|
);
|
|
18592
|
-
const preloadQuote =
|
|
18693
|
+
const preloadQuote = useCallback28(() => {
|
|
18593
18694
|
if (!isSourceAssetConfirming) {
|
|
18594
18695
|
onSourceAssetConfirmed(true);
|
|
18595
18696
|
}
|
|
@@ -18603,7 +18704,7 @@ function useQuoteRefresh({
|
|
|
18603
18704
|
onBeforeCountdownEnds: preloadQuote,
|
|
18604
18705
|
onCountdownEnded: () => refreshQuote()
|
|
18605
18706
|
});
|
|
18606
|
-
const refreshQuote =
|
|
18707
|
+
const refreshQuote = useCallback28(
|
|
18607
18708
|
async (forceHardRefresh = false) => {
|
|
18608
18709
|
if (isOnHold) {
|
|
18609
18710
|
setIsPendingRefresh(true);
|
|
@@ -18635,7 +18736,7 @@ function useQuoteRefresh({
|
|
|
18635
18736
|
},
|
|
18636
18737
|
[isOnHold, restartCountdown, setCheckoutQuote, triggerAssetConfirm]
|
|
18637
18738
|
);
|
|
18638
|
-
const quoteError =
|
|
18739
|
+
const quoteError = useMemo23(() => {
|
|
18639
18740
|
if (quoteErrorMessage && !isQuoting) {
|
|
18640
18741
|
return {
|
|
18641
18742
|
message: quoteErrorMessage,
|
|
@@ -18773,7 +18874,7 @@ function ConfirmationStep({
|
|
|
18773
18874
|
refreshIntervalSeconds: directExecutionType === DirectExecutionType2.RELAY ? RELAY_ESTIMATE_REFRESH_INTERVAL_SEC : DEFAULT_ESTIMATE_REFRESH_INTERVAL_SEC
|
|
18774
18875
|
})
|
|
18775
18876
|
);
|
|
18776
|
-
const error =
|
|
18877
|
+
const error = useMemo24(() => {
|
|
18777
18878
|
if (!isInitialQuoting && moonpayAmountCheck?.isInvalid) {
|
|
18778
18879
|
return {
|
|
18779
18880
|
message: moonpayAmountCheck.message,
|
|
@@ -18788,7 +18889,7 @@ function ConfirmationStep({
|
|
|
18788
18889
|
quoteError,
|
|
18789
18890
|
isInitialQuoting
|
|
18790
18891
|
]);
|
|
18791
|
-
const stepMessage =
|
|
18892
|
+
const stepMessage = useMemo24(() => {
|
|
18792
18893
|
if (initialQuoteStep) {
|
|
18793
18894
|
return initialQuoteStep;
|
|
18794
18895
|
}
|
|
@@ -18845,7 +18946,7 @@ function ConfirmationStep({
|
|
|
18845
18946
|
const isStepLoading = isInitialQuoting || isContinuing || isRefreshing;
|
|
18846
18947
|
const uiCustomizations = funkitConfig.uiCustomizations?.confirmationScreen;
|
|
18847
18948
|
const customRecipient = checkoutItem?.initSettings.config.customRecipient;
|
|
18848
|
-
const showKatanaBridgeAlert =
|
|
18949
|
+
const showKatanaBridgeAlert = useMemo24(() => {
|
|
18849
18950
|
const relayQuoteMetadata = latestQuote?.baseQuote?.metadata;
|
|
18850
18951
|
if (!relayQuoteMetadata) {
|
|
18851
18952
|
return false;
|
|
@@ -18859,7 +18960,7 @@ function ConfirmationStep({
|
|
|
18859
18960
|
// https://fun-xyz.slack.com/archives/C08PVUDA1M2/p1752179735981389?thread_ts=1752176009.628309&cid=C08PVUDA1M2
|
|
18860
18961
|
swapImpact + appFeePercent > KATANA_BRIDGE_ALERT_THRESHOLD_PERCENT;
|
|
18861
18962
|
}, [funkitConfig.apiKey, latestQuote, checkoutItem]);
|
|
18862
|
-
const showDirectExecutionNotificationBanner =
|
|
18963
|
+
const showDirectExecutionNotificationBanner = useMemo24(() => {
|
|
18863
18964
|
const isRelayEnabled = checkoutItem !== null && getIsRelayEnabled({
|
|
18864
18965
|
fromChainId: checkoutItem.selectedSourceAssetInfo.chainId,
|
|
18865
18966
|
fromTokenAddress: checkoutItem.selectedSourceAssetInfo.address || "",
|
|
@@ -19111,7 +19212,7 @@ import { getMeldDefaultFiat } from "@funkit/api-base";
|
|
|
19111
19212
|
import { useQuery as useQuery13 } from "@tanstack/react-query";
|
|
19112
19213
|
|
|
19113
19214
|
// src/hooks/queries/useMeldCryptoCurrencyCode.ts
|
|
19114
|
-
import { FlagKey as
|
|
19215
|
+
import { FlagKey as FlagKey19 } from "@funkit/utils";
|
|
19115
19216
|
import { arbitrum as arbitrum3, base as base6, polygon as polygon5 } from "viem/chains";
|
|
19116
19217
|
var ARB_USDC = "0xaf88d065e77c8cC2239327C5EDb3A432268e5831".toLowerCase();
|
|
19117
19218
|
var POLYGON_USDC = "0x3c499c542cEF5E3811e1192ce70d8cC03d5c3359".toLowerCase();
|
|
@@ -19144,7 +19245,7 @@ function useMeldCryptoCurrencyCode() {
|
|
|
19144
19245
|
return mappedCurrency;
|
|
19145
19246
|
}
|
|
19146
19247
|
function useIsMeldEnabled() {
|
|
19147
|
-
const meldEnabled = useFlag(
|
|
19248
|
+
const meldEnabled = useFlag(FlagKey19.EnableMeldPayment);
|
|
19148
19249
|
const meldCurrencyCode = useMeldCryptoCurrencyCode();
|
|
19149
19250
|
return meldEnabled && !!meldCurrencyCode;
|
|
19150
19251
|
}
|
|
@@ -19278,13 +19379,13 @@ import {
|
|
|
19278
19379
|
MeldServiceProvider as MeldServiceProvider2
|
|
19279
19380
|
} from "@funkit/api-base";
|
|
19280
19381
|
import {
|
|
19281
|
-
FlagKey as
|
|
19382
|
+
FlagKey as FlagKey22,
|
|
19282
19383
|
formatCryptoAndStringify as formatCryptoAndStringify4,
|
|
19283
19384
|
formatCurrencyAndStringify as formatCurrencyAndStringify9,
|
|
19284
19385
|
isTokenEquivalent as isTokenEquivalent6,
|
|
19285
19386
|
round as round4
|
|
19286
19387
|
} from "@funkit/utils";
|
|
19287
|
-
import React145, { useMemo as
|
|
19388
|
+
import React145, { useMemo as useMemo26 } from "react";
|
|
19288
19389
|
|
|
19289
19390
|
// src/components/CurrencySelector/CurrencySelector.tsx
|
|
19290
19391
|
import React134 from "react";
|
|
@@ -19550,7 +19651,7 @@ var MeldProviderLabel = ({
|
|
|
19550
19651
|
};
|
|
19551
19652
|
|
|
19552
19653
|
// src/components/SourcePaymentMethodItem/SourcePaymentMethodItem.tsx
|
|
19553
|
-
import { FlagKey as
|
|
19654
|
+
import { FlagKey as FlagKey20 } from "@funkit/utils";
|
|
19554
19655
|
import clsx17 from "clsx";
|
|
19555
19656
|
import { useAnimate as useAnimate2 } from "motion/react";
|
|
19556
19657
|
import React139 from "react";
|
|
@@ -20155,8 +20256,8 @@ var SourcePaymentMethodItem = ({
|
|
|
20155
20256
|
icon: /* @__PURE__ */ React139.createElement(MasterCardPillIcon, { key: "mastercard", backdropColor })
|
|
20156
20257
|
}
|
|
20157
20258
|
];
|
|
20158
|
-
const isCardEnabled = useFlag(
|
|
20159
|
-
const isBrokerageEnabled = useFlag(
|
|
20259
|
+
const isCardEnabled = useFlag(FlagKey20.EnableCard);
|
|
20260
|
+
const isBrokerageEnabled = useFlag(FlagKey20.EnableBrokerage);
|
|
20160
20261
|
const usableAlternativeIcons = icons.filter(({ paymentMethod }) => {
|
|
20161
20262
|
if (paymentMethod === type || paymentMethod === "card" /* CARD */ && !isCardEnabled || paymentMethod === "brokerage" /* BROKERAGE */ && !isBrokerageEnabled) {
|
|
20162
20263
|
return false;
|
|
@@ -20578,7 +20679,7 @@ import {
|
|
|
20578
20679
|
katanaChain
|
|
20579
20680
|
} from "@funkit/chains";
|
|
20580
20681
|
import { getTokenAddressBySymbolAndChainId as getTokenAddressBySymbolAndChainId2 } from "@funkit/core";
|
|
20581
|
-
import { useCallback as
|
|
20682
|
+
import { useCallback as useCallback29, useState as useState44 } from "react";
|
|
20582
20683
|
import { mainnet as mainnet7, mantle, zksync as zksync2 } from "viem/chains";
|
|
20583
20684
|
var pickSourceAssetForCard = async (checkoutItem, userIpInfo) => {
|
|
20584
20685
|
if (!checkoutItem?.initSettings.config.targetChain) {
|
|
@@ -20639,7 +20740,7 @@ function useUpdateCardSourceAsset() {
|
|
|
20639
20740
|
const { checkoutItem, updateSourceAsset } = useCheckoutContext();
|
|
20640
20741
|
const { userIpInfo } = useFunkitUserIp();
|
|
20641
20742
|
const [isUpdating, setIsUpdating] = useState44(false);
|
|
20642
|
-
const onSelectCard =
|
|
20743
|
+
const onSelectCard = useCallback29(async () => {
|
|
20643
20744
|
setIsUpdating(true);
|
|
20644
20745
|
try {
|
|
20645
20746
|
const source = await pickSourceAssetForCard(checkoutItem, userIpInfo);
|
|
@@ -20762,7 +20863,7 @@ function InputAmountLayout({
|
|
|
20762
20863
|
}
|
|
20763
20864
|
|
|
20764
20865
|
// src/modals/CheckoutModal/InputAmount/QuickOptions.tsx
|
|
20765
|
-
import { FlagKey as
|
|
20866
|
+
import { FlagKey as FlagKey21, clamp as clamp2, formatCurrencyAndStringify as formatCurrencyAndStringify8 } from "@funkit/utils";
|
|
20766
20867
|
import React144 from "react";
|
|
20767
20868
|
var USD_AMOUNT_OPTIONS_PCT = [25, 50, 75, 100];
|
|
20768
20869
|
function deduplicateArray(arr) {
|
|
@@ -20770,7 +20871,7 @@ function deduplicateArray(arr) {
|
|
|
20770
20871
|
}
|
|
20771
20872
|
function useFiatAmountOptions(currency) {
|
|
20772
20873
|
const isMeldEnabled = useIsMeldEnabled();
|
|
20773
|
-
const currencyQuickOptionStr = useFlag(
|
|
20874
|
+
const currencyQuickOptionStr = useFlag(FlagKey21.MeldQuickOptions);
|
|
20774
20875
|
const currencyQuickOption = safeJSONParse(
|
|
20775
20876
|
currencyQuickOptionStr
|
|
20776
20877
|
);
|
|
@@ -20836,19 +20937,19 @@ var QuickOptions = ({
|
|
|
20836
20937
|
|
|
20837
20938
|
// src/modals/CheckoutModal/InputAmount/useAmountInput.ts
|
|
20838
20939
|
import {
|
|
20839
|
-
useCallback as
|
|
20940
|
+
useCallback as useCallback31,
|
|
20840
20941
|
useEffect as useEffect37,
|
|
20841
|
-
useMemo as
|
|
20942
|
+
useMemo as useMemo25,
|
|
20842
20943
|
useReducer as useReducer3,
|
|
20843
20944
|
useRef as useRef20,
|
|
20844
20945
|
useState as useState45
|
|
20845
20946
|
} from "react";
|
|
20846
20947
|
|
|
20847
20948
|
// src/hooks/useTextMeasurer.ts
|
|
20848
|
-
import { useCallback as
|
|
20949
|
+
import { useCallback as useCallback30, useRef as useRef19 } from "react";
|
|
20849
20950
|
function useTextMeasurer(inputRef) {
|
|
20850
20951
|
const canvasRef = useRef19(document.createElement("canvas"));
|
|
20851
|
-
const measureText =
|
|
20952
|
+
const measureText = useCallback30(
|
|
20852
20953
|
(text, fontSize) => {
|
|
20853
20954
|
if (!inputRef.current) {
|
|
20854
20955
|
return void 0;
|
|
@@ -21099,7 +21200,7 @@ var MAX_WIDTH = 310;
|
|
|
21099
21200
|
function useAmountInput(options) {
|
|
21100
21201
|
const isMeldEnabled = useIsMeldEnabled();
|
|
21101
21202
|
const [state, dispatch] = useReducer3(reduceState, options, initializeState);
|
|
21102
|
-
const derivedState =
|
|
21203
|
+
const derivedState = useMemo25(() => getDerivedState(state), [state]);
|
|
21103
21204
|
const inputRef = useRef20(null);
|
|
21104
21205
|
const { inputValue, locale } = state;
|
|
21105
21206
|
const { inputDecimals, inputPrefix, placeholder } = derivedState;
|
|
@@ -21134,7 +21235,7 @@ function useAmountInput(options) {
|
|
|
21134
21235
|
quickOptions
|
|
21135
21236
|
} = options;
|
|
21136
21237
|
const unitPrice = isStablecoin(checkoutConfig.targetAssetTicker) ? 1 : realUnitPrice;
|
|
21137
|
-
const dispatchAndGetNewState =
|
|
21238
|
+
const dispatchAndGetNewState = useCallback31(
|
|
21138
21239
|
(action) => {
|
|
21139
21240
|
dispatch(action);
|
|
21140
21241
|
return getDerivedState(reduceState(state, action));
|
|
@@ -21322,7 +21423,7 @@ function useAmountInput(options) {
|
|
|
21322
21423
|
return () => element2.removeEventListener("beforeinput", onBeforeInput2);
|
|
21323
21424
|
}
|
|
21324
21425
|
}, [inputDecimals, locale]);
|
|
21325
|
-
const onChange =
|
|
21426
|
+
const onChange = useCallback31(
|
|
21326
21427
|
(event) => {
|
|
21327
21428
|
dispatch({
|
|
21328
21429
|
type: "setInputValue",
|
|
@@ -21357,7 +21458,7 @@ function useAmountInput(options) {
|
|
|
21357
21458
|
});
|
|
21358
21459
|
}
|
|
21359
21460
|
}, [defaultAmount]);
|
|
21360
|
-
const setFiatAmount =
|
|
21461
|
+
const setFiatAmount = useCallback31(
|
|
21361
21462
|
(fiatAmount) => {
|
|
21362
21463
|
const newState = dispatchAndGetNewState({
|
|
21363
21464
|
type: "setFiatAmount",
|
|
@@ -21369,7 +21470,7 @@ function useAmountInput(options) {
|
|
|
21369
21470
|
},
|
|
21370
21471
|
[dispatchAndGetNewState, unitPrice]
|
|
21371
21472
|
);
|
|
21372
|
-
const toggleInputInFiat =
|
|
21473
|
+
const toggleInputInFiat = useCallback31(() => {
|
|
21373
21474
|
dispatch({ type: "toggleInputInFiat" });
|
|
21374
21475
|
inputRef.current?.focus();
|
|
21375
21476
|
}, []);
|
|
@@ -21435,7 +21536,7 @@ function InputAmountLoaded({
|
|
|
21435
21536
|
defaultFiatCurrency,
|
|
21436
21537
|
textCustomizations
|
|
21437
21538
|
}) {
|
|
21438
|
-
const maxCheckoutUsdString = useFlag(
|
|
21539
|
+
const maxCheckoutUsdString = useFlag(FlagKey22.MaxCheckoutUsd);
|
|
21439
21540
|
const isSourceNavWidgetEnabled = modalState.startingStep === "select_asset" /* SELECT_ASSET */;
|
|
21440
21541
|
const { paymentMethod } = modalState.paymentMethodInfo;
|
|
21441
21542
|
const { quote: manuallySelectedQuote } = modalState;
|
|
@@ -21495,7 +21596,7 @@ function InputAmountLoaded({
|
|
|
21495
21596
|
selectedQuote,
|
|
21496
21597
|
isSelectedQuoteUnavailable
|
|
21497
21598
|
} = useMeld(manuallySelectedQuote, fiatAmount, fiatCurrency);
|
|
21498
|
-
const error =
|
|
21599
|
+
const error = useMemo26(() => {
|
|
21499
21600
|
if (isCardCheckout) {
|
|
21500
21601
|
if (isSelectedQuoteUnavailable) {
|
|
21501
21602
|
return {
|
|
@@ -21780,7 +21881,7 @@ function YouPayYouReceiveWrapper({
|
|
|
21780
21881
|
|
|
21781
21882
|
// src/modals/CheckoutModal/InputAmount/InputAmountLoading.tsx
|
|
21782
21883
|
import { formatCryptoAndStringify as formatCryptoAndStringify5 } from "@funkit/utils";
|
|
21783
|
-
import React146, { useMemo as
|
|
21884
|
+
import React146, { useMemo as useMemo27 } from "react";
|
|
21784
21885
|
function InputAmountLoading({
|
|
21785
21886
|
modalState,
|
|
21786
21887
|
sourceHoldingError,
|
|
@@ -21792,7 +21893,7 @@ function InputAmountLoading({
|
|
|
21792
21893
|
const isSourceNavWidgetEnabled = modalState.startingStep === "select_asset" /* SELECT_ASSET */;
|
|
21793
21894
|
const targetAssetAmount = checkoutItem?.initSettings.config.targetAssetAmount;
|
|
21794
21895
|
const targetAssetTicker = checkoutItem?.initSettings.config.targetAssetTicker;
|
|
21795
|
-
const error =
|
|
21896
|
+
const error = useMemo27(() => {
|
|
21796
21897
|
if (sourceHoldingError) {
|
|
21797
21898
|
return {
|
|
21798
21899
|
message: /* @__PURE__ */ React146.createElement("div", null, "Unable to retrieve your account balance. Please try re-linking your account.", " "),
|
|
@@ -21872,7 +21973,7 @@ function InputAmountLoading({
|
|
|
21872
21973
|
}
|
|
21873
21974
|
|
|
21874
21975
|
// src/modals/CheckoutModal/InputAmount/useAvailableBalanceForCheckout.ts
|
|
21875
|
-
import { useMemo as
|
|
21976
|
+
import { useMemo as useMemo28 } from "react";
|
|
21876
21977
|
function useAvailableBalanceForCheckout(paymentMethodInfo, targetChainId, assetChainId, assetSymbol) {
|
|
21877
21978
|
const { data: walletAssetHoldings, isLoading: isLoadingWalletAssetHoldings } = useWalletAssetHoldings(targetChainId);
|
|
21878
21979
|
const holdings = {
|
|
@@ -21882,7 +21983,7 @@ function useAvailableBalanceForCheckout(paymentMethodInfo, targetChainId, assetC
|
|
|
21882
21983
|
["token_transfer" /* TOKEN_TRANSFER */]: null,
|
|
21883
21984
|
["virtual_bank" /* VIRTUAL_BANK */]: null
|
|
21884
21985
|
}[paymentMethodInfo.paymentMethod];
|
|
21885
|
-
const holdingItem =
|
|
21986
|
+
const holdingItem = useMemo28(() => {
|
|
21886
21987
|
if (!assetSymbol || !holdings) {
|
|
21887
21988
|
return;
|
|
21888
21989
|
}
|
|
@@ -22005,14 +22106,14 @@ import { mainnet as mainnet8, polygon as polygon6 } from "viem/chains";
|
|
|
22005
22106
|
var ASSETS_LOW_VALUE_THRESHOLD2 = 0.1;
|
|
22006
22107
|
|
|
22007
22108
|
// src/hooks/usePaymentSources.ts
|
|
22008
|
-
import { FlagKey as
|
|
22109
|
+
import { FlagKey as FlagKey23, isNotNullish as isNotNullish7 } from "@funkit/utils";
|
|
22009
22110
|
function usePaymentMethodEnablement({
|
|
22010
22111
|
checkoutConfig
|
|
22011
22112
|
}) {
|
|
22012
22113
|
const { apiKey } = useFunkitConfig();
|
|
22013
|
-
const isTokenTransferFlagEnabled = useFlag(
|
|
22114
|
+
const isTokenTransferFlagEnabled = useFlag(FlagKey23.EnableTokenTransfer);
|
|
22014
22115
|
const isFiatFlagEnabled = useFiatEnabled();
|
|
22015
|
-
const isCardFlagEnabled = useFlag(
|
|
22116
|
+
const isCardFlagEnabled = useFlag(FlagKey23.EnableCard);
|
|
22016
22117
|
const isKatanaEarnFlowAction = isKatanaEarnFlow({ apiKey, checkoutConfig });
|
|
22017
22118
|
const isUsKatanaUser = useIsUsKatanaUser();
|
|
22018
22119
|
const isFiatEnabled = isFiatFlagEnabled && !isKatanaEarnFlowAction;
|
|
@@ -22390,7 +22491,7 @@ function LoadingAccount({
|
|
|
22390
22491
|
|
|
22391
22492
|
// src/modals/CheckoutModal/MeldCurrencySelect/MeldCurrencySelect.tsx
|
|
22392
22493
|
import clsx18 from "clsx";
|
|
22393
|
-
import React151, { useMemo as
|
|
22494
|
+
import React151, { useMemo as useMemo29, useState as useState46 } from "react";
|
|
22394
22495
|
|
|
22395
22496
|
// src/css/scrollStyles.css.ts
|
|
22396
22497
|
var hideScrollBar = "_163ehmk0";
|
|
@@ -22446,7 +22547,7 @@ function MeldCurrencySelect({
|
|
|
22446
22547
|
const [selectedCurrency, setSelectedCurrency] = useState46(
|
|
22447
22548
|
defaultCurrency
|
|
22448
22549
|
);
|
|
22449
|
-
const filteredOptions =
|
|
22550
|
+
const filteredOptions = useMemo29(() => {
|
|
22450
22551
|
const newOptions = data?.filter(
|
|
22451
22552
|
({ name, currencyCode }) => currencyCode.toLowerCase().includes(query.toLowerCase()) || name.toLowerCase().includes(query.toLowerCase())
|
|
22452
22553
|
) ?? [];
|
|
@@ -22582,7 +22683,7 @@ function MeldQuotes({
|
|
|
22582
22683
|
}
|
|
22583
22684
|
|
|
22584
22685
|
// src/modals/CheckoutModal/MoonpaySetup.tsx
|
|
22585
|
-
import React154, { useCallback as
|
|
22686
|
+
import React154, { useCallback as useCallback32, useMemo as useMemo31, useState as useState48 } from "react";
|
|
22586
22687
|
|
|
22587
22688
|
// src/components/FunPayments/FunPaymentMoonpayType.css.ts
|
|
22588
22689
|
var mpClass = "_1kmpeyf0";
|
|
@@ -22591,7 +22692,7 @@ var stretchStyle = "_1kmpeyf1";
|
|
|
22591
22692
|
// src/components/FunPayments/FunPaymentMoonpayType.tsx
|
|
22592
22693
|
import { getMoonpayUrlSignature } from "@funkit/api-base";
|
|
22593
22694
|
import { colorToHex } from "@funkit/utils";
|
|
22594
|
-
import React153, { Fragment, useEffect as useEffect40, useMemo as
|
|
22695
|
+
import React153, { Fragment, useEffect as useEffect40, useMemo as useMemo30, useState as useState47 } from "react";
|
|
22595
22696
|
var LazyMoonPayBuyWidget = (props) => {
|
|
22596
22697
|
const [MoonPayBuyWidget, setMoonPayBuyWidget] = useState47(null);
|
|
22597
22698
|
useEffect40(() => {
|
|
@@ -22622,7 +22723,7 @@ function FunPaymentMoonpayType({
|
|
|
22622
22723
|
const isSandboxMode = useIsFunkitSandboxMode();
|
|
22623
22724
|
const funkitConfig = useFunkitConfig();
|
|
22624
22725
|
const { userInfo } = useGeneralWallet();
|
|
22625
|
-
const currencyCode =
|
|
22726
|
+
const currencyCode = useMemo30(() => {
|
|
22626
22727
|
return generateMoonpayCurrencyCode(depositToken, depositTokenChainId);
|
|
22627
22728
|
}, [depositToken, depositTokenChainId]);
|
|
22628
22729
|
const depositTokenAmountStringFormatted = formatTokenAmountForMoonpay(
|
|
@@ -22645,7 +22746,7 @@ function FunPaymentMoonpayType({
|
|
|
22645
22746
|
});
|
|
22646
22747
|
return signature || "";
|
|
22647
22748
|
};
|
|
22648
|
-
const moonpayButtonColor =
|
|
22749
|
+
const moonpayButtonColor = useMemo30(() => {
|
|
22649
22750
|
const primaryButtonHex = colorToHex(activeTheme.colors.buttonPrimary);
|
|
22650
22751
|
if (["#FFF", "#FFFF", "#FFFFFF", "#FFFFFFFF"].includes(primaryButtonHex)) {
|
|
22651
22752
|
return void 0;
|
|
@@ -22703,12 +22804,12 @@ function MoonpaySetup({
|
|
|
22703
22804
|
const { paymentAddress, token, tokenChainId, depositAmount } = modalState;
|
|
22704
22805
|
const [isSupportedRegion, setIsSupportedRegion] = useState48(true);
|
|
22705
22806
|
const [isContinueEnabled, setIsContinueEnabled] = useState48(false);
|
|
22706
|
-
const handleOnCompleted =
|
|
22807
|
+
const handleOnCompleted = useCallback32(() => {
|
|
22707
22808
|
onNext({
|
|
22708
22809
|
depositAddress: paymentAddress
|
|
22709
22810
|
});
|
|
22710
22811
|
}, [onNext, paymentAddress]);
|
|
22711
|
-
const MoonpayWidget =
|
|
22812
|
+
const MoonpayWidget = useMemo31(() => {
|
|
22712
22813
|
return /* @__PURE__ */ React154.createElement(
|
|
22713
22814
|
FunPaymentMoonpayType,
|
|
22714
22815
|
{
|
|
@@ -22739,7 +22840,7 @@ function MoonpaySetup({
|
|
|
22739
22840
|
// src/modals/CheckoutModal/SelectAsset.tsx
|
|
22740
22841
|
import { FUNKIT_CONNECT_SUPPORTED_CHECKOUT_CHAINS_INFO_LIST as FUNKIT_CONNECT_SUPPORTED_CHECKOUT_CHAINS_INFO_LIST2 } from "@funkit/chains";
|
|
22741
22842
|
import { formatCurrencyAndStringify as formatCurrencyAndStringify11, isTokenEquivalent as isTokenEquivalent7 } from "@funkit/utils";
|
|
22742
|
-
import React157, { useEffect as useEffect41, useMemo as
|
|
22843
|
+
import React157, { useEffect as useEffect41, useMemo as useMemo33, useState as useState49 } from "react";
|
|
22743
22844
|
import { createPortal as createPortal14 } from "react-dom";
|
|
22744
22845
|
|
|
22745
22846
|
// src/components/Dropdown/ReceiveTokenDropdown.tsx
|
|
@@ -22835,13 +22936,13 @@ var ReceiveTokenDropdown = ({
|
|
|
22835
22936
|
|
|
22836
22937
|
// src/components/NewTokenDepositAlert/NewTokenDepositAlert.tsx
|
|
22837
22938
|
import React156 from "react";
|
|
22838
|
-
import { FlagKey as
|
|
22939
|
+
import { FlagKey as FlagKey24, safeParseJson as safeParseJson6 } from "@funkit/utils";
|
|
22839
22940
|
var NewTokenDepositAlert = ({
|
|
22840
22941
|
onClick
|
|
22841
22942
|
}) => {
|
|
22842
|
-
const alertJson = useFlag(
|
|
22943
|
+
const alertJson = useFlag(FlagKey24.NewTokenAssetSelectionBanner);
|
|
22843
22944
|
const alertData = safeParseJson6(alertJson);
|
|
22844
|
-
const isTokenTransferEnabled = useFlag(
|
|
22945
|
+
const isTokenTransferEnabled = useFlag(FlagKey24.EnableTokenTransfer);
|
|
22845
22946
|
if (!alertData || !isTokenTransferEnabled) {
|
|
22846
22947
|
return null;
|
|
22847
22948
|
}
|
|
@@ -22869,7 +22970,7 @@ var NewTokenDepositAlert = ({
|
|
|
22869
22970
|
// src/hooks/useAllowedAssets.ts
|
|
22870
22971
|
import { getAllowedAssets } from "@funkit/api-base";
|
|
22871
22972
|
import { useQuery as useQuery17 } from "@tanstack/react-query";
|
|
22872
|
-
import { useCallback as
|
|
22973
|
+
import { useCallback as useCallback33, useMemo as useMemo32 } from "react";
|
|
22873
22974
|
function useAllowedAssets() {
|
|
22874
22975
|
const { apiKey } = useFunkitConfig();
|
|
22875
22976
|
const { checkoutItem } = useCheckoutContext();
|
|
@@ -22883,7 +22984,7 @@ function useAllowedAssets() {
|
|
|
22883
22984
|
staleTime: 5 * 60 * 1e3,
|
|
22884
22985
|
gcTime: Number.POSITIVE_INFINITY
|
|
22885
22986
|
});
|
|
22886
|
-
const tokens =
|
|
22987
|
+
const tokens = useMemo32(() => {
|
|
22887
22988
|
if (!allowedAssets) {
|
|
22888
22989
|
return {};
|
|
22889
22990
|
}
|
|
@@ -22894,7 +22995,7 @@ function useAllowedAssets() {
|
|
|
22894
22995
|
}
|
|
22895
22996
|
return ret;
|
|
22896
22997
|
}, [allowedAssets]);
|
|
22897
|
-
const isAllowed =
|
|
22998
|
+
const isAllowed = useCallback33(
|
|
22898
22999
|
(chainId, tokenAddress) => {
|
|
22899
23000
|
const disabledByCustomerList = checkoutItem?.initSettings.config.disabledSourceTokens?.some(
|
|
22900
23001
|
(token) => {
|
|
@@ -22960,7 +23061,7 @@ function useEnrichedAccountHoldings({
|
|
|
22960
23061
|
}) {
|
|
22961
23062
|
const { isAllowed, isLoading } = useAllowedAssets();
|
|
22962
23063
|
const { loginType, walletAddress } = useGeneralWallet();
|
|
22963
|
-
const enrichedAccountHoldings =
|
|
23064
|
+
const enrichedAccountHoldings = useMemo33(() => {
|
|
22964
23065
|
if (!checkoutConfig) {
|
|
22965
23066
|
return [];
|
|
22966
23067
|
}
|
|
@@ -23000,7 +23101,7 @@ function useAssetOptions({
|
|
|
23000
23101
|
chainId,
|
|
23001
23102
|
dynamicTargetAssetCandidates
|
|
23002
23103
|
}) {
|
|
23003
|
-
const assetOptions =
|
|
23104
|
+
const assetOptions = useMemo33(() => {
|
|
23004
23105
|
return enrichedAccountHoldings.filter(
|
|
23005
23106
|
({ asset }) => chainId !== void 0 ? asset.pickedChainId === chainId.toString() : true
|
|
23006
23107
|
).map(({ asset, usableForCheckout }) => {
|
|
@@ -23072,7 +23173,7 @@ function useScrollToSelectedAsset(selectedChainTokenSymbol) {
|
|
|
23072
23173
|
}
|
|
23073
23174
|
function useComputeDefault(checkoutConfig, accountHoldings) {
|
|
23074
23175
|
const candidates = checkoutConfig?.dynamicTargetAssetCandidates;
|
|
23075
|
-
const defaultTargetAsset =
|
|
23176
|
+
const defaultTargetAsset = useMemo33(() => {
|
|
23076
23177
|
if (!candidates || candidates.length <= 1) {
|
|
23077
23178
|
return {
|
|
23078
23179
|
tokenAddress: checkoutConfig?.targetAsset || "0x",
|
|
@@ -23086,7 +23187,7 @@ function useComputeDefault(checkoutConfig, accountHoldings) {
|
|
|
23086
23187
|
(token) => token.tokenSymbol === checkoutConfig?.targetAssetTicker
|
|
23087
23188
|
) ?? candidates.find((token) => token.isDefault) ?? candidates[0];
|
|
23088
23189
|
}, [candidates, checkoutConfig]);
|
|
23089
|
-
const defaultTokenSymbols =
|
|
23190
|
+
const defaultTokenSymbols = useMemo33(() => {
|
|
23090
23191
|
if (!checkoutConfig) {
|
|
23091
23192
|
return [];
|
|
23092
23193
|
}
|
|
@@ -23179,7 +23280,7 @@ function AccountSelectAsset({
|
|
|
23179
23280
|
handleTargetAssetUpdate(tokenItem);
|
|
23180
23281
|
onFinish();
|
|
23181
23282
|
});
|
|
23182
|
-
const selectedChainTokenSymbol =
|
|
23283
|
+
const selectedChainTokenSymbol = useMemo33(() => {
|
|
23183
23284
|
if (explicitlySelectedChainTokenSymbol) {
|
|
23184
23285
|
const assetExists = assetOptions.find(
|
|
23185
23286
|
({ asset }) => asset.chainSymbolKey === explicitlySelectedChainTokenSymbol
|
|
@@ -23429,7 +23530,7 @@ function SelectAsset({
|
|
|
23429
23530
|
|
|
23430
23531
|
// src/modals/CheckoutModal/SourceChange/SourceChange.tsx
|
|
23431
23532
|
import { BridgeCustomerStatus as BridgeCustomerStatus6, MeldServiceProvider as MeldServiceProvider4 } from "@funkit/api-base";
|
|
23432
|
-
import React159, { useCallback as
|
|
23533
|
+
import React159, { useCallback as useCallback34, useEffect as useEffect42, useState as useState50 } from "react";
|
|
23433
23534
|
import { createPortal as createPortal15 } from "react-dom";
|
|
23434
23535
|
|
|
23435
23536
|
// src/modals/CheckoutModal/SourceChange/DefiPurchaseSection.tsx
|
|
@@ -23563,7 +23664,7 @@ function PayPal() {
|
|
|
23563
23664
|
const isMeldEnabled = useIsMeldEnabled();
|
|
23564
23665
|
const { checkoutItem } = useCheckoutContext();
|
|
23565
23666
|
const isPaypalReady = false;
|
|
23566
|
-
const onClick =
|
|
23667
|
+
const onClick = useCallback34(() => {
|
|
23567
23668
|
if (isMeldEnabled && isPaypalReady) {
|
|
23568
23669
|
openMeldPopup(() => mutateAsync(MeldServiceProvider4.PAYPAL));
|
|
23569
23670
|
} else {
|
|
@@ -23777,13 +23878,13 @@ import { createPortal as createPortal16 } from "react-dom";
|
|
|
23777
23878
|
|
|
23778
23879
|
// src/components/CopyAddress/CopyInputDisplayedAddress.tsx
|
|
23779
23880
|
import { truncateMiddleOfAddress } from "@funkit/utils";
|
|
23780
|
-
import React160, { useCallback as
|
|
23881
|
+
import React160, { useCallback as useCallback36, useState as useState52 } from "react";
|
|
23781
23882
|
|
|
23782
23883
|
// src/hooks/useCopyToClipboard.ts
|
|
23783
|
-
import { useCallback as
|
|
23884
|
+
import { useCallback as useCallback35, useEffect as useEffect43, useState as useState51 } from "react";
|
|
23784
23885
|
var useCopyToClipboard = (text, delay = 1500) => {
|
|
23785
23886
|
const [isCopied, setCopied] = useState51(false);
|
|
23786
|
-
const handleCopy =
|
|
23887
|
+
const handleCopy = useCallback35(() => {
|
|
23787
23888
|
if (!text) {
|
|
23788
23889
|
return;
|
|
23789
23890
|
}
|
|
@@ -23823,7 +23924,7 @@ function CopyInputDisplayedAddress({
|
|
|
23823
23924
|
const { handleCopy } = useCopyToClipboard(address);
|
|
23824
23925
|
const [isActive, setIsActive] = useState52(null);
|
|
23825
23926
|
const displayAddress = truncateAddress ? truncateMiddleOfAddress(address, 40, 24, 8) : address;
|
|
23826
|
-
const handleClick =
|
|
23927
|
+
const handleClick = useCallback36(() => {
|
|
23827
23928
|
if (isActive) {
|
|
23828
23929
|
return;
|
|
23829
23930
|
}
|
|
@@ -23863,12 +23964,12 @@ function CopyInputDisplayedAddress({
|
|
|
23863
23964
|
}
|
|
23864
23965
|
|
|
23865
23966
|
// src/components/FunInfoBanner/ChainInfoBanners.tsx
|
|
23866
|
-
import { FlagKey as
|
|
23967
|
+
import { FlagKey as FlagKey25, safeParseJson as safeParseJson7 } from "@funkit/utils";
|
|
23867
23968
|
import React161 from "react";
|
|
23868
23969
|
var ChainInfoBanners = ({
|
|
23869
23970
|
chainId
|
|
23870
23971
|
}) => {
|
|
23871
|
-
const chainInfoBanners = useFlag(
|
|
23972
|
+
const chainInfoBanners = useFlag(FlagKey25.ChainInfoBanners);
|
|
23872
23973
|
const chainInfoBannersData = safeParseJson7(chainInfoBanners) ?? {};
|
|
23873
23974
|
try {
|
|
23874
23975
|
const chainBanners = chainInfoBannersData[chainId] ?? [];
|
|
@@ -23912,7 +24013,7 @@ var LightningBoltIcon = ({ size = 16 }) => /* @__PURE__ */ React162.createElemen
|
|
|
23912
24013
|
|
|
23913
24014
|
// src/components/QRCode/QRCode.tsx
|
|
23914
24015
|
import QRCodeUtil from "qrcode";
|
|
23915
|
-
import React163, { useMemo as
|
|
24016
|
+
import React163, { useMemo as useMemo34 } from "react";
|
|
23916
24017
|
var generateMatrix = (value, errorCorrectionLevel) => {
|
|
23917
24018
|
const { data } = QRCodeUtil.create(value, { errorCorrectionLevel }).modules;
|
|
23918
24019
|
const sqrt = Math.sqrt(data.length);
|
|
@@ -23940,7 +24041,7 @@ function QRCode({
|
|
|
23940
24041
|
}) {
|
|
23941
24042
|
const { activeTheme } = useActiveTheme();
|
|
23942
24043
|
const size = sizeProp - Number.parseInt(outsidePadding, 10) * 2;
|
|
23943
|
-
const dots =
|
|
24044
|
+
const dots = useMemo34(() => {
|
|
23944
24045
|
const dots2 = [];
|
|
23945
24046
|
const matrix = generateMatrix(uri, ecl);
|
|
23946
24047
|
const cellSize = size / matrix.length;
|
|
@@ -24484,8 +24585,8 @@ var TransferTokenDetails = ({
|
|
|
24484
24585
|
|
|
24485
24586
|
// src/hooks/useTokenTransfer.ts
|
|
24486
24587
|
import { bitcoinChain as bitcoinChain3, solanaChain as solanaChain4 } from "@funkit/chains";
|
|
24487
|
-
import { FlagKey as
|
|
24488
|
-
import { useMemo as
|
|
24588
|
+
import { FlagKey as FlagKey26 } from "@funkit/utils";
|
|
24589
|
+
import { useMemo as useMemo35 } from "react";
|
|
24489
24590
|
import { arbitrum as arbitrum4, base as base7, mainnet as mainnet9, optimism, polygon as polygon7 } from "viem/chains";
|
|
24490
24591
|
|
|
24491
24592
|
// src/utils/transfer.ts
|
|
@@ -24508,7 +24609,7 @@ var useTokenTransfer = (selectedChainId, selectedToken, chainIds) => {
|
|
|
24508
24609
|
const { apiKey } = useFunkitConfig();
|
|
24509
24610
|
const { checkoutItem } = useCheckoutContext();
|
|
24510
24611
|
const enableUniversal = useFlag(
|
|
24511
|
-
|
|
24612
|
+
FlagKey26.EnableTokenTransferUniversalDepositAddress,
|
|
24512
24613
|
false
|
|
24513
24614
|
);
|
|
24514
24615
|
const estPriceImpact = usePriceImpactEstimation(
|
|
@@ -24560,7 +24661,7 @@ var useTokenTransfer = (selectedChainId, selectedToken, chainIds) => {
|
|
|
24560
24661
|
};
|
|
24561
24662
|
var useMinTransferLimits = () => {
|
|
24562
24663
|
const { userIpInfo } = useFunkitUserIp();
|
|
24563
|
-
const minTransferValueJsonString = useFlag(
|
|
24664
|
+
const minTransferValueJsonString = useFlag(FlagKey26.MinTokenTransferValue);
|
|
24564
24665
|
const minTransferValue = safeJSONParse(
|
|
24565
24666
|
minTransferValueJsonString
|
|
24566
24667
|
);
|
|
@@ -24582,7 +24683,7 @@ var useMinTransferValue = (selectedChainId) => {
|
|
|
24582
24683
|
};
|
|
24583
24684
|
var useMinTransferValues = (chainIds) => {
|
|
24584
24685
|
const limits = useMinTransferLimits();
|
|
24585
|
-
return
|
|
24686
|
+
return useMemo35(() => {
|
|
24586
24687
|
return chainIds.reduce(
|
|
24587
24688
|
(acc, id) => {
|
|
24588
24689
|
const limit = getMinTransferValueForChain(id, limits);
|
|
@@ -24725,7 +24826,7 @@ function TransferToken({
|
|
|
24725
24826
|
color: "secondaryText",
|
|
24726
24827
|
style: { whiteSpace: "nowrap", marginRight: -8 }
|
|
24727
24828
|
},
|
|
24728
|
-
|
|
24829
|
+
`Min $${minTransferUsdPerChain[value]}`
|
|
24729
24830
|
);
|
|
24730
24831
|
};
|
|
24731
24832
|
return (
|
|
@@ -24817,6 +24918,7 @@ function TransferToken({
|
|
|
24817
24918
|
fontSize: "12",
|
|
24818
24919
|
height: "14"
|
|
24819
24920
|
},
|
|
24921
|
+
/* @__PURE__ */ React172.createElement(Text, { size: "12", color: "secondaryText" }, "Min"),
|
|
24820
24922
|
/* @__PURE__ */ React172.createElement(
|
|
24821
24923
|
AnimatedDollarValue,
|
|
24822
24924
|
{
|
|
@@ -24824,7 +24926,6 @@ function TransferToken({
|
|
|
24824
24926
|
dynamicMinFractionDigits: true
|
|
24825
24927
|
}
|
|
24826
24928
|
),
|
|
24827
|
-
/* @__PURE__ */ React172.createElement(Text, { size: "12", color: "secondaryText" }, "min"),
|
|
24828
24929
|
/* @__PURE__ */ React172.createElement(
|
|
24829
24930
|
FunTooltip,
|
|
24830
24931
|
{
|
|
@@ -25304,9 +25405,9 @@ var FiatAccountDetail = {
|
|
|
25304
25405
|
|
|
25305
25406
|
// src/modals/CheckoutModal/VirtualFiatAccount/KycIframe.tsx
|
|
25306
25407
|
import { BridgeCustomerStatus as BridgeCustomerStatus7 } from "@funkit/api-base";
|
|
25307
|
-
import React179, { useCallback as
|
|
25408
|
+
import React179, { useCallback as useCallback37, useEffect as useEffect44, useMemo as useMemo36, useState as useState56 } from "react";
|
|
25308
25409
|
function useIframeListener(listeners) {
|
|
25309
|
-
const handleMessage =
|
|
25410
|
+
const handleMessage = useCallback37(
|
|
25310
25411
|
(event) => {
|
|
25311
25412
|
switch (event.data.name) {
|
|
25312
25413
|
case "load": {
|
|
@@ -25357,7 +25458,7 @@ function KycIframe({
|
|
|
25357
25458
|
const { clearVirtualFiatAccounts } = useClearFrogAccountsCache();
|
|
25358
25459
|
const { data: kycLink, isLoading: isLinkLoading } = useLoadKycLink(modalState);
|
|
25359
25460
|
const [iframeLoading, setIframeLoading] = useState56(true);
|
|
25360
|
-
const listeners =
|
|
25461
|
+
const listeners = useMemo36(
|
|
25361
25462
|
() => ({
|
|
25362
25463
|
load: () => {
|
|
25363
25464
|
logger.info("KYC iframe loaded");
|
|
@@ -25496,7 +25597,7 @@ function initialState(checkoutItem) {
|
|
|
25496
25597
|
function useCheckoutModalTransition(checkoutItem, onClose) {
|
|
25497
25598
|
const [modalState, setModalState] = useState57(() => initialState(checkoutItem));
|
|
25498
25599
|
const { clearCheckoutQuoteMessages } = useCheckoutQuoteNotification();
|
|
25499
|
-
const onCloseWrapper =
|
|
25600
|
+
const onCloseWrapper = useCallback38(
|
|
25500
25601
|
(options) => {
|
|
25501
25602
|
const normalizedIsNewDeposit = !!options?.isNewDeposit;
|
|
25502
25603
|
checkoutItem.initSettings.onClose?.({
|
|
@@ -25516,7 +25617,7 @@ function useCheckoutModalTransition(checkoutItem, onClose) {
|
|
|
25516
25617
|
const [stateHistory, setHistory] = useState57([]);
|
|
25517
25618
|
const prevStep = useRef22(null);
|
|
25518
25619
|
const hasHistoryEntry = stateHistory.length > 1;
|
|
25519
|
-
const onNext =
|
|
25620
|
+
const onNext = useCallback38(
|
|
25520
25621
|
(payload) => {
|
|
25521
25622
|
if (prevStep.current === modalState.step) {
|
|
25522
25623
|
return;
|
|
@@ -25549,7 +25650,7 @@ function useCheckoutModalTransition(checkoutItem, onClose) {
|
|
|
25549
25650
|
},
|
|
25550
25651
|
[clearCheckoutQuoteMessages, modalState, animate, hasHistoryEntry]
|
|
25551
25652
|
);
|
|
25552
|
-
const onStepChange =
|
|
25653
|
+
const onStepChange = useCallback38(
|
|
25553
25654
|
(nextState) => {
|
|
25554
25655
|
if (prevStep.current === modalState.step) {
|
|
25555
25656
|
return;
|
|
@@ -25562,7 +25663,7 @@ function useCheckoutModalTransition(checkoutItem, onClose) {
|
|
|
25562
25663
|
},
|
|
25563
25664
|
[modalState, animate]
|
|
25564
25665
|
);
|
|
25565
|
-
const onBack =
|
|
25666
|
+
const onBack = useCallback38(() => {
|
|
25566
25667
|
clearCheckoutQuoteMessages();
|
|
25567
25668
|
const backStepOverride = checkoutBackMap[modalState.step];
|
|
25568
25669
|
const prevState = [...stateHistory].reverse().find((s) => s.step === backStepOverride) ?? stateHistory[stateHistory.length - 1];
|
|
@@ -25757,7 +25858,7 @@ var FunConnectResultStep = ({
|
|
|
25757
25858
|
|
|
25758
25859
|
// src/components/FunConnectOptions/FunFarcasterConnectingStep.tsx
|
|
25759
25860
|
import { isMobile as isMobile7, isSafari as isSafari2, redirectInMobile } from "@funkit/utils";
|
|
25760
|
-
import React184, { useCallback as
|
|
25861
|
+
import React184, { useCallback as useCallback39, useEffect as useEffect47 } from "react";
|
|
25761
25862
|
|
|
25762
25863
|
// src/components/CopyAddress/OldCopyAddressButton.tsx
|
|
25763
25864
|
import React183 from "react";
|
|
@@ -25810,7 +25911,7 @@ function FunFarcasterConnectingStep({
|
|
|
25810
25911
|
}
|
|
25811
25912
|
}, [farcasterUri, mobile, safari]);
|
|
25812
25913
|
useSIWFarcasterListener(farcasterToken);
|
|
25813
|
-
const svgUrl =
|
|
25914
|
+
const svgUrl = useCallback39(async () => {
|
|
25814
25915
|
return (await import("./farcaster-MF6WINBA.js")).default;
|
|
25815
25916
|
}, []);
|
|
25816
25917
|
const promptText = mobile ? "To sign in with Farcaster, please open the Warpcast app." : "Scan this QR code or open the link with your mobile phone.";
|
|
@@ -25858,11 +25959,11 @@ function FunFarcasterConnectingStep({
|
|
|
25858
25959
|
|
|
25859
25960
|
// src/components/FunConnectOptions/FunWeb2ConnectingStep.tsx
|
|
25860
25961
|
import { isNotNullish as isNotNullish9 } from "@funkit/utils";
|
|
25861
|
-
import React187, { useCallback as
|
|
25962
|
+
import React187, { useCallback as useCallback41, useEffect as useEffect49, useState as useState60 } from "react";
|
|
25862
25963
|
|
|
25863
25964
|
// src/components/FunInput/FunTwoFaInput.tsx
|
|
25864
25965
|
import React185, {
|
|
25865
|
-
useCallback as
|
|
25966
|
+
useCallback as useCallback40,
|
|
25866
25967
|
useEffect as useEffect48,
|
|
25867
25968
|
useRef as useRef24,
|
|
25868
25969
|
useState as useState59
|
|
@@ -25889,12 +25990,12 @@ var FunTwoFaInput = ({
|
|
|
25889
25990
|
setFocusIndex(0);
|
|
25890
25991
|
}
|
|
25891
25992
|
}, [value]);
|
|
25892
|
-
const ensureFocus =
|
|
25993
|
+
const ensureFocus = useCallback40((nextIndex) => {
|
|
25893
25994
|
setTimeout(() => {
|
|
25894
25995
|
inputRefs.current[nextIndex]?.focus();
|
|
25895
25996
|
}, 10);
|
|
25896
25997
|
}, []);
|
|
25897
|
-
const handleBackspace =
|
|
25998
|
+
const handleBackspace = useCallback40(
|
|
25898
25999
|
(index) => {
|
|
25899
26000
|
if (index === maxInputLength - 1 && value.length === maxInputLength) {
|
|
25900
26001
|
onChange(value.slice(0, index));
|
|
@@ -25918,7 +26019,7 @@ var FunTwoFaInput = ({
|
|
|
25918
26019
|
},
|
|
25919
26020
|
[currentLength, initialInputLength, maxInputLength, onChange, value]
|
|
25920
26021
|
);
|
|
25921
|
-
const handleChange =
|
|
26022
|
+
const handleChange = useCallback40(
|
|
25922
26023
|
(changeEvent) => {
|
|
25923
26024
|
changeEvent.stopPropagation();
|
|
25924
26025
|
const nativeEvent = changeEvent.nativeEvent;
|
|
@@ -26087,7 +26188,7 @@ var FunWeb2ConnectingStep = ({
|
|
|
26087
26188
|
useEffect49(() => {
|
|
26088
26189
|
clearLoginError();
|
|
26089
26190
|
}, []);
|
|
26090
|
-
const handleOtpComplete =
|
|
26191
|
+
const handleOtpComplete = useCallback41(
|
|
26091
26192
|
async (finalOtpInput) => {
|
|
26092
26193
|
if (isNotNullish9(initialChainId)) {
|
|
26093
26194
|
await handleFunkitWeb2Login({
|
|
@@ -26234,7 +26335,7 @@ function FunConnectOptions({
|
|
|
26234
26335
|
const { loginConfig } = useFunkitConfig();
|
|
26235
26336
|
const prioritizedLoginType = loginConfig.prioritizedLogin;
|
|
26236
26337
|
const hasSecondarySignIn = prioritizedLoginType !== "none" && loginConfig.web2 && loginConfig.web3;
|
|
26237
|
-
const changeStep =
|
|
26338
|
+
const changeStep = useCallback42((newStep) => {
|
|
26238
26339
|
setStep(newStep);
|
|
26239
26340
|
if (isSignIn(newStep)) {
|
|
26240
26341
|
setSelectedWallet(void 0);
|
|
@@ -26242,7 +26343,7 @@ function FunConnectOptions({
|
|
|
26242
26343
|
}
|
|
26243
26344
|
}, []);
|
|
26244
26345
|
const { animation, navigateTo } = useAnimatedNavigation(changeStep);
|
|
26245
|
-
const handleBackToSignIn =
|
|
26346
|
+
const handleBackToSignIn = useCallback42(
|
|
26246
26347
|
(type) => {
|
|
26247
26348
|
const isPrimary = !hasSecondarySignIn || type === prioritizedLoginType;
|
|
26248
26349
|
navigateTo(
|
|
@@ -26253,7 +26354,7 @@ function FunConnectOptions({
|
|
|
26253
26354
|
[navigateTo, hasSecondarySignIn, prioritizedLoginType]
|
|
26254
26355
|
);
|
|
26255
26356
|
const walletConnectors = usePreparedWalletConnectors();
|
|
26256
|
-
const onRegenerateQrCode =
|
|
26357
|
+
const onRegenerateQrCode = useCallback42(
|
|
26257
26358
|
async (wallet) => {
|
|
26258
26359
|
const sWallet = walletConnectors.find((w) => wallet.id === w.id);
|
|
26259
26360
|
const uri = await sWallet?.getQrCodeUri?.();
|
|
@@ -26261,7 +26362,7 @@ function FunConnectOptions({
|
|
|
26261
26362
|
},
|
|
26262
26363
|
[walletConnectors]
|
|
26263
26364
|
);
|
|
26264
|
-
const connectToWallet =
|
|
26365
|
+
const connectToWallet = useCallback42(
|
|
26265
26366
|
async (wallet) => {
|
|
26266
26367
|
if (!wallet.ready) {
|
|
26267
26368
|
return;
|
|
@@ -26280,7 +26381,7 @@ function FunConnectOptions({
|
|
|
26280
26381
|
},
|
|
26281
26382
|
[changeStep, onRegenerateQrCode]
|
|
26282
26383
|
);
|
|
26283
|
-
const handleRetry =
|
|
26384
|
+
const handleRetry = useCallback42(() => {
|
|
26284
26385
|
if (!selectedWallet || selectedWallet.id === FUNKIT_CONNECT_WALLET_ID) {
|
|
26285
26386
|
handleBackToSignIn("web2");
|
|
26286
26387
|
} else {
|
|
@@ -26328,7 +26429,7 @@ function FunConnectOptions({
|
|
|
26328
26429
|
}
|
|
26329
26430
|
}
|
|
26330
26431
|
};
|
|
26331
|
-
const stepComponent =
|
|
26432
|
+
const stepComponent = useMemo37(() => {
|
|
26332
26433
|
switch (step) {
|
|
26333
26434
|
case 0 /* SIGNIN_PRIMARY */:
|
|
26334
26435
|
case 1 /* SIGNIN_SECONDARY */:
|
|
@@ -26437,7 +26538,7 @@ var FULL_SOCIAL_LOGIN_OPTIONS = [
|
|
|
26437
26538
|
function useEnabledSocialLogins() {
|
|
26438
26539
|
const funkitConfig = useFunkitConfig();
|
|
26439
26540
|
const { web2SocialLogins } = funkitConfig.loginConfig;
|
|
26440
|
-
const enabledSocialItems =
|
|
26541
|
+
const enabledSocialItems = useMemo38(() => {
|
|
26441
26542
|
return FULL_SOCIAL_LOGIN_OPTIONS.filter(
|
|
26442
26543
|
(oAuthItem) => !!web2SocialLogins[oAuthItem.funkitKey]
|
|
26443
26544
|
);
|
|
@@ -26466,7 +26567,7 @@ function FunSignInStep({
|
|
|
26466
26567
|
handleOauthRedirect,
|
|
26467
26568
|
handleGenerateFcUri
|
|
26468
26569
|
} = useFunkitWeb2Login();
|
|
26469
|
-
const isEmailInputValid =
|
|
26570
|
+
const isEmailInputValid = useMemo38(() => {
|
|
26470
26571
|
return validateEmailString(emailInput);
|
|
26471
26572
|
}, [emailInput]);
|
|
26472
26573
|
const [emailError, setEmailError] = useState62();
|
|
@@ -26539,7 +26640,7 @@ function FunSignInStep({
|
|
|
26539
26640
|
changeStep(3 /* PENDING_WALLET */);
|
|
26540
26641
|
}
|
|
26541
26642
|
};
|
|
26542
|
-
const handleEmailSubmit =
|
|
26643
|
+
const handleEmailSubmit = useCallback43(async () => {
|
|
26543
26644
|
if (!isEmailInputValid) {
|
|
26544
26645
|
return;
|
|
26545
26646
|
}
|
|
@@ -26878,7 +26979,7 @@ function PaymentMethodSummary({
|
|
|
26878
26979
|
|
|
26879
26980
|
// src/modals/CheckoutModal/TransferToken/CheckoutNotifications.tsx
|
|
26880
26981
|
import clsx21 from "clsx";
|
|
26881
|
-
import React201, { useEffect as useEffect51, useMemo as
|
|
26982
|
+
import React201, { useEffect as useEffect51, useMemo as useMemo39, useState as useState64 } from "react";
|
|
26882
26983
|
|
|
26883
26984
|
// src/components/FunNotificationBanner/FunNotificationShowMoreButton.tsx
|
|
26884
26985
|
import React196 from "react";
|
|
@@ -26926,13 +27027,13 @@ var FunNotificationShowMoreButton = ({
|
|
|
26926
27027
|
import {
|
|
26927
27028
|
getCheckoutsByUserId as getCheckoutsByUserId2
|
|
26928
27029
|
} from "@funkit/api-base";
|
|
26929
|
-
import { FlagKey as
|
|
27030
|
+
import { FlagKey as FlagKey27 } from "@funkit/utils";
|
|
26930
27031
|
import { useQuery as useQuery18 } from "@tanstack/react-query";
|
|
26931
27032
|
var hasCorrectPaymentMethod = (checkout, paymentMethod) => !paymentMethod || checkout.clientMetadata.selectedPaymentMethodInfo?.paymentMethod === paymentMethod;
|
|
26932
27033
|
var isRecent = (checkout, timestampCutoff) => checkout.createdTimeMs > timestampCutoff;
|
|
26933
27034
|
var DEFAULT_NOTIF_CUTOFF = 7 * 24 * 60 * 60 * 1e3;
|
|
26934
27035
|
function useCheckoutRefreshInterval() {
|
|
26935
|
-
const str = useFlag(
|
|
27036
|
+
const str = useFlag(FlagKey27.CheckoutNotificationsRefreshInterval);
|
|
26936
27037
|
return safeJSONParse(str) || { listRefresh: 50 * 1e3, itemRefresh: 5 * 1e3 };
|
|
26937
27038
|
}
|
|
26938
27039
|
var useRecentCheckouts = ({
|
|
@@ -27012,7 +27113,7 @@ var showMoreButtonStyle = "_4yitd93 _1rsrm2f11m _1rsrm2f1f _1rsrm2f1c _1rsrm2fls
|
|
|
27012
27113
|
// src/components/FunNotificationBanner/FunNotificationBannerIcon.tsx
|
|
27013
27114
|
import clsx19 from "clsx";
|
|
27014
27115
|
import { motion as motion12, useAnimate as useAnimate3 } from "motion/react";
|
|
27015
|
-
import React197, { useCallback as
|
|
27116
|
+
import React197, { useCallback as useCallback44, useEffect as useEffect50, useRef as useRef25 } from "react";
|
|
27016
27117
|
|
|
27017
27118
|
// src/components/FunNotificationBanner/FunNotificationBannerIcon.css.ts
|
|
27018
27119
|
var STATUS_SPINNER_BOTTOM_POSITION = -5;
|
|
@@ -27261,7 +27362,7 @@ var FunNotificationBannerIcon = ({
|
|
|
27261
27362
|
fallbackIconUrl = FALLBACK_ASSET
|
|
27262
27363
|
}) => {
|
|
27263
27364
|
const [animationScope, animate] = useAnimate3();
|
|
27264
|
-
const triggerAnimationProcessingToCompleted =
|
|
27365
|
+
const triggerAnimationProcessingToCompleted = useCallback44(async () => {
|
|
27265
27366
|
const completedIconPath = document.querySelector(
|
|
27266
27367
|
`.${generateAnimationPrefixClassName("icon-wrapper-completed")} path`
|
|
27267
27368
|
);
|
|
@@ -27368,7 +27469,7 @@ var FunNotificationBannerIcon = ({
|
|
|
27368
27469
|
)
|
|
27369
27470
|
]);
|
|
27370
27471
|
}, [animate]);
|
|
27371
|
-
const triggerAnimationDelayedToFailed =
|
|
27472
|
+
const triggerAnimationDelayedToFailed = useCallback44(async () => {
|
|
27372
27473
|
await Promise.all([
|
|
27373
27474
|
animate(
|
|
27374
27475
|
`.${generateAnimationPrefixClassName("icon-wrapper")}`,
|
|
@@ -27959,19 +28060,19 @@ var CheckoutNotifications = ({
|
|
|
27959
28060
|
}
|
|
27960
28061
|
setInitialDirectExecutions(directExecutions);
|
|
27961
28062
|
}, [initialDirectExecutions, directExecutions]);
|
|
27962
|
-
const displayedDirectExecutions =
|
|
28063
|
+
const displayedDirectExecutions = useMemo39(() => {
|
|
27963
28064
|
if (!directExecutions) {
|
|
27964
28065
|
return [];
|
|
27965
28066
|
}
|
|
27966
28067
|
return getUpdatedDirectExecutions(directExecutions, initialDirectExecutions).filter(({ txHash }) => !closedNotifications.includes(txHash)).slice(0, MAX_COUNT);
|
|
27967
28068
|
}, [initialDirectExecutions, directExecutions, closedNotifications]);
|
|
27968
|
-
const displayedCheckouts =
|
|
28069
|
+
const displayedCheckouts = useMemo39(() => {
|
|
27969
28070
|
if (!checkouts) {
|
|
27970
28071
|
return [];
|
|
27971
28072
|
}
|
|
27972
28073
|
return getUpdatedCheckouts(checkouts, initialCheckouts).filter(({ depositAddr }) => !closedNotifications.includes(depositAddr)).slice(0, MAX_COUNT);
|
|
27973
28074
|
}, [initialCheckouts, checkouts, closedNotifications]);
|
|
27974
|
-
const combinedNotifications =
|
|
28075
|
+
const combinedNotifications = useMemo39(() => {
|
|
27975
28076
|
return [
|
|
27976
28077
|
...displayedDirectExecutions.map(
|
|
27977
28078
|
(item) => ({ ...item, isDirectExecution: true })
|
|
@@ -27981,7 +28082,7 @@ var CheckoutNotifications = ({
|
|
|
27981
28082
|
)
|
|
27982
28083
|
].sort((a, b) => b.createdTimeMs - a.createdTimeMs);
|
|
27983
28084
|
}, [displayedDirectExecutions, displayedCheckouts]);
|
|
27984
|
-
const displayedNotifications =
|
|
28085
|
+
const displayedNotifications = useMemo39(() => {
|
|
27985
28086
|
return isExpanded ? combinedNotifications : combinedNotifications.slice(0, COLLAPSED_COUNT);
|
|
27986
28087
|
}, [isExpanded, combinedNotifications]);
|
|
27987
28088
|
const handleNotificationClose = (id) => setClosedNotifications((prev) => [...prev, id]);
|
|
@@ -28258,7 +28359,7 @@ import React217 from "react";
|
|
|
28258
28359
|
// src/modals/ProfileDetails/ActivityTraversalContext.tsx
|
|
28259
28360
|
import React205, {
|
|
28260
28361
|
createContext as createContext15,
|
|
28261
|
-
useCallback as
|
|
28362
|
+
useCallback as useCallback45,
|
|
28262
28363
|
useContext as useContext15,
|
|
28263
28364
|
useState as useState66
|
|
28264
28365
|
} from "react";
|
|
@@ -28279,7 +28380,7 @@ var ActivityTraversalProvider = ({
|
|
|
28279
28380
|
const [returnViewPresets, setReturnViewPresets] = useState66(
|
|
28280
28381
|
{}
|
|
28281
28382
|
);
|
|
28282
|
-
const onSelectActivity =
|
|
28383
|
+
const onSelectActivity = useCallback45(
|
|
28283
28384
|
({
|
|
28284
28385
|
checkoutId,
|
|
28285
28386
|
initialPage,
|
|
@@ -28297,7 +28398,7 @@ var ActivityTraversalProvider = ({
|
|
|
28297
28398
|
},
|
|
28298
28399
|
[]
|
|
28299
28400
|
);
|
|
28300
|
-
const resetActivityTraversal =
|
|
28401
|
+
const resetActivityTraversal = useCallback45(() => {
|
|
28301
28402
|
setSelectedPurchaseId(void 0);
|
|
28302
28403
|
setSelectedPurchaseInitView(void 0);
|
|
28303
28404
|
setReturnView(void 0);
|
|
@@ -28317,7 +28418,7 @@ var useActivityTraversal = () => {
|
|
|
28317
28418
|
};
|
|
28318
28419
|
|
|
28319
28420
|
// src/modals/ProfileDetails/ProfileDetails.tsx
|
|
28320
|
-
import React216, { useCallback as
|
|
28421
|
+
import React216, { useCallback as useCallback47, useState as useState69 } from "react";
|
|
28321
28422
|
|
|
28322
28423
|
// src/hooks/useCheckoutModalTitle.ts
|
|
28323
28424
|
function useCheckoutModalTitle(depositAddress, defaultTitle) {
|
|
@@ -28331,7 +28432,7 @@ function useCheckoutModalTitle(depositAddress, defaultTitle) {
|
|
|
28331
28432
|
import { IN_PROGRESS_CHECKOUT_STATES as IN_PROGRESS_CHECKOUT_STATES2 } from "@funkit/api-base";
|
|
28332
28433
|
import { formatTimestampToDate, fullMonthNames } from "@funkit/utils";
|
|
28333
28434
|
import clsx23 from "clsx";
|
|
28334
|
-
import React214, { useEffect as useEffect52, useMemo as
|
|
28435
|
+
import React214, { useEffect as useEffect52, useMemo as useMemo40, useRef as useRef26, useState as useState68 } from "react";
|
|
28335
28436
|
import { Virtuoso } from "react-virtuoso";
|
|
28336
28437
|
import { useAccount as useAccount7 } from "wagmi";
|
|
28337
28438
|
|
|
@@ -28705,7 +28806,7 @@ var HomeTokenBalanceDisplayRowSkeleton = () => {
|
|
|
28705
28806
|
|
|
28706
28807
|
// src/modals/ProfileDetails/FunProfileViews/Home/ProfileTitleSection.tsx
|
|
28707
28808
|
import React213 from "react";
|
|
28708
|
-
import { useCallback as
|
|
28809
|
+
import { useCallback as useCallback46, useState as useState67 } from "react";
|
|
28709
28810
|
|
|
28710
28811
|
// src/components/Icons/LogoutIcon.tsx
|
|
28711
28812
|
import React211 from "react";
|
|
@@ -28772,7 +28873,7 @@ var ProfileTitleSection = ({
|
|
|
28772
28873
|
onClose
|
|
28773
28874
|
}) => {
|
|
28774
28875
|
const [isDisconnectExpanded, setIsDisconnectExpanded] = useState67(false);
|
|
28775
|
-
const collapseDisconnect =
|
|
28876
|
+
const collapseDisconnect = useCallback46(
|
|
28776
28877
|
() => setIsDisconnectExpanded(false),
|
|
28777
28878
|
[]
|
|
28778
28879
|
);
|
|
@@ -28878,7 +28979,7 @@ function Home({
|
|
|
28878
28979
|
const virtuosoDiv = virtuosoParentRef.current?.firstChild;
|
|
28879
28980
|
virtuosoDiv?.classList.add(animateVirtuosoInClass);
|
|
28880
28981
|
}, []);
|
|
28881
|
-
const AssetsList =
|
|
28982
|
+
const AssetsList = useMemo40(() => {
|
|
28882
28983
|
if (walletAssets && !Object.keys(walletAssets).length) {
|
|
28883
28984
|
return /* @__PURE__ */ React214.createElement(EmptyTabAlert, null);
|
|
28884
28985
|
}
|
|
@@ -28905,7 +29006,7 @@ function Home({
|
|
|
28905
29006
|
}
|
|
28906
29007
|
));
|
|
28907
29008
|
}, [walletAssets]);
|
|
28908
|
-
const CheckoutsList =
|
|
29009
|
+
const CheckoutsList = useMemo40(() => {
|
|
28909
29010
|
if (checkoutHistoryList.length === 0 && isCheckoutHistoryInited) {
|
|
28910
29011
|
return /* @__PURE__ */ React214.createElement(EmptyTabAlert, null);
|
|
28911
29012
|
}
|
|
@@ -29128,13 +29229,13 @@ function ProfileDetails({ onClose, defaultTab }) {
|
|
|
29128
29229
|
const [singleActivityPage, setSingleActivityPage] = useState69(
|
|
29129
29230
|
selectedPurchaseInitView ?? "detail" /* DETAIL */
|
|
29130
29231
|
);
|
|
29131
|
-
const resetView =
|
|
29232
|
+
const resetView = useCallback47(() => {
|
|
29132
29233
|
setView(returnView ?? 0 /* HOME */);
|
|
29133
29234
|
setSelectedHomeTab("checkouts" /* CHECKOUTS */);
|
|
29134
29235
|
resetActivityTraversal();
|
|
29135
29236
|
}, [resetActivityTraversal, returnView]);
|
|
29136
29237
|
const { animation, animate } = useAnimatedNavigation(void 0);
|
|
29137
|
-
const onSelectActivityWrapper =
|
|
29238
|
+
const onSelectActivityWrapper = useCallback47(
|
|
29138
29239
|
(activity) => {
|
|
29139
29240
|
onSelectActivity({
|
|
29140
29241
|
...activity,
|
|
@@ -29171,7 +29272,7 @@ function ProfileDetails({ onClose, defaultTab }) {
|
|
|
29171
29272
|
const isHelpPage = singleActivityPage === "help" /* HELP */;
|
|
29172
29273
|
const isCheckoutDetailView = isSingleActivityView && singleActivityPage === "detail" /* DETAIL */;
|
|
29173
29274
|
const withDivider = isSingleActivityView ? isHelpPage ? "scroll" : "always" : void 0;
|
|
29174
|
-
const handleHelp =
|
|
29275
|
+
const handleHelp = useCallback47(() => {
|
|
29175
29276
|
animate(() => setSingleActivityPage("help" /* HELP */));
|
|
29176
29277
|
}, [animate]);
|
|
29177
29278
|
const { onScroll, topbar, withTopDivider } = useCustomStatusAnimationAboveTopbar({
|
|
@@ -29246,7 +29347,7 @@ function AccountModal({ onClose, open, defaultTab }) {
|
|
|
29246
29347
|
// src/modals/ChainModal/ChainModal.tsx
|
|
29247
29348
|
import { isMobile as isMobile13 } from "@funkit/utils";
|
|
29248
29349
|
import React222 from "react";
|
|
29249
|
-
import { useAccount as useAccount8, useConfig as
|
|
29350
|
+
import { useAccount as useAccount8, useConfig as useConfig5 } from "wagmi";
|
|
29250
29351
|
|
|
29251
29352
|
// src/components/Icons/DisconnectSqIcon.tsx
|
|
29252
29353
|
import React218 from "react";
|
|
@@ -29459,7 +29560,7 @@ var MobileScrollClassName = "_1d2b1vf1";
|
|
|
29459
29560
|
// src/modals/ChainModal/ChainModal.tsx
|
|
29460
29561
|
function ChainModal({ onClose, open }) {
|
|
29461
29562
|
const { chainId } = useAccount8();
|
|
29462
|
-
const { chains } =
|
|
29563
|
+
const { chains } = useConfig5();
|
|
29463
29564
|
const { switchChain, pendingChainId } = useFunkitSwitchChains({
|
|
29464
29565
|
onSettled: () => onClose()
|
|
29465
29566
|
});
|
|
@@ -29578,7 +29679,7 @@ function ChainModal({ onClose, open }) {
|
|
|
29578
29679
|
// src/modals/CheckoutModal/FunCheckoutModal.tsx
|
|
29579
29680
|
import { FUNKIT_CONNECT_SUPPORTED_CHECKOUT_CHAINS_INFO_LIST as FUNKIT_CONNECT_SUPPORTED_CHECKOUT_CHAINS_INFO_LIST3 } from "@funkit/chains";
|
|
29580
29681
|
import { LogLevel, initializeRelayClient } from "@funkit/fun-relay";
|
|
29581
|
-
import { FlagKey as
|
|
29682
|
+
import { FlagKey as FlagKey28 } from "@funkit/utils";
|
|
29582
29683
|
import React224, { useRef as useRef27 } from "react";
|
|
29583
29684
|
|
|
29584
29685
|
// src/components/FunCheckoutBlocked/FunCheckoutBlocked.tsx
|
|
@@ -29665,7 +29766,7 @@ function FunCheckoutModalInner({
|
|
|
29665
29766
|
const isBlocked = isUserGeoblocked || modalState.isBlocked;
|
|
29666
29767
|
const hasBack = hasHistoryEntry && !disableBack;
|
|
29667
29768
|
const checkoutConfig = checkoutItem.initSettings.config;
|
|
29668
|
-
const helpButtonUrl = useFlag(
|
|
29769
|
+
const helpButtonUrl = useFlag(FlagKey28.HelpTutorialUrl);
|
|
29669
29770
|
const { onScroll, topbar, withTopDivider } = useCustomStatusAnimationAboveTopbar({
|
|
29670
29771
|
depositAddress: checkoutItem.depositAddress ?? void 0,
|
|
29671
29772
|
isActiveCheckout: true,
|
|
@@ -29781,16 +29882,16 @@ function ConnectModal({
|
|
|
29781
29882
|
function useModalStateValue() {
|
|
29782
29883
|
const [isModalOpen, setModalOpen] = useState70(false);
|
|
29783
29884
|
return {
|
|
29784
|
-
closeModal:
|
|
29885
|
+
closeModal: useCallback48(() => setModalOpen(false), []),
|
|
29785
29886
|
isModalOpen,
|
|
29786
|
-
openModal:
|
|
29887
|
+
openModal: useCallback48(() => setModalOpen(true), [])
|
|
29787
29888
|
};
|
|
29788
29889
|
}
|
|
29789
29890
|
function useModalStateValueWithProp() {
|
|
29790
29891
|
const [isModalOpen, setModalOpen] = useState70(false);
|
|
29791
29892
|
const [prop, setProp] = useState70(null);
|
|
29792
29893
|
return {
|
|
29793
|
-
closeModal:
|
|
29894
|
+
closeModal: useCallback48(() => {
|
|
29794
29895
|
setTimeout(
|
|
29795
29896
|
() => {
|
|
29796
29897
|
setProp(null);
|
|
@@ -29801,7 +29902,7 @@ function useModalStateValueWithProp() {
|
|
|
29801
29902
|
}, []),
|
|
29802
29903
|
isModalOpen,
|
|
29803
29904
|
prop,
|
|
29804
|
-
openModal:
|
|
29905
|
+
openModal: useCallback48((prop2) => {
|
|
29805
29906
|
if (prop2 != null) {
|
|
29806
29907
|
setProp(prop2);
|
|
29807
29908
|
}
|
|
@@ -29850,7 +29951,7 @@ function ModalProvider({ children }) {
|
|
|
29850
29951
|
} = useModalStateValueWithProp();
|
|
29851
29952
|
const connectionStatus = useConnectionStatus();
|
|
29852
29953
|
const { chainId } = useAccount10();
|
|
29853
|
-
const { chains } =
|
|
29954
|
+
const { chains } = useConfig6();
|
|
29854
29955
|
const isCurrentChainSupported = chains.some((chain) => chain.id === chainId);
|
|
29855
29956
|
function closeModals(keepConnectModalOpen = false) {
|
|
29856
29957
|
if (!keepConnectModalOpen) {
|
|
@@ -29872,7 +29973,7 @@ function ModalProvider({ children }) {
|
|
|
29872
29973
|
return /* @__PURE__ */ React226.createElement(
|
|
29873
29974
|
ModalContext.Provider,
|
|
29874
29975
|
{
|
|
29875
|
-
value:
|
|
29976
|
+
value: useMemo41(
|
|
29876
29977
|
() => ({
|
|
29877
29978
|
accountModalOpen,
|
|
29878
29979
|
accountModalTab,
|
|
@@ -30277,7 +30378,7 @@ var FunkitWeb2Provider = ({
|
|
|
30277
30378
|
children
|
|
30278
30379
|
}) => {
|
|
30279
30380
|
const { connectAsync } = useConnect2();
|
|
30280
|
-
const { chains } =
|
|
30381
|
+
const { chains } = useConfig7();
|
|
30281
30382
|
const { connectors, disconnectAsync } = useDisconnect2();
|
|
30282
30383
|
const [privy, setPrivy] = useState71(null);
|
|
30283
30384
|
const [privyIframeUrl, setPrivyIframeUrl] = useState71();
|
|
@@ -30288,7 +30389,7 @@ var FunkitWeb2Provider = ({
|
|
|
30288
30389
|
const [isLoggingIn, setIsLoggingIn] = useState71(false);
|
|
30289
30390
|
const [loginErrorMessage, setLoginErrorMessage] = useState71("");
|
|
30290
30391
|
const [loggedInUser, setLoggedInUser] = useState71(null);
|
|
30291
|
-
const setLoginMethodAndCache =
|
|
30392
|
+
const setLoginMethodAndCache = useCallback49(
|
|
30292
30393
|
(method) => {
|
|
30293
30394
|
try {
|
|
30294
30395
|
setLoginMethod(method);
|
|
@@ -30312,7 +30413,7 @@ var FunkitWeb2Provider = ({
|
|
|
30312
30413
|
setPrivyIframeUrl(newPrivy.embeddedWallet.getURL());
|
|
30313
30414
|
setPrivy(newPrivy);
|
|
30314
30415
|
}, [chains]);
|
|
30315
|
-
const handleIframeMessage =
|
|
30416
|
+
const handleIframeMessage = useCallback49(
|
|
30316
30417
|
(e) => {
|
|
30317
30418
|
if (e.origin === PRIVY_AUTH_URL && privy) {
|
|
30318
30419
|
const iframeHandler = privy.embeddedWallet.getMessageHandler();
|
|
@@ -30321,7 +30422,7 @@ var FunkitWeb2Provider = ({
|
|
|
30321
30422
|
},
|
|
30322
30423
|
[privy]
|
|
30323
30424
|
);
|
|
30324
|
-
const handleFunkitWeb2Logout =
|
|
30425
|
+
const handleFunkitWeb2Logout = useCallback49(async () => {
|
|
30325
30426
|
if (privy) {
|
|
30326
30427
|
logger.log("handleFunkitWeb2Logout_disconnecting_connectors", {
|
|
30327
30428
|
numConnectors: connectors.length
|
|
@@ -30334,7 +30435,7 @@ var FunkitWeb2Provider = ({
|
|
|
30334
30435
|
setLoginMethodAndCache(null);
|
|
30335
30436
|
}
|
|
30336
30437
|
}, [connectors, disconnectAsync, privy, setLoginMethodAndCache]);
|
|
30337
|
-
const handleFreshPrivyLogin =
|
|
30438
|
+
const handleFreshPrivyLogin = useCallback49(
|
|
30338
30439
|
async ({
|
|
30339
30440
|
firstLoginCode,
|
|
30340
30441
|
secondLoginCode,
|
|
@@ -30386,7 +30487,7 @@ var FunkitWeb2Provider = ({
|
|
|
30386
30487
|
},
|
|
30387
30488
|
[handleFunkitWeb2Logout, privy]
|
|
30388
30489
|
);
|
|
30389
|
-
const getPrivyUserEmbeddedWallet =
|
|
30490
|
+
const getPrivyUserEmbeddedWallet = useCallback49(
|
|
30390
30491
|
async (inputPrivyUser) => {
|
|
30391
30492
|
try {
|
|
30392
30493
|
if (!privy || !inputPrivyUser) {
|
|
@@ -30405,7 +30506,7 @@ var FunkitWeb2Provider = ({
|
|
|
30405
30506
|
},
|
|
30406
30507
|
[privy]
|
|
30407
30508
|
);
|
|
30408
|
-
const getExistingPrivySession =
|
|
30509
|
+
const getExistingPrivySession = useCallback49(async () => {
|
|
30409
30510
|
try {
|
|
30410
30511
|
if (!privy) {
|
|
30411
30512
|
throw new Error(ERROR_MESSAGES2.PRIVY_NOT_INITIALIZED);
|
|
@@ -30416,7 +30517,7 @@ var FunkitWeb2Provider = ({
|
|
|
30416
30517
|
return null;
|
|
30417
30518
|
}
|
|
30418
30519
|
}, [privy]);
|
|
30419
|
-
const handleFunkitWeb2Login =
|
|
30520
|
+
const handleFunkitWeb2Login = useCallback49(
|
|
30420
30521
|
async ({
|
|
30421
30522
|
chainId,
|
|
30422
30523
|
firstLoginCode,
|
|
@@ -30493,9 +30594,9 @@ var FunkitWeb2Provider = ({
|
|
|
30493
30594
|
wallets
|
|
30494
30595
|
]
|
|
30495
30596
|
);
|
|
30496
|
-
const clearLoginError =
|
|
30597
|
+
const clearLoginError = useCallback49(() => setLoginErrorMessage(""), []);
|
|
30497
30598
|
const initChainId = useInitialChainId();
|
|
30498
|
-
const handleAutoLoginFlows =
|
|
30599
|
+
const handleAutoLoginFlows = useCallback49(async () => {
|
|
30499
30600
|
if (isNotNullish11(loginMethod) && isNotNullish11(initChainId)) {
|
|
30500
30601
|
const queryParams = new URLSearchParams(window.location.search);
|
|
30501
30602
|
const oauthCode = queryParams.get(PRIVY_OAUTH_CODE_URL_PARAM);
|
|
@@ -30539,7 +30640,7 @@ var FunkitWeb2Provider = ({
|
|
|
30539
30640
|
initChainId
|
|
30540
30641
|
// Do not include `handleAutoLoginFlows`,
|
|
30541
30642
|
]);
|
|
30542
|
-
const handleOauthRedirect =
|
|
30643
|
+
const handleOauthRedirect = useCallback49(
|
|
30543
30644
|
async (authProvider) => {
|
|
30544
30645
|
if (!privy) {
|
|
30545
30646
|
throw new Error(ERROR_MESSAGES2.PRIVY_NOT_INITIALIZED);
|
|
@@ -30565,7 +30666,7 @@ var FunkitWeb2Provider = ({
|
|
|
30565
30666
|
[privy, setLoginMethodAndCache]
|
|
30566
30667
|
);
|
|
30567
30668
|
const [isSendingOtpEmail, setIsSendingOtpEmail] = useState71(false);
|
|
30568
|
-
const handleSendOtpEmail =
|
|
30669
|
+
const handleSendOtpEmail = useCallback49(
|
|
30569
30670
|
async (emailAddress) => {
|
|
30570
30671
|
try {
|
|
30571
30672
|
if (!privy) {
|
|
@@ -30593,7 +30694,7 @@ var FunkitWeb2Provider = ({
|
|
|
30593
30694
|
[privy, setLoginMethodAndCache]
|
|
30594
30695
|
);
|
|
30595
30696
|
const [isGeneratingFcUri, setIsGeneratingFcUri] = useState71(false);
|
|
30596
|
-
const handleGenerateFcUri =
|
|
30697
|
+
const handleGenerateFcUri = useCallback49(async () => {
|
|
30597
30698
|
try {
|
|
30598
30699
|
if (!privy) {
|
|
30599
30700
|
throw new Error(ERROR_MESSAGES2.PRIVY_NOT_INITIALIZED);
|
|
@@ -30620,7 +30721,7 @@ var FunkitWeb2Provider = ({
|
|
|
30620
30721
|
setIsGeneratingFcUri(false);
|
|
30621
30722
|
}
|
|
30622
30723
|
}, [privy]);
|
|
30623
|
-
const getFcConnectionStatus =
|
|
30724
|
+
const getFcConnectionStatus = useCallback49(
|
|
30624
30725
|
async (channelToken) => {
|
|
30625
30726
|
try {
|
|
30626
30727
|
if (!privy) {
|
|
@@ -30643,7 +30744,7 @@ var FunkitWeb2Provider = ({
|
|
|
30643
30744
|
},
|
|
30644
30745
|
[privy]
|
|
30645
30746
|
);
|
|
30646
|
-
const web2UserInfo =
|
|
30747
|
+
const web2UserInfo = useMemo42(() => {
|
|
30647
30748
|
if (!loggedInUser || !loggedInUser?.linked_accounts || !loggedInUser?.linked_accounts?.length) {
|
|
30648
30749
|
return PLACEHOLDER_FUNKIT_USER_INFO;
|
|
30649
30750
|
}
|
|
@@ -30764,10 +30865,10 @@ var useShowBalance = () => useContext18(ShowBalanceContext);
|
|
|
30764
30865
|
// src/components/ConnectButton/ConnectButtonRenderer.tsx
|
|
30765
30866
|
import { formatCurrencyAndStringify as formatCurrencyAndStringify15, isMobile as isMobile14, noop as noop9 } from "@funkit/utils";
|
|
30766
30867
|
import React229 from "react";
|
|
30767
|
-
import { useAccount as useAccount12, useBalance, useConfig as
|
|
30868
|
+
import { useAccount as useAccount12, useBalance, useConfig as useConfig8 } from "wagmi";
|
|
30768
30869
|
|
|
30769
30870
|
// src/hooks/useIsMounted.ts
|
|
30770
|
-
import { useCallback as
|
|
30871
|
+
import { useCallback as useCallback50, useEffect as useEffect55, useState as useState73 } from "react";
|
|
30771
30872
|
function useIsMounted() {
|
|
30772
30873
|
const [isMounted, setIsMounted] = useState73(false);
|
|
30773
30874
|
useEffect55(() => {
|
|
@@ -30776,7 +30877,7 @@ function useIsMounted() {
|
|
|
30776
30877
|
setIsMounted(false);
|
|
30777
30878
|
};
|
|
30778
30879
|
}, []);
|
|
30779
|
-
return
|
|
30880
|
+
return useCallback50(() => isMounted, [isMounted]);
|
|
30780
30881
|
}
|
|
30781
30882
|
|
|
30782
30883
|
// src/components/ConnectButton/abbreviateETHBalance.ts
|
|
@@ -30822,7 +30923,7 @@ function ConnectButtonRenderer({
|
|
|
30822
30923
|
const { totalWalletAssetsUsd } = useWalletAssets({
|
|
30823
30924
|
enableRefetchInterval: false
|
|
30824
30925
|
});
|
|
30825
|
-
const { chains: wagmiChains } =
|
|
30926
|
+
const { chains: wagmiChains } = useConfig8();
|
|
30826
30927
|
const isCurrentChainSupported = wagmiChains.some(
|
|
30827
30928
|
(chain) => chain.id === chainId
|
|
30828
30929
|
);
|
|
@@ -31584,15 +31685,6 @@ function cssStringFromTheme(theme, options = {}) {
|
|
|
31584
31685
|
return Object.entries(cssObjectFromTheme(theme, options)).map(([key, value]) => `${key}:${value.replace(/[:;{}</>]/g, "")};`).join("");
|
|
31585
31686
|
}
|
|
31586
31687
|
|
|
31587
|
-
// src/hooks/useIsFunkitCheckoutActivated.ts
|
|
31588
|
-
import { FlagKey as FlagKey28 } from "@funkit/utils";
|
|
31589
|
-
var useIsFunkitCheckoutActivated = () => {
|
|
31590
|
-
const isCheckoutActivated = useFlag(FlagKey28.IsCheckoutActivated);
|
|
31591
|
-
return {
|
|
31592
|
-
isActivated: isCheckoutActivated
|
|
31593
|
-
};
|
|
31594
|
-
};
|
|
31595
|
-
|
|
31596
31688
|
// src/hooks/useFunkitMaxCheckoutUsdInfo.ts
|
|
31597
31689
|
import { FlagKey as FlagKey29, formatCurrencyAndStringify as formatCurrencyAndStringify16 } from "@funkit/utils";
|
|
31598
31690
|
var useFunkitMaxCheckoutUsdInfo = () => {
|
|
@@ -31629,16 +31721,16 @@ import React233, { createContext as createContext19, useContext as useContext19
|
|
|
31629
31721
|
import { WagmiProvider, useAccountEffect as useAccountEffect3 } from "wagmi";
|
|
31630
31722
|
|
|
31631
31723
|
// src/providers/useFingerprint.ts
|
|
31632
|
-
import { useCallback as
|
|
31724
|
+
import { useCallback as useCallback51, useEffect as useEffect57 } from "react";
|
|
31633
31725
|
var storageKey5 = "funkit-connect-version";
|
|
31634
31726
|
function setFunkitConnectVersion({ version }) {
|
|
31635
31727
|
localStorage.setItem(storageKey5, version);
|
|
31636
31728
|
}
|
|
31637
31729
|
function getCurrentSdkVersion() {
|
|
31638
|
-
return "6.14.
|
|
31730
|
+
return "6.14.4";
|
|
31639
31731
|
}
|
|
31640
31732
|
function useFingerprint() {
|
|
31641
|
-
const fingerprint =
|
|
31733
|
+
const fingerprint = useCallback51(() => {
|
|
31642
31734
|
setFunkitConnectVersion({ version: getCurrentSdkVersion() });
|
|
31643
31735
|
}, []);
|
|
31644
31736
|
useEffect57(() => {
|
|
@@ -31648,11 +31740,11 @@ function useFingerprint() {
|
|
|
31648
31740
|
|
|
31649
31741
|
// src/providers/usePreloadImages.ts
|
|
31650
31742
|
import { isNotNullish as isNotNullish12 } from "@funkit/utils";
|
|
31651
|
-
import { useCallback as
|
|
31743
|
+
import { useCallback as useCallback52, useEffect as useEffect58 } from "react";
|
|
31652
31744
|
function usePreloadImages() {
|
|
31653
31745
|
const funkitConnectChains = useFunkitConnectChains();
|
|
31654
31746
|
const walletConnectors = useWalletConnectors();
|
|
31655
|
-
const preloadImages =
|
|
31747
|
+
const preloadImages = useCallback52(() => {
|
|
31656
31748
|
loadImages(
|
|
31657
31749
|
...walletConnectors.map((wallet) => wallet.iconUrl),
|
|
31658
31750
|
...funkitConnectChains.map((chain) => chain.iconUrl).filter(isNotNullish12)
|
|
@@ -31807,6 +31899,5 @@ export {
|
|
|
31807
31899
|
useFunkitReconnect,
|
|
31808
31900
|
useFunkitSwitchChains,
|
|
31809
31901
|
useFunkitUserInfo,
|
|
31810
|
-
useIsFunkitCheckoutActivated,
|
|
31811
31902
|
useUpdateActiveFunkitCheckout
|
|
31812
31903
|
};
|