/** * Secret Key used for OTP generation. */ export declare type SecretKey = string; /** * A hex encoded string. */ export declare type HexString = string; /** * Base interface for all option interfaces. * eg: [[HOTPOptions]]. */ export interface OTPOptions { [key: string]: unknown; } /** * Returns an array of values of the enumerable properties of an object. * This is used in place of Object.values for wider platform support. * * @ignore * * @param value Object that contains the properties and methods. */ export declare function objectValues(value: T): string[]; /** * Algorithms that are available to be used for * calculating the HMAC value */ export declare enum HashAlgorithms { 'SHA1' = "sha1", 'SHA256' = "sha256", 'SHA512' = "sha512" } /** * Array of [[HashAlgorithms]] enum values * * @ignore */ export declare const HASH_ALGORITHMS: string[]; /** * The encoding format for the [[SecretKey]]. * This is mostly used for converting the * provided secret into a Buffer. */ export declare enum KeyEncodings { 'ASCII' = "ascii", 'BASE64' = "base64", 'HEX' = "hex", 'LATIN1' = "latin1", 'UTF8' = "utf8" } /** * Array of [[KeyEncodings]] enum values * * @ignore */ export declare const KEY_ENCODINGS: string[]; /** * The OTP generation strategies. * Either HMAC or Time based. */ export declare enum Strategy { 'HOTP' = "hotp", 'TOTP' = "totp" } /** * Array of [[Strategy]] enum values * * @ignore */ export declare const STRATEGY: string[]; /** * Interface method for formatting the [[SecretKey]] with * the algorithm constraints before it is given to [[CreateDigest]]. */ export interface CreateHmacKey { (algorithm: HashAlgorithms, secret: SecretKey, encoding: KeyEncodings): T; } /** * Interface method for generating a HMAC digest * which is then used to generate the token. */ export interface CreateDigest { (algorithm: HashAlgorithms, hmacKey: HexString, counter: HexString): T; } /** * Inteface for options accepted by keyuri */ export interface KeyURIOptions { accountName: string; algorithm?: HashAlgorithms; counter?: number; digits?: number; issuer?: string; label?: string; secret: SecretKey; step?: number; type: Strategy; } /** * createDigest placholder function which throws an error * when it is not replaced with an actual implementation. * * @ignore */ export declare const createDigestPlaceholder: CreateDigest; /** * Checks if a string contains a valid token format. * * @param value - a number string. */ export declare function isTokenValid(value: string): boolean; /** * Left pad the current string with a given string to a given length. * * This behaves similarly to String.prototype.padStart * * @ignore * * @param value The string to pad. * @param maxLength The length of the resulting string once the current string has been padded. * If this parameter is smaller than the current string's length, the current * string will be returned as it is. * @param fillString The string to pad the current string with. */ export declare function padStart(value: string, maxLength: number, fillString: string): string; /** * Generates an otpauth uri which can be used in a QR Code. * * Reference: https://github.com/google/google-authenticator/wiki/Key-Uri-Format * * Sample Output: otpauth://totp/Example:alice@google.com?secret=JBSWY3DPEHPK3PXP&issuer=Example * * **Example** * * ```js * import qrcode from 'qrcode'; * * const otpauth = keyuri({ ... }) * * qrcode.toDataURL(otpauth, (err, imageUrl) => { * if (err) { * console.log('Error with QR'); * return; * } * console.log(imageUrl); * }); * ``` */ export declare function keyuri(options: KeyURIOptions): string; /** * Base OTP class which provides options management * All OTP classes should be extended from this class. */ export declare class OTP { /** * Default options for an instance. * * These options **WILL PERSIST** even when [[resetOptions]] is called. */ protected _defaultOptions: Readonly>; /** * Transient options for an instance. * * Values set here will take precedence over the same options that * are set in [[_defaultOptions]]. * * These options **WILL NOT PERSIST** upon calling [[resetOptions]]. */ protected _options: Readonly>; /** * Constructs the class with defaultOptions set. * * @param defaultOptions used to override or add existing defaultOptions. */ constructor(defaultOptions?: Partial); /** * Creates a new instance with all defaultOptions and options reset. */ create(defaultOptions?: Partial): OTP; /** * Copies the defaultOptions and options from the current * instance and applies the provided defaultOptions. */ clone(defaultOptions?: Partial): ReturnType; /** * - The options **getter** will return all [[_options]], * including those set into [[_defaultOptions]]. */ get options(): Partial; /** * - The options **setter** sets values into [[_options]]. */ set options(options: Partial); /** * Returns class options polyfilled with some of * the missing required options. * * Reference: [[hotpOptions]] */ allOptions(): Readonly; /** * Resets the current options. Does not reset default options. * * Default options are those that are specified during class * inititialisation, when calling [[clone]] or when calling [[create]] */ resetOptions(): void; }