{"_id":"@capixjs/store-redis","_rev":"12-a7a45bda90b5d7020335a7e4baefb5fe","name":"@capixjs/store-redis","dist-tags":{"alpha":"0.1.0-alpha.24","latest":"1.0.0","beta":"0.1.0-beta.3"},"versions":{"0.1.0-alpha.22":{"name":"@capixjs/store-redis","version":"0.1.0-alpha.22","keywords":["capix","redis","cache","rate-limit","store"],"license":"MIT","_id":"@capixjs/store-redis@0.1.0-alpha.22","maintainers":[{"name":"milanito","email":"matt@matthieurondeau.fr"}],"dist":{"shasum":"14f2b82902060cf946b1d0d9fb7c0e6f714b175f","tarball":"https://registry.npmjs.org/@capixjs/store-redis/-/store-redis-0.1.0-alpha.22.tgz","fileCount":7,"integrity":"sha512-m1twlFTSCtP7DwtyIzmLfjXSPUNRz9X52wAJJUhwSIIqH++Pwr2/Cwkx9BY6sNjGDW6CkBRvWxiEDX2tSRM90w==","signatures":[{"sig":"MEUCIA9da5wu5+nK7a8fy0g6Y2emuTlei2uxIowJ7PSCQ1lzAiEA9h7kaNS05Fb6zlgRYb+sJQk5j1wOm0ULl1P7JHBBPdw=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":12460},"main":"./dist/index.js","type":"module","_from":"file:capixjs-store-redis-0.1.0-alpha.22.tgz","types":"./dist/index.d.ts","engines":{"node":">=20"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"scripts":{"test":"vitest run","build":"tsc","typecheck":"tsc --noEmit"},"_npmUser":{"name":"milanito","email":"matt@matthieurondeau.fr"},"_resolved":"/tmp/fc4539f924460aaa911053f9050dd4f1/capixjs-store-redis-0.1.0-alpha.22.tgz","_integrity":"sha512-m1twlFTSCtP7DwtyIzmLfjXSPUNRz9X52wAJJUhwSIIqH++Pwr2/Cwkx9BY6sNjGDW6CkBRvWxiEDX2tSRM90w==","_npmVersion":"10.9.8","description":"Redis-backed cache and rate-limit stores for Capix enhancers","directories":{},"_nodeVersion":"22.23.1","_hasShrinkwrap":false,"devDependencies":{"zod":"^4.0.0","vitest":"^1.6.0","typescript":"^5.5.0","@types/node":"^20.0.0","@capixjs/core":"0.1.0-alpha.22"},"peerDependencies":{"@capixjs/core":">=0.1.0-0"},"_npmOperationalInternal":{"tmp":"tmp/store-redis_0.1.0-alpha.22_1783079390517_0.27243873051413736","host":"s3://npm-registry-packages-npm-production"}},"0.1.0-alpha.23":{"name":"@capixjs/store-redis","version":"0.1.0-alpha.23","keywords":["capix","redis","cache","rate-limit","store"],"license":"MIT","_id":"@capixjs/store-redis@0.1.0-alpha.23","maintainers":[{"name":"milanito","email":"matt@matthieurondeau.fr"}],"dist":{"shasum":"b051763755686bef951c1f6e79cbeef61c6eaeb4","tarball":"https://registry.npmjs.org/@capixjs/store-redis/-/store-redis-0.1.0-alpha.23.tgz","fileCount":7,"integrity":"sha512-XMCGdpR+7fYS/NKxp8i0j0lhaBcwOnsGkuMWdJ2DyFM+fISHxG09FaYeljho18UPICQZj43bXLAoIXUPca4hxg==","signatures":[{"sig":"MEYCIQCSXZL8Ij5E72Cv/E702r0ty1gPcAIZ4vjRS6z33bBdJAIhAOkeBAYxGEldK0Dam2gEoQzVY2VlgE/kxrlUqmb3bR9U","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":12460},"main":"./dist/index.js","type":"module","_from":"file:capixjs-store-redis-0.1.0-alpha.23.tgz","types":"./dist/index.d.ts","engines":{"node":">=20"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"scripts":{"test":"vitest run","build":"tsc","typecheck":"tsc --noEmit"},"_npmUser":{"name":"milanito","email":"matt@matthieurondeau.fr"},"_resolved":"/tmp/8bb1335296a32ae15b78dad8a1007135/capixjs-store-redis-0.1.0-alpha.23.tgz","_integrity":"sha512-XMCGdpR+7fYS/NKxp8i0j0lhaBcwOnsGkuMWdJ2DyFM+fISHxG09FaYeljho18UPICQZj43bXLAoIXUPca4hxg==","_npmVersion":"10.9.8","description":"Redis-backed cache and rate-limit stores for Capix enhancers","directories":{},"_nodeVersion":"22.23.1","_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"zod":"^4.0.0","vitest":"^1.6.0","typescript":"^5.5.0","@types/node":"^20.0.0","@capixjs/core":"0.1.0-alpha.23"},"peerDependencies":{"@capixjs/core":">=0.1.0-0"},"_npmOperationalInternal":{"tmp":"tmp/store-redis_0.1.0-alpha.23_1783079687578_0.2946065498653203","host":"s3://npm-registry-packages-npm-production"}},"0.1.0-alpha.24":{"name":"@capixjs/store-redis","version":"0.1.0-alpha.24","keywords":["capix","redis","cache","rate-limit","store"],"license":"MIT","_id":"@capixjs/store-redis@0.1.0-alpha.24","maintainers":[{"name":"milanito","email":"matt@matthieurondeau.fr"}],"homepage":"https://github.com/milanito/capix#readme","bugs":{"url":"https://github.com/milanito/capix/issues"},"dist":{"shasum":"c5dafd1cbd16fc30f52278a8769c90a78cdfde5f","tarball":"https://registry.npmjs.org/@capixjs/store-redis/-/store-redis-0.1.0-alpha.24.tgz","fileCount":7,"integrity":"sha512-iRhKruaXH7dBni2J6lkz4RgQmC73QbHjuwhQ1obQFZkjFOqLSUP0+fGe2o3lbfhxtQeZXSCKuIlfIIjQ5fIr+Q==","signatures":[{"sig":"MEYCIQCBYrGarVRmw52w2SSdPvwe5i0PjVi+eUeUjrnAkhhZAgIhANrSBV+1vOIx11JnER19HH9S4KSiDIyGK4QWW5lPK9ur","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@capixjs%2fstore-redis@0.1.0-alpha.24","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":12728},"main":"./dist/index.js","type":"module","_from":"file:/home/runner/work/_temp/capixjs-store-redis-0.1.0-alpha.24.tgz","types":"./dist/index.d.ts","engines":{"node":">=20"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"scripts":{"test":"vitest run","build":"tsc","typecheck":"tsc --noEmit"},"_npmUser":{"name":"milanito","email":"matt@matthieurondeau.fr"},"_resolved":"/home/runner/work/_temp/capixjs-store-redis-0.1.0-alpha.24.tgz","_integrity":"sha512-iRhKruaXH7dBni2J6lkz4RgQmC73QbHjuwhQ1obQFZkjFOqLSUP0+fGe2o3lbfhxtQeZXSCKuIlfIIjQ5fIr+Q==","repository":{"url":"git+https://github.com/milanito/capix.git","type":"git","directory":"packages/stores/redis"},"_npmVersion":"10.9.8","description":"Redis-backed cache and rate-limit stores for Capix enhancers","directories":{},"_nodeVersion":"22.23.1","_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"zod":"^4.0.0","vitest":"^1.6.0","typescript":"^5.5.0","@types/node":"^20.0.0","@capixjs/core":"0.1.0-alpha.24"},"peerDependencies":{"@capixjs/core":">=0.1.0-0"},"_npmOperationalInternal":{"tmp":"tmp/store-redis_0.1.0-alpha.24_1783100113756_0.6162273188240961","host":"s3://npm-registry-packages-npm-production"}},"0.1.0-beta.1":{"name":"@capixjs/store-redis","version":"0.1.0-beta.1","keywords":["capix","redis","cache","rate-limit","store"],"license":"MIT","_id":"@capixjs/store-redis@0.1.0-beta.1","maintainers":[{"name":"milanito","email":"matt@matthieurondeau.fr"}],"homepage":"https://github.com/milanito/capix#readme","bugs":{"url":"https://github.com/milanito/capix/issues"},"dist":{"shasum":"de971c6414949ffde703829e679821733c4dfa07","tarball":"https://registry.npmjs.org/@capixjs/store-redis/-/store-redis-0.1.0-beta.1.tgz","fileCount":7,"integrity":"sha512-N3Rb66By+0oHwZ1VRhHYCwm6nuiGV5Gf1MMi7dW5NP1py+8cXZmDClS/185OzS0neRvKFq/uP8wPO/KuvGg/2w==","signatures":[{"sig":"MEQCIHu4SquJpeuLn4ZcmiUDB0rap2hSYMOBHmc+Rn509TlfAiAiiBO88/JJnjz9b1DEBG4TjtWrWb3JWPykJd0zSjmmmA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@capixjs%2fstore-redis@0.1.0-beta.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":12724},"main":"./dist/index.js","type":"module","_from":"file:/home/runner/work/_temp/capixjs-store-redis-0.1.0-beta.1.tgz","types":"./dist/index.d.ts","engines":{"node":">=20"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"scripts":{"test":"vitest run","build":"tsc","typecheck":"tsc --noEmit"},"_npmUser":{"name":"milanito","email":"matt@matthieurondeau.fr"},"_resolved":"/home/runner/work/_temp/capixjs-store-redis-0.1.0-beta.1.tgz","_integrity":"sha512-N3Rb66By+0oHwZ1VRhHYCwm6nuiGV5Gf1MMi7dW5NP1py+8cXZmDClS/185OzS0neRvKFq/uP8wPO/KuvGg/2w==","repository":{"url":"git+https://github.com/milanito/capix.git","type":"git","directory":"packages/stores/redis"},"_npmVersion":"10.9.8","description":"Redis-backed cache and rate-limit stores for Capix enhancers","directories":{},"_nodeVersion":"22.23.1","_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"zod":"^4.0.0","vitest":"^1.6.0","typescript":"^5.5.0","@types/node":"^20.0.0","@capixjs/core":"0.1.0-beta.1"},"peerDependencies":{"@capixjs/core":">=0.1.0-0"},"_npmOperationalInternal":{"tmp":"tmp/store-redis_0.1.0-beta.1_1783100495406_0.9008508142977398","host":"s3://npm-registry-packages-npm-production"}},"0.1.0-beta.2":{"name":"@capixjs/store-redis","version":"0.1.0-beta.2","keywords":["capix","redis","cache","rate-limit","store","pubsub","event-bus"],"license":"MIT","_id":"@capixjs/store-redis@0.1.0-beta.2","maintainers":[{"name":"milanito","email":"matt@matthieurondeau.fr"}],"homepage":"https://github.com/milanito/capix#readme","bugs":{"url":"https://github.com/milanito/capix/issues"},"dist":{"shasum":"0557a4b30a1da57a727fe054e2bec90c53c9544e","tarball":"https://registry.npmjs.org/@capixjs/store-redis/-/store-redis-0.1.0-beta.2.tgz","fileCount":11,"integrity":"sha512-JokFSW34GjBNEGyYNMyH91vDnDx4L1I19vC8gbmNQf289mFkhaAsRtO6eaY9hcIxXK1WUG0a7mp1VzqvI4w4IQ==","signatures":[{"sig":"MEUCIQCuAstXJSTTuC/LJn4ISijB3Mqz+8o5mZ+ViN41PdKzOQIgfp9ytmynYsYeoue1AEvLMG6k4sASVywByJScpD35NxY=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@capixjs%2fstore-redis@0.1.0-beta.2","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":22121},"main":"./dist/index.js","type":"module","_from":"file:/home/runner/work/_temp/capixjs-store-redis-0.1.0-beta.2.tgz","types":"./dist/index.d.ts","engines":{"node":">=20"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"scripts":{"test":"vitest run","build":"tsc","typecheck":"tsc --noEmit"},"_npmUser":{"name":"milanito","email":"matt@matthieurondeau.fr"},"_resolved":"/home/runner/work/_temp/capixjs-store-redis-0.1.0-beta.2.tgz","_integrity":"sha512-JokFSW34GjBNEGyYNMyH91vDnDx4L1I19vC8gbmNQf289mFkhaAsRtO6eaY9hcIxXK1WUG0a7mp1VzqvI4w4IQ==","repository":{"url":"git+https://github.com/milanito/capix.git","type":"git","directory":"packages/stores/redis"},"_npmVersion":"10.9.8","description":"Redis-backed cache, rate-limit stores, and pub/sub event bus for Capix","directories":{},"_nodeVersion":"22.23.1","_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"zod":"^4.0.0","vitest":"^1.6.0","typescript":"^5.5.0","@types/node":"^20.0.0","@capixjs/core":"0.1.0-beta.2"},"peerDependencies":{"@capixjs/core":">=0.1.0-0"},"_npmOperationalInternal":{"tmp":"tmp/store-redis_0.1.0-beta.2_1783106326273_0.2623819783551431","host":"s3://npm-registry-packages-npm-production"}},"0.1.0-beta.3":{"name":"@capixjs/store-redis","version":"0.1.0-beta.3","keywords":["capix","redis","cache","rate-limit","store","pubsub","event-bus"],"license":"MIT","_id":"@capixjs/store-redis@0.1.0-beta.3","maintainers":[{"name":"milanito","email":"matt@matthieurondeau.fr"}],"homepage":"https://github.com/milanito/capix#readme","bugs":{"url":"https://github.com/milanito/capix/issues"},"dist":{"shasum":"46aa001a124b06378b6f63c53227ec2edb0af381","tarball":"https://registry.npmjs.org/@capixjs/store-redis/-/store-redis-0.1.0-beta.3.tgz","fileCount":11,"integrity":"sha512-qPuv9xuM3rREdiO3bB5wfspIhgniBpoBcEaSioWOhRkZDF20jVb42rXG11gLwDkcp2+0uaQFatXqKRE1C2CsFQ==","signatures":[{"sig":"MEUCIDwBycdTtnBSQW1C6HG8Lh7Dp11J8UpuG7Orj/jK9MnWAiEAuP8kOQlTNjP7PCXeqZ3W1tWe9T/cpTR28dqaRpUdV1w=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@capixjs%2fstore-redis@0.1.0-beta.3","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":22121},"main":"./dist/index.js","type":"module","_from":"file:/home/runner/work/_temp/capixjs-store-redis-0.1.0-beta.3.tgz","types":"./dist/index.d.ts","engines":{"node":">=20"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"scripts":{"test":"vitest run","build":"tsc","typecheck":"tsc --noEmit"},"_npmUser":{"name":"milanito","email":"matt@matthieurondeau.fr"},"_resolved":"/home/runner/work/_temp/capixjs-store-redis-0.1.0-beta.3.tgz","_integrity":"sha512-qPuv9xuM3rREdiO3bB5wfspIhgniBpoBcEaSioWOhRkZDF20jVb42rXG11gLwDkcp2+0uaQFatXqKRE1C2CsFQ==","repository":{"url":"git+https://github.com/milanito/capix.git","type":"git","directory":"packages/stores/redis"},"_npmVersion":"10.9.8","description":"Redis-backed cache, rate-limit stores, and pub/sub event bus for Capix","directories":{},"_nodeVersion":"22.23.1","_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"zod":"^4.0.0","vitest":"^1.6.0","typescript":"^5.5.0","@types/node":"^20.0.0","@capixjs/core":"0.1.0-beta.3"},"peerDependencies":{"@capixjs/core":">=0.1.0-0"},"_npmOperationalInternal":{"tmp":"tmp/store-redis_0.1.0-beta.3_1783106784958_0.0007129837153931895","host":"s3://npm-registry-packages-npm-production"}},"1.0.0":{"name":"@capixjs/store-redis","version":"1.0.0","description":"Redis-backed cache, rate-limit stores, and pub/sub event bus for Capix","license":"MIT","repository":{"type":"git","url":"git+https://github.com/milanito/capix.git","directory":"packages/stores/redis"},"homepage":"https://github.com/milanito/capix#readme","bugs":{"url":"https://github.com/milanito/capix/issues"},"type":"module","main":"./dist/index.js","types":"./dist/index.d.ts","exports":{".":{"import":"./dist/index.js","types":"./dist/index.d.ts"}},"keywords":["capix","redis","cache","rate-limit","store","pubsub","event-bus"],"engines":{"node":">=20"},"peerDependencies":{"@capixjs/core":">=0.1.0-0"},"devDependencies":{"@types/node":"^20.0.0","typescript":"^5.5.0","vitest":"^3.2.7","zod":"^4.0.0","@capixjs/core":"1.0.0"},"scripts":{"build":"tsc","test":"vitest run","typecheck":"tsc --noEmit"},"_id":"@capixjs/store-redis@1.0.0","_integrity":"sha512-+5WjCizP+N63i9UEB1D7YR/tHOMo/XzfUPNf0UK3l+4g3U3pZlHMKDb9BMwoCf0VLjZQ2K+ALrEhYqQvaE/a0Q==","_resolved":"/home/runner/work/_temp/capixjs-store-redis-1.0.0.tgz","_from":"file:/home/runner/work/_temp/capixjs-store-redis-1.0.0.tgz","_nodeVersion":"22.23.1","_npmVersion":"10.9.8","dist":{"integrity":"sha512-+5WjCizP+N63i9UEB1D7YR/tHOMo/XzfUPNf0UK3l+4g3U3pZlHMKDb9BMwoCf0VLjZQ2K+ALrEhYqQvaE/a0Q==","shasum":"d8c32f682f423d70805a0294ddf6d88fc1495ebc","tarball":"https://registry.npmjs.org/@capixjs/store-redis/-/store-redis-1.0.0.tgz","fileCount":11,"unpackedSize":22107,"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@capixjs%2fstore-redis@1.0.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIAxcamG4SAInAQ9R6bQOj4Bo92vzcXTJDlO2O/HZ9rWqAiEAw3rAI8jIf2LaJ46ndYs0lf9LCp9/lDGU+4862eARkNQ="}]},"_npmUser":{"name":"milanito","email":"matt@matthieurondeau.fr"},"directories":{},"maintainers":[{"name":"milanito","email":"matt@matthieurondeau.fr"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/store-redis_1.0.0_1785920956934_0.31457921706513114"},"_hasShrinkwrap":false}},"time":{"created":"2026-07-03T11:49:50.333Z","modified":"2026-08-05T09:09:17.706Z","0.1.0-alpha.22":"2026-07-03T11:49:50.650Z","0.1.0-alpha.23":"2026-07-03T11:54:47.719Z","0.1.0-alpha.24":"2026-07-03T17:35:13.893Z","0.1.0-beta.1":"2026-07-03T17:41:35.533Z","0.1.0-beta.2":"2026-07-03T19:18:46.405Z","0.1.0-beta.3":"2026-07-03T19:26:25.090Z","1.0.0":"2026-08-05T09:09:17.084Z"},"bugs":{"url":"https://github.com/milanito/capix/issues"},"license":"MIT","homepage":"https://github.com/milanito/capix#readme","keywords":["capix","redis","cache","rate-limit","store","pubsub","event-bus"],"repository":{"type":"git","url":"git+https://github.com/milanito/capix.git","directory":"packages/stores/redis"},"description":"Redis-backed cache, rate-limit stores, and pub/sub event bus for Capix","maintainers":[{"name":"milanito","email":"matt@matthieurondeau.fr"}],"readme":"# @capixjs/store-redis\n\nRedis-backed stores for [Capix](https://github.com/milanito/capix) enhancers. The in-memory defaults of `withCache` and `withRateLimit` are per-process — behind a load balancer each instance caches independently and N instances enforce N× the intended rate limit. These stores share state through Redis so both behave correctly across instances.\n\n## Install\n\n```bash\nnpm install @capixjs/store-redis ioredis\n```\n\nNo Redis library is bundled — pass any client with an ioredis-compatible surface (`get` / `set(key, value, 'PX', ms)` / `eval`).\n\n## Usage\n\n```ts\nimport Redis from 'ioredis';\nimport { withCache, withRateLimit } from '@capixjs/core';\nimport { redisCacheStore, redisRateLimitStore } from '@capixjs/store-redis';\n\nconst redis = new Redis(process.env.REDIS_URL);\n\nconst getStats = capability(schema, resolver)\n  .enhance(withCache(30, { store: redisCacheStore(redis) }));\n\nconst createPost = capability(schema, resolver)\n  .enhance(withRateLimit({\n    limit: 100,\n    windowMs: 60_000,\n    keyFn: (_input, ctx) => ctx.user?.id ?? 'anon',\n    store: redisRateLimitStore(redis),\n  }));\n```\n\n## Semantics\n\n- **Cache** — values are JSON-serialized under `capix:cache:<key>` with Redis-native expiry (`PX`). Unparseable/foreign entries read as misses.\n- **Rate limit** — an atomic Lua script (`INCR` + `PEXPIRE` on first hit + `PTTL`) implements a **fixed window**: the counter resets `windowMs` after the window's first hit. One round-trip per request; concurrent hits across instances cannot race past the limit. (The in-memory default uses a sliding window — expect slightly different edge behavior at window boundaries.)\n- **Prefix** — pass `{ prefix: 'myapp:' }` so multiple apps can share one Redis.\n\n## node-redis\n\nnode-redis v4 has a different `set`/`eval` signature; adapt with a thin wrapper:\n\n```ts\nconst client = createClient({ url: process.env.REDIS_URL });\nconst adapted = {\n  get: (k: string) => client.get(k),\n  set: (k: string, v: string, _px: 'PX', ms: number) => client.set(k, v, { PX: ms }),\n  eval: (script: string, _n: number, key: string, ...args: (string | number)[]) =>\n    client.eval(script, { keys: [key], arguments: args.map(String) }),\n};\n```\n\n## Cross-instance event bus\n\nThe in-memory event bus delivers only within one process — an event published on instance A never reaches WebSocket clients connected to instance B. `createRedisEventBus` routes events through Redis pub/sub so every instance receives every event:\n\n```ts\nimport Redis from 'ioredis';\nimport { createRedisEventBus } from '@capixjs/store-redis';\n\n// Redis pub/sub needs a dedicated subscriber connection\nconst events = createRedisEventBus<AppEvents>(\n  new Redis(process.env.REDIS_URL),  // publisher\n  new Redis(process.env.REDIS_URL),  // subscriber\n);\n\n// Drop-in wherever a bus is accepted:\nwsTransport({ port: 3001, eventBus: events });\n// in a resolver on ANY instance:\nevents.publish('order:paid', { orderId });\n```\n\nSemantics: the publishing instance receives its own events via the broker round-trip (uniform ordering everywhere); payloads are JSON-serialized; publish failures are logged, never thrown into the publisher — same fire-and-forget contract as the in-memory bus. Pass `{ prefix }` to isolate apps sharing one Redis.\n","readmeFilename":"README.md"}