@dynamic-labs/sdk-react-core 4.79.2 → 4.81.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 +25 -0
- package/package.cjs +2 -2
- package/package.js +2 -2
- package/package.json +13 -13
- package/src/lib/Main.cjs +2 -2
- package/src/lib/Main.js +2 -2
- package/src/lib/client/extension/deprecated/mfa/verifyTotpMfaDevice/verifyTotpMfaDevice.d.ts +1 -1
- package/src/lib/components/LogoutButton/LogoutButton.cjs +2 -2
- package/src/lib/components/LogoutButton/LogoutButton.js +2 -2
- package/src/lib/components/SendBalanceForm/SendBalanceForm.cjs +63 -3
- package/src/lib/components/SendBalanceForm/SendBalanceForm.js +63 -3
- package/src/lib/components/SendBalanceForm/TransactionModeSegmentedControl/TransactionModeSegmentedControl.cjs +40 -0
- package/src/lib/components/SendBalanceForm/TransactionModeSegmentedControl/TransactionModeSegmentedControl.d.ts +16 -0
- package/src/lib/components/SendBalanceForm/TransactionModeSegmentedControl/TransactionModeSegmentedControl.js +36 -0
- package/src/lib/components/SendBalanceForm/TransactionModeSegmentedControl/icons.cjs +17 -0
- package/src/lib/components/SendBalanceForm/TransactionModeSegmentedControl/icons.d.ts +8 -0
- package/src/lib/components/SendBalanceForm/TransactionModeSegmentedControl/icons.js +12 -0
- package/src/lib/components/SendBalanceForm/TransactionModeSegmentedControl/index.d.ts +1 -0
- package/src/lib/context/DynamicContext/DynamicContext.cjs +6 -4
- package/src/lib/context/DynamicContext/DynamicContext.js +6 -4
- package/src/lib/context/DynamicContext/hooks/useHandleLogout/index.d.ts +1 -0
- package/src/lib/context/DynamicContext/hooks/useHandleLogout/types.d.ts +9 -0
- package/src/lib/context/DynamicContext/hooks/useHandleLogout/useHandleLogout.cjs +25 -12
- package/src/lib/context/DynamicContext/hooks/useHandleLogout/useHandleLogout.d.ts +5 -3
- package/src/lib/context/DynamicContext/hooks/useHandleLogout/useHandleLogout.js +24 -11
- package/src/lib/context/DynamicContext/hooks/useRemoveWallet/useRemoveWallet.cjs +3 -3
- package/src/lib/context/DynamicContext/hooks/useRemoveWallet/useRemoveWallet.d.ts +3 -2
- package/src/lib/context/DynamicContext/hooks/useRemoveWallet/useRemoveWallet.js +3 -3
- package/src/lib/context/DynamicContext/types/IDynamicContext.d.ts +2 -0
- package/src/lib/context/DynamicContext/types/IInternalDynamicContext.d.ts +8 -1
- package/src/lib/events/auth.d.ts +2 -1
- package/src/lib/styles/index.shadow.cjs +1 -1
- package/src/lib/styles/index.shadow.js +1 -1
- package/src/lib/utils/hooks/useAleoShieldedBalances/index.d.ts +1 -0
- package/src/lib/utils/hooks/useAleoShieldedBalances/useAleoShieldedBalances.cjs +372 -0
- package/src/lib/utils/hooks/useAleoShieldedBalances/useAleoShieldedBalances.d.ts +24 -0
- package/src/lib/utils/hooks/useAleoShieldedBalances/useAleoShieldedBalances.js +368 -0
- package/src/lib/utils/hooks/useDeleteUserAccount/useDeleteUserAccount.cjs +2 -2
- package/src/lib/utils/hooks/useDeleteUserAccount/useDeleteUserAccount.js +2 -2
- package/src/lib/utils/hooks/useEmbeddedWallet/useEmbeddedWallet.cjs +1 -0
- package/src/lib/utils/hooks/useEmbeddedWallet/useEmbeddedWallet.d.ts +1 -0
- package/src/lib/utils/hooks/useEmbeddedWallet/useEmbeddedWallet.js +1 -0
- package/src/lib/utils/hooks/useEmbeddedWalletSessionKeys/useEmbeddedWalletSessionKeys.cjs +1 -1
- package/src/lib/utils/hooks/useEmbeddedWalletSessionKeys/useEmbeddedWalletSessionKeys.js +1 -1
- package/src/lib/utils/hooks/useUserAuth/useUserAuth.cjs +3 -3
- package/src/lib/utils/hooks/useUserAuth/useUserAuth.js +3 -3
- package/src/lib/utils/hooks/useValidateSession/handleStoreAndEnvironmentMismatch/handleStoreAndEnvironmentMismatch.cjs +1 -1
- package/src/lib/utils/hooks/useValidateSession/handleStoreAndEnvironmentMismatch/handleStoreAndEnvironmentMismatch.d.ts +2 -1
- package/src/lib/utils/hooks/useValidateSession/handleStoreAndEnvironmentMismatch/handleStoreAndEnvironmentMismatch.js +1 -1
- package/src/lib/utils/hooks/useValidateSession/handleWalletInfoOutOfSync/handleWalletInfoOutOfSync.cjs +3 -1
- package/src/lib/utils/hooks/useValidateSession/handleWalletInfoOutOfSync/handleWalletInfoOutOfSync.d.ts +2 -2
- package/src/lib/utils/hooks/useValidateSession/handleWalletInfoOutOfSync/handleWalletInfoOutOfSync.js +3 -1
- package/src/lib/utils/hooks/useValidateSession/useValidateSession.cjs +3 -3
- package/src/lib/utils/hooks/useValidateSession/useValidateSession.d.ts +3 -3
- package/src/lib/utils/hooks/useValidateSession/useValidateSession.js +3 -3
- package/src/lib/utils/hooks/useWalletEventListeners/useWalletEventListeners.cjs +2 -2
- package/src/lib/utils/hooks/useWalletEventListeners/useWalletEventListeners.d.ts +3 -2
- package/src/lib/utils/hooks/useWalletEventListeners/useWalletEventListeners.js +2 -2
- package/src/lib/views/BackupUnsuccessfulView/BackupUnsuccessfulView.cjs +5 -5
- package/src/lib/views/BackupUnsuccessfulView/BackupUnsuccessfulView.js +5 -5
- package/src/lib/views/CollectUserDataView/CollectUserDataView.cjs +2 -2
- package/src/lib/views/CollectUserDataView/CollectUserDataView.js +2 -2
- package/src/lib/views/CollectUserDataViewNoWallet/CollectUserDataViewNoWallet.cjs +2 -2
- package/src/lib/views/CollectUserDataViewNoWallet/CollectUserDataViewNoWallet.js +2 -2
- package/src/lib/views/DeviceRegistrationView/DeviceRegistrationView.cjs +2 -2
- package/src/lib/views/DeviceRegistrationView/DeviceRegistrationView.js +2 -2
- package/src/lib/views/EmailVerification/EmailVerification.cjs +2 -2
- package/src/lib/views/EmailVerification/EmailVerification.js +2 -2
- package/src/lib/views/EmbeddedDeleteView/EmbeddedDeleteView.cjs +2 -2
- package/src/lib/views/EmbeddedDeleteView/EmbeddedDeleteView.js +2 -2
- package/src/lib/views/MfaChooseDeviceView/MfaChooseDeviceView.cjs +7 -7
- package/src/lib/views/MfaChooseDeviceView/MfaChooseDeviceView.js +7 -7
- package/src/lib/views/MfaSecureDeviceView/MfaSecureDeviceView.cjs +7 -7
- package/src/lib/views/MfaSecureDeviceView/MfaSecureDeviceView.js +7 -7
- package/src/lib/views/MfaVerificationView/MfaVerificationView.cjs +5 -5
- package/src/lib/views/MfaVerificationView/MfaVerificationView.js +5 -5
- package/src/lib/views/Passkey/PasskeyIntroView/PasskeyIntroView.cjs +2 -2
- package/src/lib/views/Passkey/PasskeyIntroView/PasskeyIntroView.js +2 -2
- package/src/lib/views/SendBalanceView/SendBalanceView.cjs +53 -0
- package/src/lib/views/SendBalanceView/SendBalanceView.js +53 -0
- package/src/lib/views/SmsVerification/SmsVerification.cjs +2 -2
- package/src/lib/views/SmsVerification/SmsVerification.js +2 -2
- package/src/lib/views/WalletDelegation/WalletDelegationView/WalletDelegationView.cjs +2 -2
- package/src/lib/views/WalletDelegation/WalletDelegationView/WalletDelegationView.js +2 -2
- package/src/lib/views/WalletLockedView/WalletLockedView.cjs +2 -2
- package/src/lib/views/WalletLockedView/WalletLockedView.js +2 -2
- package/src/lib/views/WalletUsedView/WalletUsedView.cjs +2 -2
- package/src/lib/views/WalletUsedView/WalletUsedView.js +2 -2
- package/src/lib/widgets/DynamicWidget/components/ActiveWalletBalance/ActiveWalletBalance.cjs +191 -11
- package/src/lib/widgets/DynamicWidget/components/ActiveWalletBalance/ActiveWalletBalance.js +191 -11
- package/src/lib/widgets/DynamicWidget/components/ActiveWalletBalance/TokenBalanceItem/TokenBalanceItem.cjs +5 -2
- package/src/lib/widgets/DynamicWidget/components/ActiveWalletBalance/TokenBalanceItem/TokenBalanceItem.d.ts +10 -1
- package/src/lib/widgets/DynamicWidget/components/ActiveWalletBalance/TokenBalanceItem/TokenBalanceItem.js +5 -2
- package/src/lib/widgets/DynamicWidget/components/ActiveWalletBalance/TokenBalanceItem/index.d.ts +1 -0
- package/src/lib/widgets/DynamicWidget/components/ActiveWalletBalance/TokenBalanceList/TokenBalanceList.cjs +2 -2
- package/src/lib/widgets/DynamicWidget/components/ActiveWalletBalance/TokenBalanceList/TokenBalanceList.d.ts +3 -1
- package/src/lib/widgets/DynamicWidget/components/ActiveWalletBalance/TokenBalanceList/TokenBalanceList.js +2 -2
- package/src/lib/widgets/DynamicWidget/components/SingleWalletButtons/SingleWalletButtons.cjs +2 -2
- package/src/lib/widgets/DynamicWidget/components/SingleWalletButtons/SingleWalletButtons.js +2 -2
- package/src/lib/widgets/DynamicWidget/views/SettingsView/SettingsView.cjs +2 -2
- package/src/lib/widgets/DynamicWidget/views/SettingsView/SettingsView.js +2 -2
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { useAleoShieldedBalances } from './useAleoShieldedBalances';
|
|
@@ -0,0 +1,372 @@
|
|
|
1
|
+
'use client'
|
|
2
|
+
'use strict';
|
|
3
|
+
|
|
4
|
+
Object.defineProperty(exports, '__esModule', { value: true });
|
|
5
|
+
|
|
6
|
+
var _tslib = require('../../../../../_virtual/_tslib.cjs');
|
|
7
|
+
var React = require('react');
|
|
8
|
+
var sdkApiCore = require('@dynamic-labs/sdk-api-core');
|
|
9
|
+
require('../../../context/DynamicContext/DynamicContext.cjs');
|
|
10
|
+
require('../../../store/state/loadingAndLifecycle/loadingAndLifecycle.cjs');
|
|
11
|
+
require('@dynamic-labs/iconic');
|
|
12
|
+
require('@dynamic-labs/wallet-connector-core');
|
|
13
|
+
require('react/jsx-runtime');
|
|
14
|
+
require('../../../context/ViewContext/ViewContext.cjs');
|
|
15
|
+
require('../../../shared/logger.cjs');
|
|
16
|
+
require('@dynamic-labs/wallet-book');
|
|
17
|
+
require('@dynamic-labs/utils');
|
|
18
|
+
require('../../constants/colors.cjs');
|
|
19
|
+
require('../../constants/values.cjs');
|
|
20
|
+
require('../../../shared/consts/index.cjs');
|
|
21
|
+
require('../../../events/dynamicEvents.cjs');
|
|
22
|
+
require('../../../context/CaptchaContext/CaptchaContext.cjs');
|
|
23
|
+
require('../../../context/ErrorContext/ErrorContext.cjs');
|
|
24
|
+
require('@dynamic-labs/multi-wallet');
|
|
25
|
+
require('react-international-phone');
|
|
26
|
+
require('../../../store/state/nonce/nonce.cjs');
|
|
27
|
+
require('@dynamic-labs-sdk/client/core');
|
|
28
|
+
require('eventemitter3');
|
|
29
|
+
require('@dynamic-labs-sdk/client');
|
|
30
|
+
require('../../../config/ApiEndpoint.cjs');
|
|
31
|
+
require('@dynamic-labs/locale');
|
|
32
|
+
require('../../../store/state/dynamicContextProps/dynamicContextProps.cjs');
|
|
33
|
+
require('../../../store/state/primaryWalletId/primaryWalletId.cjs');
|
|
34
|
+
require('../../../store/state/connectedWalletsInfo/connectedWalletsInfo.cjs');
|
|
35
|
+
require('../../functions/getWaasAddressTypeLabel/getWaasAddressTypeLabel.cjs');
|
|
36
|
+
require('../../../context/AccessDeniedContext/AccessDeniedContext.cjs');
|
|
37
|
+
require('../../../context/AccountExistsContext/AccountExistsContext.cjs');
|
|
38
|
+
require('../../../context/UserWalletsContext/UserWalletsContext.cjs');
|
|
39
|
+
require('../../../store/state/authMode/authMode.cjs');
|
|
40
|
+
require('../../../context/VerificationContext/VerificationContext.cjs');
|
|
41
|
+
require('react-dom');
|
|
42
|
+
require('../../functions/compareChains/compareChains.cjs');
|
|
43
|
+
require('../../../views/Passkey/utils/findPrimaryEmbeddedChain/findPrimaryEmbeddedChain.cjs');
|
|
44
|
+
require('../../../context/ThemeContext/ThemeContext.cjs');
|
|
45
|
+
require('../useUserUpdateRequest/useUpdateUser/userFieldsSchema.cjs');
|
|
46
|
+
require('bs58');
|
|
47
|
+
require('@dynamic-labs/types');
|
|
48
|
+
require('../../../context/SocialRedirectContext/SocialRedirectContext.cjs');
|
|
49
|
+
require('../../../context/LoadingContext/LoadingContext.cjs');
|
|
50
|
+
require('../../../context/WalletContext/WalletContext.cjs');
|
|
51
|
+
require('../useEmbeddedWallet/useSecureEnclaveEmbeddedWallet/constants.cjs');
|
|
52
|
+
require('yup');
|
|
53
|
+
require('../../../context/MockContext/MockContext.cjs');
|
|
54
|
+
require('../../../views/CollectUserDataView/useFields.cjs');
|
|
55
|
+
require('../../../context/FieldsStateContext/FieldsStateContext.cjs');
|
|
56
|
+
require('../../../context/UserFieldEditorContext/UserFieldEditorContext.cjs');
|
|
57
|
+
require('@dynamic-labs/rpc-providers');
|
|
58
|
+
require('../../../store/state/walletOptions/walletOptions.cjs');
|
|
59
|
+
require('react-i18next');
|
|
60
|
+
require('../../../components/Accordion/components/AccordionItem/AccordionItem.cjs');
|
|
61
|
+
require('../../../components/Alert/Alert.cjs');
|
|
62
|
+
require('../../../components/ShadowDOM/ShadowDOM.cjs');
|
|
63
|
+
require('../../../components/IconButton/IconButton.cjs');
|
|
64
|
+
require('../../../components/InlineWidget/InlineWidget.cjs');
|
|
65
|
+
require('../../../components/Input/Input.cjs');
|
|
66
|
+
require('../../../components/IsBrowser/IsBrowser.cjs');
|
|
67
|
+
require('../../../components/MenuList/Dropdown/Dropdown.cjs');
|
|
68
|
+
require('../../../components/OverlayCard/OverlayCard.cjs');
|
|
69
|
+
require('../../../components/Transition/ZoomTransition/ZoomTransition.cjs');
|
|
70
|
+
require('../../../components/Transition/SlideInUpTransition/SlideInUpTransition.cjs');
|
|
71
|
+
require('../../../components/Transition/OpacityTransition/OpacityTransition.cjs');
|
|
72
|
+
require('../../../components/PasskeyCreatedSuccessBanner/PasskeyCreatedSuccessBanner.cjs');
|
|
73
|
+
require('../../../components/Popper/Popper/Popper.cjs');
|
|
74
|
+
require('../../../components/Popper/PopperContext/PopperContext.cjs');
|
|
75
|
+
require('react-focus-lock');
|
|
76
|
+
require('qrcode');
|
|
77
|
+
require('formik');
|
|
78
|
+
require('../useSubdomainCheck/useSubdomainCheck.cjs');
|
|
79
|
+
require('../../../context/WalletGroupContext/WalletGroupContext.cjs');
|
|
80
|
+
require('../../../widgets/DynamicWidget/context/DynamicWidgetContext.cjs');
|
|
81
|
+
require('../useGetMfaToken/useGetMfaToken.cjs');
|
|
82
|
+
require('../useWalletBackup/useWalletBackup.cjs');
|
|
83
|
+
require('../useWalletBackup/types.cjs');
|
|
84
|
+
require('../useWalletBackup/cloudProviders.cjs');
|
|
85
|
+
require('../../../context/IpConfigurationContext/IpConfigurationContext.cjs');
|
|
86
|
+
require('../../../context/ConnectWithOtpContext/ConnectWithOtpContext.cjs');
|
|
87
|
+
require('../../../widgets/DynamicBridgeWidget/views/WalletsView/components/SecondaryWallets/SecondaryWallets.cjs');
|
|
88
|
+
require('@hcaptcha/react-hcaptcha');
|
|
89
|
+
require('../../../widgets/DynamicWidget/helpers/convertExchangeKeyAndProviderEnum.cjs');
|
|
90
|
+
require('../../../views/ExchangeWhitelistWarning/ExchangeWhitelistWarning.cjs');
|
|
91
|
+
require('../../../context/ErrorContext/hooks/useErrorText/useErrorText.cjs');
|
|
92
|
+
require('../../../context/FooterAnimationContext/index.cjs');
|
|
93
|
+
require('../../../views/MfaChooseDeviceView/useGetMfaOptions/useGetMfaOptions.cjs');
|
|
94
|
+
require('../../../context/PasskeyContext/PasskeyContext.cjs');
|
|
95
|
+
require('../../../context/OnrampContext/OnrampContext.cjs');
|
|
96
|
+
require('../../../store/state/sendBalances.cjs');
|
|
97
|
+
require('../../../store/state/connectorsInitializing/connectorsInitializing.cjs');
|
|
98
|
+
require('../../../components/OverlayCardBase/OverlayCardTarget/OverlayCardTarget.cjs');
|
|
99
|
+
require('../../../widgets/DynamicWidget/components/DynamicWidgetHeader/DynamicWidgetHeader.cjs');
|
|
100
|
+
require('../../../views/TransactionConfirmationView/TransactionConfirmationView.cjs');
|
|
101
|
+
require('../../../widgets/DynamicWidget/components/PasskeyCard/PasskeyCard.cjs');
|
|
102
|
+
require('../../../widgets/DynamicWidget/views/CryptoComOnramp/CryptoComOnramp.cjs');
|
|
103
|
+
require('../../../../index.cjs');
|
|
104
|
+
require('../../../widgets/DynamicWidget/views/ManagePasskeysMfaWidgetView/ManagePasskeysMfaWidgetView.cjs');
|
|
105
|
+
require('../../../widgets/DynamicWidget/views/ManageTotpMfaWidgetView/ManageTotpMfaWidgetView.cjs');
|
|
106
|
+
require('../../../widgets/DynamicWidget/views/ReceiveWalletFunds/ReceiveWalletFunds.cjs');
|
|
107
|
+
require('../../../store/state/tokenBalances.cjs');
|
|
108
|
+
require('../../../store/state/multichainBalances.cjs');
|
|
109
|
+
require('@dynamic-labs/store');
|
|
110
|
+
require('../../../shared/utils/functions/getInitialUrl/getInitialUrl.cjs');
|
|
111
|
+
var useInternalDynamicContext = require('../../../context/DynamicContext/useDynamicContext/useInternalDynamicContext/useInternalDynamicContext.cjs');
|
|
112
|
+
|
|
113
|
+
const MICROCREDITS_PER_CREDIT = 1000000;
|
|
114
|
+
const ALEO_CREDITS_LOGO = 'https://app.dynamic.xyz/assets/networks/aleo.svg';
|
|
115
|
+
// Generic dark "?" token icon — matches redcoast's `DEFAULT_TOKEN_LOGO_URI`
|
|
116
|
+
// used by the multichain endpoint when an unshielded token has no curated
|
|
117
|
+
// logo. Reusing it here keeps the Shielded tab visually consistent with
|
|
118
|
+
// the Unshielded tab for the same token.
|
|
119
|
+
const UNKNOWN_TOKEN_LOGO = 'https://app.dynamic.xyz/assets/tokens/unknown.svg';
|
|
120
|
+
const TOKEN_REGISTRY_PROGRAM = 'token_registry.aleo';
|
|
121
|
+
const TOKEN_REGISTRY_RECORD = 'Token';
|
|
122
|
+
// Non-credits tokens deliberately omit `logoURI` — Aleo doesn't have a
|
|
123
|
+
// curated icon list yet, so leaving it undefined surfaces the widget's
|
|
124
|
+
// generic placeholder (`?` skeleton) consistent with the unshielded feed.
|
|
125
|
+
const KNOWN_SHIELDED_TOKENS = [
|
|
126
|
+
{
|
|
127
|
+
contractAddress: 'usad_stablecoin.aleo',
|
|
128
|
+
decimals: 6,
|
|
129
|
+
name: 'USAD',
|
|
130
|
+
programName: 'usad_stablecoin.aleo',
|
|
131
|
+
recordName: 'Token',
|
|
132
|
+
symbol: 'USAD',
|
|
133
|
+
},
|
|
134
|
+
{
|
|
135
|
+
contractAddress: 'test_usad_stablecoin.aleo',
|
|
136
|
+
decimals: 6,
|
|
137
|
+
name: 'USAD',
|
|
138
|
+
programName: 'test_usad_stablecoin.aleo',
|
|
139
|
+
recordName: 'Token',
|
|
140
|
+
symbol: 'USAD',
|
|
141
|
+
},
|
|
142
|
+
{
|
|
143
|
+
contractAddress: 'usdcx_stablecoin.aleo',
|
|
144
|
+
decimals: 6,
|
|
145
|
+
name: 'USDCx',
|
|
146
|
+
programName: 'usdcx_stablecoin.aleo',
|
|
147
|
+
recordName: 'Token',
|
|
148
|
+
symbol: 'USDCx',
|
|
149
|
+
},
|
|
150
|
+
{
|
|
151
|
+
contractAddress: 'test_usdcx_stablecoin.aleo',
|
|
152
|
+
decimals: 6,
|
|
153
|
+
name: 'USDCx',
|
|
154
|
+
programName: 'test_usdcx_stablecoin.aleo',
|
|
155
|
+
recordName: 'Token',
|
|
156
|
+
symbol: 'USDCx',
|
|
157
|
+
},
|
|
158
|
+
// ARC-21 (Hyperlane warp routes) — mainnet only. Token IDs match the
|
|
159
|
+
// values pinned in `packages/aleo/src/utils/aleoSendableTokens` and the
|
|
160
|
+
// redcoast `aleoArc21Tokens` registry. Decimals match each token's
|
|
161
|
+
// `token_info` metadata on-chain.
|
|
162
|
+
{
|
|
163
|
+
contractAddress: 'hyp_warp_token_sol.aleo',
|
|
164
|
+
decimals: 9,
|
|
165
|
+
name: 'Wrapped SOL',
|
|
166
|
+
programName: TOKEN_REGISTRY_PROGRAM,
|
|
167
|
+
recordName: TOKEN_REGISTRY_RECORD,
|
|
168
|
+
symbol: 'wSOL',
|
|
169
|
+
tokenId: '2045969100091121326225168054634646230244820821909676777152465722877810201564field',
|
|
170
|
+
},
|
|
171
|
+
{
|
|
172
|
+
contractAddress: 'hyp_warp_token_eth.aleo',
|
|
173
|
+
decimals: 18,
|
|
174
|
+
name: 'Wrapped ETH',
|
|
175
|
+
programName: TOKEN_REGISTRY_PROGRAM,
|
|
176
|
+
recordName: TOKEN_REGISTRY_RECORD,
|
|
177
|
+
symbol: 'wETH',
|
|
178
|
+
tokenId: '8189585964265444162798552221009403350643900573290534096996249214099143169251field',
|
|
179
|
+
},
|
|
180
|
+
{
|
|
181
|
+
contractAddress: 'hyp_warp_token_wbtc.aleo',
|
|
182
|
+
decimals: 8,
|
|
183
|
+
name: 'Wrapped BTC',
|
|
184
|
+
programName: TOKEN_REGISTRY_PROGRAM,
|
|
185
|
+
recordName: TOKEN_REGISTRY_RECORD,
|
|
186
|
+
symbol: 'wBTC',
|
|
187
|
+
tokenId: '3491859903473482085250871387962132231204352466326026409883548131580582527809field',
|
|
188
|
+
},
|
|
189
|
+
{
|
|
190
|
+
contractAddress: 'hyp_warp_token_usdt.aleo',
|
|
191
|
+
decimals: 6,
|
|
192
|
+
name: 'Tether USD',
|
|
193
|
+
programName: TOKEN_REGISTRY_PROGRAM,
|
|
194
|
+
recordName: TOKEN_REGISTRY_RECORD,
|
|
195
|
+
symbol: 'USDT',
|
|
196
|
+
tokenId: '7881654794448182580124231856035865816599796419758925654292946277940935117913field',
|
|
197
|
+
},
|
|
198
|
+
{
|
|
199
|
+
contractAddress: 'hyp_warp_token_usdc.aleo',
|
|
200
|
+
decimals: 6,
|
|
201
|
+
name: 'USD Coin',
|
|
202
|
+
programName: TOKEN_REGISTRY_PROGRAM,
|
|
203
|
+
recordName: TOKEN_REGISTRY_RECORD,
|
|
204
|
+
symbol: 'USDC',
|
|
205
|
+
tokenId: '4697275201844475848710842677807162058146139844643350200269139278887318953049field',
|
|
206
|
+
},
|
|
207
|
+
];
|
|
208
|
+
/**
|
|
209
|
+
* Match a record to a shielded-token spec. Stablecoins match on
|
|
210
|
+
* (program, record); ARC-21 entries additionally require the spec's
|
|
211
|
+
* `tokenId` to appear inside `record_plaintext` (since every ARC-21 token
|
|
212
|
+
* shares `token_registry.aleo / Token`).
|
|
213
|
+
*/
|
|
214
|
+
const findTokenSpec = (record) => {
|
|
215
|
+
for (const spec of KNOWN_SHIELDED_TOKENS) {
|
|
216
|
+
if (record.program_name !== spec.programName)
|
|
217
|
+
continue;
|
|
218
|
+
if (record.record_name !== spec.recordName)
|
|
219
|
+
continue;
|
|
220
|
+
if (spec.tokenId) {
|
|
221
|
+
if (typeof record.record_plaintext !== 'string' ||
|
|
222
|
+
!record.record_plaintext.includes(`token_id: ${spec.tokenId}`)) {
|
|
223
|
+
continue;
|
|
224
|
+
}
|
|
225
|
+
}
|
|
226
|
+
return spec;
|
|
227
|
+
}
|
|
228
|
+
return undefined;
|
|
229
|
+
};
|
|
230
|
+
/**
|
|
231
|
+
* Hook that returns the active wallet's shielded (private) Aleo token
|
|
232
|
+
* balances as a `TokenBalance[]` so the widget can render them through the
|
|
233
|
+
* same TokenBalanceList path it uses for unshielded balances.
|
|
234
|
+
*
|
|
235
|
+
* - Records come from the iframe via `connector.listOwnedRecords()` (the
|
|
236
|
+
* Provable RecordScanner; view key never leaves the iframe).
|
|
237
|
+
* - Aggregates `credits.aleo/credits` (sum `microcredits` → ALEO) plus any
|
|
238
|
+
* tier-3 stablecoin Token records (sum `amount` per program → USAD/USDCx).
|
|
239
|
+
* ARC-21 multi-token grouped-by-`token_id` is Phase 2B.
|
|
240
|
+
*
|
|
241
|
+
* Returns an empty list when:
|
|
242
|
+
* - The wallet isn't Aleo
|
|
243
|
+
* - The connector doesn't expose `listOwnedRecords` (e.g. external Aleo wallet)
|
|
244
|
+
* - The user owns no records that match a known program/record pair
|
|
245
|
+
*/
|
|
246
|
+
const useAleoShieldedBalances = () => {
|
|
247
|
+
const { primaryWallet, network } = useInternalDynamicContext.useInternalDynamicContext();
|
|
248
|
+
const [tokenBalances, setTokenBalances] = React.useState([]);
|
|
249
|
+
const [isLoading, setIsLoading] = React.useState(false);
|
|
250
|
+
const [error, setError] = React.useState();
|
|
251
|
+
const connector = primaryWallet === null || primaryWallet === void 0 ? void 0 : primaryWallet.connector;
|
|
252
|
+
const isAleo = (connector === null || connector === void 0 ? void 0 : connector.connectedChain) === sdkApiCore.ChainEnum.Aleo;
|
|
253
|
+
const supportsShielded = isAleo &&
|
|
254
|
+
typeof (connector === null || connector === void 0 ? void 0 : connector.listOwnedRecords) === 'function';
|
|
255
|
+
// Mirror the live connector into a ref so `fetchShielded` can read it
|
|
256
|
+
// without depending on the (often unstable) object reference. Some test
|
|
257
|
+
// setups mock context with a factory that returns a fresh `primaryWallet`
|
|
258
|
+
// every render — depending on that ref directly turned this into an
|
|
259
|
+
// infinite render loop.
|
|
260
|
+
const connectorRef = React.useRef(connector);
|
|
261
|
+
connectorRef.current = connector;
|
|
262
|
+
const connectorKey = connector === null || connector === void 0 ? void 0 : connector.key;
|
|
263
|
+
const networkKey = network !== undefined && network !== null ? String(network) : undefined;
|
|
264
|
+
const fetchShielded = React.useCallback(() => _tslib.__awaiter(void 0, void 0, void 0, function* () {
|
|
265
|
+
var _a, _b, _c;
|
|
266
|
+
const liveConnector = connectorRef.current;
|
|
267
|
+
if (!supportsShielded || !liveConnector) {
|
|
268
|
+
setTokenBalances((prev) => (prev.length === 0 ? prev : []));
|
|
269
|
+
return;
|
|
270
|
+
}
|
|
271
|
+
setIsLoading(true);
|
|
272
|
+
setError(undefined);
|
|
273
|
+
try {
|
|
274
|
+
const result = yield liveConnector.listOwnedRecords();
|
|
275
|
+
const records = (_a = result === null || result === void 0 ? void 0 : result.records) !== null && _a !== void 0 ? _a : [];
|
|
276
|
+
const networkIdNumeric = Number(networkKey);
|
|
277
|
+
const safeNetworkId = Number.isFinite(networkIdNumeric)
|
|
278
|
+
? networkIdNumeric
|
|
279
|
+
: undefined;
|
|
280
|
+
const balances = [];
|
|
281
|
+
// Tier 1: native credits — sum microcredits across credits.aleo records.
|
|
282
|
+
const creditsRecords = records.filter((r) => (r === null || r === void 0 ? void 0 : r.program_name) === 'credits.aleo' &&
|
|
283
|
+
(r === null || r === void 0 ? void 0 : r.record_name) === 'credits' &&
|
|
284
|
+
typeof (r === null || r === void 0 ? void 0 : r.microcredits) === 'string');
|
|
285
|
+
if (creditsRecords.length > 0) {
|
|
286
|
+
const totalMicrocredits = creditsRecords.reduce((sum, r) => sum + BigInt(r.microcredits), BigInt(0));
|
|
287
|
+
// BigInt → number for the TokenBalance shape. Aleo balances stay well
|
|
288
|
+
// below Number.MAX_SAFE_INTEGER for a single wallet (max u64 supply is
|
|
289
|
+
// 1.5B credits = 1.5e15 microcredits; Number can hold up to ~9e15).
|
|
290
|
+
const rawBalance = Number(totalMicrocredits);
|
|
291
|
+
balances.push({
|
|
292
|
+
address: '0x0',
|
|
293
|
+
balance: rawBalance / MICROCREDITS_PER_CREDIT,
|
|
294
|
+
decimals: 6,
|
|
295
|
+
isNative: true,
|
|
296
|
+
logoURI: ALEO_CREDITS_LOGO,
|
|
297
|
+
name: 'Aleo Credits',
|
|
298
|
+
networkId: safeNetworkId,
|
|
299
|
+
rawBalance,
|
|
300
|
+
symbol: 'ALEO',
|
|
301
|
+
});
|
|
302
|
+
}
|
|
303
|
+
// Tier 3 + ARC-21: Token records. Each record matches at most one
|
|
304
|
+
// spec (stablecoin programs disambiguate by program; ARC-21 records
|
|
305
|
+
// share `token_registry.aleo / Token` and disambiguate by tokenId
|
|
306
|
+
// inside the plaintext). Sum the `amount` field per spec.
|
|
307
|
+
const sumsByContract = new Map();
|
|
308
|
+
const specsByContract = new Map();
|
|
309
|
+
for (const r of records) {
|
|
310
|
+
const spec = findTokenSpec(r);
|
|
311
|
+
if (!spec || typeof r.amount !== 'string')
|
|
312
|
+
continue;
|
|
313
|
+
try {
|
|
314
|
+
const prev = (_b = sumsByContract.get(spec.contractAddress)) !== null && _b !== void 0 ? _b : BigInt(0);
|
|
315
|
+
sumsByContract.set(spec.contractAddress, prev + BigInt(r.amount));
|
|
316
|
+
specsByContract.set(spec.contractAddress, spec);
|
|
317
|
+
}
|
|
318
|
+
catch (_d) {
|
|
319
|
+
/* ignore — malformed amount string */
|
|
320
|
+
}
|
|
321
|
+
}
|
|
322
|
+
for (const [contractAddress, total] of sumsByContract.entries()) {
|
|
323
|
+
const spec = specsByContract.get(contractAddress);
|
|
324
|
+
if (!spec)
|
|
325
|
+
continue;
|
|
326
|
+
const rawBalance = Number(total);
|
|
327
|
+
balances.push({
|
|
328
|
+
address: spec.contractAddress,
|
|
329
|
+
balance: rawBalance / Math.pow(10, spec.decimals),
|
|
330
|
+
decimals: spec.decimals,
|
|
331
|
+
// Use redcoast's `DEFAULT_TOKEN_LOGO_URI` for stablecoins + ARC-21
|
|
332
|
+
// so they render the same dark "?" icon the Unshielded tab shows
|
|
333
|
+
// for these tokens (the multichain endpoint applies that fallback
|
|
334
|
+
// itself; we mirror it here for visual parity).
|
|
335
|
+
logoURI: (_c = spec.logoURI) !== null && _c !== void 0 ? _c : UNKNOWN_TOKEN_LOGO,
|
|
336
|
+
name: spec.name,
|
|
337
|
+
networkId: safeNetworkId,
|
|
338
|
+
rawBalance,
|
|
339
|
+
symbol: spec.symbol,
|
|
340
|
+
});
|
|
341
|
+
}
|
|
342
|
+
setTokenBalances(balances);
|
|
343
|
+
}
|
|
344
|
+
catch (err) {
|
|
345
|
+
const msg = err instanceof Error ? err.message : String(err);
|
|
346
|
+
setError(msg);
|
|
347
|
+
setTokenBalances((prev) => (prev.length === 0 ? prev : []));
|
|
348
|
+
}
|
|
349
|
+
finally {
|
|
350
|
+
setIsLoading(false);
|
|
351
|
+
}
|
|
352
|
+
}), [connectorKey, networkKey, supportsShielded]);
|
|
353
|
+
React.useEffect(() => {
|
|
354
|
+
if (!supportsShielded) {
|
|
355
|
+
setTokenBalances((prev) => (prev.length === 0 ? prev : []));
|
|
356
|
+
return;
|
|
357
|
+
}
|
|
358
|
+
fetchShielded().catch(() => {
|
|
359
|
+
// fetchShielded already records the error in component state;
|
|
360
|
+
// the .catch keeps the fire-and-forget shape lint-clean.
|
|
361
|
+
});
|
|
362
|
+
}, [supportsShielded, fetchShielded]);
|
|
363
|
+
return {
|
|
364
|
+
error,
|
|
365
|
+
isLoading,
|
|
366
|
+
refetch: fetchShielded,
|
|
367
|
+
supportsShielded,
|
|
368
|
+
tokenBalances,
|
|
369
|
+
};
|
|
370
|
+
};
|
|
371
|
+
|
|
372
|
+
exports.useAleoShieldedBalances = useAleoShieldedBalances;
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { TokenBalance } from '@dynamic-labs/sdk-api-core';
|
|
2
|
+
/**
|
|
3
|
+
* Hook that returns the active wallet's shielded (private) Aleo token
|
|
4
|
+
* balances as a `TokenBalance[]` so the widget can render them through the
|
|
5
|
+
* same TokenBalanceList path it uses for unshielded balances.
|
|
6
|
+
*
|
|
7
|
+
* - Records come from the iframe via `connector.listOwnedRecords()` (the
|
|
8
|
+
* Provable RecordScanner; view key never leaves the iframe).
|
|
9
|
+
* - Aggregates `credits.aleo/credits` (sum `microcredits` → ALEO) plus any
|
|
10
|
+
* tier-3 stablecoin Token records (sum `amount` per program → USAD/USDCx).
|
|
11
|
+
* ARC-21 multi-token grouped-by-`token_id` is Phase 2B.
|
|
12
|
+
*
|
|
13
|
+
* Returns an empty list when:
|
|
14
|
+
* - The wallet isn't Aleo
|
|
15
|
+
* - The connector doesn't expose `listOwnedRecords` (e.g. external Aleo wallet)
|
|
16
|
+
* - The user owns no records that match a known program/record pair
|
|
17
|
+
*/
|
|
18
|
+
export declare const useAleoShieldedBalances: () => {
|
|
19
|
+
tokenBalances: TokenBalance[];
|
|
20
|
+
isLoading: boolean;
|
|
21
|
+
error: string | undefined;
|
|
22
|
+
refetch: () => Promise<void>;
|
|
23
|
+
supportsShielded: boolean;
|
|
24
|
+
};
|