herald-auth-web 0.5.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.
@@ -0,0 +1,8 @@
1
+ "use strict";var Herald=(()=>{var M=Object.defineProperty;var Le=Object.getOwnPropertyDescriptor;var je=Object.getOwnPropertyNames;var Be=Object.prototype.hasOwnProperty;var qe=(e,r)=>{for(var t in r)M(e,t,{get:r[t],enumerable:!0})},Ke=(e,r,t,s)=>{if(r&&typeof r=="object"||typeof r=="function")for(let n of je(r))!Be.call(e,n)&&n!==t&&M(e,n,{get:()=>r[n],enumerable:!(s=Le(r,n))||s.enumerable});return e};var ze=e=>Ke(M({},"__esModule",{value:!0}),e);var sr={};qe(sr,{HeraldError:()=>g,createHeraldClient:()=>ke,localStorageStorage:()=>z,memoryStorage:()=>Pe,performPasskeyAssertion:()=>Ae});var Y={bodySerializer:e=>JSON.stringify(e,(r,t)=>typeof t=="bigint"?t.toString():t)};var Z=({onRequest:e,onSseError:r,onSseEvent:t,responseTransformer:s,responseValidator:n,sseDefaultRetryDelay:o,sseMaxRetryAttempts:a,sseMaxRetryDelay:l,sseSleepFn:i,url:c,...p})=>{let m,S=i??(d=>new Promise(y=>setTimeout(y,d)));return{stream:async function*(){let d=o??3e3,y=0,b=p.signal??new AbortController().signal;for(;!b.aborted;){y++;let P=p.headers instanceof Headers?p.headers:new Headers(p.headers);m!==void 0&&P.set("Last-Event-ID",m);try{let C={redirect:"follow",...p,body:p.serializedBody,headers:P,signal:b},w=new Request(c,C);e&&(w=await e(c,C));let u=await(p.fetch??globalThis.fetch)(w);if(!u.ok)throw new Error(`SSE failed: ${u.status} ${u.statusText}`);if(!u.body)throw new Error("No body in SSE response");let E=u.body.pipeThrough(new TextDecoderStream).getReader(),k="",_=()=>{try{E.cancel()}catch{}};b.addEventListener("abort",_);try{for(;;){let{done:ve,value:Ge}=await E.read();if(ve)break;k+=Ge,k=k.replace(/\r\n/g,`
2
+ `).replace(/\r/g,`
3
+ `);let $=k.split(`
4
+
5
+ `);k=$.pop()??"";for(let He of $){let Ue=He.split(`
6
+ `),U=[],Q;for(let R of Ue)if(R.startsWith("data:"))U.push(R.replace(/^data:\s*/,""));else if(R.startsWith("event:"))Q=R.replace(/^event:\s*/,"");else if(R.startsWith("id:"))m=R.replace(/^id:\s*/,"");else if(R.startsWith("retry:")){let X=Number.parseInt(R.replace(/^retry:\s*/,""),10);Number.isNaN(X)||(d=X)}let D,J=!1;if(U.length){let R=U.join(`
7
+ `);try{D=JSON.parse(R),J=!0}catch{D=R}}J&&(n&&await n(D),s&&(D=await s(D))),t?.({data:D,event:Q,id:m,retry:d}),U.length&&(yield D)}}}finally{b.removeEventListener("abort",_),E.releaseLock()}break}catch(C){if(r?.(C),a!==void 0&&y>=a)break;let w=Math.min(d*2**(y-1),l??3e4);await S(w)}}}()}};var Me=e=>{switch(e){case"label":return".";case"matrix":return";";case"simple":return",";default:return"&"}},We=e=>{switch(e){case"form":return",";case"pipeDelimited":return"|";case"spaceDelimited":return"%20";default:return","}},Ve=e=>{switch(e){case"label":return".";case"matrix":return";";case"simple":return",";default:return"&"}},L=({allowReserved:e,explode:r,name:t,style:s,value:n})=>{if(!r){let l=(e?n:n.map(i=>encodeURIComponent(i))).join(We(s));switch(s){case"label":return`.${l}`;case"matrix":return`;${t}=${l}`;case"simple":return l;default:return`${t}=${l}`}}let o=Me(s),a=n.map(l=>s==="label"||s==="simple"?e?l:encodeURIComponent(l):x({allowReserved:e,name:t,value:l})).join(o);return s==="label"||s==="matrix"?o+a:a},x=({allowReserved:e,name:r,value:t})=>{if(t==null)return"";if(typeof t=="object")throw new Error("Deeply-nested arrays/objects aren\u2019t supported. Provide your own `querySerializer()` to handle these.");return`${r}=${e?t:encodeURIComponent(t)}`},j=({allowReserved:e,explode:r,name:t,style:s,value:n,valueOnly:o})=>{if(n instanceof Date)return o?n.toISOString():`${t}=${n.toISOString()}`;if(s!=="deepObject"&&!r){let i=[];Object.entries(n).forEach(([p,m])=>{i=[...i,p,e?m:encodeURIComponent(m)]});let c=i.join(",");switch(s){case"form":return`${t}=${c}`;case"label":return`.${c}`;case"matrix":return`;${t}=${c}`;default:return c}}let a=Ve(s),l=Object.entries(n).map(([i,c])=>x({allowReserved:e,name:s==="deepObject"?`${t}[${i}]`:i,value:c})).join(a);return s==="label"||s==="matrix"?a+l:l};var Fe=/\{[^{}]+\}/g,Ne=({path:e,url:r})=>{let t=r,s=r.match(Fe);if(s)for(let n of s){let o=!1,a=n.substring(1,n.length-1),l="simple";a.endsWith("*")&&(o=!0,a=a.substring(0,a.length-1)),a.startsWith(".")?(a=a.substring(1),l="label"):a.startsWith(";")&&(a=a.substring(1),l="matrix");let i=e[a];if(i==null)continue;if(Array.isArray(i)){t=t.replace(n,L({explode:o,name:a,style:l,value:i}));continue}if(typeof i=="object"){t=t.replace(n,j({explode:o,name:a,style:l,value:i,valueOnly:!0}));continue}if(l==="matrix"){t=t.replace(n,`;${x({name:a,value:i})}`);continue}let c=encodeURIComponent(l==="label"?`.${i}`:i);t=t.replace(n,c)}return t},ee=({baseUrl:e,path:r,query:t,querySerializer:s,url:n})=>{let o=n.startsWith("/")?n:`/${n}`,a=(e??"")+o;r&&(a=Ne({path:r,url:a}));let l=t?s(t):"";return l.startsWith("?")&&(l=l.substring(1)),l&&(a+=`?${l}`),a};function W(e){let r=e.body!==void 0;if(r&&e.bodySerializer)return"serializedBody"in e?e.serializedBody!==void 0&&e.serializedBody!==""?e.serializedBody:null:e.body!==""?e.body:null;if(r)return e.body}var re=async(e,r)=>{let t=typeof r=="function"?await r(e):r;if(t)return e.scheme==="bearer"?`Bearer ${t}`:e.scheme==="basic"?`Basic ${btoa(t)}`:t};var te=({parameters:e={},...r}={})=>s=>{let n=[];if(s&&typeof s=="object")for(let o in s){let a=s[o];if(a==null)continue;let l=e[o]||r;if(Array.isArray(a)){let i=L({allowReserved:l.allowReserved,explode:!0,name:o,style:"form",value:a,...l.array});i&&n.push(i)}else if(typeof a=="object"){let i=j({allowReserved:l.allowReserved,explode:!0,name:o,style:"deepObject",value:a,...l.object});i&&n.push(i)}else{let i=x({allowReserved:l.allowReserved,name:o,value:a});i&&n.push(i)}}return n.join("&")},se=e=>{if(!e)return"stream";let r=e.split(";")[0]?.trim();if(r){if(r.startsWith("application/json")||r.endsWith("+json"))return"json";if(r==="multipart/form-data")return"formData";if(["application/","audio/","image/","video/"].some(t=>r.startsWith(t)))return"blob";if(r.startsWith("text/"))return"text"}},_e=(e,r)=>r?!!(e.headers.has(r)||e.query?.[r]||e.headers.get("Cookie")?.includes(`${r}=`)):!1,ne=async({security:e,...r})=>{for(let t of e){if(_e(r,t.name))continue;let s=await re(t,r.auth);if(!s)continue;let n=t.name??"Authorization";switch(t.in){case"query":r.query||(r.query={}),r.query[n]=s;break;case"cookie":r.headers.append("Cookie",`${n}=${s}`);break;default:r.headers.set(n,s);break}}},V=e=>ee({baseUrl:e.baseUrl,path:e.path,query:e.query,querySerializer:typeof e.querySerializer=="function"?e.querySerializer:te(e.querySerializer),url:e.url}),F=(e,r)=>{let t={...e,...r};return t.baseUrl?.endsWith("/")&&(t.baseUrl=t.baseUrl.substring(0,t.baseUrl.length-1)),t.headers=B(e.headers,r.headers),t},$e=e=>{let r=[];return e.forEach((t,s)=>{r.push([s,t])}),r},B=(...e)=>{let r=new Headers;for(let t of e){if(!t)continue;let s=t instanceof Headers?$e(t):Object.entries(t);for(let[n,o]of s)if(o===null)r.delete(n);else if(Array.isArray(o))for(let a of o)r.append(n,a);else o!==void 0&&r.set(n,typeof o=="object"?JSON.stringify(o):o)}return r},I=class{constructor(){this.fns=[]}clear(){this.fns=[]}eject(r){let t=this.getInterceptorIndex(r);this.fns[t]&&(this.fns[t]=null)}exists(r){let t=this.getInterceptorIndex(r);return!!this.fns[t]}getInterceptorIndex(r){return typeof r=="number"?this.fns[r]?r:-1:this.fns.indexOf(r)}update(r,t){let s=this.getInterceptorIndex(r);return this.fns[s]?(this.fns[s]=t,r):!1}use(r){return this.fns.push(r),this.fns.length-1}},oe=()=>({error:new I,request:new I,response:new I}),Qe=te({allowReserved:!1,array:{explode:!0,style:"form"},object:{explode:!0,style:"deepObject"}}),Je={"Content-Type":"application/json"},A=(e={})=>({...Y,headers:Je,parseAs:"auto",querySerializer:Qe,...e});var v=(e={})=>{let r=F(A(),e),t=()=>({...r}),s=c=>(r=F(r,c),t()),n=oe(),o=async c=>{let p={...r,...c,fetch:c.fetch??r.fetch??globalThis.fetch,headers:B(r.headers,c.headers),serializedBody:void 0};p.security&&await ne({...p,security:p.security}),p.requestValidator&&await p.requestValidator(p),p.body!==void 0&&p.bodySerializer&&(p.serializedBody=p.bodySerializer(p.body)),(p.body===void 0||p.serializedBody==="")&&p.headers.delete("Content-Type");let m=V(p);return{opts:p,url:m}},a=async c=>{let{opts:p,url:m}=await o(c),S={redirect:"follow",...p,body:W(p)},O=new Request(m,S);for(let h of n.request.fns)h&&(O=await h(O,p));let H=p.fetch,d;try{d=await H(O)}catch(h){let u=h;for(let E of n.error.fns)E&&(u=await E(h,void 0,O,p));if(u=u||{},p.throwOnError)throw u;return p.responseStyle==="data"?void 0:{error:u,request:O,response:void 0}}for(let h of n.response.fns)h&&(d=await h(d,O,p));let y={request:O,response:d};if(d.ok){let h=(p.parseAs==="auto"?se(d.headers.get("Content-Type")):p.parseAs)??"json";if(d.status===204||d.headers.get("Content-Length")==="0"){let E;switch(h){case"arrayBuffer":case"blob":case"text":E=await d[h]();break;case"formData":E=new FormData;break;case"stream":E=d.body;break;default:E={};break}return p.responseStyle==="data"?E:{data:E,...y}}let u;switch(h){case"arrayBuffer":case"blob":case"formData":case"text":u=await d[h]();break;case"json":{let E=await d.text();u=E?JSON.parse(E):{};break}case"stream":return p.responseStyle==="data"?d.body:{data:d.body,...y}}return h==="json"&&(p.responseValidator&&await p.responseValidator(u),p.responseTransformer&&(u=await p.responseTransformer(u))),p.responseStyle==="data"?u:{data:u,...y}}let b=await d.text(),P;try{P=JSON.parse(b)}catch{}let C=P??b,w=C;for(let h of n.error.fns)h&&(w=await h(C,d,O,p));if(w=w||{},p.throwOnError)throw w;return p.responseStyle==="data"?void 0:{error:w,...y}},l=c=>p=>a({...p,method:c}),i=c=>async p=>{let{opts:m,url:S}=await o(p);return Z({...m,body:m.body,headers:m.headers,method:c,onRequest:async(O,H)=>{let d=new Request(O,H);for(let y of n.request.fns)y&&(d=await y(d,m));return d},serializedBody:W(m),url:S})};return{buildUrl:V,connect:l("CONNECT"),delete:l("DELETE"),get:l("GET"),getConfig:t,head:l("HEAD"),interceptors:n,options:l("OPTIONS"),patch:l("PATCH"),post:l("POST"),put:l("PUT"),request:a,setConfig:s,sse:{connect:i("CONNECT"),delete:i("DELETE"),get:i("GET"),head:i("HEAD"),options:i("OPTIONS"),patch:i("PATCH"),post:i("POST"),put:i("PUT"),trace:i("TRACE")},trace:l("TRACE")}};var f=v(A());var ae=e=>(e.client??f).post({url:"/api/auth/browser-token/refresh",...e,headers:{"Content-Type":"application/json",...e.headers}});var ie=e=>(e?.client??f).post({security:[{scheme:"bearer",type:"http"}],url:"/api/auth/logout",...e}),le=e=>(e?.client??f).get({security:[{scheme:"bearer",type:"http"}],url:"/api/auth/status",...e});var pe=e=>(e.client??f).post({url:"/api/auth/{realmId}/login",...e,headers:{"Content-Type":"application/json",...e.headers}}),de=e=>(e.client??f).post({url:"/api/auth/{realmId}/login/email-otp/send",...e,headers:{"Content-Type":"application/json",...e.headers}}),ce=e=>(e.client??f).post({url:"/api/auth/{realmId}/login/email-otp/verify",...e,headers:{"Content-Type":"application/json",...e.headers}}),ue=e=>(e.client??f).post({url:"/api/auth/{realmId}/login/passkey/2fa/options",...e,headers:{"Content-Type":"application/json",...e.headers}}),he=e=>(e.client??f).post({url:"/api/auth/{realmId}/login/passkey/2fa/verify",...e,headers:{"Content-Type":"application/json",...e.headers}}),me=e=>(e.client??f).post({url:"/api/auth/{realmId}/login/passkey/options",...e,headers:{"Content-Type":"application/json",...e.headers}}),Ee=e=>(e.client??f).post({url:"/api/auth/{realmId}/login/passkey/verify",...e,headers:{"Content-Type":"application/json",...e.headers}}),fe=e=>(e.client??f).post({url:"/api/auth/{realmId}/login/verify-totp",...e,headers:{"Content-Type":"application/json",...e.headers}});var ye=e=>(e.client??f).post({url:"/api/auth/{realmId}/register",...e,headers:{"Content-Type":"application/json",...e.headers}});var ge=e=>(e.client??f).post({url:"/api/auth/{realmId}/reset_password/request",...e,headers:{"Content-Type":"application/json",...e.headers}});var Te=e=>(e.client??f).post({url:"/api/auth/{realmId}/verify_email/trigger",...e,headers:{"Content-Type":"application/json",...e.headers}});var g=class extends Error{constructor(r){super(r.message??r.kind),this.name="HeraldError",this.kind=r.kind,this.status=r.status,this.code=r.code,this.requestId=r.requestId,this.details=r.details}};function Xe(e){switch(e){case 400:return"validation";case 401:return"unauthorized";case 403:return"forbidden";case 404:return"not-found";case 429:return"rate-limited";default:return"api"}}function q(e,r){if(!r)return new g({kind:"network",message:"Network request failed. For cross-origin integrations, ensure the page origin is pre-registered on the Client App (allowed_origins).",details:e});let t=e??{};return new g({kind:Xe(r.status),status:r.status,message:t.message??t.error??`HTTP ${r.status}`,code:t.code,requestId:t.requestId??void 0,details:t.details})}var Oe="X-Herald-Refresh-Retried",Re="/api/auth/browser-token/refresh";function we(e,r){let t=r.storage.getRefreshToken();if(!t)return r.session.emit({type:"session-expired",reason:"refresh-failed"}),Promise.resolve(null);let s=e.__heraldRefresh;if(s)return s;let n=(async()=>{try{let{data:o,error:a}=await ae({client:e,body:{refreshToken:t}});return a||!o?(r.session.emit({type:"session-expired",reason:"family-revoked"}),null):(r.accessTokenHolder.set(o.accessToken),r.storage.setRefreshToken(o.refreshToken),o)}catch{return r.session.emit({type:"session-expired",reason:"refresh-failed"}),null}finally{e.__heraldRefresh=null}})();return e.__heraldRefresh=n,n}async function Ye(e,r){let t=await e.request(r);if(!t.response)return new Response(null,{status:401});let s=new Headers(t.response.headers),n=t.data!==void 0?t.data:t.error,o=n!=null?JSON.stringify(n):null;return new Response(o,{status:t.response.status,headers:s})}function be(e){let r=v({baseUrl:e.baseUrl});return r.interceptors.request.use((t,s)=>{if(s.url===Re)return t;let n=e.accessTokenHolder.get();if(!n)return t;let o=new Headers(t.headers);return o.has("Authorization")||o.set("Authorization",`Bearer ${n}`),new Request(t,{headers:o})}),r.interceptors.response.use(async(t,s,n)=>{if(t.status!==401||n.url===Re||s.headers.get(Oe)||!(await we(r,e)!==null))return t;let a={...n},l=new Headers(a.headers??void 0);return l.set(Oe,"1"),a.headers=l,Ye(r,a)}),{client:r,refreshTokens:()=>we(r,e)}}async function T(e){let{data:r,error:t,response:s}=await e;if(r===void 0)throw q(t,s);return r}function Ze(e,r){r.accessTokenHolder.set(e.accessToken),r.storage.setRefreshToken(e.refreshToken)}function er(e){return{authenticated:!0,realmId:e.realmId,userId:null,clientAppId:null,clientId:e.clientId,credentialClass:"custom_user_ui",permissions:[],scopes:[]}}function rr(e,r){return{authenticated:e.authenticated,realmId:e.realmId??r.realmId,userId:e.userId??null,clientAppId:e.clientAppId??null,clientId:e.clientId??r.clientId,credentialClass:e.credentialClass??null,permissions:e.permissions??[],scopes:e.scopes??[]}}function Ce(e){return Array.isArray(e)?e.map(r=>{let t=r??{};return{agreementType:String(t.agreementType??t.agreement_type??""),versionId:String(t.versionId??t.version_id??""),...r&&typeof r=="object"?{raw:t}:{}}}):[]}function tr(e){return e.filter(r=>r==="totp"||r==="passkey")}function K(e,r){let t=e??null;if(t&&typeof t.accessToken=="string"){Ze(t,r);let s=er(r);return r.session.emit({type:"authenticated",session:s}),{kind:"success",session:s}}if(t&&t.consentRequired===!0)return{kind:"consent-required",agreements:Ce(t.agreements)};if(t&&Array.isArray(t.secondFactors)&&t.secondFactors.length>0)return{kind:"requires-second-factor",tempToken:String(t.tempToken??""),expiresInSeconds:Number(t.expiresInSeconds??0),secondFactors:tr(t.secondFactors),userId:String(t.userId??""),realmId:String(t.realmId??r.realmId)};if(t&&typeof t.redirectTo=="string")return{kind:"oauth-redirect",redirectTo:t.redirectTo};throw new g({kind:"api",message:"Unrecognized login response shape."})}function De(e){let{realmId:r,client:t}=e;return{async register(s){let n=await T(ye({client:t,path:{realmId:r},body:{clientId:e.clientId,email:s.email,password:s.password,...s.username?{username:s.username}:{},...s.turnstileToken?{turnstileToken:s.turnstileToken}:{}}}));return{message:n.message,verificationRequired:n.verificationRequired}},async triggerVerifyEmail(s){return{message:(await T(Te({client:t,path:{realmId:r},body:{clientId:e.clientId,email:s.email,...s.turnstileToken?{turnstileToken:s.turnstileToken}:{}}}))).message}},async requestPasswordReset(s){return{message:(await T(ge({client:t,path:{realmId:r},body:{clientId:e.clientId,email:s.email,...s.turnstileToken?{turnstileToken:s.turnstileToken}:{}}}))).message}},async login(s){let n=await T(pe({client:t,path:{realmId:r},body:{clientId:e.clientId,password:s.password,...s.username?{username:s.username}:{},...s.email?{email:s.email}:{},...s.turnstileToken?{turnstileToken:s.turnstileToken}:{},...s.agreements?{agreements:s.agreements}:{},...s.oauthClientId?{oauthClientId:s.oauthClientId}:{},...s.redirectUri?{redirectUri:s.redirectUri}:{},...s.state?{state:s.state}:{}}}));return K(n,e)},async verifyTotp(s){let n=await T(fe({client:t,path:{realmId:r},body:{tempToken:s.tempToken,...s.code?{code:s.code}:{},...s.backupCode?{backupCode:s.backupCode}:{},...s.agreements?{agreements:s.agreements}:{}}}));return K(n,e)},passkey:{async loginBegin(s){let n=s.tempToken!==void 0?await T(ue({client:t,path:{realmId:r},body:{tempToken:s.tempToken}})):await T(me({client:t,path:{realmId:r},body:{clientId:e.clientId,...s.turnstileToken?{turnstileToken:s.turnstileToken}:{},...s.oauth?{oauth:s.oauth}:{}}}));return{authToken:n.authToken,options:n.options}},async loginFinish(s){let n=await T(s.tempToken!==void 0?he({client:t,path:{realmId:r},body:{tempToken:s.tempToken,authToken:s.authToken,assertion:s.assertion,...s.agreements?{agreements:s.agreements}:{}}}):Ee({client:t,path:{realmId:r},body:{authToken:s.authToken,assertion:s.assertion,...s.agreements?{agreements:s.agreements}:{}}}));return K(n,e)}},loginWithEmailOtp:{async send(s){let{data:n,error:o,response:a}=await de({client:t,path:{realmId:r},body:{clientId:e.clientId,email:s.email,...s.turnstileToken?{turnstileToken:s.turnstileToken}:{},...s.agreements?{agreements:s.agreements}:{}}});if(n)return{kind:"sent",message:n.message,expiresInSeconds:n.expiresInSeconds};let l=o??{},i=l.code;if(a?.status===409&&(i==="consent_required"||i==="email_not_registered"))return{kind:"conflict",code:String(i),message:String(l.message??""),consentRequired:l.consentRequired===!0,agreements:Ce(l.agreements)};throw q(o,a)},async verify(s){let n=await T(ce({client:t,path:{realmId:r},body:{clientId:e.clientId,email:s.email,code:s.code,...s.agreements?{agreements:s.agreements}:{}}}));return K(n,e)}},async getStatus(){let s=await T(le({client:t}));return e.session.emit({type:"authenticated",session:rr(s,e)}),s},async refresh(){let s=await e.refreshTokens();if(!s)throw new g({kind:"session-expired",message:"Session refresh failed; sign in again."});return s},async logout(){let s=await T(ie({client:t}));return e.accessTokenHolder.clear(),e.storage.setRefreshToken(null),e.session.emit({type:"logged-out"}),{message:s?.message??"Logged out"}}}}function xe(){let e=null;return{get:()=>e,set:r=>{e=r},clear:()=>{e=null}}}var N={authenticated:!1,realmId:null,userId:null,clientAppId:null,clientId:null,credentialClass:null,permissions:[],scopes:[]};function Se(e){let r={...N},t=new Set;return{getSession:()=>r,setSession:s=>{r=s??{...N}},subscribe:s=>(t.add(s),()=>{t.delete(s)}),emit:s=>{s.type==="authenticated"?r=s.session:(s.type==="session-expired"||s.type==="logged-out")&&(r={...N});for(let n of t)n(s);e?.(s)}}}function Pe(){let e=null;return{getRefreshToken:()=>e,setRefreshToken:r=>{e=r}}}function z(e){if(typeof localStorage>"u"||localStorage===null)throw new g({kind:"ssr-no-storage",message:"localStorage is unavailable in this environment. Inject a TokenStorage adapter via `storage`, or use memoryStorage()."});return{getRefreshToken:()=>localStorage.getItem(e),setRefreshToken:r=>{r===null?localStorage.removeItem(e):localStorage.setItem(e,r)}}}function ke(e){let r=typeof localStorage<"u"&&localStorage!==null,t=e.storage;if(!t){if(!r)throw new g({kind:"ssr-no-storage",message:"No TokenStorage adapter was provided and localStorage is unavailable (SSR/Node). Inject a `storage` adapter or use memoryStorage()."});t=z(e.storageKey??"herald.refreshToken")}let s=xe(),n=Se(e.onSessionChange),o=be({baseUrl:e.baseUrl,accessTokenHolder:s,storage:t,session:n}),a={realmId:e.realmId,clientId:e.clientId,client:o.client,accessTokenHolder:s,storage:t,session:n,refreshTokens:o.refreshTokens};return{...De(a),storage:t,session:{getSession:()=>n.getSession(),subscribe:i=>n.subscribe(i)},tokens:{getAccessToken:()=>s.get(),setTokens:i=>{s.set(i.accessToken),t.setRefreshToken(i.refreshToken),i.clientId!==void 0&&(a.clientId=i.clientId)},clear:()=>{s.clear(),t.setRefreshToken(null)},bindClientId:i=>{a.clientId=i}}}}function Ie(e){let r=e.replace(/-/g,"+").replace(/_/g,"/"),t=r+"===".slice((r.length+3)%4),s=atob(t),n=new Uint8Array(s.length);for(let o=0;o<s.length;o+=1)n[o]=s.charCodeAt(o);return n.buffer}function G(e){let r=e instanceof Uint8Array?e:new Uint8Array(e),t="";for(let s=0;s<r.length;s+=1)t+=String.fromCharCode(r[s]??0);return btoa(t).replace(/\+/g,"-").replace(/\//g,"_").replace(/[=]/g,"")}async function Ae(e){if(typeof navigator>"u"||!navigator.credentials?.get)throw new Error("WebAuthn (navigator.credentials.get) is not available in this environment.");let r={challenge:Ie(e.challenge),...e.rpId?{rpId:e.rpId}:{},...e.timeout!==void 0?{timeout:e.timeout}:{},...e.userVerification?{userVerification:e.userVerification}:{},...e.allowCredentials?{allowCredentials:e.allowCredentials.map(o=>({type:"public-key",id:Ie(o.id),...o.transports?{transports:o.transports}:{}}))}:{}},t=await navigator.credentials.get({publicKey:r});if(!t)throw new Error("Passkey assertion returned no credential.");let s=t.response,n={id:t.id,rawId:G(t.rawId),type:"public-key",response:{authenticatorData:G(s.authenticatorData),clientDataJSON:G(s.clientDataJSON),signature:G(s.signature),...s.userHandle?{userHandle:G(s.userHandle)}:{}}};return typeof t.getClientExtensionResults=="function"&&(n.clientExtensionResults=t.getClientExtensionResults()),n}return ze(sr);})();
8
+ //# sourceMappingURL=index.global.js.map