{"version":3,"sources":["../src/index.ts","../src/authenticator.ts","../src/totp.ts","../src/hotp.ts","../src/types.ts"],"sourcesContent":["/**\n * @otplib/preset-v11\n *\n * v11 compatibility preset.\n */\n\nimport { Authenticator } from \"./authenticator.js\";\nimport { HOTP } from \"./hotp.js\";\nimport { TOTP } from \"./totp.js\";\n\nexport { HOTP, TOTP, Authenticator };\nexport * from \"./types.js\";\n\nexport const hotp = new HOTP();\nexport const totp = new TOTP();\nexport const authenticator = new Authenticator();\n","/**\n * @otplib/preset-v11\n *\n * v11-compatible Authenticator class implementation.\n */\n\nimport { generateSecret as generateSecretCore } from \"@otplib/core\";\nimport { base32 as defaultBase32 } from \"@otplib/plugin-base32-scure\";\nimport { crypto as defaultCrypto } from \"@otplib/plugin-crypto-noble\";\nimport { generateSync as totpGenerateSync, verifySync as totpVerifySync } from \"@otplib/totp\";\n\nimport { TOTP } from \"./totp.js\";\nimport { HashAlgorithms, KeyEncodings as KeyEncodingsConst } from \"./types.js\";\n\nimport type {\n  AuthenticatorOptions,\n  Base32SecretKey,\n  SecretKey,\n  KeyEncodings,\n  ResolvedAuthenticatorOptions,\n} from \"./types.js\";\nimport type { Digits } from \"@otplib/core\";\n\nfunction defaultKeyEncoder(secret: SecretKey, _encoding: KeyEncodings): Base32SecretKey {\n  const bytes = new TextEncoder().encode(secret);\n  return defaultBase32.encode(bytes);\n}\n\nfunction defaultKeyDecoder(encodedSecret: Base32SecretKey, _encoding: KeyEncodings): SecretKey {\n  const bytes = defaultBase32.decode(encodedSecret);\n  return new TextDecoder().decode(bytes);\n}\n\nfunction parseWindow(\n  window: number | [number, number] | undefined,\n  step: number,\n): number | [number, number] {\n  if (window === undefined || window === 0) {\n    return 0;\n  }\n  if (typeof window === \"number\") {\n    // v11 treated window as steps\n    return window * step;\n  }\n  return [window[0] * step, window[1] * step];\n}\n\nexport class Authenticator<T extends AuthenticatorOptions = AuthenticatorOptions> extends TOTP<T> {\n  constructor(defaultOptions: Partial<T> = {}) {\n    super(defaultOptions);\n  }\n\n  override create(defaultOptions: Partial<T> = {}): Authenticator<T> {\n    return new Authenticator<T>(defaultOptions);\n  }\n\n  override allOptions(): Readonly<ResolvedAuthenticatorOptions> {\n    const merged = {\n      algorithm: HashAlgorithms.SHA1,\n      digits: 6,\n      encoding: KeyEncodingsConst.HEX,\n      epoch: null,\n      step: 30,\n      window: 0,\n      keyEncoder: defaultKeyEncoder,\n      keyDecoder: defaultKeyDecoder,\n      crypto: defaultCrypto,\n      base32: defaultBase32,\n      ...this._defaultOptions,\n      ...this._options,\n    };\n\n    const epoch = merged.epoch !== null ? merged.epoch : Math.floor(Date.now() / 1000);\n\n    return Object.freeze({\n      ...merged,\n      epoch: epoch as number,\n    }) as Readonly<ResolvedAuthenticatorOptions>;\n  }\n\n  override generate(secret: Base32SecretKey): string {\n    const opts = this.allOptions();\n\n    // Generate using decoded secret (as raw bytes)\n    const secretBytes = defaultBase32.decode(secret);\n\n    return totpGenerateSync({\n      secret: secretBytes,\n      algorithm: opts.algorithm,\n      digits: opts.digits as Digits,\n      period: opts.step,\n      epoch: opts.epoch, // v11: already in seconds\n      t0: 0,\n      crypto: opts.crypto,\n      guardrails: opts.guardrails,\n    });\n  }\n\n  override check(token: string, secret: Base32SecretKey): boolean {\n    const delta = this.checkDelta(token, secret);\n    return typeof delta === \"number\";\n  }\n\n  override checkDelta(token: string, secret: Base32SecretKey): number | null {\n    const opts = this.allOptions();\n    const secretBytes = defaultBase32.decode(secret);\n    const epochTolerance = parseWindow(opts.window, opts.step);\n\n    try {\n      const result = totpVerifySync({\n        secret: secretBytes,\n        token,\n        algorithm: opts.algorithm,\n        digits: opts.digits as Digits,\n        period: opts.step,\n        epoch: opts.epoch, // v11: already in seconds\n        t0: 0,\n        epochTolerance,\n        crypto: opts.crypto,\n        guardrails: opts.guardrails,\n      });\n\n      if (!result.valid) {\n        return null;\n      }\n\n      return result.delta;\n    } catch {\n      return null;\n    }\n  }\n\n  override verify(opts: { token: string; secret: Base32SecretKey }): boolean {\n    if (typeof opts !== \"object\") {\n      // v11 legacy behavior: verify requires object\n      throw new Error(\"Expecting argument 0 of verify to be an object\");\n    }\n    return this.check(opts.token, opts.secret);\n  }\n\n  encode(secret: SecretKey): Base32SecretKey {\n    const opts = this.allOptions();\n    return opts.keyEncoder(secret, opts.encoding);\n  }\n\n  decode(secret: Base32SecretKey): SecretKey {\n    const opts = this.allOptions();\n    return opts.keyDecoder(secret, opts.encoding);\n  }\n\n  generateSecret(numberOfBytes: number = 20): Base32SecretKey {\n    const opts = this.allOptions();\n    return generateSecretCore({\n      crypto: opts.crypto,\n      base32: opts.base32,\n      length: numberOfBytes,\n    });\n  }\n}\n","/**\n * @otplib/preset-v11\n *\n * v11-compatible TOTP class implementation.\n */\n\nimport { base32 as defaultBase32 } from \"@otplib/plugin-base32-scure\";\nimport { crypto as defaultCrypto } from \"@otplib/plugin-crypto-noble\";\nimport {\n  generateSync as totpGenerateSync,\n  verifySync as totpVerifySync,\n  getRemainingTime,\n} from \"@otplib/totp\";\nimport { generateTOTP as generateTOTPURI } from \"@otplib/uri\";\n\nimport { HOTP, secretToBytes } from \"./hotp.js\";\nimport { HashAlgorithms, KeyEncodings as KeyEncodingsConst } from \"./types.js\";\n\nimport type { TOTPOptions, SecretKey, ResolvedTOTPOptions } from \"./types.js\";\nimport type { Digits } from \"@otplib/core\";\n\nfunction parseWindow(\n  window: number | [number, number] | undefined,\n  step: number,\n): number | [number, number] {\n  if (window === undefined || window === 0) {\n    return 0;\n  }\n  if (typeof window === \"number\") {\n    // v11 treated window as steps\n    return window * step;\n  }\n  return [window[0] * step, window[1] * step];\n}\n\nexport class TOTP<T extends TOTPOptions = TOTPOptions> extends HOTP<T> {\n  constructor(defaultOptions: Partial<T> = {}) {\n    super(defaultOptions);\n  }\n\n  override create(defaultOptions: Partial<T> = {}): TOTP<T> {\n    return new TOTP<T>(defaultOptions);\n  }\n\n  override allOptions(): Readonly<ResolvedTOTPOptions> {\n    const merged = {\n      algorithm: HashAlgorithms.SHA1,\n      digits: 6,\n      encoding: KeyEncodingsConst.ASCII,\n      epoch: null, // v11 default was null, meaning \"now\"\n      step: 30,\n      window: 0,\n      crypto: defaultCrypto,\n      base32: defaultBase32,\n      ...this._defaultOptions,\n      ...this._options,\n    };\n\n    // Resolve epoch to seconds if null\n    const epoch = merged.epoch !== null ? merged.epoch : Math.floor(Date.now() / 1000);\n\n    return Object.freeze({\n      ...merged,\n      epoch: epoch as number,\n    }) as Readonly<ResolvedTOTPOptions>;\n  }\n\n  generate(secret: SecretKey): string {\n    const opts = this.allOptions();\n    const secretBytes = secretToBytes(secret, opts.encoding);\n\n    return totpGenerateSync({\n      secret: secretBytes,\n      algorithm: opts.algorithm,\n      digits: opts.digits as Digits,\n      period: opts.step,\n      epoch: opts.epoch, // v11: already in seconds\n      t0: 0,\n      crypto: opts.crypto,\n      guardrails: opts.guardrails,\n    });\n  }\n\n  check(token: string, secret: SecretKey): boolean {\n    const delta = this.checkDelta(token, secret);\n    return typeof delta === \"number\";\n  }\n\n  checkDelta(token: string, secret: SecretKey): number | null {\n    const opts = this.allOptions();\n    const secretBytes = secretToBytes(secret, opts.encoding);\n    const epochTolerance = parseWindow(opts.window, opts.step);\n\n    try {\n      const result = totpVerifySync({\n        secret: secretBytes,\n        token,\n        algorithm: opts.algorithm,\n        digits: opts.digits as Digits,\n        period: opts.step,\n        epoch: opts.epoch, // v11: already in seconds\n        t0: 0,\n        epochTolerance,\n        crypto: opts.crypto,\n        guardrails: opts.guardrails,\n      });\n\n      if (!result.valid) {\n        return null;\n      }\n\n      return result.delta;\n    } catch {\n      return null;\n    }\n  }\n\n  override verify(opts: { token: string; secret: SecretKey }): boolean {\n    if (typeof opts !== \"object\") {\n      throw new Error(\"Expecting argument 0 of verify to be an object\");\n    }\n    return this.check(opts.token, opts.secret);\n  }\n\n  keyuri(accountName: string, issuer: string, secret: SecretKey): string {\n    const opts = this.allOptions();\n\n    return generateTOTPURI({\n      label: accountName,\n      issuer,\n      secret,\n      algorithm: opts.algorithm,\n      digits: opts.digits as Digits,\n      period: opts.step,\n    });\n  }\n\n  timeUsed(): number {\n    const opts = this.allOptions();\n    return opts.epoch % opts.step;\n  }\n\n  timeRemaining(): number {\n    const opts = this.allOptions();\n    return getRemainingTime(opts.epoch, opts.step, 0);\n  }\n}\n","/**\n * @otplib/preset-v11\n *\n * v11-compatible HOTP class implementation.\n */\n\nimport { stringToBytes, createGuardrails } from \"@otplib/core\";\nimport { generateSync as hotpGenerateSync, verifySync as hotpVerifySync } from \"@otplib/hotp\";\nimport { base32 as defaultBase32 } from \"@otplib/plugin-base32-scure\";\nimport { crypto as defaultCrypto } from \"@otplib/plugin-crypto-noble\";\nimport { generateHOTP as generateHOTPURI } from \"@otplib/uri\";\nimport { hex } from \"@scure/base\";\n\nimport { HashAlgorithms, KeyEncodings as KeyEncodingsConst } from \"./types.js\";\n\nimport type { HOTPOptions, SecretKey, ResolvedHOTPOptions } from \"./types.js\";\nimport type { Digits } from \"@otplib/core\";\n\n/**\n * Convert a string secret to bytes based on encoding\n */\nexport function secretToBytes(secret: SecretKey, encoding?: string): Uint8Array {\n  if (encoding === KeyEncodingsConst.BASE32 || encoding === \"base32\") {\n    return defaultBase32.decode(secret);\n  }\n  if (encoding === KeyEncodingsConst.HEX || encoding === \"hex\") {\n    return hex.decode(secret.replace(/\\s/g, \"\"));\n  }\n  return stringToBytes(secret);\n}\n\nexport class HOTP<T extends HOTPOptions = HOTPOptions> {\n  protected _options: Partial<T> = {};\n  protected _defaultOptions: Partial<T> = {};\n\n  constructor(defaultOptions: Partial<T> = {}) {\n    this._defaultOptions = {\n      ...defaultOptions,\n      guardrails: createGuardrails(defaultOptions.guardrails),\n    } as Partial<T>;\n    this._options = {};\n  }\n\n  get options(): Partial<T> {\n    return { ...this._defaultOptions, ...this._options };\n  }\n\n  set options(value: Partial<T>) {\n    this._options = { ...value };\n  }\n\n  get defaultOptions(): Partial<T> {\n    return this._defaultOptions;\n  }\n\n  set defaultOptions(value: Partial<T>) {\n    this._defaultOptions = { ...value };\n  }\n\n  get optionsAll(): Readonly<ResolvedHOTPOptions> {\n    return this.allOptions();\n  }\n\n  create(defaultOptions: Partial<T> = {}): HOTP<T> {\n    return new HOTP<T>(defaultOptions);\n  }\n\n  allOptions(): Readonly<ResolvedHOTPOptions> {\n    const merged = {\n      algorithm: HashAlgorithms.SHA1,\n      digits: 6,\n      encoding: KeyEncodingsConst.ASCII,\n      crypto: defaultCrypto,\n      base32: defaultBase32,\n      ...this._defaultOptions,\n      ...this._options,\n    };\n    return Object.freeze(merged) as Readonly<ResolvedHOTPOptions>;\n  }\n\n  resetOptions(): this {\n    this._options = {};\n    return this;\n  }\n\n  generate(secret: SecretKey, counter: number): string {\n    const opts = this.allOptions();\n    const secretBytes = secretToBytes(secret, opts.encoding);\n\n    return hotpGenerateSync({\n      secret: secretBytes,\n      counter,\n      algorithm: opts.algorithm,\n      digits: opts.digits as Digits,\n      crypto: opts.crypto,\n      guardrails: opts.guardrails,\n    });\n  }\n\n  check(token: string, secret: SecretKey, counter: number): boolean {\n    const opts = this.allOptions();\n    const secretBytes = secretToBytes(secret, opts.encoding);\n\n    try {\n      const result = hotpVerifySync({\n        secret: secretBytes,\n        token,\n        counter,\n        algorithm: opts.algorithm,\n        digits: opts.digits as Digits,\n        counterTolerance: 0,\n        crypto: opts.crypto,\n        guardrails: opts.guardrails,\n      });\n\n      return result.valid;\n    } catch {\n      return false;\n    }\n  }\n\n  verify(opts: { token: string; secret: SecretKey; counter: number }): boolean {\n    if (typeof opts !== \"object\") {\n      throw new Error(\"Expecting argument 0 of verify to be an object\");\n    }\n    return this.check(opts.token, opts.secret, opts.counter);\n  }\n\n  keyuri(accountName: string, issuer: string, secret: SecretKey, counter: number): string {\n    const opts = this.allOptions();\n\n    return generateHOTPURI({\n      label: accountName,\n      issuer,\n      secret,\n      algorithm: opts.algorithm,\n      digits: opts.digits as Digits,\n      counter,\n    });\n  }\n\n  getClass(): typeof HOTP {\n    return HOTP;\n  }\n}\n","/**\n * @otplib/preset-v11\n *\n * v11-compatible type definitions.\n * v11 used functionality similar to v12 but with seconds-based epochs.\n */\n\nimport type { CryptoPlugin, Base32Plugin, HashAlgorithm, OTPGuardrails } from \"@otplib/core\";\n\nexport const HashAlgorithms = {\n  SHA1: \"sha1\",\n  SHA256: \"sha256\",\n  SHA512: \"sha512\",\n} as const;\n\nexport type HashAlgorithms = (typeof HashAlgorithms)[keyof typeof HashAlgorithms];\n\nexport const KeyEncodings = {\n  ASCII: \"ascii\",\n  HEX: \"hex\",\n  BASE32: \"base32\",\n  BASE64: \"base64\",\n  LATIN1: \"latin1\",\n  UTF8: \"utf8\",\n} as const;\n\nexport type KeyEncodings = (typeof KeyEncodings)[keyof typeof KeyEncodings];\n\nexport type SecretKey = string;\nexport type Base32SecretKey = string;\n\nexport type HOTPOptions = {\n  algorithm?: HashAlgorithm;\n  digits?: number;\n  encoding?: KeyEncodings;\n  crypto?: CryptoPlugin;\n  base32?: Base32Plugin;\n  guardrails?: OTPGuardrails;\n};\n\nexport type TOTPOptions = HOTPOptions & {\n  epoch?: number | null; // v11: seconds\n  step?: number;\n  window?: number | [number, number];\n};\n\nexport type KeyEncoder = (secret: SecretKey, encoding: KeyEncodings) => Base32SecretKey;\nexport type KeyDecoder = (encodedSecret: Base32SecretKey, encoding: KeyEncodings) => SecretKey;\n\nexport type AuthenticatorOptions = TOTPOptions & {\n  keyEncoder?: KeyEncoder;\n  keyDecoder?: KeyDecoder;\n};\n\nexport type ResolvedHOTPOptions = {\n  algorithm: HashAlgorithm;\n  digits: number;\n  encoding: KeyEncodings;\n  crypto: CryptoPlugin;\n  base32: Base32Plugin;\n  guardrails: OTPGuardrails;\n};\n\nexport type ResolvedTOTPOptions = ResolvedHOTPOptions & {\n  epoch: number;\n  step: number;\n  window: number | [number, number];\n};\n\nexport type ResolvedAuthenticatorOptions = ResolvedTOTPOptions & {\n  keyEncoder: KeyEncoder;\n  keyDecoder: KeyDecoder;\n};\n"],"mappings":"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","names":["index_exports","__export","Authenticator","HOTP","HashAlgorithms","KeyEncodings","TOTP","authenticator","hotp","totp","__toCommonJS","import_core","import_plugin_base32_scure","import_plugin_crypto_noble","import_totp","import_plugin_base32_scure","import_plugin_crypto_noble","import_totp","import_uri","import_core","import_hotp","import_plugin_base32_scure","import_plugin_crypto_noble","import_uri","import_base","HashAlgorithms","KeyEncodings","secretToBytes","secret","encoding","KeyEncodings","defaultBase32","HOTP","_HOTP","defaultOptions","value","merged","HashAlgorithms","defaultCrypto","counter","opts","secretBytes","hotpGenerateSync","token","hotpVerifySync","accountName","issuer","generateHOTPURI","parseWindow","window","step","TOTP","_TOTP","HOTP","defaultOptions","merged","HashAlgorithms","KeyEncodings","defaultCrypto","defaultBase32","epoch","secret","opts","secretBytes","secretToBytes","totpGenerateSync","token","epochTolerance","result","totpVerifySync","accountName","issuer","generateTOTPURI","defaultKeyEncoder","secret","_encoding","bytes","defaultBase32","defaultKeyDecoder","encodedSecret","parseWindow","window","step","Authenticator","_Authenticator","TOTP","defaultOptions","merged","HashAlgorithms","KeyEncodings","defaultCrypto","epoch","opts","secretBytes","totpGenerateSync","token","epochTolerance","result","totpVerifySync","numberOfBytes","generateSecretCore","hotp","HOTP","totp","TOTP","authenticator","Authenticator"]}