{
  "version": 3,
  "sources": ["../node_modules/.pnpm/check-password-strength@3.0.0/node_modules/check-password-strength/dist/index.js", "../src/cli.ts", "../src/index.ts"],
  "sourcesContent": ["'use strict';\r\n\r\nObject.defineProperty(exports, '__esModule', { value: true });\r\n\r\nfunction escapeStringRegexp(string) {\r\n\tif (typeof string !== 'string') {\r\n\t\tthrow new TypeError('Expected a string');\r\n\t}\r\n\r\n\t// Escape characters with special meaning either inside or outside character sets.\r\n\t// Use a simple backslash escape when it\u2019s always valid, and a `\\xnn` escape when the simpler form would be disallowed by Unicode patterns\u2019 stricter grammar.\r\n\treturn string\r\n\t\t.replace(/[|\\\\{}()[\\]^$+*?.]/g, '\\\\$&')\r\n\t\t.replace(/-/g, '\\\\x2d');\r\n}\r\n\r\nconst defaultOptions = [\r\n  {\r\n    id: 0,\r\n    value: \"Too weak\",\r\n    minDiversity: 0,\r\n    minLength: 0,\r\n  },\r\n  {\r\n    id: 1,\r\n    value: \"Weak\",\r\n    minDiversity: 2,\r\n    minLength: 8,\r\n  },\r\n  {\r\n    id: 2,\r\n    value: \"Medium\",\r\n    minDiversity: 4,\r\n    minLength: 10,\r\n  },\r\n  {\r\n    id: 3,\r\n    value: \"Strong\",\r\n    minDiversity: 4,\r\n    minLength: 12,\r\n  },\r\n];\r\n\r\nconst owaspSymbols = \"!\\\"#$%&'()*+,-./\\\\:;<=>?@[]^_`{|}~\";\r\n\r\nconst passwordStrength = (\r\n  password,\r\n  options = defaultOptions,\r\n  restrictSymbolsTo\r\n) => {\r\n  options[0].minDiversity = 0;\r\n  options[0].minLength = 0;\r\n\r\n  // prevent [a-z] to match null and compute length\r\n  const _password = password ?? \"\";\r\n\r\n  const rules = [\r\n    {\r\n      key: \"lowercase\",\r\n      regex: \"[a-z]\",\r\n    },\r\n    {\r\n      key: \"uppercase\",\r\n      regex: \"[A-Z]\",\r\n    },\r\n    {\r\n      key: \"number\",\r\n      regex: \"[0-9]\",\r\n    },\r\n    {\r\n      key: \"symbol\",\r\n      regex: restrictSymbolsTo ? `[${escapeStringRegexp(restrictSymbolsTo)}]` : \"[^a-zA-Z0-9]\",\r\n    },\r\n  ];\r\n\r\n  let strength = {};\r\n\r\n  strength.contains = rules\r\n    .filter((rule) => new RegExp(`${rule.regex}`).test(_password))\r\n    .map((rule) => rule.key);\r\n\r\n  strength.length = _password.length;\r\n\r\n  let fulfilledOptions = options\r\n    .filter((option) => strength.contains.length >= option.minDiversity)\r\n    .filter((option) => strength.length >= option.minLength)\r\n    .sort((o1, o2) => o2.id - o1.id)\r\n    .map((option) => ({ id: option.id, value: option.value }));\r\n\r\n  Object.assign(strength, fulfilledOptions[0]);\r\n\r\n  return strength;\r\n};\r\n\r\nvar index = { passwordStrength, defaultOptions, owaspSymbols };\r\n\r\nexports.default = index;\r\nexports.defaultOptions = defaultOptions;\r\nexports.owaspSymbols = owaspSymbols;\r\nexports.passwordStrength = passwordStrength;\r\n", "#!/usr/bin/env node\n\nimport readline from 'node:readline'\nimport { stdin as input, stdout as output } from 'node:process'\nimport { checkPassword } from './index'\n\nconst args = process.argv.slice(2)\n\nasync function promptPassword(): Promise<string> {\n  const rl = readline.createInterface({ input, output })\n  \n  return new Promise(resolve => {\n    rl.question('Enter password to check: ', (answer) => {\n      rl.close()\n      resolve(answer)\n    })\n  })\n}\n\nasync function main() {\n  try {\n    const password = args[0] || await promptPassword()\n    const result = await checkPassword(password)\n    console.log(`Password ${result.isLeaked ? 'has' : 'has not'} been compromised`)\n    console.log('Password strength:', JSON.stringify(result.strength, null, 2))\n    process.exit(result.isLeaked ? 1 : 0)\n  } catch (error) {\n    console.error('Error:', error.message)\n    process.exit(1)\n  }\n}\n\nmain()\n", "import { passwordStrength } from 'check-password-strength'\n\nconst crypto = globalThis.crypto\n\nexport default isPasswordLeaked\nglobalThis.isPasswordLeaked = isPasswordLeaked\nglobalThis.checkPassword = checkPassword\nglobalThis.checkPasswordStrength = checkPasswordStrength\n\nexport async function checkPassword(password: string) {\n  return {\n    strength: passwordStrength(password),\n    isLeaked: await isPasswordLeaked(password)\n  }\n}\n\nexport function checkPasswordStrength(password: string) {\n  return passwordStrength(password)\n}\n\nexport async function isPasswordLeaked(password: string) {\n  if (typeof password !== 'string') throw new Error('Password must be a string')\n\n  const hashedPassword = await crypto.subtle.digest('SHA-1', new TextEncoder().encode(password))\n  const hashedPasswordString = Array.from(new Uint8Array(hashedPassword)).map(b => b.toString(16).padStart(2, '0')).join('')\n  const firstFive = hashedPasswordString.substring(0, 5).toUpperCase()\n  const response = await fetch(`https://api.pwnedpasswords.com/range/${firstFive}`)\n  const data = await response.text()\n\n  return data.includes(hashedPasswordString.substring(5).toUpperCase())\n}\n\nexport function isPasswordLeakedSync(password: string, callback: (error: Error | null, isLeaked: boolean) => void) {\n  if (typeof password !== 'string') {\n    callback(new Error('Password must be a string'), false)\n    return\n  }\n\n  crypto.subtle.digest('SHA-1', new TextEncoder().encode(password))\n    .catch(error => callback(error, false))\n    .then(hashedPassword => {\n      const hashedPasswordString = Array.from(new Uint8Array(hashedPassword as ArrayBuffer)).map(b => b.toString(16).padStart(2, '0')).join('')\n      const firstFive = hashedPasswordString.substring(0, 5).toUpperCase()\n      fetch(`https://api.pwnedpasswords.com/range/${firstFive}`)\n        .then(response => response.text())\n        .then(data => callback(null, data.includes(hashedPasswordString.substring(5).toUpperCase())))\n        .catch(error => callback(error, false))\n    })\n}\n"],
  "mappings": "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",
  "names": ["require_dist", "__commonJSMin", "exports", "escapeStringRegexp", "string", "defaultOptions", "owaspSymbols", "passwordStrength", "password", "options", "restrictSymbolsTo", "_password", "rules", "strength", "rule", "fulfilledOptions", "option", "o1", "o2", "index", "import_node_readline", "import_node_process", "import_check_password_strength", "crypto", "isPasswordLeaked", "checkPassword", "checkPasswordStrength", "password", "hashedPassword", "crypto", "hashedPasswordString", "b", "firstFive", "args", "promptPassword", "rl", "readline", "input", "output", "resolve", "answer", "main", "password", "result", "checkPassword", "error"]
}
