@lifi/widget 3.17.1 → 3.18.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (104) hide show
  1. package/CHANGELOG.md +14 -0
  2. package/dist/esm/components/Card/CardLabel.d.ts +1 -1
  3. package/dist/esm/components/Card/CardLabel.js +14 -3
  4. package/dist/esm/components/Card/CardLabel.js.map +1 -1
  5. package/dist/esm/components/FeeBreakdownTooltip.d.ts +1 -0
  6. package/dist/esm/components/FeeBreakdownTooltip.js +3 -3
  7. package/dist/esm/components/FeeBreakdownTooltip.js.map +1 -1
  8. package/dist/esm/components/Messages/WarningMessages.d.ts +1 -0
  9. package/dist/esm/components/Messages/WarningMessages.js +4 -4
  10. package/dist/esm/components/Messages/WarningMessages.js.map +1 -1
  11. package/dist/esm/components/Messages/useMessageQueue.d.ts +2 -2
  12. package/dist/esm/components/Messages/useMessageQueue.js +5 -4
  13. package/dist/esm/components/Messages/useMessageQueue.js.map +1 -1
  14. package/dist/esm/components/RouteCard/RouteCard.js +11 -5
  15. package/dist/esm/components/RouteCard/RouteCard.js.map +1 -1
  16. package/dist/esm/components/RouteCard/RouteCardEssentials.js +9 -5
  17. package/dist/esm/components/RouteCard/RouteCardEssentials.js.map +1 -1
  18. package/dist/esm/components/Routes/RoutesExpanded.js +1 -4
  19. package/dist/esm/components/Routes/RoutesExpanded.js.map +1 -1
  20. package/dist/esm/components/Step/StepProcess.js +2 -1
  21. package/dist/esm/components/Step/StepProcess.js.map +1 -1
  22. package/dist/esm/components/StepActions/StepActions.js +20 -15
  23. package/dist/esm/components/StepActions/StepActions.js.map +1 -1
  24. package/dist/esm/components/StepActions/types.d.ts +1 -0
  25. package/dist/esm/components/Timer/RouteTimer.js +11 -2
  26. package/dist/esm/components/Timer/RouteTimer.js.map +1 -1
  27. package/dist/esm/components/Timer/StepTimer.js +11 -2
  28. package/dist/esm/components/Timer/StepTimer.js.map +1 -1
  29. package/dist/esm/components/Token/Token.js +1 -1
  30. package/dist/esm/components/Token/Token.js.map +1 -1
  31. package/dist/esm/components/TransactionDetails.js +20 -14
  32. package/dist/esm/components/TransactionDetails.js.map +1 -1
  33. package/dist/esm/config/version.d.ts +1 -1
  34. package/dist/esm/config/version.js +1 -1
  35. package/dist/esm/hooks/useGasRefuel.js +2 -2
  36. package/dist/esm/hooks/useGasRefuel.js.map +1 -1
  37. package/dist/esm/hooks/useGasSufficiency.js +17 -3
  38. package/dist/esm/hooks/useGasSufficiency.js.map +1 -1
  39. package/dist/esm/hooks/useIsBatchingSupported.d.ts +5 -0
  40. package/dist/esm/hooks/useIsBatchingSupported.js +19 -0
  41. package/dist/esm/hooks/useIsBatchingSupported.js.map +1 -0
  42. package/dist/esm/hooks/useProcessMessage.js +22 -6
  43. package/dist/esm/hooks/useProcessMessage.js.map +1 -1
  44. package/dist/esm/hooks/useRoutes.d.ts +3 -3
  45. package/dist/esm/hooks/useRoutes.js +119 -70
  46. package/dist/esm/hooks/useRoutes.js.map +1 -1
  47. package/dist/esm/i18n/en.json +29 -17
  48. package/dist/esm/pages/MainPage/ReviewButton.js +1 -4
  49. package/dist/esm/pages/MainPage/ReviewButton.js.map +1 -1
  50. package/dist/esm/pages/RoutesPage/RoutesPage.js +1 -4
  51. package/dist/esm/pages/RoutesPage/RoutesPage.js.map +1 -1
  52. package/dist/esm/pages/TransactionPage/StartTransactionButton.js +1 -1
  53. package/dist/esm/pages/TransactionPage/StartTransactionButton.js.map +1 -1
  54. package/dist/esm/pages/TransactionPage/TokenValueBottomSheet.js +6 -2
  55. package/dist/esm/pages/TransactionPage/TokenValueBottomSheet.js.map +1 -1
  56. package/dist/esm/pages/TransactionPage/TransactionPage.js +1 -1
  57. package/dist/esm/pages/TransactionPage/TransactionPage.js.map +1 -1
  58. package/dist/esm/providers/WalletProvider/SDKProviders.js +2 -15
  59. package/dist/esm/providers/WalletProvider/SDKProviders.js.map +1 -1
  60. package/dist/esm/types/widget.d.ts +3 -1
  61. package/dist/esm/types/widget.js +1 -0
  62. package/dist/esm/types/widget.js.map +1 -1
  63. package/dist/esm/utils/timer.d.ts +7 -0
  64. package/dist/esm/utils/timer.js +16 -0
  65. package/dist/esm/utils/timer.js.map +1 -0
  66. package/package.json +10 -10
  67. package/package.json.tmp +90 -0
  68. package/src/components/Card/CardLabel.tsx +29 -4
  69. package/src/components/FeeBreakdownTooltip.tsx +5 -2
  70. package/src/components/Messages/WarningMessages.tsx +5 -3
  71. package/src/components/Messages/useMessageQueue.ts +5 -4
  72. package/src/components/RouteCard/RouteCard.tsx +23 -8
  73. package/src/components/RouteCard/RouteCardEssentials.tsx +13 -5
  74. package/src/components/Routes/RoutesExpanded.tsx +1 -5
  75. package/src/components/Step/StepProcess.tsx +2 -1
  76. package/src/components/StepActions/StepActions.tsx +18 -6
  77. package/src/components/StepActions/types.ts +1 -0
  78. package/src/components/Timer/RouteTimer.tsx +13 -2
  79. package/src/components/Timer/StepTimer.tsx +15 -5
  80. package/src/components/Token/Token.tsx +1 -1
  81. package/src/components/TransactionDetails.tsx +51 -23
  82. package/src/config/version.ts +1 -1
  83. package/src/hooks/useGasRefuel.ts +2 -2
  84. package/src/hooks/useGasSufficiency.ts +23 -7
  85. package/src/hooks/useIsBatchingSupported.ts +24 -0
  86. package/src/hooks/useProcessMessage.ts +26 -5
  87. package/src/hooks/useRoutes.ts +148 -78
  88. package/src/i18n/en.json +29 -17
  89. package/src/pages/MainPage/ReviewButton.tsx +1 -6
  90. package/src/pages/RoutesPage/RoutesPage.tsx +2 -5
  91. package/src/pages/TransactionPage/StartTransactionButton.tsx +1 -1
  92. package/src/pages/TransactionPage/TokenValueBottomSheet.tsx +9 -2
  93. package/src/pages/TransactionPage/TransactionPage.tsx +1 -1
  94. package/src/providers/WalletProvider/SDKProviders.tsx +2 -16
  95. package/src/types/widget.ts +2 -0
  96. package/src/utils/timer.ts +28 -0
  97. package/dist/esm/components/Messages/GasMessage.d.ts +0 -7
  98. package/dist/esm/components/Messages/GasMessage.js +0 -13
  99. package/dist/esm/components/Messages/GasMessage.js.map +0 -1
  100. package/dist/esm/providers/WalletProvider/getSafeMultisigConfig.d.ts +0 -8
  101. package/dist/esm/providers/WalletProvider/getSafeMultisigConfig.js +0 -95
  102. package/dist/esm/providers/WalletProvider/getSafeMultisigConfig.js.map +0 -1
  103. package/src/components/Messages/GasMessage.tsx +0 -35
  104. package/src/providers/WalletProvider/getSafeMultisigConfig.ts +0 -144
