import{C as g,n as y,aa as S,m as u,B as w,q as p}from"./W3MFrameProviderSingleton-wWRZhxvX.js";import{N,C as k}from"./NetworkUtil-hITH22p_.js";import"./ui-BJj_Hssx.js";import"./vendor-64qtqz3S.js";import"./thirdweb-Co3M1EyP.js";import"./index-DnKfU2ei.js";import"./index-BNXDN8h1.js";import"./browser-ponyfill-C_jrGRjm.js";class A{constructor(e){this.getNonce=e.getNonce}async createMessage(e){const t={accountAddress:e.accountAddress,chainId:e.chainId,version:"1",domain:typeof document>"u"?"Unknown Domain":document.location.host,uri:typeof document>"u"?"Unknown URI":document.location.href,resources:this.resources,nonce:await this.getNonce(e),issuedAt:this.stringifyDate(new Date),statement:void 0,expirationTime:void 0,notBefore:void 0};return Object.assign(t,{toString:()=>this.stringify(t)})}stringify(e){var n;const t=this.getNetworkName(e.chainId);return[`${e.domain} wants you to sign in with your ${t} account:`,e.accountAddress,e.statement?`
${e.statement}
`:"",`URI: ${e.uri}`,`Version: ${e.version}`,`Chain ID: ${e.chainId}`,`Nonce: ${e.nonce}`,e.issuedAt&&`Issued At: ${e.issuedAt}`,e.expirationTime&&`Expiration Time: ${e.expirationTime}`,e.notBefore&&`Not Before: ${e.notBefore}`,e.requestId&&`Request ID: ${e.requestId}`,((n=e.resources)==null?void 0:n.length)&&e.resources.reduce((s,o)=>`${s}
- ${o}`,"Resources:")].filter(s=>typeof s=="string").join(`
`).trim()}getNetworkName(e){const t=g.getAllRequestedCaipNetworks();return N.getNetworkNameByCaipNetworkId(t,e)}stringifyDate(e){return e.toISOString()}}class O{constructor(e={}){this.otpUuid=null,this.listeners={sessionChanged:[]},this.localAuthStorageKey=e.localAuthStorageKey||y.SIWX_AUTH_TOKEN,this.localNonceStorageKey=e.localNonceStorageKey||y.SIWX_NONCE_TOKEN,this.required=e.required??!0,this.messenger=new A({getNonce:this.getNonce.bind(this)})}async createMessage(e){return this.messenger.createMessage(e)}async addSession(e){const t=await this.request({method:"POST",key:"authenticate",body:{data:e.data,message:e.message,signature:e.signature,clientId:this.getClientId(),walletInfo:this.getWalletInfo()},headers:["nonce","otp"]});this.setStorageToken(t.token,this.localAuthStorageKey),this.emit("sessionChanged",e),this.setAppKitAccountUser(I(t.token)),this.otpUuid=null}async getSessions(e,t){try{if(!this.getStorageToken(this.localAuthStorageKey))return[];const n=await this.request({method:"GET",key:"me",query:{},headers:["auth"]});if(!n)return[];const s=n.address.toLowerCase()===t.toLowerCase(),o=n.caip2Network===e;if(!s||!o)return[];const r={data:{accountAddress:n.address,chainId:n.caip2Network},message:"",signature:""};return this.emit("sessionChanged",r),this.setAppKitAccountUser(n),[r]}catch{return[]}}async revokeSession(e,t){return Promise.resolve(this.clearStorageTokens())}async setSessions(e){if(e.length===0)this.clearStorageTokens();else{const t=e.find(n=>{var s;return n.data.chainId===((s=S())==null?void 0:s.caipNetworkId)})||e[0];await this.addSession(t)}}getRequired(){return this.required}async getSessionAccount(){if(!this.getStorageToken(this.localAuthStorageKey))throw new Error("Not authenticated");return this.request({method:"GET",key:"me",body:void 0,query:{includeAppKitAccount:!0},headers:["auth"]})}async setSessionAccountMetadata(e=null){if(!this.getStorageToken(this.localAuthStorageKey))throw new Error("Not authenticated");return this.request({method:"PUT",key:"account-metadata",body:{metadata:e},headers:["auth"]})}on(e,t){return this.listeners[e].push(t),()=>{this.listeners[e]=this.listeners[e].filter(n=>n!==t)}}removeAllListeners(){Object.keys(this.listeners).forEach(t=>{this.listeners[t]=[]})}async requestEmailOtp({email:e,account:t}){const n=await this.request({method:"POST",key:"otp",body:{email:e,account:t}});return this.otpUuid=n.uuid,this.messenger.resources=[`email:${e}`],n}confirmEmailOtp({code:e}){return this.request({method:"PUT",key:"otp",body:{code:e},headers:["otp"]})}async request({method:e,key:t,query:n,body:s,headers:o}){var f;const{projectId:r,st:h,sv:m}=this.getSDKProperties(),a=new URL(`${k.W3M_API_URL}/auth/v1/${String(t)}`);a.searchParams.set("projectId",r),a.searchParams.set("st",h),a.searchParams.set("sv",m),n&&Object.entries(n).forEach(([i,l])=>a.searchParams.set(i,String(l)));const c=await fetch(a,{method:e,body:s?JSON.stringify(s):void 0,headers:Array.isArray(o)?o.reduce((i,l)=>{switch(l){case"nonce":i["x-nonce-jwt"]=`Bearer ${this.getStorageToken(this.localNonceStorageKey)}`;break;case"auth":i.Authorization=`Bearer ${this.getStorageToken(this.localAuthStorageKey)}`;break;case"otp":this.otpUuid&&(i["x-otp"]=this.otpUuid);break}return i},{}):void 0});if(!c.ok)throw new Error(await c.text());return(f=c.headers.get("content-type"))!=null&&f.includes("application/json")?c.json():null}getStorageToken(e){return u.getItem(e)}setStorageToken(e,t){u.setItem(t,e)}clearStorageTokens(){this.otpUuid=null,u.removeItem(this.localAuthStorageKey),u.removeItem(this.localNonceStorageKey),this.emit("sessionChanged",void 0)}async getNonce(){const{nonce:e,token:t}=await this.request({method:"GET",key:"nonce"});return this.setStorageToken(t,this.localNonceStorageKey),e}getClientId(){return w.state.clientId}getWalletInfo(){var o;const e=(o=g.getAccountData())==null?void 0:o.connectedWalletInfo;if(!e)return;if("social"in e&&"identifier"in e){const r=e.social,h=e.identifier;return{type:"social",social:r,identifier:h}}const{name:t,icon:n}=e;let s="unknown";switch(e.type){case"EXTERNAL":case"INJECTED":case"ANNOUNCED":s="extension";break;case"WALLET_CONNECT":s="walletconnect";break;default:s="unknown"}return{type:s,name:t,icon:n}}getSDKProperties(){return p._getSdkProperties()}emit(e,t){this.listeners[e].forEach(n=>n(t))}setAppKitAccountUser(e){const{email:t}=e;t&&Object.values(k.CHAIN).forEach(n=>{g.setAccountProp("user",{email:t},n)})}}function I(d){const e=d.split(".");if(e.length!==3)throw new Error("Invalid token");const t=e[1];if(typeof t!="string")throw new Error("Invalid token");const n=t.replace(/-/gu,"+").replace(/_/gu,"/"),s=n.padEnd(n.length+(4-n.length%4)%4,"=");return JSON.parse(atob(s))}export{O as ReownAuthentication,A as ReownAuthenticationMessenger};
