@dynamic-labs/sdk-react-core 0.17.27 → 0.17.29

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 (48) hide show
  1. package/CHANGELOG.md +14 -0
  2. package/package.cjs +1 -1
  3. package/package.js +1 -1
  4. package/package.json +8 -8
  5. package/src/lib/components/TransactionStatusLayout/TransactionStatusLayout.cjs +1 -1
  6. package/src/lib/components/TransactionStatusLayout/TransactionStatusLayout.js +1 -1
  7. package/src/lib/context/DynamicContext/DynamicContext.cjs +4 -4
  8. package/src/lib/context/DynamicContext/DynamicContext.d.ts +2 -2
  9. package/src/lib/context/DynamicContext/DynamicContext.js +4 -4
  10. package/src/lib/context/SocialRedirectContext/SocialRedirectContext.cjs +3 -3
  11. package/src/lib/context/SocialRedirectContext/SocialRedirectContext.js +3 -3
  12. package/src/lib/modals/TransactionConfirmationModal/TransactionConfirmationModal.cjs +10 -2
  13. package/src/lib/modals/TransactionConfirmationModal/TransactionConfirmationModal.js +10 -2
  14. package/src/lib/modals/TransactionConfirmationModal/TransactionConfirmationModal.types.d.ts +2 -0
  15. package/src/lib/utils/functions/index.d.ts +1 -0
  16. package/src/lib/utils/functions/isMagicConnector/index.d.ts +1 -0
  17. package/src/lib/utils/functions/isMagicConnector/isMagicConnector.cjs +10 -0
  18. package/src/lib/utils/functions/isMagicConnector/isMagicConnector.d.ts +2 -0
  19. package/src/lib/utils/functions/isMagicConnector/isMagicConnector.js +6 -0
  20. package/src/lib/utils/hooks/authenticationHooks/useConnectAndSign/useConnectAndSign.cjs +2 -2
  21. package/src/lib/utils/hooks/authenticationHooks/useConnectAndSign/useConnectAndSign.js +2 -2
  22. package/src/lib/utils/hooks/index.d.ts +2 -0
  23. package/src/lib/utils/hooks/useTransactionEstimatedGas/index.d.ts +1 -0
  24. package/src/lib/utils/hooks/useTransactionEstimatedGas/useTransactionEstimatedGas.cjs +42 -0
  25. package/src/lib/utils/hooks/useTransactionEstimatedGas/useTransactionEstimatedGas.d.ts +2 -0
  26. package/src/lib/utils/hooks/useTransactionEstimatedGas/useTransactionEstimatedGas.js +38 -0
  27. package/src/lib/utils/hooks/useTransactionWithGasPrice/index.d.ts +1 -0
  28. package/src/lib/utils/hooks/useTransactionWithGasPrice/useTransactionWithGasPrice.cjs +41 -0
  29. package/src/lib/utils/hooks/useTransactionWithGasPrice/useTransactionWithGasPrice.d.ts +32 -0
  30. package/src/lib/utils/hooks/useTransactionWithGasPrice/useTransactionWithGasPrice.js +37 -0
  31. package/src/lib/utils/hooks/useWalletUiUtils/useWalletUiUtils.cjs +20 -19
  32. package/src/lib/utils/hooks/useWalletUiUtils/useWalletUiUtils.d.ts +4 -1
  33. package/src/lib/utils/hooks/useWalletUiUtils/useWalletUiUtils.js +20 -19
  34. package/src/lib/utils/hooks/useWallets/useWallets.cjs +3 -3
  35. package/src/lib/utils/hooks/useWallets/useWallets.d.ts +3 -3
  36. package/src/lib/utils/hooks/useWallets/useWallets.js +3 -3
  37. package/src/lib/views/SendBalanceView/SendBalanceView.cjs +9 -16
  38. package/src/lib/views/SendBalanceView/SendBalanceView.js +9 -16
  39. package/src/lib/views/SendBalanceView/components/TransactionStage/TransactionStage.cjs +63 -0
  40. package/src/lib/views/SendBalanceView/components/TransactionStage/TransactionStage.d.ts +8 -0
  41. package/src/lib/views/SendBalanceView/components/TransactionStage/TransactionStage.js +59 -0
  42. package/src/lib/views/SendBalanceView/components/TransactionStage/index.d.ts +1 -0
  43. package/src/lib/views/SendBalanceView/components/index.d.ts +1 -0
  44. package/src/lib/views/TransactionConfirmationView/TransactionConfirmationView.cjs +2 -2
  45. package/src/lib/views/TransactionConfirmationView/TransactionConfirmationView.js +2 -2
  46. package/src/lib/views/TransactionConfirmationView/hooks/useTransactionData/useTransactionData.cjs +24 -17
  47. package/src/lib/views/TransactionConfirmationView/hooks/useTransactionData/useTransactionData.d.ts +4 -0
  48. package/src/lib/views/TransactionConfirmationView/hooks/useTransactionData/useTransactionData.js +25 -18
