@dev-blinq/bvt-playwright-js 1.0.0-dev.4 → 1.0.0-dev.4.staging.63.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/{en-Bp7eyprf.mjs → en-KbNSnMPf.mjs} +4 -4
- package/en-KbNSnMPf.mjs.map +1 -0
- package/index.d.mts +22 -23
- package/index.mjs +105 -105
- package/index.mjs.map +1 -1
- package/{otpauth.node-k0uQ9qOV.mjs → otpauth.node-flL8gowF.mjs} +2 -2
- package/otpauth.node-flL8gowF.mjs.map +1 -0
- package/package.json +1 -1
- package/en-Bp7eyprf.mjs.map +0 -1
- package/otpauth.node-k0uQ9qOV.mjs.map +0 -1
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"otpauth.node-k0uQ9qOV.mjs","names":["crypto"],"sources":["../../../node_modules/otpauth/dist/otpauth.node.mjs"],"sourcesContent":["//! otpauth 9.5.0 | (c) Héctor Molinero Fernández | MIT | https://github.com/hectorm/otpauth\n/// <reference types=\"./otpauth.d.ts\" />\n// @ts-nocheck\nimport * as crypto from 'node:crypto';\n\n/**\n * Converts an integer to an Uint8Array.\n * @param {number} num Integer.\n * @returns {Uint8Array} Uint8Array.\n */ const uintDecode = (num)=>{\n const buf = new ArrayBuffer(8);\n const arr = new Uint8Array(buf);\n let acc = num;\n for(let i = 7; i >= 0; i--){\n if (acc === 0) break;\n arr[i] = acc & 255;\n acc -= arr[i];\n acc /= 256;\n }\n return arr;\n};\n\n/**\n * \"globalThis\" ponyfill.\n * @see [A horrifying globalThis polyfill in universal JavaScript](https://mathiasbynens.be/notes/globalthis)\n * @type {Object.<string, *>}\n */ const globalScope = (()=>{\n if (typeof globalThis === \"object\") return globalThis;\n else {\n Object.defineProperty(Object.prototype, \"__GLOBALTHIS__\", {\n get () {\n return this;\n },\n configurable: true\n });\n try {\n // @ts-expect-error\n // eslint-disable-next-line no-undef\n if (typeof __GLOBALTHIS__ !== \"undefined\") return __GLOBALTHIS__;\n } finally{\n // @ts-expect-error\n delete Object.prototype.__GLOBALTHIS__;\n }\n }\n // Still unable to determine \"globalThis\", fall back to a naive method.\n if (typeof self !== \"undefined\") return self;\n else if (typeof window !== \"undefined\") return window;\n else if (typeof global !== \"undefined\") return global;\n return undefined;\n})();\n\n/**\n * Canonicalizes a hash algorithm name.\n * @param {string} algorithm Hash algorithm name.\n * @returns {\"SHA1\"|\"SHA224\"|\"SHA256\"|\"SHA384\"|\"SHA512\"|\"SHA3-224\"|\"SHA3-256\"|\"SHA3-384\"|\"SHA3-512\"} Canonicalized hash algorithm name.\n */ const canonicalizeAlgorithm = (algorithm)=>{\n switch(true){\n case /^(?:SHA-?1|SSL3-SHA1)$/i.test(algorithm):\n return \"SHA1\";\n case /^SHA(?:2?-)?224$/i.test(algorithm):\n return \"SHA224\";\n case /^SHA(?:2?-)?256$/i.test(algorithm):\n return \"SHA256\";\n case /^SHA(?:2?-)?384$/i.test(algorithm):\n return \"SHA384\";\n case /^SHA(?:2?-)?512$/i.test(algorithm):\n return \"SHA512\";\n case /^SHA3-224$/i.test(algorithm):\n return \"SHA3-224\";\n case /^SHA3-256$/i.test(algorithm):\n return \"SHA3-256\";\n case /^SHA3-384$/i.test(algorithm):\n return \"SHA3-384\";\n case /^SHA3-512$/i.test(algorithm):\n return \"SHA3-512\";\n default:\n throw new TypeError(`Unknown hash algorithm: ${algorithm}`);\n }\n};\n/**\n * Calculates an HMAC digest.\n * @param {string} algorithm Algorithm.\n * @param {Uint8Array} key Key.\n * @param {Uint8Array} message Message.\n * @returns {Uint8Array} Digest.\n */ const hmacDigest = (algorithm, key, message)=>{\n if (crypto?.createHmac) {\n const hmac = crypto.createHmac(algorithm, globalScope.Buffer.from(key));\n hmac.update(globalScope.Buffer.from(message));\n return hmac.digest();\n } else {\n throw new Error(\"Missing HMAC function\");\n }\n};\n\n/**\n * RFC 4648 base32 alphabet without pad.\n * @type {string}\n */ const ALPHABET = \"ABCDEFGHIJKLMNOPQRSTUVWXYZ234567\";\n/**\n * Converts a base32 string to an Uint8Array (RFC 4648).\n * @see [LinusU/base32-decode](https://github.com/LinusU/base32-decode)\n * @param {string} str Base32 string.\n * @returns {Uint8Array} Uint8Array.\n */ const base32Decode = (str)=>{\n // Remove spaces (although they are not allowed by the spec, some issuers add them for readability).\n str = str.replace(/ /g, \"\");\n // Canonicalize to all upper case and remove padding if it exists.\n let end = str.length;\n while(str[end - 1] === \"=\")--end;\n str = (end < str.length ? str.substring(0, end) : str).toUpperCase();\n const buf = new ArrayBuffer(str.length * 5 / 8 | 0);\n const arr = new Uint8Array(buf);\n let bits = 0;\n let value = 0;\n let index = 0;\n for(let i = 0; i < str.length; i++){\n const idx = ALPHABET.indexOf(str[i]);\n if (idx === -1) throw new TypeError(`Invalid character found: ${str[i]}`);\n value = value << 5 | idx;\n bits += 5;\n if (bits >= 8) {\n bits -= 8;\n arr[index++] = value >>> bits;\n }\n }\n return arr;\n};\n/**\n * Converts an Uint8Array to a base32 string (RFC 4648).\n * @see [LinusU/base32-encode](https://github.com/LinusU/base32-encode)\n * @param {Uint8Array} arr Uint8Array.\n * @returns {string} Base32 string.\n */ const base32Encode = (arr)=>{\n let bits = 0;\n let value = 0;\n let str = \"\";\n for(let i = 0; i < arr.length; i++){\n value = value << 8 | arr[i];\n bits += 8;\n while(bits >= 5){\n str += ALPHABET[value >>> bits - 5 & 31];\n bits -= 5;\n }\n }\n if (bits > 0) {\n str += ALPHABET[value << 5 - bits & 31];\n }\n return str;\n};\n\n/**\n * Converts a hexadecimal string to an Uint8Array.\n * @param {string} str Hexadecimal string.\n * @returns {Uint8Array} Uint8Array.\n */ const hexDecode = (str)=>{\n // Remove spaces (although they are not allowed by the spec, some issuers add them for readability).\n str = str.replace(/ /g, \"\");\n const buf = new ArrayBuffer(str.length / 2);\n const arr = new Uint8Array(buf);\n for(let i = 0; i < str.length; i += 2){\n arr[i / 2] = parseInt(str.substring(i, i + 2), 16);\n }\n return arr;\n};\n/**\n * Converts an Uint8Array to a hexadecimal string.\n * @param {Uint8Array} arr Uint8Array.\n * @returns {string} Hexadecimal string.\n */ const hexEncode = (arr)=>{\n let str = \"\";\n for(let i = 0; i < arr.length; i++){\n const hex = arr[i].toString(16);\n if (hex.length === 1) str += \"0\";\n str += hex;\n }\n return str.toUpperCase();\n};\n\n/**\n * Converts a Latin-1 string to an Uint8Array.\n * @param {string} str Latin-1 string.\n * @returns {Uint8Array} Uint8Array.\n */ const latin1Decode = (str)=>{\n const buf = new ArrayBuffer(str.length);\n const arr = new Uint8Array(buf);\n for(let i = 0; i < str.length; i++){\n arr[i] = str.charCodeAt(i) & 0xff;\n }\n return arr;\n};\n/**\n * Converts an Uint8Array to a Latin-1 string.\n * @param {Uint8Array} arr Uint8Array.\n * @returns {string} Latin-1 string.\n */ const latin1Encode = (arr)=>{\n let str = \"\";\n for(let i = 0; i < arr.length; i++){\n str += String.fromCharCode(arr[i]);\n }\n return str;\n};\n\n/**\n * TextEncoder instance.\n * @type {TextEncoder|null}\n */ const ENCODER = globalScope.TextEncoder ? new globalScope.TextEncoder() : null;\n/**\n * TextDecoder instance.\n * @type {TextDecoder|null}\n */ const DECODER = globalScope.TextDecoder ? new globalScope.TextDecoder() : null;\n/**\n * Converts an UTF-8 string to an Uint8Array.\n * @param {string} str String.\n * @returns {Uint8Array} Uint8Array.\n */ const utf8Decode = (str)=>{\n if (!ENCODER) {\n throw new Error(\"Encoding API not available\");\n }\n return ENCODER.encode(str);\n};\n/**\n * Converts an Uint8Array to an UTF-8 string.\n * @param {Uint8Array} arr Uint8Array.\n * @returns {string} String.\n */ const utf8Encode = (arr)=>{\n if (!DECODER) {\n throw new Error(\"Encoding API not available\");\n }\n return DECODER.decode(arr);\n};\n\n/**\n * Returns random bytes.\n * @param {number} size Size.\n * @returns {Uint8Array} Random bytes.\n */ const randomBytes = (size)=>{\n if (crypto?.randomBytes) {\n return crypto.randomBytes(size);\n } else if (globalScope.crypto?.getRandomValues) {\n return globalScope.crypto.getRandomValues(new Uint8Array(size));\n } else {\n throw new Error(\"Cryptography API not available\");\n }\n};\n\n/**\n * OTP secret key.\n */ class Secret {\n /**\n * Converts a Latin-1 string to a Secret object.\n * @param {string} str Latin-1 string.\n * @returns {Secret} Secret object.\n */ static fromLatin1(str) {\n return new Secret({\n buffer: latin1Decode(str).buffer\n });\n }\n /**\n * Converts an UTF-8 string to a Secret object.\n * @param {string} str UTF-8 string.\n * @returns {Secret} Secret object.\n */ static fromUTF8(str) {\n return new Secret({\n buffer: utf8Decode(str).buffer\n });\n }\n /**\n * Converts a base32 string to a Secret object.\n * @param {string} str Base32 string.\n * @returns {Secret} Secret object.\n */ static fromBase32(str) {\n return new Secret({\n buffer: base32Decode(str).buffer\n });\n }\n /**\n * Converts a hexadecimal string to a Secret object.\n * @param {string} str Hexadecimal string.\n * @returns {Secret} Secret object.\n */ static fromHex(str) {\n return new Secret({\n buffer: hexDecode(str).buffer\n });\n }\n /**\n * Secret key buffer.\n * @deprecated For backward compatibility, the \"bytes\" property should be used instead.\n * @type {ArrayBufferLike}\n */ get buffer() {\n return this.bytes.buffer;\n }\n /**\n * Latin-1 string representation of secret key.\n * @type {string}\n */ get latin1() {\n Object.defineProperty(this, \"latin1\", {\n enumerable: true,\n writable: false,\n configurable: false,\n value: latin1Encode(this.bytes)\n });\n return this.latin1;\n }\n /**\n * UTF-8 string representation of secret key.\n * @type {string}\n */ get utf8() {\n Object.defineProperty(this, \"utf8\", {\n enumerable: true,\n writable: false,\n configurable: false,\n value: utf8Encode(this.bytes)\n });\n return this.utf8;\n }\n /**\n * Base32 string representation of secret key.\n * @type {string}\n */ get base32() {\n Object.defineProperty(this, \"base32\", {\n enumerable: true,\n writable: false,\n configurable: false,\n value: base32Encode(this.bytes)\n });\n return this.base32;\n }\n /**\n * Hexadecimal string representation of secret key.\n * @type {string}\n */ get hex() {\n Object.defineProperty(this, \"hex\", {\n enumerable: true,\n writable: false,\n configurable: false,\n value: hexEncode(this.bytes)\n });\n return this.hex;\n }\n /**\n * Creates a secret key object.\n * @param {Object} [config] Configuration options.\n * @param {ArrayBufferLike} [config.buffer] Secret key buffer.\n * @param {number} [config.size=20] Number of random bytes to generate, ignored if 'buffer' is provided.\n */ constructor({ buffer, size = 20 } = {}){\n /**\n * Secret key.\n * @type {Uint8Array}\n * @readonly\n */ this.bytes = typeof buffer === \"undefined\" ? randomBytes(size) : new Uint8Array(buffer);\n // Prevent the \"bytes\" property from being modified.\n Object.defineProperty(this, \"bytes\", {\n enumerable: true,\n writable: false,\n configurable: false,\n value: this.bytes\n });\n }\n}\n\n/**\n * Returns true if a is equal to b, without leaking timing information that would allow an attacker to guess one of the values.\n * @param {string} a String a.\n * @param {string} b String b.\n * @returns {boolean} Equality result.\n */ const timingSafeEqual = (a, b)=>{\n if (crypto?.timingSafeEqual) {\n return crypto.timingSafeEqual(globalScope.Buffer.from(a), globalScope.Buffer.from(b));\n } else {\n if (a.length !== b.length) {\n throw new TypeError(\"Input strings must have the same length\");\n }\n let i = -1;\n let out = 0;\n while(++i < a.length){\n out |= a.charCodeAt(i) ^ b.charCodeAt(i);\n }\n return out === 0;\n }\n};\n\n/**\n * HOTP: An HMAC-based One-time Password Algorithm.\n * @see [RFC 4226](https://datatracker.ietf.org/doc/html/rfc4226)\n */ class HOTP {\n /**\n * Default configuration.\n * @type {{\n * issuer: string,\n * label: string,\n * issuerInLabel: boolean,\n * algorithm: string,\n * digits: number,\n * counter: number\n * window: number\n * }}\n */ static get defaults() {\n return {\n issuer: \"\",\n label: \"OTPAuth\",\n issuerInLabel: true,\n algorithm: \"SHA1\",\n digits: 6,\n counter: 0,\n window: 1\n };\n }\n /**\n * Generates an HOTP token.\n * @param {Object} config Configuration options.\n * @param {Secret} config.secret Secret key.\n * @param {string} [config.algorithm='SHA1'] HMAC hashing algorithm.\n * @param {number} [config.digits=6] Token length.\n * @param {number} [config.counter=0] Counter value.\n * @param {(algorithm: string, key: Uint8Array, message: Uint8Array) => Uint8Array} [config.hmac] Custom HMAC function.\n * @returns {string} Token.\n */ static generate({ secret, algorithm = HOTP.defaults.algorithm, digits = HOTP.defaults.digits, counter = HOTP.defaults.counter, hmac = hmacDigest }) {\n const message = uintDecode(counter);\n const digest = hmac(algorithm, secret.bytes, message);\n if (!digest?.byteLength || digest.byteLength < 19) {\n throw new TypeError(\"Return value must be at least 19 bytes\");\n }\n const offset = digest[digest.byteLength - 1] & 15;\n const otp = ((digest[offset] & 127) << 24 | (digest[offset + 1] & 255) << 16 | (digest[offset + 2] & 255) << 8 | digest[offset + 3] & 255) % 10 ** digits;\n return otp.toString().padStart(digits, \"0\");\n }\n /**\n * Generates an HOTP token.\n * @param {Object} [config] Configuration options.\n * @param {number} [config.counter=this.counter++] Counter value.\n * @returns {string} Token.\n */ generate({ counter = this.counter++ } = {}) {\n return HOTP.generate({\n secret: this.secret,\n algorithm: this.algorithm,\n digits: this.digits,\n counter,\n hmac: this.hmac\n });\n }\n /**\n * Validates an HOTP token.\n * @param {Object} config Configuration options.\n * @param {string} config.token Token value.\n * @param {Secret} config.secret Secret key.\n * @param {string} [config.algorithm='SHA1'] HMAC hashing algorithm.\n * @param {number} [config.digits=6] Token length.\n * @param {number} [config.counter=0] Counter value.\n * @param {number} [config.window=1] Window of counter values to test.\n * @param {(algorithm: string, key: Uint8Array, message: Uint8Array) => Uint8Array} [config.hmac] Custom HMAC function.\n * @returns {number|null} Token delta or null if it is not found in the search window, in which case it should be considered invalid.\n */ static validate({ token, secret, algorithm, digits = HOTP.defaults.digits, counter = HOTP.defaults.counter, window = HOTP.defaults.window, hmac = hmacDigest }) {\n // Return early if the token length does not match the digit number.\n if (token.length !== digits) return null;\n let delta = null;\n const check = (/** @type {number} */ i)=>{\n const generatedToken = HOTP.generate({\n secret,\n algorithm,\n digits,\n counter: i,\n hmac\n });\n if (timingSafeEqual(token, generatedToken)) {\n delta = i - counter;\n }\n };\n check(counter);\n for(let i = 1; i <= window && delta === null; ++i){\n check(counter - i);\n if (delta !== null) break;\n check(counter + i);\n if (delta !== null) break;\n }\n return delta;\n }\n /**\n * Validates an HOTP token.\n * @param {Object} config Configuration options.\n * @param {string} config.token Token value.\n * @param {number} [config.counter=this.counter] Counter value.\n * @param {number} [config.window=1] Window of counter values to test.\n * @returns {number|null} Token delta or null if it is not found in the search window, in which case it should be considered invalid.\n */ validate({ token, counter = this.counter, window }) {\n return HOTP.validate({\n token,\n secret: this.secret,\n algorithm: this.algorithm,\n digits: this.digits,\n counter,\n window,\n hmac: this.hmac\n });\n }\n /**\n * Returns a Google Authenticator key URI.\n * @returns {string} URI.\n */ toString() {\n const e = encodeURIComponent;\n return \"otpauth://hotp/\" + `${this.issuer.length > 0 ? this.issuerInLabel ? `${e(this.issuer)}:${e(this.label)}?issuer=${e(this.issuer)}&` : `${e(this.label)}?issuer=${e(this.issuer)}&` : `${e(this.label)}?`}` + `secret=${e(this.secret.base32)}&` + `algorithm=${e(this.algorithm)}&` + `digits=${e(this.digits)}&` + `counter=${e(this.counter)}`;\n }\n /**\n * Creates an HOTP object.\n * @param {Object} [config] Configuration options.\n * @param {string} [config.issuer=''] Account provider.\n * @param {string} [config.label='OTPAuth'] Account label.\n * @param {boolean} [config.issuerInLabel=true] Include issuer prefix in label.\n * @param {Secret|string} [config.secret=Secret] Secret key.\n * @param {string} [config.algorithm='SHA1'] HMAC hashing algorithm.\n * @param {number} [config.digits=6] Token length.\n * @param {number} [config.counter=0] Initial counter value.\n * @param {(algorithm: string, key: Uint8Array, message: Uint8Array) => Uint8Array} [config.hmac] Custom HMAC function.\n */ constructor({ issuer = HOTP.defaults.issuer, label = HOTP.defaults.label, issuerInLabel = HOTP.defaults.issuerInLabel, secret = new Secret(), algorithm = HOTP.defaults.algorithm, digits = HOTP.defaults.digits, counter = HOTP.defaults.counter, hmac } = {}){\n /**\n * Account provider.\n * @type {string}\n */ this.issuer = issuer;\n /**\n * Account label.\n * @type {string}\n */ this.label = label;\n /**\n * Include issuer prefix in label.\n * @type {boolean}\n */ this.issuerInLabel = issuerInLabel;\n /**\n * Secret key.\n * @type {Secret}\n */ this.secret = typeof secret === \"string\" ? Secret.fromBase32(secret) : secret;\n /**\n * HMAC hashing algorithm.\n * @type {string}\n */ this.algorithm = hmac ? algorithm : canonicalizeAlgorithm(algorithm);\n /**\n * Token length.\n * @type {number}\n */ this.digits = digits;\n /**\n * Initial counter value.\n * @type {number}\n */ this.counter = counter;\n /**\n * Custom HMAC function.\n * @type {((algorithm: string, key: Uint8Array, message: Uint8Array) => Uint8Array)|undefined}\n */ this.hmac = hmac;\n }\n}\n\n/**\n * TOTP: Time-Based One-Time Password Algorithm.\n * @see [RFC 6238](https://datatracker.ietf.org/doc/html/rfc6238)\n */ class TOTP {\n /**\n * Default configuration.\n * @type {{\n * issuer: string,\n * label: string,\n * issuerInLabel: boolean,\n * algorithm: string,\n * digits: number,\n * period: number\n * window: number\n * }}\n */ static get defaults() {\n return {\n issuer: \"\",\n label: \"OTPAuth\",\n issuerInLabel: true,\n algorithm: \"SHA1\",\n digits: 6,\n period: 30,\n window: 1\n };\n }\n /**\n * Calculates the counter. i.e. the number of periods since timestamp 0.\n * @param {Object} [config] Configuration options.\n * @param {number} [config.period=30] Token time-step duration.\n * @param {number} [config.timestamp=Date.now] Timestamp value in milliseconds.\n * @returns {number} Counter.\n */ static counter({ period = TOTP.defaults.period, timestamp = Date.now() } = {}) {\n return Math.floor(timestamp / 1000 / period);\n }\n /**\n * Calculates the counter. i.e. the number of periods since timestamp 0.\n * @param {Object} [config] Configuration options.\n * @param {number} [config.timestamp=Date.now] Timestamp value in milliseconds.\n * @returns {number} Counter.\n */ counter({ timestamp = Date.now() } = {}) {\n return TOTP.counter({\n period: this.period,\n timestamp\n });\n }\n /**\n * Calculates the remaining time in milliseconds until the next token is generated.\n * @param {Object} [config] Configuration options.\n * @param {number} [config.period=30] Token time-step duration.\n * @param {number} [config.timestamp=Date.now] Timestamp value in milliseconds.\n * @returns {number} counter.\n */ static remaining({ period = TOTP.defaults.period, timestamp = Date.now() } = {}) {\n return period * 1000 - timestamp % (period * 1000);\n }\n /**\n * Calculates the remaining time in milliseconds until the next token is generated.\n * @param {Object} [config] Configuration options.\n * @param {number} [config.timestamp=Date.now] Timestamp value in milliseconds.\n * @returns {number} counter.\n */ remaining({ timestamp = Date.now() } = {}) {\n return TOTP.remaining({\n period: this.period,\n timestamp\n });\n }\n /**\n * Generates a TOTP token.\n * @param {Object} config Configuration options.\n * @param {Secret} config.secret Secret key.\n * @param {string} [config.algorithm='SHA1'] HMAC hashing algorithm.\n * @param {number} [config.digits=6] Token length.\n * @param {number} [config.period=30] Token time-step duration.\n * @param {number} [config.timestamp=Date.now] Timestamp value in milliseconds.\n * @param {(algorithm: string, key: Uint8Array, message: Uint8Array) => Uint8Array} [config.hmac] Custom HMAC function.\n * @returns {string} Token.\n */ static generate({ secret, algorithm, digits, period = TOTP.defaults.period, timestamp = Date.now(), hmac }) {\n return HOTP.generate({\n secret,\n algorithm,\n digits,\n counter: TOTP.counter({\n period,\n timestamp\n }),\n hmac\n });\n }\n /**\n * Generates a TOTP token.\n * @param {Object} [config] Configuration options.\n * @param {number} [config.timestamp=Date.now] Timestamp value in milliseconds.\n * @returns {string} Token.\n */ generate({ timestamp = Date.now() } = {}) {\n return TOTP.generate({\n secret: this.secret,\n algorithm: this.algorithm,\n digits: this.digits,\n period: this.period,\n timestamp,\n hmac: this.hmac\n });\n }\n /**\n * Validates a TOTP token.\n * @param {Object} config Configuration options.\n * @param {string} config.token Token value.\n * @param {Secret} config.secret Secret key.\n * @param {string} [config.algorithm='SHA1'] HMAC hashing algorithm.\n * @param {number} [config.digits=6] Token length.\n * @param {number} [config.period=30] Token time-step duration.\n * @param {number} [config.timestamp=Date.now] Timestamp value in milliseconds.\n * @param {number} [config.window=1] Window of counter values to test.\n * @param {(algorithm: string, key: Uint8Array, message: Uint8Array) => Uint8Array} [config.hmac] Custom HMAC function.\n * @returns {number|null} Token delta or null if it is not found in the search window, in which case it should be considered invalid.\n */ static validate({ token, secret, algorithm, digits, period = TOTP.defaults.period, timestamp = Date.now(), window, hmac }) {\n return HOTP.validate({\n token,\n secret,\n algorithm,\n digits,\n counter: TOTP.counter({\n period,\n timestamp\n }),\n window,\n hmac\n });\n }\n /**\n * Validates a TOTP token.\n * @param {Object} config Configuration options.\n * @param {string} config.token Token value.\n * @param {number} [config.timestamp=Date.now] Timestamp value in milliseconds.\n * @param {number} [config.window=1] Window of counter values to test.\n * @returns {number|null} Token delta or null if it is not found in the search window, in which case it should be considered invalid.\n */ validate({ token, timestamp, window }) {\n return TOTP.validate({\n token,\n secret: this.secret,\n algorithm: this.algorithm,\n digits: this.digits,\n period: this.period,\n timestamp,\n window,\n hmac: this.hmac\n });\n }\n /**\n * Returns a Google Authenticator key URI.\n * @returns {string} URI.\n */ toString() {\n const e = encodeURIComponent;\n return \"otpauth://totp/\" + `${this.issuer.length > 0 ? this.issuerInLabel ? `${e(this.issuer)}:${e(this.label)}?issuer=${e(this.issuer)}&` : `${e(this.label)}?issuer=${e(this.issuer)}&` : `${e(this.label)}?`}` + `secret=${e(this.secret.base32)}&` + `algorithm=${e(this.algorithm)}&` + `digits=${e(this.digits)}&` + `period=${e(this.period)}`;\n }\n /**\n * Creates a TOTP object.\n * @param {Object} [config] Configuration options.\n * @param {string} [config.issuer=''] Account provider.\n * @param {string} [config.label='OTPAuth'] Account label.\n * @param {boolean} [config.issuerInLabel=true] Include issuer prefix in label.\n * @param {Secret|string} [config.secret=Secret] Secret key.\n * @param {string} [config.algorithm='SHA1'] HMAC hashing algorithm.\n * @param {number} [config.digits=6] Token length.\n * @param {number} [config.period=30] Token time-step duration.\n * @param {(algorithm: string, key: Uint8Array, message: Uint8Array) => Uint8Array} [config.hmac] Custom HMAC function.\n */ constructor({ issuer = TOTP.defaults.issuer, label = TOTP.defaults.label, issuerInLabel = TOTP.defaults.issuerInLabel, secret = new Secret(), algorithm = TOTP.defaults.algorithm, digits = TOTP.defaults.digits, period = TOTP.defaults.period, hmac } = {}){\n /**\n * Account provider.\n * @type {string}\n */ this.issuer = issuer;\n /**\n * Account label.\n * @type {string}\n */ this.label = label;\n /**\n * Include issuer prefix in label.\n * @type {boolean}\n */ this.issuerInLabel = issuerInLabel;\n /**\n * Secret key.\n * @type {Secret}\n */ this.secret = typeof secret === \"string\" ? Secret.fromBase32(secret) : secret;\n /**\n * HMAC hashing algorithm.\n * @type {string}\n */ this.algorithm = hmac ? algorithm : canonicalizeAlgorithm(algorithm);\n /**\n * Token length.\n * @type {number}\n */ this.digits = digits;\n /**\n * Token time-step duration.\n * @type {number}\n */ this.period = period;\n /**\n * Custom HMAC function.\n * @type {((algorithm: string, key: Uint8Array, message: Uint8Array) => Uint8Array)|undefined}\n */ this.hmac = hmac;\n }\n}\n\n/**\n * Key URI regex (otpauth://TYPE/[ISSUER:]LABEL?PARAMETERS).\n * @type {RegExp}\n */ const OTPURI_REGEX = /^otpauth:\\/\\/([ht]otp)\\/(.+)\\?([A-Z0-9.~_-]+=[^?&]*(?:&[A-Z0-9.~_-]+=[^?&]*)*)$/i;\n/**\n * RFC 4648 base32 alphabet with pad.\n * @type {RegExp}\n */ const SECRET_REGEX = /^[2-7A-Z]+=*$/i;\n/**\n * Regex for supported algorithms in built-in HMAC function.\n * @type {RegExp}\n */ const ALGORITHM_REGEX = /^SHA(?:1|224|256|384|512|3-224|3-256|3-384|3-512)$/i;\n/**\n * Regex for custom algorithms in user-defined HMAC function.\n * @type {RegExp}\n */ const ALGORITHM_CUSTOM_REGEX = /^[A-Z0-9]+(?:[_-][A-Z0-9]+)*$/i;\n/**\n * Integer regex.\n * @type {RegExp}\n */ const INTEGER_REGEX = /^[+-]?\\d+$/;\n/**\n * Positive integer regex.\n * @type {RegExp}\n */ const POSITIVE_INTEGER_REGEX = /^\\+?[1-9]\\d*$/;\n/**\n * HOTP/TOTP object/string conversion.\n * @see [Key URI Format](https://github.com/google/google-authenticator/wiki/Key-Uri-Format)\n */ class URI {\n /**\n * Parses a Google Authenticator key URI and returns an HOTP/TOTP object.\n * @param {string} uri Google Authenticator Key URI.\n * @param {Object} [config] Configuration options.\n * @param {(algorithm: string, key: Uint8Array, message: Uint8Array) => Uint8Array} [config.hmac] Custom HMAC function.\n * @returns {HOTP|TOTP} HOTP/TOTP object.\n */ static parse(uri, { hmac } = {}) {\n let uriGroups;\n try {\n uriGroups = uri.match(OTPURI_REGEX);\n // eslint-disable-next-line no-unused-vars\n } catch (_) {\n /* Handled below */ }\n if (!Array.isArray(uriGroups)) {\n throw new URIError(\"Invalid URI format\");\n }\n // Extract URI groups.\n const uriType = uriGroups[1].toLowerCase();\n const uriLabel = uriGroups[2].split(/(?::|%3A) *(.+)/i, 2).map(decodeURIComponent);\n /** @type {Object.<string, string>} */ const uriParams = uriGroups[3].split(\"&\").reduce((acc, cur)=>{\n const pairArr = cur.split(/=(.*)/, 2).map(decodeURIComponent);\n const pairKey = pairArr[0].toLowerCase();\n const pairVal = pairArr[1];\n /** @type {Object.<string, string>} */ const pairAcc = acc;\n pairAcc[pairKey] = pairVal;\n return pairAcc;\n }, {});\n // 'OTP' will be instantiated with 'config' argument.\n let OTP;\n const config = {};\n if (uriType === \"hotp\") {\n OTP = HOTP;\n // Counter: required\n if (typeof uriParams.counter !== \"undefined\" && INTEGER_REGEX.test(uriParams.counter)) {\n config.counter = parseInt(uriParams.counter, 10);\n } else {\n throw new TypeError(\"Missing or invalid 'counter' parameter\");\n }\n } else if (uriType === \"totp\") {\n OTP = TOTP;\n // Period: optional\n if (typeof uriParams.period !== \"undefined\") {\n if (POSITIVE_INTEGER_REGEX.test(uriParams.period)) {\n config.period = parseInt(uriParams.period, 10);\n } else {\n throw new TypeError(\"Invalid 'period' parameter\");\n }\n }\n } else {\n throw new TypeError(\"Unknown OTP type\");\n }\n // Label: required\n // Issuer: optional\n if (typeof uriParams.issuer !== \"undefined\") {\n config.issuer = uriParams.issuer;\n }\n if (uriLabel.length === 2) {\n config.label = uriLabel[1];\n if (typeof config.issuer === \"undefined\" || config.issuer === \"\") {\n config.issuer = uriLabel[0];\n } else if (uriLabel[0] === \"\") {\n config.issuerInLabel = false;\n }\n } else {\n config.label = uriLabel[0];\n if (typeof config.issuer !== \"undefined\" && config.issuer !== \"\") {\n config.issuerInLabel = false;\n }\n }\n // Secret: required\n if (typeof uriParams.secret !== \"undefined\" && SECRET_REGEX.test(uriParams.secret)) {\n config.secret = uriParams.secret;\n } else {\n throw new TypeError(\"Missing or invalid 'secret' parameter\");\n }\n // Algorithm: optional\n if (typeof uriParams.algorithm !== \"undefined\") {\n if ((hmac ? ALGORITHM_CUSTOM_REGEX : ALGORITHM_REGEX).test(uriParams.algorithm)) {\n config.algorithm = uriParams.algorithm;\n } else {\n throw new TypeError(\"Invalid 'algorithm' parameter\");\n }\n }\n // Digits: optional\n if (typeof uriParams.digits !== \"undefined\") {\n if (POSITIVE_INTEGER_REGEX.test(uriParams.digits)) {\n config.digits = parseInt(uriParams.digits, 10);\n } else {\n throw new TypeError(\"Invalid 'digits' parameter\");\n }\n }\n // HMAC: optional\n if (typeof hmac !== \"undefined\") {\n config.hmac = hmac;\n }\n return new OTP(config);\n }\n /**\n * Converts an HOTP/TOTP object to a Google Authenticator key URI.\n * @param {HOTP|TOTP} otp HOTP/TOTP object.\n * @returns {string} Google Authenticator Key URI.\n */ static stringify(otp) {\n if (otp instanceof HOTP || otp instanceof TOTP) {\n return otp.toString();\n }\n throw new TypeError(\"Invalid 'HOTP/TOTP' object\");\n }\n}\n\n/**\n * Library version.\n * @type {string}\n */ const version = \"9.5.0\";\n\nexport { HOTP, Secret, TOTP, URI, version };\n"],"x_google_ignoreList":[0],"mappings":"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"}
|