@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
@@ -1,7 +1,8 @@
1
- import { PaymentsFiatAttemptsCreateData } from "../../api/generated.js";
2
- import { FiatPaymentMethod } from "../../api/payments.js";
1
+ import { FiatPaymentMethod, FiatPaymentAttempt } from "../../api/payments.js";
3
2
  import { Checkout, CheckoutMethod, CryptoCurrency, Payment, CryptoPaymentAttempt, PaymentStatus } from "../../api/types.js";
4
3
  import { WalletInterface, Transfer } from "../../components/wallet-selector/domain.js";
4
+ import { WalletPaymentOption, WalletPaymentQuote, WalletPaymentState } from "../../config.js";
5
+ import { type AttemptFreshnessStatus } from "./payment-lifecycle.js";
5
6
  export declare enum ACTIONS {
6
7
  GET_CHECKOUT_CONFIG = "GET_CHECKOUT_CONFIG",
7
8
  GET_CRYPTO_CURRENCIES = "GET_CRYPTO_CURRENCIES",
@@ -25,14 +26,25 @@ interface PollingState {
25
26
  pollCount: number;
26
27
  lastPollTime: number | null;
27
28
  }
29
+ interface AttemptFreshnessState {
30
+ status: AttemptFreshnessStatus;
31
+ expiresAt: number | null;
32
+ remainingMs: number | null;
33
+ }
34
+ interface AttemptRefreshState {
35
+ mode: "none" | "manual" | "wallet";
36
+ status: "idle" | "refreshing" | "failed";
37
+ error: string | null;
38
+ }
28
39
  interface CheckoutState {
29
40
  checkoutId: string | null;
30
41
  selectedMethod: CheckoutMethod | null;
31
42
  selectedCurrency: CryptoCurrency | null;
43
+ retrySession: boolean;
32
44
  checkout: Checkout | null;
33
45
  payment: Payment | null;
34
46
  cryptoPaymentAttempt: CryptoPaymentAttempt | null;
35
- fiatPaymentAttempt: PaymentsFiatAttemptsCreateData | null;
47
+ fiatPaymentAttempt: FiatPaymentAttempt | null;
36
48
  methods: CheckoutMethod[] | null;
37
49
  cryptoCurrency: CryptoCurrency | null;
38
50
  loading: Record<ACTIONS, boolean>;
@@ -40,116 +52,49 @@ interface CheckoutState {
40
52
  processing: boolean;
41
53
  transfer: TransferState;
42
54
  polling: PollingState;
55
+ attemptFreshness: AttemptFreshnessState;
56
+ attemptRefresh: AttemptRefreshState;
57
+ walletPayment: WalletPaymentState;
43
58
  }
44
59
  export declare const useCheckoutStore: import("zustand").UseBoundStore<Omit<import("zustand").StoreApi<CheckoutState>, "setState"> & {
45
60
  setState(nextStateOrUpdater: CheckoutState | Partial<CheckoutState> | ((state: import("immer").WritableDraft<CheckoutState>) => void), shouldReplace?: false): void;
46
61
  setState(nextStateOrUpdater: CheckoutState | ((state: import("immer").WritableDraft<CheckoutState>) => void), shouldReplace: true): void;
47
62
  }>;
63
+ export declare const syncCheckoutAttemptFreshness: (payment: Payment | null, attempt?: CryptoPaymentAttempt | null) => void;
64
+ export declare const configureWalletAttemptRefresh: (walletAddress: string | null) => void;
65
+ export declare const configureManualAttemptRefresh: () => void;
66
+ export declare const clearAttemptRefreshContext: () => void;
48
67
  export declare const clearErrors: () => void;
49
68
  export declare const initialiseStore: (payment: Payment) => Promise<void>;
50
- export declare const createCheckoutCryptoPaymentAttempt: (currency: CryptoCurrency) => Promise<void>;
69
+ export declare const createWalletOptionPaymentAttempt: (option: WalletPaymentOption, sendingAddress: string, quote?: WalletPaymentQuote | null) => Promise<CryptoPaymentAttempt>;
70
+ export declare const createManualDirectPaymentAttempt: (sendingAddress?: string, confirmations?: number) => Promise<CryptoPaymentAttempt>;
51
71
  export declare const createSuccessfulTestPaymentAttempt: () => Promise<void>;
52
72
  export declare const createFailedTestPaymentAttempt: () => Promise<void>;
53
73
  export declare const createCheckoutFiatPaymentAttempt: (method: FiatPaymentMethod) => Promise<void>;
54
74
  export declare function getAvailableCheckoutMethods(checkout: Checkout): CheckoutMethod[];
55
- export declare const getCheckoutConfig: (checkoutId: string) => Promise<void>;
56
- export declare const getPayment: () => Promise<{
57
- id: string;
58
- currency: string;
59
- created_at: string;
60
- updated_at: string;
61
- checkout_id: string;
62
- checkout: {
63
- id: string;
64
- organization_id: string;
65
- name: string;
66
- created_at: string;
67
- updated_at: string;
68
- checkout_config: {
69
- crypto?: {
70
- enabled?: boolean;
71
- settlementConfig?: {
72
- chain: string;
73
- asset: string;
74
- asset_name: string;
75
- chain_name: string;
76
- asset_id: string;
77
- display_name?: string;
78
- };
79
- withdrawAddress?: {
80
- chain: string;
81
- address: string;
82
- };
83
- };
84
- card?: {
85
- enabled?: boolean;
86
- };
87
- bank?: {
88
- enabled?: boolean;
89
- };
90
- };
91
- withdraw_address_config?: {
92
- chain: string;
93
- address: string;
94
- };
95
- is_live: boolean;
96
- logo_url?: string;
97
- };
98
- organization_id: string;
99
- status: "pending" | "confirming_payment" | "paid" | "failed";
100
- is_test: boolean;
101
- payment_attempt?: {
102
- payment_id: string;
103
- from_token: string;
104
- amount: number;
105
- amount_formatted: number;
106
- from_chain: string;
107
- settlement_token_address: string;
108
- destination_address: string;
109
- created_at: string;
110
- updated_at: string;
111
- required_confirmations: number;
112
- is_bridge: boolean;
113
- };
114
- fiat_payment_attempt?: {
115
- payment_id: string;
116
- provider: string;
117
- provider_attempt_id: string;
118
- provider_payment_id?: string | null;
119
- error_code?: string | null;
120
- error_message?: string | null;
121
- client_params: Record<string, any>;
122
- raw_provider_payload?: Record<string, any>;
123
- created_at: string;
124
- updated_at: string;
125
- };
126
- order_id?: string | null;
127
- customer_id?: string;
128
- metadata?: Record<string, string | number>;
129
- line_items?: {
130
- name: string;
131
- quantity: number;
132
- image_url: string;
133
- price: number;
134
- }[];
135
- amount: number;
136
- } | null>;
75
+ export declare const hydrateCheckoutFromPayment: (payment: Payment) => void;
76
+ export declare const getPayment: () => Promise<Payment | null>;
137
77
  interface TransferWalletInterface {
138
78
  getAddress(): Promise<string | null>;
139
79
  executeTransfer(config: Transfer): Promise<string | null>;
80
+ switchChain?(chainId: number): Promise<void>;
140
81
  }
141
82
  export declare const executeTransfer: (wallet: TransferWalletInterface) => Promise<string>;
142
83
  export declare const checkChainStatus: (wallet: WalletInterface) => Promise<void>;
143
84
  export declare const resetTransfer: () => void;
85
+ export declare const executeConnectedWalletPayment: (wallet: WalletInterface) => Promise<void>;
144
86
  export declare const startPaymentPolling: (onPaymentStatusChange: (status: PaymentStatus) => void, confirmationStatus?: PaymentStatus) => {
145
87
  stop: () => void;
146
88
  };
147
89
  export declare const stopPaymentPolling: () => void;
148
90
  export declare const resetCheckoutStore: () => void;
91
+ export declare const resetCheckoutSessionForRetry: () => void;
149
92
  export declare const setCheckoutMethod: (method: CheckoutMethod) => void;
150
93
  export declare const setProcessing: (processing: boolean) => void;
151
94
  export declare const getProcessing: () => boolean;
152
95
  export declare const setSelectedCurrency: (currency: CryptoCurrency | null) => void;
153
96
  export declare const isTestMode: () => boolean;
97
+ export declare const setWalletPaymentState: (update: Partial<WalletPaymentState>) => void;
98
+ export declare const resetWalletPaymentState: () => void;
154
99
  export {};
155
100
  //# sourceMappingURL=store.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"store.d.ts","sourceRoot":"","sources":["../../../../src/state/checkout/store.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"store.d.ts","sourceRoot":"","sources":["../../../../src/state/checkout/store.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@mintmoney/react",
3
3
  "description": "React SDK library for the MintMoney payments network",
4
- "version": "0.1.0-alpha.30",
4
+ "version": "0.1.0-alpha.32",
5
5
  "license": "MIT",
6
6
  "repository": {
7
7
  "type": "git",
@@ -68,6 +68,7 @@
68
68
  "react-dom": ">=18 <20"
69
69
  },
70
70
  "dependencies": {
71
+ "@lifi/sdk": "^3.16.3",
71
72
  "@radix-ui/react-dialog": "^1.1.6",
72
73
  "@radix-ui/react-visually-hidden": "^1.1.2",
73
74
  "@tanstack/react-query": "^5.76.1",
@@ -100,7 +101,8 @@
100
101
  "lint-staged": "^15.2.7",
101
102
  "prettier": "^3.3.3",
102
103
  "typescript": "^5.8.2",
103
- "typescript-eslint": "^8.10.0"
104
+ "typescript-eslint": "^8.10.0",
105
+ "vitest": "^4.1.4"
104
106
  },
105
107
  "scripts": {
106
108
  "build": "pnpm run clean && tsc --project tsconfig.build.json && pnpm run copy-css",
@@ -1,44 +0,0 @@
1
- import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
- import { useRef, useContext, useEffect } from "react";
3
- import { DefaultCurrencySelector } from "../../../components/crypto/default-currency-selector.js";
4
- import { useModalWithView, Text } from "../../../components/index.js";
5
- import { WalletContext } from "../../../components/wallet-selector/provider.js";
6
- import { useWalletActions, useWalletBalances, } from "../../../components/wallet-selector/store.js";
7
- import { useMintMoneyConfig } from "../../../context.js";
8
- import { useCheckoutStore } from "../../../state/checkout/store.js";
9
- import { ModalViewContainer } from "../../container.js";
10
- import { ModalBackButton } from "../back.js";
11
- const getDefaultCurrency = (cryptoCurrency, checkout) => {
12
- if (!cryptoCurrency || !checkout?.checkout_config?.crypto?.settlementConfig)
13
- return null;
14
- // Check if the crypto currency matches the configured settlement asset
15
- const settlementConfig = checkout.checkout_config.crypto.settlementConfig;
16
- return cryptoCurrency.chain === settlementConfig.chain &&
17
- cryptoCurrency.asset === settlementConfig.asset
18
- ? cryptoCurrency
19
- : null;
20
- };
21
- const CryptoIntentSelectCurrencyViewContent = () => {
22
- const modalRef = useRef(null);
23
- const { goToView } = useModalWithView();
24
- const { checkout, cryptoCurrency } = useCheckoutStore();
25
- const config = useMintMoneyConfig();
26
- const { fetchBalances } = useWalletActions();
27
- const { wallet } = useContext(WalletContext);
28
- const balances = useWalletBalances();
29
- const processing = useCheckoutStore((state) => state.processing);
30
- // If crypto is not enabled for this checkout, redirect to failed view
31
- if (checkout && !checkout.checkout_config.crypto?.enabled) {
32
- goToView("failed", { reason: "crypto_not_enabled" });
33
- return null;
34
- }
35
- useEffect(() => {
36
- if (!wallet || !cryptoCurrency)
37
- return;
38
- void fetchBalances([cryptoCurrency]);
39
- }, [wallet, cryptoCurrency, fetchBalances]);
40
- const defaultCurrency = getDefaultCurrency(cryptoCurrency, checkout);
41
- return (_jsxs(ModalViewContainer, { ref: modalRef, children: [_jsx(Text, { size: "base", color: config.theme.font.color.secondary, weight: "normal", children: "Select a currency to complete payment with" }), defaultCurrency && (_jsx(DefaultCurrencySelector, { currency: defaultCurrency, balance: balances[`${defaultCurrency.chain}-${defaultCurrency.asset}`] ?? "-", buttonVariant: "primary" })), _jsx(ModalBackButton, { view: "cryptoIntent", disabled: processing })] }));
42
- };
43
- export { CryptoIntentSelectCurrencyViewContent };
44
- //# sourceMappingURL=currency-select.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"currency-select.js","sourceRoot":"","sources":["../../../../../src/checkout/views/crypto-intent/currency-select.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAGtD,OAAO,EAAE,uBAAuB,EAAE,MAAM,yDAAyD,CAAC;AAClG,OAAO,EAAE,gBAAgB,EAAE,IAAI,EAAE,MAAM,8BAA8B,CAAC;AACtE,OAAO,EAAE,aAAa,EAAE,MAAM,iDAAiD,CAAC;AAChF,OAAO,EACL,gBAAgB,EAChB,iBAAiB,GAClB,MAAM,8CAA8C,CAAC;AACtD,OAAO,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AACzD,OAAO,EAAE,gBAAgB,EAAE,MAAM,kCAAkC,CAAC;AACpE,OAAO,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AACxD,OAAO,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAE7C,MAAM,kBAAkB,GAAG,CACzB,cAAqC,EACrC,QAAyB,EACF,EAAE;IACzB,IAAI,CAAC,cAAc,IAAI,CAAC,QAAQ,EAAE,eAAe,EAAE,MAAM,EAAE,gBAAgB;QACzE,OAAO,IAAI,CAAC;IACd,uEAAuE;IACvE,MAAM,gBAAgB,GAAG,QAAQ,CAAC,eAAe,CAAC,MAAM,CAAC,gBAAgB,CAAC;IAC1E,OAAO,cAAc,CAAC,KAAK,KAAK,gBAAgB,CAAC,KAAK;QACpD,cAAc,CAAC,KAAK,KAAK,gBAAgB,CAAC,KAAK;QAC/C,CAAC,CAAC,cAAc;QAChB,CAAC,CAAC,IAAI,CAAC;AACX,CAAC,CAAC;AAEF,MAAM,qCAAqC,GAAG,GAAG,EAAE;IACjD,MAAM,QAAQ,GAAG,MAAM,CAAiB,IAAI,CAAC,CAAC;IAC9C,MAAM,EAAE,QAAQ,EAAE,GAAG,gBAAgB,EAAE,CAAC;IACxC,MAAM,EAAE,QAAQ,EAAE,cAAc,EAAE,GAAG,gBAAgB,EAAE,CAAC;IACxD,MAAM,MAAM,GAAG,kBAAkB,EAAE,CAAC;IACpC,MAAM,EAAE,aAAa,EAAE,GAAG,gBAAgB,EAAE,CAAC;IAC7C,MAAM,EAAE,MAAM,EAAE,GAAG,UAAU,CAAC,aAAa,CAAC,CAAC;IAC7C,MAAM,QAAQ,GAAG,iBAAiB,EAAE,CAAC;IACrC,MAAM,UAAU,GAAG,gBAAgB,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;IAEjE,sEAAsE;IACtE,IAAI,QAAQ,IAAI,CAAC,QAAQ,CAAC,eAAe,CAAC,MAAM,EAAE,OAAO,EAAE,CAAC;QAC1D,QAAQ,CAAC,QAAQ,EAAE,EAAE,MAAM,EAAE,oBAAoB,EAAE,CAAC,CAAC;QACrD,OAAO,IAAI,CAAC;IACd,CAAC;IAED,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,CAAC,MAAM,IAAI,CAAC,cAAc;YAAE,OAAO;QACvC,KAAK,aAAa,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC;IACvC,CAAC,EAAE,CAAC,MAAM,EAAE,cAAc,EAAE,aAAa,CAAC,CAAC,CAAC;IAE5C,MAAM,eAAe,GAAG,kBAAkB,CAAC,cAAc,EAAE,QAAQ,CAAC,CAAC;IAErE,OAAO,CACL,MAAC,kBAAkB,IAAC,GAAG,EAAE,QAAQ,aAC/B,KAAC,IAAI,IACH,IAAI,EAAC,MAAM,EACX,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,SAAS,EACxC,MAAM,EAAC,QAAQ,2DAGV,EAEN,eAAe,IAAI,CAClB,KAAC,uBAAuB,IACtB,QAAQ,EAAE,eAAe,EACzB,OAAO,EACL,QAAQ,CAAC,GAAG,eAAe,CAAC,KAAK,IAAI,eAAe,CAAC,KAAK,EAAE,CAAC,IAAI,GAAG,EAEtE,aAAa,EAAC,SAAS,GACvB,CACH,EAED,KAAC,eAAe,IAAC,IAAI,EAAC,cAAc,EAAC,QAAQ,EAAE,UAAU,GAAI,IAC1C,CACtB,CAAC;AACJ,CAAC,CAAC;AAEF,OAAO,EAAE,qCAAqC,EAAE,CAAC"}
@@ -1,62 +0,0 @@
1
- import { jsx as _jsx } from "react/jsx-runtime";
2
- import { useContext } from "react";
3
- import { confirmPayment } from "../../api/payments.js";
4
- import { useCheckoutStore, createCheckoutCryptoPaymentAttempt, setProcessing, executeTransfer, setSelectedCurrency, checkChainStatus, } from "../../state/checkout/store.js";
5
- import { useModalWithView } from "../index.js";
6
- import { WalletContext } from "../wallet-selector/provider.js";
7
- import { CurrencySelector } from "./currency-selector.js";
8
- function waitForTransferSuccess() {
9
- return new Promise((resolve, reject) => {
10
- const unsubscribe = useCheckoutStore.subscribe((state) => {
11
- if (state.transfer.chainStatus === "confirmed") {
12
- unsubscribe();
13
- resolve();
14
- }
15
- else if (state.transfer.chainStatus === "failed") {
16
- unsubscribe();
17
- reject(new Error(state.transfer.error || "Transaction failed on chain"));
18
- }
19
- });
20
- });
21
- }
22
- const DefaultCurrencySelector = ({ currency, balance, buttonVariant = "primary", }) => {
23
- const { goToView } = useModalWithView();
24
- const { wallet } = useContext(WalletContext);
25
- const processing = useCheckoutStore((state) => state.processing);
26
- const handleSelectCurrency = async (currency) => {
27
- setProcessing(true);
28
- setSelectedCurrency(currency);
29
- try {
30
- await createCheckoutCryptoPaymentAttempt(currency);
31
- if (!wallet) {
32
- goToView("cryptoIntentSelectWallet");
33
- setProcessing(false);
34
- setSelectedCurrency(null);
35
- return;
36
- }
37
- await executeTransfer(wallet);
38
- if (wallet) {
39
- void checkChainStatus(wallet);
40
- }
41
- await waitForTransferSuccess();
42
- const payment = useCheckoutStore.getState().payment;
43
- if (payment?.id) {
44
- await confirmPayment(payment.id);
45
- }
46
- goToView("paymentStatus");
47
- }
48
- catch (error) {
49
- setProcessing(false);
50
- setSelectedCurrency(null);
51
- if (error instanceof Error) {
52
- goToView("failed", { reason: error.message });
53
- }
54
- else {
55
- goToView("failed", { reason: "payment_failed" });
56
- }
57
- }
58
- };
59
- return (_jsx(CurrencySelector, { currency: currency, balance: balance, onSelect: handleSelectCurrency, buttonVariant: buttonVariant, buttonDisabled: processing }));
60
- };
61
- export { DefaultCurrencySelector };
62
- //# sourceMappingURL=default-currency-selector.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"default-currency-selector.js","sourceRoot":"","sources":["../../../../src/components/crypto/default-currency-selector.tsx"],"names":[],"mappings":"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"}
@@ -1,3 +0,0 @@
1
- declare const CryptoIntentSelectCurrencyViewContent: () => import("react/jsx-runtime").JSX.Element | null;
2
- export { CryptoIntentSelectCurrencyViewContent };
3
- //# sourceMappingURL=currency-select.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"currency-select.d.ts","sourceRoot":"","sources":["../../../../../src/checkout/views/crypto-intent/currency-select.tsx"],"names":[],"mappings":"AA6BA,QAAA,MAAM,qCAAqC,sDA8C1C,CAAC;AAEF,OAAO,EAAE,qCAAqC,EAAE,CAAC"}
@@ -1,9 +0,0 @@
1
- import { CryptoCurrency } from "../../api/types.js";
2
- type DefaultCurrencyRowProps = {
3
- currency: CryptoCurrency;
4
- balance: string;
5
- buttonVariant?: "primary" | "secondary";
6
- };
7
- declare const DefaultCurrencySelector: ({ currency, balance, buttonVariant, }: DefaultCurrencyRowProps) => import("react/jsx-runtime").JSX.Element;
8
- export { DefaultCurrencySelector };
9
- //# sourceMappingURL=default-currency-selector.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"default-currency-selector.d.ts","sourceRoot":"","sources":["../../../../src/components/crypto/default-currency-selector.tsx"],"names":[],"mappings":"AAGA,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AA8BpD,KAAK,uBAAuB,GAAG;IAC7B,QAAQ,EAAE,cAAc,CAAC;IACzB,OAAO,EAAE,MAAM,CAAC;IAChB,aAAa,CAAC,EAAE,SAAS,GAAG,WAAW,CAAC;CACzC,CAAC;AAEF,QAAA,MAAM,uBAAuB,GAAI,uCAI9B,uBAAuB,4CA8CzB,CAAC;AAEF,OAAO,EAAE,uBAAuB,EAAE,CAAC"}