{"_id":"@hookflo/tern","_rev":"56-f1ce8d1d8c2be2468cfec012fdf037ca","name":"@hookflo/tern","dist-tags":{"experimental":"2.0.3-experimental.0","beta":"4.3.0-beta.2","latest":"4.5.0"},"versions":{"1.0.0":{"name":"@hookflo/tern","version":"1.0.0","keywords":["Hookflo","webhook","verification","security","hmac","signature","github","stripe","clerk","supabase","typescript","node","express","nextjs"],"author":{"name":"Prateek Jain"},"license":"MIT","_id":"@hookflo/tern@1.0.0","maintainers":[{"name":"prateek32177","email":"prateek32177@gmail.com"}],"homepage":"https://github.com/Hookflo/tern#readme","bugs":{"url":"https://github.com/Hookflo/tern/issues"},"dist":{"shasum":"841b1ee3a26fc78e44d9112ccf1b02da30c6ead5","tarball":"https://registry.npmjs.org/@hookflo/tern/-/tern-1.0.0.tgz","fileCount":23,"integrity":"sha512-HB7t2hx5VeTRWLIsNxb06zbLJakFYPv0qg2XmODfL4KKq4QwqU+cASjHICEhr0Ymaq+7p+xO5c5ZtIrtnz50Vw==","signatures":[{"sig":"MEUCIQD9VquKAlCIDlK5po2wSAiB6rLH4Nisxin/CzKe5znJbQIgZKOBw9symftTm4LGxaeJxEibIQvm0pc4DZwni7VQVks=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":75448},"main":"dist/index.js","types":"dist/index.d.ts","engines":{"node":">=16.0.0"},"gitHead":"479b7504ab3ad97c432724e5cc4c89f666b53f73","scripts":{"dev":"tsc --watch","lint":"eslint src/**/*.ts","test":"node dist/test.js","build":"tsc","clean":"rm -rf dist","format":"prettier --write src/**/*.ts","prepare":"npm run build","publish":"npm publish","lint:fix":"eslint 'src/**/*.ts' --fix","prebuild":"npm run clean"},"_npmUser":{"name":"prateek32177","email":"prateek32177@gmail.com"},"repository":{"url":"git+https://github.com/Hookflo/tern.git","type":"git"},"_npmVersion":"10.9.2","description":"A robust, scalable webhook verification framework supporting multiple platforms and signature algorithms","directories":{},"_nodeVersion":"22.13.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"jest":"29.5.0","eslint":"^8.57.1","ts-jest":"29.1.0","prettier":"3.0.0","typescript":"^5.0.0","@types/jest":"29.5.0","@types/node":"20.0.0","@types/express":"^5.0.3","eslint-plugin-import":"^2.32.0","@typescript-eslint/parser":"^8.39.0","eslint-config-airbnb-base":"^15.0.0","@typescript-eslint/eslint-plugin":"^8.39.0"},"_npmOperationalInternal":{"tmp":"tmp/tern_1.0.0_1754663783516_0.48214656579055415","host":"s3://npm-registry-packages-npm-production"}},"1.0.1":{"name":"@hookflo/tern","version":"1.0.1","keywords":["Hookflo","webhook","verification","security","hmac","signature","github","stripe","clerk","supabase","typescript","node","express","nextjs"],"author":{"name":"Prateek Jain"},"license":"MIT","_id":"@hookflo/tern@1.0.1","maintainers":[{"name":"prateek32177","email":"prateek32177@gmail.com"}],"homepage":"https://github.com/Hookflo/tern#readme","bugs":{"url":"https://github.com/Hookflo/tern/issues"},"dist":{"shasum":"170a710601c86567b951eb8cee31c9cdc2f572db","tarball":"https://registry.npmjs.org/@hookflo/tern/-/tern-1.0.1.tgz","fileCount":23,"integrity":"sha512-okI9KijMxH6Ksr8ZdeLBCIUSfxYJ0yidRkQiSL0vk2e4/xQIQAUPn65ZP2QOfApnNjMGO9xU/eEpMYViR7Zp8g==","signatures":[{"sig":"MEQCICFTToieVmd2UDz/JK962R2tOGIoW7MBH7IDL6cQZxWKAiBzgEJJpgm2fC6Wuk2n/1zPYUkdJDDMHV45O5Nb6LbXIg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":75448},"main":"dist/index.js","types":"dist/index.d.ts","engines":{"node":">=16.0.0"},"gitHead":"479b7504ab3ad97c432724e5cc4c89f666b53f73","scripts":{"dev":"tsc --watch","lint":"eslint src/**/*.ts","test":"node dist/test.js","build":"tsc","clean":"rm -rf dist","format":"prettier --write src/**/*.ts","prepare":"npm run build","publish":"npm publish","lint:fix":"eslint 'src/**/*.ts' --fix","prebuild":"npm run clean"},"_npmUser":{"name":"prateek32177","email":"prateek32177@gmail.com"},"repository":{"url":"git+https://github.com/Hookflo/tern.git","type":"git"},"_npmVersion":"10.9.2","description":"A robust, scalable webhook verification framework supporting multiple platforms and signature algorithms","directories":{},"_nodeVersion":"22.13.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"jest":"29.5.0","eslint":"^8.57.1","ts-jest":"29.1.0","prettier":"3.0.0","typescript":"^5.0.0","@types/jest":"29.5.0","@types/node":"20.0.0","@types/express":"^5.0.3","eslint-plugin-import":"^2.32.0","@typescript-eslint/parser":"^8.39.0","eslint-config-airbnb-base":"^15.0.0","@typescript-eslint/eslint-plugin":"^8.39.0"},"_npmOperationalInternal":{"tmp":"tmp/tern_1.0.1_1754663828221_0.669081700122869","host":"s3://npm-registry-packages-npm-production"}},"1.0.2":{"name":"@hookflo/tern","version":"1.0.2","keywords":["Hookflo","webhook","verification","security","hmac","signature","github","stripe","clerk","supabase","typescript","node","express","nextjs"],"author":{"name":"Prateek Jain"},"license":"MIT","_id":"@hookflo/tern@1.0.2","maintainers":[{"name":"prateek32177","email":"prateek32177@gmail.com"}],"homepage":"https://github.com/Hookflo/tern#readme","bugs":{"url":"https://github.com/Hookflo/tern/issues"},"dist":{"shasum":"195cefc85cf7af280472e18ee622964edcd098ff","tarball":"https://registry.npmjs.org/@hookflo/tern/-/tern-1.0.2.tgz","fileCount":23,"integrity":"sha512-bscOLdLtt7jusHOP74zBY6wOfTKE0KD5Mb9ez+9aeewFEOk5owcXvWPZ4fHYlBn7Ld4HShlta8Jy84AO7MPzyg==","signatures":[{"sig":"MEUCICHf/OcfK12/eVfVcR1IStppemq+g+MDrY4Tjvu6halFAiEA1TA9M8BfjabTu1BOyS8/wfijDC/3dvOZSUEdwjTK+nw=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":74967},"main":"dist/index.js","types":"dist/index.d.ts","engines":{"node":">=16.0.0"},"gitHead":"4cef50eba762af21da7fa5cffaeab26867e4115a","scripts":{"dev":"tsc --watch","lint":"eslint src/**/*.ts","test":"node dist/test.js","build":"tsc","clean":"rm -rf dist","format":"prettier --write src/**/*.ts","prepare":"npm run build","publish":"npm publish","lint:fix":"eslint 'src/**/*.ts' --fix","prebuild":"npm run clean"},"_npmUser":{"name":"prateek32177","email":"prateek32177@gmail.com"},"repository":{"url":"git+https://github.com/Hookflo/tern.git","type":"git"},"_npmVersion":"10.9.2","description":"A robust, scalable webhook verification framework supporting multiple platforms and signature algorithms","directories":{},"_nodeVersion":"22.13.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"jest":"29.5.0","eslint":"^8.57.1","ts-jest":"29.1.0","prettier":"3.0.0","typescript":"^5.0.0","@types/jest":"29.5.0","@types/node":"20.0.0","@types/express":"^5.0.3","eslint-plugin-import":"^2.32.0","@typescript-eslint/parser":"^8.39.0","eslint-config-airbnb-base":"^15.0.0","@typescript-eslint/eslint-plugin":"^8.39.0"},"_npmOperationalInternal":{"tmp":"tmp/tern_1.0.2_1754909211855_0.8848142823289726","host":"s3://npm-registry-packages-npm-production"}},"1.0.3":{"name":"@hookflo/tern","version":"1.0.3","keywords":["Hookflo","webhook","verification","security","hmac","signature","github","stripe","clerk","supabase","typescript","node","express","nextjs"],"author":{"name":"Prateek Jain"},"license":"MIT","_id":"@hookflo/tern@1.0.3","maintainers":[{"name":"prateek32177","email":"prateek32177@gmail.com"}],"homepage":"https://github.com/Hookflo/tern#readme","bugs":{"url":"https://github.com/Hookflo/tern/issues"},"dist":{"shasum":"a284bff0bbc8c4d47f39ae80935ea94d386b2619","tarball":"https://registry.npmjs.org/@hookflo/tern/-/tern-1.0.3.tgz","fileCount":23,"integrity":"sha512-fhPSPNRUoLgU5KWklJyJIAoYz7revI+7nS5/bAp8BogtVAIufJPFWM/SE63vwve6umxl7M3pb4Pe3Ks/5YytLA==","signatures":[{"sig":"MEYCIQCz9y6b/UYavMdZnqDmbdov2yl6CSVXuYdgklOL6/SCBQIhANBLZgbdlD9pIvIXfK5ZF2d6PM7YZE18HsaNBgwKrnkm","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":75281},"main":"dist/index.js","types":"dist/index.d.ts","engines":{"node":">=16.0.0"},"gitHead":"1c59e839ad861b1d8628242ccd81b8db576a6815","scripts":{"dev":"tsc --watch","lint":"eslint src/**/*.ts","test":"node dist/test.js","build":"tsc","clean":"rm -rf dist","format":"prettier --write src/**/*.ts","prepare":"npm run build","lint:fix":"eslint 'src/**/*.ts' --fix","prebuild":"npm run clean","release:major":"npm run build && npm version major && npm publish","release:minor":"npm run build && npm version minor && npm publish","release:patch":"npm run build && npm version patch && npm publish"},"_npmUser":{"name":"prateek32177","email":"prateek32177@gmail.com"},"repository":{"url":"git+https://github.com/Hookflo/tern.git","type":"git"},"_npmVersion":"10.9.2","description":"A robust, scalable webhook verification framework supporting multiple platforms and signature algorithms","directories":{},"_nodeVersion":"22.13.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"jest":"29.5.0","eslint":"^8.57.1","ts-jest":"29.1.0","prettier":"3.0.0","typescript":"^5.0.0","@types/jest":"29.5.0","@types/node":"20.0.0","@types/express":"^5.0.3","eslint-plugin-import":"^2.32.0","@typescript-eslint/parser":"^8.39.0","eslint-config-airbnb-base":"^15.0.0","@typescript-eslint/eslint-plugin":"^8.39.0"},"_npmOperationalInternal":{"tmp":"tmp/tern_1.0.3_1754921491803_0.7919599279025629","host":"s3://npm-registry-packages-npm-production"}},"1.0.4":{"name":"@hookflo/tern","version":"1.0.4","keywords":["Hookflo","webhook","verification","security","hmac","signature","github","stripe","clerk","supabase","typescript","node","express","nextjs"],"author":{"name":"Prateek Jain"},"license":"MIT","_id":"@hookflo/tern@1.0.4","maintainers":[{"name":"prateek32177","email":"prateek32177@gmail.com"}],"homepage":"https://github.com/Hookflo/tern#readme","bugs":{"url":"https://github.com/Hookflo/tern/issues"},"dist":{"shasum":"f697c51b56fc17529e038fb535cb59468e9fca4c","tarball":"https://registry.npmjs.org/@hookflo/tern/-/tern-1.0.4.tgz","fileCount":23,"integrity":"sha512-xOtSr2FhoxgZcCwk+txSKEYgBxYliowziSMtw87zEpDxwYiOFiMvB8KoqycpKhx6XV8Ygx4M5XAlciejZir6bQ==","signatures":[{"sig":"MEQCIGzAR43Afk9dFesE3zAEYubZXjOajkLxXe4lwm4YtXYrAiBW3IYaKtdZgvBsxTVPFIwJcnUupYGBsJ/7JuDMP2styQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":75512},"main":"dist/index.js","types":"dist/index.d.ts","engines":{"node":">=16.0.0"},"gitHead":"81bd70675915a325cdf72ddc882f08f1b821d98c","scripts":{"dev":"tsc --watch","lint":"eslint src/**/*.ts","test":"node dist/test.js","build":"tsc","clean":"rm -rf dist","format":"prettier --write src/**/*.ts","prepare":"npm run build","lint:fix":"eslint 'src/**/*.ts' --fix","prebuild":"npm run clean","release:major":"npm run build && npm version major && npm publish","release:minor":"npm run build && npm version minor && npm publish","release:patch":"npm run build && npm version patch && npm publish"},"_npmUser":{"name":"prateek32177","email":"prateek32177@gmail.com"},"repository":{"url":"git+https://github.com/Hookflo/tern.git","type":"git"},"_npmVersion":"10.9.2","description":"A robust, scalable webhook verification framework supporting multiple platforms and signature algorithms","directories":{},"_nodeVersion":"22.13.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"jest":"29.5.0","eslint":"^8.57.1","ts-jest":"29.1.0","prettier":"3.0.0","typescript":"^5.0.0","@types/jest":"29.5.0","@types/node":"20.0.0","@types/express":"^5.0.3","eslint-plugin-import":"^2.32.0","@typescript-eslint/parser":"^8.39.0","eslint-config-airbnb-base":"^15.0.0","@typescript-eslint/eslint-plugin":"^8.39.0"},"_npmOperationalInternal":{"tmp":"tmp/tern_1.0.4_1754925796965_0.9294021400319976","host":"s3://npm-registry-packages-npm-production"}},"1.0.5":{"name":"@hookflo/tern","version":"1.0.5","keywords":["Hookflo","webhook","verification","security","hmac","signature","github","stripe","clerk","supabase","typescript","node","express","nextjs"],"author":{"name":"Prateek Jain"},"license":"MIT","_id":"@hookflo/tern@1.0.5","maintainers":[{"name":"prateek32177","email":"prateek32177@gmail.com"}],"homepage":"https://github.com/Hookflo/tern#readme","bugs":{"url":"https://github.com/Hookflo/tern/issues"},"dist":{"shasum":"9a1afb5329d4bf0c3a583facc08b19b72743b226","tarball":"https://registry.npmjs.org/@hookflo/tern/-/tern-1.0.5.tgz","fileCount":23,"integrity":"sha512-CxSdUiYZ7TqAyXaXyTypWaDWtGlCM2vA5fDZ1FpmrTNIRVzxeBZwj480+wCpV58F3VOSBdu7ED9+EPfAWhYOhA==","signatures":[{"sig":"MEUCIQDpnyJuXw9OQqObokIlWgu5vIiEA0IVMVzKbKmOXJkhagIgaXn3n6ixptUu4YEfs0GGTodx9zjS9T1YFRvgZ8ptK6I=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":77333},"main":"dist/index.js","types":"dist/index.d.ts","engines":{"node":">=16.0.0"},"gitHead":"baa93c8d72e198abbee28a0c6cb0347ac3ba4469","scripts":{"dev":"tsc --watch","lint":"eslint src/**/*.ts","test":"node dist/test.js","build":"tsc","clean":"rm -rf dist","format":"prettier --write src/**/*.ts","prepare":"npm run build","lint:fix":"eslint 'src/**/*.ts' --fix","prebuild":"npm run clean","release:major":"npm run build && npm version major && npm publish","release:minor":"npm run build && npm version minor && npm publish","release:patch":"npm run build && npm version patch && npm publish"},"_npmUser":{"name":"prateek32177","email":"prateek32177@gmail.com"},"repository":{"url":"git+https://github.com/Hookflo/tern.git","type":"git"},"_npmVersion":"10.9.2","description":"A robust, scalable webhook verification framework supporting multiple platforms and signature algorithms","directories":{},"_nodeVersion":"22.13.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"jest":"29.5.0","eslint":"^8.57.1","ts-jest":"29.1.0","prettier":"3.0.0","typescript":"^5.0.0","@types/jest":"29.5.0","@types/node":"20.0.0","@types/express":"^5.0.3","eslint-plugin-import":"^2.32.0","@typescript-eslint/parser":"^8.39.0","eslint-config-airbnb-base":"^15.0.0","@typescript-eslint/eslint-plugin":"^8.39.0"},"_npmOperationalInternal":{"tmp":"tmp/tern_1.0.5_1754933683798_0.3952049191341922","host":"s3://npm-registry-packages-npm-production"}},"1.0.6":{"name":"@hookflo/tern","version":"1.0.6","keywords":["Hookflo","webhook","verification","security","hmac","signature","github","stripe","clerk","supabase","typescript","node","express","nextjs"],"author":{"name":"Prateek Jain"},"license":"MIT","_id":"@hookflo/tern@1.0.6","maintainers":[{"name":"prateek32177","email":"prateek32177@gmail.com"}],"homepage":"https://github.com/Hookflo/tern#readme","bugs":{"url":"https://github.com/Hookflo/tern/issues"},"dist":{"shasum":"f45741f5e1417109bb440375a3025a1d948e78ec","tarball":"https://registry.npmjs.org/@hookflo/tern/-/tern-1.0.6.tgz","fileCount":23,"integrity":"sha512-pcOiFQc3s0rBQn5FW3NLAQSNCIlE5XIn0SiMPokUftvdKt7NHmJIWltA9x90/+kziRW/9GrGp3BR6sGe9Zks3g==","signatures":[{"sig":"MEYCIQChgge4K6oeNtgKf/bQYCC77N8/gWhJBMh0eJXEDgJLNwIhALj09JhdzlnXxfTo/V4fJhBRlKQSYMmP+rGNjMCDdjoU","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":77742},"main":"dist/index.js","types":"dist/index.d.ts","engines":{"node":">=16.0.0"},"gitHead":"a6a7ec1c5e02a17e497a6390c33b2d70ce8728ba","scripts":{"dev":"tsc --watch","lint":"eslint src/**/*.ts","test":"node dist/test.js","build":"tsc","clean":"rm -rf dist","format":"prettier --write src/**/*.ts","prepare":"npm run build","lint:fix":"eslint 'src/**/*.ts' --fix","prebuild":"npm run clean","release:major":"npm run build && npm version major && npm publish","release:minor":"npm run build && npm version minor && npm publish","release:patch":"npm run build && npm version patch && npm publish"},"_npmUser":{"name":"prateek32177","email":"prateek32177@gmail.com"},"repository":{"url":"git+https://github.com/Hookflo/tern.git","type":"git"},"_npmVersion":"10.9.2","description":"A robust, scalable webhook verification framework supporting multiple platforms and signature algorithms","directories":{},"_nodeVersion":"22.13.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"jest":"29.5.0","eslint":"^8.57.1","ts-jest":"29.1.0","prettier":"3.0.0","typescript":"^5.0.0","@types/jest":"29.5.0","@types/node":"20.0.0","@types/express":"^5.0.3","eslint-plugin-import":"^2.32.0","@typescript-eslint/parser":"^8.39.0","eslint-config-airbnb-base":"^15.0.0","@typescript-eslint/eslint-plugin":"^8.39.0"},"_npmOperationalInternal":{"tmp":"tmp/tern_1.0.6_1754934709046_0.9335911125559098","host":"s3://npm-registry-packages-npm-production"}},"2.0.0":{"name":"@hookflo/tern","version":"2.0.0","keywords":["Hookflo","webhook","verification","security","hmac","signature","github","stripe","clerk","supabase","typescript","node","express","nextjs"],"author":{"name":"Prateek Jain"},"license":"MIT","_id":"@hookflo/tern@2.0.0","maintainers":[{"name":"prateek32177","email":"prateek32177@gmail.com"}],"homepage":"https://github.com/Hookflo/tern#readme","bugs":{"url":"https://github.com/Hookflo/tern/issues"},"dist":{"shasum":"d73e2ca7bd778f58e253f2e471f323bf5beebb90","tarball":"https://registry.npmjs.org/@hookflo/tern/-/tern-2.0.0.tgz","fileCount":51,"integrity":"sha512-brg1NbXSbvl8OMjCCk1Qfrd1Q5+WIygwVIk00T7FLQKAu76oOAk3NmEKk0aij+pK/Zygzzl4RVNFXCESiIJHOA==","signatures":[{"sig":"MEMCIALjwMIdJOMW3aW90y3Mlj/FpLId3FHIe56cvHKXq+N2Ah8ojBSy2GBrhOtkniZ+hzLjaexIA4x3OLNz70utktLN","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":101685},"main":"dist/index.js","types":"dist/index.d.ts","engines":{"node":">=16.0.0"},"gitHead":"0a76c6497ad3acc39e709d5792bac7c0375f4215","scripts":{"dev":"tsc --watch","lint":"eslint src/**/*.ts","test":"node dist/test.js","build":"tsc","clean":"rm -rf dist","format":"prettier --write src/**/*.ts","prepare":"npm run build","lint:fix":"eslint 'src/**/*.ts' --fix","prebuild":"npm run clean","release:major":"npm run build && npm version major && npm publish","release:minor":"npm run build && npm version minor && npm publish","release:patch":"npm run build && npm version patch && npm publish"},"_npmUser":{"name":"prateek32177","email":"prateek32177@gmail.com"},"repository":{"url":"git+https://github.com/Hookflo/tern.git","type":"git"},"_npmVersion":"10.9.2","description":"A robust, scalable webhook verification framework supporting multiple platforms and signature algorithms","directories":{},"_nodeVersion":"22.13.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"jest":"29.5.0","eslint":"^8.57.1","ts-jest":"29.1.0","prettier":"3.0.0","typescript":"^5.0.0","@types/jest":"29.5.0","@types/node":"20.0.0","@types/express":"^5.0.3","eslint-plugin-import":"^2.32.0","@typescript-eslint/parser":"^8.39.0","eslint-config-airbnb-base":"^15.0.0","@typescript-eslint/eslint-plugin":"^8.39.0"},"_npmOperationalInternal":{"tmp":"tmp/tern_2.0.0_1759254488211_0.9644824232625604","host":"s3://npm-registry-packages-npm-production"}},"2.0.2-experimental.0":{"name":"@hookflo/tern","version":"2.0.2-experimental.0","keywords":["Hookflo","webhook","verification","security","hmac","signature","github","stripe","clerk","supabase","typescript","node","express","nextjs"],"author":{"name":"Prateek Jain"},"license":"MIT","_id":"@hookflo/tern@2.0.2-experimental.0","maintainers":[{"name":"prateek32177","email":"prateek32177@gmail.com"}],"homepage":"https://github.com/Hookflo/tern#readme","bugs":{"url":"https://github.com/Hookflo/tern/issues"},"dist":{"shasum":"a70522123b96af112d72d6ac157cefcecf8bff7e","tarball":"https://registry.npmjs.org/@hookflo/tern/-/tern-2.0.2-experimental.0.tgz","fileCount":69,"integrity":"sha512-mhAwB8a8k9pu6CRp5Rxy4v61V69uo1F44QvnEOQF0Aq3pD4Ipnw/gbNeX8eUUglVxgLy/y7E0+oZai9fRrMSfA==","signatures":[{"sig":"MEUCIQCOdn4qNMCZccuXpAqwvuBUGfOZEB+nrQyYXn5oYjHJTwIgQWI+s26jvsS6oK3pHHNAfD44eULQJ0sTYwLWhD6baBs=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":132498},"main":"dist/index.js","types":"dist/index.d.ts","engines":{"node":">=16.0.0"},"exports":{".":{"types":"./dist/index.d.ts","require":"./dist/index.js"},"./nextjs":{"types":"./dist/nextjs.d.ts","require":"./dist/nextjs.js"},"./express":{"types":"./dist/express.d.ts","require":"./dist/express.js"},"./cloudflare":{"types":"./dist/cloudflare.d.ts","require":"./dist/cloudflare.js"}},"gitHead":"3421cb00e562d6e09c9c5bec5638a4f56f874c7e","scripts":{"dev":"tsc --watch","lint":"eslint src/**/*.ts","test":"node dist/test.js","build":"tsc","clean":"rimraf dist","format":"prettier --write src/**/*.ts","prepare":"npm run build","lint:fix":"eslint 'src/**/*.ts' --fix","prebuild":"npm run clean","release:major":"npm run build && npm version major && npm publish","release:minor":"npm run build && npm version minor && npm publish","release:patch":"npm run build && npm version patch && npm publish"},"_npmUser":{"name":"prateek32177","email":"prateek32177@gmail.com"},"repository":{"url":"git+https://github.com/Hookflo/tern.git","type":"git"},"_npmVersion":"10.9.2","description":"A robust, scalable webhook verification framework supporting multiple platforms and signature algorithms","directories":{},"_nodeVersion":"22.13.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"29.5.0","eslint":"^8.57.1","rimraf":"^6.0.1","ts-jest":"29.1.0","ts-node":"^10.9.2","prettier":"3.0.0","typescript":"^5.0.0","@types/jest":"29.5.0","@types/node":"20.0.0","@types/express":"^5.0.3","eslint-plugin-import":"^2.32.0","@typescript-eslint/parser":"^8.39.0","eslint-config-airbnb-base":"^15.0.0","@typescript-eslint/eslint-plugin":"^8.39.0"},"_npmOperationalInternal":{"tmp":"tmp/tern_2.0.2-experimental.0_1771430910591_0.8015883290966801","host":"s3://npm-registry-packages-npm-production"}},"2.0.2":{"name":"@hookflo/tern","version":"2.0.2","keywords":["Hookflo","webhook","verification","security","hmac","signature","github","stripe","clerk","supabase","typescript","node","express","nextjs"],"author":{"name":"Prateek Jain"},"license":"MIT","_id":"@hookflo/tern@2.0.2","maintainers":[{"name":"prateek32177","email":"prateek32177@gmail.com"}],"homepage":"https://github.com/Hookflo/tern#readme","bugs":{"url":"https://github.com/Hookflo/tern/issues"},"dist":{"shasum":"3ecba591d0cae86a3aec87161e8d94a6e5a82a77","tarball":"https://registry.npmjs.org/@hookflo/tern/-/tern-2.0.2.tgz","fileCount":69,"integrity":"sha512-YU5Lq08+WVzIWpv4izP0EJe904xcJq2CM5pG4AslpgfGn6nnpr9kmx7pugelfyg+tOlsDcL/+ZdQHLwdGymDuQ==","signatures":[{"sig":"MEQCIB3qwqmT6D76r7sVzhwxBR/fW2lHCbMWvr1i13y58DrtAiBS1b4Mo9nIA4R128vf2eLWu3QTSD7N5GhLAzLcnsr14A==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":134161},"main":"dist/index.js","types":"dist/index.d.ts","engines":{"node":">=16.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","default":"./dist/index.js","require":"./dist/index.js"},"./nextjs":{"types":"./dist/nextjs.d.ts","import":"./dist/nextjs.js","default":"./dist/nextjs.js","require":"./dist/nextjs.js"},"./express":{"types":"./dist/express.d.ts","import":"./dist/express.js","default":"./dist/express.js","require":"./dist/express.js"},"./cloudflare":{"types":"./dist/cloudflare.d.ts","import":"./dist/cloudflare.js","default":"./dist/cloudflare.js","require":"./dist/cloudflare.js"},"./package.json":"./package.json"},"gitHead":"17dbe49405e18f86dd2e08ba28b61c0080e06c95","scripts":{"dev":"tsc --watch","lint":"eslint src/**/*.ts","test":"node dist/test.js","build":"tsc","clean":"rimraf dist","format":"prettier --write src/**/*.ts","prepare":"npm run build","lint:fix":"eslint 'src/**/*.ts' --fix","prebuild":"npm run clean","release:major":"npm run build && npm version major && npm publish","release:minor":"npm run build && npm version minor && npm publish","release:patch":"npm run build && npm version patch && npm publish"},"_npmUser":{"name":"prateek32177","email":"prateek32177@gmail.com"},"repository":{"url":"git+https://github.com/Hookflo/tern.git","type":"git"},"_npmVersion":"10.9.2","description":"A robust, scalable webhook verification framework supporting multiple platforms and signature algorithms","directories":{},"_nodeVersion":"22.13.0","publishConfig":{"access":"public"},"typesVersions":{"*":{"*":["dist/index.d.ts"],"nextjs":["dist/nextjs.d.ts"],"express":["dist/express.d.ts"],"cloudflare":["dist/cloudflare.d.ts"]}},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"29.5.0","eslint":"^8.57.1","rimraf":"^6.0.1","ts-jest":"29.1.0","ts-node":"^10.9.2","prettier":"3.0.0","typescript":"^5.0.0","@types/jest":"29.5.0","@types/node":"20.0.0","@types/express":"^5.0.3","eslint-plugin-import":"^2.32.0","@typescript-eslint/parser":"^8.39.0","eslint-config-airbnb-base":"^15.0.0","@typescript-eslint/eslint-plugin":"^8.39.0"},"_npmOperationalInternal":{"tmp":"tmp/tern_2.0.2_1771437039606_0.10038468830309988","host":"s3://npm-registry-packages-npm-production"}},"2.0.3-experimental.0":{"name":"@hookflo/tern","version":"2.0.3-experimental.0","keywords":["Hookflo","webhook","verification","security","hmac","signature","github","stripe","clerk","supabase","typescript","node","express","nextjs"],"author":{"name":"Prateek Jain"},"license":"MIT","_id":"@hookflo/tern@2.0.3-experimental.0","maintainers":[{"name":"prateek32177","email":"prateek32177@gmail.com"}],"homepage":"https://github.com/Hookflo/tern#readme","bugs":{"url":"https://github.com/Hookflo/tern/issues"},"dist":{"shasum":"f4c34aab0463d0ccc01ef2677c7de4fbc06d0492","tarball":"https://registry.npmjs.org/@hookflo/tern/-/tern-2.0.3-experimental.0.tgz","fileCount":69,"integrity":"sha512-d3tfO6kJ8VAEs7qDov2vawIluxlH6VbmT1hMjv+0jl4YL9wBrD6Yg5IyjzO+YUQq2ehKSR7pWZoFpHKsU6TbfA==","signatures":[{"sig":"MEUCIB5c6BbAJu3VRtXHHoq2U3xSIOuX8UAPYuIqlChADL1jAiEAunozjij5qpTSPICySHlUHa4iUqWYK02HuBCQH/SBsCE=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":134176},"main":"dist/index.js","types":"dist/index.d.ts","engines":{"node":">=16.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","default":"./dist/index.js","require":"./dist/index.js"},"./nextjs":{"types":"./dist/nextjs.d.ts","import":"./dist/nextjs.js","default":"./dist/nextjs.js","require":"./dist/nextjs.js"},"./express":{"types":"./dist/express.d.ts","import":"./dist/express.js","default":"./dist/express.js","require":"./dist/express.js"},"./cloudflare":{"types":"./dist/cloudflare.d.ts","import":"./dist/cloudflare.js","default":"./dist/cloudflare.js","require":"./dist/cloudflare.js"},"./package.json":"./package.json"},"gitHead":"6c1b4d4ca2d21f2e1921be526480bb6686ebdb93","scripts":{"dev":"tsc --watch","lint":"eslint src/**/*.ts","test":"node dist/test.js","build":"tsc","clean":"rimraf dist","format":"prettier --write src/**/*.ts","prepare":"npm run build","lint:fix":"eslint 'src/**/*.ts' --fix","prebuild":"npm run clean","release:major":"npm run build && npm version major && npm publish","release:minor":"npm run build && npm version minor && npm publish","release:patch":"npm run build && npm version patch && npm publish"},"_npmUser":{"name":"prateek32177","email":"prateek32177@gmail.com"},"repository":{"url":"git+https://github.com/Hookflo/tern.git","type":"git"},"_npmVersion":"10.9.2","description":"A robust, scalable webhook verification framework supporting multiple platforms and signature algorithms","directories":{},"_nodeVersion":"22.13.0","publishConfig":{"access":"public"},"typesVersions":{"*":{"*":["dist/index.d.ts"],"nextjs":["dist/nextjs.d.ts"],"express":["dist/express.d.ts"],"cloudflare":["dist/cloudflare.d.ts"]}},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"29.5.0","eslint":"^8.57.1","rimraf":"^6.0.1","ts-jest":"29.1.0","ts-node":"^10.9.2","prettier":"3.0.0","typescript":"^5.0.0","@types/jest":"29.5.0","@types/node":"20.0.0","@types/express":"^5.0.3","eslint-plugin-import":"^2.32.0","@typescript-eslint/parser":"^8.39.0","eslint-config-airbnb-base":"^15.0.0","@typescript-eslint/eslint-plugin":"^8.39.0"},"_npmOperationalInternal":{"tmp":"tmp/tern_2.0.3-experimental.0_1771438024547_0.7425687656309217","host":"s3://npm-registry-packages-npm-production"}},"2.2.0":{"name":"@hookflo/tern","version":"2.2.0","keywords":["Hookflo","webhook","verification","security","hmac","signature","github","stripe","clerk","supabase","typescript","node","express","nextjs"],"author":{"name":"Prateek Jain"},"license":"MIT","_id":"@hookflo/tern@2.2.0","maintainers":[{"name":"prateek32177","email":"prateek32177@gmail.com"}],"homepage":"https://github.com/Hookflo/tern#readme","bugs":{"url":"https://github.com/Hookflo/tern/issues"},"dist":{"shasum":"78fd65e4558acc0275c08a5d3c88194c54f248c0","tarball":"https://registry.npmjs.org/@hookflo/tern/-/tern-2.2.0.tgz","fileCount":69,"integrity":"sha512-9K4gzsde6IjJfMBk2HSR0AypFqpM3/JfFA/wEJTz53tVp442tR8JGBSfFmpijLmwx8HJml7/Snqr5eeXiWHUQA==","signatures":[{"sig":"MEQCIFzkcMxOzEiyjnorOwXtmD/HBCgCNVAZS0il0dYUoHVYAiAQ7ZiSMYk6OcbHK9VigwVtOyQPd2yD+G5Zvf0BvSLQsg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":154595},"main":"dist/index.js","types":"dist/index.d.ts","engines":{"node":">=16.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","default":"./dist/index.js","require":"./dist/index.js"},"./nextjs":{"types":"./dist/nextjs.d.ts","import":"./dist/nextjs.js","default":"./dist/nextjs.js","require":"./dist/nextjs.js"},"./express":{"types":"./dist/express.d.ts","import":"./dist/express.js","default":"./dist/express.js","require":"./dist/express.js"},"./cloudflare":{"types":"./dist/cloudflare.d.ts","import":"./dist/cloudflare.js","default":"./dist/cloudflare.js","require":"./dist/cloudflare.js"},"./package.json":"./package.json"},"gitHead":"549ca0b798ae8887fbb23b5853438db8338f9ce1","scripts":{"dev":"tsc --watch","lint":"eslint src/**/*.ts","test":"node dist/test.js","build":"tsc","clean":"rimraf dist","format":"prettier --write src/**/*.ts","prepare":"npm run build","lint:fix":"eslint 'src/**/*.ts' --fix","prebuild":"npm run clean","release:major":"npm run build && npm version major && npm publish","release:minor":"npm run build && npm version minor && npm publish","release:patch":"npm run build && npm version patch && npm publish"},"_npmUser":{"name":"prateek32177","email":"prateek32177@gmail.com"},"repository":{"url":"git+https://github.com/Hookflo/tern.git","type":"git"},"_npmVersion":"10.9.2","description":"A robust, scalable webhook verification framework supporting multiple platforms and signature algorithms","directories":{},"_nodeVersion":"22.13.0","publishConfig":{"access":"public"},"typesVersions":{"*":{"*":["dist/index.d.ts"],"nextjs":["dist/nextjs.d.ts"],"express":["dist/express.d.ts"],"cloudflare":["dist/cloudflare.d.ts"]}},"_hasShrinkwrap":false,"devDependencies":{"jest":"29.5.0","eslint":"^8.57.1","rimraf":"^6.0.1","ts-jest":"29.1.0","ts-node":"^10.9.2","prettier":"3.0.0","typescript":"^5.0.0","@types/jest":"29.5.0","@types/node":"20.0.0","@types/express":"^5.0.3","eslint-plugin-import":"^2.32.0","@typescript-eslint/parser":"^8.39.0","eslint-config-airbnb-base":"^15.0.0","@typescript-eslint/eslint-plugin":"^8.39.0"},"_npmOperationalInternal":{"tmp":"tmp/tern_2.2.0_1771515249444_0.6761004232978649","host":"s3://npm-registry-packages-npm-production"}},"2.2.3":{"name":"@hookflo/tern","version":"2.2.3","keywords":["Hookflo","webhook","verification","security","hmac","signature","github","stripe","clerk","supabase","typescript","node","express","nextjs"],"author":{"name":"Prateek Jain"},"license":"MIT","_id":"@hookflo/tern@2.2.3","maintainers":[{"name":"prateek32177","email":"prateek32177@gmail.com"}],"homepage":"https://github.com/Hookflo/tern#readme","bugs":{"url":"https://github.com/Hookflo/tern/issues"},"dist":{"shasum":"bc576e629268f19c71981376e6cd2a673d9c6014","tarball":"https://registry.npmjs.org/@hookflo/tern/-/tern-2.2.3.tgz","fileCount":69,"integrity":"sha512-fKprLONwhuCenAqGtQVs2N/P0TcW+nrnoTk287Qg389qnIB3SUAYjVvWYqQ9jVix4M+UXVujjWNYnXKi2lT/2g==","signatures":[{"sig":"MEUCIARVt3pLCjyozpJb1fuxfdGqXA9vQyJ++IgY7PVCr6XkAiEA3JqO7QWddjyWR7etkVoz6OMCrJ+JoeysOx0DlF7u+A8=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":159080},"main":"dist/index.js","types":"dist/index.d.ts","engines":{"node":">=16.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","default":"./dist/index.js","require":"./dist/index.js"},"./nextjs":{"types":"./dist/nextjs.d.ts","import":"./dist/nextjs.js","default":"./dist/nextjs.js","require":"./dist/nextjs.js"},"./express":{"types":"./dist/express.d.ts","import":"./dist/express.js","default":"./dist/express.js","require":"./dist/express.js"},"./cloudflare":{"types":"./dist/cloudflare.d.ts","import":"./dist/cloudflare.js","default":"./dist/cloudflare.js","require":"./dist/cloudflare.js"},"./package.json":"./package.json"},"gitHead":"c2b9c0bbc83aa35046140df345a27608a6541c77","scripts":{"dev":"tsc --watch","lint":"eslint src/**/*.ts","test":"node dist/test.js","build":"tsc","clean":"rimraf dist","format":"prettier --write src/**/*.ts","prepare":"npm run build","lint:fix":"eslint 'src/**/*.ts' --fix","prebuild":"npm run clean","release:major":"npm run build && npm version major && npm publish","release:minor":"npm run build && npm version minor && npm publish","release:patch":"npm run build && npm version patch && npm publish"},"_npmUser":{"name":"prateek32177","email":"prateek32177@gmail.com"},"repository":{"url":"git+https://github.com/Hookflo/tern.git","type":"git"},"_npmVersion":"10.9.2","description":"A robust, scalable webhook verification framework supporting multiple platforms and signature algorithms","directories":{},"_nodeVersion":"22.13.0","publishConfig":{"access":"public"},"typesVersions":{"*":{"*":["dist/index.d.ts"],"nextjs":["dist/nextjs.d.ts"],"express":["dist/express.d.ts"],"cloudflare":["dist/cloudflare.d.ts"]}},"_hasShrinkwrap":false,"devDependencies":{"jest":"29.5.0","eslint":"^8.57.1","rimraf":"^6.0.1","ts-jest":"29.1.0","ts-node":"^10.9.2","prettier":"3.0.0","typescript":"^5.0.0","@types/jest":"29.5.0","@types/node":"20.0.0","@types/express":"^5.0.3","eslint-plugin-import":"^2.32.0","@typescript-eslint/parser":"^8.39.0","eslint-config-airbnb-base":"^15.0.0","@typescript-eslint/eslint-plugin":"^8.39.0"},"_npmOperationalInternal":{"tmp":"tmp/tern_2.2.3_1771525006329_0.13312804040691306","host":"s3://npm-registry-packages-npm-production"}},"2.2.4":{"name":"@hookflo/tern","version":"2.2.4","keywords":["Hookflo","webhook","verification","security","hmac","signature","github","stripe","clerk","supabase","typescript","node","express","nextjs"],"author":{"name":"Prateek Jain"},"license":"MIT","_id":"@hookflo/tern@2.2.4","maintainers":[{"name":"prateek32177","email":"prateek32177@gmail.com"}],"homepage":"https://github.com/Hookflo/tern#readme","bugs":{"url":"https://github.com/Hookflo/tern/issues"},"dist":{"shasum":"39396962a058b96bcd635b464c3c76a04f55eb99","tarball":"https://registry.npmjs.org/@hookflo/tern/-/tern-2.2.4.tgz","fileCount":69,"integrity":"sha512-Qdf2qThJUIZ0uy1bg9CWrrHNbZNuPb7d9355hoUxWXzWTr6ESy14dgHE95yjne0rrYuAJpVcoKDcpWnUx207sg==","signatures":[{"sig":"MEUCIA0uFkVA1HMiv1z1BhzD5Qos19uvDM0Zy5t08cdu+5jFAiEA1LLxQtk0wz/LT28KLJntQgpZTR4EsxnlOUrnC9lyj8I=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":159038},"main":"dist/index.js","types":"dist/index.d.ts","engines":{"node":">=16.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","default":"./dist/index.js","require":"./dist/index.js"},"./nextjs":{"types":"./dist/nextjs.d.ts","import":"./dist/nextjs.js","default":"./dist/nextjs.js","require":"./dist/nextjs.js"},"./express":{"types":"./dist/express.d.ts","import":"./dist/express.js","default":"./dist/express.js","require":"./dist/express.js"},"./cloudflare":{"types":"./dist/cloudflare.d.ts","import":"./dist/cloudflare.js","default":"./dist/cloudflare.js","require":"./dist/cloudflare.js"},"./package.json":"./package.json"},"gitHead":"f0bc6d2b6cf3b257866e58da7c8b1e2f79b1fbeb","scripts":{"dev":"tsc --watch","lint":"eslint src/**/*.ts","test":"node dist/test.js","build":"tsc","clean":"rimraf dist","format":"prettier --write src/**/*.ts","prepare":"npm run build","lint:fix":"eslint 'src/**/*.ts' --fix","prebuild":"npm run clean","release:major":"npm run build && npm version major && npm publish","release:minor":"npm run build && npm version minor && npm publish","release:patch":"npm run build && npm version patch && npm publish"},"_npmUser":{"name":"prateek32177","email":"prateek32177@gmail.com"},"repository":{"url":"git+https://github.com/Hookflo/tern.git","type":"git"},"_npmVersion":"10.9.2","description":"A robust, scalable webhook verification framework supporting multiple platforms and signature algorithms","directories":{},"_nodeVersion":"22.13.0","publishConfig":{"access":"public"},"typesVersions":{"*":{"*":["dist/index.d.ts"],"nextjs":["dist/nextjs.d.ts"],"express":["dist/express.d.ts"],"cloudflare":["dist/cloudflare.d.ts"]}},"_hasShrinkwrap":false,"devDependencies":{"jest":"29.5.0","eslint":"^8.57.1","rimraf":"^6.0.1","ts-jest":"29.1.0","ts-node":"^10.9.2","prettier":"3.0.0","typescript":"^5.0.0","@types/jest":"29.5.0","@types/node":"20.0.0","@types/express":"^5.0.3","eslint-plugin-import":"^2.32.0","@typescript-eslint/parser":"^8.39.0","eslint-config-airbnb-base":"^15.0.0","@typescript-eslint/eslint-plugin":"^8.39.0"},"_npmOperationalInternal":{"tmp":"tmp/tern_2.2.4_1771526285819_0.009060775142619715","host":"s3://npm-registry-packages-npm-production"}},"2.2.5":{"name":"@hookflo/tern","version":"2.2.5","keywords":["Hookflo","webhook","verification","security","hmac","signature","github","stripe","clerk","supabase","typescript","node","express","nextjs"],"author":{"name":"Prateek Jain"},"license":"MIT","_id":"@hookflo/tern@2.2.5","maintainers":[{"name":"prateek32177","email":"prateek32177@gmail.com"}],"homepage":"https://github.com/Hookflo/tern#readme","bugs":{"url":"https://github.com/Hookflo/tern/issues"},"dist":{"shasum":"7fd21bc38f1b62ae5d29b228a035162aebf82923","tarball":"https://registry.npmjs.org/@hookflo/tern/-/tern-2.2.5.tgz","fileCount":69,"integrity":"sha512-P0Gb8b/wgCb6yxU7TzcGFA/mi7eQ0dCT08HMcMBAwDO1a28q50xXqRB1l/uDJNPgdaUXi+2G2B/qF0J4sBnBCw==","signatures":[{"sig":"MEQCICMWYvOmmyUXf5yzzPXOd6Acyk2M/IbaTeacOMoTZhPSAiAv0oO7B+o712BBvYS6FMxvSZ+bdNR3y5Mxfu2fgxBu3Q==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":159078},"main":"dist/index.js","types":"dist/index.d.ts","engines":{"node":">=16.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","default":"./dist/index.js","require":"./dist/index.js"},"./nextjs":{"types":"./dist/nextjs.d.ts","import":"./dist/nextjs.js","default":"./dist/nextjs.js","require":"./dist/nextjs.js"},"./express":{"types":"./dist/express.d.ts","import":"./dist/express.js","default":"./dist/express.js","require":"./dist/express.js"},"./cloudflare":{"types":"./dist/cloudflare.d.ts","import":"./dist/cloudflare.js","default":"./dist/cloudflare.js","require":"./dist/cloudflare.js"},"./package.json":"./package.json"},"gitHead":"a4b5042fe308d96f115ba0840c2f3ac3f91121fe","scripts":{"dev":"tsc --watch","lint":"eslint src/**/*.ts","test":"node dist/test.js","build":"tsc","clean":"rimraf dist","format":"prettier --write src/**/*.ts","prepare":"npm run build","lint:fix":"eslint 'src/**/*.ts' --fix","prebuild":"npm run clean","release:major":"npm run build && npm version major && npm publish","release:minor":"npm run build && npm version minor && npm publish","release:patch":"npm run build && npm version patch && npm publish"},"_npmUser":{"name":"prateek32177","email":"prateek32177@gmail.com"},"repository":{"url":"git+https://github.com/Hookflo/tern.git","type":"git"},"_npmVersion":"10.9.2","description":"A robust, scalable webhook verification framework supporting multiple platforms and signature algorithms","directories":{},"_nodeVersion":"22.13.0","publishConfig":{"access":"public"},"typesVersions":{"*":{"*":["dist/index.d.ts"],"nextjs":["dist/nextjs.d.ts"],"express":["dist/express.d.ts"],"cloudflare":["dist/cloudflare.d.ts"]}},"_hasShrinkwrap":false,"devDependencies":{"jest":"29.5.0","eslint":"^8.57.1","rimraf":"^6.0.1","ts-jest":"29.1.0","ts-node":"^10.9.2","prettier":"3.0.0","typescript":"^5.0.0","@types/jest":"29.5.0","@types/node":"20.0.0","@types/express":"^5.0.3","eslint-plugin-import":"^2.32.0","@typescript-eslint/parser":"^8.39.0","eslint-config-airbnb-base":"^15.0.0","@typescript-eslint/eslint-plugin":"^8.39.0"},"_npmOperationalInternal":{"tmp":"tmp/tern_2.2.5_1771527338688_0.7032595164031095","host":"s3://npm-registry-packages-npm-production"}},"2.2.7":{"name":"@hookflo/tern","version":"2.2.7","keywords":["Hookflo","webhook","verification","security","hmac","signature","github","stripe","clerk","supabase","typescript","node","express","nextjs"],"author":{"name":"Prateek Jain"},"license":"MIT","_id":"@hookflo/tern@2.2.7","maintainers":[{"name":"prateek32177","email":"prateek32177@gmail.com"}],"homepage":"https://github.com/Hookflo/tern#readme","bugs":{"url":"https://github.com/Hookflo/tern/issues"},"dist":{"shasum":"fb11f221be1581069ba6fc86aa4c36b6c3128aa0","tarball":"https://registry.npmjs.org/@hookflo/tern/-/tern-2.2.7.tgz","fileCount":69,"integrity":"sha512-18ZGlTXti/8ffY2YH7FeTKoRzcl2epUXgUc6efeBT5BptM7FTsQBZsrRG67lzSfJmGAEP2CBHnJwl0KsVvk7Xg==","signatures":[{"sig":"MEUCIErXJqQzAMgh4vcKsJXcbYsmb6H9WsgrCfeQAHuWduTHAiEAmOYlp63EeDdkTrxI2v0VxEsA9C9FQErgOPtm1Y6DIeg=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":159249},"main":"dist/index.js","types":"dist/index.d.ts","engines":{"node":">=16.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","default":"./dist/index.js","require":"./dist/index.js"},"./nextjs":{"types":"./dist/nextjs.d.ts","import":"./dist/nextjs.js","default":"./dist/nextjs.js","require":"./dist/nextjs.js"},"./express":{"types":"./dist/express.d.ts","import":"./dist/express.js","default":"./dist/express.js","require":"./dist/express.js"},"./cloudflare":{"types":"./dist/cloudflare.d.ts","import":"./dist/cloudflare.js","default":"./dist/cloudflare.js","require":"./dist/cloudflare.js"},"./package.json":"./package.json"},"gitHead":"beb4411bb0a50fd21271d16598954711e0e08daa","scripts":{"dev":"tsc --watch","lint":"eslint src/**/*.ts","test":"node dist/test.js","build":"tsc","clean":"rimraf dist","format":"prettier --write src/**/*.ts","prepare":"npm run build","lint:fix":"eslint 'src/**/*.ts' --fix","prebuild":"npm run clean","release:major":"npm run build && npm version major && npm publish","release:minor":"npm run build && npm version minor && npm publish","release:patch":"npm run build && npm version patch && npm publish"},"_npmUser":{"name":"prateek32177","email":"prateek32177@gmail.com"},"repository":{"url":"git+https://github.com/Hookflo/tern.git","type":"git"},"_npmVersion":"10.9.2","description":"A robust, scalable webhook verification framework supporting multiple platforms and signature algorithms","directories":{},"_nodeVersion":"22.13.0","publishConfig":{"access":"public"},"typesVersions":{"*":{"*":["dist/index.d.ts"],"nextjs":["dist/nextjs.d.ts"],"express":["dist/express.d.ts"],"cloudflare":["dist/cloudflare.d.ts"]}},"_hasShrinkwrap":false,"devDependencies":{"jest":"29.5.0","eslint":"^8.57.1","rimraf":"^6.0.1","ts-jest":"29.1.0","ts-node":"^10.9.2","prettier":"3.0.0","typescript":"^5.0.0","@types/jest":"29.5.0","@types/node":"20.0.0","@types/express":"^5.0.3","eslint-plugin-import":"^2.32.0","@typescript-eslint/parser":"^8.39.0","eslint-config-airbnb-base":"^15.0.0","@typescript-eslint/eslint-plugin":"^8.39.0"},"_npmOperationalInternal":{"tmp":"tmp/tern_2.2.7_1771562057591_0.6828596094923973","host":"s3://npm-registry-packages-npm-production"}},"2.2.9":{"name":"@hookflo/tern","version":"2.2.9","keywords":["Hookflo","webhook","verification","security","hmac","signature","github","stripe","clerk","supabase","typescript","node","express","nextjs"],"author":{"name":"Prateek Jain"},"license":"MIT","_id":"@hookflo/tern@2.2.9","maintainers":[{"name":"prateek32177","email":"prateek32177@gmail.com"}],"homepage":"https://github.com/Hookflo/tern#readme","bugs":{"url":"https://github.com/Hookflo/tern/issues"},"dist":{"shasum":"38f581172bb312fc9f1f59ca74afcff7c2018f01","tarball":"https://registry.npmjs.org/@hookflo/tern/-/tern-2.2.9.tgz","fileCount":69,"integrity":"sha512-AhabMd2J6CNOwDVDYDEq1JP8Dx4VlJss2Q2gYOwaFXRxBYeU4nslPS2p1SCbrwAEwvAPXKIjyx83hcx0zPOPNQ==","signatures":[{"sig":"MEUCIQDxOkRaI22+5saud6IenUUjILaXvL5bes77oDGX1De3zQIgNcLip7hGwrHSHYhHotx84hmYo2oh+Yq7yQfOpX/nK74=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":163873},"main":"dist/index.js","types":"dist/index.d.ts","engines":{"node":">=16.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","default":"./dist/index.js","require":"./dist/index.js"},"./nextjs":{"types":"./dist/nextjs.d.ts","import":"./dist/nextjs.js","default":"./dist/nextjs.js","require":"./dist/nextjs.js"},"./express":{"types":"./dist/express.d.ts","import":"./dist/express.js","default":"./dist/express.js","require":"./dist/express.js"},"./cloudflare":{"types":"./dist/cloudflare.d.ts","import":"./dist/cloudflare.js","default":"./dist/cloudflare.js","require":"./dist/cloudflare.js"},"./package.json":"./package.json"},"gitHead":"79049efd68ba08d8a7b3a3782d80430f6d5cbbc7","scripts":{"dev":"tsc --watch","lint":"eslint src/**/*.ts","test":"node dist/test.js","build":"tsc","clean":"rimraf dist","format":"prettier --write src/**/*.ts","prepare":"npm run build","lint:fix":"eslint 'src/**/*.ts' --fix","prebuild":"npm run clean","release:major":"npm run build && npm version major && npm publish","release:minor":"npm run build && npm version minor && npm publish","release:patch":"npm run build && npm version patch && npm publish"},"_npmUser":{"name":"prateek32177","email":"prateek32177@gmail.com"},"repository":{"url":"git+https://github.com/Hookflo/tern.git","type":"git"},"_npmVersion":"10.9.2","description":"A robust, scalable webhook verification framework supporting multiple platforms and signature algorithms","directories":{},"_nodeVersion":"22.13.0","publishConfig":{"access":"public"},"typesVersions":{"*":{"*":["dist/index.d.ts"],"nextjs":["dist/nextjs.d.ts"],"express":["dist/express.d.ts"],"cloudflare":["dist/cloudflare.d.ts"]}},"_hasShrinkwrap":false,"devDependencies":{"jest":"29.5.0","eslint":"^8.57.1","rimraf":"^6.0.1","ts-jest":"29.1.0","ts-node":"^10.9.2","prettier":"3.0.0","typescript":"^5.0.0","@types/jest":"29.5.0","@types/node":"20.0.0","@types/express":"^5.0.3","eslint-plugin-import":"^2.32.0","@typescript-eslint/parser":"^8.39.0","eslint-config-airbnb-base":"^15.0.0","@typescript-eslint/eslint-plugin":"^8.39.0"},"_npmOperationalInternal":{"tmp":"tmp/tern_2.2.9_1771652683026_0.13736447393708384","host":"s3://npm-registry-packages-npm-production"}},"2.2.10":{"name":"@hookflo/tern","version":"2.2.10","keywords":["Hookflo","webhook","verification","security","hmac","signature","github","stripe","clerk","supabase","typescript","node","express","nextjs"],"author":{"name":"Prateek Jain"},"license":"MIT","_id":"@hookflo/tern@2.2.10","maintainers":[{"name":"prateek32177","email":"prateek32177@gmail.com"}],"homepage":"https://github.com/Hookflo/tern#readme","bugs":{"url":"https://github.com/Hookflo/tern/issues"},"dist":{"shasum":"0611e6a08ff5d582031f3685fc6b48af34472691","tarball":"https://registry.npmjs.org/@hookflo/tern/-/tern-2.2.10.tgz","fileCount":71,"integrity":"sha512-L8J7hUxqGjOp6fFBdeoQA11yhesssMtImR9Io3Enl3VzXG8WXyAaZDP8Ooiz6H+UinVd/3CZYIpHJE2vQto35A==","signatures":[{"sig":"MEUCIQC4HhN8CYBBynUSm8/J3wcyu/oxl6S17Z2unsmOSHh4hwIgP330JzW3z7Iz2Q73AvOwBvow2p/d0YURtakyX4OFvhY=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":168916},"main":"dist/index.js","types":"dist/index.d.ts","engines":{"node":">=16.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","default":"./dist/index.js","require":"./dist/index.js"},"./nextjs":{"types":"./dist/nextjs.d.ts","import":"./dist/nextjs.js","default":"./dist/nextjs.js","require":"./dist/nextjs.js"},"./express":{"types":"./dist/express.d.ts","import":"./dist/express.js","default":"./dist/express.js","require":"./dist/express.js"},"./cloudflare":{"types":"./dist/cloudflare.d.ts","import":"./dist/cloudflare.js","default":"./dist/cloudflare.js","require":"./dist/cloudflare.js"},"./package.json":"./package.json"},"gitHead":"672594701b5853f4f41f25f24d86c514ec9a7861","scripts":{"dev":"tsc --watch","lint":"eslint src/**/*.ts","test":"node dist/test.js","build":"tsc","clean":"rimraf dist","format":"prettier --write src/**/*.ts","prepare":"npm run build","lint:fix":"eslint 'src/**/*.ts' --fix","prebuild":"npm run clean","release:major":"npm run build && npm version major && npm publish","release:minor":"npm run build && npm version minor && npm publish","release:patch":"npm run build && npm version patch && npm publish"},"_npmUser":{"name":"prateek32177","email":"prateek32177@gmail.com"},"repository":{"url":"git+https://github.com/Hookflo/tern.git","type":"git"},"_npmVersion":"10.9.2","description":"A robust, scalable webhook verification framework supporting multiple platforms and signature algorithms","directories":{},"_nodeVersion":"22.13.0","publishConfig":{"access":"public"},"typesVersions":{"*":{"*":["dist/index.d.ts"],"nextjs":["dist/nextjs.d.ts"],"express":["dist/express.d.ts"],"cloudflare":["dist/cloudflare.d.ts"]}},"_hasShrinkwrap":false,"devDependencies":{"jest":"29.5.0","eslint":"^8.57.1","rimraf":"^6.0.1","ts-jest":"29.1.0","ts-node":"^10.9.2","prettier":"3.0.0","typescript":"^5.0.0","@types/jest":"29.5.0","@types/node":"20.0.0","@types/express":"^5.0.3","eslint-plugin-import":"^2.32.0","@typescript-eslint/parser":"^8.39.0","eslint-config-airbnb-base":"^15.0.0","@typescript-eslint/eslint-plugin":"^8.39.0"},"_npmOperationalInternal":{"tmp":"tmp/tern_2.2.10_1771754005805_0.9130042663063016","host":"s3://npm-registry-packages-npm-production"}},"3.0.0":{"name":"@hookflo/tern","version":"3.0.0","keywords":["Hookflo","webhook","verification","security","hmac","signature","github","stripe","clerk","supabase","typescript","node","express","nextjs"],"author":{"name":"Prateek Jain"},"license":"MIT","_id":"@hookflo/tern@3.0.0","maintainers":[{"name":"prateek32177","email":"prateek32177@gmail.com"}],"homepage":"https://github.com/Hookflo/tern#readme","bugs":{"url":"https://github.com/Hookflo/tern/issues"},"dist":{"shasum":"27acb8bb8a465146598cfd5c0b300f6820b3adc9","tarball":"https://registry.npmjs.org/@hookflo/tern/-/tern-3.0.0.tgz","fileCount":71,"integrity":"sha512-lQ8gLNFU5CaOLKOAIhY6IRz3zO17XFxJSJ1vmFDB/Rxv6ShZdQHAdPoP9UM5akDcqv94U1UdgwB9WuNnhFTXHA==","signatures":[{"sig":"MEYCIQDVeP/vJj2QRqyGmX6YMHSPkOyeBXEKcko64Eg1eLYP4wIhAK7G71qMMQHd2WecqkcIXOl/6Ijuyk4CITpmw/VbQFZs","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":179096},"main":"dist/index.js","types":"dist/index.d.ts","engines":{"node":">=16.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","default":"./dist/index.js","require":"./dist/index.js"},"./nextjs":{"types":"./dist/nextjs.d.ts","import":"./dist/nextjs.js","default":"./dist/nextjs.js","require":"./dist/nextjs.js"},"./express":{"types":"./dist/express.d.ts","import":"./dist/express.js","default":"./dist/express.js","require":"./dist/express.js"},"./cloudflare":{"types":"./dist/cloudflare.d.ts","import":"./dist/cloudflare.js","default":"./dist/cloudflare.js","require":"./dist/cloudflare.js"},"./package.json":"./package.json"},"gitHead":"a6ae72971f22483b1401312110665215df5cb5fb","scripts":{"dev":"tsc --watch","lint":"eslint src/**/*.ts","test":"node dist/test.js","build":"tsc","clean":"rimraf dist","format":"prettier --write src/**/*.ts","prepare":"npm run build","lint:fix":"eslint 'src/**/*.ts' --fix","prebuild":"npm run clean","release:major":"npm run build && npm version major && npm publish","release:minor":"npm run build && npm version minor && npm publish","release:patch":"npm run build && npm version patch && npm publish"},"_npmUser":{"name":"prateek32177","email":"prateek32177@gmail.com"},"repository":{"url":"git+https://github.com/Hookflo/tern.git","type":"git"},"_npmVersion":"10.9.2","description":"A robust, scalable webhook verification framework supporting multiple platforms and signature algorithms","directories":{},"_nodeVersion":"22.13.0","publishConfig":{"access":"public"},"typesVersions":{"*":{"*":["dist/index.d.ts"],"nextjs":["dist/nextjs.d.ts"],"express":["dist/express.d.ts"],"cloudflare":["dist/cloudflare.d.ts"]}},"_hasShrinkwrap":false,"devDependencies":{"jest":"29.5.0","eslint":"^8.57.1","rimraf":"^6.0.1","ts-jest":"29.1.0","ts-node":"^10.9.2","prettier":"3.0.0","typescript":"^5.0.0","@types/jest":"29.5.0","@types/node":"20.0.0","@types/express":"^5.0.3","eslint-plugin-import":"^2.32.0","@typescript-eslint/parser":"^8.39.0","eslint-config-airbnb-base":"^15.0.0","@typescript-eslint/eslint-plugin":"^8.39.0"},"_npmOperationalInternal":{"tmp":"tmp/tern_3.0.0_1771955471823_0.2441320674887133","host":"s3://npm-registry-packages-npm-production"}},"3.0.1":{"name":"@hookflo/tern","version":"3.0.1","keywords":["Hookflo","webhook","verification","security","hmac","signature","github","stripe","clerk","supabase","typescript","node","express","nextjs"],"author":{"name":"Prateek Jain"},"license":"MIT","_id":"@hookflo/tern@3.0.1","maintainers":[{"name":"prateek32177","email":"prateek32177@gmail.com"}],"homepage":"https://github.com/Hookflo/tern#readme","bugs":{"url":"https://github.com/Hookflo/tern/issues"},"dist":{"shasum":"2c22f346619aa7328642dbf6a9edf5ce49fb2ee8","tarball":"https://registry.npmjs.org/@hookflo/tern/-/tern-3.0.1.tgz","fileCount":71,"integrity":"sha512-T/0im4iAf23W+UxB3OWO9WyBUnSLPiPpI+v9VCamzf0lWnCxpMEUGQyvhTKmfeg3GYjAwplwHyKRGGapw8Ba9w==","signatures":[{"sig":"MEUCIAiUPrnVa4vPEv80Hguxhb5ypmLR/M8JcPopMwRw60XSAiEAymolJ5V/agukToPvqkwzK6e2EETkLhFTEHtI240RlpA=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":179669},"main":"dist/index.js","types":"dist/index.d.ts","engines":{"node":">=16.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","default":"./dist/index.js","require":"./dist/index.js"},"./nextjs":{"types":"./dist/nextjs.d.ts","import":"./dist/nextjs.js","default":"./dist/nextjs.js","require":"./dist/nextjs.js"},"./express":{"types":"./dist/express.d.ts","import":"./dist/express.js","default":"./dist/express.js","require":"./dist/express.js"},"./cloudflare":{"types":"./dist/cloudflare.d.ts","import":"./dist/cloudflare.js","default":"./dist/cloudflare.js","require":"./dist/cloudflare.js"},"./package.json":"./package.json"},"gitHead":"19dd678a0f420e00962a50273ba4f7677aa28696","scripts":{"dev":"tsc --watch","lint":"eslint src/**/*.ts","test":"node dist/test.js","build":"tsc","clean":"rimraf dist","format":"prettier --write src/**/*.ts","prepare":"npm run build","lint:fix":"eslint 'src/**/*.ts' --fix","prebuild":"npm run clean","release:major":"npm run build && npm version major && npm publish","release:minor":"npm run build && npm version minor && npm publish","release:patch":"npm run build && npm version patch && npm publish"},"_npmUser":{"name":"prateek32177","email":"prateek32177@gmail.com"},"repository":{"url":"git+https://github.com/Hookflo/tern.git","type":"git"},"_npmVersion":"10.9.2","description":"A robust, scalable webhook verification framework supporting multiple platforms and signature algorithms","directories":{},"_nodeVersion":"22.13.0","publishConfig":{"access":"public"},"typesVersions":{"*":{"*":["dist/index.d.ts"],"nextjs":["dist/nextjs.d.ts"],"express":["dist/express.d.ts"],"cloudflare":["dist/cloudflare.d.ts"]}},"_hasShrinkwrap":false,"devDependencies":{"jest":"29.5.0","eslint":"^8.57.1","rimraf":"^6.0.1","ts-jest":"29.1.0","ts-node":"^10.9.2","prettier":"3.0.0","typescript":"^5.0.0","@types/jest":"29.5.0","@types/node":"20.0.0","@types/express":"^5.0.3","eslint-plugin-import":"^2.32.0","@typescript-eslint/parser":"^8.39.0","eslint-config-airbnb-base":"^15.0.0","@typescript-eslint/eslint-plugin":"^8.39.0"},"_npmOperationalInternal":{"tmp":"tmp/tern_3.0.1_1771956858615_0.9119391918416517","host":"s3://npm-registry-packages-npm-production"}},"3.0.2":{"name":"@hookflo/tern","version":"3.0.2","keywords":["Hookflo","webhook","verification","security","hmac","signature","github","stripe","clerk","supabase","typescript","node","express","nextjs"],"author":{"name":"Prateek Jain"},"license":"MIT","_id":"@hookflo/tern@3.0.2","maintainers":[{"name":"prateek32177","email":"prateek32177@gmail.com"}],"homepage":"https://github.com/Hookflo/tern#readme","bugs":{"url":"https://github.com/Hookflo/tern/issues"},"dist":{"shasum":"3da6b94bef4ba8497638bd9a3d7c9a0eec5f7382","tarball":"https://registry.npmjs.org/@hookflo/tern/-/tern-3.0.2.tgz","fileCount":71,"integrity":"sha512-qgK8r18q6jiPYMyYqpyb3eDXE7wndl1DQituDtipxsHViSRYacJ1aBMC2EfAhxvFGnyrIS1q9exNtOIcqQjn9w==","signatures":[{"sig":"MEUCIQC5TTMWc7AyZUM5l5uRtKcS/RWTa4efkYhM2DKKzUl9ZgIgKYYjtlcqkJrA8jIzoNLvrHgcmwyGyOMlZEDD1hO0qPQ=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":181013},"main":"dist/index.js","types":"dist/index.d.ts","engines":{"node":">=16.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","default":"./dist/index.js","require":"./dist/index.js"},"./nextjs":{"types":"./dist/nextjs.d.ts","import":"./dist/nextjs.js","default":"./dist/nextjs.js","require":"./dist/nextjs.js"},"./express":{"types":"./dist/express.d.ts","import":"./dist/express.js","default":"./dist/express.js","require":"./dist/express.js"},"./cloudflare":{"types":"./dist/cloudflare.d.ts","import":"./dist/cloudflare.js","default":"./dist/cloudflare.js","require":"./dist/cloudflare.js"},"./package.json":"./package.json"},"gitHead":"17893f17484902a7cfaeb4cdad715031660cad67","scripts":{"dev":"tsc --watch","lint":"eslint src/**/*.ts","test":"node dist/test.js","build":"tsc","clean":"rimraf dist","format":"prettier --write src/**/*.ts","prepare":"npm run build","lint:fix":"eslint 'src/**/*.ts' --fix","prebuild":"npm run clean","release:major":"npm run build && npm version major && npm publish","release:minor":"npm run build && npm version minor && npm publish","release:patch":"npm run build && npm version patch && npm publish"},"_npmUser":{"name":"prateek32177","email":"prateek32177@gmail.com"},"repository":{"url":"git+https://github.com/Hookflo/tern.git","type":"git"},"_npmVersion":"10.9.2","description":"A robust, scalable webhook verification framework supporting multiple platforms and signature algorithms","directories":{},"_nodeVersion":"22.13.0","publishConfig":{"access":"public"},"typesVersions":{"*":{"*":["dist/index.d.ts"],"nextjs":["dist/nextjs.d.ts"],"express":["dist/express.d.ts"],"cloudflare":["dist/cloudflare.d.ts"]}},"_hasShrinkwrap":false,"devDependencies":{"jest":"29.5.0","eslint":"^8.57.1","rimraf":"^6.0.1","ts-jest":"29.1.0","ts-node":"^10.9.2","prettier":"3.0.0","typescript":"^5.0.0","@types/jest":"29.5.0","@types/node":"20.0.0","@types/express":"^5.0.3","eslint-plugin-import":"^2.32.0","@typescript-eslint/parser":"^8.39.0","eslint-config-airbnb-base":"^15.0.0","@typescript-eslint/eslint-plugin":"^8.39.0"},"_npmOperationalInternal":{"tmp":"tmp/tern_3.0.2_1771958096642_0.9551299073818709","host":"s3://npm-registry-packages-npm-production"}},"3.0.3":{"name":"@hookflo/tern","version":"3.0.3","keywords":["Hookflo","webhook","verification","security","hmac","signature","github","stripe","clerk","supabase","typescript","node","express","nextjs"],"author":{"name":"Prateek Jain"},"license":"MIT","_id":"@hookflo/tern@3.0.3","maintainers":[{"name":"prateek32177","email":"prateek32177@gmail.com"}],"homepage":"https://github.com/Hookflo/tern#readme","bugs":{"url":"https://github.com/Hookflo/tern/issues"},"dist":{"shasum":"95d533c0a1699d04a60cd747299ad940a8d41b51","tarball":"https://registry.npmjs.org/@hookflo/tern/-/tern-3.0.3.tgz","fileCount":71,"integrity":"sha512-IfX8/y2zjPWqWq1nzAJnRiMqk8R8mkXYXBHhTjabw5VmKljn5gUfL3CrmqMDCQ3r0s6bJp2Ovc6MFSDKHP08pw==","signatures":[{"sig":"MEYCIQCkpDHSA8RgTMij3TqgGEB/x/YMIXDyfXoLxEUvdTPdDwIhAPnLKpp4JZWeV24SZbmjx3NVUApo0clwVixJR5/oNDFb","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":180939},"main":"dist/index.js","types":"dist/index.d.ts","engines":{"node":">=16.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","default":"./dist/index.js","require":"./dist/index.js"},"./nextjs":{"types":"./dist/nextjs.d.ts","import":"./dist/nextjs.js","default":"./dist/nextjs.js","require":"./dist/nextjs.js"},"./express":{"types":"./dist/express.d.ts","import":"./dist/express.js","default":"./dist/express.js","require":"./dist/express.js"},"./cloudflare":{"types":"./dist/cloudflare.d.ts","import":"./dist/cloudflare.js","default":"./dist/cloudflare.js","require":"./dist/cloudflare.js"},"./package.json":"./package.json"},"gitHead":"cf43a961ccd3aedf177ca3405c0307a8885e5be6","scripts":{"dev":"tsc --watch","lint":"eslint src/**/*.ts","test":"node dist/test.js","build":"tsc","clean":"rimraf dist","format":"prettier --write src/**/*.ts","prepare":"npm run build","lint:fix":"eslint 'src/**/*.ts' --fix","prebuild":"npm run clean","release:major":"npm run build && npm version major && npm publish","release:minor":"npm run build && npm version minor && npm publish","release:patch":"npm run build && npm version patch && npm publish"},"_npmUser":{"name":"prateek32177","email":"prateek32177@gmail.com"},"repository":{"url":"git+https://github.com/Hookflo/tern.git","type":"git"},"_npmVersion":"10.9.2","description":"A robust, scalable webhook verification framework supporting multiple platforms and signature algorithms","directories":{},"_nodeVersion":"22.13.0","publishConfig":{"access":"public"},"typesVersions":{"*":{"*":["dist/index.d.ts"],"nextjs":["dist/nextjs.d.ts"],"express":["dist/express.d.ts"],"cloudflare":["dist/cloudflare.d.ts"]}},"_hasShrinkwrap":false,"devDependencies":{"jest":"29.5.0","eslint":"^8.57.1","rimraf":"^6.0.1","ts-jest":"29.1.0","ts-node":"^10.9.2","prettier":"3.0.0","typescript":"^5.0.0","@types/jest":"29.5.0","@types/node":"20.0.0","@types/express":"^5.0.3","eslint-plugin-import":"^2.32.0","@typescript-eslint/parser":"^8.39.0","eslint-config-airbnb-base":"^15.0.0","@typescript-eslint/eslint-plugin":"^8.39.0"},"_npmOperationalInternal":{"tmp":"tmp/tern_3.0.3_1771958812390_0.5465153727503196","host":"s3://npm-registry-packages-npm-production"}},"3.0.5":{"name":"@hookflo/tern","version":"3.0.5","keywords":["Hookflo","webhook","verification","security","hmac","signature","github","stripe","clerk","supabase","typescript","node","express","nextjs"],"author":{"name":"Prateek Jain"},"license":"MIT","_id":"@hookflo/tern@3.0.5","maintainers":[{"name":"prateek32177","email":"prateek32177@gmail.com"}],"homepage":"https://github.com/Hookflo/tern#readme","bugs":{"url":"https://github.com/Hookflo/tern/issues"},"dist":{"shasum":"14978b9ac7e80ef90a6b0cecbf48cdd7510dd647","tarball":"https://registry.npmjs.org/@hookflo/tern/-/tern-3.0.5.tgz","fileCount":71,"integrity":"sha512-BfSM5BcYIsvBuaVR4UeX5ejjLoKfVFy7XBsdvVphsJEyLLHNVQklpiQTMfMWiZjSnG26v2IbszGtp0gbPvGYYw==","signatures":[{"sig":"MEYCIQDj8eBmc8B0GeXILSEh7o76k3puQQ5stP1YoYhWf18pDgIhAMsVnsD6lJ1CO9toGnWWknrZwQtI9fOppbbdRIq5WJAc","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":181014},"main":"dist/index.js","types":"dist/index.d.ts","engines":{"node":">=16.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","default":"./dist/index.js","require":"./dist/index.js"},"./nextjs":{"types":"./dist/nextjs.d.ts","import":"./dist/nextjs.js","default":"./dist/nextjs.js","require":"./dist/nextjs.js"},"./express":{"types":"./dist/express.d.ts","import":"./dist/express.js","default":"./dist/express.js","require":"./dist/express.js"},"./cloudflare":{"types":"./dist/cloudflare.d.ts","import":"./dist/cloudflare.js","default":"./dist/cloudflare.js","require":"./dist/cloudflare.js"},"./package.json":"./package.json"},"gitHead":"b65a203eb582de4a1fcc06f1b8c72c3bf00c1f47","scripts":{"dev":"tsc --watch","lint":"eslint src/**/*.ts","test":"node dist/test.js","build":"tsc","clean":"rimraf dist","format":"prettier --write src/**/*.ts","prepare":"npm run build","lint:fix":"eslint 'src/**/*.ts' --fix","prebuild":"npm run clean","release:major":"npm run build && npm version major && npm publish","release:minor":"npm run build && npm version minor && npm publish","release:patch":"npm run build && npm version patch && npm publish"},"_npmUser":{"name":"prateek32177","email":"prateek32177@gmail.com"},"repository":{"url":"git+https://github.com/Hookflo/tern.git","type":"git"},"_npmVersion":"10.9.2","description":"A robust, scalable webhook verification framework supporting multiple platforms and signature algorithms","directories":{},"_nodeVersion":"22.13.0","publishConfig":{"access":"public"},"typesVersions":{"*":{"*":["dist/index.d.ts"],"nextjs":["dist/nextjs.d.ts"],"express":["dist/express.d.ts"],"cloudflare":["dist/cloudflare.d.ts"]}},"_hasShrinkwrap":false,"devDependencies":{"jest":"29.5.0","eslint":"^8.57.1","rimraf":"^6.0.1","ts-jest":"29.1.0","ts-node":"^10.9.2","prettier":"3.0.0","typescript":"^5.0.0","@types/jest":"29.5.0","@types/node":"20.0.0","@types/express":"^5.0.3","eslint-plugin-import":"^2.32.0","@typescript-eslint/parser":"^8.39.0","eslint-config-airbnb-base":"^15.0.0","@typescript-eslint/eslint-plugin":"^8.39.0"},"_npmOperationalInternal":{"tmp":"tmp/tern_3.0.5_1772040507099_0.3041375521298122","host":"s3://npm-registry-packages-npm-production"}},"3.0.5-beta":{"name":"@hookflo/tern","version":"3.0.5-beta","keywords":["Hookflo","webhook","verification","security","hmac","signature","github","stripe","clerk","supabase","typescript","node","express","nextjs"],"author":{"name":"Prateek Jain"},"license":"MIT","_id":"@hookflo/tern@3.0.5-beta","maintainers":[{"name":"prateek32177","email":"prateek32177@gmail.com"}],"homepage":"https://github.com/Hookflo/tern#readme","bugs":{"url":"https://github.com/Hookflo/tern/issues"},"dist":{"shasum":"ff1a736039a6f99cafeaaef5b187a3b252dff28d","tarball":"https://registry.npmjs.org/@hookflo/tern/-/tern-3.0.5-beta.tgz","fileCount":79,"integrity":"sha512-7F8LsS/zWWMNoh+PPYEKJFtH1r3FFGPshNPBMcJ+icQgSuw4cb3G1vHRWd6r1bXPQ/NKHtN6q2Tbx/wblUtZBA==","signatures":[{"sig":"MEUCIQCIDnoKN8kuGM5tRpcO8rt50pI4oFn5jXslbQML9Z4t5wIgELLmek3OHvW+LGgyKfQPSbGKPGl1coZyk2TfRFNtOU4=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":198995},"main":"dist/index.js","types":"dist/index.d.ts","engines":{"node":">=16.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","default":"./dist/index.js","require":"./dist/index.js"},"./nextjs":{"types":"./dist/nextjs.d.ts","import":"./dist/nextjs.js","default":"./dist/nextjs.js","require":"./dist/nextjs.js"},"./express":{"types":"./dist/express.d.ts","import":"./dist/express.js","default":"./dist/express.js","require":"./dist/express.js"},"./upstash":{"types":"./dist/upstash/index.d.ts","import":"./dist/upstash/index.js","default":"./dist/upstash/index.js","require":"./dist/upstash/index.js"},"./cloudflare":{"types":"./dist/cloudflare.d.ts","import":"./dist/cloudflare.js","default":"./dist/cloudflare.js","require":"./dist/cloudflare.js"},"./package.json":"./package.json"},"gitHead":"cc5bc6fa9c01e95784c34a40a6e8870ea1d739aa","scripts":{"dev":"tsc --watch","lint":"eslint src/**/*.ts","test":"node dist/test.js","build":"tsc","clean":"rimraf dist","format":"prettier --write src/**/*.ts","prepare":"npm run build","lint:fix":"eslint 'src/**/*.ts' --fix","prebuild":"npm run clean","release:major":"npm run build && npm version major && npm publish","release:minor":"npm run build && npm version minor && npm publish","release:patch":"npm run build && npm version patch && npm publish"},"_npmUser":{"name":"prateek32177","email":"prateek32177@gmail.com"},"repository":{"url":"git+https://github.com/Hookflo/tern.git","type":"git"},"_npmVersion":"10.9.2","description":"A robust, scalable webhook verification framework supporting multiple platforms and signature algorithms","directories":{},"_nodeVersion":"22.13.0","publishConfig":{"access":"public"},"typesVersions":{"*":{"*":["dist/index.d.ts"],"nextjs":["dist/nextjs.d.ts"],"express":["dist/express.d.ts"],"upstash":["dist/upstash/index.d.ts"],"cloudflare":["dist/cloudflare.d.ts"]}},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"29.5.0","eslint":"^8.57.1","rimraf":"^6.0.1","ts-jest":"29.1.0","ts-node":"^10.9.2","prettier":"3.0.0","typescript":"^5.0.0","@types/jest":"29.5.0","@types/node":"20.0.0","@types/express":"^5.0.3","eslint-plugin-import":"^2.32.0","@typescript-eslint/parser":"^8.39.0","eslint-config-airbnb-base":"^15.0.0","@typescript-eslint/eslint-plugin":"^8.39.0"},"peerDependencies":{"@upstash/qstash":">=2.0.0"},"peerDependenciesMeta":{"@upstash/qstash":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/tern_3.0.5-beta_1772046796324_0.10046735992616962","host":"s3://npm-registry-packages-npm-production"}},"3.0.7-beta":{"name":"@hookflo/tern","version":"3.0.7-beta","keywords":["Hookflo","webhook","verification","security","hmac","signature","github","stripe","clerk","supabase","typescript","node","express","nextjs"],"author":{"name":"Prateek Jain"},"license":"MIT","_id":"@hookflo/tern@3.0.7-beta","maintainers":[{"name":"prateek32177","email":"prateek32177@gmail.com"}],"homepage":"https://github.com/Hookflo/tern#readme","bugs":{"url":"https://github.com/Hookflo/tern/issues"},"dist":{"shasum":"61dafeb8fc1daf9679915fffd093353d8f74d578","tarball":"https://registry.npmjs.org/@hookflo/tern/-/tern-3.0.7-beta.tgz","fileCount":79,"integrity":"sha512-VCpthW3oju8gt7uozhhHJr3LUtJr9ELpGlMBEPKT4Z/G0hzHzm3c5FxQohZZzrVsLPlw7tu+NFrvgbu10+CrUg==","signatures":[{"sig":"MEUCIQDlx2PMKDbtRxSHd15HOZBKenC1mon2WWatbN4mpaVNUwIgbm1TeiIk0sHPrVr0ZoqEy0pE5bFWXeG0M3WNOb3v0nU=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":198454},"main":"dist/index.js","types":"dist/index.d.ts","engines":{"node":">=16.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","default":"./dist/index.js","require":"./dist/index.js"},"./nextjs":{"types":"./dist/nextjs.d.ts","import":"./dist/nextjs.js","default":"./dist/nextjs.js","require":"./dist/nextjs.js"},"./express":{"types":"./dist/express.d.ts","import":"./dist/express.js","default":"./dist/express.js","require":"./dist/express.js"},"./upstash":{"types":"./dist/upstash/index.d.ts","import":"./dist/upstash/index.js","default":"./dist/upstash/index.js","require":"./dist/upstash/index.js"},"./cloudflare":{"types":"./dist/cloudflare.d.ts","import":"./dist/cloudflare.js","default":"./dist/cloudflare.js","require":"./dist/cloudflare.js"},"./package.json":"./package.json"},"gitHead":"2fde0cd68d0f185a00159cea11657c203566b7bf","scripts":{"dev":"tsc --watch","lint":"eslint src/**/*.ts","test":"node dist/test.js","build":"tsc","clean":"rimraf dist","format":"prettier --write src/**/*.ts","prepare":"npm run build","lint:fix":"eslint 'src/**/*.ts' --fix","prebuild":"npm run clean","release:major":"npm run build && npm version major && npm publish","release:minor":"npm run build && npm version minor && npm publish","release:patch":"npm run build && npm version patch && npm publish"},"_npmUser":{"name":"prateek32177","email":"prateek32177@gmail.com"},"repository":{"url":"git+https://github.com/Hookflo/tern.git","type":"git"},"_npmVersion":"10.9.2","description":"A robust, scalable webhook verification framework supporting multiple platforms and signature algorithms","directories":{},"_nodeVersion":"22.13.0","publishConfig":{"access":"public"},"typesVersions":{"*":{"*":["dist/index.d.ts"],"nextjs":["dist/nextjs.d.ts"],"express":["dist/express.d.ts"],"upstash":["dist/upstash/index.d.ts"],"cloudflare":["dist/cloudflare.d.ts"]}},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"29.5.0","eslint":"^8.57.1","rimraf":"^6.0.1","ts-jest":"29.1.0","ts-node":"^10.9.2","prettier":"3.0.0","typescript":"^5.0.0","@types/jest":"29.5.0","@types/node":"20.0.0","@types/express":"^5.0.3","@upstash/qstash":"^2.9.0","eslint-plugin-import":"^2.32.0","@typescript-eslint/parser":"^8.39.0","eslint-config-airbnb-base":"^15.0.0","@typescript-eslint/eslint-plugin":"^8.39.0"},"peerDependencies":{"@upstash/qstash":">=2.0.0"},"peerDependenciesMeta":{"@upstash/qstash":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/tern_3.0.7-beta_1772048697627_0.7093221074714415","host":"s3://npm-registry-packages-npm-production"}},"3.0.9-beta":{"name":"@hookflo/tern","version":"3.0.9-beta","keywords":["Hookflo","webhook","verification","security","hmac","signature","github","stripe","clerk","supabase","typescript","node","express","nextjs"],"author":{"name":"Prateek Jain"},"license":"MIT","_id":"@hookflo/tern@3.0.9-beta","maintainers":[{"name":"prateek32177","email":"prateek32177@gmail.com"}],"homepage":"https://github.com/Hookflo/tern#readme","bugs":{"url":"https://github.com/Hookflo/tern/issues"},"dist":{"shasum":"c74823055777696d43bcc43733c5631f9798d121","tarball":"https://registry.npmjs.org/@hookflo/tern/-/tern-3.0.9-beta.tgz","fileCount":79,"integrity":"sha512-yXb+nOjUbBznT0C2S8gQRehDWh1c6YXH42OgtEkxJoiGTYbMLAorFEkzE5SSjhEEQhafAEaz1MlOkp55DepPmQ==","signatures":[{"sig":"MEYCIQCBiFqp+bMxO2lRB+VYNTJCSYzivQ+f12JVsfiTc/zhXQIhANNbqFdA5RD2bRmA/MYL3x37OXBqWp7VZaDViKr8vAAU","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":200198},"main":"dist/index.js","types":"dist/index.d.ts","engines":{"node":">=16.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","default":"./dist/index.js","require":"./dist/index.js"},"./nextjs":{"types":"./dist/nextjs.d.ts","import":"./dist/nextjs.js","default":"./dist/nextjs.js","require":"./dist/nextjs.js"},"./express":{"types":"./dist/express.d.ts","import":"./dist/express.js","default":"./dist/express.js","require":"./dist/express.js"},"./upstash":{"types":"./dist/upstash/index.d.ts","import":"./dist/upstash/index.js","default":"./dist/upstash/index.js","require":"./dist/upstash/index.js"},"./cloudflare":{"types":"./dist/cloudflare.d.ts","import":"./dist/cloudflare.js","default":"./dist/cloudflare.js","require":"./dist/cloudflare.js"},"./package.json":"./package.json"},"gitHead":"e65eff8ea03c6fca2e144a92da5b31606f21a09a","scripts":{"dev":"tsc --watch","lint":"eslint src/**/*.ts","test":"node dist/test.js","build":"tsc","clean":"rimraf dist","format":"prettier --write src/**/*.ts","prepare":"npm run build","lint:fix":"eslint 'src/**/*.ts' --fix","prebuild":"npm run clean","release:major":"npm run build && npm version major && npm publish","release:minor":"npm run build && npm version minor && npm publish","release:patch":"npm run build && npm version patch && npm publish"},"_npmUser":{"name":"prateek32177","email":"prateek32177@gmail.com"},"repository":{"url":"git+https://github.com/Hookflo/tern.git","type":"git"},"_npmVersion":"10.9.2","description":"A robust, scalable webhook verification framework supporting multiple platforms and signature algorithms","directories":{},"_nodeVersion":"22.13.0","publishConfig":{"access":"public"},"typesVersions":{"*":{"*":["dist/index.d.ts"],"nextjs":["dist/nextjs.d.ts"],"express":["dist/express.d.ts"],"upstash":["dist/upstash/index.d.ts"],"cloudflare":["dist/cloudflare.d.ts"]}},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"29.5.0","eslint":"^8.57.1","rimraf":"^6.0.1","ts-jest":"29.1.0","ts-node":"^10.9.2","prettier":"3.0.0","typescript":"^5.0.0","@types/jest":"29.5.0","@types/node":"20.0.0","@types/express":"^5.0.3","@upstash/qstash":"^2.9.0","eslint-plugin-import":"^2.32.0","@typescript-eslint/parser":"^8.39.0","eslint-config-airbnb-base":"^15.0.0","@typescript-eslint/eslint-plugin":"^8.39.0"},"peerDependencies":{"@upstash/qstash":">=2.0.0"},"peerDependenciesMeta":{"@upstash/qstash":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/tern_3.0.9-beta_1772049777124_0.4421063886257486","host":"s3://npm-registry-packages-npm-production"}},"3.0.11-beta":{"name":"@hookflo/tern","version":"3.0.11-beta","keywords":["Hookflo","webhook","verification","security","hmac","signature","github","stripe","clerk","supabase","typescript","node","express","nextjs"],"author":{"name":"Prateek Jain"},"license":"MIT","_id":"@hookflo/tern@3.0.11-beta","maintainers":[{"name":"prateek32177","email":"prateek32177@gmail.com"}],"homepage":"https://github.com/Hookflo/tern#readme","bugs":{"url":"https://github.com/Hookflo/tern/issues"},"dist":{"shasum":"3a2a45ceaa82e7ec36ece72d1e8c8fdbfea40829","tarball":"https://registry.npmjs.org/@hookflo/tern/-/tern-3.0.11-beta.tgz","fileCount":79,"integrity":"sha512-Sb0xQ/4xodSzSNj7mWFszjusBBQIzzDmOiupoSzyf9r/SaWN7crkFSF0Wct9hR/LqEelfhYuX7uXfbpRt68l3A==","signatures":[{"sig":"MEUCIHMs4A9gnjhzZ4d82zO9TkZE0iBaHoiVqM8D0b1ioT08AiEAmhoUFVNTNR8Aob9rnsHBaUIZ8Ny5r3P36eFm+CmBubo=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":202515},"main":"dist/index.js","types":"dist/index.d.ts","engines":{"node":">=16.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","default":"./dist/index.js","require":"./dist/index.js"},"./nextjs":{"types":"./dist/nextjs.d.ts","import":"./dist/nextjs.js","default":"./dist/nextjs.js","require":"./dist/nextjs.js"},"./express":{"types":"./dist/express.d.ts","import":"./dist/express.js","default":"./dist/express.js","require":"./dist/express.js"},"./upstash":{"types":"./dist/upstash/index.d.ts","import":"./dist/upstash/index.js","default":"./dist/upstash/index.js","require":"./dist/upstash/index.js"},"./cloudflare":{"types":"./dist/cloudflare.d.ts","import":"./dist/cloudflare.js","default":"./dist/cloudflare.js","require":"./dist/cloudflare.js"},"./package.json":"./package.json"},"gitHead":"ae791e060581687e4dc914657b3876bf261aa1a2","scripts":{"dev":"tsc --watch","lint":"eslint src/**/*.ts","test":"node dist/test.js","build":"tsc","clean":"rimraf dist","format":"prettier --write src/**/*.ts","prepare":"npm run build","lint:fix":"eslint 'src/**/*.ts' --fix","prebuild":"npm run clean","release:major":"npm run build && npm version major && npm publish","release:minor":"npm run build && npm version minor && npm publish","release:patch":"npm run build && npm version patch && npm publish"},"_npmUser":{"name":"prateek32177","email":"prateek32177@gmail.com"},"repository":{"url":"git+https://github.com/Hookflo/tern.git","type":"git"},"_npmVersion":"10.9.2","description":"A robust, scalable webhook verification framework supporting multiple platforms and signature algorithms","directories":{},"_nodeVersion":"22.13.0","publishConfig":{"access":"public"},"typesVersions":{"*":{"*":["dist/index.d.ts"],"nextjs":["dist/nextjs.d.ts"],"express":["dist/express.d.ts"],"upstash":["dist/upstash/index.d.ts"],"cloudflare":["dist/cloudflare.d.ts"]}},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"29.5.0","eslint":"^8.57.1","rimraf":"^6.0.1","ts-jest":"29.1.0","ts-node":"^10.9.2","prettier":"3.0.0","typescript":"^5.0.0","@types/jest":"29.5.0","@types/node":"20.0.0","@types/express":"^5.0.3","@upstash/qstash":"^2.9.0","eslint-plugin-import":"^2.32.0","@typescript-eslint/parser":"^8.39.0","eslint-config-airbnb-base":"^15.0.0","@typescript-eslint/eslint-plugin":"^8.39.0"},"peerDependencies":{"@upstash/qstash":">=2.9.0"},"peerDependenciesMeta":{"@upstash/qstash":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/tern_3.0.11-beta_1772082830296_0.9849079478348743","host":"s3://npm-registry-packages-npm-production"}},"3.0.13-beta":{"name":"@hookflo/tern","version":"3.0.13-beta","keywords":["Hookflo","webhook","verification","security","hmac","signature","github","stripe","clerk","supabase","typescript","node","express","nextjs"],"author":{"name":"Prateek Jain"},"license":"MIT","_id":"@hookflo/tern@3.0.13-beta","maintainers":[{"name":"prateek32177","email":"prateek32177@gmail.com"}],"homepage":"https://github.com/Hookflo/tern#readme","bugs":{"url":"https://github.com/Hookflo/tern/issues"},"dist":{"shasum":"ea4f32b411f5ceff7a7f9f56b3c62d923d3cbf22","tarball":"https://registry.npmjs.org/@hookflo/tern/-/tern-3.0.13-beta.tgz","fileCount":79,"integrity":"sha512-4qVaFOfubr6jbZ2nYE5YKu3gFVbFGWyaodi/pd6bktdDlB5RqjoKGGuCHww8vIKZ+8eU+O1/n90UoRbZiD0fDQ==","signatures":[{"sig":"MEUCIQDIJoJao0znX6GiKdAMWmA7yCZ9keTa828CM8kndwuyggIgNvEehHbhjsPoLZe8NNL0eeA7UAEauA0CWxb/qce2mnQ=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":202390},"main":"dist/index.js","types":"dist/index.d.ts","engines":{"node":">=16.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","default":"./dist/index.js","require":"./dist/index.js"},"./nextjs":{"types":"./dist/nextjs.d.ts","import":"./dist/nextjs.js","default":"./dist/nextjs.js","require":"./dist/nextjs.js"},"./express":{"types":"./dist/express.d.ts","import":"./dist/express.js","default":"./dist/express.js","require":"./dist/express.js"},"./upstash":{"types":"./dist/upstash/index.d.ts","import":"./dist/upstash/index.js","default":"./dist/upstash/index.js","require":"./dist/upstash/index.js"},"./cloudflare":{"types":"./dist/cloudflare.d.ts","import":"./dist/cloudflare.js","default":"./dist/cloudflare.js","require":"./dist/cloudflare.js"},"./package.json":"./package.json"},"gitHead":"ae791e060581687e4dc914657b3876bf261aa1a2","scripts":{"dev":"tsc --watch","lint":"eslint src/**/*.ts","test":"node dist/test.js","build":"tsc","clean":"rimraf dist","format":"prettier --write src/**/*.ts","prepare":"npm run build","lint:fix":"eslint 'src/**/*.ts' --fix","prebuild":"npm run clean","release:major":"npm run build && npm version major && npm publish","release:minor":"npm run build && npm version minor && npm publish","release:patch":"npm run build && npm version patch && npm publish"},"_npmUser":{"name":"prateek32177","email":"prateek32177@gmail.com"},"repository":{"url":"git+https://github.com/Hookflo/tern.git","type":"git"},"_npmVersion":"10.9.2","description":"A robust, scalable webhook verification framework supporting multiple platforms and signature algorithms","directories":{},"_nodeVersion":"22.13.0","dependencies":{"@upstash/qstash":"^2.9.0"},"publishConfig":{"access":"public"},"typesVersions":{"*":{"*":["dist/index.d.ts"],"nextjs":["dist/nextjs.d.ts"],"express":["dist/express.d.ts"],"upstash":["dist/upstash/index.d.ts"],"cloudflare":["dist/cloudflare.d.ts"]}},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"29.5.0","eslint":"^8.57.1","rimraf":"^6.0.1","ts-jest":"29.1.0","ts-node":"^10.9.2","prettier":"3.0.0","typescript":"^5.0.0","@types/jest":"29.5.0","@types/node":"20.0.0","@types/express":"^5.0.3","eslint-plugin-import":"^2.32.0","@typescript-eslint/parser":"^8.39.0","eslint-config-airbnb-base":"^15.0.0","@typescript-eslint/eslint-plugin":"^8.39.0"},"_npmOperationalInternal":{"tmp":"tmp/tern_3.0.13-beta_1772083933187_0.9078903915528793","host":"s3://npm-registry-packages-npm-production"}},"3.0.15-beta":{"name":"@hookflo/tern","version":"3.0.15-beta","keywords":["Hookflo","webhook","verification","security","hmac","signature","github","stripe","clerk","supabase","typescript","node","express","nextjs"],"author":{"name":"Prateek Jain"},"license":"MIT","_id":"@hookflo/tern@3.0.15-beta","maintainers":[{"name":"prateek32177","email":"prateek32177@gmail.com"}],"homepage":"https://github.com/Hookflo/tern#readme","bugs":{"url":"https://github.com/Hookflo/tern/issues"},"dist":{"shasum":"a84538ec199ad7752bd90f491980193d5e56c815","tarball":"https://registry.npmjs.org/@hookflo/tern/-/tern-3.0.15-beta.tgz","fileCount":79,"integrity":"sha512-Jrh7JcpQTUR/PeLA03IczQt26+nvBm0j7QpJZBkyelgIc9ESjfqGg3CE6Rh7kYplvwsxYJ/onUVaxgJGOfq60g==","signatures":[{"sig":"MEQCICUx8ZQoKi8IHT+1WlMBum4tkiAWYM4ZmzOJMrdSLQSaAiA6ftn9caZGWdfKgEW6jLwcJOZ/HX6JJIFx1QBK95KGSA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":204954},"main":"dist/index.js","types":"dist/index.d.ts","engines":{"node":">=16.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","default":"./dist/index.js","require":"./dist/index.js"},"./nextjs":{"types":"./dist/nextjs.d.ts","import":"./dist/nextjs.js","default":"./dist/nextjs.js","require":"./dist/nextjs.js"},"./express":{"types":"./dist/express.d.ts","import":"./dist/express.js","default":"./dist/express.js","require":"./dist/express.js"},"./upstash":{"types":"./dist/upstash/index.d.ts","import":"./dist/upstash/index.js","default":"./dist/upstash/index.js","require":"./dist/upstash/index.js"},"./cloudflare":{"types":"./dist/cloudflare.d.ts","import":"./dist/cloudflare.js","default":"./dist/cloudflare.js","require":"./dist/cloudflare.js"},"./package.json":"./package.json"},"gitHead":"899310b29de30a4b4e86a4fa20ce02fe2c2e91a2","scripts":{"dev":"tsc --watch","lint":"eslint src/**/*.ts","test":"node dist/test.js","build":"tsc","clean":"rimraf dist","format":"prettier --write src/**/*.ts","prepare":"npm run build","lint:fix":"eslint 'src/**/*.ts' --fix","prebuild":"npm run clean","release:major":"npm run build && npm version major && npm publish","release:minor":"npm run build && npm version minor && npm publish","release:patch":"npm run build && npm version patch && npm publish"},"_npmUser":{"name":"prateek32177","email":"prateek32177@gmail.com"},"repository":{"url":"git+https://github.com/Hookflo/tern.git","type":"git"},"_npmVersion":"10.9.2","description":"A robust, scalable webhook verification framework supporting multiple platforms and signature algorithms","directories":{},"_nodeVersion":"22.13.0","dependencies":{"@upstash/qstash":"^2.9.0"},"publishConfig":{"access":"public"},"typesVersions":{"*":{"*":["dist/index.d.ts"],"nextjs":["dist/nextjs.d.ts"],"express":["dist/express.d.ts"],"upstash":["dist/upstash/index.d.ts"],"cloudflare":["dist/cloudflare.d.ts"]}},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"29.5.0","eslint":"^8.57.1","rimraf":"^6.0.1","ts-jest":"29.1.0","ts-node":"^10.9.2","prettier":"3.0.0","typescript":"^5.0.0","@types/jest":"29.5.0","@types/node":"20.0.0","@types/express":"^5.0.3","eslint-plugin-import":"^2.32.0","@typescript-eslint/parser":"^8.39.0","eslint-config-airbnb-base":"^15.0.0","@typescript-eslint/eslint-plugin":"^8.39.0"},"_npmOperationalInternal":{"tmp":"tmp/tern_3.0.15-beta_1772129918003_0.3181453263396905","host":"s3://npm-registry-packages-npm-production"}},"3.0.17-beta":{"name":"@hookflo/tern","version":"3.0.17-beta","keywords":["Hookflo","webhook","verification","security","hmac","signature","github","stripe","clerk","supabase","typescript","node","express","nextjs"],"author":{"name":"Prateek Jain"},"license":"MIT","_id":"@hookflo/tern@3.0.17-beta","maintainers":[{"name":"prateek32177","email":"prateek32177@gmail.com"}],"homepage":"https://github.com/Hookflo/tern#readme","bugs":{"url":"https://github.com/Hookflo/tern/issues"},"dist":{"shasum":"535bec08635bd25a37ba1cbcc9212aaad0fc5a2d","tarball":"https://registry.npmjs.org/@hookflo/tern/-/tern-3.0.17-beta.tgz","fileCount":79,"integrity":"sha512-1eiY8Gc6uvy4kTMLzBjgrozO6/zpji/ErHI8aKUTJWEbVehh22HW5Gz0MQiOUhUZTU2LJGajsHapJSWedasVsg==","signatures":[{"sig":"MEUCIQDoDQLRazq1OnZQqYb8+7z2q7cEJje6qyMbkBR8b3+IHgIgbGyj2zE5gOvregevwWkYTKZTsD8og1Krmrhs3t/BqZs=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":205175},"main":"dist/index.js","types":"dist/index.d.ts","engines":{"node":">=16.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","default":"./dist/index.js","require":"./dist/index.js"},"./nextjs":{"types":"./dist/nextjs.d.ts","import":"./dist/nextjs.js","default":"./dist/nextjs.js","require":"./dist/nextjs.js"},"./express":{"types":"./dist/express.d.ts","import":"./dist/express.js","default":"./dist/express.js","require":"./dist/express.js"},"./upstash":{"types":"./dist/upstash/index.d.ts","import":"./dist/upstash/index.js","default":"./dist/upstash/index.js","require":"./dist/upstash/index.js"},"./cloudflare":{"types":"./dist/cloudflare.d.ts","import":"./dist/cloudflare.js","default":"./dist/cloudflare.js","require":"./dist/cloudflare.js"},"./package.json":"./package.json"},"gitHead":"7210cfa9ab8cc6d3bb1c5eeb46b580886c0333eb","scripts":{"dev":"tsc --watch","lint":"eslint src/**/*.ts","test":"node dist/test.js","build":"tsc","clean":"rimraf dist","format":"prettier --write src/**/*.ts","prepare":"npm run build","lint:fix":"eslint 'src/**/*.ts' --fix","prebuild":"npm run clean","release:major":"npm run build && npm version major && npm publish","release:minor":"npm run build && npm version minor && npm publish","release:patch":"npm run build && npm version patch && npm publish"},"_npmUser":{"name":"prateek32177","email":"prateek32177@gmail.com"},"repository":{"url":"git+https://github.com/Hookflo/tern.git","type":"git"},"_npmVersion":"10.9.2","description":"A robust, scalable webhook verification framework supporting multiple platforms and signature algorithms","directories":{},"_nodeVersion":"22.13.0","dependencies":{"@upstash/qstash":"^2.9.0"},"publishConfig":{"access":"public"},"typesVersions":{"*":{"*":["dist/index.d.ts"],"nextjs":["dist/nextjs.d.ts"],"express":["dist/express.d.ts"],"upstash":["dist/upstash/index.d.ts"],"cloudflare":["dist/cloudflare.d.ts"]}},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"29.5.0","eslint":"^8.57.1","rimraf":"^6.0.1","ts-jest":"29.1.0","ts-node":"^10.9.2","prettier":"3.0.0","typescript":"^5.0.0","@types/jest":"29.5.0","@types/node":"20.0.0","@types/express":"^5.0.3","eslint-plugin-import":"^2.32.0","@typescript-eslint/parser":"^8.39.0","eslint-config-airbnb-base":"^15.0.0","@typescript-eslint/eslint-plugin":"^8.39.0"},"_npmOperationalInternal":{"tmp":"tmp/tern_3.0.17-beta_1772132358234_0.9403817910372987","host":"s3://npm-registry-packages-npm-production"}},"4.0.0":{"name":"@hookflo/tern","version":"4.0.0","keywords":["Hookflo","webhook","verification","security","hmac","signature","github","stripe","clerk","supabase","typescript","node","express","nextjs"],"author":{"name":"Prateek Jain"},"license":"MIT","_id":"@hookflo/tern@4.0.0","maintainers":[{"name":"prateek32177","email":"prateek32177@gmail.com"}],"homepage":"https://github.com/Hookflo/tern#readme","bugs":{"url":"https://github.com/Hookflo/tern/issues"},"dist":{"shasum":"a23bc669a4de330e7f9c8ce09156388acc851f0d","tarball":"https://registry.npmjs.org/@hookflo/tern/-/tern-4.0.0.tgz","fileCount":79,"integrity":"sha512-Cj62GX6ddErKZFTfPQ89jkdLyLp2BEBSnXOutX4dgA2AxSGRm7ndTKI084vmrYQ/OK7K48NjWaAUel1J2JrryQ==","signatures":[{"sig":"MEQCIAzxpdbBPfhy1ZiTm96/pdxv4y4MDaEIW34HZm3j3Nu7AiASVK2RV5g2jzifhLJxtLHm4EZGNHcHRCGv6NXyaTzwyQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":205168},"main":"dist/index.js","types":"dist/index.d.ts","engines":{"node":">=16.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","default":"./dist/index.js","require":"./dist/index.js"},"./nextjs":{"types":"./dist/nextjs.d.ts","import":"./dist/nextjs.js","default":"./dist/nextjs.js","require":"./dist/nextjs.js"},"./express":{"types":"./dist/express.d.ts","import":"./dist/express.js","default":"./dist/express.js","require":"./dist/express.js"},"./upstash":{"types":"./dist/upstash/index.d.ts","import":"./dist/upstash/index.js","default":"./dist/upstash/index.js","require":"./dist/upstash/index.js"},"./cloudflare":{"types":"./dist/cloudflare.d.ts","import":"./dist/cloudflare.js","default":"./dist/cloudflare.js","require":"./dist/cloudflare.js"},"./package.json":"./package.json"},"gitHead":"76ddd8f45e9f191f679194b31819db5445d315db","scripts":{"dev":"tsc --watch","lint":"eslint src/**/*.ts","test":"node dist/test.js","build":"tsc","clean":"rimraf dist","format":"prettier --write src/**/*.ts","prepare":"npm run build","lint:fix":"eslint 'src/**/*.ts' --fix","prebuild":"npm run clean","release:major":"npm run build && npm version major && npm publish","release:minor":"npm run build && npm version minor && npm publish","release:patch":"npm run build && npm version patch && npm publish"},"_npmUser":{"name":"prateek32177","email":"prateek32177@gmail.com"},"repository":{"url":"git+https://github.com/Hookflo/tern.git","type":"git"},"_npmVersion":"10.9.2","description":"A robust, scalable webhook verification framework supporting multiple platforms and signature algorithms","directories":{},"_nodeVersion":"22.13.0","dependencies":{"@upstash/qstash":"^2.9.0"},"publishConfig":{"access":"public"},"typesVersions":{"*":{"*":["dist/index.d.ts"],"nextjs":["dist/nextjs.d.ts"],"express":["dist/express.d.ts"],"upstash":["dist/upstash/index.d.ts"],"cloudflare":["dist/cloudflare.d.ts"]}},"_hasShrinkwrap":false,"devDependencies":{"jest":"29.5.0","eslint":"^8.57.1","rimraf":"^6.0.1","ts-jest":"29.1.0","ts-node":"^10.9.2","prettier":"3.0.0","typescript":"^5.0.0","@types/jest":"29.5.0","@types/node":"20.0.0","@types/express":"^5.0.3","eslint-plugin-import":"^2.32.0","@typescript-eslint/parser":"^8.39.0","eslint-config-airbnb-base":"^15.0.0","@typescript-eslint/eslint-plugin":"^8.39.0"},"_npmOperationalInternal":{"tmp":"tmp/tern_4.0.0_1772134877970_0.8060685809105057","host":"s3://npm-registry-packages-npm-production"}},"4.0.2":{"name":"@hookflo/tern","version":"4.0.2","keywords":["Hookflo","webhook","verification","security","hmac","signature","github","stripe","clerk","supabase","typescript","node","express","nextjs"],"author":{"name":"Prateek Jain"},"license":"MIT","_id":"@hookflo/tern@4.0.2","maintainers":[{"name":"prateek32177","email":"prateek32177@gmail.com"}],"homepage":"https://github.com/Hookflo/tern#readme","bugs":{"url":"https://github.com/Hookflo/tern/issues"},"dist":{"shasum":"caa7e2256671b5e132d2f298efc14fe63e85e7ff","tarball":"https://registry.npmjs.org/@hookflo/tern/-/tern-4.0.2.tgz","fileCount":79,"integrity":"sha512-3Ap/AC1qZvkp8h0W9Bvb1j14b/A3Emv+6eVgk2M33PHshtmEiVQnGVcyUT21/qlw+3l16mr2AVDKoXUAtI/KCg==","signatures":[{"sig":"MEYCIQCaDTzVKCM7rH6+X8wx5+sFk28VGo+2F/eOuAnW78TCoQIhAJQMT9F7dgAHHlszxYLJf/g8zztkpVv/IlsCo9T4y/dS","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":208374},"main":"dist/index.js","types":"dist/index.d.ts","engines":{"node":">=16.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","default":"./dist/index.js","require":"./dist/index.js"},"./nextjs":{"types":"./dist/nextjs.d.ts","import":"./dist/nextjs.js","default":"./dist/nextjs.js","require":"./dist/nextjs.js"},"./express":{"types":"./dist/express.d.ts","import":"./dist/express.js","default":"./dist/express.js","require":"./dist/express.js"},"./upstash":{"types":"./dist/upstash/index.d.ts","import":"./dist/upstash/index.js","default":"./dist/upstash/index.js","require":"./dist/upstash/index.js"},"./cloudflare":{"types":"./dist/cloudflare.d.ts","import":"./dist/cloudflare.js","default":"./dist/cloudflare.js","require":"./dist/cloudflare.js"},"./package.json":"./package.json"},"gitHead":"c40b129bbd24102b475329d94b4fcac499281bd7","scripts":{"dev":"tsc --watch","lint":"eslint src/**/*.ts","test":"node dist/test.js","build":"tsc","clean":"rimraf dist","format":"prettier --write src/**/*.ts","prepare":"npm run build","lint:fix":"eslint 'src/**/*.ts' --fix","prebuild":"npm run clean","release:major":"npm run build && npm version major && npm publish","release:minor":"npm run build && npm version minor && npm publish","release:patch":"npm run build && npm version patch && npm publish"},"_npmUser":{"name":"prateek32177","email":"prateek32177@gmail.com"},"repository":{"url":"git+https://github.com/Hookflo/tern.git","type":"git"},"_npmVersion":"10.9.2","description":"A robust, scalable webhook verification framework supporting multiple platforms and signature algorithms","directories":{},"_nodeVersion":"22.13.0","dependencies":{"@upstash/qstash":"^2.9.0"},"publishConfig":{"access":"public"},"typesVersions":{"*":{"*":["dist/index.d.ts"],"nextjs":["dist/nextjs.d.ts"],"express":["dist/express.d.ts"],"upstash":["dist/upstash/index.d.ts"],"cloudflare":["dist/cloudflare.d.ts"]}},"_hasShrinkwrap":false,"devDependencies":{"jest":"29.5.0","eslint":"^8.57.1","rimraf":"^6.0.1","ts-jest":"29.1.0","ts-node":"^10.9.2","prettier":"3.0.0","typescript":"^5.0.0","@types/jest":"29.5.0","@types/node":"20.0.0","@types/express":"^5.0.3","eslint-plugin-import":"^2.32.0","@typescript-eslint/parser":"^8.39.0","eslint-config-airbnb-base":"^15.0.0","@typescript-eslint/eslint-plugin":"^8.39.0"},"_npmOperationalInternal":{"tmp":"tmp/tern_4.0.2_1772180222276_0.7955225608189231","host":"s3://npm-registry-packages-npm-production"}},"4.0.3":{"name":"@hookflo/tern","version":"4.0.3","keywords":["Hookflo","webhook","verification","security","hmac","signature","github","stripe","clerk","supabase","typescript","node","express","nextjs"],"author":{"name":"Prateek Jain"},"license":"MIT","_id":"@hookflo/tern@4.0.3","maintainers":[{"name":"prateek32177","email":"prateek32177@gmail.com"}],"homepage":"https://github.com/Hookflo/tern#readme","bugs":{"url":"https://github.com/Hookflo/tern/issues"},"dist":{"shasum":"b5590ac41b711cc3eeedd21ab68c25dc63ec5602","tarball":"https://registry.npmjs.org/@hookflo/tern/-/tern-4.0.3.tgz","fileCount":79,"integrity":"sha512-s1nJTTxgU5B0Io40YGkyGGfvPvHmeVOgB0Lf7hkg4l+yS+CvoBMYYQIsxAAgvs6sLdkPvTz8BU+pOYaej3WZhw==","signatures":[{"sig":"MEUCIQDiQcpqbdtSzRI7ZNrWVNaroElDuMy5ciFzf29GtEMBXAIgb931zaiBO3F4cb/rSjMI4T+9YMz7TTVNA4Sn/TcLAXU=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":209942},"main":"dist/index.js","types":"dist/index.d.ts","engines":{"node":">=16.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","default":"./dist/index.js","require":"./dist/index.js"},"./nextjs":{"types":"./dist/nextjs.d.ts","import":"./dist/nextjs.js","default":"./dist/nextjs.js","require":"./dist/nextjs.js"},"./express":{"types":"./dist/express.d.ts","import":"./dist/express.js","default":"./dist/express.js","require":"./dist/express.js"},"./upstash":{"types":"./dist/upstash/index.d.ts","import":"./dist/upstash/index.js","default":"./dist/upstash/index.js","require":"./dist/upstash/index.js"},"./cloudflare":{"types":"./dist/cloudflare.d.ts","import":"./dist/cloudflare.js","default":"./dist/cloudflare.js","require":"./dist/cloudflare.js"},"./package.json":"./package.json"},"gitHead":"1fa4950ff737246ac97618ea093038193663c970","scripts":{"dev":"tsc --watch","lint":"eslint src/**/*.ts","test":"node dist/test.js","build":"tsc","clean":"rimraf dist","format":"prettier --write src/**/*.ts","prepare":"npm run build","lint:fix":"eslint 'src/**/*.ts' --fix","prebuild":"npm run clean","release:major":"npm run build && npm version major && npm publish","release:minor":"npm run build && npm version minor && npm publish","release:patch":"npm run build && npm version patch && npm publish"},"_npmUser":{"name":"prateek32177","email":"prateek32177@gmail.com"},"repository":{"url":"git+https://github.com/Hookflo/tern.git","type":"git"},"_npmVersion":"10.9.2","description":"A robust, scalable webhook verification framework supporting multiple platforms and signature algorithms","directories":{},"_nodeVersion":"22.13.0","dependencies":{"@upstash/qstash":"^2.9.0"},"publishConfig":{"access":"public"},"typesVersions":{"*":{"*":["dist/index.d.ts"],"nextjs":["dist/nextjs.d.ts"],"express":["dist/express.d.ts"],"upstash":["dist/upstash/index.d.ts"],"cloudflare":["dist/cloudflare.d.ts"]}},"_hasShrinkwrap":false,"devDependencies":{"jest":"29.5.0","eslint":"^8.57.1","rimraf":"^6.0.1","ts-jest":"29.1.0","ts-node":"^10.9.2","prettier":"3.0.0","typescript":"^5.0.0","@types/jest":"29.5.0","@types/node":"20.0.0","@types/express":"^5.0.3","eslint-plugin-import":"^2.32.0","@typescript-eslint/parser":"^8.39.0","eslint-config-airbnb-base":"^15.0.0","@typescript-eslint/eslint-plugin":"^8.39.0"},"_npmOperationalInternal":{"tmp":"tmp/tern_4.0.3_1772197540011_0.9300969183126757","host":"s3://npm-registry-packages-npm-production"}},"4.1.0":{"name":"@hookflo/tern","version":"4.1.0","keywords":["Hookflo","webhook","verification","security","hmac","signature","github","stripe","clerk","supabase","typescript","node","express","nextjs"],"author":{"name":"Prateek Jain"},"license":"MIT","_id":"@hookflo/tern@4.1.0","maintainers":[{"name":"prateek32177","email":"prateek32177@gmail.com"}],"homepage":"https://github.com/Hookflo/tern#readme","bugs":{"url":"https://github.com/Hookflo/tern/issues"},"dist":{"shasum":"1aa350f00e7ae4782fd7aa86b9a6b4d06af856c5","tarball":"https://registry.npmjs.org/@hookflo/tern/-/tern-4.1.0.tgz","fileCount":73,"integrity":"sha512-Q8voE0yTlRyKEDfYSi2l9ez8VJPi+Bc05Hfo1zwNd0miJf819UT0b1NTam1ips7W22NOtD4G+/SkztJ4GD9rew==","signatures":[{"sig":"MEQCIAFX+Crl3SEYW8N61J5usi9upVpxhipUrfbd26/McyEsAiBalhekUtWnd9wcFDoxl5Fq7Pppok/bHJ0IPcTTteBI9w==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":178790},"main":"dist/index.js","types":"dist/index.d.ts","engines":{"node":">=16.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","default":"./dist/index.js","require":"./dist/index.js"},"./nextjs":{"types":"./dist/nextjs.d.ts","import":"./dist/nextjs.js","default":"./dist/nextjs.js","require":"./dist/nextjs.js"},"./express":{"types":"./dist/express.d.ts","import":"./dist/express.js","default":"./dist/express.js","require":"./dist/express.js"},"./upstash":{"types":"./dist/upstash/index.d.ts","import":"./dist/upstash/index.js","default":"./dist/upstash/index.js","require":"./dist/upstash/index.js"},"./cloudflare":{"types":"./dist/cloudflare.d.ts","import":"./dist/cloudflare.js","default":"./dist/cloudflare.js","require":"./dist/cloudflare.js"},"./package.json":"./package.json"},"gitHead":"46c620b7434d4d19787e371340c7d6d00da70d2d","scripts":{"dev":"tsc --watch","lint":"eslint src/**/*.ts","test":"ts-node src/test.ts","build":"tsc","clean":"rimraf dist","format":"prettier --write src/**/*.ts","prepare":"npm run build","lint:fix":"eslint 'src/**/*.ts' --fix","prebuild":"npm run clean","release:major":"npm run build && npm version major && npm publish","release:minor":"npm run build && npm version minor && npm publish","release:patch":"npm run build && npm version patch && npm publish"},"_npmUser":{"name":"prateek32177","email":"prateek32177@gmail.com"},"repository":{"url":"git+https://github.com/Hookflo/tern.git","type":"git"},"_npmVersion":"10.9.2","description":"A robust, scalable webhook verification framework supporting multiple platforms and signature algorithms","directories":{},"_nodeVersion":"22.13.0","dependencies":{"@upstash/qstash":"^2.9.0"},"publishConfig":{"access":"public"},"typesVersions":{"*":{"*":["dist/index.d.ts"],"nextjs":["dist/nextjs.d.ts"],"express":["dist/express.d.ts"],"upstash":["dist/upstash/index.d.ts"],"cloudflare":["dist/cloudflare.d.ts"]}},"_hasShrinkwrap":false,"devDependencies":{"jest":"29.5.0","eslint":"^8.57.1","rimraf":"^6.0.1","ts-jest":"29.1.0","ts-node":"^10.9.2","prettier":"3.0.0","typescript":"^5.0.0","@types/jest":"29.5.0","@types/node":"20.0.0","@types/express":"^5.0.3","eslint-plugin-import":"^2.32.0","@typescript-eslint/parser":"^8.39.0","eslint-config-airbnb-base":"^15.0.0","@typescript-eslint/eslint-plugin":"^8.39.0"},"_npmOperationalInternal":{"tmp":"tmp/tern_4.1.0_1772303899042_0.3618141634950254","host":"s3://npm-registry-packages-npm-production"}},"4.1.1":{"name":"@hookflo/tern","version":"4.1.1","keywords":["Hookflo","webhook","verification","security","hmac","signature","github","stripe","clerk","supabase","typescript","node","express","nextjs"],"author":{"name":"Prateek Jain"},"license":"MIT","_id":"@hookflo/tern@4.1.1","maintainers":[{"name":"prateek32177","email":"prateek32177@gmail.com"}],"homepage":"https://github.com/Hookflo/tern#readme","bugs":{"url":"https://github.com/Hookflo/tern/issues"},"dist":{"shasum":"c2d771e6177ba88f7717e558716b06a48867fae2","tarball":"https://registry.npmjs.org/@hookflo/tern/-/tern-4.1.1.tgz","fileCount":73,"integrity":"sha512-96ll9D+Dvuo7bH/+HycrANZu+e+LHZ084ux7g6YWG+yMF2E+tqFVGyCjsqqqK9YTlGRBMGALfDS7bWYLl+ZCJQ==","signatures":[{"sig":"MEUCIHfWOdnIDp0Ow0zHmv3mvHkud4fnJhsoPIj9G6hS1TqpAiEArQd8FXQ2Tc/KATMeb/ug9GT3SK5PFKmzbUviUuXSu8k=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":178790},"main":"dist/index.js","types":"dist/index.d.ts","engines":{"node":">=16.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","default":"./dist/index.js","require":"./dist/index.js"},"./nextjs":{"types":"./dist/nextjs.d.ts","import":"./dist/nextjs.js","default":"./dist/nextjs.js","require":"./dist/nextjs.js"},"./express":{"types":"./dist/express.d.ts","import":"./dist/express.js","default":"./dist/express.js","require":"./dist/express.js"},"./upstash":{"types":"./dist/upstash/index.d.ts","import":"./dist/upstash/index.js","default":"./dist/upstash/index.js","require":"./dist/upstash/index.js"},"./cloudflare":{"types":"./dist/cloudflare.d.ts","import":"./dist/cloudflare.js","default":"./dist/cloudflare.js","require":"./dist/cloudflare.js"},"./package.json":"./package.json"},"gitHead":"c20d0362e32f4dc805d2aa595224d38c4da0bb1a","scripts":{"dev":"tsc --watch","lint":"eslint src/**/*.ts","test":"ts-node src/test.ts","build":"tsc","clean":"rimraf dist","format":"prettier --write src/**/*.ts","prepare":"npm run build","lint:fix":"eslint 'src/**/*.ts' --fix","prebuild":"npm run clean","release:major":"npm run build && npm version major && npm publish","release:minor":"npm run build && npm version minor && npm publish","release:patch":"npm run build && npm version patch && npm publish"},"_npmUser":{"name":"prateek32177","email":"prateek32177@gmail.com"},"repository":{"url":"git+https://github.com/Hookflo/tern.git","type":"git"},"_npmVersion":"10.9.2","description":"A robust, scalable webhook verification framework supporting multiple platforms and signature algorithms","directories":{},"_nodeVersion":"22.13.0","dependencies":{"@upstash/qstash":"^2.9.0"},"publishConfig":{"access":"public"},"typesVersions":{"*":{"*":["dist/index.d.ts"],"nextjs":["dist/nextjs.d.ts"],"express":["dist/express.d.ts"],"upstash":["dist/upstash/index.d.ts"],"cloudflare":["dist/cloudflare.d.ts"]}},"_hasShrinkwrap":false,"devDependencies":{"jest":"29.5.0","eslint":"^8.57.1","rimraf":"^6.0.1","ts-jest":"29.1.0","ts-node":"^10.9.2","prettier":"3.0.0","typescript":"^5.0.0","@types/jest":"29.5.0","@types/node":"20.0.0","@types/express":"^5.0.3","eslint-plugin-import":"^2.32.0","@typescript-eslint/parser":"^8.39.0","eslint-config-airbnb-base":"^15.0.0","@typescript-eslint/eslint-plugin":"^8.39.0"},"_npmOperationalInternal":{"tmp":"tmp/tern_4.1.1_1772340884418_0.3217484451333261","host":"s3://npm-registry-packages-npm-production"}},"4.2.1-beta":{"name":"@hookflo/tern","version":"4.2.1-beta","keywords":["Hookflo","webhook","verification","security","hmac","signature","github","stripe","clerk","supabase","typescript","node","express","nextjs"],"author":{"name":"Prateek Jain"},"license":"MIT","_id":"@hookflo/tern@4.2.1-beta","maintainers":[{"name":"prateek32177","email":"prateek32177@gmail.com"}],"homepage":"https://github.com/Hookflo/tern#readme","bugs":{"url":"https://github.com/Hookflo/tern/issues"},"dist":{"shasum":"574684da5b9967c3169edd0793c34fbb62dd9d67","tarball":"https://registry.npmjs.org/@hookflo/tern/-/tern-4.2.1-beta.tgz","fileCount":93,"integrity":"sha512-0ZggYyIWmanAnt3CSvTPWJXqLhtoSbhHt1xeP7buu3ntmTuyr3ACBo4f9tWo8ATWNyZtA28O6prB2KIcyxBwxg==","signatures":[{"sig":"MEQCIFwIPsqfiqAO7xcVAyUwIT9oVjsF0s3pON/+ND0CHiN3AiBvAF0v6DjXfF1uLB9FThobKzf/+rU9bi2+pt+I3mTZOA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":197270},"main":"dist/index.js","types":"dist/index.d.ts","engines":{"node":">=16.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","default":"./dist/index.js","require":"./dist/index.js"},"./nextjs":{"types":"./dist/nextjs.d.ts","import":"./dist/nextjs.js","default":"./dist/nextjs.js","require":"./dist/nextjs.js"},"./express":{"types":"./dist/express.d.ts","import":"./dist/express.js","default":"./dist/express.js","require":"./dist/express.js"},"./upstash":{"types":"./dist/upstash/index.d.ts","import":"./dist/upstash/index.js","default":"./dist/upstash/index.js","require":"./dist/upstash/index.js"},"./cloudflare":{"types":"./dist/cloudflare.d.ts","import":"./dist/cloudflare.js","default":"./dist/cloudflare.js","require":"./dist/cloudflare.js"},"./package.json":"./package.json"},"gitHead":"5a10cc1071175e63ca6c3614bd367359467b1fc6","scripts":{"dev":"tsc --watch","lint":"eslint src/**/*.ts","test":"ts-node src/test.ts","build":"tsc","clean":"rimraf dist","format":"prettier --write src/**/*.ts","prepare":"npm run build","lint:fix":"eslint 'src/**/*.ts' --fix","prebuild":"npm run clean","release:major":"npm run build && npm version major && npm publish","release:minor":"npm run build && npm version minor && npm publish","release:patch":"npm run build && npm version patch && npm publish"},"_npmUser":{"name":"prateek32177","email":"prateek32177@gmail.com"},"deprecated":"accidentally published as latest, use @hookflo/tern@latest instead","repository":{"url":"git+https://github.com/Hookflo/tern.git","type":"git"},"_npmVersion":"10.9.2","description":"A robust, scalable webhook verification framework supporting multiple platforms and signature algorithms","directories":{},"_nodeVersion":"22.13.0","dependencies":{"@upstash/qstash":"^2.9.0"},"publishConfig":{"access":"public"},"typesVersions":{"*":{"*":["dist/index.d.ts"],"nextjs":["dist/nextjs.d.ts"],"express":["dist/express.d.ts"],"upstash":["dist/upstash/index.d.ts"],"cloudflare":["dist/cloudflare.d.ts"]}},"_hasShrinkwrap":false,"devDependencies":{"jest":"29.5.0","eslint":"^8.57.1","rimraf":"^6.0.1","ts-jest":"29.1.0","ts-node":"^10.9.2","prettier":"3.0.0","typescript":"^5.0.0","@types/jest":"29.5.0","@types/node":"20.0.0","@types/express":"^5.0.3","eslint-plugin-import":"^2.32.0","@typescript-eslint/parser":"^8.39.0","eslint-config-airbnb-base":"^15.0.0","@typescript-eslint/eslint-plugin":"^8.39.0"},"_npmOperationalInternal":{"tmp":"tmp/tern_4.2.1-beta_1772520434449_0.09294608656675618","host":"s3://npm-registry-packages-npm-production"}},"4.2.3-beta":{"name":"@hookflo/tern","version":"4.2.3-beta","keywords":["Hookflo","webhook","verification","security","hmac","signature","github","stripe","clerk","supabase","typescript","node","express","nextjs"],"author":{"name":"Prateek Jain"},"license":"MIT","_id":"@hookflo/tern@4.2.3-beta","maintainers":[{"name":"prateek32177","email":"prateek32177@gmail.com"}],"homepage":"https://github.com/Hookflo/tern#readme","bugs":{"url":"https://github.com/Hookflo/tern/issues"},"dist":{"shasum":"0e20682e8e3a911ac6d7ce450a676113c9660a59","tarball":"https://registry.npmjs.org/@hookflo/tern/-/tern-4.2.3-beta.tgz","fileCount":93,"integrity":"sha512-JjyEZ6BBXkDQvExMjEVqdW487hz+SUo4ulAwIn9O3fxyQERsbKVNiCO5NyybDXjEhK2yTwN/B5n7vEVt0BVJrA==","signatures":[{"sig":"MEYCIQDhumAPE4Nri7HQ7gPS1ladY1TydR5WVCPaZ3TO37xRqgIhAMw5PAnPau/RLtakRaRp4U9/xVkLqHBnGcXq7KMFVsSe","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":197782},"main":"dist/index.js","types":"dist/index.d.ts","engines":{"node":">=16.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","default":"./dist/index.js","require":"./dist/index.js"},"./nextjs":{"types":"./dist/nextjs.d.ts","import":"./dist/nextjs.js","default":"./dist/nextjs.js","require":"./dist/nextjs.js"},"./express":{"types":"./dist/express.d.ts","import":"./dist/express.js","default":"./dist/express.js","require":"./dist/express.js"},"./upstash":{"types":"./dist/upstash/index.d.ts","import":"./dist/upstash/index.js","default":"./dist/upstash/index.js","require":"./dist/upstash/index.js"},"./cloudflare":{"types":"./dist/cloudflare.d.ts","import":"./dist/cloudflare.js","default":"./dist/cloudflare.js","require":"./dist/cloudflare.js"},"./package.json":"./package.json"},"gitHead":"07bfe3b41b5fc3d18ba193ca49e2a837b0eaa207","scripts":{"dev":"tsc --watch","lint":"eslint src/**/*.ts","test":"ts-node src/test.ts","build":"tsc","clean":"rimraf dist","format":"prettier --write src/**/*.ts","prepare":"npm run build","lint:fix":"eslint 'src/**/*.ts' --fix","prebuild":"npm run clean","release:major":"npm run build && npm version major && npm publish","release:minor":"npm run build && npm version minor && npm publish","release:patch":"npm run build && npm version patch && npm publish"},"_npmUser":{"name":"prateek32177","email":"prateek32177@gmail.com"},"deprecated":"accidentally published as latest, use @hookflo/tern@latest instead","repository":{"url":"git+https://github.com/Hookflo/tern.git","type":"git"},"_npmVersion":"10.9.2","description":"A robust, scalable webhook verification framework supporting multiple platforms and signature algorithms","directories":{},"_nodeVersion":"22.13.0","dependencies":{"@upstash/qstash":"^2.9.0"},"publishConfig":{"access":"public"},"typesVersions":{"*":{"*":["dist/index.d.ts"],"nextjs":["dist/nextjs.d.ts"],"express":["dist/express.d.ts"],"upstash":["dist/upstash/index.d.ts"],"cloudflare":["dist/cloudflare.d.ts"]}},"_hasShrinkwrap":false,"devDependencies":{"jest":"29.5.0","eslint":"^8.57.1","rimraf":"^6.0.1","ts-jest":"29.1.0","ts-node":"^10.9.2","prettier":"3.0.0","typescript":"^5.0.0","@types/jest":"29.5.0","@types/node":"20.0.0","@types/express":"^5.0.3","eslint-plugin-import":"^2.32.0","@typescript-eslint/parser":"^8.39.0","eslint-config-airbnb-base":"^15.0.0","@typescript-eslint/eslint-plugin":"^8.39.0"},"_npmOperationalInternal":{"tmp":"tmp/tern_4.2.3-beta_1772525467924_0.4170039065662354","host":"s3://npm-registry-packages-npm-production"}},"4.2.5-beta":{"name":"@hookflo/tern","version":"4.2.5-beta","keywords":["Hookflo","webhook","verification","security","hmac","signature","github","stripe","clerk","supabase","typescript","node","express","nextjs"],"author":{"name":"Prateek Jain"},"license":"MIT","_id":"@hookflo/tern@4.2.5-beta","maintainers":[{"name":"prateek32177","email":"prateek32177@gmail.com"}],"homepage":"https://github.com/Hookflo/tern#readme","bugs":{"url":"https://github.com/Hookflo/tern/issues"},"dist":{"shasum":"25698aa467fb85e9f1186b9c959af3bfcaa834a8","tarball":"https://registry.npmjs.org/@hookflo/tern/-/tern-4.2.5-beta.tgz","fileCount":93,"integrity":"sha512-BkDaNfhluf0XwS8qNU17L+9jMKRYqOuZ4ce6Kb3H7I7avIIMUem1U4Pnhhabvxt9ZNMAsSFUi8eK74DwFdnHVg==","signatures":[{"sig":"MEQCIGQOt30fZhBuEkMcew8JZptgybAuipic6vJHSTqlEAXgAiA5qkAsmhEGqPFXfVj7SmAwo5goqGRq+g8INGar7S2mYw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":199988},"main":"dist/index.js","types":"dist/index.d.ts","engines":{"node":">=16.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","default":"./dist/index.js","require":"./dist/index.js"},"./nextjs":{"types":"./dist/nextjs.d.ts","import":"./dist/nextjs.js","default":"./dist/nextjs.js","require":"./dist/nextjs.js"},"./express":{"types":"./dist/express.d.ts","import":"./dist/express.js","default":"./dist/express.js","require":"./dist/express.js"},"./upstash":{"types":"./dist/upstash/index.d.ts","import":"./dist/upstash/index.js","default":"./dist/upstash/index.js","require":"./dist/upstash/index.js"},"./cloudflare":{"types":"./dist/cloudflare.d.ts","import":"./dist/cloudflare.js","default":"./dist/cloudflare.js","require":"./dist/cloudflare.js"},"./package.json":"./package.json"},"gitHead":"20d6709f5d418d97554e62e1f0f9d4282465b097","scripts":{"dev":"tsc --watch","lint":"eslint src/**/*.ts","test":"ts-node src/test.ts","build":"tsc","clean":"rimraf dist","format":"prettier --write src/**/*.ts","prepare":"npm run build","lint:fix":"eslint 'src/**/*.ts' --fix","prebuild":"npm run clean","release:major":"npm run build && npm version major && npm publish","release:minor":"npm run build && npm version minor && npm publish","release:patch":"npm run build && npm version patch && npm publish"},"_npmUser":{"name":"prateek32177","email":"prateek32177@gmail.com"},"deprecated":"accidentally published as latest, use @hookflo/tern@latest instead","repository":{"url":"git+https://github.com/Hookflo/tern.git","type":"git"},"_npmVersion":"10.9.2","description":"A robust, scalable webhook verification framework supporting multiple platforms and signature algorithms","directories":{},"_nodeVersion":"22.13.0","dependencies":{"@upstash/qstash":"^2.9.0"},"publishConfig":{"access":"public"},"typesVersions":{"*":{"*":["dist/index.d.ts"],"nextjs":["dist/nextjs.d.ts"],"express":["dist/express.d.ts"],"upstash":["dist/upstash/index.d.ts"],"cloudflare":["dist/cloudflare.d.ts"]}},"_hasShrinkwrap":false,"devDependencies":{"jest":"29.5.0","eslint":"^8.57.1","rimraf":"^6.0.1","ts-jest":"29.1.0","ts-node":"^10.9.2","prettier":"3.0.0","typescript":"^5.0.0","@types/jest":"29.5.0","@types/node":"20.0.0","@types/express":"^5.0.3","eslint-plugin-import":"^2.32.0","@typescript-eslint/parser":"^8.39.0","eslint-config-airbnb-base":"^15.0.0","@typescript-eslint/eslint-plugin":"^8.39.0"},"_npmOperationalInternal":{"tmp":"tmp/tern_4.2.5-beta_1772526998299_0.9914891889311257","host":"s3://npm-registry-packages-npm-production"}},"4.2.7-beta":{"name":"@hookflo/tern","version":"4.2.7-beta","keywords":["Hookflo","webhook","verification","security","hmac","signature","github","stripe","clerk","supabase","typescript","node","express","nextjs"],"author":{"name":"Prateek Jain"},"license":"MIT","_id":"@hookflo/tern@4.2.7-beta","maintainers":[{"name":"prateek32177","email":"prateek32177@gmail.com"}],"homepage":"https://github.com/Hookflo/tern#readme","bugs":{"url":"https://github.com/Hookflo/tern/issues"},"dist":{"shasum":"dd054933a05c258807c8404fe472b2159b7660aa","tarball":"https://registry.npmjs.org/@hookflo/tern/-/tern-4.2.7-beta.tgz","fileCount":95,"integrity":"sha512-CsgwLS5szc/CZgzYxAnhFICdmeDVvlE1qs+FXmqYol6+aslJdtrcEOd8TAAFGcjXqD832L3oFoLGuscnALgrvw==","signatures":[{"sig":"MEQCICZ43MvZEQ17Ios8cB4WS2e0/OmtPuXIfQ9LbxGgdNgeAiAU/1no6suH6SnAN4ccw1EyuVc75xJvZml/sEuLL5H0Og==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":207678},"main":"dist/index.js","types":"dist/index.d.ts","engines":{"node":">=16.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","default":"./dist/index.js","require":"./dist/index.js"},"./nextjs":{"types":"./dist/nextjs.d.ts","import":"./dist/nextjs.js","default":"./dist/nextjs.js","require":"./dist/nextjs.js"},"./express":{"types":"./dist/express.d.ts","import":"./dist/express.js","default":"./dist/express.js","require":"./dist/express.js"},"./upstash":{"types":"./dist/upstash/index.d.ts","import":"./dist/upstash/index.js","default":"./dist/upstash/index.js","require":"./dist/upstash/index.js"},"./cloudflare":{"types":"./dist/cloudflare.d.ts","import":"./dist/cloudflare.js","default":"./dist/cloudflare.js","require":"./dist/cloudflare.js"},"./package.json":"./package.json"},"gitHead":"f42f52899f4fcf7679148b0cc5139a76ca206b82","scripts":{"dev":"tsc --watch","lint":"eslint src/**/*.ts","test":"ts-node src/test.ts","build":"tsc","clean":"rimraf dist","format":"prettier --write src/**/*.ts","prepare":"npm run build","lint:fix":"eslint 'src/**/*.ts' --fix","prebuild":"npm run clean","release:major":"npm run build && npm version major && npm publish","release:minor":"npm run build && npm version minor && npm publish","release:patch":"npm run build && npm version patch && npm publish"},"_npmUser":{"name":"prateek32177","email":"prateek32177@gmail.com"},"deprecated":"accidentally published as latest, use @hookflo/tern@latest instead","repository":{"url":"git+https://github.com/Hookflo/tern.git","type":"git"},"_npmVersion":"10.9.2","description":"A robust, scalable webhook verification framework supporting multiple platforms and signature algorithms","directories":{},"_nodeVersion":"22.13.0","dependencies":{"@upstash/qstash":"^2.9.0"},"publishConfig":{"access":"public"},"typesVersions":{"*":{"*":["dist/index.d.ts"],"nextjs":["dist/nextjs.d.ts"],"express":["dist/express.d.ts"],"upstash":["dist/upstash/index.d.ts"],"cloudflare":["dist/cloudflare.d.ts"]}},"_hasShrinkwrap":false,"devDependencies":{"jest":"29.5.0","eslint":"^8.57.1","rimraf":"^6.0.1","ts-jest":"29.1.0","ts-node":"^10.9.2","prettier":"3.0.0","typescript":"^5.0.0","@types/jest":"29.5.0","@types/node":"20.0.0","@types/express":"^5.0.3","eslint-plugin-import":"^2.32.0","@typescript-eslint/parser":"^8.39.0","eslint-config-airbnb-base":"^15.0.0","@typescript-eslint/eslint-plugin":"^8.39.0"},"_npmOperationalInternal":{"tmp":"tmp/tern_4.2.7-beta_1772531022566_0.014527005767709378","host":"s3://npm-registry-packages-npm-production"}},"4.2.9-beta":{"name":"@hookflo/tern","version":"4.2.9-beta","keywords":["Hookflo","webhook","verification","security","hmac","signature","github","stripe","clerk","supabase","typescript","node","express","nextjs"],"author":{"name":"Prateek Jain"},"license":"MIT","_id":"@hookflo/tern@4.2.9-beta","maintainers":[{"name":"prateek32177","email":"prateek32177@gmail.com"}],"homepage":"https://github.com/Hookflo/tern#readme","bugs":{"url":"https://github.com/Hookflo/tern/issues"},"dist":{"shasum":"46e061f44c35526aae1a7365f76e6f710b26e321","tarball":"https://registry.npmjs.org/@hookflo/tern/-/tern-4.2.9-beta.tgz","fileCount":95,"integrity":"sha512-KyL7xjNw2R5ZuaFqeE0LneFHLJ3GnQ7Cg5dPOGSTt48ZX42Z/T/NyA/JiUGHWoHnhN7NTR7f+9xXA1bn3AHeww==","signatures":[{"sig":"MEUCIQDrfwWgR5wovWciPRqe5aaMyGJi9fE82X6EqY8S/9vefgIgWJSvPXvRWEXYc9uPiLG6U4pLIZN7+VbAs5sKDzIeMX4=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":207678},"main":"dist/index.js","types":"dist/index.d.ts","engines":{"node":">=16.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","default":"./dist/index.js","require":"./dist/index.js"},"./nextjs":{"types":"./dist/nextjs.d.ts","import":"./dist/nextjs.js","default":"./dist/nextjs.js","require":"./dist/nextjs.js"},"./express":{"types":"./dist/express.d.ts","import":"./dist/express.js","default":"./dist/express.js","require":"./dist/express.js"},"./upstash":{"types":"./dist/upstash/index.d.ts","import":"./dist/upstash/index.js","default":"./dist/upstash/index.js","require":"./dist/upstash/index.js"},"./cloudflare":{"types":"./dist/cloudflare.d.ts","import":"./dist/cloudflare.js","default":"./dist/cloudflare.js","require":"./dist/cloudflare.js"},"./package.json":"./package.json"},"gitHead":"976a733dfdac430fd822661f8d0aa222547140b4","scripts":{"dev":"tsc --watch","lint":"eslint src/**/*.ts","test":"ts-node src/test.ts","build":"tsc","clean":"rimraf dist","format":"prettier --write src/**/*.ts","prepare":"npm run build","lint:fix":"eslint 'src/**/*.ts' --fix","prebuild":"npm run clean","release:major":"npm run build && npm version major && npm publish","release:minor":"npm run build && npm version minor && npm publish","release:patch":"npm run build && npm version patch && npm publish"},"_npmUser":{"name":"prateek32177","email":"prateek32177@gmail.com"},"repository":{"url":"git+https://github.com/Hookflo/tern.git","type":"git"},"_npmVersion":"10.9.2","description":"A robust, scalable webhook verification framework supporting multiple platforms and signature algorithms","directories":{},"_nodeVersion":"22.13.0","dependencies":{"@upstash/qstash":"^2.9.0"},"publishConfig":{"access":"public"},"typesVersions":{"*":{"*":["dist/index.d.ts"],"nextjs":["dist/nextjs.d.ts"],"express":["dist/express.d.ts"],"upstash":["dist/upstash/index.d.ts"],"cloudflare":["dist/cloudflare.d.ts"]}},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"29.5.0","eslint":"^8.57.1","rimraf":"^6.0.1","ts-jest":"29.1.0","ts-node":"^10.9.2","prettier":"3.0.0","typescript":"^5.0.0","@types/jest":"29.5.0","@types/node":"20.0.0","@types/express":"^5.0.3","eslint-plugin-import":"^2.32.0","@typescript-eslint/parser":"^8.39.0","eslint-config-airbnb-base":"^15.0.0","@typescript-eslint/eslint-plugin":"^8.39.0"},"_npmOperationalInternal":{"tmp":"tmp/tern_4.2.9-beta_1772531839342_0.3211470055418959","host":"s3://npm-registry-packages-npm-production"}},"4.2.0":{"name":"@hookflo/tern","version":"4.2.0","keywords":["Hookflo","webhook","verification","security","hmac","signature","github","stripe","clerk","supabase","typescript","node","express","nextjs"],"author":{"name":"Prateek Jain"},"license":"MIT","_id":"@hookflo/tern@4.2.0","maintainers":[{"name":"prateek32177","email":"prateek32177@gmail.com"}],"homepage":"https://github.com/Hookflo/tern#readme","bugs":{"url":"https://github.com/Hookflo/tern/issues"},"dist":{"shasum":"6e8a9305a65f03fa93905959769b5819f6a1964a","tarball":"https://registry.npmjs.org/@hookflo/tern/-/tern-4.2.0.tgz","fileCount":95,"integrity":"sha512-Hk5y6roPxKcvfXqqjtEw+KSdHCvJhcd7P5wtOV6VY9SxhP874KooV2D3mDyaV/Vk7RMqRoQU+fyEojlKM8woxw==","signatures":[{"sig":"MEUCIQD+wvonBUZdgQkBhXsDdfXUlOlZz8fZku3vhqRhKIN40AIgfu4ULYiZiswu8MbPNvzFUZRQJXVvJL2M9qjhwZhRT1Q=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":201938},"main":"dist/index.js","types":"dist/index.d.ts","engines":{"node":">=16.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","default":"./dist/index.js","require":"./dist/index.js"},"./nextjs":{"types":"./dist/nextjs.d.ts","import":"./dist/nextjs.js","default":"./dist/nextjs.js","require":"./dist/nextjs.js"},"./express":{"types":"./dist/express.d.ts","import":"./dist/express.js","default":"./dist/express.js","require":"./dist/express.js"},"./upstash":{"types":"./dist/upstash/index.d.ts","import":"./dist/upstash/index.js","default":"./dist/upstash/index.js","require":"./dist/upstash/index.js"},"./cloudflare":{"types":"./dist/cloudflare.d.ts","import":"./dist/cloudflare.js","default":"./dist/cloudflare.js","require":"./dist/cloudflare.js"},"./package.json":"./package.json"},"gitHead":"88918709469354144e4b82c27eeea1e16d45ea56","scripts":{"dev":"tsc --watch","lint":"eslint src/**/*.ts","test":"ts-node src/test.ts","build":"tsc","clean":"rimraf dist","format":"prettier --write src/**/*.ts","prepare":"npm run build","lint:fix":"eslint 'src/**/*.ts' --fix","prebuild":"npm run clean","release:major":"npm run build && npm version major && npm publish","release:minor":"npm run build && npm version minor && npm publish","release:patch":"npm run build && npm version patch && npm publish"},"_npmUser":{"name":"prateek32177","email":"prateek32177@gmail.com"},"repository":{"url":"git+https://github.com/Hookflo/tern.git","type":"git"},"_npmVersion":"10.9.2","description":"A robust, scalable webhook verification framework supporting multiple platforms and signature algorithms","directories":{},"_nodeVersion":"22.13.0","dependencies":{"@upstash/qstash":"^2.9.0"},"publishConfig":{"access":"public"},"typesVersions":{"*":{"*":["dist/index.d.ts"],"nextjs":["dist/nextjs.d.ts"],"express":["dist/express.d.ts"],"upstash":["dist/upstash/index.d.ts"],"cloudflare":["dist/cloudflare.d.ts"]}},"_hasShrinkwrap":false,"devDependencies":{"jest":"29.5.0","eslint":"^8.57.1","rimraf":"^6.0.1","ts-jest":"29.1.0","ts-node":"^10.9.2","prettier":"3.0.0","typescript":"^5.0.0","@types/jest":"29.5.0","@types/node":"20.0.0","@types/express":"^5.0.3","eslint-plugin-import":"^2.32.0","@typescript-eslint/parser":"^8.39.0","eslint-config-airbnb-base":"^15.0.0","@typescript-eslint/eslint-plugin":"^8.39.0"},"_npmOperationalInternal":{"tmp":"tmp/tern_4.2.0_1772538121389_0.17412055143667682","host":"s3://npm-registry-packages-npm-production"}},"4.3.0-beta.0":{"name":"@hookflo/tern","version":"4.3.0-beta.0","keywords":["Hookflo","webhook","verification","security","hmac","signature","github","stripe","clerk","supabase","typescript","node","express","nextjs","cloudflare","hono"],"author":{"name":"Prateek Jain"},"license":"MIT","_id":"@hookflo/tern@4.3.0-beta.0","maintainers":[{"name":"prateek32177","email":"prateek32177@gmail.com"}],"homepage":"https://github.com/Hookflo/tern#readme","bugs":{"url":"https://github.com/Hookflo/tern/issues"},"dist":{"shasum":"e9535bb7156ec3c7989fd852a3fb72ce2ab21aab","tarball":"https://registry.npmjs.org/@hookflo/tern/-/tern-4.3.0-beta.0.tgz","fileCount":99,"integrity":"sha512-ddXAST87jEIIV1b3NFh+B1H/j7uQSxudkGyPaNXvVubI+LbZjXh/FOInGZXCs5i+ph0PWjhBoG3BEsnQB655nQ==","signatures":[{"sig":"MEYCIQCcMXd1MQp1v7Jt9Zi66kAz8P6OZSoSb8ReFUHpNePGFAIhAPEK13he++UDMZjcjlsKQn5SDq5aRCwOWLDq3Y5L0IE0","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":207417},"main":"dist/index.js","types":"dist/index.d.ts","engines":{"node":">=16.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","default":"./dist/index.js","require":"./dist/index.js"},"./hono":{"types":"./dist/hono.d.ts","import":"./dist/hono.js","default":"./dist/hono.js","require":"./dist/hono.js"},"./nextjs":{"types":"./dist/nextjs.d.ts","import":"./dist/nextjs.js","default":"./dist/nextjs.js","require":"./dist/nextjs.js"},"./express":{"types":"./dist/express.d.ts","import":"./dist/express.js","default":"./dist/express.js","require":"./dist/express.js"},"./upstash":{"types":"./dist/upstash/index.d.ts","import":"./dist/upstash/index.js","default":"./dist/upstash/index.js","require":"./dist/upstash/index.js"},"./cloudflare":{"types":"./dist/cloudflare.d.ts","import":"./dist/cloudflare.js","default":"./dist/cloudflare.js","require":"./dist/cloudflare.js"},"./package.json":"./package.json"},"gitHead":"cf52f20fe88b336b9ebd6e3fe8fcdb4012aa9330","scripts":{"dev":"tsc --watch","lint":"eslint src/**/*.ts","test":"ts-node src/test.ts","build":"tsc","clean":"rimraf dist","format":"prettier --write src/**/*.ts","prepare":"npm run build","lint:fix":"eslint 'src/**/*.ts' --fix","prebuild":"npm run clean","release:major":"npm run build && npm version major && npm publish","release:minor":"npm run build && npm version minor && npm publish","release:patch":"npm run build && npm version patch && npm publish"},"_npmUser":{"name":"prateek32177","email":"prateek32177@gmail.com"},"repository":{"url":"git+https://github.com/Hookflo/tern.git","type":"git"},"_npmVersion":"10.9.2","description":"A robust, scalable webhook verification framework supporting multiple platforms and signature algorithms","directories":{},"_nodeVersion":"22.13.0","dependencies":{"@upstash/qstash":"^2.9.0"},"publishConfig":{"access":"public"},"typesVersions":{"*":{"*":["dist/index.d.ts"],"hono":["dist/hono.d.ts"],"nextjs":["dist/nextjs.d.ts"],"express":["dist/express.d.ts"],"upstash":["dist/upstash/index.d.ts"],"cloudflare":["dist/cloudflare.d.ts"]}},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"29.5.0","eslint":"^8.57.1","rimraf":"^6.0.1","ts-jest":"29.1.0","ts-node":"^10.9.2","prettier":"3.0.0","typescript":"^5.0.0","@types/jest":"29.5.0","@types/node":"20.0.0","@types/express":"^5.0.3","eslint-plugin-import":"^2.32.0","@typescript-eslint/parser":"^8.39.0","eslint-config-airbnb-base":"^15.0.0","@typescript-eslint/eslint-plugin":"^8.39.0"},"_npmOperationalInternal":{"tmp":"tmp/tern_4.3.0-beta.0_1772645495793_0.5587726763921879","host":"s3://npm-registry-packages-npm-production"}},"4.3.0":{"name":"@hookflo/tern","version":"4.3.0","keywords":["Hookflo","webhook","verification","security","hmac","signature","github","stripe","clerk","supabase","typescript","node","express","nextjs","cloudflare","hono"],"author":{"name":"Prateek Jain"},"license":"MIT","_id":"@hookflo/tern@4.3.0","maintainers":[{"name":"prateek32177","email":"prateek32177@gmail.com"}],"homepage":"https://github.com/Hookflo/tern#readme","bugs":{"url":"https://github.com/Hookflo/tern/issues"},"dist":{"shasum":"c374ad5f00480580a754f51caf1b8d7c0e125658","tarball":"https://registry.npmjs.org/@hookflo/tern/-/tern-4.3.0.tgz","fileCount":99,"integrity":"sha512-pyPFxtIc+K47rbhPppMqIJnrn2bB6xOrzYjUgKKx8kQ/arzGIxXeU5ES8mzYnzdcRw6QWI+eDq5R8RtofG5/cA==","signatures":[{"sig":"MEYCIQCxO6YoERt8pDWmdKGv6wxuXmJtYcQcRtSDYJzOsDVnRQIhANsOzgfz9rf1WBtp9coHzEc8cT4J314MyWK6B46RWa8F","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":207410},"main":"dist/index.js","types":"dist/index.d.ts","engines":{"node":">=16.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","default":"./dist/index.js","require":"./dist/index.js"},"./hono":{"types":"./dist/hono.d.ts","import":"./dist/hono.js","default":"./dist/hono.js","require":"./dist/hono.js"},"./nextjs":{"types":"./dist/nextjs.d.ts","import":"./dist/nextjs.js","default":"./dist/nextjs.js","require":"./dist/nextjs.js"},"./express":{"types":"./dist/express.d.ts","import":"./dist/express.js","default":"./dist/express.js","require":"./dist/express.js"},"./upstash":{"types":"./dist/upstash/index.d.ts","import":"./dist/upstash/index.js","default":"./dist/upstash/index.js","require":"./dist/upstash/index.js"},"./cloudflare":{"types":"./dist/cloudflare.d.ts","import":"./dist/cloudflare.js","default":"./dist/cloudflare.js","require":"./dist/cloudflare.js"},"./package.json":"./package.json"},"gitHead":"679e7c82bbb04e42b889808aceba536ced8e7614","scripts":{"dev":"tsc --watch","lint":"eslint src/**/*.ts","test":"ts-node src/test.ts","build":"tsc","clean":"rimraf dist","format":"prettier --write src/**/*.ts","prepare":"npm run build","lint:fix":"eslint 'src/**/*.ts' --fix","prebuild":"npm run clean","release:major":"npm run build && npm version major && npm publish","release:minor":"npm run build && npm version minor && npm publish","release:patch":"npm run build && npm version patch && npm publish"},"_npmUser":{"name":"prateek32177","email":"prateek32177@gmail.com"},"repository":{"url":"git+https://github.com/Hookflo/tern.git","type":"git"},"_npmVersion":"10.9.2","description":"A robust, scalable webhook verification framework supporting multiple platforms and signature algorithms","directories":{},"_nodeVersion":"22.13.0","dependencies":{"@upstash/qstash":"^2.9.0"},"publishConfig":{"access":"public"},"typesVersions":{"*":{"*":["dist/index.d.ts"],"hono":["dist/hono.d.ts"],"nextjs":["dist/nextjs.d.ts"],"express":["dist/express.d.ts"],"upstash":["dist/upstash/index.d.ts"],"cloudflare":["dist/cloudflare.d.ts"]}},"_hasShrinkwrap":false,"devDependencies":{"jest":"29.5.0","eslint":"^8.57.1","rimraf":"^6.0.1","ts-jest":"29.1.0","ts-node":"^10.9.2","prettier":"3.0.0","typescript":"^5.0.0","@types/jest":"29.5.0","@types/node":"20.0.0","@types/express":"^5.0.3","eslint-plugin-import":"^2.32.0","@typescript-eslint/parser":"^8.39.0","eslint-config-airbnb-base":"^15.0.0","@typescript-eslint/eslint-plugin":"^8.39.0"},"_npmOperationalInternal":{"tmp":"tmp/tern_4.3.0_1772646334275_0.3544848724428944","host":"s3://npm-registry-packages-npm-production"}},"4.3.1-beta":{"name":"@hookflo/tern","version":"4.3.1-beta","keywords":["Hookflo","webhook","verification","security","hmac","signature","github","stripe","clerk","supabase","typescript","node","express","nextjs","cloudflare","hono"],"author":{"name":"Prateek Jain"},"license":"MIT","_id":"@hookflo/tern@4.3.1-beta","maintainers":[{"name":"prateek32177","email":"prateek32177@gmail.com"}],"homepage":"https://github.com/Hookflo/tern#readme","bugs":{"url":"https://github.com/Hookflo/tern/issues"},"dist":{"shasum":"3e8835a8a9b1e7d3b70cbda959829c890cc18960","tarball":"https://registry.npmjs.org/@hookflo/tern/-/tern-4.3.1-beta.tgz","fileCount":99,"integrity":"sha512-8o/k46Ge3QGjWgkMpdCR8jIAcuuAKZoifT7FpyWVu3px7ovFbQ4V/u6N3aPCR82sfljKAF86a8XtjahG8VqHog==","signatures":[{"sig":"MEQCIGMWivmTdib3kXT7F/T+SSuMIUPI2OUTDnaD80FYQwEyAiB78d/Y7wo0Sp4g5yHBzmd/d4uTyEa75qrGUlJepZx09g==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":214564},"main":"dist/index.js","types":"dist/index.d.ts","engines":{"node":">=16.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","default":"./dist/index.js","require":"./dist/index.js"},"./hono":{"types":"./dist/hono.d.ts","import":"./dist/hono.js","default":"./dist/hono.js","require":"./dist/hono.js"},"./nextjs":{"types":"./dist/nextjs.d.ts","import":"./dist/nextjs.js","default":"./dist/nextjs.js","require":"./dist/nextjs.js"},"./express":{"types":"./dist/express.d.ts","import":"./dist/express.js","default":"./dist/express.js","require":"./dist/express.js"},"./upstash":{"types":"./dist/upstash/index.d.ts","import":"./dist/upstash/index.js","default":"./dist/upstash/index.js","require":"./dist/upstash/index.js"},"./cloudflare":{"types":"./dist/cloudflare.d.ts","import":"./dist/cloudflare.js","default":"./dist/cloudflare.js","require":"./dist/cloudflare.js"},"./package.json":"./package.json"},"gitHead":"cc1700907af68c2fb4d4edd9317953691e0c611b","scripts":{"dev":"tsc --watch","lint":"eslint src/**/*.ts","test":"ts-node src/test.ts","build":"tsc","clean":"rimraf dist","format":"prettier --write src/**/*.ts","prepare":"npm run build","lint:fix":"eslint 'src/**/*.ts' --fix","prebuild":"npm run clean","release:major":"npm run build && npm version major && npm publish","release:minor":"npm run build && npm version minor && npm publish","release:patch":"npm run build && npm version patch && npm publish"},"_npmUser":{"name":"prateek32177","email":"prateek32177@gmail.com"},"repository":{"url":"git+https://github.com/Hookflo/tern.git","type":"git"},"_npmVersion":"10.9.2","description":"A robust, scalable webhook verification framework supporting multiple platforms and signature algorithms","directories":{},"_nodeVersion":"22.13.0","dependencies":{"@upstash/qstash":"^2.9.0"},"publishConfig":{"access":"public"},"typesVersions":{"*":{"*":["dist/index.d.ts"],"hono":["dist/hono.d.ts"],"nextjs":["dist/nextjs.d.ts"],"express":["dist/express.d.ts"],"upstash":["dist/upstash/index.d.ts"],"cloudflare":["dist/cloudflare.d.ts"]}},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"29.5.0","eslint":"^8.57.1","rimraf":"^6.0.1","ts-jest":"29.1.0","ts-node":"^10.9.2","prettier":"3.0.0","typescript":"^5.0.0","@types/jest":"29.5.0","@types/node":"20.0.0","@types/express":"^5.0.3","eslint-plugin-import":"^2.32.0","@typescript-eslint/parser":"^8.39.0","eslint-config-airbnb-base":"^15.0.0","@typescript-eslint/eslint-plugin":"^8.39.0"},"_npmOperationalInternal":{"tmp":"tmp/tern_4.3.1-beta_1773562494272_0.05109098245814758","host":"s3://npm-registry-packages-npm-production"}},"4.3.3-beta":{"name":"@hookflo/tern","version":"4.3.3-beta","keywords":["Hookflo","webhook","verification","security","hmac","signature","github","stripe","clerk","supabase","typescript","node","express","nextjs","cloudflare","hono"],"author":{"name":"Prateek Jain"},"license":"MIT","_id":"@hookflo/tern@4.3.3-beta","maintainers":[{"name":"prateek32177","email":"prateek32177@gmail.com"}],"homepage":"https://github.com/Hookflo/tern#readme","bugs":{"url":"https://github.com/Hookflo/tern/issues"},"dist":{"shasum":"a7e9bb6394b1d5a19588292e9859cc289ec32ecf","tarball":"https://registry.npmjs.org/@hookflo/tern/-/tern-4.3.3-beta.tgz","fileCount":69,"integrity":"sha512-ZivGp20CpTrCLl0dKwLZSzKoZl8CVbt49HbjEXSdcxQ9M1BeIKeLpIu+1GdfaTceMCYyOPG7q5XVgiagQ2HacA==","signatures":[{"sig":"MEUCIQCxMPLvfT0gFYyYyKZ8+CkjRJay8qvCoYqhZUDKIdJPQQIgbG13YxQNzlTbTfWQ+w0pzXC0hXDG1jgmB3aY9uEEYyE=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":187834},"main":"dist/index.js","types":"dist/index.d.ts","engines":{"node":">=16.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","default":"./dist/index.js","require":"./dist/index.js"},"./hono":{"types":"./dist/hono.d.ts","import":"./dist/hono.js","default":"./dist/hono.js","require":"./dist/hono.js"},"./nextjs":{"types":"./dist/nextjs.d.ts","import":"./dist/nextjs.js","default":"./dist/nextjs.js","require":"./dist/nextjs.js"},"./express":{"types":"./dist/express.d.ts","import":"./dist/express.js","default":"./dist/express.js","require":"./dist/express.js"},"./upstash":{"types":"./dist/upstash/index.d.ts","import":"./dist/upstash/index.js","default":"./dist/upstash/index.js","require":"./dist/upstash/index.js"},"./cloudflare":{"types":"./dist/cloudflare.d.ts","import":"./dist/cloudflare.js","default":"./dist/cloudflare.js","require":"./dist/cloudflare.js"},"./package.json":"./package.json"},"gitHead":"dc4ff6eb013b07f895f212d28f7155f9c844ca19","scripts":{"dev":"tsc --watch","lint":"eslint src/**/*.ts","test":"ts-node src/test.ts","build":"tsc","clean":"rimraf dist","format":"prettier --write src/**/*.ts","prepare":"npm run build","lint:fix":"eslint 'src/**/*.ts' --fix","prebuild":"npm run clean","release:major":"npm run build && npm version major && npm publish","release:minor":"npm run build && npm version minor && npm publish","release:patch":"npm run build && npm version patch && npm publish"},"_npmUser":{"name":"prateek32177","email":"prateek32177@gmail.com"},"repository":{"url":"git+https://github.com/Hookflo/tern.git","type":"git"},"_npmVersion":"10.9.2","description":"A robust, scalable webhook verification framework supporting multiple platforms and signature algorithms","directories":{},"_nodeVersion":"22.13.0","dependencies":{"@upstash/qstash":"^2.9.0"},"publishConfig":{"access":"public"},"typesVersions":{"*":{"*":["dist/index.d.ts"],"hono":["dist/hono.d.ts"],"nextjs":["dist/nextjs.d.ts"],"express":["dist/express.d.ts"],"upstash":["dist/upstash/index.d.ts"],"cloudflare":["dist/cloudflare.d.ts"]}},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"29.5.0","eslint":"^8.57.1","rimraf":"^6.0.1","ts-jest":"29.1.0","ts-node":"^10.9.2","prettier":"3.0.0","typescript":"^5.0.0","@types/jest":"29.5.0","@types/node":"20.0.0","@types/express":"^5.0.3","eslint-plugin-import":"^2.32.0","@typescript-eslint/parser":"^8.39.0","eslint-config-airbnb-base":"^15.0.0","@typescript-eslint/eslint-plugin":"^8.39.0"},"_npmOperationalInternal":{"tmp":"tmp/tern_4.3.3-beta_1773573831776_0.1151768190027389","host":"s3://npm-registry-packages-npm-production"}},"4.3.0-beta-1":{"name":"@hookflo/tern","version":"4.3.0-beta-1","keywords":["Hookflo","webhook","verification","security","hmac","signature","github","stripe","clerk","supabase","typescript","node","express","nextjs","cloudflare","hono"],"author":{"name":"Prateek Jain"},"license":"MIT","_id":"@hookflo/tern@4.3.0-beta-1","maintainers":[{"name":"prateek32177","email":"prateek32177@gmail.com"}],"homepage":"https://github.com/Hookflo/tern#readme","bugs":{"url":"https://github.com/Hookflo/tern/issues"},"dist":{"shasum":"1ea2a63e297b172cc696f04e95be82e996880066","tarball":"https://registry.npmjs.org/@hookflo/tern/-/tern-4.3.0-beta-1.tgz","fileCount":69,"integrity":"sha512-SSu0ebuItv84YD1nLeU7nQTmZYkedlzSHM4umk7Z3RjIW76Bdnu93dl6R1N7XhpDD/gdYdl6NkYVOAAc83XElQ==","signatures":[{"sig":"MEQCIHNMs1ki5Q1uN5ABwOJ6vkMnP9GF1aaB46MVCx4yLoRVAiAIzQa7lqqEkJBRj+dD1zsgBsoSOAURxkVMVeUYE498sw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":188496},"main":"dist/index.js","types":"dist/index.d.ts","engines":{"node":">=16.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","default":"./dist/index.js","require":"./dist/index.js"},"./hono":{"types":"./dist/hono.d.ts","import":"./dist/hono.js","default":"./dist/hono.js","require":"./dist/hono.js"},"./nextjs":{"types":"./dist/nextjs.d.ts","import":"./dist/nextjs.js","default":"./dist/nextjs.js","require":"./dist/nextjs.js"},"./express":{"types":"./dist/express.d.ts","import":"./dist/express.js","default":"./dist/express.js","require":"./dist/express.js"},"./upstash":{"types":"./dist/upstash/index.d.ts","import":"./dist/upstash/index.js","default":"./dist/upstash/index.js","require":"./dist/upstash/index.js"},"./cloudflare":{"types":"./dist/cloudflare.d.ts","import":"./dist/cloudflare.js","default":"./dist/cloudflare.js","require":"./dist/cloudflare.js"},"./package.json":"./package.json"},"gitHead":"37f816399f2f6ec90b8f6c1cdda06f2bb960d999","scripts":{"dev":"tsc --watch","lint":"eslint src/**/*.ts","test":"ts-node src/test.ts","build":"tsc","clean":"rimraf dist","format":"prettier --write src/**/*.ts","prepare":"npm run build","lint:fix":"eslint 'src/**/*.ts' --fix","prebuild":"npm run clean","release:major":"npm run build && npm version major && npm publish","release:minor":"npm run build && npm version minor && npm publish","release:patch":"npm run build && npm version patch && npm publish"},"_npmUser":{"name":"prateek32177","email":"prateek32177@gmail.com"},"repository":{"url":"git+https://github.com/Hookflo/tern.git","type":"git"},"_npmVersion":"10.9.2","description":"A robust, scalable webhook verification framework supporting multiple platforms and signature algorithms","directories":{},"_nodeVersion":"22.13.0","dependencies":{"@upstash/qstash":"^2.9.0"},"publishConfig":{"access":"public"},"typesVersions":{"*":{"*":["dist/index.d.ts"],"hono":["dist/hono.d.ts"],"nextjs":["dist/nextjs.d.ts"],"express":["dist/express.d.ts"],"upstash":["dist/upstash/index.d.ts"],"cloudflare":["dist/cloudflare.d.ts"]}},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"29.5.0","eslint":"^8.57.1","rimraf":"^6.0.1","ts-jest":"29.1.0","ts-node":"^10.9.2","prettier":"3.0.0","typescript":"^5.0.0","@types/jest":"29.5.0","@types/node":"20.0.0","@types/express":"^5.0.3","eslint-plugin-import":"^2.32.0","@typescript-eslint/parser":"^8.39.0","eslint-config-airbnb-base":"^15.0.0","@typescript-eslint/eslint-plugin":"^8.39.0"},"_npmOperationalInternal":{"tmp":"tmp/tern_4.3.0-beta-1_1773574366404_0.18209108974305233","host":"s3://npm-registry-packages-npm-production"}},"4.3.0-beta.1":{"name":"@hookflo/tern","version":"4.3.0-beta.1","keywords":["Hookflo","webhook","verification","security","hmac","signature","github","stripe","clerk","supabase","typescript","node","express","nextjs","cloudflare","hono"],"author":{"name":"Prateek Jain"},"license":"MIT","_id":"@hookflo/tern@4.3.0-beta.1","maintainers":[{"name":"prateek32177","email":"prateek32177@gmail.com"}],"homepage":"https://github.com/Hookflo/tern#readme","bugs":{"url":"https://github.com/Hookflo/tern/issues"},"dist":{"shasum":"0453fec1dd2b473bce1f8c8684e351b2db763637","tarball":"https://registry.npmjs.org/@hookflo/tern/-/tern-4.3.0-beta.1.tgz","fileCount":69,"integrity":"sha512-BoXAbm9Zyk93FNy/rKF+ctyiGezWIeAedwgVsDrCV2kic3BKOoyu5IKyk1WE4jEsVbQCil1L3QysptwZFM6zFA==","signatures":[{"sig":"MEUCIQC1FhRwX/O/zSxsEfAeAwQRS/dgM8BmmjBBN0kGf6isNQIgKkiteabVM16sIKXnWGg98yk2oXsacaV2PS2Yq6ZFleE=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":188496},"main":"dist/index.js","types":"dist/index.d.ts","engines":{"node":">=16.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","default":"./dist/index.js","require":"./dist/index.js"},"./hono":{"types":"./dist/hono.d.ts","import":"./dist/hono.js","default":"./dist/hono.js","require":"./dist/hono.js"},"./nextjs":{"types":"./dist/nextjs.d.ts","import":"./dist/nextjs.js","default":"./dist/nextjs.js","require":"./dist/nextjs.js"},"./express":{"types":"./dist/express.d.ts","import":"./dist/express.js","default":"./dist/express.js","require":"./dist/express.js"},"./upstash":{"types":"./dist/upstash/index.d.ts","import":"./dist/upstash/index.js","default":"./dist/upstash/index.js","require":"./dist/upstash/index.js"},"./cloudflare":{"types":"./dist/cloudflare.d.ts","import":"./dist/cloudflare.js","default":"./dist/cloudflare.js","require":"./dist/cloudflare.js"},"./package.json":"./package.json"},"gitHead":"0f5e147c52b133d64015d77e7c5fbaa29bd621da","scripts":{"dev":"tsc --watch","lint":"eslint src/**/*.ts","test":"ts-node src/test.ts","build":"tsc","clean":"rimraf dist","format":"prettier --write src/**/*.ts","prepare":"npm run build","lint:fix":"eslint 'src/**/*.ts' --fix","prebuild":"npm run clean","release:major":"npm run build && npm version major && npm publish","release:minor":"npm run build && npm version minor && npm publish","release:patch":"npm run build && npm version patch && npm publish"},"_npmUser":{"name":"prateek32177","email":"prateek32177@gmail.com"},"repository":{"url":"git+https://github.com/Hookflo/tern.git","type":"git"},"_npmVersion":"10.9.2","description":"A robust, scalable webhook verification framework supporting multiple platforms and signature algorithms","directories":{},"_nodeVersion":"22.13.0","dependencies":{"@upstash/qstash":"^2.9.0"},"publishConfig":{"access":"public"},"typesVersions":{"*":{"*":["dist/index.d.ts"],"hono":["dist/hono.d.ts"],"nextjs":["dist/nextjs.d.ts"],"express":["dist/express.d.ts"],"upstash":["dist/upstash/index.d.ts"],"cloudflare":["dist/cloudflare.d.ts"]}},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"29.5.0","eslint":"^8.57.1","rimraf":"^6.0.1","ts-jest":"29.1.0","ts-node":"^10.9.2","prettier":"3.0.0","typescript":"^5.0.0","@types/jest":"29.5.0","@types/node":"20.0.0","@types/express":"^5.0.3","eslint-plugin-import":"^2.32.0","@typescript-eslint/parser":"^8.39.0","eslint-config-airbnb-base":"^15.0.0","@typescript-eslint/eslint-plugin":"^8.39.0"},"_npmOperationalInternal":{"tmp":"tmp/tern_4.3.0-beta.1_1774285244521_0.5627267217993828","host":"s3://npm-registry-packages-npm-production"}},"4.3.0-beta.2":{"name":"@hookflo/tern","version":"4.3.0-beta.2","keywords":["Hookflo","webhook","verification","security","hmac","signature","github","stripe","clerk","supabase","typescript","node","express","nextjs","cloudflare","hono"],"author":{"name":"Prateek Jain"},"license":"MIT","_id":"@hookflo/tern@4.3.0-beta.2","maintainers":[{"name":"prateek32177","email":"prateek32177@gmail.com"}],"homepage":"https://github.com/Hookflo/tern#readme","bugs":{"url":"https://github.com/Hookflo/tern/issues"},"dist":{"shasum":"6e2cfce7ea77225dabf526a2c63d6cf31b6ca4b1","tarball":"https://registry.npmjs.org/@hookflo/tern/-/tern-4.3.0-beta.2.tgz","fileCount":69,"integrity":"sha512-eCf8Ikokta7Z2lZMSZCfbbsYr5k4Qh77RKFlVT5gdF9JeRGDVwSkY+by8YR8jj3OSuqTehImXWLpZddbLSzIaA==","signatures":[{"sig":"MEUCIGc6LiLrgrYlD4AjWCD3kiOP6QwZBIZWDpZvbxXuj9/6AiEAxh/UEZF4pU2c2P2Q4NupBfLVYXhTUy8w7kYIUioUxjc=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":187341},"main":"dist/index.js","types":"dist/index.d.ts","engines":{"node":">=16.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","default":"./dist/index.js","require":"./dist/index.js"},"./hono":{"types":"./dist/hono.d.ts","import":"./dist/hono.js","default":"./dist/hono.js","require":"./dist/hono.js"},"./nextjs":{"types":"./dist/nextjs.d.ts","import":"./dist/nextjs.js","default":"./dist/nextjs.js","require":"./dist/nextjs.js"},"./express":{"types":"./dist/express.d.ts","import":"./dist/express.js","default":"./dist/express.js","require":"./dist/express.js"},"./upstash":{"types":"./dist/upstash/index.d.ts","import":"./dist/upstash/index.js","default":"./dist/upstash/index.js","require":"./dist/upstash/index.js"},"./cloudflare":{"types":"./dist/cloudflare.d.ts","import":"./dist/cloudflare.js","default":"./dist/cloudflare.js","require":"./dist/cloudflare.js"},"./package.json":"./package.json"},"gitHead":"53706b6a9b99e043c87b93a1ff920569da97afcc","scripts":{"dev":"tsc --watch","lint":"eslint src/**/*.ts","test":"ts-node src/test.ts","build":"tsc","clean":"rimraf dist","format":"prettier --write src/**/*.ts","prepare":"npm run build","lint:fix":"eslint 'src/**/*.ts' --fix","prebuild":"npm run clean","release:major":"npm run build && npm version major && npm publish","release:minor":"npm run build && npm version minor && npm publish","release:patch":"npm run build && npm version patch && npm publish"},"_npmUser":{"name":"prateek32177","email":"prateek32177@gmail.com"},"repository":{"url":"git+https://github.com/Hookflo/tern.git","type":"git"},"_npmVersion":"10.9.2","description":"A robust, scalable webhook verification framework supporting multiple platforms and signature algorithms","directories":{},"_nodeVersion":"22.13.0","dependencies":{"@upstash/qstash":"^2.9.0"},"publishConfig":{"access":"public"},"typesVersions":{"*":{"*":["dist/index.d.ts"],"hono":["dist/hono.d.ts"],"nextjs":["dist/nextjs.d.ts"],"express":["dist/express.d.ts"],"upstash":["dist/upstash/index.d.ts"],"cloudflare":["dist/cloudflare.d.ts"]}},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"29.5.0","eslint":"^8.57.1","rimraf":"^6.0.1","ts-jest":"29.1.0","ts-node":"^10.9.2","prettier":"3.0.0","typescript":"^5.0.0","@types/jest":"29.5.0","@types/node":"20.0.0","@types/express":"^5.0.3","eslint-plugin-import":"^2.32.0","@typescript-eslint/parser":"^8.39.0","eslint-config-airbnb-base":"^15.0.0","@typescript-eslint/eslint-plugin":"^8.39.0"},"_npmOperationalInternal":{"tmp":"tmp/tern_4.3.0-beta.2_1774287815500_0.2532482341462736","host":"s3://npm-registry-packages-npm-production"}},"4.4.0":{"name":"@hookflo/tern","version":"4.4.0","keywords":["Hookflo","webhook","verification","security","hmac","signature","github","stripe","clerk","supabase","typescript","node","express","nextjs","cloudflare","hono"],"author":{"name":"Prateek Jain"},"license":"MIT","_id":"@hookflo/tern@4.4.0","maintainers":[{"name":"prateek32177","email":"prateek32177@gmail.com"}],"homepage":"https://github.com/Hookflo/tern#readme","bugs":{"url":"https://github.com/Hookflo/tern/issues"},"dist":{"shasum":"6f684546b426709edcfc5a1b495117bc7bb4041c","tarball":"https://registry.npmjs.org/@hookflo/tern/-/tern-4.4.0.tgz","fileCount":69,"integrity":"sha512-n7MhyZ7/2EOVSH0g2BhexGB0SWjbDB1oUKwX4Rik2Tjt8qbGBcdbGjoYM4bnVJDBI/iYucGa4OjXRDIqExUV1A==","signatures":[{"sig":"MEUCIGV0Nm1vPqqCoaZ73iZRVi3TyaATY7ZPiwVdvLDtz8Z3AiEA0oxNk5VUQsHygbGcaLZiNppLag4bDbOme60w3vxucvg=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":187392},"main":"dist/index.js","types":"dist/index.d.ts","engines":{"node":">=16.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","default":"./dist/index.js","require":"./dist/index.js"},"./hono":{"types":"./dist/hono.d.ts","import":"./dist/hono.js","default":"./dist/hono.js","require":"./dist/hono.js"},"./nextjs":{"types":"./dist/nextjs.d.ts","import":"./dist/nextjs.js","default":"./dist/nextjs.js","require":"./dist/nextjs.js"},"./express":{"types":"./dist/express.d.ts","import":"./dist/express.js","default":"./dist/express.js","require":"./dist/express.js"},"./upstash":{"types":"./dist/upstash/index.d.ts","import":"./dist/upstash/index.js","default":"./dist/upstash/index.js","require":"./dist/upstash/index.js"},"./cloudflare":{"types":"./dist/cloudflare.d.ts","import":"./dist/cloudflare.js","default":"./dist/cloudflare.js","require":"./dist/cloudflare.js"},"./package.json":"./package.json"},"gitHead":"7e716098c05eaff9769836e86418c355e28b1b70","scripts":{"dev":"tsc --watch","lint":"eslint src/**/*.ts","test":"ts-node src/test.ts","build":"tsc","clean":"rimraf dist","format":"prettier --write src/**/*.ts","prepare":"npm run build","lint:fix":"eslint 'src/**/*.ts' --fix","prebuild":"npm run clean","release:major":"npm run build && npm version major && npm publish","release:minor":"npm run build && npm version minor && npm publish","release:patch":"npm run build && npm version patch && npm publish"},"_npmUser":{"name":"prateek32177","email":"prateek32177@gmail.com"},"repository":{"url":"git+https://github.com/Hookflo/tern.git","type":"git"},"_npmVersion":"10.9.2","description":"A robust, scalable webhook verification framework supporting multiple platforms and signature algorithms","directories":{},"_nodeVersion":"22.13.0","dependencies":{"@upstash/qstash":"^2.9.0"},"publishConfig":{"access":"public"},"typesVersions":{"*":{"*":["dist/index.d.ts"],"hono":["dist/hono.d.ts"],"nextjs":["dist/nextjs.d.ts"],"express":["dist/express.d.ts"],"upstash":["dist/upstash/index.d.ts"],"cloudflare":["dist/cloudflare.d.ts"]}},"_hasShrinkwrap":false,"devDependencies":{"jest":"29.5.0","eslint":"^8.57.1","rimraf":"^6.0.1","ts-jest":"29.1.0","ts-node":"^10.9.2","prettier":"3.0.0","typescript":"^5.0.0","@types/jest":"29.5.0","@types/node":"20.0.0","@types/express":"^5.0.3","eslint-plugin-import":"^2.32.0","@typescript-eslint/parser":"^8.39.0","eslint-config-airbnb-base":"^15.0.0","@typescript-eslint/eslint-plugin":"^8.39.0"},"_npmOperationalInternal":{"tmp":"tmp/tern_4.4.0_1774288802130_0.4521692058959268","host":"s3://npm-registry-packages-npm-production"}},"4.4.3":{"name":"@hookflo/tern","version":"4.4.3","keywords":["Hookflo","webhook","verification","security","hmac","signature","github","stripe","clerk","supabase","typescript","node","express","nextjs","cloudflare","hono"],"author":{"name":"Prateek Jain"},"license":"MIT","_id":"@hookflo/tern@4.4.3","maintainers":[{"name":"prateek32177","email":"prateek32177@gmail.com"}],"homepage":"https://github.com/Hookflo/tern#readme","bugs":{"url":"https://github.com/Hookflo/tern/issues"},"dist":{"shasum":"34cdaed4ae9fb1797e13b60845d8e807a7f83ea1","tarball":"https://registry.npmjs.org/@hookflo/tern/-/tern-4.4.3.tgz","fileCount":69,"integrity":"sha512-zYHl4Fzexv0TTLJD0EPo4FrfGvoIitHlGqq8rhbpOWhZVT289CJNh6OkGWr/VpyJD+xgqUijIQjkCVwD8apLpQ==","signatures":[{"sig":"MEUCIGdJ/OQnQwwM1cchKAH4a1SYkNyUKg+BRhBsKeN9BeeRAiEAhYZd0cx4+o5uAUdXg75HpQS8sInW8e1Mt5GomHXO/B4=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":187402},"main":"dist/index.js","types":"dist/index.d.ts","engines":{"node":">=16.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","default":"./dist/index.js","require":"./dist/index.js"},"./hono":{"types":"./dist/hono.d.ts","import":"./dist/hono.js","default":"./dist/hono.js","require":"./dist/hono.js"},"./nextjs":{"types":"./dist/nextjs.d.ts","import":"./dist/nextjs.js","default":"./dist/nextjs.js","require":"./dist/nextjs.js"},"./express":{"types":"./dist/express.d.ts","import":"./dist/express.js","default":"./dist/express.js","require":"./dist/express.js"},"./upstash":{"types":"./dist/upstash/index.d.ts","import":"./dist/upstash/index.js","default":"./dist/upstash/index.js","require":"./dist/upstash/index.js"},"./cloudflare":{"types":"./dist/cloudflare.d.ts","import":"./dist/cloudflare.js","default":"./dist/cloudflare.js","require":"./dist/cloudflare.js"},"./package.json":"./package.json"},"gitHead":"33855f2b5d0083d764713dcbc55f4b3452e857fc","scripts":{"dev":"tsc --watch","lint":"eslint src/**/*.ts","test":"ts-node src/test.ts","build":"tsc","clean":"rimraf dist","format":"prettier --write src/**/*.ts","prepare":"npm run build","lint:fix":"eslint 'src/**/*.ts' --fix","prebuild":"npm run clean","release:major":"npm run build && npm version major && npm publish","release:minor":"npm run build && npm version minor && npm publish","release:patch":"npm run build && npm version patch && npm publish"},"_npmUser":{"name":"prateek32177","email":"prateek32177@gmail.com"},"repository":{"url":"git+https://github.com/Hookflo/tern.git","type":"git"},"_npmVersion":"10.9.2","description":"A robust, scalable webhook verification framework supporting multiple platforms and signature algorithms","directories":{},"_nodeVersion":"22.13.0","dependencies":{"@upstash/qstash":"^2.9.0"},"publishConfig":{"access":"public"},"typesVersions":{"*":{"*":["dist/index.d.ts"],"hono":["dist/hono.d.ts"],"nextjs":["dist/nextjs.d.ts"],"express":["dist/express.d.ts"],"upstash":["dist/upstash/index.d.ts"],"cloudflare":["dist/cloudflare.d.ts"]}},"_hasShrinkwrap":false,"devDependencies":{"jest":"29.5.0","eslint":"^8.57.1","rimraf":"^6.0.1","ts-jest":"29.1.0","ts-node":"^10.9.2","prettier":"3.0.0","typescript":"^5.0.0","@types/jest":"29.5.0","@types/node":"20.0.0","@types/express":"^5.0.3","eslint-plugin-import":"^2.32.0","@typescript-eslint/parser":"^8.39.0","eslint-config-airbnb-base":"^15.0.0","@typescript-eslint/eslint-plugin":"^8.39.0"},"_npmOperationalInternal":{"tmp":"tmp/tern_4.4.3_1783252073949_0.9054169999578565","host":"s3://npm-registry-packages-npm-production"}},"4.5.0":{"_id":"@hookflo/tern@4.5.0","bugs":{"url":"https://github.com/Hookflo/tern/issues"},"dist":{"shasum":"f661c3280fd5fcc9055d9a83aedee83ba38cae81","tarball":"https://registry.npmjs.org/@hookflo/tern/-/tern-4.5.0.tgz","fileCount":69,"integrity":"sha512-8vY3QWBM/cimrpVn/2S5h5PsmvKTeAqV+NhM/NYSLA5P2SbZL8oI5LXcRpIPCrZR2HF+gMzS1zZROgpGel1z6Q==","signatures":[{"sig":"MEUCIQCKwcoHL+V5pqH6IhwDWkojfE17O3YT8Mogb+yguYSSLgIgK96yy5i5WbmJYnKApJwepFiWyOIwT8YByhxpoxF2NtU=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIHU6/eCJGBB6+5Q6uVV30ab6SaHA6fUpAwdkCi3GVJVNAiEA1g3vxDnQCfZuqdRF20jKZAsW07v/TQ42ZM2Fw6df3wo="}],"unpackedSize":190383},"main":"dist/index.js","name":"@hookflo/tern","types":"dist/index.d.ts","author":{"name":"Prateek Jain"},"engines":{"node":">=16.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","default":"./dist/index.js","require":"./dist/index.js"},"./hono":{"types":"./dist/hono.d.ts","import":"./dist/hono.js","default":"./dist/hono.js","require":"./dist/hono.js"},"./nextjs":{"types":"./dist/nextjs.d.ts","import":"./dist/nextjs.js","default":"./dist/nextjs.js","require":"./dist/nextjs.js"},"./express":{"types":"./dist/express.d.ts","import":"./dist/express.js","default":"./dist/express.js","require":"./dist/express.js"},"./upstash":{"types":"./dist/upstash/index.d.ts","import":"./dist/upstash/index.js","default":"./dist/upstash/index.js","require":"./dist/upstash/index.js"},"./cloudflare":{"types":"./dist/cloudflare.d.ts","import":"./dist/cloudflare.js","default":"./dist/cloudflare.js","require":"./dist/cloudflare.js"},"./package.json":"./package.json"},"gitHead":"f7908c896f69aac83218d46c4fef4026ed8f58d2","license":"MIT","scripts":{"dev":"tsc --watch","lint":"eslint src/**/*.ts","test":"ts-node src/test.ts","build":"tsc","clean":"rimraf dist","format":"prettier --write src/**/*.ts","prepare":"npm run build","lint:fix":"eslint 'src/**/*.ts' --fix","prebuild":"npm run clean","release:major":"npm run build && npm version major && npm publish","release:minor":"npm run build && npm version minor && npm publish","release:patch":"npm run build && npm version patch && npm publish"},"version":"4.5.0","_npmUser":{"name":"prateek32177","email":"prateek32177@gmail.com"},"homepage":"https://github.com/Hookflo/tern#readme","keywords":["Hookflo","webhook","verification","security","hmac","signature","github","stripe","clerk","supabase","typescript","node","express","nextjs","cloudflare","hono"],"repository":{"url":"git+https://github.com/Hookflo/tern.git","type":"git"},"_npmVersion":"10.9.8","description":"A robust, scalable webhook verification framework supporting multiple platforms and signature algorithms","directories":{},"maintainers":[{"name":"prateek32177","email":"prateek32177@gmail.com"}],"_nodeVersion":"22.23.1","dependencies":{"@upstash/qstash":"^2.9.0"},"publishConfig":{"access":"public"},"typesVersions":{"*":{"*":["dist/index.d.ts"],"hono":["dist/hono.d.ts"],"nextjs":["dist/nextjs.d.ts"],"express":["dist/express.d.ts"],"upstash":["dist/upstash/index.d.ts"],"cloudflare":["dist/cloudflare.d.ts"]}},"_hasShrinkwrap":false,"devDependencies":{"jest":"29.5.0","eslint":"^8.57.1","rimraf":"^6.0.1","ts-jest":"29.1.0","ts-node":"^10.9.2","prettier":"3.0.0","typescript":"^5.0.0","@types/jest":"29.5.0","@types/node":"20.0.0","@types/express":"^5.0.3","eslint-plugin-import":"^2.32.0","@typescript-eslint/parser":"^8.39.0","eslint-config-airbnb-base":"^15.0.0","@typescript-eslint/eslint-plugin":"^8.39.0"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/tern_4.5.0_1790621399554_0.6427430431583321"}}},"time":{"created":"2025-08-08T14:36:23.411Z","modified":"2026-09-28T18:49:59.850Z","1.0.0":"2025-08-08T14:36:23.691Z","1.0.1":"2025-08-08T14:37:08.390Z","1.0.2":"2025-08-11T10:46:52.028Z","1.0.3":"2025-08-11T14:11:31.979Z","1.0.4":"2025-08-11T15:23:17.150Z","1.0.5":"2025-08-11T17:34:44.067Z","1.0.6":"2025-08-11T17:51:49.226Z","2.0.0":"2025-09-30T17:48:08.418Z","2.0.2-experimental.0":"2026-02-18T16:08:30.739Z","2.0.2":"2026-02-18T17:50:39.746Z","2.0.3-experimental.0":"2026-02-18T18:07:04.692Z","2.2.0":"2026-02-19T15:34:09.583Z","2.2.3":"2026-02-19T18:16:46.482Z","2.2.4":"2026-02-19T18:38:05.958Z","2.2.5":"2026-02-19T18:55:38.841Z","2.2.7":"2026-02-20T04:34:17.741Z","2.2.9":"2026-02-21T05:44:43.185Z","2.2.10":"2026-02-22T09:53:25.953Z","3.0.0":"2026-02-24T17:51:11.982Z","3.0.1":"2026-02-24T18:14:18.780Z","3.0.2":"2026-02-24T18:34:56.791Z","3.0.3":"2026-02-24T18:46:52.538Z","3.0.5":"2026-02-25T17:28:27.237Z","3.0.5-beta":"2026-02-25T19:13:16.497Z","3.0.7-beta":"2026-02-25T19:44:57.782Z","3.0.9-beta":"2026-02-25T20:02:57.264Z","3.0.11-beta":"2026-02-26T05:13:50.436Z","3.0.13-beta":"2026-02-26T05:32:13.336Z","3.0.15-beta":"2026-02-26T18:18:38.151Z","3.0.17-beta":"2026-02-26T18:59:18.395Z","4.0.0":"2026-02-26T19:41:18.106Z","4.0.2":"2026-02-27T08:17:02.422Z","4.0.3":"2026-02-27T13:05:40.192Z","4.1.0":"2026-02-28T18:38:19.188Z","4.1.1":"2026-03-01T04:54:44.575Z","4.2.1-beta":"2026-03-03T06:47:14.638Z","4.2.3-beta":"2026-03-03T08:11:08.060Z","4.2.5-beta":"2026-03-03T08:36:38.456Z","4.2.7-beta":"2026-03-03T09:43:42.749Z","4.2.9-beta":"2026-03-03T09:57:19.500Z","4.2.0":"2026-03-03T11:42:01.562Z","4.3.0-beta.0":"2026-03-04T17:31:35.942Z","4.3.0":"2026-03-04T17:45:34.432Z","4.3.1-beta":"2026-03-15T08:14:54.417Z","4.3.3-beta":"2026-03-15T11:23:51.996Z","4.3.0-beta-1":"2026-03-15T11:32:46.543Z","4.3.0-beta.1":"2026-03-23T17:00:44.713Z","4.3.0-beta.2":"2026-03-23T17:43:35.649Z","4.4.0":"2026-03-23T18:00:02.340Z","4.4.3":"2026-07-05T11:47:54.106Z","4.5.0":"2026-09-28T18:49:59.659Z"},"bugs":{"url":"https://github.com/Hookflo/tern/issues"},"author":{"name":"Prateek Jain"},"license":"MIT","homepage":"https://github.com/Hookflo/tern#readme","keywords":["Hookflo","webhook","verification","security","hmac","signature","github","stripe","clerk","supabase","typescript","node","express","nextjs","cloudflare","hono"],"repository":{"url":"git+https://github.com/Hookflo/tern.git","type":"git"},"description":"A robust, scalable webhook verification framework supporting multiple platforms and signature algorithms","maintainers":[{"name":"prateek32177","email":"prateek32177@gmail.com"}],"readme":"# Tern — Webhook Verification for Every Platform\n\n**When Stripe, Shopify, Clerk or any other platform sends a webhook to your server, how do you know it's real and not a forged request?** Tern checks the signature for you — one simplified TypeScript SDK, any provider, no boilerplate.\n\n[![npm version](https://img.shields.io/npm/v/@hookflo/tern)](https://www.npmjs.com/package/@hookflo/tern)\n[![TypeScript](https://img.shields.io/badge/TypeScript-Strict-blue)](https://www.typescriptlang.org/)\n![npm installs](https://img.shields.io/npm/dt/@hookflo/tern?style=flat-square&logo=npm&label=installs&color=111827)\n[![Zero Dependencies](https://img.shields.io/badge/dependencies-0-brightgreen)](package.json)\n\nStop writing webhook verification from scratch. **Tern** handles signature verification for Stripe, GitHub, Clerk, Shopify, and 15+ more platforms — with one consistent API. It also verifies **Standard Webhooks** (including Svix-style `svix-*` and canonical `webhook-*` headers) through a single `standardwebhooks` platform config.\n\n> Need reliable delivery too? Tern supports inbound webhook delivery via Upstash QStash — automatic retries, DLQ management, replay controls, and Slack/Discord alerting. Bring your own Upstash account (BYOK).\n\n```bash\nnpm install @hookflo/tern\n```\n\n> The same framework powering webhook verification at [Hookflo](https://hookflo.com).\n\n⭐ Star this repo to help others discover it · 💬 [Join our Discord](https://discord.com/invite/SNmCjU97nr)\n\n<img width=\"1200\" height=\"630\" alt=\"Tern – Webhook Verification Framework\" src=\"https://tern.hookflo.com/og-image.webp\" style=\"border-radius: 10px; margin-top: 16px;\" />\n\n**Navigation**\n\n[The Problem](#the-problem) · [Quick Start](#quick-start) · [Framework Integrations](#framework-integrations) · [Supported Platforms](#supported-platforms) · [Key Features](#key-features) · [Reliable Delivery & Alerting](#reliable-delivery--alerting) · [Custom Config](#custom-platform-configuration) · [API Reference](#api-reference) · [Troubleshooting](#troubleshooting) · [Contributing](#contributing) · [Support](#support)\n\n## The Problem\n\nEvery webhook provider has a different signature format. You end up writing — and maintaining — the same verification boilerplate over and over:\n\n```typescript\n// ❌ Without Tern — different logic for every provider\nconst stripeSignature = req.headers[\"stripe-signature\"];\nconst parts = stripeSignature.split(\",\");\n// ... 30 more lines just for Stripe\n\nconst githubSignature = req.headers[\"x-hub-signature-256\"];\n// ... completely different 20 lines for GitHub\n```\n\n```typescript\n// ✅ With Tern — one API for everything\nconst result = await WebhookVerificationService.verify(request, {\n  platform: \"stripe\",\n  secret: process.env.STRIPE_WEBHOOK_SECRET!,\n});\n```\n\n## Quick Start\n\n### Verify a single platform\n\n```typescript\nimport { WebhookVerificationService } from \"@hookflo/tern\";\n\nconst result = await WebhookVerificationService.verify(request, {\n  platform: \"stripe\",\n  secret: process.env.STRIPE_WEBHOOK_SECRET!,\n  toleranceInSeconds: 300,\n});\n\nif (result.isValid) {\n  console.log(\"Verified!\", result.eventId, result.payload);\n} else {\n  console.log(\"Failed:\", result.error, result.errorCode);\n}\n```\n\n### Auto-detect platform\n\n```typescript\nconst result = await WebhookVerificationService.verifyAny(request, {\n  stripe: process.env.STRIPE_WEBHOOK_SECRET,\n  github: process.env.GITHUB_WEBHOOK_SECRET,\n  clerk: process.env.CLERK_WEBHOOK_SECRET,\n});\n\nconsole.log(`Verified ${result.platform} webhook`);\n```\n\n### Core SDK (runtime-agnostic)\n\nUse Tern without framework adapters in any runtime that supports the Web `Request` API.\n\n```typescript\nimport { WebhookVerificationService } from \"@hookflo/tern\";\n\nconst verified = await WebhookVerificationService.verifyWithPlatformConfig(\n  request,\n  \"workos\",\n  process.env.WORKOS_WEBHOOK_SECRET!,\n  300,\n);\n\nif (!verified.isValid) {\n  return new Response(JSON.stringify({ error: verified.error }), {\n    status: 400,\n  });\n}\n\n// verified.payload + verified.metadata available here\n```\n\n## Framework Integrations\n\n### Express.js\n\n```typescript\nimport express from \"express\";\nimport { createWebhookMiddleware } from \"@hookflo/tern/express\";\n\nconst app = express();\n\napp.post(\n  \"/webhooks/stripe\",\n  express.raw({ type: \"*/*\" }),\n  createWebhookMiddleware({\n    platform: \"stripe\",\n    secret: process.env.STRIPE_WEBHOOK_SECRET!,\n  }),\n  (req, res) => {\n    const event = (req as any).webhook?.payload;\n    res.json({ received: true, event });\n  },\n);\n```\n\n### Next.js App Router\n\n```typescript\nimport { createWebhookHandler } from \"@hookflo/tern/nextjs\";\n\nexport const POST = createWebhookHandler({\n  platform: \"github\",\n  secret: process.env.GITHUB_WEBHOOK_SECRET!,\n  handler: async (payload, metadata) => ({\n    received: true,\n    delivery: metadata.delivery,\n  }),\n});\n```\n\n### Cloudflare Workers\n\n```typescript\nimport { createWebhookHandler } from \"@hookflo/tern/cloudflare\";\n\nexport const onRequestPost = createWebhookHandler({\n  platform: \"stripe\",\n  secretEnv: \"STRIPE_WEBHOOK_SECRET\",\n  handler: async (payload) => ({ received: true, payload }),\n});\n```\n\n### Hono (Edge Runtimes)\n\n```typescript\nimport { Hono } from \"hono\";\nimport { createWebhookHandler } from \"@hookflo/tern/hono\";\n\nconst app = new Hono();\n\napp.post(\n  \"/webhooks/stripe\",\n  createWebhookHandler({\n    platform: \"stripe\",\n    secret: process.env.STRIPE_WEBHOOK_SECRET!,\n    handler: async (payload, metadata, c) =>\n      c.json({\n        received: true,\n        eventId: metadata.id,\n        payload,\n      }),\n  }),\n);\n```\n\n> All built-in platforms work across Express, Next.js, Cloudflare, and Hono adapters. You only change `platform` and `secret` per route.\n\n## Supported Platforms\n\n> ⚠️ Normalization is no longer supported in Tern and has been removed from the public verification APIs.\n\n| Platform                                   | Algorithm            | Status     |\n| ------------------------------------------ | -------------------- | ---------- |\n| **Stripe**                                 | HMAC-SHA256          | ✅ Tested  |\n| **GitHub**                                 | HMAC-SHA256          | ✅ Tested  |\n| **Clerk**                                  | HMAC-SHA256 (base64) | ✅ Tested  |\n| **Shopify**                                | HMAC-SHA256 (base64) | ✅ Tested  |\n| **Dodo Payments**                          | HMAC-SHA256          | ✅ Tested  |\n| **Paddle**                                 | HMAC-SHA256          | ✅ Tested  |\n| **Lemon Squeezy**                          | HMAC-SHA256          | ✅ Tested  |\n| **Polar**                                  | HMAC-SHA256          | ✅ Tested  |\n| **WorkOS**                                 | HMAC-SHA256          | ✅ Tested  |\n| **ReplicateAI**                            | HMAC-SHA256          | ✅ Tested  |\n| **GitLab**                                 | Token-based          | ✅ Tested  |\n| **fal.ai**                                 | ED25519              | ✅ Tested  |\n| **Sentry**                                 | HMAC-SHA256          | ✅ Tested  |\n| **Grafana**                                | HMAC-SHA256          | ✅ Tested  |\n| **Doppler**                                | HMAC-SHA256          | ✅ Tested  |\n| **Sanity**                                 | HMAC-SHA256          | ✅ Tested  |\n| **Svix**                                   | HMAC-SHA256          | ✅ Tested  |\n| **Standard Webhooks** (`standardwebhooks`) | HMAC-SHA256          | ✅ Tested  |\n| **Linear**                                 | HMAC-SHA256          | ✅ Tested  |\n| **Webflow**                                | HMAC-SHA256          | ✅ Tested  |\n| **Razorpay**                               | HMAC-SHA256          | 🔄 Pending |\n| **Vercel**                                 | HMAC-SHA256          | 🔄 Pending |\n\n> Don't see your platform? [Use custom config](#custom-platform-configuration) or [open an issue](https://github.com/Hookflo/tern/issues).\n\n### Platform signature notes\n\n- **Standard Webhooks style** providers are supported via the canonical `standardwebhooks` platform (with aliases for both `webhook-*` and `svix-*` headers). Clerk, Dodo Payments, Polar, and ReplicateAI all follow this pattern and commonly use a secret that starts with `whsec_...`.\n- **ReplicateAI**: copy the webhook signing secret from your Replicate webhook settings and pass it directly as `secret`.\n- **fal.ai**: supports JWKS key resolution out of the box — use `secret: ''` for auto key resolution, or pass a PEM public key explicitly.\n\n### Note on fal.ai\n\nfal.ai uses **ED25519** signing. Pass an **empty string** as the webhook secret — the public key is resolved automatically via JWKS from fal's infrastructure.\n\n```typescript\nimport { createWebhookHandler } from \"@hookflo/tern/nextjs\";\n\nexport const POST = createWebhookHandler({\n  platform: \"falai\",\n  secret: \"\", // fal.ai resolves the public key automatically\n  handler: async (payload, metadata) => ({\n    received: true,\n    requestId: metadata.requestId,\n  }),\n});\n```\n\n## Key Features\n\n- **Queue + Retry Support** — optional Upstash QStash-based reliable inbound webhook delivery with automatic retries and deduplication\n- **DLQ + Replay Controls** — list failed events, replay DLQ messages, and trigger replay-aware alerts\n- **Alerting** — built-in Slack + Discord alerts through adapters and controls\n- **Auto Platform Detection** — detect and verify across multiple providers via `verifyAny` with diagnostics on failure\n- **Algorithm Agnostic** — HMAC-SHA256, HMAC-SHA1, HMAC-SHA512, ED25519, and custom algorithms\n- **Zero Dependencies** — no bloat, no supply chain risk\n- **Framework Agnostic** — works with Express, Next.js, Cloudflare Workers, Hono, Deno, Bun, and any runtime with Web Crypto\n- **Body-Parser Safe** — reads raw bodies correctly to prevent signature mismatch\n- **Strong TypeScript** — strict types, full inference, comprehensive type definitions\n- **Stable Error Codes** — `INVALID_SIGNATURE`, `MISSING_SIGNATURE`, `TIMESTAMP_EXPIRED`, and more\n\n## Reliable Delivery & Alerting\n\nTern supports both immediate and queue-based webhook processing. Queue mode is **optional and opt-in** — bring your own Upstash account (BYOK).\n\n### Non-queue mode (default)\n\n```typescript\nimport { createWebhookHandler } from \"@hookflo/tern/nextjs\";\n\nexport const POST = createWebhookHandler({\n  platform: \"stripe\",\n  secret: process.env.STRIPE_WEBHOOK_SECRET!,\n  handler: async (payload) => {\n    return { ok: true };\n  },\n});\n```\n\n### Queue mode (opt-in)\n\n```typescript\nimport { createWebhookHandler } from \"@hookflo/tern/nextjs\";\n\nexport const POST = createWebhookHandler({\n  platform: \"stripe\",\n  secret: process.env.STRIPE_WEBHOOK_SECRET!,\n  queue: true,\n  handler: async (payload, metadata) => {\n    return { processed: true, eventId: metadata.id };\n  },\n});\n```\n\n### Upstash Queue Setup\n\n1. Create a QStash project at [console.upstash.com/qstash](https://console.upstash.com/qstash)\n2. Copy your keys: `QSTASH_TOKEN`, `QSTASH_CURRENT_SIGNING_KEY`, `QSTASH_NEXT_SIGNING_KEY`\n3. Add them to your environment and set `queue: true`\n4. Enable queue with `queue: true` (or explicit queue config).\n\nDirect queue config option:\n\n```typescript\nqueue: {\n  token: process.env.QSTASH_TOKEN!,\n  signingKey: process.env.QSTASH_CURRENT_SIGNING_KEY!,\n  nextSigningKey: process.env.QSTASH_NEXT_SIGNING_KEY!,\n  retries: 5,\n}\n```\n\n### Simple alerting\n\n```typescript\nimport { createWebhookHandler } from \"@hookflo/tern/nextjs\";\n\nexport const POST = createWebhookHandler({\n  platform: \"stripe\",\n  secret: process.env.STRIPE_WEBHOOK_SECRET!,\n  alerts: {\n    slack: { webhookUrl: process.env.SLACK_WEBHOOK_URL! },\n    discord: { webhookUrl: process.env.DISCORD_WEBHOOK_URL! },\n  },\n  handler: async () => ({ ok: true }),\n});\n```\n\n### DLQ-aware alerting and replay\n\n```typescript\nimport { createTernControls } from \"@hookflo/tern/upstash\";\n\nconst controls = createTernControls({\n  token: process.env.QSTASH_TOKEN!,\n  notifications: {\n    slackWebhookUrl: process.env.SLACK_WEBHOOK_URL,\n    discordWebhookUrl: process.env.DISCORD_WEBHOOK_URL,\n  },\n});\n\nconst dlqMessages = await controls.dlq();\nif (dlqMessages.length > 0) {\n  await controls.alert({\n    dlq: true,\n    dlqId: dlqMessages[0].dlqId,\n    severity: \"warning\",\n    message: \"Replay attempted for failed event\",\n  });\n}\n```\n\n## Custom Platform Configuration\n\nNot built-in? Configure any webhook provider without waiting for a library update.\n\n```typescript\nconst result = await WebhookVerificationService.verify(request, {\n  platform: \"acmepay\",\n  secret: \"acme_secret\",\n  signatureConfig: {\n    algorithm: \"hmac-sha256\",\n    headerName: \"x-acme-signature\",\n    headerFormat: \"raw\",\n    timestampHeader: \"x-acme-timestamp\",\n    timestampFormat: \"unix\",\n    payloadFormat: \"timestamped\",\n  },\n});\n```\n\n### Standard Webhooks config helpers (Svix-style and webhook-\\* headers)\n\n```typescript\nimport {\n  createStandardWebhooksConfig,\n  STANDARD_WEBHOOKS_BASE,\n} from \"@hookflo/tern\";\n\nconst signatureConfig = createStandardWebhooksConfig({\n  id: \"webhook-id\",\n  timestamp: \"webhook-timestamp\",\n  signature: \"webhook-signature\",\n  idAliases: [\"svix-id\"],\n  timestampAliases: [\"svix-timestamp\"],\n  signatureAliases: [\"svix-signature\"],\n});\n\nconst result = await WebhookVerificationService.verify(request, {\n  platform: \"standardwebhooks\",\n  secret: process.env.STANDARD_WEBHOOKS_SECRET!,\n  signatureConfig: {\n    ...STANDARD_WEBHOOKS_BASE,\n    ...signatureConfig,\n  },\n});\n```\n\nSee the [SignatureConfig type](https://tern.hookflo.com) for all options.\n\n## API Reference\n\n### `WebhookVerificationService`\n\n| Method                                                            | Description                               |\n| ----------------------------------------------------------------- | ----------------------------------------- |\n| `verify(request, config)`                                         | Verify with full config object            |\n| `verifyWithPlatformConfig(request, platform, secret, tolerance?)` | Shorthand for built-in platforms          |\n| `verifyAny(request, secrets, tolerance?)`                         | Auto-detect platform and verify           |\n| `verifyTokenAuth(request, webhookId, webhookToken)`               | Token-based verification                  |\n| `verifyTokenBased(request, webhookId, webhookToken)`              | Alias for `verifyTokenAuth`               |\n| `handleWithQueue(request, options)`                               | Core SDK helper for queue receive/process |\n\n### `@hookflo/tern/upstash`\n\n| Export                                                             | Description                                       |\n| ------------------------------------------------------------------ | ------------------------------------------------- |\n| `createTernControls(config)`                                       | Read DLQ/events, replay, and send alerts          |\n| `handleQueuedRequest(request, options)`                            | Route request between receive/process modes       |\n| `handleReceive(request, platform, secret, queueConfig, tolerance)` | Verify webhook and enqueue to QStash              |\n| `handleProcess(request, handler, queueConfig)`                     | Verify QStash signature and process payload       |\n| `resolveQueueConfig(queue)`                                        | Resolve `queue: true` from env or explicit object |\n\n### `WebhookVerificationResult`\n\n```typescript\ninterface WebhookVerificationResult {\n  isValid: boolean;\n  error?: string;\n  errorCode?: string;\n  platform: WebhookPlatform;\n  payload?: any;\n  eventId?: string;\n  metadata?: {\n    timestamp?: string;\n    id?: string | null;\n    [key: string]: any;\n  };\n}\n```\n\n## Troubleshooting\n\n**`Module not found: Can't resolve \"@hookflo/tern/nextjs\"`**\n\n```bash\nnpm i @hookflo/tern@latest\nrm -rf node_modules package-lock.json .next\nnpm i\n```\n\n**Signature verification failing?**\n\nMake sure you're passing the **raw** request body — not a parsed JSON object. Tern's framework adapters handle this automatically. If you're using the core service directly, ensure body parsers aren't consuming the stream before Tern does.\n\n## Contributing\n\nContributions are welcome! See [CONTRIBUTING.md](CONTRIBUTING.md) for how to add platforms, write tests, and submit PRs.\n\n```bash\ngit clone https://github.com/Hookflo/tern.git\ncd tern\nnpm install\nnpm test\n```\n\n## Support\n\nHave a question, running into an issue, or want to request a platform? We're happy to help.\n\nJoin the conversation on [Discord](https://discord.com/invite/SNmCjU97nr) or [open an issue](https://github.com/Hookflo/tern/issues) on GitHub — all questions, bug reports, and platform requests are welcome.\n\n## Links\n\n[Detailed Usage & Docs](https://tern.hookflo.com) · [npm Package](https://www.npmjs.com/package/@hookflo/tern) · [Discord Community](https://discord.com/invite/SNmCjU97nr) · [Issues](https://github.com/Hookflo/tern/issues)\n\n## License\n\nMIT © [Hookflo](https://hookflo.com)\n","readmeFilename":"README.md"}