@privy-io/react-auth 1.25.1-beta.4 → 1.25.1

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/esm/index.js CHANGED
@@ -1,4 +1,4 @@
1
- import{Web3Provider as Rm}from"@ethersproject/providers";import{useEffect as Yr,useState as ne}from"react";var C=()=>{throw new Error("You need to wrap your application with the <PrivyProvider> initialized with your app id.")};import cc from"axios";var ke=class extends Error{constructor(o,r,n){super(o);r instanceof Error&&(this.cause=r),this.privyErrorCode=n}toString(){return`${this.type}${this.privyErrorCode?`-${this.privyErrorCode}`:""}: ${this.message}${this.cause?` [cause: ${this.cause}]`:""}`}},Rt=class extends ke{constructor(o,r,n,i,a){super(n,i,a);this.type=o;this.status=r}},x=class extends ke{constructor(o,r,n){super(o,r,n);this.type="client_error"}};var q=class extends ke{constructor(o,r,n){super(o,r,n);this.type="connector_error"}},Q=e=>{if(e instanceof ke)return e;if(!cc.isAxiosError(e))return Ee(e);if(!e.response)return new Rt("api_error",null,e.message,e);let{type:t,message:o,error:r,code:n}=e.response.data;return new Rt(t||"ApiError",e.response.status,o||r,e,n)},Ee=e=>e instanceof ke?e:e instanceof Error?new x(e.message,e):new x(`Internal error: ${e}`);var bi=()=>"/api/v1/sessions",vi=()=>"/api/v1/sessions/logout",wi=()=>"/api/v1/sessions/fork",Ci=()=>"/api/v1/sessions/fork/recover",xi=()=>"/api/v1/siwe/init",Ei=()=>"/api/v1/siwe/authenticate",Pi=()=>"/api/v1/siwe/link",Ti=()=>"/api/v1/passwordless/init",Ai=()=>"/api/v1/passwordless/authenticate",_i=()=>"/api/v1/passwordless/link",Si=()=>"/api/v1/passwordless_sms/init",ki=()=>"/api/v1/passwordless_sms/authenticate",Ri=()=>"/api/v1/passwordless_sms/link",Wi=()=>"/api/v1/oauth/init",Ii=()=>"/api/v1/oauth/authenticate",Li=()=>"/api/v1/oauth/link",Mi=()=>"/api/v1/siwe/unlink",Ni=()=>"/api/v1/passwordless/unlink",Di=()=>"/api/v1/passwordless_sms/unlink",Oi=()=>"/api/v1/oauth/unlink",Ui=()=>"/api/v1/analytics_events";var pt=class{constructor(t){this.meta={email:t}}async authenticate(){if(!this.api)throw new x("Auth flow has no API instance");if(!this.meta.email||!this.meta.emailCode)throw new x("Email and email code must be set prior to calling authenticate.");try{let t=Ai(),o=await this.api.post(t,{email:this.meta.email,code:this.meta.emailCode});return{user:o.data.user,token:o.data.token,refresh_token:o.data.refresh_token,is_new_user:o.data.is_new_user}}catch(t){throw Q(t)}}async link(){if(!this.api)throw new x("Auth flow has no API instance");if(!this.meta.email||!this.meta.emailCode)throw new x("Email and email code must be set prior to calling authenticate.");try{let t=_i();return(await this.api.post(t,{email:this.meta.email,code:this.meta.emailCode})).data}catch(t){throw Q(t)}}async sendCodeEmail(t){if(!this.api)throw new x("Auth flow has no API instance");if(t&&(this.meta.email=t),!this.meta.email)throw new x("Email must be set when initialzing authentication.");try{let o=Ti();return(await this.api.post(o,{email:this.meta.email})).data}catch(o){throw Q(o)}}};var tt=class{constructor(t,o,r){this.meta={provider:t},this.meta.authorizationCode=o,this.meta.stateCode=r}isActive(){return!!(this.meta.authorizationCode&&this.meta.stateCode&&this.meta.provider)}async authenticate(){if(!this.api)throw new x("Auth flow has no API instance");if(!this.meta.authorizationCode||!this.meta.stateCode)throw new x("[OAuth AuthFlow] Authorization and state codes code must be set prior to calling authenticate.");if(this.meta.authorizationCode==="undefined")throw new x("User denied confirmation during OAuth flow");try{let t=Ii(),o=await this.api.post(t,{authorization_code:this.meta.authorizationCode,state_code:this.meta.stateCode});return{user:o.data.user,token:o.data.token,refresh_token:o.data.refresh_token,is_new_user:o.data.is_new_user}}catch(t){throw Q(t)}}async link(){if(!this.api)throw new x("Auth flow has no API instance");if(!this.meta.authorizationCode||!this.meta.stateCode)throw new x("[OAuth AuthFlow] Authorization and state codes code must be set prior to calling link.");if(this.meta.authorizationCode==="undefined")throw new x("User denied confirmation during OAuth flow");try{let t=Li();return(await this.api.post(t,{authorization_code:this.meta.authorizationCode,state_code:this.meta.stateCode})).data}catch(t){throw Q(t)}}async getAuthorizationUrl(){var t;if(!this.api)throw new x("Auth flow has no API instance");if(!this.meta.provider)throw new x("Provider must be set when initialzing OAuth authentication.");try{let o=Wi();return(await this.api.post(o,{provider:this.meta.provider,redirect_to:window.location.href},{baseURL:(t=this.api)==null?void 0:t.fallbackApiUrl})).data}catch(o){throw Q(o)}}};var ot=class{constructor(t,o,r){this._meta={walletType:o,walletId:r},this.connectors=t,this.walletConnector=this.connectors.createWalletConnector(o,null,r)}get meta(){return{...this._meta,walletName:this.walletConnector.walletBranding.name,walletIcon:this.walletConnector.walletBranding.icon}}async authenticate(){if(!this.api)throw new x("Auth flow has no API instance");try{let{message:t,signature:o}=await this.sign(),r=await this.api.post(Ei(),{message:t,signature:o});return this.connectors.addWalletConnector(this.walletConnector),await this.connectors.setActiveWallet(this.walletConnector.address)||console.warn("Failed to set active wallet"),{user:r.data.user,token:r.data.token,refresh_token:r.data.refresh_token,is_new_user:r.data.is_new_user}}catch(t){throw Q(t)}}async link(){if(!this.api)throw new x("Auth flow has no API instance");try{let{message:t,signature:o}=await this.sign(),r=await this.api.post(Pi(),{message:t,signature:o});return this.connectors.addWalletConnector(this.walletConnector),await this.connectors.setActiveWallet(this.walletConnector.address)||console.warn("Failed to set active wallet"),r.data}catch(t){throw Q(t)}}async promptConnect(){if(!this.api)throw new x("Auth flow has no API instance");let t=await this.walletConnector.connect({showPrompt:!0});return await this.buildSiweMessage(t),t}async sign(){if(!this.api)throw new x("Auth flow has no API instance");if(!this.preparedMessage){let o=await this.walletConnector.connect({showPrompt:!1});await this.buildSiweMessage(o)}if(!this.preparedMessage)throw new x("Could not prepare SIWE message");let t=await this.walletConnector.sign(this.preparedMessage);return{message:this.preparedMessage,signature:t}}async buildSiweMessage(t){if(!this.api)throw new x("Auth flow has no API instance");let o=t.address,r=t.chainId,n=await this.api.post(xi(),{address:o});return this.preparedMessage=this.walletConnector.prepareMessage(r,o,n.data.nonce),this.preparedMessage}};var ut=class{constructor(t){this.meta={phoneNumber:t}}async authenticate(){if(!this.api)throw new x("Auth flow has no API instance");if(!this.meta.phoneNumber||!this.meta.smsCode)throw new x("phone number and sms code must be set prior to calling authenticate.");try{let t=ki(),o=await this.api.post(t,{phoneNumber:this.meta.phoneNumber,code:this.meta.smsCode});return{user:o.data.user,token:o.data.token,refresh_token:o.data.refresh_token,is_new_user:o.data.is_new_user}}catch(t){throw Q(t)}}async link(){if(!this.api)throw new x("Auth flow has no API instance");if(!this.meta.phoneNumber||!this.meta.smsCode)throw new x("phone number and sms code must be set prior to calling authenticate.");try{let t=Ri();return(await this.api.post(t,{phoneNumber:this.meta.phoneNumber,code:this.meta.smsCode})).data}catch(t){throw Q(t)}}async sendSmsCode(t){if(!this.api)throw new x("Auth flow has no API instance");if(t&&(this.meta.phoneNumber=t),!this.meta.phoneNumber)throw new x("phone nNumber must be set when initialzing authentication.");try{let o=Si();return(await this.api.post(o,{phoneNumber:this.meta.phoneNumber})).data}catch(o){throw Q(o)}}};import{getAddress as Fc}from"@ethersproject/address";var Bi="1.25.1-beta.4";var Me="4df5e2316331463a9130964bd6078dfa",Go="https://auth.privy.io",Fi=1e4,Ne=1400,on=Bi;var Wt="privy:token",Ho="privy:refresh_token",so="privy:session_transfer_token",Vo="privy:connectors",rn="walletconnect",Gi=3e4,Pe=1;var nn=class{constructor(){this._cache={}}get(t){return this._cache[t]}put(t,o){o!==void 0?this._cache[t]=o:this.del(t)}del(t){delete this._cache[t]}getKeys(){return Object.keys(this._cache)}},an=class{get(t){let o=localStorage.getItem(t);return o===null?void 0:JSON.parse(o)}put(t,o){o!==void 0?localStorage.setItem(t,JSON.stringify(o)):this.del(t)}del(t){localStorage.removeItem(t)}getKeys(){return Object.entries(localStorage).map(([t])=>t)}};function pc(){return typeof window<"u"&&window.localStorage?new an:new nn}var G=pc();import _c from"@coinbase/wallet-sdk";import{getAddress as Sc}from"@ethersproject/address";import{jsx as Hi,jsxs as uc}from"react/jsx-runtime";var Te=({style:e,...t})=>uc("svg",{width:"1024",height:"1024",viewBox:"0 0 1024 1024",fill:"none",xmlns:"http://www.w3.org/2000/svg",style:{height:"28px",width:"28px",...e},...t,children:[Hi("rect",{width:"1024",height:"1024",fill:"#0052FF",rx:100,ry:100}),Hi("path",{fillRule:"evenodd",clipRule:"evenodd",d:"M152 512C152 710.823 313.177 872 512 872C710.823 872 872 710.823 872 512C872 313.177 710.823 152 512 152C313.177 152 152 313.177 152 512ZM420 396C406.745 396 396 406.745 396 420V604C396 617.255 406.745 628 420 628H604C617.255 628 628 617.255 628 604V420C628 406.745 617.255 396 604 396H420Z",fill:"white"})]});import{getAddress as Tc}from"@ethersproject/address";import{Web3Provider as Ac}from"@ethersproject/providers";import{isHexString as wc}from"@ethersproject/bytes";import{InfuraProvider as Cc}from"@ethersproject/providers";import{toUtf8String as xc}from"@ethersproject/strings";import Ec from"eventemitter3";var mc=["eth_sign","eth_populateTransactionRequest","eth_signTransaction","personal_sign"],Vi=e=>mc.includes(e);import{isPossiblePhoneNumber as fc}from"libphonenumber-js/min";var zi=e=>!!String(e).toLowerCase().match(/^(([^<>()[\]\\.,;:\s@"]+(\.[^<>()[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/),qi=e=>fc(String(e),"US"),$i=(e,t)=>{let o=e.slice(0),r=[];for(;o.length;)r.push(o.splice(0,t));return r},Re=(e,t=3,o=4)=>{if(!e)return"";let r=2,n=3;if(t+o+r+n>=e.length)return e;let i=e.slice(0,r+t),a=e.slice(e.length-o,e.length);return`${i}...${a}`},sn=e=>new Promise(t=>setTimeout(t,e)),ji=(e,t={})=>{let o=t.delayMs||40,r=t.maxAttempts||1e3;return new Promise(async(n,i)=>{let a=!1,s=0;for(;!a&&s<r;)e().then(()=>{a=!0,n()},(...l)=>{a=!0,i(...l)}),s+=1,await sn(o);a||i(new Error("Exceeded max attempts before resolving function"))})},zo=(e,t,o={})=>{let r=new URL(t,e);for(let[n,i]of Object.entries(o))r.searchParams.set(n,i);return r.href},hc=(e,t)=>e.toLowerCase()===t.toLowerCase(),ln=(e,t)=>{for(let o of e)if(hc(o,t))return!0;return!1},qo=e=>e.replace(/([\u2700-\u27BF]|[\uE000-\uF8FF]|\uD83C[\uDC00-\uDFFF]|\uD83D[\uDC00-\uDFFF]|[\u2011-\u26FF]|\uD83E[\uDD10-\uDDFF])/g,""),lo=e=>typeof e=="string"?e:"0x"+e.toString(16);import{ErrorCode as gc}from"@ethersproject/logger";var It=class extends q{constructor(){super("Wallet timeout");this.type="wallet_error"}},ft=class extends q{constructor(){super("User rejected connection");this.type="wallet_error"}},Ae=e=>{if(e instanceof q)return e;if((e==null?void 0:e.code)&&(e==null?void 0:e.reason)){let t=new Lt(e);return e.code===gc.ACTION_REJECTED&&(t.details=mt.E4001_USER_REJECTED_REQUEST),t}return e!=null&&e.code?new Lt(e):new q("Unknown connector error",e)},cn=class extends ke{constructor(o,r,n){super(o);this.type="provider_error";this.code=r,this.data=n}},Lt=class extends cn{constructor(o){var i,a,s;let r=o;super(r.message,r.code,r.data);let n=Object.values(mt).find(l=>l.eipCode===r.code);this.details=n||mt.UNKNOWN_ERROR,r.code===-32002&&((i=r.message)!=null&&i.includes("already pending for origin")?(a=r.message)!=null&&a.includes("wallet_requestPermissions")?this.details=mt.E32002_CONNECTION_ALREADY_PENDING:this.details=mt.E32002_REQUEST_ALREADY_PENDING:(s=r.message)!=null&&s.includes("Already processing")&&r.message.includes("eth_requestAccounts")&&(this.details=mt.E32002_WALLET_LOCKED))}},yc={ERROR_USER_EXISTS:{message:"User already exists for this address",detail:"Try another address!",retryable:!1},ERROR_TIMED_OUT:{message:"Wallet request timed out",detail:"Please try connecting again.",retryable:!0},ERROR_WALLET_CONNECTION:{message:"Could not log in with wallet",detail:"Please try connecting again.",retryable:!0},ERROR_USER_REJECTED_CONNECTION:{message:"You rejected the request",detail:"Please try connecting again.",retryable:!0}},bc={E32002_CONNECTION_ALREADY_PENDING:{eipCode:-32002,message:"Connection request already pending",detail:"Don\u2019t see your wallet modal? Check your other browser windows.",retryable:!1},E32002_REQUEST_ALREADY_PENDING:{eipCode:-32002,message:"Resource request already pending",detail:"Don\u2019t see your wallet modal? Check your other browser windows.",retryable:!1},E32002_WALLET_LOCKED:{eipCode:-32002,message:"Wallet might be locked",detail:"Don\u2019t see your wallet modal? Check your other browser windows.",retryable:!1},E4001_USER_REJECTED_REQUEST:{eipCode:4001,message:"Signature rejected",detail:"Please try signing again.",retryable:!0}},vc={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}},mt={UNKNOWN_ERROR:{eipCode:0,message:"Unknown error",detail:"Unknown error",retryable:!0},...vc,...bc},ht={...yc,...mt};var Pc=12e4,dn=(e=new It,t=Pc)=>new Promise((o,r)=>setTimeout(()=>{r(e)},t)),We=class{constructor(t){this.removeListener=(t,o)=>{if(this.walletProvider)return this.walletProvider.removeListener(t,o)};this.setWalletProvider=t=>{this.walletProvider=t,this._subscriptions.forEach(o=>{var r;(r=this.walletProvider)==null||r.on(o.eventName,o.listener)})};this.walletProvider=t,this._subscriptions=[]}on(t,o){if(this.walletProvider)return this.walletProvider.on(t,o);this._subscriptions.push({eventName:t,listener:o})}async request(t){if(!this.walletProvider)throw new q(`A wallet request of type ${t.method} was made before setting a wallet provider.`);return Promise.race([this.walletProvider.request(t),dn()]).catch(o=>{throw Ae(o)})}},gt=class extends Error{constructor(o,r,n){super(o);this.code=r,this.data=n}},$o=class extends Ec{constructor(o,r,n=1){super();this.walletProxy=o,this.address=r,this.chainId=n,this.infuraProvider=new Cc(n,Me)}async handleSendTransaction(o){if(!o.params||!Array.isArray(o.params))throw new gt(`Invalid params for ${o.method}`,4200);let r=o.params[0];if(!await co()||!this.address)throw new gt("Disconnected",4900);return(await Zi(r)).transactionHash}handleSwitchEthereumChain(o){if(!o.params||!Array.isArray(o.params))throw new gt(`Invalid params for ${o.method}`,4200);let r=o.params[0];this.chainId=Number(r),this.emit("chainChanged",r)}async handlePersonalSign(o){if(!o.params||!Array.isArray(o.params))throw new Error("Invalid params for eth_estimateGas");let r=o.params[0],n=wc(r)?xc(r):r;return await Ki(n)}async handleEstimateGas(o){if(!o.params||!Array.isArray(o.params))throw new Error("Invalid params for eth_estimateGas");let r={...o.params[0],chainId:lo(this.chainId)};return delete r.from,this.infuraProvider.send("eth_estimateGas",[r])}async request(o){switch(console.debug("Embedded1193Provider.request() called with args",o),o.method){case"eth_accounts":return this.address?[this.address]:[];case"eth_chainId":return lo(this.chainId);case"eth_estimateGas":return this.handleEstimateGas(o);case"eth_sendTransaction":return this.handleSendTransaction(o);case"wallet_switchEthereumChain":return this.handleSwitchEthereumChain(o);case"personal_sign":return this.handlePersonalSign(o);default:break}if(Vi(o.method)){let r=await co();if(!r||!this.address)throw new gt("Disconnected",4900);try{return(await this.walletProxy.rpc({address:this.address,accessToken:r,request:{method:o.method,params:o.params}})).response.data}catch(n){throw console.error(n),new gt("Disconnected",4900)}}else return this.infuraProvider.send(o.method,o.params)}async connect(){let o=await co();if(!o||!this.address)return null;try{return(await this.walletProxy.connect({address:this.address,accessToken:o})).address}catch(r){return console.error(r),null}}},yt=class extends We{constructor(o){super(o)}},jo=class extends We{constructor(t){super(t)}sendAsync(t,o){throw new Error("sendAsync is no longer supported by EIP-1193. Use the request method instead.")}};var ye=class{constructor(t,o,r){this.createSiweMessage=(t,o,r,n,i,a,s)=>`${r} wants you to sign in with your Ethereum account:
1
+ import{Web3Provider as Rm}from"@ethersproject/providers";import{useEffect as Yr,useState as ne}from"react";var C=()=>{throw new Error("You need to wrap your application with the <PrivyProvider> initialized with your app id.")};import cc from"axios";var ke=class extends Error{constructor(o,r,n){super(o);r instanceof Error&&(this.cause=r),this.privyErrorCode=n}toString(){return`${this.type}${this.privyErrorCode?`-${this.privyErrorCode}`:""}: ${this.message}${this.cause?` [cause: ${this.cause}]`:""}`}},Rt=class extends ke{constructor(o,r,n,i,a){super(n,i,a);this.type=o;this.status=r}},x=class extends ke{constructor(o,r,n){super(o,r,n);this.type="client_error"}};var q=class extends ke{constructor(o,r,n){super(o,r,n);this.type="connector_error"}},Q=e=>{if(e instanceof ke)return e;if(!cc.isAxiosError(e))return Ee(e);if(!e.response)return new Rt("api_error",null,e.message,e);let{type:t,message:o,error:r,code:n}=e.response.data;return new Rt(t||"ApiError",e.response.status,o||r,e,n)},Ee=e=>e instanceof ke?e:e instanceof Error?new x(e.message,e):new x(`Internal error: ${e}`);var bi=()=>"/api/v1/sessions",vi=()=>"/api/v1/sessions/logout",wi=()=>"/api/v1/sessions/fork",Ci=()=>"/api/v1/sessions/fork/recover",xi=()=>"/api/v1/siwe/init",Ei=()=>"/api/v1/siwe/authenticate",Pi=()=>"/api/v1/siwe/link",Ti=()=>"/api/v1/passwordless/init",Ai=()=>"/api/v1/passwordless/authenticate",_i=()=>"/api/v1/passwordless/link",Si=()=>"/api/v1/passwordless_sms/init",ki=()=>"/api/v1/passwordless_sms/authenticate",Ri=()=>"/api/v1/passwordless_sms/link",Wi=()=>"/api/v1/oauth/init",Ii=()=>"/api/v1/oauth/authenticate",Li=()=>"/api/v1/oauth/link",Mi=()=>"/api/v1/siwe/unlink",Ni=()=>"/api/v1/passwordless/unlink",Di=()=>"/api/v1/passwordless_sms/unlink",Oi=()=>"/api/v1/oauth/unlink",Ui=()=>"/api/v1/analytics_events";var pt=class{constructor(t){this.meta={email:t}}async authenticate(){if(!this.api)throw new x("Auth flow has no API instance");if(!this.meta.email||!this.meta.emailCode)throw new x("Email and email code must be set prior to calling authenticate.");try{let t=Ai(),o=await this.api.post(t,{email:this.meta.email,code:this.meta.emailCode});return{user:o.data.user,token:o.data.token,refresh_token:o.data.refresh_token,is_new_user:o.data.is_new_user}}catch(t){throw Q(t)}}async link(){if(!this.api)throw new x("Auth flow has no API instance");if(!this.meta.email||!this.meta.emailCode)throw new x("Email and email code must be set prior to calling authenticate.");try{let t=_i();return(await this.api.post(t,{email:this.meta.email,code:this.meta.emailCode})).data}catch(t){throw Q(t)}}async sendCodeEmail(t){if(!this.api)throw new x("Auth flow has no API instance");if(t&&(this.meta.email=t),!this.meta.email)throw new x("Email must be set when initialzing authentication.");try{let o=Ti();return(await this.api.post(o,{email:this.meta.email})).data}catch(o){throw Q(o)}}};var tt=class{constructor(t,o,r){this.meta={provider:t},this.meta.authorizationCode=o,this.meta.stateCode=r}isActive(){return!!(this.meta.authorizationCode&&this.meta.stateCode&&this.meta.provider)}async authenticate(){if(!this.api)throw new x("Auth flow has no API instance");if(!this.meta.authorizationCode||!this.meta.stateCode)throw new x("[OAuth AuthFlow] Authorization and state codes code must be set prior to calling authenticate.");if(this.meta.authorizationCode==="undefined")throw new x("User denied confirmation during OAuth flow");try{let t=Ii(),o=await this.api.post(t,{authorization_code:this.meta.authorizationCode,state_code:this.meta.stateCode});return{user:o.data.user,token:o.data.token,refresh_token:o.data.refresh_token,is_new_user:o.data.is_new_user}}catch(t){throw Q(t)}}async link(){if(!this.api)throw new x("Auth flow has no API instance");if(!this.meta.authorizationCode||!this.meta.stateCode)throw new x("[OAuth AuthFlow] Authorization and state codes code must be set prior to calling link.");if(this.meta.authorizationCode==="undefined")throw new x("User denied confirmation during OAuth flow");try{let t=Li();return(await this.api.post(t,{authorization_code:this.meta.authorizationCode,state_code:this.meta.stateCode})).data}catch(t){throw Q(t)}}async getAuthorizationUrl(){var t;if(!this.api)throw new x("Auth flow has no API instance");if(!this.meta.provider)throw new x("Provider must be set when initialzing OAuth authentication.");try{let o=Wi();return(await this.api.post(o,{provider:this.meta.provider,redirect_to:window.location.href},{baseURL:(t=this.api)==null?void 0:t.fallbackApiUrl})).data}catch(o){throw Q(o)}}};var ot=class{constructor(t,o,r){this._meta={walletType:o,walletId:r},this.connectors=t,this.walletConnector=this.connectors.createWalletConnector(o,null,r)}get meta(){return{...this._meta,walletName:this.walletConnector.walletBranding.name,walletIcon:this.walletConnector.walletBranding.icon}}async authenticate(){if(!this.api)throw new x("Auth flow has no API instance");try{let{message:t,signature:o}=await this.sign(),r=await this.api.post(Ei(),{message:t,signature:o});return this.connectors.addWalletConnector(this.walletConnector),await this.connectors.setActiveWallet(this.walletConnector.address)||console.warn("Failed to set active wallet"),{user:r.data.user,token:r.data.token,refresh_token:r.data.refresh_token,is_new_user:r.data.is_new_user}}catch(t){throw Q(t)}}async link(){if(!this.api)throw new x("Auth flow has no API instance");try{let{message:t,signature:o}=await this.sign(),r=await this.api.post(Pi(),{message:t,signature:o});return this.connectors.addWalletConnector(this.walletConnector),await this.connectors.setActiveWallet(this.walletConnector.address)||console.warn("Failed to set active wallet"),r.data}catch(t){throw Q(t)}}async promptConnect(){if(!this.api)throw new x("Auth flow has no API instance");let t=await this.walletConnector.connect({showPrompt:!0});return await this.buildSiweMessage(t),t}async sign(){if(!this.api)throw new x("Auth flow has no API instance");if(!this.preparedMessage){let o=await this.walletConnector.connect({showPrompt:!1});await this.buildSiweMessage(o)}if(!this.preparedMessage)throw new x("Could not prepare SIWE message");let t=await this.walletConnector.sign(this.preparedMessage);return{message:this.preparedMessage,signature:t}}async buildSiweMessage(t){if(!this.api)throw new x("Auth flow has no API instance");let o=t.address,r=t.chainId,n=await this.api.post(xi(),{address:o});return this.preparedMessage=this.walletConnector.prepareMessage(r,o,n.data.nonce),this.preparedMessage}};var ut=class{constructor(t){this.meta={phoneNumber:t}}async authenticate(){if(!this.api)throw new x("Auth flow has no API instance");if(!this.meta.phoneNumber||!this.meta.smsCode)throw new x("phone number and sms code must be set prior to calling authenticate.");try{let t=ki(),o=await this.api.post(t,{phoneNumber:this.meta.phoneNumber,code:this.meta.smsCode});return{user:o.data.user,token:o.data.token,refresh_token:o.data.refresh_token,is_new_user:o.data.is_new_user}}catch(t){throw Q(t)}}async link(){if(!this.api)throw new x("Auth flow has no API instance");if(!this.meta.phoneNumber||!this.meta.smsCode)throw new x("phone number and sms code must be set prior to calling authenticate.");try{let t=Ri();return(await this.api.post(t,{phoneNumber:this.meta.phoneNumber,code:this.meta.smsCode})).data}catch(t){throw Q(t)}}async sendSmsCode(t){if(!this.api)throw new x("Auth flow has no API instance");if(t&&(this.meta.phoneNumber=t),!this.meta.phoneNumber)throw new x("phone nNumber must be set when initialzing authentication.");try{let o=Si();return(await this.api.post(o,{phoneNumber:this.meta.phoneNumber})).data}catch(o){throw Q(o)}}};import{getAddress as Fc}from"@ethersproject/address";var Bi="1.25.1";var Me="4df5e2316331463a9130964bd6078dfa",Go="https://auth.privy.io",Fi=1e4,Ne=1400,on=Bi;var Wt="privy:token",Ho="privy:refresh_token",so="privy:session_transfer_token",Vo="privy:connectors",rn="walletconnect",Gi=3e4,Pe=1;var nn=class{constructor(){this._cache={}}get(t){return this._cache[t]}put(t,o){o!==void 0?this._cache[t]=o:this.del(t)}del(t){delete this._cache[t]}getKeys(){return Object.keys(this._cache)}},an=class{get(t){let o=localStorage.getItem(t);return o===null?void 0:JSON.parse(o)}put(t,o){o!==void 0?localStorage.setItem(t,JSON.stringify(o)):this.del(t)}del(t){localStorage.removeItem(t)}getKeys(){return Object.entries(localStorage).map(([t])=>t)}};function pc(){return typeof window<"u"&&window.localStorage?new an:new nn}var G=pc();import _c from"@coinbase/wallet-sdk";import{getAddress as Sc}from"@ethersproject/address";import{jsx as Hi,jsxs as uc}from"react/jsx-runtime";var Te=({style:e,...t})=>uc("svg",{width:"1024",height:"1024",viewBox:"0 0 1024 1024",fill:"none",xmlns:"http://www.w3.org/2000/svg",style:{height:"28px",width:"28px",...e},...t,children:[Hi("rect",{width:"1024",height:"1024",fill:"#0052FF",rx:100,ry:100}),Hi("path",{fillRule:"evenodd",clipRule:"evenodd",d:"M152 512C152 710.823 313.177 872 512 872C710.823 872 872 710.823 872 512C872 313.177 710.823 152 512 152C313.177 152 152 313.177 152 512ZM420 396C406.745 396 396 406.745 396 420V604C396 617.255 406.745 628 420 628H604C617.255 628 628 617.255 628 604V420C628 406.745 617.255 396 604 396H420Z",fill:"white"})]});import{getAddress as Tc}from"@ethersproject/address";import{Web3Provider as Ac}from"@ethersproject/providers";import{isHexString as wc}from"@ethersproject/bytes";import{InfuraProvider as Cc}from"@ethersproject/providers";import{toUtf8String as xc}from"@ethersproject/strings";import Ec from"eventemitter3";var mc=["eth_sign","eth_populateTransactionRequest","eth_signTransaction","personal_sign"],Vi=e=>mc.includes(e);import{isPossiblePhoneNumber as fc}from"libphonenumber-js/min";var zi=e=>!!String(e).toLowerCase().match(/^(([^<>()[\]\\.,;:\s@"]+(\.[^<>()[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/),qi=e=>fc(String(e),"US"),$i=(e,t)=>{let o=e.slice(0),r=[];for(;o.length;)r.push(o.splice(0,t));return r},Re=(e,t=3,o=4)=>{if(!e)return"";let r=2,n=3;if(t+o+r+n>=e.length)return e;let i=e.slice(0,r+t),a=e.slice(e.length-o,e.length);return`${i}...${a}`},sn=e=>new Promise(t=>setTimeout(t,e)),ji=(e,t={})=>{let o=t.delayMs||40,r=t.maxAttempts||1e3;return new Promise(async(n,i)=>{let a=!1,s=0;for(;!a&&s<r;)e().then(()=>{a=!0,n()},(...l)=>{a=!0,i(...l)}),s+=1,await sn(o);a||i(new Error("Exceeded max attempts before resolving function"))})},zo=(e,t,o={})=>{let r=new URL(t,e);for(let[n,i]of Object.entries(o))r.searchParams.set(n,i);return r.href},hc=(e,t)=>e.toLowerCase()===t.toLowerCase(),ln=(e,t)=>{for(let o of e)if(hc(o,t))return!0;return!1},qo=e=>e.replace(/([\u2700-\u27BF]|[\uE000-\uF8FF]|\uD83C[\uDC00-\uDFFF]|\uD83D[\uDC00-\uDFFF]|[\u2011-\u26FF]|\uD83E[\uDD10-\uDDFF])/g,""),lo=e=>typeof e=="string"?e:"0x"+e.toString(16);import{ErrorCode as gc}from"@ethersproject/logger";var It=class extends q{constructor(){super("Wallet timeout");this.type="wallet_error"}},ft=class extends q{constructor(){super("User rejected connection");this.type="wallet_error"}},Ae=e=>{if(e instanceof q)return e;if((e==null?void 0:e.code)&&(e==null?void 0:e.reason)){let t=new Lt(e);return e.code===gc.ACTION_REJECTED&&(t.details=mt.E4001_USER_REJECTED_REQUEST),t}return e!=null&&e.code?new Lt(e):new q("Unknown connector error",e)},cn=class extends ke{constructor(o,r,n){super(o);this.type="provider_error";this.code=r,this.data=n}},Lt=class extends cn{constructor(o){var i,a,s;let r=o;super(r.message,r.code,r.data);let n=Object.values(mt).find(l=>l.eipCode===r.code);this.details=n||mt.UNKNOWN_ERROR,r.code===-32002&&((i=r.message)!=null&&i.includes("already pending for origin")?(a=r.message)!=null&&a.includes("wallet_requestPermissions")?this.details=mt.E32002_CONNECTION_ALREADY_PENDING:this.details=mt.E32002_REQUEST_ALREADY_PENDING:(s=r.message)!=null&&s.includes("Already processing")&&r.message.includes("eth_requestAccounts")&&(this.details=mt.E32002_WALLET_LOCKED))}},yc={ERROR_USER_EXISTS:{message:"User already exists for this address",detail:"Try another address!",retryable:!1},ERROR_TIMED_OUT:{message:"Wallet request timed out",detail:"Please try connecting again.",retryable:!0},ERROR_WALLET_CONNECTION:{message:"Could not log in with wallet",detail:"Please try connecting again.",retryable:!0},ERROR_USER_REJECTED_CONNECTION:{message:"You rejected the request",detail:"Please try connecting again.",retryable:!0}},bc={E32002_CONNECTION_ALREADY_PENDING:{eipCode:-32002,message:"Connection request already pending",detail:"Don\u2019t see your wallet modal? Check your other browser windows.",retryable:!1},E32002_REQUEST_ALREADY_PENDING:{eipCode:-32002,message:"Resource request already pending",detail:"Don\u2019t see your wallet modal? Check your other browser windows.",retryable:!1},E32002_WALLET_LOCKED:{eipCode:-32002,message:"Wallet might be locked",detail:"Don\u2019t see your wallet modal? Check your other browser windows.",retryable:!1},E4001_USER_REJECTED_REQUEST:{eipCode:4001,message:"Signature rejected",detail:"Please try signing again.",retryable:!0}},vc={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}},mt={UNKNOWN_ERROR:{eipCode:0,message:"Unknown error",detail:"Unknown error",retryable:!0},...vc,...bc},ht={...yc,...mt};var Pc=12e4,dn=(e=new It,t=Pc)=>new Promise((o,r)=>setTimeout(()=>{r(e)},t)),We=class{constructor(t){this.removeListener=(t,o)=>{if(this.walletProvider)return this.walletProvider.removeListener(t,o)};this.setWalletProvider=t=>{this.walletProvider=t,this._subscriptions.forEach(o=>{var r;(r=this.walletProvider)==null||r.on(o.eventName,o.listener)})};this.walletProvider=t,this._subscriptions=[]}on(t,o){if(this.walletProvider)return this.walletProvider.on(t,o);this._subscriptions.push({eventName:t,listener:o})}async request(t){if(!this.walletProvider)throw new q(`A wallet request of type ${t.method} was made before setting a wallet provider.`);return Promise.race([this.walletProvider.request(t),dn()]).catch(o=>{throw Ae(o)})}},gt=class extends Error{constructor(o,r,n){super(o);this.code=r,this.data=n}},$o=class extends Ec{constructor(o,r,n=1){super();this.walletProxy=o,this.address=r,this.chainId=n,this.infuraProvider=new Cc(n,Me)}async handleSendTransaction(o){if(!o.params||!Array.isArray(o.params))throw new gt(`Invalid params for ${o.method}`,4200);let r=o.params[0];if(!await co()||!this.address)throw new gt("Disconnected",4900);return(await Zi(r)).transactionHash}handleSwitchEthereumChain(o){if(!o.params||!Array.isArray(o.params))throw new gt(`Invalid params for ${o.method}`,4200);let r=o.params[0];this.chainId=Number(r),this.emit("chainChanged",r)}async handlePersonalSign(o){if(!o.params||!Array.isArray(o.params))throw new Error("Invalid params for eth_estimateGas");let r=o.params[0],n=wc(r)?xc(r):r;return await Ki(n)}async handleEstimateGas(o){if(!o.params||!Array.isArray(o.params))throw new Error("Invalid params for eth_estimateGas");let r={...o.params[0],chainId:lo(this.chainId)};return delete r.from,this.infuraProvider.send("eth_estimateGas",[r])}async request(o){switch(console.debug("Embedded1193Provider.request() called with args",o),o.method){case"eth_accounts":return this.address?[this.address]:[];case"eth_chainId":return lo(this.chainId);case"eth_estimateGas":return this.handleEstimateGas(o);case"eth_sendTransaction":return this.handleSendTransaction(o);case"wallet_switchEthereumChain":return this.handleSwitchEthereumChain(o);case"personal_sign":return this.handlePersonalSign(o);default:break}if(Vi(o.method)){let r=await co();if(!r||!this.address)throw new gt("Disconnected",4900);try{return(await this.walletProxy.rpc({address:this.address,accessToken:r,request:{method:o.method,params:o.params}})).response.data}catch(n){throw console.error(n),new gt("Disconnected",4900)}}else return this.infuraProvider.send(o.method,o.params)}async connect(){let o=await co();if(!o||!this.address)return null;try{return(await this.walletProxy.connect({address:this.address,accessToken:o})).address}catch(r){return console.error(r),null}}},yt=class extends We{constructor(o){super(o)}},jo=class extends We{constructor(t){super(t)}sendAsync(t,o){throw new Error("sendAsync is no longer supported by EIP-1193. Use the request method instead.")}};var ye=class{constructor(t,o,r){this.createSiweMessage=(t,o,r,n,i,a,s)=>`${r} wants you to sign in with your Ethereum account:
2
2
  ${o}
3
3
 
4
4
  ${s}
@@ -1294,7 +1294,7 @@ Resources:
1294
1294
  @media (max-width: 440px) {
1295
1295
  display: none;
1296
1296
  }
1297
- `;import{jsx as _e,jsxs as Yt}from"react/jsx-runtime";var Fr=()=>{let{navigate:e}=b(),{initLoginWithWallet:t}=T();return Yt(P1,{children:[Yt(Br,{onClick:()=>{gn()?(t("metamask"),e("AWAITING_CONNECTION")):Ur?(t("wallet_connect",er),e("AWAITING_CONNECTION")):e("INSTALL_METAMASK_SCREEN")},children:[_e(ue,{}),_e("span",{children:"Metamask"}),_e("span",{children:gn()?"Connect":"Install"})]}),Yt(Br,{onClick:()=>{Ot()?(t("coinbase_wallet"),e("AWAITING_CONNECTION")):Ur?e("COINBASE_INTERSTITIAL_SCREEN"):(t("coinbase_wallet"),e("AWAITING_CONNECTION"))},children:[_e(Te,{}),Yt("span",{children:["Coinbase",_e(Us,{children:" Wallet"})]}),_e("span",{children:"Connect"})]}),(Ur||nt())&&Yt(Br,{onClick:()=>{nt()?(t("phantom"),e("AWAITING_CONNECTION")):e(Ur?"PHANTOM_INTERSTITIAL_SCREEN":"INSTALL_PHANTOM_SCREEN")},children:[_e(De,{}),_e("span",{children:"Phantom"}),_e("span",{children:nt()?"Connect":"Install"})]}),Yt(Br,{onClick:()=>{t("wallet_connect"),e("AWAITING_CONNECTION")},children:[_e(Dt,{}),_e("span",{children:"WalletConnect"}),_e("span",{children:"Connect"})]})]})},P1=Bs.div`
1297
+ `;import{jsx as _e,jsxs as Yt}from"react/jsx-runtime";var Fr=()=>{let{navigate:e}=b(),{initLoginWithWallet:t}=T();return Yt(P1,{children:[Yt(Br,{onClick:()=>{gn()?(t("metamask"),e("AWAITING_CONNECTION")):Ur?(t("wallet_connect",er),e("AWAITING_CONNECTION")):e("INSTALL_METAMASK_SCREEN")},children:[_e(ue,{}),_e("span",{children:"Metamask"}),_e("span",{children:gn()?"Connect":"Install"})]}),Yt(Br,{onClick:()=>{Ot()?(t("coinbase_wallet"),e("AWAITING_CONNECTION")):Ur?e("COINBASE_INTERSTITIAL_SCREEN"):(t("coinbase_wallet"),e("AWAITING_CONNECTION"))},children:[_e(Te,{}),Yt("span",{children:["Coinbase",_e(Us,{children:" Wallet"})]}),_e("span",{children:"Connect"})]}),(Ur||nt())&&Yt(Br,{id:"privy-phantom-button",onClick:()=>{nt()?(t("phantom"),e("AWAITING_CONNECTION")):e(Ur?"PHANTOM_INTERSTITIAL_SCREEN":"INSTALL_PHANTOM_SCREEN")},children:[_e(De,{}),_e("span",{children:"Phantom"}),_e("span",{children:nt()?"Connect":"Install"})]}),Yt(Br,{onClick:()=>{t("wallet_connect"),e("AWAITING_CONNECTION")},children:[_e(Dt,{}),_e("span",{children:"WalletConnect"}),_e("span",{children:"Connect"})]})]})},P1=Bs.div`
1298
1298
  display: flex;
1299
1299
  flex-direction: column;
1300
1300
  align-items: flex-start;
package/dist/index.js CHANGED
@@ -1,4 +1,4 @@
1
- "use strict";var pc=Object.create;var pr=Object.defineProperty;var uc=Object.getOwnPropertyDescriptor;var mc=Object.getOwnPropertyNames;var fc=Object.getPrototypeOf,hc=Object.prototype.hasOwnProperty;var gc=(e,t)=>{for(var o in t)pr(e,o,{get:t[o],enumerable:!0})},Bi=(e,t,o,r)=>{if(t&&typeof t=="object"||typeof t=="function")for(let n of mc(t))!hc.call(e,n)&&n!==o&&pr(e,n,{get:()=>t[n],enumerable:!(r=uc(t,n))||r.enumerable});return e};var C=(e,t,o)=>(o=e!=null?pc(fc(e)):{},Bi(t||!e||!e.__esModule?pr(o,"default",{value:e,enumerable:!0}):o,e)),yc=e=>Bi(pr({},"__esModule",{value:!0}),e);var _1={};gc(_1,{AsExternalProvider:()=>Wt,ConnectorManager:()=>go,PrivyClient:()=>bo,PrivyProvider:()=>dc,PrivyProxyProvider:()=>ze,VERSION:()=>mr,WalletConnector:()=>Pe,getAccessToken:()=>fo,usePrivy:()=>U});module.exports=yc(_1);var sc=require("@ethersproject/providers"),Q=require("react");var P=()=>{throw new Error("You need to wrap your application with the <PrivyProvider> initialized with your app id.")};var Fi=C(require("axios")),Qe=class extends Error{constructor(o,r,n){super(o);r instanceof Error&&(this.cause=r),this.privyErrorCode=n}toString(){return`${this.type}${this.privyErrorCode?`-${this.privyErrorCode}`:""}: ${this.message}${this.cause?` [cause: ${this.cause}]`:""}`}},co=class extends Qe{constructor(o,r,n,i,a){super(n,i,a);this.type=o;this.status=r}},T=class extends Qe{constructor(o,r,n){super(o,r,n);this.type="client_error"}};var ee=class extends Qe{constructor(o,r,n){super(o,r,n);this.type="connector_error"}},ce=e=>{if(e instanceof Qe)return e;if(!Fi.default.isAxiosError(e))return Fe(e);if(!e.response)return new co("api_error",null,e.message,e);let{type:t,message:o,error:r,code:n}=e.response.data;return new co(t||"ApiError",e.response.status,o||r,e,n)},Fe=e=>e instanceof Qe?e:e instanceof Error?new T(e.message,e):new T(`Internal error: ${e}`);var Gi=()=>"/api/v1/sessions",Hi=()=>"/api/v1/sessions/logout",Vi=()=>"/api/v1/sessions/fork",zi=()=>"/api/v1/sessions/fork/recover",qi=()=>"/api/v1/siwe/init",$i=()=>"/api/v1/siwe/authenticate",ji=()=>"/api/v1/siwe/link",Ki=()=>"/api/v1/passwordless/init",Zi=()=>"/api/v1/passwordless/authenticate",Yi=()=>"/api/v1/passwordless/link",Qi=()=>"/api/v1/passwordless_sms/init",Ji=()=>"/api/v1/passwordless_sms/authenticate",Xi=()=>"/api/v1/passwordless_sms/link",ea=()=>"/api/v1/oauth/init",ta=()=>"/api/v1/oauth/authenticate",oa=()=>"/api/v1/oauth/link",ra=()=>"/api/v1/siwe/unlink",na=()=>"/api/v1/passwordless/unlink",ia=()=>"/api/v1/passwordless_sms/unlink",aa=()=>"/api/v1/oauth/unlink",sa=()=>"/api/v1/analytics_events";var $t=class{constructor(t){this.meta={email:t}}async authenticate(){if(!this.api)throw new T("Auth flow has no API instance");if(!this.meta.email||!this.meta.emailCode)throw new T("Email and email code must be set prior to calling authenticate.");try{let t=Zi(),o=await this.api.post(t,{email:this.meta.email,code:this.meta.emailCode});return{user:o.data.user,token:o.data.token,refresh_token:o.data.refresh_token,is_new_user:o.data.is_new_user}}catch(t){throw ce(t)}}async link(){if(!this.api)throw new T("Auth flow has no API instance");if(!this.meta.email||!this.meta.emailCode)throw new T("Email and email code must be set prior to calling authenticate.");try{let t=Yi();return(await this.api.post(t,{email:this.meta.email,code:this.meta.emailCode})).data}catch(t){throw ce(t)}}async sendCodeEmail(t){if(!this.api)throw new T("Auth flow has no API instance");if(t&&(this.meta.email=t),!this.meta.email)throw new T("Email must be set when initialzing authentication.");try{let o=Ki();return(await this.api.post(o,{email:this.meta.email})).data}catch(o){throw ce(o)}}};var kt=class{constructor(t,o,r){this.meta={provider:t},this.meta.authorizationCode=o,this.meta.stateCode=r}isActive(){return!!(this.meta.authorizationCode&&this.meta.stateCode&&this.meta.provider)}async authenticate(){if(!this.api)throw new T("Auth flow has no API instance");if(!this.meta.authorizationCode||!this.meta.stateCode)throw new T("[OAuth AuthFlow] Authorization and state codes code must be set prior to calling authenticate.");if(this.meta.authorizationCode==="undefined")throw new T("User denied confirmation during OAuth flow");try{let t=ta(),o=await this.api.post(t,{authorization_code:this.meta.authorizationCode,state_code:this.meta.stateCode});return{user:o.data.user,token:o.data.token,refresh_token:o.data.refresh_token,is_new_user:o.data.is_new_user}}catch(t){throw ce(t)}}async link(){if(!this.api)throw new T("Auth flow has no API instance");if(!this.meta.authorizationCode||!this.meta.stateCode)throw new T("[OAuth AuthFlow] Authorization and state codes code must be set prior to calling link.");if(this.meta.authorizationCode==="undefined")throw new T("User denied confirmation during OAuth flow");try{let t=oa();return(await this.api.post(t,{authorization_code:this.meta.authorizationCode,state_code:this.meta.stateCode})).data}catch(t){throw ce(t)}}async getAuthorizationUrl(){var t;if(!this.api)throw new T("Auth flow has no API instance");if(!this.meta.provider)throw new T("Provider must be set when initialzing OAuth authentication.");try{let o=ea();return(await this.api.post(o,{provider:this.meta.provider,redirect_to:window.location.href},{baseURL:(t=this.api)==null?void 0:t.fallbackApiUrl})).data}catch(o){throw ce(o)}}};var Rt=class{constructor(t,o,r){this._meta={walletType:o,walletId:r},this.connectors=t,this.walletConnector=this.connectors.createWalletConnector(o,null,r)}get meta(){return{...this._meta,walletName:this.walletConnector.walletBranding.name,walletIcon:this.walletConnector.walletBranding.icon}}async authenticate(){if(!this.api)throw new T("Auth flow has no API instance");try{let{message:t,signature:o}=await this.sign(),r=await this.api.post($i(),{message:t,signature:o});return this.connectors.addWalletConnector(this.walletConnector),await this.connectors.setActiveWallet(this.walletConnector.address)||console.warn("Failed to set active wallet"),{user:r.data.user,token:r.data.token,refresh_token:r.data.refresh_token,is_new_user:r.data.is_new_user}}catch(t){throw ce(t)}}async link(){if(!this.api)throw new T("Auth flow has no API instance");try{let{message:t,signature:o}=await this.sign(),r=await this.api.post(ji(),{message:t,signature:o});return this.connectors.addWalletConnector(this.walletConnector),await this.connectors.setActiveWallet(this.walletConnector.address)||console.warn("Failed to set active wallet"),r.data}catch(t){throw ce(t)}}async promptConnect(){if(!this.api)throw new T("Auth flow has no API instance");let t=await this.walletConnector.connect({showPrompt:!0});return await this.buildSiweMessage(t),t}async sign(){if(!this.api)throw new T("Auth flow has no API instance");if(!this.preparedMessage){let o=await this.walletConnector.connect({showPrompt:!1});await this.buildSiweMessage(o)}if(!this.preparedMessage)throw new T("Could not prepare SIWE message");let t=await this.walletConnector.sign(this.preparedMessage);return{message:this.preparedMessage,signature:t}}async buildSiweMessage(t){if(!this.api)throw new T("Auth flow has no API instance");let o=t.address,r=t.chainId,n=await this.api.post(qi(),{address:o});return this.preparedMessage=this.walletConnector.prepareMessage(r,o,n.data.nonce),this.preparedMessage}};var jt=class{constructor(t){this.meta={phoneNumber:t}}async authenticate(){if(!this.api)throw new T("Auth flow has no API instance");if(!this.meta.phoneNumber||!this.meta.smsCode)throw new T("phone number and sms code must be set prior to calling authenticate.");try{let t=Ji(),o=await this.api.post(t,{phoneNumber:this.meta.phoneNumber,code:this.meta.smsCode});return{user:o.data.user,token:o.data.token,refresh_token:o.data.refresh_token,is_new_user:o.data.is_new_user}}catch(t){throw ce(t)}}async link(){if(!this.api)throw new T("Auth flow has no API instance");if(!this.meta.phoneNumber||!this.meta.smsCode)throw new T("phone number and sms code must be set prior to calling authenticate.");try{let t=Xi();return(await this.api.post(t,{phoneNumber:this.meta.phoneNumber,code:this.meta.smsCode})).data}catch(t){throw ce(t)}}async sendSmsCode(t){if(!this.api)throw new T("Auth flow has no API instance");if(t&&(this.meta.phoneNumber=t),!this.meta.phoneNumber)throw new T("phone nNumber must be set when initialzing authentication.");try{let o=Qi();return(await this.api.post(o,{phoneNumber:this.meta.phoneNumber})).data}catch(o){throw ce(o)}}};var Ha=require("@ethersproject/address");var la="1.25.1-beta.4";var at="4df5e2316331463a9130964bd6078dfa",ur="https://auth.privy.io",ca=1e4,st=1400,mr=la;var po="privy:token",fr="privy:refresh_token",Oo="privy:session_transfer_token",hr="privy:connectors",Mn="walletconnect",da=3e4,Ge=1;var Nn=class{constructor(){this._cache={}}get(t){return this._cache[t]}put(t,o){o!==void 0?this._cache[t]=o:this.del(t)}del(t){delete this._cache[t]}getKeys(){return Object.keys(this._cache)}},Dn=class{get(t){let o=localStorage.getItem(t);return o===null?void 0:JSON.parse(o)}put(t,o){o!==void 0?localStorage.setItem(t,JSON.stringify(o)):this.del(t)}del(t){localStorage.removeItem(t)}getKeys(){return Object.entries(localStorage).map(([t])=>t)}};function vc(){return typeof window<"u"&&window.localStorage?new Dn:new Nn}var Z=vc();var Aa=C(require("@coinbase/wallet-sdk")),_a=require("@ethersproject/address");var Uo=require("react/jsx-runtime"),He=({style:e,...t})=>(0,Uo.jsxs)("svg",{width:"1024",height:"1024",viewBox:"0 0 1024 1024",fill:"none",xmlns:"http://www.w3.org/2000/svg",style:{height:"28px",width:"28px",...e},...t,children:[(0,Uo.jsx)("rect",{width:"1024",height:"1024",fill:"#0052FF",rx:100,ry:100}),(0,Uo.jsx)("path",{fillRule:"evenodd",clipRule:"evenodd",d:"M152 512C152 710.823 313.177 872 512 872C710.823 872 872 710.823 872 512C872 313.177 710.823 152 512 152C313.177 152 152 313.177 152 512ZM420 396C406.745 396 396 406.745 396 420V604C396 617.255 406.745 628 420 628H604C617.255 628 628 617.255 628 604V420C628 406.745 617.255 396 604 396H420Z",fill:"white"})]});var Pa=require("@ethersproject/address"),Ta=require("@ethersproject/providers");var ba=require("@ethersproject/bytes"),va=require("@ethersproject/providers"),wa=require("@ethersproject/strings"),Ca=C(require("eventemitter3"));var wc=["eth_sign","eth_populateTransactionRequest","eth_signTransaction","personal_sign"],pa=e=>wc.includes(e);var ua=require("libphonenumber-js/min");var ma=e=>!!String(e).toLowerCase().match(/^(([^<>()[\]\\.,;:\s@"]+(\.[^<>()[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/),fa=e=>(0,ua.isPossiblePhoneNumber)(String(e),"US"),ha=(e,t)=>{let o=e.slice(0),r=[];for(;o.length;)r.push(o.splice(0,t));return r},Je=(e,t=3,o=4)=>{if(!e)return"";let r=2,n=3;if(t+o+r+n>=e.length)return e;let i=e.slice(0,r+t),a=e.slice(e.length-o,e.length);return`${i}...${a}`},On=e=>new Promise(t=>setTimeout(t,e)),ga=(e,t={})=>{let o=t.delayMs||40,r=t.maxAttempts||1e3;return new Promise(async(n,i)=>{let a=!1,s=0;for(;!a&&s<r;)e().then(()=>{a=!0,n()},(...l)=>{a=!0,i(...l)}),s+=1,await On(o);a||i(new Error("Exceeded max attempts before resolving function"))})},gr=(e,t,o={})=>{let r=new URL(t,e);for(let[n,i]of Object.entries(o))r.searchParams.set(n,i);return r.href},Cc=(e,t)=>e.toLowerCase()===t.toLowerCase(),Un=(e,t)=>{for(let o of e)if(Cc(o,t))return!0;return!1},yr=e=>e.replace(/([\u2700-\u27BF]|[\uE000-\uF8FF]|\uD83C[\uDC00-\uDFFF]|\uD83D[\uDC00-\uDFFF]|[\u2011-\u26FF]|\uD83E[\uDD10-\uDDFF])/g,""),Bo=e=>typeof e=="string"?e:"0x"+e.toString(16);var ya=require("@ethersproject/logger");var uo=class extends ee{constructor(){super("Wallet timeout");this.type="wallet_error"}},Zt=class extends ee{constructor(){super("User rejected connection");this.type="wallet_error"}},Ve=e=>{if(e instanceof ee)return e;if((e==null?void 0:e.code)&&(e==null?void 0:e.reason)){let t=new mo(e);return e.code===ya.ErrorCode.ACTION_REJECTED&&(t.details=Kt.E4001_USER_REJECTED_REQUEST),t}return e!=null&&e.code?new mo(e):new ee("Unknown connector error",e)},Bn=class extends Qe{constructor(o,r,n){super(o);this.type="provider_error";this.code=r,this.data=n}},mo=class extends Bn{constructor(o){var i,a,s;let r=o;super(r.message,r.code,r.data);let n=Object.values(Kt).find(l=>l.eipCode===r.code);this.details=n||Kt.UNKNOWN_ERROR,r.code===-32002&&((i=r.message)!=null&&i.includes("already pending for origin")?(a=r.message)!=null&&a.includes("wallet_requestPermissions")?this.details=Kt.E32002_CONNECTION_ALREADY_PENDING:this.details=Kt.E32002_REQUEST_ALREADY_PENDING:(s=r.message)!=null&&s.includes("Already processing")&&r.message.includes("eth_requestAccounts")&&(this.details=Kt.E32002_WALLET_LOCKED))}},xc={ERROR_USER_EXISTS:{message:"User already exists for this address",detail:"Try another address!",retryable:!1},ERROR_TIMED_OUT:{message:"Wallet request timed out",detail:"Please try connecting again.",retryable:!0},ERROR_WALLET_CONNECTION:{message:"Could not log in with wallet",detail:"Please try connecting again.",retryable:!0},ERROR_USER_REJECTED_CONNECTION:{message:"You rejected the request",detail:"Please try connecting again.",retryable:!0}},Ec={E32002_CONNECTION_ALREADY_PENDING:{eipCode:-32002,message:"Connection request already pending",detail:"Don\u2019t see your wallet modal? Check your other browser windows.",retryable:!1},E32002_REQUEST_ALREADY_PENDING:{eipCode:-32002,message:"Resource request already pending",detail:"Don\u2019t see your wallet modal? Check your other browser windows.",retryable:!1},E32002_WALLET_LOCKED:{eipCode:-32002,message:"Wallet might be locked",detail:"Don\u2019t see your wallet modal? Check your other browser windows.",retryable:!1},E4001_USER_REJECTED_REQUEST:{eipCode:4001,message:"Signature rejected",detail:"Please try signing again.",retryable:!0}},Pc={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}},Kt={UNKNOWN_ERROR:{eipCode:0,message:"Unknown error",detail:"Unknown error",retryable:!0},...Pc,...Ec},Yt={...xc,...Kt};var Tc=12e4,Fn=(e=new uo,t=Tc)=>new Promise((o,r)=>setTimeout(()=>{r(e)},t)),ze=class{constructor(t){this.removeListener=(t,o)=>{if(this.walletProvider)return this.walletProvider.removeListener(t,o)};this.setWalletProvider=t=>{this.walletProvider=t,this._subscriptions.forEach(o=>{var r;(r=this.walletProvider)==null||r.on(o.eventName,o.listener)})};this.walletProvider=t,this._subscriptions=[]}on(t,o){if(this.walletProvider)return this.walletProvider.on(t,o);this._subscriptions.push({eventName:t,listener:o})}async request(t){if(!this.walletProvider)throw new ee(`A wallet request of type ${t.method} was made before setting a wallet provider.`);return Promise.race([this.walletProvider.request(t),Fn()]).catch(o=>{throw Ve(o)})}},Qt=class extends Error{constructor(o,r,n){super(o);this.code=r,this.data=n}},br=class extends Ca.default{constructor(o,r,n=1){super();this.walletProxy=o,this.address=r,this.chainId=n,this.infuraProvider=new va.InfuraProvider(n,at)}async handleSendTransaction(o){if(!o.params||!Array.isArray(o.params))throw new Qt(`Invalid params for ${o.method}`,4200);let r=o.params[0];if(!await fo()||!this.address)throw new Qt("Disconnected",4900);return(await Ea(r)).transactionHash}handleSwitchEthereumChain(o){if(!o.params||!Array.isArray(o.params))throw new Qt(`Invalid params for ${o.method}`,4200);let r=o.params[0];this.chainId=Number(r),this.emit("chainChanged",r)}async handlePersonalSign(o){if(!o.params||!Array.isArray(o.params))throw new Error("Invalid params for eth_estimateGas");let r=o.params[0],n=(0,ba.isHexString)(r)?(0,wa.toUtf8String)(r):r;return await xa(n)}async handleEstimateGas(o){if(!o.params||!Array.isArray(o.params))throw new Error("Invalid params for eth_estimateGas");let r={...o.params[0],chainId:Bo(this.chainId)};return delete r.from,this.infuraProvider.send("eth_estimateGas",[r])}async request(o){switch(console.debug("Embedded1193Provider.request() called with args",o),o.method){case"eth_accounts":return this.address?[this.address]:[];case"eth_chainId":return Bo(this.chainId);case"eth_estimateGas":return this.handleEstimateGas(o);case"eth_sendTransaction":return this.handleSendTransaction(o);case"wallet_switchEthereumChain":return this.handleSwitchEthereumChain(o);case"personal_sign":return this.handlePersonalSign(o);default:break}if(pa(o.method)){let r=await fo();if(!r||!this.address)throw new Qt("Disconnected",4900);try{return(await this.walletProxy.rpc({address:this.address,accessToken:r,request:{method:o.method,params:o.params}})).response.data}catch(n){throw console.error(n),new Qt("Disconnected",4900)}}else return this.infuraProvider.send(o.method,o.params)}async connect(){let o=await fo();if(!o||!this.address)return null;try{return(await this.walletProxy.connect({address:this.address,accessToken:o})).address}catch(r){return console.error(r),null}}},Wt=class extends ze{constructor(o){super(o)}},vr=class extends ze{constructor(t){super(t)}sendAsync(t,o){throw new Error("sendAsync is no longer supported by EIP-1193. Use the request method instead.")}};var Pe=class{constructor(t,o,r){this.createSiweMessage=(t,o,r,n,i,a,s)=>`${r} wants you to sign in with your Ethereum account:
1
+ "use strict";var pc=Object.create;var pr=Object.defineProperty;var uc=Object.getOwnPropertyDescriptor;var mc=Object.getOwnPropertyNames;var fc=Object.getPrototypeOf,hc=Object.prototype.hasOwnProperty;var gc=(e,t)=>{for(var o in t)pr(e,o,{get:t[o],enumerable:!0})},Bi=(e,t,o,r)=>{if(t&&typeof t=="object"||typeof t=="function")for(let n of mc(t))!hc.call(e,n)&&n!==o&&pr(e,n,{get:()=>t[n],enumerable:!(r=uc(t,n))||r.enumerable});return e};var C=(e,t,o)=>(o=e!=null?pc(fc(e)):{},Bi(t||!e||!e.__esModule?pr(o,"default",{value:e,enumerable:!0}):o,e)),yc=e=>Bi(pr({},"__esModule",{value:!0}),e);var _1={};gc(_1,{AsExternalProvider:()=>Wt,ConnectorManager:()=>go,PrivyClient:()=>bo,PrivyProvider:()=>dc,PrivyProxyProvider:()=>ze,VERSION:()=>mr,WalletConnector:()=>Pe,getAccessToken:()=>fo,usePrivy:()=>U});module.exports=yc(_1);var sc=require("@ethersproject/providers"),Q=require("react");var P=()=>{throw new Error("You need to wrap your application with the <PrivyProvider> initialized with your app id.")};var Fi=C(require("axios")),Qe=class extends Error{constructor(o,r,n){super(o);r instanceof Error&&(this.cause=r),this.privyErrorCode=n}toString(){return`${this.type}${this.privyErrorCode?`-${this.privyErrorCode}`:""}: ${this.message}${this.cause?` [cause: ${this.cause}]`:""}`}},co=class extends Qe{constructor(o,r,n,i,a){super(n,i,a);this.type=o;this.status=r}},T=class extends Qe{constructor(o,r,n){super(o,r,n);this.type="client_error"}};var ee=class extends Qe{constructor(o,r,n){super(o,r,n);this.type="connector_error"}},ce=e=>{if(e instanceof Qe)return e;if(!Fi.default.isAxiosError(e))return Fe(e);if(!e.response)return new co("api_error",null,e.message,e);let{type:t,message:o,error:r,code:n}=e.response.data;return new co(t||"ApiError",e.response.status,o||r,e,n)},Fe=e=>e instanceof Qe?e:e instanceof Error?new T(e.message,e):new T(`Internal error: ${e}`);var Gi=()=>"/api/v1/sessions",Hi=()=>"/api/v1/sessions/logout",Vi=()=>"/api/v1/sessions/fork",zi=()=>"/api/v1/sessions/fork/recover",qi=()=>"/api/v1/siwe/init",$i=()=>"/api/v1/siwe/authenticate",ji=()=>"/api/v1/siwe/link",Ki=()=>"/api/v1/passwordless/init",Zi=()=>"/api/v1/passwordless/authenticate",Yi=()=>"/api/v1/passwordless/link",Qi=()=>"/api/v1/passwordless_sms/init",Ji=()=>"/api/v1/passwordless_sms/authenticate",Xi=()=>"/api/v1/passwordless_sms/link",ea=()=>"/api/v1/oauth/init",ta=()=>"/api/v1/oauth/authenticate",oa=()=>"/api/v1/oauth/link",ra=()=>"/api/v1/siwe/unlink",na=()=>"/api/v1/passwordless/unlink",ia=()=>"/api/v1/passwordless_sms/unlink",aa=()=>"/api/v1/oauth/unlink",sa=()=>"/api/v1/analytics_events";var $t=class{constructor(t){this.meta={email:t}}async authenticate(){if(!this.api)throw new T("Auth flow has no API instance");if(!this.meta.email||!this.meta.emailCode)throw new T("Email and email code must be set prior to calling authenticate.");try{let t=Zi(),o=await this.api.post(t,{email:this.meta.email,code:this.meta.emailCode});return{user:o.data.user,token:o.data.token,refresh_token:o.data.refresh_token,is_new_user:o.data.is_new_user}}catch(t){throw ce(t)}}async link(){if(!this.api)throw new T("Auth flow has no API instance");if(!this.meta.email||!this.meta.emailCode)throw new T("Email and email code must be set prior to calling authenticate.");try{let t=Yi();return(await this.api.post(t,{email:this.meta.email,code:this.meta.emailCode})).data}catch(t){throw ce(t)}}async sendCodeEmail(t){if(!this.api)throw new T("Auth flow has no API instance");if(t&&(this.meta.email=t),!this.meta.email)throw new T("Email must be set when initialzing authentication.");try{let o=Ki();return(await this.api.post(o,{email:this.meta.email})).data}catch(o){throw ce(o)}}};var kt=class{constructor(t,o,r){this.meta={provider:t},this.meta.authorizationCode=o,this.meta.stateCode=r}isActive(){return!!(this.meta.authorizationCode&&this.meta.stateCode&&this.meta.provider)}async authenticate(){if(!this.api)throw new T("Auth flow has no API instance");if(!this.meta.authorizationCode||!this.meta.stateCode)throw new T("[OAuth AuthFlow] Authorization and state codes code must be set prior to calling authenticate.");if(this.meta.authorizationCode==="undefined")throw new T("User denied confirmation during OAuth flow");try{let t=ta(),o=await this.api.post(t,{authorization_code:this.meta.authorizationCode,state_code:this.meta.stateCode});return{user:o.data.user,token:o.data.token,refresh_token:o.data.refresh_token,is_new_user:o.data.is_new_user}}catch(t){throw ce(t)}}async link(){if(!this.api)throw new T("Auth flow has no API instance");if(!this.meta.authorizationCode||!this.meta.stateCode)throw new T("[OAuth AuthFlow] Authorization and state codes code must be set prior to calling link.");if(this.meta.authorizationCode==="undefined")throw new T("User denied confirmation during OAuth flow");try{let t=oa();return(await this.api.post(t,{authorization_code:this.meta.authorizationCode,state_code:this.meta.stateCode})).data}catch(t){throw ce(t)}}async getAuthorizationUrl(){var t;if(!this.api)throw new T("Auth flow has no API instance");if(!this.meta.provider)throw new T("Provider must be set when initialzing OAuth authentication.");try{let o=ea();return(await this.api.post(o,{provider:this.meta.provider,redirect_to:window.location.href},{baseURL:(t=this.api)==null?void 0:t.fallbackApiUrl})).data}catch(o){throw ce(o)}}};var Rt=class{constructor(t,o,r){this._meta={walletType:o,walletId:r},this.connectors=t,this.walletConnector=this.connectors.createWalletConnector(o,null,r)}get meta(){return{...this._meta,walletName:this.walletConnector.walletBranding.name,walletIcon:this.walletConnector.walletBranding.icon}}async authenticate(){if(!this.api)throw new T("Auth flow has no API instance");try{let{message:t,signature:o}=await this.sign(),r=await this.api.post($i(),{message:t,signature:o});return this.connectors.addWalletConnector(this.walletConnector),await this.connectors.setActiveWallet(this.walletConnector.address)||console.warn("Failed to set active wallet"),{user:r.data.user,token:r.data.token,refresh_token:r.data.refresh_token,is_new_user:r.data.is_new_user}}catch(t){throw ce(t)}}async link(){if(!this.api)throw new T("Auth flow has no API instance");try{let{message:t,signature:o}=await this.sign(),r=await this.api.post(ji(),{message:t,signature:o});return this.connectors.addWalletConnector(this.walletConnector),await this.connectors.setActiveWallet(this.walletConnector.address)||console.warn("Failed to set active wallet"),r.data}catch(t){throw ce(t)}}async promptConnect(){if(!this.api)throw new T("Auth flow has no API instance");let t=await this.walletConnector.connect({showPrompt:!0});return await this.buildSiweMessage(t),t}async sign(){if(!this.api)throw new T("Auth flow has no API instance");if(!this.preparedMessage){let o=await this.walletConnector.connect({showPrompt:!1});await this.buildSiweMessage(o)}if(!this.preparedMessage)throw new T("Could not prepare SIWE message");let t=await this.walletConnector.sign(this.preparedMessage);return{message:this.preparedMessage,signature:t}}async buildSiweMessage(t){if(!this.api)throw new T("Auth flow has no API instance");let o=t.address,r=t.chainId,n=await this.api.post(qi(),{address:o});return this.preparedMessage=this.walletConnector.prepareMessage(r,o,n.data.nonce),this.preparedMessage}};var jt=class{constructor(t){this.meta={phoneNumber:t}}async authenticate(){if(!this.api)throw new T("Auth flow has no API instance");if(!this.meta.phoneNumber||!this.meta.smsCode)throw new T("phone number and sms code must be set prior to calling authenticate.");try{let t=Ji(),o=await this.api.post(t,{phoneNumber:this.meta.phoneNumber,code:this.meta.smsCode});return{user:o.data.user,token:o.data.token,refresh_token:o.data.refresh_token,is_new_user:o.data.is_new_user}}catch(t){throw ce(t)}}async link(){if(!this.api)throw new T("Auth flow has no API instance");if(!this.meta.phoneNumber||!this.meta.smsCode)throw new T("phone number and sms code must be set prior to calling authenticate.");try{let t=Xi();return(await this.api.post(t,{phoneNumber:this.meta.phoneNumber,code:this.meta.smsCode})).data}catch(t){throw ce(t)}}async sendSmsCode(t){if(!this.api)throw new T("Auth flow has no API instance");if(t&&(this.meta.phoneNumber=t),!this.meta.phoneNumber)throw new T("phone nNumber must be set when initialzing authentication.");try{let o=Qi();return(await this.api.post(o,{phoneNumber:this.meta.phoneNumber})).data}catch(o){throw ce(o)}}};var Ha=require("@ethersproject/address");var la="1.25.1";var at="4df5e2316331463a9130964bd6078dfa",ur="https://auth.privy.io",ca=1e4,st=1400,mr=la;var po="privy:token",fr="privy:refresh_token",Oo="privy:session_transfer_token",hr="privy:connectors",Mn="walletconnect",da=3e4,Ge=1;var Nn=class{constructor(){this._cache={}}get(t){return this._cache[t]}put(t,o){o!==void 0?this._cache[t]=o:this.del(t)}del(t){delete this._cache[t]}getKeys(){return Object.keys(this._cache)}},Dn=class{get(t){let o=localStorage.getItem(t);return o===null?void 0:JSON.parse(o)}put(t,o){o!==void 0?localStorage.setItem(t,JSON.stringify(o)):this.del(t)}del(t){localStorage.removeItem(t)}getKeys(){return Object.entries(localStorage).map(([t])=>t)}};function vc(){return typeof window<"u"&&window.localStorage?new Dn:new Nn}var Z=vc();var Aa=C(require("@coinbase/wallet-sdk")),_a=require("@ethersproject/address");var Uo=require("react/jsx-runtime"),He=({style:e,...t})=>(0,Uo.jsxs)("svg",{width:"1024",height:"1024",viewBox:"0 0 1024 1024",fill:"none",xmlns:"http://www.w3.org/2000/svg",style:{height:"28px",width:"28px",...e},...t,children:[(0,Uo.jsx)("rect",{width:"1024",height:"1024",fill:"#0052FF",rx:100,ry:100}),(0,Uo.jsx)("path",{fillRule:"evenodd",clipRule:"evenodd",d:"M152 512C152 710.823 313.177 872 512 872C710.823 872 872 710.823 872 512C872 313.177 710.823 152 512 152C313.177 152 152 313.177 152 512ZM420 396C406.745 396 396 406.745 396 420V604C396 617.255 406.745 628 420 628H604C617.255 628 628 617.255 628 604V420C628 406.745 617.255 396 604 396H420Z",fill:"white"})]});var Pa=require("@ethersproject/address"),Ta=require("@ethersproject/providers");var ba=require("@ethersproject/bytes"),va=require("@ethersproject/providers"),wa=require("@ethersproject/strings"),Ca=C(require("eventemitter3"));var wc=["eth_sign","eth_populateTransactionRequest","eth_signTransaction","personal_sign"],pa=e=>wc.includes(e);var ua=require("libphonenumber-js/min");var ma=e=>!!String(e).toLowerCase().match(/^(([^<>()[\]\\.,;:\s@"]+(\.[^<>()[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/),fa=e=>(0,ua.isPossiblePhoneNumber)(String(e),"US"),ha=(e,t)=>{let o=e.slice(0),r=[];for(;o.length;)r.push(o.splice(0,t));return r},Je=(e,t=3,o=4)=>{if(!e)return"";let r=2,n=3;if(t+o+r+n>=e.length)return e;let i=e.slice(0,r+t),a=e.slice(e.length-o,e.length);return`${i}...${a}`},On=e=>new Promise(t=>setTimeout(t,e)),ga=(e,t={})=>{let o=t.delayMs||40,r=t.maxAttempts||1e3;return new Promise(async(n,i)=>{let a=!1,s=0;for(;!a&&s<r;)e().then(()=>{a=!0,n()},(...l)=>{a=!0,i(...l)}),s+=1,await On(o);a||i(new Error("Exceeded max attempts before resolving function"))})},gr=(e,t,o={})=>{let r=new URL(t,e);for(let[n,i]of Object.entries(o))r.searchParams.set(n,i);return r.href},Cc=(e,t)=>e.toLowerCase()===t.toLowerCase(),Un=(e,t)=>{for(let o of e)if(Cc(o,t))return!0;return!1},yr=e=>e.replace(/([\u2700-\u27BF]|[\uE000-\uF8FF]|\uD83C[\uDC00-\uDFFF]|\uD83D[\uDC00-\uDFFF]|[\u2011-\u26FF]|\uD83E[\uDD10-\uDDFF])/g,""),Bo=e=>typeof e=="string"?e:"0x"+e.toString(16);var ya=require("@ethersproject/logger");var uo=class extends ee{constructor(){super("Wallet timeout");this.type="wallet_error"}},Zt=class extends ee{constructor(){super("User rejected connection");this.type="wallet_error"}},Ve=e=>{if(e instanceof ee)return e;if((e==null?void 0:e.code)&&(e==null?void 0:e.reason)){let t=new mo(e);return e.code===ya.ErrorCode.ACTION_REJECTED&&(t.details=Kt.E4001_USER_REJECTED_REQUEST),t}return e!=null&&e.code?new mo(e):new ee("Unknown connector error",e)},Bn=class extends Qe{constructor(o,r,n){super(o);this.type="provider_error";this.code=r,this.data=n}},mo=class extends Bn{constructor(o){var i,a,s;let r=o;super(r.message,r.code,r.data);let n=Object.values(Kt).find(l=>l.eipCode===r.code);this.details=n||Kt.UNKNOWN_ERROR,r.code===-32002&&((i=r.message)!=null&&i.includes("already pending for origin")?(a=r.message)!=null&&a.includes("wallet_requestPermissions")?this.details=Kt.E32002_CONNECTION_ALREADY_PENDING:this.details=Kt.E32002_REQUEST_ALREADY_PENDING:(s=r.message)!=null&&s.includes("Already processing")&&r.message.includes("eth_requestAccounts")&&(this.details=Kt.E32002_WALLET_LOCKED))}},xc={ERROR_USER_EXISTS:{message:"User already exists for this address",detail:"Try another address!",retryable:!1},ERROR_TIMED_OUT:{message:"Wallet request timed out",detail:"Please try connecting again.",retryable:!0},ERROR_WALLET_CONNECTION:{message:"Could not log in with wallet",detail:"Please try connecting again.",retryable:!0},ERROR_USER_REJECTED_CONNECTION:{message:"You rejected the request",detail:"Please try connecting again.",retryable:!0}},Ec={E32002_CONNECTION_ALREADY_PENDING:{eipCode:-32002,message:"Connection request already pending",detail:"Don\u2019t see your wallet modal? Check your other browser windows.",retryable:!1},E32002_REQUEST_ALREADY_PENDING:{eipCode:-32002,message:"Resource request already pending",detail:"Don\u2019t see your wallet modal? Check your other browser windows.",retryable:!1},E32002_WALLET_LOCKED:{eipCode:-32002,message:"Wallet might be locked",detail:"Don\u2019t see your wallet modal? Check your other browser windows.",retryable:!1},E4001_USER_REJECTED_REQUEST:{eipCode:4001,message:"Signature rejected",detail:"Please try signing again.",retryable:!0}},Pc={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}},Kt={UNKNOWN_ERROR:{eipCode:0,message:"Unknown error",detail:"Unknown error",retryable:!0},...Pc,...Ec},Yt={...xc,...Kt};var Tc=12e4,Fn=(e=new uo,t=Tc)=>new Promise((o,r)=>setTimeout(()=>{r(e)},t)),ze=class{constructor(t){this.removeListener=(t,o)=>{if(this.walletProvider)return this.walletProvider.removeListener(t,o)};this.setWalletProvider=t=>{this.walletProvider=t,this._subscriptions.forEach(o=>{var r;(r=this.walletProvider)==null||r.on(o.eventName,o.listener)})};this.walletProvider=t,this._subscriptions=[]}on(t,o){if(this.walletProvider)return this.walletProvider.on(t,o);this._subscriptions.push({eventName:t,listener:o})}async request(t){if(!this.walletProvider)throw new ee(`A wallet request of type ${t.method} was made before setting a wallet provider.`);return Promise.race([this.walletProvider.request(t),Fn()]).catch(o=>{throw Ve(o)})}},Qt=class extends Error{constructor(o,r,n){super(o);this.code=r,this.data=n}},br=class extends Ca.default{constructor(o,r,n=1){super();this.walletProxy=o,this.address=r,this.chainId=n,this.infuraProvider=new va.InfuraProvider(n,at)}async handleSendTransaction(o){if(!o.params||!Array.isArray(o.params))throw new Qt(`Invalid params for ${o.method}`,4200);let r=o.params[0];if(!await fo()||!this.address)throw new Qt("Disconnected",4900);return(await Ea(r)).transactionHash}handleSwitchEthereumChain(o){if(!o.params||!Array.isArray(o.params))throw new Qt(`Invalid params for ${o.method}`,4200);let r=o.params[0];this.chainId=Number(r),this.emit("chainChanged",r)}async handlePersonalSign(o){if(!o.params||!Array.isArray(o.params))throw new Error("Invalid params for eth_estimateGas");let r=o.params[0],n=(0,ba.isHexString)(r)?(0,wa.toUtf8String)(r):r;return await xa(n)}async handleEstimateGas(o){if(!o.params||!Array.isArray(o.params))throw new Error("Invalid params for eth_estimateGas");let r={...o.params[0],chainId:Bo(this.chainId)};return delete r.from,this.infuraProvider.send("eth_estimateGas",[r])}async request(o){switch(console.debug("Embedded1193Provider.request() called with args",o),o.method){case"eth_accounts":return this.address?[this.address]:[];case"eth_chainId":return Bo(this.chainId);case"eth_estimateGas":return this.handleEstimateGas(o);case"eth_sendTransaction":return this.handleSendTransaction(o);case"wallet_switchEthereumChain":return this.handleSwitchEthereumChain(o);case"personal_sign":return this.handlePersonalSign(o);default:break}if(pa(o.method)){let r=await fo();if(!r||!this.address)throw new Qt("Disconnected",4900);try{return(await this.walletProxy.rpc({address:this.address,accessToken:r,request:{method:o.method,params:o.params}})).response.data}catch(n){throw console.error(n),new Qt("Disconnected",4900)}}else return this.infuraProvider.send(o.method,o.params)}async connect(){let o=await fo();if(!o||!this.address)return null;try{return(await this.walletProxy.connect({address:this.address,accessToken:o})).address}catch(r){return console.error(r),null}}},Wt=class extends ze{constructor(o){super(o)}},vr=class extends ze{constructor(t){super(t)}sendAsync(t,o){throw new Error("sendAsync is no longer supported by EIP-1193. Use the request method instead.")}};var Pe=class{constructor(t,o,r){this.createSiweMessage=(t,o,r,n,i,a,s)=>`${r} wants you to sign in with your Ethereum account:
2
2
  ${o}
3
3
 
4
4
  ${s}
@@ -1294,7 +1294,7 @@ Resources:
1294
1294
  @media (max-width: 440px) {
1295
1295
  display: none;
1296
1296
  }
1297
- `;var se=require("react/jsx-runtime"),mn=()=>{let{navigate:e}=v(),{initLoginWithWallet:t}=_();return(0,se.jsxs)(lp,{children:[(0,se.jsxs)(un,{onClick:()=>{Kn()?(t("metamask"),e("AWAITING_CONNECTION")):Yo.isMobile?(t("wallet_connect",Sr),e("AWAITING_CONNECTION")):e("INSTALL_METAMASK_SCREEN")},children:[(0,se.jsx)(Te,{}),(0,se.jsx)("span",{children:"Metamask"}),(0,se.jsx)("span",{children:Kn()?"Connect":"Install"})]}),(0,se.jsxs)(un,{onClick:()=>{yo()?(t("coinbase_wallet"),e("AWAITING_CONNECTION")):Yo.isMobile?e("COINBASE_INTERSTITIAL_SCREEN"):(t("coinbase_wallet"),e("AWAITING_CONNECTION"))},children:[(0,se.jsx)(He,{}),(0,se.jsxs)("span",{children:["Coinbase",(0,se.jsx)(Xs,{children:" Wallet"})]}),(0,se.jsx)("span",{children:"Connect"})]}),(Yo.isMobile||Lt())&&(0,se.jsxs)(un,{onClick:()=>{Lt()?(t("phantom"),e("AWAITING_CONNECTION")):e(Yo.isMobile?"PHANTOM_INTERSTITIAL_SCREEN":"INSTALL_PHANTOM_SCREEN")},children:[(0,se.jsx)(lt,{}),(0,se.jsx)("span",{children:"Phantom"}),(0,se.jsx)("span",{children:Lt()?"Connect":"Install"})]}),(0,se.jsxs)(un,{onClick:()=>{t("wallet_connect"),e("AWAITING_CONNECTION")},children:[(0,se.jsx)(ho,{}),(0,se.jsx)("span",{children:"WalletConnect"}),(0,se.jsx)("span",{children:"Connect"})]})]})},lp=Ti.default.div`
1297
+ `;var se=require("react/jsx-runtime"),mn=()=>{let{navigate:e}=v(),{initLoginWithWallet:t}=_();return(0,se.jsxs)(lp,{children:[(0,se.jsxs)(un,{onClick:()=>{Kn()?(t("metamask"),e("AWAITING_CONNECTION")):Yo.isMobile?(t("wallet_connect",Sr),e("AWAITING_CONNECTION")):e("INSTALL_METAMASK_SCREEN")},children:[(0,se.jsx)(Te,{}),(0,se.jsx)("span",{children:"Metamask"}),(0,se.jsx)("span",{children:Kn()?"Connect":"Install"})]}),(0,se.jsxs)(un,{onClick:()=>{yo()?(t("coinbase_wallet"),e("AWAITING_CONNECTION")):Yo.isMobile?e("COINBASE_INTERSTITIAL_SCREEN"):(t("coinbase_wallet"),e("AWAITING_CONNECTION"))},children:[(0,se.jsx)(He,{}),(0,se.jsxs)("span",{children:["Coinbase",(0,se.jsx)(Xs,{children:" Wallet"})]}),(0,se.jsx)("span",{children:"Connect"})]}),(Yo.isMobile||Lt())&&(0,se.jsxs)(un,{id:"privy-phantom-button",onClick:()=>{Lt()?(t("phantom"),e("AWAITING_CONNECTION")):e(Yo.isMobile?"PHANTOM_INTERSTITIAL_SCREEN":"INSTALL_PHANTOM_SCREEN")},children:[(0,se.jsx)(lt,{}),(0,se.jsx)("span",{children:"Phantom"}),(0,se.jsx)("span",{children:Lt()?"Connect":"Install"})]}),(0,se.jsxs)(un,{onClick:()=>{t("wallet_connect"),e("AWAITING_CONNECTION")},children:[(0,se.jsx)(ho,{}),(0,se.jsx)("span",{children:"WalletConnect"}),(0,se.jsx)("span",{children:"Connect"})]})]})},lp=Ti.default.div`
1298
1298
  display: flex;
1299
1299
  flex-direction: column;
1300
1300
  align-items: flex-start;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@privy-io/react-auth",
3
- "version": "1.25.1-beta.4",
3
+ "version": "1.25.1",
4
4
  "description": "React client for the Privy Auth API",
5
5
  "keywords": [
6
6
  "authentication",