@turnkey/react-wallet-kit 2.7.1 → 2.8.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.
Files changed (287) hide show
  1. package/dist/_virtual/_rollupPluginBabelHelpers.mjs +10 -1
  2. package/dist/_virtual/_rollupPluginBabelHelpers.mjs.map +1 -1
  3. package/dist/components/auth/Action.d.ts +1 -0
  4. package/dist/components/auth/Action.d.ts.map +1 -1
  5. package/dist/components/auth/Action.js +10 -3
  6. package/dist/components/auth/Action.js.map +1 -1
  7. package/dist/components/auth/Action.mjs +10 -3
  8. package/dist/components/auth/Action.mjs.map +1 -1
  9. package/dist/components/auth/wallet/DesktopWalletConnectScreen.d.ts +2 -0
  10. package/dist/components/auth/wallet/DesktopWalletConnectScreen.d.ts.map +1 -1
  11. package/dist/components/auth/wallet/DesktopWalletConnectScreen.js +7 -4
  12. package/dist/components/auth/wallet/DesktopWalletConnectScreen.js.map +1 -1
  13. package/dist/components/auth/wallet/DesktopWalletConnectScreen.mjs +22 -12
  14. package/dist/components/auth/wallet/DesktopWalletConnectScreen.mjs.map +1 -1
  15. package/dist/components/auth/wallet/ExternalWalletChainSelector.d.ts.map +1 -1
  16. package/dist/components/auth/wallet/ExternalWalletChainSelector.js +2 -1
  17. package/dist/components/auth/wallet/ExternalWalletChainSelector.js.map +1 -1
  18. package/dist/components/auth/wallet/ExternalWalletChainSelector.mjs +2 -2
  19. package/dist/components/auth/wallet/ExternalWalletChainSelector.mjs.map +1 -1
  20. package/dist/components/auth/wallet/MobileWalletConnectScreen.d.ts +1 -0
  21. package/dist/components/auth/wallet/MobileWalletConnectScreen.d.ts.map +1 -1
  22. package/dist/components/auth/wallet/MobileWalletConnectScreen.js +3 -1
  23. package/dist/components/auth/wallet/MobileWalletConnectScreen.js.map +1 -1
  24. package/dist/components/auth/wallet/MobileWalletConnectScreen.mjs +16 -8
  25. package/dist/components/auth/wallet/MobileWalletConnectScreen.mjs.map +1 -1
  26. package/dist/components/auth/wallet/ShowAllWalletsScreen.d.ts +2 -1
  27. package/dist/components/auth/wallet/ShowAllWalletsScreen.d.ts.map +1 -1
  28. package/dist/components/auth/wallet/ShowAllWalletsScreen.js +8 -3
  29. package/dist/components/auth/wallet/ShowAllWalletsScreen.js.map +1 -1
  30. package/dist/components/auth/wallet/ShowAllWalletsScreen.mjs +8 -3
  31. package/dist/components/auth/wallet/ShowAllWalletsScreen.mjs.map +1 -1
  32. package/dist/components/design/Success.d.ts +1 -1
  33. package/dist/components/design/Success.d.ts.map +1 -1
  34. package/dist/components/design/Success.js +2 -2
  35. package/dist/components/design/Success.js.map +1 -1
  36. package/dist/components/design/Success.mjs +2 -2
  37. package/dist/components/design/Success.mjs.map +1 -1
  38. package/dist/components/design/Svg.d.ts +1 -0
  39. package/dist/components/design/Svg.d.ts.map +1 -1
  40. package/dist/components/design/Svg.js +32 -12
  41. package/dist/components/design/Svg.js.map +1 -1
  42. package/dist/components/design/Svg.mjs +32 -13
  43. package/dist/components/design/Svg.mjs.map +1 -1
  44. package/dist/components/design/TabNav.d.ts +13 -0
  45. package/dist/components/design/TabNav.d.ts.map +1 -0
  46. package/dist/components/design/TabNav.js +64 -0
  47. package/dist/components/design/TabNav.js.map +1 -0
  48. package/dist/components/design/TabNav.mjs +81 -0
  49. package/dist/components/design/TabNav.mjs.map +1 -0
  50. package/dist/components/funding/CryptoAmountInput.d.ts +11 -0
  51. package/dist/components/funding/CryptoAmountInput.d.ts.map +1 -0
  52. package/dist/components/funding/CryptoAmountInput.js +82 -0
  53. package/dist/components/funding/CryptoAmountInput.js.map +1 -0
  54. package/dist/components/funding/CryptoAmountInput.mjs +87 -0
  55. package/dist/components/funding/CryptoAmountInput.mjs.map +1 -0
  56. package/dist/components/funding/CurrencyDropdown.d.ts +8 -0
  57. package/dist/components/funding/CurrencyDropdown.d.ts.map +1 -0
  58. package/dist/components/funding/CurrencyDropdown.js +132 -0
  59. package/dist/components/funding/CurrencyDropdown.js.map +1 -0
  60. package/dist/components/funding/CurrencyDropdown.mjs +132 -0
  61. package/dist/components/funding/CurrencyDropdown.mjs.map +1 -0
  62. package/dist/components/funding/FiatAmountInput.d.ts +11 -0
  63. package/dist/components/funding/FiatAmountInput.d.ts.map +1 -0
  64. package/dist/components/funding/FiatAmountInput.js +94 -0
  65. package/dist/components/funding/FiatAmountInput.js.map +1 -0
  66. package/dist/components/funding/FiatAmountInput.mjs +105 -0
  67. package/dist/components/funding/FiatAmountInput.mjs.map +1 -0
  68. package/dist/components/funding/OffRamp.d.ts +3 -0
  69. package/dist/components/funding/OffRamp.d.ts.map +1 -0
  70. package/dist/components/funding/OffRamp.js +31 -0
  71. package/dist/components/funding/OffRamp.js.map +1 -0
  72. package/dist/components/funding/OffRamp.mjs +30 -0
  73. package/dist/components/funding/OffRamp.mjs.map +1 -0
  74. package/dist/components/funding/OffRampAmount.d.ts +22 -0
  75. package/dist/components/funding/OffRampAmount.d.ts.map +1 -0
  76. package/dist/components/funding/OffRampAmount.js +304 -0
  77. package/dist/components/funding/OffRampAmount.js.map +1 -0
  78. package/dist/components/funding/OffRampAmount.mjs +376 -0
  79. package/dist/components/funding/OffRampAmount.mjs.map +1 -0
  80. package/dist/components/funding/OffRampDeposit.d.ts +22 -0
  81. package/dist/components/funding/OffRampDeposit.d.ts.map +1 -0
  82. package/dist/components/funding/OffRampDeposit.js +455 -0
  83. package/dist/components/funding/OffRampDeposit.js.map +1 -0
  84. package/dist/components/funding/OffRampDeposit.mjs +551 -0
  85. package/dist/components/funding/OffRampDeposit.mjs.map +1 -0
  86. package/dist/components/funding/OffRampReturn.d.ts +2 -0
  87. package/dist/components/funding/OffRampReturn.d.ts.map +1 -0
  88. package/dist/components/funding/OffRampReturn.js +144 -0
  89. package/dist/components/funding/OffRampReturn.js.map +1 -0
  90. package/dist/components/funding/OffRampReturn.mjs +146 -0
  91. package/dist/components/funding/OffRampReturn.mjs.map +1 -0
  92. package/dist/components/funding/OnRamp.d.ts +7 -0
  93. package/dist/components/funding/OnRamp.d.ts.map +1 -0
  94. package/dist/components/funding/OnRamp.js +64 -0
  95. package/dist/components/funding/OnRamp.js.map +1 -0
  96. package/dist/components/funding/OnRamp.mjs +58 -0
  97. package/dist/components/funding/OnRamp.mjs.map +1 -0
  98. package/dist/components/funding/OnRampAmount.d.ts +21 -0
  99. package/dist/components/funding/OnRampAmount.d.ts.map +1 -0
  100. package/dist/components/funding/OnRampAmount.js +229 -0
  101. package/dist/components/funding/OnRampAmount.js.map +1 -0
  102. package/dist/components/funding/OnRampAmount.mjs +312 -0
  103. package/dist/components/funding/OnRampAmount.mjs.map +1 -0
  104. package/dist/components/funding/OnRampCash.d.ts +3 -0
  105. package/dist/components/funding/OnRampCash.d.ts.map +1 -0
  106. package/dist/components/funding/OnRampCash.js +26 -0
  107. package/dist/components/funding/OnRampCash.js.map +1 -0
  108. package/dist/components/funding/OnRampCash.mjs +25 -0
  109. package/dist/components/funding/OnRampCash.mjs.map +1 -0
  110. package/dist/components/funding/OnRampCrypto.d.ts +11 -0
  111. package/dist/components/funding/OnRampCrypto.d.ts.map +1 -0
  112. package/dist/components/funding/OnRampCrypto.js +126 -0
  113. package/dist/components/funding/OnRampCrypto.js.map +1 -0
  114. package/dist/components/funding/OnRampCrypto.mjs +148 -0
  115. package/dist/components/funding/OnRampCrypto.mjs.map +1 -0
  116. package/dist/components/funding/OnRampCryptoSend.d.ts +15 -0
  117. package/dist/components/funding/OnRampCryptoSend.d.ts.map +1 -0
  118. package/dist/components/funding/OnRampCryptoSend.js +251 -0
  119. package/dist/components/funding/OnRampCryptoSend.js.map +1 -0
  120. package/dist/components/funding/OnRampCryptoSend.mjs +323 -0
  121. package/dist/components/funding/OnRampCryptoSend.mjs.map +1 -0
  122. package/dist/components/funding/OnRampCryptoStatus.d.ts +14 -0
  123. package/dist/components/funding/OnRampCryptoStatus.d.ts.map +1 -0
  124. package/dist/components/funding/OnRampCryptoStatus.js +153 -0
  125. package/dist/components/funding/OnRampCryptoStatus.js.map +1 -0
  126. package/dist/components/funding/OnRampCryptoStatus.mjs +272 -0
  127. package/dist/components/funding/OnRampCryptoStatus.mjs.map +1 -0
  128. package/dist/components/funding/OnRampExternalAccountSelector.d.ts +11 -0
  129. package/dist/components/funding/OnRampExternalAccountSelector.d.ts.map +1 -0
  130. package/dist/components/funding/OnRampExternalAccountSelector.js +95 -0
  131. package/dist/components/funding/OnRampExternalAccountSelector.js.map +1 -0
  132. package/dist/components/funding/OnRampExternalAccountSelector.mjs +109 -0
  133. package/dist/components/funding/OnRampExternalAccountSelector.mjs.map +1 -0
  134. package/dist/components/funding/OnRampExternalWallet.d.ts +12 -0
  135. package/dist/components/funding/OnRampExternalWallet.d.ts.map +1 -0
  136. package/dist/components/funding/OnRampExternalWallet.js +218 -0
  137. package/dist/components/funding/OnRampExternalWallet.js.map +1 -0
  138. package/dist/components/funding/OnRampExternalWallet.mjs +303 -0
  139. package/dist/components/funding/OnRampExternalWallet.mjs.map +1 -0
  140. package/dist/components/funding/OnRampStatus.d.ts +15 -0
  141. package/dist/components/funding/OnRampStatus.d.ts.map +1 -0
  142. package/dist/components/funding/OnRampStatus.js +114 -0
  143. package/dist/components/funding/OnRampStatus.js.map +1 -0
  144. package/dist/components/funding/OnRampStatus.mjs +166 -0
  145. package/dist/components/funding/OnRampStatus.mjs.map +1 -0
  146. package/dist/components/funding/PaymentMethods.d.ts +35 -0
  147. package/dist/components/funding/PaymentMethods.d.ts.map +1 -0
  148. package/dist/components/funding/PaymentMethods.js +173 -0
  149. package/dist/components/funding/PaymentMethods.js.map +1 -0
  150. package/dist/components/funding/PaymentMethods.mjs +180 -0
  151. package/dist/components/funding/PaymentMethods.mjs.map +1 -0
  152. package/dist/components/funding/QuoteDetails.d.ts +13 -0
  153. package/dist/components/funding/QuoteDetails.d.ts.map +1 -0
  154. package/dist/components/funding/QuoteDetails.js +124 -0
  155. package/dist/components/funding/QuoteDetails.js.map +1 -0
  156. package/dist/components/funding/QuoteDetails.mjs +121 -0
  157. package/dist/components/funding/QuoteDetails.mjs.map +1 -0
  158. package/dist/components/funding/QuoteOption.d.ts +23 -0
  159. package/dist/components/funding/QuoteOption.d.ts.map +1 -0
  160. package/dist/components/funding/QuoteOption.js +153 -0
  161. package/dist/components/funding/QuoteOption.js.map +1 -0
  162. package/dist/components/funding/QuoteOption.mjs +150 -0
  163. package/dist/components/funding/QuoteOption.mjs.map +1 -0
  164. package/dist/components/funding/QuotePicker.d.ts +13 -0
  165. package/dist/components/funding/QuotePicker.d.ts.map +1 -0
  166. package/dist/components/funding/QuotePicker.js +49 -0
  167. package/dist/components/funding/QuotePicker.js.map +1 -0
  168. package/dist/components/funding/QuotePicker.mjs +48 -0
  169. package/dist/components/funding/QuotePicker.mjs.map +1 -0
  170. package/dist/components/funding/TokenSelect.d.ts +18 -0
  171. package/dist/components/funding/TokenSelect.d.ts.map +1 -0
  172. package/dist/components/funding/TokenSelect.js +198 -0
  173. package/dist/components/funding/TokenSelect.js.map +1 -0
  174. package/dist/components/funding/TokenSelect.mjs +210 -0
  175. package/dist/components/funding/TokenSelect.mjs.map +1 -0
  176. package/dist/components/funding/offRampRedirect.d.ts +61 -0
  177. package/dist/components/funding/offRampRedirect.d.ts.map +1 -0
  178. package/dist/components/funding/offRampRedirect.js +282 -0
  179. package/dist/components/funding/offRampRedirect.js.map +1 -0
  180. package/dist/components/funding/offRampRedirect.mjs +274 -0
  181. package/dist/components/funding/offRampRedirect.mjs.map +1 -0
  182. package/dist/components/send-transaction/SendTransaction.d.ts.map +1 -1
  183. package/dist/components/send-transaction/SendTransaction.js +8 -6
  184. package/dist/components/send-transaction/SendTransaction.js.map +1 -1
  185. package/dist/components/send-transaction/SendTransaction.mjs +8 -6
  186. package/dist/components/send-transaction/SendTransaction.mjs.map +1 -1
  187. package/dist/components/send-transaction/helpers.d.ts.map +1 -1
  188. package/dist/components/send-transaction/helpers.js +4 -0
  189. package/dist/components/send-transaction/helpers.js.map +1 -1
  190. package/dist/components/send-transaction/helpers.mjs +4 -0
  191. package/dist/components/send-transaction/helpers.mjs.map +1 -1
  192. package/dist/components/sign/Message.d.ts.map +1 -1
  193. package/dist/components/sign/Message.js +2 -1
  194. package/dist/components/sign/Message.js.map +1 -1
  195. package/dist/components/sign/Message.mjs +2 -2
  196. package/dist/components/sign/Message.mjs.map +1 -1
  197. package/dist/providers/SupportedAssetsProvider.d.ts +18 -0
  198. package/dist/providers/SupportedAssetsProvider.d.ts.map +1 -0
  199. package/dist/providers/SupportedAssetsProvider.js +71 -0
  200. package/dist/providers/SupportedAssetsProvider.js.map +1 -0
  201. package/dist/providers/SupportedAssetsProvider.mjs +114 -0
  202. package/dist/providers/SupportedAssetsProvider.mjs.map +1 -0
  203. package/dist/providers/TurnkeyProvider.d.ts.map +1 -1
  204. package/dist/providers/TurnkeyProvider.js +2 -1
  205. package/dist/providers/TurnkeyProvider.js.map +1 -1
  206. package/dist/providers/TurnkeyProvider.mjs +2 -1
  207. package/dist/providers/TurnkeyProvider.mjs.map +1 -1
  208. package/dist/providers/client/Provider.d.ts.map +1 -1
  209. package/dist/providers/client/Provider.js +98 -153
  210. package/dist/providers/client/Provider.js.map +1 -1
  211. package/dist/providers/client/Provider.mjs +214 -328
  212. package/dist/providers/client/Provider.mjs.map +1 -1
  213. package/dist/providers/client/Types.d.ts +37 -12
  214. package/dist/providers/client/Types.d.ts.map +1 -1
  215. package/dist/providers/client/Types.js.map +1 -1
  216. package/dist/providers/client/Types.mjs.map +1 -1
  217. package/dist/providers/modal/Provider.d.ts +1 -0
  218. package/dist/providers/modal/Provider.d.ts.map +1 -1
  219. package/dist/providers/modal/Provider.js +12 -0
  220. package/dist/providers/modal/Provider.js.map +1 -1
  221. package/dist/providers/modal/Provider.mjs +15 -0
  222. package/dist/providers/modal/Provider.mjs.map +1 -1
  223. package/dist/providers/modal/Root.d.ts.map +1 -1
  224. package/dist/providers/modal/Root.js +16 -14
  225. package/dist/providers/modal/Root.js.map +1 -1
  226. package/dist/providers/modal/Root.mjs +16 -14
  227. package/dist/providers/modal/Root.mjs.map +1 -1
  228. package/dist/styles.css +1 -1
  229. package/dist/types/method-types.d.ts +21 -9
  230. package/dist/types/method-types.d.ts.map +1 -1
  231. package/dist/utils/funding/buildCryptoTransfer.d.ts +41 -0
  232. package/dist/utils/funding/buildCryptoTransfer.d.ts.map +1 -0
  233. package/dist/utils/funding/buildCryptoTransfer.js +134 -0
  234. package/dist/utils/funding/buildCryptoTransfer.js.map +1 -0
  235. package/dist/utils/funding/buildCryptoTransfer.mjs +128 -0
  236. package/dist/utils/funding/buildCryptoTransfer.mjs.map +1 -0
  237. package/dist/utils/funding/chainLabel.d.ts +2 -0
  238. package/dist/utils/funding/chainLabel.d.ts.map +1 -0
  239. package/dist/utils/funding/chainLabel.js +19 -0
  240. package/dist/utils/funding/chainLabel.js.map +1 -0
  241. package/dist/utils/funding/chainLabel.mjs +18 -0
  242. package/dist/utils/funding/chainLabel.mjs.map +1 -0
  243. package/dist/utils/funding/depositPlan.d.ts +28 -0
  244. package/dist/utils/funding/depositPlan.d.ts.map +1 -0
  245. package/dist/utils/funding/depositPlan.js +127 -0
  246. package/dist/utils/funding/depositPlan.js.map +1 -0
  247. package/dist/utils/funding/depositPlan.mjs +120 -0
  248. package/dist/utils/funding/depositPlan.mjs.map +1 -0
  249. package/dist/utils/funding/index.d.ts +8 -0
  250. package/dist/utils/funding/index.d.ts.map +1 -0
  251. package/dist/utils/funding/onRampTokens.d.ts +6 -0
  252. package/dist/utils/funding/onRampTokens.d.ts.map +1 -0
  253. package/dist/utils/funding/onRampTokens.js +21 -0
  254. package/dist/utils/funding/onRampTokens.js.map +1 -0
  255. package/dist/utils/funding/onRampTokens.mjs +26 -0
  256. package/dist/utils/funding/onRampTokens.mjs.map +1 -0
  257. package/dist/utils/funding/rankQuotes.d.ts +7 -0
  258. package/dist/utils/funding/rankQuotes.d.ts.map +1 -0
  259. package/dist/utils/funding/rankQuotes.js +37 -0
  260. package/dist/utils/funding/rankQuotes.js.map +1 -0
  261. package/dist/utils/funding/rankQuotes.mjs +50 -0
  262. package/dist/utils/funding/rankQuotes.mjs.map +1 -0
  263. package/dist/utils/funding/sendCryptoTransfer.d.ts +26 -0
  264. package/dist/utils/funding/sendCryptoTransfer.d.ts.map +1 -0
  265. package/dist/utils/funding/sendCryptoTransfer.js +281 -0
  266. package/dist/utils/funding/sendCryptoTransfer.js.map +1 -0
  267. package/dist/utils/funding/sendCryptoTransfer.mjs +405 -0
  268. package/dist/utils/funding/sendCryptoTransfer.mjs.map +1 -0
  269. package/dist/utils/funding/tokenSymbol.d.ts +7 -0
  270. package/dist/utils/funding/tokenSymbol.d.ts.map +1 -0
  271. package/dist/utils/funding/tokenSymbol.js +32 -0
  272. package/dist/utils/funding/tokenSymbol.js.map +1 -0
  273. package/dist/utils/funding/tokenSymbol.mjs +31 -0
  274. package/dist/utils/funding/tokenSymbol.mjs.map +1 -0
  275. package/dist/utils/utils.d.ts +1 -0
  276. package/dist/utils/utils.d.ts.map +1 -1
  277. package/dist/utils/utils.js +5 -0
  278. package/dist/utils/utils.js.map +1 -1
  279. package/dist/utils/utils.mjs +7 -1
  280. package/dist/utils/utils.mjs.map +1 -1
  281. package/package.json +7 -3
  282. package/dist/components/onramp/OnRamp.d.ts +0 -14
  283. package/dist/components/onramp/OnRamp.d.ts.map +0 -1
  284. package/dist/components/onramp/OnRamp.js +0 -61
  285. package/dist/components/onramp/OnRamp.js.map +0 -1
  286. package/dist/components/onramp/OnRamp.mjs +0 -79
  287. 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":";;SAOgBA,UAAUA,CACxBC,MAA2B,EACU;AAAA,EAAA,IAArCC,8EAA6B,QAAQ;AAKrC,EAAA,IAAMC,WAAW,GAAG,SAAdA,WAAWA,CAAIC,KAAwB,EAAA;IAAA,OAC3CF,OAAO,KAAK,MAAM,GAAGE,KAAK,CAACC,UAAU,GAAGD,KAAK,CAACE,YAAY;AAAA,EAAA,CAAA;EAC5D,IAAMC,UAAU,GACdL,OAAO,KAAK,MAAM,GAAG,uBAAuB,GAAG,sBAAsB;EACvE,IAAMM,UAAU,GAAGP,MAAM,CAACQ,MAAM,CAC9B,UAACC,IAAI,EAAEN,KAAK,EAAA;AAAA,IAAA,OACV,CAACM,IAAI,IAAIC,cAAc,CAACP,KAAK,CAACQ,QAAQ,EAAEF,IAAI,CAACE,QAAQ,CAAC,GAAG,CAAC,GAAGR,KAAK,GAAGM,IAAI;AAAA,EAAA,CAAA,EAC3EG,SAAS,CACV;EACD,IAAMC,YAAY,GAAGb,MAAM,CAACQ,MAAM,CAChC,UAACC,IAAI,EAAEN,KAAK,EAAA;IAAA,OACV,CAACM,IAAI,IAAIC,cAAc,CAACR,WAAW,CAACC,KAAK,CAAC,EAAED,WAAW,CAACO,IAAI,CAAC,CAAC,GAAG,CAAC,GAC9DN,KAAK,GACLM,IAAI;AAAA,EAAA,CAAA,EACVG,SAAS,CACV;AACD,EAAA,IAAI,CAACL,UAAU,EAAE,OAAO,EAAE;AAE1B,EAAA,IAAMO,IAAI,GAAGd,MAAM,CAChBe,MAAM,CAAC,UAACZ,KAAK,EAAA;AAAA,IAAA,OAAKA,KAAK,CAACa,OAAO,KAAKT,UAAU,CAACS,OAAO;AAAA,EAAA,CAAA,CAAC,CACvDC,IAAI,CAAC,UAACC,CAAC,EAAEC,CAAC,EAAA;IAAA,OAAKT,cAAc,CAACQ,CAAC,CAACP,QAAQ,EAAEQ,CAAC,CAACR,QAAQ,CAAC;EAAA,CAAA,CAAC;AAEzD,EAAA,OAAO,CAACJ,UAAU,CAAA,CAAAa,MAAA,CAAAC,kBAAA,CAAKP,IAAI,CAAA,CAAA,CAAEQ,GAAG,CAAC,UAACnB,KAAK,EAAA;IAAA,OAAM;AAC3CA,MAAAA,KAAK,EAALA,KAAK;AACLoB,MAAAA,MAAM,KAAAH,MAAA,CAAAC,kBAAA,CACAlB,KAAK,CAACa,OAAO,KAAKT,UAAU,CAACS,OAAO,GACnC,CAAC,aAAa,CAAW,GAC1B,EAAE,CAAA,EAAAK,kBAAA,CACFlB,KAAK,CAACa,OAAO,MAAKH,YAAY,KAAA,IAAA,IAAZA,YAAY,KAAA,MAAA,GAAA,MAAA,GAAZA,YAAY,CAAEG,OAAO,CAAA,GACtC,CAACV,UAAU,CAAW,GACvB,EAAE,CAAA;KAET;AAAA,EAAA,CAAC,CAAC;AACL;AAEA,SAASI,cAAcA,CAACQ,CAAmB,EAAEC,CAAmB,EAAA;AAC9D,EAAA,IAAMK,KAAK,GAAGC,IAAI,CAACC,GAAG,CAACR,CAAC,CAACS,QAAQ,EAAER,CAAC,CAACQ,QAAQ,CAAC;AAC9C,EAAA,IAAMC,IAAI,GAAGC,WAAW,CAACX,CAAC,EAAEM,KAAK,CAAC;AAClC,EAAA,IAAMM,KAAK,GAAGD,WAAW,CAACV,CAAC,EAAEK,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;EAC/B,CAAC,CAAC,OAAAG,OAAA,EAAM;AACN,IAAA,OAAO,EAAE;AACX,EAAA;AAEA,EAAA,IAAMC,KAAK,GAAGR,QAAQ,GAAGI,MAAM,CAACJ,QAAQ;AACxC,EAAA,IAAIQ,KAAK,KAAK,CAAC,EAAE,OAAOH,KAAK;AAC7B,EAAA,IAAIG,KAAK,GAAG,CAAC,EAAE,OAAOH,KAAK,GAAAP,IAAA,CAAAW,GAAA,CAAG,GAAG,EAAIH,MAAM,CAACE,KAAK,CAAC,CAAA;AAClD,EAAA,OAAOH,KAAK,GAAAP,IAAA,CAAAW,GAAA,CAAG,GAAG,EAAIH,MAAM,CAAC,CAACE,KAAK,CAAC,CAAA;AACtC;;;;"}
@@ -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