@authaction/passkey-plus-sdk
Version:
A lightweight frontend SDK for passkey-based passwordless authentication with AuthAction
2 lines • 1.95 kB
JavaScript
import{startRegistration as p,startAuthentication as u}from"@simplewebauthn/browser";var r=class{constructor(e){let{tenantDomain:t,appId:n}=e;this.baseUrl=`https://${t}/api/v1/passkey-plus-public/${n}`}async register(e,t){let n=await this.getRegistrationOptions(e);t?.authenticatorAttachment&&(n.authenticatorSelection={...n.authenticatorSelection,authenticatorAttachment:t.authenticatorAttachment});let s=await p({optionsJSON:n}),i=await(await fetch(`${this.baseUrl}/transaction/${e}/register`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(s)})).json(),{nonce:o}=i.data;return o}async authenticate(e,t){let n=await this.getAuthenticationOptions(e),s=await u({optionsJSON:n}),a=await fetch(`${this.baseUrl}/transaction/${e}/authenticate`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(s)});if(!a.ok){let c=await a.json();throw new Error(`Authentication request failed: ${c.message||a.statusText}`)}let i=await a.json(),{nonce:o}=i.data;return o}async canAuthenticateWithPasskey(){return!!window.PublicKeyCredential}async canRegisterPasskey(){return!!window.PublicKeyCredential&&typeof navigator.credentials.create=="function"}async canUseConditionalMediation(){return typeof window?.PublicKeyCredential?.isConditionalMediationAvailable=="function"?await window.PublicKeyCredential.isConditionalMediationAvailable():!1}async getRegistrationOptions(e){let t=await fetch(`${this.baseUrl}/transaction/${e}/registration-options`);if(!t.ok){let s=await t.json();throw new Error(`Registration options request failed: ${s.message||t.statusText}`)}return(await t.json()).data}async getAuthenticationOptions(e){let t=await fetch(`${this.baseUrl}/transaction/${e}/authentication-options`);if(!t.ok){let s=await t.json();throw new Error(`Authentication options request failed: ${s.message||t.statusText}`)}return(await t.json()).data}};export{r as PasskeyPlus};
//# sourceMappingURL=index.mjs.map