{"_id":"@bvbmz/local-proxy","_rev":"8-00361279dcb35b622efbb91e1f26f097","name":"@bvbmz/local-proxy","dist-tags":{"latest":"0.3.0"},"versions":{"0.0.2":{"name":"@bvbmz/local-proxy","version":"0.0.2","keywords":["proxy","mock","api","development","testing","scenarios"],"author":"","license":"ISC","_id":"@bvbmz/local-proxy@0.0.2","maintainers":[{"name":"bremss.vall","email":"bremssvall@gmail.com"}],"bin":{"local-proxy":"dist/cli.js"},"dist":{"shasum":"47805619a216b6832acb8e43621722e66945419c","tarball":"https://registry.npmjs.org/@bvbmz/local-proxy/-/local-proxy-0.0.2.tgz","fileCount":7,"integrity":"sha512-I85is1GVdME+BD9JYZkCNSmhy9XIhPvL74bckMYtF5HEfymtA7+tSA2gYKx0w1HO0HR3gj58lgV0i1S9Bgrlrg==","signatures":[{"sig":"MEUCIQCKLwxKGeCmkzkXLRFmi7BFULnnyy3a7avxGQrxjsSIdgIgKZf0xfO7gv0HT+gTLD4UuvUtUMBxOtJq6hyZQ809AxY=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":32272},"main":"./dist/index.js","_from":"file:bvbmz-local-proxy-0.0.2.tgz","types":"./dist/index.d.ts","module":"./dist/index.mjs","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"scripts":{"dev":"ts-node src/cli.ts","lint":"eslint .","test":"vitest","build":"tsup src/index.ts --format cjs,esm --dts","start":"node dist/cli.js","lint:fix":"eslint . --fix","test:run":"vitest run","test:coverage":"vitest run --coverage"},"_npmUser":{"name":"bremss.vall","email":"bremssvall@gmail.com"},"_resolved":"/tmp/df0e6a66182f85009385adbf2a37ff2d/bvbmz-local-proxy-0.0.2.tgz","_integrity":"sha512-I85is1GVdME+BD9JYZkCNSmhy9XIhPvL74bckMYtF5HEfymtA7+tSA2gYKx0w1HO0HR3gj58lgV0i1S9Bgrlrg==","_npmVersion":"10.8.2","description":"Local development proxy with scenario-based mocking","directories":{},"_nodeVersion":"20.20.0","dependencies":{"zod":"^4.3.6","dotenv":"^16.4.5","express":"^5.2.1","commander":"^14.0.3","http-proxy-middleware":"^3.0.5"},"_hasShrinkwrap":false,"devDependencies":{"jiti":"^2.6.1","tsup":"^8.5.1","eslint":"10.0.1","vitest":"^4.0.18","globals":"^17.3.0","ts-node":"^10.9.2","supertest":"^7.2.2","@eslint/js":"10.0.1","typescript":"^5.9.3","@types/node":"^25.3.0","@types/express":"^5.0.6","@changesets/cli":"^2.29.8","@types/supertest":"^6.0.3","typescript-eslint":"^8.56.0","@tsconfig/strictest":"^2.0.8","@vitest/coverage-v8":"4.0.18","@total-typescript/ts-reset":"^0.6.1"},"_npmOperationalInternal":{"tmp":"tmp/local-proxy_0.0.2_1771720089275_0.6395565721500771","host":"s3://npm-registry-packages-npm-production"}},"0.0.3":{"name":"@bvbmz/local-proxy","version":"0.0.3","keywords":["proxy","mock","api","development","testing","scenarios"],"author":"","license":"ISC","_id":"@bvbmz/local-proxy@0.0.3","maintainers":[{"name":"bremss.vall","email":"bremssvall@gmail.com"}],"bin":{"local-proxy":"dist/cli.js"},"dist":{"shasum":"803287e21ff1e5cdb8f1efb3f96dca235165447b","tarball":"https://registry.npmjs.org/@bvbmz/local-proxy/-/local-proxy-0.0.3.tgz","fileCount":7,"integrity":"sha512-5Ge9zdc1WitVN2+yBarc3wLDiB/PVjoeAJdCAzgq243+oAj08HjPKwaziN0P+tIturqM4Y0GJ46UJtO8hj5efA==","signatures":[{"sig":"MEUCIBHxUMhyzckOOgD0eLxU8G14fcEklX1VBT2HJsvVzgB8AiEA1cWxgBIdpo8WG6NPZTSW+1xxMH3RgocU40/IMhkJdsc=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":32431},"main":"./dist/index.js","_from":"file:bvbmz-local-proxy-0.0.3.tgz","types":"./dist/index.d.ts","module":"./dist/index.mjs","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"scripts":{"dev":"ts-node src/cli.ts","lint":"eslint .","test":"vitest","build":"tsup src/index.ts --format cjs,esm --dts","start":"node dist/cli.js","lint:fix":"eslint . --fix","test:run":"vitest run","test:coverage":"vitest run --coverage"},"_npmUser":{"name":"bremss.vall","email":"bremssvall@gmail.com"},"_resolved":"/tmp/1a263ca8217bd46d3c1d6cd327dc63b6/bvbmz-local-proxy-0.0.3.tgz","_integrity":"sha512-5Ge9zdc1WitVN2+yBarc3wLDiB/PVjoeAJdCAzgq243+oAj08HjPKwaziN0P+tIturqM4Y0GJ46UJtO8hj5efA==","_npmVersion":"10.8.2","description":"Local development proxy with scenario-based mocking","directories":{},"_nodeVersion":"20.20.0","dependencies":{"zod":"^4.3.6","dotenv":"^16.4.5","express":"^5.2.1","commander":"^14.0.3","http-proxy-middleware":"^3.0.5"},"_hasShrinkwrap":false,"devDependencies":{"jiti":"^2.6.1","tsup":"^8.5.1","eslint":"10.0.1","vitest":"^4.0.18","globals":"^17.3.0","ts-node":"^10.9.2","supertest":"^7.2.2","@eslint/js":"10.0.1","typescript":"^5.9.3","@types/node":"^25.3.0","@types/express":"^5.0.6","@changesets/cli":"^2.29.8","@types/supertest":"^6.0.3","typescript-eslint":"^8.56.0","@tsconfig/strictest":"^2.0.8","@vitest/coverage-v8":"4.0.18","@total-typescript/ts-reset":"^0.6.1"},"_npmOperationalInternal":{"tmp":"tmp/local-proxy_0.0.3_1771720609784_0.6045562659936776","host":"s3://npm-registry-packages-npm-production"}},"0.0.4":{"name":"@bvbmz/local-proxy","version":"0.0.4","keywords":["proxy","mock","api","development","testing","scenarios"],"author":"","license":"ISC","_id":"@bvbmz/local-proxy@0.0.4","maintainers":[{"name":"bremss.vall","email":"bremssvall@gmail.com"}],"bin":{"local-proxy":"dist/cli.js"},"dist":{"shasum":"16801bce36f6e7074ac90c3002f6018bd73b4d99","tarball":"https://registry.npmjs.org/@bvbmz/local-proxy/-/local-proxy-0.0.4.tgz","fileCount":12,"integrity":"sha512-IC0AXhikZBM//9g67trXyFXEOTzu11tpGuNiTY/1IDTzGgL77cMgzQivRnU3tdH7ZEwjzriB5nySSCRh6XbiyQ==","signatures":[{"sig":"MEYCIQCl7TLfkf4GvfBzQMIddkmlomucn6paARVHrJxqcuptCAIhANpTfbKhXIXCMps520EMIh5TfCZoPRKB3gXolaEWun/n","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":45461},"main":"./dist/index.js","_from":"file:bvbmz-local-proxy-0.0.4.tgz","types":"./dist/index.d.ts","module":"./dist/index.mjs","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"scripts":{"dev":"ts-node src/cli.ts","lint":"eslint .","test":"vitest","build":"tsup src/index.ts src/cli.ts --format cjs,esm --dts","start":"node dist/cli.js","lint:fix":"eslint . --fix","test:run":"vitest run","test:coverage":"vitest run --coverage"},"_npmUser":{"name":"bremss.vall","email":"bremssvall@gmail.com"},"_resolved":"/tmp/097ebf0bd646728a80e7d0e4add3a095/bvbmz-local-proxy-0.0.4.tgz","_integrity":"sha512-IC0AXhikZBM//9g67trXyFXEOTzu11tpGuNiTY/1IDTzGgL77cMgzQivRnU3tdH7ZEwjzriB5nySSCRh6XbiyQ==","_npmVersion":"10.8.2","description":"Local development proxy with scenario-based mocking","directories":{},"_nodeVersion":"20.20.0","dependencies":{"zod":"^4.3.6","dotenv":"^16.4.5","express":"^5.2.1","commander":"^14.0.3","http-proxy-middleware":"^3.0.5"},"_hasShrinkwrap":false,"devDependencies":{"jiti":"^2.6.1","tsup":"^8.5.1","eslint":"10.0.1","vitest":"^4.0.18","globals":"^17.3.0","ts-node":"^10.9.2","supertest":"^7.2.2","@eslint/js":"10.0.1","typescript":"^5.9.3","@types/node":"^25.3.0","@types/express":"^5.0.6","@changesets/cli":"^2.29.8","@types/supertest":"^6.0.3","typescript-eslint":"^8.56.0","@tsconfig/strictest":"^2.0.8","@vitest/coverage-v8":"4.0.18","@total-typescript/ts-reset":"^0.6.1"},"_npmOperationalInternal":{"tmp":"tmp/local-proxy_0.0.4_1771721076278_0.4345859253097082","host":"s3://npm-registry-packages-npm-production"}},"0.0.5":{"name":"@bvbmz/local-proxy","version":"0.0.5","keywords":["proxy","mock","api","development","testing","scenarios"],"author":"","license":"ISC","_id":"@bvbmz/local-proxy@0.0.5","maintainers":[{"name":"bremss.vall","email":"bremssvall@gmail.com"}],"bin":{"local-proxy":"dist/cli.js"},"dist":{"shasum":"d92323a279a8ca305f97a1523574a29ca46ee72e","tarball":"https://registry.npmjs.org/@bvbmz/local-proxy/-/local-proxy-0.0.5.tgz","fileCount":12,"integrity":"sha512-gGn+U+eHtUIwmju8RDCluxsfR73NQanqWKBKO5+C6wRvUkjuGtTdBfbOcGlO5qXms9To6YLKFOo2Q4CQ1Lv1Wg==","signatures":[{"sig":"MEUCIQCtXLj77DcRfD5xaLeYtmj/oLFlbpD47Ts85PE5zQ8a2wIgdAdcVfSoNqJo1GICr2c8y49AGG2uzEI3BUs1ds8SmPI=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":42046},"main":"./dist/index.js","_from":"file:bvbmz-local-proxy-0.0.5.tgz","types":"./dist/index.d.ts","module":"./dist/index.mjs","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"scripts":{"dev":"ts-node src/cli.ts","lint":"eslint .","test":"vitest","build":"tsup src/index.ts src/cli.ts --format cjs,esm --dts","start":"node dist/cli.js","docs:dev":"astro dev --root site","lint:fix":"eslint . --fix","test:run":"vitest run","docs:build":"astro build --root site","docs:preview":"astro preview --root site","test:coverage":"vitest run --coverage"},"_npmUser":{"name":"bremss.vall","email":"bremssvall@gmail.com"},"_resolved":"/tmp/e41cf54a6fca43ee416ed908e2c41b4f/bvbmz-local-proxy-0.0.5.tgz","_integrity":"sha512-gGn+U+eHtUIwmju8RDCluxsfR73NQanqWKBKO5+C6wRvUkjuGtTdBfbOcGlO5qXms9To6YLKFOo2Q4CQ1Lv1Wg==","_npmVersion":"10.8.2","description":"Local development proxy with scenario-based mocking","directories":{},"_nodeVersion":"20.20.1","dependencies":{"zod":"^4.3.6","dotenv":"^16.4.5","express":"^5.2.1","commander":"^14.0.3","http-proxy-middleware":"^3.0.5"},"_hasShrinkwrap":false,"devDependencies":{"jiti":"^2.6.1","tsup":"^8.5.1","astro":"^6.0.7","sharp":"^0.34.5","eslint":"10.0.1","vitest":"^4.0.18","globals":"^17.3.0","ts-node":"^10.9.2","supertest":"^7.2.2","@eslint/js":"10.0.1","typescript":"^5.9.3","@types/node":"^25.3.0","@types/express":"^5.0.6","@changesets/cli":"^2.29.8","@types/supertest":"^6.0.3","typescript-eslint":"^8.56.0","@astrojs/starlight":"^0.38.1","@tsconfig/strictest":"^2.0.8","@vitest/coverage-v8":"4.0.18","@total-typescript/ts-reset":"^0.6.1"},"_npmOperationalInternal":{"tmp":"tmp/local-proxy_0.0.5_1773962381098_0.3216660690607134","host":"s3://npm-registry-packages-npm-production"}},"0.1.0":{"name":"@bvbmz/local-proxy","version":"0.1.0","keywords":["proxy","mock","api","development","testing","scenarios"],"author":"","license":"ISC","_id":"@bvbmz/local-proxy@0.1.0","maintainers":[{"name":"bremss.vall","email":"bremssvall@gmail.com"}],"bin":{"local-proxy":"dist/cli.js"},"dist":{"shasum":"498a20d73b0e60a47f1f958ea39c28e52a6e3ce8","tarball":"https://registry.npmjs.org/@bvbmz/local-proxy/-/local-proxy-0.1.0.tgz","fileCount":12,"integrity":"sha512-uA6zmKN6KJ9Gt0BnkfoluJBRha9p6j0k9xeBmdrxDYthIyZ9BK1aoRTA/pI6ulCq1uHHNARpqNCp38BHVUq4vg==","signatures":[{"sig":"MEYCIQDdj6RiQ3Yl99798q2RrcesNC/iPkA9Z6NqEzdc3UNdigIhALdUJoTvEpFQpNEm4P3TkTdU9rUWlPE+PVSepWI1A+lJ","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":45523},"main":"./dist/index.js","_from":"file:bvbmz-local-proxy-0.1.0.tgz","types":"./dist/index.d.ts","module":"./dist/index.mjs","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"scripts":{"dev":"ts-node src/cli.ts","lint":"eslint .","test":"vitest","build":"tsup src/index.ts src/cli.ts --format cjs,esm --dts","start":"node dist/cli.js","docs:dev":"astro dev --root site","lint:fix":"eslint . --fix","test:run":"vitest run","docs:build":"astro build --root site","docs:preview":"astro preview --root site","test:coverage":"vitest run --coverage"},"_npmUser":{"name":"bremss.vall","email":"bremssvall@gmail.com"},"_resolved":"/tmp/7769cda848c285c24cb4a718eebebd6f/bvbmz-local-proxy-0.1.0.tgz","_integrity":"sha512-uA6zmKN6KJ9Gt0BnkfoluJBRha9p6j0k9xeBmdrxDYthIyZ9BK1aoRTA/pI6ulCq1uHHNARpqNCp38BHVUq4vg==","_npmVersion":"10.8.2","description":"Local development proxy with scenario-based mocking","directories":{},"_nodeVersion":"20.20.2","dependencies":{"zod":"^4.3.6","dotenv":"^16.4.5","express":"^5.2.1","commander":"^14.0.3","http-proxy-middleware":"^3.0.5"},"_hasShrinkwrap":false,"devDependencies":{"jiti":"^2.6.1","tsup":"^8.5.1","astro":"^6.0.7","sharp":"^0.34.5","eslint":"10.0.1","vitest":"^4.0.18","globals":"^17.3.0","ts-node":"^10.9.2","supertest":"^7.2.2","@eslint/js":"10.0.1","typescript":"^5.9.3","@types/node":"^25.3.0","@types/express":"^5.0.6","@changesets/cli":"^2.29.8","@types/supertest":"^6.0.3","typescript-eslint":"^8.56.0","@astrojs/starlight":"^0.38.1","@tsconfig/strictest":"^2.0.8","@vitest/coverage-v8":"4.0.18","@total-typescript/ts-reset":"^0.6.1"},"_npmOperationalInternal":{"tmp":"tmp/local-proxy_0.1.0_1775918183893_0.4243757918704911","host":"s3://npm-registry-packages-npm-production"}},"0.1.1":{"name":"@bvbmz/local-proxy","version":"0.1.1","keywords":["proxy","mock","api","development","testing","scenarios"],"author":"","license":"ISC","_id":"@bvbmz/local-proxy@0.1.1","maintainers":[{"name":"bremss.vall","email":"bremssvall@gmail.com"}],"bin":{"local-proxy":"dist/cli.js"},"dist":{"shasum":"bd281fcd33eaaab4dd68a2ffac05c28307426b56","tarball":"https://registry.npmjs.org/@bvbmz/local-proxy/-/local-proxy-0.1.1.tgz","fileCount":12,"integrity":"sha512-cQAgvHHA1aJ1zKXpTvn+6I0ogezhtfeJa7kDkiuMP3KHiArbZbDcvS8kXg3FMMYEFp3pBfvsxlS88k7MweHGcQ==","signatures":[{"sig":"MEYCIQDXnVkanZpenCkNzUqIDQzpaSBEwNzuSAv3O3y3N0BmzQIhAN0nS3FCX/u6mgf3XuYNrTp0hg05ldgL9BjpDFnx2phT","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":47116},"main":"./dist/index.js","_from":"file:bvbmz-local-proxy-0.1.1.tgz","types":"./dist/index.d.ts","module":"./dist/index.mjs","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"scripts":{"dev":"ts-node src/cli.ts","lint":"eslint .","test":"vitest","build":"tsup src/index.ts src/cli.ts --format cjs,esm --dts","start":"node dist/cli.js","docs:dev":"astro dev --root site","lint:fix":"eslint . --fix","test:run":"vitest run","docs:build":"astro build --root site","docs:preview":"astro preview --root site","test:coverage":"vitest run --coverage"},"_npmUser":{"name":"bremss.vall","email":"bremssvall@gmail.com"},"_resolved":"/tmp/2082bd728c2f7b7a70dc1009feaca5a7/bvbmz-local-proxy-0.1.1.tgz","_integrity":"sha512-cQAgvHHA1aJ1zKXpTvn+6I0ogezhtfeJa7kDkiuMP3KHiArbZbDcvS8kXg3FMMYEFp3pBfvsxlS88k7MweHGcQ==","_npmVersion":"10.8.2","description":"Local development proxy with scenario-based mocking","directories":{},"_nodeVersion":"20.20.2","dependencies":{"zod":"^4.3.6","dotenv":"^16.4.5","express":"^5.2.1","commander":"^14.0.3","http-proxy-middleware":"^3.0.5"},"_hasShrinkwrap":false,"devDependencies":{"jiti":"^2.6.1","tsup":"^8.5.1","astro":"^6.0.7","sharp":"^0.34.5","eslint":"10.0.1","vitest":"^4.0.18","globals":"^17.3.0","ts-node":"^10.9.2","supertest":"^7.2.2","@eslint/js":"10.0.1","typescript":"^5.9.3","@types/node":"^25.3.0","@types/express":"^5.0.6","@changesets/cli":"^2.29.8","@types/supertest":"^6.0.3","typescript-eslint":"^8.56.0","@astrojs/starlight":"^0.38.1","@tsconfig/strictest":"^2.0.8","@vitest/coverage-v8":"4.0.18","@total-typescript/ts-reset":"^0.6.1"},"_npmOperationalInternal":{"tmp":"tmp/local-proxy_0.1.1_1775918840415_0.3529970582858104","host":"s3://npm-registry-packages-npm-production"}},"0.2.0":{"name":"@bvbmz/local-proxy","version":"0.2.0","keywords":["proxy","mock","api","development","testing","scenarios"],"author":"","license":"ISC","_id":"@bvbmz/local-proxy@0.2.0","maintainers":[{"name":"bremss.vall","email":"bremssvall@gmail.com"}],"bin":{"local-proxy":"dist/cli.js"},"dist":{"shasum":"c7cbc81af54e8cd6dfa752135857e6530b19a8d0","tarball":"https://registry.npmjs.org/@bvbmz/local-proxy/-/local-proxy-0.2.0.tgz","fileCount":12,"integrity":"sha512-UGemVHrIaR5Df8K6Nj3U82IgWy+ud6ADV1f2tfpXUdeQCfgdGE943mbU+dz1EX2r6iW+2oK/TkNqVLw7RAtwuQ==","signatures":[{"sig":"MEQCIBGH768UTiOHORCG3FeO/On3ACn4NRd0PyMels+fSkrbAiBYTnppW9gLDugSKxViG2gsW9fXD8ScZ4pnDuVJx++jiw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":71001},"main":"./dist/index.js","_from":"file:bvbmz-local-proxy-0.2.0.tgz","types":"./dist/index.d.ts","module":"./dist/index.mjs","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"scripts":{"dev":"ts-node src/cli.ts","lint":"eslint .","test":"vitest","build":"tsup src/index.ts src/cli.ts --format cjs,esm --dts","start":"node dist/cli.js","docs:dev":"astro dev --root site","lint:fix":"eslint . --fix","test:run":"vitest run","docs:build":"astro build --root site","docs:preview":"astro preview --root site","test:coverage":"vitest run --coverage"},"_npmUser":{"name":"bremss.vall","email":"bremssvall@gmail.com"},"_resolved":"/tmp/532f9fd55035b493e1c1c0ea26f0b84b/bvbmz-local-proxy-0.2.0.tgz","_integrity":"sha512-UGemVHrIaR5Df8K6Nj3U82IgWy+ud6ADV1f2tfpXUdeQCfgdGE943mbU+dz1EX2r6iW+2oK/TkNqVLw7RAtwuQ==","_npmVersion":"10.8.2","description":"Local development proxy with scenario-based mocking","directories":{},"_nodeVersion":"20.20.2","dependencies":{"zod":"^4.3.6","dotenv":"^16.4.5","express":"^5.2.1","commander":"^14.0.3","path-to-regexp":"^8.4.2","http-proxy-middleware":"^3.0.5"},"_hasShrinkwrap":false,"devDependencies":{"jiti":"^2.6.1","tsup":"^8.5.1","astro":"^6.0.7","sharp":"^0.34.5","eslint":"10.0.1","vitest":"^4.0.18","globals":"^17.3.0","ts-node":"^10.9.2","supertest":"^7.2.2","@eslint/js":"10.0.1","typescript":"^5.9.3","@types/node":"^25.3.0","@types/express":"^5.0.6","@changesets/cli":"^2.29.8","@types/supertest":"^6.0.3","typescript-eslint":"^8.56.0","@astrojs/starlight":"^0.38.1","@tsconfig/strictest":"^2.0.8","@vitest/coverage-v8":"4.0.18","@total-typescript/ts-reset":"^0.6.1"},"_npmOperationalInternal":{"tmp":"tmp/local-proxy_0.2.0_1780486217483_0.7961054484468002","host":"s3://npm-registry-packages-npm-production"}},"0.3.0":{"name":"@bvbmz/local-proxy","version":"0.3.0","description":"Local development proxy with scenario-based mocking","main":"./dist/index.js","module":"./dist/index.mjs","types":"./dist/index.d.ts","bin":{"local-proxy":"dist/cli.js"},"exports":{".":{"import":"./dist/index.js","types":"./dist/index.d.ts"}},"keywords":["proxy","mock","api","development","testing","scenarios"],"author":"","license":"ISC","dependencies":{"commander":"^14.0.3","dotenv":"^16.4.5","express":"^5.2.1","http-proxy-middleware":"^3.0.5","path-to-regexp":"^8.4.2","zod":"^4.3.6"},"devDependencies":{"@astrojs/starlight":"^0.38.1","@changesets/cli":"^2.29.8","@eslint/js":"10.0.1","@total-typescript/ts-reset":"^0.6.1","@tsconfig/strictest":"^2.0.8","@types/express":"^5.0.6","@types/node":"^25.3.0","@types/supertest":"^6.0.3","@vitest/coverage-v8":"4.0.18","astro":"^6.0.7","eslint":"10.0.1","globals":"^17.3.0","jiti":"^2.6.1","sharp":"^0.34.5","supertest":"^7.2.2","ts-node":"^10.9.2","tsup":"^8.5.1","typescript":"^5.9.3","typescript-eslint":"^8.56.0","vitest":"^4.0.18"},"scripts":{"dev":"ts-node src/cli.ts","build":"tsup src/index.ts src/cli.ts --format cjs,esm --dts","start":"node dist/cli.js","docs:dev":"astro dev --root site","docs:build":"astro build --root site","docs:preview":"astro preview --root site","test":"vitest","test:run":"vitest run","test:coverage":"vitest run --coverage","lint":"eslint .","lint:fix":"eslint . --fix"},"_id":"@bvbmz/local-proxy@0.3.0","_integrity":"sha512-MVzK+TrGj38pBPs+rU3CG+A/vEHyttCzoDGvM1GXnZAdl9811H1ngLoJIoEuq3R9S+wjrJ5Njfu41pYv4Zk+ig==","_resolved":"/tmp/f20815e446fa23557520367d0bd948fd/bvbmz-local-proxy-0.3.0.tgz","_from":"file:bvbmz-local-proxy-0.3.0.tgz","_nodeVersion":"22.23.2","_npmVersion":"10.9.8","dist":{"integrity":"sha512-MVzK+TrGj38pBPs+rU3CG+A/vEHyttCzoDGvM1GXnZAdl9811H1ngLoJIoEuq3R9S+wjrJ5Njfu41pYv4Zk+ig==","shasum":"7d058fe9195d7e15672b153e07917b2e750b5701","tarball":"https://registry.npmjs.org/@bvbmz/local-proxy/-/local-proxy-0.3.0.tgz","fileCount":13,"unpackedSize":75505,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEQCIAculsx94qAbks3i1xpNe0xslYOxpcqysDWcacNVVDKGAiAerPdlxw6Uq4OF7GRevh5b21kfkR4GGN6c1PhgLpXnJA=="}]},"_npmUser":{"name":"bremss.vall","email":"bremssvall@gmail.com"},"directories":{},"maintainers":[{"name":"bremss.vall","email":"bremssvall@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/local-proxy_0.3.0_1787488352839_0.15051370077065185"},"_hasShrinkwrap":false}},"time":{"created":"2026-02-22T00:28:09.182Z","modified":"2026-08-23T12:32:33.162Z","0.0.2":"2026-02-22T00:28:09.423Z","0.0.3":"2026-02-22T00:36:49.948Z","0.0.4":"2026-02-22T00:44:36.438Z","0.0.5":"2026-03-19T23:19:41.276Z","0.1.0":"2026-04-11T14:36:24.033Z","0.1.1":"2026-04-11T14:47:20.552Z","0.2.0":"2026-06-03T11:30:17.633Z","0.3.0":"2026-08-23T12:32:33.012Z"},"license":"ISC","keywords":["proxy","mock","api","development","testing","scenarios"],"description":"Local development proxy with scenario-based mocking","maintainers":[{"name":"bremss.vall","email":"bremssvall@gmail.com"}],"readme":"<div align=\"center\">\n<h1>Local-proxy</h1>\n<img src=\"https://boumouzounabrahimvall.github.io/local-proxy/logo.svg\" width=\"64\" height=\"64\" alt=\"local proxy logo\">\n\n**Scenario-based local API proxy for fast frontend development and test workflows.**\n\n[📖 Documentation](https://boumouzounabrahimvall.github.io/local-proxy/) ·\n[⚡ Quick Start](#quick-start) ·\n[🔧 CLI](#cli) ·\n[💬 GitHub](https://github.com/BoumouzounaBrahimVall/local-proxy)\n\n</div>\n\n---\n\n## Why local-proxy\n\n- Mock only the endpoints you care about\n- Keep all other traffic flowing to your real API\n- Simulate delays and failures before production\n- Reuse realistic fixtures without backend dependencies\n\n<h2 id=\"quick-start\">Quick Start</h2>\n\n```bash\n# install\nnpm i -g @bvbmz/local-proxy\n\n# create scenarios template\nlocal-proxy --init\n\n# run proxy\nlocal-proxy --target https://api.example.com\n```\n\nDefault local endpoint:\n\n```text\nhttp://localhost:5050/api\n```\n\n<h2 id=\"cli\">CLI</h2>\n\n```bash\nlocal-proxy [options]\n```\n\n| Option | Description | Default |\n| --- | --- | --- |\n| `-t, --target <url>` | Upstream API URL | required unless `--init` |\n| `-p, --port <number>` | Port to listen on | `5050` |\n| `-a, --api-prefix <path>` | API path prefix | `/api` |\n| `-s, --scenarios <file>` | Scenarios file path | `./scenarios.json` |\n| `--init` | Create starter `scenarios.json` | - |\n| `--cors` | Enable permissive CORS headers for browser dev | - |\n| `-h, --help` | Show help | - |\n| `-V, --version` | Show version | - |\n\n## Environment variables\n\nEvery option except `--init` and `--cors` can also be set through the environment. Resolution order is **flag > environment > default**, so a flag always wins over an exported variable.\n\n| Variable | Equivalent flag | Default |\n| --- | --- | --- |\n| `TARGET` | `-t, --target` | required unless `--init` |\n| `PORT` | `-p, --port` | `5050` |\n| `API_PREFIX` | `-a, --api-prefix` | `/api` |\n| `SCENARIOS` | `-s, --scenarios` | `./scenarios.json` |\n\n```bash\nTARGET=https://api.example.com PORT=3000 local-proxy\n```\n\nA `.env` file in the working directory is loaded automatically — see `.env.example`.\n\n## Docker\n\nRun the proxy in a container instead of installing it globally. Released images are published to Docker Hub, tagged with the package version and `latest`:\n\n```bash\ndocker pull brahimvall/local-proxy:latest\n```\n\nTo add it to an existing stack, point the service at a published image:\n\n```yaml\nservices:\n  local-proxy:\n    image: brahimvall/local-proxy:latest\n    ports:\n      - 5050:5050\n    environment:\n      TARGET: https://api.example.com\n    volumes:\n      - ./:/workspace:ro\n    init: true\n    extra_hosts:\n      - \"host.docker.internal:host-gateway\"\n```\n\n### Building from this repository\n\n```bash\n# copy the sample env file and set your upstream\ncp .env.example .env\n\ndocker compose up --build\n```\n\nCompose reads `.env` and passes `TARGET`, `PORT`, `API_PREFIX` and `SCENARIOS` to the container. `TARGET` is required — `docker compose` fails immediately if it is unset rather than starting a proxy that points nowhere.\n\nThe project directory is mounted read-only at `/workspace`, so `scenarios.json` and any `fixtures/` are picked up from the host and edits apply on the next request without a rebuild.\n\n### Proxying to an API on your host machine\n\nInside the container, `localhost` is the container itself. Use `host.docker.internal` to reach a server running on your machine:\n\n```bash\nTARGET=http://host.docker.internal:8080\n```\n\n### Without compose\n\n```bash\ndocker build -t local-proxy .\n\ndocker run --rm -p 5050:5050 \\\n  -e TARGET=https://api.example.com \\\n  -v \"$PWD\":/workspace:ro \\\n  local-proxy\n```\n\nThe image has no default command, so any CLI flag can be appended:\n\n```bash\ndocker run --rm -v \"$PWD\":/workspace local-proxy --init\n```\n\n### Notes\n\n- `--init` needs to write `scenarios.json`, so it does not work under `docker compose` — the mount there is read-only. Use the `docker run` form above, or `local-proxy --init` on the host.\n- The container stops gracefully: `docker stop` closes the HTTP server and lets in-flight requests finish before exiting.\n\n## scenarios.json\n\n```json\n{\n  \"rules\": [\n    {\n      \"method\": \"GET\",\n      \"match\": \"/v1/example\",\n      \"enabled\": true,\n      \"active_scenario\": \"success\",\n      \"scenarios\": {\n        \"success\": { \"status\": 200, \"json\": { \"message\": \"ok\" } },\n        \"error\": { \"status\": 500, \"json\": { \"error\": \"Internal Error\" } },\n        \"slow\": { \"status\": 200, \"delay\": 2, \"json\": { \"message\": \"slow\" } },\n        \"fixture\": { \"status\": 200, \"file\": \"fixtures/example.json\" }\n      }\n    },\n    {\n      \"method\": \"GET\",\n      \"match\": \"/v1/reports/monthly.pdf\",\n      \"enabled\": true,\n      \"active_scenario\": \"success\",\n      \"scenarios\": {\n        \"success\": {\n          \"status\": 200,\n          \"file\": \"fixtures/monthly.pdf\",\n          \"contentType\": \"application/pdf\",\n          \"headers\": {\n            \"Content-Disposition\": \"attachment; filename=monthly.pdf\"\n          }\n        }\n      }\n    }\n  ]\n}\n```\n\n## Scenario fields\n\n| Field | Description | Default |\n| --- | --- | --- |\n| `status` | HTTP status code | `200` |\n| `json` | Inline JSON response body | - |\n| `file` | Fixture file path (relative to project root) | - |\n| `contentType` | Override `Content-Type` header | auto-detected |\n| `headers` | Map of additional response headers | - |\n| `delay` | Delay in seconds before responding | - |\n\nEach scenario must include at least one of `json` or `file`.\n\n## Dynamic path parameters\n\nThe `match` field supports named path parameters using `:paramName` syntax and wildcard captures using `*splatName`. Patterns are matched with [path-to-regexp](https://github.com/pillarjs/path-to-regexp).\n\n### Named parameters\n\nA `:paramName` segment matches exactly one path segment, regardless of its value:\n\n```json\n{ \"match\": \"/v1/users/:id\" }\n{ \"match\": \"/v1/orgs/:orgId/repos/:repoId\" }\n```\n\n### Wildcard captures\n\nA `*splatName` segment matches one or more path segments:\n\n```json\n{ \"match\": \"/v1/files/*path\" }\n```\n\nThis matches `/v1/files/report.pdf` as well as `/v1/files/2024/january/report.pdf`.\n\n### Case sensitivity\n\nPath matching is case-sensitive. `/api/users` and `/API/Users` are treated as different paths.\n\n### Rule precedence\n\nRules are evaluated in order. Place more specific (literal) rules before param rules to give them priority:\n\n```json\n{ \"match\": \"/v1/users/me\" },\n{ \"match\": \"/v1/users/:id\" }\n```\n\n### Param logging\n\nMatched parameters are printed in the proxy log:\n\n```text\n[MOCKED] GET /api/v1/users/42         -> success {\"id\":\"42\"}\n[MOCKED] GET /api/v1/users/42/posts/7 -> success {\"id\":\"42\",\"postId\":\"7\"}\n```\n\n## Non-JSON responses\n\n`file` scenarios support any content type. Use `contentType` and `headers` to mock binary downloads, PDFs, CSVs, and images:\n\n```json\n{ \"status\": 200, \"file\": \"fixtures/report.pdf\", \"contentType\": \"application/pdf\", \"headers\": { \"Content-Disposition\": \"attachment; filename=report.pdf\" } }\n```\n\n```json\n{ \"status\": 200, \"file\": \"fixtures/export.csv\", \"contentType\": \"text/csv\", \"headers\": { \"Content-Disposition\": \"attachment; filename=export.csv\" } }\n```\n\n```json\n{ \"status\": 200, \"file\": \"fixtures/photo.png\", \"contentType\": \"image/png\" }\n```\n\nWhen `contentType` is omitted, the type is auto-detected from the file extension. Files are served as raw buffers — binary content is never corrupted.\n\n## CORS\n\nRunning local-proxy from a browser on a different origin (the typical dev setup: frontend on `localhost:3000`, proxy on `localhost:5050`) triggers CORS. Enable handling in one of two ways.\n\n**CLI flag** — permissive defaults, ideal for quick dev:\n\n```bash\nlocal-proxy --target https://api.example.com --cors\n```\n\n**`cors` block in `scenarios.json`** — fine-grained control:\n\n```json\n{\n  \"cors\": {\n    \"enabled\": true,\n    \"origin\": \"auto\",\n    \"credentials\": true,\n    \"allowedHeaders\": \"auto\",\n    \"allowedMethods\": [\"GET\", \"POST\", \"PUT\", \"PATCH\", \"DELETE\", \"OPTIONS\"],\n    \"exposedHeaders\": [\"X-Total-Count\"],\n    \"maxAge\": 86400\n  },\n  \"rules\": []\n}\n```\n\n| Field | Type | Default | Description |\n| --- | --- | --- | --- |\n| `enabled` | boolean | `false` | Enable CORS handling |\n| `origin` | `\"auto\"` \\| string \\| string[] | `\"auto\"` | `\"auto\"` reflects the request `Origin`; array allowlists specific origins |\n| `credentials` | boolean | `true` | Sets `Access-Control-Allow-Credentials: true` |\n| `allowedHeaders` | `\"auto\"` \\| string[] | `\"auto\"` | `\"auto\"` echoes the preflight `Access-Control-Request-Headers` |\n| `allowedMethods` | string[] | `[\"GET\",\"POST\",\"PUT\",\"PATCH\",\"DELETE\",\"OPTIONS\"]` | Methods returned on preflight |\n| `exposedHeaders` | string[] | - | Optional headers exposed to JS via `Access-Control-Expose-Headers` |\n| `maxAge` | number | `86400` | Preflight cache seconds |\n\n`--cors` forces `enabled: true` regardless of the scenarios file; other fields in the `cors` block still apply. When CORS is on, preflight `OPTIONS` requests are short-circuited with `204`, mocked responses receive CORS headers, and upstream CORS headers are stripped from proxied responses to avoid duplicates.\n\n## Development\n\n```bash\npnpm install\npnpm lint\npnpm test\npnpm build\n```\n\n## License\n\n[ISC](LICENSE.md)\n","readmeFilename":"readme.md"}