{"_id":"node-email-verifier","_rev":"16-457602cb3256b7fa0fb0678a905f9176","name":"node-email-verifier","dist-tags":{"latest":"4.0.0"},"versions":{"1.0.0":{"name":"node-email-verifier","version":"1.0.0","keywords":["email validator","email validation","email verifier","email verification"],"author":{"url":"http://jesselpalmer.com/","name":"Jesse Palmer","email":"jesselpalmer@gmail.com"},"license":"MIT","_id":"node-email-verifier@1.0.0","maintainers":[{"name":"jesselpalmer","email":"jesselpalmer@gmail.com"}],"homepage":"https://github.com/jesselpalmer/node-email-verifier#readme","bugs":{"url":"https://github.com/jesselpalmer/node-email-verifier/issues"},"dist":{"shasum":"1807f3bd555637421be5069466f845def9ea333e","tarball":"https://registry.npmjs.org/node-email-verifier/-/node-email-verifier-1.0.0.tgz","fileCount":7,"integrity":"sha512-e+bhgEn5l0oZMUeoeTX1ZypVtYB+S95+MQlvdNdUtlK3cSMTl2qKniio9wZY0YPhduyw/ragAbDTDTnutnvL0g==","signatures":[{"sig":"MEYCIQDU4Xq+65IrCsVyT7HX9LQhWrFeH9OgTh5equqysELxiAIhAJXjKb0UUiqX7VbdFfgVWrHuBwShvo4lO3K9yTUOE5vo","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":6557},"main":"./src/index.js","type":"module","engines":{"node":">=16.0.0"},"gitHead":"303685ce995f01a283eb110e0bd5788814ed42d1","scripts":{"test":"node --experimental-vm-modules ./node_modules/.bin/jest"},"_npmUser":{"name":"jesselpalmer","email":"jesselpalmer@gmail.com"},"repository":{"url":"git+https://github.com/jesselpalmer/node-email-verifier.git","type":"git"},"_npmVersion":"10.1.0","description":"A Node.js module for verifying email addresses","directories":{},"_nodeVersion":"20.9.0","dependencies":{"validator":"^13.11.0"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.7.0"},"_npmOperationalInternal":{"tmp":"tmp/node-email-verifier_1.0.0_1699753592517_0.10422072753619327","host":"s3://npm-registry-packages"}},"1.0.1":{"name":"node-email-verifier","version":"1.0.1","keywords":["email validator","email validation","email verifier","email verification"],"author":{"url":"http://jesselpalmer.com/","name":"Jesse Palmer","email":"jesselpalmer@gmail.com"},"license":"MIT","_id":"node-email-verifier@1.0.1","maintainers":[{"name":"jesselpalmer","email":"jesselpalmer@gmail.com"}],"homepage":"https://github.com/jesselpalmer/node-email-verifier#readme","bugs":{"url":"https://github.com/jesselpalmer/node-email-verifier/issues"},"dist":{"shasum":"830e12713f0caf9f76eef438a1e952ef1f7b5734","tarball":"https://registry.npmjs.org/node-email-verifier/-/node-email-verifier-1.0.1.tgz","fileCount":7,"integrity":"sha512-2DLGZQnhpZNuUz/fCCSzYO3lddYpZPxhC6GsNLOQ2I9W61Vvt9Vpoz46kXqPCp+9B3jxrGpmi0zENzjq79XhPA==","signatures":[{"sig":"MEUCIBs0Kz+dhX1y2LOobGUwPlqn/FAhlnxMuxRPP7Y2vPjBAiEAo+4DJBNnvki6rS5gYj7LRqyrNcIlLpKwnJvXvSk9jDQ=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":6557},"main":"./src/index.js","type":"module","engines":{"node":">=16.0.0"},"gitHead":"599fde669e34f30bbc0ea1c563007808ab807566","scripts":{"test":"node --experimental-vm-modules ./node_modules/.bin/jest"},"_npmUser":{"name":"jesselpalmer","email":"jesselpalmer@gmail.com"},"repository":{"url":"git+https://github.com/jesselpalmer/node-email-verifier.git","type":"git"},"_npmVersion":"10.2.3","description":"A Node.js module for verifying email addresses","directories":{},"_nodeVersion":"20.10.0","dependencies":{"validator":"^13.11.0"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.7.0"},"_npmOperationalInternal":{"tmp":"tmp/node-email-verifier_1.0.1_1707590117571_0.37434692781165846","host":"s3://npm-registry-packages"}},"1.1.0":{"name":"node-email-verifier","version":"1.1.0","keywords":["email validator","email validation","email verifier","email verification"],"author":{"url":"http://jesselpalmer.com/","name":"Jesse Palmer","email":"jesselpalmer@gmail.com"},"license":"MIT","_id":"node-email-verifier@1.1.0","maintainers":[{"name":"jesselpalmer","email":"jesselpalmer@gmail.com"}],"homepage":"https://github.com/jesselpalmer/node-email-verifier#readme","bugs":{"url":"https://github.com/jesselpalmer/node-email-verifier/issues"},"dist":{"shasum":"46bd0d58b9f3a9c2be8f9470f408339a76b230be","tarball":"https://registry.npmjs.org/node-email-verifier/-/node-email-verifier-1.1.0.tgz","fileCount":7,"integrity":"sha512-Nl9A3uF3P/+OCSyx+NgzM8toJ1GYRUOgYEt9tzm/eivQULaYsGZXsirwki9Zm8Yi/I5/FnBKCWnO6Lpngw+K3g==","signatures":[{"sig":"MEYCIQCgy5pLyKDt45r4xcVw3kDnSVd+s26cK3nxRkKyV+f1RQIhALYF4wRcBqHVQztjaJx7ZTblEzMt4TKMnk92H/LtNdPx","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":8043},"main":"./src/index.js","type":"module","engines":{"node":">=16.0.0"},"gitHead":"e7f238c0647fcc28adeedf0c175655f9c8e13e77","scripts":{"test":"node --experimental-vm-modules ./node_modules/.bin/jest"},"_npmUser":{"name":"jesselpalmer","email":"jesselpalmer@gmail.com"},"repository":{"url":"git+https://github.com/jesselpalmer/node-email-verifier.git","type":"git"},"_npmVersion":"10.2.3","description":"A Node.js module for verifying email addresses","directories":{},"_nodeVersion":"20.10.0","dependencies":{"validator":"^13.11.0"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.7.0"},"_npmOperationalInternal":{"tmp":"tmp/node-email-verifier_1.1.0_1712932035178_0.5126234115424881","host":"s3://npm-registry-packages"}},"1.1.1":{"name":"node-email-verifier","version":"1.1.1","keywords":["email validator","email validation","email verifier","email verification"],"author":{"url":"http://jesselpalmer.com/","name":"Jesse Palmer","email":"jesselpalmer@gmail.com"},"license":"MIT","_id":"node-email-verifier@1.1.1","maintainers":[{"name":"jesselpalmer","email":"jesselpalmer@gmail.com"}],"homepage":"https://github.com/jesselpalmer/node-email-verifier#readme","bugs":{"url":"https://github.com/jesselpalmer/node-email-verifier/issues"},"dist":{"shasum":"69cc2f72c3c537d4270f01c1cea325faa2deb596","tarball":"https://registry.npmjs.org/node-email-verifier/-/node-email-verifier-1.1.1.tgz","fileCount":7,"integrity":"sha512-qgCKmulOwmAOOnGY03GKKlKF6pa9lDMJEyHQ0/M6F8sDBL4mtnRrv6v0q67nEuIqbk2WFW1cEEU0BLdtWmiceQ==","signatures":[{"sig":"MEYCIQCXV1Tk/do1Q9q6IWr6hubLi5x2yiWr+75bfF+Nvg9qdgIhALonQup/bC9O0Ov5nrNgJQsYJ/mjNiVHKuHRW6d0v0H1","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":8043},"main":"./src/index.js","type":"module","engines":{"node":">=16.0.0"},"gitHead":"696ce2bfb10c4a4045f28cbc903d0801ec5fcfe3","scripts":{"test":"node --experimental-vm-modules ./node_modules/.bin/jest"},"_npmUser":{"name":"jesselpalmer","email":"jesselpalmer@gmail.com"},"repository":{"url":"git+https://github.com/jesselpalmer/node-email-verifier.git","type":"git"},"_npmVersion":"10.2.3","description":"A Node.js module for verifying email addresses","directories":{},"_nodeVersion":"20.10.0","dependencies":{"validator":"^13.11.0"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.7.0"},"_npmOperationalInternal":{"tmp":"tmp/node-email-verifier_1.1.1_1712933039769_0.11372463913109732","host":"s3://npm-registry-packages"}},"2.0.0":{"name":"node-email-verifier","version":"2.0.0","keywords":["email validator","email validation","email verifier","email verification"],"author":{"url":"http://jesselpalmer.com/","name":"Jesse Palmer","email":"jesselpalmer@gmail.com"},"license":"MIT","_id":"node-email-verifier@2.0.0","maintainers":[{"name":"jesselpalmer","email":"jesselpalmer@gmail.com"}],"homepage":"https://github.com/jesselpalmer/node-email-verifier#readme","bugs":{"url":"https://github.com/jesselpalmer/node-email-verifier/issues"},"dist":{"shasum":"fc0b1ced84b6e19593f5809c379d28bb9d361a8b","tarball":"https://registry.npmjs.org/node-email-verifier/-/node-email-verifier-2.0.0.tgz","fileCount":7,"integrity":"sha512-AHcppjOH2KT0mxakrxFMOMjV/gOVMRpYvnJUkNfgF9oJ3INdVmqcMFJ5TlM8elpTPwt6A7bSp1IMnnWcxGom/Q==","signatures":[{"sig":"MEUCIB7l+GXIY7XHR5mfy2ZKk+I4VMJGBgW3InKJRYQI5v0wAiEA9WnjcmPBirHEF27d7TNIRaf66zi8gIMfYFSC8UEbhFo=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":15633},"main":"./src/index.js","type":"module","engines":{"node":">=16.0.0"},"gitHead":"bc34d2a8abb516f554e85f0256dd6b2d67730b97","scripts":{"test":"node --experimental-vm-modules ./node_modules/.bin/jest"},"_npmUser":{"name":"jesselpalmer","email":"jesselpalmer@gmail.com"},"repository":{"url":"git+https://github.com/jesselpalmer/node-email-verifier.git","type":"git"},"_npmVersion":"10.8.2","description":"A Node.js module for verifying email addresses","directories":{},"_nodeVersion":"20.16.0","dependencies":{"ms":"^2.1.3","validator":"^13.11.0"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.7.0"},"_npmOperationalInternal":{"tmp":"tmp/node-email-verifier_2.0.0_1724132078059_0.07615879843432838","host":"s3://npm-registry-packages"}},"3.0.0":{"name":"node-email-verifier","version":"3.0.0","keywords":["email validator","email validation","email verifier","email verification"],"author":{"url":"http://jesselpalmer.com/","name":"Jesse Palmer","email":"jesselpalmer@gmail.com"},"license":"MIT","_id":"node-email-verifier@3.0.0","maintainers":[{"name":"jesselpalmer","email":"jesselpalmer@gmail.com"}],"homepage":"https://github.com/jesselpalmer/node-email-verifier#readme","bugs":{"url":"https://github.com/jesselpalmer/node-email-verifier/issues"},"dist":{"shasum":"196f27f12500675212365c4373fe0b8af139b9a0","tarball":"https://registry.npmjs.org/node-email-verifier/-/node-email-verifier-3.0.0.tgz","fileCount":15,"integrity":"sha512-8CSNNosBo3RWD1Ke3rM/iWQ+fu0t1CmUM2XuXat13bzACoW4yye/VFhTxRuRFd3lht3pvvROBqHZTdbV/jbADQ==","signatures":[{"sig":"MEUCIHyUpxTqTTeo9Eeg97XYwpYjkNFmHfsmdn+NHzkqZAzsAiEAgdVe5AoPkCRUAbz74Z1mg49gql5e9i/ro6mw0/ITLIg=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":37325},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=18.0.0"},"gitHead":"f2d908b779a8fc2a455ad62e5a51136917cd59ab","scripts":{"lint":"eslint .","test":"node --experimental-vm-modules ./node_modules/.bin/jest","build":"tsc","check":"npm run lint && npm run format:check && npm run test","format":"prettier --write .","prepare":"npm run build","lint:fix":"eslint . --fix","precommit":"npm run lint:fix && npm run format && npm run test","format:check":"prettier --check ."},"_npmUser":{"name":"jesselpalmer","email":"jesselpalmer@gmail.com"},"repository":{"url":"git+https://github.com/jesselpalmer/node-email-verifier.git","type":"git"},"_npmVersion":"10.5.0","description":"A Node.js module for verifying email addresses","directories":{},"_nodeVersion":"21.7.3","dependencies":{"ms":"^2.1.3","validator":"^13.15.15"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.7.0","eslint":"^9.29.0","ts-jest":"^29.1.1","prettier":"^3.5.3","@types/ms":"^0.7.34","typescript":"^5.2.2","@types/jest":"^29.5.14","@types/node":"^20.17.32","@types/validator":"^13.15.1","typescript-eslint":"^8.34.0","eslint-config-prettier":"^10.1.5","eslint-plugin-prettier":"^5.4.1","@typescript-eslint/parser":"^8.34.0","@typescript-eslint/eslint-plugin":"^8.34.0"},"_npmOperationalInternal":{"tmp":"tmp/node-email-verifier_3.0.0_1749942352379_0.2348205905606091","host":"s3://npm-registry-packages-npm-production"}},"3.1.0":{"name":"node-email-verifier","version":"3.1.0","keywords":["email validator","email validation","email verifier","email verification"],"author":{"url":"http://jesselpalmer.com/","name":"Jesse Palmer","email":"jesselpalmer@gmail.com"},"license":"MIT","_id":"node-email-verifier@3.1.0","maintainers":[{"name":"jesselpalmer","email":"jesselpalmer@gmail.com"}],"homepage":"https://github.com/jesselpalmer/node-email-verifier#readme","bugs":{"url":"https://github.com/jesselpalmer/node-email-verifier/issues"},"dist":{"shasum":"671fba91a3fefb031587d16cab6bcd5ea518afdd","tarball":"https://registry.npmjs.org/node-email-verifier/-/node-email-verifier-3.1.0.tgz","fileCount":18,"integrity":"sha512-DCBfB3weAFMl+0q1eaa661JFiAEw2YC0yMqKK++MRSkUX2luMHOE0j5od42l9HDIq5gWDMS7W1kzUbqax+d+gQ==","signatures":[{"sig":"MEYCIQDx6m8YSz2TUpSjLJgIRlTP2Okc7GFLiK7pa+4XOm565QIhANXVbdhwUdCK3dwXH4UAMCICFUAove3dzNMPmFfif5+2","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":79549},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=18.0.0"},"gitHead":"b5b21cdfd1b7102186ff87fd2545549fe0bd254a","scripts":{"lint":"eslint .","test":"node --experimental-vm-modules ./node_modules/.bin/jest","build":"tsc","check":"npm run lint && npm run format:check && npm run test","format":"prettier --write .","prepare":"npm run build","lint:fix":"eslint . --fix","precommit":"npm run lint:fix && npm run format && npm run test","format:check":"prettier --check ."},"_npmUser":{"name":"jesselpalmer","email":"jesselpalmer@gmail.com"},"repository":{"url":"git+https://github.com/jesselpalmer/node-email-verifier.git","type":"git"},"_npmVersion":"10.5.0","description":"A Node.js module for verifying email addresses","directories":{},"_nodeVersion":"21.7.3","dependencies":{"ms":"^2.1.3","validator":"^13.15.15"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.7.0","eslint":"^9.29.0","ts-jest":"^29.1.1","prettier":"^3.5.3","@types/ms":"^0.7.34","typescript":"^5.2.2","@types/jest":"^29.5.14","@types/node":"^20.17.32","@types/validator":"^13.15.1","typescript-eslint":"^8.34.0","eslint-config-prettier":"^10.1.5","eslint-plugin-prettier":"^5.4.1","@typescript-eslint/parser":"^8.34.0","@typescript-eslint/eslint-plugin":"^8.34.0"},"_npmOperationalInternal":{"tmp":"tmp/node-email-verifier_3.1.0_1749966326821_0.28114899222199985","host":"s3://npm-registry-packages-npm-production"}},"3.1.1":{"name":"node-email-verifier","version":"3.1.1","keywords":["email validator","email validation","email verifier","email verification"],"author":{"url":"http://jesselpalmer.com/","name":"Jesse Palmer","email":"jesselpalmer@gmail.com"},"license":"MIT","_id":"node-email-verifier@3.1.1","maintainers":[{"name":"jesselpalmer","email":"jesselpalmer@gmail.com"}],"homepage":"https://github.com/jesselpalmer/node-email-verifier#readme","bugs":{"url":"https://github.com/jesselpalmer/node-email-verifier/issues"},"dist":{"shasum":"100492b69d702d132fe6df3c0958330ca0eb4ac1","tarball":"https://registry.npmjs.org/node-email-verifier/-/node-email-verifier-3.1.1.tgz","fileCount":12,"integrity":"sha512-3IQ0jTFdjz9qKr8iZc4wLQ5hfJwZRkgtOyEaPS2HG2l4nhsi0822zG3akgBBG91kqMERhwGigK8q/CCUo/PE5g==","signatures":[{"sig":"MEUCID6rnjhcwlW8DPW6Mjh7y7o1wkmxboie/VO+k/JOySFjAiEA0cZ0yZ18Htx9c2Lp9VBqGw43GmQ80RqZMw5WvMiOdWw=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":75910},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=18.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.cjs"}},"gitHead":"0c529d6e998e14b43dd1bb9401b6b75ed60d4a64","scripts":{"lint":"eslint .","test":"npm run build && node --experimental-vm-modules ./node_modules/.bin/jest","build":"tsc && node scripts/build-cjs.js","check":"npm run lint:all && npm run format:check && npm run test","format":"prettier --write .","lint:md":"markdownlint-cli2","prepare":"npm run build","lint:all":"npm run lint && npm run lint:md && npm run lint:yaml","lint:fix":"eslint . --fix","lint:yaml":"node scripts/lint-yaml.js","precommit":"npm run lint:fix && npm run lint:md:fix && npm run format && npm run test","lint:md:fix":"markdownlint-cli2 --fix","format:check":"prettier --check .","test:integration":"npm run build && node scripts/integration-test.cjs"},"_npmUser":{"name":"jesselpalmer","actor":{"name":"jesselpalmer","type":"user","email":"jesselpalmer@gmail.com"},"email":"jesselpalmer@gmail.com"},"repository":{"url":"git+https://github.com/jesselpalmer/node-email-verifier.git","type":"git"},"_npmVersion":"10.9.2","description":"A Node.js module for verifying email addresses","directories":{},"_nodeVersion":"22.16.0","dependencies":{"ms":"^2.1.3","validator":"^13.15.15"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.7.0","eslint":"^9.29.0","ts-jest":"^29.1.1","prettier":"^3.5.3","@types/ms":"^0.7.34","yaml-lint":"^1.7.0","typescript":"^5.2.2","@types/jest":"^29.5.14","@types/node":"^20.17.32","markdownlint":"^0.38.0","@types/validator":"^13.15.1","markdownlint-cli2":"^0.18.1","typescript-eslint":"^8.34.0","eslint-config-prettier":"^10.1.5","eslint-plugin-prettier":"^5.4.1","@typescript-eslint/parser":"^8.34.0","@typescript-eslint/eslint-plugin":"^8.34.0"},"_npmOperationalInternal":{"tmp":"tmp/node-email-verifier_3.1.1_1750399560822_0.21911220081975613","host":"s3://npm-registry-packages-npm-production"}},"3.1.2":{"name":"node-email-verifier","version":"3.1.2","keywords":["email validator","email validation","email verifier","email verification"],"author":{"url":"http://jesselpalmer.com/","name":"Jesse Palmer","email":"jesselpalmer@gmail.com"},"license":"MIT","_id":"node-email-verifier@3.1.2","maintainers":[{"name":"jesselpalmer","email":"jesselpalmer@gmail.com"}],"homepage":"https://github.com/jesselpalmer/node-email-verifier#readme","bugs":{"url":"https://github.com/jesselpalmer/node-email-verifier/issues"},"dist":{"shasum":"96d77d64ee13269ea35ffb15429835e17a347bbc","tarball":"https://registry.npmjs.org/node-email-verifier/-/node-email-verifier-3.1.2.tgz","fileCount":12,"integrity":"sha512-U/u/RvEtUhcoZP7HA2tQ5chHzTQ+npPWwr1keYrk2hfaoVuvMWHQsNjf5m1VLdFRzRAzfy8D6rKQhSKLdNqOzQ==","signatures":[{"sig":"MEUCIDXd1w8P+z5MvBUvm3Bq3N48X3dbJ6lrnA/wNY1JFDocAiEA88qapvxhQDhGFDWNEfO1I2SEr0V0IgR6Fan8fcSmzn8=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":76544},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=18.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.cjs"}},"gitHead":"6bd83eb596863481be46ffe309793c449f8addbf","scripts":{"lint":"eslint .","test":"npm run build && node --experimental-vm-modules ./node_modules/.bin/jest","build":"tsc && node scripts/build-cjs.js","check":"npm run lint:all && npm run format:check && npm run test","format":"prettier --write .","lint:md":"markdownlint-cli2","prepare":"npm run build","lint:all":"npm run lint && npm run lint:md && npm run lint:yaml","lint:fix":"eslint . --fix","lint:yaml":"node scripts/lint-yaml.js","precommit":"npm run lint:fix && npm run lint:md:fix && npm run format && npm run test","lint:md:fix":"markdownlint-cli2 --fix","format:check":"prettier --check .","test:integration":"npm run build && node scripts/integration-test.cjs"},"_npmUser":{"name":"jesselpalmer","actor":{"name":"jesselpalmer","type":"user","email":"jesselpalmer@gmail.com"},"email":"jesselpalmer@gmail.com"},"repository":{"url":"git+https://github.com/jesselpalmer/node-email-verifier.git","type":"git"},"_npmVersion":"10.9.2","description":"A Node.js module for verifying email addresses","directories":{},"_nodeVersion":"22.16.0","dependencies":{"ms":"^2.1.3","validator":"^13.15.15"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.7.0","eslint":"^9.29.0","ts-jest":"^29.1.1","prettier":"^3.5.3","@types/ms":"^0.7.34","yaml-lint":"^1.7.0","typescript":"^5.2.2","@types/jest":"^29.5.14","@types/node":"^20.17.32","markdownlint":"^0.38.0","@types/validator":"^13.15.1","markdownlint-cli2":"^0.18.1","typescript-eslint":"^8.34.0","eslint-config-prettier":"^10.1.5","eslint-plugin-prettier":"^5.4.1","@typescript-eslint/parser":"^8.34.0","@typescript-eslint/eslint-plugin":"^8.34.0"},"_npmOperationalInternal":{"tmp":"tmp/node-email-verifier_3.1.2_1750408059355_0.9303125344153618","host":"s3://npm-registry-packages-npm-production"}},"3.1.3":{"name":"node-email-verifier","version":"3.1.3","keywords":["email validator","email validation","email verifier","email verification"],"author":{"url":"http://jesselpalmer.com/","name":"Jesse Palmer","email":"jesselpalmer@gmail.com"},"license":"MIT","_id":"node-email-verifier@3.1.3","maintainers":[{"name":"jesselpalmer","email":"jesselpalmer@gmail.com"}],"homepage":"https://github.com/jesselpalmer/node-email-verifier#readme","bugs":{"url":"https://github.com/jesselpalmer/node-email-verifier/issues"},"dist":{"shasum":"7ae7e649797a55b7cd7a27a75d568db810f653c1","tarball":"https://registry.npmjs.org/node-email-verifier/-/node-email-verifier-3.1.3.tgz","fileCount":12,"integrity":"sha512-YOT0ByAhP2vNzfmhsbLW+2XfYzgwW9k1BEtphHP9Ki2sfI4mDwRRqAJSrj7t34Kmfm04I2xaeWi34LUVEsHu2w==","signatures":[{"sig":"MEUCICr3T9UJ60hBuFxabd4d+OK8WyVZTxEoOtaKZEVh+yvBAiEA5uA43c1vL12SgcrzDgE27zU/akbNC86U0cX9Cyw2Ov0=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":76584},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=18.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.cjs"}},"gitHead":"100ac4919ea6f424a7fcff37a9ff9f38c8a38a95","scripts":{"lint":"eslint .","test":"npm run build && node --experimental-vm-modules ./node_modules/.bin/jest","build":"tsc && node scripts/build-cjs.js","check":"npm run lint:all && npm run format:check && npm run test","format":"prettier --write .","lint:md":"markdownlint-cli2","prepare":"npm run build","lint:all":"npm run lint && npm run lint:md && npm run lint:yaml","lint:fix":"eslint . --fix","lint:yaml":"node scripts/lint-yaml.js","precommit":"npm run lint:fix && npm run lint:md:fix && npm run format && npm run test","lint:md:fix":"markdownlint-cli2 --fix","format:check":"prettier --check .","test:integration":"npm run build && node scripts/integration-test.cjs"},"_npmUser":{"name":"jesselpalmer","actor":{"name":"jesselpalmer","type":"user","email":"jesselpalmer@gmail.com"},"email":"jesselpalmer@gmail.com"},"repository":{"url":"git+https://github.com/jesselpalmer/node-email-verifier.git","type":"git"},"_npmVersion":"10.9.2","description":"A Node.js module for verifying email addresses","directories":{},"_nodeVersion":"22.16.0","dependencies":{"ms":"^2.1.3","validator":"^13.15.15"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.7.0","eslint":"^9.29.0","ts-jest":"^29.1.1","prettier":"^3.5.3","@types/ms":"^0.7.34","yaml-lint":"^1.7.0","typescript":"^5.2.2","@types/jest":"^29.5.14","@types/node":"^20.17.32","markdownlint":"^0.38.0","@types/validator":"^13.15.1","markdownlint-cli2":"^0.18.1","typescript-eslint":"^8.34.0","eslint-config-prettier":"^10.1.5","eslint-plugin-prettier":"^5.4.1","@typescript-eslint/parser":"^8.34.0","@typescript-eslint/eslint-plugin":"^8.34.0"},"_npmOperationalInternal":{"tmp":"tmp/node-email-verifier_3.1.3_1750408816775_0.9118239297575008","host":"s3://npm-registry-packages-npm-production"}},"3.2.0":{"name":"node-email-verifier","version":"3.2.0","keywords":["email validator","email validation","email verifier","email verification"],"author":{"url":"http://jesselpalmer.com/","name":"Jesse Palmer","email":"jesselpalmer@gmail.com"},"license":"MIT","_id":"node-email-verifier@3.2.0","maintainers":[{"name":"jesselpalmer","email":"jesselpalmer@gmail.com"}],"homepage":"https://github.com/jesselpalmer/node-email-verifier#readme","bugs":{"url":"https://github.com/jesselpalmer/node-email-verifier/issues"},"dist":{"shasum":"edf501afda9c184029825669bcbca5852932a7fe","tarball":"https://registry.npmjs.org/node-email-verifier/-/node-email-verifier-3.2.0.tgz","fileCount":18,"integrity":"sha512-hX07OjsgHy4DnYEeIRMDxJDewlrEAxu60PYFCtNbpZYowrBsBDHfeWJCMMF7aynbiaF9NGPCgFHpgwko6HSiog==","signatures":[{"sig":"MEUCIQD6dT6z+toeXqBpw1kwyZI/XOw99xiyhByLgJS2tuqPkwIgXbnKpRY0fWpW2D7df73Ku+E2BPuxzdIu3QPAC5q7ugU=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":119591},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=18.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.cjs"}},"gitHead":"d24d14de331d506d1afbf3ec2577c186af96ef43","scripts":{"lint":"eslint .","test":"npm run build && node --experimental-vm-modules ./node_modules/.bin/jest","build":"tsc && node scripts/build-cjs.js","check":"npm run lint:all && npm run format:check && npm run test","format":"prettier --write .","lint:md":"markdownlint-cli2","prepare":"husky install","lint:all":"npm run lint && npm run lint:md && npm run lint:yaml","lint:fix":"eslint . --fix","benchmark":"npm run build && node scripts/benchmark-disposable.js","lint:yaml":"node scripts/lint-yaml.js","precommit":"npm run lint:fix && npm run lint:md:fix && npm run format && npm run test","lint:md:fix":"markdownlint-cli2 --fix","format:check":"prettier --check .","benchmark:all":"npm run benchmark && npm run benchmark:init","test:coverage":"npm run build && node --experimental-vm-modules ./node_modules/.bin/jest --coverage","benchmark:init":"npm run build && node --expose-gc scripts/benchmark-initialization.js","test:integration":"npm run build && node test/integration/module-compatibility.test.cjs"},"_npmUser":{"name":"jesselpalmer","actor":{"name":"jesselpalmer","type":"user","email":"jesselpalmer@gmail.com"},"email":"jesselpalmer@gmail.com"},"repository":{"url":"git+https://github.com/jesselpalmer/node-email-verifier.git","type":"git"},"_npmVersion":"10.9.2","description":"A Node.js module for verifying email addresses","directories":{},"_nodeVersion":"22.16.0","dependencies":{"ms":"^2.1.3","validator":"^13.15.15"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^30.0.2","husky":"^9.1.7","eslint":"^9.29.0","ts-jest":"^29.4.0","prettier":"^3.5.3","@types/ms":"^2.1.0","yaml-lint":"^1.7.0","typescript":"^5.2.2","@types/jest":"^30.0.0","@types/node":"^24.0.3","lint-staged":"^16.1.2","markdownlint":"^0.38.0","@types/validator":"^13.15.1","markdownlint-cli2":"^0.18.1","typescript-eslint":"^8.34.0","eslint-config-prettier":"^10.1.5","eslint-plugin-prettier":"^5.4.1","@typescript-eslint/parser":"^8.34.0","@typescript-eslint/eslint-plugin":"^8.34.0"},"_npmOperationalInternal":{"tmp":"tmp/node-email-verifier_3.2.0_1750537524136_0.3234848354880939","host":"s3://npm-registry-packages-npm-production"}},"3.3.0":{"name":"node-email-verifier","version":"3.3.0","keywords":["email validator","email validation","email verifier","email verification"],"author":{"url":"http://jesselpalmer.com/","name":"Jesse Palmer","email":"jesselpalmer@gmail.com"},"license":"MIT","_id":"node-email-verifier@3.3.0","maintainers":[{"name":"jesselpalmer","email":"jesselpalmer@gmail.com"}],"homepage":"https://github.com/jesselpalmer/node-email-verifier#readme","bugs":{"url":"https://github.com/jesselpalmer/node-email-verifier/issues"},"dist":{"shasum":"6c4a298b316b797e0f06280e475acf234e6c2ce0","tarball":"https://registry.npmjs.org/node-email-verifier/-/node-email-verifier-3.3.0.tgz","fileCount":24,"integrity":"sha512-6Q/TPkN4kvLn6P1TvU8RDhJcVdR4MDd5Uqx8sZdTK75fEaDtzyD4GchV7g66C7SMkaH5HNF7SRjIkFFeRI2yJQ==","signatures":[{"sig":"MEQCIBO8dQk6bsdQbeC2VRD1BQjNU0DzHjPL0SRL6xGbFUUdAiAvZUGb6ERqgghT75WS6X9pYWugelshMy7p/Dcixkl12A==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":149177},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=18.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.cjs"}},"gitHead":"777afc3c67baa0d46c6b8d12b1b7d99ae780f9e3","scripts":{"lint":"eslint .","test":"npm run build && node --experimental-vm-modules ./node_modules/.bin/jest","build":"tsc && node scripts/build-cjs.js","check":"npm run lint:all && npm run format:check && npm run test","format":"prettier --write .","lint:md":"markdownlint-cli2","prepare":"husky install","lint:all":"npm run lint && npm run lint:md && npm run lint:yaml","lint:fix":"eslint . --fix","benchmark":"npm run build && node scripts/benchmark-disposable.js","lint:yaml":"node scripts/lint-yaml.js","precommit":"npm run lint:fix && npm run lint:md:fix && npm run format && npm run test","lint:md:fix":"markdownlint-cli2 --fix","format:check":"prettier --check .","benchmark:all":"npm run benchmark && npm run benchmark:init","test:coverage":"npm run build && node --experimental-vm-modules ./node_modules/.bin/jest --coverage","benchmark:init":"npm run build && node --expose-gc scripts/benchmark-initialization.js","test:integration":"npm run build && node test/integration/module-compatibility.test.cjs"},"_npmUser":{"name":"jesselpalmer","actor":{"name":"jesselpalmer","type":"user","email":"jesselpalmer@gmail.com"},"email":"jesselpalmer@gmail.com"},"repository":{"url":"git+https://github.com/jesselpalmer/node-email-verifier.git","type":"git"},"_npmVersion":"10.9.2","description":"A Node.js module for verifying email addresses","directories":{},"_nodeVersion":"22.16.0","dependencies":{"ms":"^2.1.3","validator":"^13.15.15"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^30.0.2","husky":"^9.1.7","eslint":"^9.29.0","ts-jest":"^29.4.0","prettier":"^3.5.3","@types/ms":"^2.1.0","yaml-lint":"^1.7.0","typescript":"^5.2.2","@types/jest":"^30.0.0","@types/node":"^24.0.3","lint-staged":"^16.1.2","markdownlint":"^0.38.0","@types/validator":"^13.15.1","markdownlint-cli2":"^0.18.1","typescript-eslint":"^8.34.0","eslint-config-prettier":"^10.1.5","eslint-plugin-prettier":"^5.4.1","@typescript-eslint/parser":"^8.34.0","@typescript-eslint/eslint-plugin":"^8.34.0"},"_npmOperationalInternal":{"tmp":"tmp/node-email-verifier_3.3.0_1750611731376_0.261487624175482","host":"s3://npm-registry-packages-npm-production"}},"3.4.0":{"name":"node-email-verifier","version":"3.4.0","keywords":["email validator","email validation","email verifier","email verification"],"author":{"url":"http://jesselpalmer.com/","name":"Jesse Palmer","email":"jesselpalmer@gmail.com"},"license":"MIT","_id":"node-email-verifier@3.4.0","maintainers":[{"name":"jesselpalmer","email":"jesselpalmer@gmail.com"}],"homepage":"https://github.com/jesselpalmer/node-email-verifier#readme","bugs":{"url":"https://github.com/jesselpalmer/node-email-verifier/issues"},"dist":{"shasum":"2ddc69449401012153e9b0c11e52796787a00a12","tarball":"https://registry.npmjs.org/node-email-verifier/-/node-email-verifier-3.4.0.tgz","fileCount":21,"integrity":"sha512-VWxgGbqL3Lm2oeRB2ML7UEryKsosxE5aZYeMJOFCMMvpLymXEXnHUMWkEOMNzvxN/BeTLlwYTxjBcJYoaT7/ug==","signatures":[{"sig":"MEYCIQDmlk/jIG/tZjp+Kb47A66xEIzdnFcuwgxrLaMgdcOmgAIhAOm/qLicy27H3hifhbAQcmoYbOGY/r0UMaFoFkKF5/9y","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":139488},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=18.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.cjs"}},"gitHead":"3e44ae9c4b64c0dac2bf5ceaf92d559d2037202d","scripts":{"lint":"eslint .","test":"npm run build && node --experimental-vm-modules ./node_modules/.bin/jest","build":"tsc && node scripts/build-cjs.js","check":"npm run lint:all && npm run format:check && npm run test","format":"prettier --write .","lint:md":"markdownlint-cli2","prepare":"husky install","lint:all":"npm run lint && npm run lint:md && npm run lint:yaml","lint:fix":"eslint . --fix","benchmark":"npm run build && node scripts/benchmark-disposable.js","lint:yaml":"node scripts/lint-yaml.js","precommit":"npm run lint:fix && npm run lint:md:fix && npm run format && npm run test","lint:md:fix":"markdownlint-cli2 --fix","format:check":"prettier --check .","benchmark:all":"npm run benchmark && npm run benchmark:init","test:coverage":"npm run build && node --experimental-vm-modules ./node_modules/.bin/jest --coverage","benchmark:init":"npm run build && node --expose-gc scripts/benchmark-initialization.js","test:integration":"npm run build && node test/integration/module-compatibility.test.cjs"},"_npmUser":{"name":"jesselpalmer","actor":{"name":"jesselpalmer","type":"user","email":"jesselpalmer@gmail.com"},"email":"jesselpalmer@gmail.com"},"deprecated":"This version is missing dist files. Please upgrade to 3.4.1 or later.","repository":{"url":"git+https://github.com/jesselpalmer/node-email-verifier.git","type":"git"},"_npmVersion":"10.9.2","description":"A Node.js module for verifying email addresses","directories":{},"_nodeVersion":"22.16.0","dependencies":{"ms":"^2.1.3","validator":"^13.15.15"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^30.0.2","husky":"^9.1.7","eslint":"^9.29.0","ts-jest":"^29.4.0","prettier":"^3.5.3","@types/ms":"^2.1.0","yaml-lint":"^1.7.0","typescript":"^5.2.2","@types/jest":"^30.0.0","@types/node":"^24.0.3","lint-staged":"^16.1.2","markdownlint":"^0.38.0","@types/validator":"^13.15.1","markdownlint-cli2":"^0.18.1","typescript-eslint":"^8.34.0","eslint-config-prettier":"^10.1.5","eslint-plugin-prettier":"^5.4.1","@typescript-eslint/parser":"^8.34.0","@typescript-eslint/eslint-plugin":"^8.34.0"},"_npmOperationalInternal":{"tmp":"tmp/node-email-verifier_3.4.0_1750744826730_0.38617082530532754","host":"s3://npm-registry-packages-npm-production"}},"3.4.1":{"name":"node-email-verifier","version":"3.4.1","keywords":["email validator","email validation","email verifier","email verification"],"author":{"url":"http://jesselpalmer.com/","name":"Jesse Palmer","email":"jesselpalmer@gmail.com"},"license":"MIT","_id":"node-email-verifier@3.4.1","maintainers":[{"name":"jesselpalmer","email":"jesselpalmer@gmail.com"}],"homepage":"https://github.com/jesselpalmer/node-email-verifier#readme","bugs":{"url":"https://github.com/jesselpalmer/node-email-verifier/issues"},"dist":{"shasum":"08d445a47af34e33332447489bc0360ce55f8019","tarball":"https://registry.npmjs.org/node-email-verifier/-/node-email-verifier-3.4.1.tgz","fileCount":16,"integrity":"sha512-69JMeWgEUrCji+dOLULirdSoosRxgAq2y+imfmHHBGvgTwyTKqvm65Ls3+W30DCIWMrYj5kKVb/DHTQDK7OVwQ==","signatures":[{"sig":"MEQCIH4B+v6bNArJn87CoCOF+yAWRPmMdG5LaSZS5lM/hb2VAiBQETynXIjlFmiSBKLbIZ74MM98YtLHPHsJdrpz4gSaTA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":95741},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=18.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.cjs"}},"gitHead":"9c4f58685283fe29a6a642a635f1e3416c09bb1b","scripts":{"lint":"eslint .","test":"npm run build && node --experimental-vm-modules ./node_modules/.bin/jest","build":"tsc && node scripts/build-cjs.js","check":"npm run lint:all && npm run format:check && npm run test","format":"prettier --write .","lint:md":"markdownlint-cli2","prepare":"husky install","lint:all":"npm run lint && npm run lint:md && npm run lint:yaml","lint:fix":"eslint . --fix","benchmark":"npm run build && node scripts/benchmark-disposable.js","lint:yaml":"node scripts/lint-yaml.js","precommit":"npm run lint:fix && npm run lint:md:fix && npm run format && npm run test","lint:md:fix":"markdownlint-cli2 --fix","format:check":"prettier --check .","benchmark:all":"npm run benchmark && npm run benchmark:init","check:package":"node scripts/check-npm-package.js","test:coverage":"npm run build && node --experimental-vm-modules ./node_modules/.bin/jest --coverage","benchmark:init":"npm run build && node --expose-gc scripts/benchmark-initialization.js","prepublishOnly":"npm run build && npm run check && npm run check:package && npm run test:package-install","test:integration":"npm run build && node test/integration/module-compatibility.test.cjs","test:package-install":"node scripts/test-package-install.js"},"_npmUser":{"name":"jesselpalmer","email":"jesselpalmer@gmail.com"},"repository":{"url":"git+https://github.com/jesselpalmer/node-email-verifier.git","type":"git"},"_npmVersion":"10.9.2","description":"A Node.js module for verifying email addresses","directories":{},"_nodeVersion":"22.16.0","dependencies":{"ms":"^2.1.3","validator":"^13.15.15"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^30.0.2","husky":"^9.1.7","eslint":"^9.29.0","ts-jest":"^29.4.0","prettier":"^3.5.3","@types/ms":"^2.1.0","yaml-lint":"^1.7.0","typescript":"^5.2.2","@types/jest":"^30.0.0","@types/node":"^24.0.3","lint-staged":"^16.1.2","markdownlint":"^0.38.0","@types/validator":"^13.15.1","markdownlint-cli2":"^0.18.1","typescript-eslint":"^8.34.0","eslint-config-prettier":"^10.1.5","eslint-plugin-prettier":"^5.4.1","@typescript-eslint/parser":"^8.34.0","@typescript-eslint/eslint-plugin":"^8.34.0"},"_npmOperationalInternal":{"tmp":"tmp/node-email-verifier_3.4.1_1752729942092_0.9774399632556732","host":"s3://npm-registry-packages-npm-production"}},"4.0.0":{"name":"node-email-verifier","version":"4.0.0","description":"A Node.js module for verifying email addresses","main":"./dist/index.js","types":"./dist/index.d.ts","exports":{".":{"import":"./dist/index.js","require":"./dist/index.cjs","types":"./dist/index.d.ts"}},"scripts":{"build":"tsc && node scripts/build-cjs.js","prepare":"husky install","prepublishOnly":"npm run build && npm run check && npm run check:package && npm run test:package-install","check:package":"node scripts/check-npm-package.js","test:package-install":"node scripts/test-package-install.js","test":"npm run build && node --experimental-vm-modules ./node_modules/.bin/jest","test:coverage":"npm run build && node --experimental-vm-modules ./node_modules/.bin/jest --coverage","test:integration":"npm run build && node test/integration/module-compatibility.test.cjs","lint":"eslint .","lint:fix":"eslint . --fix","lint:md":"markdownlint-cli2","lint:md:fix":"markdownlint-cli2 --fix","lint:yaml":"node scripts/lint-yaml.js","lint:all":"npm run lint && npm run lint:md && npm run lint:yaml","format":"prettier --write .","format:check":"prettier --check .","check":"npm run lint:all && npm run format:check && npm run test","precommit":"npm run lint:fix && npm run lint:md:fix && npm run format && npm run test","benchmark":"npm run build && node scripts/benchmark-disposable.js","benchmark:init":"npm run build && node --expose-gc scripts/benchmark-initialization.js","benchmark:all":"npm run benchmark && npm run benchmark:init"},"repository":{"type":"git","url":"git+https://github.com/jesselpalmer/node-email-verifier.git"},"engines":{"node":">=20.0.0"},"type":"module","keywords":["email validator","email validation","email verifier","email verification"],"author":{"name":"Jesse Palmer","email":"jesselpalmer@gmail.com","url":"http://jesselpalmer.com/"},"license":"MIT","bugs":{"url":"https://github.com/jesselpalmer/node-email-verifier/issues"},"homepage":"https://github.com/jesselpalmer/node-email-verifier#readme","devDependencies":{"@types/jest":"^30.0.0","@types/ms":"^2.1.0","@types/node":"^24.10.1","@types/validator":"^13.15.10","@typescript-eslint/eslint-plugin":"^8.47.0","@typescript-eslint/parser":"^8.47.0","eslint":"^9.39.1","eslint-config-prettier":"^10.1.8","eslint-plugin-prettier":"^5.5.4","husky":"^9.1.7","jest":"^30.2.0","lint-staged":"^16.2.7","markdownlint":"^0.39.0","markdownlint-cli2":"^0.19.1","prettier":"^3.6.2","ts-jest":"^29.4.5","typescript":"^5.9.3","typescript-eslint":"^8.47.0","yaml-lint":"^1.7.0"},"dependencies":{"ms":"^2.1.3","validator":"^13.15.20"},"_id":"node-email-verifier@4.0.0","gitHead":"090f299ece247ae867b1a68413754a957a2e89b2","_nodeVersion":"22.19.0","_npmVersion":"10.9.3","dist":{"integrity":"sha512-W3ktpVPscUx43WSTm1Vf797cMQMsGwp0JO08ksRaZG8A8wcRUd/XAihL78FwYl2rfABa1m1nIsBtqOMxY9uekA==","shasum":"4517bb757a4bc2eeb67cbfe024a3eee25b0565e2","tarball":"https://registry.npmjs.org/node-email-verifier/-/node-email-verifier-4.0.0.tgz","fileCount":16,"unpackedSize":96014,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCICdi4nJDDULxgxJrKlk40Z/xaXaGDwb+Osm9Uruc0CVuAiEAuS+hhWJgCkCFGbCa1TZRpWJMrq32CQoIdWzeLRYUWuE="}]},"_npmUser":{"name":"jesselpalmer","email":"jesselpalmer@gmail.com"},"directories":{},"maintainers":[{"name":"jesselpalmer","email":"jesselpalmer@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/node-email-verifier_4.0.0_1764565228986_0.4111213508301459"},"_hasShrinkwrap":false}},"time":{"created":"2023-11-12T01:46:32.517Z","modified":"2025-12-01T05:00:29.422Z","1.0.0":"2023-11-12T01:46:32.722Z","1.0.1":"2024-02-10T18:35:17.727Z","1.1.0":"2024-04-12T14:27:15.362Z","1.1.1":"2024-04-12T14:43:59.978Z","2.0.0":"2024-08-20T05:34:38.221Z","3.0.0":"2025-06-14T23:05:52.569Z","3.1.0":"2025-06-15T05:45:27.039Z","3.1.1":"2025-06-20T06:06:01.017Z","3.1.2":"2025-06-20T08:27:39.537Z","3.1.3":"2025-06-20T08:40:16.953Z","3.2.0":"2025-06-21T20:25:24.322Z","3.3.0":"2025-06-22T17:02:11.584Z","3.4.0":"2025-06-24T06:00:26.917Z","3.4.1":"2025-07-17T05:25:42.297Z","4.0.0":"2025-12-01T05:00:29.200Z"},"bugs":{"url":"https://github.com/jesselpalmer/node-email-verifier/issues"},"author":{"name":"Jesse Palmer","email":"jesselpalmer@gmail.com","url":"http://jesselpalmer.com/"},"license":"MIT","homepage":"https://github.com/jesselpalmer/node-email-verifier#readme","keywords":["email validator","email validation","email verifier","email verification"],"repository":{"type":"git","url":"git+https://github.com/jesselpalmer/node-email-verifier.git"},"description":"A Node.js module for verifying email addresses","maintainers":[{"name":"jesselpalmer","email":"jesselpalmer@gmail.com"}],"readme":"[![npm](https://img.shields.io/npm/dw/node-email-verifier.svg)](https://www.npmjs.com/package/node-email-verifier)\n[![Node.js CI](https://github.com/jesselpalmer/node-email-verifier/actions/workflows/nodejs-ci.yml/badge.svg)](https://github.com/jesselpalmer/node-email-verifier/actions/workflows/nodejs-ci.yml)\n[![TypeScript](https://img.shields.io/badge/TypeScript-5.0+-blue.svg)](https://www.typescriptlang.org/)\n[![Install Size](https://packagephobia.com/badge?p=node-email-verifier)](https://packagephobia.com/result?p=node-email-verifier)\n[![npm version](https://img.shields.io/npm/v/node-email-verifier.svg)](https://www.npmjs.com/package/node-email-verifier)\n[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)\n[![Sponsor](https://img.shields.io/badge/sponsor-%E2%9D%A4-pink)](https://github.com/sponsors/jesselpalmer)\n\n# Node Email Verifier\n\nNode Email Verifier is an email validation library for Node.js that checks if an email address has a\nvalid format and optionally verifies the domain's MX (Mail Exchange) records to ensure it can\nreceive emails. It also includes disposable email detection and detailed validation results.\n\n## 🚀 Hosted API Available\n\nHitting DNS rate limits? Need 99.9% uptime? Building a platform with user signups?\n\n**[ValidKit](https://validkit.com?utm_source=npm&utm_medium=readme&utm_campaign=node-email-verifier)**\nis the hosted version of this library:\n\n- ⚡ **<200ms P95** response times\n- 📊 **4,500+ disposable domains** detected (vs 600+ in OSS)\n- 🛡️ **Trusted for signup validation** on platforms handling transactions\n- 🔄 **No DNS infrastructure** to manage\n- 🎁 **1,000 free validations/month** (no credit card required)\n\n### Quick Start\n\n```bash\n# Get your free API key at validkit.com\n\ncurl -X POST https://api.validkit.com/api/v1/verify \\\n  -H \"Content-Type: application/json\" \\\n  -H \"X-API-Key: YOUR_API_KEY\" \\\n  -d '{\"email\": \"test@example.com\"}'\n```\n\n👉\n[Get your free API key](https://validkit.com/get-started?utm_source=npm&utm_medium=readme&utm_campaign=node-email-verifier)\n(takes 30 seconds, no credit card)\n\n### 💖 Sponsor This Project\n\n**node-email-verifier** serves **50,000+ weekly downloads** on npm and is actively maintained.\n\nIf you find it helpful or use it in production, consider sponsoring to support continued\ndevelopment, security updates, and new features.\n\n**[Sponsor on GitHub →](https://github.com/sponsors/jesselpalmer)**\n\n---\n\n## Features\n\n- **RFC 5322 Format Validation**: Validates email addresses against the standard email formatting\n  rules.\n- **MX Record Checking**: Verifies that the domain of the email address has valid MX records\n  indicating that it can receive emails. This check can be disabled using a parameter.\n- **Disposable Email Detection**: Identify and optionally block temporary/throwaway email services\n  like 10minutemail, guerrillamail, etc.\n- **Detailed Validation Results**: Get comprehensive validation information including specific\n  failure reasons and validation metadata.\n- **Customizable Timeout**: Allows setting a custom timeout for MX record checking.\n- **TypeScript Support**: Written in TypeScript with full type definitions for better developer\n  experience and IDE support.\n- **ES Modules**: Modern ESM support with backward compatibility.\n- **Zero Breaking Changes**: All new features are opt-in and maintain full backward compatibility.\n- **MX Record Caching**: Built-in TTL-based caching with LRU eviction for improved performance in\n  high-volume scenarios.\n\n## Requirements\n\n- **Node.js**: Version 20.0.0 or higher\n\n## Installation\n\nInstall the package using npm:\n\n```bash\nnpm install node-email-verifier --save\n```\n\n## Usage\n\nThis package supports both ES modules and CommonJS:\n\n```javascript\n// ES Modules (recommended)\nimport emailValidator from 'node-email-verifier';\n\n// CommonJS\nconst emailValidator = require('node-email-verifier');\n```\n\nNote: When using CommonJS `require()`, the function returns a promise that resolves with the\nvalidation result.\n\n```javascript\n// CommonJS usage example\nconst emailValidator = require('node-email-verifier');\n\n// Since emailValidator returns a promise, handle it with async/await:\n(async () => {\n  const isValid = await emailValidator('test@example.com');\n  console.log('Email is valid:', isValid);\n})();\n\n// Or with .then():\nemailValidator('test@example.com')\n  .then((isValid) => console.log('Email is valid:', isValid))\n  .catch((error) => console.error('Validation error:', error));\n```\n\nHere's how to use Node Email Verifier in both JavaScript and TypeScript:\n\n### JavaScript\n\n#### ES Modules\n\n```javascript\nimport emailValidator from 'node-email-verifier';\n\n// Basic validation (format + MX checking)\nasync function validateEmail(email) {\n  try {\n    const isValid = await emailValidator(email);\n    console.log(`Is \"${email}\" valid?`, isValid);\n  } catch (error) {\n    console.error('Validation error:', error);\n  }\n}\n```\n\n#### CommonJS\n\n```javascript\nconst emailValidator = require('node-email-verifier');\n\n// Basic validation (format + MX checking)\nasync function validateEmail(email) {\n  try {\n    const isValid = await emailValidator(email);\n    console.log(`Is \"${email}\" valid?`, isValid);\n  } catch (error) {\n    console.error('Validation error:', error);\n  }\n}\n\n// Disposable email detection\nasync function validateWithDisposableCheck(email) {\n  try {\n    const isValid = await emailValidator(email, {\n      checkDisposable: true,\n    });\n    console.log(`Is \"${email}\" valid (blocking disposable)?`, isValid);\n  } catch (error) {\n    console.error('Validation error:', error);\n  }\n}\n\n// Detailed validation results\nasync function getDetailedValidation(email) {\n  try {\n    const result = await emailValidator(email, {\n      detailed: true,\n      checkDisposable: true,\n    });\n    console.log('Detailed validation result:', result);\n    /*\n    Example output:\n    {\n      valid: false,\n      email: 'test@10minutemail.com',\n      format: { valid: true },\n      mx: { valid: true, records: [...] },\n      disposable: { \n        valid: false, \n        provider: '10minutemail.com',\n        reason: 'Email from disposable provider'\n      }\n    }\n    */\n  } catch (error) {\n    console.error('Validation error:', error);\n  }\n}\n\n// Custom timeout and advanced options\nasync function validateWithCustomOptions(email) {\n  try {\n    const isValid = await emailValidator(email, {\n      checkMx: true,\n      checkDisposable: true,\n      timeout: '500ms', // or timeout: 500 for milliseconds\n    });\n    console.log(`Is \"${email}\" valid with all checks?`, isValid);\n  } catch (error) {\n    if (error.message === 'DNS lookup timed out') {\n      console.error('Timeout on DNS lookup.');\n    } else {\n      console.error('Validation error:', error);\n    }\n  }\n}\n\n// Format-only validation (fastest)\nasync function validateFormatOnly(email) {\n  try {\n    const isValid = await emailValidator(email, { checkMx: false });\n    console.log(`Is \"${email}\" format valid?`, isValid);\n  } catch (error) {\n    console.error('Validation error:', error);\n  }\n}\n\n// Usage examples\nvalidateEmail('test@example.com');\nvalidateWithDisposableCheck('test@10minutemail.com'); // → false\ngetDetailedValidation('invalid-email'); // → detailed error info\nvalidateFormatOnly('test@example.com'); // → true (no MX check)\n```\n\n### TypeScript\n\n#### ES Modules\n\n```typescript\nimport emailValidator, {\n  EmailValidatorOptions,\n  ValidationResult,\n  ErrorCode,\n} from 'node-email-verifier';\nimport { isEmailValidationError } from 'node-email-verifier';\n\n// Basic validation with typed options\nasync function validateEmailTyped(email: string): Promise<boolean> {\n  const options: EmailValidatorOptions = {\n    checkMx: true,\n    checkDisposable: true,\n    timeout: 5000,\n  };\n\n  try {\n    const isValid = await emailValidator(email, options);\n    console.log(`Is \"${email}\" valid?`, isValid);\n    return isValid;\n  } catch (error) {\n    console.error('Validation error:', error);\n    return false;\n  }\n}\n\n// Detailed validation with typed results\nasync function getDetailedValidationTyped(email: string): Promise<ValidationResult> {\n  const result = await emailValidator(email, {\n    detailed: true,\n    checkMx: true,\n    checkDisposable: true,\n  });\n\n  // TypeScript infers this is ValidationResult when detailed: true\n  if (!result.valid) {\n    console.log('Validation failed:');\n\n    if (!result.format.valid) {\n      console.log('- Format issue:', result.format.reason);\n    }\n\n    if (result.disposable && !result.disposable.valid) {\n      console.log('- Disposable email from:', result.disposable.provider);\n    }\n\n    if (result.mx && !result.mx.valid) {\n      console.log('- MX issue:', result.mx.reason);\n    }\n  }\n\n  return result;\n}\n\n// Error handling with error codes\nasync function handleValidationErrors(email: string): Promise<void> {\n  try {\n    const result = await emailValidator(email, {\n      detailed: true,\n      checkMx: true,\n      checkDisposable: true,\n      timeout: 5000,\n    });\n\n    // TypeScript infers this is ValidationResult when detailed: true\n    if (!result.valid && result.errorCode === ErrorCode.INVALID_EMAIL_FORMAT) {\n      throw new Error('Please enter a valid email address');\n    }\n\n    if (result.disposable?.errorCode === ErrorCode.DISPOSABLE_EMAIL) {\n      throw new Error('Disposable email addresses are not allowed');\n    }\n  } catch (error) {\n    if (isEmailValidationError(error) && error.code === ErrorCode.DNS_LOOKUP_TIMEOUT) {\n      throw new Error('Email verification timed out. Please try again.');\n    }\n    throw error;\n  }\n}\n\n// Type-safe inline validation\nasync function quickValidation(email: string): Promise<boolean> {\n  const result = await emailValidator(email, {\n    checkMx: false,\n    checkDisposable: true, // Block disposable emails\n    timeout: 2000,\n  });\n  // TypeScript infers this is boolean when detailed is false/undefined\n  return result;\n}\n\n// Create specialized validators\nfunction createValidator(options: EmailValidatorOptions) {\n  return (email: string) => emailValidator(email, options);\n}\n\nconst fastValidator = createValidator({\n  checkMx: false,\n  checkDisposable: false,\n});\n\nconst businessValidator = createValidator({\n  checkMx: true,\n  checkDisposable: true,\n  timeout: 10000,\n});\n\nconst detailedValidator = createValidator({\n  detailed: true,\n  checkMx: true,\n  checkDisposable: true,\n});\n```\n\n#### CommonJS\n\nWhen using CommonJS with TypeScript, you can still get full type support:\n\n```typescript\n// For CommonJS projects, use require with type imports\nimport type { EmailValidatorOptions, ValidationResult } from 'node-email-verifier';\n\nconst emailValidator = require('node-email-verifier');\n\n// Basic validation with typed options\nasync function validateEmailCJS(email: string): Promise<boolean> {\n  const options: EmailValidatorOptions = {\n    checkMx: true,\n    checkDisposable: true,\n    timeout: 5000,\n  };\n\n  try {\n    const isValid = await emailValidator(email, options);\n    console.log(`Is \"${email}\" valid?`, isValid);\n    return isValid;\n  } catch (error) {\n    console.error('Validation error:', error);\n    return false;\n  }\n}\n\n// Detailed validation with typed results\nasync function getDetailedValidationCJS(email: string): Promise<ValidationResult> {\n  const result = await emailValidator(email, {\n    detailed: true,\n    checkMx: true,\n    checkDisposable: true,\n  });\n\n  // TypeScript infers this is ValidationResult when detailed: true\n  if (!result.valid) {\n    console.log('Validation failed:');\n\n    if (!result.format.valid) {\n      console.log('- Format issue:', result.format.reason);\n    }\n\n    if (result.disposable && !result.disposable.valid) {\n      console.log('- Disposable email from:', result.disposable.provider);\n    }\n\n    if (result.mx && !result.mx.valid) {\n      console.log('- MX issue:', result.mx.reason);\n    }\n  }\n\n  return result;\n}\n\n// Alternative: Use dynamic import in CommonJS for full type inference\nasync function validateWithDynamicImport(email: string): Promise<boolean> {\n  const { default: emailValidator } = await import('node-email-verifier');\n\n  return emailValidator(email, {\n    checkMx: true,\n    checkDisposable: true,\n  });\n}\n```\n\n## Examples\n\nFor more comprehensive examples, check out the [examples directory](./examples/):\n\n- **[Basic Validation](./examples/basic-validation.js)** - Simple email validation patterns\n- **[TypeScript Usage](./examples/typescript-usage.ts)** - Full TypeScript integration with types\n- **[Bulk Validation](./examples/bulk-validation.js)** - Validating multiple emails efficiently\n- **[Error Handling](./examples/error-handling.js)** - Using error codes and custom error handling\n- **[CommonJS Usage](./examples/commonjs-usage.cjs)** - Legacy Node.js and CommonJS patterns\n- **[Debug Mode](./examples/debug-mode.js)** - AI debug mode with structured logging (v3.3.0+)\n\nRun any example:\n\n```bash\nnode examples/basic-validation.js\n```\n\n## New Features (v3.1.0)\n\n### Disposable Email Detection\n\nBlock temporary and throwaway email services to improve data quality:\n\n```javascript\n// Block disposable emails\nconst isValid = await emailValidator('test@10minutemail.com', {\n  checkDisposable: true,\n}); // → false\n\n// Allow disposable emails (default behavior)\nconst isValid = await emailValidator('test@10minutemail.com', {\n  checkDisposable: false,\n}); // → true (if format and MX are valid)\n```\n\n**Supported disposable providers**: 600+ domains including 10minutemail, guerrillamail, yopmail,\ntempmail, mailinator, and many more.\n\n### Detailed Validation Results\n\nGet comprehensive validation information with specific failure reasons:\n\n```javascript\n// Get detailed validation results\nconst result = await emailValidator('test@10minutemail.com', {\n  detailed: true,\n  checkMx: true,\n  checkDisposable: true,\n});\n\nconsole.log(result);\n/*\nOutput:\n{\n  \"valid\": false,\n  \"email\": \"test@10minutemail.com\",\n  \"format\": { \"valid\": true },\n  \"mx\": { \n    \"valid\": true, \n    \"records\": [{\"exchange\": \"mx.10minutemail.com\", \"priority\": 10}] \n  },\n  \"disposable\": { \n    \"valid\": false, \n    \"provider\": \"10minutemail.com\",\n    \"reason\": \"Email from disposable provider\",\n    \"errorCode\": \"DISPOSABLE_EMAIL\" \n  }\n}\n*/\n\n// Handle validation results\nif (!result.valid) {\n  if (!result.format.valid) {\n    console.log('Invalid email format:', result.format.reason);\n  }\n\n  if (result.disposable && !result.disposable.valid) {\n    console.log('Disposable email detected:', result.disposable.provider);\n  }\n\n  if (result.mx && !result.mx.valid) {\n    console.log('MX validation failed:', result.mx.reason);\n  }\n}\n```\n\n### Error Codes (v3.2.0+)\n\nDetailed validation results now include error codes for programmatic error handling:\n\n```javascript\nconst result = await emailValidator('invalid-email', {\n  detailed: true,\n  checkMx: true,\n  checkDisposable: true,\n});\n\n// Check specific error codes\nif (!result.valid) {\n  if (result.errorCode) {\n    console.log('Top-level error:', result.errorCode);\n  }\n\n  switch (result.format.errorCode) {\n    case ErrorCode.EMAIL_MUST_BE_STRING:\n      console.log('Email must be a string');\n      break;\n    case ErrorCode.EMAIL_CANNOT_BE_EMPTY:\n      console.log('Email cannot be empty');\n      break;\n    case ErrorCode.INVALID_EMAIL_FORMAT:\n      console.log('Invalid email format');\n      break;\n  }\n\n  if (result.mx?.errorCode) {\n    switch (result.mx.errorCode) {\n      case ErrorCode.NO_MX_RECORDS:\n        console.log('No mail server found');\n        break;\n      case ErrorCode.DNS_LOOKUP_FAILED:\n        console.log('DNS lookup error');\n        break;\n      case ErrorCode.DNS_LOOKUP_TIMEOUT:\n        console.log('DNS lookup timed out');\n        break;\n      case ErrorCode.MX_SKIPPED_DISPOSABLE:\n        console.log('MX check skipped due to disposable email');\n        break;\n    }\n  }\n\n  if (result.disposable?.errorCode === ErrorCode.DISPOSABLE_EMAIL) {\n    console.log('Disposable email detected');\n  }\n}\n```\n\n```javascript\n// Handle thrown errors\nimport emailValidator, { ErrorCode } from 'node-email-verifier';\n\ntry {\n  await emailValidator('test@example.com', { timeout: -1 });\n} catch (error) {\n  if (error.code === ErrorCode.INVALID_TIMEOUT_VALUE) {\n    console.log('Invalid timeout configuration');\n  }\n}\n```\n\n**Available Error Codes:**\n\n- `EMAIL_MUST_BE_STRING` - Email is not a string\n- `EMAIL_CANNOT_BE_EMPTY` - Email string is empty\n- `INVALID_EMAIL_FORMAT` - Email format is invalid\n- `NO_MX_RECORDS` - No MX records found for domain\n- `DNS_LOOKUP_FAILED` - DNS lookup encountered an error\n- `DNS_LOOKUP_TIMEOUT` - DNS lookup timed out\n- `MX_SKIPPED_DISPOSABLE` - MX check was skipped because email is disposable\n- `MX_LOOKUP_FAILED` - MX record lookup failed for unknown reason\n- `DISPOSABLE_EMAIL` - Email is from a disposable provider\n- `INVALID_TIMEOUT_VALUE` - Invalid timeout parameter\n- `UNKNOWN_ERROR` - An unknown error occurred\n\n### AI Debug Mode (v3.3.0+)\n\nEnable structured logging for debugging and observability:\n\n```javascript\nconst result = await emailValidator('test@example.com', {\n  debug: true, // Enable debug mode\n  checkMx: true,\n  checkDisposable: true,\n  detailed: true,\n});\n\n// Debug logs are written to console.log as JSON:\n// {\n//   \"type\": \"email-validator-debug\",\n//   \"timestamp\": \"2025-06-22T10:30:45.123Z\",\n//   \"phase\": \"mx_record_check\",\n//   \"email\": \"test@example.com\",\n//   \"data\": { \"domain\": \"example.com\", \"timeoutMs\": 10000 },\n//   \"timing\": { \"start\": 123.45 },\n//   \"memory\": { \"heapUsed\": 12345678, \"heapTotal\": 23456789, \"rss\": 34567890 }\n// }\n```\n\n**Debug Mode Features:**\n\n- **Structured JSON logs**: MCP-compatible format for AI tooling\n- **Timing information**: Track duration of each validation phase\n- **Memory usage**: Monitor heap and RSS memory for each operation\n- **Error tracking**: Detailed error logs with stack traces\n- **Phase tracking**: See the flow through format check, disposable check, and MX validation\n\n#### Example: Production Debug Wrapper\n\n```javascript\n// Intercept debug logs for analysis\nconst debugLogs = [];\nconst originalLog = console.log;\nconsole.log = (message) => {\n  try {\n    const parsed = JSON.parse(message);\n    if (parsed.type === 'email-validator-debug') {\n      debugLogs.push(parsed);\n    }\n  } catch (e) {\n    originalLog(message);\n  }\n};\n\n// Run validation\nconst result = await emailValidator(email, { debug: true });\n\n// Restore console.log and analyze\nconsole.log = originalLog;\nconsole.log(`Validation took ${debugLogs.length} steps`);\n```\n\nSee the [debug mode example](./examples/debug-mode.js) for more advanced usage patterns.\n\n### MX Record Caching (v3.4.0+)\n\nImprove performance for high-volume email validation with built-in MX record caching:\n\n```javascript\n// Basic usage - caching is enabled by default\nconst isValid = await emailValidator('test@example.com', {\n  checkMx: true,\n});\n\n// Configure cache settings\nconst result = await emailValidator('test@example.com', {\n  checkMx: true,\n  detailed: true,\n  cache: {\n    enabled: true, // Enable caching (default: true)\n    defaultTtl: 600000, // 10 minutes TTL (default: 5 minutes)\n    maxSize: 5000, // Store up to 5000 domains (default: 1000)\n  },\n});\n\n// Cache statistics in detailed results\nconsole.log(result.cacheStats);\n// {\n//   hits: 42,           // Number of cache hits\n//   misses: 8,          // Number of cache misses\n//   size: 50,           // Current cache size\n//   evictions: 0,       // Number of evicted entries\n//   hitRate: 84.00      // Cache hit rate percentage\n// }\n\n// Check if result was served from cache\nif (result.mx?.cached) {\n  console.log('MX records were served from cache');\n}\n```\n\n**Cache Management:**\n\n```javascript\nimport { globalMxCache } from 'node-email-verifier';\n\n// Clear entire cache\nglobalMxCache.flush();\n\n// Clear specific domain\nglobalMxCache.delete('example.com');\n\n// Get cache statistics\nconst stats = globalMxCache.getStatistics();\nconsole.log(`Cache hit rate: ${stats.hitRate}%`);\n\n// Reset statistics (keeps cached data)\nglobalMxCache.resetStatistics();\n```\n\n**Performance Benefits:**\n\n- **Dramatic Performance Improvement**: Real-world benchmarks show significant speedup over no\n  caching\n  - **7.7x faster** with realistic DNS latency (25ms per lookup)\n  - **87%+ cache hit rate** in typical usage patterns with mixed domain popularity\n  - **872 DNS lookups avoided** out of 1000 requests (87.2% reduction)\n- **LRU Eviction Strategy**: Intelligent cache management that keeps frequently accessed domains in\n  memory longer than less popular ones\n- **Bulk Validation**: Eliminates redundant DNS lookups for repeated domains\n  - Each DNS lookup typically takes 50-200ms depending on network conditions\n  - **65+ seconds saved** in real DNS lookup time per 1000 validations\n  - Performance improvement scales with network latency\n- **Rate Limiting**: Reduces DNS queries to external servers\n- **Memory Efficient**: LRU eviction with automatic cleanup of expired entries\n- **TTL Respect**: Honors DNS TTL semantics\n\n### Combining Features\n\n```javascript\n// Use all features together\nconst result = await emailValidator(email, {\n  checkMx: true, // Verify MX records\n  checkDisposable: true, // Block disposable emails\n  detailed: true, // Get detailed results\n  timeout: '5s', // Custom timeout\n  debug: true, // Enable debug logging\n});\n\n// Business-friendly validation\nconst isBusinessEmail = await emailValidator(email, {\n  checkMx: true,\n  checkDisposable: true, // Block temporary emails\n  timeout: '10s',\n}); // Returns boolean for simple usage\n```\n\n## Package Configuration\n\nThis package supports both ES modules and CommonJS through the `exports` field in `package.json`.\nKey configuration details:\n\n- **`\"type\": \"module\"`**: Designates this as an ES module package\n- **`\"main\"`**: Points to `./dist/index.js` for legacy compatibility\n- **`\"types\"`**: TypeScript definitions at `./dist/index.d.ts` for both module systems\n- **`\"exports\"`**: Modern Node.js module resolution with conditional exports:\n  - `\"import\"`: ES module entry point (`./dist/index.js`)\n  - `\"require\"`: CommonJS entry point (`./dist/index.cjs`)\n  - `\"types\"`: Shared TypeScript definitions (`./dist/index.d.ts`)\n- **Node Version**: Requires Node.js 20.0.0 or higher\n- **Build Process**: TypeScript compilation + automatic CommonJS wrapper generation\n\nFor the complete configuration, see the [package.json](./package.json) file.\n\nThis configuration ensures the package works correctly with:\n\n- `import emailValidator from 'node-email-verifier'` (ES modules)\n- `const emailValidator = require('node-email-verifier')` (CommonJS)\n- TypeScript projects using either module system\n- Bundlers like webpack, Rollup, and Vite\n- Modern Node.js versions (20+) with proper module resolution\n\n## API\n\n### `emailValidator(email, [opts]): Promise<boolean | ValidationResult>`\n\nValidates the given email address with comprehensive validation options including format checking,\nMX record verification, disposable email detection, and detailed results.\n\n#### Handling Return Types\n\n```js\n// Type-safe handling of both return types\nasync function handleValidation(email) {\n  const result = await emailValidator(email, {\n    checkDisposable: true,\n    detailed: true, // This determines the return type\n  });\n\n  // When detailed: true, result is ValidationResult\n  if (typeof result === 'object') {\n    console.log('Detailed validation:');\n    console.log('Valid:', result.valid);\n\n    if (!result.valid) {\n      if (!result.format.valid) {\n        console.log('Format error:', result.format.reason);\n      }\n\n      if (result.disposable && !result.disposable.valid) {\n        console.log('Disposable provider:', result.disposable.provider);\n      }\n    }\n\n    return result.valid;\n  }\n\n  // When detailed: false (default), result is boolean\n  console.log('Simple validation:', result);\n  return result;\n}\n\n// TypeScript automatically infers the correct type based on options\nconst detailedResult = await emailValidator(email, { detailed: true }); // ValidationResult\nconst booleanResult = await emailValidator(email, { detailed: false }); // boolean\n```\n\n#### Parameters\n\n- **`email`** (`unknown`): The email address to validate. Can be any type, but only strings will be\n  considered valid.\n- **`opts`** (`EmailValidatorOptions | boolean`, optional): Configuration options or a boolean for\n  backward compatibility.\n\n#### Options (`EmailValidatorOptions`)\n\n```typescript\ninterface EmailValidatorOptions {\n  checkMx?: boolean; // Whether to check for MX records (default: true)\n  checkDisposable?: boolean; // Whether to check for disposable emails (default: false)\n  detailed?: boolean; // Return detailed validation results (default: false)\n  timeout?: string | number; // Timeout for DNS lookup (default: '10s')\n  debug?: boolean; // Enable debug mode with structured logging (default: false)\n  cache?: MxCacheOptions; // MX record caching configuration (default: enabled)\n}\n\n// See \"Type Definitions\" section below for ValidationResult interface\n```\n\n- **`checkMx`** (`boolean`, optional): Whether to check for MX records. Defaults to `true`.\n- **`checkDisposable`** (`boolean`, optional): Whether to check for disposable email providers.\n  Defaults to `false`.\n- **`detailed`** (`boolean`, optional): Return detailed validation results instead of boolean.\n  Defaults to `false`.\n- **`timeout`** (`string | number`, optional): The timeout for the DNS MX lookup. Can be:\n  - A number in milliseconds (e.g., `5000`)\n  - A string in ms format (e.g., `'5s'`, `'2000ms'`, `'1m'`)\n  - Defaults to `'10s'` (10 seconds)\n- **`debug`** (`boolean`, optional): Enable debug mode for structured logging. When true, logs\n  detailed timing and memory usage information to console.log as JSON. Defaults to `false`.\n- **`cache`** (`MxCacheOptions`, optional): Configure MX record caching behavior. Caching is enabled\n  by default with a 5-minute TTL. Options:\n  - `enabled` (`boolean`): Enable/disable caching. Default: `true`\n  - `defaultTtl` (`number`): TTL in milliseconds. Default: `300000` (5 minutes)\n  - `maxSize` (`number`): Maximum cache entries. Default: `1000`\n\n#### Backward Compatibility\n\nFor backward compatibility, you can also pass a boolean as the second parameter:\n\n- `true`: Enable MX checking (equivalent to `{ checkMx: true }`)\n- `false`: Disable MX checking (equivalent to `{ checkMx: false }`)\n\n#### Returns\n\n**`Promise<boolean | ValidationResult>`**: A promise that resolves to:\n\n- `boolean` (when `detailed: false` or not specified):\n  - `true` if the email address passes all enabled validations\n  - `false` if the email address fails any enabled validation\n- `ValidationResult` (when `detailed: true`):\n  - Comprehensive validation information including specific failure reasons\n  - Always includes `format` validation results\n  - Includes `mx` results only when `checkMx: true`\n  - Includes `disposable` results only when `checkDisposable: true`\n\n#### Throws\n\n- **`Error`**: When DNS lookup times out, the error message will be \"DNS lookup timed out\"\n\n## TypeScript Benefits\n\nThis library is written in TypeScript and provides several benefits for TypeScript users:\n\n- **Type Safety**: Full type checking for all parameters and return values\n- **IntelliSense**: Rich autocomplete and documentation in your IDE\n- **Interface Exports**: Import and use the `EmailValidatorOptions` interface in your own code\n- **Compile-time Error Detection**: Catch mistakes before runtime\n\n### Type Definitions\n\nThe library exports the following types:\n\n```typescript\n// Import the types and utilities from the library\n// Types are imported separately from runtime values for clarity\nimport type {\n  ErrorCode,\n  MxRecord,\n  ValidationResult,\n  EmailValidatorOptions,\n  CacheStatistics,\n  MxCacheOptions,\n} from 'node-email-verifier';\nimport { EmailValidationError, isEmailValidationError } from 'node-email-verifier';\n\n// Main function type\ndeclare function emailValidator(\n  email: unknown,\n  opts?: EmailValidatorOptions | boolean\n): Promise<boolean | ValidationResult>;\n\n// Options interface\nexport interface EmailValidatorOptions {\n  checkMx?: boolean;\n  checkDisposable?: boolean;\n  detailed?: boolean;\n  timeout?: string | number;\n  debug?: boolean;\n  cache?: MxCacheOptions;\n}\n\n// MX cache configuration\nexport interface MxCacheOptions {\n  enabled?: boolean;\n  defaultTtl?: number;\n  maxSize?: number;\n}\n\n// Cache statistics\nexport interface CacheStatistics {\n  hits: number;\n  misses: number;\n  size: number;\n  evictions: number;\n  hitRate: number;\n}\n\n// MX record type\nexport interface MxRecord {\n  exchange: string;\n  priority: number;\n}\n\n// Validation result interface\nexport interface ValidationResult {\n  valid: boolean;\n  email: string;\n  errorCode?: ErrorCode; // Top-level error code for quick access\n  format: {\n    valid: boolean;\n    reason?: string;\n    errorCode?: ErrorCode;\n  };\n  mx?: {\n    valid: boolean;\n    records?: MxRecord[];\n    reason?: string;\n    errorCode?: ErrorCode;\n    cached?: boolean; // Whether result was from cache\n  };\n  disposable?: {\n    valid: boolean;\n    provider?: string | null;\n    reason?: string;\n    errorCode?: ErrorCode;\n  };\n  cacheStats?: CacheStatistics; // Cache statistics when cache is enabled\n}\n\n// Error handling types\nexport class EmailValidationError extends Error {\n  code: ErrorCode;\n  constructor(code: ErrorCode, message?: string);\n}\n\n// Type guard for error handling\nexport function isEmailValidationError(error: unknown): error is EmailValidationError;\n```\n\n## Production Usage\n\nWhen using this library in production environments, especially with MX record checking enabled, it's\nimportant to consider DNS rate limiting. For detailed guidance on:\n\n- Implementing request throttling\n- Adding retry logic with exponential backoff\n- Caching MX records\n- Monitoring DNS failures\n\nSee our [API Best Practices Guide](docs/API_BEST_PRACTICES.md).\n\n## Development\n\n### Available Scripts\n\n- **`npm run build`** - Compile TypeScript to JavaScript\n- **`npm run test`** - Run the test suite\n- **`npm run lint`** - Check JavaScript/TypeScript code for linting issues\n- **`npm run lint:fix`** - Automatically fix JavaScript/TypeScript linting issues\n- **`npm run lint:md`** - Check Markdown files for linting issues\n- **`npm run lint:md:fix`** - Automatically fix Markdown linting issues\n- **`npm run lint:yaml`** - Check YAML files for validity\n- **`npm run lint:all`** - Run all linters (JS/TS, Markdown, YAML)\n- **`npm run format`** - Format code with Prettier\n- **`npm run format:check`** - Check if code is properly formatted\n- **`npm run check`** - Run all linting, formatting, and tests\n- **`npm run precommit`** - Fix linting, format code, and run tests\n- **`npm run benchmark`** - Run performance benchmarks for disposable domain lookups\n- **`npm run benchmark:init`** - Run initialization and memory usage benchmarks\n- **`npm run benchmark:all`** - Run all benchmarks\n\n### Code Quality\n\nThis project uses:\n\n- **ESLint** for JavaScript/TypeScript linting\n- **Markdownlint** for Markdown file linting\n- **yaml-lint** for YAML file validation\n- **Prettier** for code formatting (JS/TS, JSON, Markdown, YAML)\n- **Jest** for testing with TypeScript integration\n\nBefore committing, run `npm run precommit` to ensure code quality.\n\n### Git Hooks\n\nThis project uses [husky](https://typicode.github.io/husky/) and\n[lint-staged](https://github.com/okonet/lint-staged) to maintain code quality:\n\n- **Pre-commit**: Automatically fixes linting issues and formats staged files\n- **Pre-push**: Runs the full test suite to prevent pushing broken code\n\nThese hooks are installed automatically when you run `npm install`.\n\n## Project Structure\n\n```text\nnode-email-verifier/\n├── src/              # Source TypeScript files\n├── dist/             # Built JavaScript files and CommonJS wrapper\n├── test/             # Test files (unit and integration tests)\n├── scripts/          # Build scripts and performance benchmarks\n├── docs/             # Additional documentation\n│   ├── AI_WORKFLOW.md                    # AI-assisted PR workflow guide\n│   ├── API_BEST_PRACTICES.md            # Rate limiting and production usage\n│   ├── ESM_COMMONJS_COMPATIBILITY.md    # Module compatibility guide\n│   ├── INTEGRATION_TESTING.md           # Integration testing guide\n│   └── PERFORMANCE.md                   # Performance benchmarks and analysis\n└── examples/         # (Coming soon) Example usage scripts\n```\n\n## Roadmap\n\nCheck out our [Feature Enhancement Roadmap](FEATURE_ENHANCEMENTS.md) to see what's coming next and\nwhat we're working on. We welcome feedback and contributions on these planned features!\n\n## Contributing\n\nContributions are always welcome! Please see our [Contributing Guide](CONTRIBUTING.md) for detailed\ninformation about:\n\n- Development setup\n- Code quality standards\n- Available npm scripts\n- Testing guidelines\n- Commit message format\n\nQuick start:\n\n```bash\nnpm install\nnpm run check  # Run all quality checks\n```\n\nFeel free to submit a PR!\n\n## Support This Project\n\nIf you find Node Email Verifier useful, please consider supporting its development:\n\n- **[GitHub Sponsors](https://github.com/sponsors/jesselpalmer)**\n- **[Buy Me a Coffee](https://www.buymeacoffee.com/jesselpalmer)**\n\nYour support helps maintain this project and fund new features. Thank you! 💖\n\n## License\n\nThis project is licensed under the MIT License.\n","readmeFilename":"README.md"}