@coderbuzz/kvs-server 0.1.2 → 0.1.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/index.js CHANGED
@@ -139,6 +139,10 @@ function createServer(store, options) {
139
139
  store.reset();
140
140
  return Response.json({ ok: true });
141
141
  });
142
+ app.post("/kv/clean-expired", () => {
143
+ const deleted = store.cleanExpired();
144
+ return Response.json({ ok: true, deleted });
145
+ });
142
146
  app.ws("/ws", {
143
147
  upgrade(req) {
144
148
  const url = new URL(req.url);
@@ -231,6 +235,11 @@ function createServer(store, options) {
231
235
  peer.send(JSON.stringify({ id, result: { ok: true } }));
232
236
  break;
233
237
  }
238
+ case "/kv/clean-expired": {
239
+ const deleted = store.cleanExpired();
240
+ peer.send(JSON.stringify({ id, result: { ok: true, deleted } }));
241
+ break;
242
+ }
234
243
  case "/kv/watch": {
235
244
  if (peer.data.watcher) peer.data.watcher.cancel();
236
245
  peer.data.watcher = store.watch(params.keys, (entries) => {
package/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/routes.ts"],"sourcesContent":["import { AppServer, bearerAuth } from \"@coderbuzz/ken\";\nimport { optional, object, array, union, string, number, bigint, uint8array, boolean, unknown, nullable, literal } from \"@coderbuzz/kyo\";\nimport type { KVStore } from \"@coderbuzz/kvs\";\n\nconst kvKey = array(union([string(), number(), bigint(), boolean(), uint8array()]), { min: 1 });\n\nexport type CreateServerOptions = {\n port?: number;\n hostname?: string;\n accessToken: string;\n};\n\nexport function createServer(store: KVStore, options: CreateServerOptions) {\n const { port = 3000, hostname = \"0.0.0.0\", accessToken: token } = options;\n\n const app = new AppServer({ port, hostname });\n\n const auth = { auth: bearerAuth({ token }) };\n\n // Health check (unprotected)\n app.get(\"/health\", () => ({ ok: true, uptime: process.uptime() }));\n\n // ==================== KV Endpoints ====================\n\n app.apply(\"/kv/*\", auth);\n\n app.post(\"/kv/get\", {\n json: object({\n key: kvKey\n }),\n }, async (ctx) => {\n const body = await ctx.json;\n const entry = store.get(body.key);\n return Response.json(entry ? { entry } : { entry: null });\n });\n\n app.post(\"/kv/set\", {\n json: object({\n key: kvKey,\n value: unknown(),\n ttl: optional(number({ min: 0 })),\n }),\n }, async (ctx) => {\n const body = await ctx.json;\n const result = store.set(body.key, body.value, {\n ttl: body.ttl,\n });\n return Response.json(result);\n });\n\n app.post(\"/kv/delete\", {\n json: object({\n key: kvKey\n }),\n }, async (ctx) => {\n const body = await ctx.json;\n store.delete(body.key);\n return Response.json({ ok: true });\n });\n\n app.post(\"/kv/list\", {\n json: object({\n prefix: optional(kvKey),\n start: optional(kvKey),\n end: optional(kvKey),\n limit: optional(number({ min: 1 })),\n cursor: optional(string()),\n reverse: optional(boolean()),\n }),\n }, async (ctx) => {\n const body = await ctx.json;\n const result = store.list(\n { prefix: body.prefix, start: body.start, end: body.end },\n { limit: body.limit, cursor: body.cursor, reverse: body.reverse }\n );\n return Response.json(result);\n });\n\n app.post(\"/kv/atomic\", {\n json: object({\n checks: optional(array(object({\n key: kvKey,\n version: nullable(number()),\n }))),\n mutations: optional(array(object({\n type: union([literal(\"set\"), literal(\"delete\")]),\n key: kvKey,\n value: optional(unknown()),\n ttl: optional(number({ min: 0 })),\n }))),\n enqueues: optional(array(object({\n payload: unknown(),\n options: optional(object({\n topic: optional(string()),\n delay: optional(number({ min: 0 })),\n maxAttempts: optional(number({ min: 1 })),\n })),\n }))),\n }),\n }, async (ctx) => {\n const body = await ctx.json;\n const op = store.atomic();\n\n if (body.checks) {\n op.check(...body.checks);\n }\n\n if (body.mutations) {\n for (const m of body.mutations) {\n if (m.type === \"set\") {\n op.set(m.key, m.value, m.ttl ? { ttl: m.ttl } : undefined);\n } else if (m.type === \"delete\") {\n op.delete(m.key);\n }\n }\n }\n\n if (body.enqueues) {\n for (const e of body.enqueues) {\n op.enqueue(e.payload, e.options);\n }\n }\n\n const result = op.commit();\n return Response.json(result);\n });\n\n // ==================== Queue Endpoints ====================\n\n app.post(\"/queue/enqueue\", {\n json: object({\n payload: unknown(),\n topic: optional(string()),\n delay: optional(number({ min: 0 })),\n maxAttempts: optional(number({ min: 1 })),\n }),\n }, async (ctx) => {\n const body = await ctx.json;\n const result = store.enqueue(body.payload, {\n topic: body.topic,\n delay: body.delay,\n maxAttempts: body.maxAttempts,\n });\n return Response.json(result);\n });\n\n app.post(\"/queue/dequeue\", {\n json: object({\n topic: optional(string()),\n limit: optional(number({ min: 1 })),\n }),\n }, async (ctx) => {\n const body = await ctx.json;\n const messages = store.dequeue(body.topic, body.limit);\n return Response.json({ messages });\n });\n\n app.post(\"/queue/ack\", {\n json: object({\n id: number(),\n }),\n }, async (ctx) => {\n const body = await ctx.json;\n const ok = store.acknowledge(body.id);\n return Response.json({ ok });\n });\n\n app.post(\"/kv/reset\", () => {\n store.reset();\n return Response.json({ ok: true });\n });\n\n // ==================== Unified WebSocket (RPC + Watch + Listen) ====================\n\n app.ws<{ authenticated: boolean; watcher?: { cancel: () => void; }; queueListeners: Map<string, { cancel: () => void; }>; }>(\"/ws\", {\n upgrade(req) {\n const url = new URL(req.url);\n const t = url.searchParams.get(\"token\");\n if (t) {\n if (t !== token) {\n return new Response(\"Unauthorized\", { status: 401 });\n }\n return { authenticated: true, queueListeners: new Map() };\n }\n return { authenticated: false, queueListeners: new Map() };\n },\n async message(peer, message) {\n let id: number | undefined;\n try {\n const data = JSON.parse(String(message));\n id = data.id;\n const { method, params } = data;\n\n if (!peer.data.authenticated) {\n if (method === \"auth\" && params?.token === token) {\n peer.data.authenticated = true;\n peer.send(JSON.stringify({ id, result: { ok: true } }));\n } else {\n peer.send(JSON.stringify({ id, error: \"Unauthorized\" }));\n peer.close(4001, \"Unauthorized\");\n }\n return;\n }\n\n switch (method) {\n case \"/kv/get\": {\n const entry = store.get(params.key);\n peer.send(JSON.stringify({ id, result: { entry: entry ?? null } }));\n break;\n }\n case \"/kv/set\": {\n const result = store.set(params.key, params.value, { ttl: params.ttl });\n peer.send(JSON.stringify({ id, result }));\n break;\n }\n case \"/kv/delete\": {\n store.delete(params.key);\n peer.send(JSON.stringify({ id, result: { ok: true } }));\n break;\n }\n case \"/kv/list\": {\n const result = store.list(\n { prefix: params.prefix, start: params.start, end: params.end },\n { limit: params.limit, cursor: params.cursor, reverse: params.reverse }\n );\n peer.send(JSON.stringify({ id, result }));\n break;\n }\n case \"/kv/atomic\": {\n const op = store.atomic();\n if (params.checks) op.check(...params.checks);\n if (params.mutations) {\n for (const m of params.mutations) {\n if (m.type === \"set\") op.set(m.key, m.value, m.ttl ? { ttl: m.ttl } : undefined);\n else if (m.type === \"delete\") op.delete(m.key);\n }\n }\n if (params.enqueues) {\n for (const e of params.enqueues) op.enqueue(e.payload, e.options);\n }\n const result = op.commit();\n peer.send(JSON.stringify({ id, result }));\n break;\n }\n case \"/queue/enqueue\": {\n const result = store.enqueue(params.payload, {\n topic: params.topic,\n delay: params.delay,\n maxAttempts: params.maxAttempts,\n });\n peer.send(JSON.stringify({ id, result }));\n break;\n }\n case \"/queue/dequeue\": {\n const messages = store.dequeue(params.topic, params.limit);\n peer.send(JSON.stringify({ id, result: { messages } }));\n break;\n }\n case \"/queue/ack\": {\n const ok = store.acknowledge(params.id);\n peer.send(JSON.stringify({ id, result: { ok } }));\n break;\n }\n case \"/kv/reset\": {\n store.reset();\n peer.send(JSON.stringify({ id, result: { ok: true } }));\n break;\n }\n case \"/kv/watch\": {\n if (peer.data.watcher) peer.data.watcher.cancel();\n peer.data.watcher = store.watch(params.keys, (entries) => {\n peer.send(JSON.stringify({ type: \"watch\", entries }));\n });\n break;\n }\n case \"/kv/unwatch\": {\n if (peer.data.watcher) {\n peer.data.watcher.cancel();\n peer.data.watcher = undefined;\n }\n break;\n }\n case \"/queue/listen\": {\n const topic = params.topic ?? \"default\";\n peer.data.queueListeners.get(topic)?.cancel();\n const handle = store.addQueueListener(topic, (msg) => {\n peer.send(JSON.stringify({ type: \"queue\", topic, message: msg }));\n });\n peer.data.queueListeners.set(topic, handle);\n break;\n }\n case \"/queue/unlisten\": {\n const topic = params.topic ?? \"default\";\n peer.data.queueListeners.get(topic)?.cancel();\n peer.data.queueListeners.delete(topic);\n break;\n }\n default: {\n if (id !== undefined) {\n peer.send(JSON.stringify({ id, error: `Unknown method: ${method}` }));\n }\n }\n }\n } catch (err) {\n if (id !== undefined) {\n peer.send(JSON.stringify({ id, error: String(err) }));\n } else {\n peer.send(JSON.stringify({ error: \"Invalid message\" }));\n }\n }\n },\n close(peer) {\n if (peer.data.watcher) peer.data.watcher.cancel();\n for (const handle of peer.data.queueListeners.values()) {\n handle.cancel();\n }\n },\n });\n\n return app;\n}\n"],"mappings":"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","names":[]}
1
+ {"version":3,"sources":["../src/routes.ts"],"sourcesContent":["import { AppServer, bearerAuth } from \"@coderbuzz/ken\";\nimport { optional, object, array, union, string, number, bigint, uint8array, boolean, unknown, nullable, literal } from \"@coderbuzz/kyo\";\nimport type { KVStore } from \"@coderbuzz/kvs\";\n\nconst kvKey = array(union([string(), number(), bigint(), boolean(), uint8array()]), { min: 1 });\n\nexport type CreateServerOptions = {\n port?: number;\n hostname?: string;\n accessToken: string;\n};\n\nexport function createServer(store: KVStore, options: CreateServerOptions) {\n const { port = 3000, hostname = \"0.0.0.0\", accessToken: token } = options;\n\n const app = new AppServer({ port, hostname });\n\n const auth = { auth: bearerAuth({ token }) };\n\n // Health check (unprotected)\n app.get(\"/health\", () => ({ ok: true, uptime: process.uptime() }));\n\n // ==================== KV Endpoints ====================\n\n app.apply(\"/kv/*\", auth);\n\n app.post(\"/kv/get\", {\n json: object({\n key: kvKey\n }),\n }, async (ctx) => {\n const body = await ctx.json;\n const entry = store.get(body.key);\n return Response.json(entry ? { entry } : { entry: null });\n });\n\n app.post(\"/kv/set\", {\n json: object({\n key: kvKey,\n value: unknown(),\n ttl: optional(number({ min: 0 })),\n }),\n }, async (ctx) => {\n const body = await ctx.json;\n const result = store.set(body.key, body.value, {\n ttl: body.ttl,\n });\n return Response.json(result);\n });\n\n app.post(\"/kv/delete\", {\n json: object({\n key: kvKey\n }),\n }, async (ctx) => {\n const body = await ctx.json;\n store.delete(body.key);\n return Response.json({ ok: true });\n });\n\n app.post(\"/kv/list\", {\n json: object({\n prefix: optional(kvKey),\n start: optional(kvKey),\n end: optional(kvKey),\n limit: optional(number({ min: 1 })),\n cursor: optional(string()),\n reverse: optional(boolean()),\n }),\n }, async (ctx) => {\n const body = await ctx.json;\n const result = store.list(\n { prefix: body.prefix, start: body.start, end: body.end },\n { limit: body.limit, cursor: body.cursor, reverse: body.reverse }\n );\n return Response.json(result);\n });\n\n app.post(\"/kv/atomic\", {\n json: object({\n checks: optional(array(object({\n key: kvKey,\n version: nullable(number()),\n }))),\n mutations: optional(array(object({\n type: union([literal(\"set\"), literal(\"delete\")]),\n key: kvKey,\n value: optional(unknown()),\n ttl: optional(number({ min: 0 })),\n }))),\n enqueues: optional(array(object({\n payload: unknown(),\n options: optional(object({\n topic: optional(string()),\n delay: optional(number({ min: 0 })),\n maxAttempts: optional(number({ min: 1 })),\n })),\n }))),\n }),\n }, async (ctx) => {\n const body = await ctx.json;\n const op = store.atomic();\n\n if (body.checks) {\n op.check(...body.checks);\n }\n\n if (body.mutations) {\n for (const m of body.mutations) {\n if (m.type === \"set\") {\n op.set(m.key, m.value, m.ttl ? { ttl: m.ttl } : undefined);\n } else if (m.type === \"delete\") {\n op.delete(m.key);\n }\n }\n }\n\n if (body.enqueues) {\n for (const e of body.enqueues) {\n op.enqueue(e.payload, e.options);\n }\n }\n\n const result = op.commit();\n return Response.json(result);\n });\n\n // ==================== Queue Endpoints ====================\n\n app.post(\"/queue/enqueue\", {\n json: object({\n payload: unknown(),\n topic: optional(string()),\n delay: optional(number({ min: 0 })),\n maxAttempts: optional(number({ min: 1 })),\n }),\n }, async (ctx) => {\n const body = await ctx.json;\n const result = store.enqueue(body.payload, {\n topic: body.topic,\n delay: body.delay,\n maxAttempts: body.maxAttempts,\n });\n return Response.json(result);\n });\n\n app.post(\"/queue/dequeue\", {\n json: object({\n topic: optional(string()),\n limit: optional(number({ min: 1 })),\n }),\n }, async (ctx) => {\n const body = await ctx.json;\n const messages = store.dequeue(body.topic, body.limit);\n return Response.json({ messages });\n });\n\n app.post(\"/queue/ack\", {\n json: object({\n id: number(),\n }),\n }, async (ctx) => {\n const body = await ctx.json;\n const ok = store.acknowledge(body.id);\n return Response.json({ ok });\n });\n\n app.post(\"/kv/reset\", () => {\n store.reset();\n return Response.json({ ok: true });\n });\n\n app.post(\"/kv/clean-expired\", () => {\n const deleted = store.cleanExpired();\n return Response.json({ ok: true, deleted });\n });\n\n // ==================== Unified WebSocket (RPC + Watch + Listen) ====================\n\n app.ws<{ authenticated: boolean; watcher?: { cancel: () => void; }; queueListeners: Map<string, { cancel: () => void; }>; }>(\"/ws\", {\n upgrade(req) {\n const url = new URL(req.url);\n const t = url.searchParams.get(\"token\");\n if (t) {\n if (t !== token) {\n return new Response(\"Unauthorized\", { status: 401 });\n }\n return { authenticated: true, queueListeners: new Map() };\n }\n return { authenticated: false, queueListeners: new Map() };\n },\n async message(peer, message) {\n let id: number | undefined;\n try {\n const data = JSON.parse(String(message));\n id = data.id;\n const { method, params } = data;\n\n if (!peer.data.authenticated) {\n if (method === \"auth\" && params?.token === token) {\n peer.data.authenticated = true;\n peer.send(JSON.stringify({ id, result: { ok: true } }));\n } else {\n peer.send(JSON.stringify({ id, error: \"Unauthorized\" }));\n peer.close(4001, \"Unauthorized\");\n }\n return;\n }\n\n switch (method) {\n case \"/kv/get\": {\n const entry = store.get(params.key);\n peer.send(JSON.stringify({ id, result: { entry: entry ?? null } }));\n break;\n }\n case \"/kv/set\": {\n const result = store.set(params.key, params.value, { ttl: params.ttl });\n peer.send(JSON.stringify({ id, result }));\n break;\n }\n case \"/kv/delete\": {\n store.delete(params.key);\n peer.send(JSON.stringify({ id, result: { ok: true } }));\n break;\n }\n case \"/kv/list\": {\n const result = store.list(\n { prefix: params.prefix, start: params.start, end: params.end },\n { limit: params.limit, cursor: params.cursor, reverse: params.reverse }\n );\n peer.send(JSON.stringify({ id, result }));\n break;\n }\n case \"/kv/atomic\": {\n const op = store.atomic();\n if (params.checks) op.check(...params.checks);\n if (params.mutations) {\n for (const m of params.mutations) {\n if (m.type === \"set\") op.set(m.key, m.value, m.ttl ? { ttl: m.ttl } : undefined);\n else if (m.type === \"delete\") op.delete(m.key);\n }\n }\n if (params.enqueues) {\n for (const e of params.enqueues) op.enqueue(e.payload, e.options);\n }\n const result = op.commit();\n peer.send(JSON.stringify({ id, result }));\n break;\n }\n case \"/queue/enqueue\": {\n const result = store.enqueue(params.payload, {\n topic: params.topic,\n delay: params.delay,\n maxAttempts: params.maxAttempts,\n });\n peer.send(JSON.stringify({ id, result }));\n break;\n }\n case \"/queue/dequeue\": {\n const messages = store.dequeue(params.topic, params.limit);\n peer.send(JSON.stringify({ id, result: { messages } }));\n break;\n }\n case \"/queue/ack\": {\n const ok = store.acknowledge(params.id);\n peer.send(JSON.stringify({ id, result: { ok } }));\n break;\n }\n case \"/kv/reset\": {\n store.reset();\n peer.send(JSON.stringify({ id, result: { ok: true } }));\n break;\n }\n case \"/kv/clean-expired\": {\n const deleted = store.cleanExpired();\n peer.send(JSON.stringify({ id, result: { ok: true, deleted } }));\n break;\n }\n case \"/kv/watch\": {\n if (peer.data.watcher) peer.data.watcher.cancel();\n peer.data.watcher = store.watch(params.keys, (entries) => {\n peer.send(JSON.stringify({ type: \"watch\", entries }));\n });\n break;\n }\n case \"/kv/unwatch\": {\n if (peer.data.watcher) {\n peer.data.watcher.cancel();\n peer.data.watcher = undefined;\n }\n break;\n }\n case \"/queue/listen\": {\n const topic = params.topic ?? \"default\";\n peer.data.queueListeners.get(topic)?.cancel();\n const handle = store.addQueueListener(topic, (msg) => {\n peer.send(JSON.stringify({ type: \"queue\", topic, message: msg }));\n });\n peer.data.queueListeners.set(topic, handle);\n break;\n }\n case \"/queue/unlisten\": {\n const topic = params.topic ?? \"default\";\n peer.data.queueListeners.get(topic)?.cancel();\n peer.data.queueListeners.delete(topic);\n break;\n }\n default: {\n if (id !== undefined) {\n peer.send(JSON.stringify({ id, error: `Unknown method: ${method}` }));\n }\n }\n }\n } catch (err) {\n if (id !== undefined) {\n peer.send(JSON.stringify({ id, error: String(err) }));\n } else {\n peer.send(JSON.stringify({ error: \"Invalid message\" }));\n }\n }\n },\n close(peer) {\n if (peer.data.watcher) peer.data.watcher.cancel();\n for (const handle of peer.data.queueListeners.values()) {\n handle.cancel();\n }\n },\n });\n\n return app;\n}\n"],"mappings":"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","names":[]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@coderbuzz/kvs-server",
3
- "version": "0.1.2",
3
+ "version": "0.1.3",
4
4
  "type": "module",
5
5
  "main": "./index.js",
6
6
  "types": "./index.d.ts",
@@ -36,6 +36,6 @@
36
36
  "dependencies": {
37
37
  "@coderbuzz/ken": "^0.3.4",
38
38
  "@coderbuzz/kyo": "^0.2.4",
39
- "@coderbuzz/kvs": "^0.2.5"
39
+ "@coderbuzz/kvs": "^0.2.6"
40
40
  }
41
41
  }