herald-auth-web 0.5.2 → 0.5.4
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 +1 -1
- package/dist/index.global.js +4 -4
- package/dist/index.global.js.map +1 -1
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
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' | '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';
|
|
317
317
|
type StatusResponse = {
|
|
318
318
|
authenticated: boolean;
|
|
319
319
|
clientAppId: string;
|
package/dist/index.global.js
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
"use strict";var Herald=(()=>{var
|
|
1
|
+
"use strict";var Herald=(()=>{var K=Object.defineProperty;var je=Object.getOwnPropertyDescriptor;var Be=Object.getOwnPropertyNames;var qe=Object.prototype.hasOwnProperty;var We=(e,t)=>{for(var s in t)K(e,s,{get:t[s],enumerable:!0})},Fe=(e,t,s,r)=>{if(t&&typeof t=="object"||typeof t=="function")for(let o of Be(t))!qe.call(e,o)&&o!==s&&K(e,o,{get:()=>t[o],enumerable:!(r=je(t,o))||r.enumerable});return e};var Ke=e=>Fe(K({},"__esModule",{value:!0}),e);var or={};We(or,{HeraldError:()=>g,createHeraldClient:()=>Ie,localStorageStorage:()=>F,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: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:ve,value:He}=await E.read();if(ve)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
|
|
6
|
-
`),
|
|
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&&y>=a)break;let w=Math.min(d*2**(y-1),l??3e4);await S(w)}}}()}};var We=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=We(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 W(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 v=(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:W(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 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,L)=>{let d=new Request(O,L);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: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 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/ldap",...e,headers:{"Content-Type":"application/json",...e.headers}}),he=e=>(e.client??f).post({url:"/api/auth/{realmId}/login/passkey/2fa/options",...e,headers:{"Content-Type":"application/json",...e.headers}}),me=e=>(e.client??f).post({url:"/api/auth/{realmId}/login/passkey/2fa/verify",...e,headers:{"Content-Type":"application/json",...e.headers}}),Ee=e=>(e.client??f).post({url:"/api/auth/{realmId}/login/passkey/options",...e,headers:{"Content-Type":"application/json",...e.headers}}),fe=e=>(e.client??f).post({url:"/api/auth/{realmId}/login/passkey/verify",...e,headers:{"Content-Type":"application/json",...e.headers}}),ye=e=>(e.client??f).post({url:"/api/auth/{realmId}/login/verify-totp",...e,headers:{"Content-Type":"application/json",...e.headers}});var ge=e=>(e.client??f).post({url:"/api/auth/{realmId}/register",...e,headers:{"Content-Type":"application/json",...e.headers}});var Te=e=>(e.client??f).post({url:"/api/auth/{realmId}/reset_password/request",...e,headers:{"Content-Type":"application/json",...e.headers}});var Oe=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(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=v({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 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 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 G(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 G(n,e)},async verifyTotp(r){let n=await T(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(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}:{}}}):fe({client:s,path:{realmId:t},body:{authToken:r.authToken,assertion:r.assertion,...r.agreements?{agreements:r.agreements}:{}}}));return G(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 G(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 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(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 Me(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 G=(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)},O=new Request(m,P);for(let u of o.request.fns)u&&(O=await u(O,p));let U=p.fetch,d;try{d=await U(O)}catch(u){let h=u;for(let E of o.error.fns)E&&(h=await E(u,void 0,O,p));if(h=h||{},p.throwOnError)throw h;return p.responseStyle==="data"?void 0:{error:h,request:O,response:void 0}}for(let u of o.response.fns)u&&(d=await u(d,O,p));let y={request:O,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,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:P}=await n(p);return Z({...m,body:m.body,headers:m.headers,method:c,onRequest:async(O,U)=>{let d=new Request(O,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 f=G(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}}),he=e=>(e.client??f).post({url:"/api/auth/{realmId}/login/ldap",...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}}),me=e=>(e.client??f).post({url:"/api/auth/{realmId}/login/passkey/2fa/verify",...e,headers:{"Content-Type":"application/json",...e.headers}}),Ee=e=>(e.client??f).post({url:"/api/auth/{realmId}/login/passkey/options",...e,headers:{"Content-Type":"application/json",...e.headers}}),fe=e=>(e.client??f).post({url:"/api/auth/{realmId}/login/passkey/verify",...e,headers:{"Content-Type":"application/json",...e.headers}}),ye=e=>(e.client??f).post({url:"/api/auth/{realmId}/login/verify-totp",...e,headers:{"Content-Type":"application/json",...e.headers}});var ge=e=>(e.client??f).post({url:"/api/auth/{realmId}/register",...e,headers:{"Content-Type":"application/json",...e.headers}});var Te=e=>(e.client??f).post({url:"/api/auth/{realmId}/reset_password/request",...e,headers:{"Content-Type":"application/json",...e.headers}});var Oe=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(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 W(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 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=G({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 T(e){let{data:t,error:s,response:r}=await e;if(t===void 0)throw W(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 o=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:o.message,verificationRequired:o.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 o=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(o,e)},async loginWithLdap(r){let o=await T(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 v(o,e)},async verifyTotp(r){let o=await T(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 v(o,e)},passkey:{async loginBegin(r){let o=r.tempToken!==void 0?await T(ue({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:o.authToken,options:o.options}},async loginFinish(r){let o=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}:{}}}):fe({client:s,path:{realmId:t},body:{authToken:r.authToken,assertion:r.assertion,...r.agreements?{agreements:r.agreements}:{}}}));return v(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 W(n,a)},async verify(r){let o=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(o,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 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 F(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=F(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 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(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 Ke(or);})();
|
|
8
8
|
//# sourceMappingURL=index.global.js.map
|