@sparkvault/sdk 1.0.0
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/README.md +720 -0
- package/dist/auto-init.d.ts +51 -0
- package/dist/config.d.ts +25 -0
- package/dist/errors.d.ts +30 -0
- package/dist/http.d.ts +48 -0
- package/dist/identity/api.d.ts +101 -0
- package/dist/identity/container.d.ts +49 -0
- package/dist/identity/handlers/index.d.ts +9 -0
- package/dist/identity/handlers/passkey-handler.d.ts +52 -0
- package/dist/identity/handlers/sparklink-handler.d.ts +43 -0
- package/dist/identity/handlers/totp-handler.d.ts +52 -0
- package/dist/identity/index.d.ts +69 -0
- package/dist/identity/inline-container.d.ts +60 -0
- package/dist/identity/methods.d.ts +23 -0
- package/dist/identity/modal.d.ts +74 -0
- package/dist/identity/renderer.d.ts +97 -0
- package/dist/identity/state.d.ts +95 -0
- package/dist/identity/styles.d.ts +22 -0
- package/dist/identity/types.d.ts +183 -0
- package/dist/identity/utils/cooldown-timer.d.ts +73 -0
- package/dist/identity/utils/index.d.ts +5 -0
- package/dist/identity/utils.d.ts +27 -0
- package/dist/identity/views/base.d.ts +62 -0
- package/dist/identity/views/error.d.ts +25 -0
- package/dist/identity/views/icons.d.ts +34 -0
- package/dist/identity/views/identity-input.d.ts +48 -0
- package/dist/identity/views/index.d.ts +14 -0
- package/dist/identity/views/loading.d.ts +15 -0
- package/dist/identity/views/method-select.d.ts +29 -0
- package/dist/identity/views/passkey-prompt.d.ts +22 -0
- package/dist/identity/views/passkey.d.ts +38 -0
- package/dist/identity/views/sparklink-waiting.d.ts +33 -0
- package/dist/identity/views/totp-verify.d.ts +58 -0
- package/dist/index.d.ts +658 -0
- package/dist/logger.d.ts +45 -0
- package/dist/rng/index.d.ts +54 -0
- package/dist/rng/types.d.ts +26 -0
- package/dist/sparks/index.d.ts +37 -0
- package/dist/sparks/types.d.ts +56 -0
- package/dist/sparkvault.cjs.js +6152 -0
- package/dist/sparkvault.cjs.js.map +1 -0
- package/dist/sparkvault.esm.js +6137 -0
- package/dist/sparkvault.esm.js.map +1 -0
- package/dist/sparkvault.js +2 -0
- package/dist/sparkvault.js.map +1 -0
- package/dist/utils/base64url.d.ts +49 -0
- package/dist/utils/retry.d.ts +32 -0
- package/dist/vaults/index.d.ts +83 -0
- package/dist/vaults/types.d.ts +120 -0
- package/package.json +64 -0
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports):"function"==typeof define&&define.amd?define(["exports"],t):t((e="undefined"!=typeof globalThis?globalThis:e||self).SparkVault={})}(this,function(e){"use strict";class t extends Error{constructor(e,n,i,s){super(e),this.name="SparkVaultError",this.code=n,this.statusCode=i,this.details=s,Object.setPrototypeOf(this,t.prototype)}}class n extends t{constructor(e,t){super(e,"authentication_error",401,t),this.name="AuthenticationError",Object.setPrototypeOf(this,n.prototype)}}class i extends t{constructor(e,t){super(e,"authorization_error",403,t),this.name="AuthorizationError",Object.setPrototypeOf(this,i.prototype)}}class s extends t{constructor(e,t){super(e,"validation_error",400,t),this.name="ValidationError",Object.setPrototypeOf(this,s.prototype)}}class o extends t{constructor(e,t){super(e,"network_error",void 0,t),this.name="NetworkError",Object.setPrototypeOf(this,o.prototype)}}class r extends t{constructor(e="Request timed out"){super(e,"timeout_error"),this.name="TimeoutError",Object.setPrototypeOf(this,r.prototype)}}class a extends t{constructor(e="User cancelled the operation"){super(e,"user_cancelled"),this.name="UserCancelledError",Object.setPrototypeOf(this,a.prototype)}}class l extends t{constructor(){super("Popup was blocked. Please allow popups for this site.","popup_blocked"),this.name="PopupBlockedError",Object.setPrototypeOf(this,l.prototype)}}const c={maxAttempts:3,baseDelayMs:200,maxDelayMs:5e3,jitterFactor:.2,isRetryable:function(e){if(e instanceof TypeError)return!0;if(e instanceof DOMException&&"AbortError"===e.name)return!0;if("object"==typeof e&&null!==e&&"statusCode"in e){const t=e.statusCode;return t>=500||429===t}return!1}};function d(e,t,n,i){const s=t*Math.pow(2,e),o=Math.min(s,n);return o+o*i*Math.random()}function h(e){return new Promise(t=>setTimeout(t,e))}async function p(e,t={}){const n={...c,...t};let i;for(let t=0;t<n.maxAttempts;t++)try{return await e()}catch(e){i=e;if(t===n.maxAttempts-1||!n.isRetryable(e))throw e;const s=d(t,n.baseDelayMs,n.maxDelayMs,n.jitterFactor);await h(s)}throw i}class u{constructor(e){this.config=e}async request(e,t={}){const{retry:n}=t;if(n){return p(()=>this.executeRequest(e,t),{..."object"==typeof n?n:{},isRetryable:e=>this.isRetryableError(e)})}return this.executeRequest(e,t)}async executeRequest(e,n){const{method:i="GET",headers:s={},body:a,timeout:l=this.config.timeout}=n,c=`${this.config.apiBaseUrl}${e}`,d={"Content-Type":"application/json",Accept:"application/json",...s},h=new AbortController,p=setTimeout(()=>h.abort(),l);try{const e=await fetch(c,{method:i,headers:d,body:a?JSON.stringify(a):void 0,signal:h.signal});clearTimeout(p);const t=await this.parseResponse(e);if(!e.ok)throw this.createErrorFromResponse(e.status,t);return{data:t,status:e.status,headers:e.headers}}catch(e){if(clearTimeout(p),e instanceof t)throw e;if(e instanceof DOMException&&"AbortError"===e.name)throw new r;if(e instanceof TypeError)throw new o("Network request failed. Please check your connection.");throw new t(e instanceof Error?e.message:"Unknown error","unknown_error")}}isRetryableError(e){return e instanceof o||e instanceof r||e instanceof t&&void 0!==e.statusCode&&(e.statusCode>=500||429===e.statusCode)}async parseResponse(e){const n=e.headers.get("content-length");if(204===e.status||"0"===n)return null;const i=e.headers.get("content-type");if(i?.includes("application/json")){return await e.json()}const s=await e.text();throw new t(`Unexpected response format: expected JSON but received ${i??"unknown content type"}`,"invalid_response_format",e.status,{body:s.slice(0,500)})}createErrorFromResponse(e,o){const r="object"==typeof o&&null!==o?o:{},a=("string"==typeof r.message?r.message:null)??("string"==typeof r.error?r.error:null)??"Request failed",l="string"==typeof r.code?r.code:"api_error",c="object"==typeof r.details&&null!==r.details?r.details:void 0;switch(e){case 400:return new s(a,c);case 401:return new n(a,c);case 403:return new i(a,c);default:return new t(a,l,e,c)}}get(e,t){return this.request(e,{...t,method:"GET"})}post(e,t,n){return this.request(e,{...n,method:"POST",body:t})}put(e,t,n){return this.request(e,{...n,method:"PUT",body:t})}patch(e,t,n){return this.request(e,{...n,method:"PATCH",body:t})}delete(e,t){return this.request(e,{...t,method:"DELETE"})}async requestRaw(e,t={}){const{retry:n}=t;if(n){return p(()=>this.executeRequestRaw(e,t),{..."object"==typeof n?n:{},isRetryable:e=>this.isRetryableError(e)})}return this.executeRequestRaw(e,t)}async executeRequestRaw(e,n){const{method:i="GET",headers:s={},body:a,timeout:l=this.config.timeout}=n,c=`${this.config.apiBaseUrl}${e}`,d={"Content-Type":"application/json",...s},h=new AbortController,p=setTimeout(()=>h.abort(),l);try{const e=await fetch(c,{method:i,headers:d,body:a?JSON.stringify(a):void 0,signal:h.signal});if(clearTimeout(p),!e.ok){const t=await e.json().catch(()=>({}));throw this.createErrorFromResponse(e.status,t)}return e.blob()}catch(e){if(clearTimeout(p),e instanceof t)throw e;if(e instanceof DOMException&&"AbortError"===e.name)throw new r;if(e instanceof TypeError)throw new o("Network request failed. Please check your connection.");throw new t(e instanceof Error?e.message:"Unknown error","unknown_error")}}}class m{constructor(e){this.intervalId=null,this.secondsRemaining=e.duration,this.onTick=e.onTick,this.onComplete=e.onComplete}start(){this.stop(),this.onTick(this.secondsRemaining),this.intervalId=setInterval(()=>{this.secondsRemaining--,this.onTick(this.secondsRemaining),this.secondsRemaining<=0&&(this.stop(),this.onComplete())},1e3)}stop(){null!==this.intervalId&&(clearInterval(this.intervalId),this.intervalId=null)}isRunning(){return null!==this.intervalId}getRemainingSeconds(){return this.secondsRemaining}}class b{constructor(e){this.intervalId=null,Number.isFinite(e.expiresAt)?this.expiresAt=e.expiresAt:(console.warn("[ExpirationTimer] Invalid expiresAt:",e.expiresAt),this.expiresAt=0),this.onTick=e.onTick,this.onExpired=e.onExpired}calculateRemaining(){const e=Math.floor(Date.now()/1e3),t=this.expiresAt-e;return!Number.isFinite(t)||t<0?0:Math.ceil(t)}start(){this.stop();const e=this.calculateRemaining();this.onTick(e),e<=0?this.onExpired():this.intervalId=setInterval(()=>{const e=this.calculateRemaining();this.onTick(e),e<=0&&(this.stop(),this.onExpired())},1e3)}stop(){null!==this.intervalId&&(clearInterval(this.intervalId),this.intervalId=null)}isRunning(){return null!==this.intervalId}}function g(e){let t="";for(let n=0;n<e.byteLength;n++)t+=String.fromCharCode(e[n]);return btoa(t).replace(/\+/g,"-").replace(/\//g,"_").replace(/=+$/,"")}function y(e){return g(new Uint8Array(e))}function f(e){const t=e.replace(/-/g,"+").replace(/_/g,"/"),n=t+"=".repeat((4-t.length%4)%4),i=atob(n),s=new Uint8Array(i.length);for(let e=0;e<i.length;e++)s[e]=i.charCodeAt(e);return s}function k(e){const t=f(e),n=new ArrayBuffer(t.length);return new Uint8Array(n).set(t),n}function v(e){const t=f(e);return Array.from(t)}class w{constructor(e,t=3e4){this.configCache=null,this.config=e,this.timeoutMs=t}get baseUrl(){return`${this.config.identityBaseUrl}/${this.config.accountId}`}async request(e,t,n){const i=`${this.baseUrl}${t}`,s={"Content-Type":"application/json",Accept:"application/json"},o=new AbortController,r=setTimeout(()=>o.abort(),this.timeoutMs);try{const t=await fetch(i,{method:e,headers:s,body:n?JSON.stringify(n):void 0,signal:o.signal}),r=await t.json();if(!t.ok){const e=r.error||{},n=e.message||r.message||"Request failed",i=e.code||r.code||"api_error";throw new x(n,i,t.status)}return r.data??r}catch(e){if(e instanceof Error&&"AbortError"===e.name)throw new x("Request timed out","timeout",0);throw e}finally{clearTimeout(r)}}async getConfig(){return this.configCache||(this.configCache=this.request("GET","/config")),this.configCache}preloadConfig(){this.configCache||(this.configCache=this.request("GET","/config"))}isConfigPreloaded(){return null!==this.configCache}async checkPasskey(e){return this.request("POST","/passkey/check",{email:e})}async sendTotp(e){return this.request("POST","/totp/send",{recipient:e.recipient,method:e.method})}async verifyTotp(e){return this.request("POST","/totp/verify",{kindling:e.kindling,pin:e.pin,recipient:e.recipient})}async startPasskeyRegister(e){return this.request("POST","/passkey/register",{email:e})}async completePasskeyRegister(e){const t=e.credential.response;return this.request("POST","/passkey/register/complete",{email:e.email,credential:{id:e.credential.id,rawId:y(e.credential.rawId),type:e.credential.type,response:{clientDataJSON:y(t.clientDataJSON),attestationObject:y(t.attestationObject)}}})}async startPasskeyVerify(e){return this.request("POST","/passkey/verify",{email:e})}async completePasskeyVerify(e){const t=e.credential.response;return this.request("POST","/passkey/verify/complete",{email:e.email,credential:{id:e.credential.id,rawId:y(e.credential.rawId),type:e.credential.type,response:{clientDataJSON:y(t.clientDataJSON),authenticatorData:y(t.authenticatorData),signature:y(t.signature),userHandle:t.userHandle?y(t.userHandle):null}}})}getSocialAuthUrl(e,t,n){const i=new URLSearchParams({redirect_uri:t,state:n});return`${this.baseUrl}/social/${e}?${i}`}getEnterpriseAuthUrl(e,t,n){const i=new URLSearchParams({redirect_uri:t,state:n});return`${this.baseUrl}/saml/${e}?${i}`}async sendSparkLink(e){return this.request("POST","/sparklink/send",{email:e,type:"verify_identity"})}async checkSparkLinkStatus(e){return this.request("GET",`/sparklink/status/${e}`)}}class x extends Error{constructor(e,t,n){super(e),this.name="IdentityApiError",this.code=t,this.statusCode=n}}const C={totp_email:{id:"totp_email",type:"totp",identityType:"email",name:"Email code",description:"Get a one-time code via email",icon:"email"},totp_sms:{id:"totp_sms",type:"totp",identityType:"phone",name:"Text message",description:"Get a one-time code via SMS",icon:"sms"},totp_voice:{id:"totp_voice",type:"totp",identityType:"phone",name:"Voice call",description:"Get a one-time code via phone call",icon:"phone"},passkey:{id:"passkey",type:"passkey",identityType:"email",name:"Passkey",description:"Use biometrics or security key",icon:"passkey"},sparklink:{id:"sparklink",type:"magic_link",identityType:"email",name:"SparkLink",description:"Get an instant sign-in magic link via email",icon:"link"},social_google:{id:"social_google",type:"social",identityType:"email",name:"Google",description:"Sign in with Google",icon:"google",provider:"google"},social_apple:{id:"social_apple",type:"social",identityType:"email",name:"Apple",description:"Sign in with Apple",icon:"apple",provider:"apple"},social_microsoft:{id:"social_microsoft",type:"social",identityType:"email",name:"Microsoft",description:"Sign in with Microsoft",icon:"microsoft",provider:"microsoft"},social_github:{id:"social_github",type:"social",identityType:"email",name:"GitHub",description:"Sign in with GitHub",icon:"github",provider:"github"},social_facebook:{id:"social_facebook",type:"social",identityType:"email",name:"Facebook",description:"Sign in with Facebook",icon:"facebook",provider:"facebook"},social_linkedin:{id:"social_linkedin",type:"social",identityType:"email",name:"LinkedIn",description:"Sign in with LinkedIn",icon:"linkedin",provider:"linkedin"},enterprise_okta:{id:"enterprise_okta",type:"enterprise",identityType:"email",name:"Okta",description:"Sign in with Okta SSO",icon:"okta",provider:"okta"},enterprise_entra:{id:"enterprise_entra",type:"enterprise",identityType:"email",name:"Microsoft Entra",description:"Sign in with Microsoft Entra ID",icon:"microsoft",provider:"entra"},enterprise_onelogin:{id:"enterprise_onelogin",type:"enterprise",identityType:"email",name:"OneLogin",description:"Sign in with OneLogin SSO",icon:"onelogin",provider:"onelogin"},enterprise_ping:{id:"enterprise_ping",type:"enterprise",identityType:"email",name:"Ping Identity",description:"Sign in with Ping Identity",icon:"ping",provider:"ping"},enterprise_jumpcloud:{id:"enterprise_jumpcloud",type:"enterprise",identityType:"email",name:"JumpCloud",description:"Sign in with JumpCloud SSO",icon:"jumpcloud",provider:"jumpcloud"},hris_bamboohr:{id:"hris_bamboohr",type:"hris",identityType:"email",name:"BambooHR",description:"Sign in with BambooHR",icon:"bamboohr",provider:"bamboohr"},hris_workday:{id:"hris_workday",type:"hris",identityType:"email",name:"Workday",description:"Sign in with Workday",icon:"workday",provider:"workday"},hris_adp:{id:"hris_adp",type:"hris",identityType:"email",name:"ADP",description:"Sign in with ADP",icon:"adp",provider:"adp"},hris_gusto:{id:"hris_gusto",type:"hris",identityType:"email",name:"Gusto",description:"Sign in with Gusto",icon:"gusto",provider:"gusto"},hris_rippling:{id:"hris_rippling",type:"hris",identityType:"email",name:"Rippling",description:"Sign in with Rippling",icon:"rippling",provider:"rippling"}};function E(e){return e.map(e=>C[e]).filter(e=>void 0!==e)}class S{constructor(){this._sdkConfig=null,this._viewState={view:"loading"},this._recipient="",this._identityType="email",this._passkey={hasPasskey:null,isFallbackMode:!1,pendingResult:null},this._totp={kindling:"",method:null},this.listeners=new Set}subscribe(e){return this.listeners.add(e),()=>this.listeners.delete(e)}notify(){for(const e of this.listeners)e(this._viewState)}get sdkConfig(){return this._sdkConfig}setConfig(e){this._sdkConfig=e}get accountId(){return this._sdkConfig?.accountId??""}getAvailableMethods(){if(!this._sdkConfig)return[];let e=E(this._sdkConfig.methods??[]);return e="phone"===this._identityType?e.filter(e=>"totp"===e.type&&"totp_sms"===e.id):e.filter(e=>"email"===e.identityType),e}isPasskeyEnabled(){return this._sdkConfig?.methods?.includes("passkey")??!1}get viewState(){return this._viewState}setViewState(e){this._viewState=e,this.notify()}get recipient(){return this._recipient}get identityType(){return this._identityType}setIdentity(e,t){this._recipient=e,this._identityType=t}getAllowedIdentityTypes(){return this._sdkConfig?.allowedIdentityTypes??["email"]}get passkey(){return this._passkey}setPasskeyStatus(e){this._passkey.hasPasskey=e}enablePasskeyFallback(){this._passkey.isFallbackMode=!0}setPendingResult(e){this._passkey.pendingResult=e}shouldShowPasskeyPrompt(){return"email"===this._identityType&&(!!this.isPasskeyEnabled()&&(!this.isPasskeyPromptDismissed()&&!0!==this._passkey.hasPasskey))}isPasskeyPromptDismissed(){return null!==function(e){const t=document.cookie.match(new RegExp(`(^| )${e}=([^;]+)`));return t?t[2]:null}(`sv_passkey_prompt_dismissed_${this.accountId}`)}dismissPasskeyPrompt(){!function(e,t,n){const i=new Date;i.setTime(i.getTime()+24*n*60*60*1e3);const s=`expires=${i.toUTCString()}`;document.cookie=`${e}=${t}; ${s}; path=/; SameSite=Lax`}(`sv_passkey_prompt_dismissed_${this.accountId}`,"1",30)}get totp(){return this._totp}setKindling(e){this._totp.kindling=e}setTotpMethod(e){this._totp.method=e}reset(){this._viewState={view:"loading"},this._recipient="",this._identityType="email",this._passkey.hasPasskey=null,this._passkey.isFallbackMode=!1,this._passkey.pendingResult=null,this._totp.kindling="",this._totp.method=null}}class T{constructor(e,t){this.api=e,this.state=t}async checkPasskey(){try{const e=await this.api.checkPasskey(this.state.recipient);return this.state.setPasskeyStatus(e.hasPasskey),{emailValid:e.email_valid,hasPasskey:e.hasPasskey}}catch(e){return console.warn("Passkey check failed:",e),this.state.setPasskeyStatus(null),null}}async register(){try{const e=await this.api.startPasskeyRegister(this.state.recipient),t={challenge:k(e.challenge),rp:{id:e.rpId,name:e.rpName},user:{id:k(e.userId??this.state.recipient),name:this.state.recipient,displayName:this.state.recipient},pubKeyCredParams:[{type:"public-key",alg:-7},{type:"public-key",alg:-257}],timeout:e.timeout,authenticatorSelection:{residentKey:"preferred",userVerification:"preferred"},attestation:"none"},n=await navigator.credentials.create({publicKey:t});if(!n)return{success:!1,error:"Failed to create passkey",errorType:"unknown"};const i=await this.api.completePasskeyRegister({email:this.state.recipient,credential:n});return this.state.setPasskeyStatus(!0),{success:!0,result:{token:i.token,identity:i.identity,identityType:i.identity_type}}}catch(e){return this.handleError(e)}}async verify(){try{const e=await this.api.startPasskeyVerify(this.state.recipient),t={challenge:k(e.challenge),rpId:e.rpId,timeout:e.timeout,userVerification:"preferred",allowCredentials:e.allowCredentials?.map(e=>({id:k(e.id),type:e.type,transports:["internal","hybrid","usb","ble","nfc"]}))},n=await navigator.credentials.get({publicKey:t});if(!n)return{success:!1,error:"Failed to verify passkey",errorType:"unknown"};const i=await this.api.completePasskeyVerify({email:this.state.recipient,credential:n});return{success:!0,result:{token:i.token,identity:i.identity,identityType:i.identity_type}}}catch(e){return this.handleError(e)}}handleError(e){const t=e instanceof Error?e.message:String(e);return t.includes("not allowed")||t.includes("cancelled")?{success:!1,error:"Authentication was cancelled. Please try again.",errorType:"cancelled"}:t.includes("No credentials")?{success:!1,error:"No passkey found. Create one to continue.",errorType:"not_found"}:{success:!1,error:t||"Passkey authentication failed",errorType:"unknown"}}}class B{constructor(e,t){this.api=e,this.state=t}async send(e){try{const t=await this.api.sendTotp({recipient:this.state.recipient,method:e});return this.state.setKindling(t.kindling),this.state.setTotpMethod(e),{success:!0,kindling:t.kindling,expiresAt:t.expires_at}}catch(e){return{success:!1,error:e instanceof Error?e.message:"Failed to send code"}}}async resend(){const e=this.state.totp.method;if(!e)return{success:!1,error:"No TOTP method set"};try{const t=await this.api.sendTotp({recipient:this.state.recipient,method:e});return this.state.setKindling(t.kindling),{success:!0,kindling:t.kindling,expiresAt:t.expires_at}}catch(e){return{success:!1,error:`Failed to resend: ${e instanceof Error?e.message:"Failed to resend code"}`}}}async verify(e){const t=this.state.totp.kindling;if(!t)return{success:!1,error:"No kindling available"};try{const n=await this.api.verifyTotp({kindling:t,pin:e,recipient:this.state.recipient});return n.verified&&n.token?{success:!0,result:{token:n.token,identity:n.identity??this.state.recipient,identityType:n.identity_type??this.state.identityType}}:(n.kindling&&this.state.setKindling(n.kindling),{success:!1,newKindling:n.kindling,retryAfter:n.retry_after,backoffExpires:n.expires_at,error:"Invalid code. Please try again."})}catch(e){return{success:!1,error:e instanceof Error?e.message:"Verification failed"}}}}class L{constructor(e,t){this.api=e,this.state=t}async send(){try{const e=await this.api.sendSparkLink(this.state.recipient);return{success:!0,sparkId:e.sparkId,expiresAt:e.expiresAt}}catch(e){return{success:!1,error:e instanceof Error?e.message:"Failed to send SparkLink"}}}async checkStatus(e){try{const t=await this.api.checkSparkLinkStatus(e);return{verified:t.verified,token:t.token,identity:t.identity,identityType:t.identityType}}catch{return{verified:!1}}}}const A="sparkvault-identity-styles";function P(e){if(document.getElementById(A))return e.branding,void function(e){const t=document.getElementById("sparkvault-identity-overlay");t&&(!1!==e?t.classList.add("sv-blur"):t.classList.remove("sv-blur"))}(e.backdropBlur);const t=document.createElement("style");t.id=A,t.textContent=function(e){const{branding:t,backdropBlur:n}=e,i="dark"===_(t),s=!1!==n,o={primary:"#4F46E5",primaryHover:"#4338CA",primaryLight:i?"rgba(99, 102, 241, 0.15)":"rgba(79, 70, 229, 0.08)",error:"#DC2626",errorLight:i?"rgba(220, 38, 38, 0.15)":"#FEF2F2",errorBorder:i?"rgba(220, 38, 38, 0.3)":"#FECACA",bg:i?"#0F0F0F":"#FFFFFF",bgSubtle:i?"#171717":"#FAFAFA",bgHover:i?"#1A1A1A":"#F5F5F5",bgInput:i?"#0F0F0F":"#FFFFFF",border:i?"#262626":"#E5E5E5",borderHover:i?"#404040":"#D4D4D4",borderFocus:"#4F46E5",textPrimary:i?"#FAFAFA":"#0A0A0A",textSecondary:i?"#A3A3A3":"#525252",textMuted:"#737373",textOnPrimary:"#FFFFFF",shadowSm:i?"0 1px 2px rgba(0, 0, 0, 0.4)":"0 1px 2px rgba(0, 0, 0, 0.04)",shadowLg:i?"0 8px 24px rgba(0, 0, 0, 0.6), 0 0 0 1px rgba(255, 255, 255, 0.05)":"0 8px 24px rgba(0, 0, 0, 0.12), 0 0 0 1px rgba(0, 0, 0, 0.04)"};return`\n /* ========================================\n OVERLAY & MODAL CONTAINER\n ======================================== */\n\n .sv-overlay {\n position: fixed;\n inset: 0;\n background: rgba(0, 0, 0, ${i?"0.7":"0.5"});\n display: flex;\n align-items: center;\n justify-content: center;\n z-index: 999999;\n padding: 16px;\n box-sizing: border-box;\n font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, sans-serif;\n -webkit-font-smoothing: antialiased;\n -moz-osx-font-smoothing: grayscale;\n }\n\n .sv-overlay.sv-blur {\n backdrop-filter: blur(${s?"8px":"0"});\n -webkit-backdrop-filter: blur(${s?"8px":"0"});\n }\n\n .sv-modal {\n background: ${o.bg};\n border-radius: 16px;\n box-shadow: ${o.shadowLg};\n width: 100%;\n max-width: 400px;\n max-height: calc(100vh - 32px);\n overflow: hidden;\n display: flex;\n flex-direction: column;\n color: ${o.textPrimary};\n }\n\n /* ========================================\n HEADER\n ======================================== */\n\n .sv-header {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 14px 20px;\n border-bottom: 1px solid ${o.border};\n background: ${o.bg};\n flex-shrink: 0;\n }\n\n .sv-header-title {\n display: flex;\n align-items: center;\n gap: 12px;\n min-width: 0;\n }\n\n .sv-logo {\n height: 28px;\n width: auto;\n max-width: 140px;\n object-fit: contain;\n flex-shrink: 0;\n }\n\n .sv-company-name {\n font-size: 15px;\n font-weight: 600;\n letter-spacing: -0.01em;\n margin: 0;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n }\n\n .sv-close-btn {\n flex-shrink: 0;\n width: 32px;\n height: 32px;\n display: flex;\n align-items: center;\n justify-content: center;\n background: transparent;\n border: none;\n border-radius: 8px;\n cursor: pointer;\n color: ${o.textMuted};\n transition: background 0.15s ease, color 0.15s ease;\n }\n\n .sv-close-btn:hover {\n background: ${o.bgHover};\n color: ${o.textPrimary};\n }\n\n .sv-close-btn:focus-visible {\n outline: 2px solid ${o.borderFocus};\n outline-offset: 2px;\n }\n\n .sv-close-btn:active {\n transform: scale(0.96);\n }\n\n /* ========================================\n BODY\n ======================================== */\n\n .sv-body {\n padding: 20px;\n overflow-y: auto;\n flex: 1;\n }\n\n /* ========================================\n TYPOGRAPHY\n ======================================== */\n\n .sv-title {\n font-size: 18px;\n font-weight: 600;\n letter-spacing: -0.02em;\n line-height: 1.3;\n margin: 0 0 6px 0;\n text-align: center;\n color: ${o.textPrimary};\n }\n\n .sv-subtitle {\n font-size: 14px;\n font-weight: 400;\n line-height: 1.5;\n color: ${o.textSecondary};\n margin: 0 0 16px 0;\n text-align: center;\n }\n\n .sv-subtitle strong {\n color: ${o.textPrimary};\n font-weight: 500;\n }\n\n /* ========================================\n FORM ELEMENTS\n ======================================== */\n\n .sv-form-group {\n margin-bottom: 16px;\n }\n\n .sv-label {\n display: block;\n font-size: 13px;\n font-weight: 500;\n letter-spacing: -0.005em;\n margin-bottom: 6px;\n color: ${o.textPrimary};\n }\n\n .sv-input {\n width: 100%;\n padding: 10px 12px;\n font-size: 15px;\n font-weight: 400;\n line-height: 1.4;\n border: 1px solid ${o.border};\n border-radius: 8px;\n background: ${o.bgInput};\n color: ${o.textPrimary};\n box-sizing: border-box;\n transition: border-color 0.15s ease, box-shadow 0.15s ease;\n }\n\n .sv-input:hover:not(:focus):not(:disabled) {\n border-color: ${o.borderHover};\n }\n\n .sv-input:focus {\n outline: none;\n border-color: ${o.borderFocus};\n box-shadow: 0 0 0 3px ${o.primaryLight};\n }\n\n .sv-input::placeholder {\n color: ${o.textMuted};\n }\n\n .sv-input:disabled {\n opacity: 0.5;\n cursor: not-allowed;\n }\n\n .sv-input.sv-input-error,\n .sv-input.sv-email-input-error {\n border-color: ${o.error};\n }\n\n .sv-input.sv-input-error:focus,\n .sv-input.sv-email-input-error:focus {\n box-shadow: 0 0 0 3px rgba(220, 38, 38, 0.1);\n }\n\n /* ========================================\n BUTTONS\n ======================================== */\n\n .sv-btn {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n gap: 8px;\n width: 100%;\n padding: 10px 16px;\n font-size: 14px;\n font-weight: 500;\n letter-spacing: -0.005em;\n line-height: 1.4;\n border: none;\n border-radius: 8px;\n cursor: pointer;\n transition: background 0.15s ease, transform 0.1s ease, box-shadow 0.15s ease;\n box-sizing: border-box;\n }\n\n .sv-btn:focus-visible {\n outline: 2px solid ${o.borderFocus};\n outline-offset: 2px;\n }\n\n .sv-btn:disabled {\n opacity: 0.5;\n cursor: not-allowed;\n }\n\n .sv-btn:active:not(:disabled) {\n transform: scale(0.98);\n }\n\n /* Primary Button */\n .sv-btn-primary,\n .sv-btn-email-primary {\n background: ${o.primary};\n color: ${o.textOnPrimary};\n box-shadow: ${o.shadowSm};\n }\n\n .sv-btn-primary:hover:not(:disabled),\n .sv-btn-email-primary:hover:not(:disabled) {\n background: ${o.primaryHover};\n }\n\n /* Secondary Button */\n .sv-btn-secondary {\n background: ${o.bgSubtle};\n color: ${o.textPrimary};\n border: 1px solid ${o.border};\n }\n\n .sv-btn-secondary:hover:not(:disabled) {\n background: ${o.bgHover};\n border-color: ${o.borderHover};\n }\n\n /* Method Button */\n .sv-btn-method {\n background: ${o.bg};\n border: 1px solid ${o.border};\n color: ${o.textPrimary};\n text-align: left;\n padding: 12px 14px;\n margin-bottom: 8px;\n }\n\n .sv-btn-method:hover:not(:disabled) {\n background: ${o.bgSubtle};\n border-color: ${o.borderHover};\n }\n\n .sv-btn-method:last-child {\n margin-bottom: 0;\n }\n\n /* Error Buttons */\n .sv-btn-error-primary {\n background: ${o.error};\n color: ${o.textOnPrimary};\n box-shadow: ${o.shadowSm};\n }\n\n .sv-btn-error-primary:hover:not(:disabled) {\n background: #B91C1C;\n }\n\n .sv-btn-error-secondary {\n background: ${o.bgSubtle};\n color: ${o.textSecondary};\n border: 1px solid ${o.border};\n }\n\n .sv-btn-error-secondary:hover:not(:disabled) {\n background: ${o.bgHover};\n color: ${o.textPrimary};\n }\n\n /* ========================================\n METHOD SELECTION\n ======================================== */\n\n .sv-method-content {\n display: flex;\n align-items: center;\n gap: 12px;\n width: 100%;\n }\n\n .sv-method-icon {\n width: 20px;\n height: 20px;\n flex-shrink: 0;\n display: flex;\n align-items: center;\n justify-content: center;\n color: ${o.textSecondary};\n }\n\n .sv-method-icon svg {\n width: 20px;\n height: 20px;\n }\n\n .sv-method-text {\n flex: 1;\n min-width: 0;\n }\n\n .sv-method-name {\n font-weight: 500;\n font-size: 14px;\n color: ${o.textPrimary};\n }\n\n .sv-method-description {\n font-size: 12px;\n color: ${o.textMuted};\n margin-top: 1px;\n }\n\n /* ========================================\n TOTP INPUT\n ======================================== */\n\n .sv-totp-input-group {\n display: flex;\n gap: 8px;\n justify-content: center;\n margin-bottom: 16px;\n }\n\n .sv-totp-digit {\n width: 44px;\n height: 52px;\n text-align: center;\n font-size: 20px;\n font-weight: 600;\n letter-spacing: 0;\n border: 1px solid ${o.border};\n border-radius: 8px;\n background: ${o.bgInput};\n color: ${o.textPrimary};\n box-sizing: border-box;\n transition: border-color 0.15s ease, box-shadow 0.15s ease;\n }\n\n .sv-totp-digit:hover:not(:focus):not(:disabled) {\n border-color: ${o.borderHover};\n }\n\n .sv-totp-digit:focus {\n outline: none;\n border-color: ${o.borderFocus};\n box-shadow: 0 0 0 3px ${o.primaryLight};\n }\n\n .sv-totp-digit:disabled {\n opacity: 0.5;\n cursor: not-allowed;\n }\n\n /* ========================================\n BACK LINK\n ======================================== */\n\n .sv-back-link {\n display: inline-flex;\n align-items: center;\n gap: 4px;\n color: ${o.textSecondary};\n font-size: 13px;\n font-weight: 500;\n text-decoration: none;\n cursor: pointer;\n background: none;\n border: none;\n padding: 0;\n margin-bottom: 16px;\n transition: color 0.15s ease;\n }\n\n .sv-back-link:hover:not(:disabled) {\n color: ${o.primary};\n }\n\n .sv-back-link:disabled {\n opacity: 0.5;\n cursor: not-allowed;\n }\n\n .sv-back-link svg {\n width: 14px;\n height: 14px;\n }\n\n /* ========================================\n ERROR MESSAGE\n ======================================== */\n\n .sv-error {\n background: ${o.errorLight};\n border: 1px solid ${o.errorBorder};\n color: ${o.error};\n padding: 10px 12px;\n border-radius: 8px;\n font-size: 13px;\n font-weight: 450;\n margin-bottom: 16px;\n }\n\n /* ========================================\n LOADING STATE\n ======================================== */\n\n .sv-loading {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n padding: 48px 24px;\n gap: 16px;\n }\n\n .sv-spinner {\n width: 28px;\n height: 28px;\n border: 2.5px solid ${o.border};\n border-top-color: ${o.primary};\n border-radius: 50%;\n animation: sv-spin 0.7s linear infinite;\n }\n\n .sv-loading-text {\n font-size: 14px;\n color: ${o.textSecondary};\n margin: 0;\n }\n\n @keyframes sv-spin {\n to { transform: rotate(360deg); }\n }\n\n /* ========================================\n FOOTER\n ======================================== */\n\n .sv-footer {\n padding: 10px 20px;\n border-top: 1px solid ${o.border};\n text-align: center;\n background: ${o.bgSubtle};\n flex-shrink: 0;\n }\n\n .sv-footer-text {\n font-size: 10px;\n color: ${o.textMuted};\n letter-spacing: 0.02em;\n }\n\n .sv-footer-link {\n color: ${o.textSecondary};\n text-decoration: none;\n font-weight: 500;\n transition: color 0.15s ease;\n }\n\n .sv-footer-link:hover {\n color: ${o.primary};\n }\n\n /* ========================================\n IDENTITY INPUT VIEW\n ======================================== */\n\n .sv-email-view {\n display: flex;\n flex-direction: column;\n }\n\n .sv-email-header {\n margin-bottom: 16px;\n }\n\n .sv-email-subtitle {\n font-size: 14px;\n font-weight: 500;\n line-height: 1.4;\n color: ${o.textSecondary};\n margin: 0;\n }\n\n .sv-email-error-container {\n width: 100%;\n }\n\n .sv-email-form {\n width: 100%;\n }\n\n .sv-email-input-wrapper {\n margin-bottom: 14px;\n }\n\n .sv-email-label {\n display: block;\n font-size: 13px;\n font-weight: 500;\n letter-spacing: -0.005em;\n margin-bottom: 6px;\n color: ${o.textPrimary};\n }\n\n .sv-email-input {\n width: 100%;\n padding: 10px 12px;\n font-size: 15px;\n font-weight: 400;\n line-height: 1.4;\n border: 1px solid ${o.border};\n border-radius: 8px;\n background: ${o.bgInput};\n color: ${o.textPrimary};\n box-sizing: border-box;\n transition: border-color 0.15s ease, box-shadow 0.15s ease;\n }\n\n .sv-email-input:hover:not(:focus):not(:disabled) {\n border-color: ${o.borderHover};\n }\n\n .sv-email-input:focus {\n outline: none;\n border-color: ${o.borderFocus};\n box-shadow: 0 0 0 3px ${o.primaryLight};\n }\n\n .sv-email-input::placeholder {\n color: ${o.textMuted};\n }\n\n .sv-email-input-error {\n border-color: ${o.error};\n }\n\n .sv-email-input-error:focus {\n box-shadow: 0 0 0 3px rgba(220, 38, 38, 0.1);\n }\n\n /* ========================================\n ERROR VIEW\n ======================================== */\n\n .sv-error-view {\n display: flex;\n flex-direction: column;\n align-items: center;\n text-align: center;\n }\n\n .sv-error-icon-container {\n margin-bottom: 16px;\n }\n\n .sv-error-icon {\n width: 48px;\n height: 48px;\n }\n\n .sv-error-content {\n margin-bottom: 24px;\n }\n\n .sv-error-title {\n font-size: 18px;\n font-weight: 600;\n letter-spacing: -0.02em;\n margin: 0 0 8px 0;\n color: ${o.textPrimary};\n }\n\n .sv-error-message {\n font-size: 14px;\n line-height: 1.5;\n color: ${o.textSecondary};\n margin: 0 0 16px 0;\n }\n\n .sv-error-code-badge {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n padding: 6px 10px;\n background: ${o.errorLight};\n border: 1px solid ${o.errorBorder};\n border-radius: 6px;\n }\n\n .sv-error-code-label {\n font-size: 10px;\n font-weight: 600;\n color: ${i?"#F87171":"#991B1B"};\n text-transform: uppercase;\n letter-spacing: 0.05em;\n }\n\n .sv-error-code-value {\n font-size: 11px;\n font-family: ui-monospace, SFMono-Regular, 'SF Mono', Menlo, Monaco, 'Cascadia Mono', monospace;\n color: ${o.error};\n font-weight: 500;\n }\n\n .sv-error-actions {\n display: flex;\n gap: 10px;\n width: 100%;\n }\n\n .sv-error-actions .sv-btn {\n flex: 1;\n }\n\n /* ========================================\n TOTP VIEW\n ======================================== */\n\n .sv-resend-container {\n text-align: center;\n margin-top: 16px;\n }\n\n /* ========================================\n PASSKEY VIEW\n ======================================== */\n\n .sv-passkey-icon {\n width: 48px;\n height: 48px;\n margin: 0 auto 12px;\n display: block;\n }\n\n .sv-passkey-description {\n font-size: 13px;\n color: ${o.textMuted};\n text-align: center;\n margin: 0 0 16px 0;\n line-height: 1.4;\n }\n\n .sv-fallback-link {\n display: block;\n width: 100%;\n text-align: center;\n color: ${o.textSecondary};\n font-size: 13px;\n font-weight: 400;\n text-decoration: none;\n cursor: pointer;\n background: none;\n border: none;\n padding: 12px 0 0 0;\n margin-top: 8px;\n transition: color 0.15s ease;\n }\n\n .sv-fallback-link:hover {\n color: ${o.primary};\n text-decoration: underline;\n }\n\n /* ========================================\n PASSKEY PROMPT VIEW\n ======================================== */\n\n .sv-passkey-prompt-icon {\n width: 48px;\n height: 48px;\n margin: 0 auto 12px;\n display: block;\n color: ${o.primary};\n }\n\n .sv-passkey-prompt-benefits {\n background: ${o.bgSubtle};\n border-radius: 8px;\n padding: 10px 14px;\n margin-bottom: 16px;\n }\n\n .sv-passkey-prompt-benefits ul {\n list-style: none;\n margin: 0;\n padding: 0;\n }\n\n .sv-passkey-prompt-benefits li {\n display: flex;\n align-items: center;\n gap: 10px;\n font-size: 13px;\n color: ${o.textSecondary};\n padding: 6px 0;\n }\n\n .sv-passkey-prompt-benefits li svg {\n width: 16px;\n height: 16px;\n color: ${o.primary};\n flex-shrink: 0;\n }\n\n .sv-skip-link {\n display: block;\n width: 100%;\n text-align: center;\n color: ${o.textMuted};\n font-size: 13px;\n font-weight: 400;\n text-decoration: none;\n cursor: pointer;\n background: none;\n border: none;\n padding: 12px 0 0 0;\n transition: color 0.15s ease;\n }\n\n .sv-skip-link:hover {\n color: ${o.textSecondary};\n text-decoration: underline;\n }\n\n /* ========================================\n SPARKLINK WAITING VIEW\n ======================================== */\n\n .sv-sparklink-icon-container {\n display: flex;\n justify-content: center;\n margin-bottom: 16px;\n }\n\n .sv-sparklink-icon {\n width: 56px;\n height: 56px;\n color: ${o.primary};\n background: ${o.primaryLight};\n padding: 14px;\n border-radius: 50%;\n box-sizing: content-box;\n }\n\n .sv-sparklink-waiting {\n display: flex;\n align-items: center;\n justify-content: center;\n gap: 12px;\n background: ${o.bgSubtle};\n border-radius: 10px;\n padding: 14px 18px;\n margin: 16px 0;\n }\n\n .sv-spinner-small {\n width: 18px;\n height: 18px;\n border: 2px solid ${o.border};\n border-top-color: ${o.primary};\n border-radius: 50%;\n animation: sv-spin 0.7s linear infinite;\n flex-shrink: 0;\n }\n\n .sv-sparklink-waiting-text {\n font-size: 13px;\n font-weight: 450;\n color: ${o.textSecondary};\n }\n\n .sv-sparklink-countdown {\n display: flex;\n align-items: center;\n justify-content: center;\n gap: 6px;\n font-size: 13px;\n color: ${o.textMuted};\n margin-bottom: 20px;\n }\n\n .sv-sparklink-countdown-time {\n font-family: ui-monospace, SFMono-Regular, 'SF Mono', Menlo, Monaco, 'Cascadia Mono', monospace;\n font-weight: 600;\n font-size: 14px;\n color: ${o.textPrimary};\n min-width: 40px;\n }\n\n .sv-sparklink-fallback {\n text-align: center;\n margin-top: 12px;\n padding-top: 16px;\n border-top: 1px solid ${o.border};\n }\n\n .sv-sparklink-fallback .sv-back-link {\n margin-bottom: 0;\n font-size: 12px;\n color: ${o.textMuted};\n }\n\n .sv-sparklink-fallback .sv-back-link:hover:not(:disabled) {\n color: ${o.textSecondary};\n }\n\n /* ========================================\n DIVIDER\n ======================================== */\n\n .sv-divider {\n display: flex;\n align-items: center;\n margin: 20px 0;\n }\n\n .sv-divider::before,\n .sv-divider::after {\n content: '';\n flex: 1;\n height: 1px;\n background: ${o.border};\n }\n\n .sv-divider-text {\n padding: 0 12px;\n font-size: 12px;\n color: ${o.textMuted};\n }\n\n /* ========================================\n ACCESSIBILITY\n ======================================== */\n\n .sv-sr-only {\n position: absolute;\n width: 1px;\n height: 1px;\n padding: 0;\n margin: -1px;\n overflow: hidden;\n clip: rect(0, 0, 0, 0);\n white-space: nowrap;\n border: 0;\n }\n\n /* ========================================\n INLINE CONTAINER\n ======================================== */\n\n .sv-inline-container {\n display: flex;\n flex-direction: column;\n background: ${o.bg};\n color: ${o.textPrimary};\n font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, sans-serif;\n -webkit-font-smoothing: antialiased;\n -moz-osx-font-smoothing: grayscale;\n border-radius: 12px;\n border: 1px solid ${o.border};\n overflow: hidden;\n }\n\n .sv-inline-header {\n border-bottom: 1px solid ${o.border};\n }\n\n .sv-inline-body {\n min-height: 200px;\n }\n\n /* ========================================\n RESPONSIVE\n ======================================== */\n\n @media (max-width: 480px) {\n .sv-modal {\n max-width: 100%;\n max-height: 100%;\n border-radius: 0;\n }\n\n .sv-overlay {\n padding: 0;\n }\n\n .sv-body {\n padding: 20px;\n }\n\n .sv-totp-digit {\n width: 40px;\n height: 48px;\n font-size: 18px;\n }\n\n .sv-error-actions {\n flex-direction: column;\n }\n }\n\n @media (max-width: 360px) {\n .sv-totp-input-group {\n gap: 6px;\n }\n\n .sv-totp-digit {\n width: 36px;\n height: 44px;\n font-size: 16px;\n }\n }\n `}(e),document.head.appendChild(t)}function _(e){return e?.themeMode??"light"}function I(e,t=16,n=16){const i=document.createElementNS("http://www.w3.org/2000/svg","svg");return i.setAttribute("viewBox",e),i.setAttribute("width",String(t)),i.setAttribute("height",String(n)),i.setAttribute("fill","none"),i.setAttribute("xmlns","http://www.w3.org/2000/svg"),i}function $(e,t={}){const n=document.createElementNS("http://www.w3.org/2000/svg","path");n.setAttribute("d",e);for(const[e,i]of Object.entries(t))n.setAttribute(e,i);return n}function H(e,t,n,i={}){const s=document.createElementNS("http://www.w3.org/2000/svg","circle");s.setAttribute("cx",String(e)),s.setAttribute("cy",String(t)),s.setAttribute("r",String(n));for(const[e,t]of Object.entries(i))s.setAttribute(e,t);return s}function F(){const e=I("0 0 16 16");return e.appendChild($("M13.25 4.75L6 12 2.75 8.75",{stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round"})),e}function M(){const e=I("0 0 16 16");return e.appendChild($("M10 12L6 8L10 4",{stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round"})),e}function N(){const e=I("0 0 20 20",20,20);return e.appendChild($("M15 5L5 15M5 5L15 15",{stroke:"currentColor","stroke-width":"1.5","stroke-linecap":"round"})),e}function R(){const e=I("0 0 56 56",56,56);e.classList.add("sv-passkey-icon"),e.appendChild(H(28,28,26,{fill:"#EEF2FF",stroke:"#E0E7FF","stroke-width":"1"}));const t=document.createElementNS("http://www.w3.org/2000/svg","g");return t.setAttribute("transform","translate(16, 16)"),t.appendChild($("M12 8c-2.21 0-4 1.79-4 4 0 1.56.9 2.93 2.21 3.6L10 20v2h4v-2l-.21-4.4C15.1 14.93 16 13.56 16 12c0-2.21-1.79-4-4-4zm0 6c-1.1 0-2-.9-2-2s.9-2 2-2 2 .9 2 2-.9 2-2 2z",{fill:"#4F46E5"})),e.appendChild(t),e}function O(e){switch(e){case"email":default:return z();case"phone":return function(){const e=I("0 0 20 20",20,20);return e.setAttribute("stroke","currentColor"),e.setAttribute("stroke-width","1.5"),e.setAttribute("stroke-linecap","round"),e.setAttribute("stroke-linejoin","round"),e.appendChild($("M18 14v2.5a1.5 1.5 0 01-1.64 1.5 14.85 14.85 0 01-6.47-2.3 14.63 14.63 0 01-4.5-4.5A14.85 14.85 0 013.1 4.64 1.5 1.5 0 014.59 3H7.1a1.5 1.5 0 011.5 1.29 9.63 9.63 0 00.52 2.11 1.5 1.5 0 01-.34 1.58l-.95.95a12 12 0 004.5 4.5l.95-.95a1.5 1.5 0 011.58-.34 9.63 9.63 0 002.11.52A1.5 1.5 0 0118 14z")),e}();case"fingerprint":return function(){const e=I("0 0 20 20",20,20);return e.setAttribute("stroke","currentColor"),e.setAttribute("stroke-width","1.5"),e.setAttribute("stroke-linecap","round"),e.setAttribute("stroke-linejoin","round"),e.appendChild($("M2 10c0-4.42 3.58-8 8-8 2.65 0 5 1.29 6.47 3.28")),e.appendChild($("M4 16.58c.42-.35.79-.76 1.1-1.22")),e.appendChild($("M14.41 17.51c.09-.45.32-1.73.38-2.26")),e.appendChild($("M10 8.33a1.5 1.5 0 00-1.5 1.5c0 .77-.08 1.88-.2 3")),e.appendChild($("M7.21 18.33c.16-.5.34-1 .43-1.5")),e.appendChild($("M11.67 10.93c0 1.79 0 4.79-.75 6.65")),e.appendChild($("M17.33 13.33c.15-1.5.1-4.02 0-4.5")),e.appendChild($("M7.5 5.67a4.5 4.5 0 016.75 3.9c0 .35 0 .88-.02 1.5")),e}();case"link":return function(){const e=I("0 0 20 20",20,20);return e.setAttribute("stroke","currentColor"),e.setAttribute("stroke-width","1.5"),e.setAttribute("stroke-linecap","round"),e.setAttribute("stroke-linejoin","round"),e.appendChild($("M8.33 10.83a3.75 3.75 0 005.66.41l2.25-2.25a3.75 3.75 0 00-5.3-5.3l-1.29 1.28")),e.appendChild($("M11.67 9.17a3.75 3.75 0 00-5.66-.41l-2.25 2.25a3.75 3.75 0 005.3 5.3l1.28-1.28")),e}();case"google":return function(){const e=I("0 0 20 20",20,20);return e.appendChild($("M18.8 10.21c0-.65-.06-1.28-.17-1.88H10v3.55h4.93c-.21 1.14-.87 2.11-1.84 2.76v2.3h2.98c1.73-1.6 2.73-3.96 2.73-6.73z",{fill:"#4285F4"})),e.appendChild($("M10 19.17c2.48 0 4.55-.82 6.07-2.23l-2.98-2.3c-.82.55-1.86.88-3.09.88-2.38 0-4.4-1.6-5.13-3.77H1.82v2.37c1.52 3.02 4.6 5.05 8.18 5.05z",{fill:"#34A853"})),e.appendChild($("M4.87 11.74c-.18-.55-.29-1.14-.29-1.74s.1-1.19.29-1.74V5.89H1.82c-.6 1.23-.94 2.6-.94 4.11s.34 2.88.94 4.11l3.05-2.37z",{fill:"#FBBC05"})),e.appendChild($("M10 4.48c1.35 0 2.55.47 3.5 1.37l2.63-2.63C14.53 1.74 12.47.83 10 .83c-3.58 0-6.66 2.03-8.18 5.05l3.05 2.37c.72-2.17 2.75-3.77 5.13-3.77z",{fill:"#EA4335"})),e}();case"apple":return function(){const e=I("0 0 20 20",20,20);return e.setAttribute("fill","currentColor"),e.appendChild($("M14.21 16.9c-.82.79-1.71.67-2.57.29-.91-.38-1.74-.4-2.7 0-1.2.51-1.83.37-2.55-.29C2.7 12.71 3.3 6.33 7.54 6.09c1.13.06 1.91.61 2.57.66.98-.2 1.92-.78 2.97-.7 1.26.1 2.21.6 2.83 1.5-2.6 1.56-1.98 4.99.4 5.94-.48 1.25-1.09 2.49-2.11 3.41h.01zM10.02 6.04c-.12-1.86 1.38-3.39 3.11-3.54.24 2.15-1.95 3.75-3.11 3.54z")),e}();case"microsoft":return function(){const e=I("0 0 20 20",20,20);return e.appendChild($("M1 1h8.33v8.33H1z",{fill:"#F25022"})),e.appendChild($("M1 10.67h8.33V19H1z",{fill:"#00A4EF"})),e.appendChild($("M10.67 1H19v8.33h-8.33z",{fill:"#7FBA00"})),e.appendChild($("M10.67 10.67H19V19h-8.33z",{fill:"#FFB900"})),e}();case"github":return function(){const e=I("0 0 20 20",20,20);return e.setAttribute("fill","currentColor"),e.appendChild($("M10 0C4.48 0 0 4.48 0 10c0 4.42 2.86 8.17 6.84 9.49.5.09.68-.22.68-.48 0-.24-.01-1.02-.01-1.86-2.51.46-3.16-.61-3.36-1.18-.11-.29-.6-1.18-1.02-1.41-.35-.19-.85-.65-.01-.66.79-.01 1.35.72 1.54 1.02.9 1.51 2.34 1.09 2.91.83.09-.65.35-1.09.64-1.34-2.22-.25-4.55-1.11-4.55-4.94 0-1.09.39-1.99 1.02-2.69-.1-.25-.45-1.27.1-2.65 0 0 .84-.27 2.75 1.02.8-.22 1.65-.33 2.5-.33s1.7.11 2.5.33c1.91-1.3 2.75-1.02 2.75-1.02.55 1.38.2 2.4.1 2.65.64.7 1.02 1.59 1.02 2.69 0 3.84-2.34 4.69-4.57 4.94.36.31.67.91.67 1.85 0 1.34-.01 2.41-.01 2.75 0 .27.18.58.69.48C17.14 18.16 20 14.42 20 10c0-5.52-4.48-10-10-10z")),e}();case"facebook":return function(){const e=I("0 0 20 20",20,20);return e.appendChild($("M20 10.06c0-5.52-4.48-10-10-10S0 4.53 0 10.06c0 4.99 3.66 9.13 8.44 9.88v-6.99H5.9v-2.89h2.54V7.85c0-2.51 1.49-3.89 3.78-3.89 1.09 0 2.24.2 2.24.2v2.46h-1.26c-1.24 0-1.63.77-1.63 1.56v1.88h2.77l-.44 2.89h-2.33v6.99c4.78-.75 8.44-4.89 8.44-9.88z",{fill:"#1877F2"})),e}();case"linkedin":return function(){const e=I("0 0 20 20",20,20);return e.appendChild($("M17.04 17.04h-2.96v-4.64c0-1.11-.02-2.53-1.54-2.53-1.55 0-1.78 1.2-1.78 2.45v4.73H7.8V7.5h2.84v1.3h.04c.4-.75 1.36-1.54 2.81-1.54 3 0 3.56 1.98 3.56 4.55v5.24zM4.45 6.19c-.95 0-1.72-.77-1.72-1.72s.77-1.72 1.72-1.72 1.72.77 1.72 1.72-.77 1.72-1.72 1.72zm1.48 10.85H2.96V7.5h2.97v9.54zM18.52 0H1.47C.66 0 0 .65 0 1.44v17.12c0 .79.66 1.44 1.48 1.44h17.04c.82 0 1.48-.65 1.48-1.44V1.44c0-.79-.66-1.44-1.48-1.44z",{fill:"#0A66C2"})),e}();case"building":return function(){const e=I("0 0 20 20",20,20);return e.setAttribute("stroke","currentColor"),e.setAttribute("stroke-width","1.5"),e.setAttribute("stroke-linecap","round"),e.setAttribute("stroke-linejoin","round"),e.appendChild($("M2.5 17.5h15")),e.appendChild($("M4.17 17.5V5.83L10.83 2.5v15")),e.appendChild($("M15.83 17.5V9.17l-5-3.33")),e.appendChild($("M7.5 7.5v.01")),e.appendChild($("M7.5 10v.01")),e.appendChild($("M7.5 12.5v.01")),e.appendChild($("M7.5 15v.01")),e}();case"users":return function(){const e=I("0 0 20 20",20,20);return e.setAttribute("stroke","currentColor"),e.setAttribute("stroke-width","1.5"),e.setAttribute("stroke-linecap","round"),e.setAttribute("stroke-linejoin","round"),e.appendChild($("M14.17 17.5v-1.67a3.33 3.33 0 00-3.34-3.33H4.17a3.33 3.33 0 00-3.34 3.33v1.67")),e.appendChild(H(7.5,5.83,3.33,{stroke:"currentColor","stroke-width":"1.5",fill:"none"})),e.appendChild($("M19.17 17.5v-1.67a3.33 3.33 0 00-2.5-3.22")),e.appendChild($("M13.33 2.6a3.33 3.33 0 010 6.46")),e}()}}function z(){const e=I("0 0 20 20",20,20);return e.setAttribute("stroke","currentColor"),e.setAttribute("stroke-width","1.5"),e.setAttribute("stroke-linecap","round"),e.setAttribute("stroke-linejoin","round"),e.appendChild($("M3 4h14c.55 0 1 .45 1 1v10c0 .55-.45 1-1 1H3c-.55 0-1-.45-1-1V5c0-.55.45-1 1-1z")),e.appendChild($("M18 5l-8 5.5L2 5")),e}const D={companyName:"",logoLight:null,logoDark:null};class V{constructor(){this.elements=null,this.onCloseCallback=null,this.keydownHandler=null,this.overlayClickHandler=null,this.closeBtnClickHandler=null,this.closeBtn=null,this.backdropBlur=!0,this.effectiveTheme="light",this.headerElement=null}createLoading(e,t){return this.create({branding:D,backdropBlur:e.backdropBlur},t)}updateBranding(e){if(!this.elements)return;this.effectiveTheme=_(e);const t=this.createHeader(e);this.headerElement?.parentNode&&this.headerElement.parentNode.replaceChild(t,this.headerElement),this.headerElement=t}updateBackdropBlur(e){this.elements&&(this.backdropBlur=e,e?this.elements.overlay.classList.add("sv-blur"):this.elements.overlay.classList.remove("sv-blur"))}create(e,t){if(this.elements)return this.elements;this.onCloseCallback=t,this.backdropBlur=!1!==e.backdropBlur,this.effectiveTheme=_(e.branding);P({branding:e.branding,backdropBlur:e.backdropBlur});const n=document.createElement("div");n.id="sparkvault-identity-overlay",n.className=this.backdropBlur?"sv-overlay sv-blur":"sv-overlay",n.setAttribute("role","dialog"),n.setAttribute("aria-modal","true"),n.setAttribute("aria-labelledby","sv-modal-title");const i=document.createElement("div");i.id="sparkvault-identity-modal",i.className="sv-modal";const s=this.createHeader(e.branding);this.headerElement=s;const o=document.createElement("div");o.className="sv-body";const r=document.createElement("div");r.className="sv-footer";const a=document.createElement("span");a.className="sv-footer-text",a.appendChild(document.createTextNode("Secured by "));const l=document.createElement("a");l.href="https://sparkvault.com",l.target="_blank",l.rel="noopener noreferrer",l.className="sv-footer-link",l.textContent="SparkVault",a.appendChild(l),r.appendChild(a),i.appendChild(s),i.appendChild(o),i.appendChild(r),n.appendChild(i),this.overlayClickHandler=e=>{e.target===n&&this.handleClose()},n.addEventListener("click",this.overlayClickHandler),this.keydownHandler=e=>{"Escape"===e.key&&this.handleClose()},document.addEventListener("keydown",this.keydownHandler),document.body.appendChild(n),document.body.style.overflow="hidden",this.elements={overlay:n,modal:i,header:s,body:o,footer:r};const c=o.querySelector("input, button");return c instanceof HTMLElement&&c.focus(),this.elements}createHeader(e){const t=document.createElement("div");t.className="sv-header";const n=document.createElement("div");n.className="sv-header-title";const i="dark"===this.effectiveTheme?e.logoDark||e.logoLight:e.logoLight||e.logoDark;if(i){const t=document.createElement("img");t.className="sv-logo",t.src=i,t.alt=e.companyName,n.appendChild(t);const s=document.createElement("span");s.className="sv-sr-only",s.id="sv-modal-title",s.textContent=e.companyName,n.appendChild(s)}else{const t=document.createElement("h2");t.className="sv-company-name",t.id="sv-modal-title",t.textContent=e.companyName,n.appendChild(t)}return this.closeBtn=document.createElement("button"),this.closeBtn.className="sv-close-btn",this.closeBtn.setAttribute("aria-label","Close"),this.closeBtn.appendChild(N()),this.closeBtnClickHandler=()=>this.handleClose(),this.closeBtn.addEventListener("click",this.closeBtnClickHandler),t.appendChild(n),t.appendChild(this.closeBtn),t}handleClose(){this.onCloseCallback&&this.onCloseCallback()}getBody(){return this.elements?.body??null}isOpen(){return null!==this.elements}destroy(){this.keydownHandler&&(document.removeEventListener("keydown",this.keydownHandler),this.keydownHandler=null),this.elements&&this.overlayClickHandler&&(this.elements.overlay.removeEventListener("click",this.overlayClickHandler),this.overlayClickHandler=null),this.closeBtn&&this.closeBtnClickHandler&&(this.closeBtn.removeEventListener("click",this.closeBtnClickHandler),this.closeBtnClickHandler=null,this.closeBtn=null),this.elements&&(this.elements.overlay.remove(),this.elements=null),this.headerElement=null,document.body.style.overflow="",this.onCloseCallback=null}}function U(e){const t=document.createElement("div");return t.textContent=e,t.innerHTML}function j(e,t){const n=document.createElement("div");return e&&(n.className=e),n}function q(e){for(;e.firstChild;)e.removeChild(e.firstChild)}function K(e){const t=document.createElement("div");return t.className="sv-error",t.setAttribute("role","alert"),t.textContent=e,t}function W(e){const t=e.trim().toLowerCase();return/^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(t)&&t.length<=254?t:null}function G(e){const t=e.trim().startsWith("+"),n=e.replace(/\D/g,"");return 10===n.length?`+1${n}`:11===n.length&&n.startsWith("1")||t&&n.length>=10&&n.length<=15?`+${n}`:null}function J(e){const t=e.replace(/\D/g,""),n=t.startsWith("1")&&t.length>10?t.slice(1):t;return 0===n.length?"":n.length<=3?`(${n}`:n.length<=6?`(${n.slice(0,3)}) ${n.slice(3)}`:`(${n.slice(0,3)}) ${n.slice(3,6)}-${n.slice(6,10)}`}class Y{constructor(e={}){this.message=e.message??"Loading..."}render(){const e=j("sv-loading"),t=document.createElement("div");t.className="sv-spinner",t.setAttribute("role","status"),t.setAttribute("aria-label","Loading");const n=document.createElement("p");return n.className="sv-loading-text",n.textContent=this.message,e.appendChild(t),e.appendChild(n),e}destroy(){}}class X{constructor(e){this.inputElement=null,this.labelElement=null,this.submitButton=null,this.errorContainer=null,this.focusTimeoutId=null,this.detectedType="email",this.props=e,this.boundHandleInput=()=>this.handleInput(),this.boundHandleKeyDown=e=>{"Enter"===e.key&&(e.preventDefault(),this.handleSubmit())},this.boundHandleSubmit=()=>this.handleSubmit()}get allowsBoth(){return this.props.allowedTypes.includes("email")&&this.props.allowedTypes.includes("phone")}get allowsEmail(){return this.props.allowedTypes.includes("email")}get allowsPhone(){return this.props.allowedTypes.includes("phone")}render(){const e=j("sv-email-view"),t=j("sv-email-header"),n=document.createElement("p");n.className="sv-email-subtitle",n.textContent=this.getSubtitleText(),t.appendChild(n),e.appendChild(t),this.errorContainer=j("sv-email-error-container"),this.props.error&&this.errorContainer.appendChild(K(this.props.error)),e.appendChild(this.errorContainer);const i=j("sv-email-form"),s=j("sv-email-input-wrapper");return this.labelElement=document.createElement("label"),this.labelElement.className="sv-email-label",this.labelElement.htmlFor="sv-identity-input",this.labelElement.textContent=this.getLabelText(),this.inputElement=document.createElement("input"),this.inputElement.type=this.allowsPhone&&!this.allowsEmail?"tel":"text",this.inputElement.id="sv-identity-input",this.inputElement.className="sv-email-input",this.inputElement.placeholder=this.getPlaceholderText(),this.inputElement.autocomplete=this.allowsBoth?"on":this.allowsEmail?"email":"tel",this.inputElement.required=!0,this.inputElement.maxLength=254,this.props.initialValue&&(this.inputElement.value=this.props.initialValue,this.detectAndUpdateType(this.props.initialValue)),this.inputElement.addEventListener("input",this.boundHandleInput),this.inputElement.addEventListener("keydown",this.boundHandleKeyDown),s.appendChild(this.labelElement),s.appendChild(this.inputElement),i.appendChild(s),this.submitButton=document.createElement("button"),this.submitButton.className="sv-btn sv-btn-email-primary",this.submitButton.textContent="Continue",this.submitButton.addEventListener("click",this.boundHandleSubmit),i.appendChild(this.submitButton),e.appendChild(i),this.focusTimeoutId=setTimeout(()=>this.inputElement?.focus(),50),e}getSubtitleText(){return this.allowsBoth?"Enter your email or phone to continue":this.allowsPhone?"Enter your phone number to continue":"Enter your email to continue"}getLabelText(){return this.allowsBoth?"phone"===this.detectedType?"Phone number":"Email address":this.allowsPhone?"Phone number":"Email address"}getPlaceholderText(){return this.allowsBoth?"you@example.com or (555) 123-4567":this.allowsPhone?"(555) 123-4567":"you@example.com"}handleInput(){if(this.clearError(),!this.inputElement)return;const e=this.inputElement.value;if(this.allowsBoth){const t="phone"===this.detectedType;if(this.detectAndUpdateType(e),"phone"===this.detectedType){const t=this.inputElement.selectionStart??e.length,n=J(e);if(n!==e){this.inputElement.value=n;const i=Math.min(t+(n.length-e.length),n.length);this.inputElement.setSelectionRange(i,i)}}t!==("phone"===this.detectedType)&&this.labelElement&&(this.labelElement.textContent=this.getLabelText())}else if(this.allowsPhone){const t=this.inputElement.selectionStart??e.length,n=J(e);if(n!==e){this.inputElement.value=n;const i=Math.min(t+(n.length-e.length),n.length);this.inputElement.setSelectionRange(i,i)}}}detectAndUpdateType(e){!function(e){const t=e.trim();return!!t&&/^[+(\d]/.test(t)&&!/[@.]/.test(t)}(e)?this.detectedType="email":this.detectedType="phone"}clearError(){this.errorContainer&&q(this.errorContainer),this.inputElement?.classList.remove("sv-email-input-error")}showError(e){this.errorContainer&&(q(this.errorContainer),this.errorContainer.appendChild(K(e))),this.inputElement?.classList.add("sv-email-input-error"),this.inputElement?.focus()}handleSubmit(){if(!this.inputElement||!this.submitButton)return;const e=this.inputElement.value;if(this.allowsBoth)if("phone"===this.detectedType){const t=G(e);if(!t)return void this.showError("Please enter a valid phone number");this.submitButton.disabled=!0,this.submitButton.textContent="Please wait...",this.props.onSubmit({value:t,type:"phone"})}else{const t=W(e);if(!t)return void this.showError("Please enter a valid email address");this.submitButton.disabled=!0,this.submitButton.textContent="Please wait...",this.props.onSubmit({value:t,type:"email"})}else if(this.allowsPhone){const t=G(e);if(!t)return void this.showError("Please enter a valid phone number");this.submitButton.disabled=!0,this.submitButton.textContent="Please wait...",this.props.onSubmit({value:t,type:"phone"})}else{const t=W(e);if(!t)return void this.showError("Please enter a valid email address");this.submitButton.disabled=!0,this.submitButton.textContent="Please wait...",this.props.onSubmit({value:t,type:"email"})}}destroy(){null!==this.focusTimeoutId&&(clearTimeout(this.focusTimeoutId),this.focusTimeoutId=null),this.inputElement&&(this.inputElement.removeEventListener("input",this.boundHandleInput),this.inputElement.removeEventListener("keydown",this.boundHandleKeyDown)),this.submitButton&&this.submitButton.removeEventListener("click",this.boundHandleSubmit)}}class Q{constructor(e){this.backLink=null,this.methodButtons=[],this.methodClickHandlers=new Map,this.props=e,this.boundHandleBack=()=>this.props.onBack()}render(){const e=j();this.backLink=this.createBackLink();const t=document.createElement("h3");t.className="sv-title",t.textContent="Choose how to sign in";const n=document.createElement("p");n.className="sv-subtitle",n.textContent=U(this.props.email);const i=j();for(const e of this.props.methods){const t=this.createMethodButton(e);this.methodButtons.push(t),i.appendChild(t)}return e.appendChild(this.backLink),e.appendChild(t),e.appendChild(n),e.appendChild(i),e}createBackLink(){const e=document.createElement("button");return e.className="sv-back-link",e.appendChild(M()),e.appendChild(document.createTextNode(" Change email")),e.addEventListener("click",this.boundHandleBack),e}createMethodButton(e){const t=document.createElement("button");t.className="sv-btn sv-btn-method";const n=j("sv-method-content"),i=this.getMethodIcon(e);n.appendChild(i);const s=j("sv-method-text"),o=document.createElement("div");o.className="sv-method-name",o.textContent=e.name;const r=document.createElement("div");r.className="sv-method-description",r.textContent=e.description,s.appendChild(o),s.appendChild(r),n.appendChild(s),t.appendChild(n);const a=()=>this.props.onSelectMethod(e);return this.methodClickHandlers.set(t,a),t.addEventListener("click",a),t}getMethodIcon(e){const t=j("sv-method-icon");return t.appendChild(O(e.icon)),t}destroy(){this.backLink&&this.backLink.removeEventListener("click",this.boundHandleBack);for(const e of this.methodButtons){const t=this.methodClickHandlers.get(e);t&&e.removeEventListener("click",t)}this.methodClickHandlers.clear(),this.methodButtons=[]}}class Z{constructor(e){this.inputElements=[],this.submitButton=null,this.resendButton=null,this.backLink=null,this.errorContainer=null,this.resendTimer=null,this.backoffTimer=null,this.backoffSeconds=0,this.focusTimeoutId=null,this.autoSubmitTimeoutId=null,this.isSubmitting=!1,this.inputHandlers=new Map,this.props=e,this.boundHandleBack=()=>this.props.onBack(),this.boundHandleResend=()=>this.handleResend(),this.boundHandleSubmit=()=>this.handleSubmit()}render(){const e=j();this.backLink=this.createBackLink();const t=document.createElement("h3");t.className="sv-title",t.textContent="Enter verification code";const n="email"===this.props.method?"email":"phone",i=document.createElement("p");i.className="sv-subtitle",i.innerHTML=`We sent a 6-digit code to your ${n}<br><strong>${U(this.props.email)}</strong>`,this.errorContainer=j(),this.props.error&&this.errorContainer.appendChild(K(this.props.error));const s=this.createInputGroup();if(this.submitButton=document.createElement("button"),this.submitButton.className="sv-btn sv-btn-primary",this.submitButton.textContent="Verify",this.submitButton.addEventListener("click",this.boundHandleSubmit),this.props.backoffExpires){Math.max(0,Math.ceil(this.props.backoffExpires-Date.now()/1e3))>0&&this.startBackoff(this.props.backoffExpires)}const o=j("sv-resend-container");return this.resendButton=document.createElement("button"),this.resendButton.className="sv-back-link",this.resendButton.textContent="Resend code",this.resendButton.addEventListener("click",this.boundHandleResend),o.appendChild(this.resendButton),e.style.display="flex",e.style.flexDirection="column",e.appendChild(t),e.appendChild(i),e.appendChild(this.errorContainer),e.appendChild(s),e.appendChild(this.submitButton),e.appendChild(o),e.appendChild(this.backLink),this.focusTimeoutId=setTimeout(()=>this.inputElements[0]?.focus(),50),e}createBackLink(){const e=document.createElement("button");return e.className="sv-back-link",e.style.order="-1",e.appendChild(M()),e.appendChild(document.createTextNode(" Choose another method")),e.addEventListener("click",this.boundHandleBack),e}createInputGroup(){const e=j("sv-totp-input-group");for(let t=0;t<6;t++){const n=document.createElement("input");n.type="text",n.inputMode="numeric",n.pattern="[0-9]*",n.maxLength=1,n.className="sv-totp-digit",n.autocomplete="one-time-code",n.setAttribute("aria-label",`Digit ${t+1} of 6`);const i={input:e=>this.handleInput(e,t),keydown:e=>this.handleKeyDown(e,t),paste:e=>this.handlePaste(e),focus:()=>n.select()};this.inputHandlers.set(n,i),n.addEventListener("input",i.input),n.addEventListener("keydown",i.keydown),n.addEventListener("paste",i.paste),n.addEventListener("focus",i.focus),this.inputElements.push(n),e.appendChild(n)}return e}handleInput(e,t){const n=e.target,i=n.value.replace(/\D/g,"");i.length>0?(n.value=i[0],this.clearError(),t<5?this.inputElements[t+1].focus():this.checkAutoSubmit()):n.value=""}handleKeyDown(e,t){const n=e.target;"Backspace"===e.key?""===n.value&&t>0&&(this.inputElements[t-1].focus(),this.inputElements[t-1].value=""):"ArrowLeft"===e.key&&t>0?this.inputElements[t-1].focus():"ArrowRight"===e.key&&t<5?this.inputElements[t+1].focus():"Enter"===e.key&&this.handleSubmit()}handlePaste(e){e.preventDefault();const t=(e.clipboardData?.getData("text")??"").replace(/\D/g,"").slice(0,6);for(let e=0;e<t.length;e++)this.inputElements[e]&&(this.inputElements[e].value=t[e]);if(t.length>0){this.clearError();const e=Math.min(t.length,5);this.inputElements[e].focus()}6===t.length&&this.checkAutoSubmit()}checkAutoSubmit(){6===this.getCode().length&&(this.autoSubmitTimeoutId=setTimeout(()=>this.handleSubmit(),100))}getCode(){return this.inputElements.map(e=>e.value).join("")}clearError(){this.errorContainer&&q(this.errorContainer),this.inputElements.forEach(e=>e.classList.remove("sv-input-error"))}showError(e){this.errorContainer&&(q(this.errorContainer),this.errorContainer.appendChild(K(e))),this.inputElements.forEach(e=>e.classList.add("sv-input-error")),this.inputElements[0]?.focus()}handleSubmit(){if(!this.submitButton)return;if(this.isSubmitting)return;if(this.backoffSeconds>0)return;const e=function(e){const t=e.replace(/\D/g,"");return 6===t.length?t:null}(this.getCode());e?(null!==this.autoSubmitTimeoutId&&(clearTimeout(this.autoSubmitTimeoutId),this.autoSubmitTimeoutId=null),this.isSubmitting=!0,this.submitButton.disabled=!0,this.submitButton.textContent="Verifying...",this.props.onSubmit(e)):this.showError("Please enter the complete 6-digit code")}startBackoff(e){this.disableInputs(!0),this.backoffTimer=new b({expiresAt:e,onTick:e=>{this.backoffSeconds=e,this.updateSubmitButton()},onExpired:()=>{this.backoffSeconds=0,this.updateSubmitButton(),this.disableInputs(!1),this.inputElements[0]?.focus()}}),this.backoffTimer.start()}updateSubmitButton(){this.submitButton&&(this.backoffSeconds>0?(this.submitButton.textContent=`Wait ${this.backoffSeconds}s`,this.submitButton.disabled=!0):(this.submitButton.textContent="Verify",this.submitButton.disabled=!1))}disableInputs(e){this.inputElements.forEach(t=>{t.disabled=e})}handleResend(){!this.resendTimer?.isRunning()&&this.resendButton&&(this.resendTimer=new m({duration:30,onTick:e=>{this.resendButton&&(this.resendButton.textContent=`Resend code (${e}s)`,this.resendButton.disabled=!0)},onComplete:()=>{this.resendButton&&(this.resendButton.textContent="Resend code",this.resendButton.disabled=!1)}}),this.resendTimer.start(),this.props.onResend())}destroy(){null!==this.focusTimeoutId&&(clearTimeout(this.focusTimeoutId),this.focusTimeoutId=null),null!==this.autoSubmitTimeoutId&&(clearTimeout(this.autoSubmitTimeoutId),this.autoSubmitTimeoutId=null),this.resendTimer?.stop(),this.resendTimer=null,this.backoffTimer?.stop(),this.backoffTimer=null;for(const e of this.inputElements){const t=this.inputHandlers.get(e);t&&(e.removeEventListener("input",t.input),e.removeEventListener("keydown",t.keydown),e.removeEventListener("paste",t.paste),e.removeEventListener("focus",t.focus))}this.inputHandlers.clear(),this.inputElements=[],this.submitButton&&this.submitButton.removeEventListener("click",this.boundHandleSubmit),this.resendButton&&this.resendButton.removeEventListener("click",this.boundHandleResend),this.backLink&&this.backLink.removeEventListener("click",this.boundHandleBack)}}class ee{constructor(e){this.actionButton=null,this.errorContainer=null,this.backLink=null,this.fallbackLink=null,this.props=e,this.boundHandleBack=()=>this.props.onBack(),this.boundHandleStart=()=>this.handleStart(),this.boundHandleFallback=e.onFallback?()=>e.onFallback():null}render(){const e=j();this.backLink=this.createBackLink();const t=j();t.appendChild(R());const n=document.createElement("h3");n.className="sv-title",n.textContent="register"===this.props.mode?"Set up a passkey":"Use your passkey";const i=document.createElement("p");i.className="sv-subtitle","register"===this.props.mode?i.innerHTML=`Create a passkey for<br><strong>${U(this.props.email)}</strong><br>to sign in faster next time`:i.innerHTML=`Use your passkey to verify<br><strong>${U(this.props.email)}</strong>`,this.errorContainer=j(),this.props.error&&this.errorContainer.appendChild(K(this.props.error));const s=document.createElement("p");s.className="sv-passkey-description",s.textContent="register"===this.props.mode?"Use Face ID, Touch ID, Windows Hello, or a security key.":"Your device will prompt you to verify your identity.";const o="register"===this.props.mode?"Create Passkey":"Continue with Passkey";return this.actionButton=document.createElement("button"),this.actionButton.className="sv-btn sv-btn-primary",this.actionButton.textContent=o,this.actionButton.addEventListener("click",this.boundHandleStart),e.appendChild(this.backLink),e.appendChild(t),e.appendChild(n),e.appendChild(i),e.appendChild(this.errorContainer),e.appendChild(s),e.appendChild(this.actionButton),this.props.onFallback&&this.boundHandleFallback&&(this.fallbackLink=this.createFallbackLink(),e.appendChild(this.fallbackLink)),e}createFallbackLink(){const e=document.createElement("button");return e.className="sv-fallback-link",e.textContent="Having trouble? Use email code instead",this.boundHandleFallback&&e.addEventListener("click",this.boundHandleFallback),e}createBackLink(){const e=document.createElement("button");return e.className="sv-back-link",e.appendChild(M()),e.appendChild(document.createTextNode(" Choose another method")),e.addEventListener("click",this.boundHandleBack),e}handleStart(){this.actionButton&&(this.actionButton.disabled=!0,this.actionButton.textContent="Waiting for device...",this.props.onStart())}showError(e){this.errorContainer&&(q(this.errorContainer),this.errorContainer.appendChild(K(e))),this.actionButton&&(this.actionButton.disabled=!1,this.actionButton.textContent="Try Again")}destroy(){this.backLink&&this.backLink.removeEventListener("click",this.boundHandleBack),this.actionButton&&this.actionButton.removeEventListener("click",this.boundHandleStart),this.fallbackLink&&this.boundHandleFallback&&this.fallbackLink.removeEventListener("click",this.boundHandleFallback)}}class te{constructor(e){this.addButton=null,this.skipLink=null,this.props=e,this.boundHandleAdd=()=>this.props.onAddPasskey(),this.boundHandleSkip=()=>this.props.onSkip()}render(){const e=j(),t=j();t.appendChild(R());const n=document.createElement("h3");n.className="sv-title",n.textContent="Add a passkey for faster sign-in?";const i=document.createElement("p");i.className="sv-subtitle",i.innerHTML=`Next time, sign in instantly as<br><strong>${U(this.props.email)}</strong>`;const s=document.createElement("div");s.className="sv-passkey-prompt-benefits";const o=document.createElement("ul"),r=["No codes to type or wait for","Phishing-resistant security","Works with Face ID, Touch ID, or Windows Hello"];for(const e of r){const t=document.createElement("li");t.appendChild(F()),t.appendChild(document.createTextNode(e)),o.appendChild(t)}return s.appendChild(o),this.addButton=document.createElement("button"),this.addButton.className="sv-btn sv-btn-primary",this.addButton.textContent="Add Passkey",this.addButton.addEventListener("click",this.boundHandleAdd),this.skipLink=document.createElement("button"),this.skipLink.className="sv-skip-link",this.skipLink.textContent="Not now",this.skipLink.addEventListener("click",this.boundHandleSkip),e.appendChild(t),e.appendChild(n),e.appendChild(i),e.appendChild(s),e.appendChild(this.addButton),e.appendChild(this.skipLink),e}destroy(){this.addButton&&this.addButton.removeEventListener("click",this.boundHandleAdd),this.skipLink&&this.skipLink.removeEventListener("click",this.boundHandleSkip)}}class ne{constructor(e){this.expirationTimer=null,this.resendTimer=null,this.countdownElement=null,this.resendButton=null,this.backLink=null,this.fallbackButton=null,this.props=e,this.boundHandleBack=()=>this.props.onBack(),this.boundHandleResend=()=>this.handleResend(),this.boundHandleFallback=()=>this.props.onFallback()}render(){const e=j();this.backLink=this.createBackLink();const t=document.createElement("h3");t.className="sv-title",t.textContent="Check your email";const n=document.createElement("p");n.className="sv-subtitle",n.innerHTML=`We sent a secure link to<br><strong>${U(this.props.email)}</strong>`;const i=j("sv-sparklink-waiting"),s=document.createElement("div");s.className="sv-spinner sv-spinner-small",s.setAttribute("role","status"),s.setAttribute("aria-label","Waiting for verification");const o=document.createElement("span");o.className="sv-sparklink-waiting-text",o.textContent="Waiting for you to click the link...",i.appendChild(s),i.appendChild(o);const r=j("sv-sparklink-countdown"),a=document.createElement("span");a.textContent="Link expires in ",this.countdownElement=document.createElement("span"),this.countdownElement.className="sv-sparklink-countdown-time",this.startExpirationTimer(),r.appendChild(a),r.appendChild(this.countdownElement);const l=j("sv-resend-container");this.resendButton=document.createElement("button"),this.resendButton.className="sv-back-link",this.resendButton.textContent="Resend link",this.resendButton.addEventListener("click",this.boundHandleResend),l.appendChild(this.resendButton);const c=j("sv-sparklink-fallback");return this.fallbackButton=document.createElement("button"),this.fallbackButton.className="sv-back-link",this.fallbackButton.textContent="Use verification code instead",this.fallbackButton.addEventListener("click",this.boundHandleFallback),c.appendChild(this.fallbackButton),e.appendChild(this.backLink),e.appendChild(t),e.appendChild(n),e.appendChild(i),e.appendChild(r),e.appendChild(l),e.appendChild(c),e}createBackLink(){const e=document.createElement("button");return e.className="sv-back-link",e.appendChild(M()),e.appendChild(document.createTextNode(" Choose another method")),e.addEventListener("click",this.boundHandleBack),e}formatTime(e){if(!Number.isFinite(e)||e<0)return"--:--";return`${Math.floor(e/60)}:${Math.floor(e%60).toString().padStart(2,"0")}`}startExpirationTimer(){if(!Number.isFinite(this.props.expiresAt)||this.props.expiresAt<=0)return this.countdownElement&&(this.countdownElement.textContent="--:--"),void console.warn("[SparkVault] Invalid expiresAt timestamp:",this.props.expiresAt);const e=Math.floor(this.props.expiresAt/1e3);this.expirationTimer=new b({expiresAt:e,onTick:e=>{this.countdownElement&&(this.countdownElement.textContent=this.formatTime(e))},onExpired:()=>{this.countdownElement&&(this.countdownElement.textContent="Expired")}}),this.expirationTimer.start()}handleResend(){!this.resendTimer?.isRunning()&&this.resendButton&&(this.resendTimer=new m({duration:30,onTick:e=>{this.resendButton&&(this.resendButton.textContent=`Resend link (${e}s)`,this.resendButton.disabled=!0)},onComplete:()=>{this.resendButton&&(this.resendButton.textContent="Resend link",this.resendButton.disabled=!1)}}),this.resendTimer.start(),this.props.onResend())}destroy(){this.expirationTimer?.stop(),this.expirationTimer=null,this.resendTimer?.stop(),this.resendTimer=null,this.backLink&&this.backLink.removeEventListener("click",this.boundHandleBack),this.resendButton&&this.resendButton.removeEventListener("click",this.boundHandleResend),this.fallbackButton&&this.fallbackButton.removeEventListener("click",this.boundHandleFallback)}}class ie{constructor(e){this.retryButton=null,this.closeButton=null,this.props=e,this.boundHandleRetry=()=>this.props.onRetry(),this.boundHandleClose=()=>this.props.onClose()}render(){const e=j();e.className="sv-error-view";const t=j();t.className="sv-error-icon-container",t.appendChild(function(){const e=I("0 0 48 48",48,48);e.classList.add("sv-error-icon"),e.appendChild(H(24,24,22,{fill:"#FEF2F2",stroke:"#FECACA","stroke-width":"1"}));const t=document.createElementNS("http://www.w3.org/2000/svg","g");return t.setAttribute("transform","translate(10, 12)"),t.appendChild($("M14 4L2 24h24L14 4z",{fill:"#DC2626"})),t.appendChild($("M14 10v5",{stroke:"#FFFFFF","stroke-width":"2","stroke-linecap":"round"})),t.appendChild(H(14,19,1,{fill:"#FFFFFF"})),e.appendChild(t),e}());const n=j();n.className="sv-error-content";const i=document.createElement("h3");i.className="sv-error-title",i.textContent="Something went wrong";const s=document.createElement("p");s.className="sv-error-message",s.textContent=this.props.message;const o=document.createElement("div");o.className="sv-error-code-badge";const r=document.createElement("span");r.className="sv-error-code-label",r.textContent="Error code";const a=document.createElement("code");a.className="sv-error-code-value",a.textContent=this.props.code,o.appendChild(r),o.appendChild(a),n.appendChild(i),n.appendChild(s),n.appendChild(o);const l=j();return l.className="sv-error-actions",this.retryButton=document.createElement("button"),this.retryButton.className="sv-btn sv-btn-error-primary",this.retryButton.textContent="Try Again",this.retryButton.addEventListener("click",this.boundHandleRetry),this.closeButton=document.createElement("button"),this.closeButton.className="sv-btn sv-btn-error-secondary",this.closeButton.textContent="Close",this.closeButton.addEventListener("click",this.boundHandleClose),l.appendChild(this.retryButton),l.appendChild(this.closeButton),e.appendChild(t),e.appendChild(n),e.appendChild(l),e}destroy(){this.retryButton&&this.retryButton.removeEventListener("click",this.boundHandleRetry),this.closeButton&&this.closeButton.removeEventListener("click",this.boundHandleClose)}}class se{constructor(e,t,n,i){this.currentView=null,this.focusTimeoutId=null,this.pollingInterval=null,this.container=e,this.api=t,this.options=n,this.callbacks=i,this.verificationState=new S,this.passkeyHandler=new T(t,this.verificationState),this.totpHandler=new B(t,this.verificationState),this.sparkLinkHandler=new L(t,this.verificationState),n.email?this.verificationState.setIdentity(n.email,"email"):n.phone&&this.verificationState.setIdentity(n.phone,"phone")}get recipient(){return this.verificationState.recipient}get identityType(){return this.verificationState.identityType}get sdkConfig(){return this.verificationState.sdkConfig}async start(){let e=null;if(this.api.isConfigPreloaded()){const t=new Promise(e=>setTimeout(()=>e(null),50)),n=await Promise.race([this.api.getConfig().then(e=>e),t]);null!==n&&(e=n)}this.container.createLoading({backdropBlur:this.options.backdropBlur},()=>this.handleClose());try{e||(this.setState({view:"loading"}),e=await this.api.getConfig()),this.verificationState.setConfig(e),e.branding&&this.container.updateBranding(e.branding);const t=void 0!==this.options.backdropBlur?this.options.backdropBlur:void 0===e.branding?.backdrop_blur||e.branding.backdrop_blur;this.container.updateBackdropBlur(t),this.recipient?this.showMethodSelect():this.showIdentityInput()}catch(e){const n=this.normalizeError(e);this.setState({view:"error",message:n.message,code:n instanceof t?n.code:"config_error"})}}close(){null!==this.focusTimeoutId&&(clearTimeout(this.focusTimeoutId),this.focusTimeoutId=null),this.stopSparkLinkPolling(),this.destroyCurrentView(),this.container.destroy()}handleClose(){this.close(),this.callbacks.onCancel()}get viewState(){return this.verificationState.viewState}setState(e){this.verificationState.setViewState(e),this.render()}render(){const e=this.container.getBody();if(!e)return;this.destroyCurrentView();const t=this.createViewForState(this.viewState);this.currentView=t,q(e),e.appendChild(t.render());const n=e.querySelector("input:not([disabled]), button:not([disabled])");n&&(null!==this.focusTimeoutId&&clearTimeout(this.focusTimeoutId),this.focusTimeoutId=setTimeout(()=>n.focus(),50))}destroyCurrentView(){this.currentView?.destroy&&this.currentView.destroy(),this.currentView=null}createViewForState(e){switch(e.view){case"loading":return new Y({message:"Loading..."});case"identity-input":return new X({allowedTypes:this.getAllowedIdentityTypes(),initialValue:this.recipient,error:e.error,onSubmit:e=>this.handleIdentitySubmit(e)});case"method-select":return new Q({email:e.email,methods:e.methods,onSelectMethod:e=>this.handleMethodSelect(e),onBack:()=>this.showIdentityInput()});case"totp-verify":return new Z({email:e.email,method:e.method,error:e.error,backoffExpires:e.backoffExpires,onSubmit:e=>this.handleTotpSubmit(e),onResend:()=>this.handleTotpResend(),onBack:()=>this.showMethodSelect()});case"passkey":{const{passkey:t}=this.verificationState,n="register"===e.mode&&null!==t.pendingResult;return new ee({email:e.email,mode:e.mode,error:e.error,onStart:()=>this.handlePasskeyStart(),onBack:n?()=>this.handlePasskeyRegistrationSkip():()=>this.showMethodSelect(),onFallback:t.hasPasskey&&!t.isFallbackMode?()=>this.handlePasskeyFallback():void 0})}case"passkey-prompt":return new te({email:e.email,onAddPasskey:()=>this.handlePasskeyPromptAdd(e.pendingResult),onSkip:()=>this.handlePasskeyPromptSkip(e.pendingResult)});case"sparklink-waiting":return new ne({email:e.email,expiresAt:e.expiresAt,onResend:()=>this.handleSparkLinkResend(),onFallback:()=>this.handleSparkLinkFallback(),onBack:()=>this.showMethodSelect()});case"oauth-pending":return new Y({message:`Connecting to ${e.provider}...`});case"error":return new ie({message:e.message,code:e.code,onRetry:()=>this.showIdentityInput(),onClose:()=>this.handleClose()})}}showIdentityInput(e){this.setState({view:"identity-input",error:e})}async showMethodSelect(){if(!this.sdkConfig)return;const e=this.sdkConfig.methods??[];if(!Array.isArray(e))return void this.setState({view:"error",message:"Invalid configuration",code:"invalid_config"});let t=E(e);if(t=t.filter(e=>"phone"===this.identityType?"totp"===e.type&&"totp_sms"===e.id:"email"===e.identityType||void 0===e.identityType),0===t.length)return void this.setState({view:"error",message:"No authentication methods available",code:"no_methods"});const n=t.some(e=>"passkey"===e.type),{passkey:i}=this.verificationState;if(n&&"email"===this.identityType&&!i.isFallbackMode){this.setState({view:"loading"});const e=await this.passkeyHandler.checkPasskey();if(null!==e&&!e.emailValid)return void this.showIdentityInput("This email domain cannot receive messages. Please check your email address.");if(!0===e?.hasPasskey)return void this.setState({view:"passkey",email:this.recipient,mode:"verify"});t=t.filter(e=>"passkey"!==e.type)}0!==t.length?1!==t.length?this.setState({view:"method-select",email:this.recipient,methods:t}):this.handleMethodSelect(t[0]):this.setState({view:"error",message:"No authentication methods available",code:"no_methods"})}handleIdentitySubmit(e){this.verificationState.setIdentity(e.value,e.type),this.showMethodSelect()}getAllowedIdentityTypes(){return this.verificationState.getAllowedIdentityTypes()}async handleMethodSelect(e){try{switch(e.type){case"totp":{const t="totp_sms"===e.id?"sms":"email";this.setState({view:"loading"});const n=await this.totpHandler.send(t);if(!n.success)return void this.setState({view:"error",message:n.error??"Failed to send code",code:"totp_send_failed"});this.setState({view:"totp-verify",email:this.recipient,method:t,kindling:this.verificationState.totp.kindling});break}case"passkey":this.setState({view:"passkey",email:this.recipient,mode:"verify"});break;case"magic_link":{this.setState({view:"loading"});const e=await this.sparkLinkHandler.send();if(!e.success)return void this.setState({view:"error",message:e.error??"Failed to send SparkLink",code:"sparklink_send_failed"});this.setState({view:"sparklink-waiting",email:this.recipient,sparkId:e.sparkId,expiresAt:e.expiresAt}),this.startSparkLinkPolling(e.sparkId);break}case"social":e.provider&&this.handleSocialLogin(e.provider);break;default:this.setState({view:"error",message:`Authentication method not supported: ${e.type}`,code:"unsupported_method"})}}catch(e){const n=this.normalizeError(e);this.setState({view:"error",message:n.message,code:n instanceof t?n.code:"unknown"})}}async handleTotpSubmit(e){if("totp-verify"!==this.viewState.view)return;const t=this.verificationState.totp.method??"email",n=await this.totpHandler.verify(e);if(n.success&&n.result){if(await this.shouldShowPasskeyPrompt())return void this.setState({view:"passkey-prompt",email:this.recipient,pendingResult:n.result});this.close(),this.callbacks.onSuccess(n.result)}else this.setState({view:"totp-verify",email:this.recipient,method:t,kindling:this.verificationState.totp.kindling,error:n.error??"Invalid code. Please try again.",backoffExpires:n.backoffExpires})}async handleTotpResend(){if("totp-verify"!==this.viewState.view)return;const e=this.verificationState.totp.method??"email",t=await this.totpHandler.resend();t.success||this.setState({view:"totp-verify",email:this.recipient,method:e,kindling:this.verificationState.totp.kindling,error:t.error??"Failed to resend code"})}async handlePasskeyStart(){if("passkey"!==this.viewState.view)return;const e=this.viewState.mode,t="register"===e?await this.passkeyHandler.register():await this.passkeyHandler.verify();t.success&&t.result?(this.close(),this.callbacks.onSuccess(t.result)):"not_found"===t.errorType?this.setState({view:"passkey",email:this.recipient,mode:"register",error:t.error}):this.setState({view:"passkey",email:this.recipient,mode:e,error:t.error})}async handlePasskeyFallback(){this.verificationState.enablePasskeyFallback(),await this.showMethodSelect()}handlePasskeyRegistrationSkip(){const e=this.verificationState.passkey.pendingResult;e&&(this.verificationState.setPendingResult(null),this.close(),this.callbacks.onSuccess(e))}handleSocialLogin(e){this.setState({view:"oauth-pending",provider:e});const t=function(){const e=new Uint8Array(16);return crypto.getRandomValues(e),Array.from(e,e=>e.toString(16).padStart(2,"0")).join("")}(),n=window.location.origin+window.location.pathname;sessionStorage.setItem("sv_oauth_state",t),sessionStorage.setItem("sv_oauth_email",this.recipient);const i=this.api.getSocialAuthUrl(e,n,t);window.location.href=i}normalizeError(e){return e instanceof x?new t(e.message,e.code):e instanceof Error?e:new Error(String(e))}async shouldShowPasskeyPrompt(){if(!this.verificationState.shouldShowPasskeyPrompt())return!1;const{passkey:e}=this.verificationState;if(null===e.hasPasskey){const e=await this.passkeyHandler.checkPasskey();return null!==e&&e.emailValid&&!e.hasPasskey}return!e.hasPasskey}async handlePasskeyPromptAdd(e){this.verificationState.setPendingResult(e),this.setState({view:"loading"});const t=await this.passkeyHandler.register();t.success&&t.result?(this.close(),this.callbacks.onSuccess(t.result)):(t.errorType,this.verificationState.setPendingResult(null),this.close(),this.callbacks.onSuccess(e))}handlePasskeyPromptSkip(e){this.verificationState.dismissPasskeyPrompt(),this.close(),this.callbacks.onSuccess(e)}startSparkLinkPolling(e){this.stopSparkLinkPolling(),this.pollingInterval=setInterval(async()=>{const t=await this.sparkLinkHandler.checkStatus(e);if(t.verified&&t.token&&t.identity){this.stopSparkLinkPolling();const e={token:t.token,identity:t.identity,identityType:t.identityType||"email"};if(await this.shouldShowPasskeyPrompt())return void this.setState({view:"passkey-prompt",email:this.recipient,pendingResult:e});this.close(),this.callbacks.onSuccess(e)}},2e3)}stopSparkLinkPolling(){this.pollingInterval&&(clearInterval(this.pollingInterval),this.pollingInterval=null)}async handleSparkLinkResend(){const e=await this.sparkLinkHandler.send();e.success&&e.sparkId&&(this.stopSparkLinkPolling(),this.setState({view:"sparklink-waiting",email:this.recipient,sparkId:e.sparkId,expiresAt:e.expiresAt}),this.startSparkLinkPolling(e.sparkId))}async handleSparkLinkFallback(){this.stopSparkLinkPolling(),this.setState({view:"loading"});const e=await this.totpHandler.send("email");e.success?this.setState({view:"totp-verify",email:this.recipient,method:"email",kindling:this.verificationState.totp.kindling}):this.setState({view:"error",message:e.error??"Failed to send code",code:"totp_send_failed"})}}const oe={showHeader:!0,showCloseButton:!0,showFooter:!0};class re{constructor(e,t={}){this.container=null,this.header=null,this.body=null,this.footer=null,this.closeBtn=null,this.onCloseCallback=null,this.closeBtnClickHandler=null,this.effectiveTheme="light",this.targetElement=e,this.containerOptions={...oe,...t}}createLoading(e,t){if(this.container)return;this.onCloseCallback=t;if(P({branding:{companyName:"",logoLight:null,logoDark:null},backdropBlur:!1}),this.container=document.createElement("div"),this.container.className="sv-inline-container",this.containerOptions.showHeader&&(this.header=this.createHeader({companyName:"",logoLight:null,logoDark:null}),this.container.appendChild(this.header)),this.body=document.createElement("div"),this.body.className="sv-body sv-inline-body",this.container.appendChild(this.body),this.containerOptions.showFooter){this.footer=document.createElement("div"),this.footer.className="sv-footer";const e=document.createElement("span");e.className="sv-footer-text",e.appendChild(document.createTextNode("Secured by "));const t=document.createElement("a");t.href="https://sparkvault.com",t.target="_blank",t.rel="noopener noreferrer",t.className="sv-footer-link",t.textContent="SparkVault",e.appendChild(t),this.footer.appendChild(e),this.container.appendChild(this.footer)}this.targetElement.innerHTML="",this.targetElement.appendChild(this.container)}updateBranding(e){if(this.container&&(this.effectiveTheme=_(e),this.containerOptions.showHeader&&this.header)){const t=this.createHeader(e);this.container.replaceChild(t,this.header),this.header=t}}updateBackdropBlur(e){}getBody(){return this.body}isOpen(){return null!==this.container}destroy(){this.closeBtn&&this.closeBtnClickHandler&&(this.closeBtn.removeEventListener("click",this.closeBtnClickHandler),this.closeBtnClickHandler=null,this.closeBtn=null),this.container&&this.container.parentNode&&this.container.remove(),this.container=null,this.header=null,this.body=null,this.footer=null,this.onCloseCallback=null}createHeader(e){const t=document.createElement("div");t.className="sv-header sv-inline-header";const n=document.createElement("div");n.className="sv-header-title";const i="dark"===this.effectiveTheme?e.logoDark||e.logoLight:e.logoLight||e.logoDark;if(i){const t=document.createElement("img");t.className="sv-logo",t.src=i,t.alt=e.companyName,n.appendChild(t);const s=document.createElement("span");s.className="sv-sr-only",s.textContent=e.companyName,n.appendChild(s)}else if(e.companyName){const t=document.createElement("h2");t.className="sv-company-name",t.textContent=e.companyName,n.appendChild(t)}return t.appendChild(n),this.containerOptions.showCloseButton&&(this.closeBtn=document.createElement("button"),this.closeBtn.className="sv-close-btn",this.closeBtn.setAttribute("aria-label","Close"),this.closeBtn.appendChild(N()),this.closeBtnClickHandler=()=>this.handleClose(),this.closeBtn.addEventListener("click",this.closeBtnClickHandler),t.appendChild(this.closeBtn)),t}handleClose(){this.onCloseCallback&&this.onCloseCallback()}}class ae{constructor(e){this.renderer=null,this.config=e,this.api=new w(e),e.preloadConfig&&this.api.preloadConfig()}async pop(e={}){return this.renderer&&this.renderer.close(),new Promise((t,n)=>{const i=new V;this.renderer=new se(i,this.api,e,{onSuccess:n=>{e.onSuccess?.(n),t(n)},onError:t=>{e.onError?.(t),n(t)},onCancel:()=>{const t=new a;e.onCancel?.(),n(t)}}),this.renderer.start().catch(t=>{e.onError?.(t),n(t)})})}async render(e){if(!(e.target&&e.target instanceof HTMLElement))throw new s("target must be a valid HTMLElement");return this.renderer&&this.renderer.close(),new Promise((t,n)=>{const i=new re(e.target,{showHeader:e.showHeader,showCloseButton:e.showCloseButton,showFooter:e.showFooter});this.renderer=new se(i,this.api,e,{onSuccess:n=>{e.onSuccess?.(n),t(n)},onError:t=>{e.onError?.(t),n(t)},onCancel:()=>{const t=new a;e.onCancel?.(),n(t)}}),this.renderer.start().catch(t=>{e.onError?.(t),n(t)})})}async verifyToken(e){if(!e||"string"!=typeof e)throw new s("Token is required");const t=e.split(".");if(3!==t.length)throw new s("Invalid token format");const[,n]=t,i=JSON.parse(function(e){const t=e.replace(/-/g,"+").replace(/_/g,"/"),n=t+"=".repeat((4-t.length%4)%4);return atob(n)}(n));if(!function(e){if("object"!=typeof e||null===e)return!1;const t=e;return"string"==typeof t.iss&&"string"==typeof t.sub&&"string"==typeof t.aud&&"number"==typeof t.exp&&"number"==typeof t.iat&&"string"==typeof t.identity&&"string"==typeof t.identity_type&&"number"==typeof t.verified_at&&"string"==typeof t.method}(i))throw new s("Invalid token payload structure");const o=Math.floor(Date.now()/1e3);if(i.exp<o)throw new s("Token has expired");const r=`${this.config.apiBaseUrl}/apps/identity/${this.config.accountId}`;if(i.iss!==r)throw new s("Invalid token issuer");return i}close(){this.renderer&&(this.renderer.close(),this.renderer=null)}async verify(e={}){return this.pop(e)}}class le{constructor(e){this.http=e}async create(e){this.validateCreateOptions(e);const t=this.encodePayload(e.payload),n=await this.http.post("/v1/sparks",{payload:t,ttl:e.ttl??3600,max_reads:e.maxReads??1,password:e.password,name:e.name});return{id:n.data.spark_id,url:n.data.url,expiresAt:n.data.expires_at,maxReads:n.data.max_reads,name:n.data.name}}async read(e,t){if(!e)throw new s("Spark ID is required");const n=e.startsWith("spk_")?e:`spk_${e}`,i={};t&&(i["X-Spark-Password"]=t);const o=await this.http.get(`/v1/sparks/${n}`,{headers:i});return{data:this.decodePayload(o.data.payload),readAt:o.data.read_at,burned:o.data.burned,readsRemaining:o.data.reads_remaining}}validateCreateOptions(e){if(!e.payload)throw new s("Payload is required");if(void 0!==e.ttl&&(e.ttl<60||e.ttl>604800))throw new s("TTL must be between 60 and 604800 seconds (1 minute to 7 days)");if(void 0!==e.maxReads&&(e.maxReads<1||e.maxReads>100))throw new s("maxReads must be between 1 and 100")}encodePayload(e){return"string"==typeof e?e:g(e)}decodePayload(e){return e}}class ce{constructor(e,t){this.http=t}async create(e){this.validateCreateOptions(e);const t=await this.http.post("/v1/vaults",{name:e.name,hosted_vmk:e.hostedVmk??!1});return{id:t.data.vault_id,name:t.data.name,vmk:t.data.vmk,createdAt:t.data.created_at,hostedVmk:t.data.hosted_vmk}}async unseal(e,t){if(!e)throw new s("Vault ID is required");if(!t)throw new s("VMK is required");const n=e.startsWith("vlt_")?e:`vlt_${e}`,i=await this.http.post(`/v1/vaults/${n}/unseal`,{vmk:t});return{id:i.data.vault_id,name:i.data.name,vatToken:i.data.vat_token,expiresAt:i.data.expires_at,ingotCount:i.data.ingot_count,storageBytes:i.data.storage_bytes}}async list(){return(await this.http.get("/v1/vaults")).data.vaults.map(e=>({id:e.vault_id,name:e.name,createdAt:e.created_at,ingotCount:e.ingot_count,storageBytes:e.storage_bytes,hostedVmk:e.hosted_vmk}))}async delete(e,t){const n=e.startsWith("vlt_")?e:`vlt_${e}`;await this.http.delete(`/v1/vaults/${n}`,{headers:{"X-VMK":t}})}async uploadIngot(e,t){this.validateUploadOptions(t);const n=t.name??(t.file instanceof File?t.file.name:"unnamed"),i=t.contentType??t.file.type??"application/octet-stream",s=await this.http.post(`/v1/vaults/${e.id}/ingots`,{name:n,content_type:i,size_bytes:t.file.size},{headers:{Authorization:`Bearer ${e.vatToken}`}});return{id:s.data.ingot_id,name:s.data.name,contentType:s.data.content_type,size:s.data.size_bytes,createdAt:s.data.created_at,type:s.data.ingot_type}}async downloadIngot(e,t){const n=t.startsWith("ing_")?t:`ing_${t}`;return this.http.requestRaw(`/v1/vaults/${e.id}/ingots/${n}/download`,{method:"POST",headers:{Authorization:`Bearer ${e.vatToken}`}})}async listIngots(e){return(await this.http.get(`/v1/vaults/${e.id}/ingots`,{headers:{Authorization:`Bearer ${e.vatToken}`}})).data.ingots.map(e=>({id:e.ingot_id,name:e.name,contentType:e.content_type,size:e.size_bytes,createdAt:e.created_at,type:e.ingot_type}))}async deleteIngot(e,t){const n=t.startsWith("ing_")?t:`ing_${t}`;await this.http.delete(`/v1/vaults/${e.id}/ingots/${n}`,{headers:{Authorization:`Bearer ${e.vatToken}`}})}validateCreateOptions(e){if(!e.name?.trim())throw new s("Vault name is required");if(e.name.length>255)throw new s("Vault name must be 255 characters or less")}validateUploadOptions(e){if(!e.file)throw new s("File is required");if(0===e.file.size)throw new s("File cannot be empty")}}const de=["hex","base64","base64url","alphanumeric","alphanumeric-mixed","password","numeric","uuid","bytes"];function he(e){return de.includes(e)}class pe{constructor(e){this.http=e}async generate(e){this.validateOptions(e);const t=await this.http.post("/v1/apps/rng/generate",{num_bytes:e.bytes,format:e.format??"base64url"}),n=t.data.format??"base64url";if(!he(n))throw new s(`Server returned invalid format: ${n}`);return{value:"bytes"===n?v(t.data.random_bytes_b64):t.data.random_bytes_b64,bytes:t.data.num_bytes,format:n,referenceId:t.data.reference_id}}async uuid(){const e=await this.generate({bytes:16,format:"uuid"});if("string"!=typeof e.value)throw new s("Expected string value for uuid format");return e.value}async hex(e){const t=await this.generate({bytes:e,format:"hex"});if("string"!=typeof t.value)throw new s("Expected string value for hex format");return t.value}async alphanumeric(e){const t=await this.generate({bytes:e,format:"alphanumeric-mixed"});if("string"!=typeof t.value)throw new s("Expected string value for alphanumeric format");return t.value}async password(e){const t=await this.generate({bytes:e,format:"password"});if("string"!=typeof t.value)throw new s("Expected string value for password format");return t.value}validateOptions(e){if(!e.bytes||"number"!=typeof e.bytes)throw new s("bytes is required and must be a number");if(e.bytes<1||e.bytes>1024)throw new s("bytes must be between 1 and 1024");if(e.format&&!he(e.format))throw new s(`Invalid format. Must be one of: ${de.join(", ")}`)}}let ue=!1;function me(e){ue=e,e&&be("info","Debug mode enabled")}function be(e,t,...n){const i=`[SparkVault] ${(new Date).toISOString().split("T")[1].slice(0,-1)} ${t}`;switch(e){case"debug":ue&&console.debug(i,...n);break;case"info":ue&&console.log(i,...n);break;case"warn":ue&&console.warn(i,...n);break;case"error":console.error(i,...n)}}const ge={debug:(e,...t)=>be("debug",e,...t),info:(e,...t)=>be("info",e,...t),warn:(e,...t)=>be("warn",e,...t),error:(e,...t)=>be("error",e,...t),group:e=>{ue&&console.group(`[SparkVault] ${e}`)},groupEnd:()=>{ue&&console.groupEnd()}},ye={initialized:!1,instance:null,config:null,observer:null,isAuthenticating:!1};function fe(e){if(!e||"string"!=typeof e)return null;const t=e.split(".");let n=window;for(const i of t){if(!n||"object"!=typeof n||!(i in n))return ge.warn(`Function "${e}" not found on window`),null;n=n[i]}return"function"==typeof n?n:(ge.warn(`"${e}" is not a function`),null)}function ke(e){const t=ye.config;if(t){if(ge.error("Verification error:",e.message),t.errorFunction){const n=fe(t.errorFunction);if(n){ge.debug(`Calling error function: ${t.errorFunction}`);try{n(e)}catch(e){ge.error("Error in error function:",e)}}}if(t.errorUrl){const n=new URL(t.errorUrl,window.location.origin);n.searchParams.set("error",e.message),ge.debug(`Redirecting to error URL: ${n.toString()}`),window.location.href=n.toString()}}}async function ve(){if(ye.instance)if(ye.isAuthenticating)ge.debug("Already authenticating, skipping");else{ye.isAuthenticating=!0,ge.info("Starting verification...");try{const e=await ye.instance.identity.pop();if(!e)return ge.info("User cancelled verification"),void(ye.isAuthenticating=!1);await async function(e){const t=ye.config;if(t){if(ge.info("Verification successful",{identity:e.identity,identityType:e.identityType,hasToken:!!e.token}),t.successFunction){const n=fe(t.successFunction);if(n){ge.debug(`Calling success function: ${t.successFunction}`);try{n(e)}catch(e){ge.error("Error in success function:",e)}}}if(t.successUrl){ge.debug(`POSTing to success URL: ${t.successUrl}`);try{const n=await fetch(t.successUrl,{method:"POST",headers:{"Content-Type":"application/json",Accept:"application/json"},credentials:"include",body:JSON.stringify({token:e.token,identity:e.identity,identityType:e.identityType})}),i=await n.json();if(ge.debug("Success URL response:",i),i.redirectUrl||i.redirect_url){const e=i.redirectUrl||i.redirect_url;ge.info(`Redirecting to: ${e}`),window.location.href=e}else!0===i.reload&&(ge.info("Reloading page"),window.location.reload())}catch(e){ge.error("Failed to POST to success URL:",e),ke(e instanceof Error?e:new Error(String(e)))}}}}(e)}catch(e){if(e&&"object"==typeof e&&"name"in e){const t=e;if("UserCancelledError"===t.name||"user_cancelled"===t.code)return ge.info("User cancelled verification"),void(ye.isAuthenticating=!1)}ke(e instanceof Error?e:new Error(String(e)))}finally{ye.isAuthenticating=!1}}else ge.error("SDK not initialized")}function we(){const e=ye.config;if(!e?.attachSelector)return;const t=document.querySelectorAll(e.attachSelector);ge.debug(`Found ${t.length} elements matching "${e.attachSelector}"`),t.forEach(e=>{"true"!==e.dataset.sparkvaultAttached&&(e.dataset.sparkvaultAttached="true",ge.debug("Attaching click handler to element:",e),e.addEventListener("click",e=>{ge.debug("Auth element clicked"),e.preventDefault(),e.stopPropagation(),ve()}))})}function xe(){const e=ye.config;e?.attachSelector&&("undefined"!=typeof MutationObserver?(ye.observer=new MutationObserver(e=>{let t=!1;for(const n of e)if(n.addedNodes.length>0){t=!0;break}t&&we()}),ye.observer.observe(document.body,{childList:!0,subtree:!0}),ge.debug("MutationObserver started for dynamic elements")):ge.warn("MutationObserver not available, dynamic elements will not be auto-attached"))}class Ce{constructor(e){!function(e){if(!e.accountId)throw new s("accountId is required",{field:"accountId"});if("string"!=typeof e.accountId)throw new s("accountId must be a string",{field:"accountId",received:typeof e.accountId});if(!e.accountId.startsWith("acc_"))throw new s('accountId must start with "acc_"',{field:"accountId",received:e.accountId})}(e),this.config=function(e){return{accountId:e.accountId,timeout:e.timeout??3e4,apiBaseUrl:"https://api.sparkvault.com",identityBaseUrl:"https://api.sparkvault.com/v1/apps/identity",preloadConfig:!1!==e.preloadConfig}}(e);const t=new u(this.config);this.identity=new ae(this.config),this.sparks=new le(t),this.vaults=new ce(this.config,t),this.rng=new pe(t)}static init(e){return new Ce(e)}static get version(){return"__VERSION__"}}"undefined"!=typeof window&&(window.SparkVault=Ce,function(e){if(ye.initialized)return void ge.debug("Auto-init already completed");if("undefined"==typeof window||"undefined"==typeof document)return;const t=function(){if(document.currentScript instanceof HTMLScriptElement)return document.currentScript;const e=document.querySelectorAll('script[src*="sparkvault"]');for(const t of e)if(t.dataset.accountId)return t;return e[0]||null}();if(!t)return;const n=function(e){const t=e.dataset.timeout;return{accountId:e.dataset.accountId||null,attachSelector:e.dataset.attachSelector||null,successUrl:e.dataset.successUrl||null,successFunction:e.dataset.successFunction||null,errorUrl:e.dataset.errorUrl||null,errorFunction:e.dataset.errorFunction||null,debug:"true"===e.dataset.debug,preloadConfig:"false"!==e.dataset.preloadConfig,timeout:t?parseInt(t,10):3e4}}(t);if(ye.config=n,n.debug&&me(!0),ge.info("Auto-init starting..."),ge.group("Configuration"),ge.debug("Account ID:",n.accountId||"(not set)"),ge.debug("Attach Selector:",n.attachSelector||"(not set)"),ge.debug("Success URL:",n.successUrl||"(not set)"),ge.debug("Success Function:",n.successFunction||"(not set)"),ge.debug("Error URL:",n.errorUrl||"(not set)"),ge.debug("Error Function:",n.errorFunction||"(not set)"),ge.debug("Debug:",n.debug),ge.groupEnd(),!n.accountId)return void ge.debug("No data-account-id attribute, skipping auto-init");try{ye.instance=e.init({accountId:n.accountId,preloadConfig:n.preloadConfig,timeout:n.timeout}),ye.initialized=!0,ge.info("SDK initialized successfully")}catch(e){return void ge.error("Failed to initialize SDK:",e)}n.attachSelector&&("loading"===document.readyState?document.addEventListener("DOMContentLoaded",()=>{we(),xe()}):(we(),xe()));const i=window.SparkVault;i&&(i.identity={pop:ve,render:e=>ye.instance?ye.instance.identity.render(e):Promise.reject(new Error("SDK not initialized")),authenticate:ve,verify:e=>ye.instance?ye.instance.identity.pop(e):Promise.reject(new Error("SDK not initialized"))},i.getInstance=()=>ye.instance),ge.info("Auto-init complete")}(Ce)),e.AuthenticationError=n,e.AuthorizationError=i,e.NetworkError=o,e.PopupBlockedError=l,e.SparkVault=Ce,e.SparkVaultError=t,e.TimeoutError=r,e.UserCancelledError=a,e.ValidationError=s,e.default=Ce,e.logger=ge,e.setDebugMode=me,Object.defineProperty(e,"__esModule",{value:!0})});
|
|
2
|
+
//# sourceMappingURL=sparkvault.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sparkvault.js","sources":["../src/errors.ts","../src/utils/retry.ts","../src/http.ts","../src/identity/utils/cooldown-timer.ts","../src/utils/base64url.ts","../src/identity/api.ts","../src/identity/methods.ts","../src/identity/state.ts","../src/identity/utils.ts","../src/identity/handlers/passkey-handler.ts","../src/identity/handlers/totp-handler.ts","../src/identity/handlers/sparklink-handler.ts","../src/identity/styles.ts","../src/identity/views/icons.ts","../src/identity/modal.ts","../src/identity/views/base.ts","../src/identity/views/loading.ts","../src/identity/views/identity-input.ts","../src/identity/views/method-select.ts","../src/identity/views/totp-verify.ts","../src/identity/views/passkey.ts","../src/identity/views/passkey-prompt.ts","../src/identity/views/sparklink-waiting.ts","../src/identity/views/error.ts","../src/identity/renderer.ts","../src/identity/inline-container.ts","../src/identity/index.ts","../src/sparks/index.ts","../src/vaults/index.ts","../src/rng/index.ts","../src/logger.ts","../src/auto-init.ts","../src/index.ts","../src/config.ts"],"sourcesContent":[null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null],"names":["SparkVaultError","Error","constructor","message","code","statusCode","details","super","this","name","Object","setPrototypeOf","prototype","AuthenticationError","AuthorizationError","ValidationError","NetworkError","undefined","TimeoutError","UserCancelledError","PopupBlockedError","DEFAULT_OPTIONS","maxAttempts","baseDelayMs","maxDelayMs","jitterFactor","isRetryable","error","TypeError","DOMException","calculateDelay","attempt","exponentialDelay","Math","pow","cappedDelay","min","random","sleep","ms","Promise","resolve","setTimeout","async","withRetry","fn","options","config","lastError","delay","HttpClient","request","path","retry","executeRequest","isRetryableError","method","headers","body","timeout","url","apiBaseUrl","requestHeaders","Accept","controller","AbortController","timeoutId","abort","response","fetch","JSON","stringify","signal","clearTimeout","data","parseResponse","ok","createErrorFromResponse","status","contentLength","get","contentType","includes","json","text","slice","record","post","put","patch","requestRaw","executeRequestRaw","errorData","catch","blob","CooldownTimer","intervalId","secondsRemaining","duration","onTick","onComplete","start","stop","setInterval","clearInterval","isRunning","getRemainingSeconds","ExpirationTimer","Number","isFinite","expiresAt","console","warn","onExpired","calculateRemaining","nowSeconds","floor","Date","now","remaining","ceil","base64urlEncode","binary","i","byteLength","String","fromCharCode","btoa","replace","arrayBufferToBase64url","buffer","Uint8Array","base64urlDecode","base64url","base64","padded","repeat","length","atob","bytes","charCodeAt","base64urlToArrayBuffer","ArrayBuffer","set","base64urlToBytes","Array","from","IdentityApi","timeoutMs","configCache","baseUrl","identityBaseUrl","accountId","endpoint","IdentityApiError","getConfig","preloadConfig","isConfigPreloaded","checkPasskey","email","sendTotp","params","recipient","verifyTotp","kindling","pin","startPasskeyRegister","completePasskeyRegister","attestation","credential","id","rawId","type","clientDataJSON","attestationObject","startPasskeyVerify","completePasskeyVerify","assertion","authenticatorData","signature","userHandle","getSocialAuthUrl","provider","redirectUri","state","URLSearchParams","redirect_uri","getEnterpriseAuthUrl","sendSparkLink","checkSparkLinkStatus","sparkId","METHOD_REGISTRY","totp_email","identityType","description","icon","totp_sms","totp_voice","passkey","sparklink","social_google","social_apple","social_microsoft","social_github","social_facebook","social_linkedin","enterprise_okta","enterprise_entra","enterprise_onelogin","enterprise_ping","enterprise_jumpcloud","hris_bamboohr","hris_workday","hris_adp","hris_gusto","hris_rippling","enrichMethods","ids","map","filter","m","VerificationState","_sdkConfig","_viewState","view","_recipient","_identityType","_passkey","hasPasskey","isFallbackMode","pendingResult","_totp","listeners","Set","subscribe","listener","add","delete","notify","sdkConfig","setConfig","getAvailableMethods","methods","isPasskeyEnabled","viewState","setViewState","setIdentity","getAllowedIdentityTypes","allowedIdentityTypes","setPasskeyStatus","enablePasskeyFallback","setPendingResult","result","shouldShowPasskeyPrompt","isPasskeyPromptDismissed","match","document","cookie","RegExp","getCookie","dismissPasskeyPrompt","value","days","date","setTime","getTime","expires","toUTCString","setCookie","totp","setKindling","setTotpMethod","reset","PasskeyHandler","api","emailValid","email_valid","register","challenge","publicKeyOptions","rp","rpId","rpName","user","userId","displayName","pubKeyCredParams","alg","authenticatorSelection","residentKey","userVerification","navigator","credentials","create","publicKey","success","errorType","token","identity","identity_type","handleError","verify","allowCredentials","cred","transports","TotpHandler","send","expires_at","resend","verified","newKindling","retryAfter","retry_after","backoffExpires","SparkLinkHandler","checkStatus","STYLE_ID","injectStyles","getElementById","branding","enabled","overlay","classList","remove","updateBlur","backdropBlur","style","createElement","textContent","isDark","resolveTheme","enableBlur","tokens","primary","primaryHover","primaryLight","errorLight","errorBorder","bg","bgSubtle","bgHover","bgInput","border","borderHover","borderFocus","textPrimary","textSecondary","textMuted","textOnPrimary","shadowSm","shadowLg","getStyles","head","appendChild","themeMode","createSvgElement","viewBox","width","height","svg","createElementNS","setAttribute","createPath","d","attrs","key","entries","createCircle","cx","cy","r","circle","createCheckmarkIcon","stroke","createBackArrowIcon","createCloseIcon","createPasskeyIcon","fill","group","createMethodIcon","iconName","createEmailIcon","createPhoneIcon","createFingerprintIcon","createLinkIcon","createGoogleIcon","createAppleIcon","createMicrosoftIcon","createGithubIcon","createFacebookIcon","createLinkedinIcon","createBuildingIcon","createUsersIcon","DEFAULT_BRANDING","companyName","logoLight","logoDark","ModalContainer","elements","onCloseCallback","keydownHandler","overlayClickHandler","closeBtnClickHandler","closeBtn","effectiveTheme","headerElement","createLoading","onClose","updateBranding","newHeader","createHeader","parentNode","replaceChild","updateBackdropBlur","className","modal","header","footer","footerText","createTextNode","footerLink","href","target","rel","e","handleClose","addEventListener","overflow","firstInput","querySelector","HTMLElement","focus","titleContainer","logoUrl","logo","src","alt","srTitle","getBody","isOpen","destroy","removeEventListener","escapeHtml","str","div","innerHTML","children","el","clearChildren","element","firstChild","removeChild","errorMessage","validateEmail","trimmed","trim","toLowerCase","test","validatePhone","phone","hasPlus","startsWith","digits","formatPhoneDisplay","normalized","LoadingView","props","render","container","spinner","IdentityInputView","inputElement","labelElement","submitButton","errorContainer","focusTimeoutId","detectedType","boundHandleInput","handleInput","boundHandleKeyDown","preventDefault","handleSubmit","boundHandleSubmit","allowsBoth","allowedTypes","allowsEmail","allowsPhone","headerSection","subtitle","getSubtitleText","formSection","inputWrapper","htmlFor","getLabelText","placeholder","getPlaceholderText","autocomplete","required","maxLength","initialValue","detectAndUpdateType","clearError","wasPhone","cursorPos","selectionStart","formatted","newPos","setSelectionRange","input","looksLikePhone","showError","rawValue","validPhone","disabled","onSubmit","validEmail","MethodSelectView","backLink","methodButtons","methodClickHandlers","Map","boundHandleBack","onBack","createBackLink","title","methodsContainer","methodButton","createMethodButton","push","link","btn","content","getMethodIcon","handler","onSelectMethod","iconContainer","clear","TotpVerifyView","inputElements","resendButton","resendTimer","backoffTimer","backoffSeconds","autoSubmitTimeoutId","isSubmitting","inputHandlers","boundHandleResend","handleResend","methodText","inputGroup","createInputGroup","max","startBackoff","resendContainer","display","flexDirection","order","inputMode","pattern","handlers","keydown","handleKeyDown","paste","handlePaste","select","index","CODE_LENGTH","checkAutoSubmit","clipboardData","getData","focusIndex","getCode","join","forEach","validCode","validateTotpCode","disableInputs","updateSubmitButton","onResend","PasskeyView","actionButton","fallbackLink","boundHandleStart","handleStart","boundHandleFallback","onFallback","mode","buttonText","createFallbackLink","onStart","PasskeyPromptView","addButton","skipLink","boundHandleAdd","onAddPasskey","boundHandleSkip","onSkip","benefitsContainer","benefitsList","benefits","benefit","li","SparkLinkWaitingView","expirationTimer","countdownElement","fallbackButton","waitingSection","waitingText","countdownSection","countdownLabel","startExpirationTimer","fallbackContainer","formatTime","seconds","toString","padStart","expiresAtSeconds","ErrorView","retryButton","closeButton","boundHandleRetry","onRetry","boundHandleClose","createErrorIcon","contentSection","codeBadge","codeLabel","codeValue","buttonContainer","IdentityRenderer","callbacks","currentView","pollingInterval","verificationState","passkeyHandler","totpHandler","sparkLinkHandler","timeoutPromise","race","then","c","setState","resolvedBackdropBlur","backdrop_blur","showMethodSelect","showIdentityInput","err","normalizeError","close","stopSparkLinkPolling","destroyCurrentView","onCancel","createViewForState","focusable","handleIdentitySubmit","handleMethodSelect","handleTotpSubmit","handleTotpResend","isFromPrompt","handlePasskeyStart","handlePasskeyRegistrationSkip","handlePasskeyFallback","handlePasskeyPromptAdd","handlePasskeyPromptSkip","handleSparkLinkResend","handleSparkLinkFallback","methodIds","isArray","hasPasskeyMethod","some","checkResult","totpMethod","startSparkLinkPolling","handleSocialLogin","currentMethod","onSuccess","currentMode","array","crypto","getRandomValues","b","generateState","window","location","origin","pathname","sessionStorage","setItem","authUrl","showHeader","showCloseButton","showFooter","InlineContainer","targetElement","containerOptions","_options","_enabled","IdentityModule","renderer","pop","reject","onError","verifyToken","parts","split","payloadB64","payload","parse","base64urlToString","p","iss","sub","aud","exp","iat","verified_at","isTokenClaims","expectedIssuer","SparksModule","http","validateCreateOptions","encodePayload","ttl","max_reads","maxReads","password","spark_id","read","cleanId","decodePayload","readAt","read_at","burned","readsRemaining","reads_remaining","VaultsModule","_config","hosted_vmk","hostedVmk","vault_id","vmk","createdAt","created_at","unseal","vaultId","vatToken","vat_token","ingotCount","ingot_count","storageBytes","storage_bytes","list","vaults","v","uploadIngot","vault","validateUploadOptions","file","File","createResponse","content_type","size_bytes","size","Authorization","ingot_id","ingot_type","downloadIngot","ingotId","listIngots","ingots","deleteIngot","VALID_RNG_FORMATS","isRNGFormat","RNGModule","generate","validateOptions","num_bytes","format","responseFormat","random_bytes_b64","referenceId","reference_id","uuid","hex","alphanumeric","debugEnabled","setDebugMode","log","level","args","formattedMessage","toISOString","debug","logger","info","label","groupEnd","initialized","instance","observer","isAuthenticating","resolveFunction","current","part","errorFunction","errorUrl","URL","searchParams","hasToken","successFunction","successUrl","redirectUrl","redirect_url","reload","handleSuccess","attachHandlers","attachSelector","querySelectorAll","dataset","sparkvaultAttached","stopPropagation","startObserver","MutationObserver","mutations","shouldAttach","mutation","addedNodes","observe","childList","subtree","SparkVault","field","received","validateConfig","resolveConfig","sparks","rng","init","version","SparkVaultClass","script","currentScript","HTMLScriptElement","scripts","getCurrentScript","timeoutStr","parseInt","parseConfig","readyState","SparkVaultGlobal","authenticate","getInstance","autoInit"],"mappings":"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"}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Base64URL Encoding/Decoding Utilities
|
|
3
|
+
*
|
|
4
|
+
* Centralized implementation per CLAUDE.md DRY enforcement.
|
|
5
|
+
* Used across identity (WebAuthn), sparks, and RNG modules.
|
|
6
|
+
*/
|
|
7
|
+
/**
|
|
8
|
+
* Encode Uint8Array to base64url string (URL-safe base64 without padding)
|
|
9
|
+
*
|
|
10
|
+
* @param data - Binary data to encode
|
|
11
|
+
* @returns Base64url encoded string
|
|
12
|
+
*/
|
|
13
|
+
export declare function base64urlEncode(data: Uint8Array): string;
|
|
14
|
+
/**
|
|
15
|
+
* Encode ArrayBuffer to base64url string
|
|
16
|
+
*
|
|
17
|
+
* @param buffer - ArrayBuffer to encode
|
|
18
|
+
* @returns Base64url encoded string
|
|
19
|
+
*/
|
|
20
|
+
export declare function arrayBufferToBase64url(buffer: ArrayBuffer): string;
|
|
21
|
+
/**
|
|
22
|
+
* Decode base64url string to Uint8Array
|
|
23
|
+
*
|
|
24
|
+
* @param base64url - Base64url encoded string
|
|
25
|
+
* @returns Decoded bytes as Uint8Array
|
|
26
|
+
*/
|
|
27
|
+
export declare function base64urlDecode(base64url: string): Uint8Array;
|
|
28
|
+
/**
|
|
29
|
+
* Decode base64url string to ArrayBuffer
|
|
30
|
+
*
|
|
31
|
+
* @param base64url - Base64url encoded string
|
|
32
|
+
* @returns Decoded ArrayBuffer
|
|
33
|
+
*/
|
|
34
|
+
export declare function base64urlToArrayBuffer(base64url: string): ArrayBuffer;
|
|
35
|
+
/**
|
|
36
|
+
* Decode base64url string to UTF-8 string
|
|
37
|
+
*
|
|
38
|
+
* @param base64url - Base64url encoded string
|
|
39
|
+
* @returns Decoded UTF-8 string
|
|
40
|
+
*/
|
|
41
|
+
export declare function base64urlToString(base64url: string): string;
|
|
42
|
+
/**
|
|
43
|
+
* Decode base64url string to number array
|
|
44
|
+
* Used by RNG module for bytes format
|
|
45
|
+
*
|
|
46
|
+
* @param base64url - Base64url encoded string
|
|
47
|
+
* @returns Array of byte values
|
|
48
|
+
*/
|
|
49
|
+
export declare function base64urlToBytes(base64url: string): number[];
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Retry Utility with Exponential Backoff
|
|
3
|
+
*
|
|
4
|
+
* Per CLAUDE.md §7: Retries allowed only if idempotent, MUST use exponential backoff.
|
|
5
|
+
*/
|
|
6
|
+
export interface RetryOptions {
|
|
7
|
+
/** Maximum number of retry attempts (default: 3) */
|
|
8
|
+
maxAttempts?: number;
|
|
9
|
+
/** Base delay in milliseconds (default: 200) */
|
|
10
|
+
baseDelayMs?: number;
|
|
11
|
+
/** Maximum delay in milliseconds (default: 5000) */
|
|
12
|
+
maxDelayMs?: number;
|
|
13
|
+
/** Jitter factor 0-1 to randomize delays (default: 0.2) */
|
|
14
|
+
jitterFactor?: number;
|
|
15
|
+
/** Function to determine if error is retryable (default: checks for network/timeout/5xx) */
|
|
16
|
+
isRetryable?: (error: unknown) => boolean;
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Execute an async function with retry logic and exponential backoff.
|
|
20
|
+
*
|
|
21
|
+
* @param fn - Async function to execute
|
|
22
|
+
* @param options - Retry configuration options
|
|
23
|
+
* @returns Promise resolving to the function result
|
|
24
|
+
* @throws The last error if all retries fail
|
|
25
|
+
*
|
|
26
|
+
* @example
|
|
27
|
+
* const result = await withRetry(
|
|
28
|
+
* () => fetch('/api/data'),
|
|
29
|
+
* { maxAttempts: 3, baseDelayMs: 100 }
|
|
30
|
+
* );
|
|
31
|
+
*/
|
|
32
|
+
export declare function withRetry<T>(fn: () => Promise<T>, options?: RetryOptions): Promise<T>;
|