@@ -0,0 +1,28 @@
1
+ export const formatTimer = ({
2
+ days = 0,
3
+ hours = 0,
4
+ minutes = 0,
5
+ seconds = 0,
6
+ locale = 'en',
7
+ }: {
8
+ days?: number
9
+ hours?: number
10
+ minutes?: number
11
+ seconds?: number
12
+ locale?: string
13
+ }): string => {
14
+ if (typeof (Intl as any).DurationFormat === 'function') {
15
+ return new (Intl as any).DurationFormat(locale, {
16
+ style: 'digital',
17
+ hours: '2-digit',
18
+ hoursDisplay: 'auto',
19
+ }).format({
20
+ days,
21
+ hours,
22
+ minutes,
23
+ seconds,
24
+ })
25
+ }
26
+
27
+ return ''
28
+ }
@@ -1,7 +0,0 @@
1
- import type { Route } from '@lifi/sdk';
2
- import type { BoxProps } from '@mui/material';
3
- interface GasMessageProps extends BoxProps {
4
- route?: Route;
5
- }
6
- export declare const GasMessage: React.FC<GasMessageProps>;
7
- export {};
@@ -1,13 +0,0 @@
1
- import { jsx as _jsx } from "react/jsx-runtime";
2
- import { Box, Collapse } from '@mui/material';
3
- import { useFromTokenSufficiency } from '../../hooks/useFromTokenSufficiency.js';
4
- import { useGasSufficiency } from '../../hooks/useGasSufficiency.js';
5
- import { FundsSufficiencyMessage } from './FundsSufficiencyMessage.js';
6
- import { GasSufficiencyMessage } from './GasSufficiencyMessage.js';
7
- export const GasMessage = ({ route, ...props }) => {
8
- const { insufficientGas } = useGasSufficiency(route);
9
- const { insufficientFromToken } = useFromTokenSufficiency(route);
10
- const validInsufficientGas = insufficientGas?.length;
11
- return (_jsx(Collapse, { timeout: 225, in: Boolean(insufficientFromToken || validInsufficientGas), unmountOnExit: true, mountOnEnter: true, children: _jsx(Box, { ...props, children: insufficientFromToken ? (_jsx(FundsSufficiencyMessage, {})) : validInsufficientGas ? (_jsx(GasSufficiencyMessage, { insufficientGas: insufficientGas })) : null }) }));
12
- };
13
- //# sourceMappingURL=GasMessage.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"GasMessage.js","sourceRoot":"","sources":["../../../../src/components/Messages/GasMessage.tsx"],"names":[],"mappings":";AAEA,OAAO,EAAE,GAAG,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAA;AAC7C,OAAO,EAAE,uBAAuB,EAAE,MAAM,wCAAwC,CAAA;AAChF,OAAO,EAAE,iBAAiB,EAAE,MAAM,kCAAkC,CAAA;AACpE,OAAO,EAAE,uBAAuB,EAAE,MAAM,8BAA8B,CAAA;AACtE,OAAO,EAAE,qBAAqB,EAAE,MAAM,4BAA4B,CAAA;AAMlE,MAAM,CAAC,MAAM,UAAU,GAA8B,CAAC,EAAE,KAAK,EAAE,GAAG,KAAK,EAAE,EAAE,EAAE;IAC3E,MAAM,EAAE,eAAe,EAAE,GAAG,iBAAiB,CAAC,KAAK,CAAC,CAAA;IACpD,MAAM,EAAE,qBAAqB,EAAE,GAAG,uBAAuB,CAAC,KAAK,CAAC,CAAA;IAEhE,MAAM,oBAAoB,GAAG,eAAe,EAAE,MAAM,CAAA;IAEpD,OAAO,CACL,KAAC,QAAQ,IACP,OAAO,EAAE,GAAG,EACZ,EAAE,EAAE,OAAO,CAAC,qBAAqB,IAAI,oBAAoB,CAAC,EAC1D,aAAa,QACb,YAAY,kBAEZ,KAAC,GAAG,OAAK,KAAK,YACX,qBAAqB,CAAC,CAAC,CAAC,CACvB,KAAC,uBAAuB,KAAG,CAC5B,CAAC,CAAC,CAAC,oBAAoB,CAAC,CAAC,CAAC,CACzB,KAAC,qBAAqB,IAAC,eAAe,EAAE,eAAe,GAAI,CAC5D,CAAC,CAAC,CAAC,IAAI,GACJ,GACG,CACZ,CAAA;AACH,CAAC,CAAA"}
@@ -1,8 +0,0 @@
1
- import type { MultisigTransaction, MultisigTxDetails } from '@lifi/sdk';
2
- import type { Connector } from 'wagmi';
3
- export declare const getSafeMultisigConfig: (connector: Connector) => {
4
- isMultisigWalletClient: boolean;
5
- shouldBatchTransactions: boolean;
6
- sendBatchTransaction: (batchTransactions: MultisigTransaction[]) => Promise<`0x${string}`>;
7
- getMultisigTransactionDetails: (txHash: string, chainId: number, updateIntermediateStatus?: () => void) => Promise<MultisigTxDetails>;
8
- };
@@ -1,95 +0,0 @@
1
- var TransactionStatus;
2
- (function (TransactionStatus) {
3
- TransactionStatus["AWAITING_CONFIRMATIONS"] = "AWAITING_CONFIRMATIONS";
4
- TransactionStatus["AWAITING_EXECUTION"] = "AWAITING_EXECUTION";
5
- TransactionStatus["CANCELLED"] = "CANCELLED";
6
- TransactionStatus["FAILED"] = "FAILED";
7
- TransactionStatus["SUCCESS"] = "SUCCESS";
8
- })(TransactionStatus || (TransactionStatus = {}));
9
- export const getSafeMultisigConfig = (connector) => {
10
- const getMultisigTransactionDetails = async (txHash, chainId, updateIntermediateStatus) => {
11
- const safeAppProvider = (await connector.getProvider());
12
- const safeProviderSDK = safeAppProvider.sdk;
13
- const safeTransactionDetails = await safeProviderSDK.txs.getBySafeTxHash(txHash);
14
- const safeTxHash = safeTransactionDetails.txId;
15
- const safeApiTransactionResponse = await fetch(`https://safe-client.safe.global/v1/chains/${chainId}/transactions/${safeTxHash}`);
16
- const safeApiTransactionDetails = await safeApiTransactionResponse.json();
17
- const nonTerminalStatus = [
18
- TransactionStatus.SUCCESS,
19
- TransactionStatus.CANCELLED,
20
- TransactionStatus.FAILED,
21
- ];
22
- const isSafeStatusPending = !nonTerminalStatus.includes(safeTransactionDetails.txStatus) &&
23
- !nonTerminalStatus.includes(safeApiTransactionDetails.txStatus);
24
- const isAwaitingExecution = [
25
- safeTransactionDetails.txStatus,
26
- safeApiTransactionDetails.txStatus,
27
- ].includes(TransactionStatus.AWAITING_EXECUTION);
28
- if (isAwaitingExecution) {
29
- updateIntermediateStatus?.();
30
- }
31
- if (isSafeStatusPending) {
32
- await new Promise((resolve) => {
33
- setTimeout(resolve, 5000);
34
- });
35
- return await getMultisigTransactionDetails(txHash, chainId, updateIntermediateStatus);
36
- }
37
- if ([
38
- safeTransactionDetails.txStatus,
39
- safeApiTransactionDetails.txStatus,
40
- ].includes(TransactionStatus.SUCCESS)) {
41
- return {
42
- status: 'DONE',
43
- txHash: `0x${safeTransactionDetails.txHash?.slice(2)}`,
44
- };
45
- }
46
- if ([
47
- safeTransactionDetails.txStatus,
48
- safeApiTransactionDetails.txStatus,
49
- ].includes(TransactionStatus.FAILED)) {
50
- return {
51
- status: 'FAILED',
52
- txHash: `0x${safeTransactionDetails.txHash?.slice(2)}`,
53
- };
54
- }
55
- if ([
56
- safeTransactionDetails.txStatus,
57
- safeApiTransactionDetails.txStatus,
58
- ].includes(TransactionStatus.CANCELLED)) {
59
- return {
60
- status: 'CANCELLED',
61
- txHash: `0x${safeTransactionDetails.txHash?.slice(2)}`,
62
- };
63
- }
64
- if (isSafeStatusPending) {
65
- return {
66
- status: 'PENDING',
67
- txHash: `0x${safeTransactionDetails.txHash?.slice(2)}`,
68
- };
69
- }
70
- return {
71
- status: 'PENDING',
72
- txHash: `0x${safeTransactionDetails.txHash?.slice(2)}`,
73
- };
74
- };
75
- const sendBatchTransaction = async (batchTransactions) => {
76
- const safeAppProvider = (await connector.getProvider());
77
- const safeProviderSDK = safeAppProvider.sdk;
78
- try {
79
- const { safeTxHash } = await safeProviderSDK.txs.send({
80
- txs: batchTransactions,
81
- });
82
- return `0x${safeTxHash.slice(2)}`;
83
- }
84
- catch (error) {
85
- throw new Error(error);
86
- }
87
- };
88
- return {
89
- isMultisigWalletClient: connector?.id === 'safe',
90
- shouldBatchTransactions: connector?.id === 'safe',
91
- sendBatchTransaction,
92
- getMultisigTransactionDetails,
93
- };
94
- };
95
- //# sourceMappingURL=getSafeMultisigConfig.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"getSafeMultisigConfig.js","sourceRoot":"","sources":["../../../../src/providers/WalletProvider/getSafeMultisigConfig.ts"],"names":[],"mappings":"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"}
@@ -1,35 +0,0 @@
1
- import type { Route } from '@lifi/sdk'
2
- import type { BoxProps } from '@mui/material'
3
- import { Box, Collapse } from '@mui/material'
4
- import { useFromTokenSufficiency } from '../../hooks/useFromTokenSufficiency.js'
5
- import { useGasSufficiency } from '../../hooks/useGasSufficiency.js'
6
- import { FundsSufficiencyMessage } from './FundsSufficiencyMessage.js'
7
- import { GasSufficiencyMessage } from './GasSufficiencyMessage.js'
8
-
9
- interface GasMessageProps extends BoxProps {
10
- route?: Route
11
- }
12
-
13
- export const GasMessage: React.FC<GasMessageProps> = ({ route, ...props }) => {
14
- const { insufficientGas } = useGasSufficiency(route)
15
- const { insufficientFromToken } = useFromTokenSufficiency(route)
16
-
17
- const validInsufficientGas = insufficientGas?.length
18
-
19
- return (
20
- <Collapse
21
- timeout={225}
22
- in={Boolean(insufficientFromToken || validInsufficientGas)}
23
- unmountOnExit
24
- mountOnEnter
25
- >
26
- <Box {...props}>
27
- {insufficientFromToken ? (
28
- <FundsSufficiencyMessage />
29
- ) : validInsufficientGas ? (
30
- <GasSufficiencyMessage insufficientGas={insufficientGas} />
31
- ) : null}
32
- </Box>
33
- </Collapse>
34
- )
35
- }
@@ -1,144 +0,0 @@
1
- /* eslint-disable @typescript-eslint/no-explicit-any */
2
- import type { MultisigTransaction, MultisigTxDetails } from '@lifi/sdk'
3
- import type { Connector } from 'wagmi'
4
-
5
- enum TransactionStatus {
6
- AWAITING_CONFIRMATIONS = 'AWAITING_CONFIRMATIONS',
7
- AWAITING_EXECUTION = 'AWAITING_EXECUTION',
8
- CANCELLED = 'CANCELLED',
9
- FAILED = 'FAILED',
10
- SUCCESS = 'SUCCESS',
11
- }
12
-
13
- type GatewayTransactionDetails = {
14
- safeAddress: string
15
- txId: string
16
- executedAt?: number
17
- txStatus: TransactionStatus
18
- txHash?: string
19
- }
20
-
21
- export const getSafeMultisigConfig = (connector: Connector) => {
22
- const getMultisigTransactionDetails = async (
23
- txHash: string,
24
- chainId: number,
25
- updateIntermediateStatus?: () => void
26
- ): Promise<MultisigTxDetails> => {
27
- const safeAppProvider = (await connector.getProvider()) as any
28
- const safeProviderSDK = safeAppProvider.sdk
29
-
30
- const safeTransactionDetails: GatewayTransactionDetails =
31
- await safeProviderSDK.txs.getBySafeTxHash(txHash)
32
-
33
- const safeTxHash = safeTransactionDetails.txId
34
-
35
- const safeApiTransactionResponse = await fetch(
36
- `https://safe-client.safe.global/v1/chains/${chainId}/transactions/${safeTxHash}`
37
- )
38
-
39
- const safeApiTransactionDetails = await safeApiTransactionResponse.json()
40
-
41
- const nonTerminalStatus = [
42
- TransactionStatus.SUCCESS,
43
- TransactionStatus.CANCELLED,
44
- TransactionStatus.FAILED,
45
- ]
46
-
47
- const isSafeStatusPending =
48
- !nonTerminalStatus.includes(safeTransactionDetails.txStatus) &&
49
- !nonTerminalStatus.includes(safeApiTransactionDetails.txStatus)
50
-
51
- const isAwaitingExecution = [
52
- safeTransactionDetails.txStatus,
53
- safeApiTransactionDetails.txStatus,
54
- ].includes(TransactionStatus.AWAITING_EXECUTION)
55
-
56
- if (isAwaitingExecution) {
57
- updateIntermediateStatus?.()
58
- }
59
-
60
- if (isSafeStatusPending) {
61
- await new Promise((resolve) => {
62
- setTimeout(resolve, 5000)
63
- })
64
-
65
- return await getMultisigTransactionDetails(
66
- txHash,
67
- chainId,
68
- updateIntermediateStatus
69
- )
70
- }
71
-
72
- if (
73
- [
74
- safeTransactionDetails.txStatus,
75
- safeApiTransactionDetails.txStatus,
76
- ].includes(TransactionStatus.SUCCESS)
77
- ) {
78
- return {
79
- status: 'DONE',
80
- txHash: `0x${safeTransactionDetails.txHash?.slice(2)}`,
81
- }
82
- }
83
-
84
- if (
85
- [
86
- safeTransactionDetails.txStatus,
87
- safeApiTransactionDetails.txStatus,
88
- ].includes(TransactionStatus.FAILED)
89
- ) {
90
- return {
91
- status: 'FAILED',
92
- txHash: `0x${safeTransactionDetails.txHash?.slice(2)}`,
93
- }
94
- }
95
-
96
- if (
97
- [
98
- safeTransactionDetails.txStatus,
99
- safeApiTransactionDetails.txStatus,
100
- ].includes(TransactionStatus.CANCELLED)
101
- ) {
102
- return {
103
- status: 'CANCELLED',
104
- txHash: `0x${safeTransactionDetails.txHash?.slice(2)}`,
105
- }
106
- }
107
-
108
- if (isSafeStatusPending) {
109
- return {
110
- status: 'PENDING',
111
- txHash: `0x${safeTransactionDetails.txHash?.slice(2)}`,
112
- }
113
- }
114
-
115
- return {
116
- status: 'PENDING',
117
- txHash: `0x${safeTransactionDetails.txHash?.slice(2)}`,
118
- }
119
- }
120
-
121
- const sendBatchTransaction = async (
122
- batchTransactions: MultisigTransaction[]
123
- ): Promise<`0x${string}`> => {
124
- const safeAppProvider = (await connector.getProvider()) as any
125
- const safeProviderSDK = safeAppProvider.sdk
126
-
127
- try {
128
- const { safeTxHash } = await safeProviderSDK.txs.send({
129
- txs: batchTransactions,
130
- })
131
-
132
- return `0x${safeTxHash.slice(2)}`
133
- } catch (error) {
134
- throw new Error(error as string)
135
- }
136
- }
137
-
138
- return {
139
- isMultisigWalletClient: connector?.id === 'safe',
140
- shouldBatchTransactions: connector?.id === 'safe',
141
- sendBatchTransaction,
142
- getMultisigTransactionDetails,
143
- }
144
- }