@@ -40,33 +40,36 @@ require('../../../../context/MockContext/MockContext.cjs');
40
40
  require('../../../../context/CaptchaContext/CaptchaContext.cjs');
41
41
  var usePromise = require('../../../../utils/hooks/usePromise/usePromise.cjs');
42
42
  require('../../../../utils/hooks/useUserUpdateRequest/useUserUpdateRequest.cjs');
43
+ var useTransactionEstimatedGas = require('../../../../utils/hooks/useTransactionEstimatedGas/useTransactionEstimatedGas.cjs');
43
44
 
44
45
  const useTransactionData = ({ provider, transaction, }) => {
45
46
  const { data: transactionValue, isLoading: isEffectiveValueLoading } = usePromise.usePromise(() => _tslib.__awaiter(void 0, void 0, void 0, function* () {
46
47
  const val = yield transaction.value;
47
48
  return val ? ethers.ethers.BigNumber.from(val) : undefined;
48
49
  }));
49
- const { data: estimatedGas, isLoading: isEstimatedGasLoading } = usePromise.usePromise(() => {
50
- // To safely run estimateGas using alchemy, we need to remove the from address
51
- // because alchemy checks the origin address funds and can return an error if
52
- // origin wallet has no funds for the transaction
53
- // https://docs.alchemy.com/reference/eth-estimategas
54
- const { from } = transaction, transactionWithNoOrigin = _tslib.__rest(transaction, ["from"]);
55
- return provider.estimateGas(transactionWithNoOrigin);
56
- });
57
- const { data: gasPrice, isLoading: isFeeDataLoading } = usePromise.usePromise(() => provider.getGasPrice());
58
- const isGasPriceLoading = isEstimatedGasLoading || isFeeDataLoading;
59
- const gasEstimate = React.useMemo(() => gasPrice && estimatedGas
60
- ? ethers.ethers.BigNumber.from(gasPrice).mul(estimatedGas)
61
- : undefined, [gasPrice, estimatedGas]);
50
+ const { data: estimatedGas, isLoading: isEstimatedGasLoading } = useTransactionEstimatedGas.useTransactionEstimatedGas(provider, transaction);
51
+ const { data: providerGasPrice, isLoading: isProviderGasPrice } = usePromise.usePromise(() => provider.getGasPrice(), []);
52
+ const { data: transactionGasPrice, isLoading: isTransactionGasPriceLoading } = usePromise.usePromise(() => _tslib.__awaiter(void 0, void 0, void 0, function* () {
53
+ const gasPrice = yield transaction.gasPrice;
54
+ return gasPrice ? ethers.ethers.BigNumber.from(gasPrice) : undefined;
55
+ }), [transaction.gasPrice]);
56
+ const isGasPriceLoading = isEstimatedGasLoading || isProviderGasPrice || isTransactionGasPriceLoading;
57
+ const isGasLoading = isProviderGasPrice || isTransactionGasPriceLoading;
58
+ const transactionGas = React.useMemo(() => transactionGasPrice && estimatedGas
59
+ ? ethers.ethers.BigNumber.from(transactionGasPrice).mul(estimatedGas)
60
+ : undefined, [estimatedGas, transactionGasPrice]);
61
+ const gasEstimate = React.useMemo(() => !transactionGasPrice && providerGasPrice && estimatedGas
62
+ ? ethers.ethers.BigNumber.from(providerGasPrice).mul(estimatedGas)
63
+ : undefined, [transactionGasPrice, estimatedGas, providerGasPrice]);
62
64
  const { data: transactionToAddress, isLoading: isTransactionToAddressLoading, } = usePromise.usePromise(() => transaction.to);
63
65
  const { data: transactionFromAddress, isLoading: isTransactionFromAddressLoading, } = usePromise.usePromise(() => transaction.from);
64
66
  const total = React.useMemo(() => {
65
- if (gasEstimate !== undefined && transactionValue !== undefined) {
66
- return gasEstimate.add(transactionValue);
67
+ const transactionGasFee = transactionGas || gasEstimate;
68
+ if (transactionGasFee !== undefined && transactionValue !== undefined) {
69
+ return transactionGasFee.add(transactionValue);
67
70
  }
68
- return transactionValue || gasEstimate;
69
- }, [gasEstimate, transactionValue]);
71
+ return transactionValue || transactionGasFee;
72
+ }, [gasEstimate, transactionGas, transactionValue]);
70
73
  const isLoading = React.useMemo(() => isEffectiveValueLoading ||
71
74
  isGasPriceLoading ||
72
75
  isTransactionToAddressLoading ||
@@ -79,12 +82,16 @@ const useTransactionData = ({ provider, transaction, }) => {
79
82
  return {
80
83
  gasEstimate,
81
84
  isEffectiveValueLoading,
85
+ isGasLoading,
82
86
  isGasPriceLoading,
83
87
  isLoading,
84
88
  isTransactionFromAddressLoading,
89
+ isTransactionGasPriceLoading,
85
90
  isTransactionToAddressLoading,
86
91
  total,
87
92
  transactionFromAddress,
93
+ transactionGas,
94
+ transactionGasPrice,
88
95
  transactionToAddress,
89
96
  transactionValue,
90
97
  };
@@ -6,12 +6,16 @@ type TransactionDataHookProps = {
6
6
  export declare const useTransactionData: ({ provider, transaction, }: TransactionDataHookProps) => {
7
7
  gasEstimate: ethers.BigNumber | undefined;
8
8
  isEffectiveValueLoading: boolean;
9
+ isGasLoading: boolean;
9
10
  isGasPriceLoading: boolean;
10
11
  isLoading: boolean;
11
12
  isTransactionFromAddressLoading: boolean;
13
+ isTransactionGasPriceLoading: boolean;
12
14
  isTransactionToAddressLoading: boolean;
13
15
  total: ethers.BigNumber | undefined;
14
16
  transactionFromAddress: string | undefined;
17
+ transactionGas: ethers.BigNumber | undefined;
18
+ transactionGasPrice: ethers.BigNumber | undefined;
15
19
  transactionToAddress: string | undefined;
16
20
  transactionValue: ethers.BigNumber | undefined;
17
21
  };
@@ -1,4 +1,4 @@
1
- import { __awaiter, __rest } from '../../../../../../_virtual/_tslib.js';
1
+ import { __awaiter } from '../../../../../../_virtual/_tslib.js';
2
2
  import { useMemo } from 'react';
3
3
  import { ethers } from 'ethers';
4
4
  import '@dynamic-labs/utils';
@@ -36,33 +36,36 @@ import '../../../../context/MockContext/MockContext.js';
36
36
  import '../../../../context/CaptchaContext/CaptchaContext.js';
37
37
  import { usePromise } from '../../../../utils/hooks/usePromise/usePromise.js';
38
38
  import '../../../../utils/hooks/useUserUpdateRequest/useUserUpdateRequest.js';
39
+ import { useTransactionEstimatedGas } from '../../../../utils/hooks/useTransactionEstimatedGas/useTransactionEstimatedGas.js';
39
40
 
40
41
  const useTransactionData = ({ provider, transaction, }) => {
41
42
  const { data: transactionValue, isLoading: isEffectiveValueLoading } = usePromise(() => __awaiter(void 0, void 0, void 0, function* () {
42
43
  const val = yield transaction.value;
43
44
  return val ? ethers.BigNumber.from(val) : undefined;
44
45
  }));
45
- const { data: estimatedGas, isLoading: isEstimatedGasLoading } = usePromise(() => {
46
- // To safely run estimateGas using alchemy, we need to remove the from address
47
- // because alchemy checks the origin address funds and can return an error if
48
- // origin wallet has no funds for the transaction
49
- // https://docs.alchemy.com/reference/eth-estimategas
50
- const { from } = transaction, transactionWithNoOrigin = __rest(transaction, ["from"]);
51
- return provider.estimateGas(transactionWithNoOrigin);
52
- });
53
- const { data: gasPrice, isLoading: isFeeDataLoading } = usePromise(() => provider.getGasPrice());
54
- const isGasPriceLoading = isEstimatedGasLoading || isFeeDataLoading;
55
- const gasEstimate = useMemo(() => gasPrice && estimatedGas
56
- ? ethers.BigNumber.from(gasPrice).mul(estimatedGas)
57
- : undefined, [gasPrice, estimatedGas]);
46
+ const { data: estimatedGas, isLoading: isEstimatedGasLoading } = useTransactionEstimatedGas(provider, transaction);
47
+ const { data: providerGasPrice, isLoading: isProviderGasPrice } = usePromise(() => provider.getGasPrice(), []);
48
+ const { data: transactionGasPrice, isLoading: isTransactionGasPriceLoading } = usePromise(() => __awaiter(void 0, void 0, void 0, function* () {
49
+ const gasPrice = yield transaction.gasPrice;
50
+ return gasPrice ? ethers.BigNumber.from(gasPrice) : undefined;
51
+ }), [transaction.gasPrice]);
52
+ const isGasPriceLoading = isEstimatedGasLoading || isProviderGasPrice || isTransactionGasPriceLoading;
53
+ const isGasLoading = isProviderGasPrice || isTransactionGasPriceLoading;
54
+ const transactionGas = useMemo(() => transactionGasPrice && estimatedGas
55
+ ? ethers.BigNumber.from(transactionGasPrice).mul(estimatedGas)
56
+ : undefined, [estimatedGas, transactionGasPrice]);
57
+ const gasEstimate = useMemo(() => !transactionGasPrice && providerGasPrice && estimatedGas
58
+ ? ethers.BigNumber.from(providerGasPrice).mul(estimatedGas)
59
+ : undefined, [transactionGasPrice, estimatedGas, providerGasPrice]);
58
60
  const { data: transactionToAddress, isLoading: isTransactionToAddressLoading, } = usePromise(() => transaction.to);
59
61
  const { data: transactionFromAddress, isLoading: isTransactionFromAddressLoading, } = usePromise(() => transaction.from);
60
62
  const total = useMemo(() => {
61
- if (gasEstimate !== undefined && transactionValue !== undefined) {
62
- return gasEstimate.add(transactionValue);
63
+ const transactionGasFee = transactionGas || gasEstimate;
64
+ if (transactionGasFee !== undefined && transactionValue !== undefined) {
65
+ return transactionGasFee.add(transactionValue);
63
66
  }
64
- return transactionValue || gasEstimate;
65
- }, [gasEstimate, transactionValue]);
67
+ return transactionValue || transactionGasFee;
68
+ }, [gasEstimate, transactionGas, transactionValue]);
66
69
  const isLoading = useMemo(() => isEffectiveValueLoading ||
67
70
  isGasPriceLoading ||
68
71
  isTransactionToAddressLoading ||
@@ -75,12 +78,16 @@ const useTransactionData = ({ provider, transaction, }) => {
75
78
  return {
76
79
  gasEstimate,
77
80
  isEffectiveValueLoading,
81
+ isGasLoading,
78
82
  isGasPriceLoading,
79
83
  isLoading,
80
84
  isTransactionFromAddressLoading,
85
+ isTransactionGasPriceLoading,
81
86
  isTransactionToAddressLoading,
82
87
  total,
83
88
  transactionFromAddress,
89
+ transactionGas,
90
+ transactionGasPrice,
84
91
  transactionToAddress,
85
92
  transactionValue,
86
93
  };