@privy-io/react-auth 1.13.0-beta.2 → 1.13.0-beta.3
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 +2 -2
- package/dist/index.js +2 -2
- package/package.json +1 -1
package/dist/esm/index.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{useEffect as Ut,useState as ne}from"react";import Ht from"axios";import vi from"axios";var H=class extends Error{constructor(o,r){super(o);r instanceof Error&&(this.cause=r)}toString(){return`${this.type}: ${this.message}${this.cause?` [cause: ${this.cause}]`:""}`}},ke=class extends H{constructor(o,r,i,n){super(i,n);this.type=o;this.status=r}},u=class extends H{constructor(o,r){super(o,r);this.type="client_error"}};var G=class extends H{constructor(o,r){super(o,r);this.type="connector_error"}},T=t=>{if(t instanceof H)return t;if(!vi.isAxiosError(t))return V(t);if(!t.response)return new ke("api_error",null,t.message,t);let{type:e,message:o,error:r}=t.response.data;return new ke(e||"ApiError",t.response.status,o||r,t)},V=t=>t instanceof H?t:t instanceof Error?new u(t.message,t):new u(`Internal error: ${t}`);var bo="1.13.0-beta.2";var vo="https://api.privy.io/v0",xo=process.env.NEXT_PUBLIC_PRIVY_AUTH_URL||"https://auth.privy.io",et="4df5e2316331463a9130964bd6078dfa",Lo=1e4,_e=1400,Bt=bo;var Pe="privy:token",tt="privy:refresh_token",Z="privy:active_wallet",ot="privy:wallet_type",Ao="walletconnect";var rt=class{constructor(e,o,r){this.appId=e,this.sdkVersion=Bt,this.client=o,this.defaults=r}async get(e,o){try{return await Ht.get(e,await this.buildConfig({headers:{"Cache-Control":"no-cache"},...o}))}catch(r){throw T(r)}}async post(e,o,r){try{return await Ht.post(e,o,await this.buildConfig(r))}catch(i){throw T(i)}}async delete(e,o){try{return await Ht.delete(e,await this.buildConfig(o))}catch(r){throw T(r)}}async buildConfig(e){if(e=e||{},e.headers=e.headers||{},e.headers["privy-app-id"]=this.appId,e.headers["privy-client"]=`react-auth:${this.sdkVersion}`,!e.headers.authorization){let o=await this.client.getAccessToken();o!==null&&(e.headers.authorization=`Bearer ${o}`)}return{...this.defaults,...e}}};import*as Eo from"jose";var Y=class{static parse(e){try{return new Y(e)}catch{return null}}constructor(e){this.value=e,this._decoded=Eo.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){let o=Date.now(),r=(this.expiration-e)*1e3;return o>=r}};var se=class{constructor(e){this.promise=null;this.fn=e}execute(e){return this.promise===null&&(this.promise=(async()=>{try{return await this.fn(e)}finally{this.promise=null}})()),this.promise}};var zt=class{constructor(){this._cache={}}get(e){return this._cache[e]}put(e,o){o!==void 0?this._cache[e]=o:this.del(e)}del(e){delete this._cache[e]}},jt=class{get(e){let o=localStorage.getItem(e);return o===null?void 0:JSON.parse(o)}put(e,o){o!==void 0?localStorage.setItem(e,JSON.stringify(o)):this.del(e)}del(e){localStorage.removeItem(e)}};function Li(){return typeof window<"u"&&window.localStorage?new jt:new zt}var E=Li();function ae(t){return new Date(t*1e3)}function Ai(t){return t.map(e=>{switch(e.type){case"wallet":return{address:e.address,type:e.type,verifiedAt:ae(e.verified_at),chainType:e.chain_type};case"email":return{address:e.address,type:e.type,verifiedAt:ae(e.verified_at)};case"phone":return{number:e.phoneNumber,type:e.type,verifiedAt:ae(e.verified_at)};case"google_oauth":return{subject:e.subject,email:e.email,name:e.name,type:e.type,verifiedAt:ae(e.verified_at)};case"twitter_oauth":return{subject:e.subject,username:e.username,name:e.name,type:e.type,verifiedAt:ae(e.verified_at)};case"discord_oauth":return{subject:e.subject,username:e.username,email:e.email,type:e.type,verifiedAt:ae(e.verified_at)};case"github_oauth":return{subject:e.subject,username:e.username,name:e.name,email:e.email,type:e.type,verifiedAt:ae(e.verified_at)};default:throw new u("Unrecognized account type")}})}function Ei(t,e){return e.find(o=>o.type==="wallet"&&o.address===t)}function le(t,e){return t.sort((o,r)=>r.verifiedAt.getTime()-o.verifiedAt.getTime()),t.find(o=>o.type===e)}function Ge(t){let e=t.linkedAccounts.map(s=>s.type==="wallet"?s.address:null),r=E.get(Z);if(!r||!e.includes(r)){E.del(Z);let s=le(t.linkedAccounts,"wallet");s&&(r=s.address,E.put(Z,r))}let i=Ei(r,t.linkedAccounts),n=Object.assign({},t);return n.wallet=i&&{address:i.address,chainType:i.chainType,chainId:i.chainId,walletType:i.walletType},n}function Q(t){if(!t)return null;let e=Ai(t.linked_accounts),o=le(e,"wallet"),r=le(e,"email"),i=le(e,"phone"),n=le(e,"google_oauth"),s=le(e,"twitter_oauth"),c=le(e,"discord_oauth"),h=le(e,"github_oauth"),m={id:t.id,createdAt:ae(t.created_at),linkedAccounts:e,email:r&&{address:r==null?void 0:r.address},phone:i&&{number:i==null?void 0:i.number},wallet:o&&{address:o.address,chainType:o.chainType,chainId:o.chainId,walletType:o.walletType},google:n&&{subject:n.subject,email:n.email,name:n.name},twitter:s&&{subject:s.subject,username:s.username,name:s.name},discord:c&&{subject:c.subject,username:c.username,email:c.email},github:h&&{subject:h.subject,username:h.username,name:h.name,email:h.email}};return Ge(m)}var ko=()=>"/api/v1/sessions",_o=()=>"/api/v1/sessions/logout",Po=()=>"/api/v1/sessions/fork",So=()=>"/api/v1/siwe/init",To=()=>"/api/v1/siwe/authenticate",Io=()=>"/api/v1/siwe/link",Ro=()=>"/api/v1/passwordless/init",Mo=()=>"/api/v1/passwordless/authenticate",Wo=()=>"/api/v1/passwordless/link",No=()=>"/api/v1/passwordless_sms/init",Oo=()=>"/api/v1/passwordless_sms/authenticate",Uo=()=>"/api/v1/passwordless_sms/link",Do=()=>"/api/v1/oauth/init",Fo=()=>"/api/v1/oauth/authenticate",Go=()=>"/api/v1/oauth/link",Vo=()=>"/api/v1/siwe/unlink",Bo=()=>"/api/v1/passwordless/unlink",Ho=()=>"/api/v1/passwordless_sms/unlink",zo=()=>"/api/v1/oauth/unlink";var ki=30,it=class{constructor(){this.authenticateOnce=new se(async e=>this._authenticate(e)),this.linkOnce=new se(async e=>this._link(e)),this.refreshOnce=new se(this._refresh.bind(this)),this.destroyOnce=new se(this._destroy.bind(this)),this.forkSessionOnce=new se(this._forkSession.bind(this))}get token(){try{let e=E.get(Pe);return typeof e=="string"?new Y(e).value:null}catch(e){return console.error(e),this.destroyLocalState(),null}}get refreshToken(){try{let e=E.get(tt);return typeof e=="string"?e:null}catch(e){return console.error(e),this.destroyLocalState(),null}}hasRefreshCredentials(){return typeof this.token=="string"&&typeof this.refreshToken=="string"}hasActiveToken(){let e=Y.parse(this.token);return e!==null&&!e.isExpired(ki)}authenticate(e){return this.authenticateOnce.execute(e)}link(e){return this.linkOnce.execute(e)}refresh(){return this.refreshOnce.execute()}forkSession(){return this.forkSessionOnce.execute()}destroy(){return this.destroyOnce.execute()}async _authenticate(e){try{let{token:o,refresh_token:r,user:i,is_new_user:n}=await e.authenticate();return this.storeToken(o),this.storeRefreshToken(r),{user:Q(i),isNewUser:n}}catch(o){throw console.warn("Error authenticating session"),V(o)}}async _link(e){try{let o=await e.link();return Q(o)}catch(o){throw console.warn("Error linking account"),V(o)}}async _refresh(){if(!this.api)throw new u("Session has no API instance");if(!this.client)throw new u("Session has no PrivyClient instance");let e=await this.client.getAccessToken({disableAutoRefresh:!0}),o=this.refreshToken;if(!e||!o)return null;try{let r=await this.api.post(ko(),{refresh_token:o},{headers:{authorization:`Bearer ${this.token}`}});return this.storeToken(r.data.token),this.storeRefreshToken(r.data.refresh_token),Q(r.data.user)}catch(r){if(r instanceof ke&&r.status===400&&r.message==="Invalid auth token")return this.destroyLocalState(),null;throw V(r)}}async _destroy(){var e;try{await((e=this.api)==null?void 0:e.post(_o(),{refresh_token:this.refreshToken}))}catch{console.warn("Error destroying session")}this.destroyLocalState()}async _forkSession(){if(!this.api)throw new u("Session has no API instance");let e=this.refreshToken;try{let o=await this.api.post(Po(),{refresh_token:e});return this.storeToken(o.data.token),this.storeRefreshToken(o.data.refresh_token),o.data.new_session_refresh_token}catch(o){throw V(o)}}destroyLocalState(){this.storeToken(null),this.storeRefreshToken(null),E.del(Z)}storeToken(e){typeof e=="string"?E.put(Pe,e):E.del(Pe)}storeRefreshToken(e){typeof e=="string"?E.put(tt,e):E.del(tt)}};import{getAddress as Ri}from"@ethersproject/address";import $o from"@walletconnect/web3-provider";import{ErrorCode as _i}from"@ethersproject/logger";var Se=class extends G{constructor(){super("Wallet timeout");this.type="wallet_error"}},nt=t=>{if(t instanceof G)return t;if((t==null?void 0:t.code)&&(t==null?void 0:t.reason)){let e=new Te(t);return t.code===_i.ACTION_REJECTED&&(e.details=ge.E4001_USER_REJECTED_REQUEST),e}return t!=null&&t.code?new Te(t):new G("Unknown connector error",t)},$t=class extends H{constructor(o,r,i){super(o);this.type="provider_error";this.code=r,this.data=i}},Te=class extends $t{constructor(o){var n,s,c;let r=o;super(r.message,r.code,r.data);let i=Object.values(ge).find(h=>h.eipCode===r.code);this.details=i||ge.UNKNOWN_ERROR,r.code===-32002&&((n=r.message)!=null&&n.includes("already pending for origin")?(s=r.message)!=null&&s.includes("wallet_requestPermissions")?this.details=ge.E32002_CONNECTION_ALREADY_PENDING:this.details=ge.E32002_REQUEST_ALREADY_PENDING:(c=r.message)!=null&&c.includes("Already processing")&&r.message.includes("eth_requestAccounts")&&(this.details=ge.E32002_WALLET_LOCKED))}},Pi={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}},Si={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}},Ti={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}},ge={UNKNOWN_ERROR:{eipCode:0,message:"Unknown error",detail:"Unknown error",retryable:!0},...Ti,...Si},st={...Pi,...ge};var Ii=12e4,Zt=(t=new Se,e=Ii)=>new Promise((o,r)=>setTimeout(()=>{r(t)},e)),we=class{constructor(e){this.removeListener=(e,o)=>{if(this.walletProvider)return this.walletProvider.removeListener(e,o)};this.setProvider=e=>{this.walletProvider=e,this._subscriptions.forEach(o=>{var r;(r=this.walletProvider)==null||r.on(o.eventName,o.listener)})};this.walletProvider=e,this._subscriptions=[]}on(e,o){if(this.walletProvider)return this.walletProvider.on(e,o);this._subscriptions.push({eventName:e,listener:o})}request(e){if(!this.walletProvider)throw new G(`A wallet request of type ${e.method} was made before setting a wallet provider.`);return Promise.race([this.walletProvider.request(e),Zt()]).catch(o=>{throw nt(o)})}},ye=class extends we{constructor(o){super(o)}},at=class extends we{constructor(e){super(e)}sendAsync(e,o){throw new Error("sendAsync is no longer supported by EIP-1193. Use the request method instead.")}};import{Web3Provider as Mi}from"@ethersproject/providers";var jo=["metamask","coinbase_wallet","wallet_connect"];import Wi from"@coinbase/wallet-sdk";var Ni=()=>{let t=`https://mainnet.infura.io/v3/${et}`,e=1;return new Wi({appName:"Privy",darkMode:!1,headlessMode:!1}).makeWeb3Provider(t,e)},Kt=()=>{if(!window.ethereum)return!1;if(window.ethereum.isMetaMask)return!0;if(window.ethereum.providers){for(let t of window.ethereum.providers)if(t.isMetaMask)return!0}return!1},lt=()=>{if(!window.ethereum)return!1;if(window.ethereum.isCoinbaseWallet)return!0;if(window.ethereum.providers){for(let t of window.ethereum.providers)if(t.isCoinbaseWallet)return!0}return!1},Ve=class{constructor(){this.walletType=null;this.getEthereumProvider=()=>this.ethProvider;this.createSiweMessage=(e,o,r,i,n,s,c)=>`${r} wants you to sign in with your Ethereum account:
|
|
1
|
+
import{useEffect as Ut,useState as ne}from"react";import Ht from"axios";import vi from"axios";var H=class extends Error{constructor(o,r){super(o);r instanceof Error&&(this.cause=r)}toString(){return`${this.type}: ${this.message}${this.cause?` [cause: ${this.cause}]`:""}`}},ke=class extends H{constructor(o,r,i,n){super(i,n);this.type=o;this.status=r}},u=class extends H{constructor(o,r){super(o,r);this.type="client_error"}};var G=class extends H{constructor(o,r){super(o,r);this.type="connector_error"}},T=t=>{if(t instanceof H)return t;if(!vi.isAxiosError(t))return V(t);if(!t.response)return new ke("api_error",null,t.message,t);let{type:e,message:o,error:r}=t.response.data;return new ke(e||"ApiError",t.response.status,o||r,t)},V=t=>t instanceof H?t:t instanceof Error?new u(t.message,t):new u(`Internal error: ${t}`);var bo="1.13.0-beta.3";var vo="https://api.privy.io/v0",xo=process.env.NEXT_PUBLIC_PRIVY_AUTH_URL||"https://auth.privy.io",et="4df5e2316331463a9130964bd6078dfa",Lo=1e4,_e=1400,Bt=bo;var Pe="privy:token",tt="privy:refresh_token",Z="privy:active_wallet",ot="privy:wallet_type",Ao="walletconnect";var rt=class{constructor(e,o,r){this.appId=e,this.sdkVersion=Bt,this.client=o,this.defaults=r}async get(e,o){try{return await Ht.get(e,await this.buildConfig({headers:{"Cache-Control":"no-cache"},...o}))}catch(r){throw T(r)}}async post(e,o,r){try{return await Ht.post(e,o,await this.buildConfig(r))}catch(i){throw T(i)}}async delete(e,o){try{return await Ht.delete(e,await this.buildConfig(o))}catch(r){throw T(r)}}async buildConfig(e){if(e=e||{},e.headers=e.headers||{},e.headers["privy-app-id"]=this.appId,e.headers["privy-client"]=`react-auth:${this.sdkVersion}`,!e.headers.authorization){let o=await this.client.getAccessToken();o!==null&&(e.headers.authorization=`Bearer ${o}`)}return{...this.defaults,...e}}};import*as Eo from"jose";var Y=class{static parse(e){try{return new Y(e)}catch{return null}}constructor(e){this.value=e,this._decoded=Eo.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){let o=Date.now(),r=(this.expiration-e)*1e3;return o>=r}};var se=class{constructor(e){this.promise=null;this.fn=e}execute(e){return this.promise===null&&(this.promise=(async()=>{try{return await this.fn(e)}finally{this.promise=null}})()),this.promise}};var zt=class{constructor(){this._cache={}}get(e){return this._cache[e]}put(e,o){o!==void 0?this._cache[e]=o:this.del(e)}del(e){delete this._cache[e]}},jt=class{get(e){let o=localStorage.getItem(e);return o===null?void 0:JSON.parse(o)}put(e,o){o!==void 0?localStorage.setItem(e,JSON.stringify(o)):this.del(e)}del(e){localStorage.removeItem(e)}};function Li(){return typeof window<"u"&&window.localStorage?new jt:new zt}var E=Li();function ae(t){return new Date(t*1e3)}function Ai(t){return t.map(e=>{switch(e.type){case"wallet":return{address:e.address,type:e.type,verifiedAt:ae(e.verified_at),chainType:e.chain_type};case"email":return{address:e.address,type:e.type,verifiedAt:ae(e.verified_at)};case"phone":return{number:e.phoneNumber,type:e.type,verifiedAt:ae(e.verified_at)};case"google_oauth":return{subject:e.subject,email:e.email,name:e.name,type:e.type,verifiedAt:ae(e.verified_at)};case"twitter_oauth":return{subject:e.subject,username:e.username,name:e.name,type:e.type,verifiedAt:ae(e.verified_at)};case"discord_oauth":return{subject:e.subject,username:e.username,email:e.email,type:e.type,verifiedAt:ae(e.verified_at)};case"github_oauth":return{subject:e.subject,username:e.username,name:e.name,email:e.email,type:e.type,verifiedAt:ae(e.verified_at)};default:throw new u("Unrecognized account type")}})}function Ei(t,e){return e.find(o=>o.type==="wallet"&&o.address===t)}function le(t,e){return t.sort((o,r)=>r.verifiedAt.getTime()-o.verifiedAt.getTime()),t.find(o=>o.type===e)}function Ge(t){let e=t.linkedAccounts.map(s=>s.type==="wallet"?s.address:null),r=E.get(Z);if(!r||!e.includes(r)){E.del(Z);let s=le(t.linkedAccounts,"wallet");s&&(r=s.address,E.put(Z,r))}let i=Ei(r,t.linkedAccounts),n=Object.assign({},t);return n.wallet=i&&{address:i.address,chainType:i.chainType,chainId:i.chainId,walletType:i.walletType},n}function Q(t){if(!t)return null;let e=Ai(t.linked_accounts),o=le(e,"wallet"),r=le(e,"email"),i=le(e,"phone"),n=le(e,"google_oauth"),s=le(e,"twitter_oauth"),c=le(e,"discord_oauth"),h=le(e,"github_oauth"),m={id:t.id,createdAt:ae(t.created_at),linkedAccounts:e,email:r&&{address:r==null?void 0:r.address},phone:i&&{number:i==null?void 0:i.number},wallet:o&&{address:o.address,chainType:o.chainType,chainId:o.chainId,walletType:o.walletType},google:n&&{subject:n.subject,email:n.email,name:n.name},twitter:s&&{subject:s.subject,username:s.username,name:s.name},discord:c&&{subject:c.subject,username:c.username,email:c.email},github:h&&{subject:h.subject,username:h.username,name:h.name,email:h.email}};return Ge(m)}var ko=()=>"/api/v1/sessions",_o=()=>"/api/v1/sessions/logout",Po=()=>"/api/v1/sessions/fork",So=()=>"/api/v1/siwe/init",To=()=>"/api/v1/siwe/authenticate",Io=()=>"/api/v1/siwe/link",Ro=()=>"/api/v1/passwordless/init",Mo=()=>"/api/v1/passwordless/authenticate",Wo=()=>"/api/v1/passwordless/link",No=()=>"/api/v1/passwordless_sms/init",Oo=()=>"/api/v1/passwordless_sms/authenticate",Uo=()=>"/api/v1/passwordless_sms/link",Do=()=>"/api/v1/oauth/init",Fo=()=>"/api/v1/oauth/authenticate",Go=()=>"/api/v1/oauth/link",Vo=()=>"/api/v1/siwe/unlink",Bo=()=>"/api/v1/passwordless/unlink",Ho=()=>"/api/v1/passwordless_sms/unlink",zo=()=>"/api/v1/oauth/unlink";var ki=30,it=class{constructor(){this.authenticateOnce=new se(async e=>this._authenticate(e)),this.linkOnce=new se(async e=>this._link(e)),this.refreshOnce=new se(this._refresh.bind(this)),this.destroyOnce=new se(this._destroy.bind(this)),this.forkSessionOnce=new se(this._forkSession.bind(this))}get token(){try{let e=E.get(Pe);return typeof e=="string"?new Y(e).value:null}catch(e){return console.error(e),this.destroyLocalState(),null}}get refreshToken(){try{let e=E.get(tt);return typeof e=="string"?e:null}catch(e){return console.error(e),this.destroyLocalState(),null}}hasRefreshCredentials(){return typeof this.token=="string"&&typeof this.refreshToken=="string"}hasActiveToken(){let e=Y.parse(this.token);return e!==null&&!e.isExpired(ki)}authenticate(e){return this.authenticateOnce.execute(e)}link(e){return this.linkOnce.execute(e)}refresh(){return this.refreshOnce.execute()}forkSession(){return this.forkSessionOnce.execute()}destroy(){return this.destroyOnce.execute()}async _authenticate(e){try{let{token:o,refresh_token:r,user:i,is_new_user:n}=await e.authenticate();return this.storeToken(o),this.storeRefreshToken(r),{user:Q(i),isNewUser:n}}catch(o){throw console.warn("Error authenticating session"),V(o)}}async _link(e){try{let o=await e.link();return Q(o)}catch(o){throw console.warn("Error linking account"),V(o)}}async _refresh(){if(!this.api)throw new u("Session has no API instance");if(!this.client)throw new u("Session has no PrivyClient instance");let e=await this.client.getAccessToken({disableAutoRefresh:!0}),o=this.refreshToken;if(!e||!o)return null;try{let r=await this.api.post(ko(),{refresh_token:o},{headers:{authorization:`Bearer ${this.token}`}});return this.storeToken(r.data.token),this.storeRefreshToken(r.data.refresh_token),Q(r.data.user)}catch(r){if(r instanceof ke&&r.status===400&&r.message==="Invalid auth token")return this.destroyLocalState(),null;throw V(r)}}async _destroy(){var e;try{await((e=this.api)==null?void 0:e.post(_o(),{refresh_token:this.refreshToken}))}catch{console.warn("Error destroying session")}this.destroyLocalState()}async _forkSession(){if(!this.api)throw new u("Session has no API instance");let e=this.refreshToken;try{let o=await this.api.post(Po(),{refresh_token:e});return this.storeToken(o.data.token),this.storeRefreshToken(o.data.refresh_token),o.data.new_session_refresh_token}catch(o){throw V(o)}}destroyLocalState(){this.storeToken(null),this.storeRefreshToken(null),E.del(Z)}storeToken(e){typeof e=="string"?E.put(Pe,e):E.del(Pe)}storeRefreshToken(e){typeof e=="string"?E.put(tt,e):E.del(tt)}};import{getAddress as Ri}from"@ethersproject/address";import $o from"@walletconnect/web3-provider";import{ErrorCode as _i}from"@ethersproject/logger";var Se=class extends G{constructor(){super("Wallet timeout");this.type="wallet_error"}},nt=t=>{if(t instanceof G)return t;if((t==null?void 0:t.code)&&(t==null?void 0:t.reason)){let e=new Te(t);return t.code===_i.ACTION_REJECTED&&(e.details=ge.E4001_USER_REJECTED_REQUEST),e}return t!=null&&t.code?new Te(t):new G("Unknown connector error",t)},$t=class extends H{constructor(o,r,i){super(o);this.type="provider_error";this.code=r,this.data=i}},Te=class extends $t{constructor(o){var n,s,c;let r=o;super(r.message,r.code,r.data);let i=Object.values(ge).find(h=>h.eipCode===r.code);this.details=i||ge.UNKNOWN_ERROR,r.code===-32002&&((n=r.message)!=null&&n.includes("already pending for origin")?(s=r.message)!=null&&s.includes("wallet_requestPermissions")?this.details=ge.E32002_CONNECTION_ALREADY_PENDING:this.details=ge.E32002_REQUEST_ALREADY_PENDING:(c=r.message)!=null&&c.includes("Already processing")&&r.message.includes("eth_requestAccounts")&&(this.details=ge.E32002_WALLET_LOCKED))}},Pi={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}},Si={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}},Ti={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}},ge={UNKNOWN_ERROR:{eipCode:0,message:"Unknown error",detail:"Unknown error",retryable:!0},...Ti,...Si},st={...Pi,...ge};var Ii=12e4,Zt=(t=new Se,e=Ii)=>new Promise((o,r)=>setTimeout(()=>{r(t)},e)),we=class{constructor(e){this.removeListener=(e,o)=>{if(this.walletProvider)return this.walletProvider.removeListener(e,o)};this.setProvider=e=>{this.walletProvider=e,this._subscriptions.forEach(o=>{var r;(r=this.walletProvider)==null||r.on(o.eventName,o.listener)})};this.walletProvider=e,this._subscriptions=[]}on(e,o){if(this.walletProvider)return this.walletProvider.on(e,o);this._subscriptions.push({eventName:e,listener:o})}request(e){if(!this.walletProvider)throw new G(`A wallet request of type ${e.method} was made before setting a wallet provider.`);return Promise.race([this.walletProvider.request(e),Zt()]).catch(o=>{throw nt(o)})}},ye=class extends we{constructor(o){super(o)}},at=class extends we{constructor(e){super(e)}sendAsync(e,o){throw new Error("sendAsync is no longer supported by EIP-1193. Use the request method instead.")}};import{Web3Provider as Mi}from"@ethersproject/providers";var jo=["metamask","coinbase_wallet","wallet_connect"];import Wi from"@coinbase/wallet-sdk";var Ni=()=>{let t=`https://mainnet.infura.io/v3/${et}`,e=1;return new Wi({appName:"Privy",darkMode:!1,headlessMode:!1}).makeWeb3Provider(t,e)},Kt=()=>{if(!window.ethereum)return!1;if(window.ethereum.isMetaMask)return!0;if(window.ethereum.providers){for(let t of window.ethereum.providers)if(t.isMetaMask)return!0}return!1},lt=()=>{if(!window.ethereum)return!1;if(window.ethereum.isCoinbaseWallet)return!0;if(window.ethereum.providers){for(let t of window.ethereum.providers)if(t.isCoinbaseWallet)return!0}return!1},Ve=class{constructor(){this.walletType=null;this.getEthereumProvider=()=>this.ethProvider;this.createSiweMessage=(e,o,r,i,n,s,c)=>`${r} wants you to sign in with your Ethereum account:
|
|
2
2
|
${o}
|
|
3
3
|
|
|
4
4
|
${c}
|
|
@@ -791,7 +791,7 @@ Resources:
|
|
|
791
791
|
font-weight: 500;
|
|
792
792
|
text-align: center;
|
|
793
793
|
color: var(--primary-color);
|
|
794
|
-
background-color: rgba(var(--primary-color-rgb), 0.
|
|
794
|
+
background-color: rgba(var(--primary-color-rgb), 0.2);
|
|
795
795
|
border-radius: var(--border-radius-sm);
|
|
796
796
|
min-width: 144px;
|
|
797
797
|
opacity: ${t=>t.visible?"1":"0"};
|
package/dist/index.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
"use strict";var _i=Object.create;var ut=Object.defineProperty;var Pi=Object.getOwnPropertyDescriptor;var Si=Object.getOwnPropertyNames;var Ti=Object.getPrototypeOf,Ii=Object.prototype.hasOwnProperty;var Ri=(t,e)=>{for(var o in e)ut(t,o,{get:e[o],enumerable:!0})},Ro=(t,e,o,r)=>{if(e&&typeof e=="object"||typeof e=="function")for(let i of Si(e))!Ii.call(t,i)&&i!==o&&ut(t,i,{get:()=>e[i],enumerable:!(r=Pi(e,i))||r.enumerable});return t};var v=(t,e,o)=>(o=t!=null?_i(Ti(t)):{},Ro(e||!t||!t.__esModule?ut(o,"default",{value:t,enumerable:!0}):o,t)),Mi=t=>Ro(ut({},"__esModule",{value:!0}),t);var as={};Ri(as,{AsExternalProvider:()=>Le,PrivyClient:()=>je,PrivyConnector:()=>ze,PrivyProvider:()=>Ei,PrivyProxyProvider:()=>xe,VERSION:()=>ht,getAccessToken:()=>Ai,usePrivy:()=>U});module.exports=Mi(as);var j=require("react");var gt=v(require("axios"));var Mo=v(require("axios")),X=class extends Error{constructor(o,r){super(o);r instanceof Error&&(this.cause=r)}toString(){return`${this.type}: ${this.message}${this.cause?` [cause: ${this.cause}]`:""}`}},Fe=class extends X{constructor(o,r,i,n){super(i,n);this.type=o;this.status=r}},p=class extends X{constructor(o,r){super(o,r);this.type="client_error"}};var K=class extends X{constructor(o,r){super(o,r);this.type="connector_error"}},N=t=>{if(t instanceof X)return t;if(!Mo.default.isAxiosError(t))return q(t);if(!t.response)return new Fe("api_error",null,t.message,t);let{type:e,message:o,error:r}=t.response.data;return new Fe(e||"ApiError",t.response.status,o||r,t)},q=t=>t instanceof X?t:t instanceof Error?new p(t.message,t):new p(`Internal error: ${t}`);var Wo="1.13.0-beta.2";var No="https://api.privy.io/v0",Oo=process.env.NEXT_PUBLIC_PRIVY_AUTH_URL||"https://auth.privy.io",pt="4df5e2316331463a9130964bd6078dfa",Uo=1e4,Ge=1400,ht=Wo;var Ve="privy:token",mt="privy:refresh_token",se="privy:active_wallet",ft="privy:wallet_type",Do="walletconnect";var wt=class{constructor(e,o,r){this.appId=e,this.sdkVersion=ht,this.client=o,this.defaults=r}async get(e,o){try{return await gt.default.get(e,await this.buildConfig({headers:{"Cache-Control":"no-cache"},...o}))}catch(r){throw N(r)}}async post(e,o,r){try{return await gt.default.post(e,o,await this.buildConfig(r))}catch(i){throw N(i)}}async delete(e,o){try{return await gt.default.delete(e,await this.buildConfig(o))}catch(r){throw N(r)}}async buildConfig(e){if(e=e||{},e.headers=e.headers||{},e.headers["privy-app-id"]=this.appId,e.headers["privy-client"]=`react-auth:${this.sdkVersion}`,!e.headers.authorization){let o=await this.client.getAccessToken();o!==null&&(e.headers.authorization=`Bearer ${o}`)}return{...this.defaults,...e}}};var Fo=v(require("jose")),he=class{static parse(e){try{return new he(e)}catch{return null}}constructor(e){this.value=e,this._decoded=Fo.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){let o=Date.now(),r=(this.expiration-e)*1e3;return o>=r}};var Ce=class{constructor(e){this.promise=null;this.fn=e}execute(e){return this.promise===null&&(this.promise=(async()=>{try{return await this.fn(e)}finally{this.promise=null}})()),this.promise}};var Jt=class{constructor(){this._cache={}}get(e){return this._cache[e]}put(e,o){o!==void 0?this._cache[e]=o:this.del(e)}del(e){delete this._cache[e]}},Yt=class{get(e){let o=localStorage.getItem(e);return o===null?void 0:JSON.parse(o)}put(e,o){o!==void 0?localStorage.setItem(e,JSON.stringify(o)):this.del(e)}del(e){localStorage.removeItem(e)}};function Ni(){return typeof window<"u"&&window.localStorage?new Yt:new Jt}var S=Ni();function be(t){return new Date(t*1e3)}function Oi(t){return t.map(e=>{switch(e.type){case"wallet":return{address:e.address,type:e.type,verifiedAt:be(e.verified_at),chainType:e.chain_type};case"email":return{address:e.address,type:e.type,verifiedAt:be(e.verified_at)};case"phone":return{number:e.phoneNumber,type:e.type,verifiedAt:be(e.verified_at)};case"google_oauth":return{subject:e.subject,email:e.email,name:e.name,type:e.type,verifiedAt:be(e.verified_at)};case"twitter_oauth":return{subject:e.subject,username:e.username,name:e.name,type:e.type,verifiedAt:be(e.verified_at)};case"discord_oauth":return{subject:e.subject,username:e.username,email:e.email,type:e.type,verifiedAt:be(e.verified_at)};case"github_oauth":return{subject:e.subject,username:e.username,name:e.name,email:e.email,type:e.type,verifiedAt:be(e.verified_at)};default:throw new p("Unrecognized account type")}})}function Ui(t,e){return e.find(o=>o.type==="wallet"&&o.address===t)}function ve(t,e){return t.sort((o,r)=>r.verifiedAt.getTime()-o.verifiedAt.getTime()),t.find(o=>o.type===e)}function Xe(t){let e=t.linkedAccounts.map(s=>s.type==="wallet"?s.address:null),r=S.get(se);if(!r||!e.includes(r)){S.del(se);let s=ve(t.linkedAccounts,"wallet");s&&(r=s.address,S.put(se,r))}let i=Ui(r,t.linkedAccounts),n=Object.assign({},t);return n.wallet=i&&{address:i.address,chainType:i.chainType,chainId:i.chainId,walletType:i.walletType},n}function me(t){if(!t)return null;let e=Oi(t.linked_accounts),o=ve(e,"wallet"),r=ve(e,"email"),i=ve(e,"phone"),n=ve(e,"google_oauth"),s=ve(e,"twitter_oauth"),u=ve(e,"discord_oauth"),m=ve(e,"github_oauth"),f={id:t.id,createdAt:be(t.created_at),linkedAccounts:e,email:r&&{address:r==null?void 0:r.address},phone:i&&{number:i==null?void 0:i.number},wallet:o&&{address:o.address,chainType:o.chainType,chainId:o.chainId,walletType:o.walletType},google:n&&{subject:n.subject,email:n.email,name:n.name},twitter:s&&{subject:s.subject,username:s.username,name:s.name},discord:u&&{subject:u.subject,username:u.username,email:u.email},github:m&&{subject:m.subject,username:m.username,name:m.name,email:m.email}};return Xe(f)}var Go=()=>"/api/v1/sessions",Vo=()=>"/api/v1/sessions/logout",Bo=()=>"/api/v1/sessions/fork",Ho=()=>"/api/v1/siwe/init",zo=()=>"/api/v1/siwe/authenticate",jo=()=>"/api/v1/siwe/link",$o=()=>"/api/v1/passwordless/init",Zo=()=>"/api/v1/passwordless/authenticate",Ko=()=>"/api/v1/passwordless/link",qo=()=>"/api/v1/passwordless_sms/init",Jo=()=>"/api/v1/passwordless_sms/authenticate",Yo=()=>"/api/v1/passwordless_sms/link",Qo=()=>"/api/v1/oauth/init",Xo=()=>"/api/v1/oauth/authenticate",er=()=>"/api/v1/oauth/link",tr=()=>"/api/v1/siwe/unlink",or=()=>"/api/v1/passwordless/unlink",rr=()=>"/api/v1/passwordless_sms/unlink",ir=()=>"/api/v1/oauth/unlink";var Di=30,yt=class{constructor(){this.authenticateOnce=new Ce(async e=>this._authenticate(e)),this.linkOnce=new Ce(async e=>this._link(e)),this.refreshOnce=new Ce(this._refresh.bind(this)),this.destroyOnce=new Ce(this._destroy.bind(this)),this.forkSessionOnce=new Ce(this._forkSession.bind(this))}get token(){try{let e=S.get(Ve);return typeof e=="string"?new he(e).value:null}catch(e){return console.error(e),this.destroyLocalState(),null}}get refreshToken(){try{let e=S.get(mt);return typeof e=="string"?e:null}catch(e){return console.error(e),this.destroyLocalState(),null}}hasRefreshCredentials(){return typeof this.token=="string"&&typeof this.refreshToken=="string"}hasActiveToken(){let e=he.parse(this.token);return e!==null&&!e.isExpired(Di)}authenticate(e){return this.authenticateOnce.execute(e)}link(e){return this.linkOnce.execute(e)}refresh(){return this.refreshOnce.execute()}forkSession(){return this.forkSessionOnce.execute()}destroy(){return this.destroyOnce.execute()}async _authenticate(e){try{let{token:o,refresh_token:r,user:i,is_new_user:n}=await e.authenticate();return this.storeToken(o),this.storeRefreshToken(r),{user:me(i),isNewUser:n}}catch(o){throw console.warn("Error authenticating session"),q(o)}}async _link(e){try{let o=await e.link();return me(o)}catch(o){throw console.warn("Error linking account"),q(o)}}async _refresh(){if(!this.api)throw new p("Session has no API instance");if(!this.client)throw new p("Session has no PrivyClient instance");let e=await this.client.getAccessToken({disableAutoRefresh:!0}),o=this.refreshToken;if(!e||!o)return null;try{let r=await this.api.post(Go(),{refresh_token:o},{headers:{authorization:`Bearer ${this.token}`}});return this.storeToken(r.data.token),this.storeRefreshToken(r.data.refresh_token),me(r.data.user)}catch(r){if(r instanceof Fe&&r.status===400&&r.message==="Invalid auth token")return this.destroyLocalState(),null;throw q(r)}}async _destroy(){var e;try{await((e=this.api)==null?void 0:e.post(Vo(),{refresh_token:this.refreshToken}))}catch{console.warn("Error destroying session")}this.destroyLocalState()}async _forkSession(){if(!this.api)throw new p("Session has no API instance");let e=this.refreshToken;try{let o=await this.api.post(Bo(),{refresh_token:e});return this.storeToken(o.data.token),this.storeRefreshToken(o.data.refresh_token),o.data.new_session_refresh_token}catch(o){throw q(o)}}destroyLocalState(){this.storeToken(null),this.storeRefreshToken(null),S.del(se)}storeToken(e){typeof e=="string"?S.put(Ve,e):S.del(Ve)}storeRefreshToken(e){typeof e=="string"?S.put(mt,e):S.del(mt)}};var ar=require("@ethersproject/address"),eo=v(require("@walletconnect/web3-provider"));var nr=require("@ethersproject/logger");var Be=class extends K{constructor(){super("Wallet timeout");this.type="wallet_error"}},Ct=t=>{if(t instanceof K)return t;if((t==null?void 0:t.code)&&(t==null?void 0:t.reason)){let e=new He(t);return t.code===nr.ErrorCode.ACTION_REJECTED&&(e.details=Me.E4001_USER_REJECTED_REQUEST),e}return t!=null&&t.code?new He(t):new K("Unknown connector error",t)},Qt=class extends X{constructor(o,r,i){super(o);this.type="provider_error";this.code=r,this.data=i}},He=class extends Qt{constructor(o){var n,s,u;let r=o;super(r.message,r.code,r.data);let i=Object.values(Me).find(m=>m.eipCode===r.code);this.details=i||Me.UNKNOWN_ERROR,r.code===-32002&&((n=r.message)!=null&&n.includes("already pending for origin")?(s=r.message)!=null&&s.includes("wallet_requestPermissions")?this.details=Me.E32002_CONNECTION_ALREADY_PENDING:this.details=Me.E32002_REQUEST_ALREADY_PENDING:(u=r.message)!=null&&u.includes("Already processing")&&r.message.includes("eth_requestAccounts")&&(this.details=Me.E32002_WALLET_LOCKED))}},Fi={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}},Gi={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}},Vi={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}},Me={UNKNOWN_ERROR:{eipCode:0,message:"Unknown error",detail:"Unknown error",retryable:!0},...Vi,...Gi},bt={...Fi,...Me};var Bi=12e4,Xt=(t=new Be,e=Bi)=>new Promise((o,r)=>setTimeout(()=>{r(t)},e)),xe=class{constructor(e){this.removeListener=(e,o)=>{if(this.walletProvider)return this.walletProvider.removeListener(e,o)};this.setProvider=e=>{this.walletProvider=e,this._subscriptions.forEach(o=>{var r;(r=this.walletProvider)==null||r.on(o.eventName,o.listener)})};this.walletProvider=e,this._subscriptions=[]}on(e,o){if(this.walletProvider)return this.walletProvider.on(e,o);this._subscriptions.push({eventName:e,listener:o})}request(e){if(!this.walletProvider)throw new K(`A wallet request of type ${e.method} was made before setting a wallet provider.`);return Promise.race([this.walletProvider.request(e),Xt()]).catch(o=>{throw Ct(o)})}},Le=class extends xe{constructor(o){super(o)}},vt=class extends xe{constructor(e){super(e)}sendAsync(e,o){throw new Error("sendAsync is no longer supported by EIP-1193. Use the request method instead.")}};var lr=require("@ethersproject/providers");var sr=["metamask","coinbase_wallet","wallet_connect"];var dr=v(require("@coinbase/wallet-sdk")),Hi=()=>{let t=`https://mainnet.infura.io/v3/${pt}`,e=1;return new dr.default({appName:"Privy",darkMode:!1,headlessMode:!1}).makeWeb3Provider(t,e)},to=()=>{if(!window.ethereum)return!1;if(window.ethereum.isMetaMask)return!0;if(window.ethereum.providers){for(let t of window.ethereum.providers)if(t.isMetaMask)return!0}return!1},xt=()=>{if(!window.ethereum)return!1;if(window.ethereum.isCoinbaseWallet)return!0;if(window.ethereum.providers){for(let t of window.ethereum.providers)if(t.isCoinbaseWallet)return!0}return!1},ze=class{constructor(){this.walletType=null;this.getEthereumProvider=()=>this.ethProvider;this.createSiweMessage=(e,o,r,i,n,s,u)=>`${r} wants you to sign in with your Ethereum account:
|
|
1
|
+
"use strict";var _i=Object.create;var ut=Object.defineProperty;var Pi=Object.getOwnPropertyDescriptor;var Si=Object.getOwnPropertyNames;var Ti=Object.getPrototypeOf,Ii=Object.prototype.hasOwnProperty;var Ri=(t,e)=>{for(var o in e)ut(t,o,{get:e[o],enumerable:!0})},Ro=(t,e,o,r)=>{if(e&&typeof e=="object"||typeof e=="function")for(let i of Si(e))!Ii.call(t,i)&&i!==o&&ut(t,i,{get:()=>e[i],enumerable:!(r=Pi(e,i))||r.enumerable});return t};var v=(t,e,o)=>(o=t!=null?_i(Ti(t)):{},Ro(e||!t||!t.__esModule?ut(o,"default",{value:t,enumerable:!0}):o,t)),Mi=t=>Ro(ut({},"__esModule",{value:!0}),t);var as={};Ri(as,{AsExternalProvider:()=>Le,PrivyClient:()=>je,PrivyConnector:()=>ze,PrivyProvider:()=>Ei,PrivyProxyProvider:()=>xe,VERSION:()=>ht,getAccessToken:()=>Ai,usePrivy:()=>U});module.exports=Mi(as);var j=require("react");var gt=v(require("axios"));var Mo=v(require("axios")),X=class extends Error{constructor(o,r){super(o);r instanceof Error&&(this.cause=r)}toString(){return`${this.type}: ${this.message}${this.cause?` [cause: ${this.cause}]`:""}`}},Fe=class extends X{constructor(o,r,i,n){super(i,n);this.type=o;this.status=r}},p=class extends X{constructor(o,r){super(o,r);this.type="client_error"}};var K=class extends X{constructor(o,r){super(o,r);this.type="connector_error"}},N=t=>{if(t instanceof X)return t;if(!Mo.default.isAxiosError(t))return q(t);if(!t.response)return new Fe("api_error",null,t.message,t);let{type:e,message:o,error:r}=t.response.data;return new Fe(e||"ApiError",t.response.status,o||r,t)},q=t=>t instanceof X?t:t instanceof Error?new p(t.message,t):new p(`Internal error: ${t}`);var Wo="1.13.0-beta.3";var No="https://api.privy.io/v0",Oo=process.env.NEXT_PUBLIC_PRIVY_AUTH_URL||"https://auth.privy.io",pt="4df5e2316331463a9130964bd6078dfa",Uo=1e4,Ge=1400,ht=Wo;var Ve="privy:token",mt="privy:refresh_token",se="privy:active_wallet",ft="privy:wallet_type",Do="walletconnect";var wt=class{constructor(e,o,r){this.appId=e,this.sdkVersion=ht,this.client=o,this.defaults=r}async get(e,o){try{return await gt.default.get(e,await this.buildConfig({headers:{"Cache-Control":"no-cache"},...o}))}catch(r){throw N(r)}}async post(e,o,r){try{return await gt.default.post(e,o,await this.buildConfig(r))}catch(i){throw N(i)}}async delete(e,o){try{return await gt.default.delete(e,await this.buildConfig(o))}catch(r){throw N(r)}}async buildConfig(e){if(e=e||{},e.headers=e.headers||{},e.headers["privy-app-id"]=this.appId,e.headers["privy-client"]=`react-auth:${this.sdkVersion}`,!e.headers.authorization){let o=await this.client.getAccessToken();o!==null&&(e.headers.authorization=`Bearer ${o}`)}return{...this.defaults,...e}}};var Fo=v(require("jose")),he=class{static parse(e){try{return new he(e)}catch{return null}}constructor(e){this.value=e,this._decoded=Fo.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){let o=Date.now(),r=(this.expiration-e)*1e3;return o>=r}};var Ce=class{constructor(e){this.promise=null;this.fn=e}execute(e){return this.promise===null&&(this.promise=(async()=>{try{return await this.fn(e)}finally{this.promise=null}})()),this.promise}};var Jt=class{constructor(){this._cache={}}get(e){return this._cache[e]}put(e,o){o!==void 0?this._cache[e]=o:this.del(e)}del(e){delete this._cache[e]}},Yt=class{get(e){let o=localStorage.getItem(e);return o===null?void 0:JSON.parse(o)}put(e,o){o!==void 0?localStorage.setItem(e,JSON.stringify(o)):this.del(e)}del(e){localStorage.removeItem(e)}};function Ni(){return typeof window<"u"&&window.localStorage?new Yt:new Jt}var S=Ni();function be(t){return new Date(t*1e3)}function Oi(t){return t.map(e=>{switch(e.type){case"wallet":return{address:e.address,type:e.type,verifiedAt:be(e.verified_at),chainType:e.chain_type};case"email":return{address:e.address,type:e.type,verifiedAt:be(e.verified_at)};case"phone":return{number:e.phoneNumber,type:e.type,verifiedAt:be(e.verified_at)};case"google_oauth":return{subject:e.subject,email:e.email,name:e.name,type:e.type,verifiedAt:be(e.verified_at)};case"twitter_oauth":return{subject:e.subject,username:e.username,name:e.name,type:e.type,verifiedAt:be(e.verified_at)};case"discord_oauth":return{subject:e.subject,username:e.username,email:e.email,type:e.type,verifiedAt:be(e.verified_at)};case"github_oauth":return{subject:e.subject,username:e.username,name:e.name,email:e.email,type:e.type,verifiedAt:be(e.verified_at)};default:throw new p("Unrecognized account type")}})}function Ui(t,e){return e.find(o=>o.type==="wallet"&&o.address===t)}function ve(t,e){return t.sort((o,r)=>r.verifiedAt.getTime()-o.verifiedAt.getTime()),t.find(o=>o.type===e)}function Xe(t){let e=t.linkedAccounts.map(s=>s.type==="wallet"?s.address:null),r=S.get(se);if(!r||!e.includes(r)){S.del(se);let s=ve(t.linkedAccounts,"wallet");s&&(r=s.address,S.put(se,r))}let i=Ui(r,t.linkedAccounts),n=Object.assign({},t);return n.wallet=i&&{address:i.address,chainType:i.chainType,chainId:i.chainId,walletType:i.walletType},n}function me(t){if(!t)return null;let e=Oi(t.linked_accounts),o=ve(e,"wallet"),r=ve(e,"email"),i=ve(e,"phone"),n=ve(e,"google_oauth"),s=ve(e,"twitter_oauth"),u=ve(e,"discord_oauth"),m=ve(e,"github_oauth"),f={id:t.id,createdAt:be(t.created_at),linkedAccounts:e,email:r&&{address:r==null?void 0:r.address},phone:i&&{number:i==null?void 0:i.number},wallet:o&&{address:o.address,chainType:o.chainType,chainId:o.chainId,walletType:o.walletType},google:n&&{subject:n.subject,email:n.email,name:n.name},twitter:s&&{subject:s.subject,username:s.username,name:s.name},discord:u&&{subject:u.subject,username:u.username,email:u.email},github:m&&{subject:m.subject,username:m.username,name:m.name,email:m.email}};return Xe(f)}var Go=()=>"/api/v1/sessions",Vo=()=>"/api/v1/sessions/logout",Bo=()=>"/api/v1/sessions/fork",Ho=()=>"/api/v1/siwe/init",zo=()=>"/api/v1/siwe/authenticate",jo=()=>"/api/v1/siwe/link",$o=()=>"/api/v1/passwordless/init",Zo=()=>"/api/v1/passwordless/authenticate",Ko=()=>"/api/v1/passwordless/link",qo=()=>"/api/v1/passwordless_sms/init",Jo=()=>"/api/v1/passwordless_sms/authenticate",Yo=()=>"/api/v1/passwordless_sms/link",Qo=()=>"/api/v1/oauth/init",Xo=()=>"/api/v1/oauth/authenticate",er=()=>"/api/v1/oauth/link",tr=()=>"/api/v1/siwe/unlink",or=()=>"/api/v1/passwordless/unlink",rr=()=>"/api/v1/passwordless_sms/unlink",ir=()=>"/api/v1/oauth/unlink";var Di=30,yt=class{constructor(){this.authenticateOnce=new Ce(async e=>this._authenticate(e)),this.linkOnce=new Ce(async e=>this._link(e)),this.refreshOnce=new Ce(this._refresh.bind(this)),this.destroyOnce=new Ce(this._destroy.bind(this)),this.forkSessionOnce=new Ce(this._forkSession.bind(this))}get token(){try{let e=S.get(Ve);return typeof e=="string"?new he(e).value:null}catch(e){return console.error(e),this.destroyLocalState(),null}}get refreshToken(){try{let e=S.get(mt);return typeof e=="string"?e:null}catch(e){return console.error(e),this.destroyLocalState(),null}}hasRefreshCredentials(){return typeof this.token=="string"&&typeof this.refreshToken=="string"}hasActiveToken(){let e=he.parse(this.token);return e!==null&&!e.isExpired(Di)}authenticate(e){return this.authenticateOnce.execute(e)}link(e){return this.linkOnce.execute(e)}refresh(){return this.refreshOnce.execute()}forkSession(){return this.forkSessionOnce.execute()}destroy(){return this.destroyOnce.execute()}async _authenticate(e){try{let{token:o,refresh_token:r,user:i,is_new_user:n}=await e.authenticate();return this.storeToken(o),this.storeRefreshToken(r),{user:me(i),isNewUser:n}}catch(o){throw console.warn("Error authenticating session"),q(o)}}async _link(e){try{let o=await e.link();return me(o)}catch(o){throw console.warn("Error linking account"),q(o)}}async _refresh(){if(!this.api)throw new p("Session has no API instance");if(!this.client)throw new p("Session has no PrivyClient instance");let e=await this.client.getAccessToken({disableAutoRefresh:!0}),o=this.refreshToken;if(!e||!o)return null;try{let r=await this.api.post(Go(),{refresh_token:o},{headers:{authorization:`Bearer ${this.token}`}});return this.storeToken(r.data.token),this.storeRefreshToken(r.data.refresh_token),me(r.data.user)}catch(r){if(r instanceof Fe&&r.status===400&&r.message==="Invalid auth token")return this.destroyLocalState(),null;throw q(r)}}async _destroy(){var e;try{await((e=this.api)==null?void 0:e.post(Vo(),{refresh_token:this.refreshToken}))}catch{console.warn("Error destroying session")}this.destroyLocalState()}async _forkSession(){if(!this.api)throw new p("Session has no API instance");let e=this.refreshToken;try{let o=await this.api.post(Bo(),{refresh_token:e});return this.storeToken(o.data.token),this.storeRefreshToken(o.data.refresh_token),o.data.new_session_refresh_token}catch(o){throw q(o)}}destroyLocalState(){this.storeToken(null),this.storeRefreshToken(null),S.del(se)}storeToken(e){typeof e=="string"?S.put(Ve,e):S.del(Ve)}storeRefreshToken(e){typeof e=="string"?S.put(mt,e):S.del(mt)}};var ar=require("@ethersproject/address"),eo=v(require("@walletconnect/web3-provider"));var nr=require("@ethersproject/logger");var Be=class extends K{constructor(){super("Wallet timeout");this.type="wallet_error"}},Ct=t=>{if(t instanceof K)return t;if((t==null?void 0:t.code)&&(t==null?void 0:t.reason)){let e=new He(t);return t.code===nr.ErrorCode.ACTION_REJECTED&&(e.details=Me.E4001_USER_REJECTED_REQUEST),e}return t!=null&&t.code?new He(t):new K("Unknown connector error",t)},Qt=class extends X{constructor(o,r,i){super(o);this.type="provider_error";this.code=r,this.data=i}},He=class extends Qt{constructor(o){var n,s,u;let r=o;super(r.message,r.code,r.data);let i=Object.values(Me).find(m=>m.eipCode===r.code);this.details=i||Me.UNKNOWN_ERROR,r.code===-32002&&((n=r.message)!=null&&n.includes("already pending for origin")?(s=r.message)!=null&&s.includes("wallet_requestPermissions")?this.details=Me.E32002_CONNECTION_ALREADY_PENDING:this.details=Me.E32002_REQUEST_ALREADY_PENDING:(u=r.message)!=null&&u.includes("Already processing")&&r.message.includes("eth_requestAccounts")&&(this.details=Me.E32002_WALLET_LOCKED))}},Fi={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}},Gi={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}},Vi={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}},Me={UNKNOWN_ERROR:{eipCode:0,message:"Unknown error",detail:"Unknown error",retryable:!0},...Vi,...Gi},bt={...Fi,...Me};var Bi=12e4,Xt=(t=new Be,e=Bi)=>new Promise((o,r)=>setTimeout(()=>{r(t)},e)),xe=class{constructor(e){this.removeListener=(e,o)=>{if(this.walletProvider)return this.walletProvider.removeListener(e,o)};this.setProvider=e=>{this.walletProvider=e,this._subscriptions.forEach(o=>{var r;(r=this.walletProvider)==null||r.on(o.eventName,o.listener)})};this.walletProvider=e,this._subscriptions=[]}on(e,o){if(this.walletProvider)return this.walletProvider.on(e,o);this._subscriptions.push({eventName:e,listener:o})}request(e){if(!this.walletProvider)throw new K(`A wallet request of type ${e.method} was made before setting a wallet provider.`);return Promise.race([this.walletProvider.request(e),Xt()]).catch(o=>{throw Ct(o)})}},Le=class extends xe{constructor(o){super(o)}},vt=class extends xe{constructor(e){super(e)}sendAsync(e,o){throw new Error("sendAsync is no longer supported by EIP-1193. Use the request method instead.")}};var lr=require("@ethersproject/providers");var sr=["metamask","coinbase_wallet","wallet_connect"];var dr=v(require("@coinbase/wallet-sdk")),Hi=()=>{let t=`https://mainnet.infura.io/v3/${pt}`,e=1;return new dr.default({appName:"Privy",darkMode:!1,headlessMode:!1}).makeWeb3Provider(t,e)},to=()=>{if(!window.ethereum)return!1;if(window.ethereum.isMetaMask)return!0;if(window.ethereum.providers){for(let t of window.ethereum.providers)if(t.isMetaMask)return!0}return!1},xt=()=>{if(!window.ethereum)return!1;if(window.ethereum.isCoinbaseWallet)return!0;if(window.ethereum.providers){for(let t of window.ethereum.providers)if(t.isCoinbaseWallet)return!0}return!1},ze=class{constructor(){this.walletType=null;this.getEthereumProvider=()=>this.ethProvider;this.createSiweMessage=(e,o,r,i,n,s,u)=>`${r} wants you to sign in with your Ethereum account:
|
|
2
2
|
${o}
|
|
3
3
|
|
|
4
4
|
${u}
|
|
@@ -791,7 +791,7 @@ Resources:
|
|
|
791
791
|
font-weight: 500;
|
|
792
792
|
text-align: center;
|
|
793
793
|
color: var(--primary-color);
|
|
794
|
-
background-color: rgba(var(--primary-color-rgb), 0.
|
|
794
|
+
background-color: rgba(var(--primary-color-rgb), 0.2);
|
|
795
795
|
border-radius: var(--border-radius-sm);
|
|
796
796
|
min-width: 144px;
|
|
797
797
|
opacity: ${t=>t.visible?"1":"0"};
|