@funkit/connect 6.9.0 → 6.11.0
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 +31 -0
- package/dist/hooks/useFiatExchangeRates.d.ts +5 -0
- package/dist/hooks/useTokenTransfer.d.ts +3 -0
- package/dist/index.css +4 -4
- package/dist/index.js +441 -209
- package/dist/modals/CheckoutModal/InputAmount/InputAmountLoaded.d.ts +4 -1
- package/dist/modals/CheckoutModal/InputAmount/state.d.ts +9 -1
- package/dist/utils/flags/config.d.ts +291 -265
- package/dist/utils/flags/impl.d.ts +294 -1
- package/dist/utils/flags/patches/enable-bitcoin-patch.d.ts +2 -0
- package/dist/utils/funLogger.d.ts +7 -1
- package/dist/utils/getExchangeRate.d.ts +4 -0
- package/dist/utils/transfer.d.ts +9 -0
- package/dist/wallets/walletConnectors/index.js +54 -54
- package/package.json +5 -5
package/dist/index.js
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
"use client";
|
|
2
|
-
import {
|
|
3
|
-
darkTheme
|
|
4
|
-
} from "./chunk-UOY5XFCR.js";
|
|
5
2
|
import {
|
|
6
3
|
lightTheme
|
|
7
4
|
} from "./chunk-AYGZMDTC.js";
|
|
5
|
+
import {
|
|
6
|
+
darkTheme
|
|
7
|
+
} from "./chunk-UOY5XFCR.js";
|
|
8
8
|
import {
|
|
9
9
|
systemFontStack
|
|
10
10
|
} from "./chunk-7HKC2KCK.js";
|
|
@@ -522,7 +522,7 @@ import React251, {
|
|
|
522
522
|
useCallback as useCallback49,
|
|
523
523
|
useContext as useContext17,
|
|
524
524
|
useEffect as useEffect54,
|
|
525
|
-
useMemo as
|
|
525
|
+
useMemo as useMemo41,
|
|
526
526
|
useState as useState72
|
|
527
527
|
} from "react";
|
|
528
528
|
import { useConfig as useConfig6, useConnect as useConnect2, useDisconnect as useDisconnect2 } from "wagmi";
|
|
@@ -662,6 +662,15 @@ var FunLogger = class {
|
|
|
662
662
|
console.error(title, data || "", error);
|
|
663
663
|
}
|
|
664
664
|
}
|
|
665
|
+
extractError(error) {
|
|
666
|
+
if (error instanceof Error) {
|
|
667
|
+
return error;
|
|
668
|
+
}
|
|
669
|
+
if (typeof error === "object" && error !== null && "error" in error && error.error instanceof Error) {
|
|
670
|
+
return error.error;
|
|
671
|
+
}
|
|
672
|
+
return null;
|
|
673
|
+
}
|
|
665
674
|
/**========================
|
|
666
675
|
* PUBLIC LOGGER FUNCTIONS
|
|
667
676
|
*=========================*/
|
|
@@ -677,7 +686,17 @@ var FunLogger = class {
|
|
|
677
686
|
warn(title, data) {
|
|
678
687
|
this.onWarn({ title, data });
|
|
679
688
|
}
|
|
680
|
-
|
|
689
|
+
/**
|
|
690
|
+
* @param errorOrData -
|
|
691
|
+
* Previously was called "error" but since in the {@link Logger} interface, error is defined as object (which is the same thing as "any"), we treat it as of unknown type here for safety.
|
|
692
|
+
* In a lot of places it's actually being used as a "data" prop, which also usually has an `.error` property representing an actual {@link Error} object.
|
|
693
|
+
*/
|
|
694
|
+
error(title, errorOrData, _data = {}) {
|
|
695
|
+
const error = this.extractError(errorOrData) ?? void 0;
|
|
696
|
+
const data = {
|
|
697
|
+
..._data,
|
|
698
|
+
...typeof errorOrData === "object" && errorOrData !== null ? errorOrData : {}
|
|
699
|
+
};
|
|
681
700
|
this.onError({ title, error, data });
|
|
682
701
|
}
|
|
683
702
|
configure(apiKey, isDebug, sdkVersion) {
|
|
@@ -810,6 +829,7 @@ function useFunkitConfig() {
|
|
|
810
829
|
|
|
811
830
|
// src/providers/provideFunkitConnectChains.ts
|
|
812
831
|
import {
|
|
832
|
+
BITCOIN_MAINNET_CHAIN_ID,
|
|
813
833
|
HYPERCORE_CHAIN_ID,
|
|
814
834
|
HYPER_EVM_CHAIN_ID,
|
|
815
835
|
KATANA_CHAIN_ID,
|
|
@@ -832,6 +852,10 @@ var baseIcon = {
|
|
|
832
852
|
iconBackground: "#0052ff",
|
|
833
853
|
iconUrl: "https://sdk-cdn.fun.xyz/images/base.svg"
|
|
834
854
|
};
|
|
855
|
+
var bitcoinIcon = {
|
|
856
|
+
iconBackground: "#000000",
|
|
857
|
+
iconUrl: "https://sdk-cdn.fun.xyz/images/bitcoin.svg"
|
|
858
|
+
};
|
|
835
859
|
var blastIcon = {
|
|
836
860
|
iconBackground: "#000000",
|
|
837
861
|
iconUrl: "https://sdk-cdn.fun.xyz/images/blast.svg"
|
|
@@ -978,6 +1002,12 @@ var chainMetadataByName = {
|
|
|
978
1002
|
name: "HyperCore",
|
|
979
1003
|
...hyperCoreIcon
|
|
980
1004
|
},
|
|
1005
|
+
// Non-evm -- Funkit Bitcoin support
|
|
1006
|
+
bitcoin: {
|
|
1007
|
+
chainId: BITCOIN_MAINNET_CHAIN_ID,
|
|
1008
|
+
name: "Bitcoin",
|
|
1009
|
+
...bitcoinIcon
|
|
1010
|
+
},
|
|
981
1011
|
xdc: { chainId: 50, name: "XinFin", ...xdcIcon },
|
|
982
1012
|
xdcTestnet: { chainId: 51, name: "XinFin Testnet", ...xdcIcon },
|
|
983
1013
|
zetachain: { chainId: 7e3, name: "ZetaChain", ...zetachainIcon },
|
|
@@ -1059,7 +1089,7 @@ import React250, {
|
|
|
1059
1089
|
useCallback as useCallback48,
|
|
1060
1090
|
useContext as useContext16,
|
|
1061
1091
|
useEffect as useEffect53,
|
|
1062
|
-
useMemo as
|
|
1092
|
+
useMemo as useMemo40,
|
|
1063
1093
|
useState as useState71
|
|
1064
1094
|
} from "react";
|
|
1065
1095
|
import { useAccount as useAccount10, useAccountEffect as useAccountEffect2, useConfig as useConfig5 } from "wagmi";
|
|
@@ -2416,7 +2446,7 @@ import React37, {
|
|
|
2416
2446
|
useCallback as useCallback2,
|
|
2417
2447
|
useState as useState5
|
|
2418
2448
|
} from "react";
|
|
2419
|
-
import { FlagKey as
|
|
2449
|
+
import { FlagKey as FlagKey4 } from "@funkit/utils";
|
|
2420
2450
|
|
|
2421
2451
|
// src/utils/safeJSON.ts
|
|
2422
2452
|
import { safeParseJson } from "@funkit/utils";
|
|
@@ -2808,7 +2838,10 @@ var flagConfig = {
|
|
|
2808
2838
|
56: ["*"],
|
|
2809
2839
|
747474: ["*"],
|
|
2810
2840
|
999: ["*"],
|
|
2811
|
-
2741: ["*"]
|
|
2841
|
+
2741: ["*"],
|
|
2842
|
+
8253038: ["*"]
|
|
2843
|
+
// No HyperCore
|
|
2844
|
+
// No Solana
|
|
2812
2845
|
})
|
|
2813
2846
|
},
|
|
2814
2847
|
[FlagKey.RelayBypassTargetChainsAndAssets]: {
|
|
@@ -2823,6 +2856,7 @@ var flagConfig = {
|
|
|
2823
2856
|
747474: ["*"],
|
|
2824
2857
|
999: ["*"],
|
|
2825
2858
|
2741: ["*"],
|
|
2859
|
+
8253038: ["*"],
|
|
2826
2860
|
// HyperCore
|
|
2827
2861
|
1337: ["*"],
|
|
2828
2862
|
// Solana
|
|
@@ -3084,6 +3118,43 @@ var flagConfig = {
|
|
|
3084
3118
|
"10"
|
|
3085
3119
|
// Optimism
|
|
3086
3120
|
])
|
|
3121
|
+
},
|
|
3122
|
+
[FlagKey.EnableBitcoin]: {
|
|
3123
|
+
type: "boolean",
|
|
3124
|
+
default_value: false,
|
|
3125
|
+
overrides: [
|
|
3126
|
+
{
|
|
3127
|
+
if_any: [
|
|
3128
|
+
{
|
|
3129
|
+
key: "userId",
|
|
3130
|
+
type: "pctRollout",
|
|
3131
|
+
pct: 10
|
|
3132
|
+
},
|
|
3133
|
+
{
|
|
3134
|
+
key: "userId",
|
|
3135
|
+
type: "isAnyOf",
|
|
3136
|
+
values: [
|
|
3137
|
+
"0x236c60C57a8B9ca563Fb0dA5199FDdCB686d91E8",
|
|
3138
|
+
"0x2e0Fa1cE3F0F6a85542c1E4F941116c0E885292E",
|
|
3139
|
+
"0x28b8848C6c3aaBF4669997563dc07888eb3B0960",
|
|
3140
|
+
"0x9C64fD7d9826E6d552dD8bc53e5C96F7C3F38528",
|
|
3141
|
+
"0xfe5AD22465dc20340bfFb641F4AbbcAA7a1BB2Ed",
|
|
3142
|
+
"0x9CB7F86F360459cC96C74a0F81aF2C4cC7a54bd2",
|
|
3143
|
+
"0x21b94a3E67c4a72d3D15f478A696c5175f036092",
|
|
3144
|
+
"0x2A8Bd916E85d98d8175258De99fc0ddbcC102eF6",
|
|
3145
|
+
"0x8a5505F1b274d8fC23986AF60Dd3Ca3857095BB8",
|
|
3146
|
+
"0x0B6E49e9D1528F59BaBF3C5337A4c96E987f81aa",
|
|
3147
|
+
"0x84Bc1AC5621d2B44C5D3e3E79b45C2885406026D",
|
|
3148
|
+
"0x0D0377aa9CCA769931821842aB0E1A75e7DD6dD6",
|
|
3149
|
+
"0x7B0195921183f7E04f0D331c1DAF7C1bB208CC4E",
|
|
3150
|
+
"0xda6b07Eb94f699F511a943e9bFC12B64B7fe3486",
|
|
3151
|
+
"0x3c937d73f7FE55b386c309C65087d9F5bdd1a780"
|
|
3152
|
+
]
|
|
3153
|
+
}
|
|
3154
|
+
],
|
|
3155
|
+
value: true
|
|
3156
|
+
}
|
|
3157
|
+
]
|
|
3087
3158
|
}
|
|
3088
3159
|
};
|
|
3089
3160
|
|
|
@@ -3115,6 +3186,41 @@ var hashPct = (flag_key, value, pct) => {
|
|
|
3115
3186
|
return cyrb53(hashKey) % 100 < pct;
|
|
3116
3187
|
};
|
|
3117
3188
|
|
|
3189
|
+
// src/utils/flags/patches/enable-bitcoin-patch.ts
|
|
3190
|
+
import { FlagKey as FlagKey2, safeParseJson as safeParseJson2 } from "@funkit/utils";
|
|
3191
|
+
var BITCOIN_CHAIN_ID = 8253038;
|
|
3192
|
+
var enableBitcoin = (config) => {
|
|
3193
|
+
try {
|
|
3194
|
+
const tokenTransferNewTokensDefaultValue = safeParseJson2(config[FlagKey2.TokenTransferNewTokens].default_value) || {};
|
|
3195
|
+
const tokenTransferSourceChainsAndAssetsDefaultValue = safeParseJson2(
|
|
3196
|
+
config[FlagKey2.TokenTransferSourceChainsAndAssets].default_value
|
|
3197
|
+
) || {};
|
|
3198
|
+
if (config[FlagKey2.EnableBitcoin]) {
|
|
3199
|
+
return config;
|
|
3200
|
+
}
|
|
3201
|
+
return {
|
|
3202
|
+
...config,
|
|
3203
|
+
[FlagKey2.TokenTransferNewTokens]: {
|
|
3204
|
+
...config[FlagKey2.TokenTransferNewTokens],
|
|
3205
|
+
default_value: JSON.stringify({
|
|
3206
|
+
...tokenTransferNewTokensDefaultValue,
|
|
3207
|
+
[BITCOIN_CHAIN_ID]: ["BTC"]
|
|
3208
|
+
})
|
|
3209
|
+
},
|
|
3210
|
+
[FlagKey2.TokenTransferSourceChainsAndAssets]: {
|
|
3211
|
+
...config[FlagKey2.TokenTransferSourceChainsAndAssets],
|
|
3212
|
+
default_value: JSON.stringify({
|
|
3213
|
+
...tokenTransferSourceChainsAndAssetsDefaultValue,
|
|
3214
|
+
[BITCOIN_CHAIN_ID]: ["BTC"]
|
|
3215
|
+
})
|
|
3216
|
+
}
|
|
3217
|
+
};
|
|
3218
|
+
} catch (error) {
|
|
3219
|
+
logger.error("enableBitcoin:unexpected error", error);
|
|
3220
|
+
return config;
|
|
3221
|
+
}
|
|
3222
|
+
};
|
|
3223
|
+
|
|
3118
3224
|
// src/utils/flags/impl.ts
|
|
3119
3225
|
async function fetchWithTimeout(url, options = {}, timeout = 15e3) {
|
|
3120
3226
|
const controller = new AbortController();
|
|
@@ -3137,7 +3243,8 @@ async function fetchConfigFromServer() {
|
|
|
3137
3243
|
logger.log("flag_fetchConfigFromServer", {
|
|
3138
3244
|
configData
|
|
3139
3245
|
});
|
|
3140
|
-
|
|
3246
|
+
const config = enableBitcoin(configData.flags);
|
|
3247
|
+
return config;
|
|
3141
3248
|
}
|
|
3142
3249
|
function deriveAllFlags(config, userContext) {
|
|
3143
3250
|
return Object.fromEntries(
|
|
@@ -3211,7 +3318,7 @@ import React35, {
|
|
|
3211
3318
|
useMemo as useMemo4,
|
|
3212
3319
|
useState as useState4
|
|
3213
3320
|
} from "react";
|
|
3214
|
-
import { FlagKey as
|
|
3321
|
+
import { FlagKey as FlagKey3 } from "@funkit/utils";
|
|
3215
3322
|
|
|
3216
3323
|
// src/consts/customers.ts
|
|
3217
3324
|
import {
|
|
@@ -3333,7 +3440,7 @@ function useFunkitUserIp() {
|
|
|
3333
3440
|
if (!userIpInfo) {
|
|
3334
3441
|
return true;
|
|
3335
3442
|
}
|
|
3336
|
-
const blockedList = getFlag(
|
|
3443
|
+
const blockedList = getFlag(FlagKey3.BlockedCountries, ALL_MATCH).split(",");
|
|
3337
3444
|
return isCountryBlocked(blockedList, userIpInfo);
|
|
3338
3445
|
}, [
|
|
3339
3446
|
getFlag,
|
|
@@ -3447,7 +3554,7 @@ function fetchDataMapFromCache(enableFrogProxyServer) {
|
|
|
3447
3554
|
}
|
|
3448
3555
|
}
|
|
3449
3556
|
function FunkitMeshProvider({ children }) {
|
|
3450
|
-
const enableFrogProxyServer = useFlag(
|
|
3557
|
+
const enableFrogProxyServer = useFlag(FlagKey4.EnableFrogProxyServer);
|
|
3451
3558
|
const [meshBrokerDataMap, setMeshBrokerDataMap] = useState5(
|
|
3452
3559
|
fetchDataMapFromCache(enableFrogProxyServer)
|
|
3453
3560
|
);
|
|
@@ -3916,7 +4023,7 @@ import {
|
|
|
3916
4023
|
initializeCheckout as postApiInitializeCheckout
|
|
3917
4024
|
} from "@funkit/api-base";
|
|
3918
4025
|
import { FUNKIT_CONNECT_SUPPORTED_CHAINS_INFO as FUNKIT_CONNECT_SUPPORTED_CHAINS_INFO4 } from "@funkit/chains";
|
|
3919
|
-
import { FlagKey as
|
|
4026
|
+
import { FlagKey as FlagKey7, isNotNullish as isNotNullish3 } from "@funkit/utils";
|
|
3920
4027
|
import React39, {
|
|
3921
4028
|
createContext as createContext10,
|
|
3922
4029
|
useCallback as useCallback8,
|
|
@@ -3949,7 +4056,7 @@ var WEB3_ACCOUNT_BALANCE_MESSAGE = {
|
|
|
3949
4056
|
};
|
|
3950
4057
|
|
|
3951
4058
|
// src/hooks/useRelayBypass.ts
|
|
3952
|
-
import { FlagKey as
|
|
4059
|
+
import { FlagKey as FlagKey5, isTokenAddressEquivalent as isTokenAddressEquivalent2 } from "@funkit/utils";
|
|
3953
4060
|
import { useCallback as useCallback4, useMemo as useMemo7 } from "react";
|
|
3954
4061
|
var isTokenFlagEnabled = (tokenList, tokenAddress) => {
|
|
3955
4062
|
if (tokenList.includes("*")) {
|
|
@@ -3963,9 +4070,9 @@ var isTokenFlagEnabled = (tokenList, tokenAddress) => {
|
|
|
3963
4070
|
);
|
|
3964
4071
|
};
|
|
3965
4072
|
function useSourceTokenRelayEnabled() {
|
|
3966
|
-
const isRelayBypassEnabled = useFlag(
|
|
4073
|
+
const isRelayBypassEnabled = useFlag(FlagKey5.IsRelayBypassEnabled);
|
|
3967
4074
|
const sourceTokensJsonString = useFlag(
|
|
3968
|
-
|
|
4075
|
+
FlagKey5.RelayBypassSourceChainsAndAssets
|
|
3969
4076
|
);
|
|
3970
4077
|
const sourceTokens = useMemo7(
|
|
3971
4078
|
() => safeJSONParse(sourceTokensJsonString),
|
|
@@ -3984,12 +4091,12 @@ function useSourceTokenRelayEnabled() {
|
|
|
3984
4091
|
}
|
|
3985
4092
|
function useRelayBypass() {
|
|
3986
4093
|
const { apiKey } = useFunkitConfig();
|
|
3987
|
-
const isRelayBypassEnabled = useFlag(
|
|
4094
|
+
const isRelayBypassEnabled = useFlag(FlagKey5.IsRelayBypassEnabled);
|
|
3988
4095
|
const sourceTokensJsonString = useFlag(
|
|
3989
|
-
|
|
4096
|
+
FlagKey5.RelayBypassSourceChainsAndAssets
|
|
3990
4097
|
);
|
|
3991
4098
|
const targetTokensJsonString = useFlag(
|
|
3992
|
-
|
|
4099
|
+
FlagKey5.RelayBypassTargetChainsAndAssets
|
|
3993
4100
|
);
|
|
3994
4101
|
const sourceTokens = safeJSONParse(
|
|
3995
4102
|
sourceTokensJsonString
|
|
@@ -4262,7 +4369,7 @@ function useCheckoutDirectExecution() {
|
|
|
4262
4369
|
import {
|
|
4263
4370
|
initializeCheckoutTokenTransferAddress
|
|
4264
4371
|
} from "@funkit/api-base";
|
|
4265
|
-
import { FlagKey as
|
|
4372
|
+
import { FlagKey as FlagKey6 } from "@funkit/utils";
|
|
4266
4373
|
import { useQuery as useQuery3 } from "@tanstack/react-query";
|
|
4267
4374
|
import { useCallback as useCallback6 } from "react";
|
|
4268
4375
|
|
|
@@ -4337,7 +4444,7 @@ var useCheckoutTransferInit = () => {
|
|
|
4337
4444
|
const checkoutConfig = checkoutItem?.initSettings.config;
|
|
4338
4445
|
const { walletAddress, userInfo } = useGeneralWallet();
|
|
4339
4446
|
const { apiKey } = useFunkitConfig();
|
|
4340
|
-
const isQrCodeEnabled = useFlag(
|
|
4447
|
+
const isQrCodeEnabled = useFlag(FlagKey6.EnableTokenTransfer, false);
|
|
4341
4448
|
const recipientAddr = checkoutConfig?.customRecipient || walletAddress || "0x";
|
|
4342
4449
|
const queryKey = {
|
|
4343
4450
|
userId: userInfo.id || "",
|
|
@@ -4862,7 +4969,7 @@ function useFunkitCheckout(props) {
|
|
|
4862
4969
|
const { openWithdrawalModal } = useWithdrawalModal();
|
|
4863
4970
|
const { connectModalOpen, openConnectModal } = useConnectModal();
|
|
4864
4971
|
const { isUserLoggedIn } = useGeneralWallet();
|
|
4865
|
-
const isCheckoutActivated = useFlag(
|
|
4972
|
+
const isCheckoutActivated = useFlag(FlagKey7.IsCheckoutActivated);
|
|
4866
4973
|
const onErrorWrapper = useCallback8(
|
|
4867
4974
|
(payload) => {
|
|
4868
4975
|
logger.warn(payload.message, payload);
|
|
@@ -7022,6 +7129,7 @@ var ASSET_LOGO_SRCS = {
|
|
|
7022
7129
|
BLERF: "https://sdk-cdn.fun.xyz/images/blerf.png",
|
|
7023
7130
|
BRETT: "https://sdk-cdn.fun.xyz/images/brett.svg",
|
|
7024
7131
|
BSHIB: "https://sdk-cdn.fun.xyz/images/bshib.png",
|
|
7132
|
+
BTC: "https://sdk-cdn.fun.xyz/images/btc.svg",
|
|
7025
7133
|
CBBTC: "https://sdk-cdn.fun.xyz/images/cbbtc.svg",
|
|
7026
7134
|
CBETH: "https://sdk-cdn.fun.xyz/images/cbeth.png",
|
|
7027
7135
|
CRO: "https://sdk-cdn.fun.xyz/images/cro.svg",
|
|
@@ -7397,7 +7505,7 @@ var ErrorFallback = () => /* @__PURE__ */ React57.createElement(
|
|
|
7397
7505
|
);
|
|
7398
7506
|
|
|
7399
7507
|
// src/components/FunBottomBar/FunBottomBar.tsx
|
|
7400
|
-
import { FlagKey as
|
|
7508
|
+
import { FlagKey as FlagKey8, isMobile } from "@funkit/utils";
|
|
7401
7509
|
import React61 from "react";
|
|
7402
7510
|
|
|
7403
7511
|
// src/components/FunButton/FunButton.tsx
|
|
@@ -7685,7 +7793,7 @@ var FunBottomBar = ({
|
|
|
7685
7793
|
onClose
|
|
7686
7794
|
}) => {
|
|
7687
7795
|
const { uiCustomizations } = useFunkitConfig();
|
|
7688
|
-
const showTagline = useFlag(
|
|
7796
|
+
const showTagline = useFlag(FlagKey8.ShowPoweredTagline);
|
|
7689
7797
|
const defaultBottomSection = showTagline ? /* @__PURE__ */ React61.createElement(FunPoweredTagline, null) : void 0;
|
|
7690
7798
|
const bottomSectionComponent = bottomSection ?? defaultBottomSection;
|
|
7691
7799
|
const hasMultipleButtons = !!onClose;
|
|
@@ -8571,11 +8679,11 @@ Dialog.BottomBar = FunBottomBar;
|
|
|
8571
8679
|
// src/modals/WithdrwalModal/WithdrawalContent.tsx
|
|
8572
8680
|
import { FUNKIT_CONNECT_SUPPORTED_CHAINS_INFO as FUNKIT_CONNECT_SUPPORTED_CHAINS_INFO8 } from "@funkit/chains";
|
|
8573
8681
|
import {
|
|
8574
|
-
FlagKey as
|
|
8682
|
+
FlagKey as FlagKey15,
|
|
8575
8683
|
formatCryptoAndStringify as formatCryptoAndStringify2,
|
|
8576
8684
|
formatCurrencyAndStringify as formatCurrencyAndStringify3
|
|
8577
8685
|
} from "@funkit/utils";
|
|
8578
|
-
import React93, { useEffect as useEffect27, useState as useState27 } from "react";
|
|
8686
|
+
import React93, { useEffect as useEffect27, useMemo as useMemo13, useState as useState27 } from "react";
|
|
8579
8687
|
import { createPortal as createPortal2 } from "react-dom";
|
|
8580
8688
|
import { useDebounce } from "use-debounce";
|
|
8581
8689
|
import { useAccount as useAccount3 } from "wagmi";
|
|
@@ -8751,7 +8859,7 @@ var getRemoteImageStyles = (isRemoteImage, isRemoteImageLoaded, src) => {
|
|
|
8751
8859
|
import React85 from "react";
|
|
8752
8860
|
|
|
8753
8861
|
// src/components/Dropdown/ChainDropdown.tsx
|
|
8754
|
-
import { FlagKey as
|
|
8862
|
+
import { FlagKey as FlagKey9 } from "@funkit/utils";
|
|
8755
8863
|
import React82 from "react";
|
|
8756
8864
|
|
|
8757
8865
|
// src/components/Dropdown/BaseDropdown.tsx
|
|
@@ -9660,9 +9768,9 @@ var ChainDropdown = ({
|
|
|
9660
9768
|
maxDropdownHeight,
|
|
9661
9769
|
tagComponent
|
|
9662
9770
|
}) => {
|
|
9663
|
-
const defaultChainIdJson = useFlag(
|
|
9771
|
+
const defaultChainIdJson = useFlag(FlagKey9.TokenTransferDefaultChainId);
|
|
9664
9772
|
const defaultChainId = safeJSONParse(defaultChainIdJson);
|
|
9665
|
-
const chainSortOrderJson = useFlag(
|
|
9773
|
+
const chainSortOrderJson = useFlag(FlagKey9.ChainIdSortOrder);
|
|
9666
9774
|
const chainSortOrder = safeJSONParse(chainSortOrderJson) || [];
|
|
9667
9775
|
const chainIds = getSortedChainIds();
|
|
9668
9776
|
const options = allowUnselect ? [DEFAULT_VALUE, ...chainIds] : chainIds;
|
|
@@ -9769,7 +9877,7 @@ var ChainDropdown = ({
|
|
|
9769
9877
|
};
|
|
9770
9878
|
|
|
9771
9879
|
// src/components/Dropdown/TokenDropdown.tsx
|
|
9772
|
-
import { FlagKey as
|
|
9880
|
+
import { FlagKey as FlagKey10, safeParseJson as safeParseJson3 } from "@funkit/utils";
|
|
9773
9881
|
import React84, { useState as useState20 } from "react";
|
|
9774
9882
|
|
|
9775
9883
|
// src/utils/tokenIconUrl.ts
|
|
@@ -9868,10 +9976,10 @@ var NewTokenBadge = ({ iconSymbol }) => {
|
|
|
9868
9976
|
// src/components/Dropdown/TokenDropdown.tsx
|
|
9869
9977
|
var TOKEN_ICON_SIZE = 16;
|
|
9870
9978
|
var useNewTokens = () => {
|
|
9871
|
-
const bannerJson = useFlag(
|
|
9872
|
-
const bannerData =
|
|
9873
|
-
const newBadgeTokensJson = useFlag(
|
|
9874
|
-
const newBadgeData =
|
|
9979
|
+
const bannerJson = useFlag(FlagKey10.NewTokenAssetSelectionBanner);
|
|
9980
|
+
const bannerData = safeParseJson3(bannerJson);
|
|
9981
|
+
const newBadgeTokensJson = useFlag(FlagKey10.TokenTransferNewTokens);
|
|
9982
|
+
const newBadgeData = safeParseJson3(newBadgeTokensJson);
|
|
9875
9983
|
const newTokens = newBadgeData && Object.values(newBadgeData).flat();
|
|
9876
9984
|
const newUniqueTokens = new Set(newTokens);
|
|
9877
9985
|
const newSymbol = bannerData && newUniqueTokens.has(bannerData.symbol) ? bannerData.symbol : newTokens?.[0];
|
|
@@ -9886,7 +9994,7 @@ var TokenDropdown = ({
|
|
|
9886
9994
|
alwaysOpenToTop,
|
|
9887
9995
|
maxDropdownHeight
|
|
9888
9996
|
}) => {
|
|
9889
|
-
const defaultTokensJson = useFlag(
|
|
9997
|
+
const defaultTokensJson = useFlag(FlagKey10.TokenTransferDefaultTokens);
|
|
9890
9998
|
const defaultTokens = safeJSONParse(defaultTokensJson);
|
|
9891
9999
|
const enabledTokens = assets[selectedChainId];
|
|
9892
10000
|
const allTokens = getSortedTokens();
|
|
@@ -11469,20 +11577,21 @@ var useAssetSymbolPrice = ({
|
|
|
11469
11577
|
refetchInterval
|
|
11470
11578
|
});
|
|
11471
11579
|
return {
|
|
11472
|
-
...priceQuery,
|
|
11473
11580
|
asset: assetQuery.data,
|
|
11474
|
-
|
|
11581
|
+
error: assetQuery.error || priceQuery.error,
|
|
11582
|
+
isLoading: priceQuery.isLoading || assetQuery.isLoading,
|
|
11583
|
+
price: priceQuery.price
|
|
11475
11584
|
};
|
|
11476
11585
|
};
|
|
11477
11586
|
|
|
11478
11587
|
// src/hooks/useTokenChain.ts
|
|
11479
|
-
import { FlagKey as
|
|
11588
|
+
import { FlagKey as FlagKey12 } from "@funkit/utils";
|
|
11480
11589
|
import { useEffect as useEffect24, useState as useState22 } from "react";
|
|
11481
11590
|
import { polygon as polygon3 } from "viem/chains";
|
|
11482
11591
|
|
|
11483
11592
|
// src/hooks/useEnabledTokenTransferChainTokens.ts
|
|
11484
|
-
import { solanaChain as solanaChain3 } from "@funkit/chains";
|
|
11485
|
-
import { FlagKey as
|
|
11593
|
+
import { bitcoinChain, solanaChain as solanaChain3 } from "@funkit/chains";
|
|
11594
|
+
import { FlagKey as FlagKey11 } from "@funkit/utils";
|
|
11486
11595
|
import { base as base4 } from "viem/chains";
|
|
11487
11596
|
|
|
11488
11597
|
// src/hooks/useIsUsUser.ts
|
|
@@ -11504,14 +11613,15 @@ function useIsUsKatanaUser() {
|
|
|
11504
11613
|
// src/hooks/useEnabledTokenTransferChainTokens.ts
|
|
11505
11614
|
function useEnabledTokenTransferChainTokens(transferInit, isWithdrawal) {
|
|
11506
11615
|
const isBankrUsUser = useIsUsBankrUser();
|
|
11507
|
-
const depositAssets = useFlag(
|
|
11508
|
-
const withdrawalAssets = useFlag(
|
|
11616
|
+
const depositAssets = useFlag(FlagKey11.TokenTransferSourceChainsAndAssets);
|
|
11617
|
+
const withdrawalAssets = useFlag(FlagKey11.WithdrawalChainsAndAssets);
|
|
11509
11618
|
const assetsJsonString = isWithdrawal ? withdrawalAssets : depositAssets;
|
|
11510
11619
|
const assets = safeJSONParse(assetsJsonString);
|
|
11511
11620
|
if (!assets) {
|
|
11512
11621
|
return {};
|
|
11513
11622
|
}
|
|
11514
11623
|
const hasSolanaAddress = !!transferInit?.solanaAddr;
|
|
11624
|
+
const hasBitcoinAddress = !!transferInit?.btcAddrSegwit;
|
|
11515
11625
|
return Object.keys(assets).reduce(
|
|
11516
11626
|
(acc, curChainIdString) => {
|
|
11517
11627
|
const chainId = Number(curChainIdString);
|
|
@@ -11519,6 +11629,10 @@ function useEnabledTokenTransferChainTokens(transferInit, isWithdrawal) {
|
|
|
11519
11629
|
if (isSolana && !hasSolanaAddress && !isWithdrawal) {
|
|
11520
11630
|
return acc;
|
|
11521
11631
|
}
|
|
11632
|
+
const isBitcoin = chainId === bitcoinChain.id;
|
|
11633
|
+
if (isBitcoin && !hasBitcoinAddress && !isWithdrawal) {
|
|
11634
|
+
return acc;
|
|
11635
|
+
}
|
|
11522
11636
|
if (isBankrUsUser && chainId !== base4.id) {
|
|
11523
11637
|
return acc;
|
|
11524
11638
|
}
|
|
@@ -11537,7 +11651,7 @@ var useTokenAndChainSelection = (transferInit, defaultValues, isWithdrawal) => {
|
|
|
11537
11651
|
transferInit ?? null,
|
|
11538
11652
|
isWithdrawal
|
|
11539
11653
|
);
|
|
11540
|
-
const defaultChainIdFlag = useFlag(
|
|
11654
|
+
const defaultChainIdFlag = useFlag(FlagKey12.TokenTransferDefaultChainId);
|
|
11541
11655
|
const defaultChainId = defaultValues?.chainId ?? Number(defaultChainIdFlag);
|
|
11542
11656
|
const validDefaultChainId = filteredAssets[defaultChainId] !== void 0 ? defaultChainId : polygon3.id;
|
|
11543
11657
|
const [selectedChainId, setSelectedChainId] = useState22(validDefaultChainId);
|
|
@@ -11623,10 +11737,10 @@ import { ClientError as ClientError2 } from "@funkit/utils";
|
|
|
11623
11737
|
import { useState as useState25 } from "react";
|
|
11624
11738
|
|
|
11625
11739
|
// src/hooks/useIsBlacklisted.ts
|
|
11626
|
-
import { FlagKey as
|
|
11740
|
+
import { FlagKey as FlagKey13 } from "@funkit/utils";
|
|
11627
11741
|
import { useMemo as useMemo12 } from "react";
|
|
11628
11742
|
var useIsBlacklisted = (walletAddress, customRecipient) => {
|
|
11629
|
-
const flagStr = useFlag(
|
|
11743
|
+
const flagStr = useFlag(FlagKey13.AddressBlacklist);
|
|
11630
11744
|
const blacklist = useMemo12(
|
|
11631
11745
|
() => safeJSONParse(flagStr)?.map((addr) => addr.toLowerCase()) || [],
|
|
11632
11746
|
[flagStr]
|
|
@@ -11638,7 +11752,7 @@ var useIsBlacklisted = (walletAddress, customRecipient) => {
|
|
|
11638
11752
|
};
|
|
11639
11753
|
|
|
11640
11754
|
// src/providers/FunkitQuoteContext.tsx
|
|
11641
|
-
import { FlagKey as
|
|
11755
|
+
import { FlagKey as FlagKey14, isNotNullish as isNotNullish5 } from "@funkit/utils";
|
|
11642
11756
|
import React92, {
|
|
11643
11757
|
createContext as createContext14,
|
|
11644
11758
|
useCallback as useCallback16,
|
|
@@ -11739,7 +11853,7 @@ function FunkitQuoteProvider({ children }) {
|
|
|
11739
11853
|
const funkitConfig = useFunkitConfig();
|
|
11740
11854
|
const wagmiConfig = useConfig3();
|
|
11741
11855
|
const { walletAddress, logoutSymbol, loginType, userInfo } = useGeneralWallet();
|
|
11742
|
-
const enableFrogProxyServer = useFlag(
|
|
11856
|
+
const enableFrogProxyServer = useFlag(FlagKey14.EnableFrogProxyServer);
|
|
11743
11857
|
const { getDirectExecutionInfo } = useCheckoutDirectExecution();
|
|
11744
11858
|
const [latestQuote, setLatestQuote] = useState24(null);
|
|
11745
11859
|
const [isQuoting, setIsQuoting] = useState24(false);
|
|
@@ -12179,7 +12293,7 @@ function useWithdrawalAssets(config) {
|
|
|
12179
12293
|
},
|
|
12180
12294
|
true
|
|
12181
12295
|
);
|
|
12182
|
-
const excludedTokenStr = useFlag(
|
|
12296
|
+
const excludedTokenStr = useFlag(FlagKey15.WithdrawalExcludeTokens);
|
|
12183
12297
|
const excludedTokens = safeJSONParse(excludedTokenStr);
|
|
12184
12298
|
if (excludedTokens) {
|
|
12185
12299
|
for (const chainIdStr of Object.keys(excludedTokens)) {
|
|
@@ -12220,7 +12334,6 @@ var WithdrawContent = ({
|
|
|
12220
12334
|
onContinue,
|
|
12221
12335
|
config,
|
|
12222
12336
|
withdrawalItem
|
|
12223
|
-
// biome-ignore lint/complexity/noExcessiveCognitiveComplexity: <explanation>
|
|
12224
12337
|
}) => {
|
|
12225
12338
|
const sourceTokenBalance = withdrawalItem?.withdrawalSourceTokenBalance?.() || 0;
|
|
12226
12339
|
const token = config.sourceTokenSymbol;
|
|
@@ -12244,30 +12357,33 @@ var WithdrawContent = ({
|
|
|
12244
12357
|
handleTokenChange,
|
|
12245
12358
|
selectedChainName
|
|
12246
12359
|
} = useWithdrawalAssets(config);
|
|
12247
|
-
const
|
|
12360
|
+
const {
|
|
12361
|
+
asset: targetAssetInfo,
|
|
12362
|
+
error: targetAssetFetchError,
|
|
12363
|
+
price: targetUnitPrice
|
|
12364
|
+
} = useAssetSymbolPrice({
|
|
12248
12365
|
chainId: selectedChainId.toString(),
|
|
12249
12366
|
symbol: selectedToken,
|
|
12250
12367
|
refetchInterval: PRICE_REFRESH_INTERVAL
|
|
12251
12368
|
});
|
|
12252
|
-
const targetAssetAmount =
|
|
12369
|
+
const targetAssetAmount = targetUnitPrice ? Number(debouncedAmount) / targetUnitPrice : void 0;
|
|
12253
12370
|
useEffect27(() => {
|
|
12254
12371
|
setTimeout(() => {
|
|
12255
12372
|
updateTargetAssetAmount(targetAssetAmount ?? 0);
|
|
12256
12373
|
}, 0);
|
|
12257
12374
|
}, [targetAssetAmount, updateTargetAssetAmount]);
|
|
12258
12375
|
useEffect27(() => {
|
|
12259
|
-
|
|
12260
|
-
if (!asset) {
|
|
12376
|
+
if (!targetAssetInfo) {
|
|
12261
12377
|
return;
|
|
12262
12378
|
}
|
|
12263
12379
|
updateTargetAsset({
|
|
12264
|
-
targetAsset:
|
|
12380
|
+
targetAsset: targetAssetInfo.address,
|
|
12265
12381
|
targetChain: selectedChainId.toString(),
|
|
12266
|
-
targetAssetTicker:
|
|
12382
|
+
targetAssetTicker: targetAssetInfo.symbol,
|
|
12267
12383
|
targetAssetMinAmount: 0,
|
|
12268
12384
|
iconSrc: getTokenIconUrl(selectedToken)
|
|
12269
12385
|
});
|
|
12270
|
-
}, [
|
|
12386
|
+
}, [targetAssetInfo, updateTargetAsset, selectedChainId, selectedToken]);
|
|
12271
12387
|
const {
|
|
12272
12388
|
isLoading: isQuoteLoading,
|
|
12273
12389
|
data: quote,
|
|
@@ -12281,7 +12397,7 @@ var WithdrawContent = ({
|
|
|
12281
12397
|
sourceAmount: Number(debouncedAmount),
|
|
12282
12398
|
chainId: selectedChainId.toString(),
|
|
12283
12399
|
symbol: selectedToken,
|
|
12284
|
-
targetAsset:
|
|
12400
|
+
targetAsset: targetAssetInfo?.address
|
|
12285
12401
|
});
|
|
12286
12402
|
const {
|
|
12287
12403
|
isConnected,
|
|
@@ -12400,7 +12516,7 @@ var WithdrawContent = ({
|
|
|
12400
12516
|
const bottomSectionRef = useBottomSectionRef("withdrawal");
|
|
12401
12517
|
const showAddressError = addressInputTouched && !isValidAddress && recipientAddress !== "";
|
|
12402
12518
|
const showAmountError = amountInputTouched && amount !== "" && !isWithdrawAmountValid;
|
|
12403
|
-
const canContinue = recipientAddress && amount && token && selectedChainId && (
|
|
12519
|
+
const canContinue = recipientAddress && amount && token && selectedChainId && (quote || isPlaceholderData || isQuoteLoading && isInstantQuoting) && !showAmountError && !showAddressError && !isCheckingAddressRisk && !addressAssessment && isValidAddressAndChain && amount === debouncedAmount;
|
|
12404
12520
|
const { totalImpactUsd, gasUsd } = extractRelayFeeInfo(
|
|
12405
12521
|
quote?.baseQuote?.metadata
|
|
12406
12522
|
);
|
|
@@ -12408,6 +12524,24 @@ var WithdrawContent = ({
|
|
|
12408
12524
|
const receiveAmountFiat = quote || isInstantQuoting ? Number(debouncedAmount || 0) : 0;
|
|
12409
12525
|
const receiveAmountFiatTotal = receiveAmountFiat - totalImpactUsd - gasUsd;
|
|
12410
12526
|
const withdrawButtonText = getWithdrawButtonText();
|
|
12527
|
+
const errorNotification = useMemo13(() => {
|
|
12528
|
+
if (quoteErrorObject) {
|
|
12529
|
+
return {
|
|
12530
|
+
message: getRelayQuoteErrorDisplayMessage(quoteErrorObject.message),
|
|
12531
|
+
type: "default"
|
|
12532
|
+
};
|
|
12533
|
+
}
|
|
12534
|
+
if (withdrawalError) {
|
|
12535
|
+
return withdrawalError;
|
|
12536
|
+
}
|
|
12537
|
+
if (targetAssetFetchError) {
|
|
12538
|
+
return {
|
|
12539
|
+
message: "Failed to fetch asset price",
|
|
12540
|
+
type: "default"
|
|
12541
|
+
};
|
|
12542
|
+
}
|
|
12543
|
+
return null;
|
|
12544
|
+
}, [quoteErrorObject, targetAssetFetchError, withdrawalError]);
|
|
12411
12545
|
return /* @__PURE__ */ React93.createElement(Box, { id: "withdrawal-flow", display: "flex", flexDirection: "column", gap: "18" }, /* @__PURE__ */ React93.createElement(Box, { display: "flex", flexDirection: "column", gap: "8" }, /* @__PURE__ */ React93.createElement(Box, { display: "flex", flexDirection: "column", gap: "4" }, /* @__PURE__ */ React93.createElement(Text, { size: "12", weight: "medium" }, "Recipient address"), /* @__PURE__ */ React93.createElement(
|
|
12412
12546
|
FunInput,
|
|
12413
12547
|
{
|
|
@@ -12552,9 +12686,9 @@ var WithdrawContent = ({
|
|
|
12552
12686
|
topSection: /* @__PURE__ */ React93.createElement(
|
|
12553
12687
|
FunNotification,
|
|
12554
12688
|
{
|
|
12555
|
-
description:
|
|
12556
|
-
type:
|
|
12557
|
-
isVisible: !!
|
|
12689
|
+
description: errorNotification?.message,
|
|
12690
|
+
type: errorNotification?.type,
|
|
12691
|
+
isVisible: !!errorNotification
|
|
12558
12692
|
}
|
|
12559
12693
|
),
|
|
12560
12694
|
actionButtonProps: {
|
|
@@ -12594,7 +12728,7 @@ function getCheckoutCompletionTime(checkout) {
|
|
|
12594
12728
|
}
|
|
12595
12729
|
|
|
12596
12730
|
// src/components/FunCheckoutHistory/FunCheckoutHistoryDetail.tsx
|
|
12597
|
-
import React215, { useCallback as useCallback42, useMemo as
|
|
12731
|
+
import React215, { useCallback as useCallback42, useMemo as useMemo35, useState as useState61 } from "react";
|
|
12598
12732
|
import { createPortal as createPortal14 } from "react-dom";
|
|
12599
12733
|
|
|
12600
12734
|
// src/components/HelpAlert/HelpAlert.tsx
|
|
@@ -12944,10 +13078,10 @@ import { useAccount as useAccount6 } from "wagmi";
|
|
|
12944
13078
|
// src/components/FunPayments/FunPaymentMethods.tsx
|
|
12945
13079
|
import { BridgeCustomerStatus as BridgeCustomerStatus3 } from "@funkit/api-base";
|
|
12946
13080
|
import {
|
|
12947
|
-
FlagKey as
|
|
13081
|
+
FlagKey as FlagKey18,
|
|
12948
13082
|
formatCurrencyAndStringify as formatCurrencyAndStringify4,
|
|
12949
13083
|
formatSecondsToReadableForm,
|
|
12950
|
-
safeParseJson as
|
|
13084
|
+
safeParseJson as safeParseJson4
|
|
12951
13085
|
} from "@funkit/utils";
|
|
12952
13086
|
import React103 from "react";
|
|
12953
13087
|
|
|
@@ -13031,9 +13165,9 @@ var isSoftRejected = (customer) => customer && isKycUninitialized(customer.statu
|
|
|
13031
13165
|
var FIAT_PROCESSING_TIME = "1-2 business days";
|
|
13032
13166
|
|
|
13033
13167
|
// src/hooks/useCheckoutTimeEstimate.ts
|
|
13034
|
-
import { FlagKey as
|
|
13168
|
+
import { FlagKey as FlagKey16 } from "@funkit/utils";
|
|
13035
13169
|
function useCheckoutTimeEstimate(originalTimeEstimationMs, paymentMethod = "card" /* CARD */, bypassFlag = false) {
|
|
13036
|
-
const timeEstimatesJsonString = useFlag(
|
|
13170
|
+
const timeEstimatesJsonString = useFlag(FlagKey16.CheckoutTimeEstimateOverrides);
|
|
13037
13171
|
const timeEstimates = safeJSONParse(
|
|
13038
13172
|
timeEstimatesJsonString
|
|
13039
13173
|
);
|
|
@@ -13050,7 +13184,7 @@ import {
|
|
|
13050
13184
|
getBridgeKycLink
|
|
13051
13185
|
} from "@funkit/api-base";
|
|
13052
13186
|
import { FUNKIT_CONNECT_SUPPORTED_CHAINS_INFO as FUNKIT_CONNECT_SUPPORTED_CHAINS_INFO11 } from "@funkit/chains";
|
|
13053
|
-
import { FlagKey as
|
|
13187
|
+
import { FlagKey as FlagKey17 } from "@funkit/utils";
|
|
13054
13188
|
import { useQuery as useQuery11, useQueryClient } from "@tanstack/react-query";
|
|
13055
13189
|
import { useCallback as useCallback18 } from "react";
|
|
13056
13190
|
var sepaCountryCode = [
|
|
@@ -13130,8 +13264,8 @@ function useFiatEnabled() {
|
|
|
13130
13264
|
const isEuSepaUser = sepaCountryCode.includes(
|
|
13131
13265
|
userIpInfo?.alpha2 || "PLACEHOLDER"
|
|
13132
13266
|
);
|
|
13133
|
-
const isTokenTransferEnabled = useFlag(
|
|
13134
|
-
const isFiatEnabled = useFlag(
|
|
13267
|
+
const isTokenTransferEnabled = useFlag(FlagKey17.EnableTokenTransfer);
|
|
13268
|
+
const isFiatEnabled = useFlag(FlagKey17.EnableFiatDeposit);
|
|
13135
13269
|
return isEuSepaUser && isTokenTransferEnabled && isFiatEnabled;
|
|
13136
13270
|
}
|
|
13137
13271
|
function useFrogAccounts() {
|
|
@@ -13282,7 +13416,7 @@ import {
|
|
|
13282
13416
|
FUNKIT_CONNECT_CHECKOUT_NATIVE_CURRENCY_ADDRESS as FUNKIT_CONNECT_CHECKOUT_NATIVE_CURRENCY_ADDRESS3,
|
|
13283
13417
|
FUNKIT_CONNECT_SUPPORTED_CHAINS_INFO as FUNKIT_CONNECT_SUPPORTED_CHAINS_INFO12
|
|
13284
13418
|
} from "@funkit/chains";
|
|
13285
|
-
import { useMemo as
|
|
13419
|
+
import { useMemo as useMemo14 } from "react";
|
|
13286
13420
|
|
|
13287
13421
|
// src/utils/assets.ts
|
|
13288
13422
|
import { formatUnits } from "viem";
|
|
@@ -13340,7 +13474,7 @@ var processWalletAssets = (walletAssets, targetChain) => {
|
|
|
13340
13474
|
};
|
|
13341
13475
|
function useWalletAssetHoldings(targetChain) {
|
|
13342
13476
|
const { walletAssets, isLoading, totalWalletAssetsUsd } = useWalletAssets();
|
|
13343
|
-
const processedAssets =
|
|
13477
|
+
const processedAssets = useMemo14(
|
|
13344
13478
|
() => processWalletAssets(walletAssets, targetChain),
|
|
13345
13479
|
[targetChain, walletAssets]
|
|
13346
13480
|
);
|
|
@@ -14610,9 +14744,9 @@ var TransferPaymentMethodItem = ({
|
|
|
14610
14744
|
paymentIcon
|
|
14611
14745
|
}) => {
|
|
14612
14746
|
const { textCustomizations } = useFunkitConfig();
|
|
14613
|
-
const bannerJson = useFlag(
|
|
14614
|
-
const bannerData =
|
|
14615
|
-
const depositAssetsJson = useFlag(
|
|
14747
|
+
const bannerJson = useFlag(FlagKey18.NewTokenAssetSelectionBanner);
|
|
14748
|
+
const bannerData = safeParseJson4(bannerJson);
|
|
14749
|
+
const depositAssetsJson = useFlag(FlagKey18.TokenTransferSourceChainsAndAssets);
|
|
14616
14750
|
const depositAssetsData = safeJSONParse(depositAssetsJson);
|
|
14617
14751
|
const getTokenTransferIcon = () => {
|
|
14618
14752
|
const uniqueChainIds = new Set(Object.keys(depositAssetsData ?? {}));
|
|
@@ -14827,7 +14961,7 @@ var BankIconActive = ({ size = 20 }) => {
|
|
|
14827
14961
|
|
|
14828
14962
|
// src/components/FunConnectOptions/FunSignInStep.tsx
|
|
14829
14963
|
import { groupBy, isMobile as isMobile8, isSafari as isSafari3, redirectInMobile as redirectInMobile2 } from "@funkit/utils";
|
|
14830
|
-
import React209, { Fragment as Fragment2, useCallback as useCallback41, useMemo as
|
|
14964
|
+
import React209, { Fragment as Fragment2, useCallback as useCallback41, useMemo as useMemo34, useState as useState59 } from "react";
|
|
14831
14965
|
|
|
14832
14966
|
// src/providers/walletConnectDeepLink.ts
|
|
14833
14967
|
var storageKey2 = "WALLETCONNECT_DEEPLINK_CHOICE";
|
|
@@ -15245,7 +15379,7 @@ var SocialsIcon = () => {
|
|
|
15245
15379
|
};
|
|
15246
15380
|
|
|
15247
15381
|
// src/components/FunConnectOptions/FunConnectOptions.tsx
|
|
15248
|
-
import React208, { useCallback as useCallback40, useMemo as
|
|
15382
|
+
import React208, { useCallback as useCallback40, useMemo as useMemo33, useState as useState58 } from "react";
|
|
15249
15383
|
|
|
15250
15384
|
// src/hooks/useAnimatedNavigation.ts
|
|
15251
15385
|
import { useCallback as useCallback19, useState as useState29 } from "react";
|
|
@@ -15325,11 +15459,11 @@ import {
|
|
|
15325
15459
|
} from "react";
|
|
15326
15460
|
|
|
15327
15461
|
// src/hooks/useCheckoutQuoteNotification.ts
|
|
15328
|
-
import { useMemo as
|
|
15462
|
+
import { useMemo as useMemo15 } from "react";
|
|
15329
15463
|
function useCheckoutQuoteNotification() {
|
|
15330
15464
|
const { clearCheckoutQuoteMessages } = useQuoteContext();
|
|
15331
15465
|
const { quoteErrorMessage, quoteStepMessage } = useQuoteContext();
|
|
15332
|
-
const quoteNotification =
|
|
15466
|
+
const quoteNotification = useMemo15(() => {
|
|
15333
15467
|
if (quoteErrorMessage !== "") {
|
|
15334
15468
|
return {
|
|
15335
15469
|
messageType: "error",
|
|
@@ -16827,7 +16961,7 @@ function CheckoutHelp({
|
|
|
16827
16961
|
}
|
|
16828
16962
|
|
|
16829
16963
|
// src/modals/CheckoutModal/ConfirmationStep/ConfirmationStep.tsx
|
|
16830
|
-
import React149, { useEffect as useEffect34, useMemo as
|
|
16964
|
+
import React149, { useEffect as useEffect34, useMemo as useMemo20, useState as useState40 } from "react";
|
|
16831
16965
|
import { createPortal as createPortal7 } from "react-dom";
|
|
16832
16966
|
|
|
16833
16967
|
// src/providers/UserPresenceContext.tsx
|
|
@@ -16868,7 +17002,7 @@ import { DirectExecutionType as DirectExecutionType2 } from "@funkit/api-base";
|
|
|
16868
17002
|
|
|
16869
17003
|
// src/components/FunInfoBanner/FunInfoBanner.tsx
|
|
16870
17004
|
import React136 from "react";
|
|
16871
|
-
import { FlagKey as
|
|
17005
|
+
import { FlagKey as FlagKey19, safeParseJson as safeParseJson5 } from "@funkit/utils";
|
|
16872
17006
|
|
|
16873
17007
|
// src/components/FunInfoBanner/EphemeralInfoBanner.tsx
|
|
16874
17008
|
import React135, { useState as useState33 } from "react";
|
|
@@ -16906,8 +17040,8 @@ var EphemeralInfoBanner = ({
|
|
|
16906
17040
|
|
|
16907
17041
|
// src/components/FunInfoBanner/FunInfoBanner.tsx
|
|
16908
17042
|
var FunInfoBanner = () => {
|
|
16909
|
-
const bannerJson = useFlag(
|
|
16910
|
-
const bannerData =
|
|
17043
|
+
const bannerJson = useFlag(FlagKey19.ShowInfoBanner);
|
|
17044
|
+
const bannerData = safeParseJson5(bannerJson);
|
|
16911
17045
|
if (!bannerData || !bannerData.message) {
|
|
16912
17046
|
return null;
|
|
16913
17047
|
}
|
|
@@ -16929,7 +17063,7 @@ import {
|
|
|
16929
17063
|
} from "@funkit/utils";
|
|
16930
17064
|
import NumberFlow from "@number-flow/react";
|
|
16931
17065
|
import { motion as motion7 } from "motion/react";
|
|
16932
|
-
import React138, { useMemo as
|
|
17066
|
+
import React138, { useMemo as useMemo17 } from "react";
|
|
16933
17067
|
|
|
16934
17068
|
// src/consts/design.ts
|
|
16935
17069
|
var mapFontLineHeightToNumberFlowHeight = {
|
|
@@ -16948,7 +17082,7 @@ function useReceiveAmountLabel(_) {
|
|
|
16948
17082
|
// src/components/FunAssetAvatar/FunAssetAvatar.tsx
|
|
16949
17083
|
import { isNotNullish as isNotNullish6 } from "@funkit/utils";
|
|
16950
17084
|
import clsx16 from "clsx";
|
|
16951
|
-
import React137, { useMemo as
|
|
17085
|
+
import React137, { useMemo as useMemo16 } from "react";
|
|
16952
17086
|
|
|
16953
17087
|
// src/components/FunAssetAvatar/FunAssetAvatar.css.ts
|
|
16954
17088
|
var chainContainerStyle = "uwrdc22 _1rsrm2f18 _1rsrm2fa _1rsrm2f4 _1rsrm2f4g";
|
|
@@ -16968,7 +17102,7 @@ function FunAssetAvatar({
|
|
|
16968
17102
|
largeChainIcon = false
|
|
16969
17103
|
}) {
|
|
16970
17104
|
const chainMetadata = chainMetadataById[Number.parseInt((chainId || "").toString())] || null;
|
|
16971
|
-
const finalAssetSrc =
|
|
17105
|
+
const finalAssetSrc = useMemo16(() => {
|
|
16972
17106
|
const normalizedTicker = assetTicker?.toUpperCase() || "";
|
|
16973
17107
|
const defaultSrc = ASSET_LOGO_SRCS[normalizedTicker];
|
|
16974
17108
|
if (prioritizeDefaults) {
|
|
@@ -17068,7 +17202,7 @@ function PaymentAmountSummary({
|
|
|
17068
17202
|
})
|
|
17069
17203
|
});
|
|
17070
17204
|
const sourceTokenAmount = quote?.finalPaymentTokenAmount ? Number.parseFloat(quote.finalPaymentTokenAmount) : void 0;
|
|
17071
|
-
const paymentTokenUsdAmount =
|
|
17205
|
+
const paymentTokenUsdAmount = useMemo17(() => {
|
|
17072
17206
|
if (!quote) {
|
|
17073
17207
|
return void 0;
|
|
17074
17208
|
}
|
|
@@ -17076,7 +17210,7 @@ function PaymentAmountSummary({
|
|
|
17076
17210
|
quote.baseQuote.estSubtotalUsd + Number.parseFloat(quote.finalPaymentFeeUsd) - Number.parseFloat(quote.finalSpreadUsd)
|
|
17077
17211
|
);
|
|
17078
17212
|
}, [quote]);
|
|
17079
|
-
const receiveTokenUsdAmount =
|
|
17213
|
+
const receiveTokenUsdAmount = useMemo17(() => {
|
|
17080
17214
|
if (!quote) {
|
|
17081
17215
|
return void 0;
|
|
17082
17216
|
}
|
|
@@ -17395,7 +17529,7 @@ var DirectExecutionBrokerageAndCardAlert = () => {
|
|
|
17395
17529
|
};
|
|
17396
17530
|
|
|
17397
17531
|
// src/modals/CheckoutModal/ConfirmationStep/DisclaimerText.tsx
|
|
17398
|
-
import React144, { useMemo as
|
|
17532
|
+
import React144, { useMemo as useMemo18 } from "react";
|
|
17399
17533
|
var DisclaimerText = ({
|
|
17400
17534
|
continueText,
|
|
17401
17535
|
isCardPayment,
|
|
@@ -17430,7 +17564,7 @@ var DisclaimerText = ({
|
|
|
17430
17564
|
), ", and the ", /* @__PURE__ */ React144.createElement(FunLinkButton, { href: "https://morpho.org/", inline: true, text: "terms" }), " applicable to third-party Morpho vaults", ".") : /* @__PURE__ */ React144.createElement(React144.Fragment, null, showCardDisclaimer && `${cardDisclaimer} `, "By clicking on ", continueText, ", you agree to our", " ", /* @__PURE__ */ React144.createElement(FunLinkButton, { href: FUN_TERMS_URL, inline: true, text: "terms" }), ".");
|
|
17431
17565
|
};
|
|
17432
17566
|
function useCardDisclaimer(checkoutItem, finalConvertedAssetName) {
|
|
17433
|
-
const cardDisclaimer =
|
|
17567
|
+
const cardDisclaimer = useMemo18(() => {
|
|
17434
17568
|
if (!checkoutItem || !finalConvertedAssetName) {
|
|
17435
17569
|
return null;
|
|
17436
17570
|
}
|
|
@@ -18013,7 +18147,7 @@ function usePostCheckout({
|
|
|
18013
18147
|
}
|
|
18014
18148
|
|
|
18015
18149
|
// src/modals/CheckoutModal/ConfirmationStep/useQuoteRefresh.ts
|
|
18016
|
-
import { useCallback as useCallback26, useEffect as useEffect33, useMemo as
|
|
18150
|
+
import { useCallback as useCallback26, useEffect as useEffect33, useMemo as useMemo19, useRef as useRef15, useState as useState39 } from "react";
|
|
18017
18151
|
|
|
18018
18152
|
// src/hooks/useCountdown.tsx
|
|
18019
18153
|
import React148 from "react";
|
|
@@ -18276,7 +18410,7 @@ function useQuoteRefresh({
|
|
|
18276
18410
|
},
|
|
18277
18411
|
[isOnHold, restartCountdown, setCheckoutQuote, triggerAssetConfirm]
|
|
18278
18412
|
);
|
|
18279
|
-
const quoteError =
|
|
18413
|
+
const quoteError = useMemo19(() => {
|
|
18280
18414
|
if (quoteErrorMessage && !isQuoting) {
|
|
18281
18415
|
return {
|
|
18282
18416
|
message: quoteErrorMessage,
|
|
@@ -18409,7 +18543,7 @@ function ConfirmationStep({
|
|
|
18409
18543
|
refreshIntervalSeconds: directExecutionType === DirectExecutionType2.RELAY ? RELAY_ESTIMATE_REFRESH_INTERVAL_SEC : DEFAULT_ESTIMATE_REFRESH_INTERVAL_SEC
|
|
18410
18544
|
})
|
|
18411
18545
|
);
|
|
18412
|
-
const error =
|
|
18546
|
+
const error = useMemo20(() => {
|
|
18413
18547
|
if (!isInitialQuoting && moonpayAmountCheck?.isInvalid) {
|
|
18414
18548
|
return {
|
|
18415
18549
|
message: moonpayAmountCheck.message,
|
|
@@ -18424,7 +18558,7 @@ function ConfirmationStep({
|
|
|
18424
18558
|
quoteError,
|
|
18425
18559
|
isInitialQuoting
|
|
18426
18560
|
]);
|
|
18427
|
-
const stepMessage =
|
|
18561
|
+
const stepMessage = useMemo20(() => {
|
|
18428
18562
|
if (initialQuoteStep) {
|
|
18429
18563
|
return initialQuoteStep;
|
|
18430
18564
|
}
|
|
@@ -18481,7 +18615,7 @@ function ConfirmationStep({
|
|
|
18481
18615
|
const isStepLoading = isInitialQuoting || isContinuing || isRefreshing;
|
|
18482
18616
|
const uiCustomizations = funkitConfig.uiCustomizations?.confirmationScreen;
|
|
18483
18617
|
const customRecipient = checkoutItem?.initSettings.config.customRecipient;
|
|
18484
|
-
const showKatanaBridgeAlert =
|
|
18618
|
+
const showKatanaBridgeAlert = useMemo20(() => {
|
|
18485
18619
|
const relayQuoteMetadata = latestQuote?.baseQuote?.metadata;
|
|
18486
18620
|
if (!relayQuoteMetadata) {
|
|
18487
18621
|
return false;
|
|
@@ -18495,7 +18629,7 @@ function ConfirmationStep({
|
|
|
18495
18629
|
// https://fun-xyz.slack.com/archives/C08PVUDA1M2/p1752179735981389?thread_ts=1752176009.628309&cid=C08PVUDA1M2
|
|
18496
18630
|
swapImpact + appFeePercent > KATANA_BRIDGE_ALERT_THRESHOLD_PERCENT;
|
|
18497
18631
|
}, [funkitConfig.apiKey, latestQuote, checkoutItem]);
|
|
18498
|
-
const showDirectExecutionNotificationBanner =
|
|
18632
|
+
const showDirectExecutionNotificationBanner = useMemo20(() => {
|
|
18499
18633
|
const isRelayEnabled = checkoutItem !== null && getIsRelayEnabled({
|
|
18500
18634
|
fromChainId: checkoutItem.selectedSourceAssetInfo.chainId,
|
|
18501
18635
|
fromTokenAddress: checkoutItem.selectedSourceAssetInfo.address || "",
|
|
@@ -18747,7 +18881,7 @@ import { getMeldDefaultFiat } from "@funkit/api-base";
|
|
|
18747
18881
|
import { useQuery as useQuery13 } from "@tanstack/react-query";
|
|
18748
18882
|
|
|
18749
18883
|
// src/hooks/queries/useMeldCryptoCurrencyCode.ts
|
|
18750
|
-
import { FlagKey as
|
|
18884
|
+
import { FlagKey as FlagKey20 } from "@funkit/utils";
|
|
18751
18885
|
import { arbitrum as arbitrum3, base as base6, polygon as polygon5 } from "viem/chains";
|
|
18752
18886
|
var ARB_USDC = "0xaf88d065e77c8cC2239327C5EDb3A432268e5831".toLowerCase();
|
|
18753
18887
|
var POLYGON_USDC = "0x3c499c542cEF5E3811e1192ce70d8cC03d5c3359".toLowerCase();
|
|
@@ -18780,7 +18914,7 @@ function useMeldCryptoCurrencyCode() {
|
|
|
18780
18914
|
return mappedCurrency;
|
|
18781
18915
|
}
|
|
18782
18916
|
function useIsMeldEnabled() {
|
|
18783
|
-
const meldEnabled = useFlag(
|
|
18917
|
+
const meldEnabled = useFlag(FlagKey20.EnableMeldPayment);
|
|
18784
18918
|
const meldCurrencyCode = useMeldCryptoCurrencyCode();
|
|
18785
18919
|
return meldEnabled && !!meldCurrencyCode;
|
|
18786
18920
|
}
|
|
@@ -18892,16 +19026,35 @@ var useMeldLimitError = (amount, fiatCurrency) => {
|
|
|
18892
19026
|
return void 0;
|
|
18893
19027
|
};
|
|
18894
19028
|
|
|
19029
|
+
// src/hooks/useFiatExchangeRates.ts
|
|
19030
|
+
import { getFiatExchangeRates } from "@funkit/api-base";
|
|
19031
|
+
import { useQuery as useQuery15 } from "@tanstack/react-query";
|
|
19032
|
+
function useFiatExchangeRates(enabled = true) {
|
|
19033
|
+
const { data, isLoading, error } = useQuery15({
|
|
19034
|
+
queryKey: ["fiatExchangeRates"],
|
|
19035
|
+
queryFn: () => getFiatExchangeRates(),
|
|
19036
|
+
refetchOnMount: false,
|
|
19037
|
+
refetchOnReconnect: false,
|
|
19038
|
+
refetchOnWindowFocus: false,
|
|
19039
|
+
gcTime: 1e3 * 60 * 60,
|
|
19040
|
+
// 1 hour
|
|
19041
|
+
enabled
|
|
19042
|
+
});
|
|
19043
|
+
return { data, isLoading, error };
|
|
19044
|
+
}
|
|
19045
|
+
|
|
18895
19046
|
// src/modals/CheckoutModal/InputAmount/InputAmountLoaded.tsx
|
|
18896
|
-
import { MeldServiceProvider as MeldServiceProvider2 } from "@funkit/api-base";
|
|
18897
19047
|
import {
|
|
18898
|
-
|
|
19048
|
+
MeldServiceProvider as MeldServiceProvider2
|
|
19049
|
+
} from "@funkit/api-base";
|
|
19050
|
+
import {
|
|
19051
|
+
FlagKey as FlagKey23,
|
|
18899
19052
|
formatCryptoAndStringify as formatCryptoAndStringify4,
|
|
18900
19053
|
formatCurrencyAndStringify as formatCurrencyAndStringify9,
|
|
18901
19054
|
isTokenEquivalent as isTokenEquivalent5,
|
|
18902
19055
|
round as round4
|
|
18903
19056
|
} from "@funkit/utils";
|
|
18904
|
-
import React163, { useMemo as
|
|
19057
|
+
import React163, { useMemo as useMemo22 } from "react";
|
|
18905
19058
|
|
|
18906
19059
|
// src/components/CurrencySelector/CurrencySelector.tsx
|
|
18907
19060
|
import React152 from "react";
|
|
@@ -19167,7 +19320,7 @@ var MeldProviderLabel = ({
|
|
|
19167
19320
|
};
|
|
19168
19321
|
|
|
19169
19322
|
// src/components/SourcePaymentMethodItem/SourcePaymentMethodItem.tsx
|
|
19170
|
-
import { FlagKey as
|
|
19323
|
+
import { FlagKey as FlagKey21 } from "@funkit/utils";
|
|
19171
19324
|
import clsx17 from "clsx";
|
|
19172
19325
|
import { useAnimate as useAnimate2 } from "motion/react";
|
|
19173
19326
|
import React157 from "react";
|
|
@@ -19772,8 +19925,8 @@ var SourcePaymentMethodItem = ({
|
|
|
19772
19925
|
icon: /* @__PURE__ */ React157.createElement(MasterCardPillIcon, { key: "mastercard", backdropColor })
|
|
19773
19926
|
}
|
|
19774
19927
|
];
|
|
19775
|
-
const isCardEnabled = useFlag(
|
|
19776
|
-
const isBrokerageEnabled = useFlag(
|
|
19928
|
+
const isCardEnabled = useFlag(FlagKey21.EnableCard);
|
|
19929
|
+
const isBrokerageEnabled = useFlag(FlagKey21.EnableBrokerage);
|
|
19777
19930
|
const usableAlternativeIcons = icons.filter(({ paymentMethod }) => {
|
|
19778
19931
|
if (paymentMethod === type || paymentMethod === "card" /* CARD */ && !isCardEnabled || paymentMethod === "brokerage" /* BROKERAGE */ && !isBrokerageEnabled) {
|
|
19779
19932
|
return false;
|
|
@@ -20082,7 +20235,7 @@ var useMeldLink = (sourceAmount, sourceCurrencyCode = "USD") => {
|
|
|
20082
20235
|
|
|
20083
20236
|
// src/modals/CheckoutModal/MeldQuotes/useMeldQuotes.tsx
|
|
20084
20237
|
import { getMeldQuotes } from "@funkit/api-base";
|
|
20085
|
-
import { useQuery as
|
|
20238
|
+
import { useQuery as useQuery16 } from "@tanstack/react-query";
|
|
20086
20239
|
import { useDebounce as useDebounce2 } from "use-debounce";
|
|
20087
20240
|
var DEBOUNCE_DELAY = 500;
|
|
20088
20241
|
var COUNTDOWN_INTERVAL_SEC = 60;
|
|
@@ -20095,7 +20248,7 @@ var useMeldQuotes = (sourceAmount, fiatCurrency) => {
|
|
|
20095
20248
|
const destinationCurrencyCode = useMeldCryptoCurrencyCode();
|
|
20096
20249
|
const isPolymarket = isPolymarketCustomer(apiKey);
|
|
20097
20250
|
const sourceCurrencyCode = fiatCurrency || "USD";
|
|
20098
|
-
const query =
|
|
20251
|
+
const query = useQuery16({
|
|
20099
20252
|
queryKey: [
|
|
20100
20253
|
"meld",
|
|
20101
20254
|
"quotes",
|
|
@@ -20148,6 +20301,22 @@ var useMeldQuotes = (sourceAmount, fiatCurrency) => {
|
|
|
20148
20301
|
};
|
|
20149
20302
|
};
|
|
20150
20303
|
|
|
20304
|
+
// src/utils/getExchangeRate.ts
|
|
20305
|
+
var DEFAULT_BIPS_MARKUP = 500;
|
|
20306
|
+
var getExchangeRate = (currency, currencyExchangeRates, bipsMarkup = DEFAULT_BIPS_MARKUP) => {
|
|
20307
|
+
if (!currency || !currencyExchangeRates) {
|
|
20308
|
+
return void 0;
|
|
20309
|
+
}
|
|
20310
|
+
if (currency === "USD") {
|
|
20311
|
+
return 1;
|
|
20312
|
+
}
|
|
20313
|
+
const exchangeRate = currency in currencyExchangeRates ? currencyExchangeRates[currency] : void 0;
|
|
20314
|
+
if (!exchangeRate) {
|
|
20315
|
+
return void 0;
|
|
20316
|
+
}
|
|
20317
|
+
return exchangeRate * (1 + bipsMarkup / 1e4);
|
|
20318
|
+
};
|
|
20319
|
+
|
|
20151
20320
|
// src/components/Icons/SwitchIcon.tsx
|
|
20152
20321
|
import React160 from "react";
|
|
20153
20322
|
var SwitchIcon = () => {
|
|
@@ -20363,7 +20532,7 @@ function InputAmountLayout({
|
|
|
20363
20532
|
}
|
|
20364
20533
|
|
|
20365
20534
|
// src/modals/CheckoutModal/InputAmount/QuickOptions.tsx
|
|
20366
|
-
import { FlagKey as
|
|
20535
|
+
import { FlagKey as FlagKey22, clamp as clamp2, formatCurrencyAndStringify as formatCurrencyAndStringify8 } from "@funkit/utils";
|
|
20367
20536
|
import React162 from "react";
|
|
20368
20537
|
var USD_AMOUNT_OPTIONS_PCT = [25, 50, 75, 100];
|
|
20369
20538
|
function deduplicateArray(arr) {
|
|
@@ -20371,7 +20540,7 @@ function deduplicateArray(arr) {
|
|
|
20371
20540
|
}
|
|
20372
20541
|
function useFiatAmountOptions(currency) {
|
|
20373
20542
|
const isMeldEnabled = useIsMeldEnabled();
|
|
20374
|
-
const currencyQuickOptionStr = useFlag(
|
|
20543
|
+
const currencyQuickOptionStr = useFlag(FlagKey22.MeldQuickOptions);
|
|
20375
20544
|
const currencyQuickOption = safeJSONParse(
|
|
20376
20545
|
currencyQuickOptionStr
|
|
20377
20546
|
);
|
|
@@ -20439,7 +20608,7 @@ var QuickOptions = ({
|
|
|
20439
20608
|
import {
|
|
20440
20609
|
useCallback as useCallback29,
|
|
20441
20610
|
useEffect as useEffect35,
|
|
20442
|
-
useMemo as
|
|
20611
|
+
useMemo as useMemo21,
|
|
20443
20612
|
useReducer as useReducer3,
|
|
20444
20613
|
useRef as useRef17,
|
|
20445
20614
|
useState as useState42
|
|
@@ -20508,9 +20677,11 @@ function initializeState({
|
|
|
20508
20677
|
paymentMethod,
|
|
20509
20678
|
quickOptions,
|
|
20510
20679
|
sourceHolding,
|
|
20511
|
-
unitPrice: realUnitPrice
|
|
20680
|
+
unitPrice: realUnitPrice,
|
|
20681
|
+
fiatCurrencyExchangeRate,
|
|
20682
|
+
meldEnabled
|
|
20512
20683
|
}) {
|
|
20513
|
-
const { targetAssetAmount, targetChain, targetAssetTicker } = checkoutConfig;
|
|
20684
|
+
const { targetAssetAmount, targetChain, targetAssetTicker, isDefiMode } = checkoutConfig;
|
|
20514
20685
|
const isInputInFiat = true;
|
|
20515
20686
|
const unitPrice = isStablecoin(targetAssetTicker) ? 1 : realUnitPrice;
|
|
20516
20687
|
const usdAvailableAmount = getUsdAvailableAmount(
|
|
@@ -20542,14 +20713,24 @@ function initializeState({
|
|
|
20542
20713
|
if (defaultAmount !== void 0) {
|
|
20543
20714
|
return defaultAmount;
|
|
20544
20715
|
}
|
|
20716
|
+
const targetAssetFiat = typeof targetAssetAmount !== "undefined" ? targetAssetAmount * unitPrice : void 0;
|
|
20545
20717
|
if (paymentMethod === "balance" /* ACCOUNT_BALANCE */) {
|
|
20718
|
+
if (isDefiMode && typeof targetAssetFiat !== "undefined" && usdAvailableAmount !== null && usdAvailableAmount >= targetAssetFiat) {
|
|
20719
|
+
return targetAssetFiat;
|
|
20720
|
+
}
|
|
20546
20721
|
return calcInitialFiatAmount(usdAvailableAmount ?? 0);
|
|
20547
20722
|
}
|
|
20723
|
+
if (isDefiMode && !meldEnabled && typeof targetAssetFiat !== "undefined") {
|
|
20724
|
+
return targetAssetFiat;
|
|
20725
|
+
}
|
|
20726
|
+
if (typeof targetAssetFiat !== "undefined" && typeof fiatCurrencyExchangeRate !== "undefined" && isDefiMode) {
|
|
20727
|
+
return targetAssetFiat * fiatCurrencyExchangeRate;
|
|
20728
|
+
}
|
|
20548
20729
|
if (paymentMethod === "card" /* CARD */) {
|
|
20549
20730
|
return getDefaultAmountFromQuickOptions(quickOptions);
|
|
20550
20731
|
}
|
|
20551
|
-
if (
|
|
20552
|
-
return
|
|
20732
|
+
if (typeof targetAssetFiat !== "undefined") {
|
|
20733
|
+
return targetAssetFiat;
|
|
20553
20734
|
}
|
|
20554
20735
|
return USD_INITIAL_AMOUNT;
|
|
20555
20736
|
}
|
|
@@ -20562,7 +20743,9 @@ function initializeState({
|
|
|
20562
20743
|
locale,
|
|
20563
20744
|
usdAvailableAmount,
|
|
20564
20745
|
usdMaxAmount,
|
|
20565
|
-
usdMinAmount
|
|
20746
|
+
usdMinAmount,
|
|
20747
|
+
fiatCurrencyExchangeRate,
|
|
20748
|
+
meldEnabled
|
|
20566
20749
|
};
|
|
20567
20750
|
}
|
|
20568
20751
|
function reduceState(state, action) {
|
|
@@ -20686,7 +20869,7 @@ var MAX_WIDTH = 310;
|
|
|
20686
20869
|
function useAmountInput(options) {
|
|
20687
20870
|
const isMeldEnabled = useIsMeldEnabled();
|
|
20688
20871
|
const [state, dispatch] = useReducer3(reduceState, options, initializeState);
|
|
20689
|
-
const derivedState =
|
|
20872
|
+
const derivedState = useMemo21(() => getDerivedState(state), [state]);
|
|
20690
20873
|
const inputRef = useRef17(null);
|
|
20691
20874
|
const { inputValue, locale } = state;
|
|
20692
20875
|
const { inputDecimals, inputPrefix, placeholder } = derivedState;
|
|
@@ -21018,22 +21201,26 @@ function InputAmountLoaded({
|
|
|
21018
21201
|
onClose,
|
|
21019
21202
|
sourceHolding,
|
|
21020
21203
|
unitPrice,
|
|
21204
|
+
currencyExchangeRates,
|
|
21021
21205
|
defaultFiatCurrency,
|
|
21022
21206
|
textCustomizations
|
|
21023
21207
|
}) {
|
|
21024
|
-
const maxCheckoutUsdString = useFlag(
|
|
21208
|
+
const maxCheckoutUsdString = useFlag(FlagKey23.MaxCheckoutUsd);
|
|
21025
21209
|
const isSourceNavWidgetEnabled = modalState.startingStep === "select_asset" /* SELECT_ASSET */;
|
|
21026
21210
|
const { paymentMethod } = modalState.paymentMethodInfo;
|
|
21027
21211
|
const { quote: manuallySelectedQuote } = modalState;
|
|
21028
21212
|
const isCardCheckout = paymentMethod === "card" /* CARD */;
|
|
21029
21213
|
const meldEnabled = useIsMeldEnabled() && isCardCheckout;
|
|
21030
21214
|
const { targetAssetTicker, targetAssetMinAmount } = checkoutConfig;
|
|
21031
|
-
const { updateTargetAssetAmount } = useCheckoutContext();
|
|
21215
|
+
const { updateTargetAssetAmount, checkoutItem } = useCheckoutContext();
|
|
21032
21216
|
const { apiKey } = useFunkitConfig();
|
|
21033
|
-
const { checkoutItem } = useCheckoutContext();
|
|
21034
21217
|
const minUsd = targetAssetMinAmount && unitPrice ? Math.ceil(targetAssetMinAmount * unitPrice * 100) / 100 : void 0;
|
|
21035
21218
|
const fiatCurrency = modalState.fiatCurrency ?? defaultFiatCurrency;
|
|
21036
21219
|
const quickOptions = useFiatAmountOptions(fiatCurrency);
|
|
21220
|
+
const fiatCurrencyExchangeRate = getExchangeRate(
|
|
21221
|
+
fiatCurrency,
|
|
21222
|
+
currencyExchangeRates
|
|
21223
|
+
);
|
|
21037
21224
|
const {
|
|
21038
21225
|
assetAmount,
|
|
21039
21226
|
fiatAmount,
|
|
@@ -21062,7 +21249,9 @@ function InputAmountLoaded({
|
|
|
21062
21249
|
paymentMethod,
|
|
21063
21250
|
quickOptions,
|
|
21064
21251
|
sourceHolding,
|
|
21065
|
-
unitPrice
|
|
21252
|
+
unitPrice,
|
|
21253
|
+
fiatCurrencyExchangeRate,
|
|
21254
|
+
meldEnabled
|
|
21066
21255
|
});
|
|
21067
21256
|
const {
|
|
21068
21257
|
meldQuotesQuery,
|
|
@@ -21073,7 +21262,7 @@ function InputAmountLoaded({
|
|
|
21073
21262
|
selectedQuote,
|
|
21074
21263
|
isSelectedQuoteUnavailable
|
|
21075
21264
|
} = useMeld(manuallySelectedQuote, fiatAmount, fiatCurrency);
|
|
21076
|
-
const error =
|
|
21265
|
+
const error = useMemo22(() => {
|
|
21077
21266
|
if (isCardCheckout) {
|
|
21078
21267
|
if (isSelectedQuoteUnavailable) {
|
|
21079
21268
|
return {
|
|
@@ -21118,8 +21307,8 @@ function InputAmountLoaded({
|
|
|
21118
21307
|
if (assetAmount2 === void 0) {
|
|
21119
21308
|
return;
|
|
21120
21309
|
}
|
|
21121
|
-
updateTargetAssetAmount(assetAmount2);
|
|
21122
21310
|
if (!meldEnabled) {
|
|
21311
|
+
updateTargetAssetAmount(assetAmount2);
|
|
21123
21312
|
onNext({});
|
|
21124
21313
|
return;
|
|
21125
21314
|
}
|
|
@@ -21358,7 +21547,7 @@ function YouPayYouReceiveWrapper({
|
|
|
21358
21547
|
|
|
21359
21548
|
// src/modals/CheckoutModal/InputAmount/InputAmountLoading.tsx
|
|
21360
21549
|
import { formatCryptoAndStringify as formatCryptoAndStringify5 } from "@funkit/utils";
|
|
21361
|
-
import React164, { useMemo as
|
|
21550
|
+
import React164, { useMemo as useMemo23 } from "react";
|
|
21362
21551
|
function InputAmountLoading({
|
|
21363
21552
|
modalState,
|
|
21364
21553
|
sourceHoldingError,
|
|
@@ -21370,7 +21559,7 @@ function InputAmountLoading({
|
|
|
21370
21559
|
const isSourceNavWidgetEnabled = modalState.startingStep === "select_asset" /* SELECT_ASSET */;
|
|
21371
21560
|
const targetAssetAmount = checkoutItem?.initSettings.config.targetAssetAmount;
|
|
21372
21561
|
const targetAssetTicker = checkoutItem?.initSettings.config.targetAssetTicker;
|
|
21373
|
-
const error =
|
|
21562
|
+
const error = useMemo23(() => {
|
|
21374
21563
|
if (sourceHoldingError) {
|
|
21375
21564
|
return {
|
|
21376
21565
|
message: /* @__PURE__ */ React164.createElement("div", null, "Unable to retrieve your account balance. Please try re-linking your account.", " "),
|
|
@@ -21450,7 +21639,7 @@ function InputAmountLoading({
|
|
|
21450
21639
|
}
|
|
21451
21640
|
|
|
21452
21641
|
// src/modals/CheckoutModal/InputAmount/useAvailableBalanceForCheckout.ts
|
|
21453
|
-
import { useMemo as
|
|
21642
|
+
import { useMemo as useMemo24 } from "react";
|
|
21454
21643
|
function useAvailableBalanceForCheckout(paymentMethodInfo, targetChainId, assetChainId, assetSymbol) {
|
|
21455
21644
|
const { data: walletAssetHoldings, isLoading: isLoadingWalletAssetHoldings } = useWalletAssetHoldings(targetChainId);
|
|
21456
21645
|
const holdings = {
|
|
@@ -21460,7 +21649,7 @@ function useAvailableBalanceForCheckout(paymentMethodInfo, targetChainId, assetC
|
|
|
21460
21649
|
["token_transfer" /* TOKEN_TRANSFER */]: null,
|
|
21461
21650
|
["virtual_bank" /* VIRTUAL_BANK */]: null
|
|
21462
21651
|
}[paymentMethodInfo.paymentMethod];
|
|
21463
|
-
const holdingItem =
|
|
21652
|
+
const holdingItem = useMemo24(() => {
|
|
21464
21653
|
if (!assetSymbol || !holdings) {
|
|
21465
21654
|
return;
|
|
21466
21655
|
}
|
|
@@ -21519,7 +21708,7 @@ var InputAmountInfo = {
|
|
|
21519
21708
|
disableBack: ({ state, isSourceNavWidgetEnabled }) => state.paymentMethodInfo?.paymentMethod === "card" /* CARD */ && isSourceNavWidgetEnabled
|
|
21520
21709
|
};
|
|
21521
21710
|
function InputAmount(props) {
|
|
21522
|
-
const { paymentMethodInfo } = props.modalState;
|
|
21711
|
+
const { paymentMethodInfo, isDefiMode } = props.modalState;
|
|
21523
21712
|
const { textCustomizations } = useFunkitConfig();
|
|
21524
21713
|
const { setCheckoutQuote } = useQuoteContext();
|
|
21525
21714
|
const { checkoutItem } = useCheckoutContext();
|
|
@@ -21533,6 +21722,10 @@ function InputAmount(props) {
|
|
|
21533
21722
|
checkoutItem?.selectedSourceAssetInfo.chainId ?? "",
|
|
21534
21723
|
checkoutItem?.selectedSourceAssetInfo.symbol ?? null
|
|
21535
21724
|
);
|
|
21725
|
+
const {
|
|
21726
|
+
data: currencyExchangeRates,
|
|
21727
|
+
isLoading: isCurrencyExchangeRatesLoading
|
|
21728
|
+
} = useFiatExchangeRates(!!isDefiMode);
|
|
21536
21729
|
const { data: defaultCurrency, isLoading: isMeldDefaultCurrencyLoading } = useMeldDefaultCurrency(paymentMethodInfo.paymentMethod);
|
|
21537
21730
|
const isMeld = paymentMethodInfo.paymentMethod === "card" /* CARD */;
|
|
21538
21731
|
useMeldCurrencies(isMeld);
|
|
@@ -21541,7 +21734,9 @@ function InputAmount(props) {
|
|
|
21541
21734
|
chainId: checkoutItem?.initSettings.config.targetChain,
|
|
21542
21735
|
assetTokenAddress: checkoutItem?.initSettings.config.targetAsset
|
|
21543
21736
|
});
|
|
21544
|
-
const
|
|
21737
|
+
const skipExchangeRates = paymentMethodInfo.paymentMethod !== "card" /* CARD */ || !isDefiMode;
|
|
21738
|
+
const exchangeRatesLoaded = !isCurrencyExchangeRatesLoading && !!currencyExchangeRates;
|
|
21739
|
+
const isLoaded = !!(checkoutItem && unitPrice && !sourceHoldingError && !isLoadingSourceHolding && !isMeldDefaultCurrencyLoading && (skipExchangeRates || exchangeRatesLoaded));
|
|
21545
21740
|
useEffect36(() => setCheckoutQuote(null), []);
|
|
21546
21741
|
if (isLoaded) {
|
|
21547
21742
|
return /* @__PURE__ */ React165.createElement(
|
|
@@ -21551,6 +21746,7 @@ function InputAmount(props) {
|
|
|
21551
21746
|
checkoutConfig: checkoutItem.initSettings.config,
|
|
21552
21747
|
sourceHolding: sourceHolding ?? null,
|
|
21553
21748
|
unitPrice,
|
|
21749
|
+
currencyExchangeRates,
|
|
21554
21750
|
defaultFiatCurrency: defaultCurrency,
|
|
21555
21751
|
textCustomizations: textCustomizations.confirmationScreen
|
|
21556
21752
|
}
|
|
@@ -21576,14 +21772,14 @@ import { mainnet as mainnet8, polygon as polygon6 } from "viem/chains";
|
|
|
21576
21772
|
var ASSETS_LOW_VALUE_THRESHOLD2 = 0.1;
|
|
21577
21773
|
|
|
21578
21774
|
// src/hooks/usePaymentSources.ts
|
|
21579
|
-
import { FlagKey as
|
|
21775
|
+
import { FlagKey as FlagKey24, isNotNullish as isNotNullish8 } from "@funkit/utils";
|
|
21580
21776
|
function usePaymentMethodEnablement({
|
|
21581
21777
|
checkoutConfig
|
|
21582
21778
|
}) {
|
|
21583
21779
|
const { apiKey } = useFunkitConfig();
|
|
21584
|
-
const isTokenTransferFlagEnabled = useFlag(
|
|
21780
|
+
const isTokenTransferFlagEnabled = useFlag(FlagKey24.EnableTokenTransfer);
|
|
21585
21781
|
const isFiatFlagEnabled = useFiatEnabled();
|
|
21586
|
-
const isCardFlagEnabled = useFlag(
|
|
21782
|
+
const isCardFlagEnabled = useFlag(FlagKey24.EnableCard);
|
|
21587
21783
|
const isKatanaEarnFlowAction = isKatanaEarnFlow({ apiKey, checkoutConfig });
|
|
21588
21784
|
const isUsKatanaUser = useIsUsKatanaUser();
|
|
21589
21785
|
const isFiatEnabled = isFiatFlagEnabled && !isKatanaEarnFlowAction;
|
|
@@ -21959,7 +22155,7 @@ function LoadingAccount({
|
|
|
21959
22155
|
|
|
21960
22156
|
// src/modals/CheckoutModal/MeldCurrencySelect/MeldCurrencySelect.tsx
|
|
21961
22157
|
import clsx18 from "clsx";
|
|
21962
|
-
import React169, { useMemo as
|
|
22158
|
+
import React169, { useMemo as useMemo25, useState as useState43 } from "react";
|
|
21963
22159
|
|
|
21964
22160
|
// src/css/scrollStyles.css.ts
|
|
21965
22161
|
var hideScrollBar = "_163ehmk0";
|
|
@@ -22015,7 +22211,7 @@ function MeldCurrencySelect({
|
|
|
22015
22211
|
const [selectedCurrency, setSelectedCurrency] = useState43(
|
|
22016
22212
|
defaultCurrency
|
|
22017
22213
|
);
|
|
22018
|
-
const filteredOptions =
|
|
22214
|
+
const filteredOptions = useMemo25(() => {
|
|
22019
22215
|
const newOptions = data?.filter(
|
|
22020
22216
|
({ name, currencyCode }) => currencyCode.toLowerCase().includes(query.toLowerCase()) || name.toLowerCase().includes(query.toLowerCase())
|
|
22021
22217
|
) ?? [];
|
|
@@ -22151,7 +22347,7 @@ function MeldQuotes({
|
|
|
22151
22347
|
}
|
|
22152
22348
|
|
|
22153
22349
|
// src/modals/CheckoutModal/MoonpaySetup.tsx
|
|
22154
|
-
import React172, { useCallback as useCallback30, useMemo as
|
|
22350
|
+
import React172, { useCallback as useCallback30, useMemo as useMemo27, useState as useState45 } from "react";
|
|
22155
22351
|
|
|
22156
22352
|
// src/components/FunPayments/FunPaymentMoonpayType.css.ts
|
|
22157
22353
|
var mpClass = "_1kmpeyf0";
|
|
@@ -22160,7 +22356,7 @@ var stretchStyle = "_1kmpeyf1";
|
|
|
22160
22356
|
// src/components/FunPayments/FunPaymentMoonpayType.tsx
|
|
22161
22357
|
import { getMoonpayUrlSignature } from "@funkit/api-base";
|
|
22162
22358
|
import { colorToHex } from "@funkit/utils";
|
|
22163
|
-
import React171, { Fragment, useEffect as useEffect38, useMemo as
|
|
22359
|
+
import React171, { Fragment, useEffect as useEffect38, useMemo as useMemo26, useState as useState44 } from "react";
|
|
22164
22360
|
var LazyMoonPayBuyWidget = (props) => {
|
|
22165
22361
|
const [MoonPayBuyWidget, setMoonPayBuyWidget] = useState44(null);
|
|
22166
22362
|
useEffect38(() => {
|
|
@@ -22191,7 +22387,7 @@ function FunPaymentMoonpayType({
|
|
|
22191
22387
|
const isSandboxMode = useIsFunkitSandboxMode();
|
|
22192
22388
|
const funkitConfig = useFunkitConfig();
|
|
22193
22389
|
const { userInfo } = useGeneralWallet();
|
|
22194
|
-
const currencyCode =
|
|
22390
|
+
const currencyCode = useMemo26(() => {
|
|
22195
22391
|
return generateMoonpayCurrencyCode(depositToken, depositTokenChainId);
|
|
22196
22392
|
}, [depositToken, depositTokenChainId]);
|
|
22197
22393
|
const depositTokenAmountStringFormatted = formatTokenAmountForMoonpay(
|
|
@@ -22214,7 +22410,7 @@ function FunPaymentMoonpayType({
|
|
|
22214
22410
|
});
|
|
22215
22411
|
return signature || "";
|
|
22216
22412
|
};
|
|
22217
|
-
const moonpayButtonColor =
|
|
22413
|
+
const moonpayButtonColor = useMemo26(() => {
|
|
22218
22414
|
const primaryButtonHex = colorToHex(activeTheme.colors.buttonPrimary);
|
|
22219
22415
|
if (["#FFF", "#FFFF", "#FFFFFF", "#FFFFFFFF"].includes(primaryButtonHex)) {
|
|
22220
22416
|
return void 0;
|
|
@@ -22277,7 +22473,7 @@ function MoonpaySetup({
|
|
|
22277
22473
|
depositAddress: paymentAddress
|
|
22278
22474
|
});
|
|
22279
22475
|
}, [onNext, paymentAddress]);
|
|
22280
|
-
const MoonpayWidget =
|
|
22476
|
+
const MoonpayWidget = useMemo27(() => {
|
|
22281
22477
|
return /* @__PURE__ */ React172.createElement(
|
|
22282
22478
|
FunPaymentMoonpayType,
|
|
22283
22479
|
{
|
|
@@ -22308,7 +22504,7 @@ function MoonpaySetup({
|
|
|
22308
22504
|
// src/modals/CheckoutModal/SelectAsset.tsx
|
|
22309
22505
|
import { FUNKIT_CONNECT_SUPPORTED_CHECKOUT_CHAINS_INFO_LIST as FUNKIT_CONNECT_SUPPORTED_CHECKOUT_CHAINS_INFO_LIST2 } from "@funkit/chains";
|
|
22310
22506
|
import { formatCurrencyAndStringify as formatCurrencyAndStringify11, isTokenEquivalent as isTokenEquivalent6 } from "@funkit/utils";
|
|
22311
|
-
import React175, { useEffect as useEffect39, useMemo as
|
|
22507
|
+
import React175, { useEffect as useEffect39, useMemo as useMemo29, useState as useState46 } from "react";
|
|
22312
22508
|
import { createPortal as createPortal11 } from "react-dom";
|
|
22313
22509
|
|
|
22314
22510
|
// src/components/Dropdown/ReceiveTokenDropdown.tsx
|
|
@@ -22404,13 +22600,13 @@ var ReceiveTokenDropdown = ({
|
|
|
22404
22600
|
|
|
22405
22601
|
// src/components/NewTokenDepositAlert/NewTokenDepositAlert.tsx
|
|
22406
22602
|
import React174 from "react";
|
|
22407
|
-
import { FlagKey as
|
|
22603
|
+
import { FlagKey as FlagKey25, safeParseJson as safeParseJson6 } from "@funkit/utils";
|
|
22408
22604
|
var NewTokenDepositAlert = ({
|
|
22409
22605
|
onClick
|
|
22410
22606
|
}) => {
|
|
22411
|
-
const alertJson = useFlag(
|
|
22412
|
-
const alertData =
|
|
22413
|
-
const isTokenTransferEnabled = useFlag(
|
|
22607
|
+
const alertJson = useFlag(FlagKey25.NewTokenAssetSelectionBanner);
|
|
22608
|
+
const alertData = safeParseJson6(alertJson);
|
|
22609
|
+
const isTokenTransferEnabled = useFlag(FlagKey25.EnableTokenTransfer);
|
|
22414
22610
|
if (!alertData || !isTokenTransferEnabled) {
|
|
22415
22611
|
return null;
|
|
22416
22612
|
}
|
|
@@ -22437,13 +22633,13 @@ var NewTokenDepositAlert = ({
|
|
|
22437
22633
|
|
|
22438
22634
|
// src/hooks/useAllowedAssets.ts
|
|
22439
22635
|
import { getAllowedAssets } from "@funkit/api-base";
|
|
22440
|
-
import { useQuery as
|
|
22441
|
-
import { useCallback as useCallback31, useMemo as
|
|
22636
|
+
import { useQuery as useQuery17 } from "@tanstack/react-query";
|
|
22637
|
+
import { useCallback as useCallback31, useMemo as useMemo28 } from "react";
|
|
22442
22638
|
function useAllowedAssets() {
|
|
22443
22639
|
const { apiKey } = useFunkitConfig();
|
|
22444
22640
|
const { checkoutItem } = useCheckoutContext();
|
|
22445
22641
|
const isRelayEnabled = useSourceTokenRelayEnabled();
|
|
22446
|
-
const { data: allowedAssets, isLoading } =
|
|
22642
|
+
const { data: allowedAssets, isLoading } = useQuery17({
|
|
22447
22643
|
queryKey: ["getAllowedAssets", apiKey],
|
|
22448
22644
|
queryFn: () => getAllowedAssets({ apiKey, logger }),
|
|
22449
22645
|
refetchOnMount: false,
|
|
@@ -22452,7 +22648,7 @@ function useAllowedAssets() {
|
|
|
22452
22648
|
staleTime: 5 * 60 * 1e3,
|
|
22453
22649
|
gcTime: Number.POSITIVE_INFINITY
|
|
22454
22650
|
});
|
|
22455
|
-
const tokens =
|
|
22651
|
+
const tokens = useMemo28(() => {
|
|
22456
22652
|
if (!allowedAssets) {
|
|
22457
22653
|
return {};
|
|
22458
22654
|
}
|
|
@@ -22529,13 +22725,7 @@ function useEnrichedAccountHoldings({
|
|
|
22529
22725
|
}) {
|
|
22530
22726
|
const { isAllowed, isLoading } = useAllowedAssets();
|
|
22531
22727
|
const { loginType, walletAddress } = useGeneralWallet();
|
|
22532
|
-
const
|
|
22533
|
-
chainId: checkoutConfig?.targetChain,
|
|
22534
|
-
assetTokenAddress: checkoutConfig?.targetAsset,
|
|
22535
|
-
amount: checkoutConfig?.targetAssetAmount
|
|
22536
|
-
});
|
|
22537
|
-
const minValueThreshold = checkoutConfig?.isDefiMode ? targetAssetUsdAmount : void 0;
|
|
22538
|
-
const enrichedAccountHoldings = useMemo28(() => {
|
|
22728
|
+
const enrichedAccountHoldings = useMemo29(() => {
|
|
22539
22729
|
if (!checkoutConfig) {
|
|
22540
22730
|
return [];
|
|
22541
22731
|
}
|
|
@@ -22553,14 +22743,12 @@ function useEnrichedAccountHoldings({
|
|
|
22553
22743
|
isAllowedForCheckout: isAllowed(
|
|
22554
22744
|
asset.pickedChainId,
|
|
22555
22745
|
asset.tokenAddress
|
|
22556
|
-
)
|
|
22557
|
-
minValueThreshold
|
|
22746
|
+
)
|
|
22558
22747
|
});
|
|
22559
22748
|
return { asset, usableForCheckout };
|
|
22560
22749
|
});
|
|
22561
22750
|
}, [
|
|
22562
22751
|
accountHoldings,
|
|
22563
|
-
minValueThreshold,
|
|
22564
22752
|
checkoutConfig,
|
|
22565
22753
|
isAllowed,
|
|
22566
22754
|
loginType,
|
|
@@ -22577,7 +22765,7 @@ function useAssetOptions({
|
|
|
22577
22765
|
chainId,
|
|
22578
22766
|
dynamicTargetAssetCandidates
|
|
22579
22767
|
}) {
|
|
22580
|
-
const assetOptions =
|
|
22768
|
+
const assetOptions = useMemo29(() => {
|
|
22581
22769
|
return enrichedAccountHoldings.filter(
|
|
22582
22770
|
({ asset }) => chainId !== void 0 ? asset.pickedChainId === chainId.toString() : true
|
|
22583
22771
|
).map(({ asset, usableForCheckout }) => {
|
|
@@ -22657,7 +22845,7 @@ function MeshOrAccountSelectAsset({
|
|
|
22657
22845
|
targetAssetMinAmount: 0
|
|
22658
22846
|
};
|
|
22659
22847
|
const [selectedTargetAsset, setSelectedTargetAsset] = useState46(defaultTargetAsset);
|
|
22660
|
-
const defaultTokenSymbols =
|
|
22848
|
+
const defaultTokenSymbols = useMemo29(() => {
|
|
22661
22849
|
if (!checkoutConfig) {
|
|
22662
22850
|
return [];
|
|
22663
22851
|
}
|
|
@@ -22724,7 +22912,7 @@ function MeshOrAccountSelectAsset({
|
|
|
22724
22912
|
handleTargetAssetUpdate(tokenItem);
|
|
22725
22913
|
onFinish();
|
|
22726
22914
|
});
|
|
22727
|
-
const selectedChainTokenSymbol =
|
|
22915
|
+
const selectedChainTokenSymbol = useMemo29(() => {
|
|
22728
22916
|
if (explicitlySelectedChainTokenSymbol) {
|
|
22729
22917
|
const assetExists = assetOptions.find(
|
|
22730
22918
|
({ asset }) => asset.chainSymbolKey === explicitlySelectedChainTokenSymbol
|
|
@@ -23444,7 +23632,7 @@ var LightningBoltIcon = ({ size = 16 }) => /* @__PURE__ */ React179.createElemen
|
|
|
23444
23632
|
|
|
23445
23633
|
// src/components/QRCode/QRCode.tsx
|
|
23446
23634
|
import QRCodeUtil from "qrcode";
|
|
23447
|
-
import React180, { useMemo as
|
|
23635
|
+
import React180, { useMemo as useMemo30 } from "react";
|
|
23448
23636
|
var generateMatrix = (value, errorCorrectionLevel) => {
|
|
23449
23637
|
const { data } = QRCodeUtil.create(value, { errorCorrectionLevel }).modules;
|
|
23450
23638
|
const sqrt = Math.sqrt(data.length);
|
|
@@ -23472,7 +23660,7 @@ function QRCode({
|
|
|
23472
23660
|
}) {
|
|
23473
23661
|
const { activeTheme } = useActiveTheme();
|
|
23474
23662
|
const size = sizeProp - Number.parseInt(outsidePadding, 10) * 2;
|
|
23475
|
-
const dots =
|
|
23663
|
+
const dots = useMemo30(() => {
|
|
23476
23664
|
const dots2 = [];
|
|
23477
23665
|
const matrix = generateMatrix(uri, ecl);
|
|
23478
23666
|
const cellSize = size / matrix.length;
|
|
@@ -24013,14 +24201,31 @@ var TransferTokenDetails = ({
|
|
|
24013
24201
|
};
|
|
24014
24202
|
|
|
24015
24203
|
// src/hooks/useTokenTransfer.ts
|
|
24016
|
-
import { solanaChain as solanaChain4 } from "@funkit/chains";
|
|
24017
|
-
import { FlagKey as
|
|
24018
|
-
import { useMemo as
|
|
24204
|
+
import { bitcoinChain as bitcoinChain2, solanaChain as solanaChain4 } from "@funkit/chains";
|
|
24205
|
+
import { FlagKey as FlagKey26 } from "@funkit/utils";
|
|
24206
|
+
import { useMemo as useMemo31 } from "react";
|
|
24019
24207
|
import { mainnet as mainnet9, polygon as polygon7 } from "viem/chains";
|
|
24208
|
+
|
|
24209
|
+
// src/utils/transfer.ts
|
|
24210
|
+
var getTransferTokenQrCodeUri = (props) => {
|
|
24211
|
+
const { depositAddress, type } = props;
|
|
24212
|
+
if (type === "ethereum") {
|
|
24213
|
+
return `ethereum:${depositAddress}`;
|
|
24214
|
+
}
|
|
24215
|
+
if (type === "solana") {
|
|
24216
|
+
return `solana:${depositAddress}`;
|
|
24217
|
+
}
|
|
24218
|
+
if (type === "bitcoin") {
|
|
24219
|
+
return `bitcoin:${depositAddress}`;
|
|
24220
|
+
}
|
|
24221
|
+
throw new Error(`Invalid transfer token qr code type: ${type}`);
|
|
24222
|
+
};
|
|
24223
|
+
|
|
24224
|
+
// src/hooks/useTokenTransfer.ts
|
|
24020
24225
|
var useTokenTransfer = (selectedChainId, selectedToken, chainIds) => {
|
|
24021
24226
|
const { checkoutItem } = useCheckoutContext();
|
|
24022
24227
|
const enableUniversal = useFlag(
|
|
24023
|
-
|
|
24228
|
+
FlagKey26.EnableTokenTransferUniversalDepositAddress,
|
|
24024
24229
|
false
|
|
24025
24230
|
);
|
|
24026
24231
|
const estPriceImpact = usePriceImpactEstimation(selectedToken);
|
|
@@ -24038,9 +24243,22 @@ var useTokenTransfer = (selectedChainId, selectedToken, chainIds) => {
|
|
|
24038
24243
|
const isUsdceOnPolygon = isPolygon && selectedToken === "USDC.e";
|
|
24039
24244
|
const isUsdcOnPolygon = isPolygon && selectedToken === "USDC";
|
|
24040
24245
|
const showOriginalRecipient = isBankrUsUser || !enableUniversal && (isUsdceOnPolygon || isUsdcOnPolygon);
|
|
24041
|
-
const funDepositAddress = selectedChainId === solanaChain4.id ? transferInit?.solanaAddr : transferInit?.depositAddr;
|
|
24246
|
+
const funDepositAddress = selectedChainId === solanaChain4.id ? transferInit?.solanaAddr : selectedChainId === bitcoinChain2.id ? transferInit?.btcAddrSegwit : transferInit?.depositAddr;
|
|
24247
|
+
const blockchainType = (() => {
|
|
24248
|
+
if (selectedChainId === solanaChain4.id) {
|
|
24249
|
+
return "solana";
|
|
24250
|
+
}
|
|
24251
|
+
if (selectedChainId === bitcoinChain2.id) {
|
|
24252
|
+
return "bitcoin";
|
|
24253
|
+
}
|
|
24254
|
+
return "ethereum";
|
|
24255
|
+
})();
|
|
24042
24256
|
const depositAddressTooltip = `Send any accepted token to this address${showOriginalRecipient ? "" : ` and it will auto
|
|
24043
24257
|
swap to ${checkoutConfig?.targetAssetTicker} in your account`}.`;
|
|
24258
|
+
const qrCodeUri = funDepositAddress ? getTransferTokenQrCodeUri({
|
|
24259
|
+
depositAddress: funDepositAddress,
|
|
24260
|
+
type: blockchainType
|
|
24261
|
+
}) : void 0;
|
|
24044
24262
|
return {
|
|
24045
24263
|
depositAddress: showOriginalRecipient ? recipientAddr : funDepositAddress,
|
|
24046
24264
|
depositAddressTooltip,
|
|
@@ -24049,12 +24267,14 @@ var useTokenTransfer = (selectedChainId, selectedToken, chainIds) => {
|
|
|
24049
24267
|
minTransferUsdPerChain,
|
|
24050
24268
|
showOriginalRecipient,
|
|
24051
24269
|
estPriceImpact: showOriginalRecipient ? void 0 : estPriceImpact,
|
|
24052
|
-
maxSlippage: showOriginalRecipient ? void 0 : maxSlippage
|
|
24270
|
+
maxSlippage: showOriginalRecipient ? void 0 : maxSlippage,
|
|
24271
|
+
qrCodeUri,
|
|
24272
|
+
blockchain: blockchainType
|
|
24053
24273
|
};
|
|
24054
24274
|
};
|
|
24055
24275
|
var useMinTransferLimits = () => {
|
|
24056
24276
|
const { userIpInfo } = useFunkitUserIp();
|
|
24057
|
-
const minTransferValueJsonString = useFlag(
|
|
24277
|
+
const minTransferValueJsonString = useFlag(FlagKey26.MinTokenTransferValue);
|
|
24058
24278
|
const minTransferValue = safeJSONParse(
|
|
24059
24279
|
minTransferValueJsonString
|
|
24060
24280
|
);
|
|
@@ -24065,23 +24285,27 @@ var useMinTransferLimits = () => {
|
|
|
24065
24285
|
const limits = minTransferValue[transferLimitKey] ?? minTransferValue.DEFAULT;
|
|
24066
24286
|
return limits;
|
|
24067
24287
|
};
|
|
24288
|
+
function getMinTransferValueForChain(chainId, limits) {
|
|
24289
|
+
const MAINNET_IDS = [mainnet9.id, bitcoinChain2.id];
|
|
24290
|
+
return MAINNET_IDS.includes(chainId) ? limits.mainnet : limits.nonMainnet;
|
|
24291
|
+
}
|
|
24068
24292
|
var useMinTransferValue = (selectedChainId) => {
|
|
24069
24293
|
const limits = useMinTransferLimits();
|
|
24070
|
-
const limit = selectedChainId
|
|
24294
|
+
const limit = getMinTransferValueForChain(selectedChainId, limits);
|
|
24071
24295
|
return Math.ceil(limit);
|
|
24072
24296
|
};
|
|
24073
24297
|
var useMinTransferValues = (chainIds) => {
|
|
24074
24298
|
const limits = useMinTransferLimits();
|
|
24075
|
-
return
|
|
24299
|
+
return useMemo31(() => {
|
|
24076
24300
|
return chainIds.reduce(
|
|
24077
24301
|
(acc, id) => {
|
|
24078
|
-
const limit = id
|
|
24302
|
+
const limit = getMinTransferValueForChain(id, limits);
|
|
24079
24303
|
acc[id] = Math.ceil(limit);
|
|
24080
24304
|
return acc;
|
|
24081
24305
|
},
|
|
24082
24306
|
{}
|
|
24083
24307
|
);
|
|
24084
|
-
}, [chainIds, limits
|
|
24308
|
+
}, [chainIds, limits]);
|
|
24085
24309
|
};
|
|
24086
24310
|
var usePriceImpactEstimation = (selectedToken) => {
|
|
24087
24311
|
const { apiKey } = useFunkitConfig();
|
|
@@ -24155,7 +24379,9 @@ function TransferToken({
|
|
|
24155
24379
|
minTransferUsd,
|
|
24156
24380
|
minTransferUsdPerChain,
|
|
24157
24381
|
estPriceImpact,
|
|
24158
|
-
maxSlippage
|
|
24382
|
+
maxSlippage,
|
|
24383
|
+
qrCodeUri,
|
|
24384
|
+
blockchain
|
|
24159
24385
|
} = useTokenTransfer(selectedChainId, selectedToken, chainIds);
|
|
24160
24386
|
const isDefiMode = checkoutItem?.initSettings.config.isDefiMode;
|
|
24161
24387
|
const toggleQrHover = async () => {
|
|
@@ -24336,7 +24562,7 @@ function TransferToken({
|
|
|
24336
24562
|
logoSize: 24,
|
|
24337
24563
|
logoUrl: chainMetadataById[selectedChainId].iconUrl,
|
|
24338
24564
|
size: 152,
|
|
24339
|
-
uri:
|
|
24565
|
+
uri: qrCodeUri ?? "",
|
|
24340
24566
|
enableCornerMarkersRadius: false,
|
|
24341
24567
|
enableOuterBorder: false
|
|
24342
24568
|
}
|
|
@@ -24381,7 +24607,13 @@ function TransferToken({
|
|
|
24381
24607
|
size: "12"
|
|
24382
24608
|
}
|
|
24383
24609
|
)
|
|
24384
|
-
), isLoadingDepositAddress ? /* @__PURE__ */ React189.createElement(FunSkeletonBlock, { height: "66", width: "full" }) : /* @__PURE__ */ React189.createElement(CopyInputDisplayedAddress, { address: depositAddress })), /* @__PURE__ */ React189.createElement(FunInfoBanner, null), /* @__PURE__ */ React189.createElement(
|
|
24610
|
+
), isLoadingDepositAddress ? /* @__PURE__ */ React189.createElement(FunSkeletonBlock, { height: "66", width: "full" }) : /* @__PURE__ */ React189.createElement(CopyInputDisplayedAddress, { address: depositAddress })), /* @__PURE__ */ React189.createElement(FunInfoBanner, null), blockchain === "bitcoin" && /* @__PURE__ */ React189.createElement(
|
|
24611
|
+
InfoBanner,
|
|
24612
|
+
{
|
|
24613
|
+
message: "Bitcoin deposits might take up to 30 minutes to complete.",
|
|
24614
|
+
type: "announcement"
|
|
24615
|
+
}
|
|
24616
|
+
), /* @__PURE__ */ React189.createElement(FunInfoBanner, null), /* @__PURE__ */ React189.createElement(
|
|
24385
24617
|
TransferTokenDetails,
|
|
24386
24618
|
{
|
|
24387
24619
|
disabled: isLoadingDepositAddress,
|
|
@@ -24765,7 +24997,7 @@ var FiatAccountDetail = {
|
|
|
24765
24997
|
|
|
24766
24998
|
// src/modals/CheckoutModal/VirtualFiatAccount/KycIframe.tsx
|
|
24767
24999
|
import { BridgeCustomerStatus as BridgeCustomerStatus7 } from "@funkit/api-base";
|
|
24768
|
-
import React196, { useCallback as useCallback35, useEffect as useEffect42, useMemo as
|
|
25000
|
+
import React196, { useCallback as useCallback35, useEffect as useEffect42, useMemo as useMemo32, useState as useState53 } from "react";
|
|
24769
25001
|
function useIframeListener(listeners) {
|
|
24770
25002
|
const handleMessage = useCallback35(
|
|
24771
25003
|
(event) => {
|
|
@@ -24818,7 +25050,7 @@ function KycIframe({
|
|
|
24818
25050
|
const { clearVirtualFiatAccounts } = useClearFrogAccountsCache();
|
|
24819
25051
|
const { data: kycLink, isLoading: isLinkLoading } = useLoadKycLink(modalState);
|
|
24820
25052
|
const [iframeLoading, setIframeLoading] = useState53(true);
|
|
24821
|
-
const listeners =
|
|
25053
|
+
const listeners = useMemo32(
|
|
24822
25054
|
() => ({
|
|
24823
25055
|
load: () => {
|
|
24824
25056
|
logger.info("KYC iframe loaded");
|
|
@@ -25815,7 +26047,7 @@ function FunConnectOptions({
|
|
|
25815
26047
|
}
|
|
25816
26048
|
}
|
|
25817
26049
|
};
|
|
25818
|
-
const stepComponent =
|
|
26050
|
+
const stepComponent = useMemo33(() => {
|
|
25819
26051
|
switch (step) {
|
|
25820
26052
|
case 0 /* SIGNIN_PRIMARY */:
|
|
25821
26053
|
case 1 /* SIGNIN_SECONDARY */:
|
|
@@ -25924,7 +26156,7 @@ var FULL_SOCIAL_LOGIN_OPTIONS = [
|
|
|
25924
26156
|
function useEnabledSocialLogins() {
|
|
25925
26157
|
const funkitConfig = useFunkitConfig();
|
|
25926
26158
|
const { web2SocialLogins } = funkitConfig.loginConfig;
|
|
25927
|
-
const enabledSocialItems =
|
|
26159
|
+
const enabledSocialItems = useMemo34(() => {
|
|
25928
26160
|
return FULL_SOCIAL_LOGIN_OPTIONS.filter(
|
|
25929
26161
|
(oAuthItem) => !!web2SocialLogins[oAuthItem.funkitKey]
|
|
25930
26162
|
);
|
|
@@ -25953,7 +26185,7 @@ function FunSignInStep({
|
|
|
25953
26185
|
handleOauthRedirect,
|
|
25954
26186
|
handleGenerateFcUri
|
|
25955
26187
|
} = useFunkitWeb2Login();
|
|
25956
|
-
const isEmailInputValid =
|
|
26188
|
+
const isEmailInputValid = useMemo34(() => {
|
|
25957
26189
|
return validateEmailString(emailInput);
|
|
25958
26190
|
}, [emailInput]);
|
|
25959
26191
|
const [emailError, setEmailError] = useState59();
|
|
@@ -26529,7 +26761,7 @@ function FunCheckoutHistoryDetail({
|
|
|
26529
26761
|
isActiveCheckout
|
|
26530
26762
|
]
|
|
26531
26763
|
);
|
|
26532
|
-
const primaryButtonProps =
|
|
26764
|
+
const primaryButtonProps = useMemo35(() => {
|
|
26533
26765
|
if (!isCheckoutLoaded) {
|
|
26534
26766
|
return void 0;
|
|
26535
26767
|
}
|
|
@@ -26618,7 +26850,7 @@ var CheckoutAlert = ({ state, refundState, onHelp }) => {
|
|
|
26618
26850
|
|
|
26619
26851
|
// src/components/FunCheckoutHistory/FunCheckoutHistoryHelp.tsx
|
|
26620
26852
|
import { sendSupportMessage } from "@funkit/api-base";
|
|
26621
|
-
import React218, { useEffect as useEffect49, useMemo as
|
|
26853
|
+
import React218, { useEffect as useEffect49, useMemo as useMemo36, useRef as useRef23, useState as useState62 } from "react";
|
|
26622
26854
|
import { createPortal as createPortal15 } from "react-dom";
|
|
26623
26855
|
|
|
26624
26856
|
// src/components/FunInput/FunTextAreaInput.tsx
|
|
@@ -26771,7 +27003,7 @@ function FunCheckoutHistoryHelp({
|
|
|
26771
27003
|
);
|
|
26772
27004
|
const [descriptionInput, setDescriptionInput] = useState62("");
|
|
26773
27005
|
const [errorMessage, setErrorMessage] = useState62();
|
|
26774
|
-
const isEmailInputValid =
|
|
27006
|
+
const isEmailInputValid = useMemo36(() => {
|
|
26775
27007
|
return validateEmailString(emailInput);
|
|
26776
27008
|
}, [emailInput]);
|
|
26777
27009
|
const [processStage, setProcessStage] = useState62(
|
|
@@ -26963,7 +27195,7 @@ import {
|
|
|
26963
27195
|
formatTimestamp as formatTimestamp2,
|
|
26964
27196
|
isTokenEquivalent as isTokenEquivalent7
|
|
26965
27197
|
} from "@funkit/utils";
|
|
26966
|
-
import React219, { useCallback as useCallback43, useMemo as
|
|
27198
|
+
import React219, { useCallback as useCallback43, useMemo as useMemo37, useRef as useRef24, useState as useState63 } from "react";
|
|
26967
27199
|
import { createPortal as createPortal16 } from "react-dom";
|
|
26968
27200
|
function FunDirectExecutionStatusTagLoaded({
|
|
26969
27201
|
directExecution
|
|
@@ -27004,7 +27236,7 @@ function FunDirectExecutionHistoryDetail({
|
|
|
27004
27236
|
]
|
|
27005
27237
|
);
|
|
27006
27238
|
const isWithdrawal = directExecution?.clientMetadata?.isWithdrawal;
|
|
27007
|
-
const buttonProps =
|
|
27239
|
+
const buttonProps = useMemo37(() => {
|
|
27008
27240
|
if (!isLoaded) {
|
|
27009
27241
|
return void 0;
|
|
27010
27242
|
}
|
|
@@ -27417,7 +27649,7 @@ function useCheckoutModalTitle(depositAddress, defaultTitle) {
|
|
|
27417
27649
|
import { IN_PROGRESS_CHECKOUT_STATES as IN_PROGRESS_CHECKOUT_STATES2 } from "@funkit/api-base";
|
|
27418
27650
|
import { formatTimestampToDate, fullMonthNames } from "@funkit/utils";
|
|
27419
27651
|
import clsx20 from "clsx";
|
|
27420
|
-
import React232, { useEffect as useEffect50, useMemo as
|
|
27652
|
+
import React232, { useEffect as useEffect50, useMemo as useMemo38, useRef as useRef25, useState as useState67 } from "react";
|
|
27421
27653
|
import { Virtuoso } from "react-virtuoso";
|
|
27422
27654
|
import { useAccount as useAccount7 } from "wagmi";
|
|
27423
27655
|
|
|
@@ -27964,7 +28196,7 @@ function Home({
|
|
|
27964
28196
|
const virtuosoDiv = virtuosoParentRef.current?.firstChild;
|
|
27965
28197
|
virtuosoDiv?.classList.add(animateVirtuosoInClass);
|
|
27966
28198
|
}, []);
|
|
27967
|
-
const AssetsList =
|
|
28199
|
+
const AssetsList = useMemo38(() => {
|
|
27968
28200
|
if (walletAssets && !Object.keys(walletAssets).length) {
|
|
27969
28201
|
return /* @__PURE__ */ React232.createElement(EmptyTabAlert, null);
|
|
27970
28202
|
}
|
|
@@ -27991,7 +28223,7 @@ function Home({
|
|
|
27991
28223
|
}
|
|
27992
28224
|
));
|
|
27993
28225
|
}, [walletAssets]);
|
|
27994
|
-
const CheckoutsList =
|
|
28226
|
+
const CheckoutsList = useMemo38(() => {
|
|
27995
28227
|
if (checkoutHistoryList.length === 0 && isCheckoutHistoryInited) {
|
|
27996
28228
|
return /* @__PURE__ */ React232.createElement(EmptyTabAlert, null);
|
|
27997
28229
|
}
|
|
@@ -28664,7 +28896,7 @@ function ChainModal({ onClose, open }) {
|
|
|
28664
28896
|
// src/modals/CheckoutModal/FunCheckoutModal.tsx
|
|
28665
28897
|
import { FUNKIT_CONNECT_SUPPORTED_CHECKOUT_CHAINS_INFO_LIST as FUNKIT_CONNECT_SUPPORTED_CHECKOUT_CHAINS_INFO_LIST3 } from "@funkit/chains";
|
|
28666
28898
|
import { LogLevel, initializeRelayClient } from "@funkit/fun-relay";
|
|
28667
|
-
import { FlagKey as
|
|
28899
|
+
import { FlagKey as FlagKey28 } from "@funkit/utils";
|
|
28668
28900
|
import React248, { useRef as useRef27 } from "react";
|
|
28669
28901
|
|
|
28670
28902
|
// src/components/FunCheckoutBlocked/FunCheckoutBlocked.tsx
|
|
@@ -28685,7 +28917,7 @@ var FunCheckoutBlocked = ({ reason }) => {
|
|
|
28685
28917
|
|
|
28686
28918
|
// src/modals/CheckoutModal/TransferToken/CheckoutNotifications.tsx
|
|
28687
28919
|
import clsx23 from "clsx";
|
|
28688
|
-
import React247, { useEffect as useEffect52, useMemo as
|
|
28920
|
+
import React247, { useEffect as useEffect52, useMemo as useMemo39, useState as useState70 } from "react";
|
|
28689
28921
|
|
|
28690
28922
|
// src/components/FunNotificationBanner/FunNotificationShowMoreButton.tsx
|
|
28691
28923
|
import React242 from "react";
|
|
@@ -28733,13 +28965,13 @@ var FunNotificationShowMoreButton = ({
|
|
|
28733
28965
|
import {
|
|
28734
28966
|
getCheckoutsByUserId as getCheckoutsByUserId2
|
|
28735
28967
|
} from "@funkit/api-base";
|
|
28736
|
-
import { FlagKey as
|
|
28737
|
-
import { useQuery as
|
|
28968
|
+
import { FlagKey as FlagKey27 } from "@funkit/utils";
|
|
28969
|
+
import { useQuery as useQuery18 } from "@tanstack/react-query";
|
|
28738
28970
|
var hasCorrectPaymentMethod = (checkout, paymentMethod) => !paymentMethod || checkout.clientMetadata.selectedPaymentMethodInfo?.paymentMethod === paymentMethod;
|
|
28739
28971
|
var isRecent = (checkout, timestampCutoff) => checkout.createdTimeMs > timestampCutoff;
|
|
28740
28972
|
var DEFAULT_NOTIF_CUTOFF = 7 * 24 * 60 * 60 * 1e3;
|
|
28741
28973
|
function useCheckoutRefreshInterval() {
|
|
28742
|
-
const str = useFlag(
|
|
28974
|
+
const str = useFlag(FlagKey27.CheckoutNotificationsRefreshInterval);
|
|
28743
28975
|
return safeJSONParse(str) || { listRefresh: 50 * 1e3, itemRefresh: 5 * 1e3 };
|
|
28744
28976
|
}
|
|
28745
28977
|
var useRecentCheckouts = ({
|
|
@@ -28749,7 +28981,7 @@ var useRecentCheckouts = ({
|
|
|
28749
28981
|
const { isUserLoggedIn, userInfo } = useGeneralWallet();
|
|
28750
28982
|
const { apiKey } = useFunkitConfig();
|
|
28751
28983
|
const { listRefresh } = useCheckoutRefreshInterval();
|
|
28752
|
-
const query =
|
|
28984
|
+
const query = useQuery18({
|
|
28753
28985
|
queryKey: ["checkouts", userInfo.id],
|
|
28754
28986
|
queryFn: async () => {
|
|
28755
28987
|
const checkouts = await getCheckoutsByUserId2({
|
|
@@ -28772,7 +29004,7 @@ var useRecentCheckouts = ({
|
|
|
28772
29004
|
import {
|
|
28773
29005
|
getDirectExecutionsByUserId as getDirectExecutionsByUserId2
|
|
28774
29006
|
} from "@funkit/api-base";
|
|
28775
|
-
import { useQuery as
|
|
29007
|
+
import { useQuery as useQuery19 } from "@tanstack/react-query";
|
|
28776
29008
|
var isRecent2 = (de, timestampCutoff) => de.createdTimeMs > timestampCutoff;
|
|
28777
29009
|
var useRecentDirectExecutions = ({
|
|
28778
29010
|
isVisible
|
|
@@ -28780,7 +29012,7 @@ var useRecentDirectExecutions = ({
|
|
|
28780
29012
|
const { isUserLoggedIn, userInfo } = useGeneralWallet();
|
|
28781
29013
|
const { apiKey } = useFunkitConfig();
|
|
28782
29014
|
const { listRefresh } = useCheckoutRefreshInterval();
|
|
28783
|
-
const query =
|
|
29015
|
+
const query = useQuery19({
|
|
28784
29016
|
queryKey: ["directExecutions", userInfo.id],
|
|
28785
29017
|
queryFn: async () => {
|
|
28786
29018
|
const directExecutions = await getDirectExecutionsByUserId2({
|
|
@@ -29493,11 +29725,11 @@ var FunNotificationBanner = ({
|
|
|
29493
29725
|
import {
|
|
29494
29726
|
getCheckoutByDepositAddress as getCheckoutByDepositAddress2
|
|
29495
29727
|
} from "@funkit/api-base";
|
|
29496
|
-
import { useQuery as
|
|
29728
|
+
import { useQuery as useQuery20 } from "@tanstack/react-query";
|
|
29497
29729
|
var useCheckout = (depositAddress, initial) => {
|
|
29498
29730
|
const { apiKey } = useFunkitConfig();
|
|
29499
29731
|
const { itemRefresh } = useCheckoutRefreshInterval();
|
|
29500
|
-
const query =
|
|
29732
|
+
const query = useQuery20({
|
|
29501
29733
|
queryKey: ["checkouts", "checkout", depositAddress],
|
|
29502
29734
|
queryFn: () => (
|
|
29503
29735
|
// biome-ignore lint/style/noNonNullAssertion: already checked for null
|
|
@@ -29754,19 +29986,19 @@ var CheckoutNotifications = ({
|
|
|
29754
29986
|
}
|
|
29755
29987
|
setInitialDirectExecutions(directExecutions);
|
|
29756
29988
|
}, [initialDirectExecutions, directExecutions]);
|
|
29757
|
-
const displayedDirectExecutions =
|
|
29989
|
+
const displayedDirectExecutions = useMemo39(() => {
|
|
29758
29990
|
if (!directExecutions) {
|
|
29759
29991
|
return [];
|
|
29760
29992
|
}
|
|
29761
29993
|
return getUpdatedDirectExecutions(directExecutions, initialDirectExecutions).filter(({ txHash }) => !closedNotifications.includes(txHash)).slice(0, MAX_COUNT);
|
|
29762
29994
|
}, [initialDirectExecutions, directExecutions, closedNotifications]);
|
|
29763
|
-
const displayedCheckouts =
|
|
29995
|
+
const displayedCheckouts = useMemo39(() => {
|
|
29764
29996
|
if (!checkouts) {
|
|
29765
29997
|
return [];
|
|
29766
29998
|
}
|
|
29767
29999
|
return getUpdatedCheckouts(checkouts, initialCheckouts).filter(({ depositAddr }) => !closedNotifications.includes(depositAddr)).slice(0, MAX_COUNT);
|
|
29768
30000
|
}, [initialCheckouts, checkouts, closedNotifications]);
|
|
29769
|
-
const combinedNotifications =
|
|
30001
|
+
const combinedNotifications = useMemo39(() => {
|
|
29770
30002
|
return [
|
|
29771
30003
|
...displayedDirectExecutions.map(
|
|
29772
30004
|
(item) => ({ ...item, isDirectExecution: true })
|
|
@@ -29776,7 +30008,7 @@ var CheckoutNotifications = ({
|
|
|
29776
30008
|
)
|
|
29777
30009
|
].sort((a, b) => b.createdTimeMs - a.createdTimeMs);
|
|
29778
30010
|
}, [displayedDirectExecutions, displayedCheckouts]);
|
|
29779
|
-
const displayedNotifications =
|
|
30011
|
+
const displayedNotifications = useMemo39(() => {
|
|
29780
30012
|
return isExpanded ? combinedNotifications : combinedNotifications.slice(0, COLLAPSED_COUNT);
|
|
29781
30013
|
}, [isExpanded, combinedNotifications]);
|
|
29782
30014
|
const handleNotificationClose = (id) => setClosedNotifications((prev) => [...prev, id]);
|
|
@@ -29907,7 +30139,7 @@ function FunCheckoutModalInner({
|
|
|
29907
30139
|
const isBlocked = isUserGeoblocked || modalState.isBlocked;
|
|
29908
30140
|
const hasBack = hasHistoryEntry && !disableBack;
|
|
29909
30141
|
const checkoutConfig = checkoutItem.initSettings.config;
|
|
29910
|
-
const helpButtonUrl = useFlag(
|
|
30142
|
+
const helpButtonUrl = useFlag(FlagKey28.HelpTutorialUrl);
|
|
29911
30143
|
const { onScroll, topbar, withTopDivider } = useCustomStatusAnimationAboveTopbar({
|
|
29912
30144
|
depositAddress: checkoutItem.depositAddress ?? void 0,
|
|
29913
30145
|
isActiveCheckout: true,
|
|
@@ -30113,7 +30345,7 @@ function ModalProvider({ children }) {
|
|
|
30113
30345
|
return /* @__PURE__ */ React250.createElement(
|
|
30114
30346
|
ModalContext.Provider,
|
|
30115
30347
|
{
|
|
30116
|
-
value:
|
|
30348
|
+
value: useMemo40(
|
|
30117
30349
|
() => ({
|
|
30118
30350
|
accountModalOpen,
|
|
30119
30351
|
accountModalTab,
|
|
@@ -30884,7 +31116,7 @@ var FunkitWeb2Provider = ({
|
|
|
30884
31116
|
},
|
|
30885
31117
|
[privy]
|
|
30886
31118
|
);
|
|
30887
|
-
const web2UserInfo =
|
|
31119
|
+
const web2UserInfo = useMemo41(() => {
|
|
30888
31120
|
if (!loggedInUser || !loggedInUser?.linked_accounts || !loggedInUser?.linked_accounts?.length) {
|
|
30889
31121
|
return PLACEHOLDER_FUNKIT_USER_INFO;
|
|
30890
31122
|
}
|
|
@@ -31800,18 +32032,18 @@ function cssStringFromTheme(theme, options = {}) {
|
|
|
31800
32032
|
}
|
|
31801
32033
|
|
|
31802
32034
|
// src/hooks/useIsFunkitCheckoutActivated.ts
|
|
31803
|
-
import { FlagKey as
|
|
32035
|
+
import { FlagKey as FlagKey29 } from "@funkit/utils";
|
|
31804
32036
|
var useIsFunkitCheckoutActivated = () => {
|
|
31805
|
-
const isCheckoutActivated = useFlag(
|
|
32037
|
+
const isCheckoutActivated = useFlag(FlagKey29.IsCheckoutActivated);
|
|
31806
32038
|
return {
|
|
31807
32039
|
isActivated: isCheckoutActivated
|
|
31808
32040
|
};
|
|
31809
32041
|
};
|
|
31810
32042
|
|
|
31811
32043
|
// src/hooks/useFunkitMaxCheckoutUsdInfo.ts
|
|
31812
|
-
import { FlagKey as
|
|
32044
|
+
import { FlagKey as FlagKey30, formatCurrencyAndStringify as formatCurrencyAndStringify16 } from "@funkit/utils";
|
|
31813
32045
|
var useFunkitMaxCheckoutUsdInfo = () => {
|
|
31814
|
-
const maxCheckoutUsd = Number(useFlag(
|
|
32046
|
+
const maxCheckoutUsd = Number(useFlag(FlagKey30.MaxCheckoutUsd));
|
|
31815
32047
|
const limitText = maxCheckoutUsd === Number.MAX_VALUE ? "no" : formatCurrencyAndStringify16(maxCheckoutUsd, {
|
|
31816
32048
|
decimalPrecisionForSuffix: 0,
|
|
31817
32049
|
minimumSignificantDigits: 0,
|
|
@@ -31928,7 +32160,7 @@ function setFunkitConnectVersion({ version }) {
|
|
|
31928
32160
|
localStorage.setItem(storageKey5, version);
|
|
31929
32161
|
}
|
|
31930
32162
|
function getCurrentSdkVersion() {
|
|
31931
|
-
return "6.
|
|
32163
|
+
return "6.11.0";
|
|
31932
32164
|
}
|
|
31933
32165
|
function useFingerprint() {
|
|
31934
32166
|
const fingerprint = useCallback51(() => {
|