{"_id":"@aymenkits/chat-express","name":"@aymenkits/chat-express","dist-tags":{"latest":"1.0.0"},"versions":{"1.0.0":{"name":"@aymenkits/chat-express","version":"1.0.0","description":"Express 4/5 handlers for the chat REST endpoints: list threads (with unread counts), history, send, mark read, unread total. Structural req/res typing, envelope-agnostic, auth-agnostic (getUserId seam).","license":"MIT","main":"dist/index.js","types":"dist/index.d.ts","scripts":{"build":"tsc -p tsconfig.json","typecheck":"tsc -p tsconfig.json --noEmit"},"dependencies":{"@aymenkits/chat-core":"1.0.0"},"publishConfig":{"access":"public"},"repository":{"type":"git","url":"git+https://github.com/aymenmokhtarikouki/chat-kit.git","directory":"packages/express"},"keywords":["chat","messaging","socket.io","realtime","threads","express"],"engines":{"node":">=18"},"sideEffects":false,"homepage":"https://github.com/aymenmokhtarikouki/chat-kit#readme","bugs":{"url":"https://github.com/aymenmokhtarikouki/chat-kit/issues"},"author":{"name":"Aymen Mokhtari"},"_id":"@aymenkits/chat-express@1.0.0","gitHead":"b7afbcf4861c0cd2f1ed98977bafef6b52a3006d","_nodeVersion":"22.14.0","_npmVersion":"10.9.2","dist":{"integrity":"sha512-MrEstxmKGiXVjmqonzl2+y4tprMCrY0DBvccrGo/xHK6jlF0B39eulP8J7r6RtTtolPuU37OIcS7iKKzJ6t9dA==","shasum":"e320514accb8bc2c412dd1c7bdfaf9e861ad6d7d","tarball":"https://registry.npmjs.org/@aymenkits/chat-express/-/chat-express-1.0.0.tgz","fileCount":7,"unpackedSize":35902,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIBeL4xkXTej5hNCpZYoeL3QsfZrgKcKNaPmnHXy9mDLdAiEAoORa9wlbmn/AEaV//oVRXFrS9ibvxWU3I4wXnbLpmDo="}]},"_npmUser":{"name":"aymen-mokhtari","email":"ayman.mokhtari@proton.me"},"directories":{},"maintainers":[{"name":"aymen-mokhtari","email":"ayman.mokhtari@proton.me"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/chat-express_1.0.0_1783791533078_0.5257326375492488"},"_hasShrinkwrap":false}},"time":{"created":"2026-07-11T17:38:52.905Z","1.0.0":"2026-07-11T17:38:53.209Z","modified":"2026-07-11T17:38:53.436Z"},"maintainers":[{"name":"aymen-mokhtari","email":"ayman.mokhtari@proton.me"}],"description":"Express 4/5 handlers for the chat REST endpoints: list threads (with unread counts), history, send, mark read, unread total. Structural req/res typing, envelope-agnostic, auth-agnostic (getUserId seam).","homepage":"https://github.com/aymenmokhtarikouki/chat-kit#readme","keywords":["chat","messaging","socket.io","realtime","threads","express"],"repository":{"type":"git","url":"git+https://github.com/aymenmokhtarikouki/chat-kit.git","directory":"packages/express"},"author":{"name":"Aymen Mokhtari"},"bugs":{"url":"https://github.com/aymenmokhtarikouki/chat-kit/issues"},"license":"MIT","readme":"# @aymenkits/chat-express\n\nExpress 4/5 REST endpoints over a ChatService: threads with unread counts, history paging, send, mark read, unread total. Envelope- and auth-agnostic.\n\n## Install\n\n```bash\nnpm install @aymenkits/chat-express\n```\n\nInstalls with it: `@aymenkits/chat-core` (automatic dependency).\n\n## You provide\n\n- Your Express router + auth middleware (reads `req.auth.userId` by default)\n\nThe package never owns tables, never imports an ORM, HTTP framework, or\nprovider SDK it can take as a parameter — storage and delivery are seams your\napp implements on its own stack.\n\n## Quick example\n\n```ts\nimport { createChatHandlers } from '@aymenkits/chat-express'\n\nconst h = createChatHandlers(chat, { wrapResponse })\nrouter.get('/chat/threads', requireAuth, h.listThreads)\n```\n\n## Pairs with\n\n- `@aymenkits/auth-express` middleware upstream\n- `@aymenkits/chat-socketio` for the realtime side\n\nKits pair **by shape, never by import** — pass the sibling kit, your own\nservice, or a stub in tests.\n\n## Docs\n\nFull contracts and integration guides live in the repo:\nhttps://github.com/aymenmokhtarikouki/chat-kit (`contracts/`, `docs/`).\n\n## License\n\nMIT\n","readmeFilename":"README.md","_rev":"1-30fbced6167d80884f0c47bb6ac78546"}