{"_id":"@bernierllc/smtp-analyzer","_rev":"8-49f0c3ebe6e36ffe89c09deb86b2c567","name":"@bernierllc/smtp-analyzer","dist-tags":{"latest":"0.6.0"},"versions":{"0.1.2":{"name":"@bernierllc/smtp-analyzer","version":"0.1.2","keywords":["smtp","email","headers","authentication","spf","dkim","dmarc","arc","delivery","analysis","parser","bernierllc"],"author":{"name":"Bernier LLC"},"license":"PROPRIETARY","_id":"@bernierllc/smtp-analyzer@0.1.2","maintainers":[{"name":"alikhan410","email":"mczeyo@gmail.com"},{"name":"mkbernier","email":"mkbernier@gmail.com"}],"homepage":"https://github.com/BernierLLC/tools#readme","bugs":{"url":"https://github.com/BernierLLC/tools/issues"},"dist":{"shasum":"a009c25686267917982e622a59ea5597f3673c48","tarball":"https://registry.npmjs.org/@bernierllc/smtp-analyzer/-/smtp-analyzer-0.1.2.tgz","fileCount":24,"integrity":"sha512-7Bk1MKbRflzlmTpPfiCRHCuxRBGKgFxnUldxqyo5gUCn5MEzJ+ajry6F0nVk8G0ejx1Z4xWnx7eB1eWe/4+aKw==","signatures":[{"sig":"MEUCIQDFHdjQNqvEDSHKc09oWaGpIV13MG73I6Yx2Ny+uZKJPgIgIVf1fhfFtoEK9tC/VGJB/WoIfu4CkzM++a1Z0FcMtwQ=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":70434},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","engines":{"node":">=18.0.0"},"gitHead":"fed1f79cc94d136897c3d920955f46f0ae78b9d7","scripts":{"lint":"eslint src --ext .ts","test":"jest","build":"tsc","clean":"rm -rf dist","prebuild":"npm run clean","test:watch":"jest --watch","test:coverage":"jest --coverage"},"_npmUser":{"name":"mkbernier","email":"mkbernier@gmail.com"},"repository":{"url":"git+https://github.com/BernierLLC/tools.git","type":"git","directory":"packages/core/smtp-analyzer"},"_npmVersion":"11.4.2","description":"Pure atomic SMTP header analysis and email authentication parsing utilities","directories":{},"_nodeVersion":"24.4.1","_hasShrinkwrap":false,"devDependencies":{"jest":"^29.5.0","eslint":"^8.0.0","rimraf":"^5.0.0","ts-jest":"^29.4.0","typescript":"^5.3.0","@types/jest":"^29.5.14","@types/node":"^20.0.0","@typescript-eslint/parser":"^6.0.0","@typescript-eslint/eslint-plugin":"^6.0.0"},"_npmOperationalInternal":{"tmp":"tmp/smtp-analyzer_0.1.2_1760048139029_0.12460131598604951","host":"s3://npm-registry-packages-npm-production"}},"0.1.4":{"name":"@bernierllc/smtp-analyzer","version":"0.1.4","keywords":["smtp","email","headers","authentication","spf","dkim","dmarc","arc","delivery","analysis","parser","bernierllc"],"author":{"name":"Bernier LLC"},"license":"PROPRIETARY","_id":"@bernierllc/smtp-analyzer@0.1.4","maintainers":[{"name":"alikhan410","email":"mczeyo@gmail.com"},{"name":"mkbernier","email":"mkbernier@gmail.com"}],"homepage":"https://github.com/BernierLLC/tools#readme","bugs":{"url":"https://github.com/BernierLLC/tools/issues"},"dist":{"shasum":"d9e409c1df9414ec5b43920d1c178f635d01c56a","tarball":"https://registry.npmjs.org/@bernierllc/smtp-analyzer/-/smtp-analyzer-0.1.4.tgz","fileCount":24,"integrity":"sha512-tEj0ZFcvS8+OVXMprZfwpy7C3NHDQMUvcKM34HBTIEWw/T3Kch6hs+aIMqqz+Rf+HX7q9N7bEQ8XxBCJVKlqtQ==","signatures":[{"sig":"MEYCIQDI8oTXGdemJCytWZWW7uUPR33G73XXk142VRKf2ByV3gIhAO97hQjHgEaPrCZdbIR1nL366AM8kX1vaxSG5lVjXKaK","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":70434},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","engines":{"node":">=18.0.0"},"gitHead":"949714d63ffdbb234278ffcdaf4295e49e5055f4","scripts":{"lint":"eslint src --ext .ts","test":"jest","build":"tsc","clean":"rm -rf dist","prebuild":"npm run clean","test:watch":"jest --watch","test:coverage":"jest --coverage"},"_npmUser":{"name":"mkbernier","email":"mkbernier@gmail.com"},"repository":{"url":"git+https://github.com/BernierLLC/tools.git","type":"git","directory":"packages/core/smtp-analyzer"},"_npmVersion":"11.4.2","description":"Pure atomic SMTP header analysis and email authentication parsing utilities","directories":{},"_nodeVersion":"24.4.1","_hasShrinkwrap":false,"devDependencies":{"jest":"^29.5.0","eslint":"^8.0.0","rimraf":"^5.0.0","ts-jest":"^29.4.0","typescript":"^5.3.0","@types/jest":"^29.5.14","@types/node":"^20.0.0","@typescript-eslint/parser":"^6.0.0","@typescript-eslint/eslint-plugin":"^6.0.0"},"_npmOperationalInternal":{"tmp":"tmp/smtp-analyzer_0.1.4_1760221804578_0.034953274369202036","host":"s3://npm-registry-packages-npm-production"}},"0.3.0":{"name":"@bernierllc/smtp-analyzer","version":"0.3.0","keywords":["smtp","email","headers","authentication","spf","dkim","dmarc","arc","delivery","analysis","parser","bernierllc"],"author":{"name":"Bernier LLC"},"license":"PROPRIETARY","_id":"@bernierllc/smtp-analyzer@0.3.0","maintainers":[{"name":"alikhan410","email":"mczeyo@gmail.com"},{"name":"mkbernier","email":"mkbernier@gmail.com"}],"homepage":"https://github.com/BernierLLC/tools#readme","bugs":{"url":"https://github.com/BernierLLC/tools/issues"},"dist":{"shasum":"dfecddebb83d62758b34af817fab06c624b7b944","tarball":"https://registry.npmjs.org/@bernierllc/smtp-analyzer/-/smtp-analyzer-0.3.0.tgz","fileCount":24,"integrity":"sha512-01iP1vjENQVpwfOPz6TSUz9b0x+JwVBEIVsiFwH3oTGzO1KW8QjC78oG83iFERUzqDr5/moLxbEAhjtwHtuF/g==","signatures":[{"sig":"MEUCIQD2VEAjnGJquRdE1X8MAVvniSL4hsWBNcwfDP/t6r8T/wIgIK2d7y7n1z3RnFsAjMJQFWWINBBjgcI/3XdlJsH0F44=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":70587},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","engines":{"node":">=18.0.0"},"gitHead":"af7e74b3715d56d3a193e1bb6743b337c2b0df6d","scripts":{"lint":"eslint src --ext .ts","test":"jest","build":"tsc","clean":"rm -rf dist","prebuild":"npm run clean","test:watch":"jest --watch","test:coverage":"jest --coverage"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:0ab09692-c0b5-4438-9d98-84facc700b92"}},"repository":{"url":"git+https://github.com/BernierLLC/tools.git","type":"git","directory":"packages/core/smtp-analyzer"},"_npmVersion":"lerna/9.0.3/node@v20.19.6+x64 (linux)","description":"Pure atomic SMTP header analysis and email authentication parsing utilities","directories":{},"_nodeVersion":"20.19.6","publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.5.0","eslint":"^8.0.0","rimraf":"^5.0.0","ts-jest":"^29.4.0","typescript":"^5.3.0","@types/jest":"^29.5.14","@types/node":"^20.0.0","@typescript-eslint/parser":"^6.0.0","@typescript-eslint/eslint-plugin":"^6.0.0"},"_npmOperationalInternal":{"tmp":"tmp/smtp-analyzer_0.3.0_1767642329588_0.13966196075937187","host":"s3://npm-registry-packages-npm-production"}},"0.3.1":{"name":"@bernierllc/smtp-analyzer","version":"0.3.1","keywords":["smtp","email","headers","authentication","spf","dkim","dmarc","arc","delivery","analysis","parser","bernierllc"],"author":{"name":"Bernier LLC"},"license":"PROPRIETARY","_id":"@bernierllc/smtp-analyzer@0.3.1","maintainers":[{"name":"alikhan410","email":"mczeyo@gmail.com"},{"name":"mkbernier","email":"mkbernier@gmail.com"}],"homepage":"https://github.com/BernierLLC/tools#readme","bugs":{"url":"https://github.com/BernierLLC/tools/issues"},"dist":{"shasum":"808e5eaad354a4f196e8e730725338b581a63bbf","tarball":"https://registry.npmjs.org/@bernierllc/smtp-analyzer/-/smtp-analyzer-0.3.1.tgz","fileCount":24,"integrity":"sha512-F1DuVq82E0a4YYQ55e62FV8Vyg3DtW1aPqn7RKRwXHNZgYXLpdB4zCWHAaE8z2sKfPkj5bcV0Nd5o+tnWk2hkw==","signatures":[{"sig":"MEUCIQD5ksc5Gw+nlbORqf/yWFm3DFioEM8oMbFmxYTC4B9n4QIgWS8NC4k7ZQVtrQAAjqKtRBYyOPUt+dbNwkA4ORUEkz8=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":70529},"main":"dist/index.js","type":"module","_from":"file:bernierllc-smtp-analyzer-0.3.1.tgz","types":"dist/index.d.ts","engines":{"node":">=18.0.0"},"scripts":{"lint":"eslint src --ext .ts","test":"jest","build":"tsc","clean":"rm -rf dist","prebuild":"npm run clean","test:watch":"jest --watch","test:coverage":"jest --coverage"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:0ab09692-c0b5-4438-9d98-84facc700b92"}},"_resolved":"/tmp/30048d5362243c30f6554169aaadf79d/bernierllc-smtp-analyzer-0.3.1.tgz","_integrity":"sha512-F1DuVq82E0a4YYQ55e62FV8Vyg3DtW1aPqn7RKRwXHNZgYXLpdB4zCWHAaE8z2sKfPkj5bcV0Nd5o+tnWk2hkw==","repository":{"url":"git+https://github.com/BernierLLC/tools.git","type":"git","directory":"packages/core/smtp-analyzer"},"_npmVersion":"11.11.0","description":"Pure atomic SMTP header analysis and email authentication parsing utilities","directories":{},"_nodeVersion":"20.20.0","publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.5.0","eslint":"^8.0.0","rimraf":"^5.0.0","ts-jest":"^29.4.0","typescript":"^5.3.0","@types/jest":"^29.5.14","@types/node":"^20.0.0","@typescript-eslint/parser":"^6.0.0","@typescript-eslint/eslint-plugin":"^6.0.0"},"_npmOperationalInternal":{"tmp":"tmp/smtp-analyzer_0.3.1_1773078075805_0.26496547533780435","host":"s3://npm-registry-packages-npm-production"}},"0.3.2":{"name":"@bernierllc/smtp-analyzer","version":"0.3.2","keywords":["smtp","email","headers","authentication","spf","dkim","dmarc","arc","delivery","analysis","parser","bernierllc"],"author":{"name":"Bernier LLC"},"license":"PROPRIETARY","_id":"@bernierllc/smtp-analyzer@0.3.2","maintainers":[{"name":"alikhan410","email":"mczeyo@gmail.com"},{"name":"mkbernier","email":"mkbernier@gmail.com"}],"homepage":"https://github.com/BernierLLC/tools#readme","bugs":{"url":"https://github.com/BernierLLC/tools/issues"},"dist":{"shasum":"a4a55d96f8e44f9da2b79683f7c2c2a449caedb2","tarball":"https://registry.npmjs.org/@bernierllc/smtp-analyzer/-/smtp-analyzer-0.3.2.tgz","fileCount":24,"integrity":"sha512-+J8V5KgWskb8D6Ne46hzuclWw/ziVAlYH7iyzJDUUtVsAWZS8NO+eGizc8JaUHMT8q8sPEc53SIdoNPHq19PlA==","signatures":[{"sig":"MEYCIQDEdGLE/jyLqJH7Gkr+8s9+h9+Tx8+K/E2mlysJy7NqSwIhAOk6nZtf5gGnLaeR5QfoPGJu99Is0BCnkfPYL3AUdCp8","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":70529},"main":"dist/index.js","type":"module","_from":"file:bernierllc-smtp-analyzer-0.3.2.tgz","types":"dist/index.d.ts","engines":{"node":">=18.0.0"},"scripts":{"lint":"eslint src --ext .ts","test":"jest","build":"tsc","clean":"rm -rf dist","prebuild":"npm run clean","test:watch":"jest --watch","test:coverage":"jest --coverage"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:0ab09692-c0b5-4438-9d98-84facc700b92"}},"_resolved":"/home/runner/work/tools/tools/packages/core/smtp-analyzer/bernierllc-smtp-analyzer-0.3.2.tgz","_integrity":"sha512-+J8V5KgWskb8D6Ne46hzuclWw/ziVAlYH7iyzJDUUtVsAWZS8NO+eGizc8JaUHMT8q8sPEc53SIdoNPHq19PlA==","repository":{"url":"git+https://github.com/BernierLLC/tools.git","type":"git","directory":"packages/core/smtp-analyzer"},"_npmVersion":"11.11.0","description":"Pure atomic SMTP header analysis and email authentication parsing utilities","directories":{},"_nodeVersion":"20.20.0","publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.5.0","eslint":"^8.0.0","rimraf":"^5.0.0","ts-jest":"^29.4.0","typescript":"^5.3.0","@types/jest":"^29.5.14","@types/node":"^20.0.0","@typescript-eslint/parser":"^6.0.0","@typescript-eslint/eslint-plugin":"^6.0.0"},"_npmOperationalInternal":{"tmp":"tmp/smtp-analyzer_0.3.2_1773163293515_0.9094210907063858","host":"s3://npm-registry-packages-npm-production"}},"0.4.0":{"name":"@bernierllc/smtp-analyzer","version":"0.4.0","keywords":["smtp","email","headers","authentication","spf","dkim","dmarc","arc","delivery","analysis","parser","bernierllc"],"author":{"name":"Bernier LLC"},"license":"PROPRIETARY","_id":"@bernierllc/smtp-analyzer@0.4.0","maintainers":[{"name":"alikhan410","email":"mczeyo@gmail.com"},{"name":"mkbernier","email":"mkbernier@gmail.com"}],"homepage":"https://github.com/BernierLLC/tools#readme","bugs":{"url":"https://github.com/BernierLLC/tools/issues"},"dist":{"shasum":"c7eb43b3667ac519e4a2baa08aa3d73db9b7115d","tarball":"https://registry.npmjs.org/@bernierllc/smtp-analyzer/-/smtp-analyzer-0.4.0.tgz","fileCount":24,"integrity":"sha512-oFev/zlwVkIfI7n0qWDnaIXVCbanf/9z6ZUqTowpBVTvc+kGgxyR4MCc9NQ7L2j6ypZ5FQGgsfekdecY76NpoQ==","signatures":[{"sig":"MEQCIFn8KTWmI8bl4vrQiQ0HmGPraFjjwus+lviRd/AwpKPyAiB66feZcAzdqnaIQbFIewVE3R1vB2dn9YO673hXpbPQ4w==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":70529},"main":"dist/index.js","type":"module","_from":"file:bernierllc-smtp-analyzer-0.4.0.tgz","types":"dist/index.d.ts","engines":{"node":">=18.0.0"},"scripts":{"lint":"eslint src --ext .ts","test":"jest","build":"tsc","clean":"rm -rf dist","prebuild":"npm run clean","test:watch":"jest --watch","test:coverage":"jest --coverage"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:0ab09692-c0b5-4438-9d98-84facc700b92"}},"_resolved":"/home/runner/work/tools/tools/packages/core/smtp-analyzer/bernierllc-smtp-analyzer-0.4.0.tgz","_integrity":"sha512-oFev/zlwVkIfI7n0qWDnaIXVCbanf/9z6ZUqTowpBVTvc+kGgxyR4MCc9NQ7L2j6ypZ5FQGgsfekdecY76NpoQ==","repository":{"url":"git+https://github.com/BernierLLC/tools.git","type":"git","directory":"packages/core/smtp-analyzer"},"_npmVersion":"11.14.1","description":"Pure atomic SMTP header analysis and email authentication parsing utilities","directories":{},"_nodeVersion":"20.20.2","publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.5.0","eslint":"^8.0.0","rimraf":"^5.0.0","ts-jest":"^29.4.0","typescript":"^5.3.0","@types/jest":"^29.5.14","@types/node":"^20.0.0","@typescript-eslint/parser":"^6.0.0","@typescript-eslint/eslint-plugin":"^6.0.0"},"_npmOperationalInternal":{"tmp":"tmp/smtp-analyzer_0.4.0_1779241413832_0.48892137452517015","host":"s3://npm-registry-packages-npm-production"}},"0.5.0":{"name":"@bernierllc/smtp-analyzer","version":"0.5.0","keywords":["smtp","email","headers","authentication","spf","dkim","dmarc","arc","delivery","analysis","parser","bernierllc"],"author":{"name":"Bernier LLC"},"license":"PROPRIETARY","_id":"@bernierllc/smtp-analyzer@0.5.0","maintainers":[{"name":"alikhan410","email":"mczeyo@gmail.com"},{"name":"mkbernier","email":"mkbernier@gmail.com"}],"homepage":"https://github.com/BernierLLC/tools#readme","bugs":{"url":"https://github.com/BernierLLC/tools/issues"},"dist":{"shasum":"565d4f661a89ef344b146c4bbd5bc1678110aa7c","tarball":"https://registry.npmjs.org/@bernierllc/smtp-analyzer/-/smtp-analyzer-0.5.0.tgz","fileCount":27,"integrity":"sha512-a91ftUMxG7ZC93gfcrKZj80zEkRGWyvsUv02bS1NcG2PC1nGRQiKoxH5zCTcKBnhloQYC66RIYdynxMZPyJZFQ==","signatures":[{"sig":"MEQCIFY8oLlwO6MJWdpCMR6657mQTt2ixAyAMBsOzc4iqVUCAiAxp9k+a5b9nifJCo7OCmpTGg1BFQUAe3x+v6C1VPmDKg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":72538},"main":"dist/index.js","type":"module","_from":"file:bernierllc-smtp-analyzer-0.5.0.tgz","types":"dist/index.d.ts","engines":{"node":">=18.0.0"},"scripts":{"lint":"eslint src --ext .ts","test":"jest","build":"tsc","clean":"rm -rf dist","prebuild":"npm run clean","test:watch":"jest --watch","test:coverage":"jest --coverage"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:0ab09692-c0b5-4438-9d98-84facc700b92"}},"_resolved":"/home/runner/work/tools/tools/packages/core/smtp-analyzer/bernierllc-smtp-analyzer-0.5.0.tgz","_integrity":"sha512-a91ftUMxG7ZC93gfcrKZj80zEkRGWyvsUv02bS1NcG2PC1nGRQiKoxH5zCTcKBnhloQYC66RIYdynxMZPyJZFQ==","repository":{"url":"git+https://github.com/BernierLLC/tools.git","type":"git","directory":"packages/core/smtp-analyzer"},"_npmVersion":"11.14.1","description":"Pure atomic SMTP header analysis and email authentication parsing utilities","directories":{},"_nodeVersion":"20.20.2","publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.5.0","eslint":"^8.0.0","rimraf":"^5.0.0","ts-jest":"^29.4.0","typescript":"^5.3.0","@types/jest":"^29.5.14","@types/node":"^20.0.0","@typescript-eslint/parser":"^6.0.0","@typescript-eslint/eslint-plugin":"^6.0.0"},"_npmOperationalInternal":{"tmp":"tmp/smtp-analyzer_0.5.0_1779243314663_0.08258727202270078","host":"s3://npm-registry-packages-npm-production"}},"0.6.0":{"name":"@bernierllc/smtp-analyzer","version":"0.6.0","description":"Pure atomic SMTP header analysis and email authentication parsing utilities","main":"dist/index.js","types":"dist/index.d.ts","type":"module","keywords":["smtp","email","headers","authentication","spf","dkim","dmarc","arc","delivery","analysis","parser","bernierllc"],"author":{"name":"Bernier LLC"},"license":"PROPRIETARY","devDependencies":{"@types/jest":"^29.5.14","@types/node":"^20.0.0","@typescript-eslint/eslint-plugin":"^6.0.0","@typescript-eslint/parser":"^6.0.0","eslint":"^8.0.0","jest":"^29.5.0","rimraf":"^5.0.0","ts-jest":"^29.4.0","typescript":"^5.3.0"},"engines":{"node":">=18.0.0"},"repository":{"type":"git","url":"git+https://github.com/BernierLLC/tools.git","directory":"packages/core/smtp-analyzer"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"scripts":{"build":"tsc","prebuild":"npm run clean","clean":"rm -rf dist","test":"jest","test:watch":"jest --watch","test:coverage":"jest --coverage","lint":"eslint src --ext .ts"},"_id":"@bernierllc/smtp-analyzer@0.6.0","bugs":{"url":"https://github.com/BernierLLC/tools/issues"},"homepage":"https://github.com/BernierLLC/tools#readme","_integrity":"sha512-7orgNTSFNJqbUAnBzB9P3SfSblEfoJx9Qes61F7q323t0dBl8L0lMwaeTybnh+mUuFYYpkiqez1oD+TJhxTX1g==","_resolved":"/home/runner/work/tools/tools/packages/core/smtp-analyzer/bernierllc-smtp-analyzer-0.6.0.tgz","_from":"file:bernierllc-smtp-analyzer-0.6.0.tgz","_nodeVersion":"20.20.2","_npmVersion":"11.14.1","dist":{"integrity":"sha512-7orgNTSFNJqbUAnBzB9P3SfSblEfoJx9Qes61F7q323t0dBl8L0lMwaeTybnh+mUuFYYpkiqez1oD+TJhxTX1g==","shasum":"d9f2d43a110e01df5815a36b11f41925fac10d7c","tarball":"https://registry.npmjs.org/@bernierllc/smtp-analyzer/-/smtp-analyzer-0.6.0.tgz","fileCount":27,"unpackedSize":72538,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCICVg7h417Z+sFUBSupyNVWmu9J+rEvejOwHtXEoOkS96AiEAyUgy8Lm9+B0qXsgu1gC+5wUac6IfQn3rcymmPslqkGI="}]},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:0ab09692-c0b5-4438-9d98-84facc700b92"}},"directories":{},"maintainers":[{"name":"alikhan410","email":"mczeyo@gmail.com"},{"name":"mkbernier","email":"mkbernier@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/smtp-analyzer_0.6.0_1779250160717_0.5293415206861969"},"_hasShrinkwrap":false}},"time":{"created":"2025-10-09T22:15:38.909Z","modified":"2026-05-20T04:09:20.974Z","0.1.2":"2025-10-09T22:15:39.226Z","0.1.4":"2025-10-11T22:30:04.786Z","0.3.0":"2026-01-05T19:45:29.751Z","0.3.1":"2026-03-09T17:41:15.935Z","0.3.2":"2026-03-10T17:21:33.681Z","0.4.0":"2026-05-20T01:43:33.958Z","0.5.0":"2026-05-20T02:15:14.814Z","0.6.0":"2026-05-20T04:09:20.851Z"},"bugs":{"url":"https://github.com/BernierLLC/tools/issues"},"author":{"name":"Bernier LLC"},"license":"PROPRIETARY","homepage":"https://github.com/BernierLLC/tools#readme","keywords":["smtp","email","headers","authentication","spf","dkim","dmarc","arc","delivery","analysis","parser","bernierllc"],"repository":{"type":"git","url":"git+https://github.com/BernierLLC/tools.git","directory":"packages/core/smtp-analyzer"},"description":"Pure atomic SMTP header analysis and email authentication parsing utilities","maintainers":[{"name":"alikhan410","email":"mczeyo@gmail.com"},{"name":"mkbernier","email":"mkbernier@gmail.com"}],"readme":"# @bernierllc/smtp-analyzer\n\nPure atomic SMTP header analysis and email authentication parsing utilities. Analyze SMTP delivery paths, authentication results (SPF, DKIM, DMARC, ARC), bounce messages, and routing information without any external dependencies.\n\n## Installation\n\n```bash\nnpm install @bernierllc/smtp-analyzer\n```\n\n## Features\n\n- **SMTP Header Parsing** - Parse and validate SMTP headers with support for multi-line (folded) headers\n- **Delivery Path Analysis** - Extract complete delivery path with hop-by-hop analysis\n- **Authentication Analysis** - Parse SPF, DKIM, DMARC, and ARC authentication results\n- **Bounce Message Detection** - Detect and parse bounce messages with DSN (Delivery Status Notification) support\n- **Routing Information** - Analyze mail server routing, relays, and transport security (TLS)\n- **Security Analysis** - Extract and analyze security-related headers\n- **Evidence-Rich Output** - All analysis includes original header data for verification\n- **Zero Dependencies** - Completely self-contained with no external dependencies\n- **TypeScript First** - Full type safety with comprehensive type definitions\n\n## Usage\n\n### Quick Start\n\n```typescript\nimport { analyzeSMTPHeadersFromRaw } from '@bernierllc/smtp-analyzer';\n\n// Analyze complete email headers\nconst rawHeaders = `\nReceived: from mail.sender.com by mx.google.com with ESMTPS;\n  Tue, 8 Oct 2024 10:30:45 -0700\nAuthentication-Results: mx.google.com;\n  spf=pass smtp.mailfrom=sender@example.com;\n  dkim=pass header.d=example.com;\n  dmarc=pass\nFrom: sender@example.com\nTo: recipient@example.com\nSubject: Important Message\n`;\n\nconst result = analyzeSMTPHeadersFromRaw(rawHeaders);\n\nif (result.success) {\n  const analysis = result.data;\n\n  console.log('Authentication:', analysis.authentication.spf.result); // 'pass'\n  console.log('Delivery Hops:', analysis.routing.hopCount);\n  console.log('Secure Transport:', analysis.routing.hasSecureTransport);\n}\n```\n\n### Analyzing Delivery Path\n\n```typescript\nimport { parseHeaders, parseDeliveryPath, extractRoutingInfo } from '@bernierllc/smtp-analyzer';\n\nconst headers = parseHeaders(rawHeaders);\nconst receivedHeaders = headers['received'];\n\n// Parse delivery path (chronologically ordered)\nconst hops = parseDeliveryPath(Array.isArray(receivedHeaders) ? receivedHeaders : [receivedHeaders]);\n\nhops.forEach((hop, index) => {\n  console.log(`Hop ${index + 1}:`);\n  console.log(`  Server: ${hop.server}`);\n  console.log(`  From: ${hop.from}`);\n  console.log(`  Protocol: ${hop.protocol}`);\n  console.log(`  TLS: ${hop.tls ? 'Yes' : 'No'}`);\n  console.log(`  Timestamp: ${hop.timestamp}`);\n});\n\n// Extract routing information\nconst routing = extractRoutingInfo(hops);\nconsole.log('Originating IP:', routing.originatingIp);\nconsole.log('Final Destination:', routing.finalDestination);\nconsole.log('Total Hops:', routing.hopCount);\nconsole.log('Has Secure Transport:', routing.hasSecureTransport);\n```\n\n### Authentication Analysis\n\n```typescript\nimport { parseAuthenticationResults, isAuthenticationPassed } from '@bernierllc/smtp-analyzer';\n\nconst authHeader = 'mx.google.com; spf=pass smtp.mailfrom=sender@example.com; dkim=pass header.d=example.com; dmarc=pass';\n\nconst auth = parseAuthenticationResults(authHeader);\n\nconsole.log('SPF Result:', auth.spf.result);\nconsole.log('SPF Mechanism:', auth.spf.mechanism);\nconsole.log('DKIM Result:', auth.dkim.result);\nconsole.log('DKIM Domain:', auth.dkim.domain);\nconsole.log('DMARC Result:', auth.dmarc.result);\n\n// Check if all authentication passed\nif (isAuthenticationPassed(auth)) {\n  console.log('Email is fully authenticated');\n}\n```\n\n### Bounce Message Analysis\n\n```typescript\nimport { parseBounceMessage, isPermanentBounce } from '@bernierllc/smtp-analyzer';\n\nconst bounceContent = `\nDelivery to the following recipient failed permanently:\n     invalid@nonexistent.com\n\nTechnical details:\n550-5.1.1 The email account that you tried to reach does not exist.\n\nFinal-Recipient: rfc822; invalid@nonexistent.com\nAction: failed\nStatus: 5.1.1\n`;\n\nconst bounce = parseBounceMessage(\n  bounceContent,\n  'Delivery Status Notification (Failure)',\n  'mailer-daemon@googlemail.com'\n);\n\nif (bounce.isBounce) {\n  console.log('Bounce Type:', bounce.bounceType); // 'hard'\n  console.log('Original Recipient:', bounce.originalRecipient);\n  console.log('Reason:', bounce.reason);\n\n  if (bounce.dsn) {\n    console.log('DSN Action:', bounce.dsn.action);\n    console.log('DSN Status Code:', bounce.dsn.statusCode);\n    console.log('Diagnostic Code:', bounce.dsn.diagnosticCode);\n  }\n\n  // Check if permanent bounce\n  if (isPermanentBounce(bounce)) {\n    console.log('This is a permanent bounce - remove recipient');\n  }\n}\n```\n\n### Complete Analysis\n\n```typescript\nimport { analyzeSMTPHeaders, getSummary, isEmailAuthenticated } from '@bernierllc/smtp-analyzer';\n\nconst analysis = analyzeSMTPHeaders({\n  'received': [\n    'from mail.sender.com by mx.google.com with ESMTPS; Tue, 8 Oct 2024 10:30:45 -0700',\n    'from localhost by mail.sender.com with SMTP; Tue, 8 Oct 2024 13:30:40 -0400',\n  ],\n  'authentication-results': 'mx.google.com; spf=pass; dkim=pass; dmarc=pass',\n  'from': 'sender@example.com',\n  'to': 'recipient@example.com',\n  'message-id': '<abc123@example.com>',\n  'date': 'Tue, 8 Oct 2024 13:30:40 -0400',\n});\n\n// Get human-readable summary\nconsole.log(getSummary(analysis));\n// Output:\n// Delivery Path: 2 hops\n// SPF: pass\n// DKIM: pass\n// DMARC: pass\n// Secure Transport: Yes\n// Delivery Time: 5s\n\n// Check authentication\nif (isEmailAuthenticated(analysis)) {\n  console.log('Email is authenticated');\n}\n\n// Check for bounce\nif (analysis.bounce?.isBounce) {\n  console.log('This is a bounce message');\n}\n```\n\n### Security Analysis\n\n```typescript\nimport { detectSuspiciousPatterns, identifyRelays } from '@bernierllc/smtp-analyzer';\n\nconst hops = parseDeliveryPath(receivedHeaders);\n\n// Detect suspicious patterns\nconst issues = detectSuspiciousPatterns(hops);\nif (issues.length > 0) {\n  console.log('Security concerns detected:');\n  issues.forEach(issue => console.log(`  - ${issue}`));\n}\n\n// Identify relay servers\nconst relays = identifyRelays(hops);\nconsole.log('Relay servers:', relays);\n```\n\n## API Reference\n\n### Main Analyzer\n\n#### `analyzeSMTPHeaders(headers: ParsedHeaders): SMTPAnalysis`\n\nAnalyze SMTP headers and extract all relevant information.\n\n**Parameters:**\n- `headers` - Parsed headers object (use `parseHeaders()` to convert raw headers)\n\n**Returns:** Complete SMTP analysis including:\n- `deliveryPath` - Array of SMTP hops\n- `authentication` - SPF, DKIM, DMARC, ARC results\n- `routing` - Routing and relay information\n- `deliveryStatus` - Delivery status and timing\n- `securityHeaders` - Security-related headers\n- `bounce` - Bounce information (if applicable)\n\n#### `analyzeSMTPHeadersFromRaw(rawHeaders: string): AnalysisResult<SMTPAnalysis>`\n\nConvenience wrapper that parses headers and performs analysis.\n\n**Parameters:**\n- `rawHeaders` - Raw email headers as string\n\n**Returns:** Result wrapper with `success` flag and `data` or `error`\n\n### Header Parsing\n\n#### `parseHeaders(rawHeaders: string): ParsedHeaders`\n\nParse email headers from raw header string. Handles multi-line (folded) headers per RFC 5322.\n\n#### `getHeader(headers: ParsedHeaders, name: string): string | string[] | undefined`\n\nGet header value(s). Returns array if multiple values exist.\n\n#### `getHeaderArray(headers: ParsedHeaders, name: string): string[]`\n\nGet all values for a header as array (even if single value).\n\n#### `getHeaderFirst(headers: ParsedHeaders, name: string): string | undefined`\n\nGet first value for a header (useful for headers that should be unique).\n\n#### `extractEmailAddress(headerValue: string): string | null`\n\nExtract email address from header value (handles various formats).\n\n#### `parseHeaderDate(dateString: string): Date | null`\n\nParse date from header value (RFC 5322 format).\n\n### Delivery Path Analysis\n\n#### `parseDeliveryPath(receivedHeaders: string[]): SMTPHop[]`\n\nParse delivery path from Received headers. Returns hops in chronological order (oldest first).\n\n#### `extractRoutingInfo(hops: SMTPHop[]): RoutingInfo`\n\nExtract routing information from delivery path.\n\n#### `calculateDeliveryTime(hops: SMTPHop[]): number | null`\n\nCalculate delivery time from first to last hop. Returns time in milliseconds.\n\n#### `identifyRelays(hops: SMTPHop[]): string[]`\n\nIdentify relay servers in the delivery path.\n\n#### `detectSuspiciousPatterns(hops: SMTPHop[]): string[]`\n\nDetect suspicious patterns in delivery path. Returns array of detected issues.\n\n### Authentication Parsing\n\n#### `parseAuthenticationResults(authHeader: string): AuthenticationResults`\n\nParse Authentication-Results header.\n\n#### `parseReceivedSPF(receivedSpfHeader: string): SPFDetails`\n\nParse Received-SPF header.\n\n#### `parseDKIMSignature(dkimSignature: string): DKIMDetails`\n\nParse DKIM-Signature header.\n\n#### `isAuthenticationPassed(results: AuthenticationResults): boolean`\n\nCheck if authentication passed all checks.\n\n#### `getAuthenticationSummary(results: AuthenticationResults): string`\n\nGet authentication status summary.\n\n### Bounce Message Parsing\n\n#### `detectBounce(subject: string, from: string, contentType?: string): boolean`\n\nDetect if email is a bounce message.\n\n#### `parseBounceMessage(emailContent: string, subject?: string, from?: string): BounceInfo`\n\nParse bounce message to extract details.\n\n#### `parseDSN(content: string): DSNDetails | null`\n\nParse DSN (Delivery Status Notification) from email content.\n\n#### `isPermanentBounce(bounceInfo: BounceInfo): boolean`\n\nCheck if bounce is permanent (hard bounce).\n\n#### `isTemporaryBounce(bounceInfo: BounceInfo): boolean`\n\nCheck if bounce is temporary (soft bounce).\n\n## Types\n\n### Core Types\n\n```typescript\ninterface SMTPAnalysis {\n  deliveryPath: SMTPHop[];\n  authentication: AuthenticationResults;\n  routing: RoutingInfo;\n  deliveryStatus: DeliveryInfo;\n  securityHeaders: SecurityHeaders;\n  bounce?: BounceInfo;\n}\n\ninterface SMTPHop {\n  server: string;\n  timestamp: Date | null;\n  protocol: string;\n  from: string;\n  for: string;\n  id?: string;\n  with?: string;\n  tls?: boolean;\n  raw: string;\n}\n\ninterface AuthenticationResults {\n  spf: SPFDetails;\n  dkim: DKIMDetails;\n  dmarc: DMARCDetails;\n  arc: ARCDetails;\n  rawHeader?: string;\n}\n\ninterface RoutingInfo {\n  originatingIp?: string;\n  originatingServer?: string;\n  finalDestination?: string;\n  hopCount: number;\n  totalHops: SMTPHop[];\n  hasSecureTransport: boolean;\n}\n\ninterface BounceInfo {\n  isBounce: boolean;\n  bounceType?: 'hard' | 'soft' | 'general' | 'unknown';\n  dsn?: DSNDetails;\n  originalRecipient?: string;\n  reason?: string;\n  diagnosticCode?: string;\n}\n```\n\n## Production Use Cases\n\n- **Email Security Monitoring** - Analyze authentication failures and detect spoofing\n- **Deliverability Analytics** - Track delivery path performance and identify issues\n- **Compliance Auditing** - Verify authentication compliance (SPF, DKIM, DMARC)\n- **Spam Detection** - Analyze sender reputation signals and delivery patterns\n- **Email Forensics** - Investigate email origin and routing for security analysis\n- **Bounce Management** - Parse and categorize bounce messages for list hygiene\n- **Transport Security** - Monitor TLS usage across delivery paths\n\n## Integration Status\n\n- **Logger Integration**: Not applicable - This is a pure utility package with no internal logging needs. Applications using this package can optionally integrate `@bernierllc/logger` for logging analysis results or errors at the application level.\n- **Docs-Suite**: Ready - Complete TypeDoc documentation with examples\n- **NeverHub Integration**: Not applicable - This is a core utility package with no orchestration needs. The package works independently and does not require `@bernierllc/neverhub-adapter` for service discovery or event communication.\n\n## License\n\nCopyright (c) 2025 Bernier LLC. All rights reserved.\n\nThis package is licensed to the client under a limited-use license. The client may use and modify this code only within the scope of the project it was delivered for. Redistribution or use in other products or commercial offerings is not permitted without written consent from Bernier LLC.\n","readmeFilename":"README.md"}