@dynamic-labs/sdk-react-core 4.91.3 → 4.91.4
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 +8 -0
- package/package.cjs +1 -1
- package/package.js +1 -1
- package/package.json +12 -12
- package/src/lib/client/client.cjs +1 -1
- package/src/lib/client/client.js +1 -1
- package/src/lib/components/TransactionConfirmationPageLayout/TransactionConfirmationPageLayout.cjs +4 -1
- package/src/lib/components/TransactionConfirmationPageLayout/TransactionConfirmationPageLayout.js +4 -1
- package/src/lib/components/TransactionStatusLayout/TransactionStatusLayout.cjs +3 -0
- package/src/lib/components/TransactionStatusLayout/TransactionStatusLayout.js +3 -0
- package/src/lib/context/DynamicContext/hooks/useRemoveWallet/useRemoveWallet.cjs +1 -1
- package/src/lib/context/DynamicContext/hooks/useRemoveWallet/useRemoveWallet.js +1 -1
- package/src/lib/context/DynamicContext/types/SettingsOverrides.d.ts +13 -1
- package/src/lib/context/OnrampContext/OnrampContext.cjs +1 -1
- package/src/lib/context/OnrampContext/OnrampContext.js +1 -1
- package/src/lib/context/SendBalanceContext/SendBalanceContext.errors.cjs +2 -2
- package/src/lib/context/SendBalanceContext/SendBalanceContext.errors.js +2 -2
- package/src/lib/context/SocialRedirectContext/hooks/useRedirectSocialHandler/useRedirectSocialHandler.cjs +3 -3
- package/src/lib/context/SocialRedirectContext/hooks/useRedirectSocialHandler/useRedirectSocialHandler.js +3 -3
- package/src/lib/data/api/email/email.cjs +6 -3
- package/src/lib/data/api/email/email.js +6 -3
- package/src/lib/data/api/embeddedWallets/embeddedWallets.cjs +5 -5
- package/src/lib/data/api/embeddedWallets/embeddedWallets.js +5 -5
- package/src/lib/data/api/exchangeAccounts/exchangeAccounts.cjs +3 -3
- package/src/lib/data/api/exchangeAccounts/exchangeAccounts.js +3 -3
- package/src/lib/data/api/oauth/oauth.cjs +3 -2
- package/src/lib/data/api/oauth/oauth.js +3 -2
- package/src/lib/data/api/session/session.cjs +3 -3
- package/src/lib/data/api/session/session.js +3 -3
- package/src/lib/data/api/sms/sms.cjs +4 -1
- package/src/lib/data/api/sms/sms.js +4 -1
- package/src/lib/data/api/user/user.cjs +4 -4
- package/src/lib/data/api/user/user.js +4 -4
- package/src/lib/data/api/wallets/wallets.cjs +15 -13
- package/src/lib/data/api/wallets/wallets.js +15 -13
- package/src/lib/store/state/nonce/nonce.cjs +1 -1
- package/src/lib/store/state/nonce/nonce.js +1 -1
- package/src/lib/utils/functions/generateMessages/index.cjs +3 -3
- package/src/lib/utils/functions/generateMessages/index.js +3 -3
- package/src/lib/utils/functions/getEmbeddedWalletAuthHandler/getEmbeddedWalletAuthHandler.cjs +1 -1
- package/src/lib/utils/functions/getEmbeddedWalletAuthHandler/getEmbeddedWalletAuthHandler.js +1 -1
- package/src/lib/utils/functions/getTransactionLink/blockExplorerPatterns.cjs +30 -0
- package/src/lib/utils/functions/getTransactionLink/blockExplorerPatterns.d.ts +17 -0
- package/src/lib/utils/functions/getTransactionLink/blockExplorerPatterns.js +29 -1
- package/src/lib/utils/functions/getTransactionLink/getTransactionLink.cjs +13 -1
- package/src/lib/utils/functions/getTransactionLink/getTransactionLink.d.ts +2 -1
- package/src/lib/utils/functions/getTransactionLink/getTransactionLink.js +14 -2
- package/src/lib/utils/hooks/authenticationHooks/useOtpVerificationRequest/useOtpVerificationRequest.cjs +2 -2
- package/src/lib/utils/hooks/authenticationHooks/useOtpVerificationRequest/useOtpVerificationRequest.js +2 -2
- package/src/lib/utils/hooks/useAuthenticateConnectedUser/useAuthenticateConnectedUser.cjs +2 -2
- package/src/lib/utils/hooks/useAuthenticateConnectedUser/useAuthenticateConnectedUser.js +2 -2
- package/src/lib/utils/hooks/useConfirmationPortal/useConfirmationPortal.cjs +1 -1
- package/src/lib/utils/hooks/useConfirmationPortal/useConfirmationPortal.js +1 -1
- package/src/lib/utils/hooks/useConnectExchangeForFunding/useConnectExchangeForFunding.cjs +1 -1
- package/src/lib/utils/hooks/useConnectExchangeForFunding/useConnectExchangeForFunding.js +1 -1
- package/src/lib/utils/hooks/useConnectUnifiedForFunding/useConnectUnifiedForFunding.cjs +2 -2
- package/src/lib/utils/hooks/useConnectUnifiedForFunding/useConnectUnifiedForFunding.js +2 -2
- package/src/lib/utils/hooks/useConnectWallet/HandleConnectWalletRejectionError.cjs +1 -1
- package/src/lib/utils/hooks/useConnectWallet/HandleConnectWalletRejectionError.js +1 -1
- package/src/lib/utils/hooks/useCreateDynamicEmbeddedWalletMutation/useCreateDynamicEmbeddedWalletMutation.cjs +1 -1
- package/src/lib/utils/hooks/useCreateDynamicEmbeddedWalletMutation/useCreateDynamicEmbeddedWalletMutation.js +1 -1
- package/src/lib/utils/hooks/useCreateWalletConnectorOptions/utils/errors/ConnectorSetupError.cjs +1 -1
- package/src/lib/utils/hooks/useCreateWalletConnectorOptions/utils/errors/ConnectorSetupError.js +1 -1
- package/src/lib/utils/hooks/useDynamicWaas/useDynamicWaas.cjs +8 -8
- package/src/lib/utils/hooks/useDynamicWaas/useDynamicWaas.js +8 -8
- package/src/lib/utils/hooks/useEmbeddedWallet/useEmbeddedWallet.cjs +4 -4
- package/src/lib/utils/hooks/useEmbeddedWallet/useEmbeddedWallet.js +4 -4
- package/src/lib/utils/hooks/useEmbeddedWallet/useSecureEnclaveEmbeddedWallet/useSecureEnclaveEmbeddedWallet.cjs +9 -9
- package/src/lib/utils/hooks/useEmbeddedWallet/useSecureEnclaveEmbeddedWallet/useSecureEnclaveEmbeddedWallet.js +9 -9
- package/src/lib/utils/hooks/useFundWithWallet/useConnectWalletForFunding/useConnectWalletForFunding.cjs +2 -2
- package/src/lib/utils/hooks/useFundWithWallet/useConnectWalletForFunding/useConnectWalletForFunding.js +2 -2
- package/src/lib/utils/hooks/useFundingHelpers/useFundingHelpers.cjs +2 -2
- package/src/lib/utils/hooks/useFundingHelpers/useFundingHelpers.js +2 -2
- package/src/lib/utils/hooks/useGetMfaToken/useGetMfaToken.cjs +1 -1
- package/src/lib/utils/hooks/useGetMfaToken/useGetMfaToken.js +1 -1
- package/src/lib/utils/hooks/useSignEip7702Authorization/useSignEip7702Authorization.cjs +2 -2
- package/src/lib/utils/hooks/useSignEip7702Authorization/useSignEip7702Authorization.js +2 -2
- package/src/lib/utils/hooks/useSocialAuth/useSocialAuth.cjs +2 -2
- package/src/lib/utils/hooks/useSocialAuth/useSocialAuth.js +2 -2
- package/src/lib/utils/hooks/useTransferWallet/useTransferWallet.cjs +2 -2
- package/src/lib/utils/hooks/useTransferWallet/useTransferWallet.js +2 -2
- package/src/lib/utils/hooks/useUpgradeEmbeddedWallet/useUpgradeEmbeddedWallet.cjs +3 -3
- package/src/lib/utils/hooks/useUpgradeEmbeddedWallet/useUpgradeEmbeddedWallet.js +3 -3
- package/src/lib/utils/hooks/useUserAuth/useUserAuth.cjs +1 -1
- package/src/lib/utils/hooks/useUserAuth/useUserAuth.js +1 -1
- package/src/lib/utils/hooks/useUserDataForm/useUserDataForm.cjs +1 -1
- package/src/lib/utils/hooks/useUserDataForm/useUserDataForm.js +1 -1
- package/src/lib/utils/hooks/useUserUpdateRequest/unlinkUserEmail/unlinkUserEmail.cjs +3 -3
- package/src/lib/utils/hooks/useUserUpdateRequest/unlinkUserEmail/unlinkUserEmail.js +3 -3
- package/src/lib/utils/hooks/useUserUpdateRequest/useUpdateUserWithModal/useUpdateUserWithModal.cjs +1 -1
- package/src/lib/utils/hooks/useUserUpdateRequest/useUpdateUserWithModal/useUpdateUserWithModal.js +1 -1
- package/src/lib/utils/hooks/useVerifyWallet/useVerifyWallet.cjs +2 -2
- package/src/lib/utils/hooks/useVerifyWallet/useVerifyWallet.js +2 -2
- package/src/lib/utils/hooks/useViewSettings/useViewSettings.d.ts +5 -1
- package/src/lib/utils/hooks/useWalletConnectors/useWalletConnectors.cjs +1 -1
- package/src/lib/utils/hooks/useWalletConnectors/useWalletConnectors.js +1 -1
- package/src/lib/utils/hooks/useWalletOptions/useWalletOptions.cjs +1 -1
- package/src/lib/utils/hooks/useWalletOptions/useWalletOptions.js +1 -1
- package/src/lib/views/BridgeNextWalletConnectionView/BridgeNextWalletConnectionView.cjs +1 -1
- package/src/lib/views/BridgeNextWalletConnectionView/BridgeNextWalletConnectionView.js +1 -1
- package/src/lib/views/EmbeddedReveal/utils/turnkeyExport/turnkeyExport.cjs +2 -2
- package/src/lib/views/EmbeddedReveal/utils/turnkeyExport/turnkeyExport.js +2 -2
- package/src/lib/views/EmbeddedReveal/utils/waasExport/waasExport.cjs +2 -2
- package/src/lib/views/EmbeddedReveal/utils/waasExport/waasExport.js +2 -2
- package/src/lib/views/ExportSharesView/ExportSharesView.cjs +2 -2
- package/src/lib/views/ExportSharesView/ExportSharesView.js +2 -2
- package/src/lib/views/LoginView/useLoginView/useLoginView.cjs +1 -1
- package/src/lib/views/LoginView/useLoginView/useLoginView.js +1 -1
- package/src/lib/views/MergeUserAccountsWithSameEmailView/MergeUserAccountsWithSameEmailView.cjs +1 -1
- package/src/lib/views/MergeUserAccountsWithSameEmailView/MergeUserAccountsWithSameEmailView.js +1 -1
- package/src/lib/views/MfaVerificationView/MfaVerificationView.cjs +2 -2
- package/src/lib/views/MfaVerificationView/MfaVerificationView.js +2 -2
- package/src/lib/views/Passkey/PasskeyRecovery/BundleValidation/PasskeyBundleRecovery.cjs +1 -1
- package/src/lib/views/Passkey/PasskeyRecovery/BundleValidation/PasskeyBundleRecovery.js +1 -1
- package/src/lib/views/Passkey/PasskeyRecovery/CompleteRecovery/PasskeyCompleteRecovery.cjs +1 -1
- package/src/lib/views/Passkey/PasskeyRecovery/CompleteRecovery/PasskeyCompleteRecovery.js +1 -1
- package/src/lib/views/Passkey/utils/createEmbeddedWalletRequest/createEmbeddedWalletRequest.cjs +3 -3
- package/src/lib/views/Passkey/utils/createEmbeddedWalletRequest/createEmbeddedWalletRequest.js +3 -3
- package/src/lib/views/Passkey/utils/passkeyRecovery/passkeyRecovery.cjs +14 -14
- package/src/lib/views/Passkey/utils/passkeyRecovery/passkeyRecovery.js +14 -14
- package/src/lib/views/SendBalanceView/SendBalanceView.cjs +2 -2
- package/src/lib/views/SendBalanceView/SendBalanceView.js +2 -2
- package/src/lib/views/WalletDelegation/WalletDelegationView/WalletDelegationView.cjs +1 -1
- package/src/lib/views/WalletDelegation/WalletDelegationView/WalletDelegationView.js +1 -1
- package/src/lib/views/WalletUpgradeFlowView/WalletUpgradeFlowView.cjs +1 -1
- package/src/lib/views/WalletUpgradeFlowView/WalletUpgradeFlowView.js +1 -1
- package/src/lib/widgets/DynamicWidget/views/ChooseWalletFundingMethod/useFundingMethods/getPromptAmountParams/getPromptAmountParams.cjs +1 -1
- package/src/lib/widgets/DynamicWidget/views/ChooseWalletFundingMethod/useFundingMethods/getPromptAmountParams/getPromptAmountParams.js +1 -1
- package/src/lib/widgets/DynamicWidget/views/ReceiveWalletFunds/utils/useSubmitWalletFunding/useSubmitWalletFunding.cjs +10 -1
- package/src/lib/widgets/DynamicWidget/views/ReceiveWalletFunds/utils/useSubmitWalletFunding/useSubmitWalletFunding.js +10 -1
|
@@ -8,21 +8,21 @@ import { logResponseError } from '../utils.js';
|
|
|
8
8
|
const mapChainToChainEnum = (chain) => {
|
|
9
9
|
const foundChain = Object.values(ChainEnum).find((value) => value === chain);
|
|
10
10
|
if (!foundChain) {
|
|
11
|
-
throw new DynamicError(`Invalid chain ${chain}
|
|
11
|
+
throw new DynamicError(`Invalid chain ${chain}`, 'invalid_chain');
|
|
12
12
|
}
|
|
13
13
|
return foundChain;
|
|
14
14
|
};
|
|
15
15
|
const mapProviderToProviderEnum = (provider) => {
|
|
16
16
|
const foundProvider = Object.values(WalletProviderEnum).find((value) => value === provider);
|
|
17
17
|
if (!foundProvider) {
|
|
18
|
-
throw new DynamicError(`Invalid provider ${provider}
|
|
18
|
+
throw new DynamicError(`Invalid provider ${provider}`, 'invalid_provider');
|
|
19
19
|
}
|
|
20
20
|
return foundProvider;
|
|
21
21
|
};
|
|
22
22
|
const mapAuthModeToEnum = (authMode) => {
|
|
23
23
|
const found = Object.values(AuthModeEnum).find((value) => value === authMode);
|
|
24
24
|
if (!found) {
|
|
25
|
-
throw new DynamicError(`Invalid authMode ${authMode}
|
|
25
|
+
throw new DynamicError(`Invalid authMode ${authMode}`, 'invalid_auth_mode');
|
|
26
26
|
}
|
|
27
27
|
return found;
|
|
28
28
|
};
|
|
@@ -58,7 +58,10 @@ const signInWithSmsVerification = (_b) => _tslib.__awaiter(void 0, [_b], void 0,
|
|
|
58
58
|
throw new utils$1.DynamicError(data.error, utils$1.ErrorCode.CREDENTIAL_NOT_ENABLED_FOR_SIGN_IN);
|
|
59
59
|
}
|
|
60
60
|
if (((_c = data.error) === null || _c === void 0 ? void 0 : _c.code) === 'missing_from_list') {
|
|
61
|
-
throw new utils$1.NoAccessError({
|
|
61
|
+
throw new utils$1.NoAccessError({
|
|
62
|
+
code: data.error.code,
|
|
63
|
+
phoneNumber: data.payload.phoneNumber,
|
|
64
|
+
});
|
|
62
65
|
}
|
|
63
66
|
if (data.code === 'wrong_sms_verification_token') {
|
|
64
67
|
throw new utils$1.SmsVerificationError(locale.Locale.getInstance().t('dyn_login.helper.phone_number_form.invalid_sms_verification'), data.code);
|
|
@@ -54,7 +54,10 @@ const signInWithSmsVerification = (_b) => __awaiter(void 0, [_b], void 0, functi
|
|
|
54
54
|
throw new DynamicError(data.error, ErrorCode.CREDENTIAL_NOT_ENABLED_FOR_SIGN_IN);
|
|
55
55
|
}
|
|
56
56
|
if (((_c = data.error) === null || _c === void 0 ? void 0 : _c.code) === 'missing_from_list') {
|
|
57
|
-
throw new NoAccessError({
|
|
57
|
+
throw new NoAccessError({
|
|
58
|
+
code: data.error.code,
|
|
59
|
+
phoneNumber: data.payload.phoneNumber,
|
|
60
|
+
});
|
|
58
61
|
}
|
|
59
62
|
if (data.code === 'wrong_sms_verification_token') {
|
|
60
63
|
throw new SmsVerificationError(Locale.getInstance().t('dyn_login.helper.phone_number_form.invalid_sms_verification'), data.code);
|
|
@@ -48,20 +48,20 @@ const updateUserProfileFields = (environmentId, fields) => _tslib.__awaiter(void
|
|
|
48
48
|
const error = yield utils.logResponseError(e, 'Error updateUserProfileFields');
|
|
49
49
|
if (utils.isResponseLike(e)) {
|
|
50
50
|
if (error.code === 'email_already_exists') {
|
|
51
|
-
throw new utils$1.EmailAlreadyExistsError();
|
|
51
|
+
throw new utils$1.EmailAlreadyExistsError(error.error, error.code);
|
|
52
52
|
}
|
|
53
53
|
else if (error.code === 'custom_field_data_not_unique') {
|
|
54
54
|
throw new utils$1.CustomFieldNotUniqueError();
|
|
55
55
|
}
|
|
56
56
|
else if (error.code === 'username_already_exists') {
|
|
57
|
-
throw new utils$1.UsernameAlreadyExistsError();
|
|
57
|
+
throw new utils$1.UsernameAlreadyExistsError(error.error, error.code);
|
|
58
58
|
}
|
|
59
59
|
else if (error.code === 'too_many_verification_attempts') {
|
|
60
|
-
throw new utils$1.TooManyEmailVerificationsError();
|
|
60
|
+
throw new utils$1.TooManyEmailVerificationsError(error.error, error.code);
|
|
61
61
|
}
|
|
62
62
|
else if (error.code === 'invalid_phone' ||
|
|
63
63
|
error.code === 'invalid_sms_verification') {
|
|
64
|
-
throw new utils$1.InvalidPhoneNumberError(error.error);
|
|
64
|
+
throw new utils$1.InvalidPhoneNumberError(error.error, error.code);
|
|
65
65
|
}
|
|
66
66
|
}
|
|
67
67
|
throw e;
|
|
@@ -44,20 +44,20 @@ const updateUserProfileFields = (environmentId, fields) => __awaiter(void 0, voi
|
|
|
44
44
|
const error = yield logResponseError(e, 'Error updateUserProfileFields');
|
|
45
45
|
if (isResponseLike(e)) {
|
|
46
46
|
if (error.code === 'email_already_exists') {
|
|
47
|
-
throw new EmailAlreadyExistsError();
|
|
47
|
+
throw new EmailAlreadyExistsError(error.error, error.code);
|
|
48
48
|
}
|
|
49
49
|
else if (error.code === 'custom_field_data_not_unique') {
|
|
50
50
|
throw new CustomFieldNotUniqueError();
|
|
51
51
|
}
|
|
52
52
|
else if (error.code === 'username_already_exists') {
|
|
53
|
-
throw new UsernameAlreadyExistsError();
|
|
53
|
+
throw new UsernameAlreadyExistsError(error.error, error.code);
|
|
54
54
|
}
|
|
55
55
|
else if (error.code === 'too_many_verification_attempts') {
|
|
56
|
-
throw new TooManyEmailVerificationsError();
|
|
56
|
+
throw new TooManyEmailVerificationsError(error.error, error.code);
|
|
57
57
|
}
|
|
58
58
|
else if (error.code === 'invalid_phone' ||
|
|
59
59
|
error.code === 'invalid_sms_verification') {
|
|
60
|
-
throw new InvalidPhoneNumberError(error.error);
|
|
60
|
+
throw new InvalidPhoneNumberError(error.error, error.code);
|
|
61
61
|
}
|
|
62
62
|
}
|
|
63
63
|
throw e;
|
|
@@ -47,7 +47,7 @@ const storeSelectedWallet = (_a) => _tslib.__awaiter(void 0, [_a], void 0, funct
|
|
|
47
47
|
}
|
|
48
48
|
catch (e) {
|
|
49
49
|
const data = yield utils.logResponseError(e, 'Error transfering wallet');
|
|
50
|
-
throw new utils$1.DynamicError(data.error);
|
|
50
|
+
throw new utils$1.DynamicError(data.error, data.code);
|
|
51
51
|
}
|
|
52
52
|
});
|
|
53
53
|
const linkWallet = (environmentId_1, _b) => _tslib.__awaiter(void 0, [environmentId_1, _b], void 0, function* (environmentId, { messageToSign, network, signedMessage, publicWalletAddress, chain, walletName, walletProvider, additionalWalletAddresses, backup, }) {
|
|
@@ -97,7 +97,7 @@ const linkWallet = (environmentId_1, _b) => _tslib.__awaiter(void 0, [environmen
|
|
|
97
97
|
if (((_c = data.error) === null || _c === void 0 ? void 0 : _c.code) === 'sandbox_maximum_threshold_reached') {
|
|
98
98
|
throw new utils$1.SandboxMaximumThresholdReachedError(data.error.message);
|
|
99
99
|
}
|
|
100
|
-
throw new utils$1.DynamicError(data.error);
|
|
100
|
+
throw new utils$1.DynamicError(data.error, data.code);
|
|
101
101
|
}
|
|
102
102
|
});
|
|
103
103
|
const unlinkWallet = (_d) => _tslib.__awaiter(void 0, [_d], void 0, function* ({ environmentId, primaryWalletId, walletId, onSuccess, }) {
|
|
@@ -124,7 +124,7 @@ const unlinkWallet = (_d) => _tslib.__awaiter(void 0, [_d], void 0, function* ({
|
|
|
124
124
|
}
|
|
125
125
|
catch (e) {
|
|
126
126
|
const data = yield utils.logResponseError(e, 'Error transfering wallet');
|
|
127
|
-
throw new utils$1.DynamicError(data.error);
|
|
127
|
+
throw new utils$1.DynamicError(data.error, data.code);
|
|
128
128
|
}
|
|
129
129
|
});
|
|
130
130
|
const transferWallet = (environmentId_2, _e) => _tslib.__awaiter(void 0, [environmentId_2, _e], void 0, function* (environmentId, { network, messageToSign, signedMessage, publicWalletAddress, chain, walletName, walletProvider, skipEmptyAccountCheck = false, }) {
|
|
@@ -149,7 +149,7 @@ const transferWallet = (environmentId_2, _e) => _tslib.__awaiter(void 0, [enviro
|
|
|
149
149
|
}
|
|
150
150
|
catch (e) {
|
|
151
151
|
const data = yield utils.logResponseError(e, 'Error transfering wallet');
|
|
152
|
-
throw new utils$1.DynamicError(data.error);
|
|
152
|
+
throw new utils$1.DynamicError(data.error, data.code);
|
|
153
153
|
}
|
|
154
154
|
});
|
|
155
155
|
const verifyWallet = (environmentId_3, _f) => _tslib.__awaiter(void 0, [environmentId_3, _f], void 0, function* (environmentId, { messageToSign, signedMessage, publicWalletAddress, chain, walletName, walletProvider, captchaToken, network, oauth, additionalWalletAddresses, sessionPublicKey, }) {
|
|
@@ -180,13 +180,14 @@ const verifyWallet = (environmentId_3, _f) => _tslib.__awaiter(void 0, [environm
|
|
|
180
180
|
throw new utils$1.WalletNotDeployedError();
|
|
181
181
|
}
|
|
182
182
|
if (((_g = data.error) === null || _g === void 0 ? void 0 : _g.code) === 'chainalysis_blocked_wallet') {
|
|
183
|
-
throw new utils$1.ChainalysisError(data.payload.walletPublicKey);
|
|
183
|
+
throw new utils$1.ChainalysisError(data.payload.walletPublicKey, data.error.code);
|
|
184
184
|
}
|
|
185
185
|
if (((_h = data.error) === null || _h === void 0 ? void 0 : _h.code) === 'gate_blocked') {
|
|
186
186
|
throw new utils$1.GateBlockedError(data.payload.walletPublicKey);
|
|
187
187
|
}
|
|
188
188
|
if (((_j = data.error) === null || _j === void 0 ? void 0 : _j.code) === 'missing_from_list') {
|
|
189
189
|
throw new utils$1.NoAccessError({
|
|
190
|
+
code: data.error.code,
|
|
190
191
|
walletPublicKey: data.payload.walletPublicKey,
|
|
191
192
|
});
|
|
192
193
|
}
|
|
@@ -194,12 +195,12 @@ const verifyWallet = (environmentId_3, _f) => _tslib.__awaiter(void 0, [environm
|
|
|
194
195
|
throw new utils$1.DynamicError(data.error, utils$1.ErrorCode.CREDENTIAL_NOT_ENABLED_FOR_SIGN_IN);
|
|
195
196
|
}
|
|
196
197
|
if (data.code === 'email_associated_with_different_provider') {
|
|
197
|
-
throw new utils$1.AccountExistsError(data.error, data.payload);
|
|
198
|
+
throw new utils$1.AccountExistsError(data.error, data.payload, data.code);
|
|
198
199
|
}
|
|
199
200
|
if (((_k = data.error) === null || _k === void 0 ? void 0 : _k.code) === 'sandbox_maximum_threshold_reached') {
|
|
200
201
|
throw new utils$1.SandboxMaximumThresholdReachedError(data.error.message);
|
|
201
202
|
}
|
|
202
|
-
throw new utils$1.DynamicError(data.error);
|
|
203
|
+
throw new utils$1.DynamicError(data.error, data.code);
|
|
203
204
|
}
|
|
204
205
|
});
|
|
205
206
|
const walletsVerify = (environmentId_4, _l) => _tslib.__awaiter(void 0, [environmentId_4, _l], void 0, function* (environmentId, { messageToSign, signedMessage, publicWalletAddress, chain, walletName, walletProvider, captchaToken, network, oauth, requestedScopes, additionalWalletAddresses, sessionPublicKey, }) {
|
|
@@ -231,13 +232,14 @@ const walletsVerify = (environmentId_4, _l) => _tslib.__awaiter(void 0, [environ
|
|
|
231
232
|
throw new utils$1.WalletNotDeployedError();
|
|
232
233
|
}
|
|
233
234
|
if (((_m = data.error) === null || _m === void 0 ? void 0 : _m.code) === 'chainalysis_blocked_wallet') {
|
|
234
|
-
throw new utils$1.ChainalysisError(data.payload.walletPublicKey);
|
|
235
|
+
throw new utils$1.ChainalysisError(data.payload.walletPublicKey, data.error.code);
|
|
235
236
|
}
|
|
236
237
|
if (((_o = data.error) === null || _o === void 0 ? void 0 : _o.code) === 'gate_blocked') {
|
|
237
238
|
throw new utils$1.GateBlockedError(data.payload.walletPublicKey);
|
|
238
239
|
}
|
|
239
240
|
if (((_p = data.error) === null || _p === void 0 ? void 0 : _p.code) === 'missing_from_list') {
|
|
240
241
|
throw new utils$1.NoAccessError({
|
|
242
|
+
code: data.error.code,
|
|
241
243
|
walletPublicKey: data.payload.walletPublicKey,
|
|
242
244
|
});
|
|
243
245
|
}
|
|
@@ -245,12 +247,12 @@ const walletsVerify = (environmentId_4, _l) => _tslib.__awaiter(void 0, [environ
|
|
|
245
247
|
throw new utils$1.DynamicError(data.error, utils$1.ErrorCode.CREDENTIAL_NOT_ENABLED_FOR_SIGN_IN);
|
|
246
248
|
}
|
|
247
249
|
if (data.code === 'email_associated_with_different_provider') {
|
|
248
|
-
throw new utils$1.AccountExistsError(data.error, data.payload);
|
|
250
|
+
throw new utils$1.AccountExistsError(data.error, data.payload, data.code);
|
|
249
251
|
}
|
|
250
252
|
if (((_q = data.error) === null || _q === void 0 ? void 0 : _q.code) === 'sandbox_maximum_threshold_reached') {
|
|
251
253
|
throw new utils$1.SandboxMaximumThresholdReachedError(data.error.message);
|
|
252
254
|
}
|
|
253
|
-
throw new utils$1.DynamicError(data.error);
|
|
255
|
+
throw new utils$1.DynamicError(data.error, data.code);
|
|
254
256
|
}
|
|
255
257
|
});
|
|
256
258
|
const upgradeEmbeddedWalletToV2 = (_r) => _tslib.__awaiter(void 0, [_r], void 0, function* ({ environmentId, sessionPublicKey, }) {
|
|
@@ -263,7 +265,7 @@ const upgradeEmbeddedWalletToV2 = (_r) => _tslib.__awaiter(void 0, [_r], void 0,
|
|
|
263
265
|
}
|
|
264
266
|
catch (e) {
|
|
265
267
|
const data = yield utils.logResponseError(e, 'Error upgradeEmbeddedWalletToV2');
|
|
266
|
-
throw new utils$1.DynamicError(data.error);
|
|
268
|
+
throw new utils$1.DynamicError(data.error, data.code);
|
|
267
269
|
}
|
|
268
270
|
});
|
|
269
271
|
const softDeleteEmbeddedWallet = (_s) => _tslib.__awaiter(void 0, [_s], void 0, function* ({ environmentId, walletId, }) {
|
|
@@ -275,7 +277,7 @@ const softDeleteEmbeddedWallet = (_s) => _tslib.__awaiter(void 0, [_s], void 0,
|
|
|
275
277
|
}
|
|
276
278
|
catch (e) {
|
|
277
279
|
const data = yield utils.logResponseError(e, `Error softDeleteEmbeddedWallet for ${walletId} in ${environmentId}`);
|
|
278
|
-
throw new utils$1.DynamicError(data.error);
|
|
280
|
+
throw new utils$1.DynamicError(data.error, data.code);
|
|
279
281
|
}
|
|
280
282
|
});
|
|
281
283
|
const restoreEmbeddedWallet = (_t) => _tslib.__awaiter(void 0, [_t], void 0, function* ({ environmentId, walletId, }) {
|
|
@@ -287,7 +289,7 @@ const restoreEmbeddedWallet = (_t) => _tslib.__awaiter(void 0, [_t], void 0, fun
|
|
|
287
289
|
}
|
|
288
290
|
catch (e) {
|
|
289
291
|
const data = yield utils.logResponseError(e, `Error restoreEmbeddedWallet for ${walletId} in ${environmentId}`);
|
|
290
|
-
throw new utils$1.DynamicError(data.error);
|
|
292
|
+
throw new utils$1.DynamicError(data.error, data.code);
|
|
291
293
|
}
|
|
292
294
|
});
|
|
293
295
|
|
|
@@ -43,7 +43,7 @@ const storeSelectedWallet = (_a) => __awaiter(void 0, [_a], void 0, function* ({
|
|
|
43
43
|
}
|
|
44
44
|
catch (e) {
|
|
45
45
|
const data = yield logResponseError(e, 'Error transfering wallet');
|
|
46
|
-
throw new DynamicError(data.error);
|
|
46
|
+
throw new DynamicError(data.error, data.code);
|
|
47
47
|
}
|
|
48
48
|
});
|
|
49
49
|
const linkWallet = (environmentId_1, _b) => __awaiter(void 0, [environmentId_1, _b], void 0, function* (environmentId, { messageToSign, network, signedMessage, publicWalletAddress, chain, walletName, walletProvider, additionalWalletAddresses, backup, }) {
|
|
@@ -93,7 +93,7 @@ const linkWallet = (environmentId_1, _b) => __awaiter(void 0, [environmentId_1,
|
|
|
93
93
|
if (((_c = data.error) === null || _c === void 0 ? void 0 : _c.code) === 'sandbox_maximum_threshold_reached') {
|
|
94
94
|
throw new SandboxMaximumThresholdReachedError(data.error.message);
|
|
95
95
|
}
|
|
96
|
-
throw new DynamicError(data.error);
|
|
96
|
+
throw new DynamicError(data.error, data.code);
|
|
97
97
|
}
|
|
98
98
|
});
|
|
99
99
|
const unlinkWallet = (_d) => __awaiter(void 0, [_d], void 0, function* ({ environmentId, primaryWalletId, walletId, onSuccess, }) {
|
|
@@ -120,7 +120,7 @@ const unlinkWallet = (_d) => __awaiter(void 0, [_d], void 0, function* ({ enviro
|
|
|
120
120
|
}
|
|
121
121
|
catch (e) {
|
|
122
122
|
const data = yield logResponseError(e, 'Error transfering wallet');
|
|
123
|
-
throw new DynamicError(data.error);
|
|
123
|
+
throw new DynamicError(data.error, data.code);
|
|
124
124
|
}
|
|
125
125
|
});
|
|
126
126
|
const transferWallet = (environmentId_2, _e) => __awaiter(void 0, [environmentId_2, _e], void 0, function* (environmentId, { network, messageToSign, signedMessage, publicWalletAddress, chain, walletName, walletProvider, skipEmptyAccountCheck = false, }) {
|
|
@@ -145,7 +145,7 @@ const transferWallet = (environmentId_2, _e) => __awaiter(void 0, [environmentId
|
|
|
145
145
|
}
|
|
146
146
|
catch (e) {
|
|
147
147
|
const data = yield logResponseError(e, 'Error transfering wallet');
|
|
148
|
-
throw new DynamicError(data.error);
|
|
148
|
+
throw new DynamicError(data.error, data.code);
|
|
149
149
|
}
|
|
150
150
|
});
|
|
151
151
|
const verifyWallet = (environmentId_3, _f) => __awaiter(void 0, [environmentId_3, _f], void 0, function* (environmentId, { messageToSign, signedMessage, publicWalletAddress, chain, walletName, walletProvider, captchaToken, network, oauth, additionalWalletAddresses, sessionPublicKey, }) {
|
|
@@ -176,13 +176,14 @@ const verifyWallet = (environmentId_3, _f) => __awaiter(void 0, [environmentId_3
|
|
|
176
176
|
throw new WalletNotDeployedError();
|
|
177
177
|
}
|
|
178
178
|
if (((_g = data.error) === null || _g === void 0 ? void 0 : _g.code) === 'chainalysis_blocked_wallet') {
|
|
179
|
-
throw new ChainalysisError(data.payload.walletPublicKey);
|
|
179
|
+
throw new ChainalysisError(data.payload.walletPublicKey, data.error.code);
|
|
180
180
|
}
|
|
181
181
|
if (((_h = data.error) === null || _h === void 0 ? void 0 : _h.code) === 'gate_blocked') {
|
|
182
182
|
throw new GateBlockedError(data.payload.walletPublicKey);
|
|
183
183
|
}
|
|
184
184
|
if (((_j = data.error) === null || _j === void 0 ? void 0 : _j.code) === 'missing_from_list') {
|
|
185
185
|
throw new NoAccessError({
|
|
186
|
+
code: data.error.code,
|
|
186
187
|
walletPublicKey: data.payload.walletPublicKey,
|
|
187
188
|
});
|
|
188
189
|
}
|
|
@@ -190,12 +191,12 @@ const verifyWallet = (environmentId_3, _f) => __awaiter(void 0, [environmentId_3
|
|
|
190
191
|
throw new DynamicError(data.error, ErrorCode.CREDENTIAL_NOT_ENABLED_FOR_SIGN_IN);
|
|
191
192
|
}
|
|
192
193
|
if (data.code === 'email_associated_with_different_provider') {
|
|
193
|
-
throw new AccountExistsError(data.error, data.payload);
|
|
194
|
+
throw new AccountExistsError(data.error, data.payload, data.code);
|
|
194
195
|
}
|
|
195
196
|
if (((_k = data.error) === null || _k === void 0 ? void 0 : _k.code) === 'sandbox_maximum_threshold_reached') {
|
|
196
197
|
throw new SandboxMaximumThresholdReachedError(data.error.message);
|
|
197
198
|
}
|
|
198
|
-
throw new DynamicError(data.error);
|
|
199
|
+
throw new DynamicError(data.error, data.code);
|
|
199
200
|
}
|
|
200
201
|
});
|
|
201
202
|
const walletsVerify = (environmentId_4, _l) => __awaiter(void 0, [environmentId_4, _l], void 0, function* (environmentId, { messageToSign, signedMessage, publicWalletAddress, chain, walletName, walletProvider, captchaToken, network, oauth, requestedScopes, additionalWalletAddresses, sessionPublicKey, }) {
|
|
@@ -227,13 +228,14 @@ const walletsVerify = (environmentId_4, _l) => __awaiter(void 0, [environmentId_
|
|
|
227
228
|
throw new WalletNotDeployedError();
|
|
228
229
|
}
|
|
229
230
|
if (((_m = data.error) === null || _m === void 0 ? void 0 : _m.code) === 'chainalysis_blocked_wallet') {
|
|
230
|
-
throw new ChainalysisError(data.payload.walletPublicKey);
|
|
231
|
+
throw new ChainalysisError(data.payload.walletPublicKey, data.error.code);
|
|
231
232
|
}
|
|
232
233
|
if (((_o = data.error) === null || _o === void 0 ? void 0 : _o.code) === 'gate_blocked') {
|
|
233
234
|
throw new GateBlockedError(data.payload.walletPublicKey);
|
|
234
235
|
}
|
|
235
236
|
if (((_p = data.error) === null || _p === void 0 ? void 0 : _p.code) === 'missing_from_list') {
|
|
236
237
|
throw new NoAccessError({
|
|
238
|
+
code: data.error.code,
|
|
237
239
|
walletPublicKey: data.payload.walletPublicKey,
|
|
238
240
|
});
|
|
239
241
|
}
|
|
@@ -241,12 +243,12 @@ const walletsVerify = (environmentId_4, _l) => __awaiter(void 0, [environmentId_
|
|
|
241
243
|
throw new DynamicError(data.error, ErrorCode.CREDENTIAL_NOT_ENABLED_FOR_SIGN_IN);
|
|
242
244
|
}
|
|
243
245
|
if (data.code === 'email_associated_with_different_provider') {
|
|
244
|
-
throw new AccountExistsError(data.error, data.payload);
|
|
246
|
+
throw new AccountExistsError(data.error, data.payload, data.code);
|
|
245
247
|
}
|
|
246
248
|
if (((_q = data.error) === null || _q === void 0 ? void 0 : _q.code) === 'sandbox_maximum_threshold_reached') {
|
|
247
249
|
throw new SandboxMaximumThresholdReachedError(data.error.message);
|
|
248
250
|
}
|
|
249
|
-
throw new DynamicError(data.error);
|
|
251
|
+
throw new DynamicError(data.error, data.code);
|
|
250
252
|
}
|
|
251
253
|
});
|
|
252
254
|
const upgradeEmbeddedWalletToV2 = (_r) => __awaiter(void 0, [_r], void 0, function* ({ environmentId, sessionPublicKey, }) {
|
|
@@ -259,7 +261,7 @@ const upgradeEmbeddedWalletToV2 = (_r) => __awaiter(void 0, [_r], void 0, functi
|
|
|
259
261
|
}
|
|
260
262
|
catch (e) {
|
|
261
263
|
const data = yield logResponseError(e, 'Error upgradeEmbeddedWalletToV2');
|
|
262
|
-
throw new DynamicError(data.error);
|
|
264
|
+
throw new DynamicError(data.error, data.code);
|
|
263
265
|
}
|
|
264
266
|
});
|
|
265
267
|
const softDeleteEmbeddedWallet = (_s) => __awaiter(void 0, [_s], void 0, function* ({ environmentId, walletId, }) {
|
|
@@ -271,7 +273,7 @@ const softDeleteEmbeddedWallet = (_s) => __awaiter(void 0, [_s], void 0, functio
|
|
|
271
273
|
}
|
|
272
274
|
catch (e) {
|
|
273
275
|
const data = yield logResponseError(e, `Error softDeleteEmbeddedWallet for ${walletId} in ${environmentId}`);
|
|
274
|
-
throw new DynamicError(data.error);
|
|
276
|
+
throw new DynamicError(data.error, data.code);
|
|
275
277
|
}
|
|
276
278
|
});
|
|
277
279
|
const restoreEmbeddedWallet = (_t) => __awaiter(void 0, [_t], void 0, function* ({ environmentId, walletId, }) {
|
|
@@ -283,7 +285,7 @@ const restoreEmbeddedWallet = (_t) => __awaiter(void 0, [_t], void 0, function*
|
|
|
283
285
|
}
|
|
284
286
|
catch (e) {
|
|
285
287
|
const data = yield logResponseError(e, `Error restoreEmbeddedWallet for ${walletId} in ${environmentId}`);
|
|
286
|
-
throw new DynamicError(data.error);
|
|
288
|
+
throw new DynamicError(data.error, data.code);
|
|
287
289
|
}
|
|
288
290
|
});
|
|
289
291
|
|
|
@@ -167,7 +167,7 @@ const useFetchNonce = ({ shouldFetch = true, retries = 2, } = {}) => {
|
|
|
167
167
|
const consumeNonce = () => {
|
|
168
168
|
const nonce = getNonce();
|
|
169
169
|
if (!nonce) {
|
|
170
|
-
throw new utils.DynamicError('Nonce is not defined');
|
|
170
|
+
throw new utils.DynamicError('Nonce is not defined', 'nonce_is_not_defined');
|
|
171
171
|
}
|
|
172
172
|
setNonce({
|
|
173
173
|
expiresAt: undefined,
|
|
@@ -163,7 +163,7 @@ const useFetchNonce = ({ shouldFetch = true, retries = 2, } = {}) => {
|
|
|
163
163
|
const consumeNonce = () => {
|
|
164
164
|
const nonce = getNonce();
|
|
165
165
|
if (!nonce) {
|
|
166
|
-
throw new DynamicError('Nonce is not defined');
|
|
166
|
+
throw new DynamicError('Nonce is not defined', 'nonce_is_not_defined');
|
|
167
167
|
}
|
|
168
168
|
setNonce({
|
|
169
169
|
expiresAt: undefined,
|
|
@@ -31,10 +31,10 @@ const getChainIdForMessage = (walletConnector) => _tslib.__awaiter(void 0, void
|
|
|
31
31
|
});
|
|
32
32
|
const generateMessages = (publicWalletAddress, walletConnector, nonce, projectEnvironmentId, displaySiweStatement, siweStatement) => _tslib.__awaiter(void 0, void 0, void 0, function* () {
|
|
33
33
|
if (publicWalletAddress === undefined) {
|
|
34
|
-
throw new utils.DynamicError('Unable to fetch the public address from the wallet');
|
|
34
|
+
throw new utils.DynamicError('Unable to fetch the public address from the wallet', 'missing_public_address');
|
|
35
35
|
}
|
|
36
36
|
if (!walletConnector.connectedChain) {
|
|
37
|
-
throw new utils.DynamicError('Wallet is not connected');
|
|
37
|
+
throw new utils.DynamicError('Wallet is not connected', 'wallet_is_not_connected');
|
|
38
38
|
}
|
|
39
39
|
const chainId = yield getChainIdForMessage(walletConnector);
|
|
40
40
|
const parsedAddress = walletConnector.parseAddress(publicWalletAddress);
|
|
@@ -70,7 +70,7 @@ const generateMessages = (publicWalletAddress, walletConnector, nonce, projectEn
|
|
|
70
70
|
});
|
|
71
71
|
const signedMessage = yield walletConnector.proveOwnership(parsedAddress, messageToSign);
|
|
72
72
|
if (!signedMessage) {
|
|
73
|
-
throw new utils.DynamicError('Unable to sign the message');
|
|
73
|
+
throw new utils.DynamicError('Unable to sign the message', 'sign_message_failed');
|
|
74
74
|
}
|
|
75
75
|
return { messageToSign, signedMessage };
|
|
76
76
|
});
|
|
@@ -27,10 +27,10 @@ const getChainIdForMessage = (walletConnector) => __awaiter(void 0, void 0, void
|
|
|
27
27
|
});
|
|
28
28
|
const generateMessages = (publicWalletAddress, walletConnector, nonce, projectEnvironmentId, displaySiweStatement, siweStatement) => __awaiter(void 0, void 0, void 0, function* () {
|
|
29
29
|
if (publicWalletAddress === undefined) {
|
|
30
|
-
throw new DynamicError('Unable to fetch the public address from the wallet');
|
|
30
|
+
throw new DynamicError('Unable to fetch the public address from the wallet', 'missing_public_address');
|
|
31
31
|
}
|
|
32
32
|
if (!walletConnector.connectedChain) {
|
|
33
|
-
throw new DynamicError('Wallet is not connected');
|
|
33
|
+
throw new DynamicError('Wallet is not connected', 'wallet_is_not_connected');
|
|
34
34
|
}
|
|
35
35
|
const chainId = yield getChainIdForMessage(walletConnector);
|
|
36
36
|
const parsedAddress = walletConnector.parseAddress(publicWalletAddress);
|
|
@@ -66,7 +66,7 @@ const generateMessages = (publicWalletAddress, walletConnector, nonce, projectEn
|
|
|
66
66
|
});
|
|
67
67
|
const signedMessage = yield walletConnector.proveOwnership(parsedAddress, messageToSign);
|
|
68
68
|
if (!signedMessage) {
|
|
69
|
-
throw new DynamicError('Unable to sign the message');
|
|
69
|
+
throw new DynamicError('Unable to sign the message', 'sign_message_failed');
|
|
70
70
|
}
|
|
71
71
|
return { messageToSign, signedMessage };
|
|
72
72
|
});
|
package/src/lib/utils/functions/getEmbeddedWalletAuthHandler/getEmbeddedWalletAuthHandler.cjs
CHANGED
|
@@ -8,7 +8,7 @@ var utils = require('@dynamic-labs/utils');
|
|
|
8
8
|
const getEmbeddedWalletAuthHandler = (walletConnector) => {
|
|
9
9
|
if (!walletConnector ||
|
|
10
10
|
'getAuthenticatorHandler' in walletConnector === false) {
|
|
11
|
-
throw new utils.DynamicError('Invalid connector type');
|
|
11
|
+
throw new utils.DynamicError('Invalid connector type', 'invalid_connector_type');
|
|
12
12
|
}
|
|
13
13
|
const turnkeyAuthenticatorHandler = walletConnector.getAuthenticatorHandler();
|
|
14
14
|
return turnkeyAuthenticatorHandler;
|
package/src/lib/utils/functions/getEmbeddedWalletAuthHandler/getEmbeddedWalletAuthHandler.js
CHANGED
|
@@ -4,7 +4,7 @@ import { DynamicError } from '@dynamic-labs/utils';
|
|
|
4
4
|
const getEmbeddedWalletAuthHandler = (walletConnector) => {
|
|
5
5
|
if (!walletConnector ||
|
|
6
6
|
'getAuthenticatorHandler' in walletConnector === false) {
|
|
7
|
-
throw new DynamicError('Invalid connector type');
|
|
7
|
+
throw new DynamicError('Invalid connector type', 'invalid_connector_type');
|
|
8
8
|
}
|
|
9
9
|
const turnkeyAuthenticatorHandler = walletConnector.getAuthenticatorHandler();
|
|
10
10
|
return turnkeyAuthenticatorHandler;
|
|
@@ -58,6 +58,34 @@ const DEFAULT_PATTERN = {
|
|
|
58
58
|
return url.toString();
|
|
59
59
|
},
|
|
60
60
|
};
|
|
61
|
+
/**
|
|
62
|
+
* Block explorer domains known to support the /op/{userOpHash} route
|
|
63
|
+
* for ERC-4337 UserOperation lookups.
|
|
64
|
+
*
|
|
65
|
+
* Only Blockscout-based explorers are known to support this route.
|
|
66
|
+
* Etherscan-family explorers (etherscan.io, polygonscan.com, etc.)
|
|
67
|
+
* return 404 for /op/ paths. JiffyScan uses /userOpHash/ instead.
|
|
68
|
+
*
|
|
69
|
+
* Customers can extend this list via the transaction-confirmation view override.
|
|
70
|
+
*/
|
|
71
|
+
const USER_OP_SUPPORTED_EXPLORER_DOMAINS = [
|
|
72
|
+
// Blockscout-hosted instances (covers *.blockscout.com subdomains)
|
|
73
|
+
'blockscout.com',
|
|
74
|
+
// Blockscout instances on custom domains
|
|
75
|
+
'scrollscan.com',
|
|
76
|
+
'explorer.optimism.io',
|
|
77
|
+
];
|
|
78
|
+
/**
|
|
79
|
+
* Check whether a block explorer URL supports the /op/{hash} route.
|
|
80
|
+
* Matches against the built-in list and any additional domains provided
|
|
81
|
+
* by the customer via the transaction-confirmation view override.
|
|
82
|
+
*/
|
|
83
|
+
const supportsUserOpPath = (blockExplorerUrl, additionalDomains) => {
|
|
84
|
+
const allDomains = additionalDomains
|
|
85
|
+
? [...USER_OP_SUPPORTED_EXPLORER_DOMAINS, ...additionalDomains]
|
|
86
|
+
: USER_OP_SUPPORTED_EXPLORER_DOMAINS;
|
|
87
|
+
return allDomains.some((domain) => blockExplorerUrl.includes(domain));
|
|
88
|
+
};
|
|
61
89
|
/**
|
|
62
90
|
* Find the appropriate pattern for a given block explorer URL
|
|
63
91
|
*/
|
|
@@ -68,4 +96,6 @@ const findBlockExplorerPattern = (blockExplorerUrl) => {
|
|
|
68
96
|
|
|
69
97
|
exports.BLOCK_EXPLORER_PATTERNS = BLOCK_EXPLORER_PATTERNS;
|
|
70
98
|
exports.DEFAULT_PATTERN = DEFAULT_PATTERN;
|
|
99
|
+
exports.USER_OP_SUPPORTED_EXPLORER_DOMAINS = USER_OP_SUPPORTED_EXPLORER_DOMAINS;
|
|
71
100
|
exports.findBlockExplorerPattern = findBlockExplorerPattern;
|
|
101
|
+
exports.supportsUserOpPath = supportsUserOpPath;
|
|
@@ -20,6 +20,23 @@ export declare const BLOCK_EXPLORER_PATTERNS: BlockExplorerPattern[];
|
|
|
20
20
|
* Used when no specific pattern matches
|
|
21
21
|
*/
|
|
22
22
|
export declare const DEFAULT_PATTERN: BlockExplorerPattern;
|
|
23
|
+
/**
|
|
24
|
+
* Block explorer domains known to support the /op/{userOpHash} route
|
|
25
|
+
* for ERC-4337 UserOperation lookups.
|
|
26
|
+
*
|
|
27
|
+
* Only Blockscout-based explorers are known to support this route.
|
|
28
|
+
* Etherscan-family explorers (etherscan.io, polygonscan.com, etc.)
|
|
29
|
+
* return 404 for /op/ paths. JiffyScan uses /userOpHash/ instead.
|
|
30
|
+
*
|
|
31
|
+
* Customers can extend this list via the transaction-confirmation view override.
|
|
32
|
+
*/
|
|
33
|
+
export declare const USER_OP_SUPPORTED_EXPLORER_DOMAINS: string[];
|
|
34
|
+
/**
|
|
35
|
+
* Check whether a block explorer URL supports the /op/{hash} route.
|
|
36
|
+
* Matches against the built-in list and any additional domains provided
|
|
37
|
+
* by the customer via the transaction-confirmation view override.
|
|
38
|
+
*/
|
|
39
|
+
export declare const supportsUserOpPath: (blockExplorerUrl: string, additionalDomains?: string[]) => boolean;
|
|
23
40
|
/**
|
|
24
41
|
* Find the appropriate pattern for a given block explorer URL
|
|
25
42
|
*/
|
|
@@ -54,6 +54,34 @@ const DEFAULT_PATTERN = {
|
|
|
54
54
|
return url.toString();
|
|
55
55
|
},
|
|
56
56
|
};
|
|
57
|
+
/**
|
|
58
|
+
* Block explorer domains known to support the /op/{userOpHash} route
|
|
59
|
+
* for ERC-4337 UserOperation lookups.
|
|
60
|
+
*
|
|
61
|
+
* Only Blockscout-based explorers are known to support this route.
|
|
62
|
+
* Etherscan-family explorers (etherscan.io, polygonscan.com, etc.)
|
|
63
|
+
* return 404 for /op/ paths. JiffyScan uses /userOpHash/ instead.
|
|
64
|
+
*
|
|
65
|
+
* Customers can extend this list via the transaction-confirmation view override.
|
|
66
|
+
*/
|
|
67
|
+
const USER_OP_SUPPORTED_EXPLORER_DOMAINS = [
|
|
68
|
+
// Blockscout-hosted instances (covers *.blockscout.com subdomains)
|
|
69
|
+
'blockscout.com',
|
|
70
|
+
// Blockscout instances on custom domains
|
|
71
|
+
'scrollscan.com',
|
|
72
|
+
'explorer.optimism.io',
|
|
73
|
+
];
|
|
74
|
+
/**
|
|
75
|
+
* Check whether a block explorer URL supports the /op/{hash} route.
|
|
76
|
+
* Matches against the built-in list and any additional domains provided
|
|
77
|
+
* by the customer via the transaction-confirmation view override.
|
|
78
|
+
*/
|
|
79
|
+
const supportsUserOpPath = (blockExplorerUrl, additionalDomains) => {
|
|
80
|
+
const allDomains = additionalDomains
|
|
81
|
+
? [...USER_OP_SUPPORTED_EXPLORER_DOMAINS, ...additionalDomains]
|
|
82
|
+
: USER_OP_SUPPORTED_EXPLORER_DOMAINS;
|
|
83
|
+
return allDomains.some((domain) => blockExplorerUrl.includes(domain));
|
|
84
|
+
};
|
|
57
85
|
/**
|
|
58
86
|
* Find the appropriate pattern for a given block explorer URL
|
|
59
87
|
*/
|
|
@@ -62,4 +90,4 @@ const findBlockExplorerPattern = (blockExplorerUrl) => {
|
|
|
62
90
|
return pattern || DEFAULT_PATTERN;
|
|
63
91
|
};
|
|
64
92
|
|
|
65
|
-
export { BLOCK_EXPLORER_PATTERNS, DEFAULT_PATTERN, findBlockExplorerPattern };
|
|
93
|
+
export { BLOCK_EXPLORER_PATTERNS, DEFAULT_PATTERN, USER_OP_SUPPORTED_EXPLORER_DOMAINS, findBlockExplorerPattern, supportsUserOpPath };
|
|
@@ -4,9 +4,11 @@
|
|
|
4
4
|
Object.defineProperty(exports, '__esModule', { value: true });
|
|
5
5
|
|
|
6
6
|
var _tslib = require('../../../../../_virtual/_tslib.cjs');
|
|
7
|
+
var walletConnectorCore = require('@dynamic-labs/wallet-connector-core');
|
|
7
8
|
var blockExplorerPatterns = require('./blockExplorerPatterns.cjs');
|
|
8
9
|
|
|
9
|
-
const
|
|
10
|
+
const USER_OP_PATH_PREFIX = '/op/';
|
|
11
|
+
const getTransactionLink = (_a) => _tslib.__awaiter(void 0, [_a], void 0, function* ({ walletConnector, transactionHash, userOpSupportedExplorers, }) {
|
|
10
12
|
try {
|
|
11
13
|
if (!walletConnector) {
|
|
12
14
|
return undefined;
|
|
@@ -14,6 +16,16 @@ const getTransactionLink = (_a) => _tslib.__awaiter(void 0, [_a], void 0, functi
|
|
|
14
16
|
const [blockExplorerUrl] = yield walletConnector.getBlockExplorerUrlsForCurrentNetwork();
|
|
15
17
|
if (!blockExplorerUrl)
|
|
16
18
|
return undefined;
|
|
19
|
+
// AA connectors (e.g. ZeroDev) return a userOp hash, which should
|
|
20
|
+
// link to /op/{hash} on supported block explorers instead of /tx/{hash}.
|
|
21
|
+
// Not all block explorers support the /op/ route, so we check against
|
|
22
|
+
// a known list plus any customer-provided overrides.
|
|
23
|
+
if (walletConnectorCore.isAccountAbstractionConnector(walletConnector) &&
|
|
24
|
+
blockExplorerPatterns.supportsUserOpPath(blockExplorerUrl, userOpSupportedExplorers)) {
|
|
25
|
+
const url = new URL(blockExplorerUrl);
|
|
26
|
+
url.pathname = `${USER_OP_PATH_PREFIX}${transactionHash}`;
|
|
27
|
+
return url.toString();
|
|
28
|
+
}
|
|
17
29
|
// Find the appropriate pattern for this block explorer
|
|
18
30
|
const pattern = blockExplorerPatterns.findBlockExplorerPattern(blockExplorerUrl);
|
|
19
31
|
// Generate the transaction URL using the pattern
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { WalletConnector } from '@dynamic-labs/wallet-connector-core';
|
|
2
|
-
export declare const getTransactionLink: ({ walletConnector, transactionHash, }: {
|
|
2
|
+
export declare const getTransactionLink: ({ walletConnector, transactionHash, userOpSupportedExplorers, }: {
|
|
3
3
|
walletConnector?: WalletConnector;
|
|
4
4
|
transactionHash: string;
|
|
5
|
+
userOpSupportedExplorers?: string[];
|
|
5
6
|
}) => Promise<string | undefined>;
|
|
@@ -1,8 +1,10 @@
|
|
|
1
1
|
'use client'
|
|
2
2
|
import { __awaiter } from '../../../../../_virtual/_tslib.js';
|
|
3
|
-
import {
|
|
3
|
+
import { isAccountAbstractionConnector } from '@dynamic-labs/wallet-connector-core';
|
|
4
|
+
import { supportsUserOpPath, findBlockExplorerPattern } from './blockExplorerPatterns.js';
|
|
4
5
|
|
|
5
|
-
const
|
|
6
|
+
const USER_OP_PATH_PREFIX = '/op/';
|
|
7
|
+
const getTransactionLink = (_a) => __awaiter(void 0, [_a], void 0, function* ({ walletConnector, transactionHash, userOpSupportedExplorers, }) {
|
|
6
8
|
try {
|
|
7
9
|
if (!walletConnector) {
|
|
8
10
|
return undefined;
|
|
@@ -10,6 +12,16 @@ const getTransactionLink = (_a) => __awaiter(void 0, [_a], void 0, function* ({
|
|
|
10
12
|
const [blockExplorerUrl] = yield walletConnector.getBlockExplorerUrlsForCurrentNetwork();
|
|
11
13
|
if (!blockExplorerUrl)
|
|
12
14
|
return undefined;
|
|
15
|
+
// AA connectors (e.g. ZeroDev) return a userOp hash, which should
|
|
16
|
+
// link to /op/{hash} on supported block explorers instead of /tx/{hash}.
|
|
17
|
+
// Not all block explorers support the /op/ route, so we check against
|
|
18
|
+
// a known list plus any customer-provided overrides.
|
|
19
|
+
if (isAccountAbstractionConnector(walletConnector) &&
|
|
20
|
+
supportsUserOpPath(blockExplorerUrl, userOpSupportedExplorers)) {
|
|
21
|
+
const url = new URL(blockExplorerUrl);
|
|
22
|
+
url.pathname = `${USER_OP_PATH_PREFIX}${transactionHash}`;
|
|
23
|
+
return url.toString();
|
|
24
|
+
}
|
|
13
25
|
// Find the appropriate pattern for this block explorer
|
|
14
26
|
const pattern = findBlockExplorerPattern(blockExplorerUrl);
|
|
15
27
|
// Generate the transaction URL using the pattern
|
|
@@ -129,11 +129,11 @@ const useOtpVerificationRequestRaw = () => {
|
|
|
129
129
|
const verifyOtp = React.useCallback((handleVerificationRequired, verificationToken, destination, localVerificationUUID) => _tslib.__awaiter(void 0, void 0, void 0, function* () {
|
|
130
130
|
var _a;
|
|
131
131
|
if (!user && !userWithMissingInfo)
|
|
132
|
-
throw new utils.DynamicError(errors.USER_NOT_LOGGED_IN);
|
|
132
|
+
throw new utils.DynamicError(errors.USER_NOT_LOGGED_IN, 'user_not_logged_in');
|
|
133
133
|
// VerificationUUID is saved in the context in case the view changes
|
|
134
134
|
// after a profile update (changing the view from edit profile to verify email)
|
|
135
135
|
if (!localVerificationUUID && !contextVerificationUUID)
|
|
136
|
-
throw new utils.DynamicError('No verification UUID is available');
|
|
136
|
+
throw new utils.DynamicError('No verification UUID is available', 'no_verification_uuid_is_available');
|
|
137
137
|
const verificationUUID = (localVerificationUUID !== null && localVerificationUUID !== void 0 ? localVerificationUUID : contextVerificationUUID);
|
|
138
138
|
const verify = destination === 'email' ? email.verifyEmail : sms.verifySms;
|
|
139
139
|
const updateSelfResponse = yield verify({
|