@mintmoney/react 0.1.0-alpha.30 → 0.1.0-alpha.32

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 (88) hide show
  1. package/dist/esm/api/checkouts.js +3 -10
  2. package/dist/esm/api/checkouts.js.map +1 -1
  3. package/dist/esm/api/generated.js +16 -500
  4. package/dist/esm/api/generated.js.map +1 -1
  5. package/dist/esm/api/payments.js +28 -29
  6. package/dist/esm/api/payments.js.map +1 -1
  7. package/dist/esm/api/types.js.map +1 -1
  8. package/dist/esm/checkout/index.js +19 -1
  9. package/dist/esm/checkout/index.js.map +1 -1
  10. package/dist/esm/checkout/modal.js +7 -7
  11. package/dist/esm/checkout/modal.js.map +1 -1
  12. package/dist/esm/checkout/views/crypto-intent/direct-details.js +148 -19
  13. package/dist/esm/checkout/views/crypto-intent/direct-details.js.map +1 -1
  14. package/dist/esm/checkout/views/crypto-intent/methods.js +5 -5
  15. package/dist/esm/checkout/views/crypto-intent/methods.js.map +1 -1
  16. package/dist/esm/checkout/views/crypto-intent/wallet-payment-confirmation-amount.js +30 -0
  17. package/dist/esm/checkout/views/crypto-intent/wallet-payment-confirmation-amount.js.map +1 -0
  18. package/dist/esm/checkout/views/crypto-intent/wallet-payment-options.js +581 -0
  19. package/dist/esm/checkout/views/crypto-intent/wallet-payment-options.js.map +1 -0
  20. package/dist/esm/checkout/views/crypto-intent/wallet-select.js +3 -31
  21. package/dist/esm/checkout/views/crypto-intent/wallet-select.js.map +1 -1
  22. package/dist/esm/checkout/views/initial.js +1 -4
  23. package/dist/esm/checkout/views/initial.js.map +1 -1
  24. package/dist/esm/checkout/views/restart.js +2 -0
  25. package/dist/esm/checkout/views/restart.js.map +1 -1
  26. package/dist/esm/components/text/index.js +1 -0
  27. package/dist/esm/components/text/index.js.map +1 -1
  28. package/dist/esm/components/wallet-selector/wallets/wagmi/index.js +8 -1
  29. package/dist/esm/components/wallet-selector/wallets/wagmi/index.js.map +1 -1
  30. package/dist/esm/config.js +1 -1
  31. package/dist/esm/config.js.map +1 -1
  32. package/dist/esm/integrations/evm-chain.js +22 -0
  33. package/dist/esm/integrations/evm-chain.js.map +1 -0
  34. package/dist/esm/integrations/index.js +1 -0
  35. package/dist/esm/integrations/index.js.map +1 -1
  36. package/dist/esm/integrations/lifi.js +200 -0
  37. package/dist/esm/integrations/lifi.js.map +1 -0
  38. package/dist/esm/state/checkout/payment-attempt.js +43 -0
  39. package/dist/esm/state/checkout/payment-attempt.js.map +1 -0
  40. package/dist/esm/state/checkout/payment-lifecycle.js +58 -0
  41. package/dist/esm/state/checkout/payment-lifecycle.js.map +1 -0
  42. package/dist/esm/state/checkout/store.js +465 -42
  43. package/dist/esm/state/checkout/store.js.map +1 -1
  44. package/dist/types/api/checkouts.d.ts +0 -1
  45. package/dist/types/api/checkouts.d.ts.map +1 -1
  46. package/dist/types/api/generated.d.ts +162 -1406
  47. package/dist/types/api/generated.d.ts.map +1 -1
  48. package/dist/types/api/payments.d.ts +18 -8
  49. package/dist/types/api/payments.d.ts.map +1 -1
  50. package/dist/types/api/types.d.ts +6 -8
  51. package/dist/types/api/types.d.ts.map +1 -1
  52. package/dist/types/checkout/index.d.ts.map +1 -1
  53. package/dist/types/checkout/views/crypto-intent/direct-details.d.ts.map +1 -1
  54. package/dist/types/checkout/views/crypto-intent/wallet-payment-confirmation-amount.d.ts +13 -0
  55. package/dist/types/checkout/views/crypto-intent/wallet-payment-confirmation-amount.d.ts.map +1 -0
  56. package/dist/types/checkout/views/crypto-intent/wallet-payment-options.d.ts +3 -0
  57. package/dist/types/checkout/views/crypto-intent/wallet-payment-options.d.ts.map +1 -0
  58. package/dist/types/checkout/views/crypto-intent/wallet-select.d.ts.map +1 -1
  59. package/dist/types/checkout/views/initial.d.ts.map +1 -1
  60. package/dist/types/checkout/views/restart.d.ts.map +1 -1
  61. package/dist/types/components/text/index.d.ts.map +1 -1
  62. package/dist/types/components/wallet-selector/domain.d.ts +9 -0
  63. package/dist/types/components/wallet-selector/domain.d.ts.map +1 -1
  64. package/dist/types/components/wallet-selector/wallets/wagmi/index.d.ts +449 -0
  65. package/dist/types/components/wallet-selector/wallets/wagmi/index.d.ts.map +1 -1
  66. package/dist/types/config.d.ts +65 -1
  67. package/dist/types/config.d.ts.map +1 -1
  68. package/dist/types/integrations/evm-chain.d.ts +3 -0
  69. package/dist/types/integrations/evm-chain.d.ts.map +1 -0
  70. package/dist/types/integrations/index.d.ts +1 -0
  71. package/dist/types/integrations/index.d.ts.map +1 -1
  72. package/dist/types/integrations/lifi.d.ts +14 -0
  73. package/dist/types/integrations/lifi.d.ts.map +1 -0
  74. package/dist/types/state/checkout/payment-attempt.d.ts +9 -0
  75. package/dist/types/state/checkout/payment-attempt.d.ts.map +1 -0
  76. package/dist/types/state/checkout/payment-lifecycle.d.ts +20 -0
  77. package/dist/types/state/checkout/payment-lifecycle.d.ts.map +1 -0
  78. package/dist/types/state/checkout/store.d.ts +31 -86
  79. package/dist/types/state/checkout/store.d.ts.map +1 -1
  80. package/package.json +4 -2
  81. package/dist/esm/checkout/views/crypto-intent/currency-select.js +0 -44
  82. package/dist/esm/checkout/views/crypto-intent/currency-select.js.map +0 -1
  83. package/dist/esm/components/crypto/default-currency-selector.js +0 -62
  84. package/dist/esm/components/crypto/default-currency-selector.js.map +0 -1
  85. package/dist/types/checkout/views/crypto-intent/currency-select.d.ts +0 -3
  86. package/dist/types/checkout/views/crypto-intent/currency-select.d.ts.map +0 -1
  87. package/dist/types/components/crypto/default-currency-selector.d.ts +0 -9
  88. package/dist/types/components/crypto/default-currency-selector.d.ts.map +0 -1
