{"_id":"@remix-run/node-fetch-server","_rev":"16-77e026d172c6d55a2cfc5cead5ccdc07","name":"@remix-run/node-fetch-server","dist-tags":{"latest":"0.14.2"},"versions":{"0.8.0":{"name":"@remix-run/node-fetch-server","version":"0.8.0","keywords":["http","server","request","response","fetch","web"],"author":{"name":"Michael Jackson","email":"mjijackson@gmail.com"},"license":"MIT","_id":"@remix-run/node-fetch-server@0.8.0","maintainers":[{"name":"mjackson","email":"mjijackson+npm@gmail.com"},{"name":"chancestrickland","email":"hi@chance.dev"}],"homepage":"https://github.com/remix-run/remix/tree/v3/packages/node-fetch-server#readme","bugs":{"url":"https://github.com/remix-run/remix/issues"},"dist":{"shasum":"e95aa0d205acc1dbe1e408667a43c654248d78dd","tarball":"https://registry.npmjs.org/@remix-run/node-fetch-server/-/node-fetch-server-0.8.0.tgz","fileCount":19,"integrity":"sha512-8/sKegb4HrM6IdcQeU0KPhj9VOHm5SUqswJDHuMCS3mwbr/NRx078QDbySmn0xslahvvZoOENd7EnK40kWKxkg==","signatures":[{"sig":"MEQCICbiT8G+Z7d3LASH4095mXxSFswhdiV6Fckd1ZTwZ9EvAiASyHOWeTPvY6c+F5eDEnQ6q5FhyxYj2iLxTLp1dKUOrQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":61089},"main":"./dist/node-fetch-server.cjs","type":"module","_from":"file:remix-run-node-fetch-server-0.8.0.tgz","types":"./dist/node-fetch-server.d.ts","module":"./dist/node-fetch-server.js","exports":{".":{"types":"./dist/node-fetch-server.d.ts","import":"./dist/node-fetch-server.js","default":"./dist/node-fetch-server.js","require":"./dist/node-fetch-server.cjs"},"./package.json":"./package.json"},"scripts":{"test":"node --disable-warning=ExperimentalWarning --test ./src/**/*.test.ts","bench":"bash ./bench/runner.sh","build":"pnpm run build:types && pnpm run build:esm && pnpm run build:cjs","clean":"rm -rf dist","build:cjs":"esbuild src/node-fetch-server.ts --bundle --outfile=dist/node-fetch-server.cjs --format=cjs --platform=node --sourcemap","build:esm":"esbuild src/node-fetch-server.ts --bundle --outfile=dist/node-fetch-server.js --format=esm --platform=node --sourcemap","build:types":"tsc --project tsconfig.build.json"},"_npmUser":{"name":"mjackson","email":"mjijackson+npm@gmail.com"},"_resolved":"/private/var/folders/n5/1lxhnzk56hg6b7vnl558364m0000gn/T/d7221137867f120152a48788a038dd02/remix-run-node-fetch-server-0.8.0.tgz","_integrity":"sha512-8/sKegb4HrM6IdcQeU0KPhj9VOHm5SUqswJDHuMCS3mwbr/NRx078QDbySmn0xslahvvZoOENd7EnK40kWKxkg==","repository":{"url":"git+https://github.com/remix-run/remix.git","type":"git","directory":"packages/node-fetch-server"},"_npmVersion":"11.4.2","description":"Build servers for Node.js using the web fetch API","directories":{},"_nodeVersion":"24.2.0","_hasShrinkwrap":false,"devDependencies":{"esbuild":"^0.20.2","@types/node":"^22.5.0"},"_npmOperationalInternal":{"tmp":"tmp/node-fetch-server_0.8.0_1753386489109_0.8055723971419422","host":"s3://npm-registry-packages-npm-production"}},"0.8.1":{"name":"@remix-run/node-fetch-server","version":"0.8.1","keywords":["http","server","request","response","fetch","web"],"author":{"name":"Michael Jackson","email":"mjijackson@gmail.com"},"license":"MIT","_id":"@remix-run/node-fetch-server@0.8.1","maintainers":[{"name":"mjackson","email":"mjijackson+npm@gmail.com"}],"homepage":"https://github.com/remix-run/remix/tree/main/packages/node-fetch-server#readme","bugs":{"url":"https://github.com/remix-run/remix/issues"},"dist":{"shasum":"094f2324c0c93d530c3addb279247f396727e86a","tarball":"https://registry.npmjs.org/@remix-run/node-fetch-server/-/node-fetch-server-0.8.1.tgz","fileCount":19,"integrity":"sha512-J1dev372wtJqmqn9U/qbpbZxbJSQrogNN2+Qv1lKlpATpe/WQ9aCZfl/xSb9d2Rgh1IyLSvNxZAXPZxruO6Xig==","signatures":[{"sig":"MEUCIQDyc7lZz69IS3bE3zX6T3cmZYaFmfubv+BRPfTG3eXU4wIgDaUdkf4fpiiEskAZMitIBfE6mQgG55OtvTbB4JdrsA0=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":61591},"main":"./dist/index.cjs","type":"module","_from":"file:remix-run-node-fetch-server-0.8.1.tgz","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","default":"./dist/index.js","require":"./dist/index.cjs"},"./package.json":"./package.json"},"scripts":{"test":"node --disable-warning=ExperimentalWarning --test ./src/**/*.test.ts","bench":"bash ./bench/runner.sh","build":"pnpm run build:types && pnpm run build:esm && pnpm run build:cjs","clean":"rm -rf dist","build:cjs":"esbuild src/index.ts --bundle --outfile=dist/index.cjs --format=cjs --platform=node --sourcemap","build:esm":"esbuild src/index.ts --bundle --outfile=dist/index.js --format=esm --platform=node --sourcemap","typecheck":"tsc --noEmit","build:types":"tsc --project tsconfig.build.json"},"_npmUser":{"name":"mjackson","email":"mjijackson+npm@gmail.com"},"_resolved":"/tmp/5955a47bfb2dcd6d788150c2debaaaf7/remix-run-node-fetch-server-0.8.1.tgz","_integrity":"sha512-J1dev372wtJqmqn9U/qbpbZxbJSQrogNN2+Qv1lKlpATpe/WQ9aCZfl/xSb9d2Rgh1IyLSvNxZAXPZxruO6Xig==","repository":{"url":"git+https://github.com/remix-run/remix.git","type":"git","directory":"packages/node-fetch-server"},"_npmVersion":"11.6.0","description":"Build servers for Node.js using the web fetch API","directories":{},"_nodeVersion":"24.8.0","_hasShrinkwrap":false,"devDependencies":{"esbuild":"^0.20.2","@types/node":"^22.5.0"},"_npmOperationalInternal":{"tmp":"tmp/node-fetch-server_0.8.1_1757631869534_0.6237048697296459","host":"s3://npm-registry-packages-npm-production"}},"0.9.0":{"name":"@remix-run/node-fetch-server","version":"0.9.0","keywords":["http","server","request","response","fetch","web"],"author":{"name":"Michael Jackson","email":"mjijackson@gmail.com"},"license":"MIT","_id":"@remix-run/node-fetch-server@0.9.0","maintainers":[{"name":"mjackson","email":"mjijackson+npm@gmail.com"}],"homepage":"https://github.com/remix-run/remix/tree/main/packages/node-fetch-server#readme","bugs":{"url":"https://github.com/remix-run/remix/issues"},"dist":{"shasum":"4f881ad0c9019a37471e98fd25815c2d7f4b12fb","tarball":"https://registry.npmjs.org/@remix-run/node-fetch-server/-/node-fetch-server-0.9.0.tgz","fileCount":19,"integrity":"sha512-SoLMv7dbH+njWzXnOY6fI08dFMI5+/dQ+vY3n8RnnbdG7MdJEgiP28Xj/xWlnRnED/aB6SFw56Zop+LbmaaKqA==","signatures":[{"sig":"MEUCIA0cADOTwwyula5/vhKuW1tNtt5NxnFLtRRmATme0B/BAiEAiJS8RQFZPSLV+zHAssU7SfNVoJPqEmBFDRG2hgyugKw=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":63516},"main":"./dist/index.cjs","type":"module","_from":"file:remix-run-node-fetch-server-0.9.0.tgz","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","default":"./dist/index.js","require":"./dist/index.cjs"},"./package.json":"./package.json"},"scripts":{"test":"node --disable-warning=ExperimentalWarning --test ./src/**/*.test.ts","bench":"bash ./bench/runner.sh","build":"pnpm run build:types && pnpm run build:esm && pnpm run build:cjs","clean":"rm -rf dist","build:cjs":"esbuild src/index.ts --bundle --outfile=dist/index.cjs --format=cjs --platform=node --sourcemap","build:esm":"esbuild src/index.ts --bundle --outfile=dist/index.js --format=esm --platform=node --sourcemap","typecheck":"tsc --noEmit","build:types":"tsc --project tsconfig.build.json"},"_npmUser":{"name":"mjackson","email":"mjijackson+npm@gmail.com"},"_resolved":"/tmp/80a406b66a02a8a87a7695a547981dc6/remix-run-node-fetch-server-0.9.0.tgz","_integrity":"sha512-SoLMv7dbH+njWzXnOY6fI08dFMI5+/dQ+vY3n8RnnbdG7MdJEgiP28Xj/xWlnRnED/aB6SFw56Zop+LbmaaKqA==","repository":{"url":"git+https://github.com/remix-run/remix.git","type":"git","directory":"packages/node-fetch-server"},"_npmVersion":"11.6.0","description":"Build servers for Node.js using the web fetch API","directories":{},"_nodeVersion":"24.8.0","_hasShrinkwrap":false,"devDependencies":{"esbuild":"^0.20.2","@types/node":"^22.5.0"},"_npmOperationalInternal":{"tmp":"tmp/node-fetch-server_0.9.0_1758051222803_0.8602656877686141","host":"s3://npm-registry-packages-npm-production"}},"0.10.0":{"name":"@remix-run/node-fetch-server","version":"0.10.0","keywords":["http","server","request","response","fetch","web"],"author":{"name":"Michael Jackson","email":"mjijackson@gmail.com"},"license":"MIT","_id":"@remix-run/node-fetch-server@0.10.0","maintainers":[{"name":"mjackson","email":"mjijackson+npm@gmail.com"}],"homepage":"https://github.com/remix-run/remix/tree/main/packages/node-fetch-server#readme","bugs":{"url":"https://github.com/remix-run/remix/issues"},"dist":{"shasum":"dbff45a94fa83172ee58f13bb983411469cb75f8","tarball":"https://registry.npmjs.org/@remix-run/node-fetch-server/-/node-fetch-server-0.10.0.tgz","fileCount":19,"integrity":"sha512-FmYaJHQKEPrT0UFo5KaLTmrm4F6dz5DJBzRY42H93w8FpVg5zKifNWGbH+wYsyExyWVgVrOsifS7IGFtz7HkSA==","signatures":[{"sig":"MEQCID51ZAX1+P5UzMSxcEYqAwdxp+8ZLW1j8On4NebxMnkJAiAgZsPsTykRoP1ID+fm8k/10Vi3+V2zI/JLgivYK0hSmQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":63816},"main":"./dist/index.cjs","type":"module","_from":"file:remix-run-node-fetch-server-0.10.0.tgz","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","default":"./dist/index.js","require":"./dist/index.cjs"},"./package.json":"./package.json"},"scripts":{"test":"node --disable-warning=ExperimentalWarning --test './src/**/*.test.ts'","bench":"bash ./bench/runner.sh","build":"pnpm run clean && pnpm run build:types && pnpm run build:esm && pnpm run build:cjs","clean":"rm -rf dist","build:cjs":"esbuild src/index.ts --bundle --outfile=dist/index.cjs --format=cjs --platform=node --sourcemap","build:esm":"esbuild src/index.ts --bundle --outfile=dist/index.js --format=esm --platform=node --sourcemap","typecheck":"tsc --noEmit","build:types":"tsc --project tsconfig.build.json"},"_npmUser":{"name":"mjackson","email":"mjijackson+npm@gmail.com"},"_resolved":"/tmp/05591ee2c55eb1f954b06dfe7efb508f/remix-run-node-fetch-server-0.10.0.tgz","_integrity":"sha512-FmYaJHQKEPrT0UFo5KaLTmrm4F6dz5DJBzRY42H93w8FpVg5zKifNWGbH+wYsyExyWVgVrOsifS7IGFtz7HkSA==","repository":{"url":"git+https://github.com/remix-run/remix.git","type":"git","directory":"packages/node-fetch-server"},"_npmVersion":"11.6.0","description":"Build servers for Node.js using the web fetch API","directories":{},"_nodeVersion":"24.9.0","_hasShrinkwrap":false,"devDependencies":{"esbuild":"^0.25.10","@types/node":"^24.6.0"},"_npmOperationalInternal":{"tmp":"tmp/node-fetch-server_0.10.0_1759562532785_0.7361865094305811","host":"s3://npm-registry-packages-npm-production"}},"0.11.0":{"name":"@remix-run/node-fetch-server","version":"0.11.0","keywords":["http","server","request","response","fetch","web"],"author":{"name":"Michael Jackson","email":"mjijackson@gmail.com"},"license":"MIT","_id":"@remix-run/node-fetch-server@0.11.0","maintainers":[{"name":"mjackson","email":"mjijackson+npm@gmail.com"},{"name":"ryanflorence","email":"rpflorence@gmail.com"}],"homepage":"https://github.com/remix-run/remix/tree/main/packages/node-fetch-server#readme","bugs":{"url":"https://github.com/remix-run/remix/issues"},"dist":{"shasum":"38ed524b023495a0b9299392badfe29aa12f76b3","tarball":"https://registry.npmjs.org/@remix-run/node-fetch-server/-/node-fetch-server-0.11.0.tgz","fileCount":17,"integrity":"sha512-nCrFHVxDFioSHc0g/3m5ztwgjBt7g8qh/UwmYkDjuMePKFepMKfNGgH5S6L7iXKX+jUrf3ooVmhx3NGIoa9iYA==","signatures":[{"sig":"MEUCIBZLhAyjkLXjWox8L9wzqSYitZM5tI9VzCNpB4xGgkD+AiEAtQtSp7UWZTTLvQaSfjR9j41YJnMC5SNvyQyKF888FoU=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":46155},"type":"module","_from":"file:remix-run-node-fetch-server-0.11.0.tgz","exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./package.json":"./package.json"},"scripts":{"test":"node --disable-warning=ExperimentalWarning --test './src/**/*.test.ts'","bench":"bash ./bench/runner.sh","build":"pnpm run clean && pnpm run build:types && pnpm run build:esm","clean":"rm -rf dist","build:esm":"esbuild src/index.ts --bundle --outfile=dist/index.js --format=esm --platform=node --sourcemap","typecheck":"tsc --noEmit","build:types":"tsc --project tsconfig.build.json"},"_npmUser":{"name":"mjackson","email":"mjijackson+npm@gmail.com"},"_resolved":"/tmp/6ea1a06d6b9362d708e7028fb4d7e432/remix-run-node-fetch-server-0.11.0.tgz","_integrity":"sha512-nCrFHVxDFioSHc0g/3m5ztwgjBt7g8qh/UwmYkDjuMePKFepMKfNGgH5S6L7iXKX+jUrf3ooVmhx3NGIoa9iYA==","repository":{"url":"git+https://github.com/remix-run/remix.git","type":"git","directory":"packages/node-fetch-server"},"_npmVersion":"11.6.1","description":"Build servers for Node.js using the web fetch API","directories":{},"_nodeVersion":"24.10.0","_hasShrinkwrap":false,"devDependencies":{"esbuild":"^0.25.10","@types/node":"^24.6.0"},"_npmOperationalInternal":{"tmp":"tmp/node-fetch-server_0.11.0_1761152659896_0.005859395005332058","host":"s3://npm-registry-packages-npm-production"}},"0.12.0":{"name":"@remix-run/node-fetch-server","version":"0.12.0","keywords":["http","server","request","response","fetch","web"],"author":{"name":"Michael Jackson","email":"mjijackson@gmail.com"},"license":"MIT","_id":"@remix-run/node-fetch-server@0.12.0","maintainers":[{"name":"mjackson","email":"mjijackson+npm@gmail.com"},{"name":"ryanflorence","email":"rpflorence@gmail.com"}],"homepage":"https://github.com/remix-run/remix/tree/main/packages/node-fetch-server#readme","bugs":{"url":"https://github.com/remix-run/remix/issues"},"dist":{"shasum":"a3aa689ad37baa587fe7b1d1fd0cf7f5ff95ac0d","tarball":"https://registry.npmjs.org/@remix-run/node-fetch-server/-/node-fetch-server-0.12.0.tgz","fileCount":19,"integrity":"sha512-oeg8w8aJJSuq1fCx85jCkcgTfI6On7sKwWVSO4/OW5AvTBuosAIwnuBd/LYeU/I7lYPOTW2NXhUfyfpyeexs4w==","signatures":[{"sig":"MEQCICrdDJW50zh8XRNBEL8EXWfXOGZMmnSDhW6rNrEWvxpEAiAt5EM3a0TQo2JC13xtqWvyPbE7gq6aC4s5+yXhAcdmiQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@remix-run%2fnode-fetch-server@0.12.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":37616},"type":"module","_from":"file:remix-run-node-fetch-server-0.12.0.tgz","exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./package.json":"./package.json"},"scripts":{"test":"node --disable-warning=ExperimentalWarning --test './src/**/*.test.ts'","bench":"bash ./bench/runner.sh","build":"tsc -p tsconfig.build.json","clean":"git clean -fdX","typecheck":"tsc --noEmit"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:af0d4643-f04f-459c-9754-572c166ad063"}},"_resolved":"/tmp/c5f80452480ce507cf3fcd37fced5c4b/remix-run-node-fetch-server-0.12.0.tgz","_integrity":"sha512-oeg8w8aJJSuq1fCx85jCkcgTfI6On7sKwWVSO4/OW5AvTBuosAIwnuBd/LYeU/I7lYPOTW2NXhUfyfpyeexs4w==","repository":{"url":"git+https://github.com/remix-run/remix.git","type":"git","directory":"packages/node-fetch-server"},"_npmVersion":"11.6.1","description":"Build servers for Node.js using the web fetch API","directories":{},"_nodeVersion":"24.11.0","_hasShrinkwrap":false,"devDependencies":{"@types/node":"^24.6.0"},"_npmOperationalInternal":{"tmp":"tmp/node-fetch-server_0.12.0_1762288022610_0.5933920608418048","host":"s3://npm-registry-packages-npm-production"}},"0.13.0":{"name":"@remix-run/node-fetch-server","version":"0.13.0","keywords":["http","server","request","response","fetch","web"],"author":{"name":"Michael Jackson","email":"mjijackson@gmail.com"},"license":"MIT","_id":"@remix-run/node-fetch-server@0.13.0","maintainers":[{"name":"mjackson","email":"mjijackson+npm@gmail.com"},{"name":"ryanflorence","email":"rpflorence@gmail.com"}],"homepage":"https://github.com/remix-run/remix/tree/main/packages/node-fetch-server#readme","bugs":{"url":"https://github.com/remix-run/remix/issues"},"dist":{"shasum":"93be9c2e0e6f12512be471501e3a86dda295b178","tarball":"https://registry.npmjs.org/@remix-run/node-fetch-server/-/node-fetch-server-0.13.0.tgz","fileCount":19,"integrity":"sha512-1EsNo0ZpgXu/90AWoRZf/oE3RVTUS80tiTUpt+hv5pjtAkw7icN4WskDwz/KdAw5ARbJLMhZBrO1NqThmy/McA==","signatures":[{"sig":"MEUCIBzULxbNPg6+B8YTLV05Hi2mMmSIKAE/koXHRMYysGTsAiEAtmOAP8PcMueag5Glsn0SvkOnfhl858aSlBNxHlm0Wt0=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@remix-run%2fnode-fetch-server@0.13.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":39079},"type":"module","_from":"file:remix-run-node-fetch-server-0.13.0.tgz","exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./package.json":"./package.json"},"scripts":{"test":"node --disable-warning=ExperimentalWarning --test","bench":"bash ./bench/runner.sh","build":"tsgo -p tsconfig.build.json","clean":"git clean -fdX","typecheck":"tsgo --noEmit"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:af0d4643-f04f-459c-9754-572c166ad063"}},"_resolved":"/tmp/83fc12a92b94373568112ce720db230d/remix-run-node-fetch-server-0.13.0.tgz","_integrity":"sha512-1EsNo0ZpgXu/90AWoRZf/oE3RVTUS80tiTUpt+hv5pjtAkw7icN4WskDwz/KdAw5ARbJLMhZBrO1NqThmy/McA==","repository":{"url":"git+https://github.com/remix-run/remix.git","type":"git","directory":"packages/node-fetch-server"},"_npmVersion":"11.6.2","description":"Build servers for Node.js using the web fetch API","directories":{},"_nodeVersion":"24.12.0","_hasShrinkwrap":false,"devDependencies":{"@types/node":"^24.6.0","@typescript/native-preview":"7.0.0-dev.20251125.1"},"_npmOperationalInternal":{"tmp":"tmp/node-fetch-server_0.13.0_1766081284096_0.37581650098958663","host":"s3://npm-registry-packages-npm-production"}},"0.13.1":{"name":"@remix-run/node-fetch-server","version":"0.13.1","keywords":["http","server","request","response","fetch","web"],"author":{"name":"Michael Jackson","email":"mjijackson@gmail.com"},"license":"MIT","_id":"@remix-run/node-fetch-server@0.13.1","maintainers":[{"name":"mjackson","email":"mjijackson+npm@gmail.com"}],"homepage":"https://github.com/remix-run/remix/tree/main/packages/node-fetch-server#readme","bugs":{"url":"https://github.com/remix-run/remix/issues"},"dist":{"shasum":"e45a9d0823bbb6f8819518970bc4b51da900b728","tarball":"https://registry.npmjs.org/@remix-run/node-fetch-server/-/node-fetch-server-0.13.1.tgz","fileCount":35,"integrity":"sha512-dOL+A/C84EA47gO/ps52KGrVSiYy96512rwtbXmJfWKYFm1FbrbjA3jao1hcIfao+jwVNEaZ1kTMwFjiino+HQ==","signatures":[{"sig":"MEUCIB+TZuWcgQoOoZpVVXBwmQ7/MAjohW9rOvozAkBOFZVGAiEA3fuIr7blea+g3wXpJJcXV0RM04J7Reh2e7rlMFN9lGQ=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@remix-run%2fnode-fetch-server@0.13.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":81295},"type":"module","_from":"file:remix-run-node-fetch-server-0.13.1.tgz","exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./test":{"types":"./dist/test.d.ts","default":"./dist/test.js"},"./package.json":"./package.json"},"scripts":{"test":"node --disable-warning=ExperimentalWarning --test './src/**/*.test.ts'","bench":"bash ./bench/runner.sh","build":"tsgo -p tsconfig.build.json","clean":"git clean -fdX","typecheck":"tsgo --noEmit","bench:typecheck":"tsgo --noEmit -p ./bench/tsconfig.json","bench:update-readme":"node ./bench/update-readme.ts"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:af0d4643-f04f-459c-9754-572c166ad063"}},"_resolved":"/tmp/47f9bdea0d942eb1a6908a678a55e644/remix-run-node-fetch-server-0.13.1.tgz","_integrity":"sha512-dOL+A/C84EA47gO/ps52KGrVSiYy96512rwtbXmJfWKYFm1FbrbjA3jao1hcIfao+jwVNEaZ1kTMwFjiino+HQ==","repository":{"url":"git+https://github.com/remix-run/remix.git","type":"git","directory":"packages/node-fetch-server"},"_npmVersion":"11.11.0","description":"Build servers for Node.js using the web fetch API","directories":{},"_nodeVersion":"24.14.1","_hasShrinkwrap":false,"devDependencies":{"@types/node":"^24.6.0","@typescript/native-preview":"7.0.0-dev.20251125.1"},"_npmOperationalInternal":{"tmp":"tmp/node-fetch-server_0.13.1_1777576233082_0.366746499444218","host":"s3://npm-registry-packages-npm-production"}},"0.13.2":{"name":"@remix-run/node-fetch-server","version":"0.13.2","keywords":["http","server","request","response","fetch","web"],"author":{"name":"Michael Jackson","email":"mjijackson@gmail.com"},"license":"MIT","_id":"@remix-run/node-fetch-server@0.13.2","maintainers":[{"name":"mjackson","email":"mjijackson+npm@gmail.com"}],"homepage":"https://github.com/remix-run/remix/tree/main/packages/node-fetch-server#readme","bugs":{"url":"https://github.com/remix-run/remix/issues"},"dist":{"shasum":"4a7a07632e049c520e28d40af1ef9b69c9e3b236","tarball":"https://registry.npmjs.org/@remix-run/node-fetch-server/-/node-fetch-server-0.13.2.tgz","fileCount":35,"integrity":"sha512-gPux086JQjK3PmYWe75unUXKRMsJjdxKs+lW46gg2B/vvSPRRoOdWriVUPktIXYd1Uglq1PTjGW/fWPuslSfag==","signatures":[{"sig":"MEQCIELL4rdWFpMquxR1/U4O4z8xDpJApIyYGOHjOT6Que80AiB93xV8OYwh2/AAmSXcULe99cmp3gz4ubGu6yqUoaoqJg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@remix-run%2fnode-fetch-server@0.13.2","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":80444},"type":"module","_from":"file:remix-run-node-fetch-server-0.13.2.tgz","exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./test":{"types":"./dist/test.d.ts","default":"./dist/test.js"},"./package.json":"./package.json"},"scripts":{"test":"node --disable-warning=ExperimentalWarning --test './src/**/*.test.ts'","bench":"bash ./bench/runner.sh","build":"tsgo -p tsconfig.build.json","clean":"git clean -fdX","typecheck":"tsgo --noEmit","bench:typecheck":"tsgo --noEmit -p ./bench/tsconfig.json","bench:update-readme":"node ./bench/update-readme.ts"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:af0d4643-f04f-459c-9754-572c166ad063"}},"_resolved":"/tmp/42e092373632e871e502f1ee310b177d/remix-run-node-fetch-server-0.13.2.tgz","_integrity":"sha512-gPux086JQjK3PmYWe75unUXKRMsJjdxKs+lW46gg2B/vvSPRRoOdWriVUPktIXYd1Uglq1PTjGW/fWPuslSfag==","repository":{"url":"git+https://github.com/remix-run/remix.git","type":"git","directory":"packages/node-fetch-server"},"_npmVersion":"11.12.1","description":"Build servers for Node.js using the web fetch API","directories":{},"_nodeVersion":"24.15.0","_hasShrinkwrap":false,"devDependencies":{"@types/node":"^24.6.0","@typescript/native-preview":"7.0.0-dev.20251125.1"},"_npmOperationalInternal":{"tmp":"tmp/node-fetch-server_0.13.2_1779246181821_0.14325683182786086","host":"s3://npm-registry-packages-npm-production"}},"0.13.3":{"name":"@remix-run/node-fetch-server","version":"0.13.3","keywords":["http","server","request","response","fetch","web"],"author":{"name":"Michael Jackson","email":"mjijackson@gmail.com"},"license":"MIT","_id":"@remix-run/node-fetch-server@0.13.3","maintainers":[{"name":"mjackson","email":"mjijackson+npm@gmail.com"}],"homepage":"https://github.com/remix-run/remix/tree/main/packages/node-fetch-server#readme","bugs":{"url":"https://github.com/remix-run/remix/issues"},"dist":{"shasum":"33105c8e32b0bcc99755b7ed6d641195ca2cd1c2","tarball":"https://registry.npmjs.org/@remix-run/node-fetch-server/-/node-fetch-server-0.13.3.tgz","fileCount":35,"integrity":"sha512-UfjOXed/DQteaM5VyTfqTeGpHwyL2J5aoRGY6cydip4tt1ehNNeSwuXCC7AEGE0RWBs/7bgKxYkL/B/+UDe4AA==","signatures":[{"sig":"MEUCIQC6I0EQ0JaOQfJAfOiKthFWkLcxlshFUHP2Vxl/bF3NCwIgeM1NlhKW/7wOg2Y7rUKvW0/AJuU95gwQnUwTCyIt6Zo=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@remix-run%2fnode-fetch-server@0.13.3","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":84137},"type":"module","_from":"file:remix-run-node-fetch-server-0.13.3.tgz","exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./test":{"types":"./dist/test.d.ts","default":"./dist/test.js"},"./package.json":"./package.json"},"scripts":{"test":"node --disable-warning=ExperimentalWarning --test './src/**/*.test.ts'","bench":"bash ./bench/runner.sh","build":"tsgo -p tsconfig.build.json","clean":"git clean -fdX","typecheck":"tsgo --noEmit","bench:typecheck":"tsgo --noEmit -p ./bench/tsconfig.json","bench:update-readme":"node ./bench/update-readme.ts"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:af0d4643-f04f-459c-9754-572c166ad063"}},"_resolved":"/tmp/b6cd10ecd2bdf9a27a1bbbf1b927dd42/remix-run-node-fetch-server-0.13.3.tgz","_integrity":"sha512-UfjOXed/DQteaM5VyTfqTeGpHwyL2J5aoRGY6cydip4tt1ehNNeSwuXCC7AEGE0RWBs/7bgKxYkL/B/+UDe4AA==","repository":{"url":"git+https://github.com/remix-run/remix.git","type":"git","directory":"packages/node-fetch-server"},"_npmVersion":"11.12.1","description":"Build servers for Node.js using the web fetch API","directories":{},"_nodeVersion":"24.15.0","_hasShrinkwrap":false,"devDependencies":{"@types/node":"^24.6.0","@typescript/native-preview":"7.0.0-dev.20251125.1"},"_npmOperationalInternal":{"tmp":"tmp/node-fetch-server_0.13.3_1779308176546_0.5739368400599139","host":"s3://npm-registry-packages-npm-production"}},"0.14.0":{"name":"@remix-run/node-fetch-server","version":"0.14.0","keywords":["http","server","request","response","fetch","web"],"author":{"name":"Michael Jackson","email":"mjijackson@gmail.com"},"license":"MIT","_id":"@remix-run/node-fetch-server@0.14.0","maintainers":[{"name":"mjackson","email":"mjijackson+npm@gmail.com"}],"homepage":"https://github.com/remix-run/remix/tree/main/packages/node-fetch-server#readme","bugs":{"url":"https://github.com/remix-run/remix/issues"},"dist":{"shasum":"1b4d2f2db2d7b1c5d20065a5a4dc2920245f0b20","tarball":"https://registry.npmjs.org/@remix-run/node-fetch-server/-/node-fetch-server-0.14.0.tgz","fileCount":39,"integrity":"sha512-s46HS2YuZwCJxwXIrcWdKTfIXWf2G2S20bXeYR2BqBoUkmc4RSiC+VRely6pqNvSUIio8piaI+uLN40IvoFN/A==","signatures":[{"sig":"MEQCIE+9Y3Cw0JA/GNIoEVSJ6BCjSADWLuwWuMYaqKn9mQz9AiB7obL2dzos8pJJgaLLSiesPs8XyJvEcxFFDL6kWu4l9w==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@remix-run%2fnode-fetch-server@0.14.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":116005},"type":"module","_from":"file:remix-run-node-fetch-server-0.14.0.tgz","exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./test":{"types":"./dist/test.d.ts","default":"./dist/test.js"},"./package.json":"./package.json"},"scripts":{"test":"node --disable-warning=ExperimentalWarning --test './src/**/*.test.ts'","bench":"bash ./bench/runner.sh","build":"tsgo -p tsconfig.build.json","clean":"git clean -fdX","typecheck":"tsgo --noEmit","bench:typecheck":"tsgo --noEmit -p ./bench/tsconfig.json","bench:update-readme":"node ./bench/update-readme.ts"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:af0d4643-f04f-459c-9754-572c166ad063"}},"_resolved":"/tmp/0d6d33dec35a543785931a2fba21a29e/remix-run-node-fetch-server-0.14.0.tgz","_integrity":"sha512-s46HS2YuZwCJxwXIrcWdKTfIXWf2G2S20bXeYR2BqBoUkmc4RSiC+VRely6pqNvSUIio8piaI+uLN40IvoFN/A==","repository":{"url":"git+https://github.com/remix-run/remix.git","type":"git","directory":"packages/node-fetch-server"},"_npmVersion":"11.13.0","description":"Build servers for Node.js using the web fetch API","directories":{},"_nodeVersion":"24.17.0","_hasShrinkwrap":false,"devDependencies":{"@types/node":"^24.6.0","@typescript/native-preview":"7.0.0-dev.20251125.1"},"_npmOperationalInternal":{"tmp":"tmp/node-fetch-server_0.14.0_1782932488315_0.5478688753218595","host":"s3://npm-registry-packages-npm-production"}},"0.14.1":{"name":"@remix-run/node-fetch-server","version":"0.14.1","keywords":["http","server","request","response","fetch","web"],"author":{"name":"Michael Jackson","email":"mjijackson@gmail.com"},"license":"MIT","_id":"@remix-run/node-fetch-server@0.14.1","maintainers":[{"name":"mjackson","email":"mjijackson+npm@gmail.com"}],"homepage":"https://github.com/remix-run/remix/tree/main/packages/node-fetch-server#readme","bugs":{"url":"https://github.com/remix-run/remix/issues"},"dist":{"shasum":"3c843ff1622dbce1f7836d3f78967ad519a3b4f5","tarball":"https://registry.npmjs.org/@remix-run/node-fetch-server/-/node-fetch-server-0.14.1.tgz","fileCount":31,"integrity":"sha512-pKenF5ysIN5lDCnCyvoUxDhKP0tfnGagvGbZh01xxHG6DJXSIXWVC9NpLSDGjxcxd1CKdCOKuZFleXBF3pChIg==","signatures":[{"sig":"MEQCIAYcGGHUu3+2Vz6YKKSxzSC8kggjA/iJLHGDJJMVNC76AiB8ZbVC/ZQYOXFqjS2Gml8107IVBEBZ67ZMwPoppEzPrg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIQC1RfaA+1bBZDCJoi4SnYNZ756l6kkRFbJjIP/kdkOQPgIgJrefD650dUFuBgKn/0whrsYTj0itQWDQM0vc7J8R9RY=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@remix-run%2fnode-fetch-server@0.14.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":79774},"type":"module","_from":"file:remix-run-node-fetch-server-0.14.1.tgz","exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./test":{"types":"./dist/test.d.ts","default":"./dist/test.js"},"./package.json":"./package.json"},"scripts":{"test":"node --disable-warning=ExperimentalWarning --test './src/**/*.test.ts'","bench":"bash ./bench/runner.sh","build":"tsc -p tsconfig.build.json","clean":"git clean -fdX","typecheck":"tsc --noEmit","bench:typecheck":"tsc --noEmit -p ./bench/tsconfig.json","bench:update-readme":"node ./bench/update-readme.ts"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:af0d4643-f04f-459c-9754-572c166ad063"}},"_resolved":"/tmp/871557971a6c1acb2e87ba9896747cb5/remix-run-node-fetch-server-0.14.1.tgz","_integrity":"sha512-pKenF5ysIN5lDCnCyvoUxDhKP0tfnGagvGbZh01xxHG6DJXSIXWVC9NpLSDGjxcxd1CKdCOKuZFleXBF3pChIg==","repository":{"url":"git+https://github.com/remix-run/remix.git","type":"git","directory":"packages/node-fetch-server"},"_npmVersion":"11.16.0","description":"Build servers for Node.js using the web fetch API","directories":{},"_nodeVersion":"24.18.0","_hasShrinkwrap":false,"devDependencies":{"typescript":"^7.0.2","@types/node":"^24.6.0"},"_npmOperationalInternal":{"tmp":"tmp/node-fetch-server_0.14.1_1786666239678_0.13333658282593297","host":"s3://npm-registry-packages-npm-production"}},"0.14.2":{"_id":"@remix-run/node-fetch-server@0.14.2","bugs":{"url":"https://github.com/remix-run/remix/issues"},"dist":{"shasum":"a5d27e3b80dbaf2a421ceaeaa3eb6a8b55aa6357","tarball":"https://registry.npmjs.org/@remix-run/node-fetch-server/-/node-fetch-server-0.14.2.tgz","fileCount":31,"integrity":"sha512-1cpM/f5i1ka/9CUMBwZXZp7Bn92x8VQjzg+F4eEe88DlVdNHkAKrf/vvbZoYgdkfy2bWHtGC6LQGLmojEqOF4Q==","signatures":[{"sig":"MEUCIHorqz37/Doeq3Ah+7gg0DYrdys52qfijm2DzHxOgewCAiEAgRMSEeQ6Znf8Sfri18usBSzOn7RRAijd26O/jQHa1/o=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIQD03zPxCPQtcjUHfqh1OnXXtPa4b7WQxgl7Fmt1bdiMmAIgKoV1s6pO+l3E5e5jDV91Y3PabXHRw6r3Vm/sa795f3A="}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@remix-run%2fnode-fetch-server@0.14.2","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":82983},"name":"@remix-run/node-fetch-server","type":"module","_from":"file:/tmp/remix-publish-node-fetch-server-UVkVW0/remix-run-node-fetch-server-0.14.2.tgz","author":{"name":"Michael Jackson","email":"mjijackson@gmail.com"},"exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./test":{"types":"./dist/test.d.ts","default":"./dist/test.js"},"./package.json":"./package.json"},"license":"MIT","scripts":{"test":"node --disable-warning=ExperimentalWarning --test './src/**/*.test.ts'","bench":"bash ./bench/runner.sh","build":"tsc -p tsconfig.build.json","clean":"git clean -fdX","typecheck":"tsc --noEmit","bench:typecheck":"tsc --noEmit -p ./bench/tsconfig.json","bench:update-readme":"node ./bench/update-readme.ts"},"version":"0.14.2","_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"af0d4643-f04f-459c-9754-572c166ad063"}},"homepage":"https://github.com/remix-run/remix/tree/main/packages/node-fetch-server#readme","keywords":["http","server","request","response","fetch","web"],"_resolved":"/tmp/remix-publish-node-fetch-server-UVkVW0/remix-run-node-fetch-server-0.14.2.tgz","_integrity":"sha512-1cpM/f5i1ka/9CUMBwZXZp7Bn92x8VQjzg+F4eEe88DlVdNHkAKrf/vvbZoYgdkfy2bWHtGC6LQGLmojEqOF4Q==","repository":{"url":"git+https://github.com/remix-run/remix.git","type":"git","directory":"packages/node-fetch-server"},"_npmVersion":"11.19.0","description":"Build servers for Node.js using the web fetch API","directories":{},"maintainers":[{"name":"mjackson","email":"mjijackson+npm@gmail.com"}],"sideEffects":false,"_nodeVersion":"24.21.0","_hasShrinkwrap":false,"devDependencies":{"typescript":"^7.0.2","@types/node":"^24.6.0"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/node-fetch-server_0.14.2_1790631736571_0.5810131012104074"}}},"time":{"created":"2025-07-24T19:48:08.967Z","modified":"2026-09-28T21:42:16.976Z","0.8.0":"2025-07-24T19:48:09.287Z","0.8.1":"2025-09-11T23:04:29.745Z","0.9.0":"2025-09-16T19:33:43.043Z","0.10.0":"2025-10-04T07:22:13.004Z","0.11.0":"2025-10-22T17:04:20.155Z","0.12.0":"2025-11-04T20:27:02.791Z","0.13.0":"2025-12-18T18:08:04.257Z","0.13.1":"2026-04-30T19:10:33.226Z","0.13.2":"2026-05-20T03:03:02.046Z","0.13.3":"2026-05-20T20:16:16.675Z","0.14.0":"2026-07-01T19:01:28.452Z","0.14.1":"2026-08-14T00:10:39.763Z","0.14.2":"2026-09-28T21:42:16.647Z"},"bugs":{"url":"https://github.com/remix-run/remix/issues"},"author":{"name":"Michael Jackson","email":"mjijackson@gmail.com"},"license":"MIT","homepage":"https://github.com/remix-run/remix/tree/main/packages/node-fetch-server#readme","keywords":["http","server","request","response","fetch","web"],"repository":{"url":"git+https://github.com/remix-run/remix.git","type":"git","directory":"packages/node-fetch-server"},"description":"Build servers for Node.js using the web fetch API","maintainers":[{"name":"mjackson","email":"mjijackson+npm@gmail.com"}],"readme":"# node-fetch-server\n\nBuild Node.js servers with web-standard Fetch API primitives. `node-fetch-server` converts Node's HTTP server interfaces into [`Request`](https://developer.mozilla.org/en-US/docs/Web/API/Request)/[`Response`](https://developer.mozilla.org/en-US/docs/Web/API/Response) flows that match modern runtimes.\n\n## Features\n\n- **Web Standards** - Standard [`Request`](https://developer.mozilla.org/en-US/docs/Web/API/Request) and [`Response`](https://developer.mozilla.org/en-US/docs/Web/API/Response) APIs\n- **Node.js HTTP Integration** - Works directly with `node:http`, `node:https`, and `node:http2`\n- **Streaming Support** - Response support with `ReadableStream`\n- **Custom Hostname** - Configuration for deployment flexibility\n- **Proxy Header Support** - Opt in to trusted `Forwarded`, `X-Forwarded-Host`, `X-Forwarded-Proto`, and `X-Forwarded-For` headers\n- **Client Info** - Access to client connection info (IP address, port, and trusted proxy address)\n- **TypeScript** - Full TypeScript support with type definitions\n\n## Installation\n\n```sh\nnpm i remix\n```\n\n## Usage\n\nUse `createRequestListener()` when you want to plug a fetch handler into a standard Node.js server:\n\n```ts\nimport * as http from 'node:http'\nimport { createRequestListener } from 'remix/node-fetch-server'\n\nasync function handler(request: Request) {\n  let url = new URL(request.url)\n\n  if (url.pathname === '/' && request.method === 'GET') {\n    return new Response('Welcome to the User API! Try GET /api/users')\n  }\n\n  if (url.pathname === '/api/users' && request.method === 'GET') {\n    return Response.json([\n      { id: '1', name: 'Alice', email: 'alice@example.com' },\n      { id: '2', name: 'Bob', email: 'bob@example.com' },\n    ])\n  }\n\n  return new Response('Not Found', { status: 404 })\n}\n\nlet server = http.createServer(createRequestListener(handler))\n\nserver.listen(3000, () => {\n  console.log('Server running at http://localhost:3000')\n})\n```\n\n### Working with Request Data\n\nHandle different types of request data using standard web APIs:\n\n```ts\nasync function handler(request: Request) {\n  let url = new URL(request.url)\n\n  // Handle JSON data\n  if (request.method === 'POST' && url.pathname === '/api/users') {\n    try {\n      let userData = await request.json()\n\n      // Validate required fields\n      if (!userData.name || !userData.email) {\n        return Response.json({ error: 'Name and email are required' }, { status: 400 })\n      }\n\n      // Create user (your implementation)\n      let newUser = {\n        id: Date.now().toString(),\n        ...userData,\n      }\n\n      return Response.json(newUser, { status: 201 })\n    } catch (error) {\n      return Response.json({ error: 'Invalid JSON' }, { status: 400 })\n    }\n  }\n\n  // Handle URL search params\n  if (url.pathname === '/api/search') {\n    let query = url.searchParams.get('q')\n    let limit = parseInt(url.searchParams.get('limit') || '10')\n\n    return Response.json({\n      query,\n      limit,\n      results: [], // Your search results here\n    })\n  }\n\n  return new Response('Not Found', { status: 404 })\n}\n```\n\n### Streaming Responses\n\nTake advantage of web-standard streaming with `ReadableStream`:\n\n```ts\nasync function handler(request: Request) {\n  if (request.url.endsWith('/stream')) {\n    // Create a streaming response\n    let stream = new ReadableStream({\n      async start(controller) {\n        for (let i = 0; i < 5; i++) {\n          controller.enqueue(new TextEncoder().encode(`Chunk ${i}\\n`))\n          await new Promise((resolve) => setTimeout(resolve, 1000))\n        }\n        controller.close()\n      },\n    })\n\n    return new Response(stream, {\n      headers: { 'Content-Type': 'text/plain' },\n    })\n  }\n\n  return new Response('Not Found', { status: 404 })\n}\n```\n\n### Custom Hostname Configuration\n\nRequest URLs use HTTP/2 `:authority` when present, falling back to `Host`. If both identify different hosts, `createRequestListener()` rejects the request before calling the handler, and `createRequest()` throws. The listener calls `onError` and defaults to 400 when no custom response is returned. Hostnames and default ports are normalized before comparison.\n\nConfigure custom hostnames for deployment on VPS or custom environments. `node-fetch-server` uses the `host` option when constructing `request.url`.\n\n```ts\nimport * as http from 'node:http'\nimport { createRequestListener } from 'remix/node-fetch-server'\n\nlet hostname = process.env.HOST || 'api.example.com'\n\nasync function handler(request: Request) {\n  console.log(request.url) // http://api.example.com/path\n\n  return Response.json({\n    message: 'Hello from custom domain!',\n    url: request.url,\n  })\n}\n\nlet server = http.createServer(createRequestListener(handler, { host: hostname }))\n\nserver.listen(3000)\n```\n\n### Trusted Proxy Headers\n\nIf your app runs behind a trusted reverse proxy, Node.js sees the proxy connection instead of the original client connection. Enable `trustProxy` to use trusted proxy headers when constructing `request.url` and client information:\n\n- `Forwarded: proto` and `X-Forwarded-Proto` can provide the original request protocol.\n- `Forwarded: host` and `X-Forwarded-Host` can provide the original request host.\n- `Forwarded: for` and `X-Forwarded-For` can provide the original client address.\n\nOnly enable this option when your server is reachable exclusively through a trusted proxy that overwrites these headers. Otherwise, clients can spoof the host, protocol, and client address.\n\n```ts\nimport * as http from 'node:http'\nimport { createRequestListener } from 'remix/node-fetch-server'\n\nlet server = http.createServer(\n  createRequestListener(handler, {\n    trustProxy: true,\n  }),\n)\n\nserver.listen(3000)\n```\n\nWhen `host` or `protocol` are set, those fixed options take precedence over trusted proxy headers.\n\n### Accessing Client Information\n\nGet client connection details (IP address, port) for logging or security. When `trustProxy` is enabled, `client.address` uses trusted `Forwarded` or `X-Forwarded-For` values when present:\n\n```ts\nimport { type FetchHandler } from 'remix/node-fetch-server'\n\nlet handler: FetchHandler = async (request, client) => {\n  // Log client information\n  console.log(`Request from ${client.address}:${client.port}`)\n\n  // Use for rate limiting, geolocation, etc.\n  if (isRateLimited(client.address)) {\n    return new Response('Too Many Requests', { status: 429 })\n  }\n\n  return Response.json({\n    message: 'Hello!',\n    yourIp: client.address,\n  })\n}\n```\n\n### HTTPS Support\n\nUse with Node.js HTTPS module for secure connections:\n\n```ts\nimport * as https from 'node:https'\nimport * as fs from 'node:fs'\nimport { createRequestListener } from 'remix/node-fetch-server'\n\nlet options = {\n  key: fs.readFileSync('private-key.pem'),\n  cert: fs.readFileSync('certificate.pem'),\n}\n\nlet server = https.createServer(options, createRequestListener(handler))\n\nserver.listen(443, () => {\n  console.log('HTTPS Server running on port 443')\n})\n```\n\n## Advanced Usage\n\n### Low-level API\n\nFor more control over request/response handling, use the low-level API:\n\n```ts\nimport * as http from 'node:http'\nimport { createRequest, sendResponse } from 'remix/node-fetch-server'\n\nlet server = http.createServer(async (req, res) => {\n  // Convert Node.js request to Fetch API Request\n  let request = createRequest(req, res, { host: process.env.HOST })\n\n  try {\n    // Add custom headers or middleware logic\n    let startTime = Date.now()\n\n    // Process the request with your handler\n    let response = await handler(request)\n    // Make sure the response is mutable\n    response = new Response(response.body, response)\n\n    // Add response timing header\n    let duration = Date.now() - startTime\n    response.headers.set('X-Response-Time', `${duration}ms`)\n\n    // Send the response\n    await sendResponse(res, response)\n  } catch (error) {\n    console.error('Server error:', error)\n    res.writeHead(500, { 'Content-Type': 'text/plain' })\n    res.end('Internal Server Error')\n  }\n})\n\nserver.listen(3000)\n```\n\nThe low-level API provides:\n\n- `createRequest(req, res, options)` - Converts Node.js IncomingMessage to web Request\n- `sendResponse(res, response)` - Sends web Response using Node.js ServerResponse\n\nThis is useful for:\n\n- Building custom middleware systems\n- Integrating with existing Node.js code\n- Implementing custom error handling\n- Performance-critical applications\n\n## Migration from Express\n\nTransitioning from Express? Here's a comparison of common patterns:\n\n### Basic Routing\n\n```ts\n// Express\nlet app = express()\n\napp.get('/users/:id', async (req, res) => {\n  let user = await db.getUser(req.params.id)\n  if (!user) {\n    return res.status(404).json({ error: 'User not found' })\n  }\n  res.json(user)\n})\n\napp.listen(3000)\n\n// node-fetch-server\nimport { createRequestListener } from 'remix/node-fetch-server'\n\nasync function handler(request: Request) {\n  let url = new URL(request.url)\n  let match = url.pathname.match(/^\\/users\\/(\\w+)$/)\n\n  if (match && request.method === 'GET') {\n    let user = await db.getUser(match[1])\n    if (!user) {\n      return Response.json({ error: 'User not found' }, { status: 404 })\n    }\n    return Response.json(user)\n  }\n\n  return new Response('Not Found', { status: 404 })\n}\n\nhttp.createServer(createRequestListener(handler)).listen(3000)\n```\n\n## Demos\n\nThe [`demos` directory](https://github.com/remix-run/remix/tree/main/packages/node-fetch-server/demos) contains working demos:\n\n- [`demos/http2`](https://github.com/remix-run/remix/tree/main/packages/node-fetch-server/demos/http2) - HTTP/2 server with TLS certificates\n\n## Related Packages\n\n- [`fetch-proxy`](https://github.com/remix-run/remix/tree/main/packages/fetch-proxy) - Build HTTP proxy servers using the web fetch API\n\n## Benchmarks\n\nRun the full benchmark suite:\n\n```sh\npnpm run bench\n```\n\nUpdate the benchmark results below:\n\n```sh\npnpm run bench:update-readme\n```\n\n<!-- benchmarks:start -->\n\nLast updated: 2026-07-23T20:29:32.942Z\n\nEnvironment: Darwin 25.4.0, Apple M5 Pro, Node.js v24.18.0\n\nCommand: `wrk -t12 -c400 -d30s`\n\n### Raw Throughput\n\nSimple HTML response benchmarks without inspecting the incoming request.\n\n| Server                    |   Version | Requests/sec | Avg latency | Transfer/sec |\n| ------------------------- | --------: | -----------: | ----------: | -----------: |\n| `node:http`               | `24.18.0` |     `66,594` |    `5.96ms` |    `13.65MB` |\n| `remix/node-fetch-server` |  `0.14.0` |     `61,587` |    `7.88ms` |    `12.51MB` |\n| `express`                 |   `5.2.1` |     `58,424` |    `8.42ms` |    `14.10MB` |\n\n### Small Body\n\nPOST benchmarks that read and print the request method, headers, and a small body.\n\n| Server                    |   Version | Requests/sec | Avg latency | Transfer/sec |\n| ------------------------- | --------: | -----------: | ----------: | -----------: |\n| `node:http`               | `24.18.0` |     `35,303` |   `15.60ms` |     `7.24MB` |\n| `express`                 |   `5.2.1` |     `32,614` |   `16.93ms` |     `7.87MB` |\n| `remix/node-fetch-server` |  `0.14.0` |     `29,521` |   `18.98ms` |     `6.00MB` |\n\n### Large Body\n\nPOST benchmarks that read and print the request method, headers, and a 1 MB body.\n\n| Server                    |   Version | Requests/sec | Avg latency | Transfer/sec |\n| ------------------------- | --------: | -----------: | ----------: | -----------: |\n| `node:http`               | `24.18.0` |      `1,798` |  `206.65ms` |   `377.42KB` |\n| `remix/node-fetch-server` |  `0.14.0` |      `1,752` |  `167.69ms` |   `364.40KB` |\n| `express`                 |   `5.2.1` |      `1,731` |  `223.19ms` |   `427.67KB` |\n\n<!-- benchmarks:end -->\n\n## License\n\nSee [LICENSE](https://github.com/remix-run/remix/blob/main/LICENSE)\n","readmeFilename":"README.md"}