@turnkey/react-wallet-kit 2.7.1 → 2.8.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/_virtual/_rollupPluginBabelHelpers.mjs +10 -1
- package/dist/_virtual/_rollupPluginBabelHelpers.mjs.map +1 -1
- package/dist/components/auth/Action.d.ts +1 -0
- package/dist/components/auth/Action.d.ts.map +1 -1
- package/dist/components/auth/Action.js +10 -3
- package/dist/components/auth/Action.js.map +1 -1
- package/dist/components/auth/Action.mjs +10 -3
- package/dist/components/auth/Action.mjs.map +1 -1
- package/dist/components/auth/wallet/DesktopWalletConnectScreen.d.ts +2 -0
- package/dist/components/auth/wallet/DesktopWalletConnectScreen.d.ts.map +1 -1
- package/dist/components/auth/wallet/DesktopWalletConnectScreen.js +7 -4
- package/dist/components/auth/wallet/DesktopWalletConnectScreen.js.map +1 -1
- package/dist/components/auth/wallet/DesktopWalletConnectScreen.mjs +22 -12
- package/dist/components/auth/wallet/DesktopWalletConnectScreen.mjs.map +1 -1
- package/dist/components/auth/wallet/ExternalWalletChainSelector.d.ts.map +1 -1
- package/dist/components/auth/wallet/ExternalWalletChainSelector.js +2 -1
- package/dist/components/auth/wallet/ExternalWalletChainSelector.js.map +1 -1
- package/dist/components/auth/wallet/ExternalWalletChainSelector.mjs +2 -2
- package/dist/components/auth/wallet/ExternalWalletChainSelector.mjs.map +1 -1
- package/dist/components/auth/wallet/MobileWalletConnectScreen.d.ts +1 -0
- package/dist/components/auth/wallet/MobileWalletConnectScreen.d.ts.map +1 -1
- package/dist/components/auth/wallet/MobileWalletConnectScreen.js +3 -1
- package/dist/components/auth/wallet/MobileWalletConnectScreen.js.map +1 -1
- package/dist/components/auth/wallet/MobileWalletConnectScreen.mjs +16 -8
- package/dist/components/auth/wallet/MobileWalletConnectScreen.mjs.map +1 -1
- package/dist/components/auth/wallet/ShowAllWalletsScreen.d.ts +2 -1
- package/dist/components/auth/wallet/ShowAllWalletsScreen.d.ts.map +1 -1
- package/dist/components/auth/wallet/ShowAllWalletsScreen.js +8 -3
- package/dist/components/auth/wallet/ShowAllWalletsScreen.js.map +1 -1
- package/dist/components/auth/wallet/ShowAllWalletsScreen.mjs +8 -3
- package/dist/components/auth/wallet/ShowAllWalletsScreen.mjs.map +1 -1
- package/dist/components/design/Success.d.ts +1 -1
- package/dist/components/design/Success.d.ts.map +1 -1
- package/dist/components/design/Success.js +2 -2
- package/dist/components/design/Success.js.map +1 -1
- package/dist/components/design/Success.mjs +2 -2
- package/dist/components/design/Success.mjs.map +1 -1
- package/dist/components/design/Svg.d.ts +1 -0
- package/dist/components/design/Svg.d.ts.map +1 -1
- package/dist/components/design/Svg.js +32 -12
- package/dist/components/design/Svg.js.map +1 -1
- package/dist/components/design/Svg.mjs +32 -13
- package/dist/components/design/Svg.mjs.map +1 -1
- package/dist/components/design/TabNav.d.ts +13 -0
- package/dist/components/design/TabNav.d.ts.map +1 -0
- package/dist/components/design/TabNav.js +64 -0
- package/dist/components/design/TabNav.js.map +1 -0
- package/dist/components/design/TabNav.mjs +81 -0
- package/dist/components/design/TabNav.mjs.map +1 -0
- package/dist/components/funding/CryptoAmountInput.d.ts +11 -0
- package/dist/components/funding/CryptoAmountInput.d.ts.map +1 -0
- package/dist/components/funding/CryptoAmountInput.js +82 -0
- package/dist/components/funding/CryptoAmountInput.js.map +1 -0
- package/dist/components/funding/CryptoAmountInput.mjs +87 -0
- package/dist/components/funding/CryptoAmountInput.mjs.map +1 -0
- package/dist/components/funding/CurrencyDropdown.d.ts +8 -0
- package/dist/components/funding/CurrencyDropdown.d.ts.map +1 -0
- package/dist/components/funding/CurrencyDropdown.js +132 -0
- package/dist/components/funding/CurrencyDropdown.js.map +1 -0
- package/dist/components/funding/CurrencyDropdown.mjs +132 -0
- package/dist/components/funding/CurrencyDropdown.mjs.map +1 -0
- package/dist/components/funding/FiatAmountInput.d.ts +11 -0
- package/dist/components/funding/FiatAmountInput.d.ts.map +1 -0
- package/dist/components/funding/FiatAmountInput.js +94 -0
- package/dist/components/funding/FiatAmountInput.js.map +1 -0
- package/dist/components/funding/FiatAmountInput.mjs +105 -0
- package/dist/components/funding/FiatAmountInput.mjs.map +1 -0
- package/dist/components/funding/OffRamp.d.ts +3 -0
- package/dist/components/funding/OffRamp.d.ts.map +1 -0
- package/dist/components/funding/OffRamp.js +31 -0
- package/dist/components/funding/OffRamp.js.map +1 -0
- package/dist/components/funding/OffRamp.mjs +30 -0
- package/dist/components/funding/OffRamp.mjs.map +1 -0
- package/dist/components/funding/OffRampAmount.d.ts +22 -0
- package/dist/components/funding/OffRampAmount.d.ts.map +1 -0
- package/dist/components/funding/OffRampAmount.js +304 -0
- package/dist/components/funding/OffRampAmount.js.map +1 -0
- package/dist/components/funding/OffRampAmount.mjs +376 -0
- package/dist/components/funding/OffRampAmount.mjs.map +1 -0
- package/dist/components/funding/OffRampDeposit.d.ts +22 -0
- package/dist/components/funding/OffRampDeposit.d.ts.map +1 -0
- package/dist/components/funding/OffRampDeposit.js +455 -0
- package/dist/components/funding/OffRampDeposit.js.map +1 -0
- package/dist/components/funding/OffRampDeposit.mjs +551 -0
- package/dist/components/funding/OffRampDeposit.mjs.map +1 -0
- package/dist/components/funding/OffRampReturn.d.ts +2 -0
- package/dist/components/funding/OffRampReturn.d.ts.map +1 -0
- package/dist/components/funding/OffRampReturn.js +144 -0
- package/dist/components/funding/OffRampReturn.js.map +1 -0
- package/dist/components/funding/OffRampReturn.mjs +146 -0
- package/dist/components/funding/OffRampReturn.mjs.map +1 -0
- package/dist/components/funding/OnRamp.d.ts +7 -0
- package/dist/components/funding/OnRamp.d.ts.map +1 -0
- package/dist/components/funding/OnRamp.js +64 -0
- package/dist/components/funding/OnRamp.js.map +1 -0
- package/dist/components/funding/OnRamp.mjs +58 -0
- package/dist/components/funding/OnRamp.mjs.map +1 -0
- package/dist/components/funding/OnRampAmount.d.ts +21 -0
- package/dist/components/funding/OnRampAmount.d.ts.map +1 -0
- package/dist/components/funding/OnRampAmount.js +229 -0
- package/dist/components/funding/OnRampAmount.js.map +1 -0
- package/dist/components/funding/OnRampAmount.mjs +312 -0
- package/dist/components/funding/OnRampAmount.mjs.map +1 -0
- package/dist/components/funding/OnRampCash.d.ts +3 -0
- package/dist/components/funding/OnRampCash.d.ts.map +1 -0
- package/dist/components/funding/OnRampCash.js +26 -0
- package/dist/components/funding/OnRampCash.js.map +1 -0
- package/dist/components/funding/OnRampCash.mjs +25 -0
- package/dist/components/funding/OnRampCash.mjs.map +1 -0
- package/dist/components/funding/OnRampCrypto.d.ts +11 -0
- package/dist/components/funding/OnRampCrypto.d.ts.map +1 -0
- package/dist/components/funding/OnRampCrypto.js +126 -0
- package/dist/components/funding/OnRampCrypto.js.map +1 -0
- package/dist/components/funding/OnRampCrypto.mjs +148 -0
- package/dist/components/funding/OnRampCrypto.mjs.map +1 -0
- package/dist/components/funding/OnRampCryptoSend.d.ts +15 -0
- package/dist/components/funding/OnRampCryptoSend.d.ts.map +1 -0
- package/dist/components/funding/OnRampCryptoSend.js +251 -0
- package/dist/components/funding/OnRampCryptoSend.js.map +1 -0
- package/dist/components/funding/OnRampCryptoSend.mjs +323 -0
- package/dist/components/funding/OnRampCryptoSend.mjs.map +1 -0
- package/dist/components/funding/OnRampCryptoStatus.d.ts +14 -0
- package/dist/components/funding/OnRampCryptoStatus.d.ts.map +1 -0
- package/dist/components/funding/OnRampCryptoStatus.js +153 -0
- package/dist/components/funding/OnRampCryptoStatus.js.map +1 -0
- package/dist/components/funding/OnRampCryptoStatus.mjs +272 -0
- package/dist/components/funding/OnRampCryptoStatus.mjs.map +1 -0
- package/dist/components/funding/OnRampExternalAccountSelector.d.ts +11 -0
- package/dist/components/funding/OnRampExternalAccountSelector.d.ts.map +1 -0
- package/dist/components/funding/OnRampExternalAccountSelector.js +95 -0
- package/dist/components/funding/OnRampExternalAccountSelector.js.map +1 -0
- package/dist/components/funding/OnRampExternalAccountSelector.mjs +109 -0
- package/dist/components/funding/OnRampExternalAccountSelector.mjs.map +1 -0
- package/dist/components/funding/OnRampExternalWallet.d.ts +12 -0
- package/dist/components/funding/OnRampExternalWallet.d.ts.map +1 -0
- package/dist/components/funding/OnRampExternalWallet.js +218 -0
- package/dist/components/funding/OnRampExternalWallet.js.map +1 -0
- package/dist/components/funding/OnRampExternalWallet.mjs +303 -0
- package/dist/components/funding/OnRampExternalWallet.mjs.map +1 -0
- package/dist/components/funding/OnRampStatus.d.ts +15 -0
- package/dist/components/funding/OnRampStatus.d.ts.map +1 -0
- package/dist/components/funding/OnRampStatus.js +114 -0
- package/dist/components/funding/OnRampStatus.js.map +1 -0
- package/dist/components/funding/OnRampStatus.mjs +166 -0
- package/dist/components/funding/OnRampStatus.mjs.map +1 -0
- package/dist/components/funding/PaymentMethods.d.ts +35 -0
- package/dist/components/funding/PaymentMethods.d.ts.map +1 -0
- package/dist/components/funding/PaymentMethods.js +173 -0
- package/dist/components/funding/PaymentMethods.js.map +1 -0
- package/dist/components/funding/PaymentMethods.mjs +180 -0
- package/dist/components/funding/PaymentMethods.mjs.map +1 -0
- package/dist/components/funding/QuoteDetails.d.ts +13 -0
- package/dist/components/funding/QuoteDetails.d.ts.map +1 -0
- package/dist/components/funding/QuoteDetails.js +124 -0
- package/dist/components/funding/QuoteDetails.js.map +1 -0
- package/dist/components/funding/QuoteDetails.mjs +121 -0
- package/dist/components/funding/QuoteDetails.mjs.map +1 -0
- package/dist/components/funding/QuoteOption.d.ts +23 -0
- package/dist/components/funding/QuoteOption.d.ts.map +1 -0
- package/dist/components/funding/QuoteOption.js +153 -0
- package/dist/components/funding/QuoteOption.js.map +1 -0
- package/dist/components/funding/QuoteOption.mjs +150 -0
- package/dist/components/funding/QuoteOption.mjs.map +1 -0
- package/dist/components/funding/QuotePicker.d.ts +13 -0
- package/dist/components/funding/QuotePicker.d.ts.map +1 -0
- package/dist/components/funding/QuotePicker.js +49 -0
- package/dist/components/funding/QuotePicker.js.map +1 -0
- package/dist/components/funding/QuotePicker.mjs +48 -0
- package/dist/components/funding/QuotePicker.mjs.map +1 -0
- package/dist/components/funding/TokenSelect.d.ts +18 -0
- package/dist/components/funding/TokenSelect.d.ts.map +1 -0
- package/dist/components/funding/TokenSelect.js +198 -0
- package/dist/components/funding/TokenSelect.js.map +1 -0
- package/dist/components/funding/TokenSelect.mjs +210 -0
- package/dist/components/funding/TokenSelect.mjs.map +1 -0
- package/dist/components/funding/offRampRedirect.d.ts +61 -0
- package/dist/components/funding/offRampRedirect.d.ts.map +1 -0
- package/dist/components/funding/offRampRedirect.js +282 -0
- package/dist/components/funding/offRampRedirect.js.map +1 -0
- package/dist/components/funding/offRampRedirect.mjs +274 -0
- package/dist/components/funding/offRampRedirect.mjs.map +1 -0
- package/dist/components/send-transaction/SendTransaction.d.ts.map +1 -1
- package/dist/components/send-transaction/SendTransaction.js +8 -6
- package/dist/components/send-transaction/SendTransaction.js.map +1 -1
- package/dist/components/send-transaction/SendTransaction.mjs +8 -6
- package/dist/components/send-transaction/SendTransaction.mjs.map +1 -1
- package/dist/components/send-transaction/helpers.d.ts.map +1 -1
- package/dist/components/send-transaction/helpers.js +4 -0
- package/dist/components/send-transaction/helpers.js.map +1 -1
- package/dist/components/send-transaction/helpers.mjs +4 -0
- package/dist/components/send-transaction/helpers.mjs.map +1 -1
- package/dist/components/sign/Message.d.ts.map +1 -1
- package/dist/components/sign/Message.js +2 -1
- package/dist/components/sign/Message.js.map +1 -1
- package/dist/components/sign/Message.mjs +2 -2
- package/dist/components/sign/Message.mjs.map +1 -1
- package/dist/providers/SupportedAssetsProvider.d.ts +18 -0
- package/dist/providers/SupportedAssetsProvider.d.ts.map +1 -0
- package/dist/providers/SupportedAssetsProvider.js +71 -0
- package/dist/providers/SupportedAssetsProvider.js.map +1 -0
- package/dist/providers/SupportedAssetsProvider.mjs +114 -0
- package/dist/providers/SupportedAssetsProvider.mjs.map +1 -0
- package/dist/providers/TurnkeyProvider.d.ts.map +1 -1
- package/dist/providers/TurnkeyProvider.js +2 -1
- package/dist/providers/TurnkeyProvider.js.map +1 -1
- package/dist/providers/TurnkeyProvider.mjs +2 -1
- package/dist/providers/TurnkeyProvider.mjs.map +1 -1
- package/dist/providers/client/Provider.d.ts.map +1 -1
- package/dist/providers/client/Provider.js +98 -153
- package/dist/providers/client/Provider.js.map +1 -1
- package/dist/providers/client/Provider.mjs +214 -328
- package/dist/providers/client/Provider.mjs.map +1 -1
- package/dist/providers/client/Types.d.ts +37 -12
- package/dist/providers/client/Types.d.ts.map +1 -1
- package/dist/providers/client/Types.js.map +1 -1
- package/dist/providers/client/Types.mjs.map +1 -1
- package/dist/providers/modal/Provider.d.ts +1 -0
- package/dist/providers/modal/Provider.d.ts.map +1 -1
- package/dist/providers/modal/Provider.js +12 -0
- package/dist/providers/modal/Provider.js.map +1 -1
- package/dist/providers/modal/Provider.mjs +15 -0
- package/dist/providers/modal/Provider.mjs.map +1 -1
- package/dist/providers/modal/Root.d.ts.map +1 -1
- package/dist/providers/modal/Root.js +16 -14
- package/dist/providers/modal/Root.js.map +1 -1
- package/dist/providers/modal/Root.mjs +16 -14
- package/dist/providers/modal/Root.mjs.map +1 -1
- package/dist/styles.css +1 -1
- package/dist/types/method-types.d.ts +21 -9
- package/dist/types/method-types.d.ts.map +1 -1
- package/dist/utils/funding/buildCryptoTransfer.d.ts +41 -0
- package/dist/utils/funding/buildCryptoTransfer.d.ts.map +1 -0
- package/dist/utils/funding/buildCryptoTransfer.js +134 -0
- package/dist/utils/funding/buildCryptoTransfer.js.map +1 -0
- package/dist/utils/funding/buildCryptoTransfer.mjs +128 -0
- package/dist/utils/funding/buildCryptoTransfer.mjs.map +1 -0
- package/dist/utils/funding/chainLabel.d.ts +2 -0
- package/dist/utils/funding/chainLabel.d.ts.map +1 -0
- package/dist/utils/funding/chainLabel.js +19 -0
- package/dist/utils/funding/chainLabel.js.map +1 -0
- package/dist/utils/funding/chainLabel.mjs +18 -0
- package/dist/utils/funding/chainLabel.mjs.map +1 -0
- package/dist/utils/funding/depositPlan.d.ts +28 -0
- package/dist/utils/funding/depositPlan.d.ts.map +1 -0
- package/dist/utils/funding/depositPlan.js +127 -0
- package/dist/utils/funding/depositPlan.js.map +1 -0
- package/dist/utils/funding/depositPlan.mjs +120 -0
- package/dist/utils/funding/depositPlan.mjs.map +1 -0
- package/dist/utils/funding/index.d.ts +8 -0
- package/dist/utils/funding/index.d.ts.map +1 -0
- package/dist/utils/funding/onRampTokens.d.ts +6 -0
- package/dist/utils/funding/onRampTokens.d.ts.map +1 -0
- package/dist/utils/funding/onRampTokens.js +21 -0
- package/dist/utils/funding/onRampTokens.js.map +1 -0
- package/dist/utils/funding/onRampTokens.mjs +26 -0
- package/dist/utils/funding/onRampTokens.mjs.map +1 -0
- package/dist/utils/funding/rankQuotes.d.ts +7 -0
- package/dist/utils/funding/rankQuotes.d.ts.map +1 -0
- package/dist/utils/funding/rankQuotes.js +37 -0
- package/dist/utils/funding/rankQuotes.js.map +1 -0
- package/dist/utils/funding/rankQuotes.mjs +50 -0
- package/dist/utils/funding/rankQuotes.mjs.map +1 -0
- package/dist/utils/funding/sendCryptoTransfer.d.ts +26 -0
- package/dist/utils/funding/sendCryptoTransfer.d.ts.map +1 -0
- package/dist/utils/funding/sendCryptoTransfer.js +281 -0
- package/dist/utils/funding/sendCryptoTransfer.js.map +1 -0
- package/dist/utils/funding/sendCryptoTransfer.mjs +405 -0
- package/dist/utils/funding/sendCryptoTransfer.mjs.map +1 -0
- package/dist/utils/funding/tokenSymbol.d.ts +7 -0
- package/dist/utils/funding/tokenSymbol.d.ts.map +1 -0
- package/dist/utils/funding/tokenSymbol.js +32 -0
- package/dist/utils/funding/tokenSymbol.js.map +1 -0
- package/dist/utils/funding/tokenSymbol.mjs +31 -0
- package/dist/utils/funding/tokenSymbol.mjs.map +1 -0
- package/dist/utils/utils.d.ts +1 -0
- package/dist/utils/utils.d.ts.map +1 -1
- package/dist/utils/utils.js +5 -0
- package/dist/utils/utils.js.map +1 -1
- package/dist/utils/utils.mjs +7 -1
- package/dist/utils/utils.mjs.map +1 -1
- package/package.json +7 -3
- package/dist/components/onramp/OnRamp.d.ts +0 -14
- package/dist/components/onramp/OnRamp.d.ts.map +0 -1
- package/dist/components/onramp/OnRamp.js +0 -61
- package/dist/components/onramp/OnRamp.js.map +0 -1
- package/dist/components/onramp/OnRamp.mjs +0 -79
- package/dist/components/onramp/OnRamp.mjs.map +0 -1
|
@@ -0,0 +1,120 @@
|
|
|
1
|
+
import { objectSpread2 as _objectSpread2 } from '../../_virtual/_rollupPluginBabelHelpers.mjs';
|
|
2
|
+
import { toAtomicAmount } from './buildCryptoTransfer.mjs';
|
|
3
|
+
import { solanaRpcUrl } from './sendCryptoTransfer.mjs';
|
|
4
|
+
import { caip2Of, assetOf } from './tokenSymbol.mjs';
|
|
5
|
+
|
|
6
|
+
var SEPOLIA = "eip155:11155111";
|
|
7
|
+
var SOLANA_DEVNET = "solana:devnet";
|
|
8
|
+
// MoonPay's Sepolia ERC-20. Sandbox sells of USDC and other tokens deliver this, not the real token. 18 decimals.
|
|
9
|
+
var MOONPAY_TOKEN = "0x699cfe8997d647d03325ef4bfd039d5bb0984a17";
|
|
10
|
+
var POLYGON_ETH = "eip155:137/erc20:0x7ceb23fd6bc0add59e62ac25578270cff1b9f619";
|
|
11
|
+
function depositPlan(params) {
|
|
12
|
+
var token = params.token,
|
|
13
|
+
amount = params.amount,
|
|
14
|
+
provider = params.provider,
|
|
15
|
+
symbol = params.symbol;
|
|
16
|
+
var quotedCaip2 = caip2Of(token);
|
|
17
|
+
if (!params.sandboxMode) {
|
|
18
|
+
return sendPlan({
|
|
19
|
+
caip2: quotedCaip2,
|
|
20
|
+
asset: assetOf(token),
|
|
21
|
+
symbol: symbol,
|
|
22
|
+
amount: amount,
|
|
23
|
+
atomicAmount: params.atomicAmount,
|
|
24
|
+
rpcUrl: solanaRpcUrl(quotedCaip2, params.rpcUrl)
|
|
25
|
+
});
|
|
26
|
+
}
|
|
27
|
+
if (provider === "FIAT_RAMP_PROVIDER_COINBASE") {
|
|
28
|
+
return {
|
|
29
|
+
mode: "hold",
|
|
30
|
+
complete: false,
|
|
31
|
+
title: "Coinbase offramp is live only",
|
|
32
|
+
instructions: "Turn sandbox mode off to sell through Coinbase."
|
|
33
|
+
};
|
|
34
|
+
}
|
|
35
|
+
if (quotedCaip2.startsWith("solana:")) {
|
|
36
|
+
if (assetOf(token).startsWith("token:")) {
|
|
37
|
+
return {
|
|
38
|
+
mode: "hold",
|
|
39
|
+
complete: false,
|
|
40
|
+
title: "Solana devnet does not support this token",
|
|
41
|
+
instructions: "MoonPay sandbox accepts native SOL on Solana devnet. SPL tokens such as USDC are only available when sandbox mode is off."
|
|
42
|
+
};
|
|
43
|
+
}
|
|
44
|
+
return sendPlan({
|
|
45
|
+
caip2: SOLANA_DEVNET,
|
|
46
|
+
asset: "slip44:501",
|
|
47
|
+
symbol: "SOL",
|
|
48
|
+
amount: amount,
|
|
49
|
+
atomicAmount: params.atomicAmount,
|
|
50
|
+
rpcUrl: solanaRpcUrl(SOLANA_DEVNET, params.rpcUrl)
|
|
51
|
+
});
|
|
52
|
+
}
|
|
53
|
+
if (isQuotedEth(token)) {
|
|
54
|
+
return sendPlan({
|
|
55
|
+
caip2: SEPOLIA,
|
|
56
|
+
asset: "slip44:60",
|
|
57
|
+
symbol: "ETH",
|
|
58
|
+
amount: amount,
|
|
59
|
+
atomicAmount: params.atomicAmount
|
|
60
|
+
});
|
|
61
|
+
}
|
|
62
|
+
var tokenAmount = toAtomicAmount(amount, 18);
|
|
63
|
+
if (tokenAmount === undefined) {
|
|
64
|
+
return {
|
|
65
|
+
mode: "hold",
|
|
66
|
+
complete: false,
|
|
67
|
+
title: "Unable to price this sandbox deposit",
|
|
68
|
+
instructions: "MoonPay sandbox delivers its Sepolia test token, MoonPayToken, instead of the quoted asset. Enter the amount again and retry."
|
|
69
|
+
};
|
|
70
|
+
}
|
|
71
|
+
return sendPlan({
|
|
72
|
+
caip2: SEPOLIA,
|
|
73
|
+
asset: "erc20:".concat(MOONPAY_TOKEN),
|
|
74
|
+
symbol: "MPT",
|
|
75
|
+
amount: amount,
|
|
76
|
+
atomicAmount: tokenAmount.toString()
|
|
77
|
+
});
|
|
78
|
+
}
|
|
79
|
+
function applyReturnedAmount(plan, returned, quoteDecimals, quotedAsset) {
|
|
80
|
+
if (plan.mode !== "send" || !returned) return plan;
|
|
81
|
+
// MoonPay's baseCurrencyAmount is a display amount of the quoted asset.
|
|
82
|
+
// A sandbox plan can send a different asset, and that asset keeps its own decimals.
|
|
83
|
+
var decimals = plan.asset.toLowerCase() === quotedAsset.toLowerCase() ? quoteDecimals : decimalsForAsset(plan.asset);
|
|
84
|
+
var atomic = toAtomicAmount(returned, decimals);
|
|
85
|
+
if (atomic === undefined || atomic <= 0n) return plan;
|
|
86
|
+
return sendPlan({
|
|
87
|
+
caip2: plan.caip2,
|
|
88
|
+
asset: plan.asset,
|
|
89
|
+
symbol: plan.symbol,
|
|
90
|
+
amount: returned,
|
|
91
|
+
atomicAmount: atomic.toString(),
|
|
92
|
+
rpcUrl: plan.rpcUrl
|
|
93
|
+
});
|
|
94
|
+
}
|
|
95
|
+
function isDepositAddress(caip2, value) {
|
|
96
|
+
if (caip2.startsWith("eip155:")) return /^0x[0-9a-fA-F]{40}$/.test(value);
|
|
97
|
+
return /^[1-9A-HJ-NP-Za-km-z]{32,44}$/.test(value);
|
|
98
|
+
}
|
|
99
|
+
function positiveAtomic(value) {
|
|
100
|
+
return /^\d+$/.test(value) && BigInt(value) > 0n;
|
|
101
|
+
}
|
|
102
|
+
function decimalsForAsset(asset) {
|
|
103
|
+
var normalized = asset.toLowerCase();
|
|
104
|
+
if (normalized === "slip44:60" || normalized === "erc20:".concat(MOONPAY_TOKEN) || normalized.includes("0x7ceb23fd6bc0add59e62ac25578270cff1b9f619")) {
|
|
105
|
+
return 18;
|
|
106
|
+
}
|
|
107
|
+
if (normalized === "slip44:501") return 9;
|
|
108
|
+
return 6;
|
|
109
|
+
}
|
|
110
|
+
function sendPlan(params) {
|
|
111
|
+
return _objectSpread2({
|
|
112
|
+
mode: "send"
|
|
113
|
+
}, params);
|
|
114
|
+
}
|
|
115
|
+
function isQuotedEth(token) {
|
|
116
|
+
return token.endsWith("/slip44:60") || token.toLowerCase() === POLYGON_ETH;
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
export { applyReturnedAmount, depositPlan, isDepositAddress, positiveAtomic };
|
|
120
|
+
//# sourceMappingURL=depositPlan.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"depositPlan.mjs","sources":["../../../src/utils/funding/depositPlan.ts"],"sourcesContent":[null],"names":["SEPOLIA","SOLANA_DEVNET","MOONPAY_TOKEN","POLYGON_ETH","depositPlan","params","token","amount","provider","symbol","quotedCaip2","caip2Of","sandboxMode","sendPlan","caip2","asset","assetOf","atomicAmount","rpcUrl","solanaRpcUrl","mode","complete","title","instructions","startsWith","isQuotedEth","tokenAmount","toAtomicAmount","undefined","concat","toString","applyReturnedAmount","plan","returned","quoteDecimals","quotedAsset","decimals","toLowerCase","decimalsForAsset","atomic","isDepositAddress","value","test","positiveAtomic","BigInt","normalized","includes","_objectSpread","endsWith"],"mappings":"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"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
export * from "./buildCryptoTransfer";
|
|
2
|
+
export * from "./chainLabel";
|
|
3
|
+
export * from "./depositPlan";
|
|
4
|
+
export * from "./onRampTokens";
|
|
5
|
+
export * from "./rankQuotes";
|
|
6
|
+
export * from "./sendCryptoTransfer";
|
|
7
|
+
export * from "./tokenSymbol";
|
|
8
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/utils/funding/index.ts"],"names":[],"mappings":"AAAA,cAAc,uBAAuB,CAAC;AACtC,cAAc,cAAc,CAAC;AAC7B,cAAc,eAAe,CAAC;AAC9B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,cAAc,CAAC;AAC7B,cAAc,sBAAsB,CAAC;AACrC,cAAc,eAAe,CAAC"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { type OnRampCaip19, type OnRampCaip2, type WalletAccount } from "@turnkey/core";
|
|
2
|
+
export declare function onRampTokensForAccount(walletAccount?: WalletAccount | undefined, locked?: {
|
|
3
|
+
caip19?: OnRampCaip19 | undefined;
|
|
4
|
+
caip2?: OnRampCaip2 | undefined;
|
|
5
|
+
}): OnRampCaip19[];
|
|
6
|
+
//# sourceMappingURL=onRampTokens.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"onRampTokens.d.ts","sourceRoot":"","sources":["../../../src/utils/funding/onRampTokens.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,YAAY,EACjB,KAAK,WAAW,EAChB,KAAK,aAAa,EACnB,MAAM,eAAe,CAAC;AAGvB,wBAAgB,sBAAsB,CACpC,aAAa,CAAC,EAAE,aAAa,GAAG,SAAS,EACzC,MAAM,CAAC,EAAE;IACP,MAAM,CAAC,EAAE,YAAY,GAAG,SAAS,CAAC;IAClC,KAAK,CAAC,EAAE,WAAW,GAAG,SAAS,CAAC;CACjC,GACA,YAAY,EAAE,CAehB"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var core = require('@turnkey/core');
|
|
4
|
+
var tokenSymbol = require('./tokenSymbol.js');
|
|
5
|
+
|
|
6
|
+
function onRampTokensForAccount(walletAccount, locked) {
|
|
7
|
+
if (locked?.caip19) return [locked.caip19];
|
|
8
|
+
let tokens = core.OnRampCaip19Values;
|
|
9
|
+
if (walletAccount?.addressFormat === "ADDRESS_FORMAT_ETHEREUM") {
|
|
10
|
+
tokens = tokens.filter(token => tokenSymbol.caip2Of(token).startsWith("eip155:"));
|
|
11
|
+
} else if (walletAccount?.addressFormat === "ADDRESS_FORMAT_SOLANA") {
|
|
12
|
+
tokens = tokens.filter(token => tokenSymbol.caip2Of(token).startsWith("solana:"));
|
|
13
|
+
}
|
|
14
|
+
if (locked?.caip2) {
|
|
15
|
+
tokens = tokens.filter(token => tokenSymbol.caip2Of(token) === locked.caip2);
|
|
16
|
+
}
|
|
17
|
+
return [...tokens];
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
exports.onRampTokensForAccount = onRampTokensForAccount;
|
|
21
|
+
//# sourceMappingURL=onRampTokens.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"onRampTokens.js","sources":["../../../src/utils/funding/onRampTokens.ts"],"sourcesContent":[null],"names":["onRampTokensForAccount","walletAccount","locked","caip19","tokens","OnRampCaip19Values","addressFormat","filter","token","caip2Of","startsWith","caip2"],"mappings":";;;;;AAQM,SAAUA,sBAAsBA,CACpCC,aAAyC,EACzCC,MAGC,EAAA;EAED,IAAIA,MAAM,EAAEC,MAAM,EAAE,OAAO,CAACD,MAAM,CAACC,MAAM,CAAC;EAE1C,IAAIC,MAAM,GAA4BC,uBAAkB;AACxD,EAAA,IAAIJ,aAAa,EAAEK,aAAa,KAAK,yBAAyB,EAAE;AAC9DF,IAAAA,MAAM,GAAGA,MAAM,CAACG,MAAM,CAAEC,KAAK,IAAKC,mBAAO,CAACD,KAAK,CAAC,CAACE,UAAU,CAAC,SAAS,CAAC,CAAC;AACzE,EAAA,CAAC,MAAM,IAAIT,aAAa,EAAEK,aAAa,KAAK,uBAAuB,EAAE;AACnEF,IAAAA,MAAM,GAAGA,MAAM,CAACG,MAAM,CAAEC,KAAK,IAAKC,mBAAO,CAACD,KAAK,CAAC,CAACE,UAAU,CAAC,SAAS,CAAC,CAAC;AACzE,EAAA;EAEA,IAAIR,MAAM,EAAES,KAAK,EAAE;AACjBP,IAAAA,MAAM,GAAGA,MAAM,CAACG,MAAM,CAAEC,KAAK,IAAKC,mBAAO,CAACD,KAAK,CAAC,KAAKN,MAAM,CAACS,KAAK,CAAC;AACpE,EAAA;EAEA,OAAO,CAAC,GAAGP,MAAM,CAAC;AACpB;;;;"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { toConsumableArray as _toConsumableArray } from '../../_virtual/_rollupPluginBabelHelpers.mjs';
|
|
2
|
+
import { OnRampCaip19Values } from '@turnkey/core';
|
|
3
|
+
import { caip2Of } from './tokenSymbol.mjs';
|
|
4
|
+
|
|
5
|
+
function onRampTokensForAccount(walletAccount, locked) {
|
|
6
|
+
if (locked !== null && locked !== void 0 && locked.caip19) return [locked.caip19];
|
|
7
|
+
var tokens = OnRampCaip19Values;
|
|
8
|
+
if ((walletAccount === null || walletAccount === void 0 ? void 0 : walletAccount.addressFormat) === "ADDRESS_FORMAT_ETHEREUM") {
|
|
9
|
+
tokens = tokens.filter(function (token) {
|
|
10
|
+
return caip2Of(token).startsWith("eip155:");
|
|
11
|
+
});
|
|
12
|
+
} else if ((walletAccount === null || walletAccount === void 0 ? void 0 : walletAccount.addressFormat) === "ADDRESS_FORMAT_SOLANA") {
|
|
13
|
+
tokens = tokens.filter(function (token) {
|
|
14
|
+
return caip2Of(token).startsWith("solana:");
|
|
15
|
+
});
|
|
16
|
+
}
|
|
17
|
+
if (locked !== null && locked !== void 0 && locked.caip2) {
|
|
18
|
+
tokens = tokens.filter(function (token) {
|
|
19
|
+
return caip2Of(token) === locked.caip2;
|
|
20
|
+
});
|
|
21
|
+
}
|
|
22
|
+
return _toConsumableArray(tokens);
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
export { onRampTokensForAccount };
|
|
26
|
+
//# sourceMappingURL=onRampTokens.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"onRampTokens.mjs","sources":["../../../src/utils/funding/onRampTokens.ts"],"sourcesContent":[null],"names":["onRampTokensForAccount","walletAccount","locked","caip19","tokens","OnRampCaip19Values","addressFormat","filter","token","caip2Of","startsWith","caip2","_toConsumableArray"],"mappings":";;;;AAQM,SAAUA,sBAAsBA,CACpCC,aAAyC,EACzCC,MAGC,EAAA;AAED,EAAA,IAAIA,MAAM,KAAA,IAAA,IAANA,MAAM,KAAA,MAAA,IAANA,MAAM,CAAEC,MAAM,EAAE,OAAO,CAACD,MAAM,CAACC,MAAM,CAAC;EAE1C,IAAIC,MAAM,GAA4BC,kBAAkB;EACxD,IAAI,CAAAJ,aAAa,KAAA,IAAA,IAAbA,aAAa,KAAA,MAAA,GAAA,MAAA,GAAbA,aAAa,CAAEK,aAAa,MAAK,yBAAyB,EAAE;AAC9DF,IAAAA,MAAM,GAAGA,MAAM,CAACG,MAAM,CAAC,UAACC,KAAK,EAAA;MAAA,OAAKC,OAAO,CAACD,KAAK,CAAC,CAACE,UAAU,CAAC,SAAS,CAAC;IAAA,CAAA,CAAC;AACzE,EAAA,CAAC,MAAM,IAAI,CAAAT,aAAa,KAAA,IAAA,IAAbA,aAAa,KAAA,MAAA,GAAA,MAAA,GAAbA,aAAa,CAAEK,aAAa,MAAK,uBAAuB,EAAE;AACnEF,IAAAA,MAAM,GAAGA,MAAM,CAACG,MAAM,CAAC,UAACC,KAAK,EAAA;MAAA,OAAKC,OAAO,CAACD,KAAK,CAAC,CAACE,UAAU,CAAC,SAAS,CAAC;IAAA,CAAA,CAAC;AACzE,EAAA;AAEA,EAAA,IAAIR,MAAM,KAAA,IAAA,IAANA,MAAM,eAANA,MAAM,CAAES,KAAK,EAAE;AACjBP,IAAAA,MAAM,GAAGA,MAAM,CAACG,MAAM,CAAC,UAACC,KAAK,EAAA;AAAA,MAAA,OAAKC,OAAO,CAACD,KAAK,CAAC,KAAKN,MAAM,CAACS,KAAK;IAAA,CAAA,CAAC;AACpE,EAAA;EAEA,OAAAC,kBAAA,CAAWR,MAAM,CAAA;AACnB;;;;"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { v1FiatOnRampQuote } from "@turnkey/core";
|
|
2
|
+
export type QuoteRankLabel = "Lowest fees" | "Highest crypto yield" | "Highest fiat received";
|
|
3
|
+
export declare function rankQuotes(quotes: v1FiatOnRampQuote[], yieldOn?: "crypto" | "fiat"): {
|
|
4
|
+
quote: v1FiatOnRampQuote;
|
|
5
|
+
labels: QuoteRankLabel[];
|
|
6
|
+
}[];
|
|
7
|
+
//# sourceMappingURL=rankQuotes.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rankQuotes.d.ts","sourceRoot":"","sources":["../../../src/utils/funding/rankQuotes.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAoB,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAEzE,MAAM,MAAM,cAAc,GACtB,aAAa,GACb,sBAAsB,GACtB,uBAAuB,CAAC;AAE5B,wBAAgB,UAAU,CACxB,MAAM,EAAE,iBAAiB,EAAE,EAC3B,OAAO,GAAE,QAAQ,GAAG,MAAiB,GACpC;IACD,KAAK,EAAE,iBAAiB,CAAC;IACzB,MAAM,EAAE,cAAc,EAAE,CAAC;CAC1B,EAAE,CAkCF"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
function rankQuotes(quotes, yieldOn = "crypto") {
|
|
4
|
+
const yieldAmount = quote => yieldOn === "fiat" ? quote.fiatAmount : quote.cryptoAmount;
|
|
5
|
+
const yieldLabel = yieldOn === "fiat" ? "Highest fiat received" : "Highest crypto yield";
|
|
6
|
+
const lowestFees = quotes.reduce((best, quote) => !best || compareAmounts(quote.totalFee, best.totalFee) < 0 ? quote : best, undefined);
|
|
7
|
+
const highestYield = quotes.reduce((best, quote) => !best || compareAmounts(yieldAmount(quote), yieldAmount(best)) > 0 ? quote : best, undefined);
|
|
8
|
+
if (!lowestFees) return [];
|
|
9
|
+
const rest = quotes.filter(quote => quote.quoteId !== lowestFees.quoteId).sort((a, b) => compareAmounts(a.totalFee, b.totalFee));
|
|
10
|
+
return [lowestFees, ...rest].map(quote => ({
|
|
11
|
+
quote,
|
|
12
|
+
labels: [...(quote.quoteId === lowestFees.quoteId ? ["Lowest fees"] : []), ...(quote.quoteId === highestYield?.quoteId ? [yieldLabel] : [])]
|
|
13
|
+
}));
|
|
14
|
+
}
|
|
15
|
+
function compareAmounts(a, b) {
|
|
16
|
+
const scale = Math.max(a.decimals, b.decimals);
|
|
17
|
+
const left = scaleAmount(a, scale);
|
|
18
|
+
const right = scaleAmount(b, scale);
|
|
19
|
+
if (left < right) return -1;
|
|
20
|
+
if (left > right) return 1;
|
|
21
|
+
return 0;
|
|
22
|
+
}
|
|
23
|
+
function scaleAmount(amount, decimals) {
|
|
24
|
+
let value;
|
|
25
|
+
try {
|
|
26
|
+
value = BigInt(amount.amount);
|
|
27
|
+
} catch {
|
|
28
|
+
return 0n;
|
|
29
|
+
}
|
|
30
|
+
const delta = decimals - amount.decimals;
|
|
31
|
+
if (delta === 0) return value;
|
|
32
|
+
if (delta > 0) return value * 10n ** BigInt(delta);
|
|
33
|
+
return value / 10n ** BigInt(-delta);
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
exports.rankQuotes = rankQuotes;
|
|
37
|
+
//# sourceMappingURL=rankQuotes.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rankQuotes.js","sources":["../../../src/utils/funding/rankQuotes.ts"],"sourcesContent":[null],"names":["rankQuotes","quotes","yieldOn","yieldAmount","quote","fiatAmount","cryptoAmount","yieldLabel","lowestFees","reduce","best","compareAmounts","totalFee","undefined","highestYield","rest","filter","quoteId","sort","a","b","map","labels","scale","Math","max","decimals","left","scaleAmount","right","amount","value","BigInt","delta"],"mappings":";;SAOgBA,UAAUA,CACxBC,MAA2B,EAC3BC,UAA6B,QAAQ,EAAA;AAKrC,EAAA,MAAMC,WAAW,GAAIC,KAAwB,IAC3CF,OAAO,KAAK,MAAM,GAAGE,KAAK,CAACC,UAAU,GAAGD,KAAK,CAACE,YAAY;EAC5D,MAAMC,UAAU,GACdL,OAAO,KAAK,MAAM,GAAG,uBAAuB,GAAG,sBAAsB;AACvE,EAAA,MAAMM,UAAU,GAAGP,MAAM,CAACQ,MAAM,CAC9B,CAACC,IAAI,EAAEN,KAAK,KACV,CAACM,IAAI,IAAIC,cAAc,CAACP,KAAK,CAACQ,QAAQ,EAAEF,IAAI,CAACE,QAAQ,CAAC,GAAG,CAAC,GAAGR,KAAK,GAAGM,IAAI,EAC3EG,SAAS,CACV;AACD,EAAA,MAAMC,YAAY,GAAGb,MAAM,CAACQ,MAAM,CAChC,CAACC,IAAI,EAAEN,KAAK,KACV,CAACM,IAAI,IAAIC,cAAc,CAACR,WAAW,CAACC,KAAK,CAAC,EAAED,WAAW,CAACO,IAAI,CAAC,CAAC,GAAG,CAAC,GAC9DN,KAAK,GACLM,IAAI,EACVG,SAAS,CACV;AACD,EAAA,IAAI,CAACL,UAAU,EAAE,OAAO,EAAE;AAE1B,EAAA,MAAMO,IAAI,GAAGd,MAAM,CAChBe,MAAM,CAAEZ,KAAK,IAAKA,KAAK,CAACa,OAAO,KAAKT,UAAU,CAACS,OAAO,CAAC,CACvDC,IAAI,CAAC,CAACC,CAAC,EAAEC,CAAC,KAAKT,cAAc,CAACQ,CAAC,CAACP,QAAQ,EAAEQ,CAAC,CAACR,QAAQ,CAAC,CAAC;EAEzD,OAAO,CAACJ,UAAU,EAAE,GAAGO,IAAI,CAAC,CAACM,GAAG,CAAEjB,KAAK,KAAM;IAC3CA,KAAK;AACLkB,IAAAA,MAAM,EAAE,CACN,IAAIlB,KAAK,CAACa,OAAO,KAAKT,UAAU,CAACS,OAAO,GACnC,CAAC,aAAa,CAAW,GAC1B,EAAE,CAAC,EACP,IAAIb,KAAK,CAACa,OAAO,KAAKH,YAAY,EAAEG,OAAO,GACtC,CAACV,UAAU,CAAW,GACvB,EAAE,CAAC;AAEV,GAAA,CAAC,CAAC;AACL;AAEA,SAASI,cAAcA,CAACQ,CAAmB,EAAEC,CAAmB,EAAA;AAC9D,EAAA,MAAMG,KAAK,GAAGC,IAAI,CAACC,GAAG,CAACN,CAAC,CAACO,QAAQ,EAAEN,CAAC,CAACM,QAAQ,CAAC;AAC9C,EAAA,MAAMC,IAAI,GAAGC,WAAW,CAACT,CAAC,EAAEI,KAAK,CAAC;AAClC,EAAA,MAAMM,KAAK,GAAGD,WAAW,CAACR,CAAC,EAAEG,KAAK,CAAC;AACnC,EAAA,IAAII,IAAI,GAAGE,KAAK,EAAE,OAAO,EAAE;AAC3B,EAAA,IAAIF,IAAI,GAAGE,KAAK,EAAE,OAAO,CAAC;AAC1B,EAAA,OAAO,CAAC;AACV;AAEA,SAASD,WAAWA,CAACE,MAAwB,EAAEJ,QAAgB,EAAA;AAC7D,EAAA,IAAIK,KAAa;EACjB,IAAI;AACFA,IAAAA,KAAK,GAAGC,MAAM,CAACF,MAAM,CAACA,MAAM,CAAC;AAC/B,EAAA,CAAC,CAAC,MAAM;AACN,IAAA,OAAO,EAAE;AACX,EAAA;AAEA,EAAA,MAAMG,KAAK,GAAGP,QAAQ,GAAGI,MAAM,CAACJ,QAAQ;AACxC,EAAA,IAAIO,KAAK,KAAK,CAAC,EAAE,OAAOF,KAAK;AAC7B,EAAA,IAAIE,KAAK,GAAG,CAAC,EAAE,OAAOF,KAAK,GAAG,GAAG,IAAIC,MAAM,CAACC,KAAK,CAAC;EAClD,OAAOF,KAAK,GAAG,GAAG,IAAIC,MAAM,CAAC,CAACC,KAAK,CAAC;AACtC;;;;"}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
import { toConsumableArray as _toConsumableArray } from '../../_virtual/_rollupPluginBabelHelpers.mjs';
|
|
2
|
+
|
|
3
|
+
function rankQuotes(quotes) {
|
|
4
|
+
var yieldOn = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : "crypto";
|
|
5
|
+
var yieldAmount = function yieldAmount(quote) {
|
|
6
|
+
return yieldOn === "fiat" ? quote.fiatAmount : quote.cryptoAmount;
|
|
7
|
+
};
|
|
8
|
+
var yieldLabel = yieldOn === "fiat" ? "Highest fiat received" : "Highest crypto yield";
|
|
9
|
+
var lowestFees = quotes.reduce(function (best, quote) {
|
|
10
|
+
return !best || compareAmounts(quote.totalFee, best.totalFee) < 0 ? quote : best;
|
|
11
|
+
}, undefined);
|
|
12
|
+
var highestYield = quotes.reduce(function (best, quote) {
|
|
13
|
+
return !best || compareAmounts(yieldAmount(quote), yieldAmount(best)) > 0 ? quote : best;
|
|
14
|
+
}, undefined);
|
|
15
|
+
if (!lowestFees) return [];
|
|
16
|
+
var rest = quotes.filter(function (quote) {
|
|
17
|
+
return quote.quoteId !== lowestFees.quoteId;
|
|
18
|
+
}).sort(function (a, b) {
|
|
19
|
+
return compareAmounts(a.totalFee, b.totalFee);
|
|
20
|
+
});
|
|
21
|
+
return [lowestFees].concat(_toConsumableArray(rest)).map(function (quote) {
|
|
22
|
+
return {
|
|
23
|
+
quote: quote,
|
|
24
|
+
labels: [].concat(_toConsumableArray(quote.quoteId === lowestFees.quoteId ? ["Lowest fees"] : []), _toConsumableArray(quote.quoteId === (highestYield === null || highestYield === void 0 ? void 0 : highestYield.quoteId) ? [yieldLabel] : []))
|
|
25
|
+
};
|
|
26
|
+
});
|
|
27
|
+
}
|
|
28
|
+
function compareAmounts(a, b) {
|
|
29
|
+
var scale = Math.max(a.decimals, b.decimals);
|
|
30
|
+
var left = scaleAmount(a, scale);
|
|
31
|
+
var right = scaleAmount(b, scale);
|
|
32
|
+
if (left < right) return -1;
|
|
33
|
+
if (left > right) return 1;
|
|
34
|
+
return 0;
|
|
35
|
+
}
|
|
36
|
+
function scaleAmount(amount, decimals) {
|
|
37
|
+
var value;
|
|
38
|
+
try {
|
|
39
|
+
value = BigInt(amount.amount);
|
|
40
|
+
} catch (_unused) {
|
|
41
|
+
return 0n;
|
|
42
|
+
}
|
|
43
|
+
var delta = decimals - amount.decimals;
|
|
44
|
+
if (delta === 0) return value;
|
|
45
|
+
if (delta > 0) return value * Math.pow(10n, BigInt(delta));
|
|
46
|
+
return value / Math.pow(10n, BigInt(-delta));
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
export { rankQuotes };
|
|
50
|
+
//# sourceMappingURL=rankQuotes.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rankQuotes.mjs","sources":["../../../src/utils/funding/rankQuotes.ts"],"sourcesContent":[null],"names":["rankQuotes","quotes","yieldOn","yieldAmount","quote","fiatAmount","cryptoAmount","yieldLabel","lowestFees","reduce","best","compareAmounts","totalFee","undefined","highestYield","rest","filter","quoteId","sort","a","b","concat","_toConsumableArray","map","labels","scale","Math","max","decimals","left","scaleAmount","right","amount","value","BigInt","_unused","delta","pow"],"mappings":"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"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { type EthTransaction, type OnRampCaip19, type SolanaTransaction, type WalletProvider, type WalletRpcProvider } from "@turnkey/core";
|
|
2
|
+
import { type OnRampCryptoTransfer } from "./buildCryptoTransfer";
|
|
3
|
+
export declare const SOLANA_DEVNET_RPC = "https://api.devnet.solana.com";
|
|
4
|
+
export declare function isSolanaDevnet(caip2: string): boolean;
|
|
5
|
+
export declare function solanaRpcUrl(caip2: string, rpcUrl?: string | undefined): string | undefined;
|
|
6
|
+
export declare function buildUnsignedOnRampTransaction(params: {
|
|
7
|
+
transfer: OnRampCryptoTransfer;
|
|
8
|
+
provider: WalletRpcProvider;
|
|
9
|
+
rpcUrl?: string | undefined;
|
|
10
|
+
}): Promise<string>;
|
|
11
|
+
export declare function sendErrorMessage(error: unknown): string;
|
|
12
|
+
export declare function isUserRejected(error: unknown): boolean;
|
|
13
|
+
export declare function evmChainId(chainInfo: WalletProvider["chainInfo"]): number | undefined;
|
|
14
|
+
export declare function buildUnsignedSolanaTransaction(transfer: OnRampCryptoTransfer, rpcUrl: string): Promise<string>;
|
|
15
|
+
export declare function switchSelectedEthereumChain(provider: WalletRpcProvider, hexChainId: string): Promise<unknown>;
|
|
16
|
+
export declare function ensureEthereumChain(provider: WalletRpcProvider, chainId: number): Promise<void>;
|
|
17
|
+
export declare function embeddedDepositTransaction(params: {
|
|
18
|
+
caip2: string;
|
|
19
|
+
asset: string;
|
|
20
|
+
quotedToken: OnRampCaip19;
|
|
21
|
+
from: string;
|
|
22
|
+
to: string;
|
|
23
|
+
atomicAmount: string;
|
|
24
|
+
rpcUrl?: string | undefined;
|
|
25
|
+
}): Promise<EthTransaction | SolanaTransaction>;
|
|
26
|
+
//# sourceMappingURL=sendCryptoTransfer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sendCryptoTransfer.d.ts","sourceRoot":"","sources":["../../../src/utils/funding/sendCryptoTransfer.ts"],"names":[],"mappings":"AAmBA,OAAO,EAIL,KAAK,cAAc,EACnB,KAAK,YAAY,EACjB,KAAK,iBAAiB,EACtB,KAAK,cAAc,EACnB,KAAK,iBAAiB,EACvB,MAAM,eAAe,CAAC;AAEvB,OAAO,EAEL,KAAK,oBAAoB,EAC1B,MAAM,uBAAuB,CAAC;AAE/B,eAAO,MAAM,iBAAiB,kCAAkC,CAAC;AAEjE,wBAAgB,cAAc,CAAC,KAAK,EAAE,MAAM,WAM3C;AAGD,wBAAgB,YAAY,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,SAAS,sBAItE;AAED,wBAAsB,8BAA8B,CAAC,MAAM,EAAE;IAC3D,QAAQ,EAAE,oBAAoB,CAAC;IAC/B,QAAQ,EAAE,iBAAiB,CAAC;IAC5B,MAAM,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CAC7B,GAAG,OAAO,CAAC,MAAM,CAAC,CAYlB;AAED,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,OAAO,UAuB9C;AAED,wBAAgB,cAAc,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAoBtD;AAED,wBAAgB,UAAU,CAAC,SAAS,EAAE,cAAc,CAAC,WAAW,CAAC,sBAShE;AA+DD,wBAAsB,8BAA8B,CAClD,QAAQ,EAAE,oBAAoB,EAC9B,MAAM,EAAE,MAAM,mBAsFf;AAMD,wBAAgB,2BAA2B,CACzC,QAAQ,EAAE,iBAAiB,EAC3B,UAAU,EAAE,MAAM,oBAKnB;AAED,wBAAsB,mBAAmB,CACvC,QAAQ,EAAE,iBAAiB,EAC3B,OAAO,EAAE,MAAM,iBAmBhB;AAED,wBAAsB,0BAA0B,CAAC,MAAM,EAAE;IACvD,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,YAAY,CAAC;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,EAAE,EAAE,MAAM,CAAC;IACX,YAAY,EAAE,MAAM,CAAC;IACrB,MAAM,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CAC7B,GAAG,OAAO,CAAC,cAAc,GAAG,iBAAiB,CAAC,CA6C9C"}
|
|
@@ -0,0 +1,281 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var system = require('@solana-program/system');
|
|
4
|
+
var token = require('@solana-program/token');
|
|
5
|
+
var kit = require('@solana/kit');
|
|
6
|
+
var encoding = require('@turnkey/encoding');
|
|
7
|
+
var core = require('@turnkey/core');
|
|
8
|
+
var viem = require('viem');
|
|
9
|
+
var buildCryptoTransfer = require('./buildCryptoTransfer.js');
|
|
10
|
+
|
|
11
|
+
const SOLANA_DEVNET_RPC = "https://api.devnet.solana.com";
|
|
12
|
+
function isSolanaDevnet(caip2) {
|
|
13
|
+
return caip2.startsWith("solana:") && (caip2.includes("devnet") || caip2.includes("EtWTRABZaYq6iMfeYKouRu166VU2xqa1"));
|
|
14
|
+
}
|
|
15
|
+
// Public devnet endpoint used when a caller does not pass rpcUrl.
|
|
16
|
+
function solanaRpcUrl(caip2, rpcUrl) {
|
|
17
|
+
if (rpcUrl) return rpcUrl;
|
|
18
|
+
if (isSolanaDevnet(caip2)) return SOLANA_DEVNET_RPC;
|
|
19
|
+
return undefined;
|
|
20
|
+
}
|
|
21
|
+
async function buildUnsignedOnRampTransaction(params) {
|
|
22
|
+
const {
|
|
23
|
+
transfer,
|
|
24
|
+
provider,
|
|
25
|
+
rpcUrl
|
|
26
|
+
} = params;
|
|
27
|
+
if (transfer.transactionType === "TRANSACTION_TYPE_SOLANA") {
|
|
28
|
+
if (!rpcUrl) {
|
|
29
|
+
throw new core.TurnkeyError("Missing rpcUrl: connected Solana wallets require an RPC URL to broadcast transactions.", core.TurnkeyErrorCodes.SIGN_AND_SEND_TRANSACTION_ERROR);
|
|
30
|
+
}
|
|
31
|
+
return buildUnsignedSolanaTransaction(transfer, rpcUrl);
|
|
32
|
+
}
|
|
33
|
+
return buildUnsignedEthereumTransaction(transfer, provider);
|
|
34
|
+
}
|
|
35
|
+
function sendErrorMessage(error) {
|
|
36
|
+
const messages = [];
|
|
37
|
+
const seen = new Set();
|
|
38
|
+
let current = error;
|
|
39
|
+
while (current && typeof current === "object" && !seen.has(current)) {
|
|
40
|
+
seen.add(current);
|
|
41
|
+
const record = current;
|
|
42
|
+
if (typeof record.message === "string" && record.message.trim()) {
|
|
43
|
+
messages.push(record.message.trim());
|
|
44
|
+
}
|
|
45
|
+
current = record.cause;
|
|
46
|
+
}
|
|
47
|
+
if (messages.some(message => /insufficient|out\s*of\s*funds/i.test(message))) {
|
|
48
|
+
return "Insufficient funds.";
|
|
49
|
+
}
|
|
50
|
+
const specific = [...messages].reverse().find(message => !/^failed to /i.test(message));
|
|
51
|
+
return specific ?? "Unable to send this transfer.";
|
|
52
|
+
}
|
|
53
|
+
function isUserRejected(error) {
|
|
54
|
+
const seen = new Set();
|
|
55
|
+
let current = error;
|
|
56
|
+
while (current && typeof current === "object" && !seen.has(current)) {
|
|
57
|
+
seen.add(current);
|
|
58
|
+
const record = current;
|
|
59
|
+
if (record.code === 4001 || record.code === "ACTION_REJECTED") return true;
|
|
60
|
+
if (typeof record.message === "string" && /user rejected|user denied|rejected the request/i.test(record.message)) {
|
|
61
|
+
return true;
|
|
62
|
+
}
|
|
63
|
+
current = record.cause;
|
|
64
|
+
}
|
|
65
|
+
return false;
|
|
66
|
+
}
|
|
67
|
+
function evmChainId(chainInfo) {
|
|
68
|
+
if (chainInfo.namespace !== core.Chain.Ethereum || !("chainId" in chainInfo)) {
|
|
69
|
+
return undefined;
|
|
70
|
+
}
|
|
71
|
+
const chainId = chainInfo.chainId;
|
|
72
|
+
if (typeof chainId !== "string") return undefined;
|
|
73
|
+
return chainId.startsWith("0x") ? Number.parseInt(chainId, 16) : Number(chainId);
|
|
74
|
+
}
|
|
75
|
+
async function buildUnsignedEthereumTransaction(transfer, provider) {
|
|
76
|
+
const chainId = Number(transfer.caip2.slice("eip155:".length));
|
|
77
|
+
const to = transfer.kind === "erc20" ? transfer.tokenAddress : transfer.to;
|
|
78
|
+
const value = transfer.kind === "native" ? BigInt(transfer.amount) : 0n;
|
|
79
|
+
const data = transfer.kind === "erc20" ? transfer.data : "0x";
|
|
80
|
+
const request = {
|
|
81
|
+
from: transfer.from,
|
|
82
|
+
to,
|
|
83
|
+
value: viem.numberToHex(value),
|
|
84
|
+
data
|
|
85
|
+
};
|
|
86
|
+
const [nonceHex, gasHex] = await Promise.all([evmRequest(provider, "eth_getTransactionCount", [transfer.from, "pending"]), evmRequest(provider, "eth_estimateGas", [request])]);
|
|
87
|
+
const nonce = Number(BigInt(String(nonceHex)));
|
|
88
|
+
const gas = BigInt(String(gasHex)) * 12n / 10n;
|
|
89
|
+
try {
|
|
90
|
+
const [priorityHex, block] = await Promise.all([evmRequest(provider, "eth_maxPriorityFeePerGas"), evmRequest(provider, "eth_getBlockByNumber", ["latest", false])]);
|
|
91
|
+
const baseFeePerGas = block?.baseFeePerGas;
|
|
92
|
+
if (!baseFeePerGas) throw new Error("Missing base fee");
|
|
93
|
+
const maxPriorityFeePerGas = BigInt(String(priorityHex));
|
|
94
|
+
const maxFeePerGas = BigInt(baseFeePerGas) * 2n + maxPriorityFeePerGas;
|
|
95
|
+
return viem.serializeTransaction({
|
|
96
|
+
type: "eip1559",
|
|
97
|
+
chainId,
|
|
98
|
+
nonce,
|
|
99
|
+
gas,
|
|
100
|
+
maxFeePerGas,
|
|
101
|
+
maxPriorityFeePerGas,
|
|
102
|
+
to,
|
|
103
|
+
value,
|
|
104
|
+
data
|
|
105
|
+
});
|
|
106
|
+
} catch (error) {
|
|
107
|
+
if (isUserRejected(error)) throw error;
|
|
108
|
+
const gasPrice = BigInt(String(await evmRequest(provider, "eth_gasPrice")));
|
|
109
|
+
return viem.serializeTransaction({
|
|
110
|
+
type: "legacy",
|
|
111
|
+
chainId,
|
|
112
|
+
nonce,
|
|
113
|
+
gas,
|
|
114
|
+
gasPrice,
|
|
115
|
+
to,
|
|
116
|
+
value,
|
|
117
|
+
data
|
|
118
|
+
});
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
async function buildUnsignedSolanaTransaction(transfer, rpcUrl) {
|
|
122
|
+
const rpc = kit.createSolanaRpc(rpcUrl);
|
|
123
|
+
const from = kit.address(transfer.from);
|
|
124
|
+
const to = kit.address(transfer.to);
|
|
125
|
+
const payer = kit.createNoopSigner(from);
|
|
126
|
+
const instructions = [];
|
|
127
|
+
if (transfer.kind === "spl") {
|
|
128
|
+
const mint = kit.address(transfer.mintAddress);
|
|
129
|
+
const mintAccount = await rpc.getAccountInfo(mint, {
|
|
130
|
+
encoding: "base64"
|
|
131
|
+
}).send();
|
|
132
|
+
if (!mintAccount.value) {
|
|
133
|
+
throw new core.TurnkeyError("Token mint was not found.", core.TurnkeyErrorCodes.INVALID_REQUEST);
|
|
134
|
+
}
|
|
135
|
+
const tokenProgram = mintAccount.value.owner ?? token.TOKEN_PROGRAM_ADDRESS;
|
|
136
|
+
const [fromTokenAccount] = await token.findAssociatedTokenPda({
|
|
137
|
+
owner: from,
|
|
138
|
+
tokenProgram,
|
|
139
|
+
mint
|
|
140
|
+
});
|
|
141
|
+
const [toTokenAccount] = await token.findAssociatedTokenPda({
|
|
142
|
+
owner: to,
|
|
143
|
+
tokenProgram,
|
|
144
|
+
mint
|
|
145
|
+
});
|
|
146
|
+
const destination = await rpc.getAccountInfo(toTokenAccount, {
|
|
147
|
+
encoding: "base64"
|
|
148
|
+
}).send();
|
|
149
|
+
if (!destination.value) {
|
|
150
|
+
instructions.push(token.getCreateAssociatedTokenInstruction({
|
|
151
|
+
payer,
|
|
152
|
+
ata: toTokenAccount,
|
|
153
|
+
owner: to,
|
|
154
|
+
mint,
|
|
155
|
+
tokenProgram
|
|
156
|
+
}));
|
|
157
|
+
}
|
|
158
|
+
instructions.push(token.getTransferInstruction({
|
|
159
|
+
source: fromTokenAccount,
|
|
160
|
+
destination: toTokenAccount,
|
|
161
|
+
authority: payer,
|
|
162
|
+
amount: BigInt(transfer.amount)
|
|
163
|
+
}, {
|
|
164
|
+
programAddress: tokenProgram
|
|
165
|
+
}));
|
|
166
|
+
} else {
|
|
167
|
+
instructions.push(system.getTransferSolInstruction({
|
|
168
|
+
source: payer,
|
|
169
|
+
destination: to,
|
|
170
|
+
amount: BigInt(transfer.amount)
|
|
171
|
+
}));
|
|
172
|
+
}
|
|
173
|
+
// sendTransaction simulates at "finalized" unless told otherwise. A "confirmed"
|
|
174
|
+
// blockhash is not in that cache yet, so the RPC rejects it as BlockhashNotFound.
|
|
175
|
+
const {
|
|
176
|
+
value: latestBlockhash
|
|
177
|
+
} = await rpc.getLatestBlockhash({
|
|
178
|
+
commitment: "finalized"
|
|
179
|
+
}).send();
|
|
180
|
+
const transaction = kit.compileTransaction(kit.setTransactionMessageLifetimeUsingBlockhash(latestBlockhash, kit.appendTransactionMessageInstructions(instructions, kit.setTransactionMessageFeePayer(from, kit.createTransactionMessage({
|
|
181
|
+
version: "legacy"
|
|
182
|
+
})))));
|
|
183
|
+
const binary = encoding.atob(kit.getBase64EncodedWireTransaction(transaction));
|
|
184
|
+
return encoding.uint8ArrayToHexString(Uint8Array.from(binary, char => char.charCodeAt(0)));
|
|
185
|
+
}
|
|
186
|
+
function switchSelectedEthereumChain(provider, hexChainId) {
|
|
187
|
+
return evmRequest(provider, "wallet_switchEthereumChain", [{
|
|
188
|
+
chainId: hexChainId
|
|
189
|
+
}]);
|
|
190
|
+
}
|
|
191
|
+
async function ensureEthereumChain(provider, chainId) {
|
|
192
|
+
const hexChainId = `0x${chainId.toString(16)}`;
|
|
193
|
+
try {
|
|
194
|
+
await switchSelectedEthereumChain(provider, hexChainId);
|
|
195
|
+
} catch (caught) {
|
|
196
|
+
const code = caught.code;
|
|
197
|
+
// 4902 means the wallet does not know this chain. Only Sepolia has a
|
|
198
|
+
// known RPC here. Other chains keep the wallet's own add-network error.
|
|
199
|
+
if (code !== 4902 || chainId !== 11155111) throw caught;
|
|
200
|
+
await evmRequest(provider, "wallet_addEthereumChain", [{
|
|
201
|
+
chainId: hexChainId,
|
|
202
|
+
chainName: "Sepolia",
|
|
203
|
+
nativeCurrency: {
|
|
204
|
+
name: "Ether",
|
|
205
|
+
symbol: "ETH",
|
|
206
|
+
decimals: 18
|
|
207
|
+
},
|
|
208
|
+
rpcUrls: ["https://rpc.sepolia.org"]
|
|
209
|
+
}]);
|
|
210
|
+
}
|
|
211
|
+
}
|
|
212
|
+
async function embeddedDepositTransaction(params) {
|
|
213
|
+
const {
|
|
214
|
+
caip2,
|
|
215
|
+
asset,
|
|
216
|
+
quotedToken,
|
|
217
|
+
from,
|
|
218
|
+
to,
|
|
219
|
+
atomicAmount,
|
|
220
|
+
rpcUrl
|
|
221
|
+
} = params;
|
|
222
|
+
const transfer = buildCryptoTransfer.transferFromAsset({
|
|
223
|
+
caip2,
|
|
224
|
+
asset,
|
|
225
|
+
quotedToken,
|
|
226
|
+
from,
|
|
227
|
+
to,
|
|
228
|
+
atomicAmount
|
|
229
|
+
});
|
|
230
|
+
if (transfer.transactionType === "TRANSACTION_TYPE_SOLANA") {
|
|
231
|
+
if (!rpcUrl) {
|
|
232
|
+
throw new core.TurnkeyError("A Solana RPC URL is required to send this asset. Pass rpcUrl to handleOffRamp.", core.TurnkeyErrorCodes.INVALID_REQUEST);
|
|
233
|
+
}
|
|
234
|
+
const unsignedTransaction = await buildUnsignedSolanaTransaction(transfer, rpcUrl);
|
|
235
|
+
return {
|
|
236
|
+
unsignedTransaction,
|
|
237
|
+
signWith: from,
|
|
238
|
+
caip2
|
|
239
|
+
};
|
|
240
|
+
}
|
|
241
|
+
if (transfer.kind === "erc20") {
|
|
242
|
+
return {
|
|
243
|
+
from,
|
|
244
|
+
to: transfer.tokenAddress,
|
|
245
|
+
caip2,
|
|
246
|
+
value: "0",
|
|
247
|
+
data: transfer.data
|
|
248
|
+
};
|
|
249
|
+
}
|
|
250
|
+
return {
|
|
251
|
+
from,
|
|
252
|
+
to,
|
|
253
|
+
caip2,
|
|
254
|
+
value: atomicAmount
|
|
255
|
+
};
|
|
256
|
+
}
|
|
257
|
+
function evmRequest(provider, method, params) {
|
|
258
|
+
const request = provider.request;
|
|
259
|
+
if (typeof request !== "function") {
|
|
260
|
+
throw new core.TurnkeyError("This wallet cannot send Ethereum transactions.", core.TurnkeyErrorCodes.INVALID_REQUEST);
|
|
261
|
+
}
|
|
262
|
+
return request.call(provider, {
|
|
263
|
+
method,
|
|
264
|
+
...(params ? {
|
|
265
|
+
params
|
|
266
|
+
} : {})
|
|
267
|
+
});
|
|
268
|
+
}
|
|
269
|
+
|
|
270
|
+
exports.SOLANA_DEVNET_RPC = SOLANA_DEVNET_RPC;
|
|
271
|
+
exports.buildUnsignedOnRampTransaction = buildUnsignedOnRampTransaction;
|
|
272
|
+
exports.buildUnsignedSolanaTransaction = buildUnsignedSolanaTransaction;
|
|
273
|
+
exports.embeddedDepositTransaction = embeddedDepositTransaction;
|
|
274
|
+
exports.ensureEthereumChain = ensureEthereumChain;
|
|
275
|
+
exports.evmChainId = evmChainId;
|
|
276
|
+
exports.isSolanaDevnet = isSolanaDevnet;
|
|
277
|
+
exports.isUserRejected = isUserRejected;
|
|
278
|
+
exports.sendErrorMessage = sendErrorMessage;
|
|
279
|
+
exports.solanaRpcUrl = solanaRpcUrl;
|
|
280
|
+
exports.switchSelectedEthereumChain = switchSelectedEthereumChain;
|
|
281
|
+
//# sourceMappingURL=sendCryptoTransfer.js.map
|