@privy-io/react-auth 1.96.2 → 1.97.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/dist/cjs/client.js +1 -1
- package/dist/cjs/components/LoginModal.js +1 -1
- package/dist/cjs/connectors/embeddedProvider.js +1 -1
- package/dist/cjs/connectors/ethereum/EthereumNullConnector.js +1 -0
- package/dist/cjs/connectors/index.js +1 -1
- package/dist/cjs/connectors/is-wallet-installed.js +1 -1
- package/dist/cjs/connectors/phantom-solana.js +1 -0
- package/dist/cjs/connectors/phantom.js +1 -1
- package/dist/cjs/connectors/solana/SolanaNullConnector.js +1 -0
- package/dist/cjs/constants.js +1 -1
- package/dist/cjs/embedded-wallets/EmbeddedWalletIframe.js +1 -1
- package/dist/cjs/embedded-wallets/solana/provider.js +1 -1
- package/dist/cjs/formatters-DnPKmSM4.js +1 -0
- package/dist/cjs/hooks/internal-context.js +1 -1
- package/dist/cjs/hooks/privy-provider.js +1 -1
- package/dist/cjs/hooks/useFundSolanaWallet.js +1 -1
- package/dist/cjs/index.js +1 -1
- package/dist/cjs/lib/funding/reservoir.js +1 -1
- package/dist/cjs/lib/smart-wallets-shared.js +1 -1
- package/dist/cjs/plugins/context/PrivyPluginContext.js +1 -0
- package/dist/cjs/plugins/models.js +1 -0
- package/dist/cjs/plugins/solana-funding/id.js +1 -0
- package/dist/cjs/plugins/solana-funding/plugin.js +1 -0
- package/dist/cjs/plugins/solana-funding/type.js +1 -0
- package/dist/cjs/plugins/solana-funding/useSolanaFundingPlugin.js +1 -0
- package/dist/cjs/privy-components/user-pill/AddFundsButton.js +1 -1
- package/dist/cjs/privy-components/user-pill/UserMenu.js +1 -1
- package/dist/cjs/privy-components/user-pill/UserPill.js +2 -2
- package/dist/cjs/privy-components/user-pill/UserPill.test.js +1 -1
- package/dist/cjs/privy-components/user-pill/screens/AccountScreen.js +1 -1
- package/dist/cjs/privy-components/user-pill/screens/MenuScreen.js +1 -1
- package/dist/cjs/privy-components/user-pill/screens/WalletActionsScreen.js +1 -1
- package/dist/cjs/privy-provider-CCAJu2BJ.js +2 -0
- package/dist/cjs/screens/DelegatedActionsConsentScreen.js +1 -1
- package/dist/cjs/screens/DelegatedActionsRevokeScreen.js +1 -1
- package/dist/cjs/screens/Funding/AwaitingEvmToSolBridgingScreen.js +1 -1
- package/dist/cjs/screens/Funding/AwaitingExternalSolanaTransferScreen.js +1 -1
- package/dist/cjs/screens/Funding/AwaitingExternalTransferScreen.js +1 -1
- package/dist/cjs/screens/Funding/AwaitingSolToEvmBridgingScreen.js +1 -1
- package/dist/cjs/screens/Funding/BridgeNetworkSelectionView.js +1 -1
- package/dist/cjs/screens/Funding/FundingEditAmountScreen.js +1 -1
- package/dist/cjs/screens/Funding/ManualTransferScreen.js +1 -1
- package/dist/cjs/screens/Funding/TransferFromWalletScreen.js +1 -1
- package/dist/cjs/screens/Funding/styles.js +1 -1
- package/dist/cjs/screens/LandingScreen/LandingScreenView.js +1 -1
- package/dist/cjs/screens/LandingScreen/WalletButtonList.js +1 -1
- package/dist/cjs/solana.js +1 -1
- package/dist/cjs/ui.js +1 -1
- package/dist/dts/index.d.mts +4 -4
- package/dist/dts/index.d.ts +4 -4
- package/dist/dts/solana.d.mts +6 -2
- package/dist/dts/solana.d.ts +6 -2
- package/dist/dts/{types-2a5Pf2GX.d.mts → types-DIHtez5D.d.mts} +1 -1
- package/dist/dts/{types-2a5Pf2GX.d.ts → types-DIHtez5D.d.ts} +1 -1
- package/dist/dts/ui.d.mts +1 -1
- package/dist/dts/ui.d.ts +1 -1
- package/dist/dts/{solana-D7kL9lA8.d.mts → useFundSolanaWallet-BQJ4tqWZ.d.mts} +1 -1
- package/dist/dts/{solana-D7kL9lA8.d.ts → useFundSolanaWallet-BQJ4tqWZ.d.ts} +1 -1
- package/dist/esm/client.mjs +1 -1
- package/dist/esm/components/LoginModal.mjs +1 -1
- package/dist/esm/connectors/embeddedProvider.mjs +1 -1
- package/dist/esm/connectors/ethereum/EthereumNullConnector.mjs +1 -0
- package/dist/esm/connectors/index.mjs +1 -1
- package/dist/esm/connectors/is-wallet-installed.mjs +1 -1
- package/dist/esm/connectors/phantom-solana.mjs +1 -0
- package/dist/esm/connectors/phantom.mjs +1 -1
- package/dist/esm/connectors/solana/SolanaNullConnector.mjs +1 -0
- package/dist/esm/constants.mjs +1 -1
- package/dist/esm/embedded-wallets/EmbeddedWalletIframe.mjs +2 -2
- package/dist/esm/embedded-wallets/solana/provider.mjs +1 -1
- package/dist/esm/formatters--YjgN2Dw.mjs +1 -0
- package/dist/esm/hooks/internal-context.mjs +1 -1
- package/dist/esm/hooks/privy-provider.mjs +1 -1
- package/dist/esm/hooks/useFundSolanaWallet.mjs +1 -1
- package/dist/esm/index.mjs +1 -1
- package/dist/esm/lib/funding/reservoir.mjs +1 -1
- package/dist/esm/lib/smart-wallets-shared.mjs +1 -1
- package/dist/esm/plugins/context/PrivyPluginContext.mjs +1 -0
- package/dist/esm/plugins/models.mjs +1 -0
- package/dist/esm/plugins/solana-funding/id.mjs +1 -0
- package/dist/esm/plugins/solana-funding/plugin.mjs +1 -0
- package/dist/esm/plugins/solana-funding/type.mjs +1 -0
- package/dist/esm/plugins/solana-funding/useSolanaFundingPlugin.mjs +1 -0
- package/dist/esm/privy-components/user-pill/AddFundsButton.mjs +1 -1
- package/dist/esm/privy-components/user-pill/UserMenu.mjs +1 -1
- package/dist/esm/privy-components/user-pill/UserPill.mjs +2 -2
- package/dist/esm/privy-components/user-pill/UserPill.test.mjs +1 -1
- package/dist/esm/privy-components/user-pill/screens/AccountScreen.mjs +1 -1
- package/dist/esm/privy-components/user-pill/screens/MenuScreen.mjs +1 -1
- package/dist/esm/privy-components/user-pill/screens/WalletActionsScreen.mjs +1 -1
- package/dist/esm/privy-provider-Ddew1epi.mjs +2 -0
- package/dist/esm/screens/DelegatedActionsConsentScreen.mjs +1 -1
- package/dist/esm/screens/DelegatedActionsRevokeScreen.mjs +1 -1
- package/dist/esm/screens/Funding/AwaitingEvmToSolBridgingScreen.mjs +2 -2
- package/dist/esm/screens/Funding/AwaitingExternalSolanaTransferScreen.mjs +2 -2
- package/dist/esm/screens/Funding/AwaitingExternalTransferScreen.mjs +1 -1
- package/dist/esm/screens/Funding/AwaitingSolToEvmBridgingScreen.mjs +2 -2
- package/dist/esm/screens/Funding/BridgeNetworkSelectionView.mjs +1 -1
- package/dist/esm/screens/Funding/FundingEditAmountScreen.mjs +1 -1
- package/dist/esm/screens/Funding/ManualTransferScreen.mjs +1 -1
- package/dist/esm/screens/Funding/TransferFromWalletScreen.mjs +1 -1
- package/dist/esm/screens/Funding/styles.mjs +1 -1
- package/dist/esm/screens/LandingScreen/LandingScreenView.mjs +1 -1
- package/dist/esm/screens/LandingScreen/WalletButtonList.mjs +1 -1
- package/dist/esm/solana.mjs +1 -1
- package/dist/esm/ui.mjs +1 -1
- package/package.json +5 -5
- package/dist/cjs/connectors/NullConnector.js +0 -1
- package/dist/cjs/privy-provider-DLQmz_VR.js +0 -2
- package/dist/esm/connectors/NullConnector.mjs +0 -1
- package/dist/esm/privy-provider-DovwooOo.mjs +0 -2
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
import{jsx as e,jsxs as t}from"react/jsx-runtime";import{getAddress as a}from"@ethersproject/address";import{Web3Provider as r}from"@ethersproject/providers";import{createStore as n}from"mipd";import{useState as i,useRef as o,useEffect as s,useMemo as l}from"react";import{isAndroid as c}from"react-device-detect";import{CustomJwtAccountFlow as d}from"./auth-flows/custom-jwt-account.mjs";import{UpdateEmailFlow as u,EmailFlow as h}from"./auth-flows/email.mjs";import{FarcasterFlow as p}from"./auth-flows/farcaster.mjs";import{GuestFlow as w}from"./auth-flows/guest.mjs";import{PasskeyFlow as m}from"./auth-flows/passkey.mjs";import{SiweFlow as y}from"./auth-flows/siwe.mjs";import{SiwsFlow as f}from"./auth-flows/siws.mjs";import{UpdateSmsFlow as g,SmsFlow as E}from"./auth-flows/sms.mjs";import{TelegramAuthFlow as _,detectCompletingTelegramFlow as A}from"./auth-flows/telegram.mjs";import{v4 as v}from"uuid";import{AccessToken as T}from"./accessToken.mjs";import{getEntropyDetailsFromAccount as C,convertUserResponseToUser as I,getPrivySolanaWallet as W,getPrivyPrimaryWallet as k,getEntropyDetailsFromUser as N,getPrivyEthereumWallet as b,getPrivyEthereumHDWallets as U,getImportedPrivyEthereumWallet as O,shouldProceedtoEmbeddedWalletCreationFlow as S,getLatestPrivyEthereumWallet as R,getEthereumSigningAndRootWallet as P,getSolanaSigningAndRootWallet as L}from"./client/user.mjs";import M from"eventemitter3";import{CONNECTORS_STATE_KEY as D,CONNECTIONS_HISTORY_KEY as F,DEFAULT_PRIVY_API_URL as x,DEFAULT_API_TIMEOUT_MS as j,CLIENT_ANALYTICS_ID_KEY as B,CUSTOMER_ACCESS_TOKEN_STORAGE_KEY as V,PRIVY_ACCESS_TOKEN_STORAGE_KEY as H,getGuestCredentialStorageKey as K,HEADLESS_OAUTH_KEY as G,OAUTH_DISABLE_SIGNUP_KEY as z,STATE_CODE_KEY as q,WALLET_PROXY_TIMEOUT as $,FORKED_TOKEN_STORAGE_KEY as Y}from"./constants.mjs";import X,{isLocalStorageAccessible as Q}from"./storage.mjs";import{getJsonRpcProvider as J,generateTypedDataWithDomainType as Z,toHex as ee,detectInjectedConnectors as te,formatChainIdToCAIP2 as ae}from"./utils/index.mjs";import{CoinbaseWalletConnector as re}from"./connectors/coinbase.mjs";import{EmbeddedWalletConnector as ne}from"./connectors/embedded.mjs";import{isSupportedEthereumRpcMethod as ie}from"./embedded-wallets/rpc/types.mjs";import{Captcha as oe}from"./components/Captcha.mjs";import{LoginModal as se}from"./components/LoginModal.mjs";import{TelegramLoginButton as le}from"./components/TelegramLoginButton.mjs";import{PrivyAppConfigProvider as ce,useAppConfig as de,useIsServerConfigLoaded as ue}from"./configuration/context.mjs";import{areWalletArraysEqual as he}from"./connectors/areWalletArraysEqual.mjs";import{PrivyProviderRpcError as pe,ProviderRpcError as we}from"./connectors/errors.mjs";import{isPhantomInstalled as me}from"./connectors/is-wallet-installed.mjs";import{isBaseConnectedEthereumWallet as ye}from"./connectors/isBaseConnectedEthereumWallet.mjs";import{PrivyProxyProvider as fe,AsExternalProvider as ge,AsAbstractProvider as Ee}from"./connectors/privyProxyProvider.mjs";import{isSolanaWalletConnector as _e,isBaseConnectedSolanaWallet as Ae}from"./connectors/solana/index.mjs";import{WalletConnectV2WalletConnector as ve}from"./connectors/walletconnect-v2.mjs";import{EmbeddedWalletIframe as Te}from"./embedded-wallets/EmbeddedWalletIframe.mjs";import{isWalletDelegated as Ce,getDelegatedWalletsData as Ie,getRootWalletDataForDelegation as We,getDelegatedWalletsForUser as ke}from"./embedded-wallets/delegated-actions.mjs";import{errorIndicatesRecoveryIsNeeded as Ne}from"./embedded-wallets/errors.mjs";import{formatReceipt as be,getAndCheckBalance as Ue,sendTransaction as Oe}from"./embedded-wallets/rpc/index.mjs";import{PrivyClientError as Se,formatApiError as Re,formatPrivyError as Pe,PrivyErrorCode as Le,PrivyNotReadyError as Me,PrivyConnectorError as De,PrivyError as Fe}from"./errors.mjs";import{signSolanaTransaction as xe,sendSolanaTransaction as je}from"./embedded-wallets/solana/transaction.mjs";import{extractChainIdFromCAIP2 as Be}from"./lib/caip2.mjs";import{USE_BROADCAST_CHANNEL_EVENT_TYPE as Ve,isPrivyTheOAuthProvider as He,CROSS_APP_BROADCAST_CHANNEL_NAME as Ke}from"./lib/cross-app/index.mjs";import{getCrossAppAuthorizationUrl as Ge,authenticateCrossAppAccount as ze,getProviderAppMetadata as qe}from"./lib/cross-app/authFlow.mjs";import{popupCrossAppAuthFlow as $e}from"./lib/cross-app/popupCrossAppAuthFlow.mjs";import{sendCrossAppRequest as Ye}from"./lib/cross-app/sendCrossAppRequest.mjs";import{getRecoveryAuthorizationUrl as Xe,authenticateRecovery as Qe,embeddedWalletRecoveryScreen as Je,toEmbeddedWalletSetRecoveryScreen as Ze}from"./lib/embeddedWalletRecovery.mjs";import{FUNDING_SCREENS as et,fundingScreenMethodMap as tt}from"./lib/funding/index.mjs";import{isFundingEnabled as at}from"./lib/funding/isFundingEnabled.mjs";import rt from"./lib/isEmbeddedWebview.mjs";import{triggerPopup as nt}from"./lib/popup/triggerPopup.mjs";import{popupOAuthFlow as it}from"./lib/popupOAuthFlow.mjs";import{prepareSiweMessageWithNonce as ot}from"./lib/siwe.mjs";import{getSolanaRpcEndpointForCluster as st}from"./lib/solana/index.mjs";import{decodeSolanaTransaction as lt,createSolanaTransactionReceipt as ct}from"./lib/solana/transaction.mjs";import{toDisplayFromAccountType as dt}from"./lib/toDisplayFromAccountType.mjs";import{transformResponseToSnakeCase as ut}from"./passkeys/transformResponseToSnakeCase.mjs";import{RecentlyUsedAccountProvider as ht}from"./recent-login/context.mjs";import{ModalScreen as pt}from"./screens/index.mjs";import{Hide as wt}from"./screens/LandingScreen/styles.mjs";import{GlobalStyle as mt}from"./styles.mjs";import{notImplemented as yt}from"./hooks/index.mjs";import{CaptchaProvider as ft}from"./hooks/captcha-context.mjs";import{privyEventsDefault as gt,emitPrivyEvent as Et,PrivyEventsContext as _t}from"./hooks/events-context.mjs";import{InternalPrivyContext as At}from"./hooks/internal-context.mjs";import{ModalProvider as vt}from"./hooks/modal-context.mjs";import{PrivyContext as Tt}from"./hooks/privy-context.mjs";import{UseWalletsContext as Ct}from"./hooks/useWallets.mjs";import{prepareSolanaFundingModalData as It,prepareFundingModalData as Wt}from"./lib/funding/prepareFundingModalData.mjs";import{detectCompletingOAuthFlow as kt}from"./auth-flows/oauth/detectCompletingOAuthFlow.mjs";import{g as Nt,o as bt}from"./index-B3QfI7v9.mjs";import{n as Ut}from"./errors-9ucGZPEs.mjs";import{OAuthFlow as Ot}from"./auth-flows/oauth/OAuthFlow.mjs";import{getRpcTimeout as St}from"./connectors/getRpcTimeout.mjs";import{EmbeddedProviderError as Rt}from"./connectors/providerTypes.mjs";import{isEthereumWalletConnector as Pt}from"./connectors/ethereum/index.mjs";import{LegacyInjectedWalletConnector as Lt,Injected6963WalletConnector as Mt}from"./connectors/injected.mjs";import{MetamaskWalletConnector as Dt}from"./connectors/metamask.mjs";import{PhantomWalletConnector as Ft}from"./connectors/phantom.mjs";import{Http as xt}from"./http.mjs";import{getPaymasterContext as jt}from"./lib/smart-wallet-helpers.mjs";import{transformOptionsToCamelCase as Bt}from"./passkeys/transformOptionsToCamelCase.mjs";import{mfaPasswordlessSmsInitPath as Vt,mfaPasskeyInitPath as Ht,acceptTermsPath as Kt,unlinkEmailPath as Gt,unlinkPhonePath as zt,unlinkWalletPath as qt,siwsUnlinkWalletPath as $t,unlinkOAuthPath as Yt,unlinkFarcasterPath as Xt,telegramAccountUnlinkPath as Qt,unlinkPasskeyPath as Jt,delegatedActionsRevokePath as Zt,analyticsEventsPath as ea,moonpayPluginOnRampPath as ta,coinbaseOnRampInitPath as aa,coinbaseOnRampStatusPath as ra,siweInitPath as na,siweAuthenticatePath as ia,siweLinkPath as oa,smartWalletLinkPath as sa,siwsInitPath as la,siwsAuthenticatePath as ca,transferOAuthPath as da,telegramAccountTransferPath as ua,transferFarcasterPath as ha,transferWalletPath as pa,transferPhonePath as wa,transferEmailPath as ma,siwsLinkPath as ya}from"./paths.mjs";import{AccessTokenTypes as fa,Session as ga}from"./session.mjs";class Ea extends M{async handleSendTransaction(e){if(!e.params||!Array.isArray(e.params))throw new Rt(`Invalid params for ${e.method}`,4200);let t=e.params[0];if(!await Ma()||!this.address)throw new Rt("Disconnected",4900);return(await xa(t,void 0,void 0,this.address)).hash}handleSwitchEthereumChain(e){let t;if(!e.params||!Array.isArray(e.params))throw new Rt(`Invalid params for ${e.method}`,4200);if("string"==typeof e.params[0])t=e.params[0];else{if(!("chainId"in e.params[0])||"string"!=typeof e.params[0].chainId)throw new Rt(`Invalid params for ${e.method}`,4200);t=e.params[0].chainId}this.chainId=Number(t),this.provider=J(this.chainId,this.chains,this.rpcConfig,{appId:this.appId}),this.emit("chainChanged",t)}async handlePersonalSign(e){if(!e.params||!Array.isArray(e.params))throw Error("Invalid params for personal_sign");let t=e.params[0],a=e.params[1];return await Da(t,void 0,a)}async handleSignedTypedData(e){if(!e.params||!Array.isArray(e.params))throw Error("Invalid params for eth_signTypedData_v4");let t=e.params[0],a="string"==typeof e.params[1]?JSON.parse(e.params[1]):e.params[1];return await Fa(Z(a),void 0,t)}async handleEstimateGas(e){if(!e.params||!Array.isArray(e.params))throw Error("Invalid params for eth_estimateGas");delete e.params[0].gasPrice,delete e.params[0].maxFeePerGas,delete e.params[0].maxPriorityFeePerGas;let t={...e.params[0],chainId:ee(this.chainId)};try{return await this.provider.send("eth_estimateGas",[t])}catch(e){console.warn(`Gas estimation failed with error: ${e}. Retrying gas estimation by omitting the 'from' address`);try{return delete t.from,await this.provider.send("eth_estimateGas",[t])}catch(t){throw console.warn(`Gas estimation failed with error: ${t} when omitting the 'from' address`),e}}}async request(e){switch(console.debug("Embedded1193Provider.request() called with args",e),e.method){case"eth_accounts":case"eth_requestAccounts":return this.address?[this.address]:[];case"eth_chainId":return ee(this.chainId);case"eth_estimateGas":return this.handleEstimateGas(e);case"eth_sendTransaction":return this.handleSendTransaction(e);case"wallet_switchEthereumChain":return this.handleSwitchEthereumChain(e);case"personal_sign":return this.handlePersonalSign(e);case"eth_signTypedData_v4":return this.handleSignedTypedData(e)}if(!ie(e.method))return this.provider.send(e.method,e.params);{let t=await Ma();if(await ja(),!t||!this.address)throw new Rt("Disconnected",4900);try{return(await this.walletProxy.rpc({accessToken:t,entropyId:this.entropyId,entropyIdVerifier:this.entropyIdVerifier,chainType:"ethereum",hdWalletIndex:this.walletIndex,request:{method:e.method,params:e.params}})).response.data}catch(e){throw console.error(e),new Rt("Disconnected",4900)}}}constructor({walletProxy:e,address:t,entropyId:a,entropyIdVerifier:r,rpcConfig:n,chains:i,appId:o,chainId:s=1,walletIndex:l}){super(),this.walletProxy=e,this.address=t,this.entropyId=a,this.entropyIdVerifier=r,this.chainId=s,this.rpcConfig=n,this.chains=i,this.provider=J(s,this.chains,n,{appId:o}),this.rpcTimeoutDuration=St(n,"privy"),this.appId=o,this.walletIndex=l}}class _a extends M{get wallets(){let e=new Set,t=this.walletConnectors.flatMap((e=>e.wallets)).sort(((e,t)=>e.connectedAt&&t.connectedAt?t.connectedAt-e.connectedAt:0)).filter((t=>{let a=`${t.address}${t.walletClientType}${t.connectorType}`;return!e.has(a)&&(e.add(a),!0)})),a=t.findIndex((e=>e.address===(this.activeWallet?this.activeWallet:"unknown")));return a>=0&&t.unshift(t.splice(a,1)[0]),t}async initialize(){if(this.initialized)return;X.get(D)&&(X.getKeys().forEach((e=>{e.startsWith("walletconnect")&&X.del(e)})),X.del(D));let e=te({store:this.store,walletList:this.walletList,externalWalletConfig:this.externalWalletConfig,walletChainType:this.walletChainType}).then((e=>{e.forEach((({type:e,eip6963InjectedProvider:t,legacyInjectedProvider:a})=>{this.createEthereumWalletConnector("injected",e,{eip6963InjectedProvider:t,legacyInjectedProvider:a})}))}));this.walletList.includes("coinbase_wallet")&&this.createEthereumWalletConnector("coinbase_wallet","coinbase_wallet"),!me()&&this.walletList.includes("phantom")&&"solana-only"!==this.walletChainType&&this.createEthereumWalletConnector("phantom","phantom"),this.externalWalletConfig.walletConnect.enabled&&this.createEthereumWalletConnector("wallet_connect_v2","unknown"),this.externalWalletConfig.solana.connectors?.get().forEach(this.addSolanaWalletConnector),this.externalWalletConfig.solana.connectors?._setOnConnectorsUpdated?.((e=>{e?.forEach(this.addSolanaWalletConnector)})),await e,this.initialized=!0}findWalletConnector(e,t){return"wallet_connect_v2"===e?this.walletConnectors.filter(Pt).find((t=>t.connectorType===e))??null:this.walletConnectors.filter(Pt).find((a=>a.connectorType===e&&a.walletClientType===t))??null}findSolanaWalletConnector(e,t){return this.walletConnectors.filter(_e).find((a=>a.connectorType===e&&a.walletClientType===t))??null}findEmbeddedWalletConnectors(){return this.walletConnectors.filter((e=>"embedded"===e.connectorType))}onInitialized(e){e.wallets.forEach((e=>{let t=this.storedConnections.find((t=>t.address===e.address&&t.connectorType===e.connectorType&&t.walletClientType===e.walletClientType));t&&(e.connectedAt=t.connectedAt)})),this.saveConnectionHistory(),this.emit("walletsUpdated"),this.emit("connectorInitialized")}onWalletsUpdated(e){e.initialized&&(this.saveConnectionHistory(),this.emit("walletsUpdated"))}addEmbeddedWalletConnectors({walletProxy:e,rootWallet:t,embeddedWallets:a,defaultChain:r,appId:n}){for(let i of a){let a=this.findEmbeddedWalletConnectors().find((e=>e.walletIndex===i.walletIndex));if(a&&Pt(a))a.proxyProvider.walletProxy=e;else{let{entropyId:a,entropyIdVerifier:o}=C(t),s=new ne({provider:new Ea({walletProxy:e,address:i.address,entropyId:a,entropyIdVerifier:o,rpcConfig:this.rpcConfig,chains:this.chains,appId:n,chainId:r.id,walletIndex:i.walletIndex}),chains:this.chains,defaultChain:r,rpcConfig:this.rpcConfig,imported:!1,walletIndex:i.walletIndex});this.addWalletConnector(s)}}}addImportedWalletConnector(e,t,a,r){let n=this.findWalletConnector("embedded_imported","privy");if(n&&Pt(n))n.proxyProvider.walletProxy=e;else{let n=new ne({provider:new Ea({walletProxy:e,address:t,entropyId:t,entropyIdVerifier:"ethereum-address-verifier",walletIndex:0,rpcConfig:this.rpcConfig,chains:this.chains,appId:r,chainId:a.id}),chains:this.chains,walletIndex:0,defaultChain:a,rpcConfig:this.rpcConfig,imported:!0});this.addWalletConnector(n)}}removeEmbeddedWalletConnectors(){this.walletConnectors=this.walletConnectors.filter((e=>"embedded"!==e.connectorType)),this.saveConnectionHistory(),this.storedConnections=Aa(),this.emit("walletsUpdated")}removeImportedWalletConnector(){let e=this.findWalletConnector("embedded_imported","privy");if(e){let t=this.walletConnectors.indexOf(e);this.walletConnectors.splice(t,1),this.saveConnectionHistory(),this.storedConnections=Aa(),this.emit("walletsUpdated")}}async createEthereumWalletConnector(e,t,a){let r=this.findWalletConnector(e,t);if(r&&Pt(r))return r instanceof ve&&r.resetConnection(t),r;let n=(()=>"injected"!==e?"coinbase_wallet"===e?new re(this.chains,this.defaultChain,this.rpcConfig,this.externalWalletConfig,this.privyAppName,this.privyAppLogo):"phantom"===e?new Ft(this.defaultChain):new ve(this.walletConnectCloudProjectId,this.rpcConfig,this.chains,this.defaultChain,this.shouldEnforceDefaultChainOnConnect,this.privyAppId,this.privyAppName,t):"metamask"===t&&a?.eip6963InjectedProvider?new Dt(this.chains,this.defaultChain,this.rpcConfig,a?.eip6963InjectedProvider,"metamask"):"metamask"===t&&a?.legacyInjectedProvider?new Lt(this.chains,this.defaultChain,this.rpcConfig,a?.legacyInjectedProvider,"metamask"):"phantom"===t&&a?.legacyInjectedProvider?new Lt(this.chains,this.defaultChain,this.rpcConfig,a?.legacyInjectedProvider,"phantom"):a?.legacyInjectedProvider&&"unknown_browser_extension"===t?new Lt(this.chains,this.defaultChain,this.rpcConfig,a?.legacyInjectedProvider):a?.eip6963InjectedProvider?new Mt(this.chains,this.defaultChain,this.rpcConfig,a?.eip6963InjectedProvider,t):void 0)();return n&&this.addWalletConnector(n),n||null}addWalletConnector(e){this.walletConnectors.push(e),e.on("initialized",(()=>this.onInitialized(e))),e.on("walletsUpdated",(()=>this.onWalletsUpdated(e))),e.initialize().catch((e=>{console.debug("Failed to initialize connector",e)}))}saveConnectionHistory(){let e=this.wallets.map((e=>({address:e.address,connectorType:e.connectorType,walletClientType:e.walletClientType,connectedAt:e.connectedAt})));X.put(F,e)}async activeWalletSign(e){let t=this.wallets,a=t.length>0?t[0]:null;return a&&ye(a)?a.sign(e):null}setActiveWallet(e){this.activeWallet=a(e),this.emit("walletsUpdated")}constructor(e,t,a,r,n,i,o,s,l,c,d,u){super(),this.addSolanaWalletConnector=async e=>{this.findSolanaWalletConnector("solana_adapter",e.walletClientType)||this.addWalletConnector(e)},this.getEthereumProvider=()=>{let e=this.wallets[0],t=this.walletConnectors.find((t=>t.wallets.find((t=>t.address===e?.address))));return e&&t?t.proxyProvider:new fe},this.privyAppId=e,this.walletConnectCloudProjectId=t,this.rpcConfig=a,this.chains=r,this.defaultChain=n,this.walletConnectors=[],this.initialized=!1,this.store=i,this.walletList=o,this.shouldEnforceDefaultChainOnConnect=s,this.externalWalletConfig=l,this.privyAppName=c,this.privyAppLogo=d,this.walletChainType=u||"ethereum-only",this.storedConnections=Aa()}}const Aa=()=>{let e=X.get(F);return e&&Array.isArray(e)&&e.map((e=>(e=>e&&"string"==typeof e.address&&"string"==typeof e.connectorType&&"string"==typeof e.walletClientType&&"number"==typeof e.connectedAt)(e))).every(Boolean)?e:[]};let va;var Ta=0,Ca="__private_"+Ta+++"__getOrGenerateClientAnalyticsId";class Ia{initializeConnectorManager({walletConnectCloudProjectId:e,rpcConfig:t,chains:a,defaultChain:r,store:n,walletList:i,shouldEnforceDefaultChainOnConnect:o,externalWalletConfig:s,appName:l,walletChainType:c}){this.connectors||(this.connectors=new _a(this.appId,e,t,a,r,n,i,o,s,l,void 0,c))}generateApi(){let e=new xt({appId:this.appId,appClientId:this.appClientId,client:this,defaults:{baseURL:this.apiUrl,timeout:this.timeout}});return this.session.api=e,e}updateApiUrl(e){this.apiUrl=e||this.fallbackApiUrl,this.api=this.generateApi(),e&&(this.useServerCookies=!0)}authenticate(){if(!this.authFlow)throw new Se("No auth flow in progress.");return this.session.authenticate(this.authFlow)}async link(){if(!this.authFlow)throw new Se("No auth flow in progress.");let{oAuthTokens:e}=await this.session.link(this.authFlow);return{user:await this.getAuthenticatedUser(),oAuthTokens:e}}storeProviderAccessToken(e,t){this.session.storeProviderAccessToken(e,t)}getProviderAccessToken(e){return this.session.getProviderAccessToken(e)}async logout(){await this.session.destroy(),this.authFlow=void 0}clearProviderAcccessTokens(e){e.linkedAccounts.filter((e=>"cross_app"===e.type)).forEach((e=>{this.storeProviderAccessToken(e.providerApp.id,null)}))}startAuthFlow(e){return e.api=this.api,this.authFlow=e,this.authFlow}async initMfaSmsVerification(){try{await this.api.post(Vt,{action:"verify"})}catch(e){throw Re(e)}}async initMfaPasskeyVerification(){try{let e=await this.api.post(Ht,{});return Bt(e.options)}catch(e){throw Re(e)}}async getCrossAppProviderDetails(e){try{return this._cachedProviderAppDetails[e]||(this._cachedProviderAppDetails[e]=await this.api.get(`/api/v1/apps/${e}/cross-app/details`)),this._cachedProviderAppDetails[e]}catch(e){console.error("Error fetching cross app provider details",e)}}async acceptTerms(){try{let e=await this.api.post(Kt,{});return I(e)}catch(e){throw Pe(e)}}async unlinkEmail(e){try{let t=await this.api.post(Gt,{address:e});return await this.getAuthenticatedUser()??I(t)}catch(e){throw Pe(e)}}async unlinkPhone(e){try{let t=await this.api.post(zt,{phoneNumber:e});return await this.getAuthenticatedUser()??I(t)}catch(e){throw Pe(e)}}async unlinkEthereumWallet(e){try{let t=await this.api.post(qt,{address:e});return await this.getAuthenticatedUser()??I(t)}catch(e){throw Pe(e)}}async unlinkSolanaWallet(e){try{let t=await this.api.post($t,{address:e});return await this.getAuthenticatedUser()??I(t)}catch(e){throw Pe(e)}}async unlinkOAuth(e,t){try{let a=await this.api.post(Yt,{provider:e,subject:t});return await this.getAuthenticatedUser()??I(a)}catch(e){throw Pe(e)}}async unlinkFarcaster(e){try{let t=await this.api.post(Xt,{fid:e});return await this.getAuthenticatedUser()??I(t)}catch(e){throw Pe(e)}}async unlinkTelegram(e){try{let t=await this.api.post(Qt,{telegram_user_id:e});return await this.getAuthenticatedUser()??I(t)}catch(e){throw Pe(e)}}async unlinkPasskey(e){try{let t=await this.api.post(Jt,{credential_id:e});return await this.getAuthenticatedUser()??I(t)}catch(e){throw Pe(e)}}async revokeDelegatedWallet(){try{await this.api.post(Zt,{})}catch(e){throw Pe(e)}}async createAnalyticsEvent({eventName:e,payload:t,timestamp:a,options:r}){if("undefined"!=typeof window)try{this.clientAnalyticsId||console.warn("No client analytics id set, refusing to send analytics event"),await this.api.post(ea,{event_name:e,client_id:this.clientAnalyticsId,payload:{...t||{},clientTimestamp:a?a.toISOString():(new Date).toISOString()}},{retry:-1,keepalive:r?.keepAlive??!1})}catch(e){}}async signMoonpayOnRampUrl(e){try{return this.api.post(ta,e)}catch(e){throw Pe(e)}}async initCoinbaseOnRamp(e){try{return this.api.post(aa,e)}catch(e){throw Pe(e)}}async getCoinbaseOnRampStatus({partnerUserId:e}){try{return this.api.get(`${ra}?partnerUserId=${e}`)}catch(e){throw Pe(e)}}async getAuthenticatedUser(){return this.session.hasRefreshCredentials()||this.session.hasRecoveryCredentials()?this.session.refresh():null}async getAccessToken(e){return await this.getPrivyAccessToken(e)||await this.getCustomerAccessToken(e)}async getCustomerAccessToken(e){return await this._getToken(fa.CUSTOMER,e)}async getPrivyAccessToken(e){return await this._getToken(fa.PRIVY,e)}async _getToken(e,t){return this.session.getToken(e)?this.session.hasActiveAccessToken(e)?this.session.hasRefreshCredentials(e)?T.parse(this.session.getToken(e))?.appId!==this.appId?(await this.logout(),null):this.session.getToken(e):(this.session.destroyLocalState(),null):!t?.disableAutoRefresh&&this.session.hasRefreshCredentials(e)?(await this.session.refresh(),this.session.getToken(e)):null:null}async getSmartWalletsConfig(){try{let e={},t=this.session.token;t&&(e.authorization=`Bearer ${t}`);let a=await this.api.get(`/api/v1/apps/${this.appId}/smart_wallets`,{baseURL:this.fallbackApiUrl,headers:e});return a.enabled?{enabled:a.enabled,smartWalletType:a.smart_wallet_type,configuredNetworks:a.configured_networks.map((e=>({chainId:e.chain_id,bundlerUrl:e.bundler_url,paymasterUrl:e.paymaster_url,paymasterContext:jt(e.paymaster_url,e.paymaster_context)})))}:{enabled:a.enabled}}catch(e){throw Pe(e)}}async getServerConfig(){try{let e={},t=this.session.token;t&&(e.authorization=`Bearer ${t}`);let a=await this.api.get(`/api/v1/apps/${this.appId}`,{baseURL:this.fallbackApiUrl,headers:e}),r=a.telegram_auth_config?{botId:a.telegram_auth_config.bot_id,botName:a.telegram_auth_config.bot_name,linkEnabled:a.telegram_auth_config.link_enabled,seamlessAuthEnabled:a.telegram_auth_config.seamless_auth_enabled}:void 0,n=a.funding_config?{methods:a.funding_config.methods,options:a.funding_config.options,defaultRecommendedAmount:a.funding_config.default_recommended_amount,defaultRecommendedCurrency:a.funding_config.default_recommended_currency,promptFundingOnWalletCreation:a.funding_config.prompt_funding_on_wallet_creation,crossChainBridgingEnabled:a.funding_config.cross_chain_bridging_enabled}:void 0;return{id:a.id,name:a.name,verificationKey:a.verification_key,logoUrl:a.logo_url||void 0,accentColor:a.accent_color||void 0,showWalletLoginFirst:a.show_wallet_login_first,allowlistConfig:{errorTitle:a.allowlist_config.error_title,errorDetail:a.allowlist_config.error_detail,errorCtaText:a.allowlist_config.cta_text,errorCtaLink:a.allowlist_config.cta_link},walletAuth:a.wallet_auth,solanaWalletAuth:a.solana_wallet_auth,emailAuth:a.email_auth,smsAuth:a.sms_auth,googleOAuth:a.google_oauth,twitterOAuth:a.twitter_oauth,discordOAuth:a.discord_oauth,githubOAuth:a.github_oauth,spotifyOAuth:a.spotify_oauth,instagramOAuth:a.instagram_oauth,tiktokOAuth:a.tiktok_oauth,linkedinOAuth:a.linkedin_oauth,appleOAuth:a.apple_oauth,farcasterAuth:a.farcaster_auth,passkeyAuth:a.passkey_auth,telegramAuth:a.telegram_auth,disablePlusEmails:a.disable_plus_emails,termsAndConditionsUrl:a.terms_and_conditions_url,embeddedWalletConfig:{createOnLogin:a.embedded_wallet_config?.create_on_login,userOwnedRecoveryOptions:a.embedded_wallet_config.user_owned_recovery_options,requireUserOwnedRecoveryOnCreate:a.embedded_wallet_config.require_user_owned_recovery_on_create},privacyPolicyUrl:a.privacy_policy_url,requireUsersAcceptTerms:a.require_users_accept_terms,customApiUrl:a.custom_api_url,walletConnectCloudProjectId:a.wallet_connect_cloud_project_id,fiatOnRampEnabled:a.fiat_on_ramp_enabled,captchaEnabled:a.captcha_enabled,captchaSiteKey:a.captcha_site_key,createdAt:new Date(1e3*a.created_at),updatedAt:new Date(1e3*a.updated_at),mfaMethods:a.mfa_methods,enforceWalletUis:a.enforce_wallet_uis,legacyWalletUiConfig:a.legacy_wallet_ui_config,telegramAuthConfiguration:r,fundingConfig:n}}catch(e){throw Pe(e)}}async getUsdTokenPrice(e){try{return(await this.api.get(`/api/v1/token_price?chainId=${e.id}&tokenSymbol=${e.nativeCurrency.symbol}`)).usd}catch(t){return void console.error(`Unable to fetch token price for chain with id ${e.id}`)}}async getUsdPriceForSol(){try{return(await this.api.get("/api/v1/token_price?chainId=0&tokenSymbol=SOL")).usd}catch(e){return void console.error("Unable to fetch token price for SOL")}}async requestFarcasterSignerStatus(e){try{return await this.api.post("/api/v1/farcaster/signer/status",{ed25519_public_key:e})}catch(e){throw console.error("Unable to fetch Farcaster signer status"),e}}async forkSession(){return await this.session.forkSession()}async generateSiweNonce({address:e,captchaToken:t}){try{return(await this.api.post(na,{address:e,token:t})).nonce}catch(e){throw Pe(e)}}async authenticateWithSiweInternal({message:e,signature:t,chainId:a,walletClientType:r,connectorType:n,mode:i}){return await this.api.post(ia,{message:e,signature:t,chainId:a,walletClientType:r,connectorType:n,mode:i})}async linkWithSiweInternal({message:e,signature:t,chainId:a,walletClientType:r,connectorType:n}){return await this.api.post(oa,{message:e,signature:t,chainId:a,walletClientType:r,connectorType:n})}async linkSmartWallet({message:e,signature:t,smartWalletType:a}){try{let r=await this.api.post(sa,{message:e,signature:t,smart_wallet_type:a});return I(r)}catch(e){throw Pe(e)}}async linkWithSiwe({message:e,signature:t,chainId:a,walletClientType:r,connectorType:n}){try{let i=await this.linkWithSiweInternal({message:e,signature:t,chainId:a,walletClientType:r,connectorType:n});return I(i)}catch(e){throw Pe(e)}}async generateSiwsNonce({address:e,captchaToken:t}){try{return(await this.api.post(la,{address:e,token:t})).nonce}catch(e){throw Pe(e)}}async authenticateWithSiwsInternal({message:e,signature:t,walletClientType:a,connectorType:r,mode:n}){return await this.api.post(ca,{message:e,signature:t,walletClientType:a,connectorType:r,mode:n})}async sendAccountTransferRequest({nonce:e,account:t,accountType:a,externalWalletMetadata:r,telegramAuthResult:n,farcasterEmbeddedAddress:i,oAuthUserInfo:o}){try{let s,l;switch(a){case"email":s=ma,l={nonce:e,email:t};break;case"sms":s=wa,l={nonce:e,phoneNumber:t};break;case"siwe":if(s=pa,!r)throw Error("Wallet parameters must be defined");l={nonce:e,address:t,...r};break;case"farcaster":s=ha,l={nonce:e,farcaster_id:t,farcaster_embedded_address:i};break;case"telegram":s=ua,l={nonce:e,telegram_auth_result:n};break;case"custom":case"guest":case"passkey":throw Error("Invalid transfer account type");default:s=da,l={nonce:e,userInfo:o}}let c=await this.api.post(s,l);return await this.getAuthenticatedUser()??I(c)}catch(e){throw Pe(e)}}async linkWithSiwsInternal({message:e,signature:t,walletClientType:a,connectorType:r}){return await this.api.post(ya,{message:e,signature:t,walletClientType:a,connectorType:r})}async linkWithSiws({message:e,signature:t,walletClientType:a,connectorType:r}){try{let n=await this.linkWithSiwsInternal({message:e,signature:t,walletClientType:a,connectorType:r});return I(n)}catch(e){throw Pe(e)}}constructor({apiUrl:e=x,appId:t,appClientId:a,timeout:r=j}){Object.defineProperty(this,Ca,{value:Wa}),this._cachedProviderAppDetails={},this.apiUrl=e,this.fallbackApiUrl=this.apiUrl,this.useServerCookies=e!==x&&e.startsWith("https://privy."),this.timeout=r,this.appId=t,this.appClientId=a,this.clientAnalyticsId=function(e,t){if(!Object.prototype.hasOwnProperty.call(e,t))throw TypeError("attempted to use private field on non-instance");return e}(this,Ca)[Ca](),va||(va=new ga),this.session=va,this.api=this.generateApi(),this.session.client=this}}function Wa(){if("undefined"==typeof window)return null;try{let e=X.get(B);if("string"==typeof e&&e.length>0)return e}catch(e){}let e=v();try{return X.put(B,e),e}catch(t){return e}}class ka{async handleSignMessage(e){if(!e.params||"string"!=typeof e.params.message)throw Error("Message must be provided as a string for Solana signMessage RPC");return await Va({message:e.params.message})}async request(e){if(console.debug("EmbeddedSolanaProvider.request() called with args",e),!await Ma())throw Error("User must be authenticated to use embedded Solana wallet");if(!await Ba())throw new Se("Unable to connect to Solana embedded wallet");if("signMessage"===e.method)return await this.handleSignMessage(e);throw Error("Embedded Solana provider does not yet support this RPC method.")}constructor(e,t){this.walletProxy=e,this.address=t}}let Na,ba,Ua,Oa,Sa,Ra,Pa;function La(){return Na?Na.getCustomerAccessToken():Promise.resolve(X.get(V)||null)}async function Ma(){return Na?Na.getAccessToken():Promise.resolve(X.get(H)||X.get(V)||null)}const Da=(e,t,a)=>ba(e,t,a),Fa=(e,t,a)=>Ua(e,t,a),xa=(e,t,a,r)=>Oa(e,t,a,r),ja=()=>Sa(),Ba=()=>Ra(),Va=({message:e})=>Pa({message:e});const Ha=({config:t,...a})=>{var r;if("undefined"!=typeof window&&0>["localhost","127.0.0.1"].indexOf(window.location.hostname)&&"https:"!==window.location.protocol)throw new Se("Embedded wallet is only available over HTTPS");if("string"!=typeof(r=a.appId)||25!==r.length)throw new Se("Cannot initialize the Privy provider with an invalid Privy app ID");Na||(Na=new Ia({appId:a.appId,appClientId:a.clientId,apiUrl:a.apiUrl}));let n=Object.assign({},t);return void 0!==a.createPrivyWalletOnLogin&&void 0===n.embeddedWallets?.createOnLogin&&(n.embeddedWallets||(n.embeddedWallets={}),n.embeddedWallets.createOnLogin=a.createPrivyWalletOnLogin?"users-without-wallets":"off"),void 0!==a.createPrivyWalletOnLogin&&t?.embeddedWallets?.createOnLogin&&console.warn("Both `createPrivyWalletOnLogin` and `config.embeddedWallets.createOnLogin` are set. `createPrivyWalletOnLogin` is deprecated and should be removed."),/*#__PURE__*/e(ce,{client:Na,clientConfig:n,legacyCreateEmbeddedWalletFlag:a.createPrivyWalletOnLogin,children:/*#__PURE__*/e(Ka,{...a,client:Na})})};let Ka=v=>{let T=v.client,[I,M]=i(!1),[D,F]=i(!1),[j,V]=i(!1),[H,te]=i(null),[re,ne]=i([]),[ie,ce]=i([]),[_e,Re]=i(null),Pe=o(re),[St,Rt]=i(!1),[Pt,Lt]=i(null),[Mt,Dt]=i(!1),[Ft,xt]=i({status:"disconnected",connectedWallet:null,connectError:null,connector:null,connectRetry:yt}),[jt,Bt]=i({status:"initial"}),[Vt,Ht]=i({status:"initial"}),[Kt,Gt]=i({status:"initial"}),[zt,qt]=i({status:"initial"}),[$t,Yt]=i({status:"initial"}),[Xt,Qt]=i(null),Jt=de(),Zt=ue(),[ea,ta]=i(!0),[aa,ra]=i({}),[na,ia]=i(null),[oa,sa]=i(null),[la,ca]=i(!1),[da,ua]=i(!1),[ha,pa]=i(Jt.customAuth?.enabled?{status:"initial"}:{status:"not-enabled"}),wa=o(null),ma=o(null),ya=o(gt),[fa,ga]=i(!1);T.onStoreCustomerAccessToken=e=>{e&&Et(ya,"accessToken","onAccessTokenGranted",e)},T.onDeleteCustomerAccessToken=()=>{te(null),V(!1),Et(ya,"accessToken","onAccessTokenRemoved")};let Ea=o(null),_a=o(null),Aa=o(!1),va=({showWalletUIs:e,typedData:t})=>Aa.current?Aa.current:void 0!==e?!e:void 0!==Jt.embeddedWallets.showWalletUIs?!Jt.embeddedWallets.showWalletUIs:t?Jt.embeddedWallets.noPromptOnSignature||(Jt.legacyWalletUiConfig??!1):!!Jt.embeddedWallets.noPromptOnSignature,Ta=e=>{Lt(e),setTimeout((()=>{M(!0)}),15),T.createAnalyticsEvent({eventName:"modal_open",payload:{initialScreen:e}})},Ca=e=>{"off"!==Jt.embeddedWallets.createOnLogin&&ta(!0),Ta(e)};s((()=>{let e=W(H);if(!e||!Xt)return void Re(null);let t={type:"solana",imported:!1,address:e.address,connectedAt:Date.now(),walletClientType:"privy",connectorType:"embedded",walletIndex:e.walletIndex??void 0,meta:{name:"Privy Wallet",icon:void 0,id:"io.privy.solana.wallet"},linked:!0,fund(){throw new Se("'fund' is deprecated for Solana wallets - use 'fundWallet' instead")},unlink:()=>{throw new Se("Cannot unlink an embedded Solana wallet")},getProvider:async()=>new ka(Xt,e.address),async signMessage(e){let t=await Ma(),a=k(H);if(!t||!Xt||!a)throw new Se("Must have valid access token and Privy wallet to send transaction",Le.MUST_BE_AUTHENTICATED);if(!await ir.recoverPrimaryWallet().catch((()=>!1)))throw new Se("Wallet couldn't be connected",Le.UNKNOWN_CONNECT_WALLET_ERROR);let{entropyId:r,entropyIdVerifier:n}=C(a),{response:i}=await Xt.rpc({accessToken:t,entropyId:r,entropyIdVerifier:n,chainType:"solana",hdWalletIndex:this.walletIndex??0,request:{method:"signMessage",params:{message:Buffer.from(e).toString("base64")}}});return Buffer.from(i.data.signature,"base64")},async sendTransaction(e,t,a){let{signature:r}=await Ja({transaction:e,connection:t,transactionOptions:a,wallet:this});return r},async signTransaction(e){let t=await Ma();if(!t||!Xt)throw new Se("Must have valid access token and Privy wallet to send transaction",Le.MUST_BE_AUTHENTICATED);if(!await ir.recoverPrimaryWallet().catch((()=>!1)))throw new Se("Wallet couldn't be connected",Le.UNKNOWN_CONNECT_WALLET_ERROR);let{entropyId:a,entropyIdVerifier:r}=N(H);return await xe({tx:e,accessToken:t,walletProxy:Xt,entropyId:a,entropyIdVerifier:r,transactingWalletAddress:this.address,transactingWalletIndex:this.walletIndex??0}),e},loginOrLink:async()=>{throw new Se("Cannot login or link with an embedded Solana wallet")},disconnect:()=>{Re(null)},isConnected:async()=>!0};Re(t)}),[Xt,H]),s((()=>{if(!H)return void T.connectors?.removeEmbeddedWalletConnectors();let e=b(H),t=U(H),a=O(H);e&&t.length||T.connectors?.removeEmbeddedWalletConnectors(),a||T.connectors?.removeImportedWalletConnector(),T.connectors?Xt?(e&&T.connectors.addEmbeddedWalletConnectors({walletProxy:Xt,rootWallet:e,embeddedWallets:t,defaultChain:Jt.defaultChain,appId:v.appId}),a&&T.connectors.addImportedWalletConnector(Xt,a.address,Jt.defaultChain,v.appId)):console.debug("Failed to add embedded wallet connector: Wallet proxy not initialized"):console.debug("Failed to add embedded wallet connector: Client connectors not initialized")}),[Xt,H]),s((()=>{Xt&&oa?.(Xt)}),[Xt]);let Ia=o();s((()=>{(async()=>{if(!Jt.customAuth?.enabled)return void pa({status:"not-enabled"});ta(!0);let{getCustomAccessToken:e,isLoading:t}=Jt.customAuth;if(D&&!t&&"loading"!==ha.status){pa({status:"loading"});try{let t=await e();if(t===Ia.current)return void pa({status:"done"});if(!t&&j)return Ia.current=t,await nr.logout(),pa({status:"done"}),void Et(ya,"customAuth","onUnauthenticated");if(!t)return Ia.current=t,void pa({status:"done"});T.startAuthFlow(new d(t));let{user:a,isNewUser:r}=await T.authenticate();if(!a)return await nr.logout(),pa({status:"error",error:new Se("Failed to sync with custom auth provider")}),void Et(ya,"customAuth","onUnauthenticated");void 0!==r&&Et(ya,"login","onComplete",a,r,!1,"custom",null),Ia.current=t,Et(ya,"customAuth","onAuthenticated",{user:a}),pa({status:"done"}),te(a||null),Rt(r||!1),V(!0),ua(!0)}catch(e){if(console.warn(e),await nr.logout(),Et(ya,"customAuth","onUnauthenticated"),"User already exists with provided custom JWT account."===e.message)return void pa({status:"initial"});Et(ya,"login","onError",e.privyErrorCode||Le.UNKNOWN_AUTH_ERROR),pa({status:"error",error:e})}}})()}),["initial"===ha.status,Jt.customAuth?.enabled,Jt.customAuth?.getCustomAccessToken,Jt.customAuth?.isLoading,D,j]),s((()=>{da&&Xt&&H&&S(H,Jt.embeddedWallets.createOnLogin)&&(ua(!1),qa(H,$).catch(console.error))}),[da&&Xt&&H]),s((()=>{if(Jt.externalWallets.solana.connectors)return Jt.externalWallets.solana.connectors.onMount(),()=>Jt.externalWallets.solana.connectors?.onUnmount()}),[Jt.externalWallets.solana.connectors]),s((()=>{!D&&Zt&&async function(){let e,t=Wa(),a=La();(()=>{let e=new URLSearchParams(window.location.search).get("privy_token");if(!e)return;X.put(Y,e);let t=new URL(window.location.href);t.searchParams.delete("privy_token"),window.history.pushState({},"",t)})();let r=n();T.initializeConnectorManager({walletConnectCloudProjectId:Jt.walletConnectCloudProjectId,rpcConfig:Jt.rpcConfig,chains:Jt.chains,defaultChain:Jt.defaultChain,store:r,walletList:Jt.appearance.walletList,shouldEnforceDefaultChainOnConnect:Jt.shouldEnforceDefaultChainOnConnect,externalWalletConfig:Jt.externalWallets,appName:Jt.name??"Privy",walletChainType:Jt.appearance.walletChainType}),T.connectors?.on("connectorInitialized",(()=>{e&&clearTimeout(e);let t=T.connectors.walletConnectors.length,a=T.connectors.walletConnectors.reduce(((e,t)=>e+(t.initialized?1:0)),0);a===t?ga(!0):e=setTimeout((()=>{console.debug({message:"Unable to initialize all expected connectors before timeout",initialized:a,expected:t}),ga(!0)}),1500)})),T.connectors?.initialize().then((()=>{Ba()}));let i=await T.getAuthenticatedUser(),o=!!i;Jt.legal.requireUsersAcceptTerms&&i&&!i.hasAcceptedTerms?(await T.logout(),ir.setReadyToTrue(!0),Et(ya,"logout","onSuccess")):(Jt.customAuth?.enabled||(V(!!i),i&&Et(ya,"login","onComplete",i,!1,!0,null,null),te(i)),t?_a.current=o?"link":"login":a&&!o?(_a.current="login",ra({telegramAuthModalData:{seamlessAuth:!0}}),Ca(pt.TELEGRAM_AUTH_SCREEN)):ir.setReadyToTrue(!!i))}()}),[T,na,D,Zt]),s((()=>{if(D){if(!H||!H.linkedAccounts.find((e=>"wallet"===e.type&&"privy"===e.walletClientType)))return void ca(!0);ca(!!re.find((e=>"privy"===e.walletClientType)))}}),[D,H,re]);let Wa=()=>{let e=kt();return e.inProgress&&e.popupFlow?window.opener.location.origin!==window.location.origin?void window.opener.postMessage({type:"PRIVY_OAUTH_ERROR",error:"Origins between parent and child windows do not match."}):"error"===e.authorizationCode?void window.opener.postMessage({type:"PRIVY_OAUTH_ERROR",error:"Something went wrong. Try again."}):void window.opener.postMessage({type:"PRIVY_OAUTH_RESPONSE",stateCode:e.stateCode,authorizationCode:e.authorizationCode}):(e.inProgress&&He(e.provider)&&!e.popupFlow&&(new BroadcastChannel(Ke).postMessage({type:"PRIVY_OAUTH_RESPONSE",stateCode:e.stateCode,authorizationCode:e.authorizationCode}),window.close()),!!e.inProgress&&!!e.withPrivyUi&&(T.startAuthFlow(new Ot(e)),Ca(pt.AWAITING_OAUTH_SCREEN),!0))},La=()=>{let e=A();if(!e||!Jt.loginMethods.telegram||!Jt.loginConfig.telegramAuthConfiguration?.seamlessAuthEnabled)return;let t=new _;return T.startAuthFlow(t),"login-url"===e.flowType&&(t.meta.telegramWebAppData=void 0,t.meta.telegramAuthResult=e.authData),"web-app"===e.flowType&&(t.meta.telegramAuthResult=void 0,t.meta.telegramWebAppData=e.authData),!0},Da=async(e,t,a,r)=>{Fa(await(T.connectors?.createEthereumWalletConnector(e,t))||null,t,a,r)};async function Fa(e,t,a,r){if(!e)return xt({status:"disconnected",connectedWallet:null,connectError:new De("Unable to connect to wallet."),connector:null,connectRetry:yt}),r?.(null,a);xt({status:"disconnected",connectedWallet:null,connectError:null,connector:e,connectRetry:yt}),e instanceof ve&&t&&await e.resetConnection(t),xt({connector:e,status:"connecting",connectedWallet:null,connectError:null,connectRetry:()=>Fa(e,t,a,r)});try{let t=await e.connect({showPrompt:!0});if((!t||ye(t))&&Jt.shouldEnforceDefaultChainOnConnect&&!Jt.chains.find((e=>e.id===Number(t?.chainId.replace("eip155:",""))))&&("wallet_connect_v2"!==t?.connectorType||"metamask"!==t?.walletClientType)){xt((t=>({...t,connector:e,status:"switching_to_supported_chain",connectedWallet:null,connectError:null,connectRetry:yt})));try{await(t?.switchChain(Jt.defaultChain.id)),t&&(t.chainId=ae(ee(Jt.defaultChain.id)))}catch{console.warn(`Unable to switch to default chain: ${Jt.defaultChain.id}`)}}return xt((e=>({...e,status:"connected",connectedWallet:t,connectError:null,connectRetry:yt}))),t&&Et(ya,"connectWallet","onSuccess",(e.chainType,t)),r?.(t,a)}catch(e){return e instanceof Fe?(console.warn(e.cause?e.cause:e.message),Et(ya,"connectWallet","onError",e.privyErrorCode||Le.GENERIC_CONNECT_WALLET_ERROR)):(console.warn(e),Et(ya,"connectWallet","onError",Le.UNKNOWN_CONNECT_WALLET_ERROR)),xt((t=>({...t,status:"disconnected",connectedWallet:null,connectError:e}))),r?.(null,a)}}let xa=async(e,t,a)=>{if(null===e||!ye(e))return;let r=new y(e,T,t,a);T.startAuthFlow(r)},ja=async(e,t)=>{if(null===e||!Ae(e))return;let a=new f(e,T,t);T.startAuthFlow(a)},Ba=()=>{let e=new URLSearchParams(window.location.search),t=e.get("privy_connector"),a=e.get("privy_wallet_client");if(!t||!a)return;if("phantom"!==a||me()||Ca(pt.LOGIN_FAILED_SCREEN),!T.connectors)throw new Se("Connector not initialized");Ta(pt.AWAITING_CONNECTION);let r=new URL(window.location.href);r.searchParams.delete("privy_connector"),r.searchParams.delete("privy_wallet_client"),window.history.pushState({},"",r),Da(t,a,void 0,xa)};s((()=>{D&&j&&null===H&&T.getAuthenticatedUser().then(te)}),[D,j,H,T]);let Va=e=>{if(!j)throw Et(ya,"linkAccount","onError",Le.MUST_BE_AUTHENTICATED,{linkMethod:e}),new Se("User must be authenticated before linking an account.")},Ha=()=>{Va("siwe"),Ea.current="siwe",_a.current="link",Ta(pt.LINK_WALLET_SCREEN)},Ka=e=>{if(!j||!H)return!1;if("privy"===e.walletClientType)return!0;for(let t of H.linkedAccounts)if("wallet"===t.type&&t.address===e.address&&"privy"!==t.walletClientType)return!0;return!1},Ga=async e=>{let t;if(!T.connectors)throw new Se("Connector not initialized");t="ethereum"===e.type?T.connectors.findWalletConnector(e.connectorType,e.walletClientType)||null:T.connectors.findSolanaWalletConnector(e.connectorType,e.walletClientType)||null,xt((a=>({...a,connector:t,status:"connected",connectedWallet:e,connectError:null,connectRetry:yt}))),Jt.captchaEnabled&&!j?(ra({captchaModalData:{callback:t=>ye(e)?xa(e,t):ja(e,t),userIntentRequired:!1,onSuccessNavigateTo:pt.AWAITING_CONNECTION,onErrorNavigateTo:pt.ERROR_SCREEN}}),Ca(pt.CAPTCHA_SCREEN)):(ye(e)?await xa(e):await ja(e),Ca(pt.AWAITING_CONNECTION))},za=()=>{ne((e=>{let t=T.connectors?.wallets.filter(ye).map((e=>({...e,linked:Ka(e),loginOrLink:async()=>{if(!await e.isConnected())throw new Se("Wallet is not connected");if("embedded"===e.connectorType&&"privy"===e.walletClientType)throw new Se("Cannot link or login with embedded wallet");Ga(e)},fund:async t=>{await ir.fundWallet(e.address,t)},unlink:async()=>{if(!j)throw new Se("User is not authenticated.");if("embedded"===e.connectorType&&"privy"===e.walletClientType)throw new Se("Cannot unlink an embedded wallet");te(await T.unlinkEthereumWallet(e.address))}})))||[];return he(e,t)?e:t})),ce((e=>{let t=T.connectors?.wallets.filter(Ae).map((e=>({...e,linked:Ka(e),loginOrLink:async()=>{if(!await e.isConnected())throw new Se("Wallet is not connected");if("embedded"===e.connectorType&&"privy"===e.walletClientType)throw new Se("Cannot link or login with embedded wallet");Ga(e)},fund:async()=>{throw new Se("'fund' is deprecated for Solana wallets - use 'fundWallet' instead")},unlink:async()=>{if(!j)throw new Se("User is not authenticated.");if("embedded"===e.connectorType&&"privy"===e.walletClientType)throw new Se("Cannot unlink an embedded wallet");te(await T.unlinkSolanaWallet(e.address))}})))||[];return he(e,t)?e:t}))};s((()=>{za()}),[H?.linkedAccounts,j,D]),s((()=>{if(D){if(!T.connectors)throw new Se("Connector not initialized");za(),T.connectors.on("walletsUpdated",za)}}),[D]),s((()=>{[...Jt.loginMethodsAndOrder?.primary??[],...Jt.loginMethodsAndOrder?.overflow??[]].filter((e=>e.startsWith("privy:"))).forEach((e=>T.getCrossAppProviderDetails(e.replace("privy:",""))))}),[!!T]),s((()=>{let e;if(!re[0])return;let t=re[0],a=Pe.current.find((e=>e.address===t.address));if(e="privy"===t.walletClientType?H?.linkedAccounts.find((e=>"wallet"===e.type&&e.address===t.address&&"privy"===e.walletClientType)):H?.linkedAccounts.find((e=>"wallet"===e.type&&e.address===t.address&&"privy"!==e.walletClientType)),!a&&e){let t=Object.assign({},H);t.wallet=e&&{address:e.address,chainType:e.chainType,chainId:e.chainId,walletClient:e.walletClient,walletClientType:e.walletClientType,connectorType:e.connectorType,imported:e.imported,delegated:e.delegated,walletIndex:e.walletIndex},te(t)}Pe.current=re}),[re]);let qa=async(e,t,a)=>{let r=b(e),n=W(e);if(a&&"walletIndex"in a)return Ya(e,t,a.walletIndex,r,n);let i=a&&"createAdditional"in a&&a.createAdditional;if(r&&!i)throw Et(ya,"createWallet","onError",Le.EMBEDDED_WALLET_ALREADY_EXISTS),Error("User already has an embedded wallet.");let[o,s]=await Promise.all([ir.initializeWalletProxy(t),Ma()]);if(!o&&Jt.customAuth?.enabled)throw Et(ya,"createWallet","onError",Le.UNKNOWN_EMBEDDED_WALLET_ERROR),Error("Failed to connect to wallet proxy");if(!o||!s||Jt.embeddedWallets?.requireUserOwnedRecoveryOnCreate)return $a();if(!r)return console.log("solanaWallet",n),await o.create({accessToken:s,solanaAddress:n?.address}),Xa(0);{let t=(R(e)?.walletIndex??0)+1,{entropyId:a,entropyIdVerifier:r}=C(k(e));return await ir.recoverPrimaryWallet(),await o.addWallet({accessToken:s,entropyId:a,entropyIdVerifier:r,chainType:"ethereum",hdWalletIndex:t}),Xa(t)}},$a=async()=>new Promise(((e,t)=>{ta(!0),ra({createWallet:{onSuccess:t=>{Et(ya,"createWallet","onSuccess",t),e(t)},onFailure:e=>{Et(ya,"createWallet","onError",Le.UNKNOWN_EMBEDDED_WALLET_ERROR),t(e)},callAuthOnSuccessOnClose:!1}}),Ta(pt.EMBEDDED_WALLET_ON_ACCOUNT_CREATE_SCREEN)})),Ya=async(e,t,a,r,n)=>{if(a<0)throw Et(ya,"createWallet","onError",Le.EMBEDDED_WALLET_CREATE_ERROR),Error(`A negative walletIndex (${a}) is invalid.`);let[i,o]=await Promise.all([ir.initializeWalletProxy(t),Ma()]);if(!i&&Jt.customAuth?.enabled)throw Et(ya,"createWallet","onError",Le.UNKNOWN_EMBEDDED_WALLET_ERROR),Error("Failed to connect to wallet proxy");if(!i||!o||Jt.embeddedWallets?.requireUserOwnedRecoveryOnCreate){if(0==a)return $a();throw Et(ya,"createWallet","onError",Le.UNKNOWN_EMBEDDED_WALLET_ERROR),Error("Create wallet UI can only be displayed when walletIndex is 0.")}if(0==a){if(r)return r;await i.create({accessToken:o,solanaAddress:n?.address})}else{if(!r)throw Et(ya,"createWallet","onError",Le.EMBEDDED_WALLET_CREATE_ERROR),Error("A user must have a wallet at HD index 0 before creating a wallet at greater HD indices.");let t=U(e).find((e=>e.walletIndex===a));if(t)return t;let{entropyId:n,entropyIdVerifier:s}=C(k(e));await ir.recoverPrimaryWallet(),await i.addWallet({accessToken:o,entropyId:n,entropyIdVerifier:s,chainType:"ethereum",hdWalletIndex:a})}return Xa(a)},Xa=async e=>{let t=U(await ir.refreshUser()).find((t=>t.walletIndex===e));if(!t)throw Et(ya,"createWallet","onError",Le.UNKNOWN_EMBEDDED_WALLET_ERROR),Error("Failed to create wallet");return Et(ya,"createWallet","onSuccess",t),t},Qa=(e,t,r,n)=>new Promise((async(i,o)=>{let{requesterAppId:s}=t||{};if(!j||!H)return Et(ya,"sendTransaction","onError",Le.MUST_BE_AUTHENTICATED),void o(Error("User must be authenticated before signing with a Privy wallet"));let l=n??b(H)?.address;if(!l)throw new Se("User must have an embedded wallet to send a transaction.");let{signingWallet:c,rootWallet:d}=P(H,l);if(!d||!c)return Et(ya,"sendTransaction","onError",Le.EMBEDDED_WALLET_NOT_FOUND),void o(Error("Must have a Privy wallet before signing"));ta(!0);let u=or.wallets.find((e=>"privy"===e.walletClientType&&a(e.address)===a(c.address))),h=await(u?.getEthereumProvider());if(!u||!h)throw new Se(`Cannot sendTransaction before embedded wallet ${c.address} is connected`);let p=e.chainId?Number(e.chainId):Be(u.chainId);(e=>{if(!Jt.chains.map((e=>e.id)).includes(e))throw new De(`Chain ID ${e} is not supported. It must be added to the config.supportedChains property of the PrivyProvider.`,Le.UNSUPPORTED_CHAIN_ID)})(p);let w=Object.assign({},e,{chainId:p});if(va({showWalletUIs:t?.showWalletUIs}))(async()=>{let e=await Ma();if(!e||!Xt)return Et(ya,"sendTransaction","onError",Le.EMBEDDED_WALLET_NOT_FOUND),void o(Error("Must have valid access token and Privy wallet to send transaction"));try{if(!await ir.recoverPrimaryWallet())return Et(ya,"sendTransaction","onError",Le.UNKNOWN_CONNECT_WALLET_ERROR),void o(Error("Unable to connect to wallet"));let a=J(w.chainId,Jt.chains,Jt.rpcConfig,{appId:v.appId}),r=await Nt(c.address,w,a);if(va({showWalletUIs:t?.showWalletUIs})){let{totalGasEstimate:e}=await bt(r,a),{hasSufficientFunds:t}=await Ue(c.address,r,e,a);if(!t)throw new pe(new we("Wallet has insufficient funds for this transaction.",Ut.E32603_DEFAULT_INTERNAL_ERROR.eipCode))}let{entropyId:n,entropyIdVerifier:l}=C(d),u=await Oe({accessToken:e,entropyId:n,entropyIdVerifier:l,transactingWallet:c,walletProxy:Xt,transactionRequest:r,provider:a,requesterAppId:s});Et(ya,"sendTransaction","onSuccess",u),i(u)}catch(e){Et(ya,"sendTransaction","onError",Le.TRANSACTION_FAILURE),o(e)}})();else{let{entropyId:e,entropyIdVerifier:a}=C(d),n={entropyId:e,entropyIdVerifier:a,onCompleteNavigateTo:pt.EMBEDDED_WALLET_SEND_TRANSACTION_SCREEN,onFailure:e=>{Et(ya,"sendTransaction","onError",Le.UNKNOWN_CONNECT_WALLET_ERROR),o(e)}},l=at(Jt)?Wt({address:c.address,appConfig:Jt,fundWalletConfig:r,methodScreen:pt.FUNDING_METHOD_SELECTION_SCREEN,chainIdOverride:w.chainId,comingFromSendTransactionScreen:!0}):void 0;ra({connectWallet:n,sendTransaction:{transactionRequest:w,transactingWallet:c,entropyId:e,entropyIdVerifier:a,onSuccess:e=>{Et(ya,"sendTransaction","onSuccess",e),i(e)},onFailure:e=>{Et(ya,"sendTransaction","onError",Le.TRANSACTION_FAILURE),o(e)},uiOptions:t||{},fundWalletConfig:r,requesterAppId:s},funding:l}),Ta(pt.EMBEDDED_WALLET_CONNECTING_SCREEN)}})),Ja=({transaction:e,connection:t,transactionOptions:a,fundWalletConfig:r,uiOptions:n,wallet:i})=>new Promise((async(o,s)=>{let{requesterAppId:l}=n||{};if(!j||!H)return Et(ya,"sendSolanaTransaction","onError",Le.MUST_BE_AUTHENTICATED),void s(new Se("User must be authenticated before signing with a Privy wallet",Le.MUST_BE_AUTHENTICATED));let c=i?H.linkedAccounts.find((e=>"wallet"===e.type&&e.address===i.address)):W(H);if(!c)return Et(ya,"sendSolanaTransaction","onError",Le.EMBEDDED_WALLET_NOT_FOUND),void s(new Se("Must have a Privy wallet before signing",Le.EMBEDDED_WALLET_NOT_FOUND));ta(!0);let d=i??_e,u=await(d?.isConnected());if(!d||!u)throw Et(ya,"sendSolanaTransaction","onError",Le.EMBEDDED_WALLET_NOT_FOUND),new Se(`Cannot sendSolanaTransaction before embedded wallet ${c.address} is connected`,Le.EMBEDDED_WALLET_NOT_FOUND);if(va({showWalletUIs:n?.showWalletUIs}))(async()=>{let r=await Ma();if(!r||!Xt)return Et(ya,"sendSolanaTransaction","onError",Le.EMBEDDED_WALLET_NOT_FOUND),void s(new Se("Must have valid access token and Privy wallet to send transaction",Le.EMBEDDED_WALLET_NOT_FOUND));try{if(!await ir.recoverPrimaryWallet())return Et(ya,"sendSolanaTransaction","onError",Le.UNKNOWN_CONNECT_WALLET_ERROR),void s(new Se("Unable to connect to wallet",Le.UNKNOWN_CONNECT_WALLET_ERROR));if(va({showWalletUIs:n?.showWalletUIs})){let{instructions:a}=await lt(e,t);a.every((e=>e.hasFunds))||(Et(ya,"sendSolanaTransaction","onError",Le.INSUFFICIENT_BALANCE),s(new Se("Solana wallet has insufficient funds for this transaction.",Le.INSUFFICIENT_BALANCE)))}let{entropyId:i,entropyIdVerifier:l}=N(H),{signature:d,receipt:u}=await je({accessToken:r,tx:e,connection:t,walletProxy:Xt,transactionOptions:a,entropyId:i,entropyIdVerifier:l,transactingWalletAddress:c.address,transactingWalletIndex:c.walletIndex??0}),h=ct(d,u);Et(ya,"sendSolanaTransaction","onSuccess",h),o(h)}catch(e){Et(ya,"sendSolanaTransaction","onError",Le.TRANSACTION_FAILURE),s(e)}})();else{let{entropyId:i,entropyIdVerifier:d}=C(c),u={entropyId:i,entropyIdVerifier:d,onCompleteNavigateTo:pt.EMBEDDED_WALLET_SEND_SOLANA_TRANSACTION_SCREEN,onFailure:e=>{Et(ya,"sendSolanaTransaction","onError",Le.UNKNOWN_CONNECT_WALLET_ERROR),s(e)}},h=It({address:c.address,appConfig:Jt,methodScreen:pt.FUNDING_METHOD_SELECTION_SCREEN,fundWalletConfig:r,comingFromSendTransactionScreen:!0});ra({connectWallet:u,sendSolanaTransaction:{transactionRequest:e,connection:t,transactionOptions:a,transactingWallet:c,onSuccess:e=>{Et(ya,"sendSolanaTransaction","onSuccess",e),o(e)},onFailure:e=>{Et(ya,"sendSolanaTransaction","onError",Le.TRANSACTION_FAILURE),s(e)},uiOptions:n||{},requesterAppId:l},funding:h}),Ta(pt.EMBEDDED_WALLET_CONNECTING_SCREEN)}}));function Za(){return new Promise((async(e,t)=>{let a=await Ma();if(!a||!Xt)throw Error("Must have valid access token to enroll in MFA");try{await Xt.verifyMfa({accessToken:a}),e()}catch(e){t(e)}}))}let er=e=>e?.linkedAccounts.filter((e=>null!==e.latestVerifiedAt&&!("wallet"===e.type&&"privy"===e.walletClientType))).sort(((e,t)=>t.latestVerifiedAt.getTime()-e.latestVerifiedAt.getTime()))[0],tr=e=>{let t=H?.linkedAccounts.filter((t=>t.type===e)).length??0,{displayName:a,loginMethod:r}=dt(e);if("passkey"===e&&t>=5||"passkey"!==e&&t>=1)throw Et(ya,"linkAccount","onError",Le.CANNOT_LINK_MORE_OF_TYPE,{linkMethod:r}),new Se(`User already has an account of type ${a} linked.`)};async function ar({showAutomaticRecovery:e=!1,legacySetWalletPasswordFlow:t=!1}){Lt(null);let a=t?"setWalletPassword":"setWalletRecovery";if(!j||!H)throw Et(ya,a,"onError",Le.MUST_BE_AUTHENTICATED),Error("User must be authenticated before adding recovery method to Privy wallet");let r=k(H);if(!r||!Xt)throw Et(ya,a,"onError",Le.EMBEDDED_WALLET_NOT_FOUND),Error("Must have a Privy wallet to add a recovery method");try{await Za()}catch(e){throw Et(ya,a,"onError",Le.MISSING_MFA_CREDENTIALS),e}return new Promise(((n,i)=>{ta(!0);let o={onSuccess:e=>{Et(ya,a,"onSuccess","user-passcode",e),n(e)},onFailure:e=>{Et(ya,a,"onError",Le.USER_EXITED_SET_PASSWORD_FLOW),i(e)},callAuthOnSuccessOnClose:!1},s="user-passcode"===r.recoveryMethod,l=Ze({walletAction:"update",availableRecoveryMethods:Jt.embeddedWallets.userOwnedRecoveryOptions,legacySetWalletPasswordFlow:t,isResettingPassword:s,showAutomaticRecovery:e}),{entropyId:c,entropyIdVerifier:d}=C(r);ra({setWalletPassword:o,recoverWallet:{entropyId:c,entropyIdVerifier:d,onFailure:i},createWallet:o,connectWallet:{onCompleteNavigateTo:l,shouldForceMFA:!1,entropyId:c,entropyIdVerifier:d,onFailure:e=>{Et(ya,a,"onError",Le.UNKNOWN_CONNECT_WALLET_ERROR),i(e)}},recoverySelection:{isInAccountCreateFlow:!1,isResettingPassword:s}}),Ta(pt.EMBEDDED_WALLET_CONNECTING_SCREEN)}))}async function rr({appId:e,action:t}){let a=await Ma();if("link"===t&&!a)throw Et(ya,"linkAccount","onError",Le.MUST_BE_AUTHENTICATED,{linkMethod:`privy:${e}`}),new Se("User must be authenticated before linking an account.");if("login"===t&&a)throw Et(ya,"login","onError",Le.UNKNOWN_AUTH_ERROR),new Se("Attempted to log in, but user is already logged in. Use a `link` helper instead.");Ea.current=`privy:${e}`,_a.current=t;let r=nt();return T.createAnalyticsEvent({eventName:"cross_app_auth_started",payload:{providerAppId:e}}),new Promise((async(a,n)=>{let{name:i,logoUrl:o}=await qe({api:T.api,providerAppId:e,requesterAppId:Jt.id});ra({crossAppAuth:{appId:e,name:i,logoUrl:o,action:t,popup:r,onSuccess:a,onError:n}}),Ca(pt.CROSS_APP_AUTH_SCREEN)}))}let nr={ready:D,authenticated:j,user:H,walletConnectors:T.connectors||null,connectWallet:e=>{e&&"target"in e&&e&&(e=void 0),ra({externalConnectWallet:{walletList:e?.walletList&&e?.walletList.length>0?e.walletList:void 0,suggestedAddress:e?.suggestedAddress}}),Ta(j?pt.CONNECT_ONLY_AUTHENTICATED_SCREEN:pt.CONNECT_ONLY_LANDING_SCREEN)},linkWallet:Ha,startCrossAppAuthFlow:rr,linkEmail:()=>{Va("email"),tr("email"),Ea.current="email",_a.current="link",Ta(pt.LINK_EMAIL_SCREEN)},linkPhone:()=>{Va("sms"),tr("phone"),Ea.current="sms",_a.current="link",Ta(pt.LINK_PHONE_SCREEN)},linkGoogle:async()=>{Va("google"),tr("google_oauth"),_a.current="link",await ir.initLoginWithOAuth("google")},linkTwitter:async()=>{Va("twitter"),tr("twitter_oauth"),_a.current="link",await ir.initLoginWithOAuth("twitter")},linkDiscord:async()=>{Va("discord"),tr("discord_oauth"),_a.current="link",await ir.initLoginWithOAuth("discord")},linkGithub:async()=>{Va("github"),tr("github_oauth"),_a.current="link",await ir.initLoginWithOAuth("github")},linkSpotify:async()=>{Va("spotify"),tr("spotify_oauth"),_a.current="link",await ir.initLoginWithOAuth("spotify")},linkInstagram:async()=>{Va("instagram"),tr("instagram_oauth"),_a.current="link",await ir.initLoginWithOAuth("instagram")},linkTiktok:async()=>{Va("tiktok"),tr("tiktok_oauth"),_a.current="link",await ir.initLoginWithOAuth("tiktok")},linkLinkedIn:async()=>{Va("linkedin"),tr("linkedin_oauth"),_a.current="link",await ir.initLoginWithOAuth("linkedin")},linkApple:async()=>{Va("apple"),tr("apple_oauth"),_a.current="link",await ir.initLoginWithOAuth("apple")},linkPasskey:async()=>{Va("passkey"),tr("passkey"),await ir.initLinkWithPasskey(),Ta(pt.LINK_PASSKEY_SCREEN)},linkTelegram:async()=>{Va("telegram"),tr("telegram"),_a.current="link",Ea.current="telegram",await ir.initLoginWithTelegram(),Ta(pt.TELEGRAM_AUTH_SCREEN)},linkFarcaster:async()=>{Va("farcaster"),tr("farcaster"),await ir.initLoginWithFarcaster(),_a.current="link",Ea.current="farcaster",Ta(pt.AWAITING_FARCASTER_CONNECTION)},updateEmail:()=>{if(Va("email"),!H?.email)throw new Se("User does not have an email linked to their account.");_a.current="update",Ea.current="email",Ta(pt.UPDATE_EMAIL_SCREEN)},updatePhone:()=>{if(Va("sms"),!H?.phone)throw new Se("User does not have a phone number linked to their account.");_a.current="update",Ea.current="sms",Ta(pt.UPDATE_PHONE_SCREEN)},login:async e=>{e&&"target"in e&&e&&(e=void 0);let t="Attempted to log in, but user is already logged in. Use a `link` helper instead.";if(!D){let e=await new Promise((e=>{ia((t=>e.bind(t)))}));if(ia(null),e)return void console.warn(t)}!H||H.isGuest?(_a.current="login",ra({login:e}),Ca(pt.LANDING)):console.warn(t)},connectOrCreateWallet:async()=>{D||(await new Promise((e=>{ia((()=>e))})),ia(null)),j?console.warn("User must be unauthenticated to `connectOrCreateWallet`"):(_a.current="login",Ca(pt.CONNECT_OR_CREATE))},logout:async()=>{if(_a.current=null,Ea.current=null,H&&T.clearProviderAcccessTokens(H),Lt(null),await T.logout(),H&&Xt)try{await Xt.clearMfa({userId:H.id})}catch(e){}te(null),V(!1),Et(ya,"logout","onSuccess"),M(!1),X.del(B),X.del(K(Jt.id))},getAccessToken:()=>T.getCustomerAccessToken(),getEthereumProvider:()=>{if(!H||!H.wallet)return new fe;let e=re.find((e=>H.wallet&&e.address===H.wallet.address)),t=T.connectors?.walletConnectors.find((t=>t.wallets.find((t=>t.address===e?.address))));return e&&t?t.proxyProvider:new fe},getEthersProvider:()=>{if(!H||!H.wallet)return new r(new ge(new fe));let e=re.find((e=>H.wallet&&e.address===H.wallet.address)),t=T.connectors?.walletConnectors.find((t=>t.wallets.find((t=>t.address===e?.address))));return new r(new ge(e&&t?t.proxyProvider:new fe))},getWeb3jsProvider:()=>{if(!H||!H.wallet)return new Ee(new fe);let e=re.find((e=>H.wallet&&e.address===H.wallet.address)),t=T.connectors?.walletConnectors.find((t=>t.wallets.find((t=>t.address===e?.address))));return new Ee(e&&t?t.proxyProvider:new fe)},unlinkWallet:async e=>{let t;return te(t=e.startsWith("0x")?await T.unlinkEthereumWallet(e):await T.unlinkSolanaWallet(e)),t},unlinkEmail:async e=>{let t=await T.unlinkEmail(e);return te(t),t},unlinkPhone:async e=>{let t=await T.unlinkPhone(e);return te(t),t},unlinkGoogle:async e=>{let t=await T.unlinkOAuth("google",e);return te(t),t},unlinkTwitter:async e=>{let t=await T.unlinkOAuth("twitter",e);return te(t),t},unlinkDiscord:async e=>{let t=await T.unlinkOAuth("discord",e);return te(t),t},unlinkGithub:async e=>{let t=await T.unlinkOAuth("github",e);return te(t),t},unlinkSpotify:async e=>{let t=await T.unlinkOAuth("spotify",e);return te(t),t},unlinkInstagram:async e=>{let t=await T.unlinkOAuth("instagram",e);return te(t),t},unlinkTiktok:async e=>{let t=await T.unlinkOAuth("tiktok",e);return te(t),t},unlinkLinkedIn:async e=>{let t=await T.unlinkOAuth("linkedin",e);return te(t),t},unlinkApple:async e=>{let t=await T.unlinkOAuth("apple",e);return te(t),t},unlinkFarcaster:async e=>{let t=await T.unlinkFarcaster(e);return te(t),t},unlinkTelegram:async e=>{let t=await T.unlinkTelegram(e);return te(t),t},unlinkPasskey:async e=>{let t=await T.unlinkPasskey(e);return te(t),t},unlinkCrossAppAccount:async({subject:e})=>{let t=H?.linkedAccounts.find((t=>"cross_app"===t.type&&t.subject===e))?.providerApp;if(!t)throw new Se("Invalid subject");T.storeProviderAccessToken(t.id,null);let a=await T.unlinkOAuth(`privy:${t.id}`,e);return te(a),a},setActiveWallet:async e=>{let t=re.find((t=>a(t.address)===a(e))),r=H?.linkedAccounts.find((t=>"wallet"===t.type&&a(t.address)===a(e)));if(t&&await t.isConnected())if(t.linked){let e=Object.assign({},H);e.wallet=r&&{address:r.address,chainType:r.chainType,chainId:r.chainId,walletClient:r.walletClient,walletClientType:r.walletClientType,connectorType:r.connectorType,imported:r.imported,delegated:r.delegated,walletIndex:r.walletIndex},te(e)}else t.loginOrLink();else ra({externalConnectWallet:{suggestedAddress:e}}),Ha()},forkSession:()=>T.forkSession(),createWallet:async e=>{if(e&&"target"in e&&e&&(e=void 0),!j||!H)throw Et(ya,"createWallet","onError",Le.MUST_BE_AUTHENTICATED),Error("User must be authenticated before creating a Privy wallet");return qa(H,15e3,e)},setWalletRecovery:async e=>ar({legacySetWalletPasswordFlow:!1,showAutomaticRecovery:e?.showAutomaticRecovery??!1}),setWalletPassword:async()=>ar({legacySetWalletPasswordFlow:!0,showAutomaticRecovery:!1}),signMessage:(e,t,a)=>new Promise((async(r,n)=>{let{requesterAppId:i}=t||{};if(!j||!H)return Et(ya,"signMessage","onError",Le.MUST_BE_AUTHENTICATED),void n(Error("User must be authenticated before signing with a Privy wallet"));let o=a??b(H)?.address;if(!o)throw new Se("User must have an embedded wallet to sign a message.");let{signingWallet:s,rootWallet:l}=P(H,o);if(!s||!l)return Et(ya,"signMessage","onError",Le.EMBEDDED_WALLET_NOT_FOUND),void n(Error("Must have a Privy wallet before signing"));if("string"!=typeof e||e.length<1)return Et(ya,"signMessage","onError",Le.INVALID_MESSAGE),void n(Error("Message must be a non-empty string"));ta(!0);let c=async()=>{if(!j)throw Error("User must be authenticated before signing with a Privy wallet");let t=await Ma();if(!Xt||!t||!await ir.recoverPrimaryWallet())throw Error("Unable to connect to wallet");T.createAnalyticsEvent({eventName:"embedded_wallet_sign_message_started",payload:{walletAddress:s.address,requesterAppId:i}});let{entropyId:a,entropyIdVerifier:r}=C(l),{response:n}=await Xt.rpc({accessToken:t,entropyId:a,entropyIdVerifier:r,chainType:"ethereum",hdWalletIndex:s.walletIndex??0,requesterAppId:i,request:{method:"personal_sign",params:[e,s.address]}}),o=n.data;return T.createAnalyticsEvent({eventName:"embedded_wallet_sign_message_completed",payload:{walletAddress:s.address,requesterAppId:i}}),o};if(va({showWalletUIs:t?.showWalletUIs}))try{let e=await c();Et(ya,"signMessage","onSuccess",e),r(e)}catch(e){Et(ya,"signMessage","onError",Le.UNABLE_TO_SIGN),n(e??new pe("Unable to sign message"))}else{let{entropyId:a,entropyIdVerifier:i}=C(l);ra({signMessage:{method:"personal_sign",data:e,confirmAndSign:c,onSuccess:e=>{Et(ya,"signMessage","onSuccess",e),r(e)},onFailure:e=>{Et(ya,"signMessage","onError",Le.UNABLE_TO_SIGN),n(e)},uiOptions:t||{}},connectWallet:{entropyId:a,entropyIdVerifier:i,onCompleteNavigateTo:pt.EMBEDDED_WALLET_SIGN_REQUEST_SCREEN,onFailure:e=>{Et(ya,"signMessage","onError",Le.UNKNOWN_CONNECT_WALLET_ERROR),n(e)}}}),Ta(pt.EMBEDDED_WALLET_CONNECTING_SCREEN)}})),signTypedData:(e,t,a)=>new Promise((async(r,n)=>{let{requesterAppId:i}=t||{};if(!j||!H)return Et(ya,"signTypedData","onError",Le.MUST_BE_AUTHENTICATED),void n(Error("User must be authenticated before signing with a Privy wallet"));let o=a??b(H)?.address;if(!o)throw new Se("User must have an embedded wallet to sign a message.");let{signingWallet:s,rootWallet:l}=P(H,o);if(!l||!s)return Et(ya,"signTypedData","onError",Le.EMBEDDED_WALLET_NOT_FOUND),void n(Error("Must have a Privy wallet before signing"));ta(!0);let c=Z(e),d=async()=>{if(!j)throw Error("User must be authenticated before signing with a Privy wallet");let e=await Ma();if(!Xt||!e||!await ir.recoverPrimaryWallet())throw Error("Unable to connect to wallet");T.createAnalyticsEvent({eventName:"embedded_wallet_sign_typed_data_started",payload:{walletAddress:s.address,requesterAppId:i}});let{entropyId:t,entropyIdVerifier:a}=C(l),{response:r}=await Xt.rpc({accessToken:e,entropyId:t,entropyIdVerifier:a,chainType:"ethereum",hdWalletIndex:s.walletIndex??0,requesterAppId:i,request:{method:"eth_signTypedData_v4",params:[s.address,c]}}),n=r.data;return T.createAnalyticsEvent({eventName:"embedded_wallet_sign_typed_data_completed",payload:{walletAddress:s.address,requesterAppId:i}}),n};if(va({showWalletUIs:t?.showWalletUIs,typedData:!0}))try{let e=await d();Et(ya,"signTypedData","onSuccess",e),r(e)}catch(e){Et(ya,"signTypedData","onError",Le.UNABLE_TO_SIGN),n(e??new pe("Unable to sign message"))}else{let{entropyId:e,entropyIdVerifier:a}=C(l);ra({signMessage:{method:"eth_signTypedData_v4",data:c,confirmAndSign:d,onSuccess:e=>{Et(ya,"signTypedData","onSuccess",e),r(e)},onFailure:e=>{Et(ya,"signTypedData","onError",Le.UNABLE_TO_SIGN),n(e)},uiOptions:t||{}},connectWallet:{entropyId:e,entropyIdVerifier:a,onCompleteNavigateTo:pt.EMBEDDED_WALLET_SIGN_REQUEST_SCREEN,onFailure:e=>{Et(ya,"signMessage","onError",Le.UNKNOWN_CONNECT_WALLET_ERROR),n(e)}}}),Ta(pt.EMBEDDED_WALLET_CONNECTING_SCREEN)}})),sendTransaction:async(e,t,a,r)=>{let n=await Qa(e,t,a,r);return be(await n.wait())},sendSolanaTransaction:async(e,t,a,r,n)=>await Ja({transaction:e,connection:t,transactionOptions:r,uiOptions:a,fundWalletConfig:n,wallet:_e??void 0}),exportWallet:e=>new Promise((async(t,a)=>{if(!j||!H)return void a(Error("User must be authenticated before exporting their Privy wallet"));e&&"target"in e&&e&&(e=void 0);let r=e?.address??b(H)?.address;if(!r)return void a(Error("User does not have an HD Ethereum wallet. To export an imported wallet, pass the `address` of the wallet to `exportWallet`."));let{signingWallet:n,rootWallet:i}=P(H,r);if(!n||!i)return void a(Error("Must have a Privy wallet before exporting"));ta(!0);let{entropyId:o,entropyIdVerifier:s}=C(i),l={entropyId:o,entropyIdVerifier:s,onCompleteNavigateTo:pt.EMBEDDED_WALLET_KEY_EXPORT_SCREEN,onFailure:a,shouldForceMFA:!0};ra(aa),await Ma()&&Xt?Xt?(ra({keyExport:{appId:v.appId,appClientId:v.clientId,origin:T.apiUrl,walletToExport:n,primaryWallet:i,onSuccess:t,onFailure:a},connectWallet:l}),Ta(pt.EMBEDDED_WALLET_CONNECTING_SCREEN)):a(Error("Must have a Privy wallet before exporting")):a(Error("Must have valid access token to enroll in MFA"))})),promptMfa:Za,async init(e){switch(e){case"sms":return void await T.initMfaSmsVerification();case"passkey":return await T.initMfaPasskeyVerification();case"totp":return;default:throw Error(`Unsupported MFA method: ${e}`)}},async submit(e,t){switch(e){case"totp":case"sms":if("string"!=typeof t)throw new Se("Invalid MFA code");wa.current?.resolve({mfaMethod:e,mfaCode:t,relyingParty:window.origin}),await new Promise(((e,t)=>{ma.current={resolve:e,reject:t}}));break;case"passkey":if("string"==typeof t)throw new Se("Invalid authenticator response");let a=await import("@simplewebauthn/browser"),r=ut(await a.startAuthentication(t));wa.current?.resolve({mfaMethod:e,mfaCode:r,relyingParty:window.origin}),await new Promise(((e,t)=>{ma.current={resolve:e,reject:t}}));break;default:throw wa.current?.reject(new Se("Unsupported MFA method")),new Se(`Unsupported MFA method: ${e}`)}},cancel(){wa.current?.reject(new Se("MFA canceled"))},async initEnrollmentWithSms(e){let t=await Ma();if(!t||!Xt)throw Error("Must have valid access token to enroll in MFA");await Xt.initEnrollMfa({method:"sms",accessToken:t,phoneNumber:e.phoneNumber})},enrollInMfa:e=>new Promise(((t,a)=>{if(!e)return ir.closePrivyModal(),void t();Jt.mfa.noPromptOnMfaRequired&&console.warn("[Privy Warning] Triggering the 'showMfaEnrollmentModal' function when 'noPromptOnMfaRequired' is set to true is unexpected. If this is intentional, ensure that you are building custom UIs for MFA verification."),ra({mfaEnrollmentFlow:{mfaMethods:Jt.mfa.methods,onSuccess:t,onFailure:a}}),Ta(pt.MFA_ENROLLMENT_FLOW_SCREEN)})),async initEnrollmentWithTotp(){let e=await Ma();if(!e||!Xt)throw Error("Must have valid access token to enroll in MFA");let t=await Xt.initEnrollMfa({method:"totp",accessToken:e});return{secret:t.secret,authUrl:t.authUrl}},async submitEnrollmentWithSms(e){let t=await Ma();if(!t||!Xt)throw Error("Must have valid access token to enroll in MFA");await Xt.submitEnrollMfa({method:"sms",accessToken:t,phoneNumber:e.phoneNumber,code:e.mfaCode}),te(await T.getAuthenticatedUser())},async submitEnrollmentWithTotp(e){let t=await Ma();if(!t||!Xt)throw Error("Must have valid access token to enroll in MFA");await Xt.submitEnrollMfa({method:"totp",accessToken:t,code:e.mfaCode}),te(await T.getAuthenticatedUser())},async initEnrollmentWithPasskey(){},async submitEnrollmentWithPasskey({credentialIds:e}){let t=await Ma();if(!t||!Xt)throw Error("Must have valid access token to enroll in MFA");await Xt.submitEnrollMfa({method:"passkey",accessToken:t,credentialIds:e}),te(await T.getAuthenticatedUser())},async unenroll(e){let t=await Ma();if(!t||!Xt)throw Error("Must have valid access token to remove MFA");"passkey"===e?await Xt.submitEnrollMfa({method:"passkey",accessToken:t,credentialIds:[]}):await Xt.unenrollMfa({method:e,accessToken:t}),te(await T.getAuthenticatedUser())},requestFarcasterSignerFromWarpcast:async()=>{let e=await Ma(),t=H?.linkedAccounts.find((e=>"wallet"===e.type&&"privy"===e.walletClientType));if(!e)throw Error("Must have valid access token to connect with Farcaster");if(!Xt||!t)throw Error("Must have an embedded wallet to use Farcaster signers");if(!H?.farcaster?.fid)throw Error("Must have Farcaster account to use Farcaster signers");if(!await ir.recoverPrimaryWallet())throw Error("Unable to connect to wallet");let a=await Xt.initFarcasterSigner({address:t.address,hdWalletIndex:null,accessToken:e,mfaCode:null,mfaMethod:null,relyingParty:window.origin});"approved"===a.status&&te(await T.getAuthenticatedUser()||H||null),ra({farcasterSigner:a}),Ta(pt.AWAITING_FARCASTER_SIGNER)},getFarcasterSignerPublicKey:async()=>{let e,t=await Ma(),a=H?.linkedAccounts.find((e=>"wallet"===e.type&&"privy"===e.walletClientType));if(!t)throw Error("Must have valid access token to connect with Farcaster");if(!Xt||!a)throw Error("Must have an embedded wallet to use Farcaster signers");if(!H?.farcaster?.fid)throw Error("Must have Farcaster account to use Farcaster signers");if(!await ir.recoverPrimaryWallet())throw Error("Unable to connect to wallet");if(!H.farcaster?.signerPublicKey)throw Error("Must have a Farcaster signer public key to sign");return e=H.farcaster.signerPublicKey.slice(2),Uint8Array.from(e.match(/.{1,2}/g).map((e=>parseInt(e,16))))},signFarcasterMessage:async e=>{let t=await Ma(),a=H?.linkedAccounts.find((e=>"wallet"===e.type&&"privy"===e.walletClientType));if(!t)throw Error("Must have valid access token to connect with Farcaster");if(!Xt||!a)throw Error("Must have an embedded wallet to use Farcaster signers");if(!H?.farcaster?.fid)throw Error("Must have Farcaster account to use Farcaster signers");if(!await ir.recoverPrimaryWallet())throw Error("Unable to connect to wallet");if(!H.farcaster?.signerPublicKey)throw Error("Must have a Farcaster signer public key to sign");let r=await import("@simplewebauthn/browser"),n=await Xt.signFarcasterMessage({address:a.address,hdWalletIndex:null,accessToken:t,mfaCode:null,mfaMethod:null,payload:{hash:r.bufferToBase64URLString(e)},fid:BigInt(H.farcaster.fid),relyingParty:window.origin});return new Uint8Array(r.base64URLStringToBuffer(n.signature))},createGuestAccount:async()=>{if(H&&!H.isGuest)throw Error("User cannot already be authenticated to create a guest account");return H?.isGuest?H:ir.loginWithGuestAccountFlow()},signMessageWithCrossAppWallet(e,{address:t}){let a=H?.linkedAccounts.some((e=>"cross_app"===e.type&&e.smartWallets.some((e=>e.address===t))));return Ye({user:H,client:T,address:t,requesterAppId:Jt.id,request:{method:a?"privy_signSmartWalletMessage":"personal_sign",params:[e,t]},reconnect:rr})},signTypedDataWithCrossAppWallet(e,{address:t}){let a=H?.linkedAccounts.some((e=>"cross_app"===e.type&&e.smartWallets.some((e=>e.address===t)))),r=Z(e);return Ye({user:H,client:T,address:t,requesterAppId:Jt.id,request:{method:a?"privy_signSmartWalletTypedData":"eth_signTypedData_v4",params:[t,r]},reconnect:rr})},sendTransactionWithCrossAppWallet(e,{address:t}){let a=H?.linkedAccounts.some((e=>"cross_app"===e.type&&e.smartWallets.some((e=>e.address===t))));return Ye({user:H,client:T,address:t,requesterAppId:Jt.id,request:{method:a?"privy_sendSmartWalletTx":"eth_sendTransaction",params:[e]},reconnect:rr})},isModalOpen:I,mfaMethods:Jt.mfa.methods};ba=nr.signMessage,Ua=nr.signTypedData,Oa=async(...e)=>{let t=await Qa(...e);return Jt.embeddedWallets.waitForTransactionConfirmation&&await t.wait(),t};let ir={isNewUserThisSession:St,pendingTransaction:null,walletConnectionStatus:Ft,connectors:T.connectors?.walletConnectors??[],solanaWallets:ie,rpcConfig:Jt.rpcConfig,chains:Jt.chains,appId:v.appId,showFiatPrices:"native-token"!==Jt.embeddedWallets.priceDisplay.primary,clientAnalyticsId:T.clientAnalyticsId,customAuthStatus:ha,noPromptOnSignature:Aa,emailOtpState:Vt,setEmailOtpState:Ht,smsOtpState:Kt,setSmsOtpState:Gt,oAuthState:$t,setOAuthState:Yt,siweState:zt,setSiweState:qt,isHeadlessOAuthLoading:Mt,nativeTokenSymbolForChainId:e=>Jt.chains.find((t=>t.id===Number(e)))?.nativeCurrency.symbol,initializeWalletProxy:async e=>{if(Xt)return Xt;let t=new Promise((e=>{sa((()=>t=>e(t)))})),a=new Promise((t=>setTimeout((()=>t(null)),e))),r=await Promise.race([t,a]);return sa(null),r},getAuthFlow:()=>T.authFlow,getAuthMeta:()=>T.authFlow?.meta,client:T,closePrivyModal:async(e={shouldCallAuthOnSuccess:!0,isSuccess:!1})=>{let t,a=D&&j&&H;a&&Ea.current&&(t=er(H)),"login"===_a.current?e.shouldCallAuthOnSuccess&&a&&Ea.current?(Et(ya,"login","onComplete",H,St,!1,Ea.current,t??null),v.onSuccess?.(H,St)):Et(ya,"login","onError",Le.USER_EXITED_AUTH_FLOW):"link"===_a.current&&t?e.isSuccess&&a&&Ea.current?Et(ya,"linkAccount","onSuccess",H,Ea.current,t):Ea.current&&Et(ya,"linkAccount","onError",Le.USER_EXITED_LINK_FLOW,{linkMethod:Ea.current}):"update"===_a.current&&t&&(e.isSuccess&&a&&Ea.current?Et(ya,"update","onSuccess",H,Ea.current,t):Ea.current&&Et(ya,"update","onError",Le.USER_EXITED_UPDATE_FLOW,{linkMethod:Ea.current}));let r=Pt&&et.includes(Pt),n=Pt===pt.ERROR_SCREEN&&aa.errorModalData&&et.includes(aa.errorModalData.previousScreen);if((r||n)&&aa.funding){let e,t=tt[Pt]??null;if("solana"===aa.funding.chainType){let{Connection:a,PublicKey:r}=await import("@solana/web3.js");try{e=await new a(st(aa.funding.cluster)).getBalance(new r(aa.funding.address)).then((e=>BigInt(e)))}catch{console.error("Unable to pull wallet balance")}Et(ya,"fundSolanaWallet","onUserExited",{address:aa.funding.address,cluster:aa.funding.cluster,fundingMethod:t,balance:e})}else{let a=J(aa.funding.chain.id,Jt.chains,Jt.rpcConfig,{appId:v.appId});try{e=(await a.getBalance(aa.funding.address)).toBigInt()}catch{console.error("Unable to pull wallet balance")}Et(ya,"fundWallet","onUserExited",{address:aa.funding.address,chain:aa.funding.chain,fundingMethod:t,balance:e})}}ra({...aa,externalConnectWallet:{suggestedAddress:void 0}}),_a.current=null,Ea.current=null,Rt(!1),M(!1),setTimeout((()=>{T.authFlow=void 0}),200),T.createAnalyticsEvent({eventName:"modal_closed"})},solanaSignMessage:async({message:e})=>new Promise((async(t,a)=>{let r=async()=>{let t=await T.getAccessToken();if(!t)throw Error("User must be authenticated to use their embedded wallet.");if(!_e)throw Error("User must have an embedded Solana wallet to sign messages for Solana.");let a=ir.walletProxy??await ir.initializeWalletProxy(15e3);if(!a)throw Error("Failed to initialize embedded wallet proxy.");let{entropyId:r,entropyIdVerifier:n}=N(H),{response:i}=await a.rpc({accessToken:t,entropyId:r,entropyIdVerifier:n,chainType:"solana",hdWalletIndex:_e.walletIndex??0,request:{method:"signMessage",params:{message:e}}});return i.data.signature};if(va({showWalletUIs:void 0}))try{let e=await r();t({signature:e})}catch(e){a(e)}else ra({signMessage:{method:"solana_signMessage",data:e,confirmAndSign:r,onSuccess:e=>{t({signature:e})},onFailure:e=>{a(e)},uiOptions:{}}}),Ca(pt.EMBEDDED_WALLET_SIGN_REQUEST_SCREEN)})),openPrivyModal:Ta,connectWallet:Fa,initLoginWithWallet:async(e,t,a)=>{ye(e)?(Ea.current="siwe",xa(e,t,a)):(Ea.current="siws",ja(e,t))},loginWithWallet:async()=>{let e,t,a;if(!D)throw new Me;if(T.authFlow instanceof y?e="siwe":T.authFlow instanceof f&&(e="siws"),!e)throw new Se("Must initialize SIWE/SIWS flow first.");if(null!==await T.getAccessToken())try{({user:t}=await T.link()),Ea.current=e}catch(t){throw Et(ya,"linkAccount","onError",t.privyErrorCode||Le.FAILED_TO_LINK_ACCOUNT,{linkMethod:e}),t}else try{({user:t,isNewUser:a}=await T.authenticate()),Ea.current=e}catch(e){throw Et(ya,"login","onError",e.privyErrorCode||Le.GENERIC_CONNECT_WALLET_ERROR),e}te(t||H||null),Rt(a||!1),V(!0)},delegateWallet:async({address:e,chainType:t})=>new Promise((async(a,r)=>{let n=await Ma();if(!j||!H||!n)throw new Se("User must be authenticated and have an embedded wallet to delegate actions.");if("solana"!==t&&"ethereum"!==t)throw new Se("Only Solana and Ethereum embedded wallets are supported for delegation and revocation.");let i=ir.walletProxy??await ir.initializeWalletProxy(15e3);if(!i)throw new Se("Wallet proxy not initialized.");if(Ce({address:e,chainType:t,user:H}))throw new Se(`Wallet with address ${e} is already delegated.`);let o=Ie({address:e,user:H}),s=We({address:e,user:H});await ir.recoverPrimaryWallet(),ra({delegatedActions:{consent:{address:e,onDelegate:async()=>{await i.createDelegatedAction({accessToken:n,rootWallet:s,delegatedWallets:[o]}),await ir.refreshUser()},onSuccess:async()=>{a()},onError:async e=>{r(e)}}}}),Ta(pt.EMBEDDED_WALLET_DELEGATED_ACTIONS_CONSENT_SCREEN)})),revokeDelegatedWallets:async()=>new Promise((async(e,t)=>{if(!j||!H)throw new Se("User must be authenticated and have an embedded wallet to revoke a delegated wallet.");if(0===ke(H).length)throw new Se("User has no delegated wallets to revoke.");ra({delegatedActions:{revoke:{onRevoke:async()=>{await T.revokeDelegatedWallet(),await ir.refreshUser()},onSuccess:async()=>{e()},onError:async e=>{t(e)}}}}),Ta(pt.EMBEDDED_WALLET_DELEGATED_ACTIONS_REVOKE_SCREEN)})),initLoginWithFarcaster:async(e,t)=>{let a=new p(e,t);T.startAuthFlow(a);try{Ea.current="farcaster",await a.initializeFarcasterConnect()}catch(e){throw"login"===_a.current?Et(ya,"login","onError",e.privyErrorCode||Le.UNKNOWN_AUTH_ERROR):"link"===_a.current&&Et(ya,"linkAccount","onError",e.privyErrorCode||Le.UNKNOWN_AUTH_ERROR,{linkMethod:"farcaster"}),e}},loginWithFarcaster:async()=>{let e,t;if(!D)throw new Me;if(!(T.authFlow instanceof p))throw new Se("Must initialize Farcaster flow first.");if(null!==await T.getAccessToken())try{({user:e}=await T.link()),Ea.current="farcaster"}catch(e){throw Et(ya,"linkAccount","onError",e.privyErrorCode||Le.FAILED_TO_LINK_ACCOUNT,{linkMethod:"farcaster"}),e}else try{({user:e,isNewUser:t}=await T.authenticate()),Ea.current="farcaster"}catch(e){throw Et(ya,"login","onError",e.privyErrorCode||Le.UNKNOWN_AUTH_ERROR),e}te(e||null),Rt(t||!1),V(!0)},async loginWithGuestAccountFlow(){let e=new w(this.appId);T.startAuthFlow(e);try{_a.current="login",Ea.current="guest";let{user:e,isNewUser:t}=await T.authenticate();if(t=t||!1,!e)throw new Se("Unable to authenticate guest account");if(S(e,Jt.embeddedWallets.createOnLogin))try{await qa(e,15e3),e=await ir.refreshUser()}catch(t){te(e),console.warn("Unable to create embedded wallet for guest account")}else te(e);return Rt(t),V(!0),Et(ya,"login","onComplete",e,t,!1,"guest",null),e}catch(e){throw Et(ya,"login","onError",e.privyErrorCode||Le.UNKNOWN_AUTH_ERROR),e}},async crossAppAuthFlow({appId:e,popup:t,action:a}){let r=`privy:${e}`;Ea.current=r;let{url:n,stateCode:i,codeVerifier:o}=await Ge({api:T.api,appId:e});if(!n)throw T.createAnalyticsEvent({eventName:"cross_app_auth_error",payload:{error:"Unable to open cross-app auth popup",appId:e}}),new Se("No authorization URL returned for cross-app auth.");try{let s=await $e({url:n,popup:t,provider:r}),l=s.stateCode,c=s.authorizationCode;if(l!==i)throw T.createAnalyticsEvent({eventName:"possible_phishing_attempt",payload:{provider:r,storedStateCode:i??"",returnedStateCode:l??""}}),new Se("Unexpected auth flow. This may be a phishing attempt.",void 0,Le.OAUTH_UNEXPECTED);let d=await ze({appId:e,codeVerifier:o,stateCode:l,authorizationCode:c,action:a,client:T});d&&T.storeProviderAccessToken(e,d);let u=await ir.refreshUser();if(!u)throw new Se("Unable to update user");return T.createAnalyticsEvent({eventName:"cross_app_auth_completed",payload:{providerAppId:e}}),u}catch(e){throw T.createAnalyticsEvent({eventName:"cross_app_auth_error",payload:{error:e.toString(),provider:r}}),e}},async initLoginWithOAuth(e,t,a){if(Ea.current=e,!Q())return void Ca(pt.IN_APP_BROWSER_LOGIN_NOT_POSSIBLE);if("google"===e&&rt(window.navigator.userAgent))return void Ca(pt.IN_APP_BROWSER_LOGIN_NOT_POSSIBLE);"twitter"===e&&window.opener&&window.opener.postMessage({type:Ve},"*"),X.del(G),X.del(z);let r=new Ot({provider:e,disableSignup:!!a,withPrivyUi:!0});t&&r.addCaptchaToken(t),T.startAuthFlow(r);let n=await T.authFlow.getAuthorizationUrl();n&&n.url&&("twitter"===e&&c&&(n.url=n.url.replace("x.com","twitter.com")),window.location.assign(n.url))},async initLoginWithTelegram(e,t){if(!D)throw new Me;Ea.current="telegram";let a=new _(e,t);T.startAuthFlow(a),a.meta.telegramWebAppData=void 0,a.meta.telegramAuthResult=await new Promise(((e,t)=>Jt.loginConfig.telegramAuthConfiguration?window.Telegram?void window.Telegram.Login.auth({bot_id:Jt.loginConfig.telegramAuthConfiguration.botId,request_access:!0},(a=>a?e(a):t(new Se("Telegram auth failed or was canceled by the client")))):t(new Se("Telegram was not initialized")):t(new Se("Telegram Auth configuration is not loaded"))))},async loginWithTelegram(e){let t,a;if(!(T.authFlow instanceof _))throw new Se("Must initialize Telegram flow before calling loginWithTelegram");if(T.authFlow.meta.captchaToken||=e,"login"===_a.current)try{let e=await T.authenticate();t=e.user,a=e.isNewUser,Ea.current="telegram"}catch(e){throw Et(ya,"login","onError",e.privyErrorCode||Le.UNKNOWN_AUTH_ERROR),e}else{if("link"!==_a.current)throw new Se("Unknown auth intent");try{t=(await T.link()).user,Ea.current="telegram"}catch(e){throw Et(ya,"linkAccount","onError",e.privyErrorCode||Le.FAILED_TO_LINK_ACCOUNT,{linkMethod:"telegram"}),e}}te(t),Rt(a||!1),V(!0)},async recoveryOAuthFlow(e,t,a){let r,n;function i(t){if(!t)throw T.createAnalyticsEvent({eventName:"recovery_oauth_error",payload:{error:"Unable to open recovery OAuth popup",provider:e}}),new Se("Recovery OAuth failed")}switch(e){case"google-drive":{let t,o,{url:s,codeVerifier:l,stateCode:c}=await Xe({api:Na.api,provider:e});i(s);try{let r=await it({url:s,popup:a,provider:e});if(t=r.stateCode,o=r.authorizationCode,t!==c)throw T.createAnalyticsEvent({eventName:"possible_phishing_attempt",payload:{provider:e,storedStateCode:c??"",returnedStateCode:t??""}}),new Se("Unexpected auth flow. This may be a phishing attempt.",void 0,Le.OAUTH_UNEXPECTED)}catch(t){throw T.createAnalyticsEvent({eventName:"recovery_oauth_error",payload:{error:t.toString(),provider:e}}),new Se("Recovery OAuth failed")}[r,n]=await Promise.all([Ma(),Qe({api:Na.api,provider:e,codeVerifier:l,stateCode:t,authorizationCode:o})]);break}case"icloud":{let{url:t}=await Xe({api:Na.api,provider:e});i(t);let{ckWebAuthToken:o}=await it({url:t,popup:a,provider:e});n=o,r=await Ma()}}if(!Xt)throw new Se("Cannot connect to wallet proxy");if(!r)throw new Se("Unable to authorize user");switch(t){case"recover":{let t=aa.recoverWallet?.entropyId,a=aa.recoverWallet?.entropyIdVerifier;if(!t||!a)throw new Se("Recovery OAuth failed");T.createAnalyticsEvent({eventName:"embedded_wallet_recovery_started",payload:{walletAddress:t,recoveryMethod:e}}),await Xt.recover({accessToken:r,entropyId:t,entropyIdVerifier:a,recoveryAccessToken:n}),T.createAnalyticsEvent({eventName:"embedded_wallet_recovery_completed",payload:{walletAddress:t,recoveryMethod:e}});break}case"create-wallet":{T.createAnalyticsEvent({eventName:"embedded_wallet_creation_started"}),await Xt.create({accessToken:r,recoveryAccessToken:n,recoveryMethod:e});let t=b(await ir.refreshUser());if(!t)throw Et(ya,"createWallet","onError",Le.UNKNOWN_EMBEDDED_WALLET_ERROR),Error("Failed to create wallet");T.createAnalyticsEvent({eventName:"embedded_wallet_creation_completed",payload:{walletAddress:t.address}}),Et(ya,"createWallet","onSuccess",t);break}case"set-recovery":{let t=k(H);if(!t)throw Et(ya,"setWalletRecovery","onError",Le.EMBEDDED_WALLET_NOT_FOUND),Error("Embedded wallet not found");T.createAnalyticsEvent({eventName:"embedded_wallet_set_recovery_started",payload:{walletAddress:t.address,existingRecoveryMethod:t.recoveryMethod,targetRecoveryMethod:e}});let{entropyId:a,entropyIdVerifier:i}=C(t);await Xt.setRecovery({accessToken:r,entropyId:a,entropyIdVerifier:i,recoveryMethod:e,recoveryAccessToken:n});let o=k(await ir.refreshUser());if(!o)throw Et(ya,"createWallet","onError",Le.UNKNOWN_EMBEDDED_WALLET_ERROR),Error("Failed to set recovery on wallet");T.createAnalyticsEvent({eventName:"embedded_wallet_set_recovery_completed",payload:{walletAddress:t.address,existingRecoveryMethod:t.recoveryMethod,targetRecoveryMethod:e}}),Et(ya,"setWalletRecovery","onSuccess",e,o);break}default:throw new Se("Unsupported recovery action")}},async loginWithOAuth(e){let t,a,r;if(!(T.authFlow instanceof Ot))throw new Se("Must initialize OAuth flow before calling loginWithOAuth");let n=X.get(q),i=T.authFlow.meta.stateCode;if(n!==i)throw T.createAnalyticsEvent({eventName:"possible_phishing_attempt",payload:{provider:e,storedStateCode:n??"",returnedStateCode:i??""}}),new Se("Unexpected auth flow. This may be a phishing attempt.",void 0,Le.OAUTH_UNEXPECTED);if(null!==await T.getAccessToken())try{let a=await T.link();t=a.user,r=a.oAuthTokens,Ea.current=e}catch(t){throw Et(ya,"linkAccount","onError",t.privyErrorCode||Le.FAILED_TO_LINK_ACCOUNT,{linkMethod:e}),t}else try{let n=await T.authenticate();t=n.user,a=n.isNewUser,r=n.oAuthTokens,Ea.current=e}catch(t){throw"login"===_a.current?Et(ya,"login","onError",t.privyErrorCode||Le.UNKNOWN_AUTH_ERROR):"link"===_a.current&&Et(ya,"linkAccount","onError",t.privyErrorCode||Le.FAILED_TO_LINK_ACCOUNT,{linkMethod:e}),t}return te(t),Rt(a||!1),V(!0),r&&t&&Et(ya,"oAuthAuthorization","onOAuthTokenGrant",r,{user:t}),r},passkeyAuthState:jt,setPasskeyAuthState:Bt,async initLoginWithPasskey({captchaToken:e,withPrivyUi:t}){let a=new m({captchaToken:e,setPasskeyAuthState:Bt});T.startAuthFlow(a),_a.current="login";try{Ea.current="passkey",Bt({status:"generating-challenge"}),await a.initAuthenticationFlow(t),Bt({status:"awaiting-passkey"})}catch(e){throw Bt({status:"error",error:e}),Et(ya,"login","onError",e.privyErrorCode||Le.UNKNOWN_AUTH_ERROR),e}},async loginWithPasskey(){let e,t;if(!D)throw new Me;if(!(T.authFlow instanceof m))throw new Se("Must initialize Passkey flow first.");if("passkey"!==Ea.current){let e=new Se("Must init login with Passkey flow first.");throw Bt({status:"error",error:e}),e}let a=await Ma();try{Ea.current="passkey",Bt({status:"awaiting-passkey"}),({user:e,isNewUser:t}=await T.authenticate())}catch(e){throw Bt({status:"error",error:e}),Et(ya,"login","onError",e.privyErrorCode||Le.UNKNOWN_AUTH_ERROR),e}te(e),Rt(t||!1),V(!0),Bt({status:"done"});let r=e?.linkedAccounts.find((({type:e})=>"passkey"===e))||null;return{user:e,isNewUser:t||!1,wasAlreadyAuthenticated:!!a,loginAccount:r}},async initLinkWithPasskey(e){let t=new m({captchaToken:e});T.startAuthFlow(t),_a.current="link",Ea.current="passkey",Bt({status:"generating-challenge"});try{await t.initLinkFlow(),Bt({status:"awaiting-passkey"})}catch(e){throw Et(ya,"linkAccount","onError",e.privyErrorCode||Le.UNKNOWN_AUTH_ERROR,{linkMethod:"passkey"}),Bt({status:"error",error:e}),e}},async linkWithPasskey(){let e;if(!D)throw new Me;if(!(T.authFlow instanceof m))throw new Se("Must initialize Passkey flow first.");if("passkey"!==Ea.current)throw new Se("Must init login with Passkey flow first.");try{Ea.current="passkey",({user:e}=await T.link())}catch(e){throw Et(ya,"linkAccount","onError",e.privyErrorCode||Le.FAILED_TO_LINK_ACCOUNT,{linkMethod:"passkey"}),e}return te(e||H||null),Bt({status:"done"}),e},async initLoginWithHeadlessOAuth(e,t,a){if(!Q())throw Error("It looks like you're using an in-app browser. To log in, please try again using an external browser.");if("google"===e&&rt(window.navigator.userAgent))throw Error("It looks like you're using an in-app browser. To log in, please try again using an external browser.");let r=new Ot({provider:e,withPrivyUi:!1,disableSignup:a??!1});t&&r.addCaptchaToken(t),Yt({status:"loading"});let n=await T.startAuthFlow(r).getAuthorizationUrl();n?.url&&window.location.assign(n.url)},async loginWithHeadlessOAuth(e){let t,a,r;Dt(!0),Yt({status:"loading"}),T.startAuthFlow(new Ot(e));let n=X.get(q),i=e.stateCode;if(n!==i)throw T.createAnalyticsEvent({eventName:"possible_phishing_attempt",payload:{provider:e.provider,storedStateCode:n??"",returnedStateCode:i??""}}),Dt(!1),new Se("Unexpected auth flow. This may be a phishing attempt.",void 0,Le.OAUTH_UNEXPECTED);if(null!==await T.getAccessToken())try{({user:t,oAuthTokens:r}=await T.link()),Ea.current=e.provider;let a=er(t);t&&a&&Et(ya,"linkAccount","onSuccess",t,Ea.current,a)}catch(t){throw Dt(!1),Et(ya,"linkAccount","onError",t.privyErrorCode||Le.FAILED_TO_LINK_ACCOUNT,{linkMethod:e.provider}),t}else try{({user:t,isNewUser:a,oAuthTokens:r}=await T.authenticate()),Ea.current=e.provider;let n=er(t);t&&n&&void 0!==a&&Et(ya,"login","onComplete",t,a,!1,Ea.current,n)}catch(e){throw Dt(!1),Yt({status:"error",error:e}),Et(ya,"login","onError",e.privyErrorCode||Le.UNKNOWN_AUTH_ERROR),e}return te(t),Rt(a||!1),V(!0),Dt(!1),Yt({status:"done"}),r&&t&&Et(ya,"oAuthAuthorization","onOAuthTokenGrant",r,{user:t}),t??void 0},initLoginWithEmail:async({email:e,captchaToken:t,disableSignup:a,withPrivyUi:r})=>{let n=new h({email:e,captchaToken:t,disableSignup:a});T.startAuthFlow(n);try{Ea.current="email",Ht({status:"sending-code"}),await n.sendCodeEmail({withPrivyUi:r}),Ht({status:"awaiting-code-input"})}catch(e){throw Ht({status:"error",error:e}),"login"===_a.current?Et(ya,"login","onError",e.privyErrorCode||Le.UNKNOWN_AUTH_ERROR):"link"===_a.current&&Et(ya,"linkAccount","onError",e.privyErrorCode||Le.FAILED_TO_LINK_ACCOUNT,{linkMethod:"email"}),e}},initUpdateEmail:async(e,t,a)=>{let r=new u(e,t,a);T.startAuthFlow(r);try{await r.sendCodeEmail({withPrivyUi:!0})}catch(e){Et(ya,"update","onError",e.privyErrorCode||Le.UNKNOWN_AUTH_ERROR,{linkMethod:Ea.current})}},initUpdatePhone:async(e,t,a)=>{let r=new g(e,t,a);T.startAuthFlow(r);try{await r.sendSmsCode({withPrivyUi:!0})}catch(e){Et(ya,"update","onError",e.privyErrorCode||Le.UNKNOWN_AUTH_ERROR,{linkMethod:Ea.current})}},initLoginWithSms:async({phoneNumber:e,captchaToken:t,disableSignup:a,withPrivyUi:r})=>{Gt({status:"sending-code"});let n=new E({phoneNumber:e,captchaToken:t,disableSignup:a});T.startAuthFlow(n);try{Ea.current="sms",await n.sendSmsCode({withPrivyUi:r}),Gt({status:"awaiting-code-input"})}catch(e){throw Gt({status:"error",error:e}),"login"===_a.current?Et(ya,"login","onError",e.privyErrorCode||Le.UNKNOWN_AUTH_ERROR):"link"===_a.current&&Et(ya,"linkAccount","onError",e.privyErrorCode||Le.FAILED_TO_LINK_ACCOUNT,{linkMethod:"sms"}),e}},resendEmailCode:async()=>{await(T.authFlow?.sendCodeEmail({withPrivyUi:!0}))},resendSmsCode:async()=>{await(T.authFlow?.sendSmsCode({withPrivyUi:!0}))},loginWithCode:async e=>{let t,a;function r(e){T.authFlow instanceof h?Ht(e):T.authFlow instanceof E&&Gt(e)}if(r({status:"submitting-code"}),!D){let e=new Me;throw r({status:"error",error:e}),e}if(T.authFlow instanceof h)T.authFlow.meta.emailCode=e.trim();else{if(!(T.authFlow instanceof E)){let e=new Se("Must initialize a passwordless code flow first");throw r({status:"error",error:e}),e}T.authFlow.meta.smsCode=e.trim()}let n=await Ma();if("link"===_a.current)try{({user:t}=await T.link())}catch(e){throw r({status:"error",error:e}),Et(ya,"linkAccount","onError",e.privyErrorCode||Le.FAILED_TO_LINK_ACCOUNT,{linkMethod:Ea.current}),e}else if("update"===_a.current)try{({user:t}=await T.link())}catch(e){throw r({status:"error",error:e}),Et(ya,"update","onError",e.privyErrorCode||Le.FAILED_TO_UPDATE_ACCOUNT,{linkMethod:Ea.current}),e}else try{({user:t,isNewUser:a}=await T.authenticate())}catch(e){throw r({status:"error",error:e}),Et(ya,"login","onError",e.privyErrorCode||Le.UNKNOWN_AUTH_ERROR),e}let i=t||H;te(i||null),Rt(a||!1),V(!0),r({status:"done"});let o=null;return T.authFlow instanceof h?o=i?.linkedAccounts.find((({type:e})=>"email"===e))||null:T.authFlow instanceof E&&(o=i?.linkedAccounts.find((({type:e})=>"phone"===e))||null),{user:i,isNewUser:a||!1,wasAlreadyAuthenticated:!!n,linkedAccount:o}},generateSiweMessage:async({address:e,chainId:t,captchaToken:a})=>{_a.current="link",Ea.current="siwe",qt({status:"generating-message"});let r=await T.generateSiweNonce({address:e,captchaToken:a});return qt({status:"awaiting-signature"}),ot({address:e,chainId:t.replace("eip155:",""),nonce:r})},generateSiweMessageForSmartWallet:async({address:e,chainId:t})=>{let a=await T.generateSiweNonce({address:e});return ot({address:e,chainId:t.replace("eip155:",""),nonce:a})},linkSmartWallet:async({message:e,signature:t,smartWalletType:a})=>{let r;try{r=await T.linkSmartWallet({message:e,signature:t,smartWalletType:a}),r=await ir.refreshUser()??r}catch(e){throw e}te(r||H||null)},linkWithSiwe:async({message:e,signature:t,chainId:a,walletClientType:r,connectorType:n})=>{let i;Va("siwe");let o=null;try{qt({status:"submitting-signature"}),i=await T.linkWithSiwe({message:e,signature:t,chainId:a,walletClientType:r,connectorType:n}),i=await ir.refreshUser()??i,qt({status:"done"}),(o=er(i)||null)&&Et(ya,"linkAccount","onSuccess",i,"siwe",o)}catch(e){throw Et(ya,"linkAccount","onError",e.privyErrorCode||Le.FAILED_TO_LINK_ACCOUNT,{linkMethod:"siwe"}),_a.current=null,Ea.current=null,qt({status:"error",error:e}),e}let s=i||H;return te(s||null),_a.current=null,Ea.current=null,{user:s,linkedAccount:o}},refreshUser:async()=>{let e=await T.getAuthenticatedUser();return V(!!e),te(e),e},walletProxy:Xt,createAnalyticsEvent:({eventName:e,payload:t,timestamp:a})=>T.createAnalyticsEvent({eventName:e,payload:t,timestamp:a}),acceptTerms:async()=>{let e=await T.acceptTerms();return te(e),e},getUsdTokenPrice:e=>T.getUsdTokenPrice(e),getUsdPriceForSol:()=>T.getUsdPriceForSol(),recoverPrimaryWallet:async e=>new Promise((async(t,a)=>{let r=k(e?.user??H)||O(e?.user??H),n=await Ma();if(!n||!Xt||!r)return void a(Error("Must have valid access token and Privy wallet to recover wallet"));ta(!0);let{entropyId:i,entropyIdVerifier:o}=C(r);try{await Xt.connect({accessToken:n,entropyId:i,entropyIdVerifier:o}),t(!0)}catch(e){Ne(e)&&"privy"===r.recoveryMethod?(T.createAnalyticsEvent({eventName:"embedded_wallet_pinless_recovery_started",payload:{walletAddress:r.address}}),(await Xt.recover({entropyId:i,entropyIdVerifier:o,accessToken:n})).entropyId||a(Error("Unable to recover wallet")),T.createAnalyticsEvent({eventName:"embedded_wallet_recovery_completed",payload:{walletAddress:r.address}}),t(!0)):Ne(e)&&"privy"!==r.recoveryMethod?(ra({recoverWallet:{entropyId:i,entropyIdVerifier:o,onFailure:a,onSuccess:()=>t(!0)},recoveryOAuthStatus:{provider:r.recoveryMethod,action:"recover"}}),Ta(Je(r.recoveryMethod))):a(e)}})),embeddedSolanaWallet:_e,createEmbeddedSolanaWallet:async()=>{ta(!0);let e=await Ma(),t=await ir.refreshUser(),a=W(t),r=b(t);if(!t||!e)throw new Se("User must be logged in to create a Solana wallet");if(a)throw new Se("User already has an embedded Solana wallet.");r&&await ir.recoverPrimaryWallet({user:t});let n=await ir.initializeWalletProxy(15e3);if(!n)throw new Se("Unable to initialize wallet proxy");T.createAnalyticsEvent({eventName:"embedded_solana_wallet_creation_started"});try{await n.createSolana({accessToken:e,ethereumAddress:r?.address});let t=await ir.refreshUser(),a=W(t);if(!a)throw new Se("Could not get Solana wallet for user");return T.createAnalyticsEvent({eventName:"embedded_solana_wallet_creation_completed",payload:{walletAddress:a.address}}),a}catch(e){throw T.createAnalyticsEvent({eventName:"embedded_solana_wallet_creation_failed"}),new Se("Failed to create Solana embedded wallet with error ",e)}},exportSolanaWallet:e=>new Promise((async(t,a)=>{if(!j||!H)return void a(Error("User must be authenticated before exporting their Privy wallet"));let r=e?.address??W(H)?.address;if(!r)return void a(Error("User does not have an HD Solana wallet."));let{signingWallet:n,rootWallet:i}=L(H,r);if(!n||!i)return void a(Error("Must have a Privy wallet before exporting"));if(ta(!0),!await Ma()||!Xt)return void a(Error("Must have valid access token to enroll in MFA"));if(!Xt)return void a(Error("Must have a Privy wallet before exporting"));let{entropyId:o,entropyIdVerifier:s}=C(i);ra({connectWallet:{entropyId:o,entropyIdVerifier:s,onCompleteNavigateTo:pt.EMBEDDED_WALLET_KEY_EXPORT_SCREEN,onFailure:a,shouldForceMFA:!0},keyExport:{appId:v.appId,appClientId:v.clientId,origin:T.apiUrl,walletToExport:n,primaryWallet:i,onSuccess:t,onFailure:a}}),Ta(pt.EMBEDDED_WALLET_CONNECTING_SCREEN)})),setReadyToTrue:e=>{F(!0),na?.(e)},updateWallets:()=>za(),fundWallet:async(e,t)=>{let a=pt.FUNDING_METHOD_SELECTION_SCREEN;ra({funding:Wt({address:e,appConfig:Jt,fundWalletConfig:t,methodScreen:a})}),Ta(a)},fundSolanaWallet:async(e,t)=>{let a=pt.FUNDING_METHOD_SELECTION_SCREEN;ra({funding:It({address:e,appConfig:Jt,fundWalletConfig:t,methodScreen:a})}),Ta(a)},requestFarcasterSignerStatus:async e=>{let t=await Ma(),a=H?.linkedAccounts.find((e=>"wallet"===e.type&&"privy"===e.walletClientType));if(!t)throw Error("Must have valid access token to connect with Farcaster");if(!Xt||!a)throw Error("Must have an embedded wallet to use Farcaster signers");if(!H?.farcaster?.fid)throw Error("Must have Farcaster account to use Farcaster signers");let r=await T.requestFarcasterSignerStatus(e);return"approved"===r.status&&te(await T.getAuthenticatedUser()||H||null),r},connectCoinbaseSmartWallet:async()=>{Jt.externalWallets.coinbaseWallet.connectionOptions="smartWalletOnly";let e=T.connectors?.findWalletConnector("coinbase_wallet","coinbase_smart_wallet")||T.connectors?.findWalletConnector("coinbase_wallet","coinbase_wallet");if(e)return e.updateConnectionPreference("smartWalletOnly"),Fa(e);await Da("coinbase_wallet","coinbase_smart_wallet")},initiateAccountTransfer:async({nonce:e,account:t,accountType:a,externalWalletMetadata:r,telegramAuthResult:n,farcasterEmbeddedAddress:i,oAuthUserInfo:o})=>{try{let s=await T.sendAccountTransferRequest({nonce:e,account:t,accountType:a,externalWalletMetadata:r,telegramAuthResult:n,farcasterEmbeddedAddress:i,oAuthUserInfo:o});return te(s),s}catch(e){throw e}}};Sa=ir.recoverPrimaryWallet,Ra=ir.recoverPrimaryWallet,Pa=ir.solanaSignMessage;let or=l((()=>({wallets:re,ready:la&&fa})),[re,la,fa]),sr=T.authFlow instanceof _,lr=!Jt.headless&&Jt.captchaEnabled&&!j&&(D||sr);/*#__PURE__*/return e(Tt.Provider,{value:nr,children:/*#__PURE__*/e(_t.Provider,{value:ya,children:/*#__PURE__*/e(Ct.Provider,{value:or,children:/*#__PURE__*/e(ft,{...Jt,children:/*#__PURE__*/t(At.Provider,{value:ir,children:[/*#__PURE__*/e(ht,{children:/*#__PURE__*/t(vt,{data:aa,setModalData:ra,setInitialScreen:Lt,initialScreen:Pt,authenticated:j,open:I,children:[v.children,lr&&/*#__PURE__*/e(oe,{delayedExecution:!1}),/*#__PURE__*/e(mt,{theme:{...Jt.appearance.palette||{}}}),!Jt.render.standalone&&/*#__PURE__*/e(se,{open:I})]})}),ea&&Zt?/*#__PURE__*/e(Te,{appId:v.appId,appClientId:v.clientId,clientAnalyticsId:T.clientAnalyticsId,origin:T.apiUrl,mfaMethods:H?.mfaMethods,mfaPromise:wa,mfaSubmitPromise:ma,onLoad:Qt,onLoadFailed:()=>null}):null,Jt.loginConfig.telegramAuthConfiguration&&
|
|
2
|
-
/*#__PURE__*/e(wt,{$if:!0,children:/*#__PURE__*/e(le,{scriptHost:v.apiUrl||x,botUsername:Jt.loginConfig.telegramAuthConfiguration.botName})})]})})})})})};export{_a as C,Ea as E,Ha as P,Ia as a,ka as b,Ma as c,Da as d,Fa as e,xa as f,La as g,ja as h,Ba as i,Va as j,Aa as l};
|