{"_id":"@adsefid/sdk","_rev":"9-23c6094082aa0abd52f7bdd0e38e8f5c","name":"@adsefid/sdk","dist-tags":{"latest":"0.8.0"},"versions":{"0.1.0":{"name":"@adsefid/sdk","version":"0.1.0","license":"UNLICENSED","_id":"@adsefid/sdk@0.1.0","maintainers":[{"name":"adsefid","email":"tech@adsefid.com"}],"homepage":"https://github.com/adsefid/sdk-js#readme","bugs":{"url":"https://github.com/adsefid/sdk-js/issues"},"dist":{"shasum":"faef556952a22384913b206cd1018d160f4298d5","tarball":"https://registry.npmjs.org/@adsefid/sdk/-/sdk-0.1.0.tgz","fileCount":8,"integrity":"sha512-AD8IO1/Ow67KGFZr0F+BC0rhk7+Hybb3iOsHsv8kejijXgETH1vM27joQ0IcDCJ720jfCk0i/9QuKvHL50yccg==","signatures":[{"sig":"MEQCIDpw0nuWaZBkIgj+VbULeVoq9816Zmp2aKqUfBkJx1+0AiBEGXEc1+jrE6gdyx0NDCXGq9f6ukA5PkNXXznrysC1Jg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":248983},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","engines":{"node":">=18"},"exports":{".":{"import":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"require":{"types":"./dist/index.d.cts","default":"./dist/index.cjs"}}},"gitHead":"d35f0a9308d991ebd9d74918c23a7a3de0979cc0","scripts":{"lint":"biome check .","build":"tsup","format":"biome check --write .","typecheck":"tsc --noEmit"},"_npmUser":{"name":"adsefid","email":"tech@adsefid.com"},"repository":{"url":"git+https://github.com/adsefid/sdk-js.git","type":"git"},"_npmVersion":"11.19.0","description":"Official JavaScript/TypeScript client SDK for the adsefid.com SMS Web Service REST API","directories":{},"sideEffects":false,"_nodeVersion":"24.20.0","_hasShrinkwrap":false,"devDependencies":{"tsx":"4.23.13","tsup":"8.5.1","typescript":"5.9.3","@types/node":"18.19.130","@biomejs/biome":"2.5.12"},"_npmOperationalInternal":{"tmp":"tmp/sdk_0.1.0_1788782007515_0.9167482349263574","host":"s3://npm-registry-packages-npm-production"}},"0.2.0":{"name":"@adsefid/sdk","version":"0.2.0","license":"UNLICENSED","_id":"@adsefid/sdk@0.2.0","maintainers":[{"name":"adsefid","email":"tech@adsefid.com"}],"homepage":"https://github.com/adsefid/sdk-js#readme","bugs":{"url":"https://github.com/adsefid/sdk-js/issues"},"dist":{"shasum":"a51dc8194d13bfff64219a8caf781ac5f15c0dd0","tarball":"https://registry.npmjs.org/@adsefid/sdk/-/sdk-0.2.0.tgz","fileCount":8,"integrity":"sha512-OaKCQicCyIssW99otq2dLNQS5avhcNQzwL/x1Z/MDGKpfwwAovcP1OGrsrdbbDyKfy0K1eWd0HU908GGRec1/A==","signatures":[{"sig":"MEUCIDSNXqWp0j9n4F4wd0bwc7rq2ZhmM1l/5C94LjRMi5ceAiEA/P+/5B7MTeIQ1QJQjEN5lF6CaMGLU259k62n0OnOR1A=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEQCID/vj4HokBs46/pL4LLM/mlhewb2bs+2LJ2h38RcWIr/AiANR7OyhSsoGLVQuL3V8vJc9GrXgglHnB9JpZ8Exh59pw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@adsefid%2fsdk@0.2.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":252204},"main":"./dist/index.cjs","type":"module","_from":"file:artifacts/adsefid-sdk-0.2.0.tgz","types":"./dist/index.d.ts","module":"./dist/index.js","engines":{"node":">=18"},"exports":{".":{"import":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"require":{"types":"./dist/index.d.cts","default":"./dist/index.cjs"}}},"scripts":{"lint":"biome check .","build":"tsup","format":"biome check --write .","typecheck":"tsc --noEmit"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:e26b5b4a-4ac0-49bb-88ac-23c9eecea459"}},"_resolved":"/home/runner/work/sdk-js/sdk-js/artifacts/adsefid-sdk-0.2.0.tgz","_integrity":"sha512-OaKCQicCyIssW99otq2dLNQS5avhcNQzwL/x1Z/MDGKpfwwAovcP1OGrsrdbbDyKfy0K1eWd0HU908GGRec1/A==","repository":{"url":"git+https://github.com/adsefid/sdk-js.git","type":"git"},"_npmVersion":"11.19.0","description":"Official JavaScript/TypeScript client SDK for the adsefid.com SMS Web Service REST API","directories":{},"sideEffects":false,"_nodeVersion":"24.20.0","_hasShrinkwrap":false,"devDependencies":{"tsx":"4.23.13","tsup":"8.5.1","typescript":"5.9.3","@types/node":"18.19.130","@biomejs/biome":"2.5.12"},"_npmOperationalInternal":{"tmp":"tmp/sdk_0.2.0_1788847765748_0.9897749433069993","host":"s3://npm-registry-packages-npm-production"}},"0.3.0":{"name":"@adsefid/sdk","version":"0.3.0","license":"MIT","_id":"@adsefid/sdk@0.3.0","maintainers":[{"name":"adsefid","email":"tech@adsefid.com"}],"homepage":"https://github.com/adsefid/sdk-js#readme","bugs":{"url":"https://github.com/adsefid/sdk-js/issues"},"dist":{"shasum":"38d76fe8371e02247b4fb58dbaa1125b04ffbd8d","tarball":"https://registry.npmjs.org/@adsefid/sdk/-/sdk-0.3.0.tgz","fileCount":9,"integrity":"sha512-R6JadhQrPaNhOSrx/sjsqJkKpi17A2k9mtmAUG4DOoyvx8vTvZ3DulnPaux5+S4QtG70NPNKw3VcmtvvgpvFVQ==","signatures":[{"sig":"MEUCIQCrBWBmWKNQqwTe4+JZHiPFcTdOEy8NSDyTENm/ommVSwIgW99YPWj/D5EyhvyyutE1kE/5UB8caTaCtojtkOwEZEA=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEQCIG6MyaspmLwFSCADzITvN3mbEwnxqkHRAyoN6tHJ+wPnAiAtvmp1HZ8R4zPB8BD7CValJTFzAxGmC3NtanuQ2ef55A==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@adsefid%2fsdk@0.3.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":265076},"main":"./dist/index.cjs","type":"module","_from":"file:artifacts/adsefid-sdk-0.3.0.tgz","types":"./dist/index.d.ts","module":"./dist/index.js","engines":{"node":">=18"},"exports":{".":{"import":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"require":{"types":"./dist/index.d.cts","default":"./dist/index.cjs"}}},"scripts":{"lint":"biome check .","test":"vitest run","build":"tsup","format":"biome check --write .","typecheck":"tsc --noEmit"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:e26b5b4a-4ac0-49bb-88ac-23c9eecea459"}},"_resolved":"/home/runner/work/sdk-js/sdk-js/artifacts/adsefid-sdk-0.3.0.tgz","_integrity":"sha512-R6JadhQrPaNhOSrx/sjsqJkKpi17A2k9mtmAUG4DOoyvx8vTvZ3DulnPaux5+S4QtG70NPNKw3VcmtvvgpvFVQ==","repository":{"url":"git+https://github.com/adsefid/sdk-js.git","type":"git"},"_npmVersion":"11.19.0","description":"Official JavaScript/TypeScript client SDK for the adsefid.com SMS Web Service REST API","directories":{},"sideEffects":false,"_nodeVersion":"24.20.0","_hasShrinkwrap":false,"devDependencies":{"tsx":"4.23.13","tsup":"8.5.1","vitest":"2.1.9","typescript":"5.9.3","@types/node":"18.19.130","@biomejs/biome":"2.5.12"},"_npmOperationalInternal":{"tmp":"tmp/sdk_0.3.0_1788856636049_0.09176464681671326","host":"s3://npm-registry-packages-npm-production"}},"0.4.0":{"name":"@adsefid/sdk","version":"0.4.0","license":"MIT","_id":"@adsefid/sdk@0.4.0","maintainers":[{"name":"adsefid","email":"tech@adsefid.com"}],"homepage":"https://github.com/adsefid/sdk-js#readme","bugs":{"url":"https://github.com/adsefid/sdk-js/issues"},"dist":{"shasum":"048fa6e2ee9f70c173653b7d94536b6e264addb3","tarball":"https://registry.npmjs.org/@adsefid/sdk/-/sdk-0.4.0.tgz","fileCount":9,"integrity":"sha512-4+y/Ghcl0hUc0veE4bRFOC2r8mwURUbMVcPPFg0KkfWIFKfGMoEZ/xfbN/+MRat79Hy3LONN8M25V3qYLnvdcg==","signatures":[{"sig":"MEUCIQD1V5muCtTD6flL3fKpof7U7a8x1ZpeCCokFmSU7bBT9AIgTrADNEVgtp/sJc+xb553aBihwmkK0XwXKuLvVhU4/wA=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIEOqjbwFvDOQK2v39UtX4az2nF8j/ghtF7SqQyXyHETAAiEAoago5X9g1fXHHLWywDTGz321HfQ361rKeglieTPsKng=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@adsefid%2fsdk@0.4.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":292611},"main":"./dist/index.cjs","type":"module","_from":"file:artifacts/adsefid-sdk-0.4.0.tgz","types":"./dist/index.d.ts","module":"./dist/index.js","engines":{"node":">=18"},"exports":{".":{"import":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"require":{"types":"./dist/index.d.cts","default":"./dist/index.cjs"}}},"scripts":{"lint":"biome check .","test":"vitest run","build":"tsup","format":"biome check --write .","typecheck":"tsc --noEmit"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:e26b5b4a-4ac0-49bb-88ac-23c9eecea459"}},"_resolved":"/home/runner/work/sdk-js/sdk-js/artifacts/adsefid-sdk-0.4.0.tgz","_integrity":"sha512-4+y/Ghcl0hUc0veE4bRFOC2r8mwURUbMVcPPFg0KkfWIFKfGMoEZ/xfbN/+MRat79Hy3LONN8M25V3qYLnvdcg==","repository":{"url":"git+https://github.com/adsefid/sdk-js.git","type":"git"},"_npmVersion":"11.19.0","description":"Official JavaScript/TypeScript client SDK for the adsefid.com SMS Web Service REST API","directories":{},"sideEffects":false,"_nodeVersion":"24.20.0","_hasShrinkwrap":false,"devDependencies":{"tsx":"4.23.13","tsup":"8.5.1","vitest":"2.1.9","typescript":"5.9.3","@types/node":"18.19.130","@biomejs/biome":"2.5.12"},"_npmOperationalInternal":{"tmp":"tmp/sdk_0.4.0_1788871889106_0.46474429626778124","host":"s3://npm-registry-packages-npm-production"}},"0.5.0":{"name":"@adsefid/sdk","version":"0.5.0","license":"MIT","_id":"@adsefid/sdk@0.5.0","maintainers":[{"name":"adsefid","email":"tech@adsefid.com"}],"homepage":"https://github.com/adsefid/sdk-js#readme","bugs":{"url":"https://github.com/adsefid/sdk-js/issues"},"dist":{"shasum":"30cf0b30eea63c4ef696e6d50d9ae8d7b9c81a80","tarball":"https://registry.npmjs.org/@adsefid/sdk/-/sdk-0.5.0.tgz","fileCount":9,"integrity":"sha512-HAegLm4pC5PAR/9D/el9LjrpdqKXykllyXFodH5HVb2h91qAP7xAnM7O35+mpEeyYzt1Sk41jAKTMlh9QDMRAw==","signatures":[{"sig":"MEQCIEFIBsTTecLUm9bOu72uGnBJ/756Uzw0kLZIFiZq08zfAiA/vu4kff/xGAwr73eplrm+1nb/d+xLxAUzYeXind0iXw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEQCIEUNxgVggSk9KLPiu7RxT00qBOUnWUbxqAA3ZcKhZ1zmAiBir0JzzCphCObbk6YlHVi2BD+1L5HXEsEPNv5vq1hXHQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@adsefid%2fsdk@0.5.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":307917},"main":"./dist/index.cjs","type":"module","_from":"file:artifacts/adsefid-sdk-0.5.0.tgz","types":"./dist/index.d.ts","module":"./dist/index.js","engines":{"node":">=18"},"exports":{".":{"import":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"require":{"types":"./dist/index.d.cts","default":"./dist/index.cjs"}}},"scripts":{"lint":"biome check .","test":"vitest run","build":"tsup","format":"biome check --write .","typecheck":"tsc --noEmit"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:e26b5b4a-4ac0-49bb-88ac-23c9eecea459"}},"_resolved":"/home/runner/work/sdk-js/sdk-js/artifacts/adsefid-sdk-0.5.0.tgz","_integrity":"sha512-HAegLm4pC5PAR/9D/el9LjrpdqKXykllyXFodH5HVb2h91qAP7xAnM7O35+mpEeyYzt1Sk41jAKTMlh9QDMRAw==","repository":{"url":"git+https://github.com/adsefid/sdk-js.git","type":"git"},"_npmVersion":"11.19.0","description":"Official JavaScript/TypeScript client SDK for the adsefid.com SMS Web Service REST API","directories":{},"sideEffects":false,"_nodeVersion":"24.20.0","_hasShrinkwrap":false,"devDependencies":{"tsx":"4.23.13","tsup":"8.5.1","vitest":"2.1.9","typescript":"5.9.3","@types/node":"18.19.130","@biomejs/biome":"2.5.12"},"_npmOperationalInternal":{"tmp":"tmp/sdk_0.5.0_1788945096068_0.09959020948714326","host":"s3://npm-registry-packages-npm-production"}},"0.6.0":{"name":"@adsefid/sdk","version":"0.6.0","license":"MIT","_id":"@adsefid/sdk@0.6.0","maintainers":[{"name":"adsefid","email":"tech@adsefid.com"}],"homepage":"https://github.com/adsefid/sdk-js#readme","bugs":{"url":"https://github.com/adsefid/sdk-js/issues"},"dist":{"shasum":"96c4015b5b95cdde51accaccc0b067e7244df70d","tarball":"https://registry.npmjs.org/@adsefid/sdk/-/sdk-0.6.0.tgz","fileCount":9,"integrity":"sha512-q6RyM8A1c+1o4CO0noJqItt7cB09dMEUMEkXIQDPJBnJxz6+WnusdA9E/bhoSz/AgICaOPuf5tHPfEAq9fLkAg==","signatures":[{"sig":"MEQCIEVTMmDhHV8OEFDLm5jN6loEvvnahc9ulea6FyaNV+v5AiBiDmxKyMBXd6ty0YAl49wjk0AgYW44voFoITdCffB+aw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEQCIBfw5d8/C/RsLBYmKQA5aUmnSuXuevGfRBVR2y9fHZiNAiBSvDi+yIcOszXnKu1iZFJEoVbEMHdDXBD/XPFZ0mD5XA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@adsefid%2fsdk@0.6.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":298067},"main":"./dist/index.cjs","type":"module","_from":"file:artifacts/adsefid-sdk-0.6.0.tgz","types":"./dist/index.d.ts","module":"./dist/index.js","engines":{"node":">=22"},"exports":{".":{"import":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"require":{"types":"./dist/index.d.cts","default":"./dist/index.cjs"}}},"scripts":{"lint":"biome check .","test":"vitest run","build":"tsdown","format":"biome check --write .","typecheck":"tsc --noEmit"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:e26b5b4a-4ac0-49bb-88ac-23c9eecea459"}},"_resolved":"/home/runner/work/sdk-js/sdk-js/artifacts/adsefid-sdk-0.6.0.tgz","_integrity":"sha512-q6RyM8A1c+1o4CO0noJqItt7cB09dMEUMEkXIQDPJBnJxz6+WnusdA9E/bhoSz/AgICaOPuf5tHPfEAq9fLkAg==","repository":{"url":"git+https://github.com/adsefid/sdk-js.git","type":"git"},"_npmVersion":"11.19.0","description":"Official JavaScript/TypeScript client SDK for the adsefid.com SMS Web Service REST API","directories":{},"sideEffects":false,"_nodeVersion":"24.20.0","_hasShrinkwrap":false,"devDependencies":{"tsx":"4.23.13","tsdown":"0.23.0","vitest":"5.0.0","typescript":"7.0.2","@types/node":"22.20.1","@biomejs/biome":"2.5.12"},"_npmOperationalInternal":{"tmp":"tmp/sdk_0.6.0_1788955423059_0.6173497813971671","host":"s3://npm-registry-packages-npm-production"}},"0.7.0":{"name":"@adsefid/sdk","version":"0.7.0","license":"MIT","_id":"@adsefid/sdk@0.7.0","maintainers":[{"name":"adsefid","email":"tech@adsefid.com"}],"homepage":"https://github.com/adsefid/sdk-js#readme","bugs":{"url":"https://github.com/adsefid/sdk-js/issues"},"dist":{"shasum":"0793070748aa19fcda39deb03961d71e62552f94","tarball":"https://registry.npmjs.org/@adsefid/sdk/-/sdk-0.7.0.tgz","fileCount":9,"integrity":"sha512-L06/TWWXOGIGNUmQAtp84OE+VXvnFurin2imOLuHlo8Rhft6XulZxv0Sv8ShyuFePVB8Rb0Bq5LgL5KQRivGtg==","signatures":[{"sig":"MEUCICFEdXmlIvDWzYVGzDHTg/MaWUjjAg5J6n117m6jfnEKAiEAzkeud+aB7ZBtegeJKc5la+RnQMRKqa+gyHF47PeKSgo=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIG6dy3cd7/J8/ldMQ1ekey8aNTB3bIC6Hkh60ewWVssFAiEAz6MYcJn+jJuFgbgcxJyN+gasKG+jbKcX61BDFGEo1FE=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@adsefid%2fsdk@0.7.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":294925},"main":"./dist/index.cjs","type":"module","_from":"file:artifacts/adsefid-sdk-0.7.0.tgz","types":"./dist/index.d.ts","module":"./dist/index.js","engines":{"node":">=22"},"exports":{".":{"import":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"require":{"types":"./dist/index.d.cts","default":"./dist/index.cjs"}}},"scripts":{"lint":"biome check .","test":"vitest run","build":"tsdown","format":"biome check --write .","typecheck":"tsc --noEmit"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:e26b5b4a-4ac0-49bb-88ac-23c9eecea459"}},"_resolved":"/home/runner/work/sdk-js/sdk-js/artifacts/adsefid-sdk-0.7.0.tgz","_integrity":"sha512-L06/TWWXOGIGNUmQAtp84OE+VXvnFurin2imOLuHlo8Rhft6XulZxv0Sv8ShyuFePVB8Rb0Bq5LgL5KQRivGtg==","repository":{"url":"git+https://github.com/adsefid/sdk-js.git","type":"git"},"_npmVersion":"11.19.0","description":"Official JavaScript/TypeScript client SDK for the adsefid.com SMS Web Service REST API","directories":{},"sideEffects":false,"_nodeVersion":"24.20.0","_hasShrinkwrap":false,"devDependencies":{"tsx":"4.23.13","tsdown":"0.23.0","vitest":"5.0.0","typescript":"7.0.2","@types/node":"22.20.1","@biomejs/biome":"2.5.12"},"_npmOperationalInternal":{"tmp":"tmp/sdk_0.7.0_1789209811558_0.500450251353747","host":"s3://npm-registry-packages-npm-production"}},"0.7.1":{"name":"@adsefid/sdk","version":"0.7.1","license":"MIT","_id":"@adsefid/sdk@0.7.1","maintainers":[{"name":"adsefid","email":"tech@adsefid.com"}],"homepage":"https://github.com/adsefid/sdk-js#readme","bugs":{"url":"https://github.com/adsefid/sdk-js/issues"},"dist":{"shasum":"c85e0e98d734986b1226a972bd32f07a42c293bf","tarball":"https://registry.npmjs.org/@adsefid/sdk/-/sdk-0.7.1.tgz","fileCount":9,"integrity":"sha512-TC8GiywQqed0aPy526cTZcsLKWbBERbq9V+UfT+UkXZlN3rZEkL/mhkxH041EMfCVFQZi7aHkenCESpHIWhV3w==","signatures":[{"sig":"MEQCIHOfRena5+qJg3ude/nKlG5+pbc8i0D80Pu5ckTkGLbmAiAFRJCJwqxUXtMZAFRSvuLN5b1crZ4fne9Qk+RXyDdGig==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIQC3g3wkvwMrvrHIWIn4J4m94kjjQi4CIIvTAV7rVJAA0gIgPo9tXJ2biVT00j0A4r+aNrmpyIyVLACxmF6cLzu8H7o=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@adsefid%2fsdk@0.7.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":294925},"main":"./dist/index.cjs","type":"module","_from":"file:artifacts/adsefid-sdk-0.7.1.tgz","types":"./dist/index.d.ts","module":"./dist/index.js","engines":{"node":">=22"},"exports":{".":{"import":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"require":{"types":"./dist/index.d.cts","default":"./dist/index.cjs"}}},"scripts":{"lint":"biome check .","test":"vitest run","build":"tsdown","format":"biome check --write .","typecheck":"tsc --noEmit"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:e26b5b4a-4ac0-49bb-88ac-23c9eecea459"}},"_resolved":"/home/runner/work/sdk-js/sdk-js/artifacts/adsefid-sdk-0.7.1.tgz","_integrity":"sha512-TC8GiywQqed0aPy526cTZcsLKWbBERbq9V+UfT+UkXZlN3rZEkL/mhkxH041EMfCVFQZi7aHkenCESpHIWhV3w==","repository":{"url":"git+https://github.com/adsefid/sdk-js.git","type":"git"},"_npmVersion":"11.19.0","description":"Official JavaScript/TypeScript client SDK for the adsefid.com SMS Web Service REST API","directories":{},"sideEffects":false,"_nodeVersion":"24.21.0","_hasShrinkwrap":false,"devDependencies":{"tsx":"4.23.15","tsdown":"0.23.0","vitest":"5.0.2","typescript":"7.0.2","@types/node":"22.20.4","@biomejs/biome":"2.5.14"},"_npmOperationalInternal":{"tmp":"tmp/sdk_0.7.1_1790512316203_0.9481738521349767","host":"s3://npm-registry-packages-npm-production"}},"0.8.0":{"_id":"@adsefid/sdk@0.8.0","bugs":{"url":"https://github.com/adsefid/sdk-js/issues"},"dist":{"shasum":"43fa59c4645d27343e7e72879b3617f4d637f4f4","tarball":"https://registry.npmjs.org/@adsefid/sdk/-/sdk-0.8.0.tgz","fileCount":9,"integrity":"sha512-U3CJ1qKsVtULdt/idtotoaGX3giJwVBuepOOVOKEfNa8AG+8DtJ1Gm7kumlYNkchGaN9cDPBIjMBlFJoCdcQJg==","signatures":[{"sig":"MEQCIFUZV0z0VrsS1IXpXnrsuERmt2ogTbICP2tTlk/yfZAUAiBsGVBYFJi1DxrnXHJzn8xyD7WxUIrHQtds3uX+VG3VFQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEQCIFwPBUX9Fu6xvtWthCy0U8dh5Jkp60i0QYouC4XzSLaQAiBoVVzgzPovfWGRdcRkQeQ1CXBQ581yJZIimhWPfXCCQA=="}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@adsefid%2fsdk@0.8.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":312693},"main":"./dist/index.cjs","name":"@adsefid/sdk","type":"module","_from":"file:artifacts/adsefid-sdk-0.8.0.tgz","types":"./dist/index.d.ts","module":"./dist/index.js","engines":{"node":">=22"},"exports":{".":{"import":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"require":{"types":"./dist/index.d.cts","default":"./dist/index.cjs"}},"./package.json":"./package.json"},"license":"MIT","scripts":{"lint":"biome check .","test":"vitest run","build":"tsdown","smoke":"node tests/runtime/smoke.mjs","format":"biome check --write .","test:bun":"bun --bun vitest run","smoke:bun":"bun tests/runtime/smoke.mjs","test:deno":"deno run --allow-all --no-lock node_modules/vitest/vitest.mjs run","typecheck":"tsc --noEmit","smoke:deno":"deno run --no-lock --allow-read --allow-net tests/runtime/smoke.mjs","check:package":"publint --strict && attw --pack . --profile node16"},"version":"0.8.0","_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"e26b5b4a-4ac0-49bb-88ac-23c9eecea459"}},"homepage":"https://github.com/adsefid/sdk-js#readme","keywords":["adsefid","sms","messenger","webhooks","sdk","typescript","node","bun","deno","edge","workers"],"_resolved":"/home/runner/work/sdk-js/sdk-js/artifacts/adsefid-sdk-0.8.0.tgz","_integrity":"sha512-U3CJ1qKsVtULdt/idtotoaGX3giJwVBuepOOVOKEfNa8AG+8DtJ1Gm7kumlYNkchGaN9cDPBIjMBlFJoCdcQJg==","repository":{"url":"git+https://github.com/adsefid/sdk-js.git","type":"git"},"_npmVersion":"11.19.0","description":"Official JavaScript/TypeScript client SDK for the adsefid.com SMS Web Service REST API","directories":{},"maintainers":[{"name":"adsefid","email":"tech@adsefid.com"}],"sideEffects":false,"_nodeVersion":"24.21.0","_hasShrinkwrap":false,"devDependencies":{"tsx":"4.23.15","tsdown":"0.23.0","vitest":"5.0.2","publint":"0.3.24","typescript":"7.0.2","@types/node":"22.20.4","@biomejs/biome":"2.5.14","@arethetypeswrong/cli":"0.18.5"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/sdk_0.8.0_1790670980385_0.15729586904592896"}}},"time":{"created":"2026-09-07T11:53:27.299Z","modified":"2026-09-29T08:36:21.152Z","0.1.0":"2026-09-07T11:53:27.649Z","0.2.0":"2026-09-08T06:09:25.835Z","0.3.0":"2026-09-08T08:37:16.158Z","0.4.0":"2026-09-08T12:51:29.201Z","0.5.0":"2026-09-09T09:11:36.153Z","0.6.0":"2026-09-09T12:03:43.154Z","0.7.0":"2026-09-12T10:43:31.655Z","0.7.1":"2026-09-27T12:31:56.331Z","0.8.0":"2026-09-29T08:36:20.474Z"},"bugs":{"url":"https://github.com/adsefid/sdk-js/issues"},"license":"MIT","homepage":"https://github.com/adsefid/sdk-js#readme","repository":{"url":"git+https://github.com/adsefid/sdk-js.git","type":"git"},"description":"Official JavaScript/TypeScript client SDK for the adsefid.com SMS Web Service REST API","maintainers":[{"name":"adsefid","email":"tech@adsefid.com"}],"readme":"# @adsefid/sdk\n\n[![CI](https://github.com/adsefid/sdk-js/actions/workflows/ci.yml/badge.svg)](https://github.com/adsefid/sdk-js/actions/workflows/ci.yml)\n[![npm](https://img.shields.io/npm/v/%40adsefid%2Fsdk.svg)](https://www.npmjs.com/package/@adsefid/sdk)\n\nOfficial JavaScript/TypeScript client SDK for the [adsefid.com SMS Web Service](https://adsefid.com) REST API — SMS, Messenger (Rubika/Bale/etc.), and account/user endpoints, plus outgoing webhook signature verification.\n\n## Runtime support\n\n| Runtime | Versions | Module formats | Install |\n|---|---|---|---|\n| Node.js | 22+ | ESM and CommonJS | `npm install @adsefid/sdk` |\n| Bun | 1.2+ | ESM and CommonJS | `bun add @adsefid/sdk` |\n| Deno | 2.0+ | ESM (`npm:` specifier) | `deno add npm:@adsefid/sdk` |\n| Edge and sandboxed runtimes | Any with `fetch` and Web Crypto (e.g. Cloudflare Workers) | ESM | your bundler |\n\nThe package has a single entry point and is built only on Web-standard APIs — `fetch`,\n`FormData`, `Blob`, `ReadableStream`, `AbortController`, `TextEncoder`, and Web Crypto. It uses no\nNode.js built-ins, has zero runtime dependencies, and ships its own type declarations, so it needs\nno `@types/node`. Every supported runtime runs the full test suite and a smoke test of the built\npackage in CI.\n\nIn Deno, import `npm:@adsefid/sdk` (or the bare name after `deno add`) and grant network access\nto the API host, for example `deno run --allow-net=api.adsefid.com main.ts`. Add `--allow-env` if\nyou read the API key from the environment.\n\n**Server-side only.** This SDK holds your secret `X-API-KEY`. It is not designed for and must not\nbe used in browser/client-side code — bundling it into a frontend app would expose your API key to\nanyone who opens dev tools.\n\n## Quickstart\n\n```ts\nimport { AdsefidClient } from \"@adsefid/sdk\";\n\nconst client = new AdsefidClient({ apiKey: process.env.ADSEFID_API_KEY! });\n\nconst result = await client.sms.sendSingle({\n  receptor: \"98912****567\",\n  line_number: \"983000XXX\",\n  message: \"سلام، پیام تست\",\n});\n\nconsole.log(result.message_id, result.status);\n```\n\nThe package also works from plain CommonJS:\n\n```js\nconst { AdsefidClient } = require(\"@adsefid/sdk\");\n```\n\nBoth module formats ship matching declaration files, so TypeScript and JavaScript editors resolve\nthe same public API automatically.\n\n## Auth setup\n\nThe SDK never reads environment variables itself — there is no implicit env magic. Read `ADSEFID_API_KEY` (or whatever name you choose) yourself and pass it explicitly:\n\n```ts\nimport { AdsefidClient } from \"@adsefid/sdk\";\n\nconst apiKey = process.env.ADSEFID_API_KEY;\nif (!apiKey) {\n  throw new Error(\"ADSEFID_API_KEY is not set\");\n}\n\nconst client = new AdsefidClient({ apiKey });\n```\n\n## Configuration\n\n```ts\nconst client = new AdsefidClient({\n  apiKey: process.env.ADSEFID_API_KEY!,\n\n  // Override the base URL (default: \"https://api.adsefid.com\"). Must be an\n  // absolute http(s) URL; a blank apiKey or a bad baseUrl throws\n  // AdsefidValidationError from the constructor, before any request.\n  baseUrl: \"https://api.adsefid.com\",\n\n  // Supply a custom fetch implementation (polyfill, proxy-aware fetch, test double, ...)\n  fetchImpl: fetch,\n\n  // Per-request timeout in milliseconds (default: 30000)\n  timeoutMs: 15_000,\n\n  // Defaults to \"adsefid-js/<SDK_VERSION>\".\n  userAgent: \"my-service/1.0.0\",\n});\n```\n\nMonetary response fields (`cost`, `total_cost`, and `credit_left`) use `number` and may contain fractional values.\n\n## Dates use native `Date` objects\n\nEvery datetime field in this SDK — `send_time`, `expiry_date`, `receive_date`, `delivery_time`,\n`since`, `created_at`, `updated_at`, and `occurred_at` — uses a native JavaScript `Date`. Pass\n`Date` objects in requests; responses and verified webhook events return `Date` objects. The SDK\nexplicitly serializes request dates with `toISOString()` and parses each documented response field.\nResponse fields the service may leave unset (`send_time`, `expiry_date`, `delivery_time`) are typed\n`Date | null`.\n\n`Date` preserves the instant, not the source offset. An API value such as\n`2026-04-04T10:30:00+03:30` becomes the same instant as `2026-04-04T07:00:00.000Z`. Calling\n`toISOString()` therefore returns UTC. Invalid request dates throw `AdsefidValidationError`; an\ninvalid datetime in a successful API response throws `AdsefidTransportError`.\n\n## Resource reference\n\n| Resource | SDK method | HTTP endpoint | Notes |\n|---|---|---|---|\n| `client.sms` | `sendSingle(req)` | `POST /v1/sms/single` | |\n| `client.sms` | `sendBulk(req)` | `POST /v1/sms/bulk` | Partial success is a normal typed return |\n| `client.sms` | `sendP2P(req)` | `POST /v1/sms/p2p` | Partial success is a normal typed return |\n| `client.sms` | `sendTemplate(req)` | `POST /v1/sms/template` | |\n| `client.sms` | `getStatus(query)` | `GET /v1/sms/status` | |\n| `client.sms` | `cancel(req)` | `POST /v1/sms/cancel` | |\n| `client.sms` | `getReceived(query)` | `GET /v1/sms/receive` | |\n| `client.messenger` | `sendSingle(req)` | `POST /v1/messenger/single` | |\n| `client.messenger` | `sendBulk(req)` | `POST /v1/messenger/bulk` | Partial success is a normal typed return |\n| `client.messenger` | `sendP2P(req)` | `POST /v1/messenger/p2p` | Partial success is a normal typed return |\n| `client.messenger` | `uploadFile(params)` | `POST /v1/messenger/file` | Accepts `Blob`, `ArrayBuffer`, or `ReadableStream` |\n| `client.messenger` | `cancel(req)` | `POST /v1/messenger/cancel` | |\n| `client.messenger` | `sendTemplate(req)` | `POST /v1/messenger/template` | |\n| `client.messenger` | `getStatus(query)` | `GET /v1/messenger/status` | |\n| `client.user` | `getInfo()` | `GET /v1/user/info` | |\n| `client.user` | `getLines()` | `GET /v1/user/lines` | |\n| `client.user` | `getProfiles()` | `GET /v1/user/profiles` | |\n| `client.user` | `getTemplates(query?)` | `GET /v1/user/templates` | |\n\nEvery method **throws** on a non-success response envelope or a non-2xx HTTP status; a successful call returns the typed response object directly (no `Result`/`Either` wrapper). Bulk and P2P endpoints can return partial success (some receptors accepted, some rejected) — that is a normal typed return value, not a thrown error; inspect each item's `status` field. Item values are sent unchanged so the API can accept or reject them independently; only request-level fields are prevalidated.\n\n## Error handling\n\n```ts\nimport {\n  AdsefidApiError,\n  AdsefidRateLimitError,\n  AdsefidTransportError,\n  AdsefidValidationError,\n  WebServiceResponseCode,\n} from \"@adsefid/sdk\";\n\ntry {\n  await client.sms.sendSingle({\n    receptor: \"98912****567\",\n    line_number: \"983000XXX\",\n    message: \"hello\",\n  });\n} catch (err) {\n  if (err instanceof AdsefidRateLimitError) {\n    console.warn(\"Rate limited:\", err.codeName, err.details);\n  } else if (err instanceof AdsefidApiError) {\n    // err.code is a numeric WebServiceResponseCode (e.g. 2007)\n    // err.codeName is the SCREAMING_SNAKE name (e.g. \"DUPLICATE_LOCAL_ID\")\n    // err.details is ApiErrorDetails: optional field errors and indexed item errors\n    console.error(err.code, err.codeName, err.httpStatusCode, err.details);\n    if (err.code === WebServiceResponseCode.DUPLICATE_LOCAL_ID) {\n      // handle idempotency conflict\n    }\n  } else if (err instanceof AdsefidValidationError) {\n    // Thrown client-side, before any request was sent (e.g. bad local_id format)\n    console.error(\"Invalid request:\", err.message, err.field);\n  } else if (err instanceof AdsefidTransportError) {\n    // Network failure, timeout, or unparsable response\n    console.error(\"Transport failure:\", err.message, err.cause);\n  } else {\n    throw err;\n  }\n}\n```\n\n`AdsefidApiError` deliberately does not use a property named `name` for the error's symbolic name (`\"DUPLICATE_LOCAL_ID\"`, `\"INVALID_PARAMETER\"`, ...) — that would shadow the inherited `Error.prototype.name` (which stays `\"AdsefidApiError\"`). Use `err.codeName` instead.\n\n`err.details` is an optional `ApiErrorDetails`. `errors` maps field names (or rejected cancel IDs)\nto `{ code, name }`; `items` contains `{ index, errors }` entries for rejected bulk/P2P items.\nBoth are absent when empty, and numeric codes remain forward-compatible.\n\n## Rate limits\n\nThe API enforces a default sending limit of 500 units/second, shared across SMS and Messenger traffic (SMS is counted per segment). If you exceed it, you get back:\n\n- `2035 MESSAGE_LIMIT_REACHED`\n- `2036 REQUEST_LIMIT_REACHED`\n\nBoth surface as `AdsefidRateLimitError` (a subclass of `AdsefidApiError`).\n\n## Enum reference\n\nAll enums are plain `as const` objects (not TypeScript `enum`s), each with a derived union type of the same name:\n\n- `LineSelector` — `PromotionalSendBased` (0) … `CustomerClubServiceDeliverBased` (5)\n- `WebServiceMessageStatus` — `SCHEDULED` (1000) … `UNKNOWN` (1999)\n- `WebServiceResponseCode` — `INTERNAL_ERROR` (2000) … `FILE_TOO_LARGE` (2047), plus `WebServiceResponseCodeHttpStatus` mapping each code to its documented HTTP status\n- `isWebServiceMessageStatus(code)` / `isWebServiceResponseCode(code)` — type guards for a per-item\n  `status` in a bulk/P2P response, which is a `WebServiceCode`: `1000-1999` means the item was\n  accepted, `2000+` means that one item was rejected (e.g. `2025 RECEPTOR_BLACKLISTED`) even\n  though the response as a whole succeeded\n- `LIMITS` — the request bounds the SDK checks before sending (`smsMessageMaxLength`,\n  `messengerMessageMaxLength`, `combinedStatusIdsMax`, `receiveCountMin`/`Max`,\n  `templatesTakeMin`/`Max`)\n- `TemplateState` — `\"pendingapproval\" | \"approved\" | \"rejected\"`\n- `TemplateParameterType` — `\"string\" | \"number\"` (the documented complete public set). The live\n  service also emits an undocumented third value; such a parameter is dropped from\n  `UserTemplate.parameters` rather than surfaced as a value the union says cannot exist.\n\n## Template parameters, leading zeros and decimals\n\n`TemplateParameterValue` is `string | number`, and `TemplateParameters` is a `Record` of them. A\nparameter the template declares as `number` may be sent **either** as a JSON number or as a JSON\nstring, and the service substitutes a numeric string verbatim. Since JavaScript numbers are\nIEEE-754 doubles, a string is the only way to express a value whose exact digits matter:\n\n```ts\nawait client.sms.sendTemplate({\n  template_id: \"invoice_notice\",\n  parameters: {\n    invoice: \"001234\", // renders as 001234 — the number 1234 would lose the zeros\n    amount: \"1.50\",    // renders as 1.50   — the number 1.5 would lose the zero\n    count: 2,          // an ordinary integer\n    rate: 19.99,       // a decimal, where double rounding is acceptable\n  },\n  receptor: \"09120000000\",\n  line_number: \"983000XXX\",\n});\n```\n\nReach for a string whenever the rendered text must match the digits you supplied — invoice and\naccount numbers, zero-padded codes, and money amounts with a fixed number of decimal places. See\n[`examples/templates.ts`](./examples/templates.ts) for a runnable version.\n\n```ts\nimport { LineSelector, WebServiceMessageStatus } from \"@adsefid/sdk\";\n\nawait client.sms.sendBulk({\n  line_selector: LineSelector.BulkServiceSendBased,\n  // ...\n});\n\nif (status.receptors[0]?.status === WebServiceMessageStatus.DELIVERED) {\n  // ...\n}\n```\n\n## File upload example\n\n```ts\nimport { readFile } from \"node:fs/promises\";\n\nconst { file_id } = await client.messenger.uploadFile({\n  file: await readFile(\"./brochure.pdf\"),\n  filename: \"brochure.pdf\",\n  contentType: \"application/pdf\",\n});\n\nawait client.messenger.sendSingle({\n  message: \"Here's our brochure\",\n  receptor: \"98912****567\",\n  profile: \"b72ea7f4-44b4-4f5e-91ef-91816ae5f88a\",\n  file_id,\n});\n```\n\n`uploadFile` accepts a `Uint8Array` (so a Node.js `Buffer`, or the bytes from `Bun.file().bytes()`\nor `Deno.readFile()`), a `Blob`, an `ArrayBuffer`, or a `ReadableStream<Uint8Array>`. The service enforces\nits documented MIME allowlist and 15 MB limit; oversized uploads return `FILE_TOO_LARGE` (2047,\nHTTP 413).\n\n## Webhook verification example\n\n`verifyAndParseWebhook` is async (it uses Web Crypto). It checks the signature and timestamp\nbefore touching the payload, and accepts the raw body as a `Uint8Array` (a Node.js `Buffer` is\none), an `ArrayBuffer`, or a `string`. A minimal Node.js `node:http` handler:\n\n```ts\nimport { createServer } from \"node:http\";\nimport {\n  verifyAndParseWebhook,\n  AdsefidWebhookVerificationError,\n  WEBHOOK_HEADERS_LOWERCASE,\n  WEBHOOK_EVENT_TYPES,\n} from \"@adsefid/sdk\";\n\nconst secret = process.env.ADSEFID_WEBHOOK_SECRET!;\n\nconst server = createServer((req, res) => {\n  const chunks: Buffer[] = [];\n  req.on(\"data\", (chunk) => chunks.push(chunk));\n  req.on(\"end\", async () => {\n    const rawBody = Buffer.concat(chunks);\n\n    let event;\n    try {\n      event = await verifyAndParseWebhook({\n        rawBody,\n        signatureHeader: String(req.headers[WEBHOOK_HEADERS_LOWERCASE.signature] ?? \"\"),\n        timestampHeader: String(req.headers[WEBHOOK_HEADERS_LOWERCASE.timestamp] ?? \"\"),\n        secret,\n      });\n    } catch (err) {\n      if (err instanceof AdsefidWebhookVerificationError) {\n        res.writeHead(401).end(\"invalid signature\");\n        return;\n      }\n      throw err;\n    }\n\n    // Only event types this webhook endpoint is subscribed to (in your adsefid.com panel) ever\n    // arrive here — an endpoint subscribed to just \"receive\" never sees a \"status\" event.\n    switch (event.type) {\n      case WEBHOOK_EVENT_TYPES.receive:\n        for (const item of event.data) {\n          console.log(\"inbound SMS\", item.sender, item.message);\n        }\n        break;\n      case WEBHOOK_EVENT_TYPES.status:\n        for (const item of event.data) {\n          console.log(\"SMS status\", item.id, item.status_delivery);\n        }\n        break;\n      case WEBHOOK_EVENT_TYPES.messengerStatus:\n        for (const item of event.data) {\n          console.log(\"messenger status\", item.id, item.status_delivery);\n        }\n        break;\n    }\n\n    // Return 2xx quickly; do heavier processing asynchronously.\n    res.writeHead(200).end(\"ok\");\n  });\n});\n\nserver.listen(3000);\n```\n\nIf you're using a framework that already parses the body (e.g. Express's `express.json()`), make sure you also capture the *raw* request body bytes for signature verification — the middleware's parsed object is not byte-identical to what was signed.\n\n### The signing secret is Base64\n\nYour endpoint's signing secret is shown in the adsefid.com panel as the Base64 encoding of 32\nrandom bytes, and the platform signs with **those raw bytes** — not with the text of the Base64\nstring. Pass the secret exactly as the panel shows it and `verifyAndParseWebhook` decodes it for\nyou; a secret that is not valid Base64 throws `AdsefidWebhookVerificationError`. If you already\nhold the decoded key, pass it as a `Uint8Array` instead.\n\n`WEBHOOK_HEADERS`/`WEBHOOK_HEADERS_LOWERCASE` export every header name as a constant so you never\nhave to type `\"x-atlas-webhook-signature\"` yourself; `WEBHOOK_EVENT_TYPES` does the same for the\n`type` values. You configure, per webhook endpoint, which event types it receives (in your\nadsefid.com panel) — an endpoint subscribed only to `receive` will never see a `\"status\"` event,\nso don't assume every deployment gets all three; handle whichever ones you've subscribed to.\n\n### Fetch-style handlers (Bun, Deno, Workers)\n\nThe same function works in any `fetch(request)` handler:\n\n```ts\nimport { verifyAndParseWebhook, WEBHOOK_HEADERS_LOWERCASE } from \"@adsefid/sdk\";\n\nconst event = await verifyAndParseWebhook({\n  rawBody: new Uint8Array(await request.arrayBuffer()),\n  signatureHeader: request.headers.get(WEBHOOK_HEADERS_LOWERCASE.signature) ?? \"\",\n  timestampHeader: request.headers.get(WEBHOOK_HEADERS_LOWERCASE.timestamp) ?? \"\",\n  secret: env.ADSEFID_WEBHOOK_SECRET,\n});\n```\n\n[`examples/fetch-webhook-server.ts`](./examples/fetch-webhook-server.ts) is a complete receiver\nthat runs unchanged with `bun run`, `deno serve`, and on Cloudflare Workers.\n\n## Versioning\n\nThis SDK follows Semantic Versioning independently of the API documentation.\n\n- SDK version: **`0.8.0`** (`version` in `package.json`)\n- Verified API documentation: **`v1.13.0`**\n\nSDK releases use `v<SDK_VERSION>` tags. The two version numbers move independently.\n\n## Development\n\nRequires **Node.js 22+**, plus **Bun** and **Deno** for the cross-runtime targets. Development\ntools are pinned in `package.json`; the published package has zero runtime dependencies.\n\n```bash\nmake deps   # npm install\nmake fmt    # npm run format  (biome check --write .)\nmake lint   # npm run lint    (biome check .) + tsc --noEmit on src and tests\nmake build  # npm run build   (tsdown — emits ESM, CJS, and .d.ts into dist/)\nmake test   # npm test        (vitest run)\n\nmake test-bun       # the same Vitest suite, executed by Bun\nmake test-deno      # the same Vitest suite, executed by Deno\nmake smoke          # build, then smoke-test dist/ on Node.js, Bun, and Deno\nmake check-package  # build, then publint + are-the-types-wrong on the packed tarball\nmake runtimes       # test + test-bun + test-deno + smoke\n```\n\n`vitest` is a devDependency only; the published package still has zero runtime dependencies. Golden\nfixtures under `tests/fixtures/` are byte-identical to the same tree in the sibling SDK\nrepositories, and `tests/fixtures.test.ts` verifies them against `CHECKSUMS.txt`.\n\n### Examples\n\nRunnable usage samples live in [`examples/`](./examples) (not published to npm — see `\"files\"` in\n`package.json`). Run one directly with `tsx`:\n\n```bash\nexport ADSEFID_API_KEY=...\nexport ADSEFID_LINE_NUMBER=983000XXX\n\nnpx tsx examples/account.ts            # account info, lines, profiles, templates; client config\nnpx tsx examples/quickstart.ts         # send one SMS, with full error triage\nnpx tsx examples/bulk-and-p2p.ts       # bulk + P2P sends, and reading a partial success\nnpx tsx examples/templates.ts          # list templates and send one, incl. exact numeric values\nnpx tsx examples/status-and-cancel.ts  # delivery status, cancelling, inbound messages\nnpx tsx examples/messenger.ts          # upload an attachment and send it via a messenger profile\n\nADSEFID_WEBHOOK_SECRET=... npx tsx examples/webhook-server.ts\n\n# Runtime-neutral fetch handler (build first: npm run build)\nADSEFID_WEBHOOK_SECRET=... bun run examples/fetch-webhook-server.ts\nADSEFID_WEBHOOK_SECRET=... deno serve --allow-env --allow-read examples/fetch-webhook-server.ts\n```\n\n`examples/account.ts` sends nothing, so it is the safest one to try first.\n\n## License\n\nMIT — see [LICENSE](LICENSE).\n","readmeFilename":"README.md","keywords":["adsefid","sms","messenger","webhooks","sdk","typescript","node","bun","deno","edge","workers"]}