@lifi/widget 4.0.0-beta.10 → 4.0.0-beta.12

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.
@@ -0,0 +1,356 @@
1
+ {
2
+ "language": {
3
+ "name": "中文",
4
+ "title": "语言"
5
+ },
6
+ "format": {
7
+ "currency": "{{value, currencyExt(currency: USD)}}",
8
+ "number": "{{value, number(maximumFractionDigits: 9)}}",
9
+ "percent": "{{value, percent(maximumFractionDigits: 2)}}",
10
+ "tokenAmount": "{{value, numberExt}}"
11
+ },
12
+ "button": {
13
+ "auto": "自动",
14
+ "bookmark": "收藏",
15
+ "bookmarks": "收藏夹",
16
+ "bridge": "跨链",
17
+ "bridgeReview": "查看跨链详情",
18
+ "buy": "购买",
19
+ "cancel": "取消",
20
+ "checkoutReview": "查看购买详情",
21
+ "clearAllFailed": "",
22
+ "clearTransaction": "",
23
+ "close": "关闭",
24
+ "confirm": "确认",
25
+ "connectAnotherWallet": "连接另一个钱包",
26
+ "connectChainWallet": "",
27
+ "connectWallet": "关联钱包",
28
+ "contactSupport": "联系技术支持",
29
+ "continue": "继续",
30
+ "copyAddress": "复制地址",
31
+ "dark": "深色主题",
32
+ "delete": "删除",
33
+ "deposit": "存款",
34
+ "depositReview": "查看存款详情",
35
+ "disconnect": "断开连接",
36
+ "done": "确认",
37
+ "exchange": "兑换",
38
+ "getGas": "开始兑换燃气费",
39
+ "learnMore": "了解更多",
40
+ "light": "浅色主题",
41
+ "max": "",
42
+ "ok": "确认",
43
+ "options": "选项",
44
+ "reset": "重置",
45
+ "resetSettings": "恢复默认设置",
46
+ "seeDetails": "查看详情",
47
+ "showAll": "显示所有",
48
+ "startBridging": "开始跨链",
49
+ "startSwapping": "开始兑换",
50
+ "swap": "兑换",
51
+ "swapReview": "查看兑换详情",
52
+ "system": "",
53
+ "tryAgain": "重试",
54
+ "viewCoverage": "查看我们的覆盖范围",
55
+ "viewOnExplorer": "在区块链浏览器上查看"
56
+ },
57
+ "header": {
58
+ "amount": "金额",
59
+ "bookmarkedWallets": "已收藏的钱包",
60
+ "bridge": "跨链",
61
+ "checkout": "支付",
62
+ "checkoutDetails": "交易细节",
63
+ "deposit": "存款",
64
+ "depositDetails": "存款详情",
65
+ "depositTo": "充币至",
66
+ "exchange": "兑换",
67
+ "from": "兑换自",
68
+ "gas": "燃气费",
69
+ "payWith": "支付方式",
70
+ "receive": "接收",
71
+ "received": "",
72
+ "recentWallets": "最近使用的钱包",
73
+ "refunded": "",
74
+ "selectChain": "选择网络",
75
+ "selectWallet": "选择你的钱包",
76
+ "send": "发送",
77
+ "sendToWallet": "发送到该钱包",
78
+ "settings": "设置",
79
+ "swap": "兑换",
80
+ "to": "兑换为",
81
+ "transactionDetails": "交易详情",
82
+ "activities": "",
83
+ "walletConnected": "连接钱包",
84
+ "youGet": "您获得",
85
+ "youPay": "需要支付"
86
+ },
87
+ "info": {
88
+ "message": {
89
+ "accountDeployedMessage": "",
90
+ "autoRefuel": "您在 {{chainName}} 链上的燃气费很低。如果启用该选项,您将获得足够的燃气费完成此次兑换。",
91
+ "emptyBridgesList": "我们找不到任何匹配的桥",
92
+ "emptyChainList": "我们找不到任何匹配的链",
93
+ "emptyExchangesList": "我们找不到任何匹配的交易所",
94
+ "emptyTokenListAllNetworks": "",
95
+ "emptyTransactionHistory": "交易记录只存储在本地,如果您清除浏览器数据,交易记录将被删除。",
96
+ "routeNotFound": "导致其的原因可能是:流动性低,所选定代币的数额太低,燃气费过高,或者当前没有合适的交易路径。",
97
+ "missingRouteRequiredAccount": ""
98
+ },
99
+ "title": {
100
+ "autoRefuel": "获得 {{chainName}} 链的燃气费",
101
+ "emptyTransactionHistory": "近期无交易",
102
+ "routeNotFound": "没有可用的路由"
103
+ }
104
+ },
105
+ "success": {
106
+ "message": {
107
+ "exchangePartiallySuccessful": "我们尝试执行这笔交易,但是因为滑点设置的问题或者 {{tokenSymbol}} 代币流动性不足,{{tool}} 无法完成交易"
108
+ },
109
+ "title": {
110
+ "bridgePartiallySuccessful": "跨链部分成功",
111
+ "bridgeSuccessful": "跨链成功",
112
+ "depositSuccessful": "存款成功",
113
+ "checkoutSuccessful": "购买成功",
114
+ "refundIssued": "退款已受理",
115
+ "swapPartiallySuccessful": "兑换部分完成",
116
+ "swapSuccessful": "兑换成功"
117
+ }
118
+ },
119
+ "warning": {
120
+ "message": {
121
+ "accountNotDeployedMessage": "",
122
+ "lowAddressActivity": "此地址在 {{chainName}} 网络上的活跃度较低。请确认您发送到了正确的地址和网络,以防止潜在的资金损失。",
123
+ "clearFailedTransactions": "",
124
+ "fundsLossPrevention": "总是确保在目的地链上适当建立智能合同账户,并避免直接转给交易所,以防止资金损失。",
125
+ "highValueLoss": "收到的代币的价值明显低于要被兑换的代币和交易成本。",
126
+ "unverifiedToken": "",
127
+ "insufficientFunds": "你没有足够的资金来完成这笔交易。",
128
+ "insufficientGas": "您没有足够的燃气费来完成此次交易。您至少需要添加:",
129
+ "minFromAmountUSD": "",
130
+ "rateChanged": "兑换比例已经改变,如果继续兑换,您将接受新的兑换比例。",
131
+ "resetSettings": "这将重置您的路由优先级,滑点,燃气费,选中的跨链桥和链上交易所。",
132
+ "slippageOutsideRecommendedLimits": "过高的滑点可能会导致交易被抢跑,造成财产损失",
133
+ "slippageUnderRecommendedLimits": "低幻灯片宽度可能会导致交易延迟或失败。"
134
+ },
135
+ "title": {
136
+ "clearFailedTransactions": "",
137
+ "highValueLoss": "大额资金损失",
138
+ "insufficientGas": "燃气费不足",
139
+ "rateChanged": "兑换比例变动",
140
+ "resetSettings": "确定要恢复默认设置吗?",
141
+ "lowAddressActivity": "低活动地址"
142
+ }
143
+ },
144
+ "error": {
145
+ "message": {
146
+ "allowanceRequired": "{{tokenSymbol}} 的转账金额超过了您设置的支出上限。请提高该代币的支出上限,然后重试。",
147
+ "insufficientFunds": "您没有足够的燃气费支付该交易。",
148
+ "rateLimitExceeded": "",
149
+ "remainInYourWallet": "",
150
+ "signatureRejected": "",
151
+ "slippageThreshold": "滑点大于预设值,请选择其他路由并获取新的价格。",
152
+ "thirdPartyError": "",
153
+ "transactionCanceled": "交易已被取消。",
154
+ "transactionConflict": "交易无法处理,因为它与使用相同资金的另一个待处理交易相冲突。 请等待交易确认或检查您的交易历史,然后再次尝试。",
155
+ "transactionExpired": "区块高度已超过允许的最大值,或者交易哈希值已经过期。",
156
+ "transactionRejected": "",
157
+ "transactionFailed": "请查看区块浏览器以了解更多信息。",
158
+ "transactionNotSent": "交易未能发送。",
159
+ "transactionSimulationFailed": "该交易模拟执行失败。",
160
+ "unknown": "请再试一次或者联系支持。",
161
+ "walletChangedDuringExecution": "询价的钱包地址与试图签署交易的钱包地址不匹配,请确保在整个交易执行过程中使用相同的钱包地址。"
162
+ },
163
+ "title": {
164
+ "allowanceRequired": "余额不足",
165
+ "balanceIsTooLow": "余额太低",
166
+ "bookmarkAlreadyExists": "钱包: {{name}},已被收藏",
167
+ "bookmarkNameRequired": "请输入收藏钱包的名称",
168
+ "chainSwitch": "请切换当前网络",
169
+ "exchangeRateUpdateCanceled": "兑换率更新已取消",
170
+ "gasLimitIsTooLow": "燃气费设置过低",
171
+ "insufficientFunds": "资金不足",
172
+ "insufficientGas": "",
173
+ "rateLimitExceeded": "",
174
+ "signatureRejected": "交易需要签名。",
175
+ "slippageNotMet": "滑点未满足",
176
+ "thirdPartyError": "",
177
+ "transactionCanceled": "交易取消",
178
+ "transactionConflict": "交易冲突",
179
+ "transactionExpired": "交易过期",
180
+ "transactionFailed": "交易失败",
181
+ "transactionRejected": "",
182
+ "transactionSimulationFailed": "交易模拟失败",
183
+ "transactionUnderpriced": "交易定价过低",
184
+ "transactionUnprepared": "无法开始该交易",
185
+ "unknown": "未知错误",
186
+ "walletAddressInvalid": "钱包地址或域名无效",
187
+ "walletAddressInvalid_chain": "钱包地址或者域名在所选中的 {{chainName}} 链无效",
188
+ "walletAddressRequired": "请输入钱包地址。",
189
+ "walletChainTypeInvalid": "钱包地址与所选中目标的 {{chainName}} 链不匹配",
190
+ "walletMismatch": "钱包地址不匹配"
191
+ }
192
+ },
193
+ "tooltip": {
194
+ "deselectAll": "取消全选",
195
+ "estimatedTime": "",
196
+ "exchangeRate": "",
197
+ "feeCollection": "",
198
+ "minReceived": "在签署兑换或者跨链交易之前, 预估的最低代币数量可能会变化,对于两步交易,这适用于第二步交易签署之前。",
199
+ "notFound": {
200
+ "text": "我们找不到这个页面。",
201
+ "title": "404"
202
+ },
203
+ "multistep": "",
204
+ "gasless": "",
205
+ "numberOfSteps": "每次代币兑换包含了一到两次需要签名的交易。",
206
+ "priceImpact": "源代币和目标代币之间的估计差值。",
207
+ "progressToNextUpdate": "数据将在{{value}} 秒后自动刷新,点击这里可以手动更新。",
208
+ "selectAll": "全选",
209
+ "settingsModified": "设置(已修改)",
210
+ "slippage": "真实的成交价位与预设的成交价位间相差的最大百分比。该值可以在设置中更改。"
211
+ },
212
+ "main": {
213
+ "allNetworks": "",
214
+ "allTokens": "所有代币",
215
+ "bridgeStepDetails": "通过 {{tool}} 把资产从 {{from}} 链跨到 {{to}} 链上",
216
+ "checkoutStepDetails": "通过 {{tool}} 购买",
217
+ "currentAmount": "当前余额",
218
+ "depositStepDetails": "通过 {{tool}} 存入资金",
219
+ "estimatedTime": "",
220
+ "exchangeRate": "",
221
+ "featuredTokens": "精选代币",
222
+ "fees": {
223
+ "defaultIntegrator": "集成商费用",
224
+ "relayerService": "",
225
+ "estimated": "预估总费用",
226
+ "free": "",
227
+ "network": "网络费用",
228
+ "paid": "已支付的费用",
229
+ "provider": "供应商费用"
230
+ },
231
+ "from": "从",
232
+ "inProgress": "进行中",
233
+ "maxSlippage": "最大滑点",
234
+ "minReceived": "最少收到",
235
+ "myTokens": "我的代币",
236
+ "onChain": "在{{chainName}} 上",
237
+ "ownedBy": "属于",
238
+ "pinnedTokens": "",
239
+ "popularTokens": "热门代币",
240
+ "priceImpact": "价格冲击",
241
+ "process": {
242
+ "bridge": {
243
+ "actionRequired": "",
244
+ "messageRequired": "",
245
+ "done": "跨链交易已确认",
246
+ "pending": "",
247
+ "started": "准备执行跨链交易"
248
+ },
249
+ "checkout": {
250
+ "done": "购买完成"
251
+ },
252
+ "deposit": {
253
+ "done": "已完成存款"
254
+ },
255
+ "receivingChain": {
256
+ "done": "跨链完成",
257
+ "partial": "跨链部分完成",
258
+ "pending": "等待接收链回应",
259
+ "refunded": "跨链交易资产已退还"
260
+ },
261
+ "swap": {
262
+ "actionRequired": "",
263
+ "messageRequired": "",
264
+ "done": "兑换完成",
265
+ "pending": "",
266
+ "started": "准备兑换"
267
+ },
268
+ "permit": {
269
+ "actionRequired": "",
270
+ "done": "",
271
+ "pending": "",
272
+ "started": ""
273
+ },
274
+ "tokenAllowance": {
275
+ "actionRequired": "",
276
+ "resetRequired": "",
277
+ "done": "",
278
+ "pending": "",
279
+ "started": ""
280
+ }
281
+ },
282
+ "quotedAmount": "报价金额",
283
+ "rateChange": "波动率",
284
+ "receiving": "接收",
285
+ "refuelStepDetails": "通过 {{tool}} 获取燃气费",
286
+ "route": "",
287
+ "select": "",
288
+ "sendToAddress": "发送到{{address}}",
289
+ "sendToWallet": "发送到另外的钱包",
290
+ "sending": "发送中",
291
+ "sentToAddress": "发送到{{address}}",
292
+ "stepBridge": "跨链",
293
+ "stepBridgeAndBuy": "跨链并购买",
294
+ "stepBridgeAndDeposit": "跨链并存款",
295
+ "stepBuy": "购买",
296
+ "stepDeposit": "存款",
297
+ "stepDetails": "通过 LI.FI {{tool}}",
298
+ "stepSwap": "兑换",
299
+ "stepSwapAndBridge": "兑换和跨链",
300
+ "stepSwapAndBuy": "兑换并购买",
301
+ "stepSwapAndDeposit": "兑换并存款",
302
+ "swapStepDetails": "通过{{tool}}在{{chain}}链上兑换代币",
303
+ "receipts": "",
304
+ "sentToWallet": "",
305
+ "transferId": "交易 ID",
306
+ "tags": {
307
+ "cheapest": "最佳报价",
308
+ "fastest": "速度最快",
309
+ "gasless": "",
310
+ "multistep": ""
311
+ },
312
+ "to": "到",
313
+ "tokenOnChain": "{{chainName}}链上的{{tokenSymbol}}",
314
+ "tokenOnChainAmount": "",
315
+ "tokenSearch": "",
316
+ "valueLoss": "资金损失",
317
+ "searchBridges": "搜索跨链桥",
318
+ "searchExchanges": "搜索交易所",
319
+ "searchNetwork": ""
320
+ },
321
+ "settings": {
322
+ "appearance": "",
323
+ "enabledBridges": "跨链桥",
324
+ "enabledExchanges": "交易所",
325
+ "gasPrice": {
326
+ "fast": "快速",
327
+ "normal": "正常",
328
+ "slow": "缓慢",
329
+ "title": "燃气费"
330
+ },
331
+ "routePriority": "路由优先级",
332
+ "slippage": "最大滑点",
333
+ "custom": "自定义",
334
+ "resetSettings": "您正在使用自定义设置来过滤可用路由。",
335
+ "hideSmallBalances": ""
336
+ },
337
+ "sendToWallet": {
338
+ "addBookmark": "添加到收藏",
339
+ "bookmarkWallet": "已收藏的钱包",
340
+ "confirmWalletAddress": "确认钱包地址",
341
+ "connectedWallets": "已连接的钱包",
342
+ "enterAddress_long": "请输入地址或钱包域名",
343
+ "enterAddress_short": "请输入钱包地址",
344
+ "enterName": "输入名称",
345
+ "noBookmarkedWallets": "没有收藏的钱包",
346
+ "noConnectedWallets": "没有已连接的钱包",
347
+ "noRecentWallets": "没有最近使用的钱包",
348
+ "required": ""
349
+ },
350
+ "tokenMetric": {
351
+ "currentPrice": "",
352
+ "contractAddress": "",
353
+ "marketCap": "",
354
+ "volume24h": ""
355
+ }
356
+ }
@@ -63,6 +63,7 @@ const createRouteExecutionStore = ({ namePrefix }) => create()(persist((set, get
63
63
  }), {
64
64
  name: `${namePrefix || "li.fi"}-widget-routes`,
65
65
  version: 3,
66
+ migrate: (persistedState) => persistedState,
66
67
  partialize: (state) => ({ routes: state.routes }),
67
68
  merge: (persistedState, currentState) => {
68
69
  const state = {
@@ -1 +1 @@
1
- {"version":3,"file":"createRouteExecutionStore.js","names":[],"sources":["../../../../src/stores/routes/createRouteExecutionStore.ts"],"sourcesContent":["import type { Route, RouteExtended } from '@lifi/sdk'\nimport type { StoreApi, UseBoundStore } from 'zustand'\nimport { create } from 'zustand'\nimport { persist } from 'zustand/middleware'\nimport { hasEnumFlag } from '../../utils/enum.js'\nimport type { PersistStoreProps } from '../types.js'\nimport type { RouteExecution, RouteExecutionState } from './types.js'\nimport { RouteExecutionStatus } from './types.js'\nimport {\n isRouteDone,\n isRouteFailed,\n isRoutePartiallyDone,\n isRouteRefunded,\n} from './utils.js'\n\nexport const createRouteExecutionStore = ({\n namePrefix,\n}: PersistStoreProps): UseBoundStore<StoreApi<RouteExecutionState>> =>\n create<RouteExecutionState>()(\n persist(\n (set, get) => ({\n routes: {},\n setExecutableRoute: (route: Route, observableRouteIds?: string[]) => {\n if (!get().routes[route.id]) {\n set((state: RouteExecutionState) => {\n const routes = { ...state.routes }\n // clean previous idle routes\n Object.keys(routes)\n .filter(\n (routeId) =>\n !observableRouteIds?.includes(routeId) &&\n hasEnumFlag(\n routes[routeId]!.status,\n RouteExecutionStatus.Idle\n )\n )\n .forEach((routeId) => {\n delete routes[routeId]\n })\n routes[route.id] = {\n route,\n status: RouteExecutionStatus.Idle,\n }\n return {\n routes,\n }\n })\n }\n },\n updateRoute: (route: RouteExtended) => {\n if (get().routes[route.id]) {\n set((state: RouteExecutionState) => {\n const updatedState = {\n routes: {\n ...state.routes,\n [route.id]: { ...state.routes[route.id]!, route },\n },\n }\n const isFailed = isRouteFailed(route)\n if (isFailed) {\n updatedState.routes[route.id]!.status =\n RouteExecutionStatus.Failed\n return updatedState\n }\n const isDone = isRouteDone(route)\n if (isDone) {\n updatedState.routes[route.id]!.status =\n RouteExecutionStatus.Done\n if (isRoutePartiallyDone(route)) {\n updatedState.routes[route.id]!.status |=\n RouteExecutionStatus.Partial\n } else if (isRouteRefunded(route)) {\n updatedState.routes[route.id]!.status |=\n RouteExecutionStatus.Refunded\n }\n return updatedState\n }\n const isLoading = route.steps.some((step) => step.execution)\n if (isLoading) {\n updatedState.routes[route.id]!.status =\n RouteExecutionStatus.Pending\n }\n return updatedState\n })\n }\n },\n deleteRoutes: (type, accountAddresses) =>\n set((state: RouteExecutionState) => {\n const routes = { ...state.routes }\n Object.keys(routes)\n .filter((routeId) => {\n const route = routes[routeId]\n if (\n accountAddresses &&\n !accountAddresses.includes(route?.route.fromAddress ?? '')\n ) {\n return false\n }\n return type === 'completed'\n ? hasEnumFlag(route?.status ?? 0, RouteExecutionStatus.Done)\n : type === 'failed'\n ? hasEnumFlag(\n route?.status ?? 0,\n RouteExecutionStatus.Failed\n )\n : !hasEnumFlag(\n route?.status ?? 0,\n RouteExecutionStatus.Done\n )\n })\n .forEach((routeId) => {\n delete routes[routeId]\n })\n return {\n routes,\n }\n }),\n deleteRoute: (routeId: string) => {\n if (get().routes[routeId]) {\n set((state: RouteExecutionState) => {\n const routes = { ...state.routes }\n delete routes[routeId]\n return {\n routes,\n }\n })\n }\n },\n }),\n {\n name: `${namePrefix || 'li.fi'}-widget-routes`,\n version: 3,\n partialize: (state) => ({ routes: state.routes }),\n merge: (persistedState: any, currentState: RouteExecutionState) => {\n const state = {\n ...currentState,\n ...persistedState,\n } as RouteExecutionState\n try {\n // Keep only the most recent 100 routes, evicting the oldest when the\n // limit is exceeded.\n const maxStoredRoutes = 100\n const allRoutes = Object.values(state.routes) as RouteExecution[]\n const storedRoutes = allRoutes\n .sort(\n (a, b) =>\n (b.route.steps[0]?.execution?.startedAt ?? 0) -\n (a.route.steps[0]?.execution?.startedAt ?? 0)\n )\n .slice(0, maxStoredRoutes)\n const keepIds = new Set(storedRoutes.map((r) => r.route.id))\n for (const id of Object.keys(state.routes)) {\n if (!keepIds.has(id)) {\n delete state.routes[id]\n }\n }\n } catch (error) {\n console.error(error)\n }\n return state\n },\n }\n )\n )\n"],"mappings":";;;;;;AAeA,MAAa,6BAA6B,EACxC,iBAEA,QAA6B,CAC3B,SACG,KAAK,SAAS;CACb,QAAQ,EAAE;CACV,qBAAqB,OAAc,uBAAkC;AACnE,MAAI,CAAC,KAAK,CAAC,OAAO,MAAM,IACtB,MAAK,UAA+B;GAClC,MAAM,SAAS,EAAE,GAAG,MAAM,QAAQ;AAElC,UAAO,KAAK,OAAO,CAChB,QACE,YACC,CAAC,oBAAoB,SAAS,QAAQ,IACtC,YACE,OAAO,SAAU,QACjB,qBAAqB,KACtB,CACJ,CACA,SAAS,YAAY;AACpB,WAAO,OAAO;KACd;AACJ,UAAO,MAAM,MAAM;IACjB;IACA,QAAQ,qBAAqB;IAC9B;AACD,UAAO,EACL,QACD;IACD;;CAGN,cAAc,UAAyB;AACrC,MAAI,KAAK,CAAC,OAAO,MAAM,IACrB,MAAK,UAA+B;GAClC,MAAM,eAAe,EACnB,QAAQ;IACN,GAAG,MAAM;KACR,MAAM,KAAK;KAAE,GAAG,MAAM,OAAO,MAAM;KAAM;KAAO;IAClD,EACF;AAED,OADiB,cAAc,MAAM,EACvB;AACZ,iBAAa,OAAO,MAAM,IAAK,SAC7B,qBAAqB;AACvB,WAAO;;AAGT,OADe,YAAY,MAAM,EACrB;AACV,iBAAa,OAAO,MAAM,IAAK,SAC7B,qBAAqB;AACvB,QAAI,qBAAqB,MAAM,CAC7B,cAAa,OAAO,MAAM,IAAK,UAC7B,qBAAqB;aACd,gBAAgB,MAAM,CAC/B,cAAa,OAAO,MAAM,IAAK,UAC7B,qBAAqB;AAEzB,WAAO;;AAGT,OADkB,MAAM,MAAM,MAAM,SAAS,KAAK,UAAU,CAE1D,cAAa,OAAO,MAAM,IAAK,SAC7B,qBAAqB;AAEzB,UAAO;IACP;;CAGN,eAAe,MAAM,qBACnB,KAAK,UAA+B;EAClC,MAAM,SAAS,EAAE,GAAG,MAAM,QAAQ;AAClC,SAAO,KAAK,OAAO,CAChB,QAAQ,YAAY;GACnB,MAAM,QAAQ,OAAO;AACrB,OACE,oBACA,CAAC,iBAAiB,SAAS,OAAO,MAAM,eAAe,GAAG,CAE1D,QAAO;AAET,UAAO,SAAS,cACZ,YAAY,OAAO,UAAU,GAAG,qBAAqB,KAAK,GAC1D,SAAS,WACP,YACE,OAAO,UAAU,GACjB,qBAAqB,OACtB,GACD,CAAC,YACC,OAAO,UAAU,GACjB,qBAAqB,KACtB;IACP,CACD,SAAS,YAAY;AACpB,UAAO,OAAO;IACd;AACJ,SAAO,EACL,QACD;GACD;CACJ,cAAc,YAAoB;AAChC,MAAI,KAAK,CAAC,OAAO,SACf,MAAK,UAA+B;GAClC,MAAM,SAAS,EAAE,GAAG,MAAM,QAAQ;AAClC,UAAO,OAAO;AACd,UAAO,EACL,QACD;IACD;;CAGP,GACD;CACE,MAAM,GAAG,cAAc,QAAQ;CAC/B,SAAS;CACT,aAAa,WAAW,EAAE,QAAQ,MAAM,QAAQ;CAChD,QAAQ,gBAAqB,iBAAsC;EACjE,MAAM,QAAQ;GACZ,GAAG;GACH,GAAG;GACJ;AACD,MAAI;GAKF,MAAM,eADY,OAAO,OAAO,MAAM,OAAO,CAE1C,MACE,GAAG,OACD,EAAE,MAAM,MAAM,IAAI,WAAW,aAAa,MAC1C,EAAE,MAAM,MAAM,IAAI,WAAW,aAAa,GAC9C,CACA,MAAM,GARe,IAQI;GAC5B,MAAM,UAAU,IAAI,IAAI,aAAa,KAAK,MAAM,EAAE,MAAM,GAAG,CAAC;AAC5D,QAAK,MAAM,MAAM,OAAO,KAAK,MAAM,OAAO,CACxC,KAAI,CAAC,QAAQ,IAAI,GAAG,CAClB,QAAO,MAAM,OAAO;WAGjB,OAAO;AACd,WAAQ,MAAM,MAAM;;AAEtB,SAAO;;CAEV,CACF,CACF"}
1
+ {"version":3,"file":"createRouteExecutionStore.js","names":[],"sources":["../../../../src/stores/routes/createRouteExecutionStore.ts"],"sourcesContent":["import type { Route, RouteExtended } from '@lifi/sdk'\nimport type { StoreApi, UseBoundStore } from 'zustand'\nimport { create } from 'zustand'\nimport { persist } from 'zustand/middleware'\nimport { hasEnumFlag } from '../../utils/enum.js'\nimport type { PersistStoreProps } from '../types.js'\nimport type { RouteExecution, RouteExecutionState } from './types.js'\nimport { RouteExecutionStatus } from './types.js'\nimport {\n isRouteDone,\n isRouteFailed,\n isRoutePartiallyDone,\n isRouteRefunded,\n} from './utils.js'\n\nexport const createRouteExecutionStore = ({\n namePrefix,\n}: PersistStoreProps): UseBoundStore<StoreApi<RouteExecutionState>> =>\n create<RouteExecutionState>()(\n persist(\n (set, get) => ({\n routes: {},\n setExecutableRoute: (route: Route, observableRouteIds?: string[]) => {\n if (!get().routes[route.id]) {\n set((state: RouteExecutionState) => {\n const routes = { ...state.routes }\n // clean previous idle routes\n Object.keys(routes)\n .filter(\n (routeId) =>\n !observableRouteIds?.includes(routeId) &&\n hasEnumFlag(\n routes[routeId]!.status,\n RouteExecutionStatus.Idle\n )\n )\n .forEach((routeId) => {\n delete routes[routeId]\n })\n routes[route.id] = {\n route,\n status: RouteExecutionStatus.Idle,\n }\n return {\n routes,\n }\n })\n }\n },\n updateRoute: (route: RouteExtended) => {\n if (get().routes[route.id]) {\n set((state: RouteExecutionState) => {\n const updatedState = {\n routes: {\n ...state.routes,\n [route.id]: { ...state.routes[route.id]!, route },\n },\n }\n const isFailed = isRouteFailed(route)\n if (isFailed) {\n updatedState.routes[route.id]!.status =\n RouteExecutionStatus.Failed\n return updatedState\n }\n const isDone = isRouteDone(route)\n if (isDone) {\n updatedState.routes[route.id]!.status =\n RouteExecutionStatus.Done\n if (isRoutePartiallyDone(route)) {\n updatedState.routes[route.id]!.status |=\n RouteExecutionStatus.Partial\n } else if (isRouteRefunded(route)) {\n updatedState.routes[route.id]!.status |=\n RouteExecutionStatus.Refunded\n }\n return updatedState\n }\n const isLoading = route.steps.some((step) => step.execution)\n if (isLoading) {\n updatedState.routes[route.id]!.status =\n RouteExecutionStatus.Pending\n }\n return updatedState\n })\n }\n },\n deleteRoutes: (type, accountAddresses) =>\n set((state: RouteExecutionState) => {\n const routes = { ...state.routes }\n Object.keys(routes)\n .filter((routeId) => {\n const route = routes[routeId]\n if (\n accountAddresses &&\n !accountAddresses.includes(route?.route.fromAddress ?? '')\n ) {\n return false\n }\n return type === 'completed'\n ? hasEnumFlag(route?.status ?? 0, RouteExecutionStatus.Done)\n : type === 'failed'\n ? hasEnumFlag(\n route?.status ?? 0,\n RouteExecutionStatus.Failed\n )\n : !hasEnumFlag(\n route?.status ?? 0,\n RouteExecutionStatus.Done\n )\n })\n .forEach((routeId) => {\n delete routes[routeId]\n })\n return {\n routes,\n }\n }),\n deleteRoute: (routeId: string) => {\n if (get().routes[routeId]) {\n set((state: RouteExecutionState) => {\n const routes = { ...state.routes }\n delete routes[routeId]\n return {\n routes,\n }\n })\n }\n },\n }),\n {\n name: `${namePrefix || 'li.fi'}-widget-routes`,\n version: 3,\n migrate: (persistedState: any) => persistedState,\n partialize: (state) => ({ routes: state.routes }),\n merge: (persistedState: any, currentState: RouteExecutionState) => {\n const state = {\n ...currentState,\n ...persistedState,\n } as RouteExecutionState\n try {\n // Keep only the most recent 100 routes, evicting the oldest when the\n // limit is exceeded.\n const maxStoredRoutes = 100\n const allRoutes = Object.values(state.routes) as RouteExecution[]\n const storedRoutes = allRoutes\n .sort(\n (a, b) =>\n (b.route.steps[0]?.execution?.startedAt ?? 0) -\n (a.route.steps[0]?.execution?.startedAt ?? 0)\n )\n .slice(0, maxStoredRoutes)\n const keepIds = new Set(storedRoutes.map((r) => r.route.id))\n for (const id of Object.keys(state.routes)) {\n if (!keepIds.has(id)) {\n delete state.routes[id]\n }\n }\n } catch (error) {\n console.error(error)\n }\n return state\n },\n }\n )\n )\n"],"mappings":"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"}
@@ -6,7 +6,7 @@ const actionStatusMessages = {
6
6
  CHECK_ALLOWANCE: {
7
7
  STARTED: (t, step) => t("main.process.tokenAllowance.started", { tokenSymbol: step.action.fromToken.symbol }),
8
8
  PENDING: (t, step) => t("main.process.tokenAllowance.pending", { tokenSymbol: step.action.fromToken.symbol }),
9
- DONE: (t, step) => t("main.process.tokenAllowance.pending", { tokenSymbol: step.action.fromToken.symbol })
9
+ DONE: (t, step) => t("main.process.tokenAllowance.done", { tokenSymbol: step.action.fromToken.symbol })
10
10
  },
11
11
  NATIVE_PERMIT: {
12
12
  STARTED: (t) => t("main.process.permit.started"),
@@ -1 +1 @@
1
- {"version":3,"file":"getActionMessage.js","names":[],"sources":["../../../src/utils/getActionMessage.ts"],"sourcesContent":["import type {\n ExecutionActionStatus,\n ExecutionActionType,\n LiFiStepExtended,\n StatusMessage,\n Substatus,\n} from '@lifi/sdk'\nimport type { TFunction } from 'i18next'\nimport type { SubvariantOptions, WidgetSubvariant } from '../types/widget'\n\nexport function getActionMessage(\n t: TFunction,\n step: LiFiStepExtended,\n type: ExecutionActionType,\n status: ExecutionActionStatus,\n substatus?: Substatus,\n subvariant?: WidgetSubvariant,\n subvariantOptions?: SubvariantOptions\n): {\n title?: string\n message?: string\n} {\n const messageWithSubstatus = substatus\n ? actionSubstatusMessages[status as StatusMessage]?.[substatus]?.(t)\n : undefined\n const title =\n messageWithSubstatus ??\n actionStatusMessages[type]?.[status]?.(\n t,\n step,\n subvariant,\n subvariantOptions\n )\n return { title }\n}\n\nconst actionStatusMessages: Record<\n ExecutionActionType,\n Partial<\n Record<\n ExecutionActionStatus,\n (\n t: TFunction,\n step: LiFiStepExtended,\n subvariant?: WidgetSubvariant,\n subvariantOptions?: SubvariantOptions\n ) => string\n >\n >\n> = {\n CHECK_ALLOWANCE: {\n STARTED: (t, step) =>\n t('main.process.tokenAllowance.started', {\n tokenSymbol: step.action.fromToken.symbol,\n }),\n PENDING: (t, step) =>\n t('main.process.tokenAllowance.pending', {\n tokenSymbol: step.action.fromToken.symbol,\n }),\n DONE: (t, step) =>\n t('main.process.tokenAllowance.pending', {\n tokenSymbol: step.action.fromToken.symbol,\n }),\n },\n NATIVE_PERMIT: {\n STARTED: (t) => t('main.process.permit.started'),\n ACTION_REQUIRED: (t) => t('main.process.permit.actionRequired'),\n PENDING: (t) => t('main.process.permit.pending'),\n DONE: (t) => t('main.process.permit.done'),\n },\n RESET_ALLOWANCE: {\n STARTED: (t, step) =>\n t('main.process.tokenAllowance.pending', {\n tokenSymbol: step.action.fromToken.symbol,\n }),\n RESET_REQUIRED: (t, step) =>\n t('main.process.tokenAllowance.resetRequired', {\n tokenSymbol: step.action.fromToken.symbol,\n }),\n PENDING: (t, step) =>\n t('main.process.tokenAllowance.pending', {\n tokenSymbol: step.action.fromToken.symbol,\n }),\n DONE: (t, step) =>\n t('main.process.tokenAllowance.pending', {\n tokenSymbol: step.action.fromToken.symbol,\n }),\n },\n SET_ALLOWANCE: {\n STARTED: (t, step) =>\n t('main.process.tokenAllowance.pending', {\n tokenSymbol: step.action.fromToken.symbol,\n }),\n ACTION_REQUIRED: (t, step) =>\n t('main.process.tokenAllowance.actionRequired', {\n tokenSymbol: step.action.fromToken.symbol,\n }),\n PENDING: (t, step) =>\n t('main.process.tokenAllowance.pending', {\n tokenSymbol: step.action.fromToken.symbol,\n }),\n DONE: (t, step) =>\n t('main.process.tokenAllowance.done', {\n tokenSymbol: step.action.fromToken.symbol,\n }),\n },\n PERMIT: {\n STARTED: (t) => t('main.process.permit.started'),\n ACTION_REQUIRED: (t) => t('main.process.permit.actionRequired'),\n PENDING: (t) => t('main.process.permit.pending'),\n DONE: (t) => t('main.process.permit.done'),\n },\n SWAP: {\n STARTED: (t) => t('main.process.swap.started'),\n ACTION_REQUIRED: (t) => t('main.process.swap.actionRequired'),\n MESSAGE_REQUIRED: (t) => t('main.process.swap.messageRequired'),\n PENDING: (t) => t('main.process.swap.pending'),\n DONE: (t, _, subvariant, subvariantOptions) =>\n subvariant === 'custom'\n ? t(`main.process.${subvariantOptions?.custom ?? 'checkout'}.done`)\n : t('main.process.swap.done'),\n },\n CROSS_CHAIN: {\n STARTED: (t) => t('main.process.bridge.started'),\n ACTION_REQUIRED: (t) => t('main.process.bridge.actionRequired'),\n MESSAGE_REQUIRED: (t) => t('main.process.bridge.messageRequired'),\n PENDING: (t) => t('main.process.bridge.pending'),\n DONE: (t) => t('main.process.bridge.done'),\n },\n RECEIVING_CHAIN: {\n STARTED: (t) => t('main.process.receivingChain.pending'),\n PENDING: (t) => t('main.process.receivingChain.pending'),\n DONE: (t, _, subvariant, subvariantOptions) =>\n subvariant === 'custom'\n ? t(`main.process.${subvariantOptions?.custom ?? 'checkout'}.done`)\n : t('main.process.receivingChain.done'),\n },\n}\n\nconst actionSubstatusMessages: Record<\n StatusMessage,\n Partial<Record<Substatus, (t: TFunction) => string>>\n> = {\n PENDING: {\n // BRIDGE_NOT_AVAILABLE: 'Bridge communication is temporarily unavailable.',\n // CHAIN_NOT_AVAILABLE: 'RPC communication is temporarily unavailable.',\n // REFUND_IN_PROGRESS:\n // \"The refund has been requested and it's being processed\",\n // WAIT_DESTINATION_TRANSACTION:\n // 'The bridge off-chain logic is being executed. Wait for the transaction to appear on the destination chain.',\n // WAIT_SOURCE_CONFIRMATIONS:\n // 'The bridge deposit has been received. The bridge is waiting for more confirmations to start the off-chain logic.',\n },\n DONE: {\n // COMPLETED: 'The transfer is complete.',\n PARTIAL: (t) => t('main.process.receivingChain.partial'),\n REFUNDED: (t) => t('main.process.receivingChain.partial'),\n },\n FAILED: {\n // TODO: should be moved to failed status\n // NOT_PROCESSABLE_REFUND_NEEDED:\n // 'The transfer cannot be completed successfully. A refund operation is required.',\n // UNKNOWN_ERROR:\n // 'An unexpected error occurred. Please seek assistance in the LI.FI discord server.',\n },\n INVALID: {},\n NOT_FOUND: {},\n}\n"],"mappings":";AAUA,SAAgB,iBACd,GACA,MACA,MACA,QACA,WACA,YACA,mBAIA;AAYA,QAAO,EAAE,QAXoB,YACzB,wBAAwB,UAA2B,aAAa,EAAE,GAClE,KAAA,MAGF,qBAAqB,QAAQ,UAC3B,GACA,MACA,YACA,kBACD,EACa;;AAGlB,MAAM,uBAaF;CACF,iBAAiB;EACf,UAAU,GAAG,SACX,EAAE,uCAAuC,EACvC,aAAa,KAAK,OAAO,UAAU,QACpC,CAAC;EACJ,UAAU,GAAG,SACX,EAAE,uCAAuC,EACvC,aAAa,KAAK,OAAO,UAAU,QACpC,CAAC;EACJ,OAAO,GAAG,SACR,EAAE,uCAAuC,EACvC,aAAa,KAAK,OAAO,UAAU,QACpC,CAAC;EACL;CACD,eAAe;EACb,UAAU,MAAM,EAAE,8BAA8B;EAChD,kBAAkB,MAAM,EAAE,qCAAqC;EAC/D,UAAU,MAAM,EAAE,8BAA8B;EAChD,OAAO,MAAM,EAAE,2BAA2B;EAC3C;CACD,iBAAiB;EACf,UAAU,GAAG,SACX,EAAE,uCAAuC,EACvC,aAAa,KAAK,OAAO,UAAU,QACpC,CAAC;EACJ,iBAAiB,GAAG,SAClB,EAAE,6CAA6C,EAC7C,aAAa,KAAK,OAAO,UAAU,QACpC,CAAC;EACJ,UAAU,GAAG,SACX,EAAE,uCAAuC,EACvC,aAAa,KAAK,OAAO,UAAU,QACpC,CAAC;EACJ,OAAO,GAAG,SACR,EAAE,uCAAuC,EACvC,aAAa,KAAK,OAAO,UAAU,QACpC,CAAC;EACL;CACD,eAAe;EACb,UAAU,GAAG,SACX,EAAE,uCAAuC,EACvC,aAAa,KAAK,OAAO,UAAU,QACpC,CAAC;EACJ,kBAAkB,GAAG,SACnB,EAAE,8CAA8C,EAC9C,aAAa,KAAK,OAAO,UAAU,QACpC,CAAC;EACJ,UAAU,GAAG,SACX,EAAE,uCAAuC,EACvC,aAAa,KAAK,OAAO,UAAU,QACpC,CAAC;EACJ,OAAO,GAAG,SACR,EAAE,oCAAoC,EACpC,aAAa,KAAK,OAAO,UAAU,QACpC,CAAC;EACL;CACD,QAAQ;EACN,UAAU,MAAM,EAAE,8BAA8B;EAChD,kBAAkB,MAAM,EAAE,qCAAqC;EAC/D,UAAU,MAAM,EAAE,8BAA8B;EAChD,OAAO,MAAM,EAAE,2BAA2B;EAC3C;CACD,MAAM;EACJ,UAAU,MAAM,EAAE,4BAA4B;EAC9C,kBAAkB,MAAM,EAAE,mCAAmC;EAC7D,mBAAmB,MAAM,EAAE,oCAAoC;EAC/D,UAAU,MAAM,EAAE,4BAA4B;EAC9C,OAAO,GAAG,GAAG,YAAY,sBACvB,eAAe,WACX,EAAE,gBAAgB,mBAAmB,UAAU,WAAW,OAAO,GACjE,EAAE,yBAAyB;EAClC;CACD,aAAa;EACX,UAAU,MAAM,EAAE,8BAA8B;EAChD,kBAAkB,MAAM,EAAE,qCAAqC;EAC/D,mBAAmB,MAAM,EAAE,sCAAsC;EACjE,UAAU,MAAM,EAAE,8BAA8B;EAChD,OAAO,MAAM,EAAE,2BAA2B;EAC3C;CACD,iBAAiB;EACf,UAAU,MAAM,EAAE,sCAAsC;EACxD,UAAU,MAAM,EAAE,sCAAsC;EACxD,OAAO,GAAG,GAAG,YAAY,sBACvB,eAAe,WACX,EAAE,gBAAgB,mBAAmB,UAAU,WAAW,OAAO,GACjE,EAAE,mCAAmC;EAC5C;CACF;AAED,MAAM,0BAGF;CACF,SAAS,EASR;CACD,MAAM;EAEJ,UAAU,MAAM,EAAE,sCAAsC;EACxD,WAAW,MAAM,EAAE,sCAAsC;EAC1D;CACD,QAAQ,EAMP;CACD,SAAS,EAAE;CACX,WAAW,EAAE;CACd"}
1
+ {"version":3,"file":"getActionMessage.js","names":[],"sources":["../../../src/utils/getActionMessage.ts"],"sourcesContent":["import type {\n ExecutionActionStatus,\n ExecutionActionType,\n LiFiStepExtended,\n StatusMessage,\n Substatus,\n} from '@lifi/sdk'\nimport type { TFunction } from 'i18next'\nimport type { SubvariantOptions, WidgetSubvariant } from '../types/widget'\n\nexport function getActionMessage(\n t: TFunction,\n step: LiFiStepExtended,\n type: ExecutionActionType,\n status: ExecutionActionStatus,\n substatus?: Substatus,\n subvariant?: WidgetSubvariant,\n subvariantOptions?: SubvariantOptions\n): {\n title?: string\n message?: string\n} {\n const messageWithSubstatus = substatus\n ? actionSubstatusMessages[status as StatusMessage]?.[substatus]?.(t)\n : undefined\n const title =\n messageWithSubstatus ??\n actionStatusMessages[type]?.[status]?.(\n t,\n step,\n subvariant,\n subvariantOptions\n )\n return { title }\n}\n\nconst actionStatusMessages: Record<\n ExecutionActionType,\n Partial<\n Record<\n ExecutionActionStatus,\n (\n t: TFunction,\n step: LiFiStepExtended,\n subvariant?: WidgetSubvariant,\n subvariantOptions?: SubvariantOptions\n ) => string\n >\n >\n> = {\n CHECK_ALLOWANCE: {\n STARTED: (t, step) =>\n t('main.process.tokenAllowance.started', {\n tokenSymbol: step.action.fromToken.symbol,\n }),\n PENDING: (t, step) =>\n t('main.process.tokenAllowance.pending', {\n tokenSymbol: step.action.fromToken.symbol,\n }),\n DONE: (t, step) =>\n t('main.process.tokenAllowance.done', {\n tokenSymbol: step.action.fromToken.symbol,\n }),\n },\n NATIVE_PERMIT: {\n STARTED: (t) => t('main.process.permit.started'),\n ACTION_REQUIRED: (t) => t('main.process.permit.actionRequired'),\n PENDING: (t) => t('main.process.permit.pending'),\n DONE: (t) => t('main.process.permit.done'),\n },\n RESET_ALLOWANCE: {\n STARTED: (t, step) =>\n t('main.process.tokenAllowance.pending', {\n tokenSymbol: step.action.fromToken.symbol,\n }),\n RESET_REQUIRED: (t, step) =>\n t('main.process.tokenAllowance.resetRequired', {\n tokenSymbol: step.action.fromToken.symbol,\n }),\n PENDING: (t, step) =>\n t('main.process.tokenAllowance.pending', {\n tokenSymbol: step.action.fromToken.symbol,\n }),\n DONE: (t, step) =>\n t('main.process.tokenAllowance.pending', {\n tokenSymbol: step.action.fromToken.symbol,\n }),\n },\n SET_ALLOWANCE: {\n STARTED: (t, step) =>\n t('main.process.tokenAllowance.pending', {\n tokenSymbol: step.action.fromToken.symbol,\n }),\n ACTION_REQUIRED: (t, step) =>\n t('main.process.tokenAllowance.actionRequired', {\n tokenSymbol: step.action.fromToken.symbol,\n }),\n PENDING: (t, step) =>\n t('main.process.tokenAllowance.pending', {\n tokenSymbol: step.action.fromToken.symbol,\n }),\n DONE: (t, step) =>\n t('main.process.tokenAllowance.done', {\n tokenSymbol: step.action.fromToken.symbol,\n }),\n },\n PERMIT: {\n STARTED: (t) => t('main.process.permit.started'),\n ACTION_REQUIRED: (t) => t('main.process.permit.actionRequired'),\n PENDING: (t) => t('main.process.permit.pending'),\n DONE: (t) => t('main.process.permit.done'),\n },\n SWAP: {\n STARTED: (t) => t('main.process.swap.started'),\n ACTION_REQUIRED: (t) => t('main.process.swap.actionRequired'),\n MESSAGE_REQUIRED: (t) => t('main.process.swap.messageRequired'),\n PENDING: (t) => t('main.process.swap.pending'),\n DONE: (t, _, subvariant, subvariantOptions) =>\n subvariant === 'custom'\n ? t(`main.process.${subvariantOptions?.custom ?? 'checkout'}.done`)\n : t('main.process.swap.done'),\n },\n CROSS_CHAIN: {\n STARTED: (t) => t('main.process.bridge.started'),\n ACTION_REQUIRED: (t) => t('main.process.bridge.actionRequired'),\n MESSAGE_REQUIRED: (t) => t('main.process.bridge.messageRequired'),\n PENDING: (t) => t('main.process.bridge.pending'),\n DONE: (t) => t('main.process.bridge.done'),\n },\n RECEIVING_CHAIN: {\n STARTED: (t) => t('main.process.receivingChain.pending'),\n PENDING: (t) => t('main.process.receivingChain.pending'),\n DONE: (t, _, subvariant, subvariantOptions) =>\n subvariant === 'custom'\n ? t(`main.process.${subvariantOptions?.custom ?? 'checkout'}.done`)\n : t('main.process.receivingChain.done'),\n },\n}\n\nconst actionSubstatusMessages: Record<\n StatusMessage,\n Partial<Record<Substatus, (t: TFunction) => string>>\n> = {\n PENDING: {\n // BRIDGE_NOT_AVAILABLE: 'Bridge communication is temporarily unavailable.',\n // CHAIN_NOT_AVAILABLE: 'RPC communication is temporarily unavailable.',\n // REFUND_IN_PROGRESS:\n // \"The refund has been requested and it's being processed\",\n // WAIT_DESTINATION_TRANSACTION:\n // 'The bridge off-chain logic is being executed. Wait for the transaction to appear on the destination chain.',\n // WAIT_SOURCE_CONFIRMATIONS:\n // 'The bridge deposit has been received. The bridge is waiting for more confirmations to start the off-chain logic.',\n },\n DONE: {\n // COMPLETED: 'The transfer is complete.',\n PARTIAL: (t) => t('main.process.receivingChain.partial'),\n REFUNDED: (t) => t('main.process.receivingChain.partial'),\n },\n FAILED: {\n // TODO: should be moved to failed status\n // NOT_PROCESSABLE_REFUND_NEEDED:\n // 'The transfer cannot be completed successfully. A refund operation is required.',\n // UNKNOWN_ERROR:\n // 'An unexpected error occurred. Please seek assistance in the LI.FI discord server.',\n },\n INVALID: {},\n NOT_FOUND: {},\n}\n"],"mappings":";AAUA,SAAgB,iBACd,GACA,MACA,MACA,QACA,WACA,YACA,mBAIA;AAYA,QAAO,EAAE,QAXoB,YACzB,wBAAwB,UAA2B,aAAa,EAAE,GAClE,KAAA,MAGF,qBAAqB,QAAQ,UAC3B,GACA,MACA,YACA,kBACD,EACa;;AAGlB,MAAM,uBAaF;CACF,iBAAiB;EACf,UAAU,GAAG,SACX,EAAE,uCAAuC,EACvC,aAAa,KAAK,OAAO,UAAU,QACpC,CAAC;EACJ,UAAU,GAAG,SACX,EAAE,uCAAuC,EACvC,aAAa,KAAK,OAAO,UAAU,QACpC,CAAC;EACJ,OAAO,GAAG,SACR,EAAE,oCAAoC,EACpC,aAAa,KAAK,OAAO,UAAU,QACpC,CAAC;EACL;CACD,eAAe;EACb,UAAU,MAAM,EAAE,8BAA8B;EAChD,kBAAkB,MAAM,EAAE,qCAAqC;EAC/D,UAAU,MAAM,EAAE,8BAA8B;EAChD,OAAO,MAAM,EAAE,2BAA2B;EAC3C;CACD,iBAAiB;EACf,UAAU,GAAG,SACX,EAAE,uCAAuC,EACvC,aAAa,KAAK,OAAO,UAAU,QACpC,CAAC;EACJ,iBAAiB,GAAG,SAClB,EAAE,6CAA6C,EAC7C,aAAa,KAAK,OAAO,UAAU,QACpC,CAAC;EACJ,UAAU,GAAG,SACX,EAAE,uCAAuC,EACvC,aAAa,KAAK,OAAO,UAAU,QACpC,CAAC;EACJ,OAAO,GAAG,SACR,EAAE,uCAAuC,EACvC,aAAa,KAAK,OAAO,UAAU,QACpC,CAAC;EACL;CACD,eAAe;EACb,UAAU,GAAG,SACX,EAAE,uCAAuC,EACvC,aAAa,KAAK,OAAO,UAAU,QACpC,CAAC;EACJ,kBAAkB,GAAG,SACnB,EAAE,8CAA8C,EAC9C,aAAa,KAAK,OAAO,UAAU,QACpC,CAAC;EACJ,UAAU,GAAG,SACX,EAAE,uCAAuC,EACvC,aAAa,KAAK,OAAO,UAAU,QACpC,CAAC;EACJ,OAAO,GAAG,SACR,EAAE,oCAAoC,EACpC,aAAa,KAAK,OAAO,UAAU,QACpC,CAAC;EACL;CACD,QAAQ;EACN,UAAU,MAAM,EAAE,8BAA8B;EAChD,kBAAkB,MAAM,EAAE,qCAAqC;EAC/D,UAAU,MAAM,EAAE,8BAA8B;EAChD,OAAO,MAAM,EAAE,2BAA2B;EAC3C;CACD,MAAM;EACJ,UAAU,MAAM,EAAE,4BAA4B;EAC9C,kBAAkB,MAAM,EAAE,mCAAmC;EAC7D,mBAAmB,MAAM,EAAE,oCAAoC;EAC/D,UAAU,MAAM,EAAE,4BAA4B;EAC9C,OAAO,GAAG,GAAG,YAAY,sBACvB,eAAe,WACX,EAAE,gBAAgB,mBAAmB,UAAU,WAAW,OAAO,GACjE,EAAE,yBAAyB;EAClC;CACD,aAAa;EACX,UAAU,MAAM,EAAE,8BAA8B;EAChD,kBAAkB,MAAM,EAAE,qCAAqC;EAC/D,mBAAmB,MAAM,EAAE,sCAAsC;EACjE,UAAU,MAAM,EAAE,8BAA8B;EAChD,OAAO,MAAM,EAAE,2BAA2B;EAC3C;CACD,iBAAiB;EACf,UAAU,MAAM,EAAE,sCAAsC;EACxD,UAAU,MAAM,EAAE,sCAAsC;EACxD,OAAO,GAAG,GAAG,YAAY,sBACvB,eAAe,WACX,EAAE,gBAAgB,mBAAmB,UAAU,WAAW,OAAO,GACjE,EAAE,mCAAmC;EAC5C;CACF;AAED,MAAM,0BAGF;CACF,SAAS,EASR;CACD,MAAM;EAEJ,UAAU,MAAM,EAAE,sCAAsC;EACxD,WAAW,MAAM,EAAE,sCAAsC;EAC1D;CACD,QAAQ,EAMP;CACD,SAAS,EAAE;CACX,WAAW,EAAE;CACd"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@lifi/widget",
3
- "version": "4.0.0-beta.10",
3
+ "version": "4.0.0-beta.12",
4
4
  "description": "LI.FI Widget for cross-chain bridging and swapping. It will drive your multi-chain strategy and attract new users from everywhere.",
5
5
  "type": "module",
6
6
  "main": "./dist/esm/index.js",
@@ -47,8 +47,8 @@
47
47
  "react-intersection-observer": "^10.0.3",
48
48
  "react-transition-group": "^4.4.5",
49
49
  "zustand": "^5.0.12",
50
- "@lifi/widget-provider": "4.0.0-beta.10",
51
- "@lifi/wallet-management": "4.0.0-beta.10"
50
+ "@lifi/wallet-management": "4.0.0-beta.11",
51
+ "@lifi/widget-provider": "4.0.0-beta.11"
52
52
  },
53
53
  "peerDependencies": {
54
54
  "@tanstack/react-query": ">=5.90.0",
@@ -11,77 +11,45 @@ import { CardHeader } from '../Card/CardHeader.js'
11
11
  export const SelectTokenCardHeader: React.FC<
12
12
  React.ComponentProps<typeof CardHeader> & {
13
13
  selected?: boolean
14
- compact?: boolean
15
14
  }
16
15
  > = styled(CardHeader, {
17
- shouldForwardProp: (prop) =>
18
- !['selected', 'compact'].includes(prop as string),
19
- })<{ selected?: boolean; compact?: boolean }>(
20
- ({ theme, selected, compact }) => ({
21
- padding: theme.spacing(2),
22
- [`.${cardHeaderClasses.title}`]: {
23
- color: theme.vars.palette.text.secondary,
24
- textOverflow: 'ellipsis',
25
- whiteSpace: 'nowrap',
26
- overflow: 'hidden',
27
- width: 256,
28
- fontSize: compact && !selected ? 16 : 18,
29
- fontWeight: 500,
30
- [theme.breakpoints.down(theme.breakpoints.values.sm)]: {
31
- width: 224,
32
- },
33
- [theme.breakpoints.down(theme.breakpoints.values.xs)]: {
34
- width: 180,
35
- fontSize: 16,
36
- },
37
- },
38
- [`.${cardHeaderClasses.subheader}`]: {
39
- textOverflow: 'ellipsis',
40
- whiteSpace: 'nowrap',
41
- overflow: 'hidden',
42
- width: 256,
43
- [theme.breakpoints.down(theme.breakpoints.values.sm)]: {
44
- width: 224,
45
- },
46
- [theme.breakpoints.down(theme.breakpoints.values.xs)]: {
47
- width: 180,
48
- },
16
+ shouldForwardProp: (prop) => !['selected'].includes(prop as string),
17
+ })<{ selected?: boolean }>(({ theme }) => ({
18
+ padding: theme.spacing(2),
19
+ [`.${cardHeaderClasses.title}`]: {
20
+ color: theme.vars.palette.text.secondary,
21
+ textOverflow: 'ellipsis',
22
+ whiteSpace: 'nowrap',
23
+ overflow: 'hidden',
24
+ width: 96,
25
+ fontSize: 18,
26
+ fontWeight: 500,
27
+ [theme.breakpoints.down(theme.breakpoints.values.xs)]: {
28
+ fontSize: 16,
49
29
  },
50
- variants: [
51
- {
52
- props: ({ selected }) => selected,
53
- style: {
54
- [`.${cardHeaderClasses.title}`]: {
55
- color: theme.vars.palette.text.primary,
56
- fontWeight: 600,
57
- },
30
+ },
31
+ [`.${cardHeaderClasses.subheader}`]: {
32
+ textOverflow: 'ellipsis',
33
+ whiteSpace: 'nowrap',
34
+ overflow: 'hidden',
35
+ width: 96,
36
+ },
37
+ variants: [
38
+ {
39
+ props: ({ selected }) => selected,
40
+ style: {
41
+ [`.${cardHeaderClasses.title}`]: {
42
+ color: theme.vars.palette.text.primary,
43
+ fontWeight: 600,
58
44
  },
59
45
  },
60
- {
61
- props: ({ compact }) => compact,
62
- style: {
63
- [`.${cardHeaderClasses.title}`]: {
64
- width: 96,
65
- [theme.breakpoints.down(theme.breakpoints.values.sm)]: {
66
- width: 96,
67
- },
68
- },
69
- [`.${cardHeaderClasses.subheader}`]: {
70
- width: 96,
71
- [theme.breakpoints.down(theme.breakpoints.values.sm)]: {
72
- width: 96,
73
- },
74
- },
75
- },
76
- },
77
- ],
78
- })
79
- )
46
+ },
47
+ ],
48
+ }))
80
49
 
81
50
  export const SelectTokenCard: React.FC<
82
51
  React.ComponentProps<typeof Card> & {
83
52
  formType?: FormType
84
- compact?: boolean
85
53
  mask?: boolean
86
54
  }
87
55
  > = styled(Card)(({ theme }) => {
@@ -101,18 +69,16 @@ export const SelectTokenCard: React.FC<
101
69
  export const CardContent: React.FC<
102
70
  React.ComponentProps<typeof MuiCardContent> & {
103
71
  formType?: FormType
104
- compact?: boolean
105
72
  mask?: boolean
106
73
  }
107
74
  > = styled(MuiCardContent, {
108
- shouldForwardProp: (prop) =>
109
- !['formType', 'compact', 'mask'].includes(prop as string),
110
- })<{ formType?: FormType; compact?: boolean; mask?: boolean }>(
111
- ({ theme, formType, compact, mask = true }) => {
75
+ shouldForwardProp: (prop) => !['formType', 'mask'].includes(prop as string),
76
+ })<{ formType?: FormType; mask?: boolean }>(
77
+ ({ theme, formType, mask = true }) => {
112
78
  const cardVariant = theme.components?.MuiCard?.defaultProps?.variant
113
79
  const direction = formType === 'to' ? '-8px' : 'calc(100% + 8px)'
114
- const horizontal = compact ? direction : '50%'
115
- const vertical = compact ? '50%' : direction
80
+ const horizontal = direction
81
+ const vertical = '50%'
116
82
  return {
117
83
  padding: 0,
118
84
  transition: theme.transitions.create(['background-color'], {
@@ -1,2 +1,2 @@
1
1
  export const name = '@lifi/widget'
2
- export const version = '4.0.0-beta.10'
2
+ export const version = '4.0.0-beta.12'
@@ -130,6 +130,7 @@ export const createRouteExecutionStore = ({
130
130
  {
131
131
  name: `${namePrefix || 'li.fi'}-widget-routes`,
132
132
  version: 3,
133
+ migrate: (persistedState: any) => persistedState,
133
134
  partialize: (state) => ({ routes: state.routes }),
134
135
  merge: (persistedState: any, currentState: RouteExecutionState) => {
135
136
  const state = {
@@ -58,7 +58,7 @@ const actionStatusMessages: Record<
58
58
  tokenSymbol: step.action.fromToken.symbol,
59
59
  }),
60
60
  DONE: (t, step) =>
61
- t('main.process.tokenAllowance.pending', {
61
+ t('main.process.tokenAllowance.done', {
62
62
  tokenSymbol: step.action.fromToken.symbol,
63
63
  }),
64
64
  },