{"_id":"@akoenig/effect-http-recorder","_rev":"3-36f7a2f90f1625436dc4bf0196879a1e","name":"@akoenig/effect-http-recorder","dist-tags":{"latest":"1.0.6"},"versions":{"1.0.1":{"name":"@akoenig/effect-http-recorder","version":"1.0.1","keywords":["effect","http","recording","testing","replay"],"author":{"name":"André König","email":"andre.koenig@openformation.io"},"license":"MIT","_id":"@akoenig/effect-http-recorder@1.0.1","maintainers":[{"name":"akoenig","email":"hello@andrekoenig.de"}],"homepage":"https://github.com/akoenig/effective#readme","bugs":{"url":"https://github.com/akoenig/effective/issues"},"dist":{"shasum":"dbdac001f633f15c434ce16b9d54d5b995967904","tarball":"https://registry.npmjs.org/@akoenig/effect-http-recorder/-/effect-http-recorder-1.0.1.tgz","fileCount":127,"integrity":"sha512-VinOiWw5vT7hvQWWkI01nnq2LS6+X5c8dX2nRnNsp7jYFuCSzJUTC8Gz4Wx+vk0IMU9sEWgWU/gu9Jhko8nTlQ==","signatures":[{"sig":"MEUCIFhOWgNwMTbTXUqQ86DTF2LKhQJJCHTaV4wdlJOkFxUZAiEArgmCk7s4P1GI7a0ylPn0JtViDcGLaARHBGnStQpTQ4c=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@akoenig%2feffect-http-recorder@1.0.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":298707},"type":"module","_from":"file:akoenig-effect-http-recorder-1.0.1.tgz","exports":{".":{"types":"./dist/mod.d.ts","import":"./dist/mod.js"}},"scripts":{"test":"vitest","build":"tsc -b","clean":"rm -rf dist .tsbuildinfo","typecheck":"tsc --noEmit"},"_npmUser":{"name":"akoenig","actor":{"name":"akoenig","type":"user","email":"hello@andrekoenig.de"},"email":"hello@andrekoenig.de"},"_resolved":"/tmp/nix-shell.A1oJVz/b9bac23c7e42a362bfa7e1feed72c0cd/akoenig-effect-http-recorder-1.0.1.tgz","_integrity":"sha512-VinOiWw5vT7hvQWWkI01nnq2LS6+X5c8dX2nRnNsp7jYFuCSzJUTC8Gz4Wx+vk0IMU9sEWgWU/gu9Jhko8nTlQ==","repository":{"url":"git+https://github.com/akoenig/effective.git","type":"git","directory":"packages/http-recorder"},"_npmVersion":"10.9.2","description":"HTTP client recording and replay capabilities for Effect","directories":{},"_nodeVersion":"22.16.0","_hasShrinkwrap":false,"devDependencies":{"vitest":"^3.2.4","@effect/vitest":"^0.23.12","@effect/platform-node":"^0.88.11"},"peerDependencies":{"effect":"^3.16.12","@effect/platform":"^0.87.6"},"_npmOperationalInternal":{"tmp":"tmp/effect-http-recorder_1.0.1_1751750883177_0.48806981307784714","host":"s3://npm-registry-packages-npm-production"}},"1.0.2":{"name":"@akoenig/effect-http-recorder","version":"1.0.2","keywords":["effect","http","recording","testing","replay"],"author":{"name":"André König","email":"andre.koenig@openformation.io"},"license":"MIT","_id":"@akoenig/effect-http-recorder@1.0.2","maintainers":[{"name":"akoenig","email":"hello@andrekoenig.de"}],"homepage":"https://github.com/akoenig/effective#readme","bugs":{"url":"https://github.com/akoenig/effective/issues"},"dist":{"shasum":"f73b68310ea5af3cc4eaa9957dd5922e5b68fe8d","tarball":"https://registry.npmjs.org/@akoenig/effect-http-recorder/-/effect-http-recorder-1.0.2.tgz","fileCount":127,"integrity":"sha512-pRhKAxTaY90gSgP+Ex3k6+So6HJcl5ZmbpPyStVEzR/x1WJ+qj4SXIwcG8RyAbrmA+KvEXmCC4fYCL8oyTPaNA==","signatures":[{"sig":"MEYCIQDhw7KuLVrIQA59VmjAzxDUGARUCyoVfUf3Y+uXjeReXAIhAI89vkW3SDpwDq7Hcvn5+cmwIlS+Ksme1HzEvHLoUkh/","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@akoenig%2feffect-http-recorder@1.0.2","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":298921},"type":"module","_from":"file:akoenig-effect-http-recorder-1.0.2.tgz","exports":{".":{"types":"./dist/mod.d.ts","import":"./dist/mod.js"}},"scripts":{"test":"vitest","build":"tsc -b","clean":"rm -rf dist .tsbuildinfo","typecheck":"tsc --noEmit"},"_npmUser":{"name":"akoenig","actor":{"name":"akoenig","type":"user","email":"hello@andrekoenig.de"},"email":"hello@andrekoenig.de"},"_resolved":"/tmp/nix-shell.qIsKi6/0ab823439de39d7245882588ebee0443/akoenig-effect-http-recorder-1.0.2.tgz","_integrity":"sha512-pRhKAxTaY90gSgP+Ex3k6+So6HJcl5ZmbpPyStVEzR/x1WJ+qj4SXIwcG8RyAbrmA+KvEXmCC4fYCL8oyTPaNA==","repository":{"url":"git+https://github.com/akoenig/effective.git","type":"git","directory":"packages/http-recorder"},"_npmVersion":"10.9.2","description":"HTTP client recording and replay capabilities for Effect","directories":{},"_nodeVersion":"22.16.0","_hasShrinkwrap":false,"devDependencies":{"vitest":"^3.2.4","@effect/vitest":"^0.23.12","@effect/platform-node":"^0.88.11"},"peerDependencies":{"effect":"^3.16.12","@effect/platform":"^0.87.6"},"_npmOperationalInternal":{"tmp":"tmp/effect-http-recorder_1.0.2_1751793357607_0.8890589761812173","host":"s3://npm-registry-packages-npm-production"}},"1.0.6":{"name":"@akoenig/effect-http-recorder","description":"HTTP client recording and replay capabilities for Effect","version":"1.0.6","author":{"name":"André König","email":"andre.koenig@openformation.io"},"devDependencies":{"@effect/platform-node":"0.89.3","@effect/vitest":"0.23.12","vitest":"3.2.4"},"exports":{".":{"types":"./dist/mod.d.ts","import":"./dist/mod.js"}},"keywords":["effect","http","recording","replay","testing"],"license":"MIT","peerDependencies":{"@effect/platform":"^0.87.11","effect":"^3.16.12"},"repository":{"type":"git","url":"git+https://github.com/akoenig/effective.git","directory":"packages/http-recorder"},"type":"module","scripts":{"build":"tsc -b","clean":"rm -rf dist .tsbuildinfo","test":"vitest run","typecheck":"tsc --noEmit"},"_id":"@akoenig/effect-http-recorder@1.0.6","bugs":{"url":"https://github.com/akoenig/effective/issues"},"homepage":"https://github.com/akoenig/effective#readme","_integrity":"sha512-tJSy22pITp5pL+uPAYWCDHC3hZFClgWI2Us9zb1nmEPSETtImPewNsbTAQlmBj+DhYA8FP7VBEqxlv7tUDEfcg==","_resolved":"/tmp/nix-shell.uG0aGH/89dde0a771a0bc0cbf512f5e92442a13/akoenig-effect-http-recorder-1.0.6.tgz","_from":"file:akoenig-effect-http-recorder-1.0.6.tgz","_nodeVersion":"22.16.0","_npmVersion":"10.9.2","dist":{"integrity":"sha512-tJSy22pITp5pL+uPAYWCDHC3hZFClgWI2Us9zb1nmEPSETtImPewNsbTAQlmBj+DhYA8FP7VBEqxlv7tUDEfcg==","shasum":"73b2e63cdf6cc9625d0b35794382eff47924d815","tarball":"https://registry.npmjs.org/@akoenig/effect-http-recorder/-/effect-http-recorder-1.0.6.tgz","fileCount":127,"unpackedSize":312085,"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@akoenig%2feffect-http-recorder@1.0.6","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIEi/hkE1yVw8JZoQ/hdXjVUasf/atJijvOh27fsoSeWqAiEAnw0GEO9LMgaA3BRAfbLKdtC+WrxJ/jASn1bPURsEomY="}]},"_npmUser":{"name":"akoenig","email":"hello@andrekoenig.de","actor":{"name":"akoenig","email":"hello@andrekoenig.de","type":"user"}},"directories":{},"maintainers":[{"name":"akoenig","email":"hello@andrekoenig.de"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/effect-http-recorder_1.0.6_1752170621523_0.3259253594129272"},"_hasShrinkwrap":false}},"time":{"created":"2025-07-05T21:28:03.086Z","modified":"2025-07-10T18:03:42.144Z","1.0.1":"2025-07-05T21:28:03.398Z","1.0.2":"2025-07-06T09:15:57.781Z","1.0.6":"2025-07-10T18:03:41.686Z"},"bugs":{"url":"https://github.com/akoenig/effective/issues"},"author":{"name":"André König","email":"andre.koenig@openformation.io"},"license":"MIT","homepage":"https://github.com/akoenig/effective#readme","keywords":["effect","http","recording","replay","testing"],"repository":{"type":"git","url":"git+https://github.com/akoenig/effective.git","directory":"packages/http-recorder"},"description":"HTTP client recording and replay capabilities for Effect","maintainers":[{"name":"akoenig","email":"hello@andrekoenig.de"}],"readme":"# Effect HTTP Recorder\n\nHTTP client recording and replay capabilities for Effect applications.\n\n## Features\n\n- **Record & Replay**: Capture HTTP interactions during development and replay them in tests\n- **Drop-in Integration**: Works seamlessly with Effect's HttpClient without modifying your existing code\n- **Automatic Redaction**: Built-in security features to exclude sensitive headers and data\n- **Custom Redaction**: Configure custom redaction logic for sanitizing request/response data\n- **File-based Storage**: Stores recordings as JSON files for easy inspection and version control\n- **Layer-based Architecture**: Provides reusable Effect layers for recording and replaying\n\n## Use Cases\n\n- **Testing**: Record real API interactions and replay them in unit/integration tests\n- **Development**: Work offline by replaying previously recorded API responses\n- **Debugging**: Capture and analyze HTTP traffic for troubleshooting\n\n## Recording HTTP Interactions\n\n```typescript\nimport { HttpRecorder } from \"@akoenig/effect-http-recorder\";\nimport { HttpClient } from \"@effect/platform\";\nimport { NodeHttpClient } from \"@effect/platform-node\";\nimport { Effect, Layer } from \"effect\";\n\n// Configure the recorder\nconst recorder = HttpRecorder.layer({\n  path: \"./recordings\",\n  excludedHeaders: [\"authorization\", \"x-api-key\"]\n});\n\n// Your existing Effect code - no changes needed!\nconst program = Effect.gen(function* () {\n  const http = yield* HttpClient.HttpClient;\n\n  return yield* http.get(\"https://api.example.com/data\");\n});\n\n// Enable recording by providing the recorder layer\nconst recordingApp = program.pipe(\n  Effect.provide(\n    Layer.provideMerge(\n      recorder,\n      Layer.mergeAll(\n        NodeHttpClient.layer,\n        NodeContext.layer\n      )\n    )\n  )\n);\n```\n\n## Replaying Recorded Interactions\n\n```typescript\nimport { HttpReplayer } from \"@akoenig/effect-http-recorder\";\nimport { HttpClient } from \"@effect/platform\";\nimport { Effect } from \"effect\";\n\n// Configure the replayer\nconst replayer = HttpReplayer.layer({ path: \"./recordings\" });\n\n// Same program - no code changes required!\nconst program = Effect.gen(function* () {\n  const http = yield* HttpClient.HttpClient;\n\n  return yield* http.get(\"https://api.example.com/data\");\n});\n\n// Enable replay mode by providing the replayer layer\nconst replayingApp = program.pipe(\n  Effect.provide(\n    Layer.provideMerge(\n      replayer,\n      Layer.mergeAll(\n        NodeHttpClient.layer,\n        NodeContext.layer\n      )\n    )\n  )\n);\n```\n\n## Installation\n\n```bash\npnpm add @akoenig/effect-http-recorder\n```\n\n## License\n\nMIT, [André König](https://andrekoenig.com)","readmeFilename":"README.md"}