otplib
Version:
TypeScript-first library for TOTP and HOTP with multi-runtime and plugin support
2 lines • 3.81 kB
JavaScript
;var T=Object.defineProperty;var C=Object.getOwnPropertyDescriptor;var D=Object.getOwnPropertyNames;var B=Object.prototype.hasOwnProperty;var U=(t,e)=>{for(var r in e)T(t,r,{get:e[r],enumerable:!0})},w=(t,e,r,n)=>{if(e&&typeof e=="object"||typeof e=="function")for(let o of D(e))!B.call(t,o)&&o!==r&&T(t,o,{get:()=>e[o],enumerable:!(n=C(e,o))||n.enumerable});return t};var I=t=>w(T({},"__esModule",{value:!0}),t);var k={};U(k,{OTP:()=>b});module.exports=I(k);var G=require("@otplib/core");var d=require("@otplib/plugin-base32-scure"),S=require("@otplib/plugin-crypto-noble"),l=Object.freeze(new S.NobleCryptoPlugin),f=Object.freeze(new d.ScureBase32Plugin);function m(t){return{secret:t.secret,strategy:t.strategy??"totp",crypto:t.crypto??l,base32:t.base32??f,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 P(t){return{...m(t),token:t.token,epochTolerance:t.epochTolerance??0,counterTolerance:t.counterTolerance??0}}var O=require("@otplib/core"),c=require("@otplib/hotp"),y=require("@otplib/totp"),h=require("@otplib/uri");function u(t,e,r){if(t==="totp")return r.totp();if(t==="hotp"){if(e===void 0)throw new O.ConfigurationError("Counter is required for HOTP strategy. Example: { strategy: 'hotp', counter: 0 }");return r.hotp(e)}throw new O.ConfigurationError(`Unknown OTP strategy: ${t}. Valid strategies are 'totp' or 'hotp'.`)}function V(t){let{strategy:e="totp",issuer:r,label:n,secret:o,algorithm:a="sha1",digits:p=6,period:i=30,counter:s}=t;return u(e,s,{totp:()=>(0,h.generateTOTP)({issuer:r,label:n,secret:o,algorithm:a,digits:p,period:i}),hotp:g=>(0,h.generateHOTP)({issuer:r,label:n,secret:o,algorithm:a,digits:p,counter:g})})}async function R(t){let e=m(t),{secret:r,crypto:n,base32:o,algorithm:a,digits:p}=e,i={secret:r,crypto:n,base32:o,algorithm:a,digits:p};return u(e.strategy,e.counter,{totp:()=>(0,y.generate)({...i,period:e.period,epoch:e.epoch,t0:e.t0}),hotp:s=>(0,c.generate)({...i,counter:s})})}function x(t){let e=m(t),{secret:r,crypto:n,base32:o,algorithm:a,digits:p}=e,i={secret:r,crypto:n,base32:o,algorithm:a,digits:p};return u(e.strategy,e.counter,{totp:()=>(0,y.generateSync)({...i,period:e.period,epoch:e.epoch,t0:e.t0}),hotp:s=>(0,c.generateSync)({...i,counter:s})})}async function H(t){let e=P(t),{secret:r,token:n,crypto:o,base32:a,algorithm:p,digits:i}=e,s={secret:r,token:n,crypto:o,base32:a,algorithm:p,digits:i};return u(e.strategy,e.counter,{totp:()=>(0,y.verify)({...s,period:e.period,epoch:e.epoch,t0:e.t0,epochTolerance:e.epochTolerance}),hotp:g=>(0,c.verify)({...s,counter:g,counterTolerance:e.counterTolerance})})}function v(t){let e=P(t),{secret:r,token:n,crypto:o,base32:a,algorithm:p,digits:i}=e,s={secret:r,token:n,crypto:o,base32:a,algorithm:p,digits:i};return u(e.strategy,e.counter,{totp:()=>(0,y.verifySync)({...s,period:e.period,epoch:e.epoch,t0:e.t0,epochTolerance:e.epochTolerance}),hotp:g=>(0,c.verifySync)({...s,counter:g,counterTolerance:e.counterTolerance})})}var b=class{strategy;crypto;base32;constructor(e={}){let{strategy:r="totp",crypto:n=l,base32:o=f}=e;this.strategy=r,this.crypto=n,this.base32=o}getStrategy(){return this.strategy}generateSecret(e=20){return(0,G.generateSecret)({crypto:this.crypto,base32:this.base32,length:e})}async generate(e){return R({...e,strategy:this.strategy,crypto:this.crypto,base32:this.base32})}generateSync(e){return x({...e,strategy:this.strategy,crypto:this.crypto,base32:this.base32})}async verify(e){return H({...e,strategy:this.strategy,crypto:this.crypto,base32:this.base32})}verifySync(e){return v({...e,strategy:this.strategy,crypto:this.crypto,base32:this.base32})}generateURI(e){return V({...e,strategy:this.strategy})}};0&&(module.exports={OTP});
//# sourceMappingURL=class.cjs.map