{"_id":"@activescott/auth-provider-sms","_rev":"11-2a0ec322d6af907ee6e893c70bef9469","name":"@activescott/auth-provider-sms","dist-tags":{"latest":"2.2.0"},"versions":{"0.1.0":{"name":"@activescott/auth-provider-sms","version":"0.1.0","keywords":["auth","authentication","sms","otp","one-time-code","webotp"],"author":{"name":"Scott Willeke"},"license":"MIT","_id":"@activescott/auth-provider-sms@0.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":"a37affafb77a6ab7b5062b249f0755ab21a3ab58","tarball":"https://registry.npmjs.org/@activescott/auth-provider-sms/-/auth-provider-sms-0.1.0.tgz","fileCount":19,"integrity":"sha512-C9GTbRhZEz8o8wVFrNNNsKkOZ6Q1yctRAiH6g9pSE4Duij/d1+dwsdtuF6RR9Mfrpc0dmw3/bGh6kUoBbC0xxQ==","signatures":[{"sig":"MEUCIGhg1Tk1B8g5dDwi6rJUQq5W1n2BeCw9b3m+trqB5OshAiEAvgWUKgdOAqZbFCCSLyU5n11bbSXG7y7sZ5ubxshIymI=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":31194},"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-sms"},"_npmVersion":"10.9.4","description":"SMS one-time-code provider for @activescott/auth","directories":{},"_nodeVersion":"22.21.1","_hasShrinkwrap":false,"devDependencies":{"vitest":"^4.0.16","typescript":"^5.7.2","@types/node":"^22","@activescott/auth":"*"},"peerDependencies":{"@activescott/auth":"^2.1.0"},"_npmOperationalInternal":{"tmp":"tmp/auth-provider-sms_0.1.0_1785610702841_0.9638187415874873","host":"s3://npm-registry-packages-npm-production"}},"0.1.1":{"name":"@activescott/auth-provider-sms","version":"0.1.1","keywords":["auth","authentication","sms","otp","one-time-code","webotp"],"author":{"name":"Scott Willeke"},"license":"MIT","_id":"@activescott/auth-provider-sms@0.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":"87ed11e33606ef2149365797d0e67e4ec0e64664","tarball":"https://registry.npmjs.org/@activescott/auth-provider-sms/-/auth-provider-sms-0.1.1.tgz","fileCount":19,"integrity":"sha512-QT1fH28yJm0HGp7RTLtPAJhgfLlTwT+6KPbDvJPzCwG2VQu2wSNHYx+ZBJKtcVrl8Px5wnFWMzwDJV5QOgSMwA==","signatures":[{"sig":"MEUCIQCY/pg50jj5UC1v38tTMzUXj1fTQJ2WdInJ7CqH/8aP0AIgGILwN7TfwryhtocZ7DkU7qd3wUodsZ5hh6Ao18V2HR4=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@activescott%2fauth-provider-sms@0.1.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":31339},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"gitHead":"5f74b6df0c31191887dcde7e4abc6e2f0dd62d9b","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:5ebdcfa0-cd02-4bd0-98aa-5ab5cfafd85d"}},"repository":{"url":"git+https://github.com/activescott/auth.git","type":"git","directory":"packages/auth-provider-sms"},"_npmVersion":"11.16.0","description":"SMS one-time-code provider for @activescott/auth","directories":{},"_nodeVersion":"24.18.0","_hasShrinkwrap":false,"devDependencies":{"vitest":"^4.0.16","typescript":"^5.7.2","@types/node":"^22","@activescott/auth":"*"},"peerDependencies":{"@activescott/auth":"^2.1.0"},"_npmOperationalInternal":{"tmp":"tmp/auth-provider-sms_0.1.1_1785611657437_0.03785575470245783","host":"s3://npm-registry-packages-npm-production"}},"0.1.2":{"name":"@activescott/auth-provider-sms","version":"0.1.2","keywords":["auth","authentication","sms","otp","one-time-code","webotp"],"author":{"name":"Scott Willeke"},"license":"MIT","_id":"@activescott/auth-provider-sms@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":"f11b32a69920cb6d083c05c837a8f9168fac26ab","tarball":"https://registry.npmjs.org/@activescott/auth-provider-sms/-/auth-provider-sms-0.1.2.tgz","fileCount":19,"integrity":"sha512-rp6/8QJNgS9jHqTFQEcyD7yGLp4rLyyWrxOkEFZ5CVDQOEog6WdPFMFI+AvrMoWRUxHSz2pgj/SjQjufXdCxKg==","signatures":[{"sig":"MEYCIQDt7SJ9hhBVOHVQ8pFypIc67wIhUUAWtk51DyZ0VWag5wIhALNlgBApSFkOKQaZ3x7NDFZyxtzjOMBGJ6rE/ERpe7PE","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@activescott%2fauth-provider-sms@0.1.2","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":31339},"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:5ebdcfa0-cd02-4bd0-98aa-5ab5cfafd85d"}},"repository":{"url":"git+https://github.com/activescott/auth.git","type":"git","directory":"packages/auth-provider-sms"},"_npmVersion":"11.16.0","description":"SMS one-time-code provider for @activescott/auth","directories":{},"_nodeVersion":"24.18.0","_hasShrinkwrap":false,"devDependencies":{"vitest":"^4.0.16","typescript":"^5.7.2","@types/node":"^22","@activescott/auth":"*"},"peerDependencies":{"@activescott/auth":"^3.0.0"},"_npmOperationalInternal":{"tmp":"tmp/auth-provider-sms_0.1.2_1785650595059_0.9670165259935062","host":"s3://npm-registry-packages-npm-production"}},"0.1.3":{"name":"@activescott/auth-provider-sms","version":"0.1.3","keywords":["auth","authentication","sms","otp","one-time-code","webotp"],"author":{"name":"Scott Willeke"},"license":"MIT","_id":"@activescott/auth-provider-sms@0.1.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":"2473b7042fe28badbf0d07c444063097140cc2d2","tarball":"https://registry.npmjs.org/@activescott/auth-provider-sms/-/auth-provider-sms-0.1.3.tgz","fileCount":19,"integrity":"sha512-2cRI+wcw4nf55aaZ9/9TamGV2SS8BngqwgVca9vdrmEX3jaALr8aKi2kV8yL2imHiObSc9HhTNZNa8O9b4YFoA==","signatures":[{"sig":"MEUCIQCCG5t5oTdsGxjpVnhWai48RDDnz/vuZROLgIj8XjXVAgIgB7Q+tP+a8tvomWEjsYSXR+5i5Vh2aIeSHgZr93Hc7PM=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@activescott%2fauth-provider-sms@0.1.3","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":31514},"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:5ebdcfa0-cd02-4bd0-98aa-5ab5cfafd85d"}},"repository":{"url":"git+https://github.com/activescott/auth.git","type":"git","directory":"packages/auth-provider-sms"},"_npmVersion":"11.16.0","description":"SMS one-time-code provider for @activescott/auth","directories":{},"_nodeVersion":"24.18.0","_hasShrinkwrap":false,"devDependencies":{"vitest":"^4.0.16","typescript":"^5.7.2","@types/node":"^22","@activescott/auth":"*"},"peerDependencies":{"@activescott/auth":"^3.0.0"},"_npmOperationalInternal":{"tmp":"tmp/auth-provider-sms_0.1.3_1786000558596_0.16210611643607198","host":"s3://npm-registry-packages-npm-production"}},"0.2.0":{"name":"@activescott/auth-provider-sms","version":"0.2.0","keywords":["auth","authentication","sms","otp","one-time-code","webotp"],"author":{"name":"Scott Willeke"},"license":"MIT","_id":"@activescott/auth-provider-sms@0.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":"32078f8d41dee982be88b28e17b923db64478443","tarball":"https://registry.npmjs.org/@activescott/auth-provider-sms/-/auth-provider-sms-0.2.0.tgz","fileCount":23,"integrity":"sha512-i7GK0/uVBAtLWFgncCEnUqcE8lMsTj0EVgRkLduLb0CklV5+46dOKaj85k8A+yikiwJ6WQdKCkGOqyxuC4fvhg==","signatures":[{"sig":"MEUCIQCCTXlLsadkbpaoKr9z3WETop4rcl4iEd7UXuFd/gXSsgIgeJFjLvJRJxQLwa2/Fi3O9qnGm/KZBG5d9vU7r9WcTmE=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@activescott%2fauth-provider-sms@0.2.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":37104},"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:5ebdcfa0-cd02-4bd0-98aa-5ab5cfafd85d"}},"repository":{"url":"git+https://github.com/activescott/auth.git","type":"git","directory":"packages/auth-provider-sms"},"_npmVersion":"11.16.0","description":"SMS one-time-code provider for @activescott/auth","directories":{},"_nodeVersion":"24.18.0","_hasShrinkwrap":false,"devDependencies":{"vitest":"^4.0.16","typescript":"^5.7.2","@types/node":"^22","@activescott/auth":"*"},"peerDependencies":{"@activescott/auth":"^3.0.0"},"_npmOperationalInternal":{"tmp":"tmp/auth-provider-sms_0.2.0_1786062050639_0.8022460499544395","host":"s3://npm-registry-packages-npm-production"}},"0.3.0":{"name":"@activescott/auth-provider-sms","version":"0.3.0","keywords":["auth","authentication","sms","otp","one-time-code","webotp"],"author":{"name":"Scott Willeke"},"license":"MIT","_id":"@activescott/auth-provider-sms@0.3.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":"8864268151878f321c7dd743e226fdf21975487a","tarball":"https://registry.npmjs.org/@activescott/auth-provider-sms/-/auth-provider-sms-0.3.0.tgz","fileCount":23,"integrity":"sha512-DA3pfHWR5/uQ2IDvDuCfV8g0R9VEOom5iQR+VF5d5ptuxScjBAuuHBgC53RmIlxf/5bYjXkDFBT35M9woYvZHg==","signatures":[{"sig":"MEUCIH9ryIh50+0RR8t7yAwK6B33GCoK2Kmn1XyWAG/nTUDwAiEAp1CgiION9n8Uk0nm56/7MfQssRvO713PonZC0C851WA=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@activescott%2fauth-provider-sms@0.3.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":49932},"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":"43c5ff808ce2638b7f477287d56cc591d157b510","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:5ebdcfa0-cd02-4bd0-98aa-5ab5cfafd85d"}},"repository":{"url":"git+https://github.com/activescott/auth.git","type":"git","directory":"packages/auth-provider-sms"},"_npmVersion":"11.16.0","description":"SMS one-time-code provider for @activescott/auth","directories":{},"_nodeVersion":"24.18.0","_hasShrinkwrap":false,"devDependencies":{"vitest":"^4.0.16","typescript":"^5.7.2","@types/node":"^22","@activescott/auth":"*"},"peerDependencies":{"@activescott/auth":"^3.0.0"},"_npmOperationalInternal":{"tmp":"tmp/auth-provider-sms_0.3.0_1786087431771_0.3810412042234814","host":"s3://npm-registry-packages-npm-production"}},"1.0.0":{"name":"@activescott/auth-provider-sms","version":"1.0.0","keywords":["auth","authentication","sms","otp","one-time-code","webotp"],"author":{"name":"Scott Willeke"},"license":"MIT","_id":"@activescott/auth-provider-sms@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":"0d31b87fb95b86ae26f7de3fab37d6ef79404bcf","tarball":"https://registry.npmjs.org/@activescott/auth-provider-sms/-/auth-provider-sms-1.0.0.tgz","fileCount":23,"integrity":"sha512-u0Pk+/iQXvFr9GEPXwAi04Ff4fgM2J3AomhuZdV5e4d4MaU7lOCQWCDcaeLwHIY3yPvhzOqqUlDCy04GouH16A==","signatures":[{"sig":"MEUCIQCIChZSGzyTLDOECI2Lbd20Z6TLi3FKLaibR0ftUdDoegIgVNkvYTzJy3D7xLvRh3/+aR6YnP5w6BBkUXVqhXU45YQ=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@activescott%2fauth-provider-sms@1.0.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":53102},"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:5ebdcfa0-cd02-4bd0-98aa-5ab5cfafd85d"}},"repository":{"url":"git+https://github.com/activescott/auth.git","type":"git","directory":"packages/auth-provider-sms"},"_npmVersion":"11.16.0","description":"SMS one-time-code provider for @activescott/auth","directories":{},"_nodeVersion":"24.18.0","_hasShrinkwrap":false,"devDependencies":{"vitest":"^4.0.16","typescript":"^5.7.2","@types/node":"^22","@activescott/auth":"*"},"peerDependencies":{"@activescott/auth":"^4.0.0"},"_npmOperationalInternal":{"tmp":"tmp/auth-provider-sms_1.0.0_1786208137829_0.3809812313529286","host":"s3://npm-registry-packages-npm-production"}},"1.1.0":{"name":"@activescott/auth-provider-sms","version":"1.1.0","keywords":["auth","authentication","sms","otp","one-time-code","webotp"],"author":{"name":"Scott Willeke"},"license":"MIT","_id":"@activescott/auth-provider-sms@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":"b6c3f98411385b6b9da6900de059356774c4055c","tarball":"https://registry.npmjs.org/@activescott/auth-provider-sms/-/auth-provider-sms-1.1.0.tgz","fileCount":23,"integrity":"sha512-HqSmtAaoZ7yZbfC6o+yIHJbOWn5j7nkW/D8nS/hUrqqspFTzku03gMDTP2MBmhGQe5Q5TljF2Dy1QAzVoj5CFA==","signatures":[{"sig":"MEUCIQDkITH0v7ntedZSJ2tEDfKbzsXqxIPf7ZkVKUShlhFi9AIgXVGF0H5wAUsz4Tcj9CDGB8Qj7IsdC7bdEtl/pGQmx3U=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@activescott%2fauth-provider-sms@1.1.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":55485},"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:5ebdcfa0-cd02-4bd0-98aa-5ab5cfafd85d"}},"repository":{"url":"git+https://github.com/activescott/auth.git","type":"git","directory":"packages/auth-provider-sms"},"_npmVersion":"11.16.0","description":"SMS one-time-code provider for @activescott/auth","directories":{},"_nodeVersion":"24.18.0","_hasShrinkwrap":false,"devDependencies":{"vitest":"^4.0.16","typescript":"^5.7.2","@types/node":"^22","@activescott/auth":"*"},"peerDependencies":{"@activescott/auth":"^4.0.0"},"_npmOperationalInternal":{"tmp":"tmp/auth-provider-sms_1.1.0_1786467128574_0.61913576107877","host":"s3://npm-registry-packages-npm-production"}},"2.0.0":{"name":"@activescott/auth-provider-sms","version":"2.0.0","keywords":["auth","authentication","sms","otp","one-time-code","webotp"],"author":{"name":"Scott Willeke"},"license":"MIT","_id":"@activescott/auth-provider-sms@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":"b0230e61ad3ee55d6ef05fe3437ae32302d4780d","tarball":"https://registry.npmjs.org/@activescott/auth-provider-sms/-/auth-provider-sms-2.0.0.tgz","fileCount":23,"integrity":"sha512-n+jSVNpHcoIuFdjuBC/JzJFTlZf0y7Rx655s8zlFWBdAfDznoLKp8IajfdVb9SpfFZc78u6gjjX32un4nc7Wnw==","signatures":[{"sig":"MEYCIQCOUPiANt5caA1SG3fbnUGyyvRcG7uzwYxdfOrh3xtccwIhAJcX2T9l3H+AxqSjJ6CKY+f7764kv0vxCzUB3R64iLCd","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@activescott%2fauth-provider-sms@2.0.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":55127},"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:5ebdcfa0-cd02-4bd0-98aa-5ab5cfafd85d"}},"repository":{"url":"git+https://github.com/activescott/auth.git","type":"git","directory":"packages/auth-provider-sms"},"_npmVersion":"11.16.0","description":"SMS one-time-code provider for @activescott/auth","directories":{},"_nodeVersion":"24.18.0","_hasShrinkwrap":false,"devDependencies":{"vitest":"^4.0.16","typescript":"^5.7.2","@types/node":"^22","@activescott/auth":"*"},"peerDependencies":{"@activescott/auth":"^5.0.0"},"_npmOperationalInternal":{"tmp":"tmp/auth-provider-sms_2.0.0_1786467606378_0.4937186491331871","host":"s3://npm-registry-packages-npm-production"}},"2.1.0":{"name":"@activescott/auth-provider-sms","version":"2.1.0","keywords":["auth","authentication","sms","otp","one-time-code","webotp"],"author":{"name":"Scott Willeke"},"license":"MIT","_id":"@activescott/auth-provider-sms@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":"22b4a05ebc54a927b33cb09936e7ca9f943dc112","tarball":"https://registry.npmjs.org/@activescott/auth-provider-sms/-/auth-provider-sms-2.1.0.tgz","fileCount":23,"integrity":"sha512-bQeuAekLzOacn0AY4rLwYSC8tRWpxk93F7W5THKRBB7ItmxEGYYCReJli66IAYLIiRDYSolSNfaiZZ8O3OJDDA==","signatures":[{"sig":"MEYCIQCgtwdKIEaW4Ip3HEX3KiY6vVxo5gCSR+8K+uVgTeCRNAIhAK2+J55b9yK6pHv7MK19jJIT+L/uMi7Cbc9EyBGJn6OG","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@activescott%2fauth-provider-sms@2.1.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":56661},"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:5ebdcfa0-cd02-4bd0-98aa-5ab5cfafd85d"}},"repository":{"url":"git+https://github.com/activescott/auth.git","type":"git","directory":"packages/auth-provider-sms"},"_npmVersion":"11.17.0","description":"SMS one-time-code provider for @activescott/auth","directories":{},"_nodeVersion":"24.19.0","_hasShrinkwrap":false,"devDependencies":{"vitest":"^4.0.16","typescript":"^5.7.2","@types/node":"^22","@activescott/auth":"*"},"peerDependencies":{"@activescott/auth":"^5.0.0"},"_npmOperationalInternal":{"tmp":"tmp/auth-provider-sms_2.1.0_1786477658910_0.1520082811098198","host":"s3://npm-registry-packages-npm-production"}},"2.2.0":{"_id":"@activescott/auth-provider-sms@2.2.0","bugs":{"url":"https://github.com/activescott/auth/issues"},"dist":{"shasum":"5e936cdd49a9c819db580de956939ba0a06e7be0","tarball":"https://registry.npmjs.org/@activescott/auth-provider-sms/-/auth-provider-sms-2.2.0.tgz","fileCount":23,"integrity":"sha512-W4I0cl9n+LSV6HLz25/zyQBGjp4NlsEskfK5cX0nYaQyjEzniq9F+k1e8U1Zom1gjPpIVVqsa1cEglhTrUbSYw==","signatures":[{"sig":"MEUCIQDM90qTc2F8wB1vSwqj8ph0AZolVIoIY+PK4HfMEyuDewIgdg/YE6TwWr9yMjUSChvMyGDD2bctyqQPIRUpCx8OBvI=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIQCjb5Dus1KFlFoVKUiVQN8gqD3d3dgxyKRasxCAynyMNgIgMe1lSsYG4ZY1q3Te9nd9DbNEHbJKt/KzaAiXdFDAjXU="}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@activescott%2fauth-provider-sms@2.2.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":56972},"main":"./dist/index.js","name":"@activescott/auth-provider-sms","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":"4a5a69387f1b9f5148cae5735c125ab0f23577f0","license":"MIT","scripts":{"dev":"tsc --watch","test":"vitest run","build":"tsc","typecheck":"tsc --noEmit","prepublishOnly":"npm run build"},"version":"2.2.0","_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:5ebdcfa0-cd02-4bd0-98aa-5ab5cfafd85d"}},"homepage":"https://github.com/activescott/auth#readme","keywords":["auth","authentication","sms","otp","one-time-code","webotp"],"repository":{"url":"git+https://github.com/activescott/auth.git","type":"git","directory":"packages/auth-provider-sms"},"_npmVersion":"11.19.0","description":"SMS one-time-code provider for @activescott/auth","directories":{},"maintainers":[{"name":"activescott","email":"scott@willeke.com"}],"_nodeVersion":"24.20.0","_hasShrinkwrap":false,"devDependencies":{"vitest":"^4.1.11","typescript":"^5.7.2","@types/node":"^22","@activescott/auth":"*"},"peerDependencies":{"@activescott/auth":"^5.0.0"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/auth-provider-sms_2.2.0_1789757200196_0.39031040984035625"}}},"time":{"created":"2026-08-01T18:58:22.662Z","modified":"2026-09-18T18:46:40.627Z","0.1.0":"2026-08-01T18:58:22.979Z","0.1.1":"2026-08-01T19:14:17.602Z","0.1.2":"2026-08-02T06:03:15.204Z","0.1.3":"2026-08-06T07:15:58.839Z","0.2.0":"2026-08-07T00:20:50.773Z","0.3.0":"2026-08-07T07:23:51.944Z","1.0.0":"2026-08-08T16:55:37.962Z","1.1.0":"2026-08-11T16:52:08.767Z","2.0.0":"2026-08-11T17:00:06.523Z","2.1.0":"2026-08-11T19:47:39.060Z","2.2.0":"2026-09-18T18:46:40.287Z"},"bugs":{"url":"https://github.com/activescott/auth/issues"},"author":{"name":"Scott Willeke"},"license":"MIT","homepage":"https://github.com/activescott/auth#readme","keywords":["auth","authentication","sms","otp","one-time-code","webotp"],"repository":{"url":"git+https://github.com/activescott/auth.git","type":"git","directory":"packages/auth-provider-sms"},"description":"SMS one-time-code provider for @activescott/auth","maintainers":[{"name":"activescott","email":"scott@willeke.com"}],"readme":"# @activescott/auth-provider-sms\n\n[![npm version](https://img.shields.io/npm/v/@activescott/auth-provider-sms.svg)](https://www.npmjs.com/package/@activescott/auth-provider-sms)\n[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)\n\nSMS one-time-code provider for [`@activescott/auth`](https://www.npmjs.com/package/@activescott/auth). The user enters their mobile number, gets texted a 6-digit code, and types (or autofills) it to sign in.\n\nThis package has **no vendor dependencies** — delivery is injected as a transport. Use a vendor package or write your own:\n\n- [`@activescott/auth-sms-twilio`](https://www.npmjs.com/package/@activescott/auth-sms-twilio) — Twilio: `TwilioMessagingTransport` (SMS, or RCS via a Messaging Service) and `TwilioVerifyTransport` (Twilio Verify)\n- `ConsoleTransport` (included) — prints codes to the server console for development\n- Custom: implement `SmsTransport { sendMessage(to, message): Promise<boolean> }`. An AWS End User Messaging transport is drafted in [PR #37](https://github.com/activescott/auth/pull/37) — implemented and unit-tested but unverified against a live AWS account; if you want AWS and can test it end to end, feel free to take over that PR ([#36](https://github.com/activescott/auth/issues/36) has the checklist).\n\n## Two kinds of transport\n\n|                                        | `SmsTransport`                                                                                 | `VerificationTransport`                                        |\n| -------------------------------------- | ---------------------------------------------------------------------------------------------- | -------------------------------------------------------------- |\n| Who makes the code                     | this package                                                                                   | the vendor                                                     |\n| Who checks the code                    | this package                                                                                   | the vendor                                                     |\n| US A2P 10DLC registration              | **yours to do** — brand + campaign via The Campaign Registry, days to weeks, plus monthly fees | **none** — the vendor sends from senders it already registered |\n| Cost per sign-in (US)                  | ~$0.011–0.013 per SMS                                                                          | ~$0.058 (Twilio Verify: $0.05 per success + channel fee)       |\n| Message text, code length, WebOTP line | yours                                                                                          | the vendor's                                                   |\n\n`SmsProvider` accepts either. Routes, request bodies, cookie binding, abuse checks, and error responses are identical, so switching is a one-line change at construction:\n\n```ts\nnew SmsProvider({ appName: \"MyApp\" }, new TwilioVerifyTransport({ ... }))\n```\n\nPick `VerificationTransport` when 10DLC registration is the thing standing between you and shipping — at low sign-in volume its fixed monthly fees often exceed the entire Verify bill. Pick `SmsTransport` when volume makes per-message price dominate, or you want control over the message text.\n\n## Usage\n\n```ts\nimport { Auth, InMemoryChallengeStore } from \"@activescott/auth\"\nimport { SmsProvider, ConsoleTransport } from \"@activescott/auth-provider-sms\"\nimport { TwilioMessagingTransport } from \"@activescott/auth-sms-twilio\"\n\nconst auth = new Auth({\n  session: { secret: process.env.JWT_SECRET! /* ... */ },\n  userStore,\n  identityStore,\n  challengeStore: new InMemoryChallengeStore(), // DB-backed in production\n  providers: [\n    new SmsProvider(\n      { appName: \"MyApp\", webOtpDomain: \"myapp.example\" },\n      process.env.NODE_ENV === \"production\"\n        ? new TwilioMessagingTransport({\n            accountSid: process.env.TWILIO_ACCOUNT_SID!,\n            authToken: process.env.TWILIO_AUTH_TOKEN!,\n            messagingServiceSid: process.env.TWILIO_SMS_MESSAGING_SERVICE_SID,\n          })\n        : new ConsoleTransport(),\n    ),\n  ],\n})\n```\n\nThe login form posts the phone number to `/auth/sms/initiate` (the provider texts the code, sets an HttpOnly challenge cookie, and redirects back with `?sent=1`); the code form posts to `/auth/sms/verify`. A runnable app demonstrating the full flow is at [`examples/react-router`](https://github.com/activescott/auth/tree/main/examples/react-router):\n\n```html\n<form method=\"post\" action=\"/auth/sms/initiate\">\n  <input name=\"phone\" type=\"tel\" autocomplete=\"tel\" required />\n  <button>Text me a code</button>\n</form>\n\n<form method=\"post\" action=\"/auth/sms/verify\">\n  <input\n    name=\"code\"\n    autocomplete=\"one-time-code\"\n    inputmode=\"numeric\"\n    pattern=\"[0-9]{6}\"\n    required\n  />\n  <button>Sign in</button>\n</form>\n```\n\n## Configuration\n\n| Option            | Default                | Description                                                                                                                          |\n| ----------------- | ---------------------- | ------------------------------------------------------------------------------------------------------------------------------------ |\n| `appName`         | `\"App\"`                | Shown in the default message text                                                                                                    |\n| `expiry`          | `\"10m\"`                | Code lifetime (`\"30s\"`, `\"10m\"`, `\"1h\"`, ...)                                                                                        |\n| `webOtpDomain`    | (off)                  | Appends the [WebOTP](https://developer.mozilla.org/docs/Web/API/WebOTP_API) line `@domain #code` for Android/Chrome one-tap autofill |\n| `messageTemplate` | built-in               | `(code, appName) => string` to customize the text                                                                                    |\n| `otp.length`      | `6`                    | Digits in the code                                                                                                                   |\n| `otp.maxAttempts` | `5`                    | Wrong guesses before the challenge is invalidated (`RATE_LIMITED`)                                                                   |\n| `otp.cookieName`  | `\"auth_sms_challenge\"` | Challenge cookie name                                                                                                                |\n\nWith a `VerificationTransport` the vendor composes the message, so `appName`, `messageTemplate`, `webOtpDomain`, and `otp.length` do nothing — configure those at the vendor instead. `expiry`, `otp.maxAttempts`, and `otp.cookieName` still apply; `expiry` bounds this package's challenge record, while the vendor enforces its own code lifetime, and whichever expires first ends the attempt.\n\nThe default message (with `webOtpDomain` set) looks like:\n\n```\nYour MyApp sign-in code is: 123456\n\n@myapp.example #123456\n```\n\nThe last line is the [origin-bound one-time code format](https://wicg.github.io/sms-one-time-codes/) (a WICG spec co-edited by Apple and Google — what [WebOTP](https://developer.mozilla.org/docs/Web/API/WebOTP_API) and Safari's code autofill parse). The human-readable sentence matters too: Apple publishes no exact grammar for iOS Security Code AutoFill, which recognizes codes heuristically from the message text (see [`autocomplete=\"one-time-code\"` on MDN](https://developer.mozilla.org/docs/Web/HTML/Attributes/autocomplete)) — `Your <app> sign-in code is: <code>` follows the widely observed patterns. Custom templates should keep a similar shape for autofill to work.\n\n## Phone numbers\n\nInput is normalized (spaces, dashes, dots, parentheses stripped; leading `00` → `+`) and must then be valid [E.164](https://en.wikipedia.org/wiki/E.164) (`+` and country code required) — the provider never guesses a default country. `normalizePhoneNumber` is exported if you want the same normalization client-side.\n\n## Testing pattern: capture transport\n\nIn e2e tests, wrap your `SmsTransport` in `CaptureSmsTransport` and read the code back through a test-only route (gated on a test-mode env var **and** a shared-secret header) instead of needing a phone — or paying for the text.\n\n```typescript\nimport { CaptureSmsTransport } from \"@activescott/auth-provider-sms/testing\"\n\nexport const smsTransport =\n  process.env.E2E_TEST_MODE === \"true\"\n    ? new CaptureSmsTransport(new TwilioTransport({ ... }))\n    : new TwilioTransport({ ... })\n\n// in your gated readback route:\nconst captured = smsTransport.getCapturedSms(phone) // { message, code }\n```\n\nThe code is parsed out of the default message template; pass a second argument to `CaptureSmsTransport` when you configure a custom `messageTemplate`. It lives at the `/testing` subpath rather than the package root so it stays out of your application's default import graph.\n\n## Security model\n\nSame challenge model as the email provider: one server-side challenge per send, code stored only as a salted SHA-256 hash, attempts counted **before** each comparison (capped at `maxAttempts`), constant-time compare, single-use (deleted on success), and the challenge is bound to the initiating browser by an HttpOnly cookie — a code alone is useless without it.\n\nWith a `VerificationTransport` the code never reaches your server at all, so there is no hash to store; the challenge record holds the phone number and the vendor's reference. Everything else is unchanged, including counting the attempt **before** the vendor is asked — which also caps how many billable checks one challenge can produce.\n\nPer-number and per-IP send throttling ships in `@activescott/auth` and is on by default (see its [abuse protection](../auth/README.md#abuse-protection) section); vendor-level fraud/pumping guards (Twilio, AWS) are still worth enabling on top.\n\nIf you think any of this should work differently — protections that belong in this library, a weakness in the model — please [open an issue or PR](https://github.com/activescott/auth/issues) to discuss.\n","readmeFilename":"README.md"}