@avail-project/widgets 0.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (143) hide show
  1. package/README.md +34 -0
  2. package/dist/common/components/ErrorBoundary.d.ts +44 -0
  3. package/dist/common/components/ErrorBoundary.d.ts.map +1 -0
  4. package/dist/common/components/ErrorBoundary.js +65 -0
  5. package/dist/common/hooks/useDebouncedCallback.d.ts +13 -0
  6. package/dist/common/hooks/useDebouncedCallback.d.ts.map +1 -0
  7. package/dist/common/hooks/useDebouncedCallback.js +42 -0
  8. package/dist/common/hooks/useDebouncedValue.d.ts +5 -0
  9. package/dist/common/hooks/useDebouncedValue.d.ts.map +1 -0
  10. package/dist/common/hooks/useDebouncedValue.js +15 -0
  11. package/dist/common/hooks/useInterval.d.ts +11 -0
  12. package/dist/common/hooks/useInterval.d.ts.map +1 -0
  13. package/dist/common/hooks/useInterval.js +25 -0
  14. package/dist/common/hooks/useLatest.d.ts +12 -0
  15. package/dist/common/hooks/useLatest.d.ts.map +1 -0
  16. package/dist/common/hooks/useLatest.js +19 -0
  17. package/dist/common/hooks/useNexusError.d.ts +20 -0
  18. package/dist/common/hooks/useNexusError.d.ts.map +1 -0
  19. package/dist/common/hooks/useNexusError.js +120 -0
  20. package/dist/common/hooks/usePolling.d.ts +7 -0
  21. package/dist/common/hooks/usePolling.d.ts.map +1 -0
  22. package/dist/common/hooks/usePolling.js +29 -0
  23. package/dist/common/hooks/useStableCallback.d.ts +6 -0
  24. package/dist/common/hooks/useStableCallback.d.ts.map +1 -0
  25. package/dist/common/hooks/useStableCallback.js +13 -0
  26. package/dist/common/hooks/useStopwatch.d.ts +17 -0
  27. package/dist/common/hooks/useStopwatch.d.ts.map +1 -0
  28. package/dist/common/hooks/useStopwatch.js +44 -0
  29. package/dist/common/hooks/useTransactionExecution.d.ts +62 -0
  30. package/dist/common/hooks/useTransactionExecution.d.ts.map +1 -0
  31. package/dist/common/hooks/useTransactionExecution.js +273 -0
  32. package/dist/common/hooks/useTransactionFlow.d.ts +71 -0
  33. package/dist/common/hooks/useTransactionFlow.d.ts.map +1 -0
  34. package/dist/common/hooks/useTransactionFlow.js +435 -0
  35. package/dist/common/index.d.ts +17 -0
  36. package/dist/common/index.d.ts.map +1 -0
  37. package/dist/common/index.js +16 -0
  38. package/dist/common/tx/steps.d.ts +19 -0
  39. package/dist/common/tx/steps.d.ts.map +1 -0
  40. package/dist/common/tx/steps.js +89 -0
  41. package/dist/common/tx/types.d.ts +11 -0
  42. package/dist/common/tx/types.d.ts.map +1 -0
  43. package/dist/common/tx/types.js +19 -0
  44. package/dist/common/tx/useTransactionSteps.d.ts +21 -0
  45. package/dist/common/tx/useTransactionSteps.d.ts.map +1 -0
  46. package/dist/common/tx/useTransactionSteps.js +40 -0
  47. package/dist/common/types/transaction-flow.d.ts +48 -0
  48. package/dist/common/types/transaction-flow.d.ts.map +1 -0
  49. package/dist/common/types/transaction-flow.js +2 -0
  50. package/dist/common/utils/constant.d.ts +99 -0
  51. package/dist/common/utils/constant.d.ts.map +1 -0
  52. package/dist/common/utils/constant.js +370 -0
  53. package/dist/common/utils/token-pricing.d.ts +33 -0
  54. package/dist/common/utils/token-pricing.d.ts.map +1 -0
  55. package/dist/common/utils/token-pricing.js +255 -0
  56. package/dist/common/utils/transaction-flow.d.ts +35 -0
  57. package/dist/common/utils/transaction-flow.d.ts.map +1 -0
  58. package/dist/common/utils/transaction-flow.js +65 -0
  59. package/dist/index.d.ts +5 -0
  60. package/dist/index.d.ts.map +1 -0
  61. package/dist/index.js +2 -0
  62. package/dist/lib/utils.d.ts +4 -0
  63. package/dist/lib/utils.d.ts.map +1 -0
  64. package/dist/lib/utils.js +8 -0
  65. package/dist/nexus/NexusProvider.d.ts +50 -0
  66. package/dist/nexus/NexusProvider.d.ts.map +1 -0
  67. package/dist/nexus/NexusProvider.js +572 -0
  68. package/dist/nexus-widget/components/address-identicon.d.ts +5 -0
  69. package/dist/nexus-widget/components/address-identicon.d.ts.map +1 -0
  70. package/dist/nexus-widget/components/address-identicon.js +39 -0
  71. package/dist/nexus-widget/components/amount-input-unified.d.ts +18 -0
  72. package/dist/nexus-widget/components/amount-input-unified.d.ts.map +1 -0
  73. package/dist/nexus-widget/components/amount-input-unified.js +88 -0
  74. package/dist/nexus-widget/components/deposit-idle-form.d.ts +29 -0
  75. package/dist/nexus-widget/components/deposit-idle-form.d.ts.map +1 -0
  76. package/dist/nexus-widget/components/deposit-idle-form.js +506 -0
  77. package/dist/nexus-widget/components/nexus-widget-progress-screen.d.ts +36 -0
  78. package/dist/nexus-widget/components/nexus-widget-progress-screen.d.ts.map +1 -0
  79. package/dist/nexus-widget/components/nexus-widget-progress-screen.js +737 -0
  80. package/dist/nexus-widget/components/pay-using-selector.d.ts +9 -0
  81. package/dist/nexus-widget/components/pay-using-selector.d.ts.map +1 -0
  82. package/dist/nexus-widget/components/pay-using-selector.js +37 -0
  83. package/dist/nexus-widget/components/pay-with-sources.d.ts +11 -0
  84. package/dist/nexus-widget/components/pay-with-sources.d.ts.map +1 -0
  85. package/dist/nexus-widget/components/pay-with-sources.js +266 -0
  86. package/dist/nexus-widget/components/receive-asset-selector.d.ts +28 -0
  87. package/dist/nexus-widget/components/receive-asset-selector.d.ts.map +1 -0
  88. package/dist/nexus-widget/components/receive-asset-selector.js +1178 -0
  89. package/dist/nexus-widget/components/recipient-input.d.ts +10 -0
  90. package/dist/nexus-widget/components/recipient-input.d.ts.map +1 -0
  91. package/dist/nexus-widget/components/recipient-input.js +44 -0
  92. package/dist/nexus-widget/components/send-idle-form.d.ts +29 -0
  93. package/dist/nexus-widget/components/send-idle-form.d.ts.map +1 -0
  94. package/dist/nexus-widget/components/send-idle-form.js +548 -0
  95. package/dist/nexus-widget/components/status-alerts.d.ts +7 -0
  96. package/dist/nexus-widget/components/status-alerts.d.ts.map +1 -0
  97. package/dist/nexus-widget/components/status-alerts.js +17 -0
  98. package/dist/nexus-widget/components/swap-asset-selector.d.ts +74 -0
  99. package/dist/nexus-widget/components/swap-asset-selector.d.ts.map +1 -0
  100. package/dist/nexus-widget/components/swap-asset-selector.js +1910 -0
  101. package/dist/nexus-widget/components/swap-idle-form.d.ts +29 -0
  102. package/dist/nexus-widget/components/swap-idle-form.d.ts.map +1 -0
  103. package/dist/nexus-widget/components/swap-idle-form.js +1289 -0
  104. package/dist/nexus-widget/components/swap-intent-preview.d.ts +95 -0
  105. package/dist/nexus-widget/components/swap-intent-preview.d.ts.map +1 -0
  106. package/dist/nexus-widget/components/swap-intent-preview.js +1050 -0
  107. package/dist/nexus-widget/nexus-widget.d.ts +4 -0
  108. package/dist/nexus-widget/nexus-widget.d.ts.map +1 -0
  109. package/dist/nexus-widget/nexus-widget.js +7819 -0
  110. package/dist/nexus-widget/sdk-types.d.ts +13 -0
  111. package/dist/nexus-widget/sdk-types.d.ts.map +1 -0
  112. package/dist/nexus-widget/sdk-types.js +1 -0
  113. package/dist/nexus-widget/theme.d.ts +156 -0
  114. package/dist/nexus-widget/theme.d.ts.map +1 -0
  115. package/dist/nexus-widget/theme.js +159 -0
  116. package/dist/nexus-widget/types.d.ts +141 -0
  117. package/dist/nexus-widget/types.d.ts.map +1 -0
  118. package/dist/nexus-widget/types.js +1 -0
  119. package/dist/nexus-widget/utils/citrea-tokens.d.ts +82 -0
  120. package/dist/nexus-widget/utils/citrea-tokens.d.ts.map +1 -0
  121. package/dist/nexus-widget/utils/citrea-tokens.js +136 -0
  122. package/dist/nexus-widget/utils/deposit-source-selection.d.ts +55 -0
  123. package/dist/nexus-widget/utils/deposit-source-selection.d.ts.map +1 -0
  124. package/dist/nexus-widget/utils/deposit-source-selection.js +219 -0
  125. package/dist/swaps/components/stacked-token-icons.d.ts +15 -0
  126. package/dist/swaps/components/stacked-token-icons.d.ts.map +1 -0
  127. package/dist/swaps/components/stacked-token-icons.js +38 -0
  128. package/dist/swaps/components/step-flow.d.ts +32 -0
  129. package/dist/swaps/components/step-flow.d.ts.map +1 -0
  130. package/dist/swaps/components/step-flow.js +54 -0
  131. package/dist/swaps/components/token-icon.d.ts +11 -0
  132. package/dist/swaps/components/token-icon.d.ts.map +1 -0
  133. package/dist/swaps/components/token-icon.js +16 -0
  134. package/dist/swaps/components/transaction-progress.d.ts +43 -0
  135. package/dist/swaps/components/transaction-progress.d.ts.map +1 -0
  136. package/dist/swaps/components/transaction-progress.js +94 -0
  137. package/dist/ui/button.d.ts +11 -0
  138. package/dist/ui/button.d.ts.map +1 -0
  139. package/dist/ui/button.js +34 -0
  140. package/dist/ui/dialog.d.ts +17 -0
  141. package/dist/ui/dialog.d.ts.map +1 -0
  142. package/dist/ui/dialog.js +47 -0
  143. package/package.json +60 -0
