herald-auth-web 0.5.3 → 0.5.5

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