{"_id":"@alivanz/ts-wire","name":"@alivanz/ts-wire","dist-tags":{"latest":"0.1.0"},"versions":{"0.1.0":{"name":"@alivanz/ts-wire","version":"0.1.0","description":"Contract-first realtime for TypeScript — ts-rest, but for SSE (and WebSocket)","type":"module","sideEffects":false,"engines":{"node":">=22"},"main":"./dist/index.js","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./core":{"types":"./dist/core/index.d.ts","import":"./dist/core/index.js"},"./sse":{"types":"./dist/sse/index.d.ts","import":"./dist/sse/index.js"},"./sse/client":{"types":"./dist/sse/client/index.d.ts","import":"./dist/sse/client/index.js"},"./sse/fetch":{"types":"./dist/sse/fetch/index.d.ts","import":"./dist/sse/fetch/index.js"},"./sse/node":{"types":"./dist/sse/node/index.d.ts","import":"./dist/sse/node/index.js"},"./ws":{"types":"./dist/ws/index.d.ts","import":"./dist/ws/index.js"},"./ws/client":{"types":"./dist/ws/client/index.d.ts","import":"./dist/ws/client/index.js"},"./ws/cf":{"types":"./dist/ws/cf/index.d.ts","import":"./dist/ws/cf/index.js"},"./ws/node":{"types":"./dist/ws/node/index.d.ts","import":"./dist/ws/node/index.js"}},"keywords":["realtime","sse","server-sent-events","eventsource","websocket","contract","type-safe","typescript","standard-schema"],"license":"MIT","author":{"name":"Alivan Akbar","email":"alivan1627@gmail.com"},"repository":{"type":"git","url":"git+https://github.com/alivanz/ts-wire.git"},"homepage":"https://github.com/alivanz/ts-wire#readme","bugs":{"url":"https://github.com/alivanz/ts-wire/issues"},"publishConfig":{"access":"public"},"dependencies":{"@standard-schema/spec":"^1.0.0"},"devDependencies":{"@types/node":"^22.10.0","@types/ws":"^8.18.1","eventsource":"^4.1.0","tsx":"^4.19.2","typescript":"^5.7.2","vitest":"^2.1.8","ws":"^8.21.0","zod":"^3.25.0"},"scripts":{"build":"tsc -p tsconfig.build.json","typecheck":"tsc --noEmit","test":"vitest run","test:watch":"vitest","test:integration":"vitest run --config vitest.integration.config.ts","clean":"rm -rf dist"},"_id":"@alivanz/ts-wire@0.1.0","_integrity":"sha512-lbQZYPBZ1sVbc0CNxNFcLQUb5vE0hZHrJ+8ljnCAWWiWWUZJ5rbVf2JnLrc5huyqrwNkg6+vyUbPbzpEeNirPA==","_resolved":"/private/var/folders/49/9whggm_n4csbsgzt2g4k690c0000gn/T/ddbded0be1dd3e0ad0af29a97f316a0c/alivanz-ts-wire-0.1.0.tgz","_from":"file:alivanz-ts-wire-0.1.0.tgz","_nodeVersion":"22.20.0","_npmVersion":"10.9.3","dist":{"integrity":"sha512-lbQZYPBZ1sVbc0CNxNFcLQUb5vE0hZHrJ+8ljnCAWWiWWUZJ5rbVf2JnLrc5huyqrwNkg6+vyUbPbzpEeNirPA==","shasum":"1af5890d65a22836347026f4d269f90263186917","tarball":"https://registry.npmjs.org/@alivanz/ts-wire/-/ts-wire-0.1.0.tgz","fileCount":138,"unpackedSize":272098,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIQDn4aS/GNNlj5ubqgDFYV6zyKa7M2zv3dp5kEJlB8wuNQIgBJCQ+DManrenmBTfqWcDWo3kzNsttvs0incvgO6Tryw="}]},"_npmUser":{"name":"alivanz","email":"alivan1627@gmail.com"},"directories":{},"maintainers":[{"name":"alivanz","email":"alivan1627@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/ts-wire_0.1.0_1783672307966_0.4555029661389909"},"_hasShrinkwrap":false}},"time":{"created":"2026-07-10T08:31:47.747Z","0.1.0":"2026-07-10T08:31:48.100Z","modified":"2026-07-10T08:31:48.315Z"},"maintainers":[{"name":"alivanz","email":"alivan1627@gmail.com"}],"description":"Contract-first realtime for TypeScript — ts-rest, but for SSE (and WebSocket)","homepage":"https://github.com/alivanz/ts-wire#readme","keywords":["realtime","sse","server-sent-events","eventsource","websocket","contract","type-safe","typescript","standard-schema"],"repository":{"type":"git","url":"git+https://github.com/alivanz/ts-wire.git"},"author":{"name":"Alivan Akbar","email":"alivan1627@gmail.com"},"bugs":{"url":"https://github.com/alivanz/ts-wire/issues"},"license":"MIT","readme":"# ts-wire\n\nContract-first **realtime** for TypeScript — ts-rest, but for streaming. One shared\n`core` (Standard Schema validation + the decoder invariant) with independent transports:\n\n- **SSE** — one-way, native `EventSource`.\n- **WebSocket** — bidirectional.\n\nA contract is a plain value both ends derive from — no codegen, per-event runtime\nvalidation, `type`-only client import. See `DESIGN.md` (SSE) and `DESIGN-ws.md` (WS).\n\n## Install\n\n```bash\nnpm i @alivanz/ts-wire\n```\n\n## Packages (subpath exports)\n\n| Import | What |\n| --- | --- |\n| `@alivanz/ts-wire/core` | Standard Schema primitives (`InferIn`/`InferOut`, `validateSync`) |\n| `@alivanz/ts-wire/sse` | `defineSse`, `sseType` — the SSE contract |\n| `@alivanz/ts-wire/sse/client` | `initClient` — the EventSource client |\n| `@alivanz/ts-wire/sse/fetch` | `sseResponse` — a `Response` for any fetch runtime (Hono/Next/Bun/Deno/CF Workers) |\n| `@alivanz/ts-wire/sse/node` | `toNodeHandler` — `(req, res)` for Node/Express/Fastify |\n| `@alivanz/ts-wire/ws` | `defineWs` — the bidirectional WS contract |\n| `@alivanz/ts-wire/ws/client` | `connectWs` — the browser-`WebSocket` client |\n| `@alivanz/ts-wire/ws/cf` | `wsSocket` — Cloudflare Durable Objects |\n| `@alivanz/ts-wire/ws/node` | `wsSocket` — node `ws` |\n\n## Requirements\n\n- Node >= 22\n- pnpm\n\n## Scripts\n\n| Script            | Does                              |\n| ----------------- | --------------------------------- |\n| `pnpm build`             | Compile to `dist/`                                   |\n| `pnpm typecheck`         | Type-check without emitting                          |\n| `pnpm test`              | Unit tests (hermetic, with fakes)                    |\n| `pnpm test:integration`  | Real loopback tests — actual http/ws server ↔ client |\n| `pnpm clean`             | Remove `dist/`                                       |\n\n## License\n\nMIT\n","readmeFilename":"README.md","_rev":"1-a55f27d3c593271771bf1f23c27101f5"}