UNPKG

otplib

Version:

TypeScript-first library for TOTP and HOTP with multi-runtime and plugin support

2 lines 2.66 kB
import{generateSecret as h,ConfigurationError as O}from"@otplib/core";import{generate as P,generateSync as d,verify as S,verifySync as b}from"@otplib/hotp";import{generate as V,generateSync as x,verify as H,verifySync as R}from"@otplib/totp";import{generateTOTP as v}from"@otplib/uri";import{ScureBase32Plugin as T}from"@otplib/plugin-base32-scure";import{NobleCryptoPlugin as m}from"@otplib/plugin-crypto-noble";var g=Object.freeze(new m),u=Object.freeze(new T);function c(t){return{secret:t.secret,strategy:t.strategy??"totp",crypto:t.crypto??g,base32:t.base32??u,algorithm:t.algorithm??"sha1",digits:t.digits??6,period:t.period??30,epoch:t.epoch??Math.floor(Date.now()/1e3),t0:t.t0??0,counter:t.counter}}function l(t){return{...c(t),token:t.token,epochTolerance:t.epochTolerance??0,counterTolerance:t.counterTolerance??0}}function y(t,e,r){if(t==="totp")return r.totp();if(t==="hotp"){if(e===void 0)throw new O("Counter is required for HOTP strategy. Example: { strategy: 'hotp', counter: 0 }");return r.hotp(e)}throw new O(`Unknown OTP strategy: ${t}. Valid strategies are 'totp' or 'hotp'.`)}function U(t){let{crypto:e=g,base32:r=u,length:o=20}=t||{};return h({crypto:e,base32:r,length:o})}function j(t){let{issuer:e,label:r,secret:o,algorithm:n="sha1",digits:i=6,period:s=30}=t;return v({issuer:e,label:r,secret:o,algorithm:n,digits:i,period:s})}async function A(t){let e=c(t),{secret:r,crypto:o,base32:n,algorithm:i,digits:s}=e,a={secret:r,crypto:o,base32:n,algorithm:i,digits:s};return y(e.strategy,e.counter,{totp:()=>V({...a,period:e.period,epoch:e.epoch,t0:e.t0}),hotp:p=>P({...a,counter:p})})}function E(t){let e=c(t),{secret:r,crypto:o,base32:n,algorithm:i,digits:s}=e,a={secret:r,crypto:o,base32:n,algorithm:i,digits:s};return y(e.strategy,e.counter,{totp:()=>x({...a,period:e.period,epoch:e.epoch,t0:e.t0}),hotp:p=>d({...a,counter:p})})}async function I(t){let e=l(t),{secret:r,token:o,crypto:n,base32:i,algorithm:s,digits:a}=e,p={secret:r,token:o,crypto:n,base32:i,algorithm:s,digits:a};return y(e.strategy,e.counter,{totp:()=>H({...p,period:e.period,epoch:e.epoch,t0:e.t0,epochTolerance:e.epochTolerance}),hotp:f=>S({...p,counter:f,counterTolerance:e.counterTolerance})})}function q(t){let e=l(t),{secret:r,token:o,crypto:n,base32:i,algorithm:s,digits:a}=e,p={secret:r,token:o,crypto:n,base32:i,algorithm:s,digits:a};return y(e.strategy,e.counter,{totp:()=>R({...p,period:e.period,epoch:e.epoch,t0:e.t0,epochTolerance:e.epochTolerance}),hotp:f=>b({...p,counter:f,counterTolerance:e.counterTolerance})})}export{A as generate,U as generateSecret,E as generateSync,j as generateURI,I as verify,q as verifySync}; //# sourceMappingURL=functional.js.map