@@ -0,0 +1,581 @@
1
+ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
2
+ import { useCallback, useContext, useEffect, useRef, useState } from "react";
3
+ import { keyframes, styled } from "styled-components";
4
+ import { confirmPayment } from "../../../api/payments.js";
5
+ import { StyledButton, Text, useModalWithView, } from "../../../components/index.js";
6
+ import { WalletContext } from "../../../components/wallet-selector/provider.js";
7
+ import { useMintMoneyConfig } from "../../../context.js";
8
+ import { executeWalletPaymentOption, fetchWalletPaymentQuote, findWalletPaymentOptions, } from "../../../integrations/index.js";
9
+ import { formatRemainingTime } from "../../../state/checkout/payment-lifecycle.js";
10
+ import { clearAttemptRefreshContext, configureWalletAttemptRefresh, createWalletOptionPaymentAttempt, executeConnectedWalletPayment, resetWalletPaymentState, setProcessing, setSelectedCurrency, setWalletPaymentState, useCheckoutStore, } from "../../../state/checkout/store.js";
11
+ import { ModalViewContainer } from "../../container.js";
12
+ import { ModalBackButton } from "../back.js";
13
+ import { resolveWalletPaymentConfirmationAmount } from "./wallet-payment-confirmation-amount.js";
14
+ const OptionsContainer = styled.div `
15
+ display: flex;
16
+ flex-direction: column;
17
+ gap: 10px;
18
+ max-height: min(360px, 48vh);
19
+ overflow-y: auto;
20
+ padding-right: 4px;
21
+ overscroll-behavior: contain;
22
+ `;
23
+ const OptionCard = styled.div `
24
+ border: 1px solid #e5e7eb;
25
+ border-radius: 16px;
26
+ padding: 14px;
27
+ background: #ffffff;
28
+ cursor: pointer;
29
+ transition:
30
+ border-color 120ms ease,
31
+ box-shadow 120ms ease,
32
+ transform 120ms ease;
33
+
34
+ &:hover {
35
+ border-color: #cbd5e1;
36
+ transform: translateY(-1px);
37
+ }
38
+ `;
39
+ const OptionHeader = styled.div `
40
+ display: flex;
41
+ align-items: center;
42
+ justify-content: space-between;
43
+ gap: 12px;
44
+ `;
45
+ const OptionHeaderLeft = styled.div `
46
+ display: flex;
47
+ align-items: center;
48
+ gap: 10px;
49
+ min-width: 0;
50
+ flex: 1;
51
+ `;
52
+ const TokenIconWrap = styled.div `
53
+ position: relative;
54
+ width: 38px;
55
+ height: 38px;
56
+ flex-shrink: 0;
57
+ `;
58
+ const TokenIcon = styled.div `
59
+ width: 100%;
60
+ height: 100%;
61
+ border-radius: 999px;
62
+ display: inline-flex;
63
+ align-items: center;
64
+ justify-content: center;
65
+ font-size: 12px;
66
+ font-weight: 700;
67
+ color: ${({ $token }) => ($token === "ETH" ? "#ffffff" : "#1d4ed8")};
68
+ background: ${({ $token }) => $token === "ETH"
69
+ ? "linear-gradient(135deg, #64748b, #0f172a)"
70
+ : "linear-gradient(135deg, #dbeafe, #bfdbfe)"};
71
+ background-image: ${({ $iconUrl }) => $iconUrl ? `url(${$iconUrl})` : "none"};
72
+ background-size: cover;
73
+ background-position: center;
74
+ overflow: hidden;
75
+ `;
76
+ const ChainBadge = styled.div `
77
+ position: absolute;
78
+ right: -2px;
79
+ bottom: -2px;
80
+ width: 18px;
81
+ height: 18px;
82
+ border-radius: 999px;
83
+ border: 1.5px solid #ffffff;
84
+ background: #ffffff;
85
+ background-image: ${({ $iconUrl }) => $iconUrl ? `url(${$iconUrl})` : "none"};
86
+ background-size: 85%;
87
+ background-position: center;
88
+ background-repeat: no-repeat;
89
+ box-shadow: 0 1px 4px rgba(15, 23, 42, 0.12);
90
+ overflow: hidden;
91
+ `;
92
+ const OptionIdentity = styled.div `
93
+ display: flex;
94
+ flex-direction: column;
95
+ gap: 2px;
96
+ min-width: 0;
97
+ flex: 1;
98
+ `;
99
+ const OptionBalance = styled.div `
100
+ display: flex;
101
+ flex-direction: column;
102
+ align-items: flex-end;
103
+ gap: 2px;
104
+ flex-shrink: 0;
105
+ `;
106
+ const OptionsHeaderRow = styled.div `
107
+ display: flex;
108
+ align-items: baseline;
109
+ justify-content: space-between;
110
+ gap: 12px;
111
+ `;
112
+ const OptionsHeaderLabel = styled.div `
113
+ font-size: 11px;
114
+ line-height: 1;
115
+ color: #64748b;
116
+ letter-spacing: 0.02em;
117
+ text-transform: none;
118
+ white-space: nowrap;
119
+ padding-right: 8px;
120
+ `;
121
+ const FastBadge = styled.span `
122
+ display: inline-flex;
123
+ align-items: center;
124
+ border-radius: 999px;
125
+ gap: 4px;
126
+ background: #ecfdf5;
127
+ color: #047857;
128
+ font-size: 12px;
129
+ font-weight: 600;
130
+ line-height: 1;
131
+ padding: 6px 9px;
132
+ white-space: nowrap;
133
+ `;
134
+ const EmptyState = styled.div `
135
+ border: 1px dashed #d1d5db;
136
+ border-radius: 16px;
137
+ padding: 18px;
138
+ text-align: center;
139
+ background: #f9fafb;
140
+ `;
141
+ const confirmTrayEnter = keyframes `
142
+ from {
143
+ opacity: 0;
144
+ transform: perspective(1000px) rotateY(-86deg) scale(0.96);
145
+ transform-origin: center;
146
+ }
147
+ to {
148
+ opacity: 1;
149
+ opacity: 1;
150
+ transform: perspective(1000px) rotateY(0deg) scale(1);
151
+ }
152
+ `;
153
+ const ConfirmScreen = styled.div `
154
+ margin-top: 8px;
155
+ border: 1px solid #b7efd1;
156
+ border-radius: 22px;
157
+ padding: 18px 16px 16px;
158
+ background: linear-gradient(180deg, #ecfdf5 0%, #dcfce7 100%);
159
+ box-shadow: 0 14px 30px rgba(16, 185, 129, 0.12);
160
+ display: flex;
161
+ flex-direction: column;
162
+ gap: 16px;
163
+ animation: ${confirmTrayEnter} 220ms cubic-bezier(0.22, 1, 0.36, 1);
164
+ `;
165
+ const ConfirmMeta = styled.div `
166
+ display: flex;
167
+ align-items: center;
168
+ justify-content: space-between;
169
+ gap: 12px;
170
+ `;
171
+ const ConfirmAmount = styled.div `
172
+ display: flex;
173
+ align-items: center;
174
+ gap: 10px;
175
+ `;
176
+ const ConfirmTextBlock = styled.div `
177
+ display: flex;
178
+ flex-direction: column;
179
+ gap: 2px;
180
+ `;
181
+ const ConfirmActions = styled.div `
182
+ display: flex;
183
+ flex-direction: column;
184
+ gap: 10px;
185
+ `;
186
+ const QuoteBlock = styled.div `
187
+ display: flex;
188
+ flex-direction: column;
189
+ gap: 10px;
190
+ `;
191
+ const QuoteRow = styled.div `
192
+ display: flex;
193
+ align-items: flex-start;
194
+ justify-content: space-between;
195
+ gap: 12px;
196
+ `;
197
+ const ContentStage = styled.div `
198
+ display: flex;
199
+ flex-direction: column;
200
+ gap: 16px;
201
+ min-height: 0;
202
+ `;
203
+ const buildDefaultOption = (context) => ({
204
+ id: "direct-settlement",
205
+ label: `${context.settlementCurrency.asset_name} on ${context.settlementCurrency.chain_name}`,
206
+ subtitle: "Fastest Route. You can pay directly without needing to swap.",
207
+ badge: "Fastest",
208
+ fromChain: context.settlementCurrency.chain,
209
+ fromChainName: context.settlementCurrency.chain_name,
210
+ fromToken: context.settlementCurrency.asset,
211
+ fromTokenName: context.settlementCurrency.asset_name,
212
+ fromAmount: null,
213
+ quoteId: null,
214
+ routeId: null,
215
+ kind: "direct",
216
+ });
217
+ const formatDisplayAmount = (amount, maximumFractionDigits = 4) => {
218
+ if (!amount)
219
+ return null;
220
+ const parsed = Number(amount);
221
+ if (!Number.isFinite(parsed))
222
+ return amount;
223
+ if (parsed >= 1000)
224
+ return parsed.toLocaleString(undefined, { maximumFractionDigits: 2 });
225
+ if (parsed >= 1) {
226
+ return parsed.toLocaleString(undefined, {
227
+ minimumFractionDigits: 2,
228
+ maximumFractionDigits: 2,
229
+ });
230
+ }
231
+ if (parsed >= 0.01) {
232
+ return parsed.toLocaleString(undefined, {
233
+ minimumFractionDigits: 2,
234
+ maximumFractionDigits,
235
+ });
236
+ }
237
+ return parsed.toLocaleString(undefined, {
238
+ minimumFractionDigits: 4,
239
+ maximumFractionDigits,
240
+ });
241
+ };
242
+ const formatTokenBalance = (tokenName, amount) => {
243
+ const isEth = tokenName.toUpperCase() === "ETH";
244
+ const formatted = formatDisplayAmount(amount, isEth ? 8 : 4);
245
+ if (!formatted)
246
+ return null;
247
+ if (tokenName.toLowerCase().includes("usd"))
248
+ return `$${formatted}`;
249
+ if (isEth)
250
+ return `ETH ${formatted}`;
251
+ return formatted;
252
+ };
253
+ const formatMoneyAmount = (currency, amount) => {
254
+ try {
255
+ return new Intl.NumberFormat(undefined, {
256
+ style: "currency",
257
+ currency,
258
+ minimumFractionDigits: 2,
259
+ maximumFractionDigits: 2,
260
+ }).format(amount);
261
+ }
262
+ catch {
263
+ return `${currency} ${amount.toFixed(2)}`;
264
+ }
265
+ };
266
+ const getTokenMonogram = (tokenName, tokenSymbol) => {
267
+ if (tokenSymbol)
268
+ return tokenSymbol.slice(0, 2).toUpperCase();
269
+ return tokenName.slice(0, 2).toUpperCase();
270
+ };
271
+ const buildDirectQuote = (option, context) => {
272
+ const amount = String(context.cryptoPaymentAttempt.amount_formatted);
273
+ const formattedAmount = formatDisplayAmount(amount) ?? amount;
274
+ const amountDisplay = formatTokenBalance(option.fromTokenSymbol ?? option.fromTokenName, formattedAmount) ?? formattedAmount;
275
+ return {
276
+ quoteId: option.quoteId,
277
+ routeId: option.routeId,
278
+ toolName: "Direct transfer",
279
+ fromAmount: amount,
280
+ fromAmountDisplay: amountDisplay,
281
+ toAmount: amount,
282
+ toAmountDisplay: amountDisplay,
283
+ estimatedDurationMinutes: 1,
284
+ };
285
+ };
286
+ const CryptoIntentWalletPaymentOptionsViewContent = () => {
287
+ const modalRef = useRef(null);
288
+ const { goToView } = useModalWithView();
289
+ const config = useMintMoneyConfig();
290
+ const { wallet } = useContext(WalletContext);
291
+ const { payment, cryptoPaymentAttempt, cryptoCurrency, attemptFreshness, walletPayment, loading, processing, } = useCheckoutStore();
292
+ const [executingId, setExecutingId] = useState(null);
293
+ const buildContext = useCallback(async (currentPayment) => {
294
+ const state = useCheckoutStore.getState();
295
+ const currentCheckout = state.checkout;
296
+ const currentCryptoCurrency = state.cryptoCurrency;
297
+ if (!currentCheckout || !currentCryptoCurrency || !wallet) {
298
+ throw new Error("Wallet payment context is not ready");
299
+ }
300
+ const resolvedPayment = currentPayment ?? state.payment;
301
+ if (!resolvedPayment) {
302
+ throw new Error("Missing payment");
303
+ }
304
+ const walletAddress = await wallet.getAddress();
305
+ if (!walletAddress) {
306
+ throw new Error("Failed to get wallet address");
307
+ }
308
+ return {
309
+ checkout: currentCheckout,
310
+ payment: resolvedPayment,
311
+ settlementCurrency: currentCryptoCurrency,
312
+ walletAddress,
313
+ };
314
+ }, [wallet]);
315
+ useEffect(() => {
316
+ if (!wallet || !cryptoCurrency) {
317
+ goToView("failed", { reason: "wallet_not_connected" });
318
+ return;
319
+ }
320
+ let cancelled = false;
321
+ const loadOptions = async () => {
322
+ try {
323
+ setProcessing(true);
324
+ setSelectedCurrency(cryptoCurrency);
325
+ resetWalletPaymentState();
326
+ setWalletPaymentState({ status: "loading", error: null, options: [] });
327
+ const preparedContext = await buildContext();
328
+ const providerOptions = await findWalletPaymentOptions(preparedContext);
329
+ const options = providerOptions.length > 0
330
+ ? providerOptions
331
+ : [buildDefaultOption(preparedContext)];
332
+ if (cancelled)
333
+ return;
334
+ configureWalletAttemptRefresh(preparedContext.walletAddress);
335
+ setWalletPaymentState({
336
+ status: "ready",
337
+ walletAddress: preparedContext.walletAddress,
338
+ options,
339
+ selectedOptionId: null,
340
+ error: null,
341
+ });
342
+ }
343
+ catch (error) {
344
+ if (cancelled)
345
+ return;
346
+ const message = error instanceof Error
347
+ ? error.message
348
+ : "Failed to load payment options";
349
+ setWalletPaymentState({
350
+ status: "failed",
351
+ error: message,
352
+ options: [],
353
+ });
354
+ }
355
+ finally {
356
+ if (!cancelled) {
357
+ setProcessing(false);
358
+ }
359
+ }
360
+ };
361
+ void loadOptions();
362
+ return () => {
363
+ cancelled = true;
364
+ clearAttemptRefreshContext();
365
+ };
366
+ }, [buildContext, goToView, payment?.id, wallet]);
367
+ const selectedOption = walletPayment.options.find((option) => option.id === walletPayment.selectedOptionId) ?? null;
368
+ const confirmationAmount = selectedOption && payment
369
+ ? resolveWalletPaymentConfirmationAmount({
370
+ option: selectedOption,
371
+ quote: walletPayment.quote,
372
+ attempt: cryptoPaymentAttempt,
373
+ })
374
+ : null;
375
+ const formattedCost = formatMoneyAmount(payment?.currency ?? "USD", Number(payment?.amount ?? 0));
376
+ const handlePickOption = (option) => {
377
+ setWalletPaymentState({
378
+ selectedOptionId: option.id,
379
+ error: null,
380
+ quoteId: null,
381
+ routeId: null,
382
+ quoteStatus: "idle",
383
+ quote: null,
384
+ quoteError: null,
385
+ });
386
+ };
387
+ const handleReturnToOptions = () => {
388
+ setWalletPaymentState({
389
+ selectedOptionId: null,
390
+ error: null,
391
+ quoteStatus: "idle",
392
+ quote: null,
393
+ quoteError: null,
394
+ });
395
+ };
396
+ const loadQuoteForSelectedOption = useCallback(async () => {
397
+ if (!selectedOption || !payment?.id || !cryptoCurrency) {
398
+ return;
399
+ }
400
+ try {
401
+ setWalletPaymentState({
402
+ quoteStatus: "loading",
403
+ quote: null,
404
+ quoteError: null,
405
+ quoteId: null,
406
+ routeId: null,
407
+ });
408
+ const preparedContext = await buildContext();
409
+ const walletAddress = await wallet?.getAddress();
410
+ if (!walletAddress) {
411
+ throw new Error("Failed to get wallet address");
412
+ }
413
+ const ensuredAttempt = await createWalletOptionPaymentAttempt(selectedOption, walletAddress, null);
414
+ const quoteContext = {
415
+ ...preparedContext,
416
+ cryptoPaymentAttempt: ensuredAttempt,
417
+ };
418
+ if (selectedOption.kind === "direct") {
419
+ const directQuote = buildDirectQuote(selectedOption, quoteContext);
420
+ setWalletPaymentState({
421
+ quoteStatus: "ready",
422
+ quote: directQuote,
423
+ quoteId: directQuote.quoteId,
424
+ routeId: directQuote.routeId,
425
+ quoteError: null,
426
+ });
427
+ return;
428
+ }
429
+ const quote = await fetchWalletPaymentQuote({
430
+ option: selectedOption,
431
+ context: quoteContext,
432
+ });
433
+ setWalletPaymentState({
434
+ quoteStatus: "ready",
435
+ quote,
436
+ quoteId: quote.quoteId,
437
+ routeId: quote.routeId,
438
+ quoteError: null,
439
+ });
440
+ }
441
+ catch (error) {
442
+ const message = error instanceof Error ? error.message : "Failed to load route quote";
443
+ setWalletPaymentState({
444
+ quoteStatus: "failed",
445
+ quote: null,
446
+ quoteError: message,
447
+ });
448
+ }
449
+ }, [buildContext, cryptoCurrency, payment?.id, selectedOption, wallet]);
450
+ useEffect(() => {
451
+ void loadQuoteForSelectedOption();
452
+ }, [loadQuoteForSelectedOption]);
453
+ const handleSelectOption = async (option) => {
454
+ if (!wallet || !payment || !cryptoCurrency) {
455
+ goToView("failed", { reason: "wallet_not_connected" });
456
+ return;
457
+ }
458
+ try {
459
+ setExecutingId(option.id);
460
+ setProcessing(true);
461
+ setSelectedCurrency(cryptoCurrency);
462
+ setWalletPaymentState({
463
+ status: "executing",
464
+ selectedOptionId: option.id,
465
+ error: null,
466
+ quoteId: null,
467
+ routeId: null,
468
+ });
469
+ const walletAddress = await wallet.getAddress();
470
+ if (!walletAddress) {
471
+ throw new Error("Failed to get wallet address");
472
+ }
473
+ const ensuredAttempt = await createWalletOptionPaymentAttempt(option, walletAddress, option.kind === "direct" ? null : walletPayment.quote);
474
+ const preparedContext = {
475
+ ...(await buildContext(payment)),
476
+ cryptoPaymentAttempt: ensuredAttempt,
477
+ };
478
+ if (option.kind === "direct") {
479
+ await executeConnectedWalletPayment(wallet);
480
+ const txHash = useCheckoutStore.getState().transfer.transactionHash;
481
+ if (!txHash) {
482
+ throw new Error("Missing transaction hash for direct wallet payment");
483
+ }
484
+ await confirmPayment(payment.id, { txHash });
485
+ setWalletPaymentState({
486
+ status: "submitted",
487
+ sourceTxHash: txHash,
488
+ destinationTxHash: null,
489
+ quoteId: null,
490
+ routeId: null,
491
+ });
492
+ }
493
+ else {
494
+ const freshQuote = await fetchWalletPaymentQuote({
495
+ option,
496
+ context: preparedContext,
497
+ });
498
+ if (!freshQuote.quoteId) {
499
+ throw new Error("Missing LI.FI quote id for routed wallet payment");
500
+ }
501
+ setWalletPaymentState({
502
+ quoteStatus: "ready",
503
+ quote: freshQuote,
504
+ quoteId: freshQuote.quoteId,
505
+ routeId: freshQuote.routeId,
506
+ quoteError: null,
507
+ });
508
+ const result = await executeWalletPaymentOption({
509
+ option,
510
+ wallet,
511
+ context: preparedContext,
512
+ quote: freshQuote,
513
+ });
514
+ const confirmationTxHash = result?.destinationTxHash ?? null;
515
+ if (!confirmationTxHash) {
516
+ throw new Error("Missing destination transaction hash for routed wallet payment");
517
+ }
518
+ await confirmPayment(payment.id, {
519
+ txHash: confirmationTxHash,
520
+ lifiQuote: {
521
+ quote_id: freshQuote.quoteId,
522
+ route_id: freshQuote.routeId ?? null,
523
+ route: freshQuote.raw,
524
+ },
525
+ });
526
+ setWalletPaymentState({
527
+ status: "submitted",
528
+ sourceTxHash: result?.sourceTxHash ?? null,
529
+ destinationTxHash: confirmationTxHash,
530
+ quoteId: freshQuote.quoteId,
531
+ routeId: freshQuote.routeId,
532
+ });
533
+ }
534
+ goToView("paymentStatus");
535
+ }
536
+ catch (error) {
537
+ const message = error instanceof Error
538
+ ? error.message
539
+ : "Failed to execute wallet payment";
540
+ setWalletPaymentState({
541
+ status: "failed",
542
+ error: message,
543
+ });
544
+ goToView("failed", { reason: message });
545
+ }
546
+ finally {
547
+ setExecutingId(null);
548
+ setProcessing(false);
549
+ }
550
+ };
551
+ return (_jsxs(ModalViewContainer, { ref: modalRef, children: [selectedOption ? (_jsx(Text, { size: "base", weight: "semibold", color: config.theme.font.color.primary, children: "Confirm your payment" })) : null, walletPayment.status === "failed" ? (_jsx(EmptyState, { children: _jsx(Text, { size: "sm", color: config.theme.font.color.secondary, children: walletPayment.error ||
552
+ "We could not find wallet payment options right now." }) })) : null, walletPayment.status === "loading" ? (_jsx(EmptyState, { children: _jsx(Text, { size: "sm", color: config.theme.font.color.secondary, children: "Checking which tokens you can use..." }) })) : null, walletPayment.status === "ready" ||
553
+ walletPayment.status === "executing" ? (_jsx(ContentStage, { children: !selectedOption ? (_jsxs(_Fragment, { children: [_jsxs(OptionsHeaderRow, { children: [_jsx(Text, { size: "base", weight: "semibold", color: config.theme.font.color.primary, children: "Choose how you want to pay." }), _jsx(OptionsHeaderLabel, { children: "Your Balance" })] }), _jsx(OptionsContainer, { children: walletPayment.options.map((option) => (_jsx(OptionCard, { onClick: () => handlePickOption(option), role: "button", "aria-pressed": walletPayment.selectedOptionId === option.id, children: _jsxs(OptionHeader, { children: [_jsxs(OptionHeaderLeft, { children: [_jsxs(TokenIconWrap, { children: [_jsx(TokenIcon, { "$token": option.fromTokenName === "ETH" ? "ETH" : "USD", "$iconUrl": option.fromTokenIconUrl, children: !option.fromTokenIconUrl
554
+ ? getTokenMonogram(option.fromTokenName, option.fromTokenSymbol)
555
+ : null }), _jsx(ChainBadge, { "$iconUrl": option.fromChainIconUrl, children: !option.fromChainIconUrl
556
+ ? getTokenMonogram(option.fromChainName)
557
+ : null })] }), _jsxs(OptionIdentity, { children: [_jsx(Text, { size: "base", weight: "semibold", color: config.theme.font.color.primary, children: option.fromTokenName }), _jsxs(Text, { size: "sm", color: config.theme.font.color.secondary, children: ["On ", option.fromChainName] })] })] }), _jsxs(OptionBalance, { children: [_jsx(Text, { size: "base", weight: "semibold", color: config.theme.font.color.primary, children: formatTokenBalance(option.fromTokenName, option.fromAmount) ?? "0" }), option.kind === "direct" ? (_jsxs(FastBadge, { children: [_jsx("span", { children: "\u26A1" }), _jsx("span", { children: "Fast" })] })) : typeof option.estimatedDurationMinutes ===
558
+ "number" ? (_jsxs(Text, { size: "xs", color: config.theme.font.color.tertiary, children: ["~", option.estimatedDurationMinutes, " min"] })) : null] })] }) }, option.id))) }), _jsx(ModalBackButton, { view: "cryptoIntent", disabled: processing })] })) : (_jsxs(ConfirmScreen, { children: [_jsx(ConfirmMeta, { children: _jsxs(ConfirmAmount, { children: [_jsxs(TokenIconWrap, { children: [_jsx(TokenIcon, { "$token": selectedOption.fromTokenName === "ETH" ? "ETH" : "USD", "$iconUrl": selectedOption.fromTokenIconUrl, children: !selectedOption.fromTokenIconUrl
559
+ ? getTokenMonogram(selectedOption.fromTokenName, selectedOption.fromTokenSymbol)
560
+ : null }), _jsx(ChainBadge, { "$iconUrl": selectedOption.fromChainIconUrl, children: !selectedOption.fromChainIconUrl
561
+ ? getTokenMonogram(selectedOption.fromChainName)
562
+ : null })] }), _jsxs(ConfirmTextBlock, { children: [_jsx(Text, { size: "base", weight: "semibold", color: config.theme.font.color.primary, children: selectedOption.fromTokenName }), _jsxs(Text, { size: "sm", color: config.theme.font.color.secondary, children: ["On ", selectedOption.fromChainName] })] })] }) }), _jsxs(QuoteBlock, { children: [_jsxs(QuoteRow, { children: [_jsx(Text, { size: "sm", color: config.theme.font.color.secondary, children: "Cost" }), _jsx(Text, { size: "sm", weight: "semibold", color: config.theme.font.color.primary, children: formattedCost })] }), confirmationAmount?.amount ? (_jsxs(QuoteRow, { children: [_jsx(Text, { size: "sm", color: config.theme.font.color.secondary, children: "You Pay" }), _jsx(Text, { size: "sm", weight: "semibold", color: config.theme.font.color.primary, children: confirmationAmount.amount })] })) : null, walletPayment.quoteStatus === "loading" ? (_jsx(Text, { size: "sm", color: config.theme.font.color.secondary, children: "Fetching quote..." })) : null, attemptFreshness.status === "fresh" &&
563
+ attemptFreshness.remainingMs !== null ? (_jsxs(Text, { size: "sm", color: config.theme.font.color.secondary, children: ["Quote refreshes in", " ", formatRemainingTime(attemptFreshness.remainingMs)] })) : null, walletPayment.quoteStatus === "failed" ? (_jsx(Text, { size: "sm", color: config.theme.font.color.secondary, children: walletPayment.quoteError ||
564
+ "We couldn't fetch a quote right now." })) : null, typeof walletPayment.quote?.estimatedDurationMinutes ===
565
+ "number" ? (_jsxs(QuoteRow, { children: [_jsx(Text, { size: "sm", color: config.theme.font.color.secondary, children: "Estimated time" }), _jsxs(Text, { size: "sm", weight: "semibold", color: config.theme.font.color.primary, children: ["~", walletPayment.quote.estimatedDurationMinutes, " min"] })] })) : null] }), _jsx(ConfirmActions, { children: _jsx(StyledButton, { onClick: () => {
566
+ if (selectedOption) {
567
+ void handleSelectOption(selectedOption);
568
+ }
569
+ }, disabled: processing ||
570
+ loading.CREATE_PAYMENT_ATTEMPT ||
571
+ !selectedOption ||
572
+ walletPayment.quoteStatus === "loading" ||
573
+ (selectedOption.kind !== "direct" &&
574
+ walletPayment.quoteStatus !== "ready"), children: executingId === selectedOption.id
575
+ ? "Preparing..."
576
+ : walletPayment.quoteStatus === "loading"
577
+ ? "Fetching quote..."
578
+ : `Pay with ${selectedOption.fromTokenName}` }) })] }, selectedOption.id)) })) : null, selectedOption ? (_jsx(StyledButton, { variant: "secondary", onClick: handleReturnToOptions, disabled: processing, children: "Back" })) : null] }));
579
+ };
580
+ export { CryptoIntentWalletPaymentOptionsViewContent };
581
+ //# sourceMappingURL=wallet-payment-options.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"wallet-payment-options.js","sourceRoot":"","sources":["../../../../../src/checkout/views/crypto-intent/wallet-payment-options.tsx"],"names":[],"mappings":"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"}