{"_id":"@electric-ax/durable-streams-server-beta","_rev":"3-d979d54d39bd4fe1a62cb18cbff0d2aa","name":"@electric-ax/durable-streams-server-beta","dist-tags":{"latest":"0.4.0"},"versions":{"0.3.0":{"name":"@electric-ax/durable-streams-server-beta","version":"0.3.0","keywords":["durable-streams","streaming","server","typescript"],"author":{"name":"Durable Stream contributors"},"license":"Apache-2.0","_id":"@electric-ax/durable-streams-server-beta@0.3.0","maintainers":[{"name":"electricsql-bot","email":"infra@electric-sql.com"}],"homepage":"https://github.com/durable-streams/durable-streams#readme","bugs":{"url":"https://github.com/durable-streams/durable-streams/issues"},"dist":{"shasum":"e1014051d4445de7e4e6ac34d155fd59edb3f8b5","tarball":"https://registry.npmjs.org/@electric-ax/durable-streams-server-beta/-/durable-streams-server-beta-0.3.0.tgz","fileCount":29,"integrity":"sha512-EnM/zUIJ0Bv1wLQOQmeBcrHNyaz8jCdfC0GotvtFEyvz/Tivu996XNsmAecrXKj7AammLe7oX576n15OIbhQsw==","signatures":[{"sig":"MEYCIQC7pepw11KQqJ+y0Lda/U8o/EvQmPM7VEbh9QghkW5q4QIhANJAtW6gP/o7r50owPL9LlhO/FAn+fKNeEYfixm7TK1n","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":674006},"main":"./dist/index.cjs","type":"module","_from":"file:electric-ax-durable-streams-server-beta-0.3.0.tgz","types":"./dist/index.d.ts","module":"./dist/index.js","engines":{"node":">=18.0.0"},"exports":{".":{"import":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"require":{"types":"./dist/index.d.cts","default":"./dist/index.cjs"}},"./package.json":"./package.json"},"scripts":{"dev":"tsdown --watch","build":"tsdown","typecheck":"tsc --noEmit"},"_npmUser":{"name":"electricsql-bot","email":"infra@electric-sql.com"},"_resolved":"/private/var/folders/8h/10dynkk10g75zmhg0gy2sd5c0000gn/T/0afa2b1339dd32ed8a822f6e26d06ebc/electric-ax-durable-streams-server-beta-0.3.0.tgz","_integrity":"sha512-EnM/zUIJ0Bv1wLQOQmeBcrHNyaz8jCdfC0GotvtFEyvz/Tivu996XNsmAecrXKj7AammLe7oX576n15OIbhQsw==","repository":{"url":"git+https://github.com/durable-streams/durable-streams.git","type":"git","directory":"packages/server"},"_npmVersion":"11.6.2","description":"Node.js reference server implementation for Durable Streams","directories":{},"sideEffects":false,"_nodeVersion":"24.12.0","dependencies":{"lmdb":"^3.5.1","pino":"^10.3.1","pino-pretty":"^13.0.0","@opentelemetry/api":"^1.9.0","@neophi/sieve-cache":"^1.0.0","@durable-streams/state":"npm:@electric-ax/durable-streams-state-beta@0.3.0","@durable-streams/client":"npm:@electric-ax/durable-streams-client-beta@0.3.0"},"_hasShrinkwrap":false,"devDependencies":{"tsdown":"^0.9.0","vitest":"^4.1.0","typescript":"^5.0.0","@types/node":"^22.19.15","@durable-streams/server-conformance-tests":"0.2.2"},"_npmOperationalInternal":{"tmp":"tmp/durable-streams-server-beta_0.3.0_1776855404281_0.2804239648458633","host":"s3://npm-registry-packages-npm-production"}},"0.3.2":{"name":"@electric-ax/durable-streams-server-beta","version":"0.3.2","keywords":["durable-streams","streaming","server","typescript"],"author":{"name":"Durable Stream contributors"},"license":"Apache-2.0","_id":"@electric-ax/durable-streams-server-beta@0.3.2","maintainers":[{"name":"electricsql-bot","email":"infra@electric-sql.com"}],"homepage":"https://github.com/durable-streams/durable-streams#readme","bugs":{"url":"https://github.com/durable-streams/durable-streams/issues"},"dist":{"shasum":"9eb6363afa289f8245dd0ce02f17295fe02458bc","tarball":"https://registry.npmjs.org/@electric-ax/durable-streams-server-beta/-/durable-streams-server-beta-0.3.2.tgz","fileCount":29,"integrity":"sha512-jo0siJmG6awFjMxaHbIkcUW+SGzmoT2JezxSLZ/wzKVt24Ao4HyWmBMjKXVaEm9Qtq8RjdYiSd6o8X8i0K/wHw==","signatures":[{"sig":"MEUCIQD7K2JC5p5CSnTxkDlexWJ2BxSpx41zay1mMccFuLFYbAIgcNqPBRJeOUHl53wY1valtSqy9L/8CGqxR6dibrLzWIc=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":753502},"main":"./dist/index.cjs","type":"module","_from":"file:electric-ax-durable-streams-server-beta-0.3.2.tgz","types":"./dist/index.d.ts","module":"./dist/index.js","engines":{"node":">=18.0.0"},"exports":{".":{"import":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"require":{"types":"./dist/index.d.cts","default":"./dist/index.cjs"}},"./package.json":"./package.json"},"scripts":{"dev":"tsdown --watch","build":"tsdown","typecheck":"tsc --noEmit"},"_npmUser":{"name":"electricsql-bot","email":"infra@electric-sql.com"},"_resolved":"/private/var/folders/8h/10dynkk10g75zmhg0gy2sd5c0000gn/T/b65a31c63f2f1d1633054ffdf92e34be/electric-ax-durable-streams-server-beta-0.3.2.tgz","_integrity":"sha512-jo0siJmG6awFjMxaHbIkcUW+SGzmoT2JezxSLZ/wzKVt24Ao4HyWmBMjKXVaEm9Qtq8RjdYiSd6o8X8i0K/wHw==","repository":{"url":"git+https://github.com/durable-streams/durable-streams.git","type":"git","directory":"packages/server"},"_npmVersion":"11.6.2","description":"Node.js reference server implementation for Durable Streams","directories":{},"sideEffects":false,"_nodeVersion":"24.12.0","dependencies":{"lmdb":"^3.5.1","pino":"^10.3.1","pino-pretty":"^13.0.0","@opentelemetry/api":"^1.9.0","@neophi/sieve-cache":"^1.0.0","@electric-ax/durable-streams-state-beta":"0.3.1","@electric-ax/durable-streams-client-beta":"0.3.1"},"_hasShrinkwrap":false,"devDependencies":{"tsdown":"^0.9.0","vitest":"^4.1.0","typescript":"^5.0.0","@types/node":"^22.19.15","@durable-streams/server-conformance-tests":"0.3.0"},"_npmOperationalInternal":{"tmp":"tmp/durable-streams-server-beta_0.3.2_1777385554899_0.8167471134759905","host":"s3://npm-registry-packages-npm-production"}},"0.4.0":{"name":"@electric-ax/durable-streams-server-beta","version":"0.4.0","description":"Node.js reference server implementation for Durable Streams","author":{"name":"Durable Stream contributors"},"license":"Apache-2.0","repository":{"type":"git","url":"git+https://github.com/durable-streams/durable-streams.git","directory":"packages/server"},"bugs":{"url":"https://github.com/durable-streams/durable-streams/issues"},"keywords":["durable-streams","streaming","server","typescript"],"type":"module","main":"./dist/index.cjs","module":"./dist/index.js","types":"./dist/index.d.ts","exports":{".":{"import":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"require":{"types":"./dist/index.d.cts","default":"./dist/index.cjs"}},"./package.json":"./package.json"},"sideEffects":false,"publishConfig":{"access":"public"},"dependencies":{"@neophi/sieve-cache":"^1.0.0","lmdb":"^3.5.1","pino":"^10.3.1","pino-pretty":"^13.0.0","@durable-streams/client":"0.2.3","@durable-streams/state":"0.2.5"},"devDependencies":{"@types/node":"^22.19.15","tsdown":"^0.9.0","typescript":"^5.0.0","vitest":"^4.1.0","@durable-streams/server-conformance-tests":"0.3.0"},"engines":{"node":">=18.0.0"},"scripts":{"build":"tsdown","dev":"tsdown --watch","typecheck":"tsc --noEmit"},"_id":"@electric-ax/durable-streams-server-beta@0.4.0","homepage":"https://github.com/durable-streams/durable-streams#readme","_integrity":"sha512-sy+6K5hCFqcnoDVlVgcigVX9k56QKPUY8GerJ5GsQM7AV9l5+60/YhVGi7QpWOT2iOv3ax2uKuI1sG8rk+T3Nw==","_resolved":"/private/var/folders/8h/10dynkk10g75zmhg0gy2sd5c0000gn/T/b364d6ec031e415dff44b0cdf3c12f40/electric-ax-durable-streams-server-beta-0.4.0.tgz","_from":"file:electric-ax-durable-streams-server-beta-0.4.0.tgz","_nodeVersion":"24.12.0","_npmVersion":"11.6.2","dist":{"integrity":"sha512-sy+6K5hCFqcnoDVlVgcigVX9k56QKPUY8GerJ5GsQM7AV9l5+60/YhVGi7QpWOT2iOv3ax2uKuI1sG8rk+T3Nw==","shasum":"79cc946cffe5c86d34d3c48cd715d9feb9a37202","tarball":"https://registry.npmjs.org/@electric-ax/durable-streams-server-beta/-/durable-streams-server-beta-0.4.0.tgz","fileCount":22,"unpackedSize":582450,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIQC3ISGTHBRJa/CZF9vVSVaBK3IaZUEMH4msKZZYR8Y2PQIgdd4SeDmYn/jfBdEXoDLHkrKtYUox/pRsL/XaLqWTnHo="}]},"_npmUser":{"name":"electricsql-bot","email":"infra@electric-sql.com"},"directories":{},"maintainers":[{"name":"electricsql-bot","email":"infra@electric-sql.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/durable-streams-server-beta_0.4.0_1778502659864_0.750794915708539"},"_hasShrinkwrap":false}},"time":{"created":"2026-04-22T10:56:44.180Z","modified":"2026-05-11T12:31:00.213Z","0.3.0":"2026-04-22T10:56:44.438Z","0.3.2":"2026-04-28T14:12:35.112Z","0.4.0":"2026-05-11T12:31:00.084Z"},"bugs":{"url":"https://github.com/durable-streams/durable-streams/issues"},"author":{"name":"Durable Stream contributors"},"license":"Apache-2.0","homepage":"https://github.com/durable-streams/durable-streams#readme","keywords":["durable-streams","streaming","server","typescript"],"repository":{"type":"git","url":"git+https://github.com/durable-streams/durable-streams.git","directory":"packages/server"},"description":"Node.js reference server implementation for Durable Streams","maintainers":[{"name":"electricsql-bot","email":"infra@electric-sql.com"}],"readme":"# @durable-streams/server\n\nNode.js reference server implementation for the Durable Streams protocol.\n\n## Installation\n\n```bash\nnpm install @durable-streams/server\n```\n\n## Overview\n\nThis package provides a reference implementation of the Durable Streams protocol for Node.js. It supports both in-memory and file-backed storage modes, making it suitable for development, testing, and prototyping. For production deployments, use the [Caddy plugin](../caddy-plugin/README.md) or [Electric Cloud](https://dashboard.electric-sql.cloud).\n\nFor a standalone binary option, see the [Caddy-based server](https://github.com/durable-streams/durable-streams/releases).\n\n## Quick Start\n\n```typescript\nimport { DurableStreamTestServer } from \"@durable-streams/server\"\n\nconst server = new DurableStreamTestServer({\n  port: 4437,\n  host: \"127.0.0.1\",\n})\n\nawait server.start()\nconsole.log(\"Server running on http://127.0.0.1:4437\")\n```\n\n## Storage Modes\n\n### In-Memory (Default)\n\nFast, ephemeral storage for development and testing. Omit `dataDir` to use in-memory:\n\n```typescript\nconst server = new DurableStreamTestServer({ port: 4437 })\n```\n\n### File-Backed\n\nPersistent storage with streams stored as log files and LMDB for metadata:\n\n```typescript\nconst server = new DurableStreamTestServer({\n  port: 4437,\n  dataDir: \"./data/streams\",\n})\n```\n\n## Lifecycle Hooks\n\nTrack stream creation and deletion events:\n\n```typescript\nconst server = new DurableStreamTestServer({\n  port: 4437,\n  onStreamCreated: (event) => {\n    console.log(`Stream created: ${event.path} (${event.contentType})`)\n  },\n  onStreamDeleted: (event) => {\n    console.log(`Stream deleted: ${event.path}`)\n  },\n})\n```\n\n## API\n\n### DurableStreamTestServer\n\n````typescript\ninterface TestServerOptions {\n  port?: number                          // Default: 4437\n  host?: string                          // Default: \"127.0.0.1\"\n  longPollTimeout?: number               // Default: 30000 (ms)\n  dataDir?: string                       // File-backed storage; omit for in-memory\n  onStreamCreated?: StreamLifecycleHook  // Hook for stream creation\n  onStreamDeleted?: StreamLifecycleHook  // Hook for stream deletion\n  compression?: boolean                  // Default: true\n  cursorIntervalSeconds?: number         // Default: 20\n  cursorEpoch?: Date                     // Epoch for cursor calculation\n}\n\nclass DurableStreamTestServer {\n  constructor(options?: TestServerOptions)\n  start(): Promise<void>\n  stop(): Promise<void>\n  readonly port: number\n  readonly baseUrl: string\n}\n\n## Exports\n\n```typescript\nexport { DurableStreamTestServer } from \"./server\"\nexport { StreamStore } from \"./store\"\nexport { FileBackedStreamStore } from \"./file-store\"\nexport { encodeStreamPath, decodeStreamPath } from \"./path-encoding\"\nexport { createRegistryHooks } from \"./registry-hook\"\nexport {\n  calculateCursor,\n  handleCursorCollision,\n  generateResponseCursor,\n  DEFAULT_CURSOR_EPOCH,\n  DEFAULT_CURSOR_INTERVAL_SECONDS,\n  type CursorOptions,\n} from \"./cursor\"\nexport type {\n  Stream,\n  StreamMessage,\n  TestServerOptions,\n  PendingLongPoll,\n  StreamLifecycleEvent,\n  StreamLifecycleHook,\n} from \"./types\"\n````\n\n## Testing Your Implementation\n\nUse the conformance test suite to validate protocol compliance:\n\n```typescript\nimport { runConformanceTests } from \"@durable-streams/server-conformance-tests\"\n\nrunConformanceTests({\n  baseUrl: \"http://localhost:4437\",\n})\n```\n\n## License\n\nApache-2.0\n","readmeFilename":"README.md"}