@@ -0,0 +1,255 @@
1
+ const COINBASE_SPOT_API_BASE = "https://api.coinbase.com/v2/prices";
2
+ const COINBASE_EXCHANGE_RATES_API_BASE = "https://api.coinbase.com/v2/exchange-rates";
3
+ const COINGECKO_SIMPLE_PRICE_API_BASE = "https://api.coingecko.com/api/v3/simple/price";
4
+ const COINGECKO_SEARCH_API_URL = "https://api.coingecko.com/api/v3/search";
5
+ export const DEFAULT_COINBASE_PRICE_REQUEST_TIMEOUT_MS = 4_000;
6
+ export const USD_PEGGED_FALLBACK_RATE = 1;
7
+ export const DEFAULT_USD_PEGGED_TOKEN_SYMBOLS = [
8
+ "USDT",
9
+ "USDC",
10
+ "USDC.E",
11
+ "USDT.E",
12
+ "USDS",
13
+ "DAI",
14
+ "CTUSD",
15
+ "JUSD",
16
+ "USDM",
17
+ "FDUSD",
18
+ "BUSD",
19
+ "TUSD",
20
+ "PYUSD",
21
+ "GUSD",
22
+ "SVJUSD",
23
+ "LUSD",
24
+ "USDE",
25
+ "USDP",
26
+ ];
27
+ /**
28
+ * Wrapped / derivative token → base token pegging map.
29
+ * When Coinbase has no direct price for a token, we resolve the price
30
+ * of the base symbol and treat it as 1:1.
31
+ *
32
+ * Keys and values are UPPERCASE (normalised).
33
+ */
34
+ export const TOKEN_PRICE_PEGS = {
35
+ // --- Citrea-specific ---
36
+ CBTC: "BTC",
37
+ WCBTC: "BTC",
38
+ CTUSD: "USD",
39
+ CUSD: "USD",
40
+ // --- Cross-chain wrapped natives ---
41
+ WETH: "ETH",
42
+ WBTC: "BTC",
43
+ WMON: "MON",
44
+ WPOL: "POL",
45
+ // --- BTC derivatives ---
46
+ SBTC: "BTC",
47
+ CBBTC: "BTC",
48
+ ENZOBTC: "BTC",
49
+ KBTC: "BTC",
50
+ BBTC: "BTC",
51
+ SYBTC: "BTC",
52
+ "WBTC.E": "BTC",
53
+ // --- ETH derivatives ---
54
+ STETH: "ETH",
55
+ RETH: "ETH",
56
+ WSTETH: "ETH",
57
+ WBETH: "ETH",
58
+ WEETH: "ETH",
59
+ GTETH: "ETH",
60
+ CBETH: "ETH",
61
+ // --- Other wrapped natives ---
62
+ WSOL: "SOL",
63
+ WTRX: "TRX",
64
+ WBNB: "BNB",
65
+ WHYPE: "HYPE",
66
+ WAVAX: "AVAX",
67
+ // --- Stablecoin variants ---
68
+ "USDC.E": "USDC",
69
+ "USDT.E": "USDT",
70
+ GUSD: "USD",
71
+ JUSD: "USD",
72
+ SVJUSD: "USD",
73
+ USDM: "USD",
74
+ };
75
+ /**
76
+ * Custom error thrown when a token's USD price cannot be determined
77
+ * through any resolution path (SDK rates, Coinbase API, or pegging fallback).
78
+ */
79
+ export class TokenPricingError extends Error {
80
+ constructor(tokenSymbol) {
81
+ super(`Price failure: Cannot value this token at the moment`);
82
+ this.name = "TokenPricingError";
83
+ this.tokenSymbol = tokenSymbol;
84
+ }
85
+ }
86
+ /**
87
+ * Resolve the base symbol for a given token via the pegging map.
88
+ * Returns `null` if no peg is defined.
89
+ */
90
+ export function resolveBaseSymbol(tokenSymbol) {
91
+ const normalized = normalizeTokenSymbol(tokenSymbol);
92
+ return TOKEN_PRICE_PEGS[normalized] ?? null;
93
+ }
94
+ export function normalizeTokenSymbol(tokenSymbol) {
95
+ return tokenSymbol.trim().toUpperCase();
96
+ }
97
+ const USD_RATE_PEG_SYMBOLS = {
98
+ CBTC: "BTC",
99
+ CTUSD: "USDC",
100
+ GUSD: "USDT",
101
+ JUSD: "USDC",
102
+ SVJUSD: "USDT",
103
+ SYBTC: "BTC",
104
+ "USDC.E": "USDC",
105
+ "USDT.E": "USDT",
106
+ "WBTC.E": "BTC",
107
+ WCBTC: "BTC",
108
+ };
109
+ export function getUsdRatePegSymbol(tokenSymbol) {
110
+ const normalized = normalizeTokenSymbol(tokenSymbol);
111
+ if (!normalized)
112
+ return null;
113
+ return USD_RATE_PEG_SYMBOLS[normalized] ?? null;
114
+ }
115
+ export function toFinitePositiveNumber(value) {
116
+ const parsed = Number.parseFloat(String(value));
117
+ if (!Number.isFinite(parsed) || parsed <= 0) {
118
+ return null;
119
+ }
120
+ return parsed;
121
+ }
122
+ export function getCoinbaseSymbolCandidates(tokenSymbol) {
123
+ const normalized = normalizeTokenSymbol(tokenSymbol);
124
+ if (!normalized)
125
+ return [];
126
+ const pegSymbol = getUsdRatePegSymbol(normalized);
127
+ const baseSymbol = normalized.split(/[._-]/)[0] ?? normalized;
128
+ const wrappedBase = baseSymbol.startsWith("W") && baseSymbol.length > 3
129
+ ? baseSymbol.slice(1)
130
+ : null;
131
+ return Array.from(new Set([normalized, baseSymbol, wrappedBase, pegSymbol].filter((symbol) => Boolean(symbol))));
132
+ }
133
+ const COINGECKO_ID_CANDIDATES_BY_SYMBOL = {
134
+ AAVE: ["aave"],
135
+ AVAX: ["avalanche-2"],
136
+ BTC: ["bitcoin"],
137
+ BNB: ["binancecoin"],
138
+ DAI: ["dai"],
139
+ ETH: ["ethereum"],
140
+ GHO: ["gho"],
141
+ HYPE: ["hyperliquid"],
142
+ MATIC: ["matic-network"],
143
+ OP: ["optimism"],
144
+ POL: ["polygon-ecosystem-token"],
145
+ UNI: ["uniswap"],
146
+ USDC: ["usd-coin"],
147
+ USDS: ["usds"],
148
+ USDT: ["tether"],
149
+ WETH: ["weth"],
150
+ };
151
+ function getCoinGeckoIdCandidates(tokenSymbol) {
152
+ const normalized = normalizeTokenSymbol(tokenSymbol);
153
+ if (!normalized)
154
+ return [];
155
+ const pegSymbol = getUsdRatePegSymbol(normalized);
156
+ const baseSymbol = normalized.split(/[._-]/)[0] ?? normalized;
157
+ const wrappedBase = baseSymbol.startsWith("W") && baseSymbol.length > 3
158
+ ? baseSymbol.slice(1)
159
+ : null;
160
+ return Array.from(new Set([
161
+ ...(COINGECKO_ID_CANDIDATES_BY_SYMBOL[normalized] ?? []),
162
+ ...(COINGECKO_ID_CANDIDATES_BY_SYMBOL[baseSymbol] ?? []),
163
+ ...(wrappedBase
164
+ ? COINGECKO_ID_CANDIDATES_BY_SYMBOL[wrappedBase] ?? []
165
+ : []),
166
+ ...(pegSymbol
167
+ ? COINGECKO_ID_CANDIDATES_BY_SYMBOL[pegSymbol] ?? []
168
+ : []),
169
+ ]));
170
+ }
171
+ export function buildUsdPeggedSymbolSet(supportedChains, baseSymbols = DEFAULT_USD_PEGGED_TOKEN_SYMBOLS) {
172
+ const symbolSet = new Set(baseSymbols);
173
+ for (const chain of (supportedChains ?? [])) {
174
+ for (const token of chain.tokens ?? []) {
175
+ const symbol = normalizeTokenSymbol(token.symbol ?? "");
176
+ const equivalent = normalizeTokenSymbol(token.equivalentCurrency ?? "");
177
+ if (!symbol)
178
+ continue;
179
+ // Never add tokens that have an explicit peg in TOKEN_PRICE_PEGS
180
+ // (e.g. wcBTC → BTC). The SDK's equivalentCurrency metadata can
181
+ // incorrectly mark non-stablecoin tokens as USD-pegged.
182
+ if (TOKEN_PRICE_PEGS[symbol])
183
+ continue;
184
+ if (equivalent && symbolSet.has(equivalent)) {
185
+ symbolSet.add(symbol);
186
+ }
187
+ }
188
+ }
189
+ return symbolSet;
190
+ }
191
+ async function fetchJsonWithTimeout(url, requestTimeoutMs) {
192
+ const controller = new AbortController();
193
+ const timeoutId = setTimeout(() => controller.abort(), requestTimeoutMs);
194
+ try {
195
+ const response = await fetch(url, {
196
+ signal: controller.signal,
197
+ });
198
+ if (!response.ok)
199
+ return null;
200
+ return (await response.json());
201
+ }
202
+ catch {
203
+ return null;
204
+ }
205
+ finally {
206
+ clearTimeout(timeoutId);
207
+ }
208
+ }
209
+ export async function fetchCoinbaseUsdRate(tokenSymbol, requestTimeoutMs = DEFAULT_COINBASE_PRICE_REQUEST_TIMEOUT_MS) {
210
+ const normalized = normalizeTokenSymbol(tokenSymbol);
211
+ if (!normalized)
212
+ return null;
213
+ for (const candidate of getCoinbaseSymbolCandidates(normalized)) {
214
+ const spotBody = await fetchJsonWithTimeout(`${COINBASE_SPOT_API_BASE}/${encodeURIComponent(candidate)}-USD/spot`, requestTimeoutMs);
215
+ const spotAmount = toFinitePositiveNumber(spotBody?.data?.amount);
216
+ if (spotAmount)
217
+ return spotAmount;
218
+ const exchangeRatesBody = await fetchJsonWithTimeout(`${COINBASE_EXCHANGE_RATES_API_BASE}?currency=${encodeURIComponent(candidate)}`, requestTimeoutMs);
219
+ const exchangeRatesAmount = toFinitePositiveNumber(exchangeRatesBody?.data?.rates?.USD);
220
+ if (exchangeRatesAmount)
221
+ return exchangeRatesAmount;
222
+ }
223
+ return null;
224
+ }
225
+ async function fetchCoinGeckoUsdRateByIds(ids, requestTimeoutMs) {
226
+ if (ids.length === 0)
227
+ return null;
228
+ const body = await fetchJsonWithTimeout(`${COINGECKO_SIMPLE_PRICE_API_BASE}?ids=${encodeURIComponent(ids.join(","))}&vs_currencies=usd`, requestTimeoutMs);
229
+ for (const id of ids) {
230
+ const rate = toFinitePositiveNumber(body?.[id]?.usd);
231
+ if (rate)
232
+ return rate;
233
+ }
234
+ return null;
235
+ }
236
+ export async function fetchCoinGeckoUsdRate(tokenSymbol, requestTimeoutMs = DEFAULT_COINBASE_PRICE_REQUEST_TIMEOUT_MS) {
237
+ const normalized = normalizeTokenSymbol(tokenSymbol);
238
+ if (!normalized)
239
+ return null;
240
+ const knownIdsRate = await fetchCoinGeckoUsdRateByIds(getCoinGeckoIdCandidates(normalized), requestTimeoutMs);
241
+ if (knownIdsRate)
242
+ return knownIdsRate;
243
+ const searchBody = await fetchJsonWithTimeout(`${COINGECKO_SEARCH_API_URL}?query=${encodeURIComponent(normalized)}`, requestTimeoutMs);
244
+ const exactSymbolMatches = (searchBody?.coins ?? [])
245
+ .filter((coin) => normalizeTokenSymbol(coin.symbol ?? "") === normalized && coin.id)
246
+ .sort((a, b) => {
247
+ const aRank = a.market_cap_rank ?? Number.MAX_SAFE_INTEGER;
248
+ const bRank = b.market_cap_rank ?? Number.MAX_SAFE_INTEGER;
249
+ return aRank - bRank;
250
+ });
251
+ return fetchCoinGeckoUsdRateByIds(exactSymbolMatches
252
+ .map((coin) => coin.id)
253
+ .filter((id) => Boolean(id))
254
+ .slice(0, 5), requestTimeoutMs);
255
+ }
@@ -0,0 +1,35 @@
1
+ import { type NexusNetwork, type NexusClient } from "@avail-project/nexus-core";
2
+ import { type Address } from "viem";
3
+ export declare const MAX_AMOUNT_DEBOUNCE_MS = 300;
4
+ export declare const normalizeMaxAmount: (maxAmount?: string | number) => string | undefined;
5
+ export declare const clampAmountToMax: ({ amount, maxAmount, nexusSDK, token, chainId, }: {
6
+ amount: string;
7
+ maxAmount?: string;
8
+ nexusSDK: NexusClient;
9
+ token: string;
10
+ chainId: number;
11
+ }) => string;
12
+ export declare const formatAmountForDisplay: (amount: bigint, decimals: number | undefined, nexusSDK: NexusClient) => string;
13
+ export declare const buildInitialInputs: ({ type, network, connectedAddress, prefill, }: {
14
+ type: "bridge" | "transfer";
15
+ network: NexusNetwork;
16
+ connectedAddress?: Address;
17
+ prefill?: {
18
+ token: string;
19
+ chainId: number;
20
+ amount?: string;
21
+ recipient?: Address;
22
+ };
23
+ }) => {
24
+ chain: number;
25
+ token: string;
26
+ amount: string | undefined;
27
+ recipient: `0x${string}`;
28
+ };
29
+ export declare const getCoverageDecimals: ({ type, token, chainId, fallback, }: {
30
+ type: "bridge" | "transfer";
31
+ token?: string;
32
+ chainId?: number;
33
+ fallback: number | undefined;
34
+ }) => number | undefined;
35
+ //# sourceMappingURL=transaction-flow.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"transaction-flow.d.ts","sourceRoot":"","sources":["../../../.build-src/common/utils/transaction-flow.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,YAAY,EACjB,KAAK,WAAW,EACjB,MAAM,2BAA2B,CAAC;AAGnC,OAAO,EAAE,KAAK,OAAO,EAAE,MAAM,MAAM,CAAC;AAIpC,eAAO,MAAM,sBAAsB,MAAM,CAAC;AAE1C,eAAO,MAAM,kBAAkB,GAC7B,YAAY,MAAM,GAAG,MAAM,KAC1B,MAAM,GAAG,SASX,CAAC;AAEF,eAAO,MAAM,gBAAgB,GAAI,kDAM9B;IACD,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,WAAW,CAAC;IACtB,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;CACjB,KAAG,MAiBH,CAAC;AAEF,eAAO,MAAM,sBAAsB,GACjC,QAAQ,MAAM,EACd,UAAU,MAAM,GAAG,SAAS,EAC5B,UAAU,WAAW,KACpB,MAUF,CAAC;AAEF,eAAO,MAAM,kBAAkB,GAAI,+CAKhC;IACD,IAAI,EAAE,QAAQ,GAAG,UAAU,CAAC;IAC5B,OAAO,EAAE,YAAY,CAAC;IACtB,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,OAAO,CAAC,EAAE;QACR,KAAK,EAAE,MAAM,CAAC;QACd,OAAO,EAAE,MAAM,CAAC;QAChB,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,SAAS,CAAC,EAAE,OAAO,CAAC;KACrB,CAAC;CACH;;;;;CAaA,CAAC;AAEF,eAAO,MAAM,mBAAmB,GAAI,qCAKjC;IACD,IAAI,EAAE,QAAQ,GAAG,UAAU,CAAC;IAC5B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,GAAG,SAAS,CAAC;CAC9B,uBAUA,CAAC"}
@@ -0,0 +1,65 @@
1
+ import {} from "@avail-project/nexus-core";
2
+ import { formatUnits } from "@avail-project/nexus-core/utils";
3
+ import { SUPPORTED_CHAINS } from "./constant";
4
+ import {} from "viem";
5
+ const MAX_AMOUNT_REGEX = /^\d*\.?\d+$/;
6
+ export const MAX_AMOUNT_DEBOUNCE_MS = 300;
7
+ export const normalizeMaxAmount = (maxAmount) => {
8
+ if (maxAmount === undefined || maxAmount === null)
9
+ return undefined;
10
+ const value = String(maxAmount).trim();
11
+ if (!value || value === "." || !MAX_AMOUNT_REGEX.test(value)) {
12
+ return undefined;
13
+ }
14
+ const parsed = Number.parseFloat(value);
15
+ if (!Number.isFinite(parsed) || parsed <= 0)
16
+ return undefined;
17
+ return value;
18
+ };
19
+ export const clampAmountToMax = ({ amount, maxAmount, nexusSDK, token, chainId, }) => {
20
+ if (!maxAmount)
21
+ return amount;
22
+ try {
23
+ const amountRaw = nexusSDK.convertTokenReadableAmountToBigInt(amount, token, chainId);
24
+ const maxRaw = nexusSDK.convertTokenReadableAmountToBigInt(maxAmount, token, chainId);
25
+ return amountRaw > maxRaw ? maxAmount : amount;
26
+ }
27
+ catch {
28
+ return amount;
29
+ }
30
+ };
31
+ export const formatAmountForDisplay = (amount, decimals, nexusSDK) => {
32
+ if (typeof decimals !== "number")
33
+ return amount.toString();
34
+ const formatted = formatUnits(amount, decimals);
35
+ if (!formatted.includes("."))
36
+ return formatted;
37
+ const [whole, fraction] = formatted.split(".");
38
+ const trimmedFraction = fraction.slice(0, 6).replace(/0+$/, "");
39
+ if (!trimmedFraction && whole === "0" && amount > BigInt(0)) {
40
+ return "0.000001";
41
+ }
42
+ return trimmedFraction ? `${whole}.${trimmedFraction}` : whole;
43
+ };
44
+ export const buildInitialInputs = ({ type, network, connectedAddress, prefill, }) => {
45
+ return {
46
+ chain: prefill?.chainId ??
47
+ (network === "testnet"
48
+ ? SUPPORTED_CHAINS.SEPOLIA
49
+ : SUPPORTED_CHAINS.ETHEREUM),
50
+ token: prefill?.token ?? "USDC",
51
+ amount: prefill?.amount ?? undefined,
52
+ recipient: prefill?.recipient ??
53
+ (type === "bridge" ? connectedAddress : undefined),
54
+ };
55
+ };
56
+ export const getCoverageDecimals = ({ type, token, chainId, fallback, }) => {
57
+ if (token === "USDM")
58
+ return 18;
59
+ if (type === "bridge" &&
60
+ token === "USDC" &&
61
+ chainId === SUPPORTED_CHAINS.BNB) {
62
+ return 18;
63
+ }
64
+ return fallback;
65
+ };
@@ -0,0 +1,5 @@
1
+ export { NexusWidget, default } from "./nexus-widget/nexus-widget";
2
+ export type { NexusWidgetConfig, NexusWidgetProps } from "./nexus-widget/types";
3
+ export { default as NexusProvider, NexusContext, useNexus } from "./nexus/NexusProvider";
4
+ export type { UserAsset } from "./nexus/NexusProvider";
5
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../.build-src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,OAAO,EAAE,MAAM,6BAA6B,CAAC;AACnE,YAAY,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AAChF,OAAO,EAAE,OAAO,IAAI,aAAa,EAAE,YAAY,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AACzF,YAAY,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1,2 @@
1
+ export { NexusWidget, default } from "./nexus-widget/nexus-widget";
2
+ export { default as NexusProvider, NexusContext, useNexus } from "./nexus/NexusProvider";
@@ -0,0 +1,4 @@
1
+ import { type ClassValue } from "clsx";
2
+ export declare function cn(...inputs: ClassValue[]): string;
3
+ export declare function absoluteUrl(path: string): string;
4
+ //# sourceMappingURL=utils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../.build-src/lib/utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAQ,KAAK,UAAU,EAAE,MAAM,MAAM,CAAC;AAG7C,wBAAgB,EAAE,CAAC,GAAG,MAAM,EAAE,UAAU,EAAE,UAEzC;AACD,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,UAEvC"}
@@ -0,0 +1,8 @@
1
+ import { clsx } from "clsx";
2
+ import { twMerge } from "tailwind-merge";
3
+ export function cn(...inputs) {
4
+ return twMerge(clsx(inputs));
5
+ }
6
+ export function absoluteUrl(path) {
7
+ return `${process.env.NEXT_PUBLIC_BASE_URL}${path}`;
8
+ }
@@ -0,0 +1,50 @@
1
+ import { type ChainBalance, type EthereumProvider, type NexusClient, type NexusNetwork, type OnAllowanceHookData, type OnIntentHookData, type OnSwapIntentHookData, type SupportedChainsAndTokensResult, type TokenBalance } from "@avail-project/nexus-core";
2
+ export type UserAsset = TokenBalance & {
3
+ breakdown: (ChainBalance & {
4
+ balance: string;
5
+ balanceInFiat: number;
6
+ chain: ChainBalance["chain"];
7
+ contractAddress: string;
8
+ decimals: number;
9
+ symbol: string;
10
+ })[];
11
+ balanceInFiat?: number;
12
+ };
13
+ type SupportedChainsResult = SupportedChainsAndTokensResult;
14
+ import { type RefObject } from "react";
15
+ interface NexusContextType {
16
+ allowance: RefObject<OnAllowanceHookData | null>;
17
+ attachEventHooks: () => void;
18
+ bridgableBalance: UserAsset[] | null;
19
+ deinitializeNexus: () => Promise<void>;
20
+ exchangeRate: Record<string, number> | null;
21
+ fetchBridgableBalance: () => Promise<void>;
22
+ fetchSwapBalance: () => Promise<UserAsset[] | null>;
23
+ getFiatValue: (amount: number, token: string) => number;
24
+ handleInit: (provider: EthereumProvider) => Promise<void>;
25
+ initializeNexus: (provider: EthereumProvider) => Promise<void>;
26
+ intent: RefObject<OnIntentHookData | null>;
27
+ loading: boolean;
28
+ network?: NexusNetwork;
29
+ nexusSDK: NexusClient | null;
30
+ resolveTokenUsdRate: (tokenSymbol: string) => Promise<number | null>;
31
+ setAllowance: (data: OnAllowanceHookData | null) => void;
32
+ setIntent: (data: OnIntentHookData | null) => void;
33
+ supportedChainsAndTokens: SupportedChainsAndTokensResult | null;
34
+ swapBalance: UserAsset[] | null;
35
+ swapIntent: RefObject<OnSwapIntentHookData | null>;
36
+ swapSupportedChainsAndTokens: SupportedChainsResult | null;
37
+ }
38
+ export declare const NexusContext: import("react").Context<NexusContextType | undefined>;
39
+ type NexusProviderProps = {
40
+ children: React.ReactNode;
41
+ config?: {
42
+ network?: NexusNetwork;
43
+ debug?: boolean;
44
+ mode?: "deposit" | "swap" | "send";
45
+ };
46
+ };
47
+ declare const NexusProvider: ({ children, config, }: NexusProviderProps) => import("react/jsx-runtime").JSX.Element;
48
+ export declare function useNexus(): NexusContextType;
49
+ export default NexusProvider;
50
+ //# sourceMappingURL=NexusProvider.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"NexusProvider.d.ts","sourceRoot":"","sources":["../../.build-src/nexus/NexusProvider.tsx"],"names":[],"mappings":"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"}