{"_id":"@activescott/auth-provider-email","_rev":"16-c90f93b518992068f054154fa10c1d31","name":"@activescott/auth-provider-email","dist-tags":{"latest":"3.2.2"},"versions":{"0.1.2":{"name":"@activescott/auth-provider-email","version":"0.1.2","keywords":["auth","authentication","magic-link","email","nodemailer"],"author":{"name":"Scott Willeke"},"license":"MIT","_id":"@activescott/auth-provider-email@0.1.2","maintainers":[{"name":"activescott","email":"scott@willeke.com"}],"homepage":"https://github.com/activescott/auth#readme","bugs":{"url":"https://github.com/activescott/auth/issues"},"dist":{"shasum":"1a5fa933aafcdad5ca7ad9332c53199a07fbddce","tarball":"https://registry.npmjs.org/@activescott/auth-provider-email/-/auth-provider-email-0.1.2.tgz","fileCount":25,"integrity":"sha512-pihXCg90J5L6E551Th4hxD3HbQKM36omIJF5BMhYt7ZC9DmrqSSkGG9VVXadhIp7Ka+lpG6RQ8d44KOiqBE+YQ==","signatures":[{"sig":"MEUCIB6tokMWmWzAeElYLi5fNzqil6P9bM7K1p22+Q9UwLWFAiEAoaRL/oajuxYGsIL+Ew9drNbQ3Q5wnfChH2Qcor/GBWk=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":38816},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"gitHead":"5a64c5f74cb44b53a723a3c507c43ee46ff256e5","scripts":{"dev":"tsc --watch","test":"vitest run","build":"tsc","typecheck":"tsc --noEmit","prepublishOnly":"npm run build"},"_npmUser":{"name":"activescott","email":"scott@willeke.com"},"repository":{"url":"git+https://github.com/activescott/auth.git","type":"git","directory":"packages/auth-provider-email"},"_npmVersion":"10.9.4","description":"Email magic link provider for @activescott/auth","directories":{},"_nodeVersion":"22.22.1","dependencies":{"nodemailer":"^7.0.12"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^4.0.16","typescript":"^5.7.2","@types/node":"^22","@activescott/auth":"*","@types/nodemailer":"^7.0.9"},"peerDependencies":{"@activescott/auth":"^0.1.1"},"_npmOperationalInternal":{"tmp":"tmp/auth-provider-email_0.1.2_1773687667522_0.07091463333285453","host":"s3://npm-registry-packages-npm-production"}},"0.1.4":{"name":"@activescott/auth-provider-email","version":"0.1.4","keywords":["auth","authentication","magic-link","email","nodemailer"],"author":{"name":"Scott Willeke"},"license":"MIT","_id":"@activescott/auth-provider-email@0.1.4","maintainers":[{"name":"activescott","email":"scott@willeke.com"}],"homepage":"https://github.com/activescott/auth#readme","bugs":{"url":"https://github.com/activescott/auth/issues"},"dist":{"shasum":"9c968e6695bbb05c2f8382cadee22f21b15afc70","tarball":"https://registry.npmjs.org/@activescott/auth-provider-email/-/auth-provider-email-0.1.4.tgz","fileCount":27,"integrity":"sha512-LqfdeUCyusnB7ej09dh0r0NM2zM3ly3hx9BL4V/MkiqW3KKWY0CeiRexI5qSVLhZucdpHeDlRSBGzp+LdYbNjA==","signatures":[{"sig":"MEYCIQCAMQsWRGr5QL54dV0QERRKnKCaesOFtgtZ17TcAObQpwIhANZ1XPLLpMP5HoWWBsytCfTmA5kcgrZxndSTs1rtrQH+","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@activescott%2fauth-provider-email@0.1.4","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":43683},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"gitHead":"a6c9490bc1c9257189044f5bd9679791e3c91ee2","scripts":{"dev":"tsc --watch","test":"vitest run","build":"tsc","typecheck":"tsc --noEmit","prepublishOnly":"npm run build"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:4a47f045-f8ee-4487-8416-853c1b519877"}},"repository":{"url":"git+https://github.com/activescott/auth.git","type":"git","directory":"packages/auth-provider-email"},"_npmVersion":"11.11.0","description":"Email magic link provider for @activescott/auth","directories":{},"_nodeVersion":"24.14.1","dependencies":{"nodemailer":"^7.0.12"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^4.0.16","typescript":"^5.7.2","@types/node":"^22","@activescott/auth":"*","@types/nodemailer":"^7.0.9"},"peerDependencies":{"@activescott/auth":"^0.1.1"},"_npmOperationalInternal":{"tmp":"tmp/auth-provider-email_0.1.4_1778342284009_0.030959151250735673","host":"s3://npm-registry-packages-npm-production"}},"0.1.5":{"name":"@activescott/auth-provider-email","version":"0.1.5","keywords":["auth","authentication","magic-link","email","nodemailer"],"author":{"name":"Scott Willeke"},"license":"MIT","_id":"@activescott/auth-provider-email@0.1.5","maintainers":[{"name":"activescott","email":"scott@willeke.com"}],"homepage":"https://github.com/activescott/auth#readme","bugs":{"url":"https://github.com/activescott/auth/issues"},"dist":{"shasum":"b6a5c5f0b1c914902e6e9229a2d40bf76372b325","tarball":"https://registry.npmjs.org/@activescott/auth-provider-email/-/auth-provider-email-0.1.5.tgz","fileCount":27,"integrity":"sha512-7e7d5iycnbuniBseu0nUjWZS6atTkCt4IjfKI46KBQ429A5KSHQ+pKnxfraUAH8xvMyhEyq9PKlG27hLa0EOkA==","signatures":[{"sig":"MEYCIQCsziXz099BFklkhnNbnkP9Ygy0clnWhke4fL9aKXPVCQIhAOtGTkFgwTQLZkL6FR1gKvYy8hKM0MKU7YvzRwv2jYqm","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@activescott%2fauth-provider-email@0.1.5","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":43682},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"gitHead":"0975d68c8bde76ade7360eaf513296b41818a41f","scripts":{"dev":"tsc --watch","test":"vitest run","build":"tsc","typecheck":"tsc --noEmit","prepublishOnly":"npm run build"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:4a47f045-f8ee-4487-8416-853c1b519877"}},"repository":{"url":"git+https://github.com/activescott/auth.git","type":"git","directory":"packages/auth-provider-email"},"_npmVersion":"11.12.1","description":"Email magic link provider for @activescott/auth","directories":{},"_nodeVersion":"24.15.0","dependencies":{"nodemailer":"^8.0.7"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^4.0.16","typescript":"^5.7.2","@types/node":"^22","@activescott/auth":"*","@types/nodemailer":"^8.0.0"},"peerDependencies":{"@activescott/auth":"^0.1.1"},"_npmOperationalInternal":{"tmp":"tmp/auth-provider-email_0.1.5_1779297982516_0.5854686464892369","host":"s3://npm-registry-packages-npm-production"}},"1.0.0":{"name":"@activescott/auth-provider-email","version":"1.0.0","keywords":["auth","authentication","magic-link","email","nodemailer"],"author":{"name":"Scott Willeke"},"license":"MIT","_id":"@activescott/auth-provider-email@1.0.0","maintainers":[{"name":"activescott","email":"scott@willeke.com"}],"homepage":"https://github.com/activescott/auth#readme","bugs":{"url":"https://github.com/activescott/auth/issues"},"dist":{"shasum":"755d2df621ad0667110acf3ec5b3394ee2ddbf70","tarball":"https://registry.npmjs.org/@activescott/auth-provider-email/-/auth-provider-email-1.0.0.tgz","fileCount":27,"integrity":"sha512-/sciIDEijoZ+TjNbyhBe94cBCYMG3aylOjX28ZHpnG+pJer6R5dkdBbXW7yMiWDd7HJ/UFXhEmt8DPsye0UFpw==","signatures":[{"sig":"MEQCIDUgQeMq2YjfnhZC/WY2J/RMY/LfYlgIS9kHvMb4niMdAiBjAkKooKxRNpVSBwpgj1ZsqZxse6QSvPlKAS7t8uLYiQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@activescott%2fauth-provider-email@1.0.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":69820},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"gitHead":"f36371d391dccd803c32ef2a75600e9b4a9e2111","scripts":{"dev":"tsc --watch","test":"vitest run","build":"tsc","typecheck":"tsc --noEmit","prepublishOnly":"npm run build"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:4a47f045-f8ee-4487-8416-853c1b519877"}},"repository":{"url":"git+https://github.com/activescott/auth.git","type":"git","directory":"packages/auth-provider-email"},"_npmVersion":"11.16.0","description":"Email magic link provider for @activescott/auth","directories":{},"_nodeVersion":"24.18.0","dependencies":{"nodemailer":"^8.0.7"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^4.0.16","typescript":"^5.7.2","@types/node":"^22","@activescott/auth":"*","@types/nodemailer":"^8.0.0"},"peerDependencies":{"@activescott/auth":"^0.1.1"},"_npmOperationalInternal":{"tmp":"tmp/auth-provider-email_1.0.0_1785522250323_0.4666888838032168","host":"s3://npm-registry-packages-npm-production"}},"1.0.1":{"name":"@activescott/auth-provider-email","version":"1.0.1","keywords":["auth","authentication","magic-link","email","nodemailer"],"author":{"name":"Scott Willeke"},"license":"MIT","_id":"@activescott/auth-provider-email@1.0.1","maintainers":[{"name":"activescott","email":"scott@willeke.com"}],"homepage":"https://github.com/activescott/auth#readme","bugs":{"url":"https://github.com/activescott/auth/issues"},"dist":{"shasum":"81859ac949fd9db6a45a11870a6ebcf1f6a83cc7","tarball":"https://registry.npmjs.org/@activescott/auth-provider-email/-/auth-provider-email-1.0.1.tgz","fileCount":27,"integrity":"sha512-o+3kEvps9cr/Is9k8rxUYG+6ydVeaupSow6WdBT7WImfWeJLY4rgbxux3jDmH9o/ahErG3u7vOHu3f8FPUyu7A==","signatures":[{"sig":"MEYCIQCFFrKMuW2CMpshGe3mdgn7IB6TU6XU74u1uaxEvwr+nwIhAJfLFypEJ8XspXyUIOt2dkdnUgwkK+nQLhEQnkccm7mC","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":58590},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"gitHead":"9405943132469bb2401e9ef502a324bc4906f4e4","scripts":{"dev":"tsc --watch","test":"vitest run","build":"tsc","typecheck":"tsc --noEmit","prepublishOnly":"npm run build"},"_npmUser":{"name":"activescott","email":"scott@willeke.com"},"repository":{"url":"git+https://github.com/activescott/auth.git","type":"git","directory":"packages/auth-provider-email"},"_npmVersion":"10.9.4","description":"Email magic link provider for @activescott/auth","directories":{},"_nodeVersion":"22.21.1","dependencies":{"nodemailer":"^8.0.7"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^4.0.16","typescript":"^5.7.2","@types/node":"^22","@activescott/auth":"*","@types/nodemailer":"^8.0.0"},"peerDependencies":{"@activescott/auth":"^2.1.0"},"_npmOperationalInternal":{"tmp":"tmp/auth-provider-email_1.0.1_1785610699214_0.2578764695724196","host":"s3://npm-registry-packages-npm-production"}},"1.0.2":{"name":"@activescott/auth-provider-email","version":"1.0.2","keywords":["auth","authentication","magic-link","email","nodemailer"],"author":{"name":"Scott Willeke"},"license":"MIT","_id":"@activescott/auth-provider-email@1.0.2","maintainers":[{"name":"activescott","email":"scott@willeke.com"}],"homepage":"https://github.com/activescott/auth#readme","bugs":{"url":"https://github.com/activescott/auth/issues"},"dist":{"shasum":"e47481b17fa9134290c990b52ce3d54b3dba266f","tarball":"https://registry.npmjs.org/@activescott/auth-provider-email/-/auth-provider-email-1.0.2.tgz","fileCount":27,"integrity":"sha512-75sBxhyb8GJHE+vtQwj9wQFLX3zMyydeq2KLZ0z5nSYLrTucwBpwmNuDlHkWidmlWVwTfaxbfiizzmkp+iXkKw==","signatures":[{"sig":"MEUCIQDbACQOAC6ZfAyhDaMyRMLr7BSPhdjyYLXt8wExc3RZ0QIgCfuKrwMri42/f4KJdessjmEFWczC6cd0m6YA6mVffFc=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@activescott%2fauth-provider-email@1.0.2","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":58590},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"gitHead":"248dd93ce638d887a6732d0aca0c30a2aba866f8","scripts":{"dev":"tsc --watch","test":"vitest run","build":"tsc","typecheck":"tsc --noEmit","prepublishOnly":"npm run build"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:4a47f045-f8ee-4487-8416-853c1b519877"}},"repository":{"url":"git+https://github.com/activescott/auth.git","type":"git","directory":"packages/auth-provider-email"},"_npmVersion":"11.16.0","description":"Email magic link provider for @activescott/auth","directories":{},"_nodeVersion":"24.18.0","dependencies":{"nodemailer":"^9.0.3"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^4.0.16","typescript":"^5.7.2","@types/node":"^22","@activescott/auth":"*","@types/nodemailer":"^8.0.0"},"peerDependencies":{"@activescott/auth":"^3.0.0"},"_npmOperationalInternal":{"tmp":"tmp/auth-provider-email_1.0.2_1785650602264_0.49278832187881694","host":"s3://npm-registry-packages-npm-production"}},"1.0.3":{"name":"@activescott/auth-provider-email","version":"1.0.3","keywords":["auth","authentication","magic-link","email","nodemailer"],"author":{"name":"Scott Willeke"},"license":"MIT","_id":"@activescott/auth-provider-email@1.0.3","maintainers":[{"name":"activescott","email":"scott@willeke.com"}],"homepage":"https://github.com/activescott/auth#readme","bugs":{"url":"https://github.com/activescott/auth/issues"},"dist":{"shasum":"5880ede4ab717c1ca2920b767d88f83be872a636","tarball":"https://registry.npmjs.org/@activescott/auth-provider-email/-/auth-provider-email-1.0.3.tgz","fileCount":27,"integrity":"sha512-7ZBIqIIV2wIglp+1Icoyxt0QW7WEh0g6ypi0ySSRh7jG14xyqcO67odamhFhxS8gRDafk3RTy37w9FRqSDbjJQ==","signatures":[{"sig":"MEQCID/BbwjrzW9dODtIEkpdHu8K4cjwz3Oh3o4VEmmTSHyGAiBqrXkibnM5WW0J/SQv4cSJlw4duMy3xQH1whpSYYGJFQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@activescott%2fauth-provider-email@1.0.3","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":58766},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"gitHead":"7f88f666cbdf9b9562c66db181b0aef70be2a6fe","scripts":{"dev":"tsc --watch","test":"vitest run","build":"tsc","typecheck":"tsc --noEmit","prepublishOnly":"npm run build"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:4a47f045-f8ee-4487-8416-853c1b519877"}},"repository":{"url":"git+https://github.com/activescott/auth.git","type":"git","directory":"packages/auth-provider-email"},"_npmVersion":"11.16.0","description":"Email magic link provider for @activescott/auth","directories":{},"_nodeVersion":"24.18.0","dependencies":{"nodemailer":"^9.0.3"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^4.0.16","typescript":"^5.7.2","@types/node":"^22","@activescott/auth":"*","@types/nodemailer":"^8.0.0"},"peerDependencies":{"@activescott/auth":"^3.0.0"},"_npmOperationalInternal":{"tmp":"tmp/auth-provider-email_1.0.3_1786000569888_0.6960608634117686","host":"s3://npm-registry-packages-npm-production"}},"1.1.0":{"name":"@activescott/auth-provider-email","version":"1.1.0","keywords":["auth","authentication","magic-link","email","nodemailer"],"author":{"name":"Scott Willeke"},"license":"MIT","_id":"@activescott/auth-provider-email@1.1.0","maintainers":[{"name":"activescott","email":"scott@willeke.com"}],"homepage":"https://github.com/activescott/auth#readme","bugs":{"url":"https://github.com/activescott/auth/issues"},"dist":{"shasum":"cc19242c2890619b10bea3534ef561f0583073bb","tarball":"https://registry.npmjs.org/@activescott/auth-provider-email/-/auth-provider-email-1.1.0.tgz","fileCount":31,"integrity":"sha512-sexOyFdASEtAFB4rFEIV3CnlIKIi7kIkNGMjdLnjpka7H/YGrjGbiqrDnJI9+NF9EY2micJKdXWhqrFiA2N1nw==","signatures":[{"sig":"MEYCIQD07U5gl6Ii77ReA6z5fBPPvG7OtXifUJlYFlrXoyEjOgIhAPtFg4ZFk0Rc8uukR5nY7DIKr9U+wkVrhAiL9n1nUoTe","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@activescott%2fauth-provider-email@1.1.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":64110},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./testing":{"types":"./dist/testing.d.ts","import":"./dist/testing.js"}},"gitHead":"ae72e7838b7ebfc33e5bb06881d150e8c7422f27","scripts":{"dev":"tsc --watch","test":"vitest run","build":"tsc","typecheck":"tsc --noEmit","prepublishOnly":"npm run build"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:4a47f045-f8ee-4487-8416-853c1b519877"}},"repository":{"url":"git+https://github.com/activescott/auth.git","type":"git","directory":"packages/auth-provider-email"},"_npmVersion":"11.16.0","description":"Email magic link provider for @activescott/auth","directories":{},"_nodeVersion":"24.18.0","dependencies":{"nodemailer":"^9.0.3"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^4.0.16","typescript":"^5.7.2","@types/node":"^22","@activescott/auth":"*","@types/nodemailer":"^8.0.0"},"peerDependencies":{"@activescott/auth":"^3.0.0"},"_npmOperationalInternal":{"tmp":"tmp/auth-provider-email_1.1.0_1786062052400_0.3511742499569126","host":"s3://npm-registry-packages-npm-production"}},"2.0.0":{"name":"@activescott/auth-provider-email","version":"2.0.0","keywords":["auth","authentication","magic-link","email","nodemailer"],"author":{"name":"Scott Willeke"},"license":"MIT","_id":"@activescott/auth-provider-email@2.0.0","maintainers":[{"name":"activescott","email":"scott@willeke.com"}],"homepage":"https://github.com/activescott/auth#readme","bugs":{"url":"https://github.com/activescott/auth/issues"},"dist":{"shasum":"dc43ad135301b1e14f5ea1aa9fdb881ce1fc3fc4","tarball":"https://registry.npmjs.org/@activescott/auth-provider-email/-/auth-provider-email-2.0.0.tgz","fileCount":31,"integrity":"sha512-lrnw2YMNv3W+kgW0N975zL+9+fhz/G/NAmOGQBAst04I9/vR/L4+j0uvgmc7fjCpxLztHW60AD4y2KYzd3rgCQ==","signatures":[{"sig":"MEQCIFDqN6dAal4lWrkL5fdeCfAIetzNyiKoJNvTtNdE+6RhAiAMe60zzjWMZtFaRTkIW75fbGlaPY5DQzhAteBbdLjsJA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@activescott%2fauth-provider-email@2.0.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":66581},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./testing":{"types":"./dist/testing.d.ts","import":"./dist/testing.js"}},"gitHead":"843a5ec640514b2cda1ca6de8c63eec0ef9a69ed","scripts":{"dev":"tsc --watch","test":"vitest run","build":"tsc","typecheck":"tsc --noEmit","prepublishOnly":"npm run build"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:4a47f045-f8ee-4487-8416-853c1b519877"}},"repository":{"url":"git+https://github.com/activescott/auth.git","type":"git","directory":"packages/auth-provider-email"},"_npmVersion":"11.16.0","description":"Email magic link provider for @activescott/auth","directories":{},"_nodeVersion":"24.18.0","dependencies":{"nodemailer":"^9.0.3"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^4.0.16","typescript":"^5.7.2","@types/node":"^22","@activescott/auth":"*","@types/nodemailer":"^8.0.0"},"peerDependencies":{"@activescott/auth":"^4.0.0"},"_npmOperationalInternal":{"tmp":"tmp/auth-provider-email_2.0.0_1786208137420_0.48706536581783744","host":"s3://npm-registry-packages-npm-production"}},"2.1.0":{"name":"@activescott/auth-provider-email","version":"2.1.0","keywords":["auth","authentication","magic-link","email","nodemailer"],"author":{"name":"Scott Willeke"},"license":"MIT","_id":"@activescott/auth-provider-email@2.1.0","maintainers":[{"name":"activescott","email":"scott@willeke.com"}],"homepage":"https://github.com/activescott/auth#readme","bugs":{"url":"https://github.com/activescott/auth/issues"},"dist":{"shasum":"fe9190e308359b679a5797fd12416e52ef1e8cc3","tarball":"https://registry.npmjs.org/@activescott/auth-provider-email/-/auth-provider-email-2.1.0.tgz","fileCount":31,"integrity":"sha512-2lSXp141ZUpDu3Xz0LD1vcv04vyGS13AyhOtlSOCzcygx9OiFYnd+i0xG00TGaKXGSD+wMu1pp8gmS2u+OZe8Q==","signatures":[{"sig":"MEYCIQCFpMKNXETkdvMAauLVL4+W4RUnhOBwDTyCFNUXSsk3wwIhANEIY5YCoW8SVGhNtCLpjVtvC0L9akLmPjD1zsusNUrz","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@activescott%2fauth-provider-email@2.1.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":70246},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./testing":{"types":"./dist/testing.d.ts","import":"./dist/testing.js"}},"gitHead":"a1933ba2887884db3a1437db58c8fa323b6a32c2","scripts":{"dev":"tsc --watch","test":"vitest run","build":"tsc","typecheck":"tsc --noEmit","prepublishOnly":"npm run build"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:4a47f045-f8ee-4487-8416-853c1b519877"}},"repository":{"url":"git+https://github.com/activescott/auth.git","type":"git","directory":"packages/auth-provider-email"},"_npmVersion":"11.16.0","description":"Email magic link provider for @activescott/auth","directories":{},"_nodeVersion":"24.18.0","dependencies":{"nodemailer":"^9.0.3"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^4.0.16","typescript":"^5.7.2","@types/node":"^22","@activescott/auth":"*","@types/nodemailer":"^8.0.0"},"peerDependencies":{"@activescott/auth":"^4.0.0"},"_npmOperationalInternal":{"tmp":"tmp/auth-provider-email_2.1.0_1786467131939_0.3671143964940353","host":"s3://npm-registry-packages-npm-production"}},"3.0.0":{"name":"@activescott/auth-provider-email","version":"3.0.0","keywords":["auth","authentication","magic-link","email","nodemailer"],"author":{"name":"Scott Willeke"},"license":"MIT","_id":"@activescott/auth-provider-email@3.0.0","maintainers":[{"name":"activescott","email":"scott@willeke.com"}],"homepage":"https://github.com/activescott/auth#readme","bugs":{"url":"https://github.com/activescott/auth/issues"},"dist":{"shasum":"4294b7b364b680bffde993f92f5b515857030a55","tarball":"https://registry.npmjs.org/@activescott/auth-provider-email/-/auth-provider-email-3.0.0.tgz","fileCount":31,"integrity":"sha512-D0qHRWVka2ylVjpPWXuz2dRvwcXdzPnxbdQl9B2It1wcXxGEr8vFh6diREEjvRPsvZWDGJWybWet+f2AiIlzQw==","signatures":[{"sig":"MEQCIG71l+tll2ooHm/BcyV+Oc4m5jRbr3fY0FdPqgqbxILPAiAWq7PNvpjqHpLaxYrAQEMscIDLkfWvQ7x2iQECfLPIUg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@activescott%2fauth-provider-email@3.0.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":69593},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./testing":{"types":"./dist/testing.d.ts","import":"./dist/testing.js"}},"gitHead":"f52acc55d81da8a0b3f8cbe8314f9b65ac02bc9c","scripts":{"dev":"tsc --watch","test":"vitest run","build":"tsc","typecheck":"tsc --noEmit","prepublishOnly":"npm run build"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:4a47f045-f8ee-4487-8416-853c1b519877"}},"repository":{"url":"git+https://github.com/activescott/auth.git","type":"git","directory":"packages/auth-provider-email"},"_npmVersion":"11.16.0","description":"Email magic link provider for @activescott/auth","directories":{},"_nodeVersion":"24.18.0","dependencies":{"nodemailer":"^9.0.3"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^4.0.16","typescript":"^5.7.2","@types/node":"^22","@activescott/auth":"*","@types/nodemailer":"^8.0.0"},"peerDependencies":{"@activescott/auth":"^5.0.0"},"_npmOperationalInternal":{"tmp":"tmp/auth-provider-email_3.0.0_1786467602574_0.34639592851470646","host":"s3://npm-registry-packages-npm-production"}},"3.1.0":{"name":"@activescott/auth-provider-email","version":"3.1.0","keywords":["auth","authentication","magic-link","email","nodemailer"],"author":{"name":"Scott Willeke"},"license":"MIT","_id":"@activescott/auth-provider-email@3.1.0","maintainers":[{"name":"activescott","email":"scott@willeke.com"}],"homepage":"https://github.com/activescott/auth#readme","bugs":{"url":"https://github.com/activescott/auth/issues"},"dist":{"shasum":"9e2b05d8cad37c85826c1e5f803a638e253d6b85","tarball":"https://registry.npmjs.org/@activescott/auth-provider-email/-/auth-provider-email-3.1.0.tgz","fileCount":31,"integrity":"sha512-Ezu9w0t/ZSNlnUoWn4knGemjlM1nopJOUX0M/mPPkrVU8ZalRUbTNAK2y2pXTvFi4Vx8TYuf9sJT4kktcp8CXA==","signatures":[{"sig":"MEYCIQC02BxKx/1fpDjEZTcfS+Y2/oPECmXCwNHZOp35ayh2GgIhAO/0GDizus6iVipehHncrKicVP5bt0wqEOaa+/n2nIdM","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@activescott%2fauth-provider-email@3.1.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":72641},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./testing":{"types":"./dist/testing.d.ts","import":"./dist/testing.js"}},"gitHead":"30302835f423bdae7f5b07ab84a51235844caa25","scripts":{"dev":"tsc --watch","test":"vitest run","build":"tsc","typecheck":"tsc --noEmit","prepublishOnly":"npm run build"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:4a47f045-f8ee-4487-8416-853c1b519877"}},"repository":{"url":"git+https://github.com/activescott/auth.git","type":"git","directory":"packages/auth-provider-email"},"_npmVersion":"11.17.0","description":"Email magic link provider for @activescott/auth","directories":{},"_nodeVersion":"24.19.0","dependencies":{"nodemailer":"^9.0.3"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^4.0.16","typescript":"^5.7.2","@types/node":"^22","@activescott/auth":"*","@types/nodemailer":"^8.0.0"},"peerDependencies":{"@activescott/auth":"^5.0.0"},"_npmOperationalInternal":{"tmp":"tmp/auth-provider-email_3.1.0_1786477661691_0.923128730479597","host":"s3://npm-registry-packages-npm-production"}},"3.1.1":{"name":"@activescott/auth-provider-email","version":"3.1.1","keywords":["auth","authentication","magic-link","email","nodemailer"],"author":{"name":"Scott Willeke"},"license":"MIT","_id":"@activescott/auth-provider-email@3.1.1","maintainers":[{"name":"activescott","email":"scott@willeke.com"}],"homepage":"https://github.com/activescott/auth#readme","bugs":{"url":"https://github.com/activescott/auth/issues"},"dist":{"shasum":"a4d7a431e09ef5f263a3cfe13bcebd5d7ae110a1","tarball":"https://registry.npmjs.org/@activescott/auth-provider-email/-/auth-provider-email-3.1.1.tgz","fileCount":31,"integrity":"sha512-pM2R0q8/6rVDgVrDqjzwI6ktrTg5LgGlL6KNHgp+CKKm+c/ScEaiEvvTILg6Q11nf6YQgjlOSLyxeqaGFT3W4w==","signatures":[{"sig":"MEUCIQD8+u+juBbyvhIPGoWPLdOUYZ7B7AqSivao2ZivVdg26AIgHepGJxJ7K4xBMEttUKaMQiPpCQT4lspWnn7DUmK5tGY=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEQCIBovJJANf79IX83HlrFvfMVFDhg1t2CZudjU/CvnuTpbAiAK1KaFwp6bBSk3BSCUQ9jSqKABsKOXeR3DcnubCjYICw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@activescott%2fauth-provider-email@3.1.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":72641},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./testing":{"types":"./dist/testing.d.ts","import":"./dist/testing.js"}},"gitHead":"ec339afc5f00cf9e780ecdad38ba3faab07eba3f","scripts":{"dev":"tsc --watch","test":"vitest run","build":"tsc","typecheck":"tsc --noEmit","prepublishOnly":"npm run build"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:4a47f045-f8ee-4487-8416-853c1b519877"}},"repository":{"url":"git+https://github.com/activescott/auth.git","type":"git","directory":"packages/auth-provider-email"},"_npmVersion":"11.19.0","description":"Email magic link provider for @activescott/auth","directories":{},"_nodeVersion":"24.20.0","dependencies":{"nodemailer":"^9.1.1"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^4.1.11","typescript":"^5.7.2","@types/node":"^22","@activescott/auth":"*","@types/nodemailer":"^8.0.0"},"peerDependencies":{"@activescott/auth":"^5.0.0"},"_npmOperationalInternal":{"tmp":"tmp/auth-provider-email_3.1.1_1789713439855_0.24309564543165885","host":"s3://npm-registry-packages-npm-production"}},"3.2.0":{"name":"@activescott/auth-provider-email","version":"3.2.0","keywords":["auth","authentication","magic-link","email","nodemailer"],"author":{"name":"Scott Willeke"},"license":"MIT","_id":"@activescott/auth-provider-email@3.2.0","maintainers":[{"name":"activescott","email":"scott@willeke.com"}],"homepage":"https://github.com/activescott/auth#readme","bugs":{"url":"https://github.com/activescott/auth/issues"},"dist":{"shasum":"75ceff7ef0cd3476a36d1d5056779fd027a74225","tarball":"https://registry.npmjs.org/@activescott/auth-provider-email/-/auth-provider-email-3.2.0.tgz","fileCount":31,"integrity":"sha512-c11mkIW54Mhe25qQk7GChGi0kngGXW+bmELBtg9+SD/VlGW0XWCZtLhTL80+XI2bFxlqJ5tDX7isXzGdN0VqGQ==","signatures":[{"sig":"MEQCIDG6696GCwph6KG9eqL/7FSqXHUWNsFV7giDmTzd61IWAiA4O9B0ds22vhcUR3CsXcJoBe/Z6EphCcZovAFt9npfZw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEYCIQDfWvQk8kq2pckVhdQrFSajzlLy2Vd9E8wVaOgaSELKygIhAMezejEVwRbGVPpkfqxI3hldjmNl4vQzC4vsRQpVHe+V","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@activescott%2fauth-provider-email@3.2.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":73559},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./testing":{"types":"./dist/testing.d.ts","import":"./dist/testing.js"}},"gitHead":"4a5a69387f1b9f5148cae5735c125ab0f23577f0","scripts":{"dev":"tsc --watch","test":"vitest run","build":"tsc","typecheck":"tsc --noEmit","prepublishOnly":"npm run build"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:4a47f045-f8ee-4487-8416-853c1b519877"}},"repository":{"url":"git+https://github.com/activescott/auth.git","type":"git","directory":"packages/auth-provider-email"},"_npmVersion":"11.19.0","description":"Email magic link provider for @activescott/auth","directories":{},"_nodeVersion":"24.20.0","dependencies":{"nodemailer":"^9.1.1"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^4.1.11","typescript":"^5.7.2","@types/node":"^22","@activescott/auth":"*","@types/nodemailer":"^8.0.0"},"peerDependencies":{"@activescott/auth":"^5.0.1"},"_npmOperationalInternal":{"tmp":"tmp/auth-provider-email_3.2.0_1789757219932_0.9194869214398194","host":"s3://npm-registry-packages-npm-production"}},"3.2.1":{"name":"@activescott/auth-provider-email","version":"3.2.1","keywords":["auth","authentication","magic-link","email","nodemailer"],"author":{"name":"Scott Willeke"},"license":"MIT","_id":"@activescott/auth-provider-email@3.2.1","maintainers":[{"name":"activescott","email":"scott@willeke.com"}],"homepage":"https://github.com/activescott/auth#readme","bugs":{"url":"https://github.com/activescott/auth/issues"},"dist":{"shasum":"dc68796d61ac3b6fd9841f4e0aa28481765970be","tarball":"https://registry.npmjs.org/@activescott/auth-provider-email/-/auth-provider-email-3.2.1.tgz","fileCount":31,"integrity":"sha512-1virZpOykoqbqGRiuxaNkh98xeFKKll2DlGr0GGc+utFTYxk+Aau57v9zmlBLNfgpEws1jZEyObzagtqCcsbsQ==","signatures":[{"sig":"MEUCIGjvehtCprg4CIFYAMlw91CRWBsgHDnYB57S86Uk/gflAiEA8iLiObYD0comjWGLCainBN5M5Zi+rLWqijqQrZ8iMzE=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIQCa36wi0WDRFm1dN/HLCX6E5hsBz58nnr0AEiRyp37m8AIgKs8A2WQznTEX3D7l+6osTKwLyL79oPOAnYEuhSPnwwo=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@activescott%2fauth-provider-email@3.2.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":75092},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./testing":{"types":"./dist/testing.d.ts","import":"./dist/testing.js"}},"gitHead":"96d71a989ec2b073bbdfb9a7d6f365b8c71b8d1f","scripts":{"dev":"tsc --watch","test":"vitest run","build":"tsc","typecheck":"tsc --noEmit","prepublishOnly":"npm run build"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:4a47f045-f8ee-4487-8416-853c1b519877"}},"repository":{"url":"git+https://github.com/activescott/auth.git","type":"git","directory":"packages/auth-provider-email"},"_npmVersion":"11.19.0","description":"Email magic link provider for @activescott/auth","directories":{},"_nodeVersion":"24.20.0","dependencies":{"nodemailer":"^9.1.1"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^4.1.11","typescript":"^5.7.2","@types/node":"^22","@activescott/auth":"*","@types/nodemailer":"^8.0.0"},"peerDependencies":{"@activescott/auth":"^5.0.1"},"_npmOperationalInternal":{"tmp":"tmp/auth-provider-email_3.2.1_1789780347765_0.9243428276517465","host":"s3://npm-registry-packages-npm-production"}},"3.2.2":{"_id":"@activescott/auth-provider-email@3.2.2","bugs":{"url":"https://github.com/activescott/auth/issues"},"dist":{"shasum":"462533ea46b1f4a8b167c724f96ed3321a0198d3","tarball":"https://registry.npmjs.org/@activescott/auth-provider-email/-/auth-provider-email-3.2.2.tgz","fileCount":31,"integrity":"sha512-lNcGE2lZoLq6zjTHC1rgMjPFmY1m9su8B5fzwgEfbMF3y9bCrIV1fsXw2BBCJLbsC0tD7JwEWARmewyGXVsYcQ==","signatures":[{"sig":"MEQCIHvX3eI2/HF319983bt+jQQduC3pG4hPFUWYOStcf/f9AiBdiWz9axMHHPp1vWynoj9p2KQMGX+16V1kOHw24rsJ/A==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIQDukvCF32H+UwaIDfPD0CSbyk5sCQcH0uz/AecgHQxdJAIgP5ysbKECcQGZsgCyvfZOvbP8McmsbiUGwteMiSkwq64="}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@activescott%2fauth-provider-email@3.2.2","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":75872},"main":"./dist/index.js","name":"@activescott/auth-provider-email","type":"module","types":"./dist/index.d.ts","author":{"name":"Scott Willeke"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./testing":{"types":"./dist/testing.d.ts","import":"./dist/testing.js"}},"gitHead":"a99f713852539f97a3d8691e9b366b30bebddb33","license":"MIT","scripts":{"dev":"tsc --watch","test":"vitest run","build":"tsc","typecheck":"tsc --noEmit","prepublishOnly":"npm run build"},"version":"3.2.2","_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:4a47f045-f8ee-4487-8416-853c1b519877"}},"homepage":"https://github.com/activescott/auth#readme","keywords":["auth","authentication","magic-link","email","nodemailer"],"repository":{"url":"git+https://github.com/activescott/auth.git","type":"git","directory":"packages/auth-provider-email"},"_npmVersion":"11.19.0","description":"Email magic link provider for @activescott/auth","directories":{},"maintainers":[{"name":"activescott","email":"scott@willeke.com"}],"_nodeVersion":"24.20.0","dependencies":{"nodemailer":"^10.0.10"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^4.1.11","typescript":"^5.7.2","@types/node":"^22","@activescott/auth":"*"},"peerDependencies":{"@activescott/auth":"^5.0.1"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/auth-provider-email_3.2.2_1789895278688_0.7120563166201166"}}},"time":{"created":"2026-03-16T19:01:07.423Z","modified":"2026-09-20T09:07:59.090Z","0.1.2":"2026-03-16T19:01:07.684Z","0.1.4":"2026-05-09T15:58:04.148Z","0.1.5":"2026-05-20T17:26:22.752Z","1.0.0":"2026-07-31T18:24:10.533Z","1.0.1":"2026-08-01T18:58:19.363Z","1.0.2":"2026-08-02T06:03:22.380Z","1.0.3":"2026-08-06T07:16:10.034Z","1.1.0":"2026-08-07T00:20:52.583Z","2.0.0":"2026-08-08T16:55:37.578Z","2.1.0":"2026-08-11T16:52:12.098Z","3.0.0":"2026-08-11T17:00:02.725Z","3.1.0":"2026-08-11T19:47:41.829Z","3.1.1":"2026-09-18T06:37:19.940Z","3.2.0":"2026-09-18T18:47:00.022Z","3.2.1":"2026-09-19T01:12:27.892Z","3.2.2":"2026-09-20T09:07:58.765Z"},"bugs":{"url":"https://github.com/activescott/auth/issues"},"author":{"name":"Scott Willeke"},"license":"MIT","homepage":"https://github.com/activescott/auth#readme","keywords":["auth","authentication","magic-link","email","nodemailer"],"repository":{"url":"git+https://github.com/activescott/auth.git","type":"git","directory":"packages/auth-provider-email"},"description":"Email magic link provider for @activescott/auth","maintainers":[{"name":"activescott","email":"scott@willeke.com"}],"readme":"# @activescott/auth-provider-email\n\n[![npm version](https://img.shields.io/npm/v/@activescott/auth-provider-email.svg)](https://www.npmjs.com/package/@activescott/auth-provider-email)\n[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)\n\nEmail magic-link authentication provider for [`@activescott/auth`](https://www.npmjs.com/package/@activescott/auth).\n\nSends a sign-in email containing a single-use magic link and a numeric one-time code, both backed by one server-side challenge. Redeeming either finds-or-creates the user via your `UserStore`/`IdentityStore` and hands control back to the auth core to issue a session cookie.\n\nUsed in production by [ramblefeed.com](https://ramblefeed.com) and [tinkerbellbot.com](https://tinkerbellbot.com).\n\n## Install\n\n```bash\nnpm install @activescott/auth @activescott/auth-provider-email\n```\n\n## Usage\n\n```ts\nimport { Auth } from \"@activescott/auth\"\nimport { EmailProvider } from \"@activescott/auth-provider-email\"\n\nconst auth = new Auth({\n  // ...session, identityStore, userStore, challengeStore...\n  providers: [\n    new EmailProvider({\n      smtp: {\n        host: process.env.SMTP_HOST!,\n        port: Number(process.env.SMTP_PORT),\n        user: process.env.SMTP_USER!,\n        pass: process.env.SMTP_PASS!,\n      },\n      from: process.env.FROM_EMAIL!,\n      template: { appName: \"My App\", subject: \"Sign in to My App\" },\n    }),\n  ],\n})\n```\n\n## Routes registered\n\nThe provider handles four URL patterns under `/auth/email/*` (mounted by your framework adapter):\n\n| Method | Path                   | Purpose                                          |\n| ------ | ---------------------- | ------------------------------------------------ |\n| POST   | `/auth/email/initiate` | Send a magic link to the supplied email.         |\n| POST   | `/auth/email/send`     | Alias of `initiate`.                             |\n| GET    | `/auth/email/verify`   | Verify the token from the link, log the user in. |\n| POST   | `/auth/email/verify`   | Verify a one-time code (when `otp` is enabled).  |\n| GET    | `/auth/email/callback` | Alias of `verify`.                               |\n\n## How a sign-in email works\n\nEach send creates one server-side challenge (via the `Auth` config's `challengeStore`) with two redemption paths, both single-use and sharing one expiry (default 15m):\n\n1. **The magic link** — `/auth/email/verify?challenge=<id>&key=<256-bit secret>`. Clicking it (GET) shows a minimal **\"Confirm sign-in\"** page; the confirm button POSTs the redemption. Email security scanners (Outlook SafeLinks, Mimecast, link previews) prefetch links with GET but never submit forms, so they cannot consume the single-use link.\n2. **The numeric code** — the user types it on your sign-in page instead of clicking the link. iOS and macOS detect the code in Mail and offer it via AutoFill when your input uses `autoComplete=\"one-time-code\"`. `initiate` sets an HttpOnly `auth_challenge` cookie binding code entry to the initiating browser; your code input POSTs to `/auth/email/verify`. Codes are attempt-capped: wrong code → `INVALID_CREDENTIALS`, too many tries → `RATE_LIMITED`, expired → `EXPIRED_TOKEN`.\n\nThere are no signing secrets to manage for sign-in emails — both the link key and the code are stored as salted hashes in the challenge and deleted on use.\n\nTuning: `expiry` (top-level, e.g. `\"15m\"`) and `otp: { length?, maxAttempts?, cookieName? }`, or env vars `EMAIL_EXPIRY`, `EMAIL_OTP_LENGTH`, `EMAIL_OTP_MAX_ATTEMPTS` with `emailConfigFromEnvironment`.\n\n`initiate` rejects an address whose domain has no dot (e.g. `scott@willeke`) before any store write or send, since it's almost always a missing TLD rather than a real destination. Set `allowDotlessDomain: true` for intranet or dev setups that sign in to a bare hostname like `user@localhost`.\n\n## Dev mode (no SMTP needed)\n\n`NodemailerTransport` accepts an `isDevelopment` flag. When `true`, it buffers the email via Nodemailer's stream transport (no real SMTP connection) and prints the magic link to the server console — useful for local dev, examples, and CI:\n\n```ts\nimport {\n  EmailProvider,\n  NodemailerTransport,\n} from \"@activescott/auth-provider-email\"\n\nnew EmailProvider(\n  {/* ...config... */},\n  new NodemailerTransport(true), // dev mode: log link, don't send\n)\n```\n\nOr pass no transport at all and the provider auto-creates `new NodemailerTransport(process.env.NODE_ENV === \"development\")`.\n\n## Custom email transport\n\nShips with `NodemailerTransport` (SMTP). Implement `EmailTransport` to plug in Resend, SES, Postmark, or anything else:\n\n```ts\nimport type {\n  EmailProviderConfig,\n  EmailTransport,\n} from \"@activescott/auth-provider-email\"\n\nclass ResendTransport implements EmailTransport {\n  async sendMagicLink(\n    to: string,\n    magicLink: string,\n    config: EmailProviderConfig,\n  ): Promise<boolean> {\n    // ...call Resend API...\n    return true\n  }\n}\n\nnew EmailProvider(config, new ResendTransport())\n```\n\n## Testing pattern: capture transport\n\nIn e2e tests, wrap your `EmailTransport` in `CaptureEmailTransport`, expose what it records through a test-only readback route (gated on a test-mode env var **and** a shared-secret header), and drive the real confirm-page or code-entry flow — no SMTP server, no inbox polling.\n\n```typescript\nimport { CaptureEmailTransport } from \"@activescott/auth-provider-email/testing\"\n\n// Install it only under your test-mode flag: what it holds are live sign-in\n// credentials for as long as the challenge lives.\nexport const emailTransport =\n  process.env.E2E_TEST_MODE === \"true\"\n    ? new CaptureEmailTransport(new NodemailerTransport())\n    : new NodemailerTransport()\n\n// in your gated readback route:\nconst captured = emailTransport.getCapturedEmail(email) // { magicLink, code }\n```\n\nIt lives at the `/testing` subpath rather than the package root so it stays out of your application's default import graph. See the runnable example linked below.\n\n## Documentation & example\n\nFull docs and a runnable React Router framework-mode example with Playwright tests live in the monorepo:\n\n→ **https://github.com/activescott/auth**\n\n## License\n\nMIT\n","readmeFilename":"README.md"}