@mathiscode/password-leak
Version:
A library to check for compromised passwords
4 lines (3 loc) • 2.83 kB
JavaScript
var P=Object.create;var u=Object.defineProperty;var S=Object.getOwnPropertyDescriptor;var b=Object.getOwnPropertyNames;var k=Object.getPrototypeOf,L=Object.prototype.hasOwnProperty;var E=(e,t)=>()=>(t||e((t={exports:{}}).exports,t),t.exports);var A=(e,t,s,o)=>{if(t&&typeof t=="object"||typeof t=="function")for(let n of b(t))!L.call(e,n)&&n!==s&&u(e,n,{get:()=>t[n],enumerable:!(o=S(t,n))||o.enumerable});return e};var h=(e,t,s)=>(s=e!=null?P(k(e)):{},A(t||!e||!e.__esModule?u(s,"default",{value:e,enumerable:!0}):s,e));var f=E(a=>{"use strict";Object.defineProperty(a,"__esModule",{value:!0});function $(e){if(typeof e!="string")throw new TypeError("Expected a string");return e.replace(/[|\\{}()[\]^$+*?.]/g,"\\$&").replace(/-/g,"\\x2d")}var g=[{id:0,value:"Too weak",minDiversity:0,minLength:0},{id:1,value:"Weak",minDiversity:2,minLength:8},{id:2,value:"Medium",minDiversity:4,minLength:10},{id:3,value:"Strong",minDiversity:4,minLength:12}],w="!\"#$%&'()*+,-./\\:;<=>?@[]^_`{|}~",m=(e,t=g,s)=>{t[0].minDiversity=0,t[0].minLength=0;let o=e??"",n=[{key:"lowercase",regex:"[a-z]"},{key:"uppercase",regex:"[A-Z]"},{key:"number",regex:"[0-9]"},{key:"symbol",regex:s?`[${$(s)}]`:"[^a-zA-Z0-9]"}],i={};i.contains=n.filter(r=>new RegExp(`${r.regex}`).test(o)).map(r=>r.key),i.length=o.length;let d=t.filter(r=>i.contains.length>=r.minDiversity).filter(r=>i.length>=r.minLength).sort((r,v)=>v.id-r.id).map(r=>({id:r.id,value:r.value}));return Object.assign(i,d[0]),i},T={passwordStrength:m,defaultOptions:g,owaspSymbols:w};a.default=T;a.defaultOptions=g;a.owaspSymbols=w;a.passwordStrength=m});var x=h(require("node:readline"),1),c=require("node:process");var p=h(f(),1),D=globalThis.crypto;globalThis.isPasswordLeaked=y;globalThis.checkPassword=l;globalThis.checkPasswordStrength=O;async function l(e){return{strength:(0,p.passwordStrength)(e),isLeaked:await y(e)}}function O(e){return(0,p.passwordStrength)(e)}async function y(e){if(typeof e!="string")throw new Error("Password must be a string");let t=await D.subtle.digest("SHA-1",new TextEncoder().encode(e)),s=Array.from(new Uint8Array(t)).map(d=>d.toString(16).padStart(2,"0")).join(""),o=s.substring(0,5).toUpperCase();return(await(await fetch(`https://api.pwnedpasswords.com/range/${o}`)).text()).includes(s.substring(5).toUpperCase())}var U=process.argv.slice(2);async function j(){let e=x.default.createInterface({input:c.stdin,output:c.stdout});return new Promise(t=>{e.question("Enter password to check: ",s=>{e.close(),t(s)})})}async function C(){try{let e=U[0]||await j(),t=await l(e);console.log(`Password ${t.isLeaked?"has":"has not"} been compromised`),console.log("Password strength:",JSON.stringify(t.strength,null,2)),process.exit(t.isLeaked?1:0)}catch(e){console.error("Error:",e.message),process.exit(1)}}C();
//# sourceMappingURL=cli.cjs.map