@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.
- package/CHANGELOG.md +14 -0
- package/dist/esm/components/Card/CardLabel.d.ts +1 -1
- package/dist/esm/components/Card/CardLabel.js +14 -3
- package/dist/esm/components/Card/CardLabel.js.map +1 -1
- package/dist/esm/components/FeeBreakdownTooltip.d.ts +1 -0
- package/dist/esm/components/FeeBreakdownTooltip.js +3 -3
- package/dist/esm/components/FeeBreakdownTooltip.js.map +1 -1
- package/dist/esm/components/Messages/WarningMessages.d.ts +1 -0
- package/dist/esm/components/Messages/WarningMessages.js +4 -4
- package/dist/esm/components/Messages/WarningMessages.js.map +1 -1
- package/dist/esm/components/Messages/useMessageQueue.d.ts +2 -2
- package/dist/esm/components/Messages/useMessageQueue.js +5 -4
- package/dist/esm/components/Messages/useMessageQueue.js.map +1 -1
- package/dist/esm/components/RouteCard/RouteCard.js +11 -5
- package/dist/esm/components/RouteCard/RouteCard.js.map +1 -1
- package/dist/esm/components/RouteCard/RouteCardEssentials.js +9 -5
- package/dist/esm/components/RouteCard/RouteCardEssentials.js.map +1 -1
- package/dist/esm/components/Routes/RoutesExpanded.js +1 -4
- package/dist/esm/components/Routes/RoutesExpanded.js.map +1 -1
- package/dist/esm/components/Step/StepProcess.js +2 -1
- package/dist/esm/components/Step/StepProcess.js.map +1 -1
- package/dist/esm/components/StepActions/StepActions.js +20 -15
- package/dist/esm/components/StepActions/StepActions.js.map +1 -1
- package/dist/esm/components/StepActions/types.d.ts +1 -0
- package/dist/esm/components/Timer/RouteTimer.js +11 -2
- package/dist/esm/components/Timer/RouteTimer.js.map +1 -1
- package/dist/esm/components/Timer/StepTimer.js +11 -2
- package/dist/esm/components/Timer/StepTimer.js.map +1 -1
- package/dist/esm/components/Token/Token.js +1 -1
- package/dist/esm/components/Token/Token.js.map +1 -1
- package/dist/esm/components/TransactionDetails.js +20 -14
- package/dist/esm/components/TransactionDetails.js.map +1 -1
- package/dist/esm/config/version.d.ts +1 -1
- package/dist/esm/config/version.js +1 -1
- package/dist/esm/hooks/useGasRefuel.js +2 -2
- package/dist/esm/hooks/useGasRefuel.js.map +1 -1
- package/dist/esm/hooks/useGasSufficiency.js +17 -3
- package/dist/esm/hooks/useGasSufficiency.js.map +1 -1
- package/dist/esm/hooks/useIsBatchingSupported.d.ts +5 -0
- package/dist/esm/hooks/useIsBatchingSupported.js +19 -0
- package/dist/esm/hooks/useIsBatchingSupported.js.map +1 -0
- package/dist/esm/hooks/useProcessMessage.js +22 -6
- package/dist/esm/hooks/useProcessMessage.js.map +1 -1
- package/dist/esm/hooks/useRoutes.d.ts +3 -3
- package/dist/esm/hooks/useRoutes.js +119 -70
- package/dist/esm/hooks/useRoutes.js.map +1 -1
- package/dist/esm/i18n/en.json +29 -17
- package/dist/esm/pages/MainPage/ReviewButton.js +1 -4
- package/dist/esm/pages/MainPage/ReviewButton.js.map +1 -1
- package/dist/esm/pages/RoutesPage/RoutesPage.js +1 -4
- package/dist/esm/pages/RoutesPage/RoutesPage.js.map +1 -1
- package/dist/esm/pages/TransactionPage/StartTransactionButton.js +1 -1
- package/dist/esm/pages/TransactionPage/StartTransactionButton.js.map +1 -1
- package/dist/esm/pages/TransactionPage/TokenValueBottomSheet.js +6 -2
- package/dist/esm/pages/TransactionPage/TokenValueBottomSheet.js.map +1 -1
- package/dist/esm/pages/TransactionPage/TransactionPage.js +1 -1
- package/dist/esm/pages/TransactionPage/TransactionPage.js.map +1 -1
- package/dist/esm/providers/WalletProvider/SDKProviders.js +2 -15
- package/dist/esm/providers/WalletProvider/SDKProviders.js.map +1 -1
- package/dist/esm/types/widget.d.ts +3 -1
- package/dist/esm/types/widget.js +1 -0
- package/dist/esm/types/widget.js.map +1 -1
- package/dist/esm/utils/timer.d.ts +7 -0
- package/dist/esm/utils/timer.js +16 -0
- package/dist/esm/utils/timer.js.map +1 -0
- package/package.json +10 -10
- package/package.json.tmp +90 -0
- package/src/components/Card/CardLabel.tsx +29 -4
- package/src/components/FeeBreakdownTooltip.tsx +5 -2
- package/src/components/Messages/WarningMessages.tsx +5 -3
- package/src/components/Messages/useMessageQueue.ts +5 -4
- package/src/components/RouteCard/RouteCard.tsx +23 -8
- package/src/components/RouteCard/RouteCardEssentials.tsx +13 -5
- package/src/components/Routes/RoutesExpanded.tsx +1 -5
- package/src/components/Step/StepProcess.tsx +2 -1
- package/src/components/StepActions/StepActions.tsx +18 -6
- package/src/components/StepActions/types.ts +1 -0
- package/src/components/Timer/RouteTimer.tsx +13 -2
- package/src/components/Timer/StepTimer.tsx +15 -5
- package/src/components/Token/Token.tsx +1 -1
- package/src/components/TransactionDetails.tsx +51 -23
- package/src/config/version.ts +1 -1
- package/src/hooks/useGasRefuel.ts +2 -2
- package/src/hooks/useGasSufficiency.ts +23 -7
- package/src/hooks/useIsBatchingSupported.ts +24 -0
- package/src/hooks/useProcessMessage.ts +26 -5
- package/src/hooks/useRoutes.ts +148 -78
- package/src/i18n/en.json +29 -17
- package/src/pages/MainPage/ReviewButton.tsx +1 -6
- package/src/pages/RoutesPage/RoutesPage.tsx +2 -5
- package/src/pages/TransactionPage/StartTransactionButton.tsx +1 -1
- package/src/pages/TransactionPage/TokenValueBottomSheet.tsx +9 -2
- package/src/pages/TransactionPage/TransactionPage.tsx +1 -1
- package/src/providers/WalletProvider/SDKProviders.tsx +2 -16
- package/src/types/widget.ts +2 -0
- package/src/utils/timer.ts +28 -0
- package/dist/esm/components/Messages/GasMessage.d.ts +0 -7
- package/dist/esm/components/Messages/GasMessage.js +0 -13
- package/dist/esm/components/Messages/GasMessage.js.map +0 -1
- package/dist/esm/providers/WalletProvider/getSafeMultisigConfig.d.ts +0 -8
- package/dist/esm/providers/WalletProvider/getSafeMultisigConfig.js +0 -95
- package/dist/esm/providers/WalletProvider/getSafeMultisigConfig.js.map +0 -1
- package/src/components/Messages/GasMessage.tsx +0 -35
- 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,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
|
-
}
|