UNPKG

@dynamic-labs/sdk-react-core

Version:

A React SDK for implementing wallet web3 authentication and authorization to your website.

749 lines (744 loc) 43 kB
'use client' 'use strict'; Object.defineProperty(exports, '__esModule', { value: true }); var _tslib = require('../../../../_virtual/_tslib.cjs'); var jsxRuntime = require('react/jsx-runtime'); var React = require('react'); var reactI18next = require('react-i18next'); var iconic = require('@dynamic-labs/iconic'); var logger = require('@dynamic-labs/logger'); var utils = require('@dynamic-labs/utils'); var walletBook = require('@dynamic-labs/wallet-book'); var walletConnectorCore = require('@dynamic-labs/wallet-connector-core'); var version = require('../../../version.cjs'); var app = require('../../app.cjs'); var useInitializeSdkClient = require('../../client/extension/useInitializeSdkClient/useInitializeSdkClient.cjs'); require('../../components/Accordion/components/AccordionItem/AccordionItem.cjs'); var ViewContext = require('../ViewContext/ViewContext.cjs'); require('@dynamic-labs/sdk-api-core'); var logger$1 = require('../../shared/logger.cjs'); var localStorage = require('../../utils/constants/localStorage.cjs'); require('../../utils/constants/colors.cjs'); var values = require('../../utils/constants/values.cjs'); var useLocalStorage = require('../../shared/utils/hooks/useLocalStorage/useLocalStorage.cjs'); var usePrefetch = require('../../shared/utils/hooks/usePrefetch/usePrefetch.cjs'); require('../../shared/consts/index.cjs'); require('../../components/Alert/Alert.cjs'); var dynamicEvents = require('../../events/dynamicEvents.cjs'); require('../../store/state/loadingAndLifecycle/loadingAndLifecycle.cjs'); var authMode = require('../../store/state/authMode/authMode.cjs'); var CaptchaContext = require('../CaptchaContext/CaptchaContext.cjs'); var ErrorContext = require('../ErrorContext/ErrorContext.cjs'); require('@dynamic-labs/multi-wallet'); var helpers = require('./helpers/helpers.cjs'); require('react-international-phone'); var nonce = require('../../store/state/nonce/nonce.cjs'); var projectSettings = require('../../store/state/projectSettings/projectSettings.cjs'); var ApiEndpoint = require('../../config/ApiEndpoint.cjs'); var user = require('../../store/state/user/user.cjs'); var settings = require('../../data/api/settings/settings.cjs'); var locale = require('../../locale/locale.cjs'); var dynamicContextProps = require('../../store/state/dynamicContextProps/dynamicContextProps.cjs'); var primaryWalletId = require('../../store/state/primaryWalletId/primaryWalletId.cjs'); var connectedWalletsInfo = require('../../store/state/connectedWalletsInfo/connectedWalletsInfo.cjs'); var getMissingChains = require('../../utils/functions/getMissingChains/getMissingChains.cjs'); var AccessDeniedContext = require('../AccessDeniedContext/AccessDeniedContext.cjs'); var AccountExistsContext = require('../AccountExistsContext/AccountExistsContext.cjs'); var UserWalletsContext = require('../UserWalletsContext/UserWalletsContext.cjs'); var VerificationContext = require('../VerificationContext/VerificationContext.cjs'); require('react-dom'); require('../../utils/functions/compareChains/compareChains.cjs'); require('../../views/Passkey/utils/findPrimaryEmbeddedChain/findPrimaryEmbeddedChain.cjs'); var ThemeContext = require('../ThemeContext/ThemeContext.cjs'); require('../../utils/hooks/useUserUpdateRequest/useUpdateUser/userFieldsSchema.cjs'); require('bs58'); var useSetWalletConnectorVerifiedCredentials = require('../../utils/hooks/useSetWalletConnectorVerifiedCredentials/useSetWalletConnectorVerifiedCredentials.cjs'); require('@dynamic-labs/types'); var SocialRedirectContext = require('../SocialRedirectContext/SocialRedirectContext.cjs'); var LoadingContext = require('../LoadingContext/LoadingContext.cjs'); var WalletContext = require('../WalletContext/WalletContext.cjs'); require('../../utils/hooks/useEmbeddedWallet/useSecureEnclaveEmbeddedWallet/constants.cjs'); require('yup'); require('../MockContext/MockContext.cjs'); require('../../views/CollectUserDataView/useFields.cjs'); var FieldsStateContext = require('../FieldsStateContext/FieldsStateContext.cjs'); var UserFieldEditorContext = require('../UserFieldEditorContext/UserFieldEditorContext.cjs'); require('@dynamic-labs/rpc-providers'); var useValidateSession = require('../../utils/hooks/useValidateSession/useValidateSession.cjs'); var useCreateWalletConnectorOptions = require('../../utils/hooks/useCreateWalletConnectorOptions/useCreateWalletConnectorOptions.cjs'); var useCreateWalletGroups = require('../../utils/hooks/useCreateWalletGroups/useCreateWalletGroups.cjs'); var useWalletConnectors = require('../../utils/hooks/useWalletConnectors/useWalletConnectors.cjs'); var useWalletUiUtils = require('../../utils/hooks/useWalletUiUtils/useWalletUiUtils.cjs'); var useWalletConnectorNetwork = require('../../utils/hooks/useWalletConnectorNetwork/useWalletConnectorNetwork.cjs'); var useSetWalletConnectorFetchers = require('../../utils/hooks/useSetWalletConnectorFetchers/useSetWalletConnectorFetchers.cjs'); var DynamicWidgetContext = require('../../widgets/DynamicWidget/context/DynamicWidgetContext.cjs'); var useSendDynamicProps = require('../../utils/hooks/useSendDynamicProps/useSendDynamicProps.cjs'); require('../../store/state/tokenBalances.cjs'); var WalletGroupContext = require('../WalletGroupContext/WalletGroupContext.cjs'); var walletOptions = require('../../store/state/walletOptions/walletOptions.cjs'); var useRefreshUserState = require('../../utils/hooks/useRefreshUserState/useRefreshUserState.cjs'); require('../../shared/utils/functions/getInitialUrl/getInitialUrl.cjs'); var useEndUserWarning = require('../../utils/hooks/useEndUserWarning/useEndUserWarning.cjs'); var useDeviceFingerprint = require('../../utils/hooks/useDeviceFingerprint/useDeviceFingerprint.cjs'); var useAggregateWalletEvents = require('../../utils/hooks/useAggregateWalletEvents/useAggregateWalletEvents.cjs'); require('../../components/ShadowDOM/ShadowDOM.cjs'); require('../../components/IconButton/IconButton.cjs'); require('../../components/InlineWidget/InlineWidget.cjs'); require('../../components/Input/Input.cjs'); require('../../components/IsBrowser/IsBrowser.cjs'); require('../../components/MenuList/Dropdown/Dropdown.cjs'); require('../../components/OverlayCard/OverlayCard.cjs'); require('../../components/Transition/ZoomTransition/ZoomTransition.cjs'); require('../../components/Transition/SlideInUpTransition/SlideInUpTransition.cjs'); require('../../components/Transition/OpacityTransition/OpacityTransition.cjs'); require('../../components/PasskeyCreatedSuccessBanner/PasskeyCreatedSuccessBanner.cjs'); require('../../components/Popper/Popper/Popper.cjs'); require('../../components/Popper/PopperContext/PopperContext.cjs'); require('react-focus-lock'); require('qrcode'); require('formik'); require('../../utils/hooks/useSubdomainCheck/useSubdomainCheck.cjs'); var IpConfigurationContext = require('../IpConfigurationContext/IpConfigurationContext.cjs'); var ConnectWithOtpProvider = require('../ConnectWithOtpContext/ConnectWithOtpProvider.cjs'); require('../ConnectWithOtpContext/ConnectWithOtpContext.cjs'); require('../../widgets/DynamicBridgeWidget/views/WalletsView/components/SecondaryWallets/SecondaryWallets.cjs'); require('@hcaptcha/react-hcaptcha'); require('../FooterAnimationContext/index.cjs'); require('../ErrorContext/hooks/useErrorText/useErrorText.cjs'); var PasskeyContext = require('../PasskeyContext/PasskeyContext.cjs'); require('../../widgets/DynamicWidget/helpers/convertExchangeKeyAndProviderEnum.cjs'); require('../../store/state/sendBalances.cjs'); var useNetworkConfigurationsFromProjectSettings = require('../../utils/hooks/useNetworkConfigurationsFromProjectSettings/useNetworkConfigurationsFromProjectSettings.cjs'); var SyncAuthFlow = require('../../components/SyncAuthFlow/SyncAuthFlow.cjs'); var WalletConnectorEvents = require('../../components/WalletConnectorEvents/WalletConnectorEvents.cjs'); var shouldFetchNonce = require('../../shared/utils/functions/shouldFetchNonce/shouldFetchNonce.cjs'); var store = require('../../store/internalImplementation/store.cjs'); var defaultDynamicSettings = require('../../store/state/dynamicContextProps/defaultDynamicSettings.cjs'); var parseTheme = require('../../utils/functions/parseTheme/parseTheme.cjs'); var useMultiWalletWidgetState = require('../../utils/hooks/multiWallet/useMultiWalletWidgetState/useMultiWalletWidgetState.cjs'); var useClearWalletConnectSessions = require('../../utils/hooks/useClearWalletConnectSessions/useClearWalletConnectSessions.cjs'); var useConnectWallet = require('../../utils/hooks/useConnectWallet/useConnectWallet.cjs'); var useFetchWalletsForChainsMap = require('../../utils/hooks/useFetchWalletsForChainsMap/useFetchWalletsForChainsMap.cjs'); var useGlobalLoading = require('../../utils/hooks/useGlobalLoading/useGlobalLoading.cjs'); var useWalletEventListeners = require('../../utils/hooks/useWalletEventListeners/useWalletEventListeners.cjs'); var useTabState = require('../../views/WalletList/hooks/useTabState.cjs'); var DynamicBridgeWidgetContext = require('../../widgets/DynamicBridgeWidget/context/DynamicBridgeWidgetContext/DynamicBridgeWidgetContext.cjs'); require('../../widgets/DynamicWidget/components/DynamicWidgetCard/DynamicWidgetCard.cjs'); require('../../components/OverlayCardBase/OverlayCardTarget/OverlayCardTarget.cjs'); require('../../widgets/DynamicWidget/components/DynamicWidgetHeader/DynamicWidgetHeader.cjs'); require('../../views/TransactionConfirmationView/TransactionConfirmationView.cjs'); require('../../widgets/DynamicWidget/views/ManagePasskeysWidgetView/PasskeyCard/PasskeyCard.cjs'); var OnrampContext = require('../OnrampContext/OnrampContext.cjs'); require('../../widgets/DynamicWidget/views/ReceiveWalletFunds/ReceiveWalletFunds.cjs'); var WidgetRegistryContextProvider = require('../WidgetRegistry/WidgetRegistryContextProvider.cjs'); var OnrampWidget = require('../../widgets/OnrampWidget/OnrampWidget.cjs'); var ErrorBoundary = require('../ErrorBoundary/ErrorBoundary.cjs'); var ErrorBoundaryExclude = require('../ErrorBoundary/ErrorBoundaryExclude.cjs'); require('../ErrorBoundary/ErrorBoundaryBase.cjs'); var PhantomRedirectContext = require('../PhantomRedirectContext/PhantomRedirectContext.cjs'); var ReinitializeContextProvider = require('../ReinitializeContext/ReinitializeContextProvider.cjs'); var SendBalanceContext = require('../SendBalanceContext/SendBalanceContext.cjs'); var UseNetworkValidation = require('../UseNetworkValidation/UseNetworkValidation.cjs'); var onReinitialize = require('./functions/onReinitialize/onReinitialize.cjs'); var useDisplayOrderState = require('./hooks/useDisplayOrderState/useDisplayOrderState.cjs'); var useEmailLoginState = require('./hooks/useEmailLoginState/useEmailLoginState.cjs'); var useHandleLogout = require('./hooks/useHandleLogout/useHandleLogout.cjs'); var useNameService = require('./hooks/useNameService/useNameService.cjs'); var useSelectedWalletConnector = require('./hooks/useSelectedWalletConnector/useSelectedWalletConnector.cjs'); var useShowAuthFlow = require('./hooks/useShowAuthFlow/useShowAuthFlow.cjs'); var usePasskeySuccessPopup = require('./hooks/usePasskeySuccessPopup/usePasskeySuccessPopup.cjs'); var useTieCallbacksToEvents = require('./hooks/useTieCallbacksToEvents/useTieCallbacksToEvents.cjs'); var useMultiWallet = require('./hooks/useMultiWallet/useMultiWallet.cjs'); var useAutoselectPrimaryWallet = require('./hooks/useAutoselectPrimaryWallet/useAutoselectPrimaryWallet.cjs'); var useInitialViewType = require('./hooks/useInitialViewType/useInitialViewType.cjs'); var useMultiAsset = require('./hooks/useMultiAsset/useMultiAsset.cjs'); var useParentDynamicContextGuard = require('./hooks/useParentDynamicContextGuard/useParentDynamicContextGuard.cjs'); var useRegisterStorageService = require('./hooks/useRegisterStorageService/useRegisterStorageService.cjs'); var useRemoveWallet = require('./hooks/useRemoveWallet/useRemoveWallet.cjs'); var useShowDynamicUserProfile = require('./hooks/useShowDynamicUserProfile/useShowDynamicUserProfile.cjs'); var useShowEmbeddedWalletActionsUI = require('./hooks/useShowEmbeddedWalletActionsUI/useShowEmbeddedWalletActionsUI.cjs'); var useShowFiat = require('./hooks/useShowFiat/useShowFiat.cjs'); var useCustomerCallbacks = require('./useCustomerCallbacks/useCustomerCallbacks.cjs'); const PUBLIC_PROJECT_LIVE_ENVIRONMENT_ID = '2762a57b-faa4-41ce-9f16-abff9300e2c9'; const DynamicContext = React.createContext(undefined); /** The context provider itself we only use internally */ const InnerDynamicContextProvider = (props) => { var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q; const { children, theme, settings: settings$1, locale: locale$1, enableInstrumentation = false, } = props; const { accessDeniedMessagePrimary, accessDeniedMessageSecondary, accessDeniedButton, defaultPhoneInputIso2, apiBaseUrl, coinbaseWalletPreference, detectNewWalletsForLinking = defaultDynamicSettings.defaultDynamicSettings.detectNewWalletsForLinking, enableConnectOnlyFallback = defaultDynamicSettings.defaultDynamicSettings.enableConnectOnlyFallback, deepLinkPreference: deepLinkPreferenceProp = defaultDynamicSettings.defaultDynamicSettings.deepLinkPreference, bridgeChains, cssOverrides, defaultNumberOfWalletsToShow = values.DEFAULT_NUMBER_OF_WALLETS_TO_SHOW, flowNetwork, initialAuthenticationMode = defaultDynamicSettings.defaultDynamicSettings.initialAuthenticationMode, debugError = defaultDynamicSettings.defaultDynamicSettings.debugError, displaySiweStatement = defaultDynamicSettings.defaultDynamicSettings.displaySiweStatement, newToWeb3WalletChainMap, enableVisitTrackingOnConnectOnly = defaultDynamicSettings.defaultDynamicSettings.enableVisitTrackingOnConnectOnly, environmentId, walletsFilter, logLevel = defaultDynamicSettings.defaultDynamicSettings.logLevel, mobileExperience, notInTheListImageUrl, onboardingImageUrl, policiesConsentInnerComponent, customPrivacyPolicy, privacyPolicyUrl, socialMediaLinkText, socialMediaIconUrl, socialMediaUrl, customTermsOfServices, termsOfServiceUrl, siweStatement, shadowDOMEnabled = defaultDynamicSettings.defaultDynamicSettings.shadowDOMEnabled, walletConnectors: walletConnectorsProp, socialProvidersFilter, showLockedWalletView = defaultDynamicSettings.defaultDynamicSettings.showLockedWalletView, walletConnectPreferredChains, walletConnectorExtensions, recommendedWallets, handlers, suppressEndUserConsoleWarning, transactionConfirmation: transactionConfirmationSettings, useMetamaskSdk = defaultDynamicSettings.defaultDynamicSettings.useMetamaskSdk, } = settings$1; let { appLogoUrl = defaultDynamicSettings.defaultDynamicSettings.appLogoUrl, appName = defaultDynamicSettings.defaultDynamicSettings.appName, } = settings$1; /** * initialize Storage */ useRegisterStorageService.useRegisterStorageService({ storagePostfix: settings$1.localStorageSuffix, }); /** * initialize global store */ store.initializeStore(props); dynamicContextProps.useSyncDynamicContextProps(props); React.useEffect(() => { authMode.setAuthMode(initialAuthenticationMode); }, [initialAuthenticationMode]); /** * Sets the chain info overrides if they are present */ walletConnectorCore.setChainInfoOverrides((_a = settings$1.overrides) === null || _a === void 0 ? void 0 : _a.chainDisplayValues); const networkValidationMode = helpers.resolveNetworkValidationMode({ bridgeChains: settings$1.bridgeChains, networkValidationMode: settings$1.networkValidationMode, }); if (!environmentId) { throw new utils.MissingEnvironmentIdError(); } logger$1.logger.setLogLevel(logLevel); walletConnectorCore.logger.setLogLevel(logLevel); if (environmentId === PUBLIC_PROJECT_LIVE_ENVIRONMENT_ID) { logger$1.logger.warn(`WARNING: DYNAMIC is using a test environment ID ${environmentId}. Please sign up on https://app.dynamic.xyz/ to get your production environment ID.`); } const apiBaseUrlOverride = utils.getEnvVarWithFallback('DYNAMIC_API_BASE_URL', apiBaseUrl || ''); ApiEndpoint.setBaseUrl(apiBaseUrlOverride); const i18nSDKInstance = locale.Locale.setup(locale$1); const isBridgeFlow = Boolean(bridgeChains); const deepLinkPreference = helpers.getDeepLinkPreference(deepLinkPreferenceProp, isBridgeFlow); const { selectedTabIndex, setSelectedTabIndex, selectedTabSettings, tabsItems, } = useTabState.useTabState({ settingsOverrides: settings$1.overrides }); // state to track the full connectivity status of the individual's wallets. // Set to true once the predetermined number of wallets is connected. const [bridgeOnboardingCompleted, setBridgeOnboardingCompleted, removeBridgeOnboardingCompleted,] = useLocalStorage.useLocalStorage(localStorage.BRIDGE_ONBOARDING_COMPLETED, false); const { setShowDynamicUserProfile, showDynamicUserProfile } = useShowDynamicUserProfile.useShowDynamicUserProfile(); // Allows clients to control the Bridge Widget flow without need to click on Bridge Widget const [showBridgeWidget, setShowBridgeWidget] = React.useState(false); const [isSingleWalletAccount, setIsSingleWalletAccount] = React.useState(false); const { user: user$1, userWithMissingInfo } = user.useUser(); if (user$1) { logger.Logger.globalMetaData.set('user', user$1); } else { logger.Logger.globalMetaData.set('user', undefined); } // Calculates and stores a device fingerprint useDeviceFingerprint.useDeviceFingerprint(); const isAuthenticated = Boolean(user$1); const [qrcodeUri, setQrcodeUri] = React.useState(''); const [desktopUri, setDesktopUri] = React.useState(''); const [multiWalletWidgetState, setMultiWalletWidgetState, { awaiting_account_switch: [accountSwitchState], awaiting_signature: [awaitingSignatureState], },] = useMultiWalletWidgetState.useMultiWalletWidgetState(); const projectSettings$1 = projectSettings.useProjectSettings(); const serverNetworkConfigurations = useNetworkConfigurationsFromProjectSettings.useNetworkConfigurationsFromProjectSettings({ cosmosNetworkOverrides: (_b = settings$1.overrides) === null || _b === void 0 ? void 0 : _b.cosmosNetworks, evmNetworksOverrides: (_c = settings$1.overrides) === null || _c === void 0 ? void 0 : _c.evmNetworks, projectSettings: projectSettings$1, solanaNetworksOverrides: (_d = settings$1.overrides) === null || _d === void 0 ? void 0 : _d.solNetworks, }); useSendDynamicProps.useSendDynamicProps({ environmentId, settings: settings$1 }); // Console warning for end user safety useEndUserWarning.useEndUserWarning({ projectSettings: projectSettings$1, suppress: suppressEndUserConsoleWarning, }); const multiWallet = useMultiWallet.useMultiWallet({ isBridgeFlow, multiWalletOverride: (_e = settings$1.overrides) === null || _e === void 0 ? void 0 : _e.multiWallet, multiWalletSettings: (_f = projectSettings$1 === null || projectSettings$1 === void 0 ? void 0 : projectSettings$1.sdk) === null || _f === void 0 ? void 0 : _f.multiWallet, }); const multiAsset = useMultiAsset.useMultiAsset({ multiAssetOverride: (_g = settings$1.overrides) === null || _g === void 0 ? void 0 : _g.multiAsset, multiAssetSettings: (_h = projectSettings$1 === null || projectSettings$1 === void 0 ? void 0 : projectSettings$1.sdk) === null || _h === void 0 ? void 0 : _h.enableMultiAsset, }); const showFiat = useShowFiat.useShowFiat({ showFiatOverride: (_j = settings$1.overrides) === null || _j === void 0 ? void 0 : _j.showFiat, showFiatSettings: (_k = projectSettings$1 === null || projectSettings$1 === void 0 ? void 0 : projectSettings$1.sdk) === null || _k === void 0 ? void 0 : _k.showFiat, }); // Used inside useVerifyOnAwaitingSignature. Is legacy and should be removed asap const [legacyIsVerifying, setLegacyIsVerifying] = React.useState(false); const walletBook$1 = walletBook.useWalletBookCdn(); const { imageUserInAccessList, imageUserNotInAccessList, displayName, appLogo, } = (projectSettings$1 === null || projectSettings$1 === void 0 ? void 0 : projectSettings$1.general) || {}; appLogoUrl = appLogo || appLogoUrl; appName = displayName || appName; const [loginWithEmail, setLogInWithEmail, resetLoginWithEmail] = useEmailLoginState.useEmailLoginState((projectSettings$1 === null || projectSettings$1 === void 0 ? void 0 : projectSettings$1.providers) || [], user$1); const [authorizationViewDisplayOrder, setAuthorizationViewDisplayOrder] = useDisplayOrderState.useDisplayOrderState(projectSettings$1); const showEmbeddedWalletActionsUI = useShowEmbeddedWalletActionsUI.useShowEmbeddedWalletActionsUI(transactionConfirmationSettings, projectSettings$1); const [confirmationModal, walletUiUtils] = useWalletUiUtils.useWalletUiUtils({ hideEmbeddedWalletTransactionUIs: !showEmbeddedWalletActionsUI, }); const connectorProps = React.useMemo(() => ({ appLogoUrl, appName, coinbaseWalletPreference, deepLinkPreference, flowNetwork, mobileExperience, networkConfigurations: serverNetworkConfigurations, projectSettings: projectSettings$1, useMetamaskSdk, walletBook: walletBook$1, walletConnectPreferredChains, walletConnectorExtensions, walletConnectorsProp, walletUiUtils, }), [ appLogoUrl, appName, coinbaseWalletPreference, deepLinkPreference, flowNetwork, mobileExperience, serverNetworkConfigurations, projectSettings$1, useMetamaskSdk, walletBook$1, walletConnectPreferredChains, walletConnectorExtensions, walletConnectorsProp, walletUiUtils, ]); useCreateWalletConnectorOptions.useCreateWalletConnectorOptions(connectorProps); const walletConnectorOptions = walletOptions.useWalletConnectorOptions(); useCreateWalletGroups.useCreateWalletGroups({ walletConnectorOptions }); const primaryWalletId$1 = primaryWalletId.usePrimaryWalletId(); const authMode$1 = authMode.useAuthMode(); const [isRenderingEmbeddedAuthFlow, setIsRenderingEmbeddedAuthFlow] = React.useState(false); const [showAuthFlow, setShowAuthFlow] = useShowAuthFlow.useShowAuthFlow({ isMultiWalletEnabled: multiWallet, isRenderingEmbeddedAuthFlow, setShowDynamicUserProfile, }); const { connectWallet, connectedWalletsInfo: connectedWalletsInfo$1, getConnectedWalletById, connectedWallets, disconnectWallet, refreshConnectedWallet, } = useConnectWallet.useConnectWallet({ enableVisitTrackingOnConnectOnly, environmentId, handleConnectedWallet: handlers === null || handlers === void 0 ? void 0 : handlers.handleConnectedWallet, isBridgeFlow, primaryWalletId: primaryWalletId$1, setShowAuthFlow, walletConnectorOptions, }); const bridgeChainsToConnect = React.useMemo(() => getMissingChains.getMissingChains(bridgeChains, connectedWalletsInfo$1), [bridgeChains, connectedWalletsInfo$1]); const { selectedWalletConnector, setSelectedWalletConnectorKey } = useSelectedWalletConnector.useSelectedWalletConnector({ walletConnectorOptions }); //selected wallet to perform an action (become primary, unlink, etc) const [selectedWalletWithAction, setSelectedWalletWithAction] = React.useState(null); useSetWalletConnectorVerifiedCredentials.useSetWalletConnectorVerifiedCredentials(user$1 !== null && user$1 !== void 0 ? user$1 : userWithMissingInfo, walletConnectorOptions); useSetWalletConnectorFetchers.useSetWalletConnectorFetchers(walletConnectorOptions, environmentId, projectSettings$1); const { primaryWallet, showQrcodeModal, secondaryWallets, setPrimaryWallet, setShowQrcodeModal, wallets: linkedOrConnectedWallets, } = useWalletConnectors.useWalletConnectors({ canHaveMultipleWalletsConnected: multiWallet, connectedWallets, primaryWalletId: primaryWalletId$1, separateSmartWalletAndSigner: (_m = (_l = projectSettings$1 === null || projectSettings$1 === void 0 ? void 0 : projectSettings$1.sdk) === null || _l === void 0 ? void 0 : _l.accountAbstraction) === null || _m === void 0 ? void 0 : _m.separateSmartWalletAndSigner, setMultiWalletWidgetState, user: user$1 || userWithMissingInfo, walletConnectorOptions, }); useAutoselectPrimaryWallet.useAutoselectPrimaryWallet(isBridgeFlow); const walletConnectors = React.useMemo(() => linkedOrConnectedWallets.map((wallet) => wallet.connector), [linkedOrConnectedWallets]); const { refetchProjectSettings } = projectSettings.useFetchProjectSettings(); nonce.useFetchNonce({ shouldFetch: shouldFetchNonce.shouldFetchNonce({ authMode: authMode$1 }), }); const { getNameService, removeConnectedNameService } = useNameService.useNameService({ currentWallet: primaryWallet !== null && primaryWallet !== void 0 ? primaryWallet : connectedWallets[0], user: user$1, }); const { clearAllWalletConnectSessions } = useClearWalletConnectSessions.useClearWalletConnectSessions({ connectors: walletConnectors, }); const removeSessionStorageSessionKeys = () => { utils.tracing.logEvent('session-key', 'removeSessionStorageSessionKeys'); utils.StorageService.removeItem(localStorage.SECURE_ENCLAVE_WALLET_SESSION_KEYS, localStorage.SECURE_ENCLAVE_WALLET_SESSION_KEYS_STORAGE_OPTIONS); walletConnectors.forEach((connector) => { if (walletConnectorCore.isSessionKeyCompatibleWalletConnector(connector) && typeof (connector === null || connector === void 0 ? void 0 : connector.removeSessionKeys) === 'function') { connector === null || connector === void 0 ? void 0 : connector.removeSessionKeys(); } }); }; const handleLogOut = useHandleLogout.useHandleLogout({ bridgeChains, clearAllWalletConnectSessions, connectedWallets, environmentId, events: settings$1.events, initialAuthenticationMode, removeBridgeOnboardingCompleted, removeConnectedNameService, removeSessionStorageSessionKeys, resetLoginWithEmail, setLegacyIsVerifying, setMultiWalletWidgetState, setSelectedWalletConnectorKey, setShowAuthFlow, setShowBridgeWidget, setShowDynamicUserProfile, user: user$1, walletConnectors, }); useValidateSession.useValidateSession({ environmentId, handleLogOut, }); const { isLoading: isUserLoading } = useRefreshUserState.useRefreshUserState(); // For some reason, calling useNonce in useGlobalLoading causes errors const nonce$1 = nonce.useNonce(); const sdkHasLoaded = useGlobalLoading.useGlobalLoading({ appName, connectedInfo: connectedWalletsInfo$1[0], connectedWallets, enableInstrumentation, environmentId, isUserLoading, nonce: nonce$1, primaryWallet, primaryWalletId: primaryWalletId$1, projectSettings: projectSettings$1, user: user$1 !== null && user$1 !== void 0 ? user$1 : userWithMissingInfo, walletBook: walletBook$1, }); // Ties all client callbacks to dynamic's events, such that // when our events are triggered, so are the client callbacks useTieCallbacksToEvents.useTieCallbacksToEvents({ clientCallbacks: settings$1.events, user: user$1, }); const removeWallet = useRemoveWallet.useRemoveWallet({ handleLogOut, secondaryWallets, setPrimaryWallet, }); const { isLoading: loadingNetwork, network } = useWalletConnectorNetwork.useWalletConnectorNetwork(primaryWallet === null || primaryWallet === void 0 ? void 0 : primaryWallet.connector, { onChange: (newNetwork) => { if (newNetwork) { dynamicEvents.dynamicEvents.emit('primaryWalletNetworkChanged', newNetwork); } }, }); useAggregateWalletEvents.useAggregateWalletEvents(); useWalletEventListeners.useWalletEventListeners({ detectNewWalletsForLinking, disconnectWallet, handleLogOut, multiWallet, multiWalletWidgetState, primaryWallet, refreshConnectedWallet, secondaryWallets, selectedWalletConnector, selectedWalletWithAction, setMultiWalletWidgetState, setSelectedWalletConnectorKey, setSelectedWalletWithAction, user: user$1, }); const { walletsForChainsMap } = useFetchWalletsForChainsMap.useFetchWalletsForChainsMap(newToWeb3WalletChainMap); React.useEffect(() => { helpers.initExpirationTime(handleLogOut); }, [handleLogOut, isAuthenticated]); const { setCallback } = useCustomerCallbacks.useCustomerCallbacks({ callbacks: { onAuthSuccess: (_o = settings$1.events) === null || _o === void 0 ? void 0 : _o.onAuthSuccess, onUserProfileUpdate: (_p = settings$1.events) === null || _p === void 0 ? void 0 : _p.onUserProfileUpdate, }, handleLogOut, isAuthenticated, primaryWallet, user: user$1, }); const sendWagmiSettings = React.useCallback(() => (settings$1) => { const { dynamicWagmiSettings } = settings$1; if (dynamicWagmiSettings) { settings.sendDynamicProps(environmentId, { dynamicWagmiSettings: { dynamicWagmiSettings }, }); } }, [environmentId]); const clearStatesOnBackClick = React.useCallback(() => _tslib.__awaiter(void 0, void 0, void 0, function* () { setDesktopUri(''); setLegacyIsVerifying(false); if (!user$1) { clearAllWalletConnectSessions(); } setMultiWalletWidgetState('idle'); if (authMode$1 !== 'connect-only') { connectedWalletsInfo.resetConnectedWalletsInfo(); } if (utils.StorageService.getItem(localStorage.WALLET_PICKER_SEARCH_KEY)) { utils.StorageService.removeItem(localStorage.WALLET_PICKER_SEARCH_KEY); } if (utils.StorageService.getItem(localStorage.EXCHANGE_PICKER_SEARCH_KEY)) { utils.StorageService.removeItem(localStorage.EXCHANGE_PICKER_SEARCH_KEY); } utils.StorageService.removeItem(localStorage.PHANTOM_SIGNATURE_STATE); if (selectedWalletConnector && (!primaryWallet || primaryWallet.connector.key !== selectedWalletConnector.key)) { yield (selectedWalletConnector === null || selectedWalletConnector === void 0 ? void 0 : selectedWalletConnector.endSession()); } }), [ user$1, setMultiWalletWidgetState, authMode$1, selectedWalletConnector, primaryWallet, clearAllWalletConnectSessions, ]); const { passkeySuccessPopup, setPasskeySuccessPopup } = usePasskeySuccessPopup.usePasskeySuccessPopup(); const memoizedLocale = React.useMemo(() => ({ changeLanguage: locale.Locale.getInstance().changeLanguage, }), []); const linkedWallets = React.useMemo(() => authMode$1 === 'connect-only' || !user$1 ? [] : linkedOrConnectedWallets, [authMode$1, linkedOrConnectedWallets, user$1]); const value = React.useMemo(() => { var _a; return ({ accessDeniedButton, accessDeniedMessagePrimary, accessDeniedMessageSecondary, accountSwitchState, appLogoUrl, appName, authorizationViewDisplayOrder, awaitingSignatureState, bridgeChains, bridgeChainsToConnect, bridgeOnboardingCompleted, clearStatesOnBackClick, connectWallet, connectedWallets, cssOverrides, customPrivacyPolicy, customTermsOfServices, debugError, defaultNumberOfWalletsToShow, defaultPhoneInputIso2, desktopUri, detectNewWalletsForLinking, disconnectWallet, displaySiweStatement, enableConnectOnlyFallback, environmentId, events: settings$1.events, getConnectedWalletById, getNameService, handleLogOut, handlers, i18nSDKInstance, isBridgeFlow, isRenderingEmbeddedAuthFlow, isSingleWalletAccount, legacyIsVerifying, linkedWallets, loadingNetwork, locale: memoizedLocale, loginWithEmail, multiAsset, multiWallet, multiWalletWidgetState, network, networkConfigurations: serverNetworkConfigurations, networkValidationMode, newToWeb3WalletChainMap: walletsForChainsMap, notInTheListImageUrl: imageUserNotInAccessList || notInTheListImageUrl, onboardingImageUrl: imageUserInAccessList || onboardingImageUrl, overrides: settings$1.overrides, passkeySuccessPopup, policiesConsentInnerComponent, primaryWallet, primaryWalletId: primaryWalletId$1, privacyPolicyUrl, projectSettings: projectSettings$1, qrcodeUri, recommendedWallets, redirectUrl: settings$1.redirectUrl, refetchProjectSettings, removeBridgeOnboardingCompleted, removeWallet, sdkHasLoaded, secondaryWallets, selectedTabIndex, selectedTabSettings, selectedWalletConnector, selectedWalletWithAction, sendWagmiSettings, setAuthorizationViewDisplayOrder, setBridgeOnboardingCompleted, setCallback, setDesktopUri, setIsRenderingEmbeddedAuthFlow, setIsSingleWalletAccount, setLegacyIsVerifying, setLogInWithEmail, setMultiWalletWidgetState, setPasskeySuccessPopup, setPrimaryWallet, setQrcodeUri, setSelectedTabIndex, setSelectedWalletConnectorKey, setSelectedWalletWithAction, setShowAuthFlow, setShowBridgeWidget, setShowDynamicUserProfile, setShowQrcodeModal, shadowDOMEnabled, showAuthFlow, showBridgeWidget, showDynamicUserProfile, showFiat, showLockedWalletView, showQrcodeModal, siweStatement, socialMediaIconUrl: ((_a = projectSettings$1 === null || projectSettings$1 === void 0 ? void 0 : projectSettings$1.general) === null || _a === void 0 ? void 0 : _a.supportUrls) || socialMediaIconUrl, socialMediaLinkText, socialMediaUrl, socialProvidersFilter, socialSettings: settings$1.social, tabsItems, termsOfServiceUrl, theme, user: user$1, userWithMissingInfo, walletConnectorOptions, walletUiUtils, walletsFilter, }); }, [ accessDeniedButton, accessDeniedMessagePrimary, accessDeniedMessageSecondary, accountSwitchState, appLogoUrl, appName, authorizationViewDisplayOrder, awaitingSignatureState, bridgeChains, bridgeChainsToConnect, bridgeOnboardingCompleted, clearStatesOnBackClick, connectWallet, connectedWallets, cssOverrides, customPrivacyPolicy, customTermsOfServices, debugError, defaultNumberOfWalletsToShow, defaultPhoneInputIso2, desktopUri, detectNewWalletsForLinking, disconnectWallet, displaySiweStatement, enableConnectOnlyFallback, environmentId, settings$1.events, settings$1.overrides, settings$1.redirectUrl, settings$1.social, getConnectedWalletById, getNameService, handleLogOut, removeWallet, handlers, i18nSDKInstance, isBridgeFlow, isRenderingEmbeddedAuthFlow, isSingleWalletAccount, legacyIsVerifying, linkedWallets, loadingNetwork, memoizedLocale, loginWithEmail, multiAsset, multiWallet, multiWalletWidgetState, network, serverNetworkConfigurations, networkValidationMode, walletsForChainsMap, imageUserNotInAccessList, notInTheListImageUrl, imageUserInAccessList, onboardingImageUrl, passkeySuccessPopup, policiesConsentInnerComponent, primaryWallet, primaryWalletId$1, privacyPolicyUrl, projectSettings$1, qrcodeUri, recommendedWallets, refetchProjectSettings, removeBridgeOnboardingCompleted, sdkHasLoaded, secondaryWallets, selectedTabIndex, selectedTabSettings, selectedWalletConnector, selectedWalletWithAction, sendWagmiSettings, setAuthorizationViewDisplayOrder, setBridgeOnboardingCompleted, setCallback, setLogInWithEmail, setMultiWalletWidgetState, setPasskeySuccessPopup, setPrimaryWallet, setSelectedTabIndex, setSelectedWalletConnectorKey, setShowAuthFlow, setShowDynamicUserProfile, setShowQrcodeModal, shadowDOMEnabled, showAuthFlow, showBridgeWidget, showDynamicUserProfile, showFiat, showLockedWalletView, showQrcodeModal, siweStatement, socialMediaIconUrl, socialMediaLinkText, socialMediaUrl, socialProvidersFilter, tabsItems, termsOfServiceUrl, theme, user$1, userWithMissingInfo, walletConnectorOptions, walletUiUtils, walletsFilter, ]); usePrefetch.usePrefetch({ as: 'image', href: iconic.getIconicSpriteUrl(), id: 'sprite', type: 'image/svg+xml', }); usePrefetch.usePrefetch({ as: 'fetch', href: walletBook.getWalletBookCdnUrl(), id: 'wallet-book', type: 'application/json', }); usePrefetch.usePrefetch({ as: 'fetch', href: `${ApiEndpoint.getBaseUrl()}/sdk/${environmentId}/settings?sdkVersion=${encodeURIComponent(`WalletKit/${version.VERSION}`)}`, id: `project-settings-${environmentId}`, type: 'application/json', }); const initialViewType = useInitialViewType.useInitialViewType({ bridgeOnboardingCompleted, connectedWallets, isAuthenticated: isAuthenticated || Boolean(primaryWallet), isBridgeFlow, isMultiWalletEnabled: multiWallet, }); return (jsxRuntime.jsx(reactI18next.I18nextProvider, { i18n: i18nSDKInstance, children: jsxRuntime.jsx(DynamicContext.Provider, { value: value, children: jsxRuntime.jsx(walletBook.WalletBookContextProvider, { walletBook: walletBook$1, children: jsxRuntime.jsx(ThemeContext.ThemeContextProvider, { customerTheme: parseTheme.parseTheme(theme, ((_q = projectSettings$1 === null || projectSettings$1 === void 0 ? void 0 : projectSettings$1.design) === null || _q === void 0 ? void 0 : _q.modal) || undefined), designSettings: projectSettings$1 === null || projectSettings$1 === void 0 ? void 0 : projectSettings$1.design, children: jsxRuntime.jsx(LoadingContext.LoadingContextProvider, { children: jsxRuntime.jsxs(ViewContext.ViewContextProvider, { initialViewType: initialViewType, children: [networkValidationMode === 'always' && jsxRuntime.jsx(UseNetworkValidation.UseNetworkValidation, {}), jsxRuntime.jsx(CaptchaContext.CaptchaContextProvider, { children: jsxRuntime.jsx(AccountExistsContext.AccountExistsContextProvider, { children: jsxRuntime.jsx(WalletContext.WalletContextProvider, { children: jsxRuntime.jsx(VerificationContext.VerificationProvider, { children: jsxRuntime.jsx(PasskeyContext.PasskeyContextProvider, { children: jsxRuntime.jsx(DynamicWidgetContext.DynamicWidgetContextProvider, { children: jsxRuntime.jsx(DynamicBridgeWidgetContext.DynamicBridgeWidgetContextProvider, { children: jsxRuntime.jsx(OnrampContext.OnrampContextProvider, { children: jsxRuntime.jsx(AccessDeniedContext.AccessDeniedContextProvider, { children: jsxRuntime.jsx(SendBalanceContext.SendBalanceContextProvider, { children: jsxRuntime.jsx(WalletGroupContext.WalletGroupContextProvider, { children: jsxRuntime.jsx(UserFieldEditorContext.UserFieldEditorContextProvider, { children: jsxRuntime.jsx(ConnectWithOtpProvider.ConnectWithOtpProvider, { children: jsxRuntime.jsx(PhantomRedirectContext.PhantomRedirectContextProvider, { children: jsxRuntime.jsxs(SocialRedirectContext.SocialRedirectContextProvider, { children: [jsxRuntime.jsx(app.DynamicAuthFlow, {}), jsxRuntime.jsx(OnrampWidget.OnrampWidget, {}), jsxRuntime.jsx(SyncAuthFlow.SyncAuthFlow, {}), jsxRuntime.jsx(WalletConnectorEvents.WalletConnectorEvents, { connectorProps: connectorProps }), confirmationModal, jsxRuntime.jsx(ErrorBoundaryExclude.ErrorBoundaryExclude, { children: children })] }) }) }) }) }) }) }) }) }) }) }) }) }) }) })] }) }) }) }) }) })); }; /** The context provider you need to have access too all of Dynamic's hooks */ const DynamicContextProvider = (props) => { // Initialize client before anything else useInitializeSdkClient.useInitializeSdkClient(props); logger.Logger.setEnvironmentId(props.settings.environmentId); logger.Logger.setEmitErrors(props.emitErrors); useParentDynamicContextGuard.useParentDynamicContextGuard(); return (jsxRuntime.jsx(ReinitializeContextProvider.ReinitializeContextProvider, { onReinitialize: onReinitialize.onReinitialize, children: jsxRuntime.jsx(ErrorBoundary.ErrorBoundary, { children: jsxRuntime.jsx(ErrorContext.ErrorContextProvider, { children: jsxRuntime.jsx(UserWalletsContext.UserWalletsProvider, { children: jsxRuntime.jsx(FieldsStateContext.FieldsStateProvider, { children: jsxRuntime.jsx(IpConfigurationContext.IpConfigurationContextProvider, { children: jsxRuntime.jsx(WidgetRegistryContextProvider.WidgetRegistryContextProvider, { children: jsxRuntime.jsx(InnerDynamicContextProvider, Object.assign({}, props)) }) }) }) }) }) }) })); }; exports.DynamicContext = DynamicContext; exports.DynamicContextProvider = DynamicContextProvider; exports.InnerDynamicContextProvider = InnerDynamicContextProvider; exports.PUBLIC_PROJECT_LIVE_ENVIRONMENT_ID = PUBLIC_PROJECT_LIVE_ENVIRONMENT_ID;