{"_id":"@bernierllc/email-sender-manager","_rev":"8-5f63ae4af03477071cef748e1ef44603","name":"@bernierllc/email-sender-manager","dist-tags":{"latest":"1.6.0"},"versions":{"1.0.1":{"name":"@bernierllc/email-sender-manager","version":"1.0.1","keywords":["email","sender","configuration","database","verification","sendgrid","mailgun","email-management"],"author":{"name":"Bernier LLC"},"license":"UNLICENSED","_id":"@bernierllc/email-sender-manager@1.0.1","maintainers":[{"name":"alikhan410","email":"mczeyo@gmail.com"},{"name":"mkbernier","email":"mkbernier@gmail.com"}],"dist":{"shasum":"98bec9ab048ba3f4bff3776465610096615a219a","tarball":"https://registry.npmjs.org/@bernierllc/email-sender-manager/-/email-sender-manager-1.0.1.tgz","fileCount":55,"integrity":"sha512-Zi7iqi3hCr+Il8ldzGqhKk+iqziyWaIvP3P46ySrjm1TGyuyUS29wX4C75iXdV1627z9oh+U7L847BBQs1cezQ==","signatures":[{"sig":"MEUCIFFQor45LBpTNT4fQwNz3oR6nfRhRgCjhvTenSjMzX5OAiEA5XgxH+T23G2MHGYnx84KByXMqcz5K9QGwhdsZVdhyoY=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":200135},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","gitHead":"ea44fa49201592d90413ab96929cf9336ea0ec05","scripts":{"lint":"eslint src --ext .ts","test":"NODE_OPTIONS=\"$NODE_OPTIONS --experimental-vm-modules\" jest --no-cache","build":"tsc","clean":"rm -rf dist coverage","typecheck":"tsc --noEmit","test:watch":"NODE_OPTIONS=\"$NODE_OPTIONS --experimental-vm-modules\" jest --watch","test:coverage":"NODE_OPTIONS=\"$NODE_OPTIONS --experimental-vm-modules\" jest --coverage --no-cache"},"_npmUser":{"name":"mkbernier","email":"mkbernier@gmail.com"},"_npmVersion":"11.4.2","description":"Database-backed email sender configuration management with provider verification integration","directories":{},"_nodeVersion":"24.4.1","dependencies":{},"publishConfig":{"access":"restricted"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.5.0","eslint":"^8.42.0","ts-jest":"^29.0.5","typescript":"^5.0.0","@types/jest":"^29.5.0","@types/node":"^18.15.0","@jest/globals":"^29.5.0","@typescript-eslint/parser":"^6.0.0","@typescript-eslint/eslint-plugin":"^6.0.0"},"_npmOperationalInternal":{"tmp":"tmp/email-sender-manager_1.0.1_1760231599707_0.0038221054286504685","host":"s3://npm-registry-packages-npm-production"}},"1.0.2":{"name":"@bernierllc/email-sender-manager","version":"1.0.2","keywords":["email","sender","configuration","database","verification","sendgrid","mailgun","email-management"],"author":{"name":"Bernier LLC"},"license":"UNLICENSED","_id":"@bernierllc/email-sender-manager@1.0.2","maintainers":[{"name":"alikhan410","email":"mczeyo@gmail.com"},{"name":"mkbernier","email":"mkbernier@gmail.com"}],"dist":{"shasum":"e4a2f1a9b95117fc13f2779d0d1499e6423812e2","tarball":"https://registry.npmjs.org/@bernierllc/email-sender-manager/-/email-sender-manager-1.0.2.tgz","fileCount":55,"integrity":"sha512-UxkHEkfS4auzJWaa1aGSTtgcCkHNDWdB8qKQs/1BWWGnM84H+U0OJJ08+qXKuqttZgHNCPY6KdpovLWJuqVVIg==","signatures":[{"sig":"MEUCIQD7XdLn+iQhPrtA70b5aog7OKB7L7XtSnIaV7yyeZTn2AIgci7qZaJJau9t5tQNegxHwlz7iNLrz+eiC7/yfX4ygI0=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":200131},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","gitHead":"6872f444d1dc0070e2aa74bbfbda9a0d8499d3ea","scripts":{"lint":"eslint src --ext .ts","test":"NODE_OPTIONS=\"$NODE_OPTIONS --experimental-vm-modules\" jest --no-cache","build":"tsc","clean":"rm -rf dist coverage","typecheck":"tsc --noEmit","test:watch":"NODE_OPTIONS=\"$NODE_OPTIONS --experimental-vm-modules\" jest --watch","test:coverage":"NODE_OPTIONS=\"$NODE_OPTIONS --experimental-vm-modules\" jest --coverage --no-cache"},"_npmUser":{"name":"mkbernier","email":"mkbernier@gmail.com"},"_npmVersion":"11.4.2","description":"Database-backed email sender configuration management with provider verification integration","directories":{},"_nodeVersion":"24.4.1","dependencies":{},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.5.0","eslint":"^8.42.0","ts-jest":"^29.0.5","typescript":"^5.0.0","@types/jest":"^29.5.0","@types/node":"^18.15.0","@jest/globals":"^29.5.0","@typescript-eslint/parser":"^6.0.0","@typescript-eslint/eslint-plugin":"^6.0.0"},"_npmOperationalInternal":{"tmp":"tmp/email-sender-manager_1.0.2_1760231753322_0.4033339284229158","host":"s3://npm-registry-packages-npm-production"}},"1.2.0":{"name":"@bernierllc/email-sender-manager","version":"1.2.0","keywords":["email","sender","configuration","database","verification","sendgrid","mailgun","email-management"],"author":{"name":"Bernier LLC"},"license":"UNLICENSED","_id":"@bernierllc/email-sender-manager@1.2.0","maintainers":[{"name":"alikhan410","email":"mczeyo@gmail.com"},{"name":"mkbernier","email":"mkbernier@gmail.com"}],"dist":{"shasum":"7b84ea5bcd5ce81b040ba5c123417fc829b71237","tarball":"https://registry.npmjs.org/@bernierllc/email-sender-manager/-/email-sender-manager-1.2.0.tgz","fileCount":55,"integrity":"sha512-krmmVtBt8U2DuIGdjc/ttIAalASrNGT//Ce5mBcm7VMAz/aZQwJcGRGR9rDRqXd2uQuaLhRHXNl+KlgJJhjjAA==","signatures":[{"sig":"MEUCIQC592wf3KVXLGAVESvGkPZs4XCuInMjsxWmOou7EbKRzAIgGzH3MVKNSZpJzEsPml6NdAdGU570NDm6NvwchzmqCac=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":200213},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","gitHead":"af7e74b3715d56d3a193e1bb6743b337c2b0df6d","scripts":{"lint":"eslint src --ext .ts","test":"NODE_OPTIONS=\"$NODE_OPTIONS --experimental-vm-modules\" jest --no-cache","build":"tsc","clean":"rm -rf dist coverage","typecheck":"tsc --noEmit","test:watch":"NODE_OPTIONS=\"$NODE_OPTIONS --experimental-vm-modules\" jest --watch","test:coverage":"NODE_OPTIONS=\"$NODE_OPTIONS --experimental-vm-modules\" jest --coverage --no-cache"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:6e6c07a5-e562-46a7-b8e1-b1c55fc9362e"}},"_npmVersion":"lerna/9.0.3/node@v20.19.6+x64 (linux)","description":"Database-backed email sender configuration management with provider verification integration","directories":{},"_nodeVersion":"20.19.6","publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.5.0","eslint":"^8.42.0","ts-jest":"^29.0.5","typescript":"^5.0.0","@types/jest":"^29.5.0","@types/node":"^18.15.0","@jest/globals":"^29.5.0","@typescript-eslint/parser":"^6.0.0","@typescript-eslint/eslint-plugin":"^6.0.0"},"_npmOperationalInternal":{"tmp":"tmp/email-sender-manager_1.2.0_1767642303748_0.38696639474515027","host":"s3://npm-registry-packages-npm-production"}},"1.2.1":{"name":"@bernierllc/email-sender-manager","version":"1.2.1","keywords":["email","sender","configuration","database","verification","sendgrid","mailgun","email-management"],"author":{"name":"Bernier LLC"},"license":"UNLICENSED","_id":"@bernierllc/email-sender-manager@1.2.1","maintainers":[{"name":"alikhan410","email":"mczeyo@gmail.com"},{"name":"mkbernier","email":"mkbernier@gmail.com"}],"dist":{"shasum":"8901a49b91542052c467c0ae3bebaa93eb0ad862","tarball":"https://registry.npmjs.org/@bernierllc/email-sender-manager/-/email-sender-manager-1.2.1.tgz","fileCount":55,"integrity":"sha512-qHBFuQuvjtxhfHxxJBW/FUvbRmtF2HL6+qKODMMmafGd3jH6ysDq1RcNaGDAGATa+j1onJPz2s9SkbfyIJG85w==","signatures":[{"sig":"MEYCIQDkT5EDihz5V0w4N4uWRBZn6ViPN2Bwys1bgoXItmZVIQIhAPq6q98bAspPqpw/5edprSLcMXIAfEEIiKgpqRFMH0e+","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":200155},"main":"dist/index.js","type":"module","_from":"file:bernierllc-email-sender-manager-1.2.1.tgz","types":"dist/index.d.ts","scripts":{"lint":"eslint src --ext .ts","test":"NODE_OPTIONS=\"$NODE_OPTIONS --experimental-vm-modules\" jest --no-cache","build":"tsc","clean":"rm -rf dist coverage","typecheck":"tsc --noEmit","test:watch":"NODE_OPTIONS=\"$NODE_OPTIONS --experimental-vm-modules\" jest --watch","test:coverage":"NODE_OPTIONS=\"$NODE_OPTIONS --experimental-vm-modules\" jest --coverage --no-cache"},"_npmUser":{"name":"mkbernier","email":"mkbernier@gmail.com"},"_resolved":"/Users/mattbernier/projects/tools/packages/core/email-sender-manager/bernierllc-email-sender-manager-1.2.1.tgz","_integrity":"sha512-qHBFuQuvjtxhfHxxJBW/FUvbRmtF2HL6+qKODMMmafGd3jH6ysDq1RcNaGDAGATa+j1onJPz2s9SkbfyIJG85w==","_npmVersion":"11.6.2","description":"Database-backed email sender configuration management with provider verification integration","directories":{},"_nodeVersion":"25.2.1","publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.5.0","eslint":"^8.42.0","ts-jest":"^29.0.5","typescript":"^5.0.0","@types/jest":"^29.5.0","@types/node":"^18.15.0","@jest/globals":"^29.5.0","@typescript-eslint/parser":"^6.0.0","@typescript-eslint/eslint-plugin":"^6.0.0"},"_npmOperationalInternal":{"tmp":"tmp/email-sender-manager_1.2.1_1772569348895_0.026983080444603402","host":"s3://npm-registry-packages-npm-production"}},"1.2.2":{"name":"@bernierllc/email-sender-manager","version":"1.2.2","keywords":["email","sender","configuration","database","verification","sendgrid","mailgun","email-management"],"author":{"name":"Bernier LLC"},"license":"UNLICENSED","_id":"@bernierllc/email-sender-manager@1.2.2","maintainers":[{"name":"alikhan410","email":"mczeyo@gmail.com"},{"name":"mkbernier","email":"mkbernier@gmail.com"}],"dist":{"shasum":"b8a739bd959ca85b247a987850fde99f2726a9c4","tarball":"https://registry.npmjs.org/@bernierllc/email-sender-manager/-/email-sender-manager-1.2.2.tgz","fileCount":55,"integrity":"sha512-jiPFn7C/VnTYBzqPLduAIXDTRWdJ+wKojGe5lY7/cLWX6S8Z0N1PNWYAf92lFpCrL5mK1Ig/AMsfYBHNnnwsNg==","signatures":[{"sig":"MEYCIQC0GEX6lEnTX1X8OFprF2SWXPxZTTyAYvZMOV2jPnzV5gIhAPRYkQk9eAyhMYTc7ulGSkaQpvEjflxunpP/QSxX9CBI","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":200155},"main":"dist/index.js","type":"module","_from":"file:bernierllc-email-sender-manager-1.2.2.tgz","types":"dist/index.d.ts","scripts":{"lint":"eslint src --ext .ts","test":"NODE_OPTIONS=\"$NODE_OPTIONS --experimental-vm-modules\" jest --no-cache","build":"tsc","clean":"rm -rf dist coverage","typecheck":"tsc --noEmit","test:watch":"NODE_OPTIONS=\"$NODE_OPTIONS --experimental-vm-modules\" jest --watch","test:coverage":"NODE_OPTIONS=\"$NODE_OPTIONS --experimental-vm-modules\" jest --coverage --no-cache"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:6e6c07a5-e562-46a7-b8e1-b1c55fc9362e"}},"_resolved":"/tmp/baed0a84b30012aa031806ffa34d5889/bernierllc-email-sender-manager-1.2.2.tgz","_integrity":"sha512-jiPFn7C/VnTYBzqPLduAIXDTRWdJ+wKojGe5lY7/cLWX6S8Z0N1PNWYAf92lFpCrL5mK1Ig/AMsfYBHNnnwsNg==","_npmVersion":"11.11.0","description":"Database-backed email sender configuration management with provider verification integration","directories":{},"_nodeVersion":"20.20.0","publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.5.0","eslint":"^8.42.0","ts-jest":"^29.0.5","typescript":"^5.0.0","@types/jest":"^29.5.0","@types/node":"^18.15.0","@jest/globals":"^29.5.0","@typescript-eslint/parser":"^6.0.0","@typescript-eslint/eslint-plugin":"^6.0.0"},"_npmOperationalInternal":{"tmp":"tmp/email-sender-manager_1.2.2_1773081183442_0.26452407511423215","host":"s3://npm-registry-packages-npm-production"}},"1.3.0":{"name":"@bernierllc/email-sender-manager","version":"1.3.0","keywords":["email","sender","configuration","database","verification","sendgrid","mailgun","email-management"],"author":{"name":"Bernier LLC"},"license":"UNLICENSED","_id":"@bernierllc/email-sender-manager@1.3.0","maintainers":[{"name":"alikhan410","email":"mczeyo@gmail.com"},{"name":"mkbernier","email":"mkbernier@gmail.com"}],"dist":{"shasum":"a1c282128c87dae34f167a32e44b5def34a9260a","tarball":"https://registry.npmjs.org/@bernierllc/email-sender-manager/-/email-sender-manager-1.3.0.tgz","fileCount":59,"integrity":"sha512-7HXbikVTFRUoGOOguwOjt+9+3ibO7EcubIcChu54q8iLAgY2eFViY3uhaSzPSLhGza82KCrOM0tgPZFVPKSh5g==","signatures":[{"sig":"MEYCIQDb0DrYm7tzELj77XDHiYQz5OfJKGzCSMkaHpqOf0ilXgIhAN8PBduMVUP54IFpMAA+9UNfEAl/QvOnFM/cUphIw3Ma","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":217792},"main":"dist/index.js","type":"module","_from":"file:bernierllc-email-sender-manager-1.3.0.tgz","types":"dist/index.d.ts","scripts":{"lint":"eslint src --ext .ts","test":"NODE_OPTIONS=\"$NODE_OPTIONS --experimental-vm-modules\" jest --no-cache","build":"tsc","clean":"rm -rf dist coverage","test:run":"NODE_OPTIONS=\"$NODE_OPTIONS --experimental-vm-modules\" jest --no-cache","typecheck":"tsc --noEmit","test:watch":"NODE_OPTIONS=\"$NODE_OPTIONS --experimental-vm-modules\" jest --watch","test:coverage":"NODE_OPTIONS=\"$NODE_OPTIONS --experimental-vm-modules\" jest --coverage --no-cache"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:6e6c07a5-e562-46a7-b8e1-b1c55fc9362e"}},"_resolved":"/home/runner/work/tools/tools/packages/core/email-sender-manager/bernierllc-email-sender-manager-1.3.0.tgz","_integrity":"sha512-7HXbikVTFRUoGOOguwOjt+9+3ibO7EcubIcChu54q8iLAgY2eFViY3uhaSzPSLhGza82KCrOM0tgPZFVPKSh5g==","_npmVersion":"11.12.0","description":"Database-backed email sender configuration management with provider verification integration","directories":{},"_nodeVersion":"20.20.1","publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.5.0","eslint":"^8.42.0","ts-jest":"^29.0.5","typescript":"^5.0.0","@types/jest":"^29.5.0","@types/node":"^18.15.0","@jest/globals":"^29.5.0","@typescript-eslint/parser":"^6.0.0","@typescript-eslint/eslint-plugin":"^6.0.0"},"_npmOperationalInternal":{"tmp":"tmp/email-sender-manager_1.3.0_1774131060722_0.997883311855337","host":"s3://npm-registry-packages-npm-production"}},"1.5.0":{"name":"@bernierllc/email-sender-manager","version":"1.5.0","keywords":["email","sender","configuration","database","verification","sendgrid","mailgun","email-management"],"author":{"name":"Bernier LLC"},"license":"UNLICENSED","_id":"@bernierllc/email-sender-manager@1.5.0","maintainers":[{"name":"alikhan410","email":"mczeyo@gmail.com"},{"name":"mkbernier","email":"mkbernier@gmail.com"}],"dist":{"shasum":"d20f2c8fadce32ca4f4ad126520f37266d383187","tarball":"https://registry.npmjs.org/@bernierllc/email-sender-manager/-/email-sender-manager-1.5.0.tgz","fileCount":67,"integrity":"sha512-eOHhWneBZJqeYJJt8bqXRPylbHTB5Ir2fZsbEGCGMgkANkWcsauTQWLG/tMqUaVqZyIlk1moqiVnv+5IW4yKhQ==","signatures":[{"sig":"MEUCIELgTiD92XAo+MFp/y+sr3XYzb1kaYPc48GUW0YES3saAiEAvAFWmsFFS0dqaHf7eCt736fhjYVGAPbZQp0NAnXqDW0=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":223318},"main":"dist/index.js","type":"module","_from":"file:bernierllc-email-sender-manager-1.5.0.tgz","types":"dist/index.d.ts","scripts":{"lint":"eslint src --ext .ts","test":"NODE_OPTIONS=\"$NODE_OPTIONS --experimental-vm-modules\" jest --no-cache","build":"tsc","clean":"rm -rf dist coverage","test:run":"NODE_OPTIONS=\"$NODE_OPTIONS --experimental-vm-modules\" jest --no-cache","typecheck":"tsc --noEmit","test:watch":"NODE_OPTIONS=\"$NODE_OPTIONS --experimental-vm-modules\" jest --watch","test:coverage":"NODE_OPTIONS=\"$NODE_OPTIONS --experimental-vm-modules\" jest --coverage --no-cache"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:6e6c07a5-e562-46a7-b8e1-b1c55fc9362e"}},"_resolved":"/home/runner/work/tools/tools/packages/core/email-sender-manager/bernierllc-email-sender-manager-1.5.0.tgz","_integrity":"sha512-eOHhWneBZJqeYJJt8bqXRPylbHTB5Ir2fZsbEGCGMgkANkWcsauTQWLG/tMqUaVqZyIlk1moqiVnv+5IW4yKhQ==","_npmVersion":"11.14.1","description":"Database-backed email sender configuration management with provider verification integration","directories":{},"_nodeVersion":"20.20.2","publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.5.0","eslint":"^8.42.0","ts-jest":"^29.0.5","typescript":"^5.0.0","@types/jest":"^29.5.0","@types/node":"^18.15.0","@jest/globals":"^29.5.0","@typescript-eslint/parser":"^6.0.0","@typescript-eslint/eslint-plugin":"^6.0.0"},"_npmOperationalInternal":{"tmp":"tmp/email-sender-manager_1.5.0_1779241142958_0.4349458056677844","host":"s3://npm-registry-packages-npm-production"}},"1.6.0":{"name":"@bernierllc/email-sender-manager","version":"1.6.0","description":"Database-backed email sender configuration management with provider verification integration","main":"dist/index.js","types":"dist/index.d.ts","type":"module","keywords":["email","sender","configuration","database","verification","sendgrid","mailgun","email-management"],"author":{"name":"Bernier LLC"},"license":"UNLICENSED","devDependencies":{"@jest/globals":"^29.5.0","@types/jest":"^29.5.0","@types/node":"^18.15.0","@typescript-eslint/eslint-plugin":"^6.0.0","@typescript-eslint/parser":"^6.0.0","eslint":"^8.42.0","jest":"^29.5.0","ts-jest":"^29.0.5","typescript":"^5.0.0"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"scripts":{"build":"tsc","test":"NODE_OPTIONS=\"$NODE_OPTIONS --experimental-vm-modules\" jest --no-cache","test:run":"NODE_OPTIONS=\"$NODE_OPTIONS --experimental-vm-modules\" jest --no-cache","test:watch":"NODE_OPTIONS=\"$NODE_OPTIONS --experimental-vm-modules\" jest --watch","test:coverage":"NODE_OPTIONS=\"$NODE_OPTIONS --experimental-vm-modules\" jest --coverage --no-cache","lint":"eslint src --ext .ts","clean":"rm -rf dist coverage","typecheck":"tsc --noEmit"},"_id":"@bernierllc/email-sender-manager@1.6.0","_integrity":"sha512-7bh86Qs7YUKZhEMK/+GOtCahRomV/opy0Oqo0AdSbPGN8j4E3/q6pNv7o4p3xKg5qiguTyyEgc/RbwLsEC/+JA==","_resolved":"/home/runner/work/tools/tools/packages/core/email-sender-manager/bernierllc-email-sender-manager-1.6.0.tgz","_from":"file:bernierllc-email-sender-manager-1.6.0.tgz","_nodeVersion":"20.20.2","_npmVersion":"11.14.1","dist":{"integrity":"sha512-7bh86Qs7YUKZhEMK/+GOtCahRomV/opy0Oqo0AdSbPGN8j4E3/q6pNv7o4p3xKg5qiguTyyEgc/RbwLsEC/+JA==","shasum":"713317e0aef827dbc2c0b31e6a5a3ea98c6ab0f1","tarball":"https://registry.npmjs.org/@bernierllc/email-sender-manager/-/email-sender-manager-1.6.0.tgz","fileCount":67,"unpackedSize":223318,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIDyMTYSkqgGLqxYkUkOWnuKGzxvrS7ZkBq2ibWMI2bEBAiEAkE43v5RUDzB6BLJJTqP3Vlie24uT7ERcDxmVBzjAF5w="}]},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:6e6c07a5-e562-46a7-b8e1-b1c55fc9362e"}},"directories":{},"maintainers":[{"name":"alikhan410","email":"mczeyo@gmail.com"},{"name":"mkbernier","email":"mkbernier@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/email-sender-manager_1.6.0_1779249888297_0.4766813500802025"},"_hasShrinkwrap":false}},"time":{"created":"2025-10-12T01:13:19.599Z","modified":"2026-05-20T04:04:48.663Z","1.0.1":"2025-10-12T01:13:19.916Z","1.0.2":"2025-10-12T01:15:53.514Z","1.2.0":"2026-01-05T19:45:03.931Z","1.2.1":"2026-03-03T20:22:29.072Z","1.2.2":"2026-03-09T18:33:03.633Z","1.3.0":"2026-03-21T22:11:00.874Z","1.5.0":"2026-05-20T01:39:03.126Z","1.6.0":"2026-05-20T04:04:48.534Z"},"author":{"name":"Bernier LLC"},"license":"UNLICENSED","keywords":["email","sender","configuration","database","verification","sendgrid","mailgun","email-management"],"description":"Database-backed email sender configuration management with provider verification integration","maintainers":[{"name":"alikhan410","email":"mczeyo@gmail.com"},{"name":"mkbernier","email":"mkbernier@gmail.com"}],"readme":"# @bernierllc/email-sender-manager\n\nDatabase-backed email sender configuration management with provider verification integration. Manage, verify, and intelligently select email sender configurations for your applications.\n\n## Installation\n\n```bash\nnpm install @bernierllc/email-sender-manager\n```\n\n## Features\n\n- **Database-Backed Storage**: Persistent sender configurations with transaction support\n- **Provider Integration**: Verify sender configurations with email providers (SendGrid, Mailgun, etc.)\n- **Smart Sender Selection**: Intelligent sender selection based on domain matching, priority, or round-robin strategies\n- **Bootstrap System**: Automatic database schema creation and default sender seeding\n- **Full TypeScript Support**: Complete type definitions with strict mode compliance\n- **Comprehensive Validation**: Email format validation, domain restrictions, and configuration checks\n\n## Quick Start\n\n```typescript\nimport { EmailSenderManager } from '@bernierllc/email-sender-manager';\nimport type { DatabaseAdapter } from '@bernierllc/email-sender-manager';\n\n// Implement your database adapter\nconst databaseAdapter: DatabaseAdapter = {\n  async execute(query: string, params?: unknown[]): Promise<void> {\n    // Your database execute logic\n  },\n  async query<T = unknown>(query: string, params?: unknown[]): Promise<T[]> {\n    // Your database query logic\n  },\n  async queryOne<T = unknown>(query: string, params?: unknown[]): Promise<T | null> {\n    // Your database queryOne logic\n  },\n  async transaction<T>(callback: (adapter: DatabaseAdapter) => Promise<T>): Promise<T> {\n    // Your transaction logic\n  },\n};\n\n// Initialize manager\nconst manager = new EmailSenderManager({\n  database: databaseAdapter,\n  bootstrap: {\n    enabled: true,\n    createTables: true,\n    seedDefaultSenders: true,\n    defaultSenders: [\n      {\n        name: 'Default Sender',\n        fromEmail: 'noreply@example.com',\n        fromName: 'My App',\n        provider: 'sendgrid',\n        priority: 1,\n      },\n    ],\n    environment: 'production',\n  },\n  selection: {\n    strategy: 'domain_match',\n    fallbackToDefault: true,\n    domainMatchingRules: [],\n  },\n});\n\n// Bootstrap database\nawait manager.bootstrapDatabase();\n```\n\n## Core Concepts\n\n### Sender Configuration\n\nA sender configuration represents an email address that can send emails through your application:\n\n```typescript\ninterface SenderConfiguration {\n  id: string;\n  name: string;\n  description?: string;\n  fromEmail: string;\n  fromName: string;\n  replyToEmail?: string;\n  replyToName?: string;\n  provider: string;\n  providerSenderId?: string;\n  providerMetadata?: Record<string, unknown>;\n  isVerified: boolean;\n  verificationStatus: 'pending' | 'verified' | 'failed' | 'expired';\n  lastVerifiedAt?: Date;\n  isDefault: boolean;\n  isActive: boolean;\n  priority: number; // Lower = higher priority\n  allowedDomains?: string[];\n  domain: string;\n  createdAt: Date;\n  updatedAt: Date;\n  createdBy: string;\n  lastModifiedBy: string;\n}\n```\n\n### Provider Integration\n\nProviders verify sender configurations with email service providers:\n\n```typescript\ninterface SenderProviderPlugin {\n  readonly providerId: string;\n  readonly name: string;\n  validateSender(email: string): Promise<ProviderValidationResult>;\n  getVerifiedSenders(): Promise<ProviderSender[]>;\n  syncSender(sender: SenderConfiguration): Promise<SyncResult>;\n  getCapabilities(): string[];\n}\n```\n\n## Usage Examples\n\n### Creating Senders\n\n```typescript\n// Create a new sender\nconst sender = await manager.createSender({\n  name: 'Marketing Team',\n  fromEmail: 'marketing@example.com',\n  fromName: 'Marketing Department',\n  replyToEmail: 'support@example.com',\n  provider: 'sendgrid',\n  priority: 10,\n  allowedDomains: ['example.com', '*.example.com'],\n  createdBy: 'admin-user',\n});\n\nconsole.log(`Created sender: ${sender.id}`);\n```\n\n### Updating Senders\n\n```typescript\n// Update sender configuration\nconst updated = await manager.updateSender(sender.id, {\n  name: 'Updated Name',\n  priority: 5,\n  isActive: true,\n  lastModifiedBy: 'admin-user',\n});\n```\n\n### Listing Senders\n\n```typescript\n// List all active senders\nconst activeSenders = await manager.listSenders({\n  isActive: true,\n  orderBy: 'priority',\n  orderDirection: 'asc',\n});\n\n// List verified senders for a specific provider\nconst verifiedSenders = await manager.listSenders({\n  provider: 'sendgrid',\n  isVerified: true,\n  limit: 10,\n  offset: 0,\n});\n\n// Paginate through results\nconsole.log(`Total: ${activeSenders.total}, Showing: ${activeSenders.items.length}`);\nconsole.log(`Has more: ${activeSenders.hasMore}`);\n```\n\n### Sender Selection\n\n```typescript\n// Select best sender for an email\nconst bestSender = await manager.selectBestSender('user@example.com', {\n  strategy: 'domain_match', // or 'priority' or 'round_robin'\n  allowUnverified: false,\n});\n\nif (bestSender) {\n  console.log(`Using sender: ${bestSender.fromEmail} (priority: ${bestSender.priority})`);\n}\n\n// Select sender for specific provider\nconst sendgridSender = await manager.selectBestSender('user@example.com', {\n  provider: 'sendgrid',\n  strategy: 'priority',\n});\n```\n\n### Provider Verification\n\n```typescript\nimport type { SenderProviderPlugin } from '@bernierllc/email-sender-manager';\n\n// Implement a provider plugin\nclass SendGridProvider implements SenderProviderPlugin {\n  readonly providerId = 'sendgrid';\n  readonly name = 'SendGrid';\n\n  constructor(private apiKey: string) {}\n\n  async validateSender(email: string): Promise<ProviderValidationResult> {\n    // Call SendGrid API to verify sender\n    const verifiedSenders = await this.getVerifiedSenders();\n    const match = verifiedSenders.find((s) => s.email === email);\n\n    return {\n      isVerified: Boolean(match?.isVerified),\n      verificationStatus: match?.verificationStatus || 'not_found',\n      lastChecked: new Date(),\n      metadata: { providerId: match?.id },\n    };\n  }\n\n  async getVerifiedSenders(): Promise<ProviderSender[]> {\n    // Fetch from SendGrid API\n    return [];\n  }\n\n  async syncSender(sender: SenderConfiguration): Promise<SyncResult> {\n    // Sync with SendGrid\n    return { success: true, senderId: sender.id, synced: true };\n  }\n\n  getCapabilities(): string[] {\n    return ['verification', 'sync'];\n  }\n}\n\n// Register provider\nconst provider = new SendGridProvider(process.env.SENDGRID_API_KEY!);\nawait manager.registerProvider(provider);\n\n// Verify a sender\nconst verification = await manager.verifySender(sender.id);\nconsole.log(`Verified: ${verification.isVerified}`);\n```\n\n### Bootstrap Configuration\n\n```typescript\nconst manager = new EmailSenderManager({\n  database: databaseAdapter,\n  bootstrap: {\n    enabled: true,\n    createTables: true,\n    seedDefaultSenders: true,\n    defaultSenders: [\n      {\n        name: 'Default Sender',\n        fromEmail: 'noreply@example.com',\n        fromName: 'My Application',\n        provider: 'sendgrid',\n        priority: 1,\n      },\n      {\n        name: 'Marketing Sender',\n        fromEmail: 'marketing@example.com',\n        fromName: 'Marketing Team',\n        provider: 'sendgrid',\n        priority: 10,\n        allowedDomains: ['example.com'],\n      },\n    ],\n    environment: 'production',\n  },\n});\n\n// Run bootstrap\nconst result = await manager.bootstrapDatabase();\nconsole.log(result.message);\n// Output: \"Bootstrap completed successfully. Tables created: true, Senders seeded: 2\"\n```\n\n## Selection Strategies\n\n### Domain Matching\n\nSelects senders based on domain relationships:\n\n1. **Exact domain match**: `example.com` sender for `user@example.com`\n2. **Subdomain match**: `example.com` sender for `user@app.example.com`\n3. **Allowed domains**: Senders with `allowedDomains` configuration\n4. **Fallback to priority**: If no domain match found\n\n```typescript\nconst sender = await manager.selectBestSender('user@app.example.com', {\n  strategy: 'domain_match',\n});\n```\n\n### Priority-Based\n\nSelects sender with lowest priority number (higher priority):\n\n```typescript\nconst sender = await manager.selectBestSender('user@example.com', {\n  strategy: 'priority',\n});\n```\n\n### Round-Robin\n\nDistributes selections evenly across available senders:\n\n```typescript\nconst sender = await manager.selectBestSender('user@example.com', {\n  strategy: 'round_robin',\n});\n```\n\n## Domain Utilities\n\n```typescript\nimport {\n  extractDomain,\n  isDomainMatch,\n  isValidEmail,\n  getParentDomain,\n  isSubdomainOf,\n} from '@bernierllc/email-sender-manager';\n\n// Extract domain from email\nconst domain = extractDomain('user@example.com'); // \"example.com\"\n\n// Check domain matching with wildcards\nconst matches = isDomainMatch('app.example.com', '*.example.com'); // true\n\n// Validate email format\nconst valid = isValidEmail('user@example.com'); // true\n\n// Get parent domain\nconst parent = getParentDomain('app.example.com'); // \"example.com\"\n\n// Check subdomain relationship\nconst isSub = isSubdomainOf('app.example.com', 'example.com'); // true\n```\n\n## Validation\n\n```typescript\nimport { validateCreateSenderRequest } from '@bernierllc/email-sender-manager';\n\n// Validate sender creation request\nconst validation = validateCreateSenderRequest({\n  name: 'Test Sender',\n  fromEmail: 'test@example.com',\n  fromName: 'Test',\n  provider: 'sendgrid',\n  createdBy: 'admin',\n});\n\nif (validation.errors.length > 0) {\n  console.error('Validation errors:', validation.errors);\n}\n\nif (validation.warnings.length > 0) {\n  console.warn('Validation warnings:', validation.warnings);\n}\n```\n\n## Database Schema\n\nThe package automatically creates the following database schema:\n\n```sql\nCREATE TABLE IF NOT EXISTS email_senders (\n  id VARCHAR(255) PRIMARY KEY,\n  name VARCHAR(255) NOT NULL,\n  description TEXT,\n  from_email VARCHAR(255) NOT NULL UNIQUE,\n  from_name VARCHAR(255) NOT NULL,\n  reply_to_email VARCHAR(255),\n  reply_to_name VARCHAR(255),\n  provider VARCHAR(100) NOT NULL,\n  provider_sender_id VARCHAR(255),\n  provider_metadata JSON,\n  is_verified BOOLEAN DEFAULT FALSE,\n  verification_status VARCHAR(50) DEFAULT 'pending',\n  last_verified_at TIMESTAMP NULL,\n  verification_error TEXT,\n  is_default BOOLEAN DEFAULT FALSE,\n  is_active BOOLEAN DEFAULT TRUE,\n  priority INTEGER DEFAULT 100,\n  allowed_domains JSON,\n  domain VARCHAR(255) NOT NULL,\n  created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,\n  updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,\n  created_by VARCHAR(255),\n  last_modified_by VARCHAR(255),\n  INDEX idx_email_senders_from_email (from_email),\n  INDEX idx_email_senders_domain (domain),\n  INDEX idx_email_senders_provider (provider),\n  INDEX idx_email_senders_active (is_active),\n  INDEX idx_email_senders_default (is_default),\n  INDEX idx_email_senders_priority (priority)\n);\n```\n\n## API Reference\n\n### EmailSenderManager\n\nMain class for managing sender configurations.\n\n#### Constructor\n\n```typescript\nconstructor(config: SenderManagerConfig)\n```\n\n#### Methods\n\n- `bootstrapDatabase(): Promise<BootstrapResult>` - Initialize database and seed default senders\n- `createSender(request: CreateSenderRequest): Promise<SenderConfiguration>` - Create new sender\n- `updateSender(id: string, updates: UpdateSenderRequest): Promise<SenderConfiguration>` - Update existing sender\n- `deleteSender(id: string): Promise<void>` - Delete sender\n- `getSender(id: string): Promise<SenderConfiguration | null>` - Get sender by ID\n- `listSenders(options?: ListSendersOptions): Promise<PaginatedResult<SenderConfiguration>>` - List senders with filters\n- `validateSender(id: string): Promise<SenderValidationResult>` - Validate sender configuration\n- `verifySender(id: string, provider?: string): Promise<VerificationResult>` - Verify sender with provider\n- `selectBestSender(fromEmail: string, options?: SelectionOptions): Promise<SenderConfiguration | null>` - Select optimal sender\n- `getDefaultSender(provider?: string): Promise<SenderConfiguration | null>` - Get default sender\n- `getSendersByDomain(domain: string): Promise<SenderConfiguration[]>` - Get senders for domain\n- `registerProvider(provider: SenderProviderPlugin): Promise<void>` - Register provider plugin\n- `syncWithProviders(): Promise<SyncResult[]>` - Sync all senders with providers\n- `cleanupInactiveSenders(): Promise<CleanupResult>` - Remove inactive senders\n\n## Integration Status\n\n- **Logger**: Not applicable - Core utility package with database-backed state (logging handled at service layer)\n- **Docs-Suite**: Ready - Comprehensive API documentation with TypeDoc comments exported\n- **NeverHub**: Not applicable - Core utility package focused on email sender configuration management. NeverHub integration is appropriate at the service layer where sender selection events and metrics would be published to the event bus. This package provides the foundational primitives for sender management without environment-dependent behavior.\n\n## Testing\n\nThe package includes comprehensive tests with 90%+ coverage:\n\n```bash\n# Run tests\nnpm test\n\n# Run tests with coverage\nnpm run test:coverage\n\n# Run tests once\nnpm run test:run\n```\n\n## License\n\nCopyright (c) 2025 Bernier LLC\n\nThis file is licensed to the client under a limited-use license.\nThe client may use and modify this code *only within the scope of the project it was delivered for*.\nRedistribution or use in other products or commercial offerings is not permitted without written consent from Bernier LLC.\n\n## See Also\n\n- [@bernierllc/email-sender](https://www.npmjs.com/package/@bernierllc/email-sender) - Email sending abstraction\n- [@bernierllc/logger](https://www.npmjs.com/package/@bernierllc/logger) - Logging utilities\n- [@bernierllc/retry-policy](https://www.npmjs.com/package/@bernierllc/retry-policy) - Retry logic utilities\n","readmeFilename":"README.md"}