Some checks failed
CI/CD Pipeline / unit-tests (push) Failing after 1m16s
CI/CD Pipeline / integration-tests (push) Failing after 2m32s
CI/CD Pipeline / lint (push) Successful in 5m22s
CI/CD Pipeline / e2e-tests (push) Has been skipped
CI/CD Pipeline / build (push) Has been skipped
457 lines
16 KiB
TypeScript
457 lines
16 KiB
TypeScript
/**
|
|
* OTP secret key.
|
|
*/
|
|
declare class Secret {
|
|
/**
|
|
* Converts a Latin-1 string to a Secret object.
|
|
* @param {string} str Latin-1 string.
|
|
* @returns {Secret} Secret object.
|
|
*/
|
|
static fromLatin1(str: string): Secret;
|
|
/**
|
|
* Converts an UTF-8 string to a Secret object.
|
|
* @param {string} str UTF-8 string.
|
|
* @returns {Secret} Secret object.
|
|
*/
|
|
static fromUTF8(str: string): Secret;
|
|
/**
|
|
* Converts a base32 string to a Secret object.
|
|
* @param {string} str Base32 string.
|
|
* @returns {Secret} Secret object.
|
|
*/
|
|
static fromBase32(str: string): Secret;
|
|
/**
|
|
* Converts a hexadecimal string to a Secret object.
|
|
* @param {string} str Hexadecimal string.
|
|
* @returns {Secret} Secret object.
|
|
*/
|
|
static fromHex(str: string): Secret;
|
|
/**
|
|
* Creates a secret key object.
|
|
* @param {Object} [config] Configuration options.
|
|
* @param {ArrayBufferLike} [config.buffer] Secret key buffer.
|
|
* @param {number} [config.size=20] Number of random bytes to generate, ignored if 'buffer' is provided.
|
|
*/
|
|
constructor({ buffer, size }?: {
|
|
buffer?: ArrayBufferLike | undefined;
|
|
size?: number | undefined;
|
|
});
|
|
/**
|
|
* Secret key.
|
|
* @type {Uint8Array}
|
|
* @readonly
|
|
*/
|
|
readonly bytes: Uint8Array;
|
|
/**
|
|
* Secret key buffer.
|
|
* @deprecated For backward compatibility, the "bytes" property should be used instead.
|
|
* @type {ArrayBufferLike}
|
|
*/
|
|
get buffer(): ArrayBufferLike;
|
|
/**
|
|
* Latin-1 string representation of secret key.
|
|
* @type {string}
|
|
*/
|
|
get latin1(): string;
|
|
/**
|
|
* UTF-8 string representation of secret key.
|
|
* @type {string}
|
|
*/
|
|
get utf8(): string;
|
|
/**
|
|
* Base32 string representation of secret key.
|
|
* @type {string}
|
|
*/
|
|
get base32(): string;
|
|
/**
|
|
* Hexadecimal string representation of secret key.
|
|
* @type {string}
|
|
*/
|
|
get hex(): string;
|
|
}
|
|
|
|
/**
|
|
* HOTP: An HMAC-based One-time Password Algorithm.
|
|
* @see [RFC 4226](https://datatracker.ietf.org/doc/html/rfc4226)
|
|
*/
|
|
declare class HOTP {
|
|
/**
|
|
* Default configuration.
|
|
* @type {{
|
|
* issuer: string,
|
|
* label: string,
|
|
* issuerInLabel: boolean,
|
|
* algorithm: string,
|
|
* digits: number,
|
|
* counter: number
|
|
* window: number
|
|
* }}
|
|
*/
|
|
static get defaults(): {
|
|
issuer: string;
|
|
label: string;
|
|
issuerInLabel: boolean;
|
|
algorithm: string;
|
|
digits: number;
|
|
counter: number;
|
|
window: number;
|
|
};
|
|
/**
|
|
* Generates an HOTP token.
|
|
* @param {Object} config Configuration options.
|
|
* @param {Secret} config.secret Secret key.
|
|
* @param {string} [config.algorithm='SHA1'] HMAC hashing algorithm.
|
|
* @param {number} [config.digits=6] Token length.
|
|
* @param {number} [config.counter=0] Counter value.
|
|
* @param {(algorithm: string, key: Uint8Array, message: Uint8Array) => Uint8Array} [config.hmac] Custom HMAC function.
|
|
* @returns {string} Token.
|
|
*/
|
|
static generate({ secret, algorithm, digits, counter, hmac, }: {
|
|
secret: Secret;
|
|
algorithm?: string | undefined;
|
|
digits?: number | undefined;
|
|
counter?: number | undefined;
|
|
hmac?: ((algorithm: string, key: Uint8Array, message: Uint8Array) => Uint8Array) | undefined;
|
|
}): string;
|
|
/**
|
|
* Validates an HOTP token.
|
|
* @param {Object} config Configuration options.
|
|
* @param {string} config.token Token value.
|
|
* @param {Secret} config.secret Secret key.
|
|
* @param {string} [config.algorithm='SHA1'] HMAC hashing algorithm.
|
|
* @param {number} [config.digits=6] Token length.
|
|
* @param {number} [config.counter=0] Counter value.
|
|
* @param {number} [config.window=1] Window of counter values to test.
|
|
* @param {(algorithm: string, key: Uint8Array, message: Uint8Array) => Uint8Array} [config.hmac] Custom HMAC function.
|
|
* @returns {number|null} Token delta or null if it is not found in the search window, in which case it should be considered invalid.
|
|
*/
|
|
static validate({ token, secret, algorithm, digits, counter, window, hmac, }: {
|
|
token: string;
|
|
secret: Secret;
|
|
algorithm?: string | undefined;
|
|
digits?: number | undefined;
|
|
counter?: number | undefined;
|
|
window?: number | undefined;
|
|
hmac?: ((algorithm: string, key: Uint8Array, message: Uint8Array) => Uint8Array) | undefined;
|
|
}): number | null;
|
|
/**
|
|
* Creates an HOTP object.
|
|
* @param {Object} [config] Configuration options.
|
|
* @param {string} [config.issuer=''] Account provider.
|
|
* @param {string} [config.label='OTPAuth'] Account label.
|
|
* @param {boolean} [config.issuerInLabel=true] Include issuer prefix in label.
|
|
* @param {Secret|string} [config.secret=Secret] Secret key.
|
|
* @param {string} [config.algorithm='SHA1'] HMAC hashing algorithm.
|
|
* @param {number} [config.digits=6] Token length.
|
|
* @param {number} [config.counter=0] Initial counter value.
|
|
* @param {(algorithm: string, key: Uint8Array, message: Uint8Array) => Uint8Array} [config.hmac] Custom HMAC function.
|
|
*/
|
|
constructor({ issuer, label, issuerInLabel, secret, algorithm, digits, counter, hmac, }?: {
|
|
issuer?: string | undefined;
|
|
label?: string | undefined;
|
|
issuerInLabel?: boolean | undefined;
|
|
secret?: string | Secret | undefined;
|
|
algorithm?: string | undefined;
|
|
digits?: number | undefined;
|
|
counter?: number | undefined;
|
|
hmac?: ((algorithm: string, key: Uint8Array, message: Uint8Array) => Uint8Array) | undefined;
|
|
});
|
|
/**
|
|
* Account provider.
|
|
* @type {string}
|
|
*/
|
|
issuer: string;
|
|
/**
|
|
* Account label.
|
|
* @type {string}
|
|
*/
|
|
label: string;
|
|
/**
|
|
* Include issuer prefix in label.
|
|
* @type {boolean}
|
|
*/
|
|
issuerInLabel: boolean;
|
|
/**
|
|
* Secret key.
|
|
* @type {Secret}
|
|
*/
|
|
secret: Secret;
|
|
/**
|
|
* HMAC hashing algorithm.
|
|
* @type {string}
|
|
*/
|
|
algorithm: string;
|
|
/**
|
|
* Token length.
|
|
* @type {number}
|
|
*/
|
|
digits: number;
|
|
/**
|
|
* Initial counter value.
|
|
* @type {number}
|
|
*/
|
|
counter: number;
|
|
/**
|
|
* Custom HMAC function.
|
|
* @type {((algorithm: string, key: Uint8Array, message: Uint8Array) => Uint8Array)|undefined}
|
|
*/
|
|
hmac: ((algorithm: string, key: Uint8Array, message: Uint8Array) => Uint8Array) | undefined;
|
|
/**
|
|
* Generates an HOTP token.
|
|
* @param {Object} [config] Configuration options.
|
|
* @param {number} [config.counter=this.counter++] Counter value.
|
|
* @returns {string} Token.
|
|
*/
|
|
generate({ counter }?: {
|
|
counter?: number | undefined;
|
|
}): string;
|
|
/**
|
|
* Validates an HOTP token.
|
|
* @param {Object} config Configuration options.
|
|
* @param {string} config.token Token value.
|
|
* @param {number} [config.counter=this.counter] Counter value.
|
|
* @param {number} [config.window=1] Window of counter values to test.
|
|
* @returns {number|null} Token delta or null if it is not found in the search window, in which case it should be considered invalid.
|
|
*/
|
|
validate({ token, counter, window }: {
|
|
token: string;
|
|
counter?: number | undefined;
|
|
window?: number | undefined;
|
|
}): number | null;
|
|
/**
|
|
* Returns a Google Authenticator key URI.
|
|
* @returns {string} URI.
|
|
*/
|
|
toString(): string;
|
|
}
|
|
|
|
/**
|
|
* TOTP: Time-Based One-Time Password Algorithm.
|
|
* @see [RFC 6238](https://datatracker.ietf.org/doc/html/rfc6238)
|
|
*/
|
|
declare class TOTP {
|
|
/**
|
|
* Default configuration.
|
|
* @type {{
|
|
* issuer: string,
|
|
* label: string,
|
|
* issuerInLabel: boolean,
|
|
* algorithm: string,
|
|
* digits: number,
|
|
* period: number
|
|
* window: number
|
|
* }}
|
|
*/
|
|
static get defaults(): {
|
|
issuer: string;
|
|
label: string;
|
|
issuerInLabel: boolean;
|
|
algorithm: string;
|
|
digits: number;
|
|
period: number;
|
|
window: number;
|
|
};
|
|
/**
|
|
* Calculates the counter. i.e. the number of periods since timestamp 0.
|
|
* @param {Object} [config] Configuration options.
|
|
* @param {number} [config.period=30] Token time-step duration.
|
|
* @param {number} [config.timestamp=Date.now] Timestamp value in milliseconds.
|
|
* @returns {number} Counter.
|
|
*/
|
|
static counter({ period, timestamp }?: {
|
|
period?: number | undefined;
|
|
timestamp?: number | undefined;
|
|
}): number;
|
|
/**
|
|
* Calculates the remaining time in milliseconds until the next token is generated.
|
|
* @param {Object} [config] Configuration options.
|
|
* @param {number} [config.period=30] Token time-step duration.
|
|
* @param {number} [config.timestamp=Date.now] Timestamp value in milliseconds.
|
|
* @returns {number} counter.
|
|
*/
|
|
static remaining({ period, timestamp }?: {
|
|
period?: number | undefined;
|
|
timestamp?: number | undefined;
|
|
}): number;
|
|
/**
|
|
* Generates a TOTP token.
|
|
* @param {Object} config Configuration options.
|
|
* @param {Secret} config.secret Secret key.
|
|
* @param {string} [config.algorithm='SHA1'] HMAC hashing algorithm.
|
|
* @param {number} [config.digits=6] Token length.
|
|
* @param {number} [config.period=30] Token time-step duration.
|
|
* @param {number} [config.timestamp=Date.now] Timestamp value in milliseconds.
|
|
* @param {(algorithm: string, key: Uint8Array, message: Uint8Array) => Uint8Array} [config.hmac] Custom HMAC function.
|
|
* @returns {string} Token.
|
|
*/
|
|
static generate({ secret, algorithm, digits, period, timestamp, hmac }: {
|
|
secret: Secret;
|
|
algorithm?: string | undefined;
|
|
digits?: number | undefined;
|
|
period?: number | undefined;
|
|
timestamp?: number | undefined;
|
|
hmac?: ((algorithm: string, key: Uint8Array, message: Uint8Array) => Uint8Array) | undefined;
|
|
}): string;
|
|
/**
|
|
* Validates a TOTP token.
|
|
* @param {Object} config Configuration options.
|
|
* @param {string} config.token Token value.
|
|
* @param {Secret} config.secret Secret key.
|
|
* @param {string} [config.algorithm='SHA1'] HMAC hashing algorithm.
|
|
* @param {number} [config.digits=6] Token length.
|
|
* @param {number} [config.period=30] Token time-step duration.
|
|
* @param {number} [config.timestamp=Date.now] Timestamp value in milliseconds.
|
|
* @param {number} [config.window=1] Window of counter values to test.
|
|
* @param {(algorithm: string, key: Uint8Array, message: Uint8Array) => Uint8Array} [config.hmac] Custom HMAC function.
|
|
* @returns {number|null} Token delta or null if it is not found in the search window, in which case it should be considered invalid.
|
|
*/
|
|
static validate({ token, secret, algorithm, digits, period, timestamp, window, hmac, }: {
|
|
token: string;
|
|
secret: Secret;
|
|
algorithm?: string | undefined;
|
|
digits?: number | undefined;
|
|
period?: number | undefined;
|
|
timestamp?: number | undefined;
|
|
window?: number | undefined;
|
|
hmac?: ((algorithm: string, key: Uint8Array, message: Uint8Array) => Uint8Array) | undefined;
|
|
}): number | null;
|
|
/**
|
|
* Creates a TOTP object.
|
|
* @param {Object} [config] Configuration options.
|
|
* @param {string} [config.issuer=''] Account provider.
|
|
* @param {string} [config.label='OTPAuth'] Account label.
|
|
* @param {boolean} [config.issuerInLabel=true] Include issuer prefix in label.
|
|
* @param {Secret|string} [config.secret=Secret] Secret key.
|
|
* @param {string} [config.algorithm='SHA1'] HMAC hashing algorithm.
|
|
* @param {number} [config.digits=6] Token length.
|
|
* @param {number} [config.period=30] Token time-step duration.
|
|
* @param {(algorithm: string, key: Uint8Array, message: Uint8Array) => Uint8Array} [config.hmac] Custom HMAC function.
|
|
*/
|
|
constructor({ issuer, label, issuerInLabel, secret, algorithm, digits, period, hmac, }?: {
|
|
issuer?: string | undefined;
|
|
label?: string | undefined;
|
|
issuerInLabel?: boolean | undefined;
|
|
secret?: string | Secret | undefined;
|
|
algorithm?: string | undefined;
|
|
digits?: number | undefined;
|
|
period?: number | undefined;
|
|
hmac?: ((algorithm: string, key: Uint8Array, message: Uint8Array) => Uint8Array) | undefined;
|
|
});
|
|
/**
|
|
* Account provider.
|
|
* @type {string}
|
|
*/
|
|
issuer: string;
|
|
/**
|
|
* Account label.
|
|
* @type {string}
|
|
*/
|
|
label: string;
|
|
/**
|
|
* Include issuer prefix in label.
|
|
* @type {boolean}
|
|
*/
|
|
issuerInLabel: boolean;
|
|
/**
|
|
* Secret key.
|
|
* @type {Secret}
|
|
*/
|
|
secret: Secret;
|
|
/**
|
|
* HMAC hashing algorithm.
|
|
* @type {string}
|
|
*/
|
|
algorithm: string;
|
|
/**
|
|
* Token length.
|
|
* @type {number}
|
|
*/
|
|
digits: number;
|
|
/**
|
|
* Token time-step duration.
|
|
* @type {number}
|
|
*/
|
|
period: number;
|
|
/**
|
|
* Custom HMAC function.
|
|
* @type {((algorithm: string, key: Uint8Array, message: Uint8Array) => Uint8Array)|undefined}
|
|
*/
|
|
hmac: ((algorithm: string, key: Uint8Array, message: Uint8Array) => Uint8Array) | undefined;
|
|
/**
|
|
* Calculates the counter. i.e. the number of periods since timestamp 0.
|
|
* @param {Object} [config] Configuration options.
|
|
* @param {number} [config.timestamp=Date.now] Timestamp value in milliseconds.
|
|
* @returns {number} Counter.
|
|
*/
|
|
counter({ timestamp }?: {
|
|
timestamp?: number | undefined;
|
|
}): number;
|
|
/**
|
|
* Calculates the remaining time in milliseconds until the next token is generated.
|
|
* @param {Object} [config] Configuration options.
|
|
* @param {number} [config.timestamp=Date.now] Timestamp value in milliseconds.
|
|
* @returns {number} counter.
|
|
*/
|
|
remaining({ timestamp }?: {
|
|
timestamp?: number | undefined;
|
|
}): number;
|
|
/**
|
|
* Generates a TOTP token.
|
|
* @param {Object} [config] Configuration options.
|
|
* @param {number} [config.timestamp=Date.now] Timestamp value in milliseconds.
|
|
* @returns {string} Token.
|
|
*/
|
|
generate({ timestamp }?: {
|
|
timestamp?: number | undefined;
|
|
}): string;
|
|
/**
|
|
* Validates a TOTP token.
|
|
* @param {Object} config Configuration options.
|
|
* @param {string} config.token Token value.
|
|
* @param {number} [config.timestamp=Date.now] Timestamp value in milliseconds.
|
|
* @param {number} [config.window=1] Window of counter values to test.
|
|
* @returns {number|null} Token delta or null if it is not found in the search window, in which case it should be considered invalid.
|
|
*/
|
|
validate({ token, timestamp, window }: {
|
|
token: string;
|
|
timestamp?: number | undefined;
|
|
window?: number | undefined;
|
|
}): number | null;
|
|
/**
|
|
* Returns a Google Authenticator key URI.
|
|
* @returns {string} URI.
|
|
*/
|
|
toString(): string;
|
|
}
|
|
|
|
/**
|
|
* HOTP/TOTP object/string conversion.
|
|
* @see [Key URI Format](https://github.com/google/google-authenticator/wiki/Key-Uri-Format)
|
|
*/
|
|
declare class URI {
|
|
/**
|
|
* Parses a Google Authenticator key URI and returns an HOTP/TOTP object.
|
|
* @param {string} uri Google Authenticator Key URI.
|
|
* @param {Object} [config] Configuration options.
|
|
* @param {(algorithm: string, key: Uint8Array, message: Uint8Array) => Uint8Array} [config.hmac] Custom HMAC function.
|
|
* @returns {HOTP|TOTP} HOTP/TOTP object.
|
|
*/
|
|
static parse(uri: string, { hmac }?: {
|
|
hmac?: ((algorithm: string, key: Uint8Array, message: Uint8Array) => Uint8Array) | undefined;
|
|
}): HOTP | TOTP;
|
|
/**
|
|
* Converts an HOTP/TOTP object to a Google Authenticator key URI.
|
|
* @param {HOTP|TOTP} otp HOTP/TOTP object.
|
|
* @returns {string} Google Authenticator Key URI.
|
|
*/
|
|
static stringify(otp: HOTP | TOTP): string;
|
|
}
|
|
|
|
/**
|
|
* Library version.
|
|
* @type {string}
|
|
*/
|
|
declare const version: string;
|
|
|
|
export { HOTP, Secret, TOTP, URI, version };
|