@privy-io/js-sdk-core 0.70.0 → 0.71.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.
@@ -1,4 +1,4 @@
1
- import{AcceptTermsOnUser as e,AnalyticsEvent as t,AppConfig as n,CoinbaseOnRampInit as r,CoinbaseOnRampStatus as i,CreateDepositAddressQuote as a,CustomJWTAuthenticate as o,CustomJWTLink as s,FarcasterAuthenticate as c,FarcasterInit as l,FarcasterLink as u,FarcasterStatus as ee,FarcasterUnlink as te,FarcasterV2Authenticate as d,FarcasterV2Init as f,GetCrossAppConnections as p,GetDepositAddressOrder as ne,GetDepositConfig as re,GetNextDepositAddressOrder as ie,GetSmartWalletConfig as ae,GuestAuthenticate as oe,Logout as se,MfaPasskeyInit as ce,MfaPasswordlessSmsInit as le,MoonpayOnRampSign as ue,OAuthAuthenticate as de,OAuthInit as fe,OAuthLink as pe,OAuthUnlink as me,PasskeyAuthenticate as he,PasskeyAuthenticateInit as ge,PasskeyLink as _e,PasskeyLinkInit as ve,PasskeyRegister as ye,PasskeyRegisterInit as be,PasswordlessAuthenticate as xe,PasswordlessInit as Se,PasswordlessLink as Ce,PasswordlessSmsAuthenticate as we,PasswordlessSmsInit as Te,PasswordlessSmsLink as Ee,PasswordlessSmsUnlink as De,PasswordlessSmsUpdate as Oe,PasswordlessUnlink as ke,PasswordlessUpdate as Ae,RecoveryConfigurationICloud as je,RecoveryKeyMaterial as Me,RecoveryOAuthAuthenticate as Ne,RecoveryOAuthInit as Pe,RecoveryOAuthInitICloud as Fe,RefreshSession as Ie,SiweAuthenticate as Le,SiweInit as Re,SiweLink as ze,SiweLinkSmartWallet as Be,SiweUnlink as Ve,SiwsAuthenticate as He,SiwsInit as Ue,SiwsLink as We,SiwsUnlink as Ge,TelegramAuthenticate as Ke,TelegramLink as qe,TelegramUnlink as Je,WalletCreate as Ye,WalletGet as Xe,WalletRawSign as Ze,WalletRpc as Qe,WalletUpdate as $e,WalletsRevoke as et,getPathWithParams as tt}from"@privy-io/routes";import*as nt from"jose";import{base64url as rt}from"jose";import{DEFAULT_SUPPORTED_CHAINS as it,arbitrum as m,arbitrumSepolia as at,avalanche as h,avalancheFuji as ot,base as g,baseSepolia as st,celo as ct,dedupeSupportedChains as lt,mainnet as _,monadMainnet as v,optimism as y,optimismSepolia as ut,polygon as b,polygonAmoy as dt,sepolia as ft}from"@privy-io/chains";import pt from"eventemitter3";import{createPublicClient as mt,formatEther as ht,formatUnits as gt,http as _t,toHex as vt}from"viem";import{STRING_TO_NUMBER_TXN_TYPE as yt,TEMPO_TXN_TYPE_NUMBER as bt,isTempoTransactionRequest as xt,normalizeViemPreparedTempoTransaction as St,toViemTempoTransactionSerializable as Ct,toViemTransactionSerializable as wt}from"@privy-io/ethereum";import Tt from"canonicalize";import{encoding as x}from"@privy-io/encoding";import{tempo as S,tempoModerato as Et}from"viem/chains";import Dt from"fetch-retry";import{PrivyErrorCode as Ot}from"@privy-io/api-base";import C from"js-cookie";import kt from"libphonenumber-js/examples.mobile.json";import{AsYouType as At,getCountries as jt,getCountryCallingCode as Mt,getExampleNumber as Nt,isPossiblePhoneNumber as Pt,parsePhoneNumberFromString as Ft}from"libphonenumber-js/min";export*from"@privy-io/chains";var It=Object.defineProperty,w=(e,t)=>{let n={};for(var r in e)It(n,r,{get:e[r],enumerable:!0});return t||It(n,Symbol.toStringTag,{value:`Module`}),n};function Lt(e){return{digest:e?.digest??((e,t)=>globalThis.crypto.subtle.digest(e,t)),randomUUID:e?.randomUUID??(()=>globalThis.crypto.randomUUID())}}var Rt=class{_privyInternal;_smartWalletConfig;constructor(e){this._privyInternal=e}getConfig(){return this._privyInternal.config}async getSmartWalletConfig(){return this._smartWalletConfig||=await this._privyInternal.fetch(ae,{params:{app_id:this.appId}}),this._smartWalletConfig}get appId(){return this._privyInternal.appId}},T=class e{static parse(t){try{return new e(t)}catch{return null}}value;_decoded;constructor(e){this.value=e,this._decoded=nt.decodeJwt(e)}get subject(){return this._decoded.sub}get expiration(){return this._decoded.exp}get issuer(){return this._decoded.iss}get audience(){return this._decoded.aud}isExpired(e=0){return Date.now()>=(this.expiration-e)*1e3}},zt=class e{_storage;_privyInternal;constructor(e,t){this._privyInternal=e,this._storage=t}static providerAccessTokenStorageKey=e=>`privy:cross-app:${e}`;async updateOnCrossAppAuthentication(t,n){let r=n.access_token,i=e.providerAccessTokenStorageKey(t);await this._storage.put(i,r)}async getProviderAccessToken(t){let n=e.providerAccessTokenStorageKey(t),r=await this._storage.get(n);if(typeof r!=`string`)return null;try{if(new T(r).isExpired())throw Error(`JWT is expired`);return r}catch{return await this._storage.del(n),null}}async getCrossAppConnections(){return await this._privyInternal.fetch(p,{params:{app_id:this._privyInternal.appId}})}},Bt=class{_privyInternal;constructor(e){this._privyInternal=e}async revoke(){await this._privyInternal.fetch(et,{})}},E=class extends Error{name=`PrivyApiError`;error;code;status;constructor({error:e,code:t,status:n}){super(e),this.error=e,this.code=t,this.status=n}},D=class extends Error{error;code;constructor({error:e,code:t}){super(e),this.code=t,this.error=e}},Vt=class extends Error{error;code;response;constructor({error:e,code:t,response:n}){super(e),this.code=t,this.error=e,this.response=n}};function Ht(e){return e instanceof E||e instanceof D?e.code:`unknown_error`}const Ut=e=>t=>e[Ht(t)]??e.default;function Wt(e){return e&&typeof e==`object`&&`code`in e&&e.code===`mfa_canceled`}const O=e=>!!e.id&&e.recovery_method===`privy-v2`,Gt=[`error`,`invalid_request_arguments`,`wallet_not_on_device`,`invalid_recovery_pin`,`insufficient_funds`,`mfa_timeout`,`missing_or_invalid_mfa`,`mfa_verification_max_attempts_reached`];let Kt=function(e){return e.MISSING_OR_INVALID_PRIVY_APP_ID=`missing_or_invalid_privy_app_id`,e.MISSING_OR_INVALID_PRIVY_ACCOUNT_ID=`missing_or_invalid_privy_account_id`,e.INVALID_DATA=`invalid_data`,e.LINKED_TO_ANOTHER_USER=`linked_to_another_user`,e.ALLOWLIST_REJECTED=`allowlist_rejected`,e.OAUTH_USER_DENIED=`oauth_user_denied`,e.UNKNOWN_AUTH_ERROR=`unknown_auth_error`,e.USER_EXITED_AUTH_FLOW=`exited_auth_flow`,e.MUST_BE_AUTHENTICATED=`must_be_authenticated`,e.UNKNOWN_CONNECT_WALLET_ERROR=`unknown_connect_wallet_error`,e.GENERIC_CONNECT_WALLET_ERROR=`generic_connect_wallet_error`,e.CLIENT_REQUEST_TIMEOUT=`client_request_timeout`,e.INVALID_CREDENTIALS=`invalid_credentials`,e}({});var qt=class extends Error{cause;privyErrorCode;constructor(e,t,n){super(e),t instanceof Error&&(this.cause=t),this.privyErrorCode=n}toString(){return`${this.type}${this.privyErrorCode?`-${this.privyErrorCode}`:``}: ${this.message}${this.cause?` [cause: ${this.cause}]`:``}`}},Jt=class extends qt{type=`provider_error`;code;data;constructor(e,t,n){super(e),this.code=t,this.data=n}},k=class extends Error{type;constructor(e,t){super(t),this.type=e}},Yt=class extends qt{type=`connector_error`;constructor(e,t,n){super(e,t,n)}},A=class extends Error{code;data;constructor(e,t,n){super(e),this.code=t,this.data=n}};const j={UNKNOWN_ERROR:{eipCode:0,message:`Unknown error`,detail:`Unknown error`,retryable:!0},E4001_DEFAULT_USER_REJECTED_REQUEST:{eipCode:4001,message:`User Rejected Request`,detail:`The user rejected the request.`,default:!0,retryable:!0},E4100_DEFAULT_UNAUTHORIZED:{eipCode:4100,message:`Unauthorized`,detail:`The requested method and/or account has not been authorized by the user.`,default:!0,retryable:!1},E4200_DEFAULT_UNSUPPORTED_METHOD:{eipCode:4200,message:`Unsupported Method`,detail:`The Provider does not support the requested method.`,default:!0,retryable:!1},E4900_DEFAULT_DISCONNECTED:{eipCode:4900,message:`Disconnected`,detail:`The Provider is disconnected from all chains.`,default:!0,retryable:!0},E4901_DEFAULT_CHAIN_DISCONNECTED:{eipCode:4901,message:`Chain Disconnected`,detail:`The Provider is not connected to the requested chain.`,default:!0,retryable:!0},E32700_DEFAULT_PARSE_ERROR:{eipCode:-32700,message:`Parse error`,detail:`Invalid JSON`,default:!0,retryable:!1},E32600_DEFAULT_INVALID_REQUEST:{eipCode:-32600,message:`Invalid request`,detail:`JSON is not a valid request object`,default:!0,retryable:!1},E32601_DEFAULT_METHOD_NOT_FOUND:{eipCode:-32601,message:`Method not found`,detail:`Method does not exist`,default:!0,retryable:!1},E32602_DEFAULT_INVALID_PARAMS:{eipCode:-32602,message:`Invalid params`,detail:`Invalid method parameters`,default:!0,retryable:!1},E32603_DEFAULT_INTERNAL_ERROR:{eipCode:-32603,message:`Internal error`,detail:`Internal JSON-RPC error`,default:!0,retryable:!0},E32000_DEFAULT_INVALID_INPUT:{eipCode:-32e3,message:`Invalid input`,detail:`Missing or invalid parameters`,default:!0,retryable:!1},E32001_DEFAULT_RESOURCE_NOT_FOUND:{eipCode:-32001,message:`Resource not found`,detail:`Requested resource not found`,default:!0,retryable:!1},E32002_DEFAULT_RESOURCE_UNAVAILABLE:{eipCode:-32002,message:`Resource unavailable`,detail:`Requested resource not available`,default:!0,retryable:!0},E32003_DEFAULT_TRANSACTION_REJECTED:{eipCode:-32003,message:`Transaction rejected`,detail:`Transaction creation failed`,default:!0,retryable:!0},E32004_DEFAULT_METHOD_NOT_SUPPORTED:{eipCode:-32004,message:`Method not supported`,detail:`Method is not implemented`,default:!0,retryable:!1},E32005_DEFAULT_LIMIT_EXCEEDED:{eipCode:-32005,message:`Limit exceeded`,detail:`Request exceeds defined limit`,default:!0,retryable:!1},E32006_DEFAULT_JSON_RPC_VERSION_NOT_SUPPORTED:{eipCode:-32006,message:`JSON-RPC version not supported`,detail:`Version of JSON-RPC protocol is not supported`,default:!0,retryable:!1},E32002_CONNECTION_ALREADY_PENDING:{eipCode:-32002,message:`Connection request already pending`,detail:`Don’t see your wallet? Check your other browser windows.`,retryable:!1},E32002_REQUEST_ALREADY_PENDING:{eipCode:-32002,message:`Resource request already pending`,detail:`Don’t see your wallet? Check your other browser windows.`,retryable:!1},E32002_WALLET_LOCKED:{eipCode:-32002,message:`Wallet might be locked`,detail:`Unlock your wallet and try again.`,retryable:!0},E4001_USER_REJECTED_REQUEST:{eipCode:4001,message:`Signature rejected`,detail:`Please try signing again.`,retryable:!0}};function M(e){let t=e.type;return typeof t==`string`&&Gt.includes(t)}function N(e){return M(e)&&e.type===`wallet_not_on_device`}function Xt(e){return M(e)&&e.type===`mfa_timeout`}function Zt(e){return M(e)&&e.type===`missing_or_invalid_mfa`}function Qt(e){return M(e)&&e.type===`mfa_verification_max_attempts_reached`}function $t(e){return M(e)&&e.message.includes(`code 429`)}var en=class extends Jt{details;constructor(e){let t=e;super(t.message,t.code,t.data);let n=Object.values(j).find(e=>e.eipCode===t.code);this.details=n||j.UNKNOWN_ERROR,t.code===-32002&&(t.message?.includes(`already pending for origin`)?t.message?.includes(`wallet_requestPermissions`)?this.details=j.E32002_CONNECTION_ALREADY_PENDING:this.details=j.E32002_REQUEST_ALREADY_PENDING:t.message?.includes(`Already processing`)&&t.message.includes(`eth_requestAccounts`)&&(this.details=j.E32002_WALLET_LOCKED))}};const P=e=>/^0x[0-9a-fA-F]*$/.test(e),tn=e=>Buffer.from(e,`utf8`),F=e=>`0x${e.toString(`hex`)}`;async function I(e,t){let n;if(t instanceof Uint8Array)n=x.base64.fromBytes(t);else{let e=Tt(t);if(e===void 0)throw new D({error:`Failed to prepare the payload for signing`,code:`invalid_input`});n=x.base64.fromBytes(x.utf8.toBytes(e))}let{signature:r}=await e({message:n});return{signature:r}}const L=`privy-request-expiry`,nn=1800*1e3;async function R(e,t,{wallet_id:n,headers:r,...i}){let a=e.getCompiledPath(Qe,{params:{wallet_id:n}}),o=String(Date.now()+nn),{signature:s}=await I(t,{version:1,url:a,method:Qe.method,headers:{"privy-app-id":e.app.appId,[L]:o},body:{...i}});if(Date.now()>Number(o))throw new D({error:`Wallet request expired before it could be sent. Please try again.`,code:`embedded_wallet_request_expired`});return await e.fetchPrivyRoute(Qe,{body:i,params:{wallet_id:n},headers:{"privy-authorization-signature":s,[L]:o,...r??{}}})}function rn(e){return xt(e)?on(e):an(e)}function an(e){return{from:e.from,to:e.to??void 0,nonce:z(e.nonce),chain_id:z(e.chainId),data:un(e.data),value:z(e.value),type:fn(e.type),gas_limit:z(e.gasLimit??e.gas),gas_price:z(e.gasPrice),max_fee_per_gas:z(e.maxFeePerGas),max_priority_fee_per_gas:z(e.maxPriorityFeePerGas)}}function on(e){return{type:bt,from:e.from,chain_id:z(e.chainId),nonce:z(e.nonce),nonce_key:z(e.nonceKey),gas_limit:z(e.gasLimit),max_fee_per_gas:z(e.maxFeePerGas),max_priority_fee_per_gas:z(e.maxPriorityFeePerGas),fee_token:e.feeToken,valid_after:z(e.validAfter),valid_before:z(e.validBefore),fee_payer_signature:cn(e.feePayerSignature),access_list:sn(e.accessList),calls:e.calls.map(e=>({to:e.to,data:e.data,value:z(e.value)}))}}function sn(e){if(e)return Array.isArray(e)?e.map(e=>`address`in e?{address:e.address,storage_keys:[...e.storageKeys]}:{address:e[0],storage_keys:[...e[1]]}):Object.entries(e).map(([e,t])=>({address:e,storage_keys:[...t]}))}function cn(e){if(!e)return;let t=ln(e);if(t!==0&&t!==1)throw Error(`Tempo fee payer signatures require a valid yParity value`);return{r:e.r,s:e.s,y_parity:t}}function ln(e){if(e.yParity!==void 0)return e.yParity;if(e.v!==void 0)return Number(e.v)-27}function un(e){if(e!==void 0)return typeof e==`string`?P(e)?e:F(tn(e)):F(Buffer.from(Uint8Array.from(e)))}const dn=[0,1,2,4];function fn(e){if(e==null)return;let t=Number(e);if(!pn(t))throw Error(`Invalid transaction type: expected ${dn.join(`, `)} as a number or hex string, got "${e}".`);return t}function pn(e){return dn.includes(e)}function z(e){if(typeof e==`number`||typeof e==`bigint`)return`0x${BigInt(e).toString(16)}`;if(typeof e==`string`){if(P(e))return e;throw Error(`Invalid quantity string: expected a hex-prefixed value (0x…), got "${e}". Use a number, bigint, or hex string instead.`)}}function mn(e){return typeof e==`string`&&(e=JSON.parse(e)),{types:e.types,primary_type:String(e.primaryType),domain:e.domain,message:e.message}}async function hn({context:e,account:t,rpcRequest:n}){switch(n.chainType){case`ethereum`:return gn({context:e,account:t,rpcRequest:n.request});case`solana`:return _n({context:e,account:t,rpcRequest:n.request})}}async function gn({context:e,account:t,rpcRequest:n}){switch(n.method){case`personal_sign`:{let[r]=n.params,i=await R(e,e.signRequest,{chain_type:`ethereum`,method:`personal_sign`,wallet_id:t.id,params:r.startsWith(`0x`)?{message:r.slice(2),encoding:`hex`}:{message:r,encoding:`utf-8`}});if(i.method!==`personal_sign`)throw Error(`Unable to sign message`);return{data:i.data.signature}}case`eth_signTransaction`:{let[r]=n.params,i=await R(e,e.signRequest,{chain_type:`ethereum`,method:`eth_signTransaction`,wallet_id:t.id,params:{transaction:rn(r)}});if(i.method!==`eth_signTransaction`)throw Error(`Unable to sign transaction`);return{data:i.data.signed_transaction}}case`eth_signTypedData_v4`:{let[,r]=n.params,i=await R(e,e.signRequest,{chain_type:`ethereum`,method:n.method,wallet_id:t.id,params:{typed_data:mn(r)}});if(i.method!==`eth_signTypedData_v4`)throw Error(`Unable to sign typed data`);return{data:i.data.signature}}case`eth_sign`:{let[,r]=n.params,i=await R(e,e.signRequest,{chain_type:`ethereum`,method:`secp256k1_sign`,wallet_id:t.id,params:{hash:P(r)?r:F(tn(r))}});if(i.method!==`secp256k1_sign`)throw Error(`Unable to sign message`);return{data:i.data.signature}}case`secp256k1_sign`:{let[r]=n.params,i=await R(e,e.signRequest,{chain_type:`ethereum`,method:`secp256k1_sign`,wallet_id:t.id,params:{hash:P(r)?r:F(tn(r))}});if(i.method!==`secp256k1_sign`)throw Error(`Unable to sign message`);return{data:i.data.signature}}case`csw_signUserOperation`:case`eth_sendTransaction`:case`eth_populateTransactionRequest`:throw Error(`This wallet does not support the method: ${n.method}`)}}async function _n({context:e,account:t,rpcRequest:n}){switch(n.method){case`signMessage`:{let{message:r}=n.params,i=await R(e,e.signRequest,{chain_type:`solana`,method:`signMessage`,wallet_id:t.id,params:{message:r,encoding:`base64`}});if(i.method!==`signMessage`)throw Error(`Unable to sign message`);return{data:i.data.signature}}}}const vn=(e,t,n,r)=>{let i=Number(e),a=t.find(e=>e.id===i);if(!a)throw new Yt(`Unsupported chainId ${e}`,4901);let o=bn(a,n,r.appId);if(i===S.id||i===Et.id){let e=i===S.id?S:Et;return mt({transport:_t(o),chain:e})}return mt({transport:_t(o),chain:a})};function yn(e){return e===S.id||e===Et.id}const bn=(e,t,n)=>{let r=e.id,i=Number(e.id),a;if(e.rpcUrls.privyWalletOverride&&e.rpcUrls.privyWalletOverride.http[0])a=e.rpcUrls.privyWalletOverride.http[0];else if(t.rpcUrls&&t.rpcUrls[i])a=t.rpcUrls[i];else if(e.rpcUrls.privy?.http[0]){let t=new URL(e.rpcUrls.privy.http[0]);t.searchParams.append(`privyAppId`,n),a=t.toString()}else a=e.rpcUrls.public?.http[0]?e.rpcUrls.public.http[0]:e.rpcUrls.default?.http[0];if(!a)throw new Yt(`No RPC url found for ${r}`);return a};function xn({currentRecoveryMethod:e,upgradeToRecoveryMethod:t}){switch(e){case`privy`:case`user-passcode`:case`recovery-encryption-key`:return!0;case`icloud`:case`google-drive`:if(e===t)throw Error(`Cannot upgrade to the existing cloud platform`);return!0;default:throw Error(`Unknown recovery method`)}}const Sn=new Set([`eth_sign`,`personal_sign`,`eth_signTypedData_v4`,`csw_signUserOperation`,`secp256k1_sign`]);var Cn=class extends pt{_walletProxy;_privyInternal;_account;_entropyId;_entropyIdVerifier;_chainId;_chains;_onNeedsRecovery;_client;_appApi;constructor({walletProxy:e,privyInternal:t,account:n,entropyId:r,entropyIdVerifier:i,chains:a,onNeedsRecovery:o,chainId:s=a[0].id,appApi:c}){super(),this._walletProxy=e,this._privyInternal=t,this._account=n,this._entropyId=r,this._entropyIdVerifier=i,this._chainId=s,this._chains=a,this._onNeedsRecovery=o,this._client=vn(s,a,{rpcUrls:[]},{appId:c.appId}),this._appApi=c}async request(e){if(Sn.has(e.method))return this.handleIFrameRpc(e);switch(e.method){case`eth_accounts`:case`eth_requestAccounts`:return this._account.address?[this._account.address]:[];case`eth_chainId`:return`0x${this._chainId.toString(16)}`;case`wallet_switchEthereumChain`:return this.handleSwitchEthereumChain(e);case`eth_estimateGas`:return this.handleEstimateGas(e);case`eth_signTransaction`:{let t=e.params?.[0];return this.handleSignTransaction(t)}case`eth_sendTransaction`:{let t=e.params?.[0];return this.handleSendTransaction(t)}case`eth_populateTransactionRequest`:{let t=e.params?.[0];return this.handlePopulateTransaction(t)}default:return this.handleJsonRpc(e)}}ensureChainId(e){let t={chainId:this._chainId,...e};return this.internalSwitchEthereumChain(t.chainId),t}internalSwitchEthereumChain(e){!e||Number(e)===this._chainId||(this._chainId=Number(e),this._client=vn(this._chainId,this._chains,{rpcUrls:[]},{appId:this._privyInternal.appId}),this.emit(`chainChanged`,e))}async handlePopulateTransaction(e){let t=this.ensureChainId(e);if(xt(t)){let e=Ct(t),n=St(await this.requireTempoClient().prepareTransactionRequest({account:t.from??this._account.address,...e}),t.gasLimit);return{...t,...n,type:bt}}let n=wt(t),{gas:r,...i}=await this._client.prepareTransactionRequest({account:t.from??this._account.address,...n});return{...i,gasLimit:r,type:yt[i.type],authorizationList:t.authorizationList}}async handleSignTransaction(e){let t={...e};for(let e of Object.keys(t)){let n=t[e];typeof n==`bigint`&&(t[e]=vt(n))}return xt(t)&&(t.calls=t.calls.map(e=>({...e,value:typeof e.value==`bigint`?vt(e.value):e.value}))),await this.handleIFrameRpc({method:`eth_signTransaction`,params:[t]})}async handleSendTransaction(e){let t=await this.handlePopulateTransaction(e),n=await this.handleSignTransaction(t);return await this.handleJsonRpc({method:`eth_sendRawTransaction`,params:[n]})}async handleEstimateGas(e){if(!e.params||!Array.isArray(e.params))throw Error(`Invalid params for eth_estimateGas`);let t=e.params?.[0],n=this.ensureChainId(t);if(xt(n)){let e=Ct(n);return await this.requireTempoClient().estimateGas({account:n.from??this._account.address,...e})}let r=wt(n);return await this._client.estimateGas({account:n.from??this._account.address,...r})}handleSwitchEthereumChain(e){if(!e.params||!Array.isArray(e.params))throw new A(`Invalid params for ${e.method}`,4200);let t;if(typeof e.params[0]==`string`)t=e.params[0];else if(`chainId`in e.params[0]&&typeof e.params[0].chainId==`string`)t=e.params[0].chainId;else throw new A(`Invalid params for ${e.method}`,4200);this.internalSwitchEthereumChain(t)}async handleIFrameRpc(e){try{let t=await this._privyInternal.getAccessTokenInternal();if(!t)throw Error(`Missing privy token. User must be logged in`);this._privyInternal.createAnalyticsEvent(`embedded_wallet_sdk_rpc_started`,{method:e.method,address:this._account.address});let n=this._account;if(O(n)){let{data:r}=await hn({context:{app:this._appApi,fetchPrivyRoute:(...e)=>this._privyInternal.fetch(...e),getCompiledPath:(...e)=>this._privyInternal.getPath(...e),signRequest:({message:e})=>this._walletProxy.signWithUserSigner({accessToken:t,message:e})},account:n,rpcRequest:{chainType:`ethereum`,request:e}});return r}try{await this._walletProxy.connect({entropyId:this._entropyId,entropyIdVerifier:this._entropyIdVerifier,accessToken:t})}catch(e){let n=N(e);if(n&&this._account.recovery_method===`privy`)await this._walletProxy.recover({entropyId:this._entropyId,entropyIdVerifier:this._entropyIdVerifier,accessToken:t});else if(n&&this._onNeedsRecovery){let e;await new Promise(async(t,n)=>{e=setTimeout(()=>n(new D({code:`embedded_wallet_recovery_error`,error:`User-owned recovery timed out`})),12e4),await this._onNeedsRecovery?.({recoveryMethod:this._account.recovery_method,onRecovered:()=>t(!0)})}).finally(()=>clearTimeout(e))}else throw e}return(await this._walletProxy.rpcWallet({accessToken:t,request:e,entropyId:this._entropyId,entropyIdVerifier:this._entropyIdVerifier,hdWalletIndex:this._account.wallet_index,chainType:`ethereum`})).response.data}catch(t){console.error(t);let n=t instanceof Error?t.message:`Unable to make wallet request`;throw this._privyInternal.createAnalyticsEvent(`embedded_wallet_sdk_rpc_failed`,{method:e.method,address:this._account.address,error:n}),new D({code:`embedded_wallet_request_error`,error:n})}}async handleJsonRpc(e){return this._client.request(e)}requireTempoClient(){if(!yn(this._chainId))throw new A(`Cannot send a Tempo (type 118) transaction on chain ${this._chainId}`,4901);return this._client}toJSON(){return`PrivyEIP1193Provider { address: '${this._account.address}', chainId: ${this._chainId}, request: [Function] }`}};function wn(e){return`version`in e}function Tn(e,t){let n=(wn(e)?e.message:e.compileMessage()).staticAccountKeys.find(e=>e.toBase58()===t);if(!n)throw Error(`Transaction does not contain public key ${t}`);return n}var En=class{_proxy;_privyInternal;_app;_entropyId;_entropyIdVerifier;_account;_onNeedsRecovery;constructor({proxy:e,privyInternal:t,account:n,entropyId:r,entropyIdVerifier:i,onNeedsRecovery:a,app:o}){this._proxy=e,this._privyInternal=t,this._account=n,this._entropyId=r,this._entropyIdVerifier=i,this._onNeedsRecovery=a,this._app=o}async request(e){if(!await this._privyInternal.getAccessTokenInternal())throw new D({error:`Missing access token`,code:`attempted_rpc_call_before_logged_in`});switch(e.method){case`signAndSendTransaction`:return await this.handleSignAndSendTransaction(e);case`signTransaction`:return await this.handleSignTransaction(e);default:return await this.handleIFrameRpc(e)}}get _publicKey(){return this._account.address}async connectAndRecover(e){if(this._account.recovery_method!==`privy-v2`)try{await this._proxy.connect({entropyId:this._entropyId,entropyIdVerifier:this._entropyIdVerifier,accessToken:e})}catch(t){let n=N(t);if(n&&this._account.recovery_method===`privy`)await this._proxy.recover({entropyId:this._entropyId,entropyIdVerifier:this._entropyIdVerifier,accessToken:e});else if(n&&this._onNeedsRecovery){let e;await new Promise(async(t,n)=>{e=setTimeout(()=>n(new D({code:`embedded_wallet_recovery_error`,error:`User-owned recovery timed out`})),12e4),await this._onNeedsRecovery?.({recoveryMethod:this._account.recovery_method,onRecovered:()=>t(!0)})}).finally(()=>clearTimeout(e))}else throw t}}async signMessageRpc(e,t){let n=this._account;if(O(n)){let{data:r}=await hn({context:{app:this._app,fetchPrivyRoute:(...e)=>this._privyInternal.fetch(...e),getCompiledPath:(...e)=>this._privyInternal.getPath(...e),signRequest:({message:e})=>this._proxy.signWithUserSigner({accessToken:t,message:e})},account:n,rpcRequest:{chainType:`solana`,request:e}});return{signature:r}}else return(await this._proxy.rpcWallet({accessToken:t,request:e,chainType:`solana`,hdWalletIndex:this._account.wallet_index,entropyId:this._entropyId,entropyIdVerifier:this._entropyIdVerifier})).response.data}async handleIFrameRpc(e){try{let t=await this._privyInternal.getAccessTokenInternal();if(!t)throw Error(`Missing privy token. User must be logged in`);return this._privyInternal.createAnalyticsEvent(`embedded_wallet_sdk_rpc_started`,{method:e.method,address:this._account.address}),await this.connectAndRecover(t),await this.signMessageRpc(e,t)}catch(t){console.error(t);let n=t instanceof Error?t.message:`Unable to make wallet request`;throw this._privyInternal.createAnalyticsEvent(`embedded_wallet_sdk_rpc_failed`,{method:e.method,address:this._account.address,error:n}),new D({code:`embedded_wallet_request_error`,error:n})}}async handleSignAndSendTransaction(e){try{let t=await this._privyInternal.getAccessTokenInternal();if(!t)throw Error(`Missing privy token. User must be logged in`);this._privyInternal.createAnalyticsEvent(`embedded_wallet_sdk_rpc_started`,{method:e.method,address:this._account.address}),await this.connectAndRecover(t);let{transaction:n,connection:r,options:i}=e.params,a=Tn(n,this._account.address),o=wn(n)?Buffer.from(n.message.serialize()):n.serializeMessage(),{signature:s}=await this.signMessageRpc({method:`signMessage`,params:{message:o.toString(`base64`)}},t);return n.addSignature(a,Buffer.from(s,`base64`)),{signature:await r.sendRawTransaction(n.serialize(),i)}}catch(t){console.error(t);let n=t instanceof Error?t.message:`Unable to make wallet request`;throw this._privyInternal.createAnalyticsEvent(`embedded_wallet_sdk_rpc_failed`,{method:e.method,address:this._account.address,error:n}),new D({code:`embedded_wallet_request_error`,error:n})}}async handleSignTransaction(e){try{let t=await this._privyInternal.getAccessTokenInternal();if(!t)throw Error(`Missing privy token. User must be logged in`);this._privyInternal.createAnalyticsEvent(`embedded_wallet_sdk_rpc_started`,{method:e.method,address:this._account.address}),await this.connectAndRecover(t);let{transaction:n}=e.params,r=Tn(n,this._account.address),i=wn(n)?Buffer.from(n.message.serialize()):n.serializeMessage(),{signature:a}=await this.signMessageRpc({method:`signMessage`,params:{message:i.toString(`base64`)}},t);return n.addSignature(r,Buffer.from(a,`base64`)),{signedTransaction:n}}catch(t){console.error(t);let n=t instanceof Error?t.message:`Unable to make wallet request`;throw this._privyInternal.createAnalyticsEvent(`embedded_wallet_sdk_rpc_failed`,{method:e.method,address:this._account.wallet_index,error:n}),new D({code:`embedded_wallet_request_error`,error:n})}}toJSON(){return`PrivyEmbeddedSolanaProvider { address: '${this._account.address}', request: [Function] }`}},Dn=class{_proxy;_privyInternal;_account;_entropyId;_entropyIdVerifier;constructor({proxy:e,privyInternal:t,account:n,entropyId:r,entropyIdVerifier:i}){this._proxy=e,this._privyInternal=t,this._account=n,this._entropyId=r,this._entropyIdVerifier=i}async sign({message:e}){return await this.request({method:`sign`,params:{message:new TextDecoder(`utf8`).decode(e)}})}async signTransaction({psbt:e}){return await this.request({method:`signTransaction`,params:{psbt:e}})}async request(e){if(O(this._account))throw new D({code:`unsupported_wallet_type`,error:`Bitcoin wallet providers are only supported for on-device execution and this app uses TEE execution. Use the useSignRawHash hook from @privy-io/expo/extended-chains to sign over a hash with this wallet. Learn more at https://docs.privy.io/recipes/tee-wallet-migration-guide`});if(!await this._privyInternal.getAccessTokenInternal())throw new D({error:`Missing access token`,code:`attempted_rpc_call_before_logged_in`});return this.handleIFrameRpc(e)}async handleIFrameRpc(e){try{let t=await this._privyInternal.getAccessTokenInternal();if(!t)throw Error(`Missing access token. User must be authenticated.`);return this._privyInternal.createAnalyticsEvent(`embedded_wallet_sdk_rpc_started`,{method:e.method,address:this._account.address}),(await this._proxy.rpcWallet({accessToken:t,request:e,entropyId:this._entropyId,entropyIdVerifier:this._entropyIdVerifier,hdWalletIndex:this._account.wallet_index,chainType:this._account.chain_type})).response.data}catch(t){console.error(t);let n=t instanceof Error?t.message:`Unable to make wallet request`;throw this._privyInternal.createAnalyticsEvent(`embedded_wallet_sdk_rpc_failed`,{method:e.method,address:this._account.address,error:n}),new D({code:`embedded_wallet_request_error`,error:n})}}toJSON(){return`PrivyEmbeddedBitcoinProvider { address: '${this._account.address}', request: [Function] }`}},On=class{callbacks={};enqueue(e,t){this.callbacks[e]=t}flush(e){let t=Object.values(this.callbacks);this.callbacks={};for(let{reject:n}of t)n(e)}dequeue(e,t){let n=this.callbacks[t];if(!n)return console.warn(`[Privy] No callback found for "${e}" (id: ${t})`),null;switch(delete this.callbacks[t],e){case`privy:iframe:ready`:return n;case`privy:wallets:create`:return n;case`privy:user-signer:sign`:return n;case`privy:wallets:add`:return n;case`privy:wallets:set-recovery`:return n;case`privy:wallets:connect`:return n;case`privy:wallets:recover`:return n;case`privy:wallets:rpc`:return n;case`privy:wallet:create`:return n;case`privy:wallet:connect`:return n;case`privy:wallet:recover`:return n;case`privy:wallet:rpc`:return n;case`privy:solana-wallet:create`:return n;case`privy:solana-wallet:create-additional`:return n;case`privy:solana-wallet:connect`:return n;case`privy:solana-wallet:recover`:return n;case`privy:solana-wallet:rpc`:return n;case`privy:delegated-actions:consent`:return n;case`privy:mfa:verify`:return n;case`privy:mfa:init-enrollment`:return n;case`privy:mfa:submit-enrollment`:return n;case`privy:mfa:unenroll`:return n;case`privy:mfa:clear`:return n;case`privy:auth:unlink-passkey`:return n;default:throw Error(`invalid wallet event type ${e}`)}}};async function kn(e,t,n,r,i=!1,a,o){let s=i,c=async a=>s?(a===+!i?r():n.current?.reject(new k(`missing_or_invalid_mfa`,`MFA verification failed, retry.`)),await e(await new Promise((e,r)=>{t.current={resolve:e,reject:r},setTimeout(()=>{let e=new k(`mfa_timeout`,`Timed out waiting for MFA code`);n.current?.reject(e),r(e)},o)}))):await e(),l=null;for(let e=0;e<a;e++)try{l=await c(e),n.current?.resolve(void 0);break}catch(e){if(e.type===`missing_or_invalid_mfa`)s=!0;else throw n.current?.resolve(void 0),e}if(l===null){let e=new k(`mfa_verification_max_attempts_reached`,`Max MFA verification attempts reached`);throw n.current?.reject(e),e}return l}function An(e){return e.error!==void 0}const jn=(function(e){return()=>`id-${e++}`})(0),Mn=(e,t)=>typeof t==`bigint`?t.toString():t,Nn=(e,t)=>`${e}${JSON.stringify(t,Mn)}`,B=async(e,{ms:t,msg:n})=>{let r,i=new Promise((e,i)=>{r=setTimeout(()=>{i(Error(n))},t??15e3)});try{return await Promise.race([e,i])}finally{r!==void 0&&clearTimeout(r)}},Pn=new On;var Fn=class{ready;_waitForReadyPromise=null;cache;_embeddedWalletMessagePoster;mfa;constructor(e,t){this.ready=!1,this.cache=new Map,this._embeddedWalletMessagePoster=e,this.mfa=t}invokeWithMfa(e,t){return B(kn(n=>B(this.waitForReady().then(()=>e(n)),{msg:t.timeoutMsg,ms:t.timeoutMs}),this.mfa.rootPromise,this.mfa.submitPromise,()=>this.mfa.emit(`mfaRequired`),t.mfaAlwaysRequired??!1,4,3e5),{msg:`Operation reached timeout: MFA verification`,ms:126e4})}reload(){return this.ready=!1,this._waitForReadyPromise=null,Pn.flush(Error(`Embedded wallet WebView was reloaded`)),this.cache.clear(),this._embeddedWalletMessagePoster.reload()}onBackground(){this.ready=!1}ping(e=15e3){return B(this.invoke(`privy:iframe:ready`,{}),{msg:`Ping reached timeout`,ms:e})}create(e){return B(this.waitForReady().then(()=>this.invoke(`privy:wallet:create`,e)),{msg:`Operation reached timeout: create`})}rpc(e){return this.invokeWithMfa(t=>this.invoke(`privy:wallet:rpc`,{...t,...e}),{timeoutMsg:`Operation reached timeout: rpc`})}createSolana(e){return this.invokeWithMfa(t=>this.invoke(`privy:solana-wallet:create`,{...t,...e}),{timeoutMsg:`Operation reached timeout: create`,timeoutMs:6e4})}createAdditionalSolana(e){return B(this.waitForReady().then(()=>this.invoke(`privy:solana-wallet:create-additional`,e)),{msg:`Operation reached timeout: create`})}solanaRpc(e){return this.invokeWithMfa(t=>this.invoke(`privy:solana-wallet:rpc`,{...t,...e}),{timeoutMsg:`Operation reached timeout: solana-rpc`})}delegateWallets(e){return this.invokeWithMfa(t=>this.invoke(`privy:delegated-actions:consent`,{...t,...e}),{timeoutMsg:`Operation reached timeout: delegated-actions:consent`})}verifyMfa(e){return this.invokeWithMfa(t=>this.invoke(`privy:mfa:verify`,{...t,...e}),{timeoutMsg:`Operation reached timeout: mfa:verify`,mfaAlwaysRequired:!0})}initEnrollMfa(e){return this.invokeWithMfa(t=>this.invoke(`privy:mfa:init-enrollment`,{...t,...e}),{timeoutMsg:`Operation reached timeout: mfa:init-enrollment`})}submitEnrollMfa(e){return e.method===`passkey`?this.invokeWithMfa(t=>this.invoke(`privy:mfa:submit-enrollment`,{...t,...e}),{timeoutMsg:`Operation reached timeout: mfa:submit-enrollment`}):B(this.waitForReady().then(()=>this.invoke(`privy:mfa:submit-enrollment`,e)),{msg:`Operation reached timeout: mfa:submit-enrollment`})}unenrollMfa(e){return this.invokeWithMfa(t=>this.invoke(`privy:mfa:unenroll`,{...t,...e}),{timeoutMsg:`Operation reached timeout: mfa:unenroll`,mfaAlwaysRequired:!0})}unlinkPasskey(e){return this.invokeWithMfa(t=>this.invoke(`privy:auth:unlink-passkey`,{...t,...e}),{timeoutMsg:`Operation reached timeout: auth:unlink-passkey`,mfaAlwaysRequired:!0})}clearMfa(e){return B(this.waitForReady().then(()=>this.invoke(`privy:mfa:clear`,e)),{msg:`Operation reached timeout: mfa:clear`})}createWallet(e){return this.invokeWithMfa(t=>this.invoke(`privy:wallets:create`,{...t,...e}),{timeoutMsg:`Operation reached timeout: create`,timeoutMs:6e4})}signWithUserSigner(e){return this.invokeWithMfa(t=>this.invoke(`privy:user-signer:sign`,{...t,...e}),{timeoutMsg:`Operation reached timeout: user-signer:sign`})}addWallet(e){return B(this.waitForReady().then(()=>this.invoke(`privy:wallets:add`,e)),{msg:`Operation reached timeout: wallets:add`})}setRecovery(e){return this.invokeWithMfa(t=>this.invoke(`privy:wallets:set-recovery`,{...t,...e}),{timeoutMsg:`Operation reached timeout: wallets:set-recovery`,timeoutMs:6e4})}connect(e){return B(this.waitForReady().then(()=>this.invoke(`privy:wallets:connect`,e)),{msg:`Operation reached timeout: wallets:connect`})}recover(e){return this.invokeWithMfa(t=>this.invoke(`privy:wallets:recover`,{...t,...e}),{timeoutMsg:`Operation reached timeout: wallets:recover`,timeoutMs:6e4})}rpcWallet(e){return this.invokeWithMfa(t=>this.invoke(`privy:wallets:rpc`,{...t,...e}),{timeoutMsg:`Operation reached timeout: wallets:rpc`})}handleEmbeddedWalletMessages(e){if(!e.event.startsWith(`privy:`)){console.warn(`Unsupported event type: ${e.event}`);return}let t=Pn.dequeue(e.event,e.id);if(t)return An(e)?t.reject(new k(e.error.type,e.error.message)):t.resolve(e.data)}waitForReady(){return this.ready?Promise.resolve():(this._waitForReadyPromise||=new Promise((e,t)=>{(async()=>{for(let t=0;t<100&&!this.ready;t++)this.invoke(`privy:iframe:ready`,{}).then(()=>{this.ready=!0,this._waitForReadyPromise=null,e()}).catch(()=>{}),await new Promise(e=>setTimeout(e,150));this.ready||(this._waitForReadyPromise=null,t(Error(`Embedded wallet WebView failed to become ready`)))})()}),this._waitForReadyPromise)}invoke(e,t){let n=Nn(e,t);if(e===`privy:wallet:create`||e===`privy:solana-wallet:create`){let e=this.cache.get(n);if(e)return e}let r=new Promise((n,r)=>{let i=jn();Pn.enqueue(i,{resolve:n,reject:r}),this._embeddedWalletMessagePoster.postMessage(JSON.stringify({id:i,event:e,data:t}),`*`)}).finally(()=>{this.cache.delete(n)});return this.cache.set(n,r),r}};async function In(e,{request:t,headers:n}){return await e.fetchPrivyRoute(Ye,{body:t,headers:n})}async function Ln({context:e,chainType:t,idempotencyKey:n}){return{wallet:await In(e,{request:{chain_type:t,owner_id:void 0},headers:n?{"privy-idempotency-key":n}:void 0})}}var Rn=class{_privyInternal;_proxy;_chains=Array.from(it);_mfa;_mfaPromises;_appApi;constructor(e,t,n,r,i,a){if(this._privyInternal=e,t&&(this._proxy=new Fn(t,i),r.setProxy(this._proxy)),n){let e=lt(n);this._chains=e}this._mfa=r,this._mfaPromises=i,this._appApi=a}setMessagePoster(e){this._proxy=new Fn(e,this._mfaPromises),this._mfa.setProxy(this._proxy)}async signWithUserSigner(e){if(!this._proxy)throw Error(`Embedded wallet proxy not initialized`);let t=await this._privyInternal.getAccessTokenInternal();if(!t)throw new D({error:`User must be logged in to sign a message with the user signer`,code:`user_signer_sign_error`});let{signature:n}=await this._proxy.signWithUserSigner({accessToken:t,message:e.message});return{signature:n}}async add(e){if(!this._proxy)throw Error(`Embedded wallet proxy not initialized`);if(this._privyInternal.config?.embedded_wallet_config.mode===`user-controlled-server-wallets-only`)await Ln({context:{app:this._appApi,fetchPrivyRoute:(...e)=>this._privyInternal.fetch(...e),getCompiledPath:(...e)=>this._privyInternal.getPath(...e)},chainType:e.chainType});else{let t=await this._privyInternal.getAccessTokenInternal();if(!t)throw new D({error:`User must be logged in to create an embedded wallet`,code:`embedded_wallet_creation_error`});await this._proxy.addWallet({accessToken:t,...e})}let{user:t}=await this._privyInternal.refreshSession();return{user:t}}async getBitcoinProvider({wallet:e,entropyId:t,entropyIdVerifier:n,recoveryPassword:r,recoveryAccessToken:i,recoverySecretOverride:a}){if(!this._proxy)throw Error(`Embedded wallet proxy not initialized`);if(!await this._privyInternal.getAccessTokenInternal())throw Error(`User must be logged in to create an embedded wallet`);return O(e)||await this._load({entropyId:t,entropyIdVerifier:n,wallet:e,recoveryPassword:r,recoveryAccessToken:i,recoverySecretOverride:a}),new Dn({account:e,privyInternal:this._privyInternal,proxy:this._proxy,entropyId:t,entropyIdVerifier:n})}async create({password:e,recoveryMethod:t,recoveryToken:n,recoveryKey:r,recoverySecretOverride:i,iCloudRecordNameOverride:a,solanaAccount:o,skipCallbacks:s,idempotencyKey:c}){if(!this._proxy)throw Error(`Embedded wallet proxy not initialized`);if(this._privyInternal.config?.embedded_wallet_config.mode===`user-controlled-server-wallets-only`){if(t&&!t.startsWith(`privy`))throw new D({error:`User-controlled server wallets do not support custom recovery methods`,code:`embedded_wallet_creation_error`});await Ln({context:{app:this._appApi,fetchPrivyRoute:(...e)=>this._privyInternal.fetch(...e),getCompiledPath:(...e)=>this._privyInternal.getPath(...e)},chainType:`ethereum`,idempotencyKey:c})}else{let s;if(s=t||(e?`user-passcode`:`privy`),e&&typeof e!=`string`)throw Error(`Invalid recovery password, must be a string`);if(s===`privy`&&this._privyInternal.config?.embedded_wallet_config.require_user_password_on_create)throw Error(`Password not provided yet is required by App configuration`);let c=await this._privyInternal.getAccessTokenInternal();if(!c)throw Error(`User must be logged in to create an embedded wallet`);let{address:l}=await this._proxy.create({accessToken:c,recoveryMethod:s,recoveryKey:r,recoveryPassword:e,recoveryAccessToken:n,recoverySecretOverride:i,iCloudRecordNameOverride:a,solanaAddress:o?.address});if(!l)throw Error(`Failed to create wallet`)}return await this._privyInternal.refreshSession(s)}async createSolana(e){if(!this._proxy)throw new D({error:`Embedded wallet proxy not initialized`,code:`embedded_wallet_creation_error`});if(this._privyInternal.config?.embedded_wallet_config.mode===`user-controlled-server-wallets-only`)await Ln({context:{app:this._appApi,fetchPrivyRoute:(...e)=>this._privyInternal.fetch(...e),getCompiledPath:(...e)=>this._privyInternal.getPath(...e)},chainType:`solana`,idempotencyKey:e?.idempotencyKey});else{let t=await this._privyInternal.getAccessTokenInternal();if(!t)throw new D({error:`User must be logged in to create an embedded wallet`,code:`embedded_wallet_creation_error`});e?.ethereumAccount&&await this.getProvider(e.ethereumAccount);let{publicKey:n}=await this._proxy.createSolana({accessToken:t,ethereumAddress:e?.ethereumAccount?.address});if(!n)throw new D({error:`Failed to create wallet`,code:`embedded_wallet_creation_error`})}return await this._privyInternal.refreshSession()}async delegateWallets({delegatedWallets:e,rootWallet:t}){if(!this._proxy)throw new D({error:`Embedded wallet proxy not initialized`,code:`embedded_wallet_creation_error`});let n=await this._privyInternal.getAccessTokenInternal();if(!n)throw new D({error:`User must be logged in to create an embedded wallet`,code:`embedded_wallet_creation_error`});await this._proxy.delegateWallets({accessToken:n,delegatedWallets:e,rootWallet:t})}async getProvider(e,t,n,r,i){if(!this._proxy)throw Error(`Embedded wallet proxy not initialized`);return O(e)||await this._load({wallet:e,entropyId:e.address,entropyIdVerifier:`ethereum-address-verifier`,recoveryPassword:t,recoveryKey:i,recoveryAccessToken:n,recoverySecretOverride:r}),new Cn({account:e,entropyId:e.address,entropyIdVerifier:`ethereum-address-verifier`,privyInternal:this._privyInternal,chains:this._chains,walletProxy:this._proxy,appApi:this._appApi})}async getEthereumProvider({wallet:e,entropyId:t,entropyIdVerifier:n,recoveryPassword:r,recoveryAccessToken:i,recoverySecretOverride:a,recoveryKey:o,onNeedsRecovery:s}){if(!this._proxy)throw Error(`Embedded wallet proxy not initialized`);if(!await this._privyInternal.getAccessTokenInternal())throw Error(`User must be logged in to create an embedded wallet`);return O(e)||(!s||r||i||a||o)&&await this._load({entropyId:t,entropyIdVerifier:n,wallet:e,recoveryPassword:r,recoveryAccessToken:i,recoverySecretOverride:a,recoveryKey:o}),new Cn({account:e,entropyId:t,entropyIdVerifier:`ethereum-address-verifier`,privyInternal:this._privyInternal,chains:this._chains,walletProxy:this._proxy,onNeedsRecovery:s,appApi:this._appApi})}async getSolanaProvider(e,t,n,r,i,a,o){if(!this._proxy)throw new D({error:`Embedded wallet proxy not initialized`,code:`embedded_wallet_webview_not_loaded`});return O(e)||(!o||r||i||a)&&await this._load({wallet:e,entropyId:t,entropyIdVerifier:n,recoveryPassword:r,recoveryAccessToken:i,recoverySecretOverride:a}),new En({account:e,privyInternal:this._privyInternal,proxy:this._proxy,entropyId:t,entropyIdVerifier:n,onNeedsRecovery:o,app:this._appApi})}async setRecovery(e){let{wallet:t,...n}=e;if(!this._proxy)throw Error(`Embedded wallet proxy not initialized`);if(O(t))throw new D({error:`This wallet does not support setting recovery methods`,code:`unsupported_recovery_method`});xn({currentRecoveryMethod:t.recovery_method,upgradeToRecoveryMethod:n.recoveryMethod===`icloud-native`?`icloud`:n.recoveryMethod}),await this._load(t.chain_type===`solana`?{wallet:t,entropyId:t.address,entropyIdVerifier:`solana-address-verifier`}:{wallet:t,entropyId:t.address,entropyIdVerifier:`ethereum-address-verifier`});let r=await this._privyInternal.getAccessTokenInternal();if(!r)throw Error(`User must be logged in to interact with embedded wallets`);let i=t.recovery_method;this._privyInternal.createAnalyticsEvent(`embedded_wallet_sdk_set_recovery_started`,{address:t.address,target_recovery_method:n.recoveryMethod,existing_recovery_method:i});try{let e;if(n.recoveryMethod===`user-passcode`)e={recoveryMethod:`user-passcode`,recoveryPassword:n.password};else if(n.recoveryMethod===`google-drive`)e={recoveryMethod:`google-drive`,recoveryAccessToken:n.recoveryAccessToken};else if(n.recoveryMethod===`icloud`)e={recoveryMethod:`icloud`,recoveryAccessToken:n.recoveryAccessToken};else if(n.recoveryMethod===`icloud-native`)e={recoveryMethod:`icloud-native`,iCloudRecordNameOverride:n.iCloudRecordNameOverride,recoverySecretOverride:n.recoverySecretOverride};else if(n.recoveryMethod===`recovery-encryption-key`)e={recoveryMethod:`recovery-encryption-key`,recoveryKey:n.recoveryKey};else if(n.recoveryMethod===`privy`)e={recoveryMethod:`privy`};else throw Error(`Unknown recovery method: ${n.recoveryMethod}`);await this._proxy.setRecovery({accessToken:r,entropyId:t.address,entropyIdVerifier:t.chain_type===`solana`?`solana-address-verifier`:`ethereum-address-verifier`,...e}),this._privyInternal.createAnalyticsEvent(`embedded_wallet_sdk_set_recovery_completed`,{address:t.address,target_recovery_method:n.recoveryMethod,existing_recovery_method:i});let{user:a}=await this._privyInternal.refreshSession();return{user:a,provider:t.chain_type===`ethereum`?new Cn({account:t,entropyId:t.address,entropyIdVerifier:`ethereum-address-verifier`,privyInternal:this._privyInternal,chains:this._chains,walletProxy:this._proxy,appApi:this._appApi}):null}}catch(e){throw this._privyInternal.createAnalyticsEvent(`embedded_wallet_sdk_set_recovery_failed`,{address:t.address,recovery_method:t.recovery_method,error:e instanceof Error?e.message:`Unable to recover wallet`}),e}}getURL(){let e=new URL(`${this._privyInternal.baseUrl}/apps/${this._privyInternal.appId}/embedded-wallets`);return this._privyInternal.caid&&e.searchParams.append(`caid`,this._privyInternal.caid),this._privyInternal.appClientId&&e.searchParams.append(`client_id`,this._privyInternal.appClientId),e.href}get chains(){return this._chains}onMessage(e){if(!this._proxy)throw Error(`Embedded wallet proxy not initialized`);return this._proxy.handleEmbeddedWalletMessages(e)}reload(){if(!this._proxy){this._privyInternal.logger.warn(`Attempted to reload proxy before initialized`);return}this._proxy.reload()}onBackground(){this._proxy?.onBackground()}async ping(e){try{if(!this._proxy)throw Error(`Embedded wallet proxy not initialized`);return await this._proxy.ping(e),!0}catch(e){return this._privyInternal.logger.debug(e),!1}}async _load({entropyId:e,entropyIdVerifier:t,wallet:n,recoveryPassword:r,recoveryKey:i,recoveryAccessToken:a,recoverySecretOverride:o}){if(!this._proxy)throw Error(`Embedded wallet proxy not initialized`);let s=await this._privyInternal.getAccessTokenInternal();if(!s)throw Error(`User must be logged in to interact with embedded wallets`);try{return await this._proxy.connect({accessToken:s,entropyId:e,entropyIdVerifier:t}),e}catch(c){if(N(c)){try{if(n.recovery_method===`privy`){this._privyInternal.createAnalyticsEvent(`embedded_wallet_sdk_recovery_started`,{address:n.address,recovery_method:n.recovery_method});let r=await this._proxy.recover({accessToken:s,entropyId:e,entropyIdVerifier:t});return this._privyInternal.createAnalyticsEvent(`embedded_wallet_sdk_recovery_completed`,{address:n.address,recovery_method:n.recovery_method}),r.entropyId}if(n.recovery_method===`user-passcode`&&r){this._privyInternal.createAnalyticsEvent(`embedded_wallet_sdk_recovery_started`,{address:n.address,recovery_method:n.recovery_method});let i=await this._proxy.recover({accessToken:s,recoveryPassword:r,entropyId:e,entropyIdVerifier:t});return this._privyInternal.createAnalyticsEvent(`embedded_wallet_sdk_recovery_completed`,{address:n.address,recovery_method:n.recovery_method}),i.entropyId}if([`google-drive`,`icloud`].includes(n.recovery_method)&&a){this._privyInternal.createAnalyticsEvent(`embedded_wallet_sdk_recovery_started`,{address:n.address,recovery_method:n.recovery_method});let r=await this._proxy.recover({accessToken:s,recoveryAccessToken:a,entropyId:e,entropyIdVerifier:t});return this._privyInternal.createAnalyticsEvent(`embedded_wallet_sdk_recovery_completed`,{address:n.address,recovery_method:n.recovery_method}),r.entropyId}if(n.recovery_method===`icloud`&&o){this._privyInternal.createAnalyticsEvent(`embedded_wallet_sdk_recovery_started`,{address:n.address,recovery_method:`icloud-native`});let r=await this._proxy.recover({accessToken:s,recoverySecretOverride:o,entropyId:e,entropyIdVerifier:t});return this._privyInternal.createAnalyticsEvent(`embedded_wallet_sdk_recovery_completed`,{address:n.address,recovery_method:`icloud-native`}),r.entropyId}if(n.recovery_method===`recovery-encryption-key`&&i){this._privyInternal.createAnalyticsEvent(`embedded_wallet_sdk_recovery_started`,{address:n.address,recovery_method:n.recovery_method});let r=await this._proxy.recover({accessToken:s,recoveryKey:i,entropyId:e,entropyIdVerifier:t});return this._privyInternal.createAnalyticsEvent(`embedded_wallet_sdk_recovery_completed`,{address:n.address,recovery_method:n.recovery_method}),r.entropyId}}catch(t){throw this._privyInternal.createAnalyticsEvent(`embedded_wallet_sdk_recovery_failed`,{address:n.address,recovery_method:n.recovery_method,error:t instanceof Error?t.message:`Unable to recover wallet: ${e}`}),t}throw c}else throw c}}},zn=class extends pt{rootPromise;submitPromise;constructor(){super(),this.rootPromise={current:null},this.submitPromise={current:null}}};const V=`privy:active-user`,Bn=`privy:saved-users`,H=e=>e?`privy:${e}:token`:`privy:token`,U=e=>e?`privy:${e}:pat`:`privy:pat`,W=e=>e?`privy:${e}:refresh_token`:`privy:refresh_token`,G=e=>e?`privy:${e}:id-token`:`privy:id-token`,Vn=e=>e?`privy-${e}-token`:`privy-token`,Hn=e=>e?`privy-${e}-refresh-token`:`privy-refresh-token`,Un=e=>e?`privy-${e}-id-token`:`privy-id-token`,K=e=>e?`privy-${e}-session`:`privy-session`,q=Promise.allSettled.bind(Promise)??(e=>Promise.all(e.map(e=>e.then(e=>({status:`fulfilled`,value:e})).catch(e=>({status:`rejected`,reason:e}))))),Wn=[`storage_cleared`,`token_cleared`,`refresh_token_cleared`,`identity_token_cleared`,`token_stored`,`refresh_token_stored`,`identity_token_stored`,`oauth_tokens_granted`,`error_storing_tokens`];var Gn=class extends pt{static events=Wn;_storage;_isUsingServerCookies=!1;GUEST_CREDENTIAL_STORAGE_KEY;_setStoredUsers;_hasEmittedStoredUsers=!1;constructor(e){super(),this._storage=e.storage,this.GUEST_CREDENTIAL_STORAGE_KEY=`privy:guest:${e.appId}`,this._setStoredUsers=e.setStoredUsers}set isUsingServerCookies(e){this._isUsingServerCookies=e}setStoredUsersCallback(e){this._setStoredUsers=e,this.getSavedUserIds().then(e=>{this._hasEmittedStoredUsers||this._setStoredUsers?.({users:e.map(e=>({id:e}))})})}async getCustomerAccessToken(){let e=await this.getActiveUserId(),t=await this._storage.get(H(e));try{return typeof t==`string`?new T(t).value:null}catch(e){return console.error(e),await this.destroyLocalState({reason:`getToken_error`}),null}}async getPrivyAccessToken(){let e=await this.getActiveUserId(),t=await this._storage.get(U(e));try{return typeof t==`string`?new T(t).value:null}catch(e){return console.error(e),await this.destroyLocalState({reason:`getToken_error`}),null}}async getRefreshToken(){let e=await this.getActiveUserId(),t=await this._storage.get(W(e));return typeof t==`string`?t:null}async getIdentityToken(){let e=await this.getActiveUserId(),t=await this._storage.get(G(e));return typeof t==`string`?t:null}async mightHaveServerCookies(){try{let e=await this.getActiveUserId(),t=C.get(K(e));if(t!==void 0&&t.length>0)return!0;let n=C.get(K(null));return n!==void 0&&n.length>0}catch(e){console.error(e)}return!1}async hasRefreshCredentials(e,t){return await this.mightHaveServerCookies()||typeof e==`string`&&typeof t==`string`}tokenIsActive(e){if(!e)return!1;let t=T.parse(e);return t!==null&&!t.isExpired(30)}async destroyLocalState(e){let t=await this.getActiveUserId(),n=[this._storage.del(H(null)),this._storage.del(U(null)),this._storage.del(W(null)),this._storage.del(G(null)),this._storage.del(this.GUEST_CREDENTIAL_STORAGE_KEY),this._storage.del(V)];t&&n.push(this._storage.del(H(t)),this._storage.del(U(t)),this._storage.del(W(t)),this._storage.del(G(t)),this.removeSavedUserId(t)),await q(n),C.remove(Vn(null)),C.remove(Hn(null)),C.remove(Un(null)),C.remove(K(null)),t&&(C.remove(Vn(t)),C.remove(Hn(t)),C.remove(Un(t)),C.remove(K(t))),e?.reason&&this.emit(`storage_cleared`,{reason:e.reason})}async storeCustomerAccessToken(e){let t=await this.getActiveUserId();await this.storeCustomerAccessTokenForUser(t,e)}async storeCustomerAccessTokenForUser(e,t){let n=H(e),r=Vn(e);if(typeof t==`string`){let e=await this._storage.get(n);if(await this._storage.put(n,t),!this._isUsingServerCookies){let e=T.parse(t)?.expiration;C.set(r,t,{sameSite:`Strict`,secure:!0,expires:e?new Date(e*1e3):void 0})}e!==t&&this.emit(`token_stored`,{cookiesEnabled:this._isUsingServerCookies})}else{let e=await this._storage.get(n);await this._storage.del(n),C.remove(r),e!==null&&this.emit(`token_cleared`,{reason:`set_with_non_string_value`})}}async storePrivyAccessToken(e){let t=await this.getActiveUserId();await this.storePrivyAccessTokenForUser(t,e)}async storePrivyAccessTokenForUser(e,t){let n=U(e);typeof t==`string`?await this._storage.put(n,t):await this._storage.del(n)}async storeRefreshTokenForUser(e,t){let n=W(e),r=Hn(e),i=K(e);typeof t==`string`?(await this._storage.put(n,t),this._isUsingServerCookies||(C.set(i,`t`,{sameSite:`Strict`,secure:!0,expires:30}),C.set(r,t,{sameSite:`Strict`,secure:!0,expires:30})),this.emit(`refresh_token_stored`,{cookiesEnabled:this._isUsingServerCookies})):(await this._storage.del(n),C.remove(r),C.remove(i),this.emit(`refresh_token_cleared`,{reason:`set_with_non_string_value`}))}async updateWithTokensResponse(e){let t=e.user.id,n=(await q([this.storeCustomerAccessTokenForUser(t,e.token),this.storePrivyAccessTokenForUser(t,e.privy_access_token),this.storeRefreshTokenForUser(t,e.refresh_token),this.storeIdentityTokenForUser(t,e.identity_token)])).filter(e=>e.status===`rejected`);if(n.length>0){this.emit(`error_storing_tokens`,n.map(e=>String(e.reason)).join(`, `));return}let r=(await q([this.storeCustomerAccessTokenForUser(null,e.token),this.storePrivyAccessTokenForUser(null,e.privy_access_token),this.storeRefreshTokenForUser(null,e.refresh_token),this.storeIdentityTokenForUser(null,e.identity_token)])).filter(e=>e.status===`rejected`);if(r.length>0){this.emit(`error_storing_tokens`,r.map(e=>String(e.reason)).join(`, `));return}await this.storeActiveUserId(t);let i=(await q([this.processOAuthTokens(e.oauth_tokens)])).filter(e=>e.status===`rejected`);i.length>0&&this.emit(`error_storing_tokens`,i.map(e=>String(e.reason)).join(`, `))}async backfillLegacySession(){if(await this.getActiveUserId())return;let[e,t,n,r]=await Promise.all([this._storage.get(H(null)),this._storage.get(U(null)),this._storage.get(W(null)),this._storage.get(G(null))]);if(typeof e!=`string`||typeof n!=`string`)return;let i=T.parse(e)?.subject;if(typeof i!=`string`||i.length===0)return;let a=[this.storeCustomerAccessTokenForUser(i,e),this.storeRefreshTokenForUser(i,n)];typeof t==`string`&&a.push(this.storePrivyAccessTokenForUser(i,t)),typeof r==`string`&&a.push(this.storeIdentityTokenForUser(i,r));let o=(await q(a)).filter(e=>e.status===`rejected`);if(o.length>0){this.emit(`error_storing_tokens`,o.map(e=>String(e.reason)).join(`, `));return}await this.storeActiveUserId(i)}async processOAuthTokens(e){e&&this.emit(`oauth_tokens_granted`,e)}async storeIdentityToken(e){let t=await this.getActiveUserId();await this.storeIdentityTokenForUser(t,e)}async storeIdentityTokenForUser(e,t){let n=G(e),r=Un(e);if(typeof t==`string`){let e=await this._storage.get(n);if(await this._storage.put(n,t),!this._isUsingServerCookies){let e=T.parse(t)?.expiration;C.set(r,t,{sameSite:`Strict`,secure:!0,expires:e?new Date(e*1e3):void 0})}e!==t&&this.emit(`identity_token_stored`,{cookiesEnabled:this._isUsingServerCookies})}else{let e=await this._storage.get(n);await this._storage.del(n),C.remove(r),e!==null&&this.emit(`identity_token_cleared`,{reason:`set_with_non_string_value`})}}async getOrCreateGuestCredential(){let e=await this._storage.get(this.GUEST_CREDENTIAL_STORAGE_KEY);if(e&&typeof e==`string`)return e;let t=rt.encode(crypto.getRandomValues(new Uint8Array(32)));return await this._storage.put(this.GUEST_CREDENTIAL_STORAGE_KEY,t),t}async getActiveUserId(){let e=await this._storage.get(V);return typeof e==`string`?e:null}async storeActiveUserId(e){let t=await this.getSavedUserIds();await this.storeSavedUserIds([...t,e]),await this._storage.put(V,e)}async getSavedUserIds(){let e=await this._storage.get(Bn);if(typeof e!=`string`)return[];try{let t=JSON.parse(e),n=Array.isArray(t)?t.filter(e=>typeof e==`string`):[];return[...new Set(n)]}catch{return[]}}async storeSavedUserIds(e){let t=[...new Set(e)];t.length>0?await this._storage.put(Bn,JSON.stringify(t)):await this._storage.del(Bn),this._setStoredUsers&&(this._hasEmittedStoredUsers=!0,this._setStoredUsers({users:t.map(e=>({id:e}))}))}async removeSavedUserId(e){let t=await this.getSavedUserIds();await this.storeSavedUserIds(t.filter(t=>t!==e))}async switchActiveUserId(e){if(!(await this.getSavedUserIds()).includes(e))throw new D({code:`invalid_input`,error:`Cannot switch active user because the user ID is not saved on this device`});await this._storage.put(V,e)}};const Kn=e=>{let t=new AbortController;return setTimeout(()=>t.abort(),e),t.signal};function qn(e){let t=new URLSearchParams;for(let n in e)e[n]!=null&&t.append(n,String(e[n]));return Array.from(t).length?`?`+t.toString():``}const J=()=>void 0,Y={NONE:-1/0,ERROR:1,WARN:2,INFO:3,DEBUG:1/0},Jn=({level:e,logger:t})=>({get level(){return e},error:Y[e]>=Y.ERROR?t.error:J,warn:Y[e]>=Y.WARN?t.warn:J,info:Y[e]>=Y.INFO?t.info:J,debug:Y[e]>=Y.DEBUG?t.debug:J}),Yn=`privy:caid`;var Xn=class{baseUrl;callbacks;appId;appClientId;logger;session;_config;_analyticsId;_storage;_sdkVersion=`js-sdk-core:0.70.0`;_fetch;nativeAppIdentifier;_crypto;isMultiUserModeEnabled;_cache=new Map;constructor(e){this.logger=Jn({level:e.logger?.level??e.logLevel??`ERROR`,logger:e.logger??console}),this._storage=e.storage,this._crypto=e.crypto,this._analyticsId=null,this._getOrGenerateClientAnalyticsId(),this.baseUrl=e.baseUrl??`https://auth.privy.io`,this.appId=e.appId,this.appClientId=e.appClientId,this._sdkVersion=e.sdkVersion??this._sdkVersion,this.callbacks=e.callbacks,this.nativeAppIdentifier=e.nativeAppIdentifier,this.isMultiUserModeEnabled=e.isMultiUserModeEnabled,this.session=new Gn({storage:this._storage,isUsingServerCookies:!1,appId:e.appId,setStoredUsers:e.callbacks?.setStoredUsers}),this._fetch=Dt(globalThis.fetch,{retries:3,retryDelay:e=>3**e*500,retryOn:[408,409,425,500,502,503,504]}),this.session.on(`error_storing_tokens`,e=>{this.createAnalyticsEvent(`error_updating_tokens_in_storage`,{reason:e})})}setCallbacks(e){this.callbacks={...this.callbacks,...e},this.session.setStoredUsersCallback(this.callbacks?.setStoredUsers)}get isReady(){return!!this._config}get config(){return this._config}get caid(){return this._analyticsId}async _initialize(){if(this.isReady){this.callbacks?.setIsReady?.(!0);return}if(!await this.isStorageAccessible())throw new D({code:`storage_error`,error:`Unable to access storage`});this._config=await this.getAppConfig(),this._config?.custom_api_url&&(this.baseUrl=this._config.custom_api_url,this.session.isUsingServerCookies=!0),this.isMultiUserModeEnabled&&await this.session.backfillLegacySession(),this.callbacks?.setIsReady?.(!0),this._sdkVersion.startsWith(`react-auth:`)||this.createAnalyticsEvent(`sdk_initialize`,{})}getPath(e,{params:t,query:n}){return`${this.baseUrl}${tt(e.path,t)}${qn(n)}`}async fetchWithoutAuthentication(e,t){if(!this.isMultiUserModeEnabled)throw new D({code:`invalid_input`,error:`Unauthenticated requests require sessions.mode to be set to "multi-user"`});return this.fetch(e,{...t,onRequest:this._beforeRequestWithoutAuth.bind(this)})}async fetchForLogin(e,t){return this.isMultiUserModeEnabled?this.fetchWithoutAuthentication(e,t):this.fetch(e,t)}async fetch(e,{body:t,params:n,query:r,headers:i,onRequest:a=this._beforeRequest.bind(this)}){let o=new Request(this.getPath(e,{params:n,query:r}),{method:e.method,body:JSON.stringify(t),headers:i}),s=await a(o),c=await this._fetch(o,s),l=await c.json();if(c.status>299)throw new E({...l,status:c.status});return l}async _beforeRequestWithoutInitialize(e){let t=await this.session.getPrivyAccessToken()??await this.session.getCustomerAccessToken(),n=new Headers(e.headers);n.set(`privy-app-id`,this.appId),this.appClientId&&n.set(`privy-client-id`,this.appClientId),n.set(`privy-client`,this._sdkVersion),t&&n.set(`Authorization`,`Bearer ${t}`),n.set(`Content-Type`,`application/json`),n.set(`Accept`,`application/json`);let r=await this._getOrGenerateClientAnalyticsId();return r&&n.set(`privy-ca-id`,r),this.nativeAppIdentifier&&n.set(`x-native-app-identifier`,this.nativeAppIdentifier),{signal:Kn(2e4),headers:n,credentials:`include`}}async beforeRequestWithoutRefresh(e){return await this._initialize(),this._beforeRequestWithoutInitialize(e)}async _beforeRequestWithoutAuth(e){await this._initialize();let t=new Headers(e.headers);t.set(`privy-app-id`,this.appId),this.appClientId&&t.set(`privy-client-id`,this.appClientId),t.set(`privy-client`,this._sdkVersion),t.set(`Content-Type`,`application/json`),t.set(`Accept`,`application/json`);let n=await this._getOrGenerateClientAnalyticsId();return n&&t.set(`privy-ca-id`,n),this.nativeAppIdentifier&&t.set(`x-native-app-identifier`,this.nativeAppIdentifier),{signal:Kn(2e4),headers:t}}async _beforeRequest(e){return await this._initialize(),await this.getAccessTokenInternal(),this.beforeRequestWithoutRefresh(e)}async getAppConfig(){return await this.fetch(n,{params:{app_id:this.appId},onRequest:this._beforeRequestWithoutInitialize.bind(this)})}async _getOrGenerateClientAnalyticsId(){if(this._analyticsId)return this._analyticsId;try{let e=await this._storage.get(Yn);if(typeof e==`string`&&e.length>0)return this._analyticsId=e,e}catch(e){this.logger.error(`Unable to load clientId`,e)}try{this._analyticsId=this._crypto.randomUUID()}catch(e){this.logger.error(`Unable to generate uuidv4`,e)}if(this._analyticsId){try{await this._storage.put(Yn,this._analyticsId)}catch(e){this.logger.error(`Unable to store clientId: ${this._analyticsId}`,e)}return this._analyticsId}}async destroyClientAnalyticsId(){try{return await this._storage.del(Yn)}catch(e){this.logger.error(`Unable to delete clientId`,e)}}async createAnalyticsEvent(e,n){try{await this.fetch(t,{body:{event_name:e,client_id:await this._getOrGenerateClientAnalyticsId(),payload:n},onRequest:this.beforeRequestWithoutRefresh.bind(this)})}catch{}}async refreshSession(e=!1){if(!await this.isStorageAccessible())throw new D({code:`storage_error`,error:`Unable to access storage`});let t=await this.session.getRefreshToken()??void 0,n=t??`key`,r=this._cache.get(n);if(r)return this.logger.debug(`[privy:refresh] found in-flight session refresh request, deduping`),await r;let i=this._refreshSession(t,e);this._cache.set(n,i);try{return await i}finally{this._cache.delete(n)}}async _refreshSession(e,t){let n=await this.session.getCustomerAccessToken();if(!await this.session.hasRefreshCredentials(n,e??null))throw this.logger.debug(`[privy:refresh] missing tokens, skipping request`),await this._initialize(),new E({code:Ot.MISSING_OR_INVALID_TOKEN,error:`No tokens found in storage`,status:401});try{this.logger.debug(`[privy:refresh] fetching: ${Ie.path}`);let n=await this.fetch(Ie,{body:{refresh_token:e},onRequest:this.beforeRequestWithoutRefresh.bind(this)}),r=n.session_update_action;return this.logger.debug(`[privy:refresh] response: ${r}`),r===`set`&&(await this.session.updateWithTokensResponse(n),this.logger.debug(`[privy:refresh] tokens stored`)),r===`clear`&&(await this.session.destroyLocalState(),this.logger.debug(`[privy:refresh] tokens cleared`),!t&&this.callbacks?.setUser?.(null)),r===`ignore`&&(n.token&&(await this.session.storeCustomerAccessToken(n.token),this.logger.debug(`[privy:refresh] token stored (CAT)`)),n.privy_access_token&&(await this.session.storePrivyAccessToken(n.privy_access_token),this.logger.debug(`[privy:refresh] token stored (PAT)`)),n.identity_token&&(this.logger.debug(`[privy:refresh] token stored (IDT)`),await this.session.storeIdentityToken(n.identity_token))),this.logger.debug(`[privy:refresh] returning response`),!t&&this.callbacks?.setUser?.(n.user),n}catch(e){throw this.logger.debug(`[privy:refresh] error: ${e.message??`unknown error`}`),e instanceof E&&e.code===Ot.MISSING_OR_INVALID_TOKEN&&(await this.session.destroyLocalState(),!t&&this.callbacks?.setUser?.(null)),e}}async getAccessToken(){let[e,t]=await Promise.all([this.session.getCustomerAccessToken(),this.session.getRefreshToken()]);if(e&&!this.session.tokenIsActive(e)&&await this.session.hasRefreshCredentials(e,t)){let t=await this.refreshSession(),n=await this.session.getCustomerAccessToken();return t.token||this.logger.debug(`[privy:getAccessToken] expected token received null`),t.token===e&&this.logger.debug(`[privy:getAccessToken] expected new token in response received existing`),n===e&&this.logger.debug(`[privy:getAccessToken] expected new token in storage received existing`),t.token??n}return e&&!this.session.tokenIsActive(e)?(this.logger.debug(`[privy:getAccessToken] unable to refresh inactive token`),this.callbacks?.setUser?.(null),await this.session.destroyLocalState(),null):e}async getAccessTokenInternal(){let e=await this.getAccessToken();return await this.session.getPrivyAccessToken()??e}async getIdentityToken(){return await this.session.getIdentityToken()}async isStorageAccessible(){try{let e=`privy:__storage__test-${this._crypto.randomUUID()}`,t=`blobby`;await this._storage.put(e,t);let n=await this._storage.get(e);return await this._storage.del(e),n===t}catch(e){return this.logger.error(e),!1}}},Zn=class{_privyInternal;_embedded;_isMultiUserModeEnabled;constructor(e,t,n){this._privyInternal=e,this._embedded=t,this._isMultiUserModeEnabled=n}async get(){let{user:e}=await this._privyInternal.refreshSession();return{user:e}}async acceptTerms(){return{user:await this._privyInternal.fetch(e,{})}}async switchActiveUser(e){if(!this._isMultiUserModeEnabled)throw new D({code:`invalid_input`,error:`User switching requires sessions.mode to be set to "multi-user"`});await this._privyInternal.session.switchActiveUserId(e.userId);try{this._embedded.reload();let{user:t}=await this._privyInternal.refreshSession(!0);if(t.id!==e.userId)throw new D({code:`invalid_input`,error:`Cannot switch active user because the refreshed user did not match the requested user ID`});return this._privyInternal.callbacks?.setUser?.(t),{user:t}}catch(e){throw await this._privyInternal.session.destroyLocalState(),this._privyInternal.callbacks?.setUser?.(null),e}}};const Qn=e=>e.type===`wallet`&&e.wallet_client_type===`privy`&&e.connector_type===`embedded`,$n=e=>e?e.linked_accounts.filter(Qn).filter(e=>e.chain_type===`ethereum`).sort((e,t)=>e.wallet_index-t.wallet_index):[],X=e=>$n(e).find(e=>e.wallet_index===0)??null,er=X,tr=e=>e?e.linked_accounts.filter(Qn).filter(e=>e.chain_type===`solana`).sort((e,t)=>e.wallet_index-t.wallet_index):[],nr=e=>tr(e).find(e=>e.wallet_index===0)??null,rr=(e,t)=>t===`off`||$n(e).length>0?!1:e.linked_accounts.filter(e=>e.type===`wallet`&&e.chain_type===`ethereum`).length>0?t===`all-users`:!0,ir=(e,t)=>t===`off`||tr(e).length>0?!1:e.linked_accounts.filter(e=>e.type===`wallet`&&e.chain_type===`solana`).length>0?t===`all-users`:!0,ar=(e,t)=>({...e,is_new_user:t.is_new_user,oauth_tokens:t.oauth_tokens}),Z=async(e,t,n)=>{let r=rr(t.user,n?.ethereum?.createOnLogin??`off`),i=ir(t.user,n?.solana?.createOnLogin??`off`);if(r&&i){let n=await e.create({recoveryMethod:`privy`,skipCallbacks:!0}),r=await e.createSolana({ethereumAccount:X(n.user)??void 0});return ar(r,t)}if(r){let n=await e.create({recoveryMethod:`privy`,solanaAccount:nr(t.user)??void 0});return ar(n,t)}if(i){let n=await e.createSolana({ethereumAccount:X(t.user)??void 0});return ar(n,t)}return t};var or=class{_privyInternal;_embedded;constructor(e,t){this._privyInternal=e,this._embedded=t}async syncWithToken(e,t,n){let r=await this._privyInternal.fetchForLogin(o,{body:{token:e,mode:n}});await this._privyInternal.session.updateWithTokensResponse(r);let i=await Z(this._embedded,r,t?.embedded);return this._privyInternal.callbacks?.setUser?.(i.user),i}async linkWithToken(e){await this._privyInternal.fetch(s,{body:{token:e}});let t=await this._privyInternal.refreshSession();return{user:t.user,identity_token:t.identity_token}}},sr=class{_privyInternal;_embedded;constructor(e,t){this._privyInternal=e,this._embedded=t}async sendCode(e,t){return this._privyInternal.fetch(Se,{body:{email:e,token:t}})}async loginWithCode(e,t,n,r){let i=await this._privyInternal.fetchForLogin(xe,{body:{email:e,code:t,mode:n}});await this._privyInternal.session.updateWithTokensResponse(i);let a=await Z(this._embedded,i,r?.embedded);return this._privyInternal.callbacks?.setUser?.(a.user),a}async linkWithCode(e,t){await this._privyInternal.fetch(Ce,{body:{email:e,code:t}});let n=await this._privyInternal.refreshSession();return{user:n.user,identity_token:n.identity_token}}async updateEmail({oldEmailAddress:e,newEmailAddress:t,code:n}){await this._privyInternal.fetch(Ae,{body:{oldAddress:e,newAddress:t,code:n}});let r=await this._privyInternal.refreshSession();return{user:r.user,identity_token:r.identity_token}}async unlink(e){await this._privyInternal.fetch(ke,{body:{address:e}});let t=await this._privyInternal.refreshSession();return{user:t.user,identity_token:t.identity_token}}},cr=class{_privyInternal;_embedded;constructor(e,t){this._privyInternal=e,this._embedded=t}async initializeAuth({relyingParty:e,redirectUrl:t,token:n}){return await this._privyInternal.fetch(l,{body:{relying_party:e,redirect_url:t,token:n}})}async getFarcasterStatus({channel_token:e}){return await this._privyInternal.fetch(ee,{headers:{"farcaster-channel-token":e}})}async authenticate({channel_token:e,message:t,signature:n,fid:r,mode:i},a){let o=await this._privyInternal.fetchForLogin(c,{body:{channel_token:e,message:t,signature:n,fid:r,mode:i}});await this._privyInternal.session.updateWithTokensResponse(o);let s=await Z(this._embedded,o,a?.embedded);return this._privyInternal.callbacks?.setUser?.(s.user),s}async link({channel_token:e,message:t,signature:n,fid:r}){await this._privyInternal.fetch(u,{body:{channel_token:e,message:t,signature:n,fid:r}});let i=await this._privyInternal.refreshSession();return{user:i.user,identity_token:i.identity_token}}async unlink({fid:e}){await this._privyInternal.fetch(te,{body:{fid:e}});let t=await this._privyInternal.refreshSession();return{user:t.user,identity_token:t.identity_token}}},lr=class{_privyInternal;_embedded;constructor(e,t){this._privyInternal=e,this._embedded=t}async initializeAuth(){return await this._privyInternal.fetch(f,{body:{}})}async authenticate({message:e,signature:t,fid:n},r){let i=await this._privyInternal.fetchForLogin(d,{body:{message:e,signature:t,fid:n}});await this._privyInternal.session.updateWithTokensResponse(i);let a=await Z(this._embedded,i,r?.embedded);return this._privyInternal.callbacks?.setUser?.(a.user),a}},ur=class{_privyInternal;_embedded;constructor(e,t){this._privyInternal=e,this._embedded=t}async create(e){let t=await this._privyInternal.session.getOrCreateGuestCredential(),n=await this._privyInternal.fetch(oe,{body:{guest_credential:t}});await this._privyInternal.session.updateWithTokensResponse(n);let r=await Z(this._embedded,n,e?.embedded);return this._privyInternal.callbacks?.setUser?.(r.user),r}};const Q=`privy:state_code`,$=`privy:code_verifier`;async function dr(e,t){let n=await t(`SHA-256`,new TextEncoder().encode(e));return new Uint8Array(n)}function fr(e){return crypto.getRandomValues(new Uint8Array(e))}function pr(){return rt.encode(fr(36))}function mr(){return pr()}async function hr({codeVerifier:e,method:t=`S256`,digest:n}){if(t==`S256`){let t=await dr(e,n);return rt.encode(t)}else return e}var gr=class{_privyInternal;_storage;_crypto;_embedded;constructor(e,t,n,r){this._privyInternal=e,this._embedded=t,this._storage=n,this._crypto=r}async generateURL(e,t){let n=pr(),r=mr(),i=await hr({codeVerifier:n,digest:this._crypto.digest});return await Promise.all([this._storage.put($,n),this._storage.put(Q,r)]),this._privyInternal.fetchForLogin(fe,{body:{redirect_to:t,provider:e,code_challenge:i,state_code:r}})}async loginWithCode(e,t,n,r,i,a){let[o,s]=await Promise.all([this._storage.get($),this._storage.get(Q)]);if(s!==t)throw this._privyInternal.createAnalyticsEvent(`possible_phishing_attempt`,{flow:`oauth`,provider:n,storedStateCode:s??``,returnedStateCode:t??``}),new D({code:`pkce_state_code_mismatch`,error:`Unexpected auth flow. This may be a phishing attempt.`});let c=await this._privyInternal.fetchForLogin(de,{body:{authorization_code:e,code_type:r,state_code:s,code_verifier:o,mode:i}});await this._privyInternal.session.updateWithTokensResponse(c);let l=await Z(this._embedded,c,a?.embedded);return await Promise.all([this._storage.del($),this._storage.del(Q)]),this._privyInternal.callbacks?.setUser?.(l.user),l}async linkWithCode(e,t,n,r){let[i,a]=await Promise.all([this._storage.get($),this._storage.get(Q)]);if(a!==t)throw this._privyInternal.createAnalyticsEvent(`possible_phishing_attempt`,{flow:`oauth`,provider:n,storedStateCode:a??``,returnedStateCode:t??``}),new D({code:`pkce_state_code_mismatch`,error:`Unexpected auth flow. This may be a phishing attempt.`});let o=await this._privyInternal.fetch(pe,{body:{authorization_code:e,code_type:r,state_code:a,code_verifier:i}});await this._privyInternal.session.processOAuthTokens(o.oauth_tokens);let s=await this._privyInternal.refreshSession();return await Promise.all([this._storage.del($),this._storage.del(Q)]),{user:s.user,identity_token:s.identity_token}}async unlink(e,t){await this._privyInternal.fetch(me,{body:{provider:e,subject:t}});let n=await this._privyInternal.refreshSession();return{user:n.user,identity_token:n.identity_token}}},_r=class{_privyInternal;_embedded;constructor(e,t){this._privyInternal=e,this._embedded=t}async generateRegistrationOptions(e){return await this._privyInternal.fetch(ve,{body:{relying_party:e}})}async generateAuthenticationOptions(e){return await this._privyInternal.fetch(ge,{body:{relying_party:e}})}async generateSignupOptions(e){return await this._privyInternal.fetch(be,{body:{relying_party:e}})}async loginWithPasskey(e,t,n,r){let i=await this._privyInternal.fetchForLogin(he,{body:{relying_party:n,challenge:t,authenticator_response:this._transformAuthenticationResponseToSnakeCase(e)}});await this._privyInternal.session.updateWithTokensResponse(i);let a=await Z(this._embedded,i,r?.embedded);return this._privyInternal.callbacks?.setUser?.(a.user),a}async signupWithPasskey(e,t,n){let r=await this._privyInternal.fetchForLogin(ye,{body:{relying_party:t,authenticator_response:this._transformRegistrationResponseToSnakeCase(e)}});await this._privyInternal.session.updateWithTokensResponse(r);let i=await Z(this._embedded,r,n?.embedded);return this._privyInternal.callbacks?.setUser?.(i.user),i}async linkWithPasskey(e,t){await this._privyInternal.fetch(_e,{body:{relying_party:t,authenticator_response:this._transformRegistrationResponseToSnakeCase(e)}});let n=await this._privyInternal.refreshSession();return{user:n.user,identity_token:n.identity_token}}_transformRegistrationResponseToSnakeCase(e){return{type:e.type,id:e.id,raw_id:e.rawId,response:{client_data_json:e.response.clientDataJSON,attestation_object:e.response.attestationObject,authenticator_data:e.response.authenticatorData||void 0,transports:e.response.transports||void 0,public_key:e.response.publicKey||void 0,public_key_algorithm:e.response.publicKeyAlgorithm||void 0},authenticator_attachment:e.authenticatorAttachment||void 0,client_extension_results:{app_id:e.clientExtensionResults.appid||void 0,cred_props:e.clientExtensionResults.credProps||void 0,hmac_create_secret:e.clientExtensionResults.hmacCreateSecret||void 0}}}_transformAuthenticationResponseToSnakeCase(e){return{type:e.type,id:e.id,raw_id:e.rawId,response:{signature:e.response.signature,client_data_json:e.response.clientDataJSON,authenticator_data:e.response.authenticatorData,user_handle:e.response.userHandle||void 0},authenticator_attachment:e.authenticatorAttachment||void 0,client_extension_results:{app_id:e.clientExtensionResults.appid||void 0,cred_props:e.clientExtensionResults.credProps||void 0,hmac_create_secret:e.clientExtensionResults.hmacCreateSecret||void 0}}}},vr=class{_privyInternal;_embedded;constructor(e,t){this._privyInternal=e,this._embedded=t}async sendCode(e,t){return this._privyInternal.fetch(Te,{body:{phoneNumber:e,token:t}})}async loginWithCode(e,t,n,r){let i=await this._privyInternal.fetchForLogin(we,{body:{phoneNumber:e,code:t,mode:n}});await this._privyInternal.session.updateWithTokensResponse(i);let a=await Z(this._embedded,i,r?.embedded);return this._privyInternal.callbacks?.setUser?.(a.user),a}async linkWithCode(e,t){await this._privyInternal.fetch(Ee,{body:{phoneNumber:e,code:t}});let n=await this._privyInternal.refreshSession();return{user:n.user,identity_token:n.identity_token}}async updatePhone({oldPhoneNumber:e,newPhoneNumber:t,code:n}){await this._privyInternal.fetch(Oe,{body:{old_phone_number:e,new_phone_number:t,code:n}});let r=await this._privyInternal.refreshSession();return{user:r.user,identity_token:r.identity_token}}async unlink(e){await this._privyInternal.fetch(De,{body:{phoneNumber:e}});let t=await this._privyInternal.refreshSession();return{user:t.user,identity_token:t.identity_token}}},yr=class{_privyInternal;_embedded;_wallet=void 0;_preparedMessage;constructor(e,t){this._privyInternal=e,this._embedded=t}async unlinkWallet(e){await this._privyInternal.fetch(Ve,{body:{address:e}});let t=await this._privyInternal.refreshSession();return{user:t.user,identity_token:t.identity_token}}async linkWithSiwe(e,t,n){let r=t||this._wallet,i=n||this._preparedMessage;if(!r)throw Error(`A wallet must be provided in the init step or as an argument to linkWithSiwe`);if(!i)throw Error(`A message must be generated and signed before being used to link a wallet to privy`);await this._privyInternal.fetch(ze,{body:{message:i,signature:e,chainId:r.chainId,walletClientType:r.walletClientType??null,connectorType:r.connectorType??null}});let a=await this._privyInternal.refreshSession();return{user:a.user,identity_token:a.identity_token}}async loginWithSiwe(e,t,n,r,i){let a=t||this._wallet,o=n||this._preparedMessage;if(!a)throw Error(`A wallet must be provided in the init step or as an argument to loginWithSiwe`);if(!o)throw Error(`A message must be generated and signed before being used to login to privy with a wallet`);let s=await this._privyInternal.fetchForLogin(Le,{body:{signature:e,message:o,chainId:a.chainId,walletClientType:a.walletClientType??null,connectorType:a.connectorType??null,mode:r}});await this._privyInternal.session.updateWithTokensResponse(s);let c=await Z(this._embedded,s,i?.embedded);return this._privyInternal.callbacks?.setUser?.(c.user),c}async init(e,t,n){this._wallet=e;let{nonce:r}=await this._privyInternal.fetch(Re,{body:{address:e.address}}),i=br({chainId:e.chainId.toString().replace(`eip155:`,``),address:e.address,issuedAt:new Date().toISOString(),statement:`By signing, you are proving you own this wallet and logging in. This does not initiate a transaction or cost any fees.`,domain:t,nonce:r,uri:n});return this._preparedMessage=i,{nonce:r,message:i}}};function br(e){return`${e.domain} wants you to sign in with your Ethereum account:
1
+ import{AcceptTermsOnUser as e,AnalyticsEvent as t,AppConfig as n,CoinbaseOnRampInit as r,CoinbaseOnRampStatus as i,CreateDepositAddressQuote as a,CustomJWTAuthenticate as o,CustomJWTLink as s,FarcasterAuthenticate as c,FarcasterInit as l,FarcasterLink as u,FarcasterStatus as ee,FarcasterUnlink as te,FarcasterV2Authenticate as d,FarcasterV2Init as f,GetCrossAppConnections as p,GetDepositAddressOrder as ne,GetDepositConfig as re,GetNextDepositAddressOrder as ie,GetSmartWalletConfig as ae,GuestAuthenticate as oe,Logout as se,MfaPasskeyInit as ce,MfaPasswordlessSmsInit as le,MoonpayOnRampSign as ue,OAuthAuthenticate as de,OAuthInit as fe,OAuthLink as pe,OAuthUnlink as me,PasskeyAuthenticate as he,PasskeyAuthenticateInit as ge,PasskeyLink as _e,PasskeyLinkInit as ve,PasskeyRegister as ye,PasskeyRegisterInit as be,PasswordlessAuthenticate as xe,PasswordlessInit as Se,PasswordlessLink as Ce,PasswordlessSmsAuthenticate as we,PasswordlessSmsInit as Te,PasswordlessSmsLink as Ee,PasswordlessSmsUnlink as De,PasswordlessSmsUpdate as Oe,PasswordlessUnlink as ke,PasswordlessUpdate as Ae,RecoveryConfigurationICloud as je,RecoveryKeyMaterial as Me,RecoveryOAuthAuthenticate as Ne,RecoveryOAuthInit as Pe,RecoveryOAuthInitICloud as Fe,RefreshSession as Ie,SiweAuthenticate as Le,SiweInit as Re,SiweLink as ze,SiweLinkSmartWallet as Be,SiweUnlink as Ve,SiwsAuthenticate as He,SiwsInit as Ue,SiwsLink as We,SiwsUnlink as Ge,TelegramAuthenticate as Ke,TelegramLink as qe,TelegramUnlink as Je,WalletCreate as Ye,WalletGet as Xe,WalletRawSign as Ze,WalletRpc as Qe,WalletUpdate as $e,WalletsRevoke as et,getPathWithParams as tt}from"@privy-io/routes";import*as nt from"jose";import{base64url as rt}from"jose";import{DEFAULT_SUPPORTED_CHAINS as it,arbitrum as m,arbitrumSepolia as at,avalanche as h,avalancheFuji as ot,base as g,baseSepolia as st,celo as ct,dedupeSupportedChains as lt,mainnet as _,monadMainnet as v,optimism as y,optimismSepolia as ut,polygon as b,polygonAmoy as dt,sepolia as ft}from"@privy-io/chains";import pt from"eventemitter3";import{createPublicClient as mt,formatEther as ht,formatUnits as gt,http as _t,toHex as vt}from"viem";import{STRING_TO_NUMBER_TXN_TYPE as yt,TEMPO_TXN_TYPE_NUMBER as bt,isTempoTransactionRequest as xt,normalizeViemPreparedTempoTransaction as St,toViemTempoTransactionSerializable as Ct,toViemTransactionSerializable as wt}from"@privy-io/ethereum";import Tt from"canonicalize";import{encoding as x}from"@privy-io/encoding";import{tempo as S,tempoModerato as Et}from"viem/chains";import Dt from"fetch-retry";import{PrivyErrorCode as Ot}from"@privy-io/api-base";import kt from"js-cookie";import At from"libphonenumber-js/examples.mobile.json";import{AsYouType as jt,getCountries as Mt,getCountryCallingCode as Nt,getExampleNumber as Pt,isPossiblePhoneNumber as Ft,parsePhoneNumberFromString as It}from"libphonenumber-js/min";export*from"@privy-io/chains";var Lt=Object.defineProperty,C=(e,t)=>{let n={};for(var r in e)Lt(n,r,{get:e[r],enumerable:!0});return t||Lt(n,Symbol.toStringTag,{value:`Module`}),n};function Rt(e){return{digest:e?.digest??((e,t)=>globalThis.crypto.subtle.digest(e,t)),randomUUID:e?.randomUUID??(()=>globalThis.crypto.randomUUID())}}var zt=class{_privyInternal;_smartWalletConfig;constructor(e){this._privyInternal=e}getConfig(){return this._privyInternal.config}async getSmartWalletConfig(){return this._smartWalletConfig||=await this._privyInternal.fetch(ae,{params:{app_id:this.appId}}),this._smartWalletConfig}get appId(){return this._privyInternal.appId}},w=class e{static parse(t){try{return new e(t)}catch{return null}}value;_decoded;constructor(e){this.value=e,this._decoded=nt.decodeJwt(e)}get subject(){return this._decoded.sub}get expiration(){return this._decoded.exp}get issuer(){return this._decoded.iss}get audience(){return this._decoded.aud}isExpired(e=0){return Date.now()>=(this.expiration-e)*1e3}},Bt=class e{_storage;_privyInternal;constructor(e,t){this._privyInternal=e,this._storage=t}static providerAccessTokenStorageKey=e=>`privy:cross-app:${e}`;async updateOnCrossAppAuthentication(t,n){let r=n.access_token,i=e.providerAccessTokenStorageKey(t);await this._storage.put(i,r)}async getProviderAccessToken(t){let n=e.providerAccessTokenStorageKey(t),r=await this._storage.get(n);if(typeof r!=`string`)return null;try{if(new w(r).isExpired())throw Error(`JWT is expired`);return r}catch{return await this._storage.del(n),null}}async getCrossAppConnections(){return await this._privyInternal.fetch(p,{params:{app_id:this._privyInternal.appId}})}},Vt=class{_privyInternal;constructor(e){this._privyInternal=e}async revoke(){await this._privyInternal.fetch(et,{})}},T=class extends Error{name=`PrivyApiError`;error;code;status;constructor({error:e,code:t,status:n}){super(e),this.error=e,this.code=t,this.status=n}},E=class extends Error{error;code;constructor({error:e,code:t}){super(e),this.code=t,this.error=e}},Ht=class extends Error{error;code;response;constructor({error:e,code:t,response:n}){super(e),this.code=t,this.error=e,this.response=n}};function Ut(e){return e instanceof T||e instanceof E?e.code:`unknown_error`}const Wt=e=>t=>e[Ut(t)]??e.default;function Gt(e){return e&&typeof e==`object`&&`code`in e&&e.code===`mfa_canceled`}const D=e=>!!e.id&&e.recovery_method===`privy-v2`,Kt=[`error`,`invalid_request_arguments`,`wallet_not_on_device`,`invalid_recovery_pin`,`insufficient_funds`,`mfa_timeout`,`missing_or_invalid_mfa`,`mfa_verification_max_attempts_reached`];let qt=function(e){return e.MISSING_OR_INVALID_PRIVY_APP_ID=`missing_or_invalid_privy_app_id`,e.MISSING_OR_INVALID_PRIVY_ACCOUNT_ID=`missing_or_invalid_privy_account_id`,e.INVALID_DATA=`invalid_data`,e.LINKED_TO_ANOTHER_USER=`linked_to_another_user`,e.ALLOWLIST_REJECTED=`allowlist_rejected`,e.OAUTH_USER_DENIED=`oauth_user_denied`,e.UNKNOWN_AUTH_ERROR=`unknown_auth_error`,e.USER_EXITED_AUTH_FLOW=`exited_auth_flow`,e.MUST_BE_AUTHENTICATED=`must_be_authenticated`,e.UNKNOWN_CONNECT_WALLET_ERROR=`unknown_connect_wallet_error`,e.GENERIC_CONNECT_WALLET_ERROR=`generic_connect_wallet_error`,e.CLIENT_REQUEST_TIMEOUT=`client_request_timeout`,e.INVALID_CREDENTIALS=`invalid_credentials`,e}({});var Jt=class extends Error{cause;privyErrorCode;constructor(e,t,n){super(e),t instanceof Error&&(this.cause=t),this.privyErrorCode=n}toString(){return`${this.type}${this.privyErrorCode?`-${this.privyErrorCode}`:``}: ${this.message}${this.cause?` [cause: ${this.cause}]`:``}`}},Yt=class extends Jt{type=`provider_error`;code;data;constructor(e,t,n){super(e),this.code=t,this.data=n}},Xt=class extends Error{type;constructor(e,t){super(t),this.type=e}},Zt=class extends Jt{type=`connector_error`;constructor(e,t,n){super(e,t,n)}},Qt=class extends Error{code;data;constructor(e,t,n){super(e),this.code=t,this.data=n}};const O={UNKNOWN_ERROR:{eipCode:0,message:`Unknown error`,detail:`Unknown error`,retryable:!0},E4001_DEFAULT_USER_REJECTED_REQUEST:{eipCode:4001,message:`User Rejected Request`,detail:`The user rejected the request.`,default:!0,retryable:!0},E4100_DEFAULT_UNAUTHORIZED:{eipCode:4100,message:`Unauthorized`,detail:`The requested method and/or account has not been authorized by the user.`,default:!0,retryable:!1},E4200_DEFAULT_UNSUPPORTED_METHOD:{eipCode:4200,message:`Unsupported Method`,detail:`The Provider does not support the requested method.`,default:!0,retryable:!1},E4900_DEFAULT_DISCONNECTED:{eipCode:4900,message:`Disconnected`,detail:`The Provider is disconnected from all chains.`,default:!0,retryable:!0},E4901_DEFAULT_CHAIN_DISCONNECTED:{eipCode:4901,message:`Chain Disconnected`,detail:`The Provider is not connected to the requested chain.`,default:!0,retryable:!0},E32700_DEFAULT_PARSE_ERROR:{eipCode:-32700,message:`Parse error`,detail:`Invalid JSON`,default:!0,retryable:!1},E32600_DEFAULT_INVALID_REQUEST:{eipCode:-32600,message:`Invalid request`,detail:`JSON is not a valid request object`,default:!0,retryable:!1},E32601_DEFAULT_METHOD_NOT_FOUND:{eipCode:-32601,message:`Method not found`,detail:`Method does not exist`,default:!0,retryable:!1},E32602_DEFAULT_INVALID_PARAMS:{eipCode:-32602,message:`Invalid params`,detail:`Invalid method parameters`,default:!0,retryable:!1},E32603_DEFAULT_INTERNAL_ERROR:{eipCode:-32603,message:`Internal error`,detail:`Internal JSON-RPC error`,default:!0,retryable:!0},E32000_DEFAULT_INVALID_INPUT:{eipCode:-32e3,message:`Invalid input`,detail:`Missing or invalid parameters`,default:!0,retryable:!1},E32001_DEFAULT_RESOURCE_NOT_FOUND:{eipCode:-32001,message:`Resource not found`,detail:`Requested resource not found`,default:!0,retryable:!1},E32002_DEFAULT_RESOURCE_UNAVAILABLE:{eipCode:-32002,message:`Resource unavailable`,detail:`Requested resource not available`,default:!0,retryable:!0},E32003_DEFAULT_TRANSACTION_REJECTED:{eipCode:-32003,message:`Transaction rejected`,detail:`Transaction creation failed`,default:!0,retryable:!0},E32004_DEFAULT_METHOD_NOT_SUPPORTED:{eipCode:-32004,message:`Method not supported`,detail:`Method is not implemented`,default:!0,retryable:!1},E32005_DEFAULT_LIMIT_EXCEEDED:{eipCode:-32005,message:`Limit exceeded`,detail:`Request exceeds defined limit`,default:!0,retryable:!1},E32006_DEFAULT_JSON_RPC_VERSION_NOT_SUPPORTED:{eipCode:-32006,message:`JSON-RPC version not supported`,detail:`Version of JSON-RPC protocol is not supported`,default:!0,retryable:!1},E32002_CONNECTION_ALREADY_PENDING:{eipCode:-32002,message:`Connection request already pending`,detail:`Don’t see your wallet? Check your other browser windows.`,retryable:!1},E32002_REQUEST_ALREADY_PENDING:{eipCode:-32002,message:`Resource request already pending`,detail:`Don’t see your wallet? Check your other browser windows.`,retryable:!1},E32002_WALLET_LOCKED:{eipCode:-32002,message:`Wallet might be locked`,detail:`Unlock your wallet and try again.`,retryable:!0},E4001_USER_REJECTED_REQUEST:{eipCode:4001,message:`Signature rejected`,detail:`Please try signing again.`,retryable:!0}};function k(e){let t=e.type;return typeof t==`string`&&Kt.includes(t)}function A(e){return k(e)&&e.type===`wallet_not_on_device`}function $t(e){return k(e)&&e.type===`mfa_timeout`}function en(e){return k(e)&&e.type===`missing_or_invalid_mfa`}function tn(e){return k(e)&&e.type===`mfa_verification_max_attempts_reached`}function nn(e){return k(e)&&e.message.includes(`code 429`)}var rn=class extends Yt{details;constructor(e){let t=e;super(t.message,t.code,t.data);let n=Object.values(O).find(e=>e.eipCode===t.code);this.details=n||O.UNKNOWN_ERROR,t.code===-32002&&(t.message?.includes(`already pending for origin`)?t.message?.includes(`wallet_requestPermissions`)?this.details=O.E32002_CONNECTION_ALREADY_PENDING:this.details=O.E32002_REQUEST_ALREADY_PENDING:t.message?.includes(`Already processing`)&&t.message.includes(`eth_requestAccounts`)&&(this.details=O.E32002_WALLET_LOCKED))}};const j=e=>/^0x[0-9a-fA-F]*$/.test(e),an=e=>Buffer.from(e,`utf8`),M=e=>`0x${e.toString(`hex`)}`;async function N(e,t){let n;if(t instanceof Uint8Array)n=x.base64.fromBytes(t);else{let e=Tt(t);if(e===void 0)throw new E({error:`Failed to prepare the payload for signing`,code:`invalid_input`});n=x.base64.fromBytes(x.utf8.toBytes(e))}let{signature:r}=await e({message:n});return{signature:r}}const P=`privy-request-expiry`,on=1800*1e3;async function F(e,t,{wallet_id:n,headers:r,...i}){let a=e.getCompiledPath(Qe,{params:{wallet_id:n}}),o=String(Date.now()+on),{signature:s}=await N(t,{version:1,url:a,method:Qe.method,headers:{"privy-app-id":e.app.appId,[P]:o},body:{...i}});if(Date.now()>Number(o))throw new E({error:`Wallet request expired before it could be sent. Please try again.`,code:`embedded_wallet_request_expired`});return await e.fetchPrivyRoute(Qe,{body:i,params:{wallet_id:n},headers:{"privy-authorization-signature":s,[P]:o,...r??{}}})}function sn(e){return xt(e)?ln(e):cn(e)}function cn(e){return{from:e.from,to:e.to??void 0,nonce:I(e.nonce),chain_id:I(e.chainId),data:pn(e.data),value:I(e.value),type:hn(e.type),gas_limit:I(e.gasLimit??e.gas),gas_price:I(e.gasPrice),max_fee_per_gas:I(e.maxFeePerGas),max_priority_fee_per_gas:I(e.maxPriorityFeePerGas)}}function ln(e){return{type:bt,from:e.from,chain_id:I(e.chainId),nonce:I(e.nonce),nonce_key:I(e.nonceKey),gas_limit:I(e.gasLimit),max_fee_per_gas:I(e.maxFeePerGas),max_priority_fee_per_gas:I(e.maxPriorityFeePerGas),fee_token:e.feeToken,valid_after:I(e.validAfter),valid_before:I(e.validBefore),fee_payer_signature:dn(e.feePayerSignature),access_list:un(e.accessList),calls:e.calls.map(e=>({to:e.to,data:e.data,value:I(e.value)}))}}function un(e){if(e)return Array.isArray(e)?e.map(e=>`address`in e?{address:e.address,storage_keys:[...e.storageKeys]}:{address:e[0],storage_keys:[...e[1]]}):Object.entries(e).map(([e,t])=>({address:e,storage_keys:[...t]}))}function dn(e){if(!e)return;let t=fn(e);if(t!==0&&t!==1)throw Error(`Tempo fee payer signatures require a valid yParity value`);return{r:e.r,s:e.s,y_parity:t}}function fn(e){if(e.yParity!==void 0)return e.yParity;if(e.v!==void 0)return Number(e.v)-27}function pn(e){if(e!==void 0)return typeof e==`string`?j(e)?e:M(an(e)):M(Buffer.from(Uint8Array.from(e)))}const mn=[0,1,2,4];function hn(e){if(e==null)return;let t=Number(e);if(!gn(t))throw Error(`Invalid transaction type: expected ${mn.join(`, `)} as a number or hex string, got "${e}".`);return t}function gn(e){return mn.includes(e)}function I(e){if(typeof e==`number`||typeof e==`bigint`)return`0x${BigInt(e).toString(16)}`;if(typeof e==`string`){if(j(e))return e;throw Error(`Invalid quantity string: expected a hex-prefixed value (0x…), got "${e}". Use a number, bigint, or hex string instead.`)}}function _n(e){return typeof e==`string`&&(e=JSON.parse(e)),{types:e.types,primary_type:String(e.primaryType),domain:e.domain,message:e.message}}async function vn({context:e,account:t,rpcRequest:n}){switch(n.chainType){case`ethereum`:return yn({context:e,account:t,rpcRequest:n.request});case`solana`:return bn({context:e,account:t,rpcRequest:n.request})}}async function yn({context:e,account:t,rpcRequest:n}){switch(n.method){case`personal_sign`:{let[r]=n.params,i=await F(e,e.signRequest,{chain_type:`ethereum`,method:`personal_sign`,wallet_id:t.id,params:r.startsWith(`0x`)?{message:r.slice(2),encoding:`hex`}:{message:r,encoding:`utf-8`}});if(i.method!==`personal_sign`)throw Error(`Unable to sign message`);return{data:i.data.signature}}case`eth_signTransaction`:{let[r]=n.params,i=await F(e,e.signRequest,{chain_type:`ethereum`,method:`eth_signTransaction`,wallet_id:t.id,params:{transaction:sn(r)}});if(i.method!==`eth_signTransaction`)throw Error(`Unable to sign transaction`);return{data:i.data.signed_transaction}}case`eth_signTypedData_v4`:{let[,r]=n.params,i=await F(e,e.signRequest,{chain_type:`ethereum`,method:n.method,wallet_id:t.id,params:{typed_data:_n(r)}});if(i.method!==`eth_signTypedData_v4`)throw Error(`Unable to sign typed data`);return{data:i.data.signature}}case`eth_sign`:{let[,r]=n.params,i=await F(e,e.signRequest,{chain_type:`ethereum`,method:`secp256k1_sign`,wallet_id:t.id,params:{hash:j(r)?r:M(an(r))}});if(i.method!==`secp256k1_sign`)throw Error(`Unable to sign message`);return{data:i.data.signature}}case`secp256k1_sign`:{let[r]=n.params,i=await F(e,e.signRequest,{chain_type:`ethereum`,method:`secp256k1_sign`,wallet_id:t.id,params:{hash:j(r)?r:M(an(r))}});if(i.method!==`secp256k1_sign`)throw Error(`Unable to sign message`);return{data:i.data.signature}}case`csw_signUserOperation`:case`eth_sendTransaction`:case`eth_populateTransactionRequest`:throw Error(`This wallet does not support the method: ${n.method}`)}}async function bn({context:e,account:t,rpcRequest:n}){switch(n.method){case`signMessage`:{let{message:r}=n.params,i=await F(e,e.signRequest,{chain_type:`solana`,method:`signMessage`,wallet_id:t.id,params:{message:r,encoding:`base64`}});if(i.method!==`signMessage`)throw Error(`Unable to sign message`);return{data:i.data.signature}}}}const xn=(e,t,n,r)=>{let i=Number(e),a=t.find(e=>e.id===i);if(!a)throw new Zt(`Unsupported chainId ${e}`,4901);let o=Cn(a,n,r.appId);if(i===S.id||i===Et.id){let e=i===S.id?S:Et;return mt({transport:_t(o),chain:e})}return mt({transport:_t(o),chain:a})};function Sn(e){return e===S.id||e===Et.id}const Cn=(e,t,n)=>{let r=e.id,i=Number(e.id),a;if(e.rpcUrls.privyWalletOverride&&e.rpcUrls.privyWalletOverride.http[0])a=e.rpcUrls.privyWalletOverride.http[0];else if(t.rpcUrls&&t.rpcUrls[i])a=t.rpcUrls[i];else if(e.rpcUrls.privy?.http[0]){let t=new URL(e.rpcUrls.privy.http[0]);t.searchParams.append(`privyAppId`,n),a=t.toString()}else a=e.rpcUrls.public?.http[0]?e.rpcUrls.public.http[0]:e.rpcUrls.default?.http[0];if(!a)throw new Zt(`No RPC url found for ${r}`);return a};function wn({currentRecoveryMethod:e,upgradeToRecoveryMethod:t}){switch(e){case`privy`:case`user-passcode`:case`recovery-encryption-key`:return!0;case`icloud`:case`google-drive`:if(e===t)throw Error(`Cannot upgrade to the existing cloud platform`);return!0;default:throw Error(`Unknown recovery method`)}}const Tn=new Set([`eth_sign`,`personal_sign`,`eth_signTypedData_v4`,`csw_signUserOperation`,`secp256k1_sign`]);var En=class extends pt{_walletProxy;_privyInternal;_account;_entropyId;_entropyIdVerifier;_chainId;_chains;_onNeedsRecovery;_client;_appApi;constructor({walletProxy:e,privyInternal:t,account:n,entropyId:r,entropyIdVerifier:i,chains:a,onNeedsRecovery:o,chainId:s=a[0].id,appApi:c}){super(),this._walletProxy=e,this._privyInternal=t,this._account=n,this._entropyId=r,this._entropyIdVerifier=i,this._chainId=s,this._chains=a,this._onNeedsRecovery=o,this._client=xn(s,a,{rpcUrls:[]},{appId:c.appId}),this._appApi=c}async request(e){if(Tn.has(e.method))return this.handleIFrameRpc(e);switch(e.method){case`eth_accounts`:case`eth_requestAccounts`:return this._account.address?[this._account.address]:[];case`eth_chainId`:return`0x${this._chainId.toString(16)}`;case`wallet_switchEthereumChain`:return this.handleSwitchEthereumChain(e);case`eth_estimateGas`:return this.handleEstimateGas(e);case`eth_signTransaction`:{let t=e.params?.[0];return this.handleSignTransaction(t)}case`eth_sendTransaction`:{let t=e.params?.[0];return this.handleSendTransaction(t)}case`eth_populateTransactionRequest`:{let t=e.params?.[0];return this.handlePopulateTransaction(t)}default:return this.handleJsonRpc(e)}}ensureChainId(e){let t={chainId:this._chainId,...e};return this.internalSwitchEthereumChain(t.chainId),t}internalSwitchEthereumChain(e){!e||Number(e)===this._chainId||(this._chainId=Number(e),this._client=xn(this._chainId,this._chains,{rpcUrls:[]},{appId:this._privyInternal.appId}),this.emit(`chainChanged`,e))}async handlePopulateTransaction(e){let t=this.ensureChainId(e);if(xt(t)){let e=Ct(t),n=St(await this.requireTempoClient().prepareTransactionRequest({account:t.from??this._account.address,...e}),t.gasLimit);return{...t,...n,type:bt}}let n=wt(t),{gas:r,...i}=await this._client.prepareTransactionRequest({account:t.from??this._account.address,...n});return{...i,gasLimit:r,type:yt[i.type],authorizationList:t.authorizationList}}async handleSignTransaction(e){let t={...e};for(let e of Object.keys(t)){let n=t[e];typeof n==`bigint`&&(t[e]=vt(n))}return xt(t)&&(t.calls=t.calls.map(e=>({...e,value:typeof e.value==`bigint`?vt(e.value):e.value}))),await this.handleIFrameRpc({method:`eth_signTransaction`,params:[t]})}async handleSendTransaction(e){let t=await this.handlePopulateTransaction(e),n=await this.handleSignTransaction(t);return await this.handleJsonRpc({method:`eth_sendRawTransaction`,params:[n]})}async handleEstimateGas(e){if(!e.params||!Array.isArray(e.params))throw Error(`Invalid params for eth_estimateGas`);let t=e.params?.[0],n=this.ensureChainId(t);if(xt(n)){let e=Ct(n);return await this.requireTempoClient().estimateGas({account:n.from??this._account.address,...e})}let r=wt(n);return await this._client.estimateGas({account:n.from??this._account.address,...r})}handleSwitchEthereumChain(e){if(!e.params||!Array.isArray(e.params))throw new Qt(`Invalid params for ${e.method}`,4200);let t;if(typeof e.params[0]==`string`)t=e.params[0];else if(`chainId`in e.params[0]&&typeof e.params[0].chainId==`string`)t=e.params[0].chainId;else throw new Qt(`Invalid params for ${e.method}`,4200);this.internalSwitchEthereumChain(t)}async handleIFrameRpc(e){try{let t=await this._privyInternal.getAccessTokenInternal();if(!t)throw Error(`Missing privy token. User must be logged in`);this._privyInternal.createAnalyticsEvent(`embedded_wallet_sdk_rpc_started`,{method:e.method,address:this._account.address});let n=this._account;if(D(n)){let{data:r}=await vn({context:{app:this._appApi,fetchPrivyRoute:(...e)=>this._privyInternal.fetch(...e),getCompiledPath:(...e)=>this._privyInternal.getPath(...e),signRequest:({message:e})=>this._walletProxy.signWithUserSigner({accessToken:t,message:e})},account:n,rpcRequest:{chainType:`ethereum`,request:e}});return r}try{await this._walletProxy.connect({entropyId:this._entropyId,entropyIdVerifier:this._entropyIdVerifier,accessToken:t})}catch(e){let n=A(e);if(n&&this._account.recovery_method===`privy`)await this._walletProxy.recover({entropyId:this._entropyId,entropyIdVerifier:this._entropyIdVerifier,accessToken:t});else if(n&&this._onNeedsRecovery){let e;await new Promise(async(t,n)=>{e=setTimeout(()=>n(new E({code:`embedded_wallet_recovery_error`,error:`User-owned recovery timed out`})),12e4),await this._onNeedsRecovery?.({recoveryMethod:this._account.recovery_method,onRecovered:()=>t(!0)})}).finally(()=>clearTimeout(e))}else throw e}return(await this._walletProxy.rpcWallet({accessToken:t,request:e,entropyId:this._entropyId,entropyIdVerifier:this._entropyIdVerifier,hdWalletIndex:this._account.wallet_index,chainType:`ethereum`})).response.data}catch(t){console.error(t);let n=t instanceof Error?t.message:`Unable to make wallet request`;throw this._privyInternal.createAnalyticsEvent(`embedded_wallet_sdk_rpc_failed`,{method:e.method,address:this._account.address,error:n}),new E({code:`embedded_wallet_request_error`,error:n})}}async handleJsonRpc(e){return this._client.request(e)}requireTempoClient(){if(!Sn(this._chainId))throw new Qt(`Cannot send a Tempo (type 118) transaction on chain ${this._chainId}`,4901);return this._client}toJSON(){return`PrivyEIP1193Provider { address: '${this._account.address}', chainId: ${this._chainId}, request: [Function] }`}};function Dn(e){return`version`in e}function On(e,t){let n=(Dn(e)?e.message:e.compileMessage()).staticAccountKeys.find(e=>e.toBase58()===t);if(!n)throw Error(`Transaction does not contain public key ${t}`);return n}var kn=class{_proxy;_privyInternal;_app;_entropyId;_entropyIdVerifier;_account;_onNeedsRecovery;constructor({proxy:e,privyInternal:t,account:n,entropyId:r,entropyIdVerifier:i,onNeedsRecovery:a,app:o}){this._proxy=e,this._privyInternal=t,this._account=n,this._entropyId=r,this._entropyIdVerifier=i,this._onNeedsRecovery=a,this._app=o}async request(e){if(!await this._privyInternal.getAccessTokenInternal())throw new E({error:`Missing access token`,code:`attempted_rpc_call_before_logged_in`});switch(e.method){case`signAndSendTransaction`:return await this.handleSignAndSendTransaction(e);case`signTransaction`:return await this.handleSignTransaction(e);default:return await this.handleIFrameRpc(e)}}get _publicKey(){return this._account.address}async connectAndRecover(e){if(this._account.recovery_method!==`privy-v2`)try{await this._proxy.connect({entropyId:this._entropyId,entropyIdVerifier:this._entropyIdVerifier,accessToken:e})}catch(t){let n=A(t);if(n&&this._account.recovery_method===`privy`)await this._proxy.recover({entropyId:this._entropyId,entropyIdVerifier:this._entropyIdVerifier,accessToken:e});else if(n&&this._onNeedsRecovery){let e;await new Promise(async(t,n)=>{e=setTimeout(()=>n(new E({code:`embedded_wallet_recovery_error`,error:`User-owned recovery timed out`})),12e4),await this._onNeedsRecovery?.({recoveryMethod:this._account.recovery_method,onRecovered:()=>t(!0)})}).finally(()=>clearTimeout(e))}else throw t}}async signMessageRpc(e,t){let n=this._account;if(D(n)){let{data:r}=await vn({context:{app:this._app,fetchPrivyRoute:(...e)=>this._privyInternal.fetch(...e),getCompiledPath:(...e)=>this._privyInternal.getPath(...e),signRequest:({message:e})=>this._proxy.signWithUserSigner({accessToken:t,message:e})},account:n,rpcRequest:{chainType:`solana`,request:e}});return{signature:r}}else return(await this._proxy.rpcWallet({accessToken:t,request:e,chainType:`solana`,hdWalletIndex:this._account.wallet_index,entropyId:this._entropyId,entropyIdVerifier:this._entropyIdVerifier})).response.data}async handleIFrameRpc(e){try{let t=await this._privyInternal.getAccessTokenInternal();if(!t)throw Error(`Missing privy token. User must be logged in`);return this._privyInternal.createAnalyticsEvent(`embedded_wallet_sdk_rpc_started`,{method:e.method,address:this._account.address}),await this.connectAndRecover(t),await this.signMessageRpc(e,t)}catch(t){console.error(t);let n=t instanceof Error?t.message:`Unable to make wallet request`;throw this._privyInternal.createAnalyticsEvent(`embedded_wallet_sdk_rpc_failed`,{method:e.method,address:this._account.address,error:n}),new E({code:`embedded_wallet_request_error`,error:n})}}async handleSignAndSendTransaction(e){try{let t=await this._privyInternal.getAccessTokenInternal();if(!t)throw Error(`Missing privy token. User must be logged in`);this._privyInternal.createAnalyticsEvent(`embedded_wallet_sdk_rpc_started`,{method:e.method,address:this._account.address}),await this.connectAndRecover(t);let{transaction:n,connection:r,options:i}=e.params,a=On(n,this._account.address),o=Dn(n)?Buffer.from(n.message.serialize()):n.serializeMessage(),{signature:s}=await this.signMessageRpc({method:`signMessage`,params:{message:o.toString(`base64`)}},t);return n.addSignature(a,Buffer.from(s,`base64`)),{signature:await r.sendRawTransaction(n.serialize(),i)}}catch(t){console.error(t);let n=t instanceof Error?t.message:`Unable to make wallet request`;throw this._privyInternal.createAnalyticsEvent(`embedded_wallet_sdk_rpc_failed`,{method:e.method,address:this._account.address,error:n}),new E({code:`embedded_wallet_request_error`,error:n})}}async handleSignTransaction(e){try{let t=await this._privyInternal.getAccessTokenInternal();if(!t)throw Error(`Missing privy token. User must be logged in`);this._privyInternal.createAnalyticsEvent(`embedded_wallet_sdk_rpc_started`,{method:e.method,address:this._account.address}),await this.connectAndRecover(t);let{transaction:n}=e.params,r=On(n,this._account.address),i=Dn(n)?Buffer.from(n.message.serialize()):n.serializeMessage(),{signature:a}=await this.signMessageRpc({method:`signMessage`,params:{message:i.toString(`base64`)}},t);return n.addSignature(r,Buffer.from(a,`base64`)),{signedTransaction:n}}catch(t){console.error(t);let n=t instanceof Error?t.message:`Unable to make wallet request`;throw this._privyInternal.createAnalyticsEvent(`embedded_wallet_sdk_rpc_failed`,{method:e.method,address:this._account.wallet_index,error:n}),new E({code:`embedded_wallet_request_error`,error:n})}}toJSON(){return`PrivyEmbeddedSolanaProvider { address: '${this._account.address}', request: [Function] }`}},An=class{_proxy;_privyInternal;_account;_entropyId;_entropyIdVerifier;constructor({proxy:e,privyInternal:t,account:n,entropyId:r,entropyIdVerifier:i}){this._proxy=e,this._privyInternal=t,this._account=n,this._entropyId=r,this._entropyIdVerifier=i}async sign({message:e}){return await this.request({method:`sign`,params:{message:new TextDecoder(`utf8`).decode(e)}})}async signTransaction({psbt:e}){return await this.request({method:`signTransaction`,params:{psbt:e}})}async request(e){if(D(this._account))throw new E({code:`unsupported_wallet_type`,error:`Bitcoin wallet providers are only supported for on-device execution and this app uses TEE execution. Use the useSignRawHash hook from @privy-io/expo/extended-chains to sign over a hash with this wallet. Learn more at https://docs.privy.io/recipes/tee-wallet-migration-guide`});if(!await this._privyInternal.getAccessTokenInternal())throw new E({error:`Missing access token`,code:`attempted_rpc_call_before_logged_in`});return this.handleIFrameRpc(e)}async handleIFrameRpc(e){try{let t=await this._privyInternal.getAccessTokenInternal();if(!t)throw Error(`Missing access token. User must be authenticated.`);return this._privyInternal.createAnalyticsEvent(`embedded_wallet_sdk_rpc_started`,{method:e.method,address:this._account.address}),(await this._proxy.rpcWallet({accessToken:t,request:e,entropyId:this._entropyId,entropyIdVerifier:this._entropyIdVerifier,hdWalletIndex:this._account.wallet_index,chainType:this._account.chain_type})).response.data}catch(t){console.error(t);let n=t instanceof Error?t.message:`Unable to make wallet request`;throw this._privyInternal.createAnalyticsEvent(`embedded_wallet_sdk_rpc_failed`,{method:e.method,address:this._account.address,error:n}),new E({code:`embedded_wallet_request_error`,error:n})}}toJSON(){return`PrivyEmbeddedBitcoinProvider { address: '${this._account.address}', request: [Function] }`}},jn=class{callbacks={};enqueue(e,t){this.callbacks[e]=t}flush(e){let t=Object.values(this.callbacks);this.callbacks={};for(let{reject:n}of t)n(e)}dequeue(e,t){let n=this.callbacks[t];if(!n)return console.warn(`[Privy] No callback found for "${e}" (id: ${t})`),null;switch(delete this.callbacks[t],e){case`privy:iframe:ready`:return n;case`privy:wallets:create`:return n;case`privy:user-signer:sign`:return n;case`privy:wallets:add`:return n;case`privy:wallets:set-recovery`:return n;case`privy:wallets:connect`:return n;case`privy:wallets:recover`:return n;case`privy:wallets:rpc`:return n;case`privy:wallet:create`:return n;case`privy:wallet:connect`:return n;case`privy:wallet:recover`:return n;case`privy:wallet:rpc`:return n;case`privy:solana-wallet:create`:return n;case`privy:solana-wallet:create-additional`:return n;case`privy:solana-wallet:connect`:return n;case`privy:solana-wallet:recover`:return n;case`privy:solana-wallet:rpc`:return n;case`privy:delegated-actions:consent`:return n;case`privy:mfa:verify`:return n;case`privy:mfa:init-enrollment`:return n;case`privy:mfa:submit-enrollment`:return n;case`privy:mfa:unenroll`:return n;case`privy:mfa:clear`:return n;case`privy:auth:unlink-passkey`:return n;default:throw Error(`invalid wallet event type ${e}`)}}};async function Mn(e,t,n,r,i=!1,a,o){let s=i,c=async a=>s?(a===+!i?r():n.current?.reject(new Xt(`missing_or_invalid_mfa`,`MFA verification failed, retry.`)),await e(await new Promise((e,r)=>{t.current={resolve:e,reject:r},setTimeout(()=>{let e=new Xt(`mfa_timeout`,`Timed out waiting for MFA code`);n.current?.reject(e),r(e)},o)}))):await e(),l=null;for(let e=0;e<a;e++)try{l=await c(e),n.current?.resolve(void 0);break}catch(e){if(e.type===`missing_or_invalid_mfa`)s=!0;else throw n.current?.resolve(void 0),e}if(l===null){let e=new Xt(`mfa_verification_max_attempts_reached`,`Max MFA verification attempts reached`);throw n.current?.reject(e),e}return l}function Nn(e){return e.error!==void 0}const Pn=(function(e){return()=>`id-${e++}`})(0),Fn=(e,t)=>typeof t==`bigint`?t.toString():t,In=(e,t)=>`${e}${JSON.stringify(t,Fn)}`,L=async(e,{ms:t,msg:n})=>{let r,i=new Promise((e,i)=>{r=setTimeout(()=>{i(Error(n))},t??15e3)});try{return await Promise.race([e,i])}finally{r!==void 0&&clearTimeout(r)}},Ln=new jn;var Rn=class{ready;_waitForReadyPromise=null;cache;_embeddedWalletMessagePoster;mfa;constructor(e,t){this.ready=!1,this.cache=new Map,this._embeddedWalletMessagePoster=e,this.mfa=t}invokeWithMfa(e,t){return L(Mn(n=>L(this.waitForReady().then(()=>e(n)),{msg:t.timeoutMsg,ms:t.timeoutMs}),this.mfa.rootPromise,this.mfa.submitPromise,()=>this.mfa.emit(`mfaRequired`),t.mfaAlwaysRequired??!1,4,3e5),{msg:`Operation reached timeout: MFA verification`,ms:126e4})}reload(){return this.ready=!1,this._waitForReadyPromise=null,Ln.flush(Error(`Embedded wallet WebView was reloaded`)),this.cache.clear(),this._embeddedWalletMessagePoster.reload()}onBackground(){this.ready=!1}ping(e=15e3){return L(this.invoke(`privy:iframe:ready`,{}),{msg:`Ping reached timeout`,ms:e})}create(e){return L(this.waitForReady().then(()=>this.invoke(`privy:wallet:create`,e)),{msg:`Operation reached timeout: create`})}rpc(e){return this.invokeWithMfa(t=>this.invoke(`privy:wallet:rpc`,{...t,...e}),{timeoutMsg:`Operation reached timeout: rpc`})}createSolana(e){return this.invokeWithMfa(t=>this.invoke(`privy:solana-wallet:create`,{...t,...e}),{timeoutMsg:`Operation reached timeout: create`,timeoutMs:6e4})}createAdditionalSolana(e){return L(this.waitForReady().then(()=>this.invoke(`privy:solana-wallet:create-additional`,e)),{msg:`Operation reached timeout: create`})}solanaRpc(e){return this.invokeWithMfa(t=>this.invoke(`privy:solana-wallet:rpc`,{...t,...e}),{timeoutMsg:`Operation reached timeout: solana-rpc`})}delegateWallets(e){return this.invokeWithMfa(t=>this.invoke(`privy:delegated-actions:consent`,{...t,...e}),{timeoutMsg:`Operation reached timeout: delegated-actions:consent`})}verifyMfa(e){return this.invokeWithMfa(t=>this.invoke(`privy:mfa:verify`,{...t,...e}),{timeoutMsg:`Operation reached timeout: mfa:verify`,mfaAlwaysRequired:!0})}initEnrollMfa(e){return this.invokeWithMfa(t=>this.invoke(`privy:mfa:init-enrollment`,{...t,...e}),{timeoutMsg:`Operation reached timeout: mfa:init-enrollment`})}submitEnrollMfa(e){return e.method===`passkey`?this.invokeWithMfa(t=>this.invoke(`privy:mfa:submit-enrollment`,{...t,...e}),{timeoutMsg:`Operation reached timeout: mfa:submit-enrollment`}):L(this.waitForReady().then(()=>this.invoke(`privy:mfa:submit-enrollment`,e)),{msg:`Operation reached timeout: mfa:submit-enrollment`})}unenrollMfa(e){return this.invokeWithMfa(t=>this.invoke(`privy:mfa:unenroll`,{...t,...e}),{timeoutMsg:`Operation reached timeout: mfa:unenroll`,mfaAlwaysRequired:!0})}unlinkPasskey(e){return this.invokeWithMfa(t=>this.invoke(`privy:auth:unlink-passkey`,{...t,...e}),{timeoutMsg:`Operation reached timeout: auth:unlink-passkey`,mfaAlwaysRequired:!0})}clearMfa(e){return L(this.waitForReady().then(()=>this.invoke(`privy:mfa:clear`,e)),{msg:`Operation reached timeout: mfa:clear`})}createWallet(e){return this.invokeWithMfa(t=>this.invoke(`privy:wallets:create`,{...t,...e}),{timeoutMsg:`Operation reached timeout: create`,timeoutMs:6e4})}signWithUserSigner(e){return this.invokeWithMfa(t=>this.invoke(`privy:user-signer:sign`,{...t,...e}),{timeoutMsg:`Operation reached timeout: user-signer:sign`})}addWallet(e){return L(this.waitForReady().then(()=>this.invoke(`privy:wallets:add`,e)),{msg:`Operation reached timeout: wallets:add`})}setRecovery(e){return this.invokeWithMfa(t=>this.invoke(`privy:wallets:set-recovery`,{...t,...e}),{timeoutMsg:`Operation reached timeout: wallets:set-recovery`,timeoutMs:6e4})}connect(e){return L(this.waitForReady().then(()=>this.invoke(`privy:wallets:connect`,e)),{msg:`Operation reached timeout: wallets:connect`})}recover(e){return this.invokeWithMfa(t=>this.invoke(`privy:wallets:recover`,{...t,...e}),{timeoutMsg:`Operation reached timeout: wallets:recover`,timeoutMs:6e4})}rpcWallet(e){return this.invokeWithMfa(t=>this.invoke(`privy:wallets:rpc`,{...t,...e}),{timeoutMsg:`Operation reached timeout: wallets:rpc`})}handleEmbeddedWalletMessages(e){if(!e.event.startsWith(`privy:`)){console.warn(`Unsupported event type: ${e.event}`);return}let t=Ln.dequeue(e.event,e.id);if(t)return Nn(e)?t.reject(new Xt(e.error.type,e.error.message)):t.resolve(e.data)}waitForReady(){return this.ready?Promise.resolve():(this._waitForReadyPromise||=new Promise((e,t)=>{(async()=>{for(let t=0;t<100&&!this.ready;t++)this.invoke(`privy:iframe:ready`,{}).then(()=>{this.ready=!0,this._waitForReadyPromise=null,e()}).catch(()=>{}),await new Promise(e=>setTimeout(e,150));this.ready||(this._waitForReadyPromise=null,t(Error(`Embedded wallet WebView failed to become ready`)))})()}),this._waitForReadyPromise)}invoke(e,t){let n=In(e,t);if(e===`privy:wallet:create`||e===`privy:solana-wallet:create`){let e=this.cache.get(n);if(e)return e}let r=new Promise((n,r)=>{let i=Pn();Ln.enqueue(i,{resolve:n,reject:r}),this._embeddedWalletMessagePoster.postMessage(JSON.stringify({id:i,event:e,data:t}),`*`)}).finally(()=>{this.cache.delete(n)});return this.cache.set(n,r),r}};async function zn(e,{request:t,headers:n}){return await e.fetchPrivyRoute(Ye,{body:t,headers:n})}async function Bn({context:e,chainType:t,idempotencyKey:n}){return{wallet:await zn(e,{request:{chain_type:t,owner_id:void 0},headers:n?{"privy-idempotency-key":n}:void 0})}}var Vn=class{_privyInternal;_proxy;_chains=Array.from(it);_mfa;_mfaPromises;_appApi;constructor(e,t,n,r,i,a){if(this._privyInternal=e,t&&(this._proxy=new Rn(t,i),r.setProxy(this._proxy)),n){let e=lt(n);this._chains=e}this._mfa=r,this._mfaPromises=i,this._appApi=a}setMessagePoster(e){this._proxy=new Rn(e,this._mfaPromises),this._mfa.setProxy(this._proxy)}async signWithUserSigner(e){if(!this._proxy)throw Error(`Embedded wallet proxy not initialized`);let t=await this._privyInternal.getAccessTokenInternal();if(!t)throw new E({error:`User must be logged in to sign a message with the user signer`,code:`user_signer_sign_error`});let{signature:n}=await this._proxy.signWithUserSigner({accessToken:t,message:e.message});return{signature:n}}async add(e){if(!this._proxy)throw Error(`Embedded wallet proxy not initialized`);if(this._privyInternal.config?.embedded_wallet_config.mode===`user-controlled-server-wallets-only`)await Bn({context:{app:this._appApi,fetchPrivyRoute:(...e)=>this._privyInternal.fetch(...e),getCompiledPath:(...e)=>this._privyInternal.getPath(...e)},chainType:e.chainType});else{let t=await this._privyInternal.getAccessTokenInternal();if(!t)throw new E({error:`User must be logged in to create an embedded wallet`,code:`embedded_wallet_creation_error`});await this._proxy.addWallet({accessToken:t,...e})}let{user:t}=await this._privyInternal.refreshSession();return{user:t}}async getBitcoinProvider({wallet:e,entropyId:t,entropyIdVerifier:n,recoveryPassword:r,recoveryAccessToken:i,recoverySecretOverride:a}){if(!this._proxy)throw Error(`Embedded wallet proxy not initialized`);if(!await this._privyInternal.getAccessTokenInternal())throw Error(`User must be logged in to create an embedded wallet`);return D(e)||await this._load({entropyId:t,entropyIdVerifier:n,wallet:e,recoveryPassword:r,recoveryAccessToken:i,recoverySecretOverride:a}),new An({account:e,privyInternal:this._privyInternal,proxy:this._proxy,entropyId:t,entropyIdVerifier:n})}async create({password:e,recoveryMethod:t,recoveryToken:n,recoveryKey:r,recoverySecretOverride:i,iCloudRecordNameOverride:a,solanaAccount:o,skipCallbacks:s,idempotencyKey:c}){if(!this._proxy)throw Error(`Embedded wallet proxy not initialized`);if(this._privyInternal.config?.embedded_wallet_config.mode===`user-controlled-server-wallets-only`){if(t&&!t.startsWith(`privy`))throw new E({error:`User-controlled server wallets do not support custom recovery methods`,code:`embedded_wallet_creation_error`});await Bn({context:{app:this._appApi,fetchPrivyRoute:(...e)=>this._privyInternal.fetch(...e),getCompiledPath:(...e)=>this._privyInternal.getPath(...e)},chainType:`ethereum`,idempotencyKey:c})}else{let s;if(s=t||(e?`user-passcode`:`privy`),e&&typeof e!=`string`)throw Error(`Invalid recovery password, must be a string`);if(s===`privy`&&this._privyInternal.config?.embedded_wallet_config.require_user_password_on_create)throw Error(`Password not provided yet is required by App configuration`);let c=await this._privyInternal.getAccessTokenInternal();if(!c)throw Error(`User must be logged in to create an embedded wallet`);let{address:l}=await this._proxy.create({accessToken:c,recoveryMethod:s,recoveryKey:r,recoveryPassword:e,recoveryAccessToken:n,recoverySecretOverride:i,iCloudRecordNameOverride:a,solanaAddress:o?.address});if(!l)throw Error(`Failed to create wallet`)}return await this._privyInternal.refreshSession(s)}async createSolana(e){if(!this._proxy)throw new E({error:`Embedded wallet proxy not initialized`,code:`embedded_wallet_creation_error`});if(this._privyInternal.config?.embedded_wallet_config.mode===`user-controlled-server-wallets-only`)await Bn({context:{app:this._appApi,fetchPrivyRoute:(...e)=>this._privyInternal.fetch(...e),getCompiledPath:(...e)=>this._privyInternal.getPath(...e)},chainType:`solana`,idempotencyKey:e?.idempotencyKey});else{let t=await this._privyInternal.getAccessTokenInternal();if(!t)throw new E({error:`User must be logged in to create an embedded wallet`,code:`embedded_wallet_creation_error`});e?.ethereumAccount&&await this.getProvider(e.ethereumAccount);let{publicKey:n}=await this._proxy.createSolana({accessToken:t,ethereumAddress:e?.ethereumAccount?.address});if(!n)throw new E({error:`Failed to create wallet`,code:`embedded_wallet_creation_error`})}return await this._privyInternal.refreshSession()}async delegateWallets({delegatedWallets:e,rootWallet:t}){if(!this._proxy)throw new E({error:`Embedded wallet proxy not initialized`,code:`embedded_wallet_creation_error`});let n=await this._privyInternal.getAccessTokenInternal();if(!n)throw new E({error:`User must be logged in to create an embedded wallet`,code:`embedded_wallet_creation_error`});await this._proxy.delegateWallets({accessToken:n,delegatedWallets:e,rootWallet:t})}async getProvider(e,t,n,r,i){if(!this._proxy)throw Error(`Embedded wallet proxy not initialized`);return D(e)||await this._load({wallet:e,entropyId:e.address,entropyIdVerifier:`ethereum-address-verifier`,recoveryPassword:t,recoveryKey:i,recoveryAccessToken:n,recoverySecretOverride:r}),new En({account:e,entropyId:e.address,entropyIdVerifier:`ethereum-address-verifier`,privyInternal:this._privyInternal,chains:this._chains,walletProxy:this._proxy,appApi:this._appApi})}async getEthereumProvider({wallet:e,entropyId:t,entropyIdVerifier:n,recoveryPassword:r,recoveryAccessToken:i,recoverySecretOverride:a,recoveryKey:o,onNeedsRecovery:s}){if(!this._proxy)throw Error(`Embedded wallet proxy not initialized`);if(!await this._privyInternal.getAccessTokenInternal())throw Error(`User must be logged in to create an embedded wallet`);return D(e)||(!s||r||i||a||o)&&await this._load({entropyId:t,entropyIdVerifier:n,wallet:e,recoveryPassword:r,recoveryAccessToken:i,recoverySecretOverride:a,recoveryKey:o}),new En({account:e,entropyId:t,entropyIdVerifier:`ethereum-address-verifier`,privyInternal:this._privyInternal,chains:this._chains,walletProxy:this._proxy,onNeedsRecovery:s,appApi:this._appApi})}async getSolanaProvider(e,t,n,r,i,a,o){if(!this._proxy)throw new E({error:`Embedded wallet proxy not initialized`,code:`embedded_wallet_webview_not_loaded`});return D(e)||(!o||r||i||a)&&await this._load({wallet:e,entropyId:t,entropyIdVerifier:n,recoveryPassword:r,recoveryAccessToken:i,recoverySecretOverride:a}),new kn({account:e,privyInternal:this._privyInternal,proxy:this._proxy,entropyId:t,entropyIdVerifier:n,onNeedsRecovery:o,app:this._appApi})}async setRecovery(e){let{wallet:t,...n}=e;if(!this._proxy)throw Error(`Embedded wallet proxy not initialized`);if(D(t))throw new E({error:`This wallet does not support setting recovery methods`,code:`unsupported_recovery_method`});wn({currentRecoveryMethod:t.recovery_method,upgradeToRecoveryMethod:n.recoveryMethod===`icloud-native`?`icloud`:n.recoveryMethod}),await this._load(t.chain_type===`solana`?{wallet:t,entropyId:t.address,entropyIdVerifier:`solana-address-verifier`}:{wallet:t,entropyId:t.address,entropyIdVerifier:`ethereum-address-verifier`});let r=await this._privyInternal.getAccessTokenInternal();if(!r)throw Error(`User must be logged in to interact with embedded wallets`);let i=t.recovery_method;this._privyInternal.createAnalyticsEvent(`embedded_wallet_sdk_set_recovery_started`,{address:t.address,target_recovery_method:n.recoveryMethod,existing_recovery_method:i});try{let e;if(n.recoveryMethod===`user-passcode`)e={recoveryMethod:`user-passcode`,recoveryPassword:n.password};else if(n.recoveryMethod===`google-drive`)e={recoveryMethod:`google-drive`,recoveryAccessToken:n.recoveryAccessToken};else if(n.recoveryMethod===`icloud`)e={recoveryMethod:`icloud`,recoveryAccessToken:n.recoveryAccessToken};else if(n.recoveryMethod===`icloud-native`)e={recoveryMethod:`icloud-native`,iCloudRecordNameOverride:n.iCloudRecordNameOverride,recoverySecretOverride:n.recoverySecretOverride};else if(n.recoveryMethod===`recovery-encryption-key`)e={recoveryMethod:`recovery-encryption-key`,recoveryKey:n.recoveryKey};else if(n.recoveryMethod===`privy`)e={recoveryMethod:`privy`};else throw Error(`Unknown recovery method: ${n.recoveryMethod}`);await this._proxy.setRecovery({accessToken:r,entropyId:t.address,entropyIdVerifier:t.chain_type===`solana`?`solana-address-verifier`:`ethereum-address-verifier`,...e}),this._privyInternal.createAnalyticsEvent(`embedded_wallet_sdk_set_recovery_completed`,{address:t.address,target_recovery_method:n.recoveryMethod,existing_recovery_method:i});let{user:a}=await this._privyInternal.refreshSession();return{user:a,provider:t.chain_type===`ethereum`?new En({account:t,entropyId:t.address,entropyIdVerifier:`ethereum-address-verifier`,privyInternal:this._privyInternal,chains:this._chains,walletProxy:this._proxy,appApi:this._appApi}):null}}catch(e){throw this._privyInternal.createAnalyticsEvent(`embedded_wallet_sdk_set_recovery_failed`,{address:t.address,recovery_method:t.recovery_method,error:e instanceof Error?e.message:`Unable to recover wallet`}),e}}getURL(){let e=new URL(`${this._privyInternal.baseUrl}/apps/${this._privyInternal.appId}/embedded-wallets`);return this._privyInternal.caid&&e.searchParams.append(`caid`,this._privyInternal.caid),this._privyInternal.appClientId&&e.searchParams.append(`client_id`,this._privyInternal.appClientId),e.href}get chains(){return this._chains}onMessage(e){if(!this._proxy)throw Error(`Embedded wallet proxy not initialized`);return this._proxy.handleEmbeddedWalletMessages(e)}reload(){if(!this._proxy){this._privyInternal.logger.warn(`Attempted to reload proxy before initialized`);return}this._proxy.reload()}onBackground(){this._proxy?.onBackground()}async ping(e){try{if(!this._proxy)throw Error(`Embedded wallet proxy not initialized`);return await this._proxy.ping(e),!0}catch(e){return this._privyInternal.logger.debug(e),!1}}async _load({entropyId:e,entropyIdVerifier:t,wallet:n,recoveryPassword:r,recoveryKey:i,recoveryAccessToken:a,recoverySecretOverride:o}){if(!this._proxy)throw Error(`Embedded wallet proxy not initialized`);let s=await this._privyInternal.getAccessTokenInternal();if(!s)throw Error(`User must be logged in to interact with embedded wallets`);try{return await this._proxy.connect({accessToken:s,entropyId:e,entropyIdVerifier:t}),e}catch(c){if(A(c)){try{if(n.recovery_method===`privy`){this._privyInternal.createAnalyticsEvent(`embedded_wallet_sdk_recovery_started`,{address:n.address,recovery_method:n.recovery_method});let r=await this._proxy.recover({accessToken:s,entropyId:e,entropyIdVerifier:t});return this._privyInternal.createAnalyticsEvent(`embedded_wallet_sdk_recovery_completed`,{address:n.address,recovery_method:n.recovery_method}),r.entropyId}if(n.recovery_method===`user-passcode`&&r){this._privyInternal.createAnalyticsEvent(`embedded_wallet_sdk_recovery_started`,{address:n.address,recovery_method:n.recovery_method});let i=await this._proxy.recover({accessToken:s,recoveryPassword:r,entropyId:e,entropyIdVerifier:t});return this._privyInternal.createAnalyticsEvent(`embedded_wallet_sdk_recovery_completed`,{address:n.address,recovery_method:n.recovery_method}),i.entropyId}if([`google-drive`,`icloud`].includes(n.recovery_method)&&a){this._privyInternal.createAnalyticsEvent(`embedded_wallet_sdk_recovery_started`,{address:n.address,recovery_method:n.recovery_method});let r=await this._proxy.recover({accessToken:s,recoveryAccessToken:a,entropyId:e,entropyIdVerifier:t});return this._privyInternal.createAnalyticsEvent(`embedded_wallet_sdk_recovery_completed`,{address:n.address,recovery_method:n.recovery_method}),r.entropyId}if(n.recovery_method===`icloud`&&o){this._privyInternal.createAnalyticsEvent(`embedded_wallet_sdk_recovery_started`,{address:n.address,recovery_method:`icloud-native`});let r=await this._proxy.recover({accessToken:s,recoverySecretOverride:o,entropyId:e,entropyIdVerifier:t});return this._privyInternal.createAnalyticsEvent(`embedded_wallet_sdk_recovery_completed`,{address:n.address,recovery_method:`icloud-native`}),r.entropyId}if(n.recovery_method===`recovery-encryption-key`&&i){this._privyInternal.createAnalyticsEvent(`embedded_wallet_sdk_recovery_started`,{address:n.address,recovery_method:n.recovery_method});let r=await this._proxy.recover({accessToken:s,recoveryKey:i,entropyId:e,entropyIdVerifier:t});return this._privyInternal.createAnalyticsEvent(`embedded_wallet_sdk_recovery_completed`,{address:n.address,recovery_method:n.recovery_method}),r.entropyId}}catch(t){throw this._privyInternal.createAnalyticsEvent(`embedded_wallet_sdk_recovery_failed`,{address:n.address,recovery_method:n.recovery_method,error:t instanceof Error?t.message:`Unable to recover wallet: ${e}`}),t}throw c}else throw c}}},Hn=class extends pt{rootPromise;submitPromise;constructor(){super(),this.rootPromise={current:null},this.submitPromise={current:null}}};const Un=[`chrome-extension:`,`moz-extension:`,`safari-web-extension:`];let R=!1;const Wn=()=>{if(R)return!0;try{let e=globalThis,t=e.chrome?.runtime?.id??e.browser?.runtime?.id,n=e.location?.protocol;R=typeof t==`string`&&t.length>0||typeof n==`string`&&Un.includes(n)}catch{R=!0}return R},z={get(e){return kt.get(e)},set(e,t,n){Wn()||kt.set(e,t,n)},remove(e){kt.remove(e)}},B=`privy:active-user`,Gn=`privy:saved-users`,V=e=>e?`privy:${e}:token`:`privy:token`,H=e=>e?`privy:${e}:pat`:`privy:pat`,U=e=>e?`privy:${e}:refresh_token`:`privy:refresh_token`,W=e=>e?`privy:${e}:id-token`:`privy:id-token`,Kn=e=>e?`privy-${e}-token`:`privy-token`,qn=e=>e?`privy-${e}-refresh-token`:`privy-refresh-token`,Jn=e=>e?`privy-${e}-id-token`:`privy-id-token`,G=e=>e?`privy-${e}-session`:`privy-session`,K=Promise.allSettled.bind(Promise)??(e=>Promise.all(e.map(e=>e.then(e=>({status:`fulfilled`,value:e})).catch(e=>({status:`rejected`,reason:e}))))),Yn=[`storage_cleared`,`token_cleared`,`refresh_token_cleared`,`identity_token_cleared`,`token_stored`,`refresh_token_stored`,`identity_token_stored`,`oauth_tokens_granted`,`error_storing_tokens`];var Xn=class extends pt{static events=Yn;_storage;_isUsingServerCookies=!1;GUEST_CREDENTIAL_STORAGE_KEY;_setStoredUsers;_hasEmittedStoredUsers=!1;constructor(e){super(),this._storage=e.storage,this.GUEST_CREDENTIAL_STORAGE_KEY=`privy:guest:${e.appId}`,this._setStoredUsers=e.setStoredUsers}set isUsingServerCookies(e){this._isUsingServerCookies=e}setStoredUsersCallback(e){this._setStoredUsers=e,this.getSavedUserIds().then(e=>{this._hasEmittedStoredUsers||this._setStoredUsers?.({users:e.map(e=>({id:e}))})})}async getCustomerAccessToken(){let e=await this.getActiveUserId(),t=await this._storage.get(V(e));try{return typeof t==`string`?new w(t).value:null}catch(e){return console.error(e),await this.destroyLocalState({reason:`getToken_error`}),null}}async getPrivyAccessToken(){let e=await this.getActiveUserId(),t=await this._storage.get(H(e));try{return typeof t==`string`?new w(t).value:null}catch(e){return console.error(e),await this.destroyLocalState({reason:`getToken_error`}),null}}async getRefreshToken(){let e=await this.getActiveUserId(),t=await this._storage.get(U(e));return typeof t==`string`?t:null}async getIdentityToken(){let e=await this.getActiveUserId(),t=await this._storage.get(W(e));return typeof t==`string`?t:null}async mightHaveServerCookies(){try{let e=await this.getActiveUserId(),t=z.get(G(e));if(t!==void 0&&t.length>0)return!0;let n=z.get(G(null));return n!==void 0&&n.length>0}catch(e){console.error(e)}return!1}async hasRefreshCredentials(e,t){return await this.mightHaveServerCookies()||typeof e==`string`&&typeof t==`string`}tokenIsActive(e){if(!e)return!1;let t=w.parse(e);return t!==null&&!t.isExpired(30)}async destroyLocalState(e){let t=await this.getActiveUserId(),n=[this._storage.del(V(null)),this._storage.del(H(null)),this._storage.del(U(null)),this._storage.del(W(null)),this._storage.del(this.GUEST_CREDENTIAL_STORAGE_KEY),this._storage.del(B)];t&&n.push(this._storage.del(V(t)),this._storage.del(H(t)),this._storage.del(U(t)),this._storage.del(W(t)),this.removeSavedUserId(t)),await K(n),z.remove(Kn(null)),z.remove(qn(null)),z.remove(Jn(null)),z.remove(G(null)),t&&(z.remove(Kn(t)),z.remove(qn(t)),z.remove(Jn(t)),z.remove(G(t))),e?.reason&&this.emit(`storage_cleared`,{reason:e.reason})}async storeCustomerAccessToken(e){let t=await this.getActiveUserId();await this.storeCustomerAccessTokenForUser(t,e)}async storeCustomerAccessTokenForUser(e,t){let n=V(e),r=Kn(e);if(typeof t==`string`){let e=await this._storage.get(n);if(await this._storage.put(n,t),!this._isUsingServerCookies){let e=w.parse(t)?.expiration;z.set(r,t,{sameSite:`Strict`,secure:!0,expires:e?new Date(e*1e3):void 0})}e!==t&&this.emit(`token_stored`,{cookiesEnabled:this._isUsingServerCookies})}else{let e=await this._storage.get(n);await this._storage.del(n),z.remove(r),e!==null&&this.emit(`token_cleared`,{reason:`set_with_non_string_value`})}}async storePrivyAccessToken(e){let t=await this.getActiveUserId();await this.storePrivyAccessTokenForUser(t,e)}async storePrivyAccessTokenForUser(e,t){let n=H(e);typeof t==`string`?await this._storage.put(n,t):await this._storage.del(n)}async storeRefreshTokenForUser(e,t){let n=U(e),r=qn(e),i=G(e);typeof t==`string`?(await this._storage.put(n,t),this._isUsingServerCookies||(z.set(i,`t`,{sameSite:`Strict`,secure:!0,expires:30}),z.set(r,t,{sameSite:`Strict`,secure:!0,expires:30})),this.emit(`refresh_token_stored`,{cookiesEnabled:this._isUsingServerCookies})):(await this._storage.del(n),z.remove(r),z.remove(i),this.emit(`refresh_token_cleared`,{reason:`set_with_non_string_value`}))}async updateWithTokensResponse(e){let t=e.user.id,n=(await K([this.storeCustomerAccessTokenForUser(t,e.token),this.storePrivyAccessTokenForUser(t,e.privy_access_token),this.storeRefreshTokenForUser(t,e.refresh_token),this.storeIdentityTokenForUser(t,e.identity_token)])).filter(e=>e.status===`rejected`);if(n.length>0){this.emit(`error_storing_tokens`,n.map(e=>String(e.reason)).join(`, `));return}let r=(await K([this.storeCustomerAccessTokenForUser(null,e.token),this.storePrivyAccessTokenForUser(null,e.privy_access_token),this.storeRefreshTokenForUser(null,e.refresh_token),this.storeIdentityTokenForUser(null,e.identity_token)])).filter(e=>e.status===`rejected`);if(r.length>0){this.emit(`error_storing_tokens`,r.map(e=>String(e.reason)).join(`, `));return}await this.storeActiveUserId(t);let i=(await K([this.processOAuthTokens(e.oauth_tokens)])).filter(e=>e.status===`rejected`);i.length>0&&this.emit(`error_storing_tokens`,i.map(e=>String(e.reason)).join(`, `))}async backfillLegacySession(){if(await this.getActiveUserId())return;let[e,t,n,r]=await Promise.all([this._storage.get(V(null)),this._storage.get(H(null)),this._storage.get(U(null)),this._storage.get(W(null))]);if(typeof e!=`string`||typeof n!=`string`)return;let i=w.parse(e)?.subject;if(typeof i!=`string`||i.length===0)return;let a=[this.storeCustomerAccessTokenForUser(i,e),this.storeRefreshTokenForUser(i,n)];typeof t==`string`&&a.push(this.storePrivyAccessTokenForUser(i,t)),typeof r==`string`&&a.push(this.storeIdentityTokenForUser(i,r));let o=(await K(a)).filter(e=>e.status===`rejected`);if(o.length>0){this.emit(`error_storing_tokens`,o.map(e=>String(e.reason)).join(`, `));return}await this.storeActiveUserId(i)}async processOAuthTokens(e){e&&this.emit(`oauth_tokens_granted`,e)}async storeIdentityToken(e){let t=await this.getActiveUserId();await this.storeIdentityTokenForUser(t,e)}async storeIdentityTokenForUser(e,t){let n=W(e),r=Jn(e);if(typeof t==`string`){let e=await this._storage.get(n);if(await this._storage.put(n,t),!this._isUsingServerCookies){let e=w.parse(t)?.expiration;z.set(r,t,{sameSite:`Strict`,secure:!0,expires:e?new Date(e*1e3):void 0})}e!==t&&this.emit(`identity_token_stored`,{cookiesEnabled:this._isUsingServerCookies})}else{let e=await this._storage.get(n);await this._storage.del(n),z.remove(r),e!==null&&this.emit(`identity_token_cleared`,{reason:`set_with_non_string_value`})}}async getOrCreateGuestCredential(){let e=await this._storage.get(this.GUEST_CREDENTIAL_STORAGE_KEY);if(e&&typeof e==`string`)return e;let t=rt.encode(crypto.getRandomValues(new Uint8Array(32)));return await this._storage.put(this.GUEST_CREDENTIAL_STORAGE_KEY,t),t}async getActiveUserId(){let e=await this._storage.get(B);return typeof e==`string`?e:null}async storeActiveUserId(e){let t=await this.getSavedUserIds();await this.storeSavedUserIds([...t,e]),await this._storage.put(B,e)}async getSavedUserIds(){let e=await this._storage.get(Gn);if(typeof e!=`string`)return[];try{let t=JSON.parse(e),n=Array.isArray(t)?t.filter(e=>typeof e==`string`):[];return[...new Set(n)]}catch{return[]}}async storeSavedUserIds(e){let t=[...new Set(e)];t.length>0?await this._storage.put(Gn,JSON.stringify(t)):await this._storage.del(Gn),this._setStoredUsers&&(this._hasEmittedStoredUsers=!0,this._setStoredUsers({users:t.map(e=>({id:e}))}))}async removeSavedUserId(e){let t=await this.getSavedUserIds();await this.storeSavedUserIds(t.filter(t=>t!==e))}async switchActiveUserId(e){if(!(await this.getSavedUserIds()).includes(e))throw new E({code:`invalid_input`,error:`Cannot switch active user because the user ID is not saved on this device`});await this._storage.put(B,e)}};const Zn=e=>{let t=new AbortController;return setTimeout(()=>t.abort(),e),t.signal};function Qn(e){let t=new URLSearchParams;for(let n in e)e[n]!=null&&t.append(n,String(e[n]));return Array.from(t).length?`?`+t.toString():``}const q=()=>void 0,J={NONE:-1/0,ERROR:1,WARN:2,INFO:3,DEBUG:1/0},$n=({level:e,logger:t})=>({get level(){return e},error:J[e]>=J.ERROR?t.error:q,warn:J[e]>=J.WARN?t.warn:q,info:J[e]>=J.INFO?t.info:q,debug:J[e]>=J.DEBUG?t.debug:q}),er=`privy:caid`;var tr=class{baseUrl;callbacks;appId;appClientId;logger;session;_config;_analyticsId;_storage;_sdkVersion=`js-sdk-core:0.71.0`;_fetch;nativeAppIdentifier;_crypto;isMultiUserModeEnabled;_cache=new Map;constructor(e){this.logger=$n({level:e.logger?.level??e.logLevel??`ERROR`,logger:e.logger??console}),this._storage=e.storage,this._crypto=e.crypto,this._analyticsId=null,this._getOrGenerateClientAnalyticsId(),this.baseUrl=e.baseUrl??`https://auth.privy.io`,this.appId=e.appId,this.appClientId=e.appClientId,this._sdkVersion=e.sdkVersion??this._sdkVersion,this.callbacks=e.callbacks,this.nativeAppIdentifier=e.nativeAppIdentifier,this.isMultiUserModeEnabled=e.isMultiUserModeEnabled,this.session=new Xn({storage:this._storage,isUsingServerCookies:!1,appId:e.appId,setStoredUsers:e.callbacks?.setStoredUsers}),this._fetch=Dt(globalThis.fetch,{retries:3,retryDelay:e=>3**e*500,retryOn:[408,409,425,500,502,503,504]}),this.session.on(`error_storing_tokens`,e=>{this.createAnalyticsEvent(`error_updating_tokens_in_storage`,{reason:e})})}setCallbacks(e){this.callbacks={...this.callbacks,...e},this.session.setStoredUsersCallback(this.callbacks?.setStoredUsers)}get isReady(){return!!this._config}get config(){return this._config}get caid(){return this._analyticsId}async _initialize(){if(this.isReady){this.callbacks?.setIsReady?.(!0);return}if(!await this.isStorageAccessible())throw new E({code:`storage_error`,error:`Unable to access storage`});this._config=await this.getAppConfig(),this._config?.custom_api_url&&(this.baseUrl=this._config.custom_api_url,this.session.isUsingServerCookies=!0),this.isMultiUserModeEnabled&&await this.session.backfillLegacySession(),this.callbacks?.setIsReady?.(!0),this._sdkVersion.startsWith(`react-auth:`)||this.createAnalyticsEvent(`sdk_initialize`,{})}getPath(e,{params:t,query:n}){return`${this.baseUrl}${tt(e.path,t)}${Qn(n)}`}async fetchWithoutAuthentication(e,t){if(!this.isMultiUserModeEnabled)throw new E({code:`invalid_input`,error:`Unauthenticated requests require sessions.mode to be set to "multi-user"`});return this.fetch(e,{...t,onRequest:this._beforeRequestWithoutAuth.bind(this)})}async fetchForLogin(e,t){return this.isMultiUserModeEnabled?this.fetchWithoutAuthentication(e,t):this.fetch(e,t)}async fetch(e,{body:t,params:n,query:r,headers:i,onRequest:a=this._beforeRequest.bind(this)}){let o=new Request(this.getPath(e,{params:n,query:r}),{method:e.method,body:JSON.stringify(t),headers:i}),s=await a(o),c=await this._fetch(o,s),l=await c.json();if(c.status>299)throw new T({...l,status:c.status});return l}async _beforeRequestWithoutInitialize(e){let t=await this.session.getPrivyAccessToken()??await this.session.getCustomerAccessToken(),n=new Headers(e.headers);n.set(`privy-app-id`,this.appId),this.appClientId&&n.set(`privy-client-id`,this.appClientId),n.set(`privy-client`,this._sdkVersion),t&&n.set(`Authorization`,`Bearer ${t}`),n.set(`Content-Type`,`application/json`),n.set(`Accept`,`application/json`);let r=await this._getOrGenerateClientAnalyticsId();return r&&n.set(`privy-ca-id`,r),this.nativeAppIdentifier&&n.set(`x-native-app-identifier`,this.nativeAppIdentifier),{signal:Zn(2e4),headers:n,credentials:`include`}}async beforeRequestWithoutRefresh(e){return await this._initialize(),this._beforeRequestWithoutInitialize(e)}async _beforeRequestWithoutAuth(e){await this._initialize();let t=new Headers(e.headers);t.set(`privy-app-id`,this.appId),this.appClientId&&t.set(`privy-client-id`,this.appClientId),t.set(`privy-client`,this._sdkVersion),t.set(`Content-Type`,`application/json`),t.set(`Accept`,`application/json`);let n=await this._getOrGenerateClientAnalyticsId();return n&&t.set(`privy-ca-id`,n),this.nativeAppIdentifier&&t.set(`x-native-app-identifier`,this.nativeAppIdentifier),{signal:Zn(2e4),headers:t}}async _beforeRequest(e){return await this._initialize(),await this.getAccessTokenInternal(),this.beforeRequestWithoutRefresh(e)}async getAppConfig(){return await this.fetch(n,{params:{app_id:this.appId},onRequest:this._beforeRequestWithoutInitialize.bind(this)})}async _getOrGenerateClientAnalyticsId(){if(this._analyticsId)return this._analyticsId;try{let e=await this._storage.get(er);if(typeof e==`string`&&e.length>0)return this._analyticsId=e,e}catch(e){this.logger.error(`Unable to load clientId`,e)}try{this._analyticsId=this._crypto.randomUUID()}catch(e){this.logger.error(`Unable to generate uuidv4`,e)}if(this._analyticsId){try{await this._storage.put(er,this._analyticsId)}catch(e){this.logger.error(`Unable to store clientId: ${this._analyticsId}`,e)}return this._analyticsId}}async destroyClientAnalyticsId(){try{return await this._storage.del(er)}catch(e){this.logger.error(`Unable to delete clientId`,e)}}async createAnalyticsEvent(e,n){try{await this.fetch(t,{body:{event_name:e,client_id:await this._getOrGenerateClientAnalyticsId(),payload:n},onRequest:this.beforeRequestWithoutRefresh.bind(this)})}catch{}}async refreshSession(e=!1){if(!await this.isStorageAccessible())throw new E({code:`storage_error`,error:`Unable to access storage`});let t=await this.session.getRefreshToken()??void 0,n=t??`key`,r=this._cache.get(n);if(r)return this.logger.debug(`[privy:refresh] found in-flight session refresh request, deduping`),await r;let i=this._refreshSession(t,e);this._cache.set(n,i);try{return await i}finally{this._cache.delete(n)}}async _refreshSession(e,t){let n=await this.session.getCustomerAccessToken();if(!await this.session.hasRefreshCredentials(n,e??null))throw this.logger.debug(`[privy:refresh] missing tokens, skipping request`),await this._initialize(),new T({code:Ot.MISSING_OR_INVALID_TOKEN,error:`No tokens found in storage`,status:401});try{this.logger.debug(`[privy:refresh] fetching: ${Ie.path}`);let n=await this.fetch(Ie,{body:{refresh_token:e},onRequest:this.beforeRequestWithoutRefresh.bind(this)}),r=n.session_update_action;return this.logger.debug(`[privy:refresh] response: ${r}`),r===`set`&&(await this.session.updateWithTokensResponse(n),this.logger.debug(`[privy:refresh] tokens stored`)),r===`clear`&&(await this.session.destroyLocalState(),this.logger.debug(`[privy:refresh] tokens cleared`),!t&&this.callbacks?.setUser?.(null)),r===`ignore`&&(n.token&&(await this.session.storeCustomerAccessToken(n.token),this.logger.debug(`[privy:refresh] token stored (CAT)`)),n.privy_access_token&&(await this.session.storePrivyAccessToken(n.privy_access_token),this.logger.debug(`[privy:refresh] token stored (PAT)`)),n.identity_token&&(this.logger.debug(`[privy:refresh] token stored (IDT)`),await this.session.storeIdentityToken(n.identity_token))),this.logger.debug(`[privy:refresh] returning response`),!t&&this.callbacks?.setUser?.(n.user),n}catch(e){throw this.logger.debug(`[privy:refresh] error: ${e.message??`unknown error`}`),e instanceof T&&e.code===Ot.MISSING_OR_INVALID_TOKEN&&(await this.session.destroyLocalState(),!t&&this.callbacks?.setUser?.(null)),e}}async getAccessToken(){let[e,t]=await Promise.all([this.session.getCustomerAccessToken(),this.session.getRefreshToken()]);if(e&&!this.session.tokenIsActive(e)&&await this.session.hasRefreshCredentials(e,t)){let t=await this.refreshSession(),n=await this.session.getCustomerAccessToken();return t.token||this.logger.debug(`[privy:getAccessToken] expected token received null`),t.token===e&&this.logger.debug(`[privy:getAccessToken] expected new token in response received existing`),n===e&&this.logger.debug(`[privy:getAccessToken] expected new token in storage received existing`),t.token??n}return e&&!this.session.tokenIsActive(e)?(this.logger.debug(`[privy:getAccessToken] unable to refresh inactive token`),this.callbacks?.setUser?.(null),await this.session.destroyLocalState(),null):e}async getAccessTokenInternal(){let e=await this.getAccessToken();return await this.session.getPrivyAccessToken()??e}async getIdentityToken(){return await this.session.getIdentityToken()}async isStorageAccessible(){try{let e=`privy:__storage__test-${this._crypto.randomUUID()}`,t=`blobby`;await this._storage.put(e,t);let n=await this._storage.get(e);return await this._storage.del(e),n===t}catch(e){return this.logger.error(e),!1}}},nr=class{_privyInternal;_embedded;_isMultiUserModeEnabled;constructor(e,t,n){this._privyInternal=e,this._embedded=t,this._isMultiUserModeEnabled=n}async get(){let{user:e}=await this._privyInternal.refreshSession();return{user:e}}async acceptTerms(){return{user:await this._privyInternal.fetch(e,{})}}async switchActiveUser(e){if(!this._isMultiUserModeEnabled)throw new E({code:`invalid_input`,error:`User switching requires sessions.mode to be set to "multi-user"`});await this._privyInternal.session.switchActiveUserId(e.userId);try{this._embedded.reload();let{user:t}=await this._privyInternal.refreshSession(!0);if(t.id!==e.userId)throw new E({code:`invalid_input`,error:`Cannot switch active user because the refreshed user did not match the requested user ID`});return this._privyInternal.callbacks?.setUser?.(t),{user:t}}catch(e){throw await this._privyInternal.session.destroyLocalState(),this._privyInternal.callbacks?.setUser?.(null),e}}};const Y=e=>e.type===`wallet`&&e.wallet_client_type===`privy`&&e.connector_type===`embedded`,rr=e=>e?e.linked_accounts.filter(Y).filter(e=>e.chain_type===`ethereum`).sort((e,t)=>e.wallet_index-t.wallet_index):[],X=e=>rr(e).find(e=>e.wallet_index===0)??null,ir=X,ar=e=>e?e.linked_accounts.filter(Y).filter(e=>e.chain_type===`solana`).sort((e,t)=>e.wallet_index-t.wallet_index):[],or=e=>ar(e).find(e=>e.wallet_index===0)??null,sr=(e,t)=>t===`off`||rr(e).length>0?!1:e.linked_accounts.filter(e=>e.type===`wallet`&&e.chain_type===`ethereum`).length>0?t===`all-users`:!0,cr=(e,t)=>t===`off`||ar(e).length>0?!1:e.linked_accounts.filter(e=>e.type===`wallet`&&e.chain_type===`solana`).length>0?t===`all-users`:!0,lr=(e,t)=>({...e,is_new_user:t.is_new_user,oauth_tokens:t.oauth_tokens}),Z=async(e,t,n)=>{let r=sr(t.user,n?.ethereum?.createOnLogin??`off`),i=cr(t.user,n?.solana?.createOnLogin??`off`);if(r&&i){let n=await e.create({recoveryMethod:`privy`,skipCallbacks:!0}),r=await e.createSolana({ethereumAccount:X(n.user)??void 0});return lr(r,t)}if(r){let n=await e.create({recoveryMethod:`privy`,solanaAccount:or(t.user)??void 0});return lr(n,t)}if(i){let n=await e.createSolana({ethereumAccount:X(t.user)??void 0});return lr(n,t)}return t};var ur=class{_privyInternal;_embedded;constructor(e,t){this._privyInternal=e,this._embedded=t}async syncWithToken(e,t,n){let r=await this._privyInternal.fetchForLogin(o,{body:{token:e,mode:n}});await this._privyInternal.session.updateWithTokensResponse(r);let i=await Z(this._embedded,r,t?.embedded);return this._privyInternal.callbacks?.setUser?.(i.user),i}async linkWithToken(e){await this._privyInternal.fetch(s,{body:{token:e}});let t=await this._privyInternal.refreshSession();return{user:t.user,identity_token:t.identity_token}}},dr=class{_privyInternal;_embedded;constructor(e,t){this._privyInternal=e,this._embedded=t}async sendCode(e,t){return this._privyInternal.fetch(Se,{body:{email:e,token:t}})}async loginWithCode(e,t,n,r){let i=await this._privyInternal.fetchForLogin(xe,{body:{email:e,code:t,mode:n}});await this._privyInternal.session.updateWithTokensResponse(i);let a=await Z(this._embedded,i,r?.embedded);return this._privyInternal.callbacks?.setUser?.(a.user),a}async linkWithCode(e,t){await this._privyInternal.fetch(Ce,{body:{email:e,code:t}});let n=await this._privyInternal.refreshSession();return{user:n.user,identity_token:n.identity_token}}async updateEmail({oldEmailAddress:e,newEmailAddress:t,code:n}){await this._privyInternal.fetch(Ae,{body:{oldAddress:e,newAddress:t,code:n}});let r=await this._privyInternal.refreshSession();return{user:r.user,identity_token:r.identity_token}}async unlink(e){await this._privyInternal.fetch(ke,{body:{address:e}});let t=await this._privyInternal.refreshSession();return{user:t.user,identity_token:t.identity_token}}},fr=class{_privyInternal;_embedded;constructor(e,t){this._privyInternal=e,this._embedded=t}async initializeAuth({relyingParty:e,redirectUrl:t,token:n}){return await this._privyInternal.fetch(l,{body:{relying_party:e,redirect_url:t,token:n}})}async getFarcasterStatus({channel_token:e}){return await this._privyInternal.fetch(ee,{headers:{"farcaster-channel-token":e}})}async authenticate({channel_token:e,message:t,signature:n,fid:r,mode:i},a){let o=await this._privyInternal.fetchForLogin(c,{body:{channel_token:e,message:t,signature:n,fid:r,mode:i}});await this._privyInternal.session.updateWithTokensResponse(o);let s=await Z(this._embedded,o,a?.embedded);return this._privyInternal.callbacks?.setUser?.(s.user),s}async link({channel_token:e,message:t,signature:n,fid:r}){await this._privyInternal.fetch(u,{body:{channel_token:e,message:t,signature:n,fid:r}});let i=await this._privyInternal.refreshSession();return{user:i.user,identity_token:i.identity_token}}async unlink({fid:e}){await this._privyInternal.fetch(te,{body:{fid:e}});let t=await this._privyInternal.refreshSession();return{user:t.user,identity_token:t.identity_token}}},pr=class{_privyInternal;_embedded;constructor(e,t){this._privyInternal=e,this._embedded=t}async initializeAuth(){return await this._privyInternal.fetch(f,{body:{}})}async authenticate({message:e,signature:t,fid:n},r){let i=await this._privyInternal.fetchForLogin(d,{body:{message:e,signature:t,fid:n}});await this._privyInternal.session.updateWithTokensResponse(i);let a=await Z(this._embedded,i,r?.embedded);return this._privyInternal.callbacks?.setUser?.(a.user),a}},mr=class{_privyInternal;_embedded;constructor(e,t){this._privyInternal=e,this._embedded=t}async create(e){let t=await this._privyInternal.session.getOrCreateGuestCredential(),n=await this._privyInternal.fetch(oe,{body:{guest_credential:t}});await this._privyInternal.session.updateWithTokensResponse(n);let r=await Z(this._embedded,n,e?.embedded);return this._privyInternal.callbacks?.setUser?.(r.user),r}};const Q=`privy:state_code`,$=`privy:code_verifier`;async function hr(e,t){let n=await t(`SHA-256`,new TextEncoder().encode(e));return new Uint8Array(n)}function gr(e){return crypto.getRandomValues(new Uint8Array(e))}function _r(){return rt.encode(gr(36))}function vr(){return _r()}async function yr({codeVerifier:e,method:t=`S256`,digest:n}){if(t==`S256`){let t=await hr(e,n);return rt.encode(t)}else return e}var br=class{_privyInternal;_storage;_crypto;_embedded;constructor(e,t,n,r){this._privyInternal=e,this._embedded=t,this._storage=n,this._crypto=r}async generateURL(e,t){let n=_r(),r=vr(),i=await yr({codeVerifier:n,digest:this._crypto.digest});return await Promise.all([this._storage.put($,n),this._storage.put(Q,r)]),this._privyInternal.fetchForLogin(fe,{body:{redirect_to:t,provider:e,code_challenge:i,state_code:r}})}async loginWithCode(e,t,n,r,i,a){let[o,s]=await Promise.all([this._storage.get($),this._storage.get(Q)]);if(s!==t)throw this._privyInternal.createAnalyticsEvent(`possible_phishing_attempt`,{flow:`oauth`,provider:n,storedStateCode:s??``,returnedStateCode:t??``}),new E({code:`pkce_state_code_mismatch`,error:`Unexpected auth flow. This may be a phishing attempt.`});let c=await this._privyInternal.fetchForLogin(de,{body:{authorization_code:e,code_type:r,state_code:s,code_verifier:o,mode:i}});await this._privyInternal.session.updateWithTokensResponse(c);let l=await Z(this._embedded,c,a?.embedded);return await Promise.all([this._storage.del($),this._storage.del(Q)]),this._privyInternal.callbacks?.setUser?.(l.user),l}async linkWithCode(e,t,n,r){let[i,a]=await Promise.all([this._storage.get($),this._storage.get(Q)]);if(a!==t)throw this._privyInternal.createAnalyticsEvent(`possible_phishing_attempt`,{flow:`oauth`,provider:n,storedStateCode:a??``,returnedStateCode:t??``}),new E({code:`pkce_state_code_mismatch`,error:`Unexpected auth flow. This may be a phishing attempt.`});let o=await this._privyInternal.fetch(pe,{body:{authorization_code:e,code_type:r,state_code:a,code_verifier:i}});await this._privyInternal.session.processOAuthTokens(o.oauth_tokens);let s=await this._privyInternal.refreshSession();return await Promise.all([this._storage.del($),this._storage.del(Q)]),{user:s.user,identity_token:s.identity_token}}async unlink(e,t){await this._privyInternal.fetch(me,{body:{provider:e,subject:t}});let n=await this._privyInternal.refreshSession();return{user:n.user,identity_token:n.identity_token}}},xr=class{_privyInternal;_embedded;constructor(e,t){this._privyInternal=e,this._embedded=t}async generateRegistrationOptions(e){return await this._privyInternal.fetch(ve,{body:{relying_party:e}})}async generateAuthenticationOptions(e){return await this._privyInternal.fetch(ge,{body:{relying_party:e}})}async generateSignupOptions(e){return await this._privyInternal.fetch(be,{body:{relying_party:e}})}async loginWithPasskey(e,t,n,r){let i=await this._privyInternal.fetchForLogin(he,{body:{relying_party:n,challenge:t,authenticator_response:this._transformAuthenticationResponseToSnakeCase(e)}});await this._privyInternal.session.updateWithTokensResponse(i);let a=await Z(this._embedded,i,r?.embedded);return this._privyInternal.callbacks?.setUser?.(a.user),a}async signupWithPasskey(e,t,n){let r=await this._privyInternal.fetchForLogin(ye,{body:{relying_party:t,authenticator_response:this._transformRegistrationResponseToSnakeCase(e)}});await this._privyInternal.session.updateWithTokensResponse(r);let i=await Z(this._embedded,r,n?.embedded);return this._privyInternal.callbacks?.setUser?.(i.user),i}async linkWithPasskey(e,t){await this._privyInternal.fetch(_e,{body:{relying_party:t,authenticator_response:this._transformRegistrationResponseToSnakeCase(e)}});let n=await this._privyInternal.refreshSession();return{user:n.user,identity_token:n.identity_token}}_transformRegistrationResponseToSnakeCase(e){return{type:e.type,id:e.id,raw_id:e.rawId,response:{client_data_json:e.response.clientDataJSON,attestation_object:e.response.attestationObject,authenticator_data:e.response.authenticatorData||void 0,transports:e.response.transports||void 0,public_key:e.response.publicKey||void 0,public_key_algorithm:e.response.publicKeyAlgorithm||void 0},authenticator_attachment:e.authenticatorAttachment||void 0,client_extension_results:{app_id:e.clientExtensionResults.appid||void 0,cred_props:e.clientExtensionResults.credProps||void 0,hmac_create_secret:e.clientExtensionResults.hmacCreateSecret||void 0}}}_transformAuthenticationResponseToSnakeCase(e){return{type:e.type,id:e.id,raw_id:e.rawId,response:{signature:e.response.signature,client_data_json:e.response.clientDataJSON,authenticator_data:e.response.authenticatorData,user_handle:e.response.userHandle||void 0},authenticator_attachment:e.authenticatorAttachment||void 0,client_extension_results:{app_id:e.clientExtensionResults.appid||void 0,cred_props:e.clientExtensionResults.credProps||void 0,hmac_create_secret:e.clientExtensionResults.hmacCreateSecret||void 0}}}},Sr=class{_privyInternal;_embedded;constructor(e,t){this._privyInternal=e,this._embedded=t}async sendCode(e,t){return this._privyInternal.fetch(Te,{body:{phoneNumber:e,token:t}})}async loginWithCode(e,t,n,r){let i=await this._privyInternal.fetchForLogin(we,{body:{phoneNumber:e,code:t,mode:n}});await this._privyInternal.session.updateWithTokensResponse(i);let a=await Z(this._embedded,i,r?.embedded);return this._privyInternal.callbacks?.setUser?.(a.user),a}async linkWithCode(e,t){await this._privyInternal.fetch(Ee,{body:{phoneNumber:e,code:t}});let n=await this._privyInternal.refreshSession();return{user:n.user,identity_token:n.identity_token}}async updatePhone({oldPhoneNumber:e,newPhoneNumber:t,code:n}){await this._privyInternal.fetch(Oe,{body:{old_phone_number:e,new_phone_number:t,code:n}});let r=await this._privyInternal.refreshSession();return{user:r.user,identity_token:r.identity_token}}async unlink(e){await this._privyInternal.fetch(De,{body:{phoneNumber:e}});let t=await this._privyInternal.refreshSession();return{user:t.user,identity_token:t.identity_token}}},Cr=class{_privyInternal;_embedded;_wallet=void 0;_preparedMessage;constructor(e,t){this._privyInternal=e,this._embedded=t}async unlinkWallet(e){await this._privyInternal.fetch(Ve,{body:{address:e}});let t=await this._privyInternal.refreshSession();return{user:t.user,identity_token:t.identity_token}}async linkWithSiwe(e,t,n){let r=t||this._wallet,i=n||this._preparedMessage;if(!r)throw Error(`A wallet must be provided in the init step or as an argument to linkWithSiwe`);if(!i)throw Error(`A message must be generated and signed before being used to link a wallet to privy`);await this._privyInternal.fetch(ze,{body:{message:i,signature:e,chainId:r.chainId,walletClientType:r.walletClientType??null,connectorType:r.connectorType??null}});let a=await this._privyInternal.refreshSession();return{user:a.user,identity_token:a.identity_token}}async loginWithSiwe(e,t,n,r,i){let a=t||this._wallet,o=n||this._preparedMessage;if(!a)throw Error(`A wallet must be provided in the init step or as an argument to loginWithSiwe`);if(!o)throw Error(`A message must be generated and signed before being used to login to privy with a wallet`);let s=await this._privyInternal.fetchForLogin(Le,{body:{signature:e,message:o,chainId:a.chainId,walletClientType:a.walletClientType??null,connectorType:a.connectorType??null,mode:r}});await this._privyInternal.session.updateWithTokensResponse(s);let c=await Z(this._embedded,s,i?.embedded);return this._privyInternal.callbacks?.setUser?.(c.user),c}async init(e,t,n){this._wallet=e;let{nonce:r}=await this._privyInternal.fetch(Re,{body:{address:e.address}}),i=wr({chainId:e.chainId.toString().replace(`eip155:`,``),address:e.address,issuedAt:new Date().toISOString(),statement:`By signing, you are proving you own this wallet and logging in. This does not initiate a transaction or cost any fees.`,domain:t,nonce:r,uri:n});return this._preparedMessage=i,{nonce:r,message:i}}};function wr(e){return`${e.domain} wants you to sign in with your Ethereum account:
2
2
  ${e.address}
3
3
 
4
4
  ${e.statement}
@@ -9,7 +9,7 @@ Chain ID: ${e.chainId}
9
9
  Nonce: ${e.nonce}
10
10
  Issued At: ${e.issuedAt}
11
11
  Resources:
12
- - https://privy.io`}var xr=class{_privyInternal;_embedded;constructor(e,t){this._privyInternal=e,this._embedded=t}async unlink({address:e}){await this._privyInternal.fetch(Ge,{body:{address:e}});let t=await this._privyInternal.refreshSession();return{user:t.user,identity_token:t.identity_token}}async link({message:e,signature:t,walletClientType:n,connectorType:r}){await this._privyInternal.fetch(We,{body:{message:e,signature:t,walletClientType:n??null,connectorType:r??null}});let i=await this._privyInternal.refreshSession();return{user:i.user,identity_token:i.identity_token}}async login({mode:e,message:t,signature:n,walletClientType:r,connectorType:i,opts:a}){let o=await this._privyInternal.fetchForLogin(He,{body:{signature:n,message:t,walletClientType:r??null,connectorType:i??null,mode:e}});await this._privyInternal.session.updateWithTokensResponse(o);let s=await Z(this._embedded,o,a?.embedded);return this._privyInternal.callbacks?.setUser?.(s.user),s}async fetchNonce({address:e}){let{nonce:t}=await this._privyInternal.fetch(Ue,{body:{address:e}});return{nonce:t}}},Sr=class{_privyInternal;constructor(e){this._privyInternal=e}async link(e,t,n,r){await this._privyInternal.fetch(Be,{body:{message:e,signature:t,smart_wallet_type:n,smart_wallet_version:r}});let i=await this._privyInternal.refreshSession();return{user:i.user,identity_token:i.identity_token}}async init(e){let{nonce:t}=await this._privyInternal.fetch(Re,{body:{address:e.address}});return{nonce:t,message:Cr({chainId:e.chainId.toString().replace(`eip155:`,``),address:e.address,issuedAt:new Date().toISOString(),statement:`By signing, you are proving you own this wallet and logging in. This does not initiate a transaction or cost any fees.`,domain:`privy.io`,uri:`https://auth.privy.io`,nonce:t})}}};function Cr(e){return`${e.domain} wants you to sign in with your Ethereum account:
12
+ - https://privy.io`}var Tr=class{_privyInternal;_embedded;constructor(e,t){this._privyInternal=e,this._embedded=t}async unlink({address:e}){await this._privyInternal.fetch(Ge,{body:{address:e}});let t=await this._privyInternal.refreshSession();return{user:t.user,identity_token:t.identity_token}}async link({message:e,signature:t,walletClientType:n,connectorType:r}){await this._privyInternal.fetch(We,{body:{message:e,signature:t,walletClientType:n??null,connectorType:r??null}});let i=await this._privyInternal.refreshSession();return{user:i.user,identity_token:i.identity_token}}async login({mode:e,message:t,signature:n,walletClientType:r,connectorType:i,opts:a}){let o=await this._privyInternal.fetchForLogin(He,{body:{signature:n,message:t,walletClientType:r??null,connectorType:i??null,mode:e}});await this._privyInternal.session.updateWithTokensResponse(o);let s=await Z(this._embedded,o,a?.embedded);return this._privyInternal.callbacks?.setUser?.(s.user),s}async fetchNonce({address:e}){let{nonce:t}=await this._privyInternal.fetch(Ue,{body:{address:e}});return{nonce:t}}},Er=class{_privyInternal;constructor(e){this._privyInternal=e}async link(e,t,n,r){await this._privyInternal.fetch(Be,{body:{message:e,signature:t,smart_wallet_type:n,smart_wallet_version:r}});let i=await this._privyInternal.refreshSession();return{user:i.user,identity_token:i.identity_token}}async init(e){let{nonce:t}=await this._privyInternal.fetch(Re,{body:{address:e.address}});return{nonce:t,message:Dr({chainId:e.chainId.toString().replace(`eip155:`,``),address:e.address,issuedAt:new Date().toISOString(),statement:`By signing, you are proving you own this wallet and logging in. This does not initiate a transaction or cost any fees.`,domain:`privy.io`,uri:`https://auth.privy.io`,nonce:t})}}};function Dr(e){return`${e.domain} wants you to sign in with your Ethereum account:
13
13
  ${e.address}
14
14
 
15
15
  ${e.statement}
@@ -20,7 +20,7 @@ Chain ID: ${e.chainId}
20
20
  Nonce: ${e.nonce}
21
21
  Issued At: ${e.issuedAt}
22
22
  Resources:
23
- - https://privy.io`}var wr=class{_privyInternal;_embedded;constructor(e,t){this._privyInternal=e,this._embedded=t}async authenticate({telegramWebAppData:e,telegramAuthResult:t,captchaToken:n,mode:r=`login-or-sign-up`},i){let a=await this._privyInternal.fetchForLogin(Ke,{body:{telegram_web_app_data:e,telegram_auth_result:t,captcha_token:n,mode:r}});await this._privyInternal.session.updateWithTokensResponse(a);let o=await Z(this._embedded,a,i?.embedded);return this._privyInternal.callbacks?.setUser?.(o.user),o}async link({telegramWebAppData:e,telegramAuthResult:t,captchaToken:n}){await this._privyInternal.fetch(qe,{body:{telegram_web_app_data:e,telegram_auth_result:t,captcha_token:n}});let r=await this._privyInternal.refreshSession();return{user:r.user,identity_token:r.identity_token}}async unlink({telegramUserId:e}){await this._privyInternal.fetch(Je,{body:{telegram_user_id:e}});let t=await this._privyInternal.refreshSession();return{user:t.user,identity_token:t.identity_token}}},Tr=class{_privyInternal;_mfa;customProvider;phone;email;oauth;siwe;siws;smartWallet;passkey;farcaster;farcasterV2;guest;telegram;constructor(e,t,n,r,i){this._privyInternal=e,this._mfa=i,this.customProvider=new or(this._privyInternal,t),this.phone=new vr(this._privyInternal,t),this.email=new sr(this._privyInternal,t),this.oauth=new gr(this._privyInternal,t,n,r),this.guest=new ur(this._privyInternal,t),this.siwe=new yr(this._privyInternal,t),this.siws=new xr(this._privyInternal,t),this.smartWallet=new Sr(this._privyInternal),this.passkey=new _r(this._privyInternal,t),this.farcaster=new cr(this._privyInternal,t),this.farcasterV2=new lr(this._privyInternal,t),this.telegram=new wr(this._privyInternal,t)}async logout(e){try{let e=await this._privyInternal.session.getRefreshToken()??void 0;await this._privyInternal.fetch(se,{body:{refresh_token:e}})}catch{console.warn(`Error destroying session`)}await Promise.all([this._privyInternal.session.destroyLocalState({reason:`logout`}),this._privyInternal.destroyClientAnalyticsId(),e?.userId&&this._mfa.clearMfa({userId:e.userId})]),this._privyInternal.callbacks?.setUser?.(null)}},Er=class{_privyInternal;constructor(e){this._privyInternal=e}async initOnRampSession(e){return await this._privyInternal.fetch(r,{body:e})}async getStatus(e){return await this._privyInternal.fetch(i,{query:{partnerUserId:e}})}};const Dr={prod:{url:`https://api.moonpay.com/v1`,key:`pk_live_hirbpu0cVcLHrjktC9l7fbc9ctjv0SL`},sandbox:{url:`https://api.moonpay.com/v1`,key:`pk_test_fqWjXZMSFwloh7orvJsRfjiUHXJqFzI`}},Or=new Set([_.id,m.id,g.id,b.id,h.id,ct.id,v.id]),kr=new Set([_.id,m.id,y.id,g.id,b.id,h.id]);function Ar(e,t){switch(t){case`native-currency`:return Or.has(e);case`USDC`:return kr.has(e);default:return console.warn(`Unknown asset passed to MoonPay Onramp`),!1}}function jr(e,t){switch(e){case m.id:return t===`native-currency`?`ETH_ARBITRUM`:`USDC_ARBITRUM`;case h.id:return t===`native-currency`?`AVAX_CCHAIN`:`USDC_CCHAIN`;case g.id:return t===`native-currency`?`ETH_BASE`:`USDC_BASE`;case ct.id:return`CELO_CELO`;case b.id:return t===`native-currency`?`MATIC_POLYGON`:`USDC_POLYGON`;case v.id:return`MON_MON`;case _.id:return t===`native-currency`?`ETH_ETHEREUM`:`USDC_ETHEREUM`;default:return console.warn(`Chain ${e} not supported by Moonpay, defaulting to Ethereum mainnet`),`ETH_ETHEREUM`}}function Mr(e){switch(e){case`card`:case`payment-request`:return`credit_debit_card`;default:throw Error(`Unsupported Moonpay funding method ${e}`)}}var Nr=class{_privyInternal;constructor(e){this._privyInternal=e}async sign(e){return await this._privyInternal.fetch(ue,{body:e})}async getTransactionStatus({transactionId:e,useSandbox:t}){let{url:n,key:r}=Dr[t?`sandbox`:`prod`],i=await Dt(fetch,{retries:3,retryDelay:500})(`${n}/transactions/ext/${e}?apiKey=${r}`);if(!i.ok)throw new Vt({error:`Failed to fetch transaction status for Transaction ${e}`,code:`failed_to_fetch_moonpay_transaction_status`,response:i});let a=await i.json();return Array.isArray(a)?a.at(0):void 0}},Pr=class{moonpay;coinbase;constructor(e){this.moonpay=new Nr(e),this.coinbase=new Er(e)}},Fr=class{_privyInternal;constructor(e){this._privyInternal=e}async generateAuthenticationOptions(e){return await this._privyInternal.fetch(ce,{body:e})}},Ir=class{_privyInternal;constructor(e){this._privyInternal=e}async sendCode(e){return await this._privyInternal.fetch(le,{body:e})}},Lr=class{privyInternal;proxy;sms;passkey;constructor(e,t){this.proxy=t,this.privyInternal=e,this.sms=new Ir(e),this.passkey=new Fr(e)}setProxy(e){this.proxy=e}async getAccessTokenInternal(){let e=await this.privyInternal.getAccessTokenInternal();if(!e)throw new D({error:`Missing access token`,code:`attempted_rpc_call_before_logged_in`});return e}async verifyMfa(){if(!this.proxy)throw new D({error:`Embedded wallet proxy not initialized`,code:`embedded_wallet_webview_not_loaded`});return await this.proxy.verifyMfa({accessToken:await this.getAccessTokenInternal()})}async initEnrollMfa(e){if(!this.proxy)throw new D({error:`Embedded wallet proxy not initialized`,code:`embedded_wallet_webview_not_loaded`});return await this.proxy.initEnrollMfa({...e,accessToken:await this.getAccessTokenInternal()})}async submitEnrollMfa(e){if(!this.proxy)throw new D({error:`Embedded wallet proxy not initialized`,code:`embedded_wallet_webview_not_loaded`});let t=await this.proxy.submitEnrollMfa({...e,accessToken:await this.getAccessTokenInternal()}),n=await this.privyInternal.refreshSession();if(n.user.mfa_methods.length===0)try{await this.proxy.clearMfa({userId:n.user.id})}catch{}return t}async unenrollMfa(e){if(!this.proxy)throw new D({error:`Embedded wallet proxy not initialized`,code:`embedded_wallet_webview_not_loaded`});let t=await this.proxy.unenrollMfa({method:e,accessToken:await this.getAccessTokenInternal()}),n=await this.privyInternal.refreshSession();if(n.user.mfa_methods.length===0)try{await this.proxy.clearMfa({userId:n.user.id})}catch{}return t}async unlinkPasskey({credentialId:e,removeAsMfa:t}){if(!this.proxy)throw new D({error:`Embedded wallet proxy not initialized`,code:`embedded_wallet_webview_not_loaded`});await this.proxy.unlinkPasskey({credentialId:e,removeAsMfa:t,accessToken:await this.getAccessTokenInternal()});let n=await this.privyInternal.refreshSession();if(n.user.mfa_methods.length===0)try{await this.proxy.clearMfa({userId:n.user.id})}catch{}}async clearMfa(e){if(!this.proxy)throw new D({error:`Embedded wallet proxy not initialized`,code:`embedded_wallet_webview_not_loaded`});return await this.proxy.clearMfa(e)}},Rr=class{_privyInternal;constructor(e){this._privyInternal=e}async init(e){return this._privyInternal.fetch(Fe,{body:{client_type:e}})}async getICloudConfiguration(e){return this._privyInternal.fetch(je,{body:{client_type:e}})}},zr=class{_privyInternal;_storage;_crypto;constructor(e,t,n){this._privyInternal=e,this._storage=t,this._crypto=n}async generateURL(e){let t=pr(),n=mr(),r=await hr({codeVerifier:t,digest:this._crypto.digest});return await Promise.all([this._storage.put($,t),this._storage.put(Q,n)]),this._privyInternal.fetch(Pe,{body:{redirect_to:e,code_challenge:r,state_code:n}})}async authorize(e,t){let[n,r]=await Promise.all([this._storage.get($),this._storage.get(Q)]);if(r!==t)throw this._privyInternal.createAnalyticsEvent(`possible_phishing_attempt`,{flow:`recovery_oauth`,storedStateCode:r??``,returnedStateCode:t??``}),new D({code:`pkce_state_code_mismatch`,error:`Unexpected auth flow. This may be a phishing attempt.`});let i=await this._privyInternal.fetch(Ne,{body:{authorization_code:e,state_code:r,code_verifier:n}});return await Promise.all([this._storage.del($),this._storage.del(Q)]),i}},Br=class{_privyInternal;auth;icloudAuth;constructor(e,t,n){this._privyInternal=e,this.auth=new zr(this._privyInternal,t,n),this.icloudAuth=new Rr(this._privyInternal)}async getRecoveryKeyMaterial(e,t){return this._privyInternal.fetch(Me,{body:{chain_type:t},params:{address:e}})}},Vr=class{auth;user;embeddedWallet;recovery;mfa;app;mfaPromises;funding;delegated;crossApp;isMultiUserModeEnabled;_privyInternal;constructor({clientId:e,sessions:t,...n}){let r=Lt(n.crypto);this.isMultiUserModeEnabled=t?.mode===`multi-user`,this._privyInternal=new Xn({...n,appClientId:e,crypto:r,isMultiUserModeEnabled:this.isMultiUserModeEnabled}),this.mfa=new Lr(this._privyInternal),this.mfaPromises=new zn,this.app=new Rt(this._privyInternal),this.embeddedWallet=new Rn(this._privyInternal,n.embeddedWalletMessagePoster,n.supportedChains,this.mfa,this.mfaPromises,this.app),this.user=new Zn(this._privyInternal,this.embeddedWallet,t?.mode===`multi-user`),this.auth=new Tr(this._privyInternal,this.embeddedWallet,n.storage,r,this.mfa),this.recovery=new Br(this._privyInternal,n.storage,r),this.funding=new Pr(this._privyInternal),this.delegated=new Bt(this._privyInternal),this.crossApp=new zt(this._privyInternal,n.storage)}async initialize(){await this._privyInternal._initialize()}setMessagePoster(e){this.embeddedWallet.setMessagePoster(e)}addOAuthTokensListener(e){return this._privyInternal.session.on(`oauth_tokens_granted`,e),{unsubscribe:()=>{this._privyInternal.session.removeListener(`oauth_tokens_granted`,e)}}}setCallbacks(e){this._privyInternal.setCallbacks(e)}getAccessToken(){return this._privyInternal.getAccessToken()}getIdentityToken(){return this._privyInternal.getIdentityToken()}track({name:e,properties:t}){this._privyInternal.createAnalyticsEvent(e,t)}getCompiledPath(e,t){return this._privyInternal.getPath(e,t)}async fetchPrivyRoute(e,t){return this._privyInternal.fetch(e,t)}get logger(){return this._privyInternal.logger}},Hr=class{async get(e){let t=localStorage.getItem(e);return t===null?void 0:JSON.parse(t)}put(e,t){t===void 0?this.del(e):localStorage.setItem(e,JSON.stringify(t))}del(e){localStorage.removeItem(e)}getKeys(){return Object.entries(localStorage).map(([e])=>e)}},Ur=class{_cache={};get(e){return this._cache[e]}put(e,t){t===void 0?this.del(e):this._cache[e]=t}del(e){delete this._cache[e]}getKeys(){return Object.keys(this._cache)}};const Wr=e=>e?e.linked_accounts.filter(Qn).filter(Gr).sort((e,t)=>e.wallet_index-t.wallet_index):[],Gr=e=>e.chain_type===`bitcoin-segwit`||e.chain_type===`bitcoin-taproot`,Kr=(e,t)=>{if(!e)return null;if(t?.imported)return qr(t);let n=X(e)??nr(e);return n?qr(n):null},qr=e=>{if(e.chain_type===`ethereum`)return{entropyId:e.address,entropyIdVerifier:`ethereum-address-verifier`};if(e.chain_type===`solana`)return{entropyId:e.address,entropyIdVerifier:`solana-address-verifier`};throw Error(`Invalid embedded wallet account type`)},Jr=e=>e?.linked_accounts.find(e=>e.type===`smart_wallet`)??null,Yr=(e,t)=>Pt(String(e),t),Xr=e=>Ft(e,`US`)?.format(`E.164`)??e.replace(/[\s()-]/g,``),Zr=(e,t)=>`+${Mt(t)} ${e}`,Qr=e=>`*${e.replaceAll(`-`,``).slice(-4)}`,$r=e=>new At(e),ei=jt().map(e=>({code:e,callCode:Mt(e)})),ti=e=>{let t=Nt(e,kt)?.formatInternational();return t?.substring(t.indexOf(` `)+1)},ni=e=>{let t=new At;t.input(e);let n=t.getCountry()||`US`,r=t.getCallingCode()||`1`;return{countryCode:n,phone:e.replace(`+`+r,``)}},ri=(e,t=!0)=>e.reduce((e,n)=>({...e,[n]:t}),{}),ii={[_.id]:`0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48`,[ft.id]:`0x1c7D4B196Cb0C7B01d743Fbc6116a902379C7238`,[y.id]:`0x0b2c639c533813f4aa9d7837caf62653d097ff85`,[ut.id]:`0x5fd84259d66Cd46123540766Be93DFE6D43130D7`,[b.id]:`0x3c499c542cef5e3811e1192ce70d8cc03d5c3359`,[dt.id]:`0x41e94eb019c0762f9bfcf9fb1e58725bfb0e7582`,[g.id]:`0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913`,[st.id]:`0x036CbD53842c5426634e7929541eC2318f3dCF7e`,[h.id]:`0xB97EF9Ef8734C71904D8002F8b6Bc66Dd9c48a6E`,[ot.id]:`0x5425890298aed601595a70ab815c96711a31bc65`,[m.id]:`0xaf88d065e77c8cC2239327C5EDb3A432268e5831`,[at.id]:`0x75faf114eafb1BDbe2F0316DF893fd58CE46AA4d`},ai={"mainnet-beta":`EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v`,devnet:`4zMMC9srt5Ri5X14GAgXhaHii3GnPAEERYPJgZJDncDU`,testnet:``};function oi(e,t){return e===ii[t.id]}async function si(e,t){let n=`${e}-auto-${t===`ethereum`?`eth`:`sol`}`,r=new TextEncoder().encode(n),i=await crypto.subtle.digest(`SHA-256`,r);return Array.from(new Uint8Array(i)).map(e=>e.toString(16).padStart(2,`0`)).join(``)}const ci=new Set([_.id,g.id,y.id,b.id,m.id,h.id,v.id]),li=new Set([_.id,g.id,b.id,y.id,m.id,h.id,v.id]),ui={buy:`CARD`,send:`CRYPTO_ACCOUNT`},di={USDC:`2b92315d-eab7-5bef-84fa-089a131333f5`,ETH:`d85dce9b-5b73-5c3c-8978-522ce1d1c1b4`,BTC:`5b71fc48-3dd3-540c-809b-f8c94d0e68b5`,SOL:`4f039497-3af8-5bb3-951c-6df9afa9be1c`,POL:`026bcc1e-9163-591c-a709-34dd18b2e7a1`,MON:`92aa538f-b005-45cc-a237-71d6466f54d9`},fi={[_.id]:`ethereum`,[g.id]:`base`,[y.id]:`optimism`,[b.id]:`polygon`,[m.id]:`arbitrum`,[h.id]:`avacchain`,[v.id]:`monad`};function pi(e){return e.startsWith(`.`)?`0${e}`:e}function mi({appId:e,input:t,amount:n,blockchain:r,asset:i,experience:a}){let o=new URL(`https://pay.coinbase.com/buy/select-asset`);return o.searchParams.set(`appId`,t.app_id),o.searchParams.set(`sessionToken`,t.session_token),o.searchParams.set(`endPartnerName`,`privy:${e}`),o.searchParams.set(`defaultExperience`,a),o.searchParams.set(`presetCryptoAmount`,pi(n)),o.searchParams.set(`defaultNetwork`,r),o.searchParams.set(`defaultPaymentMethod`,ui[a]),o.searchParams.set(`defaultAsset`,di[i]),o.searchParams.set(`partnerUserId`,t.partner_user_id),{url:o}}const hi=(e,t)=>{switch(t){case`native-currency`:return ci.has(e);case`USDC`:return li.has(e);default:return console.warn(`Unknown asset passed to Coinbase Onramp`),!1}};function gi(e){return fi[e]}function _i(e,t){return t===`USDC`?`USDC`:e===b.id?`POL`:e===v.id?`MON`:`ETH`}var vi=class{cluster;_crypto;constructor(e,t){this.cluster=e,this._crypto=Lt(t)}async invokeRpc({method:e,params:t}){return await(await fetch(this.cluster.rpcUrl,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({jsonrpc:`2.0`,id:this._crypto.randomUUID(),method:e,params:t})})).json()}async getBalance(e){try{let t=await this.invokeRpc({method:`getBalance`,params:[e]});return t.error?null:BigInt(t.result.value)}catch{return null}}async getTokenAccountsByOwner(e,t){try{let n=await this.invokeRpc({method:`getTokenAccountsByOwner`,params:[e,{mint:t},{encoding:`jsonParsed`}]});if(n.error)return null;let r=n.result.value.at(0)?.account?.data?.parsed?.info?.tokenAmount;return r?{amount:BigInt(r.amount),decimals:r.decimals}:null}catch{return null}}async getAccountInfo(e){try{let t=await this.invokeRpc({method:`getAccountInfo`,params:[e,{encoding:`jsonParsed`}]});if(t.error)return null;let n=t.result.value?.data?.parsed?.info;return n?{decimals:n.decimals}:null}catch{return null}}};const yi=({address:e,nonce:t,domain:n,uri:r})=>`${n} wants you to sign in with your Solana account:
23
+ - https://privy.io`}var Or=class{_privyInternal;_embedded;constructor(e,t){this._privyInternal=e,this._embedded=t}async authenticate({telegramWebAppData:e,telegramAuthResult:t,captchaToken:n,mode:r=`login-or-sign-up`},i){let a=await this._privyInternal.fetchForLogin(Ke,{body:{telegram_web_app_data:e,telegram_auth_result:t,captcha_token:n,mode:r}});await this._privyInternal.session.updateWithTokensResponse(a);let o=await Z(this._embedded,a,i?.embedded);return this._privyInternal.callbacks?.setUser?.(o.user),o}async link({telegramWebAppData:e,telegramAuthResult:t,captchaToken:n}){await this._privyInternal.fetch(qe,{body:{telegram_web_app_data:e,telegram_auth_result:t,captcha_token:n}});let r=await this._privyInternal.refreshSession();return{user:r.user,identity_token:r.identity_token}}async unlink({telegramUserId:e}){await this._privyInternal.fetch(Je,{body:{telegram_user_id:e}});let t=await this._privyInternal.refreshSession();return{user:t.user,identity_token:t.identity_token}}},kr=class{_privyInternal;_mfa;customProvider;phone;email;oauth;siwe;siws;smartWallet;passkey;farcaster;farcasterV2;guest;telegram;constructor(e,t,n,r,i){this._privyInternal=e,this._mfa=i,this.customProvider=new ur(this._privyInternal,t),this.phone=new Sr(this._privyInternal,t),this.email=new dr(this._privyInternal,t),this.oauth=new br(this._privyInternal,t,n,r),this.guest=new mr(this._privyInternal,t),this.siwe=new Cr(this._privyInternal,t),this.siws=new Tr(this._privyInternal,t),this.smartWallet=new Er(this._privyInternal),this.passkey=new xr(this._privyInternal,t),this.farcaster=new fr(this._privyInternal,t),this.farcasterV2=new pr(this._privyInternal,t),this.telegram=new Or(this._privyInternal,t)}async logout(e){try{let e=await this._privyInternal.session.getRefreshToken()??void 0;await this._privyInternal.fetch(se,{body:{refresh_token:e}})}catch{console.warn(`Error destroying session`)}await Promise.all([this._privyInternal.session.destroyLocalState({reason:`logout`}),this._privyInternal.destroyClientAnalyticsId(),e?.userId&&this._mfa.clearMfa({userId:e.userId})]),this._privyInternal.callbacks?.setUser?.(null)}},Ar=class{_privyInternal;constructor(e){this._privyInternal=e}async initOnRampSession(e){return await this._privyInternal.fetch(r,{body:e})}async getStatus(e){return await this._privyInternal.fetch(i,{query:{partnerUserId:e}})}};const jr={prod:{url:`https://api.moonpay.com/v1`,key:`pk_live_hirbpu0cVcLHrjktC9l7fbc9ctjv0SL`},sandbox:{url:`https://api.moonpay.com/v1`,key:`pk_test_fqWjXZMSFwloh7orvJsRfjiUHXJqFzI`}},Mr=new Set([_.id,m.id,g.id,b.id,h.id,ct.id,v.id]),Nr=new Set([_.id,m.id,y.id,g.id,b.id,h.id]);function Pr(e,t){switch(t){case`native-currency`:return Mr.has(e);case`USDC`:return Nr.has(e);default:return console.warn(`Unknown asset passed to MoonPay Onramp`),!1}}function Fr(e,t){switch(e){case m.id:return t===`native-currency`?`ETH_ARBITRUM`:`USDC_ARBITRUM`;case h.id:return t===`native-currency`?`AVAX_CCHAIN`:`USDC_CCHAIN`;case g.id:return t===`native-currency`?`ETH_BASE`:`USDC_BASE`;case ct.id:return`CELO_CELO`;case b.id:return t===`native-currency`?`MATIC_POLYGON`:`USDC_POLYGON`;case v.id:return`MON_MON`;case _.id:return t===`native-currency`?`ETH_ETHEREUM`:`USDC_ETHEREUM`;default:return console.warn(`Chain ${e} not supported by Moonpay, defaulting to Ethereum mainnet`),`ETH_ETHEREUM`}}function Ir(e){switch(e){case`card`:case`payment-request`:return`credit_debit_card`;default:throw Error(`Unsupported Moonpay funding method ${e}`)}}var Lr=class{_privyInternal;constructor(e){this._privyInternal=e}async sign(e){return await this._privyInternal.fetch(ue,{body:e})}async getTransactionStatus({transactionId:e,useSandbox:t}){let{url:n,key:r}=jr[t?`sandbox`:`prod`],i=await Dt(fetch,{retries:3,retryDelay:500})(`${n}/transactions/ext/${e}?apiKey=${r}`);if(!i.ok)throw new Ht({error:`Failed to fetch transaction status for Transaction ${e}`,code:`failed_to_fetch_moonpay_transaction_status`,response:i});let a=await i.json();return Array.isArray(a)?a.at(0):void 0}},Rr=class{moonpay;coinbase;constructor(e){this.moonpay=new Lr(e),this.coinbase=new Ar(e)}},zr=class{_privyInternal;constructor(e){this._privyInternal=e}async generateAuthenticationOptions(e){return await this._privyInternal.fetch(ce,{body:e})}},Br=class{_privyInternal;constructor(e){this._privyInternal=e}async sendCode(e){return await this._privyInternal.fetch(le,{body:e})}},Vr=class{privyInternal;proxy;sms;passkey;constructor(e,t){this.proxy=t,this.privyInternal=e,this.sms=new Br(e),this.passkey=new zr(e)}setProxy(e){this.proxy=e}async getAccessTokenInternal(){let e=await this.privyInternal.getAccessTokenInternal();if(!e)throw new E({error:`Missing access token`,code:`attempted_rpc_call_before_logged_in`});return e}async verifyMfa(){if(!this.proxy)throw new E({error:`Embedded wallet proxy not initialized`,code:`embedded_wallet_webview_not_loaded`});return await this.proxy.verifyMfa({accessToken:await this.getAccessTokenInternal()})}async initEnrollMfa(e){if(!this.proxy)throw new E({error:`Embedded wallet proxy not initialized`,code:`embedded_wallet_webview_not_loaded`});return await this.proxy.initEnrollMfa({...e,accessToken:await this.getAccessTokenInternal()})}async submitEnrollMfa(e){if(!this.proxy)throw new E({error:`Embedded wallet proxy not initialized`,code:`embedded_wallet_webview_not_loaded`});let t=await this.proxy.submitEnrollMfa({...e,accessToken:await this.getAccessTokenInternal()}),n=await this.privyInternal.refreshSession();if(n.user.mfa_methods.length===0)try{await this.proxy.clearMfa({userId:n.user.id})}catch{}return t}async unenrollMfa(e){if(!this.proxy)throw new E({error:`Embedded wallet proxy not initialized`,code:`embedded_wallet_webview_not_loaded`});let t=await this.proxy.unenrollMfa({method:e,accessToken:await this.getAccessTokenInternal()}),n=await this.privyInternal.refreshSession();if(n.user.mfa_methods.length===0)try{await this.proxy.clearMfa({userId:n.user.id})}catch{}return t}async unlinkPasskey({credentialId:e,removeAsMfa:t}){if(!this.proxy)throw new E({error:`Embedded wallet proxy not initialized`,code:`embedded_wallet_webview_not_loaded`});await this.proxy.unlinkPasskey({credentialId:e,removeAsMfa:t,accessToken:await this.getAccessTokenInternal()});let n=await this.privyInternal.refreshSession();if(n.user.mfa_methods.length===0)try{await this.proxy.clearMfa({userId:n.user.id})}catch{}}async clearMfa(e){if(!this.proxy)throw new E({error:`Embedded wallet proxy not initialized`,code:`embedded_wallet_webview_not_loaded`});return await this.proxy.clearMfa(e)}},Hr=class{_privyInternal;constructor(e){this._privyInternal=e}async init(e){return this._privyInternal.fetch(Fe,{body:{client_type:e}})}async getICloudConfiguration(e){return this._privyInternal.fetch(je,{body:{client_type:e}})}},Ur=class{_privyInternal;_storage;_crypto;constructor(e,t,n){this._privyInternal=e,this._storage=t,this._crypto=n}async generateURL(e){let t=_r(),n=vr(),r=await yr({codeVerifier:t,digest:this._crypto.digest});return await Promise.all([this._storage.put($,t),this._storage.put(Q,n)]),this._privyInternal.fetch(Pe,{body:{redirect_to:e,code_challenge:r,state_code:n}})}async authorize(e,t){let[n,r]=await Promise.all([this._storage.get($),this._storage.get(Q)]);if(r!==t)throw this._privyInternal.createAnalyticsEvent(`possible_phishing_attempt`,{flow:`recovery_oauth`,storedStateCode:r??``,returnedStateCode:t??``}),new E({code:`pkce_state_code_mismatch`,error:`Unexpected auth flow. This may be a phishing attempt.`});let i=await this._privyInternal.fetch(Ne,{body:{authorization_code:e,state_code:r,code_verifier:n}});return await Promise.all([this._storage.del($),this._storage.del(Q)]),i}},Wr=class{_privyInternal;auth;icloudAuth;constructor(e,t,n){this._privyInternal=e,this.auth=new Ur(this._privyInternal,t,n),this.icloudAuth=new Hr(this._privyInternal)}async getRecoveryKeyMaterial(e,t){return this._privyInternal.fetch(Me,{body:{chain_type:t},params:{address:e}})}},Gr=class{auth;user;embeddedWallet;recovery;mfa;app;mfaPromises;funding;delegated;crossApp;isMultiUserModeEnabled;_privyInternal;constructor({clientId:e,sessions:t,...n}){let r=Rt(n.crypto);this.isMultiUserModeEnabled=t?.mode===`multi-user`,this._privyInternal=new tr({...n,appClientId:e,crypto:r,isMultiUserModeEnabled:this.isMultiUserModeEnabled}),this.mfa=new Vr(this._privyInternal),this.mfaPromises=new Hn,this.app=new zt(this._privyInternal),this.embeddedWallet=new Vn(this._privyInternal,n.embeddedWalletMessagePoster,n.supportedChains,this.mfa,this.mfaPromises,this.app),this.user=new nr(this._privyInternal,this.embeddedWallet,t?.mode===`multi-user`),this.auth=new kr(this._privyInternal,this.embeddedWallet,n.storage,r,this.mfa),this.recovery=new Wr(this._privyInternal,n.storage,r),this.funding=new Rr(this._privyInternal),this.delegated=new Vt(this._privyInternal),this.crossApp=new Bt(this._privyInternal,n.storage)}async initialize(){await this._privyInternal._initialize()}setMessagePoster(e){this.embeddedWallet.setMessagePoster(e)}addOAuthTokensListener(e){return this._privyInternal.session.on(`oauth_tokens_granted`,e),{unsubscribe:()=>{this._privyInternal.session.removeListener(`oauth_tokens_granted`,e)}}}setCallbacks(e){this._privyInternal.setCallbacks(e)}getAccessToken(){return this._privyInternal.getAccessToken()}getIdentityToken(){return this._privyInternal.getIdentityToken()}track({name:e,properties:t}){this._privyInternal.createAnalyticsEvent(e,t)}getCompiledPath(e,t){return this._privyInternal.getPath(e,t)}async fetchPrivyRoute(e,t){return this._privyInternal.fetch(e,t)}get logger(){return this._privyInternal.logger}},Kr=class{async get(e){let t=localStorage.getItem(e);return t===null?void 0:JSON.parse(t)}put(e,t){t===void 0?this.del(e):localStorage.setItem(e,JSON.stringify(t))}del(e){localStorage.removeItem(e)}getKeys(){return Object.entries(localStorage).map(([e])=>e)}},qr=class{_cache={};get(e){return this._cache[e]}put(e,t){t===void 0?this.del(e):this._cache[e]=t}del(e){delete this._cache[e]}getKeys(){return Object.keys(this._cache)}};const Jr=e=>e?e.linked_accounts.filter(Y).filter(Yr).sort((e,t)=>e.wallet_index-t.wallet_index):[],Yr=e=>e.chain_type===`bitcoin-segwit`||e.chain_type===`bitcoin-taproot`,Xr=(e,t)=>{if(!e)return null;if(t?.imported)return Zr(t);let n=X(e)??or(e);return n?Zr(n):null},Zr=e=>{if(e.chain_type===`ethereum`)return{entropyId:e.address,entropyIdVerifier:`ethereum-address-verifier`};if(e.chain_type===`solana`)return{entropyId:e.address,entropyIdVerifier:`solana-address-verifier`};throw Error(`Invalid embedded wallet account type`)},Qr=e=>e?.linked_accounts.find(e=>e.type===`smart_wallet`)??null,$r=(e,t)=>Ft(String(e),t),ei=e=>It(e,`US`)?.format(`E.164`)??e.replace(/[\s()-]/g,``),ti=(e,t)=>`+${Nt(t)} ${e}`,ni=e=>`*${e.replaceAll(`-`,``).slice(-4)}`,ri=e=>new jt(e),ii=Mt().map(e=>({code:e,callCode:Nt(e)})),ai=e=>{let t=Pt(e,At)?.formatInternational();return t?.substring(t.indexOf(` `)+1)},oi=e=>{let t=new jt;t.input(e);let n=t.getCountry()||`US`,r=t.getCallingCode()||`1`;return{countryCode:n,phone:e.replace(`+`+r,``)}},si=(e,t=!0)=>e.reduce((e,n)=>({...e,[n]:t}),{}),ci={[_.id]:`0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48`,[ft.id]:`0x1c7D4B196Cb0C7B01d743Fbc6116a902379C7238`,[y.id]:`0x0b2c639c533813f4aa9d7837caf62653d097ff85`,[ut.id]:`0x5fd84259d66Cd46123540766Be93DFE6D43130D7`,[b.id]:`0x3c499c542cef5e3811e1192ce70d8cc03d5c3359`,[dt.id]:`0x41e94eb019c0762f9bfcf9fb1e58725bfb0e7582`,[g.id]:`0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913`,[st.id]:`0x036CbD53842c5426634e7929541eC2318f3dCF7e`,[h.id]:`0xB97EF9Ef8734C71904D8002F8b6Bc66Dd9c48a6E`,[ot.id]:`0x5425890298aed601595a70ab815c96711a31bc65`,[m.id]:`0xaf88d065e77c8cC2239327C5EDb3A432268e5831`,[at.id]:`0x75faf114eafb1BDbe2F0316DF893fd58CE46AA4d`},li={"mainnet-beta":`EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v`,devnet:`4zMMC9srt5Ri5X14GAgXhaHii3GnPAEERYPJgZJDncDU`,testnet:``};function ui(e,t){return e===ci[t.id]}async function di(e,t){let n=`${e}-auto-${t===`ethereum`?`eth`:`sol`}`,r=new TextEncoder().encode(n),i=await crypto.subtle.digest(`SHA-256`,r);return Array.from(new Uint8Array(i)).map(e=>e.toString(16).padStart(2,`0`)).join(``)}const fi=new Set([_.id,g.id,y.id,b.id,m.id,h.id,v.id]),pi=new Set([_.id,g.id,b.id,y.id,m.id,h.id,v.id]),mi={buy:`CARD`,send:`CRYPTO_ACCOUNT`},hi={USDC:`2b92315d-eab7-5bef-84fa-089a131333f5`,ETH:`d85dce9b-5b73-5c3c-8978-522ce1d1c1b4`,BTC:`5b71fc48-3dd3-540c-809b-f8c94d0e68b5`,SOL:`4f039497-3af8-5bb3-951c-6df9afa9be1c`,POL:`026bcc1e-9163-591c-a709-34dd18b2e7a1`,MON:`92aa538f-b005-45cc-a237-71d6466f54d9`},gi={[_.id]:`ethereum`,[g.id]:`base`,[y.id]:`optimism`,[b.id]:`polygon`,[m.id]:`arbitrum`,[h.id]:`avacchain`,[v.id]:`monad`};function _i(e){return e.startsWith(`.`)?`0${e}`:e}function vi({appId:e,input:t,amount:n,blockchain:r,asset:i,experience:a}){let o=new URL(`https://pay.coinbase.com/buy/select-asset`);return o.searchParams.set(`appId`,t.app_id),o.searchParams.set(`sessionToken`,t.session_token),o.searchParams.set(`endPartnerName`,`privy:${e}`),o.searchParams.set(`defaultExperience`,a),o.searchParams.set(`presetCryptoAmount`,_i(n)),o.searchParams.set(`defaultNetwork`,r),o.searchParams.set(`defaultPaymentMethod`,mi[a]),o.searchParams.set(`defaultAsset`,hi[i]),o.searchParams.set(`partnerUserId`,t.partner_user_id),{url:o}}const yi=(e,t)=>{switch(t){case`native-currency`:return fi.has(e);case`USDC`:return pi.has(e);default:return console.warn(`Unknown asset passed to Coinbase Onramp`),!1}};function bi(e){return gi[e]}function xi(e,t){return t===`USDC`?`USDC`:e===b.id?`POL`:e===v.id?`MON`:`ETH`}var Si=class{cluster;_crypto;constructor(e,t){this.cluster=e,this._crypto=Rt(t)}async invokeRpc({method:e,params:t}){return await(await fetch(this.cluster.rpcUrl,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({jsonrpc:`2.0`,id:this._crypto.randomUUID(),method:e,params:t})})).json()}async getBalance(e){try{let t=await this.invokeRpc({method:`getBalance`,params:[e]});return t.error?null:BigInt(t.result.value)}catch{return null}}async getTokenAccountsByOwner(e,t){try{let n=await this.invokeRpc({method:`getTokenAccountsByOwner`,params:[e,{mint:t},{encoding:`jsonParsed`}]});if(n.error)return null;let r=n.result.value.at(0)?.account?.data?.parsed?.info?.tokenAmount;return r?{amount:BigInt(r.amount),decimals:r.decimals}:null}catch{return null}}async getAccountInfo(e){try{let t=await this.invokeRpc({method:`getAccountInfo`,params:[e,{encoding:`jsonParsed`}]});if(t.error)return null;let n=t.result.value?.data?.parsed?.info;return n?{decimals:n.decimals}:null}catch{return null}}};const Ci=({address:e,nonce:t,domain:n,uri:r})=>`${n} wants you to sign in with your Solana account:
24
24
  ${e}
25
25
 
26
26
  ${`You are proving you own ${e}.`}
@@ -31,5 +31,5 @@ Chain ID: mainnet
31
31
  Nonce: ${t}
32
32
  Issued At: ${new Date().toISOString()}
33
33
  Resources:
34
- - https://privy.io`;function bi({name:e,rpcUrl:t}){if(t)return t;switch(e){case`mainnet-beta`:return`https://api.mainnet-beta.solana.com`;case`testnet`:return`https://api.testnet.solana.com`;case`devnet`:return`https://api.devnet.solana.com`}}function xi({name:e}){switch(e){case`mainnet-beta`:return`EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v`;case`devnet`:return`4zMMC9srt5Ri5X14GAgXhaHii3GnPAEERYPJgZJDncDU`;default:throw Error(`USDC not supported on cluster ${e}`)}}function Si(e){switch(e){case`mainnet-beta`:return`Solana`;case`testnet`:return`Testnet`;case`devnet`:return`Devnet`}}const Ci=`solana offchain`,wi=1232;function Ti(e){let t=x.utf8.toBytes(e),n=new Uint8Array(32);return n.set(t.slice(0,32)),n}function Ei({message:e,signerPublicKey:t,domain:n}){let r=x.utf8.toBytes(e);if(t.length!==32)throw Error(`Signer public key must be 32 bytes`);let i=85+r.length;if(i>wi)throw Error(`Combined message length (${i}) exceeds maximum (${wi})`);let a=Ti(n),o=new Uint8Array(i),s=0;o[s]=255,s+=1;let c=x.utf8.toBytes(Ci);return o.set(c,s),s+=c.length,o[s]=0,s+=1,o.set(a,s),s+=32,o[s]=1,s+=1,o[s]=1,s+=1,o.set(t,s),s+=32,o[s]=r.length&255,o[s+1]=r.length>>8&255,s+=2,o.set(r,s),o}function Di(e){if(e.length<85)throw Error(`Message too short to contain a valid off-chain preamble`);let t=0;if(e[t]!==255)throw Error(`Invalid signing domain prefix`);if(t+=1,new TextDecoder().decode(e.slice(t,t+15))!==Ci)throw Error(`Invalid signing domain text`);t+=15;let n=e[t];t+=1;let r=e.slice(t,t+32);t+=32;let i=e[t];t+=1;let a=e[t];if(a!==1)throw Error(`Expected 1 signer, got ${a}`);t+=1;let o=e.slice(t,t+32);t+=32;let s=e[t]|e[t+1]<<8;if(t+=2,e.length<t+s)throw Error(`Message body is shorter than declared length`);return{version:n,applicationDomain:r,format:i,signerPublicKey:o,message:new TextDecoder().decode(e.slice(t,t+s))}}const Oi=[`privy`],ki=[`metamask`,`phantom`,`brave_wallet`,`rainbow`],Ai=[`coinbase_wallet`],ji=`metamask.trust.safe.rainbow.uniswap.zerion.argent.spot.omni.cryptocom.blockchain.safepal.bitget_wallet.zengo.1inch.binance.exodus.mew_wallet.alphawallet.keyring_pro.mathwallet.unstoppable.obvious.ambire.internet_money_wallet.coin98.abc_wallet.arculus_wallet.haha.cling_wallet.broearn.copiosa.burrito_wallet.enjin_wallet.plasma_wallet.avacus.bee.pitaka.pltwallet.minerva.kryptogo.prema.slingshot.kriptonio.timeless.secux.bitizen.blocto.safemoon`.split(`.`),Mi=[`unknown`],Ni=[...ki,...Ai,...ji,...Oi,...Mi],Pi=[`injected`,`wallet_connect`,`wallet_connect_v2`,`coinbase_wallet`,`embedded`];function Fi(e){return e?`${e.slice(0,5)}…${e.slice(-4)}`:``}function Ii({wei:e,precision:t=3}){return parseFloat(ht(e)).toFixed(t).replace(/0+$/,``).replace(/\.$/,``)}function Li({amount:e,decimals:t}){return gt(BigInt(e),t)}function Ri({lamports:e}){return gt(e,9)}const zi=e=>[...$n(e),...tr(e)],Bi=(e,t)=>e.imported?e:X(t)??nr(t),Vi=e=>async({address:t,chainType:n})=>{let{user:r}=await e.user.get();if(!r)throw new D({code:`delegated_actions_before_logged_in`,error:`Must be logged in to delegate wallets`});if(n!==`solana`&&n!==`ethereum`)throw new D({code:`unsupported_chain_type`,error:`Only Solana and Ethereum embedded wallets are supported for delegation and revocation.`});let i=zi(r).find(e=>e.chain_type===n&&e.address===t);if(!i)throw new D({code:`delegated_actions_wallet_not_found`,error:`Address to delegate is not associated with current user.`});if(O(i))throw new D({code:`unsupported_wallet_type`,error:`useDelegatedActions is only supported for on-device execution and this app uses TEE execution. Use the useSessionSigners hook to provision server side access on behalf of your users. Learn more https://docs.privy.io/recipes/tee-wallet-migration-guide`});if(i.delegated)return{user:r};let a=Bi(i,r);if(!a)throw new D({code:`delegated_actions_wallet_not_found`,error:`Address to delegate is not associated with current user.`});await e.embeddedWallet.delegateWallets({rootWallet:{address:a.address,chainType:a.chain_type,imported:a.imported},delegatedWallets:[{address:i.address,chainType:i.chain_type,walletIndex:i.wallet_index}]});let{user:o}=await e.user.get();return{user:o}},Hi=e=>async()=>{let{user:t}=await e.user.get();if(!t)throw new D({code:`delegated_actions_before_logged_in`,error:`Must be logged in to revoke delegated wallets`});let n=zi(t);if(n.some(O))throw new D({code:`unsupported_wallet_type`,error:`revokeWallets is only supported for on-device execution and this app uses TEE execution. Use the useSessionSigners hook to manage server side access on behalf of your users. Learn more https://docs.privy.io/recipes/tee-wallet-migration-guide`});if(n.every(e=>!e.delegated))throw new D({code:`delegated_actions_no_wallet_to_revoke`,error:`User has no delegated wallets to revoke.`});await e.delegated.revoke();let{user:r}=await e.user.get();return{user:r}};var Ui=w({delegateWallet:()=>Vi,revokeWallets:()=>Hi});const Wi=({client:e,openAuthSession:t})=>async({providerAppId:n,redirectUrl:r})=>{let i=`privy:${n}`,{url:a}=await e.auth.oauth.generateURL(i,r),o=await t(a,r),s=o.privy_oauth_state,c=o.privy_oauth_code;if(!s||!c)throw new D({code:`login_with_oauth_returned_with_invalid_credentials`,error:`Auth session oauth returned invalid credentials`});let l=await e.auth.oauth.loginWithCode(c,s,i),u=l.oauth_tokens;return u&&await e.crossApp.updateOnCrossAppAuthentication(n,u),l},Gi=({client:e,openAuthSession:t})=>async({providerAppId:n,redirectUrl:r})=>{let i=`privy:${n}`,{url:a}=await e.auth.oauth.generateURL(i,r),o=await t(a,r),s=o.privy_oauth_state,c=o.privy_oauth_code;if(!s||!c)throw new D({code:`login_with_oauth_returned_with_invalid_credentials`,error:`Auth session oauth returned invalid credentials`});let l=e.addOAuthTokensListener(t=>{e.crossApp.updateOnCrossAppAuthentication(n,t)}),{user:u}=await e.auth.oauth.linkWithCode(c,s,i);return l.unsubscribe(),u};function Ki(e,t){return e.linked_accounts.filter(e=>e.type===`cross_app`).flatMap(e=>e.smart_wallets).some(e=>e.address===t)}const qi=(e,t)=>e.linked_accounts.filter(e=>e.type===`cross_app`).find(({embedded_wallets:e,smart_wallets:n})=>[...e,...n].some(e=>e.address===t)),Ji=({client:e,openAuthSession:t})=>{let n=Gi({client:e,openAuthSession:t});return async({providerAppId:t,redirectUrl:r})=>await e.crossApp.getProviderAccessToken(t)||(await n({providerAppId:t,redirectUrl:r}),await e.crossApp.getProviderAccessToken(t))},Yi=({client:e,openAuthSession:t})=>{let n=Ji({client:e,openAuthSession:t});return async({user:r,request:i,redirectUrl:a,address:o})=>{let s=qi(r,o);if(!s)throw new D({code:`cross_app_invalid_wallet`,error:`Cannot operate with this wallet address`});let c=s.provider_app_id,{connections:l}=await e.crossApp.getCrossAppConnections(),u=l.find(e=>e.provider_app_id===c);if(!u)throw new D({code:`cross_app_invalid_app`,error:`Invalid connected app`});if(u.read_only)throw new D({code:`cross_app_read_only`,error:`Cannot transact against a read-only provider app`});let ee=await n({providerAppId:c,redirectUrl:a});if(!ee)throw new D({code:`cross_app_request_error`,error:`Wallet operations require a valid token`});let te={content:{request:{request:i}},timestamp:Date.now(),callbackUrl:a},d=new URL(`${u.provider_app_custom_api_url}/oauth/transact`);d.searchParams.set(`communicationMode`,`redirect`),d.searchParams.set(`token`,ee),d.searchParams.set(`request`,JSON.stringify(te));let{privy_cross_app_type:f,privy_cross_app_payload:p}=await t(d.href,a);if(!f||!p)throw new D({code:`cross_app_request_error`,error:`Cross app request returned an invalid result`});if(f===`PRIVY_CROSS_APP_ACTION_ERROR`)throw new D({code:`cross_app_request_error`,error:p});if(f!==`PRIVY_CROSS_APP_ACTION_RESPONSE`)throw new D({code:`cross_app_request_error`,error:`Cross app request returned an invalid result`});return{result:p}}};function Xi(e){if(!e)throw new D({code:`attempted_cross_app_request_before_logged_in`,error:`Must be logged in to sign messages with a cross-app wallet`})}const Zi=({client:e,openAuthSession:t})=>{let n=Yi({client:e,openAuthSession:t});return async({user:e,address:t,message:r,redirectUrl:i})=>{Xi(e);let a={method:Ki(e,t)?`privy_signSmartWalletMessage`:`personal_sign`,params:[r,t]},{result:o}=await n({user:e,request:a,address:t,redirectUrl:i});return{signature:o}}};function Qi(e){let t={name:`string`,version:`string`,chainId:`uint256`,verifyingContract:`address`,salt:`bytes32`},n=e.types.EIP712Domain??Object.entries(e.domain??{}).map(([e,n])=>{if(n!=null&&typeof e==`string`&&e in t)return{name:e,type:t[e]}}).filter(e=>!!e),r={...e.types};return r.EIP712Domain=n,{...e,types:r}}const $i=({client:e,openAuthSession:t})=>{let n=Yi({client:e,openAuthSession:t});return async({user:e,typedData:t,address:r,redirectUrl:i})=>{Xi(e);let a={method:Ki(e,r)?`privy_signSmartWalletTypedData`:`eth_signTypedData_v4`,params:[r,Qi(t)]},{result:o}=await n({user:e,request:a,address:r,redirectUrl:i});return{signature:o}}},ea=({client:e,openAuthSession:t})=>{let n=Yi({client:e,openAuthSession:t});return async({user:e,transaction:t,address:r,redirectUrl:i})=>{Xi(e);let a={method:Ki(e,r)?`privy_sendSmartWalletTx`:`eth_sendTransaction`,params:[t]},{result:o}=await n({user:e,request:a,address:r,redirectUrl:i});return{transactionHash:o}}};var ta=w({sendTransaction:()=>ea,signMessage:()=>Zi,signTypedData:()=>$i}),na=w({linkWithCrossAppAuth:()=>Gi,loginWithCrossAppAuth:()=>Wi,wallet:()=>ta});function ra(e){if(e.startsWith(`eip155:`))return`ethereum`;if(e.startsWith(`solana:`))return`solana`;if(e.startsWith(`bip122:`))return`bitcoin-segwit`;if(e.startsWith(`tron:`))return`tron`}function ia(e,t){let n=ra(e);if(!n)return;let r=t.linked_accounts.find(e=>e.type===`wallet`&&e.chain_type===n&&`address`in e&&e.address);return r&&`address`in r?r.address:void 0}async function aa(e){let{user:t}=await e.privy.user.get();if(!t)return{ok:!1,error:`NOT_AUTHENTICATED`};let n=ia(e.caip2,t);if(n)return{ok:!0,address:n};let r=ra(e.caip2);if(!r)return{ok:!1,error:`UNSUPPORTED_CHAIN`};try{let t=await e.privy.fetchPrivyRoute(Ye,{body:{chain_type:r}});return await e.onWalletCreated?.(),{ok:!0,address:t.address}}catch{return{ok:!1,error:`REFUND_WALLET_CREATION_FAILED`}}}async function oa(e){let{user:t}=await e.privy.user.get();if(!t)throw Error(`NOT_AUTHENTICATED`);let n=e.refundAddress;if(!n){let t=await aa({privy:e.privy,caip2:e.sourceChain,onWalletCreated:e.onWalletCreated});if(!t.ok)throw Error(t.error);n=t.address}return await e.privy.fetchPrivyRoute(a,{body:{source_chain:e.sourceChain,source_currency:e.sourceCurrency,destination_chain:e.destinationChain,destination_currency:e.destinationCurrency,destination_address:e.destinationAddress,refund_address:n,...e.slippageBps==null?{}:{slippage_bps:e.slippageBps}}})}function sa(e){return new Promise(t=>{setTimeout(()=>{t()},e)})}const ca=async({operation:e,until:t,delay:n,interval:r,attempts:i,signal:a})=>{n&&await sa(n);let o=0,s,c;for(;o<i;){if(a?.aborted)return{status:`aborted`,result:s,attempts:o,error:c};o++;try{if(c=void 0,s=await e(),t(s))return{status:`success`,result:s,attempts:o};o<i&&await sa(r)}catch(e){e instanceof Error&&(c=e),o<i&&await sa(r)}}return{status:`max_attempts`,result:s,attempts:o,error:c}},la=2e3,ua=1800*1e3;function da(e,t){return Math.ceil(t/e)}function fa(e){return e.status===`success`?e.result?{status:`success`,order:e.result}:{status:`timeout`}:e.status===`aborted`?{status:`aborted`,error:e.error}:{status:`timeout`,error:e.error}}async function pa(e){return await e.privy.fetchPrivyRoute(ne,{params:{order_id:e.orderId}})}async function ma(e){let t=e.pollIntervalMs??la,n=e.timeoutMs??ua,r=e.signal??new AbortController().signal;return fa(await ca({operation:async()=>{let t=await e.privy.fetchPrivyRoute(ie,{params:{deposit_address_id:e.depositAddressId},query:{after:e.quoteCreatedAt}});if(t.order)return await e.privy.fetchPrivyRoute(ne,{params:{order_id:t.order.id}})},until:e=>e!==void 0,delay:t,interval:t,attempts:da(t,n),signal:r}))}async function ha(e){let t=e.pollIntervalMs??la,n=e.timeoutMs??ua,r=e.signal??new AbortController().signal;return fa(await ca({operation:()=>e.privy.fetchPrivyRoute(ne,{params:{order_id:e.orderId}}),until:e=>e.status!==`executing`,delay:t,interval:t,attempts:da(t,n),signal:r}))}var ga=w({generateDepositAddress:()=>oa,getConfig:()=>_a,getDeposit:()=>pa,resolveRefundAddress:()=>aa,waitForCompletion:()=>ha,waitForDeposit:()=>ma});async function _a(e){let t=await e.fetchPrivyRoute(re,{});return{currencies:t.currencies,chains:t.chains}}async function va(e,t,{wallet_id:n,...r}){let i=e.getCompiledPath(Ze,{params:{wallet_id:n}}),a=String(Date.now()+nn),{signature:o}=await I(t,{version:1,url:i,method:Ze.method,headers:{"privy-app-id":e.app.appId,[L]:a},body:{...r}});if(Date.now()>Number(a))throw new D({error:`Wallet request expired before it could be sent. Please try again.`,code:`embedded_wallet_request_expired`});return await e.fetchPrivyRoute(Ze,{body:r,params:{wallet_id:n},headers:{"privy-authorization-signature":o,[L]:a}})}async function ya(e,{wallet_id:t}){return await e.fetchPrivyRoute(Xe,{params:{wallet_id:t}})}async function ba(e,{wallet_id:t},n,r){let{signature:i}=await I(n,{version:1,url:e.getCompiledPath($e,{params:{wallet_id:t}}),method:$e.method,headers:{"privy-app-id":e.app.appId},body:r});return await e.fetchPrivyRoute($e,{params:{wallet_id:t},body:r,headers:{"privy-authorization-signature":i}})}async function xa({client:e,wallet:t,signers:n}){if(t.chain_type!==`ethereum`&&t.chain_type!==`solana`)throw Error(`Session signers are only supported for Ethereum and Solana wallets`);if(O(t)){if(n.length===0)throw Error(`Must specify at least one signer to add.`);let r={wallet_id:t.id},i=await ya(e,r);await ba(e,r,wa(e),{additional_signers:i.additional_signers.concat(n)})}else{if(t.delegated)return Ca(e);if(n.length>0)throw Error(`Specifying signers in addSessionSigners is only supported for TEE execution and this app uses On-device execution. Pass an empty array for signers instead. Learn more https://docs.privy.io/recipes/tee-wallet-migration-guide`);let{user:r}=await e.user.get(),i=Bi(t,r);if(!i)throw Error(`Unable to determine root address for delegated address.`);await e.embeddedWallet.delegateWallets({rootWallet:{address:i.address,chainType:i.chain_type,imported:i.imported??!1},delegatedWallets:[{address:t.address,chainType:t.chain_type,walletIndex:t.wallet_index}]})}return Ca(e)}async function Sa({client:e,wallet:t}){return O(t)?await ba(e,{wallet_id:t.id},wa(e),{additional_signers:[]}):await e.delegated.revoke(),Ca(e)}async function Ca(e){let{user:t}=await e.user.get();if(!t)throw Error(`Could not refresh user`);return{user:t}}function wa(e){return(...t)=>e.embeddedWallet.signWithUserSigner(...t)}var Ta=class{#e;#t;get standardWallet(){return this.#e}get address(){return this.#t.address}constructor({wallet:e,account:t}){this.#e=e,this.#t=t}async disconnect(){if(!this.#e.features[`standard:disconnect`]?.disconnect)throw Error(`Wallet does not support disconnect`);await this.#e.features[`standard:disconnect`].disconnect()}async signMessage(...e){if(!this.#e.features[`solana:signMessage`]?.signMessage)throw Error(`Wallet does not support signMessage`);let t=await this.#e.features[`solana:signMessage`].signMessage(...e.map(e=>({...e,account:this.#t})));return e.length===1?t[0]:[...t]}async signTransaction(...e){if(!this.#e.features[`solana:signTransaction`]?.signTransaction)throw Error(`Wallet does not support signTransaction`);let t=await this.#e.features[`solana:signTransaction`].signTransaction(...e.map(e=>({...e,account:this.#t})));return e.length===1?t[0]:[...t]}async signAndSendTransaction(...e){if(!this.#e.features[`solana:signAndSendTransaction`]?.signAndSendTransaction)throw Error(`Wallet does not support signAndSendTransaction`);let t=await this.#e.features[`solana:signAndSendTransaction`].signAndSendTransaction(...e.map(e=>({...e,account:this.#t})));return e.length===1?t[0]:[...t]}async signAndSendAllTransactions(e){if(!this.#e.features[`solana:signAndSendTransaction`]?.signAndSendTransaction)throw Error(`Wallet does not support signAndSendTransaction`);return[...await this.#e.features[`solana:signAndSendTransaction`].signAndSendTransaction(...e.map(e=>({...e,account:this.#t})))]}};const Ea=`biconomy`,Da=`coinbase_smart_wallet`,Oa=`kernel`,ka=`light_account`,Aa=`safe`,ja=`thirdweb`,Ma=`nexus`;var Na=Vr;export{Ni as ALL_WALLET_CLIENT_TYPES,Ea as BICONOMY,Da as COINBASE_SMART_WALLET,Ta as ConnectedStandardSolanaWallet,A as EmbeddedProviderError,Ur as InMemoryCache,Oa as KERNEL,ka as LIGHT_ACCOUNT,Hr as LocalStorage,Vt as MoonpayApiError,Ma as NEXUS,E as PrivyApiError,D as PrivyClientError,Yt as PrivyConnectorError,Kt as PrivyEmbeddedWalletErrorCode,en as PrivyProviderRpcError,j as ProviderErrors,Aa as SAFE,Pi as SUPPORTED_CONNECTOR_TYPES,vi as SolanaClient,ai as SolanaUsdcAddressMap,ja as THIRDWEB,ii as UsdcAddressMap,xa as addSessionSigners,Ei as buildSolanaOffchainMessage,jr as chainToMoonpayCurrency,ei as countryCodesAndNumbers,In as create,Ut as createErrorFormatter,yi as createSiwsMessage,na as crossApp,Na as default,Ui as delegatedActions,ga as depositAddress,Ti as deriveSolanaApplicationDomain,Qt as errorIndicatesMaxMfaRetries,Wt as errorIndicatesMfaCanceled,$t as errorIndicatesMfaRateLimit,Xt as errorIndicatesMfaTimeout,Zt as errorIndicatesMfaVerificationFailed,N as errorIndicatesRecoveryIsNeeded,Ri as formatLamportsAmount,Zr as formatPhoneNumber,Li as formatTokenAmount,Fi as formatWalletAddress,Ii as formatWeiAmount,Mr as fundingMethodToMoonpayPaymentMethod,I as generateAuthorizationSignature,si as generateWalletIdempotencyKey,Wr as getAllUserEmbeddedBitcoinWallets,$n as getAllUserEmbeddedEthereumWallets,tr as getAllUserEmbeddedSolanaWallets,mi as getCoinbaseOnRampUrl,Mt as getCountryCallingCode,qr as getEntropyDetailsFromAccount,Kr as getEntropyDetailsFromUser,oi as getIsTokenUsdc,bn as getJsonRpcEndpointFromChain,ni as getPhoneCountryCodeAndNumber,ti as getPlaceholderPhoneNumber,Si as getSolanaClusterDisplayName,bi as getSolanaRpcEndpointForCluster,xi as getSolanaUsdcMintAddressForCluster,X as getUserEmbeddedEthereumWallet,nr as getUserEmbeddedSolanaWallet,er as getUserEmbeddedWallet,Jr as getUserSmartWallet,ya as getWallet,Qn as isEmbeddedWalletAccount,hi as isSupportedChainIdForCoinbaseOnramp,Ar as isSupportedChainIdForMoonpay,O as isUnifiedWallet,Qr as lastFourDigits,Di as parseSolanaOffchainMessage,$r as phoneNumberTypingFormatter,ca as poll,va as rawSign,Sa as removeSessionSigners,R as rpc,xn as throwIfInvalidRecoveryUpgradePath,_i as toCoinbaseAssetId,gi as toCoinbaseBlockchainFromChainId,Xr as toE164,ri as toObjectKeys,rn as toWalletApiUnsignedEthTransaction,ba as updateWallet,Yr as validatePhoneNumber};
34
+ - https://privy.io`;function wi({name:e,rpcUrl:t}){if(t)return t;switch(e){case`mainnet-beta`:return`https://api.mainnet-beta.solana.com`;case`testnet`:return`https://api.testnet.solana.com`;case`devnet`:return`https://api.devnet.solana.com`}}function Ti({name:e}){switch(e){case`mainnet-beta`:return`EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v`;case`devnet`:return`4zMMC9srt5Ri5X14GAgXhaHii3GnPAEERYPJgZJDncDU`;default:throw Error(`USDC not supported on cluster ${e}`)}}function Ei(e){switch(e){case`mainnet-beta`:return`Solana`;case`testnet`:return`Testnet`;case`devnet`:return`Devnet`}}const Di=`solana offchain`,Oi=1232;function ki(e){let t=x.utf8.toBytes(e),n=new Uint8Array(32);return n.set(t.slice(0,32)),n}function Ai({message:e,signerPublicKey:t,domain:n}){let r=x.utf8.toBytes(e);if(t.length!==32)throw Error(`Signer public key must be 32 bytes`);let i=85+r.length;if(i>Oi)throw Error(`Combined message length (${i}) exceeds maximum (${Oi})`);let a=ki(n),o=new Uint8Array(i),s=0;o[s]=255,s+=1;let c=x.utf8.toBytes(Di);return o.set(c,s),s+=c.length,o[s]=0,s+=1,o.set(a,s),s+=32,o[s]=1,s+=1,o[s]=1,s+=1,o.set(t,s),s+=32,o[s]=r.length&255,o[s+1]=r.length>>8&255,s+=2,o.set(r,s),o}function ji(e){if(e.length<85)throw Error(`Message too short to contain a valid off-chain preamble`);let t=0;if(e[t]!==255)throw Error(`Invalid signing domain prefix`);if(t+=1,new TextDecoder().decode(e.slice(t,t+15))!==Di)throw Error(`Invalid signing domain text`);t+=15;let n=e[t];t+=1;let r=e.slice(t,t+32);t+=32;let i=e[t];t+=1;let a=e[t];if(a!==1)throw Error(`Expected 1 signer, got ${a}`);t+=1;let o=e.slice(t,t+32);t+=32;let s=e[t]|e[t+1]<<8;if(t+=2,e.length<t+s)throw Error(`Message body is shorter than declared length`);return{version:n,applicationDomain:r,format:i,signerPublicKey:o,message:new TextDecoder().decode(e.slice(t,t+s))}}const Mi=[`privy`],Ni=[`metamask`,`phantom`,`brave_wallet`,`rainbow`],Pi=[`coinbase_wallet`],Fi=`metamask.trust.safe.rainbow.uniswap.zerion.argent.spot.omni.cryptocom.blockchain.safepal.bitget_wallet.zengo.1inch.binance.exodus.mew_wallet.alphawallet.keyring_pro.mathwallet.unstoppable.obvious.ambire.internet_money_wallet.coin98.abc_wallet.arculus_wallet.haha.cling_wallet.broearn.copiosa.burrito_wallet.enjin_wallet.plasma_wallet.avacus.bee.pitaka.pltwallet.minerva.kryptogo.prema.slingshot.kriptonio.timeless.secux.bitizen.blocto.safemoon`.split(`.`),Ii=[`unknown`],Li=[...Ni,...Pi,...Fi,...Mi,...Ii],Ri=[`injected`,`wallet_connect`,`wallet_connect_v2`,`coinbase_wallet`,`embedded`];function zi(e){return e?`${e.slice(0,5)}…${e.slice(-4)}`:``}function Bi({wei:e,precision:t=3}){return parseFloat(ht(e)).toFixed(t).replace(/0+$/,``).replace(/\.$/,``)}function Vi({amount:e,decimals:t}){return gt(BigInt(e),t)}function Hi({lamports:e}){return gt(e,9)}const Ui=e=>[...rr(e),...ar(e)],Wi=(e,t)=>e.imported?e:X(t)??or(t),Gi=e=>async({address:t,chainType:n})=>{let{user:r}=await e.user.get();if(!r)throw new E({code:`delegated_actions_before_logged_in`,error:`Must be logged in to delegate wallets`});if(n!==`solana`&&n!==`ethereum`)throw new E({code:`unsupported_chain_type`,error:`Only Solana and Ethereum embedded wallets are supported for delegation and revocation.`});let i=Ui(r).find(e=>e.chain_type===n&&e.address===t);if(!i)throw new E({code:`delegated_actions_wallet_not_found`,error:`Address to delegate is not associated with current user.`});if(D(i))throw new E({code:`unsupported_wallet_type`,error:`useDelegatedActions is only supported for on-device execution and this app uses TEE execution. Use the useSessionSigners hook to provision server side access on behalf of your users. Learn more https://docs.privy.io/recipes/tee-wallet-migration-guide`});if(i.delegated)return{user:r};let a=Wi(i,r);if(!a)throw new E({code:`delegated_actions_wallet_not_found`,error:`Address to delegate is not associated with current user.`});await e.embeddedWallet.delegateWallets({rootWallet:{address:a.address,chainType:a.chain_type,imported:a.imported},delegatedWallets:[{address:i.address,chainType:i.chain_type,walletIndex:i.wallet_index}]});let{user:o}=await e.user.get();return{user:o}},Ki=e=>async()=>{let{user:t}=await e.user.get();if(!t)throw new E({code:`delegated_actions_before_logged_in`,error:`Must be logged in to revoke delegated wallets`});let n=Ui(t);if(n.some(D))throw new E({code:`unsupported_wallet_type`,error:`revokeWallets is only supported for on-device execution and this app uses TEE execution. Use the useSessionSigners hook to manage server side access on behalf of your users. Learn more https://docs.privy.io/recipes/tee-wallet-migration-guide`});if(n.every(e=>!e.delegated))throw new E({code:`delegated_actions_no_wallet_to_revoke`,error:`User has no delegated wallets to revoke.`});await e.delegated.revoke();let{user:r}=await e.user.get();return{user:r}};var qi=C({delegateWallet:()=>Gi,revokeWallets:()=>Ki});const Ji=({client:e,openAuthSession:t})=>async({providerAppId:n,redirectUrl:r})=>{let i=`privy:${n}`,{url:a}=await e.auth.oauth.generateURL(i,r),o=await t(a,r),s=o.privy_oauth_state,c=o.privy_oauth_code;if(!s||!c)throw new E({code:`login_with_oauth_returned_with_invalid_credentials`,error:`Auth session oauth returned invalid credentials`});let l=await e.auth.oauth.loginWithCode(c,s,i),u=l.oauth_tokens;return u&&await e.crossApp.updateOnCrossAppAuthentication(n,u),l},Yi=({client:e,openAuthSession:t})=>async({providerAppId:n,redirectUrl:r})=>{let i=`privy:${n}`,{url:a}=await e.auth.oauth.generateURL(i,r),o=await t(a,r),s=o.privy_oauth_state,c=o.privy_oauth_code;if(!s||!c)throw new E({code:`login_with_oauth_returned_with_invalid_credentials`,error:`Auth session oauth returned invalid credentials`});let l=e.addOAuthTokensListener(t=>{e.crossApp.updateOnCrossAppAuthentication(n,t)}),{user:u}=await e.auth.oauth.linkWithCode(c,s,i);return l.unsubscribe(),u};function Xi(e,t){return e.linked_accounts.filter(e=>e.type===`cross_app`).flatMap(e=>e.smart_wallets).some(e=>e.address===t)}const Zi=(e,t)=>e.linked_accounts.filter(e=>e.type===`cross_app`).find(({embedded_wallets:e,smart_wallets:n})=>[...e,...n].some(e=>e.address===t)),Qi=({client:e,openAuthSession:t})=>{let n=Yi({client:e,openAuthSession:t});return async({providerAppId:t,redirectUrl:r})=>await e.crossApp.getProviderAccessToken(t)||(await n({providerAppId:t,redirectUrl:r}),await e.crossApp.getProviderAccessToken(t))},$i=({client:e,openAuthSession:t})=>{let n=Qi({client:e,openAuthSession:t});return async({user:r,request:i,redirectUrl:a,address:o})=>{let s=Zi(r,o);if(!s)throw new E({code:`cross_app_invalid_wallet`,error:`Cannot operate with this wallet address`});let c=s.provider_app_id,{connections:l}=await e.crossApp.getCrossAppConnections(),u=l.find(e=>e.provider_app_id===c);if(!u)throw new E({code:`cross_app_invalid_app`,error:`Invalid connected app`});if(u.read_only)throw new E({code:`cross_app_read_only`,error:`Cannot transact against a read-only provider app`});let ee=await n({providerAppId:c,redirectUrl:a});if(!ee)throw new E({code:`cross_app_request_error`,error:`Wallet operations require a valid token`});let te={content:{request:{request:i}},timestamp:Date.now(),callbackUrl:a},d=new URL(`${u.provider_app_custom_api_url}/oauth/transact`);d.searchParams.set(`communicationMode`,`redirect`),d.searchParams.set(`token`,ee),d.searchParams.set(`request`,JSON.stringify(te));let{privy_cross_app_type:f,privy_cross_app_payload:p}=await t(d.href,a);if(!f||!p)throw new E({code:`cross_app_request_error`,error:`Cross app request returned an invalid result`});if(f===`PRIVY_CROSS_APP_ACTION_ERROR`)throw new E({code:`cross_app_request_error`,error:p});if(f!==`PRIVY_CROSS_APP_ACTION_RESPONSE`)throw new E({code:`cross_app_request_error`,error:`Cross app request returned an invalid result`});return{result:p}}};function ea(e){if(!e)throw new E({code:`attempted_cross_app_request_before_logged_in`,error:`Must be logged in to sign messages with a cross-app wallet`})}const ta=({client:e,openAuthSession:t})=>{let n=$i({client:e,openAuthSession:t});return async({user:e,address:t,message:r,redirectUrl:i})=>{ea(e);let a={method:Xi(e,t)?`privy_signSmartWalletMessage`:`personal_sign`,params:[r,t]},{result:o}=await n({user:e,request:a,address:t,redirectUrl:i});return{signature:o}}};function na(e){let t={name:`string`,version:`string`,chainId:`uint256`,verifyingContract:`address`,salt:`bytes32`},n=e.types.EIP712Domain??Object.entries(e.domain??{}).map(([e,n])=>{if(n!=null&&typeof e==`string`&&e in t)return{name:e,type:t[e]}}).filter(e=>!!e),r={...e.types};return r.EIP712Domain=n,{...e,types:r}}const ra=({client:e,openAuthSession:t})=>{let n=$i({client:e,openAuthSession:t});return async({user:e,typedData:t,address:r,redirectUrl:i})=>{ea(e);let a={method:Xi(e,r)?`privy_signSmartWalletTypedData`:`eth_signTypedData_v4`,params:[r,na(t)]},{result:o}=await n({user:e,request:a,address:r,redirectUrl:i});return{signature:o}}},ia=({client:e,openAuthSession:t})=>{let n=$i({client:e,openAuthSession:t});return async({user:e,transaction:t,address:r,redirectUrl:i})=>{ea(e);let a={method:Xi(e,r)?`privy_sendSmartWalletTx`:`eth_sendTransaction`,params:[t]},{result:o}=await n({user:e,request:a,address:r,redirectUrl:i});return{transactionHash:o}}};var aa=C({sendTransaction:()=>ia,signMessage:()=>ta,signTypedData:()=>ra}),oa=C({linkWithCrossAppAuth:()=>Yi,loginWithCrossAppAuth:()=>Ji,wallet:()=>aa});function sa(e){if(e.startsWith(`eip155:`))return`ethereum`;if(e.startsWith(`solana:`))return`solana`;if(e.startsWith(`bip122:`))return`bitcoin-segwit`;if(e.startsWith(`tron:`))return`tron`}function ca(e,t){let n=sa(e);if(!n)return;let r=t.linked_accounts.find(e=>e.type===`wallet`&&e.chain_type===n&&`address`in e&&e.address);return r&&`address`in r?r.address:void 0}async function la(e){let{user:t}=await e.privy.user.get();if(!t)return{ok:!1,error:`NOT_AUTHENTICATED`};let n=ca(e.caip2,t);if(n)return{ok:!0,address:n};let r=sa(e.caip2);if(!r)return{ok:!1,error:`UNSUPPORTED_CHAIN`};try{let t=await e.privy.fetchPrivyRoute(Ye,{body:{chain_type:r}});return await e.onWalletCreated?.(),{ok:!0,address:t.address}}catch{return{ok:!1,error:`REFUND_WALLET_CREATION_FAILED`}}}async function ua(e){let{user:t}=await e.privy.user.get();if(!t)throw Error(`NOT_AUTHENTICATED`);let n=e.refundAddress;if(!n){let t=await la({privy:e.privy,caip2:e.sourceChain,onWalletCreated:e.onWalletCreated});if(!t.ok)throw Error(t.error);n=t.address}return await e.privy.fetchPrivyRoute(a,{body:{source_chain:e.sourceChain,source_currency:e.sourceCurrency,destination_chain:e.destinationChain,destination_currency:e.destinationCurrency,destination_address:e.destinationAddress,refund_address:n,...e.slippageBps==null?{}:{slippage_bps:e.slippageBps}}})}function da(e){return new Promise(t=>{setTimeout(()=>{t()},e)})}const fa=async({operation:e,until:t,delay:n,interval:r,attempts:i,signal:a})=>{n&&await da(n);let o=0,s,c;for(;o<i;){if(a?.aborted)return{status:`aborted`,result:s,attempts:o,error:c};o++;try{if(c=void 0,s=await e(),t(s))return{status:`success`,result:s,attempts:o};o<i&&await da(r)}catch(e){e instanceof Error&&(c=e),o<i&&await da(r)}}return{status:`max_attempts`,result:s,attempts:o,error:c}},pa=2e3,ma=1800*1e3;function ha(e,t){return Math.ceil(t/e)}function ga(e){return e.status===`success`?e.result?{status:`success`,order:e.result}:{status:`timeout`}:e.status===`aborted`?{status:`aborted`,error:e.error}:{status:`timeout`,error:e.error}}async function _a(e){return await e.privy.fetchPrivyRoute(ne,{params:{order_id:e.orderId}})}async function va(e){let t=e.pollIntervalMs??pa,n=e.timeoutMs??ma,r=e.signal??new AbortController().signal;return ga(await fa({operation:async()=>{let t=await e.privy.fetchPrivyRoute(ie,{params:{deposit_address_id:e.depositAddressId},query:{after:e.quoteCreatedAt}});if(t.order)return await e.privy.fetchPrivyRoute(ne,{params:{order_id:t.order.id}})},until:e=>e!==void 0,delay:t,interval:t,attempts:ha(t,n),signal:r}))}async function ya(e){let t=e.pollIntervalMs??pa,n=e.timeoutMs??ma,r=e.signal??new AbortController().signal;return ga(await fa({operation:()=>e.privy.fetchPrivyRoute(ne,{params:{order_id:e.orderId}}),until:e=>e.status!==`executing`,delay:t,interval:t,attempts:ha(t,n),signal:r}))}var ba=C({generateDepositAddress:()=>ua,getConfig:()=>xa,getDeposit:()=>_a,resolveRefundAddress:()=>la,waitForCompletion:()=>ya,waitForDeposit:()=>va});async function xa(e){let t=await e.fetchPrivyRoute(re,{});return{currencies:t.currencies,chains:t.chains}}async function Sa(e,t,{wallet_id:n,...r}){let i=e.getCompiledPath(Ze,{params:{wallet_id:n}}),a=String(Date.now()+on),{signature:o}=await N(t,{version:1,url:i,method:Ze.method,headers:{"privy-app-id":e.app.appId,[P]:a},body:{...r}});if(Date.now()>Number(a))throw new E({error:`Wallet request expired before it could be sent. Please try again.`,code:`embedded_wallet_request_expired`});return await e.fetchPrivyRoute(Ze,{body:r,params:{wallet_id:n},headers:{"privy-authorization-signature":o,[P]:a}})}async function Ca(e,{wallet_id:t}){return await e.fetchPrivyRoute(Xe,{params:{wallet_id:t}})}async function wa(e,{wallet_id:t},n,r){let{signature:i}=await N(n,{version:1,url:e.getCompiledPath($e,{params:{wallet_id:t}}),method:$e.method,headers:{"privy-app-id":e.app.appId},body:r});return await e.fetchPrivyRoute($e,{params:{wallet_id:t},body:r,headers:{"privy-authorization-signature":i}})}async function Ta({client:e,wallet:t,signers:n}){if(t.chain_type!==`ethereum`&&t.chain_type!==`solana`)throw Error(`Session signers are only supported for Ethereum and Solana wallets`);if(D(t)){if(n.length===0)throw Error(`Must specify at least one signer to add.`);let r={wallet_id:t.id},i=await Ca(e,r);await wa(e,r,Oa(e),{additional_signers:i.additional_signers.concat(n)})}else{if(t.delegated)return Da(e);if(n.length>0)throw Error(`Specifying signers in addSessionSigners is only supported for TEE execution and this app uses On-device execution. Pass an empty array for signers instead. Learn more https://docs.privy.io/recipes/tee-wallet-migration-guide`);let{user:r}=await e.user.get(),i=Wi(t,r);if(!i)throw Error(`Unable to determine root address for delegated address.`);await e.embeddedWallet.delegateWallets({rootWallet:{address:i.address,chainType:i.chain_type,imported:i.imported??!1},delegatedWallets:[{address:t.address,chainType:t.chain_type,walletIndex:t.wallet_index}]})}return Da(e)}async function Ea({client:e,wallet:t}){return D(t)?await wa(e,{wallet_id:t.id},Oa(e),{additional_signers:[]}):await e.delegated.revoke(),Da(e)}async function Da(e){let{user:t}=await e.user.get();if(!t)throw Error(`Could not refresh user`);return{user:t}}function Oa(e){return(...t)=>e.embeddedWallet.signWithUserSigner(...t)}var ka=class{#e;#t;get standardWallet(){return this.#e}get address(){return this.#t.address}constructor({wallet:e,account:t}){this.#e=e,this.#t=t}async disconnect(){if(!this.#e.features[`standard:disconnect`]?.disconnect)throw Error(`Wallet does not support disconnect`);await this.#e.features[`standard:disconnect`].disconnect()}async signMessage(...e){if(!this.#e.features[`solana:signMessage`]?.signMessage)throw Error(`Wallet does not support signMessage`);let t=await this.#e.features[`solana:signMessage`].signMessage(...e.map(e=>({...e,account:this.#t})));return e.length===1?t[0]:[...t]}async signTransaction(...e){if(!this.#e.features[`solana:signTransaction`]?.signTransaction)throw Error(`Wallet does not support signTransaction`);let t=await this.#e.features[`solana:signTransaction`].signTransaction(...e.map(e=>({...e,account:this.#t})));return e.length===1?t[0]:[...t]}async signAndSendTransaction(...e){if(!this.#e.features[`solana:signAndSendTransaction`]?.signAndSendTransaction)throw Error(`Wallet does not support signAndSendTransaction`);let t=await this.#e.features[`solana:signAndSendTransaction`].signAndSendTransaction(...e.map(e=>({...e,account:this.#t})));return e.length===1?t[0]:[...t]}async signAndSendAllTransactions(e){if(!this.#e.features[`solana:signAndSendTransaction`]?.signAndSendTransaction)throw Error(`Wallet does not support signAndSendTransaction`);return[...await this.#e.features[`solana:signAndSendTransaction`].signAndSendTransaction(...e.map(e=>({...e,account:this.#t})))]}};const Aa=`biconomy`,ja=`coinbase_smart_wallet`,Ma=`kernel`,Na=`light_account`,Pa=`safe`,Fa=`thirdweb`,Ia=`nexus`;var La=Gr;export{Li as ALL_WALLET_CLIENT_TYPES,Aa as BICONOMY,ja as COINBASE_SMART_WALLET,ka as ConnectedStandardSolanaWallet,Qt as EmbeddedProviderError,qr as InMemoryCache,Ma as KERNEL,Na as LIGHT_ACCOUNT,Kr as LocalStorage,Ht as MoonpayApiError,Ia as NEXUS,T as PrivyApiError,E as PrivyClientError,Zt as PrivyConnectorError,qt as PrivyEmbeddedWalletErrorCode,rn as PrivyProviderRpcError,O as ProviderErrors,Pa as SAFE,Ri as SUPPORTED_CONNECTOR_TYPES,Si as SolanaClient,li as SolanaUsdcAddressMap,Fa as THIRDWEB,ci as UsdcAddressMap,Ta as addSessionSigners,Ai as buildSolanaOffchainMessage,Fr as chainToMoonpayCurrency,ii as countryCodesAndNumbers,zn as create,Wt as createErrorFormatter,Ci as createSiwsMessage,oa as crossApp,La as default,qi as delegatedActions,ba as depositAddress,ki as deriveSolanaApplicationDomain,tn as errorIndicatesMaxMfaRetries,Gt as errorIndicatesMfaCanceled,nn as errorIndicatesMfaRateLimit,$t as errorIndicatesMfaTimeout,en as errorIndicatesMfaVerificationFailed,A as errorIndicatesRecoveryIsNeeded,Hi as formatLamportsAmount,ti as formatPhoneNumber,Vi as formatTokenAmount,zi as formatWalletAddress,Bi as formatWeiAmount,Ir as fundingMethodToMoonpayPaymentMethod,N as generateAuthorizationSignature,di as generateWalletIdempotencyKey,Jr as getAllUserEmbeddedBitcoinWallets,rr as getAllUserEmbeddedEthereumWallets,ar as getAllUserEmbeddedSolanaWallets,vi as getCoinbaseOnRampUrl,Nt as getCountryCallingCode,Zr as getEntropyDetailsFromAccount,Xr as getEntropyDetailsFromUser,ui as getIsTokenUsdc,Cn as getJsonRpcEndpointFromChain,oi as getPhoneCountryCodeAndNumber,ai as getPlaceholderPhoneNumber,Ei as getSolanaClusterDisplayName,wi as getSolanaRpcEndpointForCluster,Ti as getSolanaUsdcMintAddressForCluster,X as getUserEmbeddedEthereumWallet,or as getUserEmbeddedSolanaWallet,ir as getUserEmbeddedWallet,Qr as getUserSmartWallet,Ca as getWallet,Y as isEmbeddedWalletAccount,yi as isSupportedChainIdForCoinbaseOnramp,Pr as isSupportedChainIdForMoonpay,D as isUnifiedWallet,ni as lastFourDigits,ji as parseSolanaOffchainMessage,ri as phoneNumberTypingFormatter,fa as poll,Sa as rawSign,Ea as removeSessionSigners,F as rpc,wn as throwIfInvalidRecoveryUpgradePath,xi as toCoinbaseAssetId,bi as toCoinbaseBlockchainFromChainId,ei as toE164,si as toObjectKeys,sn as toWalletApiUnsignedEthTransaction,wa as updateWallet,$r as validatePhoneNumber};
35
35
  //# sourceMappingURL=index.mjs.map