{"_id":"@aahoughton/oav-fastify","_rev":"19-ab422dc3cb6f9c12a601d4458ddc8781","name":"@aahoughton/oav-fastify","dist-tags":{"latest":"3.8.0"},"versions":{"1.0.0":{"name":"@aahoughton/oav-fastify","version":"1.0.0","keywords":["fastify","hook","openapi","openapi-3.0","openapi-3.1","openapi-3.2","validation","validator"],"author":{"name":"Andrew Houghton","email":"aah@roarmouse.org"},"license":"MIT","_id":"@aahoughton/oav-fastify@1.0.0","maintainers":[{"name":"aahoughton","email":"aah@roarmouse.org"}],"homepage":"https://github.com/aahoughton/oav#readme","bugs":{"url":"https://github.com/aahoughton/oav/issues"},"dist":{"shasum":"54a916aa740c673dce01b854877893025a9bd1eb","tarball":"https://registry.npmjs.org/@aahoughton/oav-fastify/-/oav-fastify-1.0.0.tgz","fileCount":9,"integrity":"sha512-ZHOReRjNOtNiULjQWthxCeLaN/9lcOi5nWXCDMxdZQGC/+pp7J7YR+5HPiZRxipsn60DhALl2cns2nvks2Gz2g==","signatures":[{"sig":"MEUCIQD+Ks3d+0EESP6qjhFQTOfPuHA0/pkpUqffXGQ5uRMprAIgQGt7OyhtEE178ZfWTxQc3zKyl5Yz69Ck5zJb/1kivKo=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@aahoughton%2foav-fastify@1.0.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":90597},"main":"./dist/index.cjs","type":"module","_from":"file:aahoughton-oav-fastify-1.0.0.tgz","types":"./dist/index.d.ts","module":"./dist/index.js","engines":{"node":">=22"},"exports":{".":{"import":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"require":{"types":"./dist/index.d.cts","default":"./dist/index.cjs"}},"./package.json":"./package.json"},"scripts":{"test":"vitest run","build":"tsup","typecheck":"tsc -b"},"_npmUser":{"name":"aahoughton","email":"aah@roarmouse.org"},"_resolved":"/tmp/a2648e603c1ac62d976a4427e48c951e/aahoughton-oav-fastify-1.0.0.tgz","_integrity":"sha512-ZHOReRjNOtNiULjQWthxCeLaN/9lcOi5nWXCDMxdZQGC/+pp7J7YR+5HPiZRxipsn60DhALl2cns2nvks2Gz2g==","repository":{"url":"git+https://github.com/aahoughton/oav.git","type":"git","directory":"packages/oav-fastify"},"_npmVersion":"10.9.7","description":"Fastify adapter for @aahoughton/oav-core. preValidation hook factory plus standalone helpers (httpRequestFromFastify, renderProblemDetails) for callers composing their own hooks.","directories":{},"sideEffects":false,"_nodeVersion":"22.22.2","dependencies":{"@aahoughton/oav-core":"1.0.0"},"publishConfig":{"access":"public","provenance":true},"_hasShrinkwrap":false,"devDependencies":{"tsup":"8.5.1","vitest":"4.1.5","fastify":"5.8.5","@oav/core":"0.0.0","typescript":"5.9.3","@oav/validator":"0.0.0"},"peerDependencies":{"fastify":"^5.0.0"},"_npmOperationalInternal":{"tmp":"tmp/oav-fastify_1.0.0_1777179379825_0.530204139439928","host":"s3://npm-registry-packages-npm-production"},"deprecated":"Renamed to @oaverify/fastify."},"1.1.0":{"name":"@aahoughton/oav-fastify","version":"1.1.0","keywords":["fastify","hook","openapi","openapi-3.0","openapi-3.1","openapi-3.2","validation","validator"],"author":{"name":"Andrew Houghton","email":"aah@roarmouse.org"},"license":"MIT","_id":"@aahoughton/oav-fastify@1.1.0","maintainers":[{"name":"aahoughton","email":"aah@roarmouse.org"}],"homepage":"https://github.com/aahoughton/oav#readme","bugs":{"url":"https://github.com/aahoughton/oav/issues"},"//":"No prepublishOnly: release.yml runs `pnpm test` from root before `pnpm -r publish`. Per-package publish (`cd packages/<x> && pnpm publish`) is not the supported path; it would skip the test gate.","dist":{"shasum":"14d16fe370b6be8c8b72a7b8dfbd6b7b04e28809","tarball":"https://registry.npmjs.org/@aahoughton/oav-fastify/-/oav-fastify-1.1.0.tgz","fileCount":9,"integrity":"sha512-06FpGYmw7F2XIvhDxKQfoCuip8XJ6/whGdEbyo30xhcdADRPioUrRJ3IlIc35OwCW3b2HP/aETHWJlB+x5z6rg==","signatures":[{"sig":"MEUCIByaEfte7dYkWtscIBEQFpNTahZFjvLc+w7Ak/czRNcnAiEA/9aIzP1chaZ/xo7pO3x2BNpbx0Pbg2XoCeW0h8hdU6c=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@aahoughton%2foav-fastify@1.1.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":90872},"main":"./dist/index.cjs","type":"module","_from":"file:aahoughton-oav-fastify-1.1.0.tgz","types":"./dist/index.d.ts","module":"./dist/index.js","engines":{"node":">=22"},"exports":{".":{"import":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"require":{"types":"./dist/index.d.cts","default":"./dist/index.cjs"}},"./package.json":"./package.json"},"scripts":{"test":"vitest run","build":"tsup","typecheck":"tsc -b"},"_npmUser":{"name":"aahoughton","email":"aah@roarmouse.org"},"_resolved":"/tmp/a65424b36860885260804562dcb2ed28/aahoughton-oav-fastify-1.1.0.tgz","_integrity":"sha512-06FpGYmw7F2XIvhDxKQfoCuip8XJ6/whGdEbyo30xhcdADRPioUrRJ3IlIc35OwCW3b2HP/aETHWJlB+x5z6rg==","repository":{"url":"git+https://github.com/aahoughton/oav.git","type":"git","directory":"packages/oav-fastify"},"_npmVersion":"10.9.7","description":"Fastify adapter for @aahoughton/oav-core. preValidation hook factory plus standalone helpers (httpRequestFromFastify, renderProblemDetails) for callers composing their own hooks.","directories":{},"sideEffects":false,"_nodeVersion":"22.22.2","dependencies":{"@aahoughton/oav-core":"1.1.0"},"publishConfig":{"access":"public","provenance":true},"_hasShrinkwrap":false,"devDependencies":{"tsup":"8.5.1","vitest":"4.1.5","fastify":"5.8.5","@oav/core":"0.0.0","typescript":"5.9.3","@oav/validator":"0.0.0"},"peerDependencies":{"fastify":"^5.0.0"},"_npmOperationalInternal":{"tmp":"tmp/oav-fastify_1.1.0_1777240349050_0.4892936352664714","host":"s3://npm-registry-packages-npm-production"},"deprecated":"Renamed to @oaverify/fastify."},"1.1.1":{"name":"@aahoughton/oav-fastify","version":"1.1.1","keywords":["fastify","hook","openapi","openapi-3.0","openapi-3.1","openapi-3.2","validation","validator"],"author":{"name":"Andrew Houghton","email":"aah@roarmouse.org"},"license":"MIT","_id":"@aahoughton/oav-fastify@1.1.1","maintainers":[{"name":"aahoughton","email":"aah@roarmouse.org"}],"homepage":"https://github.com/aahoughton/oav#readme","bugs":{"url":"https://github.com/aahoughton/oav/issues"},"//":"No prepublishOnly: release.yml runs `pnpm test` from root before `pnpm -r publish`. Per-package publish (`cd packages/<x> && pnpm publish`) is not the supported path; it would skip the test gate.","dist":{"shasum":"c1d68552edef48bc1fd69136d99f35b615a11687","tarball":"https://registry.npmjs.org/@aahoughton/oav-fastify/-/oav-fastify-1.1.1.tgz","fileCount":9,"integrity":"sha512-6DKmrIB3xcpRf7PVhyk4Xfb8M7RINyK+JXbrmZ+WyCz3lybFsoHAxK8gH3ec8nmlr46TSkIBVJdr8Bo/MzNqTA==","signatures":[{"sig":"MEUCIF4GZqcbQ2LJjIdi78BPUkg0lo1HXOjNKf/S20i4ZVV5AiEAjs+DMBkcFM7nqD6kBsej60GvQTl9joR07kxRiUuxAhw=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@aahoughton%2foav-fastify@1.1.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":90800},"main":"./dist/index.cjs","type":"module","_from":"file:aahoughton-oav-fastify-1.1.1.tgz","types":"./dist/index.d.ts","module":"./dist/index.js","engines":{"node":">=22"},"exports":{".":{"import":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"require":{"types":"./dist/index.d.cts","default":"./dist/index.cjs"}},"./package.json":"./package.json"},"scripts":{"test":"vitest run","build":"tsup","typecheck":"tsc -b"},"_npmUser":{"name":"aahoughton","email":"aah@roarmouse.org"},"_resolved":"/tmp/8d542f2f51e93b969346d57a08b0ea42/aahoughton-oav-fastify-1.1.1.tgz","_integrity":"sha512-6DKmrIB3xcpRf7PVhyk4Xfb8M7RINyK+JXbrmZ+WyCz3lybFsoHAxK8gH3ec8nmlr46TSkIBVJdr8Bo/MzNqTA==","repository":{"url":"git+https://github.com/aahoughton/oav.git","type":"git","directory":"packages/oav-fastify"},"_npmVersion":"10.9.7","description":"Fastify adapter for @aahoughton/oav-core. preValidation hook factory plus standalone helpers (httpRequestFromFastify, renderProblemDetails) for callers composing their own hooks.","directories":{},"sideEffects":false,"_nodeVersion":"22.22.2","dependencies":{"@aahoughton/oav-core":"1.1.2"},"publishConfig":{"access":"public","provenance":true},"_hasShrinkwrap":false,"devDependencies":{"tsup":"8.5.1","vitest":"4.1.5","fastify":"5.8.5","@oav/core":"0.0.0","typescript":"5.9.3","@oav/validator":"0.0.0"},"peerDependencies":{"fastify":"^5.0.0"},"_npmOperationalInternal":{"tmp":"tmp/oav-fastify_1.1.1_1777265609259_0.2572315159438172","host":"s3://npm-registry-packages-npm-production"},"deprecated":"Renamed to @oaverify/fastify."},"2.0.0":{"name":"@aahoughton/oav-fastify","version":"2.0.0","keywords":["fastify","hook","openapi","openapi-3.0","openapi-3.1","openapi-3.2","validation","validator"],"author":{"name":"Andrew Houghton","email":"aah@roarmouse.org"},"license":"MIT","_id":"@aahoughton/oav-fastify@2.0.0","maintainers":[{"name":"aahoughton","email":"aah@roarmouse.org"}],"homepage":"https://github.com/aahoughton/oav#readme","bugs":{"url":"https://github.com/aahoughton/oav/issues"},"//":"No prepublishOnly: release.yml runs `pnpm test` from root before `pnpm -r publish`. Per-package publish (`cd packages/<x> && pnpm publish`) is not the supported path; it would skip the test gate.","dist":{"shasum":"1de5fffb662d665db37e6e96db67b69c9e906521","tarball":"https://registry.npmjs.org/@aahoughton/oav-fastify/-/oav-fastify-2.0.0.tgz","fileCount":9,"integrity":"sha512-GNsYr8eABBCzDD1B9o61UWtrIUVINTKnfvgp6QVO6Luonw8SupQuFMdgUzIyAGFJIVjfEiJhO1BrFFZakZJChg==","signatures":[{"sig":"MEQCIGoafC5nnFBrC1DpGz4h3tJian05omYtvUcZVr5FP+Y5AiAzI12vVToorDw7kfr2o4H61c3xrp/nnWYKS3O+cHcjrg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@aahoughton%2foav-fastify@2.0.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":96567},"main":"./dist/index.cjs","type":"module","_from":"file:aahoughton-oav-fastify-2.0.0.tgz","types":"./dist/index.d.ts","module":"./dist/index.js","engines":{"node":">=22"},"exports":{".":{"import":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"require":{"types":"./dist/index.d.cts","default":"./dist/index.cjs"}},"./package.json":"./package.json"},"scripts":{"test":"vitest run","build":"tsup","typecheck":"tsc -b"},"_npmUser":{"name":"aahoughton","email":"aah@roarmouse.org"},"_resolved":"/tmp/fe3a6778328b5182b5cd7bdd794c068a/aahoughton-oav-fastify-2.0.0.tgz","_integrity":"sha512-GNsYr8eABBCzDD1B9o61UWtrIUVINTKnfvgp6QVO6Luonw8SupQuFMdgUzIyAGFJIVjfEiJhO1BrFFZakZJChg==","repository":{"url":"git+https://github.com/aahoughton/oav.git","type":"git","directory":"packages/oav-fastify"},"_npmVersion":"10.9.7","description":"Fastify adapter for @aahoughton/oav-core. preValidation hook factory plus standalone helpers (httpRequestFromFastify, renderProblemDetails) for callers composing their own hooks.","directories":{},"sideEffects":false,"_nodeVersion":"22.22.2","dependencies":{"@aahoughton/oav-core":"2.0.0"},"publishConfig":{"access":"public","provenance":true},"_hasShrinkwrap":false,"devDependencies":{"tsup":"8.5.1","vitest":"4.1.5","fastify":"5.8.5","@oav/core":"0.0.0","typescript":"5.9.3","@oav/validator":"0.0.0"},"peerDependencies":{"fastify":"^5.0.0"},"_npmOperationalInternal":{"tmp":"tmp/oav-fastify_2.0.0_1777746031385_0.7911239631151121","host":"s3://npm-registry-packages-npm-production"},"deprecated":"Renamed to @oaverify/fastify."},"2.1.0":{"name":"@aahoughton/oav-fastify","version":"2.1.0","keywords":["fastify","hook","openapi","openapi-3.0","openapi-3.1","openapi-3.2","validation","validator"],"author":{"name":"Andrew Houghton","email":"aah@roarmouse.org"},"license":"MIT","_id":"@aahoughton/oav-fastify@2.1.0","maintainers":[{"name":"aahoughton","email":"aah@roarmouse.org"}],"homepage":"https://github.com/aahoughton/oav#readme","bugs":{"url":"https://github.com/aahoughton/oav/issues"},"//":"No prepublishOnly: release.yml runs `pnpm test` from root before `pnpm -r publish`. Per-package publish (`cd packages/<x> && pnpm publish`) is not the supported path; it would skip the test gate.","dist":{"shasum":"8a44abf4fe507ff5e545aa2890e2c985276bbb80","tarball":"https://registry.npmjs.org/@aahoughton/oav-fastify/-/oav-fastify-2.1.0.tgz","fileCount":9,"integrity":"sha512-J7usakvAOqDRg1MnAXTjYhpyNbnf/9dcHGKk5Y108EMxkK/83Ef/XwCZ5fEhuQIv5/t0zdlqckNORXnzD44a5g==","signatures":[{"sig":"MEQCIAHY8/f1en3zTwzwXToc1e6Mjb7OXpdYYeRpOaOxyUfvAiA1KIld2o9hVH9GroH4TN8JPXuOpFtA66FEtG2CqPBBkw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@aahoughton%2foav-fastify@2.1.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":102906},"main":"./dist/index.cjs","type":"module","_from":"file:aahoughton-oav-fastify-2.1.0.tgz","types":"./dist/index.d.ts","module":"./dist/index.js","engines":{"node":">=22"},"exports":{".":{"import":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"require":{"types":"./dist/index.d.cts","default":"./dist/index.cjs"}},"./package.json":"./package.json"},"scripts":{"test":"vitest run","build":"tsup","typecheck":"tsc -b"},"_npmUser":{"name":"aahoughton","email":"aah@roarmouse.org"},"_resolved":"/tmp/7226c43a689f4f9f11f93e92468882a7/aahoughton-oav-fastify-2.1.0.tgz","_integrity":"sha512-J7usakvAOqDRg1MnAXTjYhpyNbnf/9dcHGKk5Y108EMxkK/83Ef/XwCZ5fEhuQIv5/t0zdlqckNORXnzD44a5g==","repository":{"url":"git+https://github.com/aahoughton/oav.git","type":"git","directory":"packages/oav-fastify"},"_npmVersion":"10.9.7","description":"Fastify adapter for @aahoughton/oav-core. preValidation hook factory plus standalone helpers (httpRequestFromFastify, renderProblemDetails) for callers composing their own hooks.","directories":{},"sideEffects":false,"_nodeVersion":"22.22.2","dependencies":{"@aahoughton/oav-core":"2.1.0"},"publishConfig":{"access":"public","provenance":true},"_hasShrinkwrap":false,"devDependencies":{"tsup":"8.5.1","vitest":"4.1.5","fastify":"5.8.5","@oav/core":"0.0.0","typescript":"5.9.3","@oav/validator":"0.0.0"},"peerDependencies":{"fastify":"^5.0.0"},"_npmOperationalInternal":{"tmp":"tmp/oav-fastify_2.1.0_1777873111982_0.0863681833153751","host":"s3://npm-registry-packages-npm-production"},"deprecated":"Renamed to @oaverify/fastify."},"2.2.0":{"name":"@aahoughton/oav-fastify","version":"2.2.0","keywords":["fastify","hook","openapi","openapi-3.0","openapi-3.1","openapi-3.2","validation","validator"],"author":{"name":"Andrew Houghton","email":"aah@roarmouse.org"},"license":"MIT","_id":"@aahoughton/oav-fastify@2.2.0","maintainers":[{"name":"aahoughton","email":"aah@roarmouse.org"}],"homepage":"https://github.com/aahoughton/oav#readme","bugs":{"url":"https://github.com/aahoughton/oav/issues"},"//":"No prepublishOnly: release.yml runs `pnpm test` from root before `pnpm -r publish`. Per-package publish (`cd packages/<x> && pnpm publish`) is not the supported path; it would skip the test gate.","dist":{"shasum":"98ec5b5efaa4ab10cecc373e2ec9db7949b05eb7","tarball":"https://registry.npmjs.org/@aahoughton/oav-fastify/-/oav-fastify-2.2.0.tgz","fileCount":9,"integrity":"sha512-t0Ef1PXZaV3Nl02ImCBM90byuNOlMrlb0/w6YtBM8/MlMQ63tq4EHa+8pzgHmNAgC6O3b/SSS/1H1pckq9Q4mg==","signatures":[{"sig":"MEUCIFHESztx5u7LoarUVIO8Qk41rtP4PsXRN+vRvwBXTIfPAiEApsQdy+p0jnIMAtqTBpKkVhQiCwjtTtodkFEXrM9CYvM=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@aahoughton%2foav-fastify@2.2.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":104744},"main":"./dist/index.cjs","type":"module","_from":"file:aahoughton-oav-fastify-2.2.0.tgz","types":"./dist/index.d.ts","module":"./dist/index.js","engines":{"node":">=22"},"exports":{".":{"import":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"require":{"types":"./dist/index.d.cts","default":"./dist/index.cjs"}},"./package.json":"./package.json"},"scripts":{"test":"vitest run","build":"tsup","typecheck":"tsc -b"},"_npmUser":{"name":"aahoughton","email":"aah@roarmouse.org"},"_resolved":"/tmp/e3429176865af101664a737a025fed51/aahoughton-oav-fastify-2.2.0.tgz","_integrity":"sha512-t0Ef1PXZaV3Nl02ImCBM90byuNOlMrlb0/w6YtBM8/MlMQ63tq4EHa+8pzgHmNAgC6O3b/SSS/1H1pckq9Q4mg==","repository":{"url":"git+https://github.com/aahoughton/oav.git","type":"git","directory":"packages/oav-fastify"},"_npmVersion":"10.9.7","description":"Fastify adapter for @aahoughton/oav-core. preValidation hook factory plus standalone helpers (httpRequestFromFastify, renderProblemDetails) for callers composing their own hooks.","directories":{},"sideEffects":false,"_nodeVersion":"22.22.2","dependencies":{"@aahoughton/oav-core":"2.2.0"},"publishConfig":{"access":"public","provenance":true},"_hasShrinkwrap":false,"devDependencies":{"tsup":"8.5.1","vitest":"4.1.6","fastify":"5.8.5","@oav/core":"0.0.0","typescript":"5.9.3","@oav/validator":"0.0.0"},"peerDependencies":{"fastify":"^5.0.0"},"_npmOperationalInternal":{"tmp":"tmp/oav-fastify_2.2.0_1779217726720_0.9609138160303086","host":"s3://npm-registry-packages-npm-production"},"deprecated":"Renamed to @oaverify/fastify."},"2.2.1":{"name":"@aahoughton/oav-fastify","version":"2.2.1","keywords":["fastify","hook","openapi","openapi-3.0","openapi-3.1","openapi-3.2","validation","validator"],"author":{"name":"Andrew Houghton","email":"aah@roarmouse.org"},"license":"MIT","_id":"@aahoughton/oav-fastify@2.2.1","maintainers":[{"name":"aahoughton","email":"aah@roarmouse.org"}],"homepage":"https://github.com/aahoughton/oav#readme","bugs":{"url":"https://github.com/aahoughton/oav/issues"},"//":"No prepublishOnly: release.yml runs `pnpm test` from root before `pnpm -r publish`. Per-package publish (`cd packages/<x> && pnpm publish`) is not the supported path; it would skip the test gate.","dist":{"shasum":"dea1b27064ea5cea34a11c9cad5f29ec6507c6b5","tarball":"https://registry.npmjs.org/@aahoughton/oav-fastify/-/oav-fastify-2.2.1.tgz","fileCount":9,"integrity":"sha512-bjlprERyFmpNtuPMKnQ2HJTcKyDJVGaMnGoJ7gkROTy7YeE+Y7GNkzm7RoZtGucnvHB8PuP5AHVZt4pAuORU2A==","signatures":[{"sig":"MEUCIQC0hR6d/XZ8TMAzxa6Cvl4+hdqfGZkKX8Fw93fB609GHwIgFCk6DBZpGIaU8Im3WVaBPjX7wCIgmop6ihwOM88G/0Q=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@aahoughton%2foav-fastify@2.2.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":104744},"main":"./dist/index.cjs","type":"module","_from":"file:pkgs/aahoughton-oav-fastify-2.2.1.tgz","types":"./dist/index.d.ts","module":"./dist/index.js","engines":{"node":">=22"},"exports":{".":{"import":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"require":{"types":"./dist/index.d.cts","default":"./dist/index.cjs"}},"./package.json":"./package.json"},"scripts":{"test":"vitest run","build":"tsup","typecheck":"tsc -b"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:46f2ea39-4624-4b8e-9699-e45d79a97bbd"}},"_resolved":"/home/runner/work/oav/oav/pkgs/aahoughton-oav-fastify-2.2.1.tgz","_integrity":"sha512-bjlprERyFmpNtuPMKnQ2HJTcKyDJVGaMnGoJ7gkROTy7YeE+Y7GNkzm7RoZtGucnvHB8PuP5AHVZt4pAuORU2A==","repository":{"url":"git+https://github.com/aahoughton/oav.git","type":"git","directory":"packages/oav-fastify"},"_npmVersion":"11.13.0","description":"Fastify adapter for @aahoughton/oav-core. preValidation hook factory plus standalone helpers (httpRequestFromFastify, renderProblemDetails) for callers composing their own hooks.","directories":{},"sideEffects":false,"_nodeVersion":"24.16.0","dependencies":{"@aahoughton/oav-core":"2.2.1"},"publishConfig":{"access":"public","provenance":true},"_hasShrinkwrap":false,"devDependencies":{"tsup":"8.5.1","vitest":"4.1.8","fastify":"5.8.5","@oav/core":"0.0.0","typescript":"5.9.3","@oav/validator":"0.0.0"},"peerDependencies":{"fastify":"^5.0.0"},"_npmOperationalInternal":{"tmp":"tmp/oav-fastify_2.2.1_1780700010370_0.30243933332856177","host":"s3://npm-registry-packages-npm-production"},"deprecated":"Renamed to @oaverify/fastify."},"2.3.0":{"name":"@aahoughton/oav-fastify","version":"2.3.0","keywords":["fastify","hook","openapi","openapi-3.0","openapi-3.1","openapi-3.2","validation","validator"],"author":{"name":"Andrew Houghton","email":"aah@roarmouse.org"},"license":"MIT","_id":"@aahoughton/oav-fastify@2.3.0","maintainers":[{"name":"aahoughton","email":"aah@roarmouse.org"}],"homepage":"https://github.com/aahoughton/oav#readme","bugs":{"url":"https://github.com/aahoughton/oav/issues"},"//":"No prepublishOnly: release.yml runs `pnpm test` from root before `pnpm -r publish`. Per-package publish (`cd packages/<x> && pnpm publish`) is not the supported path; it would skip the test gate.","dist":{"shasum":"9881fdf4afc2971cf106aef50ff415a13bfc3c99","tarball":"https://registry.npmjs.org/@aahoughton/oav-fastify/-/oav-fastify-2.3.0.tgz","fileCount":9,"integrity":"sha512-XEJXnNX6ozPciDdftc94O3j5We06sICpN64Iwpyff22QJjYdgOFiC/lLA96x5wkUDC2JqkZzfaork5mR7GPp4Q==","signatures":[{"sig":"MEQCIGPIoB9ekf2Zq5prmDmQinraM2D9QfcDFj42ywiouqr0AiANJaxpWjmYhMIxdFID7zXssiKm2jrFfe4ahUCcnaQ3Hw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@aahoughton%2foav-fastify@2.3.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":104580},"main":"./dist/index.cjs","type":"module","_from":"file:pkgs/aahoughton-oav-fastify-2.3.0.tgz","types":"./dist/index.d.ts","module":"./dist/index.js","engines":{"node":">=22"},"exports":{".":{"import":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"require":{"types":"./dist/index.d.cts","default":"./dist/index.cjs"}},"./package.json":"./package.json"},"scripts":{"test":"vitest run","build":"tsup","typecheck":"tsc -b"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:46f2ea39-4624-4b8e-9699-e45d79a97bbd"}},"_resolved":"/home/runner/work/oav/oav/pkgs/aahoughton-oav-fastify-2.3.0.tgz","_integrity":"sha512-XEJXnNX6ozPciDdftc94O3j5We06sICpN64Iwpyff22QJjYdgOFiC/lLA96x5wkUDC2JqkZzfaork5mR7GPp4Q==","repository":{"url":"git+https://github.com/aahoughton/oav.git","type":"git","directory":"packages/oav-fastify"},"_npmVersion":"11.13.0","description":"Fastify adapter for @aahoughton/oav-core. preValidation hook factory plus standalone helpers (httpRequestFromFastify, renderProblemDetails) for callers composing their own hooks.","directories":{},"sideEffects":false,"_nodeVersion":"24.16.0","dependencies":{"@aahoughton/oav-core":"2.3.0"},"publishConfig":{"access":"public","provenance":true},"_hasShrinkwrap":false,"peerDependencies":{"fastify":"^5.0.0"},"_npmOperationalInternal":{"tmp":"tmp/oav-fastify_2.3.0_1780762512092_0.6183618303789351","host":"s3://npm-registry-packages-npm-production"},"deprecated":"Renamed to @oaverify/fastify."},"2.4.0":{"name":"@aahoughton/oav-fastify","version":"2.4.0","keywords":["fastify","hook","openapi","openapi-3.0","openapi-3.1","openapi-3.2","validation","validator"],"author":{"name":"Andrew Houghton","email":"aah@roarmouse.org"},"license":"MIT","_id":"@aahoughton/oav-fastify@2.4.0","maintainers":[{"name":"aahoughton","email":"aah@roarmouse.org"}],"homepage":"https://github.com/aahoughton/oav#readme","bugs":{"url":"https://github.com/aahoughton/oav/issues"},"//":"No prepublishOnly: release.yml runs `pnpm test` from root before `pnpm -r publish`. Per-package publish (`cd packages/<x> && pnpm publish`) is not the supported path; it would skip the test gate.","dist":{"shasum":"6ade44bcf9a8b88373cbbb3db61cfd40a78c64dc","tarball":"https://registry.npmjs.org/@aahoughton/oav-fastify/-/oav-fastify-2.4.0.tgz","fileCount":9,"integrity":"sha512-kwF1NtSJjqLkrUZ7iLupIEpo9QtiOnFIXtClJK3fmiRwPuK1vh9jdrXMpPiVieLImwsA5NSLJGZNGYNAfhdumg==","signatures":[{"sig":"MEQCIA8aGaLQbmPllZX3qfCXOyhtrmnyadZ/dg2IWeQBp9F4AiBwcqAvVmazIMiFvYCjy0ATjmDTXKMH6RBd5QxKJbXxKg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@aahoughton%2foav-fastify@2.4.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":106219},"main":"./dist/index.cjs","type":"module","_from":"file:pkgs/aahoughton-oav-fastify-2.4.0.tgz","types":"./dist/index.d.ts","module":"./dist/index.js","engines":{"node":">=22"},"exports":{".":{"import":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"require":{"types":"./dist/index.d.cts","default":"./dist/index.cjs"}},"./package.json":"./package.json"},"scripts":{"test":"vitest run","build":"tsup","typecheck":"tsc -b"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:46f2ea39-4624-4b8e-9699-e45d79a97bbd"}},"_resolved":"/home/runner/work/oav/oav/pkgs/aahoughton-oav-fastify-2.4.0.tgz","_integrity":"sha512-kwF1NtSJjqLkrUZ7iLupIEpo9QtiOnFIXtClJK3fmiRwPuK1vh9jdrXMpPiVieLImwsA5NSLJGZNGYNAfhdumg==","repository":{"url":"git+https://github.com/aahoughton/oav.git","type":"git","directory":"packages/oav-fastify"},"_npmVersion":"11.13.0","description":"Fastify adapter for @aahoughton/oav-core. preValidation hook factory plus standalone helpers (httpRequestFromFastify, renderProblemDetails) for callers composing their own hooks.","directories":{},"sideEffects":false,"_nodeVersion":"24.16.0","dependencies":{"@aahoughton/oav-core":"2.4.0"},"publishConfig":{"access":"public","provenance":true},"_hasShrinkwrap":false,"peerDependencies":{"fastify":"^5.0.0"},"_npmOperationalInternal":{"tmp":"tmp/oav-fastify_2.4.0_1780776954704_0.07630296656501123","host":"s3://npm-registry-packages-npm-production"},"deprecated":"Renamed to @oaverify/fastify."},"3.0.0":{"name":"@aahoughton/oav-fastify","version":"3.0.0","keywords":["fastify","hook","openapi","openapi-3.0","openapi-3.1","openapi-3.2","validation","validator"],"author":{"name":"Andrew Houghton","email":"aah@roarmouse.org"},"license":"MIT","_id":"@aahoughton/oav-fastify@3.0.0","maintainers":[{"name":"aahoughton","email":"aah@roarmouse.org"}],"homepage":"https://github.com/aahoughton/oav#readme","bugs":{"url":"https://github.com/aahoughton/oav/issues"},"//":"No prepublishOnly: release.yml runs `pnpm test` from root before `pnpm -r publish`. Per-package publish (`cd packages/<x> && pnpm publish`) is not the supported path; it would skip the test gate.","dist":{"shasum":"01226e45e1e98167af70baba07b75b42751c273c","tarball":"https://registry.npmjs.org/@aahoughton/oav-fastify/-/oav-fastify-3.0.0.tgz","fileCount":9,"integrity":"sha512-AKsLtBZZOp3ibeNdrSxVQV+6HOr6+H1wiW3ght1P1qCt6OV0jlA26j8WdF+lz4A76WLGg14p97WKodFO31K44Q==","signatures":[{"sig":"MEUCIQDgMCUbzrU+avUxDdGl0L+H4SzXJ9drTk3JLRwz+7yO4gIgX5zGLtfdmqJMhe7umG/CMsGo4/ghJt6RmgKZTgARoNI=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@aahoughton%2foav-fastify@3.0.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":118273},"main":"./dist/index.cjs","type":"module","_from":"file:pkgs/aahoughton-oav-fastify-3.0.0.tgz","types":"./dist/index.d.ts","module":"./dist/index.js","engines":{"node":">=22"},"exports":{".":{"import":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"require":{"types":"./dist/index.d.cts","default":"./dist/index.cjs"}},"./package.json":"./package.json"},"scripts":{"test":"vitest run","build":"tsup","typecheck":"tsc -b"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:46f2ea39-4624-4b8e-9699-e45d79a97bbd"}},"_resolved":"/home/runner/work/oav/oav/pkgs/aahoughton-oav-fastify-3.0.0.tgz","_integrity":"sha512-AKsLtBZZOp3ibeNdrSxVQV+6HOr6+H1wiW3ght1P1qCt6OV0jlA26j8WdF+lz4A76WLGg14p97WKodFO31K44Q==","repository":{"url":"git+https://github.com/aahoughton/oav.git","type":"git","directory":"packages/oav-fastify"},"_npmVersion":"11.13.0","description":"Fastify adapter for @aahoughton/oav-core. preValidation hook factory plus standalone helpers (httpRequestFromFastify, renderProblemDetails) for callers composing their own hooks.","directories":{},"sideEffects":false,"_nodeVersion":"24.16.0","dependencies":{"@aahoughton/oav-core":"3.0.0"},"publishConfig":{"access":"public","provenance":true},"_hasShrinkwrap":false,"peerDependencies":{"fastify":"^5.0.0"},"_npmOperationalInternal":{"tmp":"tmp/oav-fastify_3.0.0_1780892139860_0.18764010095813277","host":"s3://npm-registry-packages-npm-production"},"deprecated":"Renamed to @oaverify/fastify."},"3.1.0":{"name":"@aahoughton/oav-fastify","version":"3.1.0","keywords":["fastify","hook","openapi","openapi-3.0","openapi-3.1","openapi-3.2","validation","validator"],"author":{"name":"Andrew Houghton","email":"aah@roarmouse.org"},"license":"MIT","_id":"@aahoughton/oav-fastify@3.1.0","maintainers":[{"name":"aahoughton","email":"aah@roarmouse.org"}],"homepage":"https://github.com/aahoughton/oav#readme","bugs":{"url":"https://github.com/aahoughton/oav/issues"},"//":"No prepublishOnly: release.yml runs `pnpm test` from root before `pnpm -r publish`. Per-package publish (`cd packages/<x> && pnpm publish`) is not the supported path; it would skip the test gate.","dist":{"shasum":"816f4c856367a4d4a4032af8b51e6150eae601cb","tarball":"https://registry.npmjs.org/@aahoughton/oav-fastify/-/oav-fastify-3.1.0.tgz","fileCount":9,"integrity":"sha512-pvw5qgl35fR+bpJdJINjVuKvIuj6Ia3z/9CKRZchx5gIGMfDu8K73P3hzwE1PDXv9/QTNokUVkftj8Iub0H6Sw==","signatures":[{"sig":"MEUCIQCGTI718PudTZNzPaz1ih3UcQ/Jhjh/DUmvdEYNf8cpwQIgeQLhvFOgd+9uSpqMU+BntWAohB+D3vftyWxESeibwJM=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@aahoughton%2foav-fastify@3.1.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":118586},"main":"./dist/index.cjs","type":"module","_from":"file:pkgs/aahoughton-oav-fastify-3.1.0.tgz","types":"./dist/index.d.ts","module":"./dist/index.js","engines":{"node":">=22"},"exports":{".":{"import":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"require":{"types":"./dist/index.d.cts","default":"./dist/index.cjs"}},"./package.json":"./package.json"},"scripts":{"test":"vitest run","build":"tsup","typecheck":"tsc -b"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:46f2ea39-4624-4b8e-9699-e45d79a97bbd"}},"_resolved":"/home/runner/work/oav/oav/pkgs/aahoughton-oav-fastify-3.1.0.tgz","_integrity":"sha512-pvw5qgl35fR+bpJdJINjVuKvIuj6Ia3z/9CKRZchx5gIGMfDu8K73P3hzwE1PDXv9/QTNokUVkftj8Iub0H6Sw==","repository":{"url":"git+https://github.com/aahoughton/oav.git","type":"git","directory":"packages/oav-fastify"},"_npmVersion":"11.13.0","description":"Fastify adapter for @aahoughton/oav-core. preValidation hook factory plus standalone helpers (httpRequestFromFastify, renderProblemDetails) for callers composing their own hooks.","directories":{},"sideEffects":false,"_nodeVersion":"24.16.0","dependencies":{"@aahoughton/oav-core":"3.1.0"},"publishConfig":{"access":"public","provenance":true},"_hasShrinkwrap":false,"peerDependencies":{"fastify":"^5.0.0"},"_npmOperationalInternal":{"tmp":"tmp/oav-fastify_3.1.0_1781036867275_0.672284358013453","host":"s3://npm-registry-packages-npm-production"},"deprecated":"Renamed to @oaverify/fastify."},"3.2.0":{"name":"@aahoughton/oav-fastify","version":"3.2.0","keywords":["fastify","hook","openapi","openapi-3.0","openapi-3.1","openapi-3.2","validation","validator"],"author":{"name":"Andrew Houghton","email":"aah@roarmouse.org"},"license":"MIT","_id":"@aahoughton/oav-fastify@3.2.0","maintainers":[{"name":"aahoughton","email":"aah@roarmouse.org"}],"homepage":"https://github.com/aahoughton/oav#readme","bugs":{"url":"https://github.com/aahoughton/oav/issues"},"//":"No prepublishOnly: release.yml runs `pnpm test` from root before `pnpm -r publish`. Per-package publish (`cd packages/<x> && pnpm publish`) is not the supported path; it would skip the test gate.","dist":{"shasum":"b0879a005f643d025a572d9ca9f4c7873b4c645f","tarball":"https://registry.npmjs.org/@aahoughton/oav-fastify/-/oav-fastify-3.2.0.tgz","fileCount":9,"integrity":"sha512-vw38wi6dmjvS4VnWVvgTkapfh+BUwcRnNLBKteuN8B/kb1LrVSiyIX1hlzr2Up1KCF0pH21ZOZGZ+KfWsEweSw==","signatures":[{"sig":"MEUCIEfIZqHeRn/L1GYGoTdprsx41zwN7g1rNNXTzknfBIhJAiEApHuoNk3A7uSHmmtkRTXY0N+roBG/LzA6utcDUcENHxY=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@aahoughton%2foav-fastify@3.2.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":160062},"main":"./dist/index.cjs","type":"module","_from":"file:pkgs/aahoughton-oav-fastify-3.2.0.tgz","types":"./dist/index.d.ts","module":"./dist/index.js","engines":{"node":">=22"},"exports":{".":{"import":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"require":{"types":"./dist/index.d.cts","default":"./dist/index.cjs"}},"./package.json":"./package.json"},"scripts":{"test":"vitest run","build":"tsup","typecheck":"tsc -b"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:46f2ea39-4624-4b8e-9699-e45d79a97bbd"}},"_resolved":"/home/runner/work/oav/oav/pkgs/aahoughton-oav-fastify-3.2.0.tgz","_integrity":"sha512-vw38wi6dmjvS4VnWVvgTkapfh+BUwcRnNLBKteuN8B/kb1LrVSiyIX1hlzr2Up1KCF0pH21ZOZGZ+KfWsEweSw==","repository":{"url":"git+https://github.com/aahoughton/oav.git","type":"git","directory":"packages/oav-fastify"},"_npmVersion":"11.13.0","description":"Fastify adapter for @aahoughton/oav-core. preValidation hook factory plus standalone helpers (httpRequestFromFastify, renderProblemDetails) for callers composing their own hooks.","directories":{},"sideEffects":false,"_nodeVersion":"24.16.0","dependencies":{"@aahoughton/oav-core":"3.2.0"},"publishConfig":{"access":"public","provenance":true},"_hasShrinkwrap":false,"peerDependencies":{"fastify":"^5.0.0"},"_npmOperationalInternal":{"tmp":"tmp/oav-fastify_3.2.0_1781211651484_0.16280349080281087","host":"s3://npm-registry-packages-npm-production"},"deprecated":"Renamed to @oaverify/fastify."},"3.3.0":{"name":"@aahoughton/oav-fastify","version":"3.3.0","keywords":["fastify","hook","openapi","openapi-3.0","openapi-3.1","openapi-3.2","validation","validator"],"author":{"name":"Andrew Houghton","email":"aah@roarmouse.org"},"license":"MIT","_id":"@aahoughton/oav-fastify@3.3.0","maintainers":[{"name":"aahoughton","email":"aah@roarmouse.org"}],"homepage":"https://github.com/aahoughton/oav#readme","bugs":{"url":"https://github.com/aahoughton/oav/issues"},"//":"No prepublishOnly: release.yml runs `pnpm test` from root before `pnpm -r publish`. Per-package publish (`cd packages/<x> && pnpm publish`) is not the supported path; it would skip the test gate.","dist":{"shasum":"841039eb71d891f57e5a54623b341de9ac89f5bf","tarball":"https://registry.npmjs.org/@aahoughton/oav-fastify/-/oav-fastify-3.3.0.tgz","fileCount":9,"integrity":"sha512-CxAtA2psVVlS91iqmAIzyPY2ATUOcK1ddSSQozrTdM7uhRZR5u7XD1MTeIIBHpnfn0PO2WPTMyB+EmvDFV9jWw==","signatures":[{"sig":"MEYCIQC/fyDo7yxHoR6XPeqDfqiyYPwqSdyZgDZF97h6jES81AIhALBaEqcyhQaM843pKgIa9t48sulPvXNCd3Cil/luY+Ap","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@aahoughton%2foav-fastify@3.3.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":161148},"main":"./dist/index.cjs","type":"module","_from":"file:pkgs/aahoughton-oav-fastify-3.3.0.tgz","types":"./dist/index.d.ts","module":"./dist/index.js","engines":{"node":">=22"},"exports":{".":{"import":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"require":{"types":"./dist/index.d.cts","default":"./dist/index.cjs"}},"./package.json":"./package.json"},"scripts":{"test":"vitest run","build":"tsup","typecheck":"tsc -b"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:46f2ea39-4624-4b8e-9699-e45d79a97bbd"}},"_resolved":"/home/runner/work/oav/oav/pkgs/aahoughton-oav-fastify-3.3.0.tgz","_integrity":"sha512-CxAtA2psVVlS91iqmAIzyPY2ATUOcK1ddSSQozrTdM7uhRZR5u7XD1MTeIIBHpnfn0PO2WPTMyB+EmvDFV9jWw==","repository":{"url":"git+https://github.com/aahoughton/oav.git","type":"git","directory":"packages/oav-fastify"},"_npmVersion":"11.13.0","description":"Fastify adapter for @aahoughton/oav-core. preValidation hook factory plus standalone helpers (httpRequestFromFastify, renderProblemDetails) for callers composing their own hooks.","directories":{},"sideEffects":false,"_nodeVersion":"24.16.0","dependencies":{"@aahoughton/oav-core":"3.3.0"},"publishConfig":{"access":"public","provenance":true},"_hasShrinkwrap":false,"peerDependencies":{"fastify":"^5.0.0"},"_npmOperationalInternal":{"tmp":"tmp/oav-fastify_3.3.0_1781710969220_0.9369067262142965","host":"s3://npm-registry-packages-npm-production"},"deprecated":"Renamed to @oaverify/fastify."},"3.4.0":{"name":"@aahoughton/oav-fastify","version":"3.4.0","keywords":["fastify","hook","openapi","openapi-3.0","openapi-3.1","openapi-3.2","validation","validator"],"author":{"name":"Andrew Houghton","email":"aah@roarmouse.org"},"license":"MIT","_id":"@aahoughton/oav-fastify@3.4.0","maintainers":[{"name":"aahoughton","email":"aah@roarmouse.org"}],"homepage":"https://github.com/aahoughton/oav#readme","bugs":{"url":"https://github.com/aahoughton/oav/issues"},"//":"No prepublishOnly: release.yml runs `pnpm test` from root before `pnpm -r publish`. Per-package publish (`cd packages/<x> && pnpm publish`) is not the supported path; it would skip the test gate.","dist":{"shasum":"6200c949290f298712236b6af5dd41f63319f6fd","tarball":"https://registry.npmjs.org/@aahoughton/oav-fastify/-/oav-fastify-3.4.0.tgz","fileCount":9,"integrity":"sha512-IHDJpKeU00zwxfXJ5ieRDFUCSke8qdik8JIVJLatwuiEyFlcp2cu//AHuHKR0MBcI4OP8Nb70//SC7BkhQ2qWA==","signatures":[{"sig":"MEUCIQDpYyolmko4IzM9G7HyIb0MUCRSUzqlS/pxVNVHHQeFLAIgQwWPkTTHj7iRPZl1IHyz0HHmefODFb8dZfgB1hfSv14=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@aahoughton%2foav-fastify@3.4.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":160578},"main":"./dist/index.cjs","type":"module","_from":"file:pkgs/aahoughton-oav-fastify-3.4.0.tgz","types":"./dist/index.d.ts","module":"./dist/index.js","engines":{"node":">=22"},"exports":{".":{"import":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"require":{"types":"./dist/index.d.cts","default":"./dist/index.cjs"}},"./package.json":"./package.json"},"scripts":{"test":"vitest run","build":"tsup","typecheck":"tsc -b"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:46f2ea39-4624-4b8e-9699-e45d79a97bbd"}},"_resolved":"/home/runner/work/oav/oav/pkgs/aahoughton-oav-fastify-3.4.0.tgz","_integrity":"sha512-IHDJpKeU00zwxfXJ5ieRDFUCSke8qdik8JIVJLatwuiEyFlcp2cu//AHuHKR0MBcI4OP8Nb70//SC7BkhQ2qWA==","repository":{"url":"git+https://github.com/aahoughton/oav.git","type":"git","directory":"packages/oav-fastify"},"_npmVersion":"11.13.0","description":"Fastify adapter for @aahoughton/oav-core. preValidation hook factory plus standalone helpers (httpRequestFromFastify, renderProblemDetails) for callers composing their own hooks.","directories":{},"sideEffects":false,"_nodeVersion":"24.16.0","dependencies":{"@aahoughton/oav-core":"3.4.0"},"publishConfig":{"access":"public","provenance":true},"_hasShrinkwrap":false,"peerDependencies":{"fastify":"^5.0.0"},"_npmOperationalInternal":{"tmp":"tmp/oav-fastify_3.4.0_1781997914313_0.3714456357533813","host":"s3://npm-registry-packages-npm-production"},"deprecated":"Renamed to @oaverify/fastify."},"3.5.0":{"name":"@aahoughton/oav-fastify","version":"3.5.0","keywords":["api-validation","fastify","fastify-openapi","fastify-plugin","hook","oas","openapi","openapi-3.0","openapi-3.1","openapi-3.2","openapi-request-validator","openapi-validator","request-validator","swagger","validation","validator"],"author":{"name":"Andrew Houghton","email":"aah@roarmouse.org"},"license":"MIT","_id":"@aahoughton/oav-fastify@3.5.0","maintainers":[{"name":"aahoughton","email":"aah@roarmouse.org"}],"homepage":"https://github.com/aahoughton/oav#readme","bugs":{"url":"https://github.com/aahoughton/oav/issues"},"//":"No prepublishOnly: release.yml runs `pnpm test` from root before `pnpm -r publish`. Per-package publish (`cd packages/<x> && pnpm publish`) is not the supported path; it would skip the test gate.","dist":{"shasum":"ee1fd7ca996356e96889fafe1f8abe88652f1a19","tarball":"https://registry.npmjs.org/@aahoughton/oav-fastify/-/oav-fastify-3.5.0.tgz","fileCount":9,"integrity":"sha512-AgTV7ZteNTie7yBghLgrWoAb4vfqFi3C5WcroEFYkD4u9d0zK6L7LZkv00VFjiyZ/B5q5LJNvs89oJvfUHqWBQ==","signatures":[{"sig":"MEQCIHutFeVE/4eHEb3GaIglbtsS+oW7kh3qHkoD+vDgoSDnAiBtuaNSYevteX4EnqKIwvvOTsnRLQejYKF9JlU47+Cm7w==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@aahoughton%2foav-fastify@3.5.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":160749},"main":"./dist/index.cjs","type":"module","_from":"file:pkgs/aahoughton-oav-fastify-3.5.0.tgz","types":"./dist/index.d.ts","module":"./dist/index.js","engines":{"node":">=22"},"exports":{".":{"import":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"require":{"types":"./dist/index.d.cts","default":"./dist/index.cjs"}},"./package.json":"./package.json"},"scripts":{"test":"vitest run","build":"tsup","typecheck":"tsc -b"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:46f2ea39-4624-4b8e-9699-e45d79a97bbd"}},"_resolved":"/home/runner/work/oav/oav/pkgs/aahoughton-oav-fastify-3.5.0.tgz","_integrity":"sha512-AgTV7ZteNTie7yBghLgrWoAb4vfqFi3C5WcroEFYkD4u9d0zK6L7LZkv00VFjiyZ/B5q5LJNvs89oJvfUHqWBQ==","repository":{"url":"git+https://github.com/aahoughton/oav.git","type":"git","directory":"packages/oav-fastify"},"_npmVersion":"11.13.0","description":"Fastify preValidation hook for OpenAPI request validation (3.0/3.1/3.2). Checks the request against your spec and returns problem+json errors. Built on @aahoughton/oav-core.","directories":{},"sideEffects":false,"_nodeVersion":"24.16.0","dependencies":{"@aahoughton/oav-core":"3.5.0"},"publishConfig":{"access":"public","provenance":true},"_hasShrinkwrap":false,"peerDependencies":{"fastify":"^5.0.0"},"_npmOperationalInternal":{"tmp":"tmp/oav-fastify_3.5.0_1782139848172_0.2433506544958779","host":"s3://npm-registry-packages-npm-production"},"deprecated":"Renamed to @oaverify/fastify."},"3.6.0":{"name":"@aahoughton/oav-fastify","version":"3.6.0","keywords":["api-validation","fastify","fastify-openapi","fastify-plugin","hook","oas","openapi","openapi-3.0","openapi-3.1","openapi-3.2","openapi-request-validator","openapi-validator","request-validator","swagger","validation","validator"],"author":{"name":"Andrew Houghton","email":"aah@roarmouse.org"},"license":"MIT","_id":"@aahoughton/oav-fastify@3.6.0","maintainers":[{"name":"aahoughton","email":"aah@roarmouse.org"}],"homepage":"https://github.com/aahoughton/oav#readme","bugs":{"url":"https://github.com/aahoughton/oav/issues"},"//":"No prepublishOnly: release.yml runs `pnpm test` from root before `pnpm -r publish`. Per-package publish (`cd packages/<x> && pnpm publish`) is not the supported path; it would skip the test gate.","dist":{"shasum":"475a1085ffe01132f4da4dfa2c91244bc59de418","tarball":"https://registry.npmjs.org/@aahoughton/oav-fastify/-/oav-fastify-3.6.0.tgz","fileCount":7,"integrity":"sha512-5byJ3dzFsKxdqOxgPiOZCXpMHNM9oRXGb+yBQ8kFXn9iErCRCMzOEbsXh75K20o2Xth87DoBbQDyO8O1WRtQPg==","signatures":[{"sig":"MEUCIE4/PdbBswNejiwNhBqjqrZeFtvG8e0ik2e0rWtAEbjLAiEA3VsyoIycj3DXeT7ZQmqkqq6n5phPbyR3KqY2hpdLJPg=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@aahoughton%2foav-fastify@3.6.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":121603},"main":"./dist/index.cjs","type":"module","_from":"file:pkgs/aahoughton-oav-fastify-3.6.0.tgz","types":"./dist/index.d.ts","module":"./dist/index.js","engines":{"node":">=22"},"exports":{".":{"import":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"require":{"types":"./dist/index.d.cts","default":"./dist/index.cjs"}},"./package.json":"./package.json"},"scripts":{"test":"vitest run","build":"tsup","typecheck":"tsc -b"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:46f2ea39-4624-4b8e-9699-e45d79a97bbd"}},"_resolved":"/home/runner/work/oav/oav/pkgs/aahoughton-oav-fastify-3.6.0.tgz","_integrity":"sha512-5byJ3dzFsKxdqOxgPiOZCXpMHNM9oRXGb+yBQ8kFXn9iErCRCMzOEbsXh75K20o2Xth87DoBbQDyO8O1WRtQPg==","repository":{"url":"git+https://github.com/aahoughton/oav.git","type":"git","directory":"packages/oav-fastify"},"_npmVersion":"11.13.0","description":"Fastify preValidation hook for OpenAPI request validation (3.0/3.1/3.2). Checks the request against your spec and returns problem+json errors. Built on @aahoughton/oav-core.","directories":{},"sideEffects":false,"_nodeVersion":"24.16.0","dependencies":{"@aahoughton/oav-core":"3.6.0"},"publishConfig":{"access":"public","provenance":true},"_hasShrinkwrap":false,"peerDependencies":{"fastify":"^5.0.0"},"_npmOperationalInternal":{"tmp":"tmp/oav-fastify_3.6.0_1782314712933_0.44707544844692615","host":"s3://npm-registry-packages-npm-production"},"deprecated":"Renamed to @oaverify/fastify."},"3.7.0":{"name":"@aahoughton/oav-fastify","version":"3.7.0","keywords":["api-validation","fastify","fastify-openapi","fastify-plugin","hook","oas","openapi","openapi-3.0","openapi-3.1","openapi-3.2","openapi-request-validator","openapi-validator","request-validator","swagger","validation","validator"],"author":{"name":"Andrew Houghton","email":"aah@roarmouse.org"},"license":"MIT","_id":"@aahoughton/oav-fastify@3.7.0","maintainers":[{"name":"aahoughton","email":"aah@roarmouse.org"}],"homepage":"https://github.com/aahoughton/oav#readme","bugs":{"url":"https://github.com/aahoughton/oav/issues"},"//":"No prepublishOnly: release.yml runs `pnpm test` from root before `pnpm -r publish`. Per-package publish (`cd packages/<x> && pnpm publish`) is not the supported path; it would skip the test gate.","dist":{"shasum":"6647d4947866bdb3d95ecec6d2c3079199e7cc71","tarball":"https://registry.npmjs.org/@aahoughton/oav-fastify/-/oav-fastify-3.7.0.tgz","fileCount":7,"integrity":"sha512-E/0eqbmcm2xUdLFKUKH1KqqsHesgu25jywMXHGLqJhIRGS4AhrgTlwssmppgEDdA05ZaRlzMKqJw+4C/dhSZlQ==","signatures":[{"sig":"MEYCIQDOBtSFseInjEyxXyT5gC5ah8tPRfxX0LHFgAsSxZ4VxgIhAO2sKLrTiFYs+2wfetHQfgifYCsriYX6ppqM0qoFEuR2","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@aahoughton%2foav-fastify@3.7.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":121603},"main":"./dist/index.cjs","type":"module","_from":"file:pkgs/aahoughton-oav-fastify-3.7.0.tgz","types":"./dist/index.d.ts","module":"./dist/index.js","engines":{"node":">=22"},"exports":{".":{"import":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"require":{"types":"./dist/index.d.cts","default":"./dist/index.cjs"}},"./package.json":"./package.json"},"scripts":{"test":"vitest run","build":"tsup","typecheck":"tsc -b"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:46f2ea39-4624-4b8e-9699-e45d79a97bbd"}},"_resolved":"/home/runner/work/oav/oav/pkgs/aahoughton-oav-fastify-3.7.0.tgz","_integrity":"sha512-E/0eqbmcm2xUdLFKUKH1KqqsHesgu25jywMXHGLqJhIRGS4AhrgTlwssmppgEDdA05ZaRlzMKqJw+4C/dhSZlQ==","repository":{"url":"git+https://github.com/aahoughton/oav.git","type":"git","directory":"packages/oav-fastify"},"_npmVersion":"11.13.0","description":"Fastify preValidation hook for OpenAPI request validation (3.0/3.1/3.2). Checks the request against your spec and returns problem+json errors. Built on @aahoughton/oav-core.","directories":{},"sideEffects":false,"_nodeVersion":"24.17.0","dependencies":{"@aahoughton/oav-core":"3.7.0"},"publishConfig":{"access":"public","provenance":true},"_hasShrinkwrap":false,"peerDependencies":{"fastify":"^5.0.0"},"_npmOperationalInternal":{"tmp":"tmp/oav-fastify_3.7.0_1782425654897_0.8097298573396832","host":"s3://npm-registry-packages-npm-production"},"deprecated":"Renamed to @oaverify/fastify."},"3.8.0":{"name":"@aahoughton/oav-fastify","version":"3.8.0","keywords":["api-validation","fastify","fastify-openapi","fastify-plugin","hook","oas","openapi","openapi-3.0","openapi-3.1","openapi-3.2","openapi-request-validator","openapi-validator","request-validator","swagger","validation","validator"],"author":{"name":"Andrew Houghton","email":"aah@roarmouse.org"},"license":"MIT","_id":"@aahoughton/oav-fastify@3.8.0","maintainers":[{"name":"aahoughton","email":"aah@roarmouse.org"}],"homepage":"https://github.com/aahoughton/oav#readme","bugs":{"url":"https://github.com/aahoughton/oav/issues"},"//":"No prepublishOnly: release.yml runs `pnpm test` from root before `pnpm -r publish`. Per-package publish (`cd packages/<x> && pnpm publish`) is not the supported path; it would skip the test gate.","dist":{"shasum":"ed356fc6747abf984ccea31d3480706d747e2880","tarball":"https://registry.npmjs.org/@aahoughton/oav-fastify/-/oav-fastify-3.8.0.tgz","fileCount":7,"integrity":"sha512-uPm7HlLhweXIQVJBoccYpFaAbG3d7JQUGPqngjqbOJpgCaDvg7XZNQXX5hdKo9LXFBg1D21IhXQwHjOAitO2mg==","signatures":[{"sig":"MEYCIQCSDqb6ewf6nfq6wdUDiEGrxNItlRRQKlH1WCTmYbzy+gIhAMEgvrfRdZkDtAD0wZS4hGJxycTdKGq+iysCUk7702s9","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@aahoughton%2foav-fastify@3.8.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":121877},"main":"./dist/index.cjs","type":"module","_from":"file:pkgs/aahoughton-oav-fastify-3.8.0.tgz","types":"./dist/index.d.ts","module":"./dist/index.js","engines":{"node":">=22"},"exports":{".":{"import":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"require":{"types":"./dist/index.d.cts","default":"./dist/index.cjs"}},"./package.json":"./package.json"},"scripts":{"test":"vitest run","build":"tsup","typecheck":"tsc -b"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:46f2ea39-4624-4b8e-9699-e45d79a97bbd"}},"_resolved":"/home/runner/work/oav/oav/pkgs/aahoughton-oav-fastify-3.8.0.tgz","_integrity":"sha512-uPm7HlLhweXIQVJBoccYpFaAbG3d7JQUGPqngjqbOJpgCaDvg7XZNQXX5hdKo9LXFBg1D21IhXQwHjOAitO2mg==","repository":{"url":"git+https://github.com/aahoughton/oav.git","type":"git","directory":"packages/oav-fastify"},"_npmVersion":"11.16.0","description":"Fastify preValidation hook for OpenAPI request validation (3.0/3.1/3.2). Checks the request against your spec and returns problem+json errors. Built on @aahoughton/oav-core.","directories":{},"sideEffects":false,"_nodeVersion":"24.18.0","dependencies":{"@aahoughton/oav-core":"3.8.0"},"publishConfig":{"access":"public","provenance":true},"_hasShrinkwrap":false,"peerDependencies":{"fastify":"^5.0.0"},"_npmOperationalInternal":{"tmp":"tmp/oav-fastify_3.8.0_1783306975688_0.38638244108069597","host":"s3://npm-registry-packages-npm-production"},"deprecated":"Renamed to @oaverify/fastify."}},"time":{"created":"2026-04-26T04:56:19.666Z","modified":"2026-07-28T04:30:47.346Z","1.0.0":"2026-04-26T04:56:19.956Z","1.1.0":"2026-04-26T21:52:29.200Z","1.1.1":"2026-04-27T04:53:29.387Z","2.0.0":"2026-05-02T18:20:31.538Z","2.1.0":"2026-05-04T05:38:32.160Z","2.2.0":"2026-05-19T19:08:46.903Z","2.2.1":"2026-06-05T22:53:30.522Z","2.3.0":"2026-06-06T16:15:12.293Z","2.4.0":"2026-06-06T20:15:54.840Z","3.0.0":"2026-06-08T04:15:40.023Z","3.1.0":"2026-06-09T20:27:47.418Z","3.2.0":"2026-06-11T21:00:51.664Z","3.3.0":"2026-06-17T15:42:49.360Z","3.4.0":"2026-06-20T23:25:14.452Z","3.5.0":"2026-06-22T14:50:48.343Z","3.6.0":"2026-06-24T15:25:13.075Z","3.7.0":"2026-06-25T22:14:15.106Z","3.8.0":"2026-07-06T03:02:55.835Z"},"bugs":{"url":"https://github.com/aahoughton/oav/issues"},"author":{"name":"Andrew Houghton","email":"aah@roarmouse.org"},"license":"MIT","homepage":"https://github.com/aahoughton/oav#readme","keywords":["api-validation","fastify","fastify-openapi","fastify-plugin","hook","oas","openapi","openapi-3.0","openapi-3.1","openapi-3.2","openapi-request-validator","openapi-validator","request-validator","swagger","validation","validator"],"repository":{"url":"git+https://github.com/aahoughton/oav.git","type":"git","directory":"packages/oav-fastify"},"description":"Fastify preValidation hook for OpenAPI request validation (3.0/3.1/3.2). Checks the request against your spec and returns problem+json errors. Built on @aahoughton/oav-core.","maintainers":[{"name":"aahoughton","email":"aah@roarmouse.org"}],"readme":"# oav-fastify\n\nFastify adapter for [`oav-core`](https://www.npmjs.com/package/@aahoughton/oav-core): a `preValidation` hook factory plus standalone helpers (`httpRequestFromFastify`, `renderProblemDetails`) for callers composing their own hooks.\n\nSame shape as the Express siblings ([`oav-express4`](https://github.com/aahoughton/oav/blob/main/packages/oav-express4/README.md), [`oav-express5`](https://github.com/aahoughton/oav/blob/main/packages/oav-express5/README.md)); only the framework-typed argument and Fastify's hook-vs-middleware distinction differ. Fastify is async-native, so thrown errors and rejected promises propagate to Fastify's error handler automatically, with no `try/catch` wrapper.\n\nSibling packages: [`oav-express4`](https://github.com/aahoughton/oav/blob/main/packages/oav-express4/README.md), [`oav-express5`](https://github.com/aahoughton/oav/blob/main/packages/oav-express5/README.md). Identical option shapes and defaults; `validateRequests` and `renderProblemDetails` share names across the family, while the `httpRequestFrom*` extractor and `*Context` type carry framework-native names.\n\n## Install\n\n```bash\n# JSON specs only\nnpm install @aahoughton/oav-core @aahoughton/oav-fastify fastify\n\n# YAML specs + CLI (oav transitively provides oav-core)\nnpm install @aahoughton/oav @aahoughton/oav-fastify fastify\n```\n\n`fastify` is a peer dep; your app's existing install satisfies it.\n\n> **YAML specs.** `oav-core` is JSON-only by design (zero runtime deps). If your spec is YAML, either install [`oav`](https://www.npmjs.com/package/@aahoughton/oav) instead (it bundles the YAML readers and the CLI), or install `yaml` separately and parse the spec yourself before passing the parsed object to `createValidator`.\n\n## Quick start\n\n```ts\nimport Fastify from \"fastify\";\nimport { createValidator } from \"@aahoughton/oav-core\";\nimport { validateRequests } from \"@aahoughton/oav-fastify\";\n\nconst validator = createValidator(spec); // see \"Hardening for untrusted input\" below\n\nconst app = Fastify();\napp.addHook(\"preValidation\", validateRequests(validator));\n\napp.post(\"/pets\", async () => ({ ok: true }));\n```\n\nInvalid requests receive a `400 application/problem+json` response (status from `httpStatusFor`, body from `toProblemDetails`, `Allow` header on 405). Valid requests reach the route handlers.\n\n## Hardening for untrusted input\n\nThe quick start is the minimal wiring. Before exposing the validator to untrusted callers, cap two things so a small, cheap payload can't burn CPU or exhaust the stack. Both are `createValidator` options, and both default to uncapped, so the quick start above sets neither.\n\n```ts\nconst validator = createValidator(spec, {\n  maxDepth: 64, // recursion cap: a body nesting past 64 levels fails as 400\n  maxErrors: 10, // stop after 10 errors instead of walking a huge invalid body\n});\n```\n\n- **`maxDepth`** bounds recursion through self-referential (`$ref`) schemas. Without it, a few KB of deeply nested JSON can exhaust the call stack and surface as a 500. Past the cap, validation emits a `depth` error (mapped to 400) instead of descending. Legitimate payloads rarely recurse beyond ten or fifteen levels, so 32 to 64 is generous.\n- **`maxErrors`** caps how many errors one request can produce, in compute and in response size: a large array whose every element fails the same way otherwise yields one error per element. Results carry `truncated: true` when the cap was hit. Leave it unset in development if you want every error at once.\n\nA body-size limit (Fastify's `bodyLimit`) and a parse-boundary depth cap in an `onRequest` / `preValidation` hook, applied before the request reaches the validator, are backstops for nesting the validator never traverses (fields the schema doesn't descend into); see [Guarding against deeply nested payloads](https://github.com/aahoughton/oav/blob/main/docs/configuration.md#guarding-against-deeply-nested-payloads).\n\n## Mount point: `preValidation`\n\nFastify runs hooks in a fixed order:\n\n1. `onRequest`: request parsing not yet done\n2. `preParsing`: about to parse the body\n3. `preValidation`: body parsed; **this is where oav runs**\n4. `validation`: Fastify's per-route schema validation\n5. `preHandler`: about to call the route handler\n6. `handler`\n\nMount on `preValidation` so oav sees the parsed body. If you also have per-route Fastify schemas declared, Fastify's own validation runs in step 4 (after this hook). Both can coexist: if oav rejects, Fastify's own validation never runs; if oav passes, Fastify's runs as usual. Authoring the same constraints in both places isn't recommended, but mixing them (oav for spec-driven validation, Fastify schemas for app-internal types) works.\n\n## API\n\n### `validateRequests(validator, options?)`\n\nReturns a Fastify `preValidationHookHandler`.\n\n| option          | type                                                        | default                  |\n| --------------- | ----------------------------------------------------------- | ------------------------ |\n| `toHttpRequest` | `(request: FastifyRequest) => HttpRequest`                  | `httpRequestFromFastify` |\n| `onError`       | `(errors: ValidationError[], ctx) => void \\| Promise<void>` | `renderProblemDetails`   |\n\n`onError` may be async; the hook awaits it. Fastify awaits the returned promise, so thrown extractor errors and rejected `onError` promises propagate to Fastify's `setErrorHandler` automatically, no `try/catch` needed. The hook does **not** call `reply.send()` after `onError` returns; your callback owns the response (write to `ctx.reply`, or throw to delegate to Fastify's error handler).\n\n> **Validation failures don't traverse Fastify's `setErrorHandler` by default.** The default `onError` (`renderProblemDetails`) writes the response directly. If you want validation failures in your existing error pipeline, throw from `onError` (Fastify routes throws to `setErrorHandler`) or compose a logger before `renderProblemDetails`; see [Add observability without changing the response](#add-observability-without-changing-the-response).\n\n### `validateResponses(validator, options?)`\n\nOpt-in `onSend` hook that validates outgoing responses against the spec. No monkey-patching: Fastify's `onSend` receives the serialized payload natively. Register it where you want response checking, conventionally on in development and off in production:\n\n```ts\nimport { validateResponses } from \"@aahoughton/oav-fastify\";\n\nif (process.env.NODE_ENV !== \"production\") {\n  app.addHook(\"onSend\", validateResponses(validator));\n}\n```\n\n| option          | type                                                        | default                         |\n| --------------- | ----------------------------------------------------------- | ------------------------------- |\n| `toHttpRequest` | `(request: FastifyRequest) => HttpRequest`                  | `httpRequestFromFastify`        |\n| `statuses`      | `(status: number) => boolean`                               | validate every status           |\n| `onError`       | `(errors: ValidationError[], ctx) => void \\| Promise<void>` | throw `ResponseValidationError` |\n\nThe default `onError` throws a `ResponseValidationError` (routed to `setErrorHandler`, since a non-conforming response is a server bug). Return normally from a custom `onError` to log-and-continue: the original payload is sent unchanged. Every declared status is checked by default (4xx / 5xx too); an undeclared status is itself a finding.\n\nStatus and declared headers are checked for every reply, regardless of media type: a 204, a redirect, or a text error page still has a status the spec may not declare and headers it may require, and those checks don't depend on the body. The body is validated only when the payload is a parseable JSON string. Buffers, streams, non-JSON content types, and malformed JSON pass their bodies through untouched (status and headers still checked). A missing body is not itself a finding by default, since OpenAPI declares response content without a required flag; build the validator with `requireResponseBody: true` (see `ValidatorOptions`) to make it one (HEAD and 204 / 205 / 304 stay exempt). With that flag on, the pass-through cases above also count as absent, since the hook hands the validator a body only when the payload parsed as JSON.\n\n### `httpRequestFromFastify(request)`\n\nConvert a `FastifyRequest` to oav's framework-agnostic `HttpRequest` shape. Read what's already on the request; body parsing is Fastify's responsibility (handled by content-type parsers before `preValidation`).\n\nHeader keys passed through (Fastify already lowercases per HTTP spec), path stripped of query string from `request.url`, query taken from `request.query` (Fastify parses it into an object), cookies read from `request.cookies` if `@fastify/cookie` populated them.\n\n**Returns a fresh `HttpRequest`.** Top-level fields can be reassigned freely without affecting the original `FastifyRequest`; safe to spread (`{ ...httpRequestFromFastify(req), body: {} }`) or mutate in place.\n\nUse this when you want to compose your own hook (e.g. validate inside a custom plugin) without re-implementing the extraction.\n\n### `renderProblemDetails(errors, ctx)`\n\nThe default `onError`. Takes the flat list of failing leaves and writes\nan RFC 9457 `application/problem+json` body (via `toProblemDetails`),\nstatus from `httpStatusFor`, `Allow` header from `allowHeaderFor` on 405.\n`onError` receives the same leaf list whatever `output` the validator\nuses (a tree validator's result is flattened first).\n\nExported standalone so a custom `onError` can call it as the fallback path:\n\n```ts\nvalidateRequests(validator, {\n  onError: (errors, ctx) => {\n    if (errors.some((e) => e.code === \"security\")) return ctx.reply.code(401).send();\n    renderProblemDetails(errors, ctx);\n  },\n});\n```\n\n## Common patterns\n\n### Enable shape-only security checks (no auth middleware yet)\n\n`ValidatorOptions.validateSecurity` is off by default; real apps run auth middleware (or hooks) upstream of the validator. During early dev (no auth wired yet) or with decorator-only auth that just attaches `request.user`, opt in:\n\n```ts\nconst validator = createValidator(spec, { validateSecurity: \"shape\" });\napp.addHook(\"preValidation\", validateRequests(validator));\n```\n\nThe check is shape-only: it confirms the declared credential is _present_, not that it's _valid_. Don't treat it as a substitute for auth middleware.\n\n### Custom error envelope\n\n```ts\napp.addHook(\n  \"preValidation\",\n  validateRequests(validator, {\n    onError: (errors, ctx) => {\n      ctx.reply.code(httpStatusFor(errors)).send({\n        message: `${errors.length} validation error(s)`,\n        errors: collectIssues(errors),\n      });\n    },\n  }),\n);\n```\n\n### Forward to Fastify's `setErrorHandler`\n\nThrow from `onError`; Fastify routes thrown errors to `setErrorHandler`:\n\n```ts\napp.addHook(\n  \"preValidation\",\n  validateRequests(validator, {\n    onError: (errors) => {\n      throw new ValidationFailure(errors);\n    },\n  }),\n);\n\napp.setErrorHandler((err, _request, reply) => {\n  if (err instanceof ValidationFailure) {\n    reply.code(422).send({ ... });\n    return;\n  }\n  // ... your existing error handler\n});\n```\n\n### Add observability without changing the response\n\nValidation failures don't reach your registered `setErrorHandler` by default (the hook terminates the request itself). To log every failure while keeping the default problem-details response, compose `renderProblemDetails` after your log call:\n\n```ts\napp.addHook(\n  \"preValidation\",\n  validateRequests(validator, {\n    onError: (errors, ctx) => {\n      log.warn(\"validation failed\", { url: ctx.request.url, codes: errors.map((e) => e.code) });\n      renderProblemDetails(errors, ctx);\n    },\n  }),\n);\n```\n\nUse this whenever your existing error pipeline (Sentry, structured logger, request-id correlation) needs to see validation failures without changing the response shape.\n\n### Async `onError` (remote logging, dynamic config)\n\n```ts\napp.addHook(\n  \"preValidation\",\n  validateRequests(validator, {\n    onError: async (errors, ctx) => {\n      await sentry.captureException(errors);\n      renderProblemDetails(errors, ctx);\n    },\n  }),\n);\n```\n\nThe hook awaits the returned promise; rejections propagate to Fastify's `setErrorHandler`.\n\n### Coexisting with Fastify per-route schemas\n\nFastify's idiomatic per-route-schema pattern is independent of oav. The two can coexist in the same app:\n\n- Use **oav-fastify** when the OpenAPI spec is the source of truth, for endpoints whose contract is published / contract-tested / shared with other languages or services.\n- Use **Fastify per-route schemas** for app-internal types where you'd rather author the schema inline.\n\nIf both fire on the same route, oav's `preValidation` hook runs first; if it passes, Fastify's `validation` step runs next. Don't author the same constraints in both places.\n\n### Comparison with `fastify-openapi-glue`\n\n[`fastify-openapi-glue`](https://www.npmjs.com/package/fastify-openapi-glue) reads an OpenAPI spec at startup and **generates routes + handler stubs from it**. oav-fastify is a different shape: it validates against the spec while leaving route declarations in your app. Use `fastify-openapi-glue` if you want spec-driven scaffolding; use oav-fastify if your routes already exist and you want OpenAPI as the validation source of truth.\n\n## See also\n\n- [`oav-core`](https://www.npmjs.com/package/@aahoughton/oav-core): `createValidator`, `ValidatorOptions`, `formatSummary`, `collectIssues`, `httpStatusFor`, `toProblemDetails`.\n- [`oav`](https://www.npmjs.com/package/@aahoughton/oav): oav-core plus YAML readers and the `oav` CLI.\n- The repo-root `docs/integration.md`: broader recipes (security, file uploads, response validation, status mapping, type coercion, ignoring paths).\n- The repo-root `docs/migration-from-eov.md`: porting from `express-openapi-validator`.\n","readmeFilename":"README.md"}