@privy-io/js-sdk-core 0.69.1 → 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.
- package/dist/cjs/index.js +4 -4
- package/dist/cjs/index.js.map +1 -1
- package/dist/dts/index.d.mts +14 -1
- package/dist/dts/index.d.ts +14 -1
- package/dist/esm/index.mjs +4 -4
- package/dist/esm/index.mjs.map +1 -1
- package/package.json +5 -5
package/dist/cjs/index.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:`Module`}});var e=Object.create,t=Object.defineProperty,n=Object.getOwnPropertyDescriptor,r=Object.getOwnPropertyNames,i=Object.getPrototypeOf,a=Object.prototype.hasOwnProperty,o=(e,n)=>{let r={};for(var i in e)t(r,i,{get:e[i],enumerable:!0});return n||t(r,Symbol.toStringTag,{value:`Module`}),r},s=(e,i,o,s)=>{if(i&&typeof i==`object`||typeof i==`function`)for(var c=r(i),l=0,u=c.length,d;l<u;l++)d=c[l],!a.call(e,d)&&d!==o&&t(e,d,{get:(e=>i[e]).bind(null,d),enumerable:!(s=n(i,d))||s.enumerable});return e},c=(n,r,a)=>(a=n==null?{}:e(i(n)),s(r||!n||!n.__esModule?t(a,`default`,{value:n,enumerable:!0}):a,n));let l=require("@privy-io/routes"),u=require("jose");u=c(u);let d=require("@privy-io/chains"),f=require("eventemitter3");f=c(f);let p=require("viem"),m=require("@privy-io/ethereum"),h=require("canonicalize");h=c(h);let g=require("@privy-io/encoding"),_=require("viem/chains"),v=require("fetch-retry");v=c(v);let ee=require("@privy-io/api-base"),y=require("js-cookie");y=c(y);let te=require("libphonenumber-js/examples.mobile.json");te=c(te);let b=require("libphonenumber-js/min");function ne(e){return{digest:e?.digest??((e,t)=>globalThis.crypto.subtle.digest(e,t)),randomUUID:e?.randomUUID??(()=>globalThis.crypto.randomUUID())}}var re=class{_privyInternal;_smartWalletConfig;constructor(e){this._privyInternal=e}getConfig(){return this._privyInternal.config}async getSmartWalletConfig(){return this._smartWalletConfig||=await this._privyInternal.fetch(l.GetSmartWalletConfig,{params:{app_id:this.appId}}),this._smartWalletConfig}get appId(){return this._privyInternal.appId}},x=class e{static parse(t){try{return new e(t)}catch{return null}}value;_decoded;constructor(e){this.value=e,this._decoded=u.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}},ie=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 x(r).isExpired())throw Error(`JWT is expired`);return r}catch{return await this._storage.del(n),null}}async getCrossAppConnections(){return await this._privyInternal.fetch(l.GetCrossAppConnections,{params:{app_id:this._privyInternal.appId}})}},ae=class{_privyInternal;constructor(e){this._privyInternal=e}async revoke(){await this._privyInternal.fetch(l.WalletsRevoke,{})}},S=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}},C=class extends Error{error;code;constructor({error:e,code:t}){super(e),this.code=t,this.error=e}},oe=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 se(e){return e instanceof S||e instanceof C?e.code:`unknown_error`}const ce=e=>t=>e[se(t)]??e.default;function le(e){return e&&typeof e==`object`&&`code`in e&&e.code===`mfa_canceled`}const w=e=>!!e.id&&e.recovery_method===`privy-v2`,ue=[`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 de=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 fe=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}]`:``}`}},pe=class extends fe{type=`provider_error`;code;data;constructor(e,t,n){super(e),this.code=t,this.data=n}},T=class extends Error{type;constructor(e,t){super(t),this.type=e}},me=class extends fe{type=`connector_error`;constructor(e,t,n){super(e,t,n)}},E=class extends Error{code;data;constructor(e,t,n){super(e),this.code=t,this.data=n}};const D={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 O(e){let t=e.type;return typeof t==`string`&&ue.includes(t)}function k(e){return O(e)&&e.type===`wallet_not_on_device`}function he(e){return O(e)&&e.type===`mfa_timeout`}function ge(e){return O(e)&&e.type===`missing_or_invalid_mfa`}function _e(e){return O(e)&&e.type===`mfa_verification_max_attempts_reached`}function ve(e){return O(e)&&e.message.includes(`code 429`)}var ye=class extends pe{details;constructor(e){let t=e;super(t.message,t.code,t.data);let n=Object.values(D).find(e=>e.eipCode===t.code);this.details=n||D.UNKNOWN_ERROR,t.code===-32002&&(t.message?.includes(`already pending for origin`)?t.message?.includes(`wallet_requestPermissions`)?this.details=D.E32002_CONNECTION_ALREADY_PENDING:this.details=D.E32002_REQUEST_ALREADY_PENDING:t.message?.includes(`Already processing`)&&t.message.includes(`eth_requestAccounts`)&&(this.details=D.E32002_WALLET_LOCKED))}};const A=e=>/^0x[0-9a-fA-F]*$/.test(e),be=e=>Buffer.from(e,`utf8`),j=e=>`0x${e.toString(`hex`)}`;async function M(e,t){let n;if(t instanceof Uint8Array)n=g.encoding.base64.fromBytes(t);else{let e=(0,h.default)(t);if(e===void 0)throw new C({error:`Failed to prepare the payload for signing`,code:`invalid_input`});n=g.encoding.base64.fromBytes(g.encoding.utf8.toBytes(e))}let{signature:r}=await e({message:n});return{signature:r}}const N=`privy-request-expiry`,xe=1800*1e3;async function P(e,t,{wallet_id:n,headers:r,...i}){let a=e.getCompiledPath(l.WalletRpc,{params:{wallet_id:n}}),o=String(Date.now()+xe),{signature:s}=await M(t,{version:1,url:a,method:l.WalletRpc.method,headers:{"privy-app-id":e.app.appId,[N]:o},body:{...i}});if(Date.now()>Number(o))throw new C({error:`Wallet request expired before it could be sent. Please try again.`,code:`embedded_wallet_request_expired`});return await e.fetchPrivyRoute(l.WalletRpc,{body:i,params:{wallet_id:n},headers:{"privy-authorization-signature":s,[N]:o,...r??{}}})}function Se(e){return(0,m.isTempoTransactionRequest)(e)?we(e):Ce(e)}function Ce(e){return{from:e.from,to:e.to??void 0,nonce:F(e.nonce),chain_id:F(e.chainId),data:Oe(e.data),value:F(e.value),type:e.type,gas_limit:F(e.gasLimit),gas_price:F(e.gasPrice),max_fee_per_gas:F(e.maxFeePerGas),max_priority_fee_per_gas:F(e.maxPriorityFeePerGas)}}function we(e){return{type:m.TEMPO_TXN_TYPE_NUMBER,from:e.from,chain_id:F(e.chainId),nonce:F(e.nonce),nonce_key:F(e.nonceKey),gas_limit:F(e.gasLimit),max_fee_per_gas:F(e.maxFeePerGas),max_priority_fee_per_gas:F(e.maxPriorityFeePerGas),fee_token:e.feeToken,valid_after:F(e.validAfter),valid_before:F(e.validBefore),fee_payer_signature:Ee(e.feePayerSignature),access_list:Te(e.accessList),calls:e.calls.map(e=>({to:e.to,data:e.data,value:F(e.value)}))}}function Te(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 Ee(e){if(!e)return;let t=De(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 De(e){if(e.yParity!==void 0)return e.yParity;if(e.v!==void 0)return Number(e.v)-27}function Oe(e){if(e!==void 0)return typeof e==`string`?A(e)?e:j(be(e)):j(Buffer.from(Uint8Array.from(e)))}function F(e){if(typeof e==`number`||typeof e==`bigint`)return`0x${BigInt(e).toString(16)}`;if(typeof e==`string`){if(A(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 ke(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 Ae({context:e,account:t,rpcRequest:n}){switch(n.chainType){case`ethereum`:return je({context:e,account:t,rpcRequest:n.request});case`solana`:return Me({context:e,account:t,rpcRequest:n.request})}}async function je({context:e,account:t,rpcRequest:n}){switch(n.method){case`personal_sign`:{let[r]=n.params,i=await P(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 P(e,e.signRequest,{chain_type:`ethereum`,method:`eth_signTransaction`,wallet_id:t.id,params:{transaction:Se(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 P(e,e.signRequest,{chain_type:`ethereum`,method:n.method,wallet_id:t.id,params:{typed_data:ke(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 P(e,e.signRequest,{chain_type:`ethereum`,method:`secp256k1_sign`,wallet_id:t.id,params:{hash:A(r)?r:j(be(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 P(e,e.signRequest,{chain_type:`ethereum`,method:`secp256k1_sign`,wallet_id:t.id,params:{hash:A(r)?r:j(be(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 Me({context:e,account:t,rpcRequest:n}){switch(n.method){case`signMessage`:{let{message:r}=n.params,i=await P(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 Ne=(e,t,n,r)=>{let i=Number(e),a=t.find(e=>e.id===i);if(!a)throw new me(`Unsupported chainId ${e}`,4901);let o=Fe(a,n,r.appId);if(i===_.tempo.id||i===_.tempoModerato.id){let e=i===_.tempo.id?_.tempo:_.tempoModerato;return(0,p.createPublicClient)({transport:(0,p.http)(o),chain:e})}return(0,p.createPublicClient)({transport:(0,p.http)(o),chain:a})};function Pe(e){return e===_.tempo.id||e===_.tempoModerato.id}const Fe=(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 me(`No RPC url found for ${r}`);return a};function Ie({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 Le=new Set([`eth_sign`,`personal_sign`,`eth_signTypedData_v4`,`csw_signUserOperation`,`secp256k1_sign`]);var Re=class extends f.default{_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=Ne(s,a,{rpcUrls:[]},{appId:c.appId}),this._appApi=c}async request(e){if(Le.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=Ne(this._chainId,this._chains,{rpcUrls:[]},{appId:this._privyInternal.appId}),this.emit(`chainChanged`,e))}async handlePopulateTransaction(e){let t=this.ensureChainId(e);if((0,m.isTempoTransactionRequest)(t)){let e=(0,m.toViemTempoTransactionSerializable)(t),n=(0,m.normalizeViemPreparedTempoTransaction)(await this.requireTempoClient().prepareTransactionRequest({account:t.from??this._account.address,...e}),t.gasLimit);return{...t,...n,type:m.TEMPO_TXN_TYPE_NUMBER}}let n=(0,m.toViemTransactionSerializable)(t),{gas:r,...i}=await this._client.prepareTransactionRequest({account:t.from??this._account.address,...n});return{...i,gasLimit:r,type:m.STRING_TO_NUMBER_TXN_TYPE[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]=(0,p.toHex)(n))}return(0,m.isTempoTransactionRequest)(t)&&(t.calls=t.calls.map(e=>({...e,value:typeof e.value==`bigint`?(0,p.toHex)(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((0,m.isTempoTransactionRequest)(n)){let e=(0,m.toViemTempoTransactionSerializable)(n);return await this.requireTempoClient().estimateGas({account:n.from??this._account.address,...e})}let r=(0,m.toViemTransactionSerializable)(n);return await this._client.estimateGas({account:n.from??this._account.address,...r})}handleSwitchEthereumChain(e){if(!e.params||!Array.isArray(e.params))throw new E(`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 E(`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(w(n)){let{data:r}=await Ae({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=k(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 C({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 C({code:`embedded_wallet_request_error`,error:n})}}async handleJsonRpc(e){return this._client.request(e)}requireTempoClient(){if(!Pe(this._chainId))throw new E(`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 ze(e){return`version`in e}function Be(e,t){let n=(ze(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 Ve=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 C({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=k(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 C({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(w(n)){let{data:r}=await Ae({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 C({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=Be(n,this._account.address),o=ze(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 C({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=Be(n,this._account.address),i=ze(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 C({code:`embedded_wallet_request_error`,error:n})}}toJSON(){return`PrivyEmbeddedSolanaProvider { address: '${this._account.address}', request: [Function] }`}},He=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(w(this._account))throw new C({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 C({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 C({code:`embedded_wallet_request_error`,error:n})}}toJSON(){return`PrivyEmbeddedBitcoinProvider { address: '${this._account.address}', request: [Function] }`}},Ue=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 We(e,t,n,r,i=!1,a,o){let s=i,c=async a=>s?(a===+!i?r():n.current?.reject(new T(`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 T(`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 T(`mfa_verification_max_attempts_reached`,`Max MFA verification attempts reached`);throw n.current?.reject(e),e}return l}function Ge(e){return e.error!==void 0}const Ke=(function(e){return()=>`id-${e++}`})(0),qe=(e,t)=>typeof t==`bigint`?t.toString():t,Je=(e,t)=>`${e}${JSON.stringify(t,qe)}`,I=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)}},Ye=new Ue;var Xe=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 I(We(n=>I(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,Ye.flush(Error(`Embedded wallet WebView was reloaded`)),this.cache.clear(),this._embeddedWalletMessagePoster.reload()}onBackground(){this.ready=!1}ping(e=15e3){return I(this.invoke(`privy:iframe:ready`,{}),{msg:`Ping reached timeout`,ms:e})}create(e){return I(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 I(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`}):I(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 I(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 I(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 I(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=Ye.dequeue(e.event,e.id);if(t)return Ge(e)?t.reject(new T(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=Je(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=Ke();Ye.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 Ze(e,{request:t,headers:n}){return await e.fetchPrivyRoute(l.WalletCreate,{body:t,headers:n})}async function Qe({context:e,chainType:t,idempotencyKey:n}){return{wallet:await Ze(e,{request:{chain_type:t,owner_id:void 0},headers:n?{"privy-idempotency-key":n}:void 0})}}var $e=class{_privyInternal;_proxy;_chains=Array.from(d.DEFAULT_SUPPORTED_CHAINS);_mfa;_mfaPromises;_appApi;constructor(e,t,n,r,i,a){if(this._privyInternal=e,t&&(this._proxy=new Xe(t,i),r.setProxy(this._proxy)),n){let e=(0,d.dedupeSupportedChains)(n);this._chains=e}this._mfa=r,this._mfaPromises=i,this._appApi=a}setMessagePoster(e){this._proxy=new Xe(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 C({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 Qe({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 C({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 w(e)||await this._load({entropyId:t,entropyIdVerifier:n,wallet:e,recoveryPassword:r,recoveryAccessToken:i,recoverySecretOverride:a}),new He({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 C({error:`User-controlled server wallets do not support custom recovery methods`,code:`embedded_wallet_creation_error`});await Qe({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 C({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 Qe({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 C({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 C({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 C({error:`Embedded wallet proxy not initialized`,code:`embedded_wallet_creation_error`});let n=await this._privyInternal.getAccessTokenInternal();if(!n)throw new C({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 w(e)||await this._load({wallet:e,entropyId:e.address,entropyIdVerifier:`ethereum-address-verifier`,recoveryPassword:t,recoveryKey:i,recoveryAccessToken:n,recoverySecretOverride:r}),new Re({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 w(e)||(!s||r||i||a||o)&&await this._load({entropyId:t,entropyIdVerifier:n,wallet:e,recoveryPassword:r,recoveryAccessToken:i,recoverySecretOverride:a,recoveryKey:o}),new Re({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 C({error:`Embedded wallet proxy not initialized`,code:`embedded_wallet_webview_not_loaded`});return w(e)||(!o||r||i||a)&&await this._load({wallet:e,entropyId:t,entropyIdVerifier:n,recoveryPassword:r,recoveryAccessToken:i,recoverySecretOverride:a}),new Ve({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(w(t))throw new C({error:`This wallet does not support setting recovery methods`,code:`unsupported_recovery_method`});Ie({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 Re({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(k(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}}},et=class extends f.default{rootPromise;submitPromise;constructor(){super(),this.rootPromise={current:null},this.submitPromise={current:null}}};const L=`privy:active-user`,tt=`privy:saved-users`,R=e=>e?`privy:${e}:token`:`privy:token`,z=e=>e?`privy:${e}:pat`:`privy:pat`,B=e=>e?`privy:${e}:refresh_token`:`privy:refresh_token`,V=e=>e?`privy:${e}:id-token`:`privy:id-token`,nt=e=>e?`privy-${e}-token`:`privy-token`,rt=e=>e?`privy-${e}-refresh-token`:`privy-refresh-token`,it=e=>e?`privy-${e}-id-token`:`privy-id-token`,H=e=>e?`privy-${e}-session`:`privy-session`,U=Promise.allSettled.bind(Promise)??(e=>Promise.all(e.map(e=>e.then(e=>({status:`fulfilled`,value:e})).catch(e=>({status:`rejected`,reason:e}))))),at=[`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 ot=class extends f.default{static events=at;_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(R(e));try{return typeof t==`string`?new x(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(z(e));try{return typeof t==`string`?new x(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(B(e));return typeof t==`string`?t:null}async getIdentityToken(){let e=await this.getActiveUserId(),t=await this._storage.get(V(e));return typeof t==`string`?t:null}async mightHaveServerCookies(){try{let e=await this.getActiveUserId(),t=y.default.get(H(e));if(t!==void 0&&t.length>0)return!0;let n=y.default.get(H(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=x.parse(e);return t!==null&&!t.isExpired(30)}async destroyLocalState(e){let t=await this.getActiveUserId(),n=[this._storage.del(R(null)),this._storage.del(z(null)),this._storage.del(B(null)),this._storage.del(V(null)),this._storage.del(this.GUEST_CREDENTIAL_STORAGE_KEY),this._storage.del(L)];t&&n.push(this._storage.del(R(t)),this._storage.del(z(t)),this._storage.del(B(t)),this._storage.del(V(t)),this.removeSavedUserId(t)),await U(n),y.default.remove(nt(null)),y.default.remove(rt(null)),y.default.remove(it(null)),y.default.remove(H(null)),t&&(y.default.remove(nt(t)),y.default.remove(rt(t)),y.default.remove(it(t)),y.default.remove(H(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=R(e),r=nt(e);if(typeof t==`string`){let e=await this._storage.get(n);if(await this._storage.put(n,t),!this._isUsingServerCookies){let e=x.parse(t)?.expiration;y.default.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),y.default.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=z(e);typeof t==`string`?await this._storage.put(n,t):await this._storage.del(n)}async storeRefreshTokenForUser(e,t){let n=B(e),r=rt(e),i=H(e);typeof t==`string`?(await this._storage.put(n,t),this._isUsingServerCookies||(y.default.set(i,`t`,{sameSite:`Strict`,secure:!0,expires:30}),y.default.set(r,t,{sameSite:`Strict`,secure:!0,expires:30})),this.emit(`refresh_token_stored`,{cookiesEnabled:this._isUsingServerCookies})):(await this._storage.del(n),y.default.remove(r),y.default.remove(i),this.emit(`refresh_token_cleared`,{reason:`set_with_non_string_value`}))}async updateWithTokensResponse(e){let t=e.user.id,n=(await U([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 U([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 U([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(R(null)),this._storage.get(z(null)),this._storage.get(B(null)),this._storage.get(V(null))]);if(typeof e!=`string`||typeof n!=`string`)return;let i=x.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 U(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=V(e),r=it(e);if(typeof t==`string`){let e=await this._storage.get(n);if(await this._storage.put(n,t),!this._isUsingServerCookies){let e=x.parse(t)?.expiration;y.default.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),y.default.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=u.base64url.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(L);return typeof e==`string`?e:null}async storeActiveUserId(e){let t=await this.getSavedUserIds();await this.storeSavedUserIds([...t,e]),await this._storage.put(L,e)}async getSavedUserIds(){let e=await this._storage.get(tt);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(tt,JSON.stringify(t)):await this._storage.del(tt),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 C({code:`invalid_input`,error:`Cannot switch active user because the user ID is not saved on this device`});await this._storage.put(L,e)}};const st=e=>{let t=new AbortController;return setTimeout(()=>t.abort(),e),t.signal};function ct(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 W=()=>void 0,G={NONE:-1/0,ERROR:1,WARN:2,INFO:3,DEBUG:1/0},lt=({level:e,logger:t})=>({get level(){return e},error:G[e]>=G.ERROR?t.error:W,warn:G[e]>=G.WARN?t.warn:W,info:G[e]>=G.INFO?t.info:W,debug:G[e]>=G.DEBUG?t.debug:W}),ut=`privy:caid`;var dt=class{baseUrl;callbacks;appId;appClientId;logger;session;_config;_analyticsId;_storage;_sdkVersion=`js-sdk-core:0.69.1`;_fetch;nativeAppIdentifier;_crypto;isMultiUserModeEnabled;_cache=new Map;constructor(e){this.logger=lt({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 ot({storage:this._storage,isUsingServerCookies:!1,appId:e.appId,setStoredUsers:e.callbacks?.setStoredUsers}),this._fetch=(0,v.default)(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 C({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}${(0,l.getPathWithParams)(e.path,t)}${ct(n)}`}async fetchWithoutAuthentication(e,t){if(!this.isMultiUserModeEnabled)throw new C({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 S({...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:st(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:st(2e4),headers:t}}async _beforeRequest(e){return await this._initialize(),await this.getAccessTokenInternal(),this.beforeRequestWithoutRefresh(e)}async getAppConfig(){return await this.fetch(l.AppConfig,{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(ut);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(ut,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(ut)}catch(e){this.logger.error(`Unable to delete clientId`,e)}}async createAnalyticsEvent(e,t){try{await this.fetch(l.AnalyticsEvent,{body:{event_name:e,client_id:await this._getOrGenerateClientAnalyticsId(),payload:t},onRequest:this.beforeRequestWithoutRefresh.bind(this)})}catch{}}async refreshSession(e=!1){if(!await this.isStorageAccessible())throw new C({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 S({code:ee.PrivyErrorCode.MISSING_OR_INVALID_TOKEN,error:`No tokens found in storage`,status:401});try{this.logger.debug(`[privy:refresh] fetching: ${l.RefreshSession.path}`);let n=await this.fetch(l.RefreshSession,{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 S&&e.code===ee.PrivyErrorCode.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}}},ft=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(l.AcceptTermsOnUser,{})}}async switchActiveUser(e){if(!this._isMultiUserModeEnabled)throw new C({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 C({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 K=e=>e.type===`wallet`&&e.wallet_client_type===`privy`&&e.connector_type===`embedded`,q=e=>e?e.linked_accounts.filter(K).filter(e=>e.chain_type===`ethereum`).sort((e,t)=>e.wallet_index-t.wallet_index):[],J=e=>q(e).find(e=>e.wallet_index===0)??null,pt=J,Y=e=>e?e.linked_accounts.filter(K).filter(e=>e.chain_type===`solana`).sort((e,t)=>e.wallet_index-t.wallet_index):[],X=e=>Y(e).find(e=>e.wallet_index===0)??null,mt=(e,t)=>t===`off`||q(e).length>0?!1:e.linked_accounts.filter(e=>e.type===`wallet`&&e.chain_type===`ethereum`).length>0?t===`all-users`:!0,ht=(e,t)=>t===`off`||Y(e).length>0?!1:e.linked_accounts.filter(e=>e.type===`wallet`&&e.chain_type===`solana`).length>0?t===`all-users`:!0,gt=(e,t)=>({...e,is_new_user:t.is_new_user,oauth_tokens:t.oauth_tokens}),Z=async(e,t,n)=>{let r=mt(t.user,n?.ethereum?.createOnLogin??`off`),i=ht(t.user,n?.solana?.createOnLogin??`off`);if(r&&i){let n=await e.create({recoveryMethod:`privy`,skipCallbacks:!0}),r=await e.createSolana({ethereumAccount:J(n.user)??void 0});return gt(r,t)}if(r){let n=await e.create({recoveryMethod:`privy`,solanaAccount:X(t.user)??void 0});return gt(n,t)}if(i){let n=await e.createSolana({ethereumAccount:J(t.user)??void 0});return gt(n,t)}return t};var _t=class{_privyInternal;_embedded;constructor(e,t){this._privyInternal=e,this._embedded=t}async syncWithToken(e,t,n){let r=await this._privyInternal.fetchForLogin(l.CustomJWTAuthenticate,{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(l.CustomJWTLink,{body:{token:e}});let t=await this._privyInternal.refreshSession();return{user:t.user,identity_token:t.identity_token}}},vt=class{_privyInternal;_embedded;constructor(e,t){this._privyInternal=e,this._embedded=t}async sendCode(e,t){return this._privyInternal.fetch(l.PasswordlessInit,{body:{email:e,token:t}})}async loginWithCode(e,t,n,r){let i=await this._privyInternal.fetchForLogin(l.PasswordlessAuthenticate,{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(l.PasswordlessLink,{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(l.PasswordlessUpdate,{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(l.PasswordlessUnlink,{body:{address:e}});let t=await this._privyInternal.refreshSession();return{user:t.user,identity_token:t.identity_token}}},yt=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.FarcasterInit,{body:{relying_party:e,redirect_url:t,token:n}})}async getFarcasterStatus({channel_token:e}){return await this._privyInternal.fetch(l.FarcasterStatus,{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(l.FarcasterAuthenticate,{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(l.FarcasterLink,{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(l.FarcasterUnlink,{body:{fid:e}});let t=await this._privyInternal.refreshSession();return{user:t.user,identity_token:t.identity_token}}},bt=class{_privyInternal;_embedded;constructor(e,t){this._privyInternal=e,this._embedded=t}async initializeAuth(){return await this._privyInternal.fetch(l.FarcasterV2Init,{body:{}})}async authenticate({message:e,signature:t,fid:n},r){let i=await this._privyInternal.fetchForLogin(l.FarcasterV2Authenticate,{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}},xt=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(l.GuestAuthenticate,{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 St(e,t){let n=await t(`SHA-256`,new TextEncoder().encode(e));return new Uint8Array(n)}function Ct(e){return crypto.getRandomValues(new Uint8Array(e))}function wt(){return u.base64url.encode(Ct(36))}function Tt(){return wt()}async function Et({codeVerifier:e,method:t=`S256`,digest:n}){if(t==`S256`){let t=await St(e,n);return u.base64url.encode(t)}else return e}var Dt=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=wt(),r=Tt(),i=await Et({codeVerifier:n,digest:this._crypto.digest});return await Promise.all([this._storage.put($,n),this._storage.put(Q,r)]),this._privyInternal.fetchForLogin(l.OAuthInit,{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 C({code:`pkce_state_code_mismatch`,error:`Unexpected auth flow. This may be a phishing attempt.`});let c=await this._privyInternal.fetchForLogin(l.OAuthAuthenticate,{body:{authorization_code:e,code_type:r,state_code:s,code_verifier:o,mode:i}});await this._privyInternal.session.updateWithTokensResponse(c);let u=await Z(this._embedded,c,a?.embedded);return await Promise.all([this._storage.del($),this._storage.del(Q)]),this._privyInternal.callbacks?.setUser?.(u.user),u}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 C({code:`pkce_state_code_mismatch`,error:`Unexpected auth flow. This may be a phishing attempt.`});let o=await this._privyInternal.fetch(l.OAuthLink,{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(l.OAuthUnlink,{body:{provider:e,subject:t}});let n=await this._privyInternal.refreshSession();return{user:n.user,identity_token:n.identity_token}}},Ot=class{_privyInternal;_embedded;constructor(e,t){this._privyInternal=e,this._embedded=t}async generateRegistrationOptions(e){return await this._privyInternal.fetch(l.PasskeyLinkInit,{body:{relying_party:e}})}async generateAuthenticationOptions(e){return await this._privyInternal.fetch(l.PasskeyAuthenticateInit,{body:{relying_party:e}})}async generateSignupOptions(e){return await this._privyInternal.fetch(l.PasskeyRegisterInit,{body:{relying_party:e}})}async loginWithPasskey(e,t,n,r){let i=await this._privyInternal.fetchForLogin(l.PasskeyAuthenticate,{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(l.PasskeyRegister,{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(l.PasskeyLink,{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}}}},kt=class{_privyInternal;_embedded;constructor(e,t){this._privyInternal=e,this._embedded=t}async sendCode(e,t){return this._privyInternal.fetch(l.PasswordlessSmsInit,{body:{phoneNumber:e,token:t}})}async loginWithCode(e,t,n,r){let i=await this._privyInternal.fetchForLogin(l.PasswordlessSmsAuthenticate,{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(l.PasswordlessSmsLink,{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(l.PasswordlessSmsUpdate,{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(l.PasswordlessSmsUnlink,{body:{phoneNumber:e}});let t=await this._privyInternal.refreshSession();return{user:t.user,identity_token:t.identity_token}}},At=class{_privyInternal;_embedded;_wallet=void 0;_preparedMessage;constructor(e,t){this._privyInternal=e,this._embedded=t}async unlinkWallet(e){await this._privyInternal.fetch(l.SiweUnlink,{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(l.SiweLink,{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(l.SiweAuthenticate,{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(l.SiweInit,{body:{address:e.address}}),i=jt({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 jt(e){return`${e.domain} wants you to sign in with your Ethereum account:
|
|
1
|
+
Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:`Module`}});var e=Object.create,t=Object.defineProperty,n=Object.getOwnPropertyDescriptor,r=Object.getOwnPropertyNames,i=Object.getPrototypeOf,a=Object.prototype.hasOwnProperty,o=(e,n)=>{let r={};for(var i in e)t(r,i,{get:e[i],enumerable:!0});return n||t(r,Symbol.toStringTag,{value:`Module`}),r},s=(e,i,o,s)=>{if(i&&typeof i==`object`||typeof i==`function`)for(var c=r(i),l=0,u=c.length,d;l<u;l++)d=c[l],!a.call(e,d)&&d!==o&&t(e,d,{get:(e=>i[e]).bind(null,d),enumerable:!(s=n(i,d))||s.enumerable});return e},c=(n,r,a)=>(a=n==null?{}:e(i(n)),s(r||!n||!n.__esModule?t(a,`default`,{value:n,enumerable:!0}):a,n));let l=require("@privy-io/routes"),u=require("jose");u=c(u);let d=require("@privy-io/chains"),f=require("eventemitter3");f=c(f);let p=require("viem"),m=require("@privy-io/ethereum"),h=require("canonicalize");h=c(h);let g=require("@privy-io/encoding"),_=require("viem/chains"),v=require("fetch-retry");v=c(v);let ee=require("@privy-io/api-base"),y=require("js-cookie");y=c(y);let te=require("libphonenumber-js/examples.mobile.json");te=c(te);let b=require("libphonenumber-js/min");function ne(e){return{digest:e?.digest??((e,t)=>globalThis.crypto.subtle.digest(e,t)),randomUUID:e?.randomUUID??(()=>globalThis.crypto.randomUUID())}}var re=class{_privyInternal;_smartWalletConfig;constructor(e){this._privyInternal=e}getConfig(){return this._privyInternal.config}async getSmartWalletConfig(){return this._smartWalletConfig||=await this._privyInternal.fetch(l.GetSmartWalletConfig,{params:{app_id:this.appId}}),this._smartWalletConfig}get appId(){return this._privyInternal.appId}},x=class e{static parse(t){try{return new e(t)}catch{return null}}value;_decoded;constructor(e){this.value=e,this._decoded=u.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}},ie=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 x(r).isExpired())throw Error(`JWT is expired`);return r}catch{return await this._storage.del(n),null}}async getCrossAppConnections(){return await this._privyInternal.fetch(l.GetCrossAppConnections,{params:{app_id:this._privyInternal.appId}})}},ae=class{_privyInternal;constructor(e){this._privyInternal=e}async revoke(){await this._privyInternal.fetch(l.WalletsRevoke,{})}},S=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}},C=class extends Error{error;code;constructor({error:e,code:t}){super(e),this.code=t,this.error=e}},oe=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 se(e){return e instanceof S||e instanceof C?e.code:`unknown_error`}const ce=e=>t=>e[se(t)]??e.default;function le(e){return e&&typeof e==`object`&&`code`in e&&e.code===`mfa_canceled`}const w=e=>!!e.id&&e.recovery_method===`privy-v2`,ue=[`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 de=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 fe=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}]`:``}`}},pe=class extends fe{type=`provider_error`;code;data;constructor(e,t,n){super(e),this.code=t,this.data=n}},T=class extends Error{type;constructor(e,t){super(t),this.type=e}},me=class extends fe{type=`connector_error`;constructor(e,t,n){super(e,t,n)}},E=class extends Error{code;data;constructor(e,t,n){super(e),this.code=t,this.data=n}};const D={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 O(e){let t=e.type;return typeof t==`string`&&ue.includes(t)}function k(e){return O(e)&&e.type===`wallet_not_on_device`}function he(e){return O(e)&&e.type===`mfa_timeout`}function ge(e){return O(e)&&e.type===`missing_or_invalid_mfa`}function _e(e){return O(e)&&e.type===`mfa_verification_max_attempts_reached`}function ve(e){return O(e)&&e.message.includes(`code 429`)}var ye=class extends pe{details;constructor(e){let t=e;super(t.message,t.code,t.data);let n=Object.values(D).find(e=>e.eipCode===t.code);this.details=n||D.UNKNOWN_ERROR,t.code===-32002&&(t.message?.includes(`already pending for origin`)?t.message?.includes(`wallet_requestPermissions`)?this.details=D.E32002_CONNECTION_ALREADY_PENDING:this.details=D.E32002_REQUEST_ALREADY_PENDING:t.message?.includes(`Already processing`)&&t.message.includes(`eth_requestAccounts`)&&(this.details=D.E32002_WALLET_LOCKED))}};const A=e=>/^0x[0-9a-fA-F]*$/.test(e),be=e=>Buffer.from(e,`utf8`),j=e=>`0x${e.toString(`hex`)}`;async function xe(e,t){let n;if(t instanceof Uint8Array)n=g.encoding.base64.fromBytes(t);else{let e=(0,h.default)(t);if(e===void 0)throw new C({error:`Failed to prepare the payload for signing`,code:`invalid_input`});n=g.encoding.base64.fromBytes(g.encoding.utf8.toBytes(e))}let{signature:r}=await e({message:n});return{signature:r}}const M=`privy-request-expiry`,Se=1800*1e3;async function N(e,t,{wallet_id:n,headers:r,...i}){let a=e.getCompiledPath(l.WalletRpc,{params:{wallet_id:n}}),o=String(Date.now()+Se),{signature:s}=await xe(t,{version:1,url:a,method:l.WalletRpc.method,headers:{"privy-app-id":e.app.appId,[M]:o},body:{...i}});if(Date.now()>Number(o))throw new C({error:`Wallet request expired before it could be sent. Please try again.`,code:`embedded_wallet_request_expired`});return await e.fetchPrivyRoute(l.WalletRpc,{body:i,params:{wallet_id:n},headers:{"privy-authorization-signature":s,[M]:o,...r??{}}})}function Ce(e){return(0,m.isTempoTransactionRequest)(e)?Te(e):we(e)}function we(e){return{from:e.from,to:e.to??void 0,nonce:P(e.nonce),chain_id:P(e.chainId),data:ke(e.data),value:P(e.value),type:je(e.type),gas_limit:P(e.gasLimit??e.gas),gas_price:P(e.gasPrice),max_fee_per_gas:P(e.maxFeePerGas),max_priority_fee_per_gas:P(e.maxPriorityFeePerGas)}}function Te(e){return{type:m.TEMPO_TXN_TYPE_NUMBER,from:e.from,chain_id:P(e.chainId),nonce:P(e.nonce),nonce_key:P(e.nonceKey),gas_limit:P(e.gasLimit),max_fee_per_gas:P(e.maxFeePerGas),max_priority_fee_per_gas:P(e.maxPriorityFeePerGas),fee_token:e.feeToken,valid_after:P(e.validAfter),valid_before:P(e.validBefore),fee_payer_signature:De(e.feePayerSignature),access_list:Ee(e.accessList),calls:e.calls.map(e=>({to:e.to,data:e.data,value:P(e.value)}))}}function Ee(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 De(e){if(!e)return;let t=Oe(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 Oe(e){if(e.yParity!==void 0)return e.yParity;if(e.v!==void 0)return Number(e.v)-27}function ke(e){if(e!==void 0)return typeof e==`string`?A(e)?e:j(be(e)):j(Buffer.from(Uint8Array.from(e)))}const Ae=[0,1,2,4];function je(e){if(e==null)return;let t=Number(e);if(!Me(t))throw Error(`Invalid transaction type: expected ${Ae.join(`, `)} as a number or hex string, got "${e}".`);return t}function Me(e){return Ae.includes(e)}function P(e){if(typeof e==`number`||typeof e==`bigint`)return`0x${BigInt(e).toString(16)}`;if(typeof e==`string`){if(A(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 Ne(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 Pe({context:e,account:t,rpcRequest:n}){switch(n.chainType){case`ethereum`:return Fe({context:e,account:t,rpcRequest:n.request});case`solana`:return Ie({context:e,account:t,rpcRequest:n.request})}}async function Fe({context:e,account:t,rpcRequest:n}){switch(n.method){case`personal_sign`:{let[r]=n.params,i=await N(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 N(e,e.signRequest,{chain_type:`ethereum`,method:`eth_signTransaction`,wallet_id:t.id,params:{transaction:Ce(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 N(e,e.signRequest,{chain_type:`ethereum`,method:n.method,wallet_id:t.id,params:{typed_data:Ne(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 N(e,e.signRequest,{chain_type:`ethereum`,method:`secp256k1_sign`,wallet_id:t.id,params:{hash:A(r)?r:j(be(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 N(e,e.signRequest,{chain_type:`ethereum`,method:`secp256k1_sign`,wallet_id:t.id,params:{hash:A(r)?r:j(be(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 Ie({context:e,account:t,rpcRequest:n}){switch(n.method){case`signMessage`:{let{message:r}=n.params,i=await N(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 Le=(e,t,n,r)=>{let i=Number(e),a=t.find(e=>e.id===i);if(!a)throw new me(`Unsupported chainId ${e}`,4901);let o=ze(a,n,r.appId);if(i===_.tempo.id||i===_.tempoModerato.id){let e=i===_.tempo.id?_.tempo:_.tempoModerato;return(0,p.createPublicClient)({transport:(0,p.http)(o),chain:e})}return(0,p.createPublicClient)({transport:(0,p.http)(o),chain:a})};function Re(e){return e===_.tempo.id||e===_.tempoModerato.id}const ze=(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 me(`No RPC url found for ${r}`);return a};function Be({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 Ve=new Set([`eth_sign`,`personal_sign`,`eth_signTypedData_v4`,`csw_signUserOperation`,`secp256k1_sign`]);var He=class extends f.default{_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=Le(s,a,{rpcUrls:[]},{appId:c.appId}),this._appApi=c}async request(e){if(Ve.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=Le(this._chainId,this._chains,{rpcUrls:[]},{appId:this._privyInternal.appId}),this.emit(`chainChanged`,e))}async handlePopulateTransaction(e){let t=this.ensureChainId(e);if((0,m.isTempoTransactionRequest)(t)){let e=(0,m.toViemTempoTransactionSerializable)(t),n=(0,m.normalizeViemPreparedTempoTransaction)(await this.requireTempoClient().prepareTransactionRequest({account:t.from??this._account.address,...e}),t.gasLimit);return{...t,...n,type:m.TEMPO_TXN_TYPE_NUMBER}}let n=(0,m.toViemTransactionSerializable)(t),{gas:r,...i}=await this._client.prepareTransactionRequest({account:t.from??this._account.address,...n});return{...i,gasLimit:r,type:m.STRING_TO_NUMBER_TXN_TYPE[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]=(0,p.toHex)(n))}return(0,m.isTempoTransactionRequest)(t)&&(t.calls=t.calls.map(e=>({...e,value:typeof e.value==`bigint`?(0,p.toHex)(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((0,m.isTempoTransactionRequest)(n)){let e=(0,m.toViemTempoTransactionSerializable)(n);return await this.requireTempoClient().estimateGas({account:n.from??this._account.address,...e})}let r=(0,m.toViemTransactionSerializable)(n);return await this._client.estimateGas({account:n.from??this._account.address,...r})}handleSwitchEthereumChain(e){if(!e.params||!Array.isArray(e.params))throw new E(`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 E(`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(w(n)){let{data:r}=await Pe({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=k(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 C({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 C({code:`embedded_wallet_request_error`,error:n})}}async handleJsonRpc(e){return this._client.request(e)}requireTempoClient(){if(!Re(this._chainId))throw new E(`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 Ue(e){return`version`in e}function We(e,t){let n=(Ue(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 Ge=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 C({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=k(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 C({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(w(n)){let{data:r}=await Pe({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 C({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=We(n,this._account.address),o=Ue(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 C({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=We(n,this._account.address),i=Ue(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 C({code:`embedded_wallet_request_error`,error:n})}}toJSON(){return`PrivyEmbeddedSolanaProvider { address: '${this._account.address}', request: [Function] }`}},Ke=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(w(this._account))throw new C({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 C({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 C({code:`embedded_wallet_request_error`,error:n})}}toJSON(){return`PrivyEmbeddedBitcoinProvider { address: '${this._account.address}', request: [Function] }`}},qe=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 Je(e,t,n,r,i=!1,a,o){let s=i,c=async a=>s?(a===+!i?r():n.current?.reject(new T(`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 T(`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 T(`mfa_verification_max_attempts_reached`,`Max MFA verification attempts reached`);throw n.current?.reject(e),e}return l}function Ye(e){return e.error!==void 0}const Xe=(function(e){return()=>`id-${e++}`})(0),Ze=(e,t)=>typeof t==`bigint`?t.toString():t,Qe=(e,t)=>`${e}${JSON.stringify(t,Ze)}`,F=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)}},$e=new qe;var et=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 F(Je(n=>F(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,$e.flush(Error(`Embedded wallet WebView was reloaded`)),this.cache.clear(),this._embeddedWalletMessagePoster.reload()}onBackground(){this.ready=!1}ping(e=15e3){return F(this.invoke(`privy:iframe:ready`,{}),{msg:`Ping reached timeout`,ms:e})}create(e){return F(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 F(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`}):F(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 F(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 F(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 F(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=$e.dequeue(e.event,e.id);if(t)return Ye(e)?t.reject(new T(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=Qe(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=Xe();$e.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 tt(e,{request:t,headers:n}){return await e.fetchPrivyRoute(l.WalletCreate,{body:t,headers:n})}async function nt({context:e,chainType:t,idempotencyKey:n}){return{wallet:await tt(e,{request:{chain_type:t,owner_id:void 0},headers:n?{"privy-idempotency-key":n}:void 0})}}var rt=class{_privyInternal;_proxy;_chains=Array.from(d.DEFAULT_SUPPORTED_CHAINS);_mfa;_mfaPromises;_appApi;constructor(e,t,n,r,i,a){if(this._privyInternal=e,t&&(this._proxy=new et(t,i),r.setProxy(this._proxy)),n){let e=(0,d.dedupeSupportedChains)(n);this._chains=e}this._mfa=r,this._mfaPromises=i,this._appApi=a}setMessagePoster(e){this._proxy=new et(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 C({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 nt({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 C({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 w(e)||await this._load({entropyId:t,entropyIdVerifier:n,wallet:e,recoveryPassword:r,recoveryAccessToken:i,recoverySecretOverride:a}),new Ke({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 C({error:`User-controlled server wallets do not support custom recovery methods`,code:`embedded_wallet_creation_error`});await nt({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 C({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 nt({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 C({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 C({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 C({error:`Embedded wallet proxy not initialized`,code:`embedded_wallet_creation_error`});let n=await this._privyInternal.getAccessTokenInternal();if(!n)throw new C({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 w(e)||await this._load({wallet:e,entropyId:e.address,entropyIdVerifier:`ethereum-address-verifier`,recoveryPassword:t,recoveryKey:i,recoveryAccessToken:n,recoverySecretOverride:r}),new He({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 w(e)||(!s||r||i||a||o)&&await this._load({entropyId:t,entropyIdVerifier:n,wallet:e,recoveryPassword:r,recoveryAccessToken:i,recoverySecretOverride:a,recoveryKey:o}),new He({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 C({error:`Embedded wallet proxy not initialized`,code:`embedded_wallet_webview_not_loaded`});return w(e)||(!o||r||i||a)&&await this._load({wallet:e,entropyId:t,entropyIdVerifier:n,recoveryPassword:r,recoveryAccessToken:i,recoverySecretOverride:a}),new Ge({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(w(t))throw new C({error:`This wallet does not support setting recovery methods`,code:`unsupported_recovery_method`});Be({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 He({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(k(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}}},it=class extends f.default{rootPromise;submitPromise;constructor(){super(),this.rootPromise={current:null},this.submitPromise={current:null}}};const at=[`chrome-extension:`,`moz-extension:`,`safari-web-extension:`];let I=!1;const ot=()=>{if(I)return!0;try{let e=globalThis,t=e.chrome?.runtime?.id??e.browser?.runtime?.id,n=e.location?.protocol;I=typeof t==`string`&&t.length>0||typeof n==`string`&&at.includes(n)}catch{I=!0}return I},L={get(e){return y.default.get(e)},set(e,t,n){ot()||y.default.set(e,t,n)},remove(e){y.default.remove(e)}},R=`privy:active-user`,st=`privy:saved-users`,z=e=>e?`privy:${e}:token`:`privy:token`,B=e=>e?`privy:${e}:pat`:`privy:pat`,V=e=>e?`privy:${e}:refresh_token`:`privy:refresh_token`,H=e=>e?`privy:${e}:id-token`:`privy:id-token`,ct=e=>e?`privy-${e}-token`:`privy-token`,lt=e=>e?`privy-${e}-refresh-token`:`privy-refresh-token`,ut=e=>e?`privy-${e}-id-token`:`privy-id-token`,U=e=>e?`privy-${e}-session`:`privy-session`,W=Promise.allSettled.bind(Promise)??(e=>Promise.all(e.map(e=>e.then(e=>({status:`fulfilled`,value:e})).catch(e=>({status:`rejected`,reason:e}))))),dt=[`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 ft=class extends f.default{static events=dt;_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(z(e));try{return typeof t==`string`?new x(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(B(e));try{return typeof t==`string`?new x(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(V(e));return typeof t==`string`?t:null}async getIdentityToken(){let e=await this.getActiveUserId(),t=await this._storage.get(H(e));return typeof t==`string`?t:null}async mightHaveServerCookies(){try{let e=await this.getActiveUserId(),t=L.get(U(e));if(t!==void 0&&t.length>0)return!0;let n=L.get(U(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=x.parse(e);return t!==null&&!t.isExpired(30)}async destroyLocalState(e){let t=await this.getActiveUserId(),n=[this._storage.del(z(null)),this._storage.del(B(null)),this._storage.del(V(null)),this._storage.del(H(null)),this._storage.del(this.GUEST_CREDENTIAL_STORAGE_KEY),this._storage.del(R)];t&&n.push(this._storage.del(z(t)),this._storage.del(B(t)),this._storage.del(V(t)),this._storage.del(H(t)),this.removeSavedUserId(t)),await W(n),L.remove(ct(null)),L.remove(lt(null)),L.remove(ut(null)),L.remove(U(null)),t&&(L.remove(ct(t)),L.remove(lt(t)),L.remove(ut(t)),L.remove(U(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=z(e),r=ct(e);if(typeof t==`string`){let e=await this._storage.get(n);if(await this._storage.put(n,t),!this._isUsingServerCookies){let e=x.parse(t)?.expiration;L.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),L.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=B(e);typeof t==`string`?await this._storage.put(n,t):await this._storage.del(n)}async storeRefreshTokenForUser(e,t){let n=V(e),r=lt(e),i=U(e);typeof t==`string`?(await this._storage.put(n,t),this._isUsingServerCookies||(L.set(i,`t`,{sameSite:`Strict`,secure:!0,expires:30}),L.set(r,t,{sameSite:`Strict`,secure:!0,expires:30})),this.emit(`refresh_token_stored`,{cookiesEnabled:this._isUsingServerCookies})):(await this._storage.del(n),L.remove(r),L.remove(i),this.emit(`refresh_token_cleared`,{reason:`set_with_non_string_value`}))}async updateWithTokensResponse(e){let t=e.user.id,n=(await W([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 W([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 W([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(z(null)),this._storage.get(B(null)),this._storage.get(V(null)),this._storage.get(H(null))]);if(typeof e!=`string`||typeof n!=`string`)return;let i=x.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 W(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=H(e),r=ut(e);if(typeof t==`string`){let e=await this._storage.get(n);if(await this._storage.put(n,t),!this._isUsingServerCookies){let e=x.parse(t)?.expiration;L.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),L.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=u.base64url.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(R);return typeof e==`string`?e:null}async storeActiveUserId(e){let t=await this.getSavedUserIds();await this.storeSavedUserIds([...t,e]),await this._storage.put(R,e)}async getSavedUserIds(){let e=await this._storage.get(st);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(st,JSON.stringify(t)):await this._storage.del(st),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 C({code:`invalid_input`,error:`Cannot switch active user because the user ID is not saved on this device`});await this._storage.put(R,e)}};const pt=e=>{let t=new AbortController;return setTimeout(()=>t.abort(),e),t.signal};function mt(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 G=()=>void 0,K={NONE:-1/0,ERROR:1,WARN:2,INFO:3,DEBUG:1/0},ht=({level:e,logger:t})=>({get level(){return e},error:K[e]>=K.ERROR?t.error:G,warn:K[e]>=K.WARN?t.warn:G,info:K[e]>=K.INFO?t.info:G,debug:K[e]>=K.DEBUG?t.debug:G}),gt=`privy:caid`;var _t=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=ht({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 ft({storage:this._storage,isUsingServerCookies:!1,appId:e.appId,setStoredUsers:e.callbacks?.setStoredUsers}),this._fetch=(0,v.default)(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 C({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}${(0,l.getPathWithParams)(e.path,t)}${mt(n)}`}async fetchWithoutAuthentication(e,t){if(!this.isMultiUserModeEnabled)throw new C({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 S({...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:pt(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:pt(2e4),headers:t}}async _beforeRequest(e){return await this._initialize(),await this.getAccessTokenInternal(),this.beforeRequestWithoutRefresh(e)}async getAppConfig(){return await this.fetch(l.AppConfig,{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(gt);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(gt,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(gt)}catch(e){this.logger.error(`Unable to delete clientId`,e)}}async createAnalyticsEvent(e,t){try{await this.fetch(l.AnalyticsEvent,{body:{event_name:e,client_id:await this._getOrGenerateClientAnalyticsId(),payload:t},onRequest:this.beforeRequestWithoutRefresh.bind(this)})}catch{}}async refreshSession(e=!1){if(!await this.isStorageAccessible())throw new C({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 S({code:ee.PrivyErrorCode.MISSING_OR_INVALID_TOKEN,error:`No tokens found in storage`,status:401});try{this.logger.debug(`[privy:refresh] fetching: ${l.RefreshSession.path}`);let n=await this.fetch(l.RefreshSession,{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 S&&e.code===ee.PrivyErrorCode.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}}},vt=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(l.AcceptTermsOnUser,{})}}async switchActiveUser(e){if(!this._isMultiUserModeEnabled)throw new C({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 C({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 q=e=>e.type===`wallet`&&e.wallet_client_type===`privy`&&e.connector_type===`embedded`,J=e=>e?e.linked_accounts.filter(q).filter(e=>e.chain_type===`ethereum`).sort((e,t)=>e.wallet_index-t.wallet_index):[],Y=e=>J(e).find(e=>e.wallet_index===0)??null,yt=Y,X=e=>e?e.linked_accounts.filter(q).filter(e=>e.chain_type===`solana`).sort((e,t)=>e.wallet_index-t.wallet_index):[],bt=e=>X(e).find(e=>e.wallet_index===0)??null,xt=(e,t)=>t===`off`||J(e).length>0?!1:e.linked_accounts.filter(e=>e.type===`wallet`&&e.chain_type===`ethereum`).length>0?t===`all-users`:!0,St=(e,t)=>t===`off`||X(e).length>0?!1:e.linked_accounts.filter(e=>e.type===`wallet`&&e.chain_type===`solana`).length>0?t===`all-users`:!0,Ct=(e,t)=>({...e,is_new_user:t.is_new_user,oauth_tokens:t.oauth_tokens}),Z=async(e,t,n)=>{let r=xt(t.user,n?.ethereum?.createOnLogin??`off`),i=St(t.user,n?.solana?.createOnLogin??`off`);if(r&&i){let n=await e.create({recoveryMethod:`privy`,skipCallbacks:!0}),r=await e.createSolana({ethereumAccount:Y(n.user)??void 0});return Ct(r,t)}if(r){let n=await e.create({recoveryMethod:`privy`,solanaAccount:bt(t.user)??void 0});return Ct(n,t)}if(i){let n=await e.createSolana({ethereumAccount:Y(t.user)??void 0});return Ct(n,t)}return t};var wt=class{_privyInternal;_embedded;constructor(e,t){this._privyInternal=e,this._embedded=t}async syncWithToken(e,t,n){let r=await this._privyInternal.fetchForLogin(l.CustomJWTAuthenticate,{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(l.CustomJWTLink,{body:{token:e}});let t=await this._privyInternal.refreshSession();return{user:t.user,identity_token:t.identity_token}}},Tt=class{_privyInternal;_embedded;constructor(e,t){this._privyInternal=e,this._embedded=t}async sendCode(e,t){return this._privyInternal.fetch(l.PasswordlessInit,{body:{email:e,token:t}})}async loginWithCode(e,t,n,r){let i=await this._privyInternal.fetchForLogin(l.PasswordlessAuthenticate,{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(l.PasswordlessLink,{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(l.PasswordlessUpdate,{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(l.PasswordlessUnlink,{body:{address:e}});let t=await this._privyInternal.refreshSession();return{user:t.user,identity_token:t.identity_token}}},Et=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.FarcasterInit,{body:{relying_party:e,redirect_url:t,token:n}})}async getFarcasterStatus({channel_token:e}){return await this._privyInternal.fetch(l.FarcasterStatus,{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(l.FarcasterAuthenticate,{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(l.FarcasterLink,{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(l.FarcasterUnlink,{body:{fid:e}});let t=await this._privyInternal.refreshSession();return{user:t.user,identity_token:t.identity_token}}},Dt=class{_privyInternal;_embedded;constructor(e,t){this._privyInternal=e,this._embedded=t}async initializeAuth(){return await this._privyInternal.fetch(l.FarcasterV2Init,{body:{}})}async authenticate({message:e,signature:t,fid:n},r){let i=await this._privyInternal.fetchForLogin(l.FarcasterV2Authenticate,{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}},Ot=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(l.GuestAuthenticate,{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 kt(e,t){let n=await t(`SHA-256`,new TextEncoder().encode(e));return new Uint8Array(n)}function At(e){return crypto.getRandomValues(new Uint8Array(e))}function jt(){return u.base64url.encode(At(36))}function Mt(){return jt()}async function Nt({codeVerifier:e,method:t=`S256`,digest:n}){if(t==`S256`){let t=await kt(e,n);return u.base64url.encode(t)}else return e}var Pt=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=jt(),r=Mt(),i=await Nt({codeVerifier:n,digest:this._crypto.digest});return await Promise.all([this._storage.put($,n),this._storage.put(Q,r)]),this._privyInternal.fetchForLogin(l.OAuthInit,{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 C({code:`pkce_state_code_mismatch`,error:`Unexpected auth flow. This may be a phishing attempt.`});let c=await this._privyInternal.fetchForLogin(l.OAuthAuthenticate,{body:{authorization_code:e,code_type:r,state_code:s,code_verifier:o,mode:i}});await this._privyInternal.session.updateWithTokensResponse(c);let u=await Z(this._embedded,c,a?.embedded);return await Promise.all([this._storage.del($),this._storage.del(Q)]),this._privyInternal.callbacks?.setUser?.(u.user),u}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 C({code:`pkce_state_code_mismatch`,error:`Unexpected auth flow. This may be a phishing attempt.`});let o=await this._privyInternal.fetch(l.OAuthLink,{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(l.OAuthUnlink,{body:{provider:e,subject:t}});let n=await this._privyInternal.refreshSession();return{user:n.user,identity_token:n.identity_token}}},Ft=class{_privyInternal;_embedded;constructor(e,t){this._privyInternal=e,this._embedded=t}async generateRegistrationOptions(e){return await this._privyInternal.fetch(l.PasskeyLinkInit,{body:{relying_party:e}})}async generateAuthenticationOptions(e){return await this._privyInternal.fetch(l.PasskeyAuthenticateInit,{body:{relying_party:e}})}async generateSignupOptions(e){return await this._privyInternal.fetch(l.PasskeyRegisterInit,{body:{relying_party:e}})}async loginWithPasskey(e,t,n,r){let i=await this._privyInternal.fetchForLogin(l.PasskeyAuthenticate,{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(l.PasskeyRegister,{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(l.PasskeyLink,{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}}}},It=class{_privyInternal;_embedded;constructor(e,t){this._privyInternal=e,this._embedded=t}async sendCode(e,t){return this._privyInternal.fetch(l.PasswordlessSmsInit,{body:{phoneNumber:e,token:t}})}async loginWithCode(e,t,n,r){let i=await this._privyInternal.fetchForLogin(l.PasswordlessSmsAuthenticate,{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(l.PasswordlessSmsLink,{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(l.PasswordlessSmsUpdate,{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(l.PasswordlessSmsUnlink,{body:{phoneNumber:e}});let t=await this._privyInternal.refreshSession();return{user:t.user,identity_token:t.identity_token}}},Lt=class{_privyInternal;_embedded;_wallet=void 0;_preparedMessage;constructor(e,t){this._privyInternal=e,this._embedded=t}async unlinkWallet(e){await this._privyInternal.fetch(l.SiweUnlink,{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(l.SiweLink,{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(l.SiweAuthenticate,{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(l.SiweInit,{body:{address:e.address}}),i=Rt({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 Rt(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
|
|
12
|
+
- https://privy.io`}var zt=class{_privyInternal;_embedded;constructor(e,t){this._privyInternal=e,this._embedded=t}async unlink({address:e}){await this._privyInternal.fetch(l.SiwsUnlink,{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(l.SiwsLink,{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(l.SiwsAuthenticate,{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(l.SiwsInit,{body:{address:e}});return{nonce:t}}},Bt=class{_privyInternal;constructor(e){this._privyInternal=e}async link(e,t,n,r){await this._privyInternal.fetch(l.SiweLinkSmartWallet,{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(l.SiweInit,{body:{address:e.address}});return{nonce:t,message:Vt({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 Vt(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 Ft=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(l.TelegramAuthenticate,{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(l.TelegramLink,{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(l.TelegramUnlink,{body:{telegram_user_id:e}});let t=await this._privyInternal.refreshSession();return{user:t.user,identity_token:t.identity_token}}},It=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 _t(this._privyInternal,t),this.phone=new kt(this._privyInternal,t),this.email=new vt(this._privyInternal,t),this.oauth=new Dt(this._privyInternal,t,n,r),this.guest=new xt(this._privyInternal,t),this.siwe=new At(this._privyInternal,t),this.siws=new Mt(this._privyInternal,t),this.smartWallet=new Nt(this._privyInternal),this.passkey=new Ot(this._privyInternal,t),this.farcaster=new yt(this._privyInternal,t),this.farcasterV2=new bt(this._privyInternal,t),this.telegram=new Ft(this._privyInternal,t)}async logout(e){try{let e=await this._privyInternal.session.getRefreshToken()??void 0;await this._privyInternal.fetch(l.Logout,{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)}},Lt=class{_privyInternal;constructor(e){this._privyInternal=e}async initOnRampSession(e){return await this._privyInternal.fetch(l.CoinbaseOnRampInit,{body:e})}async getStatus(e){return await this._privyInternal.fetch(l.CoinbaseOnRampStatus,{query:{partnerUserId:e}})}};const Rt={prod:{url:`https://api.moonpay.com/v1`,key:`pk_live_hirbpu0cVcLHrjktC9l7fbc9ctjv0SL`},sandbox:{url:`https://api.moonpay.com/v1`,key:`pk_test_fqWjXZMSFwloh7orvJsRfjiUHXJqFzI`}},zt=new Set([d.mainnet.id,d.arbitrum.id,d.base.id,d.polygon.id,d.avalanche.id,d.celo.id,d.monadMainnet.id]),Bt=new Set([d.mainnet.id,d.arbitrum.id,d.optimism.id,d.base.id,d.polygon.id,d.avalanche.id]);function Vt(e,t){switch(t){case`native-currency`:return zt.has(e);case`USDC`:return Bt.has(e);default:return console.warn(`Unknown asset passed to MoonPay Onramp`),!1}}function Ht(e,t){switch(e){case d.arbitrum.id:return t===`native-currency`?`ETH_ARBITRUM`:`USDC_ARBITRUM`;case d.avalanche.id:return t===`native-currency`?`AVAX_CCHAIN`:`USDC_CCHAIN`;case d.base.id:return t===`native-currency`?`ETH_BASE`:`USDC_BASE`;case d.celo.id:return`CELO_CELO`;case d.polygon.id:return t===`native-currency`?`MATIC_POLYGON`:`USDC_POLYGON`;case d.monadMainnet.id:return`MON_MON`;case d.mainnet.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 Ut(e){switch(e){case`card`:case`payment-request`:return`credit_debit_card`;default:throw Error(`Unsupported Moonpay funding method ${e}`)}}var Wt=class{_privyInternal;constructor(e){this._privyInternal=e}async sign(e){return await this._privyInternal.fetch(l.MoonpayOnRampSign,{body:e})}async getTransactionStatus({transactionId:e,useSandbox:t}){let{url:n,key:r}=Rt[t?`sandbox`:`prod`],i=await(0,v.default)(fetch,{retries:3,retryDelay:500})(`${n}/transactions/ext/${e}?apiKey=${r}`);if(!i.ok)throw new oe({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}},Gt=class{moonpay;coinbase;constructor(e){this.moonpay=new Wt(e),this.coinbase=new Lt(e)}},Kt=class{_privyInternal;constructor(e){this._privyInternal=e}async generateAuthenticationOptions(e){return await this._privyInternal.fetch(l.MfaPasskeyInit,{body:e})}},qt=class{_privyInternal;constructor(e){this._privyInternal=e}async sendCode(e){return await this._privyInternal.fetch(l.MfaPasswordlessSmsInit,{body:e})}},Jt=class{privyInternal;proxy;sms;passkey;constructor(e,t){this.proxy=t,this.privyInternal=e,this.sms=new qt(e),this.passkey=new Kt(e)}setProxy(e){this.proxy=e}async getAccessTokenInternal(){let e=await this.privyInternal.getAccessTokenInternal();if(!e)throw new C({error:`Missing access token`,code:`attempted_rpc_call_before_logged_in`});return e}async verifyMfa(){if(!this.proxy)throw new C({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 C({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 C({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 C({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 C({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 C({error:`Embedded wallet proxy not initialized`,code:`embedded_wallet_webview_not_loaded`});return await this.proxy.clearMfa(e)}},Yt=class{_privyInternal;constructor(e){this._privyInternal=e}async init(e){return this._privyInternal.fetch(l.RecoveryOAuthInitICloud,{body:{client_type:e}})}async getICloudConfiguration(e){return this._privyInternal.fetch(l.RecoveryConfigurationICloud,{body:{client_type:e}})}},Xt=class{_privyInternal;_storage;_crypto;constructor(e,t,n){this._privyInternal=e,this._storage=t,this._crypto=n}async generateURL(e){let t=wt(),n=Tt(),r=await Et({codeVerifier:t,digest:this._crypto.digest});return await Promise.all([this._storage.put($,t),this._storage.put(Q,n)]),this._privyInternal.fetch(l.RecoveryOAuthInit,{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 C({code:`pkce_state_code_mismatch`,error:`Unexpected auth flow. This may be a phishing attempt.`});let i=await this._privyInternal.fetch(l.RecoveryOAuthAuthenticate,{body:{authorization_code:e,state_code:r,code_verifier:n}});return await Promise.all([this._storage.del($),this._storage.del(Q)]),i}},Zt=class{_privyInternal;auth;icloudAuth;constructor(e,t,n){this._privyInternal=e,this.auth=new Xt(this._privyInternal,t,n),this.icloudAuth=new Yt(this._privyInternal)}async getRecoveryKeyMaterial(e,t){return this._privyInternal.fetch(l.RecoveryKeyMaterial,{body:{chain_type:t},params:{address:e}})}},Qt=class{auth;user;embeddedWallet;recovery;mfa;app;mfaPromises;funding;delegated;crossApp;isMultiUserModeEnabled;_privyInternal;constructor({clientId:e,sessions:t,...n}){let r=ne(n.crypto);this.isMultiUserModeEnabled=t?.mode===`multi-user`,this._privyInternal=new dt({...n,appClientId:e,crypto:r,isMultiUserModeEnabled:this.isMultiUserModeEnabled}),this.mfa=new Jt(this._privyInternal),this.mfaPromises=new et,this.app=new re(this._privyInternal),this.embeddedWallet=new $e(this._privyInternal,n.embeddedWalletMessagePoster,n.supportedChains,this.mfa,this.mfaPromises,this.app),this.user=new ft(this._privyInternal,this.embeddedWallet,t?.mode===`multi-user`),this.auth=new It(this._privyInternal,this.embeddedWallet,n.storage,r,this.mfa),this.recovery=new Zt(this._privyInternal,n.storage,r),this.funding=new Gt(this._privyInternal),this.delegated=new ae(this._privyInternal),this.crossApp=new ie(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()}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}},$t=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)}},en=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 tn=e=>e?e.linked_accounts.filter(K).filter(nn).sort((e,t)=>e.wallet_index-t.wallet_index):[],nn=e=>e.chain_type===`bitcoin-segwit`||e.chain_type===`bitcoin-taproot`,rn=(e,t)=>{if(!e)return null;if(t?.imported)return an(t);let n=J(e)??X(e);return n?an(n):null},an=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`)},on=e=>e?.linked_accounts.find(e=>e.type===`smart_wallet`)??null,sn=(e,t)=>(0,b.isPossiblePhoneNumber)(String(e),t),cn=(e,t)=>`+${(0,b.getCountryCallingCode)(t)} ${e}`,ln=e=>`*${e.replaceAll(`-`,``).slice(-4)}`,un=e=>new b.AsYouType(e),dn=(0,b.getCountries)().map(e=>({code:e,callCode:(0,b.getCountryCallingCode)(e)})),fn=e=>{let t=(0,b.getExampleNumber)(e,te.default)?.formatInternational();return t?.substring(t.indexOf(` `)+1)},pn=e=>{let t=new b.AsYouType;t.input(e);let n=t.getCountry()||`US`,r=t.getCallingCode()||`1`;return{countryCode:n,phone:e.replace(`+`+r,``)}},mn=(e,t=!0)=>e.reduce((e,n)=>({...e,[n]:t}),{}),hn={[d.mainnet.id]:`0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48`,[d.sepolia.id]:`0x1c7D4B196Cb0C7B01d743Fbc6116a902379C7238`,[d.optimism.id]:`0x0b2c639c533813f4aa9d7837caf62653d097ff85`,[d.optimismSepolia.id]:`0x5fd84259d66Cd46123540766Be93DFE6D43130D7`,[d.polygon.id]:`0x3c499c542cef5e3811e1192ce70d8cc03d5c3359`,[d.polygonAmoy.id]:`0x41e94eb019c0762f9bfcf9fb1e58725bfb0e7582`,[d.base.id]:`0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913`,[d.baseSepolia.id]:`0x036CbD53842c5426634e7929541eC2318f3dCF7e`,[d.avalanche.id]:`0xB97EF9Ef8734C71904D8002F8b6Bc66Dd9c48a6E`,[d.avalancheFuji.id]:`0x5425890298aed601595a70ab815c96711a31bc65`,[d.arbitrum.id]:`0xaf88d065e77c8cC2239327C5EDb3A432268e5831`,[d.arbitrumSepolia.id]:`0x75faf114eafb1BDbe2F0316DF893fd58CE46AA4d`},gn={"mainnet-beta":`EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v`,devnet:`4zMMC9srt5Ri5X14GAgXhaHii3GnPAEERYPJgZJDncDU`,testnet:``};function _n(e,t){return e===hn[t.id]}async function vn(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 yn=new Set([d.mainnet.id,d.base.id,d.optimism.id,d.polygon.id,d.arbitrum.id,d.avalanche.id,d.monadMainnet.id]),bn=new Set([d.mainnet.id,d.base.id,d.polygon.id,d.optimism.id,d.arbitrum.id,d.avalanche.id,d.monadMainnet.id]),xn={buy:`CARD`,send:`CRYPTO_ACCOUNT`},Sn={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`},Cn={[d.mainnet.id]:`ethereum`,[d.base.id]:`base`,[d.optimism.id]:`optimism`,[d.polygon.id]:`polygon`,[d.arbitrum.id]:`arbitrum`,[d.avalanche.id]:`avacchain`,[d.monadMainnet.id]:`monad`};function wn(e){return e.startsWith(`.`)?`0${e}`:e}function Tn({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`,wn(n)),o.searchParams.set(`defaultNetwork`,r),o.searchParams.set(`defaultPaymentMethod`,xn[a]),o.searchParams.set(`defaultAsset`,Sn[i]),o.searchParams.set(`partnerUserId`,t.partner_user_id),{url:o}}const En=(e,t)=>{switch(t){case`native-currency`:return yn.has(e);case`USDC`:return bn.has(e);default:return console.warn(`Unknown asset passed to Coinbase Onramp`),!1}};function Dn(e){return Cn[e]}function On(e,t){return t===`USDC`?`USDC`:e===d.polygon.id?`POL`:e===d.monadMainnet.id?`MON`:`ETH`}var kn=class{cluster;_crypto;constructor(e,t){this.cluster=e,this._crypto=ne(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 An=({address:e,nonce:t,domain:n,uri:r})=>`${n} wants you to sign in with your Solana account:
|
|
23
|
+
- https://privy.io`}var Ht=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(l.TelegramAuthenticate,{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(l.TelegramLink,{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(l.TelegramUnlink,{body:{telegram_user_id:e}});let t=await this._privyInternal.refreshSession();return{user:t.user,identity_token:t.identity_token}}},Ut=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 wt(this._privyInternal,t),this.phone=new It(this._privyInternal,t),this.email=new Tt(this._privyInternal,t),this.oauth=new Pt(this._privyInternal,t,n,r),this.guest=new Ot(this._privyInternal,t),this.siwe=new Lt(this._privyInternal,t),this.siws=new zt(this._privyInternal,t),this.smartWallet=new Bt(this._privyInternal),this.passkey=new Ft(this._privyInternal,t),this.farcaster=new Et(this._privyInternal,t),this.farcasterV2=new Dt(this._privyInternal,t),this.telegram=new Ht(this._privyInternal,t)}async logout(e){try{let e=await this._privyInternal.session.getRefreshToken()??void 0;await this._privyInternal.fetch(l.Logout,{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)}},Wt=class{_privyInternal;constructor(e){this._privyInternal=e}async initOnRampSession(e){return await this._privyInternal.fetch(l.CoinbaseOnRampInit,{body:e})}async getStatus(e){return await this._privyInternal.fetch(l.CoinbaseOnRampStatus,{query:{partnerUserId:e}})}};const Gt={prod:{url:`https://api.moonpay.com/v1`,key:`pk_live_hirbpu0cVcLHrjktC9l7fbc9ctjv0SL`},sandbox:{url:`https://api.moonpay.com/v1`,key:`pk_test_fqWjXZMSFwloh7orvJsRfjiUHXJqFzI`}},Kt=new Set([d.mainnet.id,d.arbitrum.id,d.base.id,d.polygon.id,d.avalanche.id,d.celo.id,d.monadMainnet.id]),qt=new Set([d.mainnet.id,d.arbitrum.id,d.optimism.id,d.base.id,d.polygon.id,d.avalanche.id]);function Jt(e,t){switch(t){case`native-currency`:return Kt.has(e);case`USDC`:return qt.has(e);default:return console.warn(`Unknown asset passed to MoonPay Onramp`),!1}}function Yt(e,t){switch(e){case d.arbitrum.id:return t===`native-currency`?`ETH_ARBITRUM`:`USDC_ARBITRUM`;case d.avalanche.id:return t===`native-currency`?`AVAX_CCHAIN`:`USDC_CCHAIN`;case d.base.id:return t===`native-currency`?`ETH_BASE`:`USDC_BASE`;case d.celo.id:return`CELO_CELO`;case d.polygon.id:return t===`native-currency`?`MATIC_POLYGON`:`USDC_POLYGON`;case d.monadMainnet.id:return`MON_MON`;case d.mainnet.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 Xt(e){switch(e){case`card`:case`payment-request`:return`credit_debit_card`;default:throw Error(`Unsupported Moonpay funding method ${e}`)}}var Zt=class{_privyInternal;constructor(e){this._privyInternal=e}async sign(e){return await this._privyInternal.fetch(l.MoonpayOnRampSign,{body:e})}async getTransactionStatus({transactionId:e,useSandbox:t}){let{url:n,key:r}=Gt[t?`sandbox`:`prod`],i=await(0,v.default)(fetch,{retries:3,retryDelay:500})(`${n}/transactions/ext/${e}?apiKey=${r}`);if(!i.ok)throw new oe({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}},Qt=class{moonpay;coinbase;constructor(e){this.moonpay=new Zt(e),this.coinbase=new Wt(e)}},$t=class{_privyInternal;constructor(e){this._privyInternal=e}async generateAuthenticationOptions(e){return await this._privyInternal.fetch(l.MfaPasskeyInit,{body:e})}},en=class{_privyInternal;constructor(e){this._privyInternal=e}async sendCode(e){return await this._privyInternal.fetch(l.MfaPasswordlessSmsInit,{body:e})}},tn=class{privyInternal;proxy;sms;passkey;constructor(e,t){this.proxy=t,this.privyInternal=e,this.sms=new en(e),this.passkey=new $t(e)}setProxy(e){this.proxy=e}async getAccessTokenInternal(){let e=await this.privyInternal.getAccessTokenInternal();if(!e)throw new C({error:`Missing access token`,code:`attempted_rpc_call_before_logged_in`});return e}async verifyMfa(){if(!this.proxy)throw new C({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 C({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 C({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 C({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 C({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 C({error:`Embedded wallet proxy not initialized`,code:`embedded_wallet_webview_not_loaded`});return await this.proxy.clearMfa(e)}},nn=class{_privyInternal;constructor(e){this._privyInternal=e}async init(e){return this._privyInternal.fetch(l.RecoveryOAuthInitICloud,{body:{client_type:e}})}async getICloudConfiguration(e){return this._privyInternal.fetch(l.RecoveryConfigurationICloud,{body:{client_type:e}})}},rn=class{_privyInternal;_storage;_crypto;constructor(e,t,n){this._privyInternal=e,this._storage=t,this._crypto=n}async generateURL(e){let t=jt(),n=Mt(),r=await Nt({codeVerifier:t,digest:this._crypto.digest});return await Promise.all([this._storage.put($,t),this._storage.put(Q,n)]),this._privyInternal.fetch(l.RecoveryOAuthInit,{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 C({code:`pkce_state_code_mismatch`,error:`Unexpected auth flow. This may be a phishing attempt.`});let i=await this._privyInternal.fetch(l.RecoveryOAuthAuthenticate,{body:{authorization_code:e,state_code:r,code_verifier:n}});return await Promise.all([this._storage.del($),this._storage.del(Q)]),i}},an=class{_privyInternal;auth;icloudAuth;constructor(e,t,n){this._privyInternal=e,this.auth=new rn(this._privyInternal,t,n),this.icloudAuth=new nn(this._privyInternal)}async getRecoveryKeyMaterial(e,t){return this._privyInternal.fetch(l.RecoveryKeyMaterial,{body:{chain_type:t},params:{address:e}})}},on=class{auth;user;embeddedWallet;recovery;mfa;app;mfaPromises;funding;delegated;crossApp;isMultiUserModeEnabled;_privyInternal;constructor({clientId:e,sessions:t,...n}){let r=ne(n.crypto);this.isMultiUserModeEnabled=t?.mode===`multi-user`,this._privyInternal=new _t({...n,appClientId:e,crypto:r,isMultiUserModeEnabled:this.isMultiUserModeEnabled}),this.mfa=new tn(this._privyInternal),this.mfaPromises=new it,this.app=new re(this._privyInternal),this.embeddedWallet=new rt(this._privyInternal,n.embeddedWalletMessagePoster,n.supportedChains,this.mfa,this.mfaPromises,this.app),this.user=new vt(this._privyInternal,this.embeddedWallet,t?.mode===`multi-user`),this.auth=new Ut(this._privyInternal,this.embeddedWallet,n.storage,r,this.mfa),this.recovery=new an(this._privyInternal,n.storage,r),this.funding=new Qt(this._privyInternal),this.delegated=new ae(this._privyInternal),this.crossApp=new ie(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}},sn=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)}},cn=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 ln=e=>e?e.linked_accounts.filter(q).filter(un).sort((e,t)=>e.wallet_index-t.wallet_index):[],un=e=>e.chain_type===`bitcoin-segwit`||e.chain_type===`bitcoin-taproot`,dn=(e,t)=>{if(!e)return null;if(t?.imported)return fn(t);let n=Y(e)??bt(e);return n?fn(n):null},fn=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`)},pn=e=>e?.linked_accounts.find(e=>e.type===`smart_wallet`)??null,mn=(e,t)=>(0,b.isPossiblePhoneNumber)(String(e),t),hn=e=>(0,b.parsePhoneNumberFromString)(e,`US`)?.format(`E.164`)??e.replace(/[\s()-]/g,``),gn=(e,t)=>`+${(0,b.getCountryCallingCode)(t)} ${e}`,_n=e=>`*${e.replaceAll(`-`,``).slice(-4)}`,vn=e=>new b.AsYouType(e),yn=(0,b.getCountries)().map(e=>({code:e,callCode:(0,b.getCountryCallingCode)(e)})),bn=e=>{let t=(0,b.getExampleNumber)(e,te.default)?.formatInternational();return t?.substring(t.indexOf(` `)+1)},xn=e=>{let t=new b.AsYouType;t.input(e);let n=t.getCountry()||`US`,r=t.getCallingCode()||`1`;return{countryCode:n,phone:e.replace(`+`+r,``)}},Sn=(e,t=!0)=>e.reduce((e,n)=>({...e,[n]:t}),{}),Cn={[d.mainnet.id]:`0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48`,[d.sepolia.id]:`0x1c7D4B196Cb0C7B01d743Fbc6116a902379C7238`,[d.optimism.id]:`0x0b2c639c533813f4aa9d7837caf62653d097ff85`,[d.optimismSepolia.id]:`0x5fd84259d66Cd46123540766Be93DFE6D43130D7`,[d.polygon.id]:`0x3c499c542cef5e3811e1192ce70d8cc03d5c3359`,[d.polygonAmoy.id]:`0x41e94eb019c0762f9bfcf9fb1e58725bfb0e7582`,[d.base.id]:`0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913`,[d.baseSepolia.id]:`0x036CbD53842c5426634e7929541eC2318f3dCF7e`,[d.avalanche.id]:`0xB97EF9Ef8734C71904D8002F8b6Bc66Dd9c48a6E`,[d.avalancheFuji.id]:`0x5425890298aed601595a70ab815c96711a31bc65`,[d.arbitrum.id]:`0xaf88d065e77c8cC2239327C5EDb3A432268e5831`,[d.arbitrumSepolia.id]:`0x75faf114eafb1BDbe2F0316DF893fd58CE46AA4d`},wn={"mainnet-beta":`EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v`,devnet:`4zMMC9srt5Ri5X14GAgXhaHii3GnPAEERYPJgZJDncDU`,testnet:``};function Tn(e,t){return e===Cn[t.id]}async function En(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 Dn=new Set([d.mainnet.id,d.base.id,d.optimism.id,d.polygon.id,d.arbitrum.id,d.avalanche.id,d.monadMainnet.id]),On=new Set([d.mainnet.id,d.base.id,d.polygon.id,d.optimism.id,d.arbitrum.id,d.avalanche.id,d.monadMainnet.id]),kn={buy:`CARD`,send:`CRYPTO_ACCOUNT`},An={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`},jn={[d.mainnet.id]:`ethereum`,[d.base.id]:`base`,[d.optimism.id]:`optimism`,[d.polygon.id]:`polygon`,[d.arbitrum.id]:`arbitrum`,[d.avalanche.id]:`avacchain`,[d.monadMainnet.id]:`monad`};function Mn(e){return e.startsWith(`.`)?`0${e}`:e}function Nn({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`,Mn(n)),o.searchParams.set(`defaultNetwork`,r),o.searchParams.set(`defaultPaymentMethod`,kn[a]),o.searchParams.set(`defaultAsset`,An[i]),o.searchParams.set(`partnerUserId`,t.partner_user_id),{url:o}}const Pn=(e,t)=>{switch(t){case`native-currency`:return Dn.has(e);case`USDC`:return On.has(e);default:return console.warn(`Unknown asset passed to Coinbase Onramp`),!1}};function Fn(e){return jn[e]}function In(e,t){return t===`USDC`?`USDC`:e===d.polygon.id?`POL`:e===d.monadMainnet.id?`MON`:`ETH`}var Ln=class{cluster;_crypto;constructor(e,t){this.cluster=e,this._crypto=ne(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 Rn=({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 jn({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 Mn({name:e}){switch(e){case`mainnet-beta`:return`EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v`;case`devnet`:return`4zMMC9srt5Ri5X14GAgXhaHii3GnPAEERYPJgZJDncDU`;default:throw Error(`USDC not supported on cluster ${e}`)}}function Nn(e){switch(e){case`mainnet-beta`:return`Solana`;case`testnet`:return`Testnet`;case`devnet`:return`Devnet`}}const Pn=`solana offchain`,Fn=1232;function In(e){let t=g.encoding.utf8.toBytes(e),n=new Uint8Array(32);return n.set(t.slice(0,32)),n}function Ln({message:e,signerPublicKey:t,domain:n}){let r=g.encoding.utf8.toBytes(e);if(t.length!==32)throw Error(`Signer public key must be 32 bytes`);let i=85+r.length;if(i>Fn)throw Error(`Combined message length (${i}) exceeds maximum (${Fn})`);let a=In(n),o=new Uint8Array(i),s=0;o[s]=255,s+=1;let c=g.encoding.utf8.toBytes(Pn);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 Rn(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))!==Pn)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 zn=[`privy`],Bn=[`metamask`,`phantom`,`brave_wallet`,`rainbow`],Vn=[`coinbase_wallet`],Hn=`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(`.`),Un=[`unknown`],Wn=[...Bn,...Vn,...Hn,...zn,...Un],Gn=[`injected`,`wallet_connect`,`wallet_connect_v2`,`coinbase_wallet`,`embedded`];function Kn(e){return e?`${e.slice(0,5)}…${e.slice(-4)}`:``}function qn({wei:e,precision:t=3}){return parseFloat((0,p.formatEther)(e)).toFixed(t).replace(/0+$/,``).replace(/\.$/,``)}function Jn({amount:e,decimals:t}){return(0,p.formatUnits)(BigInt(e),t)}function Yn({lamports:e}){return(0,p.formatUnits)(e,9)}const Xn=e=>[...q(e),...Y(e)],Zn=(e,t)=>e.imported?e:J(t)??X(t),Qn=e=>async({address:t,chainType:n})=>{let{user:r}=await e.user.get();if(!r)throw new C({code:`delegated_actions_before_logged_in`,error:`Must be logged in to delegate wallets`});if(n!==`solana`&&n!==`ethereum`)throw new C({code:`unsupported_chain_type`,error:`Only Solana and Ethereum embedded wallets are supported for delegation and revocation.`});let i=Xn(r).find(e=>e.chain_type===n&&e.address===t);if(!i)throw new C({code:`delegated_actions_wallet_not_found`,error:`Address to delegate is not associated with current user.`});if(w(i))throw new C({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=Zn(i,r);if(!a)throw new C({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}},$n=e=>async()=>{let{user:t}=await e.user.get();if(!t)throw new C({code:`delegated_actions_before_logged_in`,error:`Must be logged in to revoke delegated wallets`});let n=Xn(t);if(n.some(w))throw new C({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 C({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 er=o({delegateWallet:()=>Qn,revokeWallets:()=>$n});const tr=({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 C({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},nr=({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 C({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 rr(e,t){return e.linked_accounts.filter(e=>e.type===`cross_app`).flatMap(e=>e.smart_wallets).some(e=>e.address===t)}const ir=(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)),ar=({client:e,openAuthSession:t})=>{let n=nr({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))},or=({client:e,openAuthSession:t})=>{let n=ar({client:e,openAuthSession:t});return async({user:r,request:i,redirectUrl:a,address:o})=>{let s=ir(r,o);if(!s)throw new C({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 C({code:`cross_app_invalid_app`,error:`Invalid connected app`});if(u.read_only)throw new C({code:`cross_app_read_only`,error:`Cannot transact against a read-only provider app`});let d=await n({providerAppId:c,redirectUrl:a});if(!d)throw new C({code:`cross_app_request_error`,error:`Wallet operations require a valid token`});let f={content:{request:{request:i}},timestamp:Date.now(),callbackUrl:a},p=new URL(`${u.provider_app_custom_api_url}/oauth/transact`);p.searchParams.set(`communicationMode`,`redirect`),p.searchParams.set(`token`,d),p.searchParams.set(`request`,JSON.stringify(f));let{privy_cross_app_type:m,privy_cross_app_payload:h}=await t(p.href,a);if(!m||!h)throw new C({code:`cross_app_request_error`,error:`Cross app request returned an invalid result`});if(m===`PRIVY_CROSS_APP_ACTION_ERROR`)throw new C({code:`cross_app_request_error`,error:h});if(m!==`PRIVY_CROSS_APP_ACTION_RESPONSE`)throw new C({code:`cross_app_request_error`,error:`Cross app request returned an invalid result`});return{result:h}}};function sr(e){if(!e)throw new C({code:`attempted_cross_app_request_before_logged_in`,error:`Must be logged in to sign messages with a cross-app wallet`})}const cr=({client:e,openAuthSession:t})=>{let n=or({client:e,openAuthSession:t});return async({user:e,address:t,message:r,redirectUrl:i})=>{sr(e);let a={method:rr(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 lr(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 ur=({client:e,openAuthSession:t})=>{let n=or({client:e,openAuthSession:t});return async({user:e,typedData:t,address:r,redirectUrl:i})=>{sr(e);let a={method:rr(e,r)?`privy_signSmartWalletTypedData`:`eth_signTypedData_v4`,params:[r,lr(t)]},{result:o}=await n({user:e,request:a,address:r,redirectUrl:i});return{signature:o}}},dr=({client:e,openAuthSession:t})=>{let n=or({client:e,openAuthSession:t});return async({user:e,transaction:t,address:r,redirectUrl:i})=>{sr(e);let a={method:rr(e,r)?`privy_sendSmartWalletTx`:`eth_sendTransaction`,params:[t]},{result:o}=await n({user:e,request:a,address:r,redirectUrl:i});return{transactionHash:o}}};var fr=o({sendTransaction:()=>dr,signMessage:()=>cr,signTypedData:()=>ur}),pr=o({linkWithCrossAppAuth:()=>nr,loginWithCrossAppAuth:()=>tr,wallet:()=>fr});function mr(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 hr(e,t){let n=mr(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 gr(e){let{user:t}=await e.privy.user.get();if(!t)return{ok:!1,error:`NOT_AUTHENTICATED`};let n=hr(e.caip2,t);if(n)return{ok:!0,address:n};let r=mr(e.caip2);if(!r)return{ok:!1,error:`UNSUPPORTED_CHAIN`};try{let t=await e.privy.fetchPrivyRoute(l.WalletCreate,{body:{chain_type:r}});return await e.onWalletCreated?.(),{ok:!0,address:t.address}}catch{return{ok:!1,error:`REFUND_WALLET_CREATION_FAILED`}}}async function _r(e){let{user:t}=await e.privy.user.get();if(!t)throw Error(`NOT_AUTHENTICATED`);let n=e.refundAddress;if(!n){let t=await gr({privy:e.privy,caip2:e.sourceChain,onWalletCreated:e.onWalletCreated});if(!t.ok)throw Error(t.error);n=t.address}return await e.privy.fetchPrivyRoute(l.CreateDepositAddressQuote,{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 vr(e){return new Promise(t=>{setTimeout(()=>{t()},e)})}const yr=async({operation:e,until:t,delay:n,interval:r,attempts:i,signal:a})=>{n&&await vr(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 vr(r)}catch(e){e instanceof Error&&(c=e),o<i&&await vr(r)}}return{status:`max_attempts`,result:s,attempts:o,error:c}},br=2e3,xr=1800*1e3;function Sr(e,t){return Math.ceil(t/e)}function Cr(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 wr(e){return await e.privy.fetchPrivyRoute(l.GetDepositAddressOrder,{params:{order_id:e.orderId}})}async function Tr(e){let t=e.pollIntervalMs??br,n=e.timeoutMs??xr,r=e.signal??new AbortController().signal;return Cr(await yr({operation:async()=>{let t=await e.privy.fetchPrivyRoute(l.GetNextDepositAddressOrder,{params:{deposit_address_id:e.depositAddressId},query:{after:e.quoteCreatedAt}});if(t.order)return await e.privy.fetchPrivyRoute(l.GetDepositAddressOrder,{params:{order_id:t.order.id}})},until:e=>e!==void 0,delay:t,interval:t,attempts:Sr(t,n),signal:r}))}async function Er(e){let t=e.pollIntervalMs??br,n=e.timeoutMs??xr,r=e.signal??new AbortController().signal;return Cr(await yr({operation:()=>e.privy.fetchPrivyRoute(l.GetDepositAddressOrder,{params:{order_id:e.orderId}}),until:e=>e.status!==`executing`,delay:t,interval:t,attempts:Sr(t,n),signal:r}))}var Dr=o({generateDepositAddress:()=>_r,getConfig:()=>Or,getDeposit:()=>wr,resolveRefundAddress:()=>gr,waitForCompletion:()=>Er,waitForDeposit:()=>Tr});async function Or(e){let t=await e.fetchPrivyRoute(l.GetDepositConfig,{});return{currencies:t.currencies,chains:t.chains}}async function kr(e,t,{wallet_id:n,...r}){let i=e.getCompiledPath(l.WalletRawSign,{params:{wallet_id:n}}),a=String(Date.now()+xe),{signature:o}=await M(t,{version:1,url:i,method:l.WalletRawSign.method,headers:{"privy-app-id":e.app.appId,[N]:a},body:{...r}});if(Date.now()>Number(a))throw new C({error:`Wallet request expired before it could be sent. Please try again.`,code:`embedded_wallet_request_expired`});return await e.fetchPrivyRoute(l.WalletRawSign,{body:r,params:{wallet_id:n},headers:{"privy-authorization-signature":o,[N]:a}})}async function Ar(e,{wallet_id:t}){return await e.fetchPrivyRoute(l.WalletGet,{params:{wallet_id:t}})}async function jr(e,{wallet_id:t},n,r){let{signature:i}=await M(n,{version:1,url:e.getCompiledPath(l.WalletUpdate,{params:{wallet_id:t}}),method:l.WalletUpdate.method,headers:{"privy-app-id":e.app.appId},body:r});return await e.fetchPrivyRoute(l.WalletUpdate,{params:{wallet_id:t},body:r,headers:{"privy-authorization-signature":i}})}async function Mr({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(w(t)){if(n.length===0)throw Error(`Must specify at least one signer to add.`);let r={wallet_id:t.id},i=await Ar(e,r);await jr(e,r,Fr(e),{additional_signers:i.additional_signers.concat(n)})}else{if(t.delegated)return Pr(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=Zn(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 Pr(e)}async function Nr({client:e,wallet:t}){return w(t)?await jr(e,{wallet_id:t.id},Fr(e),{additional_signers:[]}):await e.delegated.revoke(),Pr(e)}async function Pr(e){let{user:t}=await e.user.get();if(!t)throw Error(`Could not refresh user`);return{user:t}}function Fr(e){return(...t)=>e.embeddedWallet.signWithUserSigner(...t)}var Ir=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})))]}},Lr=Qt;exports.ALL_WALLET_CLIENT_TYPES=Wn,exports.BICONOMY=`biconomy`,exports.COINBASE_SMART_WALLET=`coinbase_smart_wallet`,exports.ConnectedStandardSolanaWallet=Ir,exports.EmbeddedProviderError=E,exports.InMemoryCache=en,exports.KERNEL=`kernel`,exports.LIGHT_ACCOUNT=`light_account`,exports.LocalStorage=$t,exports.MoonpayApiError=oe,exports.NEXUS=`nexus`,exports.PrivyApiError=S,exports.PrivyClientError=C,exports.PrivyConnectorError=me,exports.PrivyEmbeddedWalletErrorCode=de,exports.PrivyProviderRpcError=ye,exports.ProviderErrors=D,exports.SAFE=`safe`,exports.SUPPORTED_CONNECTOR_TYPES=Gn,exports.SolanaClient=kn,exports.SolanaUsdcAddressMap=gn,exports.THIRDWEB=`thirdweb`,exports.UsdcAddressMap=hn,exports.addSessionSigners=Mr,exports.buildSolanaOffchainMessage=Ln,exports.chainToMoonpayCurrency=Ht,exports.countryCodesAndNumbers=dn,exports.create=Ze,exports.createErrorFormatter=ce,exports.createSiwsMessage=An,Object.defineProperty(exports,"crossApp",{enumerable:!0,get:function(){return pr}}),exports.default=Lr,Object.defineProperty(exports,"delegatedActions",{enumerable:!0,get:function(){return er}}),Object.defineProperty(exports,"depositAddress",{enumerable:!0,get:function(){return Dr}}),exports.deriveSolanaApplicationDomain=In,exports.errorIndicatesMaxMfaRetries=_e,exports.errorIndicatesMfaCanceled=le,exports.errorIndicatesMfaRateLimit=ve,exports.errorIndicatesMfaTimeout=he,exports.errorIndicatesMfaVerificationFailed=ge,exports.errorIndicatesRecoveryIsNeeded=k,exports.formatLamportsAmount=Yn,exports.formatPhoneNumber=cn,exports.formatTokenAmount=Jn,exports.formatWalletAddress=Kn,exports.formatWeiAmount=qn,exports.fundingMethodToMoonpayPaymentMethod=Ut,exports.generateAuthorizationSignature=M,exports.generateWalletIdempotencyKey=vn,exports.getAllUserEmbeddedBitcoinWallets=tn,exports.getAllUserEmbeddedEthereumWallets=q,exports.getAllUserEmbeddedSolanaWallets=Y,exports.getCoinbaseOnRampUrl=Tn,exports.getCountryCallingCode=b.getCountryCallingCode,exports.getEntropyDetailsFromAccount=an,exports.getEntropyDetailsFromUser=rn,exports.getIsTokenUsdc=_n,exports.getJsonRpcEndpointFromChain=Fe,exports.getPhoneCountryCodeAndNumber=pn,exports.getPlaceholderPhoneNumber=fn,exports.getSolanaClusterDisplayName=Nn,exports.getSolanaRpcEndpointForCluster=jn,exports.getSolanaUsdcMintAddressForCluster=Mn,exports.getUserEmbeddedEthereumWallet=J,exports.getUserEmbeddedSolanaWallet=X,exports.getUserEmbeddedWallet=pt,exports.getUserSmartWallet=on,exports.getWallet=Ar,exports.isEmbeddedWalletAccount=K,exports.isSupportedChainIdForCoinbaseOnramp=En,exports.isSupportedChainIdForMoonpay=Vt,exports.isUnifiedWallet=w,exports.lastFourDigits=ln,exports.parseSolanaOffchainMessage=Rn,exports.phoneNumberTypingFormatter=un,exports.poll=yr,exports.rawSign=kr,exports.removeSessionSigners=Nr,exports.rpc=P,exports.throwIfInvalidRecoveryUpgradePath=Ie,exports.toCoinbaseAssetId=On,exports.toCoinbaseBlockchainFromChainId=Dn,exports.toObjectKeys=mn,exports.toWalletApiUnsignedEthTransaction=Se,exports.updateWallet=jr,exports.validatePhoneNumber=sn,Object.keys(d).forEach(function(e){e!=="default"&&!Object.prototype.hasOwnProperty.call(exports,e)&&Object.defineProperty(exports,e,{enumerable:!0,get:function(){return d[e]}})});
|
|
34
|
+
- https://privy.io`;function zn({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 Bn({name:e}){switch(e){case`mainnet-beta`:return`EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v`;case`devnet`:return`4zMMC9srt5Ri5X14GAgXhaHii3GnPAEERYPJgZJDncDU`;default:throw Error(`USDC not supported on cluster ${e}`)}}function Vn(e){switch(e){case`mainnet-beta`:return`Solana`;case`testnet`:return`Testnet`;case`devnet`:return`Devnet`}}const Hn=`solana offchain`,Un=1232;function Wn(e){let t=g.encoding.utf8.toBytes(e),n=new Uint8Array(32);return n.set(t.slice(0,32)),n}function Gn({message:e,signerPublicKey:t,domain:n}){let r=g.encoding.utf8.toBytes(e);if(t.length!==32)throw Error(`Signer public key must be 32 bytes`);let i=85+r.length;if(i>Un)throw Error(`Combined message length (${i}) exceeds maximum (${Un})`);let a=Wn(n),o=new Uint8Array(i),s=0;o[s]=255,s+=1;let c=g.encoding.utf8.toBytes(Hn);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 Kn(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))!==Hn)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 qn=[`privy`],Jn=[`metamask`,`phantom`,`brave_wallet`,`rainbow`],Yn=[`coinbase_wallet`],Xn=`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(`.`),Zn=[`unknown`],Qn=[...Jn,...Yn,...Xn,...qn,...Zn],$n=[`injected`,`wallet_connect`,`wallet_connect_v2`,`coinbase_wallet`,`embedded`];function er(e){return e?`${e.slice(0,5)}…${e.slice(-4)}`:``}function tr({wei:e,precision:t=3}){return parseFloat((0,p.formatEther)(e)).toFixed(t).replace(/0+$/,``).replace(/\.$/,``)}function nr({amount:e,decimals:t}){return(0,p.formatUnits)(BigInt(e),t)}function rr({lamports:e}){return(0,p.formatUnits)(e,9)}const ir=e=>[...J(e),...X(e)],ar=(e,t)=>e.imported?e:Y(t)??bt(t),or=e=>async({address:t,chainType:n})=>{let{user:r}=await e.user.get();if(!r)throw new C({code:`delegated_actions_before_logged_in`,error:`Must be logged in to delegate wallets`});if(n!==`solana`&&n!==`ethereum`)throw new C({code:`unsupported_chain_type`,error:`Only Solana and Ethereum embedded wallets are supported for delegation and revocation.`});let i=ir(r).find(e=>e.chain_type===n&&e.address===t);if(!i)throw new C({code:`delegated_actions_wallet_not_found`,error:`Address to delegate is not associated with current user.`});if(w(i))throw new C({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=ar(i,r);if(!a)throw new C({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}},sr=e=>async()=>{let{user:t}=await e.user.get();if(!t)throw new C({code:`delegated_actions_before_logged_in`,error:`Must be logged in to revoke delegated wallets`});let n=ir(t);if(n.some(w))throw new C({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 C({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 cr=o({delegateWallet:()=>or,revokeWallets:()=>sr});const lr=({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 C({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},ur=({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 C({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 dr(e,t){return e.linked_accounts.filter(e=>e.type===`cross_app`).flatMap(e=>e.smart_wallets).some(e=>e.address===t)}const fr=(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)),pr=({client:e,openAuthSession:t})=>{let n=ur({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))},mr=({client:e,openAuthSession:t})=>{let n=pr({client:e,openAuthSession:t});return async({user:r,request:i,redirectUrl:a,address:o})=>{let s=fr(r,o);if(!s)throw new C({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 C({code:`cross_app_invalid_app`,error:`Invalid connected app`});if(u.read_only)throw new C({code:`cross_app_read_only`,error:`Cannot transact against a read-only provider app`});let d=await n({providerAppId:c,redirectUrl:a});if(!d)throw new C({code:`cross_app_request_error`,error:`Wallet operations require a valid token`});let f={content:{request:{request:i}},timestamp:Date.now(),callbackUrl:a},p=new URL(`${u.provider_app_custom_api_url}/oauth/transact`);p.searchParams.set(`communicationMode`,`redirect`),p.searchParams.set(`token`,d),p.searchParams.set(`request`,JSON.stringify(f));let{privy_cross_app_type:m,privy_cross_app_payload:h}=await t(p.href,a);if(!m||!h)throw new C({code:`cross_app_request_error`,error:`Cross app request returned an invalid result`});if(m===`PRIVY_CROSS_APP_ACTION_ERROR`)throw new C({code:`cross_app_request_error`,error:h});if(m!==`PRIVY_CROSS_APP_ACTION_RESPONSE`)throw new C({code:`cross_app_request_error`,error:`Cross app request returned an invalid result`});return{result:h}}};function hr(e){if(!e)throw new C({code:`attempted_cross_app_request_before_logged_in`,error:`Must be logged in to sign messages with a cross-app wallet`})}const gr=({client:e,openAuthSession:t})=>{let n=mr({client:e,openAuthSession:t});return async({user:e,address:t,message:r,redirectUrl:i})=>{hr(e);let a={method:dr(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 _r(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 vr=({client:e,openAuthSession:t})=>{let n=mr({client:e,openAuthSession:t});return async({user:e,typedData:t,address:r,redirectUrl:i})=>{hr(e);let a={method:dr(e,r)?`privy_signSmartWalletTypedData`:`eth_signTypedData_v4`,params:[r,_r(t)]},{result:o}=await n({user:e,request:a,address:r,redirectUrl:i});return{signature:o}}},yr=({client:e,openAuthSession:t})=>{let n=mr({client:e,openAuthSession:t});return async({user:e,transaction:t,address:r,redirectUrl:i})=>{hr(e);let a={method:dr(e,r)?`privy_sendSmartWalletTx`:`eth_sendTransaction`,params:[t]},{result:o}=await n({user:e,request:a,address:r,redirectUrl:i});return{transactionHash:o}}};var br=o({sendTransaction:()=>yr,signMessage:()=>gr,signTypedData:()=>vr}),xr=o({linkWithCrossAppAuth:()=>ur,loginWithCrossAppAuth:()=>lr,wallet:()=>br});function Sr(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 Cr(e,t){let n=Sr(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 wr(e){let{user:t}=await e.privy.user.get();if(!t)return{ok:!1,error:`NOT_AUTHENTICATED`};let n=Cr(e.caip2,t);if(n)return{ok:!0,address:n};let r=Sr(e.caip2);if(!r)return{ok:!1,error:`UNSUPPORTED_CHAIN`};try{let t=await e.privy.fetchPrivyRoute(l.WalletCreate,{body:{chain_type:r}});return await e.onWalletCreated?.(),{ok:!0,address:t.address}}catch{return{ok:!1,error:`REFUND_WALLET_CREATION_FAILED`}}}async function Tr(e){let{user:t}=await e.privy.user.get();if(!t)throw Error(`NOT_AUTHENTICATED`);let n=e.refundAddress;if(!n){let t=await wr({privy:e.privy,caip2:e.sourceChain,onWalletCreated:e.onWalletCreated});if(!t.ok)throw Error(t.error);n=t.address}return await e.privy.fetchPrivyRoute(l.CreateDepositAddressQuote,{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 Er(e){return new Promise(t=>{setTimeout(()=>{t()},e)})}const Dr=async({operation:e,until:t,delay:n,interval:r,attempts:i,signal:a})=>{n&&await Er(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 Er(r)}catch(e){e instanceof Error&&(c=e),o<i&&await Er(r)}}return{status:`max_attempts`,result:s,attempts:o,error:c}},Or=2e3,kr=1800*1e3;function Ar(e,t){return Math.ceil(t/e)}function jr(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 Mr(e){return await e.privy.fetchPrivyRoute(l.GetDepositAddressOrder,{params:{order_id:e.orderId}})}async function Nr(e){let t=e.pollIntervalMs??Or,n=e.timeoutMs??kr,r=e.signal??new AbortController().signal;return jr(await Dr({operation:async()=>{let t=await e.privy.fetchPrivyRoute(l.GetNextDepositAddressOrder,{params:{deposit_address_id:e.depositAddressId},query:{after:e.quoteCreatedAt}});if(t.order)return await e.privy.fetchPrivyRoute(l.GetDepositAddressOrder,{params:{order_id:t.order.id}})},until:e=>e!==void 0,delay:t,interval:t,attempts:Ar(t,n),signal:r}))}async function Pr(e){let t=e.pollIntervalMs??Or,n=e.timeoutMs??kr,r=e.signal??new AbortController().signal;return jr(await Dr({operation:()=>e.privy.fetchPrivyRoute(l.GetDepositAddressOrder,{params:{order_id:e.orderId}}),until:e=>e.status!==`executing`,delay:t,interval:t,attempts:Ar(t,n),signal:r}))}var Fr=o({generateDepositAddress:()=>Tr,getConfig:()=>Ir,getDeposit:()=>Mr,resolveRefundAddress:()=>wr,waitForCompletion:()=>Pr,waitForDeposit:()=>Nr});async function Ir(e){let t=await e.fetchPrivyRoute(l.GetDepositConfig,{});return{currencies:t.currencies,chains:t.chains}}async function Lr(e,t,{wallet_id:n,...r}){let i=e.getCompiledPath(l.WalletRawSign,{params:{wallet_id:n}}),a=String(Date.now()+Se),{signature:o}=await xe(t,{version:1,url:i,method:l.WalletRawSign.method,headers:{"privy-app-id":e.app.appId,[M]:a},body:{...r}});if(Date.now()>Number(a))throw new C({error:`Wallet request expired before it could be sent. Please try again.`,code:`embedded_wallet_request_expired`});return await e.fetchPrivyRoute(l.WalletRawSign,{body:r,params:{wallet_id:n},headers:{"privy-authorization-signature":o,[M]:a}})}async function Rr(e,{wallet_id:t}){return await e.fetchPrivyRoute(l.WalletGet,{params:{wallet_id:t}})}async function zr(e,{wallet_id:t},n,r){let{signature:i}=await xe(n,{version:1,url:e.getCompiledPath(l.WalletUpdate,{params:{wallet_id:t}}),method:l.WalletUpdate.method,headers:{"privy-app-id":e.app.appId},body:r});return await e.fetchPrivyRoute(l.WalletUpdate,{params:{wallet_id:t},body:r,headers:{"privy-authorization-signature":i}})}async function Br({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(w(t)){if(n.length===0)throw Error(`Must specify at least one signer to add.`);let r={wallet_id:t.id},i=await Rr(e,r);await zr(e,r,Ur(e),{additional_signers:i.additional_signers.concat(n)})}else{if(t.delegated)return Hr(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=ar(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 Hr(e)}async function Vr({client:e,wallet:t}){return w(t)?await zr(e,{wallet_id:t.id},Ur(e),{additional_signers:[]}):await e.delegated.revoke(),Hr(e)}async function Hr(e){let{user:t}=await e.user.get();if(!t)throw Error(`Could not refresh user`);return{user:t}}function Ur(e){return(...t)=>e.embeddedWallet.signWithUserSigner(...t)}var Wr=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})))]}},Gr=on;exports.ALL_WALLET_CLIENT_TYPES=Qn,exports.BICONOMY=`biconomy`,exports.COINBASE_SMART_WALLET=`coinbase_smart_wallet`,exports.ConnectedStandardSolanaWallet=Wr,exports.EmbeddedProviderError=E,exports.InMemoryCache=cn,exports.KERNEL=`kernel`,exports.LIGHT_ACCOUNT=`light_account`,exports.LocalStorage=sn,exports.MoonpayApiError=oe,exports.NEXUS=`nexus`,exports.PrivyApiError=S,exports.PrivyClientError=C,exports.PrivyConnectorError=me,exports.PrivyEmbeddedWalletErrorCode=de,exports.PrivyProviderRpcError=ye,exports.ProviderErrors=D,exports.SAFE=`safe`,exports.SUPPORTED_CONNECTOR_TYPES=$n,exports.SolanaClient=Ln,exports.SolanaUsdcAddressMap=wn,exports.THIRDWEB=`thirdweb`,exports.UsdcAddressMap=Cn,exports.addSessionSigners=Br,exports.buildSolanaOffchainMessage=Gn,exports.chainToMoonpayCurrency=Yt,exports.countryCodesAndNumbers=yn,exports.create=tt,exports.createErrorFormatter=ce,exports.createSiwsMessage=Rn,Object.defineProperty(exports,"crossApp",{enumerable:!0,get:function(){return xr}}),exports.default=Gr,Object.defineProperty(exports,"delegatedActions",{enumerable:!0,get:function(){return cr}}),Object.defineProperty(exports,"depositAddress",{enumerable:!0,get:function(){return Fr}}),exports.deriveSolanaApplicationDomain=Wn,exports.errorIndicatesMaxMfaRetries=_e,exports.errorIndicatesMfaCanceled=le,exports.errorIndicatesMfaRateLimit=ve,exports.errorIndicatesMfaTimeout=he,exports.errorIndicatesMfaVerificationFailed=ge,exports.errorIndicatesRecoveryIsNeeded=k,exports.formatLamportsAmount=rr,exports.formatPhoneNumber=gn,exports.formatTokenAmount=nr,exports.formatWalletAddress=er,exports.formatWeiAmount=tr,exports.fundingMethodToMoonpayPaymentMethod=Xt,exports.generateAuthorizationSignature=xe,exports.generateWalletIdempotencyKey=En,exports.getAllUserEmbeddedBitcoinWallets=ln,exports.getAllUserEmbeddedEthereumWallets=J,exports.getAllUserEmbeddedSolanaWallets=X,exports.getCoinbaseOnRampUrl=Nn,exports.getCountryCallingCode=b.getCountryCallingCode,exports.getEntropyDetailsFromAccount=fn,exports.getEntropyDetailsFromUser=dn,exports.getIsTokenUsdc=Tn,exports.getJsonRpcEndpointFromChain=ze,exports.getPhoneCountryCodeAndNumber=xn,exports.getPlaceholderPhoneNumber=bn,exports.getSolanaClusterDisplayName=Vn,exports.getSolanaRpcEndpointForCluster=zn,exports.getSolanaUsdcMintAddressForCluster=Bn,exports.getUserEmbeddedEthereumWallet=Y,exports.getUserEmbeddedSolanaWallet=bt,exports.getUserEmbeddedWallet=yt,exports.getUserSmartWallet=pn,exports.getWallet=Rr,exports.isEmbeddedWalletAccount=q,exports.isSupportedChainIdForCoinbaseOnramp=Pn,exports.isSupportedChainIdForMoonpay=Jt,exports.isUnifiedWallet=w,exports.lastFourDigits=_n,exports.parseSolanaOffchainMessage=Kn,exports.phoneNumberTypingFormatter=vn,exports.poll=Dr,exports.rawSign=Lr,exports.removeSessionSigners=Vr,exports.rpc=N,exports.throwIfInvalidRecoveryUpgradePath=Be,exports.toCoinbaseAssetId=In,exports.toCoinbaseBlockchainFromChainId=Fn,exports.toE164=hn,exports.toObjectKeys=Sn,exports.toWalletApiUnsignedEthTransaction=Ce,exports.updateWallet=zr,exports.validatePhoneNumber=mn,Object.keys(d).forEach(function(e){e!=="default"&&!Object.prototype.hasOwnProperty.call(exports,e)&&Object.defineProperty(exports,e,{enumerable:!0,get:function(){return d[e]}})});
|
|
35
35
|
//# sourceMappingURL=index.js.map
|