@better-state/server 0.2.0 → 0.3.0

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/dist/cli.js CHANGED
@@ -2,19 +2,39 @@
2
2
  import { randomBytes, createHash, randomUUID } from "node:crypto";
3
3
  import { writeFileSync, readFileSync, existsSync, mkdirSync } from "node:fs";
4
4
  import path from "node:path";
5
+ const args = process.argv.slice(2);
6
+ function getFlag(name) {
7
+ const idx = args.indexOf(`--${name}`);
8
+ if (idx !== -1 && idx + 1 < args.length)
9
+ return args[idx + 1];
10
+ const eq = args.find((a) => a.startsWith(`--${name}=`));
11
+ return eq ? eq.split("=").slice(1).join("=") : undefined;
12
+ }
13
+ const dbUrl = getFlag("db") || process.env.DATABASE_URL;
5
14
  const dataDir = path.join(process.cwd(), ".better-state");
6
15
  mkdirSync(dataDir, { recursive: true });
7
- process.env.DATABASE_PATH = process.env.DATABASE_PATH || path.join(dataDir, "state.db");
16
+ if (!dbUrl) {
17
+ process.env.DATABASE_PATH = process.env.DATABASE_PATH || path.join(dataDir, "state.db");
18
+ }
8
19
  process.env.DEV_KEY_PATH = process.env.DEV_KEY_PATH || path.join(dataDir, ".dev-key");
9
- const { SqliteAdapter } = await import("./storage/index.js");
20
+ if (dbUrl) {
21
+ process.env.DATABASE_URL = dbUrl;
22
+ }
23
+ const { SqliteAdapter, PostgresAdapter } = await import("./storage/index.js");
10
24
  const PORT = parseInt(process.env.PORT || "3001", 10);
11
- function autoSeed() {
12
- const store = new SqliteAdapter({ dbPath: process.env.DATABASE_PATH });
13
- store.init();
25
+ async function autoSeed() {
26
+ let store;
27
+ if (dbUrl && dbUrl.startsWith("postgres")) {
28
+ store = new PostgresAdapter({ connectionString: dbUrl });
29
+ }
30
+ else {
31
+ store = new SqliteAdapter({ dbPath: process.env.DATABASE_PATH });
32
+ }
33
+ await store.init();
14
34
  const devKeyPath = process.env.DEV_KEY_PATH;
15
- const existing = store.findNamespaceByName("default");
35
+ const existing = await store.findNamespaceByName("default");
16
36
  if (existing) {
17
- store.close();
37
+ await store.close();
18
38
  if (existsSync(devKeyPath)) {
19
39
  return readFileSync(devKeyPath, "utf-8").trim();
20
40
  }
@@ -24,12 +44,13 @@ function autoSeed() {
24
44
  const hashedKey = createHash("sha256").update(rawKey).digest("hex");
25
45
  const id = randomUUID();
26
46
  const now = Date.now();
27
- store.createNamespace({ id, name: "default", api_key: hashedKey, created_at: now });
47
+ await store.createNamespace({ id, name: "default", api_key: hashedKey, created_at: now });
28
48
  writeFileSync(devKeyPath, rawKey, "utf-8");
29
- store.close();
49
+ await store.close();
30
50
  return rawKey;
31
51
  }
32
- const apiKey = autoSeed();
52
+ const apiKey = await autoSeed();
53
+ const backend = dbUrl ? `Postgres (${dbUrl.replace(/\/\/.*:.*@/, "//***:***@")})` : "SQLite";
33
54
  const box = [
34
55
  "",
35
56
  " ┌─────────────────────────────────────────────────────┐",
@@ -38,7 +59,7 @@ const box = [
38
59
  " │ │",
39
60
  ` │ Local: http://localhost:${PORT} │`,
40
61
  ` │ Playground: http://localhost:${PORT}/playground │`,
41
- ` │ Data: ${dataDir} │`.slice(0, 57) + "│",
62
+ ` │ Backend: ${backend}`.padEnd(56) + "│",
42
63
  " │ │",
43
64
  ];
44
65
  if (apiKey) {
package/dist/cli.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,OAAO,MAAM,SAAS,CAAC;AAO9B,OAAO,EAAE,MAAM,EAAE,MAAM,WAAW,CAAC;AAEnC,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAQzD,QAAA,MAAM,KAAK,EAAE,cAAoC,CAAC;AAGlD,QAAA,MAAM,GAAG,EAAE,UAAU,CAAC,OAAO,OAAO,CAAa,CAAC;AAKlD,QAAA,MAAM,EAAE,+HAEN,CAAC;AAuTH,OAAO,EAAE,GAAG,EAAE,EAAE,EAAE,KAAK,EAAE,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,OAAO,MAAM,SAAS,CAAC;AAO9B,OAAO,EAAE,MAAM,EAAE,MAAM,WAAW,CAAC;AAEnC,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAiBzD,QAAA,MAAM,KAAK,EAAE,cAAgC,CAAC;AAG9C,QAAA,MAAM,GAAG,EAAE,UAAU,CAAC,OAAO,OAAO,CAAa,CAAC;AAKlD,QAAA,MAAM,EAAE,+HAEN,CAAC;AAuTH,OAAO,EAAE,GAAG,EAAE,EAAE,EAAE,KAAK,EAAE,CAAC"}
package/dist/index.js CHANGED
@@ -6,13 +6,22 @@ import { randomBytes, createHash, randomUUID } from "node:crypto";
6
6
  import path from "node:path";
7
7
  import { fileURLToPath } from "node:url";
8
8
  import { Server } from "socket.io";
9
- import { SqliteAdapter } from "./storage/index.js";
9
+ import { SqliteAdapter, PostgresAdapter } from "./storage/index.js";
10
10
  import { ensureState, processMutations, getHistory } from "./state-engine.js";
11
11
  const __dirname = path.dirname(fileURLToPath(import.meta.url));
12
12
  const PORT = parseInt(process.env.PORT || "3001", 10);
13
13
  const CORS_ORIGIN = process.env.CORS_ORIGIN || "*";
14
- const store = new SqliteAdapter();
15
- store.init();
14
+ const DATABASE_URL = process.env.DATABASE_URL;
15
+ function createAdapter() {
16
+ if (DATABASE_URL && DATABASE_URL.startsWith("postgres")) {
17
+ console.log("[better-state] Using Postgres backend");
18
+ return new PostgresAdapter({ connectionString: DATABASE_URL });
19
+ }
20
+ console.log("[better-state] Using SQLite backend");
21
+ return new SqliteAdapter();
22
+ }
23
+ const store = createAdapter();
24
+ await store.init();
16
25
  const app = express();
17
26
  app.use(cors({ origin: CORS_ORIGIN }));
18
27
  app.use(express.json());
@@ -24,10 +33,10 @@ const io = new Server(httpServer, {
24
33
  app.get("/api/v1/health", (_req, res) => {
25
34
  res.json({ status: "ok", uptime: process.uptime() });
26
35
  });
27
- app.get("/api/v1/namespaces", (_req, res) => {
28
- res.json(store.listNamespaces());
36
+ app.get("/api/v1/namespaces", async (_req, res) => {
37
+ res.json(await store.listNamespaces());
29
38
  });
30
- app.post("/api/v1/namespaces", (req, res) => {
39
+ app.post("/api/v1/namespaces", async (req, res) => {
31
40
  const { name } = req.body;
32
41
  if (!name || typeof name !== "string") {
33
42
  res.status(400).json({ error: "name is required" });
@@ -37,31 +46,31 @@ app.post("/api/v1/namespaces", (req, res) => {
37
46
  const hashedKey = createHash("sha256").update(rawKey).digest("hex");
38
47
  const id = randomUUID();
39
48
  const now = Date.now();
40
- store.createNamespace({ id, name, api_key: hashedKey, created_at: now });
49
+ await store.createNamespace({ id, name, api_key: hashedKey, created_at: now });
41
50
  res.status(201).json({ id, name, apiKey: rawKey, created_at: now });
42
51
  });
43
- app.get("/api/v1/states", (req, res) => {
52
+ app.get("/api/v1/states", async (req, res) => {
44
53
  const namespace = req.query.namespace;
45
54
  if (!namespace) {
46
55
  res.status(400).json({ error: "namespace query param is required" });
47
56
  return;
48
57
  }
49
- res.json(store.listStates(namespace));
58
+ res.json(await store.listStates(namespace));
50
59
  });
51
- app.get("/api/v1/states/:key/history", (req, res) => {
60
+ app.get("/api/v1/states/:key/history", async (req, res) => {
52
61
  const namespace = req.query.namespace;
53
62
  if (!namespace) {
54
63
  res.status(400).json({ error: "namespace query param is required" });
55
64
  return;
56
65
  }
57
- const stateRow = store.findState(namespace, req.params.key);
66
+ const stateRow = await store.findState(namespace, req.params.key);
58
67
  if (!stateRow) {
59
68
  res.status(404).json({ error: "state not found" });
60
69
  return;
61
70
  }
62
71
  const limit = parseInt(req.query.limit, 10) || 50;
63
72
  const cursor = req.query.cursor;
64
- const { events, hasMore } = getHistory(store, stateRow.id, limit, cursor);
73
+ const { events, hasMore } = await getHistory(store, stateRow.id, limit, cursor);
65
74
  res.json({
66
75
  key: stateRow.key,
67
76
  version: stateRow.version,
@@ -92,8 +101,8 @@ app.get("/sdk/browser.mjs.map", (_req, res) => {
92
101
  res.redirect("https://unpkg.com/@better-state/client/dist/browser.mjs.map");
93
102
  }
94
103
  });
95
- app.get("/playground", (_req, res) => {
96
- const ns = store.findNamespaceByName("default");
104
+ app.get("/playground", async (_req, res) => {
105
+ const ns = await store.findNamespaceByName("default");
97
106
  if (!ns) {
98
107
  res.status(500).send("No default namespace. Run the server via CLI to auto-seed.");
99
108
  return;
@@ -141,11 +150,11 @@ window.reset=()=>counter.set(0);
141
150
  }
142
151
  // ─── WebSocket (Real-time Sync) ──────────────────────────────────────────────
143
152
  const namespaceCache = new Map();
144
- function authenticateApiKey(rawKey) {
153
+ async function authenticateApiKey(rawKey) {
145
154
  const hash = createHash("sha256").update(rawKey).digest("hex");
146
155
  if (namespaceCache.has(hash))
147
156
  return namespaceCache.get(hash);
148
- const row = store.findNamespaceByApiKey(hash);
157
+ const row = await store.findNamespaceByApiKey(hash);
149
158
  if (!row)
150
159
  return null;
151
160
  namespaceCache.set(hash, row.id);
@@ -155,8 +164,8 @@ io.on("connection", (socket) => {
155
164
  let authedNamespace = null;
156
165
  let clientId = null;
157
166
  console.log(`[ws] new connection: ${socket.id}`);
158
- socket.on("auth", (payload, ack) => {
159
- const nsId = authenticateApiKey(payload.apiKey);
167
+ socket.on("auth", async (payload, ack) => {
168
+ const nsId = await authenticateApiKey(payload.apiKey);
160
169
  if (!nsId) {
161
170
  socket.emit("auth:error", { message: "Invalid API key" });
162
171
  if (typeof ack === "function")
@@ -170,7 +179,7 @@ io.on("connection", (socket) => {
170
179
  if (typeof ack === "function")
171
180
  ack({ ok: true });
172
181
  });
173
- socket.on("subscribe", (payload) => {
182
+ socket.on("subscribe", async (payload) => {
174
183
  if (!authedNamespace) {
175
184
  socket.emit("auth:error", { message: "Not authenticated" });
176
185
  return;
@@ -180,7 +189,7 @@ io.on("connection", (socket) => {
180
189
  const initialValue = typeof entry === "object" && entry !== null ? entry.initialValue : null;
181
190
  const room = `${authedNamespace}:${key}`;
182
191
  socket.join(room);
183
- const state = ensureState(store, authedNamespace, key, initialValue);
192
+ const state = await ensureState(store, authedNamespace, key, initialValue);
184
193
  socket.emit("state:init", {
185
194
  key,
186
195
  value: JSON.parse(state.snapshot),
@@ -203,14 +212,14 @@ io.on("connection", (socket) => {
203
212
  socket.leave(`${authedNamespace}:${key}`);
204
213
  }
205
214
  });
206
- socket.on("mutate", (payload) => {
215
+ socket.on("mutate", async (payload) => {
207
216
  if (!authedNamespace || !clientId) {
208
217
  socket.emit("auth:error", { message: "Not authenticated" });
209
218
  return;
210
219
  }
211
220
  try {
212
221
  console.log(`[ws] mutate: key=${payload.key} client=${clientId} count=${payload.mutations.length}`);
213
- const { value, version, mutationIds } = processMutations(store, authedNamespace, payload.key, clientId, payload.mutations);
222
+ const { value, version, mutationIds } = await processMutations(store, authedNamespace, payload.key, clientId, payload.mutations);
214
223
  socket.emit("mutate:ack", { mutationIds });
215
224
  const room = `${authedNamespace}:${payload.key}`;
216
225
  const studioRoom = `studio:${authedNamespace}`;
@@ -236,8 +245,8 @@ io.on("connection", (socket) => {
236
245
  });
237
246
  });
238
247
  // ─── Studio API ──────────────────────────────────────────────────────────────
239
- app.get("/api/v1/studio/stats", (_req, res) => {
240
- const stats = store.getStats();
248
+ app.get("/api/v1/studio/stats", async (_req, res) => {
249
+ const stats = await store.getStats();
241
250
  const connectedSockets = io.sockets.sockets.size;
242
251
  res.json({
243
252
  ...stats,
@@ -245,12 +254,12 @@ app.get("/api/v1/studio/stats", (_req, res) => {
245
254
  uptime: process.uptime(),
246
255
  });
247
256
  });
248
- app.get("/api/v1/studio/states", (_req, res) => {
249
- res.json(store.listAllStatesWithNamespace());
257
+ app.get("/api/v1/studio/states", async (_req, res) => {
258
+ res.json(await store.listAllStatesWithNamespace());
250
259
  });
251
- app.get("/api/v1/studio/events/recent", (req, res) => {
260
+ app.get("/api/v1/studio/events/recent", async (req, res) => {
252
261
  const limit = parseInt(req.query.limit, 10) || 30;
253
- res.json(store.getRecentEvents(limit));
262
+ res.json(await store.getRecentEvents(limit));
254
263
  });
255
264
  const STUDIO_HTML = path.resolve(__dirname, "../public/studio.html");
256
265
  app.get("/studio", (_req, res) => {
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/dist/seed.js CHANGED
@@ -5,18 +5,18 @@ import { fileURLToPath } from "node:url";
5
5
  import { SqliteAdapter } from "./storage/index.js";
6
6
  const __dirname = path.dirname(fileURLToPath(import.meta.url));
7
7
  const store = new SqliteAdapter();
8
- store.init();
9
- const existing = store.findNamespaceByName("default");
8
+ await store.init();
9
+ const existing = await store.findNamespaceByName("default");
10
10
  if (existing) {
11
11
  console.log("[seed] Default namespace already exists. Skipping.");
12
- store.close();
12
+ await store.close();
13
13
  process.exit(0);
14
14
  }
15
15
  const rawKey = randomBytes(32).toString("hex");
16
16
  const hashedKey = createHash("sha256").update(rawKey).digest("hex");
17
17
  const id = randomUUID();
18
18
  const now = Date.now();
19
- store.createNamespace({ id, name: "default", api_key: hashedKey, created_at: now });
19
+ await store.createNamespace({ id, name: "default", api_key: hashedKey, created_at: now });
20
20
  const devKeyPath = path.resolve(__dirname, "../data/.dev-key");
21
21
  writeFileSync(devKeyPath, rawKey, "utf-8");
22
22
  console.log("[seed] Created default namespace:");
@@ -26,5 +26,5 @@ console.log(` Dev key file : ${devKeyPath}`);
26
26
  console.log("");
27
27
  console.log("Use it in your client: createClient({ apiKey: '...' })");
28
28
  console.log("Or open http://localhost:3001/playground to test interactively.");
29
- store.close();
29
+ await store.close();
30
30
  //# sourceMappingURL=seed.js.map
package/dist/seed.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"seed.js","sourceRoot":"","sources":["../src/seed.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAClE,OAAO,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AACxC,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAEnD,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;AAE/D,MAAM,KAAK,GAAG,IAAI,aAAa,EAAE,CAAC;AAClC,KAAK,CAAC,IAAI,EAAE,CAAC;AAEb,MAAM,QAAQ,GAAG,KAAK,CAAC,mBAAmB,CAAC,SAAS,CAAC,CAAC;AACtD,IAAI,QAAQ,EAAE,CAAC;IACb,OAAO,CAAC,GAAG,CAAC,oDAAoD,CAAC,CAAC;IAClE,KAAK,CAAC,KAAK,EAAE,CAAC;IACd,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC;AAED,MAAM,MAAM,GAAG,WAAW,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;AAC/C,MAAM,SAAS,GAAG,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AACpE,MAAM,EAAE,GAAG,UAAU,EAAE,CAAC;AACxB,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;AAEvB,KAAK,CAAC,eAAe,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,GAAG,EAAE,CAAC,CAAC;AAEpF,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,kBAAkB,CAAC,CAAC;AAC/D,aAAa,CAAC,UAAU,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC;AAE3C,OAAO,CAAC,GAAG,CAAC,mCAAmC,CAAC,CAAC;AACjD,OAAO,CAAC,GAAG,CAAC,oBAAoB,EAAE,EAAE,CAAC,CAAC;AACtC,OAAO,CAAC,GAAG,CAAC,oBAAoB,MAAM,EAAE,CAAC,CAAC;AAC1C,OAAO,CAAC,GAAG,CAAC,oBAAoB,UAAU,EAAE,CAAC,CAAC;AAC9C,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;AAChB,OAAO,CAAC,GAAG,CAAC,wDAAwD,CAAC,CAAC;AACtE,OAAO,CAAC,GAAG,CAAC,iEAAiE,CAAC,CAAC;AAE/E,KAAK,CAAC,KAAK,EAAE,CAAC"}
1
+ {"version":3,"file":"seed.js","sourceRoot":"","sources":["../src/seed.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAClE,OAAO,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AACxC,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAEnD,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;AAE/D,MAAM,KAAK,GAAG,IAAI,aAAa,EAAE,CAAC;AAClC,MAAM,KAAK,CAAC,IAAI,EAAE,CAAC;AAEnB,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,mBAAmB,CAAC,SAAS,CAAC,CAAC;AAC5D,IAAI,QAAQ,EAAE,CAAC;IACb,OAAO,CAAC,GAAG,CAAC,oDAAoD,CAAC,CAAC;IAClE,MAAM,KAAK,CAAC,KAAK,EAAE,CAAC;IACpB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC;AAED,MAAM,MAAM,GAAG,WAAW,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;AAC/C,MAAM,SAAS,GAAG,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AACpE,MAAM,EAAE,GAAG,UAAU,EAAE,CAAC;AACxB,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;AAEvB,MAAM,KAAK,CAAC,eAAe,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,GAAG,EAAE,CAAC,CAAC;AAE1F,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,kBAAkB,CAAC,CAAC;AAC/D,aAAa,CAAC,UAAU,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC;AAE3C,OAAO,CAAC,GAAG,CAAC,mCAAmC,CAAC,CAAC;AACjD,OAAO,CAAC,GAAG,CAAC,oBAAoB,EAAE,EAAE,CAAC,CAAC;AACtC,OAAO,CAAC,GAAG,CAAC,oBAAoB,MAAM,EAAE,CAAC,CAAC;AAC1C,OAAO,CAAC,GAAG,CAAC,oBAAoB,UAAU,EAAE,CAAC,CAAC;AAC9C,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;AAChB,OAAO,CAAC,GAAG,CAAC,wDAAwD,CAAC,CAAC;AACtE,OAAO,CAAC,GAAG,CAAC,iEAAiE,CAAC,CAAC;AAE/E,MAAM,KAAK,CAAC,KAAK,EAAE,CAAC"}
@@ -10,27 +10,27 @@ export interface MutationInput {
10
10
  * Ensures a state row exists for the given namespace + key.
11
11
  * If it doesn't exist, creates one with the provided initial value.
12
12
  */
13
- export declare function ensureState(store: StorageAdapter, namespace: string, key: string, initialValue?: unknown): StateRecord;
13
+ export declare function ensureState(store: StorageAdapter, namespace: string, key: string, initialValue?: unknown): Promise<StateRecord>;
14
14
  /**
15
15
  * Processes a batch of mutations for a given state key.
16
16
  * Appends events to the log, replays to compute new snapshot,
17
17
  * persists the snapshot, and returns the new value + version.
18
18
  */
19
- export declare function processMutations(store: StorageAdapter, namespace: string, key: string, clientId: string, mutations: MutationInput[]): {
19
+ export declare function processMutations(store: StorageAdapter, namespace: string, key: string, clientId: string, mutations: MutationInput[]): Promise<{
20
20
  value: unknown;
21
21
  version: number;
22
22
  mutationIds: string[];
23
- };
23
+ }>;
24
24
  /**
25
25
  * Replays the full event log for a state to compute the current value.
26
26
  * This is the authoritative state computation.
27
27
  */
28
- export declare function replayState(store: StorageAdapter, stateId: string, initialJson: string): unknown;
28
+ export declare function replayState(store: StorageAdapter, stateId: string, initialJson: string): Promise<unknown>;
29
29
  /**
30
30
  * Returns the event history for a state key (paginated).
31
31
  */
32
- export declare function getHistory(store: StorageAdapter, stateId: string, limit?: number, cursor?: string): {
32
+ export declare function getHistory(store: StorageAdapter, stateId: string, limit?: number, cursor?: string): Promise<{
33
33
  events: EventRecord[];
34
34
  hasMore: boolean;
35
- };
35
+ }>;
36
36
  //# sourceMappingURL=state-engine.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"state-engine.d.ts","sourceRoot":"","sources":["../src/state-engine.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,cAAc,EAAE,WAAW,EAAE,WAAW,EAAc,MAAM,oBAAoB,CAAC;AAE/F,YAAY,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAEnE,MAAM,WAAW,aAAa;IAC5B,EAAE,EAAE,MAAM,CAAC;IACX,QAAQ,EAAE,MAAM,CAAC;IACjB,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAED;;;GAGG;AACH,wBAAgB,WAAW,CACzB,KAAK,EAAE,cAAc,EACrB,SAAS,EAAE,MAAM,EACjB,GAAG,EAAE,MAAM,EACX,YAAY,GAAE,OAAc,GAC3B,WAAW,CAoBb;AAED;;;;GAIG;AACH,wBAAgB,gBAAgB,CAC9B,KAAK,EAAE,cAAc,EACrB,SAAS,EAAE,MAAM,EACjB,GAAG,EAAE,MAAM,EACX,QAAQ,EAAE,MAAM,EAChB,SAAS,EAAE,aAAa,EAAE,GACzB;IAAE,KAAK,EAAE,OAAO,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,WAAW,EAAE,MAAM,EAAE,CAAA;CAAE,CAoC5D;AAED;;;GAGG;AACH,wBAAgB,WAAW,CACzB,KAAK,EAAE,cAAc,EACrB,OAAO,EAAE,MAAM,EACf,WAAW,EAAE,MAAM,GAClB,OAAO,CAgCT;AAoCD;;GAEG;AACH,wBAAgB,UAAU,CACxB,KAAK,EAAE,cAAc,EACrB,OAAO,EAAE,MAAM,EACf,KAAK,SAAK,EACV,MAAM,CAAC,EAAE,MAAM,GACd;IAAE,MAAM,EAAE,WAAW,EAAE,CAAC;IAAC,OAAO,EAAE,OAAO,CAAA;CAAE,CAE7C"}
1
+ {"version":3,"file":"state-engine.d.ts","sourceRoot":"","sources":["../src/state-engine.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,cAAc,EAAE,WAAW,EAAE,WAAW,EAAc,MAAM,oBAAoB,CAAC;AAE/F,YAAY,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAEnE,MAAM,WAAW,aAAa;IAC5B,EAAE,EAAE,MAAM,CAAC;IACX,QAAQ,EAAE,MAAM,CAAC;IACjB,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAED;;;GAGG;AACH,wBAAsB,WAAW,CAC/B,KAAK,EAAE,cAAc,EACrB,SAAS,EAAE,MAAM,EACjB,GAAG,EAAE,MAAM,EACX,YAAY,GAAE,OAAc,GAC3B,OAAO,CAAC,WAAW,CAAC,CAoBtB;AAED;;;;GAIG;AACH,wBAAsB,gBAAgB,CACpC,KAAK,EAAE,cAAc,EACrB,SAAS,EAAE,MAAM,EACjB,GAAG,EAAE,MAAM,EACX,QAAQ,EAAE,MAAM,EAChB,SAAS,EAAE,aAAa,EAAE,GACzB,OAAO,CAAC;IAAE,KAAK,EAAE,OAAO,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,WAAW,EAAE,MAAM,EAAE,CAAA;CAAE,CAAC,CAoCrE;AAED;;;GAGG;AACH,wBAAsB,WAAW,CAC/B,KAAK,EAAE,cAAc,EACrB,OAAO,EAAE,MAAM,EACf,WAAW,EAAE,MAAM,GAClB,OAAO,CAAC,OAAO,CAAC,CAgClB;AAoCD;;GAEG;AACH,wBAAsB,UAAU,CAC9B,KAAK,EAAE,cAAc,EACrB,OAAO,EAAE,MAAM,EACf,KAAK,SAAK,EACV,MAAM,CAAC,EAAE,MAAM,GACd,OAAO,CAAC;IAAE,MAAM,EAAE,WAAW,EAAE,CAAC;IAAC,OAAO,EAAE,OAAO,CAAA;CAAE,CAAC,CAEtD"}
@@ -3,14 +3,14 @@ import { v4 as uuid } from "uuid";
3
3
  * Ensures a state row exists for the given namespace + key.
4
4
  * If it doesn't exist, creates one with the provided initial value.
5
5
  */
6
- export function ensureState(store, namespace, key, initialValue = null) {
7
- const existing = store.findState(namespace, key);
6
+ export async function ensureState(store, namespace, key, initialValue = null) {
7
+ const existing = await store.findState(namespace, key);
8
8
  if (existing)
9
9
  return existing;
10
10
  const now = Date.now();
11
11
  const serialized = JSON.stringify(initialValue);
12
12
  const id = uuid();
13
- store.createState({
13
+ await store.createState({
14
14
  id,
15
15
  namespace,
16
16
  key,
@@ -20,16 +20,16 @@ export function ensureState(store, namespace, key, initialValue = null) {
20
20
  created_at: now,
21
21
  updated_at: now,
22
22
  });
23
- return store.findStateById(id);
23
+ return (await store.findStateById(id));
24
24
  }
25
25
  /**
26
26
  * Processes a batch of mutations for a given state key.
27
27
  * Appends events to the log, replays to compute new snapshot,
28
28
  * persists the snapshot, and returns the new value + version.
29
29
  */
30
- export function processMutations(store, namespace, key, clientId, mutations) {
31
- const state = ensureState(store, namespace, key);
32
- const maxSeq = store.getMaxSeq(state.id);
30
+ export async function processMutations(store, namespace, key, clientId, mutations) {
31
+ const state = await ensureState(store, namespace, key);
32
+ const maxSeq = await store.getMaxSeq(state.id);
33
33
  let seq = (maxSeq ?? -1) + 1;
34
34
  const now = Date.now();
35
35
  const mutationIds = [];
@@ -50,18 +50,18 @@ export function processMutations(store, namespace, key, clientId, mutations) {
50
50
  meta,
51
51
  };
52
52
  });
53
- store.insertEvents(events);
54
- const newValue = replayState(store, state.id, state.initial);
53
+ await store.insertEvents(events);
54
+ const newValue = await replayState(store, state.id, state.initial);
55
55
  const newVersion = state.version + mutations.length;
56
- store.updateSnapshot(state.id, JSON.stringify(newValue), newVersion, Date.now());
56
+ await store.updateSnapshot(state.id, JSON.stringify(newValue), newVersion, Date.now());
57
57
  return { value: newValue, version: newVersion, mutationIds };
58
58
  }
59
59
  /**
60
60
  * Replays the full event log for a state to compute the current value.
61
61
  * This is the authoritative state computation.
62
62
  */
63
- export function replayState(store, stateId, initialJson) {
64
- const events = store.getEventsForReplay(stateId);
63
+ export async function replayState(store, stateId, initialJson) {
64
+ const events = await store.getEventsForReplay(stateId);
65
65
  let state = JSON.parse(initialJson);
66
66
  for (const event of events) {
67
67
  if (event.mutation === "__SET__") {
@@ -121,7 +121,7 @@ function applyMutation(state, mutationBody) {
121
121
  /**
122
122
  * Returns the event history for a state key (paginated).
123
123
  */
124
- export function getHistory(store, stateId, limit = 50, cursor) {
124
+ export async function getHistory(store, stateId, limit = 50, cursor) {
125
125
  return store.getEventHistory(stateId, limit, cursor);
126
126
  }
127
127
  //# sourceMappingURL=state-engine.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"state-engine.js","sourceRoot":"","sources":["../src/state-engine.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"state-engine.js","sourceRoot":"","sources":["../src/state-engine.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,EAAE,IAAI,IAAI,EAAE,MAAM,MAAM,CAAC;AAYlC;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,WAAW,CAC/B,KAAqB,EACrB,SAAiB,EACjB,GAAW,EACX,eAAwB,IAAI;IAE5B,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,SAAS,CAAC,SAAS,EAAE,GAAG,CAAC,CAAC;IACvD,IAAI,QAAQ;QAAE,OAAO,QAAQ,CAAC;IAE9B,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IACvB,MAAM,UAAU,GAAG,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC,CAAC;IAChD,MAAM,EAAE,GAAG,IAAI,EAAE,CAAC;IAElB,MAAM,KAAK,CAAC,WAAW,CAAC;QACtB,EAAE;QACF,SAAS;QACT,GAAG;QACH,OAAO,EAAE,UAAU;QACnB,QAAQ,EAAE,UAAU;QACpB,OAAO,EAAE,CAAC;QACV,UAAU,EAAE,GAAG;QACf,UAAU,EAAE,GAAG;KAChB,CAAC,CAAC;IAEH,OAAO,CAAC,MAAM,KAAK,CAAC,aAAa,CAAC,EAAE,CAAC,CAAE,CAAC;AAC1C,CAAC;AAED;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,gBAAgB,CACpC,KAAqB,EACrB,SAAiB,EACjB,GAAW,EACX,QAAgB,EAChB,SAA0B;IAE1B,MAAM,KAAK,GAAG,MAAM,WAAW,CAAC,KAAK,EAAE,SAAS,EAAE,GAAG,CAAC,CAAC;IAEvD,MAAM,MAAM,GAAG,MAAM,KAAK,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;IAC/C,IAAI,GAAG,GAAG,CAAC,MAAM,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;IAE7B,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IACvB,MAAM,WAAW,GAAa,EAAE,CAAC;IAEjC,MAAM,MAAM,GAAiB,SAAS,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE;QACjD,MAAM,OAAO,GAAG,GAAG,CAAC,EAAE,IAAI,IAAI,EAAE,CAAC;QACjC,WAAW,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAC1B,MAAM,IAAI,GACR,GAAG,CAAC,KAAK,KAAK,SAAS;YACrB,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,aAAa,EAAE,GAAG,CAAC,KAAK,EAAE,CAAC;YAC9C,CAAC,CAAC,IAAI,CAAC;QACX,OAAO;YACL,EAAE,EAAE,OAAO;YACX,OAAO,EAAE,KAAK,CAAC,EAAE;YACjB,QAAQ;YACR,QAAQ,EAAE,GAAG,CAAC,QAAQ;YACtB,QAAQ,EAAE,GAAG;YACb,GAAG,EAAE,GAAG,EAAE;YACV,QAAQ,EAAE,GAAG,CAAC,EAAE;YAChB,IAAI;SACL,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,MAAM,KAAK,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;IAEjC,MAAM,QAAQ,GAAG,MAAM,WAAW,CAAC,KAAK,EAAE,KAAK,CAAC,EAAE,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC;IACnE,MAAM,UAAU,GAAG,KAAK,CAAC,OAAO,GAAG,SAAS,CAAC,MAAM,CAAC;IAEpD,MAAM,KAAK,CAAC,cAAc,CAAC,KAAK,CAAC,EAAE,EAAE,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,EAAE,UAAU,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;IAEvF,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,CAAC;AAC/D,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,WAAW,CAC/B,KAAqB,EACrB,OAAe,EACf,WAAmB;IAEnB,MAAM,MAAM,GAAG,MAAM,KAAK,CAAC,kBAAkB,CAAC,OAAO,CAAC,CAAC;IAEvD,IAAI,KAAK,GAAY,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;IAE7C,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;QAC3B,IAAI,KAAK,CAAC,QAAQ,KAAK,SAAS,EAAE,CAAC;YACjC,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC;gBACf,IAAI,CAAC;oBACH,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,aAAa,CAAC;gBAC/C,CAAC;gBAAC,MAAM,CAAC,CAAA,CAAC;YACZ,CAAC;YACD,SAAS;QACX,CAAC;QAED,IAAI,CAAC;YACH,KAAK,GAAG,aAAa,CAAC,KAAK,EAAE,KAAK,CAAC,QAAQ,CAAC,CAAC;QAC/C,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC;gBACf,IAAI,CAAC;oBACH,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;oBACtC,IAAI,MAAM,CAAC,aAAa,KAAK,SAAS,EAAE,CAAC;wBACvC,KAAK,GAAG,MAAM,CAAC,aAAa,CAAC;wBAC7B,SAAS;oBACX,CAAC;gBACH,CAAC;gBAAC,MAAM,CAAC,CAAA,CAAC;YACZ,CAAC;YACD,OAAO,CAAC,KAAK,CAAC,+BAAgC,GAAa,CAAC,OAAO,EAAE,CAAC,CAAC;QACzE,CAAC;IACH,CAAC;IAED,OAAO,KAAK,CAAC;AACf,CAAC;AAED,MAAM,YAAY,GAAG;IACnB,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ;IAC7D,QAAQ,EAAE,SAAS,EAAE,UAAU,EAAE,YAAY,EAAE,OAAO,EAAE,UAAU;IAClE,iBAAiB,EAAE,WAAW,EAAE,KAAK,EAAE,UAAU;CACzC,CAAC;AAEX,MAAM,cAAc,GAAG;IACrB,UAAU,CAAC,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM;IAC1D,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE,KAAK,EAAE,QAAQ;IACtD,eAAe,EAAE,SAAS,EAAE,GAAG,EAAE,QAAQ;CAC1C,CAAC;AAEF;;;;;;;GAOG;AACH,SAAS,aAAa,CAAC,KAAc,EAAE,YAAoB;IACzD,MAAM,QAAQ,GAAG,0BAA0B,CAAC;IAC5C,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,YAAY,CAAC,EAAE,CAAC;QACjC,MAAM,IAAI,KAAK,CAAC,oDAAoD,CAAC,CAAC;IACxE,CAAC;IAED,MAAM,EAAE,GAAG,IAAI,QAAQ,CACrB,WAAW,EACX,GAAG,YAAY,EACf,gCAAgC,YAAY,6BAA6B,CAC1E,CAAC;IACF,OAAO,EAAE,CAAC,eAAe,CAAC,KAAK,CAAC,EAAE,GAAG,cAAc,CAAC,CAAC;AACvD,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,UAAU,CAC9B,KAAqB,EACrB,OAAe,EACf,KAAK,GAAG,EAAE,EACV,MAAe;IAEf,OAAO,KAAK,CAAC,eAAe,CAAC,OAAO,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC;AACvD,CAAC"}
@@ -1,12 +1,10 @@
1
1
  /**
2
2
  * StorageAdapter — the contract any persistence backend must implement.
3
3
  *
4
- * SQLite ships with the MVP. To add Postgres, Redis, or any other backend,
5
- * implement this interface and pass it to the server at boot.
6
- *
7
- * All methods are synchronous today (SQLite is sync). When a Postgres adapter
8
- * is added, this interface can be migrated to async — the surface is small
9
- * enough that the change is mechanical.
4
+ * All methods return Promises, enabling both synchronous backends (SQLite)
5
+ * and asynchronous backends (Postgres, Redis, etc.) to implement the same
6
+ * interface. For SQLite, the async overhead is negligible — the methods
7
+ * resolve immediately since better-sqlite3 is synchronous under the hood.
10
8
  */
11
9
  export interface NamespaceRecord {
12
10
  id: string;
@@ -47,56 +45,56 @@ export interface EventInput {
47
45
  }
48
46
  export interface StorageAdapter {
49
47
  /** Run migrations / create tables. Called once at boot. */
50
- init(): void;
48
+ init(): Promise<void>;
51
49
  /** Clean shutdown (close connections, etc.) */
52
- close(): void;
50
+ close(): Promise<void>;
53
51
  /** List all namespaces (api_key excluded from result for safety). */
54
- listNamespaces(): Pick<NamespaceRecord, "id" | "name" | "created_at">[];
52
+ listNamespaces(): Promise<Pick<NamespaceRecord, "id" | "name" | "created_at">[]>;
55
53
  /** Find a namespace by its hashed API key. Returns just the id, or null. */
56
- findNamespaceByApiKey(apiKeyHash: string): {
54
+ findNamespaceByApiKey(apiKeyHash: string): Promise<{
57
55
  id: string;
58
- } | null;
56
+ } | null>;
59
57
  /** Find a namespace by name. Returns the full record, or null. */
60
- findNamespaceByName(name: string): NamespaceRecord | null;
58
+ findNamespaceByName(name: string): Promise<NamespaceRecord | null>;
61
59
  /** Insert a new namespace. */
62
- createNamespace(ns: NamespaceRecord): void;
60
+ createNamespace(ns: NamespaceRecord): Promise<void>;
63
61
  /** Find a state by (namespace, key). */
64
- findState(namespace: string, key: string): StateRecord | null;
62
+ findState(namespace: string, key: string): Promise<StateRecord | null>;
65
63
  /** Find a state by primary key. */
66
- findStateById(id: string): StateRecord | null;
64
+ findStateById(id: string): Promise<StateRecord | null>;
67
65
  /** List states for a namespace (snapshot included). */
68
- listStates(namespace: string): StateRecord[];
66
+ listStates(namespace: string): Promise<StateRecord[]>;
69
67
  /** Insert a new state row. */
70
- createState(state: StateRecord): void;
68
+ createState(state: StateRecord): Promise<void>;
71
69
  /** Update the snapshot, version, and updated_at for a state. */
72
- updateSnapshot(stateId: string, snapshot: string, version: number, updatedAt: number): void;
70
+ updateSnapshot(stateId: string, snapshot: string, version: number, updatedAt: number): Promise<void>;
73
71
  /** Get the current max sequence number for a state. null if no events. */
74
- getMaxSeq(stateId: string): number | null;
72
+ getMaxSeq(stateId: string): Promise<number | null>;
75
73
  /** Insert a batch of events atomically (single transaction). */
76
- insertEvents(events: EventInput[]): void;
74
+ insertEvents(events: EventInput[]): Promise<void>;
77
75
  /** Get all events for replay: just mutation + meta, ordered by (server_ts, seq). */
78
- getEventsForReplay(stateId: string): {
76
+ getEventsForReplay(stateId: string): Promise<{
79
77
  mutation: string;
80
78
  meta: string | null;
81
- }[];
79
+ }[]>;
82
80
  /** Get paginated event history (full records). */
83
- getEventHistory(stateId: string, limit: number, cursor?: string): {
81
+ getEventHistory(stateId: string, limit: number, cursor?: string): Promise<{
84
82
  events: EventRecord[];
85
83
  hasMore: boolean;
86
- };
84
+ }>;
87
85
  /** Counts for the studio overview. */
88
- getStats(): {
86
+ getStats(): Promise<{
89
87
  namespaces: number;
90
88
  states: number;
91
89
  events: number;
92
- };
90
+ }>;
93
91
  /** All states with their namespace name, ordered by last updated. */
94
- listAllStatesWithNamespace(): (StateRecord & {
92
+ listAllStatesWithNamespace(): Promise<(StateRecord & {
95
93
  namespace_name: string;
96
- })[];
94
+ })[]>;
97
95
  /** Recent events across all states, with state key attached. */
98
- getRecentEvents(limit: number): (EventRecord & {
96
+ getRecentEvents(limit: number): Promise<(EventRecord & {
99
97
  state_key: string;
100
- })[];
98
+ })[]>;
101
99
  }
102
100
  //# sourceMappingURL=adapter.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"adapter.d.ts","sourceRoot":"","sources":["../../src/storage/adapter.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"adapter.d.ts","sourceRoot":"","sources":["../../src/storage/adapter.ts"],"names":[],"mappings":"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"}
@@ -1,12 +1,10 @@
1
1
  /**
2
2
  * StorageAdapter — the contract any persistence backend must implement.
3
3
  *
4
- * SQLite ships with the MVP. To add Postgres, Redis, or any other backend,
5
- * implement this interface and pass it to the server at boot.
6
- *
7
- * All methods are synchronous today (SQLite is sync). When a Postgres adapter
8
- * is added, this interface can be migrated to async — the surface is small
9
- * enough that the change is mechanical.
4
+ * All methods return Promises, enabling both synchronous backends (SQLite)
5
+ * and asynchronous backends (Postgres, Redis, etc.) to implement the same
6
+ * interface. For SQLite, the async overhead is negligible — the methods
7
+ * resolve immediately since better-sqlite3 is synchronous under the hood.
10
8
  */
11
9
  export {};
12
10
  //# sourceMappingURL=adapter.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"adapter.js","sourceRoot":"","sources":["../../src/storage/adapter.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG"}
1
+ {"version":3,"file":"adapter.js","sourceRoot":"","sources":["../../src/storage/adapter.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG"}
@@ -1,4 +1,6 @@
1
1
  export type { StorageAdapter, NamespaceRecord, StateRecord, EventRecord, EventInput, } from "./adapter.js";
2
2
  export { SqliteAdapter } from "./sqlite.js";
3
3
  export type { SqliteOptions } from "./sqlite.js";
4
+ export { PostgresAdapter } from "./postgres.js";
5
+ export type { PostgresOptions } from "./postgres.js";
4
6
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/storage/index.ts"],"names":[],"mappings":"AAAA,YAAY,EACV,cAAc,EACd,eAAe,EACf,WAAW,EACX,WAAW,EACX,UAAU,GACX,MAAM,cAAc,CAAC;AAEtB,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,YAAY,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/storage/index.ts"],"names":[],"mappings":"AAAA,YAAY,EACV,cAAc,EACd,eAAe,EACf,WAAW,EACX,WAAW,EACX,UAAU,GACX,MAAM,cAAc,CAAC;AAEtB,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,YAAY,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAEjD,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAChD,YAAY,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC"}
@@ -1,2 +1,3 @@
1
1
  export { SqliteAdapter } from "./sqlite.js";
2
+ export { PostgresAdapter } from "./postgres.js";
2
3
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/storage/index.ts"],"names":[],"mappings":"AAQA,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/storage/index.ts"],"names":[],"mappings":"AAQA,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAG5C,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC"}
@@ -0,0 +1,48 @@
1
+ import type { StorageAdapter, NamespaceRecord, StateRecord, EventRecord, EventInput } from "./adapter.js";
2
+ export interface PostgresOptions {
3
+ /** Postgres connection string, e.g. postgres://user:pass@host:5432/mydb */
4
+ connectionString: string;
5
+ /** Max connections in the pool. Default: 10 */
6
+ maxConnections?: number;
7
+ }
8
+ export declare class PostgresAdapter implements StorageAdapter {
9
+ private opts;
10
+ private pool;
11
+ constructor(opts: PostgresOptions);
12
+ init(): Promise<void>;
13
+ close(): Promise<void>;
14
+ listNamespaces(): Promise<Pick<NamespaceRecord, "id" | "name" | "created_at">[]>;
15
+ findNamespaceByApiKey(apiKeyHash: string): Promise<{
16
+ id: string;
17
+ } | null>;
18
+ findNamespaceByName(name: string): Promise<NamespaceRecord | null>;
19
+ createNamespace(ns: NamespaceRecord): Promise<void>;
20
+ private rowToState;
21
+ findState(namespace: string, key: string): Promise<StateRecord | null>;
22
+ findStateById(id: string): Promise<StateRecord | null>;
23
+ listStates(namespace: string): Promise<StateRecord[]>;
24
+ createState(state: StateRecord): Promise<void>;
25
+ updateSnapshot(stateId: string, snapshot: string, version: number, updatedAt: number): Promise<void>;
26
+ getMaxSeq(stateId: string): Promise<number | null>;
27
+ insertEvents(events: EventInput[]): Promise<void>;
28
+ getEventsForReplay(stateId: string): Promise<{
29
+ mutation: string;
30
+ meta: string | null;
31
+ }[]>;
32
+ getEventHistory(stateId: string, limit: number, cursor?: string): Promise<{
33
+ events: EventRecord[];
34
+ hasMore: boolean;
35
+ }>;
36
+ getStats(): Promise<{
37
+ namespaces: number;
38
+ states: number;
39
+ events: number;
40
+ }>;
41
+ listAllStatesWithNamespace(): Promise<(StateRecord & {
42
+ namespace_name: string;
43
+ })[]>;
44
+ getRecentEvents(limit: number): Promise<(EventRecord & {
45
+ state_key: string;
46
+ })[]>;
47
+ }
48
+ //# sourceMappingURL=postgres.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"postgres.d.ts","sourceRoot":"","sources":["../../src/storage/postgres.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,cAAc,EACd,eAAe,EACf,WAAW,EACX,WAAW,EACX,UAAU,EACX,MAAM,cAAc,CAAC;AAItB,MAAM,WAAW,eAAe;IAC9B,2EAA2E;IAC3E,gBAAgB,EAAE,MAAM,CAAC;IACzB,+CAA+C;IAC/C,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAED,qBAAa,eAAgB,YAAW,cAAc;IAGxC,OAAO,CAAC,IAAI;IAFxB,OAAO,CAAC,IAAI,CAAU;gBAEF,IAAI,EAAE,eAAe;IASnC,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAyCrB,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAMtB,cAAc,IAAI,OAAO,CAAC,IAAI,CAAC,eAAe,EAAE,IAAI,GAAG,MAAM,GAAG,YAAY,CAAC,EAAE,CAAC;IAOhF,qBAAqB,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC;QAAE,EAAE,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAAC;IAQzE,mBAAmB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,GAAG,IAAI,CAAC;IASlE,eAAe,CAAC,EAAE,EAAE,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC;IASzD,OAAO,CAAC,UAAU;IASZ,SAAS,CAAC,SAAS,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,GAAG,IAAI,CAAC;IAQtE,aAAa,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,GAAG,IAAI,CAAC;IAQtD,UAAU,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC;IAQrD,WAAW,CAAC,KAAK,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC;IAiB9C,cAAc,CAClB,OAAO,EAAE,MAAM,EACf,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,MAAM,EACf,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC,IAAI,CAAC;IASV,SAAS,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;IAQlD,YAAY,CAAC,MAAM,EAAE,UAAU,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAsBjD,kBAAkB,CACtB,OAAO,EAAE,MAAM,GACd,OAAO,CAAC;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAA;KAAE,EAAE,CAAC;IAQjD,eAAe,CACnB,OAAO,EAAE,MAAM,EACf,KAAK,EAAE,MAAM,EACb,MAAM,CAAC,EAAE,MAAM,GACd,OAAO,CAAC;QAAE,MAAM,EAAE,WAAW,EAAE,CAAC;QAAC,OAAO,EAAE,OAAO,CAAA;KAAE,CAAC;IAsCjD,QAAQ,IAAI,OAAO,CAAC;QAAE,UAAU,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC;IAa3E,0BAA0B,IAAI,OAAO,CAAC,CAAC,WAAW,GAAG;QAAE,cAAc,EAAE,MAAM,CAAA;KAAE,CAAC,EAAE,CAAC;IAanF,eAAe,CACnB,KAAK,EAAE,MAAM,GACZ,OAAO,CAAC,CAAC,WAAW,GAAG;QAAE,SAAS,EAAE,MAAM,CAAA;KAAE,CAAC,EAAE,CAAC;CAkBpD"}
@@ -0,0 +1,207 @@
1
+ import pg from "pg";
2
+ const { Pool } = pg;
3
+ export class PostgresAdapter {
4
+ opts;
5
+ pool;
6
+ constructor(opts) {
7
+ this.opts = opts;
8
+ this.pool = new Pool({
9
+ connectionString: opts.connectionString,
10
+ max: opts.maxConnections ?? 10,
11
+ });
12
+ }
13
+ // ── Lifecycle ───────────────────────────────────────────────────────────
14
+ async init() {
15
+ await this.pool.query(`
16
+ CREATE TABLE IF NOT EXISTS namespaces (
17
+ id TEXT PRIMARY KEY,
18
+ name TEXT NOT NULL,
19
+ api_key TEXT NOT NULL UNIQUE,
20
+ created_at BIGINT NOT NULL
21
+ );
22
+
23
+ CREATE TABLE IF NOT EXISTS states (
24
+ id TEXT PRIMARY KEY,
25
+ namespace TEXT NOT NULL REFERENCES namespaces(id),
26
+ key TEXT NOT NULL,
27
+ initial TEXT NOT NULL,
28
+ snapshot TEXT NOT NULL,
29
+ version INTEGER NOT NULL DEFAULT 0,
30
+ created_at BIGINT NOT NULL,
31
+ updated_at BIGINT NOT NULL,
32
+ UNIQUE(namespace, key)
33
+ );
34
+
35
+ CREATE TABLE IF NOT EXISTS event_log (
36
+ id TEXT PRIMARY KEY,
37
+ state_id TEXT NOT NULL REFERENCES states(id),
38
+ client_id TEXT NOT NULL,
39
+ client_ts BIGINT NOT NULL,
40
+ server_ts BIGINT NOT NULL,
41
+ seq INTEGER NOT NULL,
42
+ mutation TEXT NOT NULL,
43
+ meta TEXT,
44
+ created_at BIGINT NOT NULL
45
+ );
46
+
47
+ CREATE INDEX IF NOT EXISTS idx_event_log_state_ts
48
+ ON event_log(state_id, server_ts, seq);
49
+
50
+ CREATE INDEX IF NOT EXISTS idx_states_namespace_key
51
+ ON states(namespace, key);
52
+ `);
53
+ }
54
+ async close() {
55
+ await this.pool.end();
56
+ }
57
+ // ── Namespaces ──────────────────────────────────────────────────────────
58
+ async listNamespaces() {
59
+ const { rows } = await this.pool.query("SELECT id, name, created_at FROM namespaces");
60
+ return rows.map((r) => ({ ...r, created_at: Number(r.created_at) }));
61
+ }
62
+ async findNamespaceByApiKey(apiKeyHash) {
63
+ const { rows } = await this.pool.query("SELECT id FROM namespaces WHERE api_key = $1", [apiKeyHash]);
64
+ return rows[0] ?? null;
65
+ }
66
+ async findNamespaceByName(name) {
67
+ const { rows } = await this.pool.query("SELECT * FROM namespaces WHERE name = $1", [name]);
68
+ if (!rows[0])
69
+ return null;
70
+ return { ...rows[0], created_at: Number(rows[0].created_at) };
71
+ }
72
+ async createNamespace(ns) {
73
+ await this.pool.query("INSERT INTO namespaces (id, name, api_key, created_at) VALUES ($1, $2, $3, $4)", [ns.id, ns.name, ns.api_key, ns.created_at]);
74
+ }
75
+ // ── States ──────────────────────────────────────────────────────────────
76
+ rowToState(r) {
77
+ return {
78
+ ...r,
79
+ version: Number(r.version),
80
+ created_at: Number(r.created_at),
81
+ updated_at: Number(r.updated_at),
82
+ };
83
+ }
84
+ async findState(namespace, key) {
85
+ const { rows } = await this.pool.query("SELECT * FROM states WHERE namespace = $1 AND key = $2", [namespace, key]);
86
+ return rows[0] ? this.rowToState(rows[0]) : null;
87
+ }
88
+ async findStateById(id) {
89
+ const { rows } = await this.pool.query("SELECT * FROM states WHERE id = $1", [id]);
90
+ return rows[0] ? this.rowToState(rows[0]) : null;
91
+ }
92
+ async listStates(namespace) {
93
+ const { rows } = await this.pool.query("SELECT id, key, snapshot, version, created_at, updated_at FROM states WHERE namespace = $1", [namespace]);
94
+ return rows.map((r) => this.rowToState(r));
95
+ }
96
+ async createState(state) {
97
+ await this.pool.query(`INSERT INTO states (id, namespace, key, initial, snapshot, version, created_at, updated_at)
98
+ VALUES ($1, $2, $3, $4, $5, $6, $7, $8)`, [
99
+ state.id,
100
+ state.namespace,
101
+ state.key,
102
+ state.initial,
103
+ state.snapshot,
104
+ state.version,
105
+ state.created_at,
106
+ state.updated_at,
107
+ ]);
108
+ }
109
+ async updateSnapshot(stateId, snapshot, version, updatedAt) {
110
+ await this.pool.query("UPDATE states SET snapshot = $1, version = $2, updated_at = $3 WHERE id = $4", [snapshot, version, updatedAt, stateId]);
111
+ }
112
+ // ── Event Log ───────────────────────────────────────────────────────────
113
+ async getMaxSeq(stateId) {
114
+ const { rows } = await this.pool.query("SELECT MAX(seq) as max_seq FROM event_log WHERE state_id = $1", [stateId]);
115
+ return rows[0]?.max_seq != null ? Number(rows[0].max_seq) : null;
116
+ }
117
+ async insertEvents(events) {
118
+ if (events.length === 0)
119
+ return;
120
+ const client = await this.pool.connect();
121
+ try {
122
+ await client.query("BEGIN");
123
+ for (const e of events) {
124
+ await client.query(`INSERT INTO event_log (id, state_id, client_id, client_ts, server_ts, seq, mutation, meta, created_at)
125
+ VALUES ($1, $2, $3, $4, $5, $6, $7, $8, $9)`, [e.id, e.stateId, e.clientId, e.clientTs, e.serverTs, e.seq, e.mutation, e.meta, e.serverTs]);
126
+ }
127
+ await client.query("COMMIT");
128
+ }
129
+ catch (err) {
130
+ await client.query("ROLLBACK");
131
+ throw err;
132
+ }
133
+ finally {
134
+ client.release();
135
+ }
136
+ }
137
+ async getEventsForReplay(stateId) {
138
+ const { rows } = await this.pool.query("SELECT mutation, meta FROM event_log WHERE state_id = $1 ORDER BY server_ts ASC, seq ASC", [stateId]);
139
+ return rows;
140
+ }
141
+ async getEventHistory(stateId, limit, cursor) {
142
+ let rows;
143
+ if (cursor) {
144
+ const result = await this.pool.query(`SELECT * FROM event_log
145
+ WHERE state_id = $1 AND (server_ts, seq) > (
146
+ SELECT server_ts, seq FROM event_log WHERE id = $2
147
+ )
148
+ ORDER BY server_ts ASC, seq ASC
149
+ LIMIT $3`, [stateId, cursor, limit + 1]);
150
+ rows = result.rows;
151
+ }
152
+ else {
153
+ const result = await this.pool.query("SELECT * FROM event_log WHERE state_id = $1 ORDER BY server_ts ASC, seq ASC LIMIT $2", [stateId, limit + 1]);
154
+ rows = result.rows;
155
+ }
156
+ const events = rows.map((r) => ({
157
+ ...r,
158
+ client_ts: Number(r.client_ts),
159
+ server_ts: Number(r.server_ts),
160
+ seq: Number(r.seq),
161
+ created_at: Number(r.created_at),
162
+ }));
163
+ const hasMore = events.length > limit;
164
+ if (hasMore)
165
+ events.pop();
166
+ return { events, hasMore };
167
+ }
168
+ // ── Studio ──────────────────────────────────────────────────────────────
169
+ async getStats() {
170
+ const [ns, st, ev] = await Promise.all([
171
+ this.pool.query("SELECT COUNT(*)::int as count FROM namespaces"),
172
+ this.pool.query("SELECT COUNT(*)::int as count FROM states"),
173
+ this.pool.query("SELECT COUNT(*)::int as count FROM event_log"),
174
+ ]);
175
+ return {
176
+ namespaces: ns.rows[0].count,
177
+ states: st.rows[0].count,
178
+ events: ev.rows[0].count,
179
+ };
180
+ }
181
+ async listAllStatesWithNamespace() {
182
+ const { rows } = await this.pool.query(`SELECT s.id, s.namespace, s.key, s.snapshot, s.version, s.created_at, s.updated_at, n.name as namespace_name
183
+ FROM states s
184
+ JOIN namespaces n ON s.namespace = n.id
185
+ ORDER BY s.updated_at DESC`);
186
+ return rows.map((r) => ({
187
+ ...this.rowToState(r),
188
+ namespace_name: r.namespace_name,
189
+ }));
190
+ }
191
+ async getRecentEvents(limit) {
192
+ const { rows } = await this.pool.query(`SELECT e.id, e.state_id, e.client_id, e.client_ts, e.server_ts, e.mutation, e.meta, s.key as state_key
193
+ FROM event_log e
194
+ JOIN states s ON e.state_id = s.id
195
+ ORDER BY e.server_ts DESC, e.seq DESC
196
+ LIMIT $1`, [limit]);
197
+ return rows
198
+ .map((r) => ({
199
+ ...r,
200
+ client_ts: Number(r.client_ts),
201
+ server_ts: Number(r.server_ts),
202
+ created_at: Number(r.created_at),
203
+ }))
204
+ .reverse();
205
+ }
206
+ }
207
+ //# sourceMappingURL=postgres.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"postgres.js","sourceRoot":"","sources":["../../src/storage/postgres.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,IAAI,CAAC;AASpB,MAAM,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC;AASpB,MAAM,OAAO,eAAe;IAGN;IAFZ,IAAI,CAAU;IAEtB,YAAoB,IAAqB;QAArB,SAAI,GAAJ,IAAI,CAAiB;QACvC,IAAI,CAAC,IAAI,GAAG,IAAI,IAAI,CAAC;YACnB,gBAAgB,EAAE,IAAI,CAAC,gBAAgB;YACvC,GAAG,EAAE,IAAI,CAAC,cAAc,IAAI,EAAE;SAC/B,CAAC,CAAC;IACL,CAAC;IAED,2EAA2E;IAE3E,KAAK,CAAC,IAAI;QACR,MAAM,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;KAqCrB,CAAC,CAAC;IACL,CAAC;IAED,KAAK,CAAC,KAAK;QACT,MAAM,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC;IACxB,CAAC;IAED,2EAA2E;IAE3E,KAAK,CAAC,cAAc;QAClB,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,KAAK,CACpC,6CAA6C,CAC9C,CAAC;QACF,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,UAAU,EAAE,MAAM,CAAC,CAAC,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC,CAAC;IACvE,CAAC;IAED,KAAK,CAAC,qBAAqB,CAAC,UAAkB;QAC5C,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,KAAK,CACpC,8CAA8C,EAC9C,CAAC,UAAU,CAAC,CACb,CAAC;QACF,OAAO,IAAI,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC;IACzB,CAAC;IAED,KAAK,CAAC,mBAAmB,CAAC,IAAY;QACpC,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,KAAK,CACpC,0CAA0C,EAC1C,CAAC,IAAI,CAAC,CACP,CAAC;QACF,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;YAAE,OAAO,IAAI,CAAC;QAC1B,OAAO,EAAE,GAAG,IAAI,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,EAAE,CAAC;IAChE,CAAC;IAED,KAAK,CAAC,eAAe,CAAC,EAAmB;QACvC,MAAM,IAAI,CAAC,IAAI,CAAC,KAAK,CACnB,gFAAgF,EAChF,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,CAC5C,CAAC;IACJ,CAAC;IAED,2EAA2E;IAEnE,UAAU,CAAC,CAAM;QACvB,OAAO;YACL,GAAG,CAAC;YACJ,OAAO,EAAE,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC;YAC1B,UAAU,EAAE,MAAM,CAAC,CAAC,CAAC,UAAU,CAAC;YAChC,UAAU,EAAE,MAAM,CAAC,CAAC,CAAC,UAAU,CAAC;SACjC,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,SAAS,CAAC,SAAiB,EAAE,GAAW;QAC5C,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,KAAK,CACpC,wDAAwD,EACxD,CAAC,SAAS,EAAE,GAAG,CAAC,CACjB,CAAC;QACF,OAAO,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IACnD,CAAC;IAED,KAAK,CAAC,aAAa,CAAC,EAAU;QAC5B,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,KAAK,CACpC,oCAAoC,EACpC,CAAC,EAAE,CAAC,CACL,CAAC;QACF,OAAO,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IACnD,CAAC;IAED,KAAK,CAAC,UAAU,CAAC,SAAiB;QAChC,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,KAAK,CACpC,4FAA4F,EAC5F,CAAC,SAAS,CAAC,CACZ,CAAC;QACF,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC;IAC7C,CAAC;IAED,KAAK,CAAC,WAAW,CAAC,KAAkB;QAClC,MAAM,IAAI,CAAC,IAAI,CAAC,KAAK,CACnB;+CACyC,EACzC;YACE,KAAK,CAAC,EAAE;YACR,KAAK,CAAC,SAAS;YACf,KAAK,CAAC,GAAG;YACT,KAAK,CAAC,OAAO;YACb,KAAK,CAAC,QAAQ;YACd,KAAK,CAAC,OAAO;YACb,KAAK,CAAC,UAAU;YAChB,KAAK,CAAC,UAAU;SACjB,CACF,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,cAAc,CAClB,OAAe,EACf,QAAgB,EAChB,OAAe,EACf,SAAiB;QAEjB,MAAM,IAAI,CAAC,IAAI,CAAC,KAAK,CACnB,8EAA8E,EAC9E,CAAC,QAAQ,EAAE,OAAO,EAAE,SAAS,EAAE,OAAO,CAAC,CACxC,CAAC;IACJ,CAAC;IAED,2EAA2E;IAE3E,KAAK,CAAC,SAAS,CAAC,OAAe;QAC7B,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,KAAK,CACpC,+DAA+D,EAC/D,CAAC,OAAO,CAAC,CACV,CAAC;QACF,OAAO,IAAI,CAAC,CAAC,CAAC,EAAE,OAAO,IAAI,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IACnE,CAAC;IAED,KAAK,CAAC,YAAY,CAAC,MAAoB;QACrC,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO;QAEhC,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;QACzC,IAAI,CAAC;YACH,MAAM,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;YAC5B,KAAK,MAAM,CAAC,IAAI,MAAM,EAAE,CAAC;gBACvB,MAAM,MAAM,CAAC,KAAK,CAChB;uDAC6C,EAC7C,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,QAAQ,CAAC,CAC7F,CAAC;YACJ,CAAC;YACD,MAAM,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;QAC/B,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,MAAM,MAAM,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;YAC/B,MAAM,GAAG,CAAC;QACZ,CAAC;gBAAS,CAAC;YACT,MAAM,CAAC,OAAO,EAAE,CAAC;QACnB,CAAC;IACH,CAAC;IAED,KAAK,CAAC,kBAAkB,CACtB,OAAe;QAEf,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,KAAK,CACpC,0FAA0F,EAC1F,CAAC,OAAO,CAAC,CACV,CAAC;QACF,OAAO,IAAI,CAAC;IACd,CAAC;IAED,KAAK,CAAC,eAAe,CACnB,OAAe,EACf,KAAa,EACb,MAAe;QAEf,IAAI,IAAW,CAAC;QAEhB,IAAI,MAAM,EAAE,CAAC;YACX,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,KAAK,CAClC;;;;;kBAKU,EACV,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,GAAG,CAAC,CAAC,CAC7B,CAAC;YACF,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC;QACrB,CAAC;aAAM,CAAC;YACN,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,KAAK,CAClC,sFAAsF,EACtF,CAAC,OAAO,EAAE,KAAK,GAAG,CAAC,CAAC,CACrB,CAAC;YACF,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC;QACrB,CAAC;QAED,MAAM,MAAM,GAAkB,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YAC7C,GAAG,CAAC;YACJ,SAAS,EAAE,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC;YAC9B,SAAS,EAAE,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC;YAC9B,GAAG,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC;YAClB,UAAU,EAAE,MAAM,CAAC,CAAC,CAAC,UAAU,CAAC;SACjC,CAAC,CAAC,CAAC;QAEJ,MAAM,OAAO,GAAG,MAAM,CAAC,MAAM,GAAG,KAAK,CAAC;QACtC,IAAI,OAAO;YAAE,MAAM,CAAC,GAAG,EAAE,CAAC;QAE1B,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC;IAC7B,CAAC;IAED,2EAA2E;IAE3E,KAAK,CAAC,QAAQ;QACZ,MAAM,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;YACrC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,+CAA+C,CAAC;YAChE,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,2CAA2C,CAAC;YAC5D,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,8CAA8C,CAAC;SAChE,CAAC,CAAC;QACH,OAAO;YACL,UAAU,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK;YAC5B,MAAM,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK;YACxB,MAAM,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK;SACzB,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,0BAA0B;QAC9B,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,KAAK,CACpC;;;kCAG4B,CAC7B,CAAC;QACF,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YACtB,GAAG,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC;YACrB,cAAc,EAAE,CAAC,CAAC,cAAc;SACjC,CAAC,CAAC,CAAC;IACN,CAAC;IAED,KAAK,CAAC,eAAe,CACnB,KAAa;QAEb,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,KAAK,CACpC;;;;gBAIU,EACV,CAAC,KAAK,CAAC,CACR,CAAC;QACF,OAAO,IAAI;aACR,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YACX,GAAG,CAAC;YACJ,SAAS,EAAE,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC;YAC9B,SAAS,EAAE,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC;YAC9B,UAAU,EAAE,MAAM,CAAC,CAAC,CAAC,UAAU,CAAC;SACjC,CAAC,CAAC;aACF,OAAO,EAAE,CAAC;IACf,CAAC;CACF"}
@@ -11,39 +11,39 @@ export declare class SqliteAdapter implements StorageAdapter {
11
11
  constructor(opts?: SqliteOptions);
12
12
  /** Expose the raw database for edge cases (tests, legacy code). */
13
13
  get raw(): Database.Database;
14
- init(): void;
15
- close(): void;
16
- listNamespaces(): Pick<NamespaceRecord, "id" | "name" | "created_at">[];
17
- findNamespaceByApiKey(apiKeyHash: string): {
14
+ init(): Promise<void>;
15
+ close(): Promise<void>;
16
+ listNamespaces(): Promise<Pick<NamespaceRecord, "id" | "name" | "created_at">[]>;
17
+ findNamespaceByApiKey(apiKeyHash: string): Promise<{
18
18
  id: string;
19
- } | null;
20
- findNamespaceByName(name: string): NamespaceRecord | null;
21
- createNamespace(ns: NamespaceRecord): void;
22
- findState(namespace: string, key: string): StateRecord | null;
23
- findStateById(id: string): StateRecord | null;
24
- listStates(namespace: string): StateRecord[];
25
- createState(state: StateRecord): void;
26
- updateSnapshot(stateId: string, snapshot: string, version: number, updatedAt: number): void;
27
- getMaxSeq(stateId: string): number | null;
28
- insertEvents(events: EventInput[]): void;
29
- getEventsForReplay(stateId: string): {
19
+ } | null>;
20
+ findNamespaceByName(name: string): Promise<NamespaceRecord | null>;
21
+ createNamespace(ns: NamespaceRecord): Promise<void>;
22
+ findState(namespace: string, key: string): Promise<StateRecord | null>;
23
+ findStateById(id: string): Promise<StateRecord | null>;
24
+ listStates(namespace: string): Promise<StateRecord[]>;
25
+ createState(state: StateRecord): Promise<void>;
26
+ updateSnapshot(stateId: string, snapshot: string, version: number, updatedAt: number): Promise<void>;
27
+ getMaxSeq(stateId: string): Promise<number | null>;
28
+ insertEvents(events: EventInput[]): Promise<void>;
29
+ getEventsForReplay(stateId: string): Promise<{
30
30
  mutation: string;
31
31
  meta: string | null;
32
- }[];
33
- getEventHistory(stateId: string, limit: number, cursor?: string): {
32
+ }[]>;
33
+ getEventHistory(stateId: string, limit: number, cursor?: string): Promise<{
34
34
  events: EventRecord[];
35
35
  hasMore: boolean;
36
- };
37
- getStats(): {
36
+ }>;
37
+ getStats(): Promise<{
38
38
  namespaces: number;
39
39
  states: number;
40
40
  events: number;
41
- };
42
- listAllStatesWithNamespace(): (StateRecord & {
41
+ }>;
42
+ listAllStatesWithNamespace(): Promise<(StateRecord & {
43
43
  namespace_name: string;
44
- })[];
45
- getRecentEvents(limit: number): (EventRecord & {
44
+ })[]>;
45
+ getRecentEvents(limit: number): Promise<(EventRecord & {
46
46
  state_key: string;
47
- })[];
47
+ })[]>;
48
48
  }
49
49
  //# sourceMappingURL=sqlite.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"sqlite.d.ts","sourceRoot":"","sources":["../../src/storage/sqlite.ts"],"names":[],"mappings":"AAAA,OAAO,QAAQ,MAAM,gBAAgB,CAAC;AAGtC,OAAO,KAAK,EACV,cAAc,EACd,eAAe,EACf,WAAW,EACX,WAAW,EACX,UAAU,EACX,MAAM,cAAc,CAAC;AAEtB,MAAM,WAAW,aAAa;IAC5B,qFAAqF;IACrF,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,8DAA8D;IAC9D,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAED,qBAAa,aAAc,YAAW,cAAc;IAClD,OAAO,CAAC,EAAE,CAAoB;gBAElB,IAAI,GAAE,aAAkB;IAepC,mEAAmE;IACnE,IAAI,GAAG,IAAI,QAAQ,CAAC,QAAQ,CAE3B;IAID,IAAI,IAAI,IAAI;IAyCZ,KAAK,IAAI,IAAI;IAMb,cAAc,IAAI,IAAI,CAAC,eAAe,EAAE,IAAI,GAAG,MAAM,GAAG,YAAY,CAAC,EAAE;IAMvE,qBAAqB,CAAC,UAAU,EAAE,MAAM,GAAG;QAAE,EAAE,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI;IAQhE,mBAAmB,CAAC,IAAI,EAAE,MAAM,GAAG,eAAe,GAAG,IAAI;IAQzD,eAAe,CAAC,EAAE,EAAE,eAAe,GAAG,IAAI;IAU1C,SAAS,CAAC,SAAS,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,WAAW,GAAG,IAAI;IAQ7D,aAAa,CAAC,EAAE,EAAE,MAAM,GAAG,WAAW,GAAG,IAAI;IAQ7C,UAAU,CAAC,SAAS,EAAE,MAAM,GAAG,WAAW,EAAE;IAQ5C,WAAW,CAAC,KAAK,EAAE,WAAW,GAAG,IAAI;IAkBrC,cAAc,CACZ,OAAO,EAAE,MAAM,EACf,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,MAAM,EACf,SAAS,EAAE,MAAM,GAChB,IAAI;IAUP,SAAS,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI;IAOzC,YAAY,CAAC,MAAM,EAAE,UAAU,EAAE,GAAG,IAAI;IAyBxC,kBAAkB,CAChB,OAAO,EAAE,MAAM,GACd;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAA;KAAE,EAAE;IAQ9C,eAAe,CACb,OAAO,EAAE,MAAM,EACf,KAAK,EAAE,MAAM,EACb,MAAM,CAAC,EAAE,MAAM,GACd;QAAE,MAAM,EAAE,WAAW,EAAE,CAAC;QAAC,OAAO,EAAE,OAAO,CAAA;KAAE;IA8B9C,QAAQ,IAAI;QAAE,UAAU,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE;IAalE,0BAA0B,IAAI,CAAC,WAAW,GAAG;QAAE,cAAc,EAAE,MAAM,CAAA;KAAE,CAAC,EAAE;IAW1E,eAAe,CACb,KAAK,EAAE,MAAM,GACZ,CAAC,WAAW,GAAG;QAAE,SAAS,EAAE,MAAM,CAAA;KAAE,CAAC,EAAE;CAY3C"}
1
+ {"version":3,"file":"sqlite.d.ts","sourceRoot":"","sources":["../../src/storage/sqlite.ts"],"names":[],"mappings":"AAAA,OAAO,QAAQ,MAAM,gBAAgB,CAAC;AAGtC,OAAO,KAAK,EACV,cAAc,EACd,eAAe,EACf,WAAW,EACX,WAAW,EACX,UAAU,EACX,MAAM,cAAc,CAAC;AAEtB,MAAM,WAAW,aAAa;IAC5B,qFAAqF;IACrF,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,8DAA8D;IAC9D,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAED,qBAAa,aAAc,YAAW,cAAc;IAClD,OAAO,CAAC,EAAE,CAAoB;gBAElB,IAAI,GAAE,aAAkB;IAepC,mEAAmE;IACnE,IAAI,GAAG,IAAI,QAAQ,CAAC,QAAQ,CAE3B;IAIK,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAyCrB,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAMtB,cAAc,IAAI,OAAO,CAAC,IAAI,CAAC,eAAe,EAAE,IAAI,GAAG,MAAM,GAAG,YAAY,CAAC,EAAE,CAAC;IAMhF,qBAAqB,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC;QAAE,EAAE,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAAC;IAQzE,mBAAmB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,GAAG,IAAI,CAAC;IAQlE,eAAe,CAAC,EAAE,EAAE,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC;IAUnD,SAAS,CAAC,SAAS,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,GAAG,IAAI,CAAC;IAQtE,aAAa,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,GAAG,IAAI,CAAC;IAQtD,UAAU,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC;IAQrD,WAAW,CAAC,KAAK,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC;IAkB9C,cAAc,CAClB,OAAO,EAAE,MAAM,EACf,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,MAAM,EACf,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC,IAAI,CAAC;IAUV,SAAS,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;IAOlD,YAAY,CAAC,MAAM,EAAE,UAAU,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAyBjD,kBAAkB,CACtB,OAAO,EAAE,MAAM,GACd,OAAO,CAAC;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAA;KAAE,EAAE,CAAC;IAQjD,eAAe,CACnB,OAAO,EAAE,MAAM,EACf,KAAK,EAAE,MAAM,EACb,MAAM,CAAC,EAAE,MAAM,GACd,OAAO,CAAC;QAAE,MAAM,EAAE,WAAW,EAAE,CAAC;QAAC,OAAO,EAAE,OAAO,CAAA;KAAE,CAAC;IA8BjD,QAAQ,IAAI,OAAO,CAAC;QAAE,UAAU,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC;IAa3E,0BAA0B,IAAI,OAAO,CAAC,CAAC,WAAW,GAAG;QAAE,cAAc,EAAE,MAAM,CAAA;KAAE,CAAC,EAAE,CAAC;IAWnF,eAAe,CACnB,KAAK,EAAE,MAAM,GACZ,OAAO,CAAC,CAAC,WAAW,GAAG;QAAE,SAAS,EAAE,MAAM,CAAA;KAAE,CAAC,EAAE,CAAC;CAYpD"}
@@ -22,7 +22,7 @@ export class SqliteAdapter {
22
22
  return this.db;
23
23
  }
24
24
  // ── Lifecycle ───────────────────────────────────────────────────────────
25
- init() {
25
+ async init() {
26
26
  this.db.exec(`
27
27
  CREATE TABLE IF NOT EXISTS namespaces (
28
28
  id TEXT PRIMARY KEY,
@@ -62,65 +62,65 @@ export class SqliteAdapter {
62
62
  ON states(namespace, key);
63
63
  `);
64
64
  }
65
- close() {
65
+ async close() {
66
66
  this.db.close();
67
67
  }
68
68
  // ── Namespaces ──────────────────────────────────────────────────────────
69
- listNamespaces() {
69
+ async listNamespaces() {
70
70
  return this.db
71
71
  .prepare("SELECT id, name, created_at FROM namespaces")
72
72
  .all();
73
73
  }
74
- findNamespaceByApiKey(apiKeyHash) {
74
+ async findNamespaceByApiKey(apiKeyHash) {
75
75
  return (this.db
76
76
  .prepare("SELECT id FROM namespaces WHERE api_key = ?")
77
77
  .get(apiKeyHash) ?? null);
78
78
  }
79
- findNamespaceByName(name) {
79
+ async findNamespaceByName(name) {
80
80
  return (this.db
81
81
  .prepare("SELECT * FROM namespaces WHERE name = ?")
82
82
  .get(name) ?? null);
83
83
  }
84
- createNamespace(ns) {
84
+ async createNamespace(ns) {
85
85
  this.db
86
86
  .prepare("INSERT INTO namespaces (id, name, api_key, created_at) VALUES (?, ?, ?, ?)")
87
87
  .run(ns.id, ns.name, ns.api_key, ns.created_at);
88
88
  }
89
89
  // ── States ──────────────────────────────────────────────────────────────
90
- findState(namespace, key) {
90
+ async findState(namespace, key) {
91
91
  return (this.db
92
92
  .prepare("SELECT * FROM states WHERE namespace = ? AND key = ?")
93
93
  .get(namespace, key) ?? null);
94
94
  }
95
- findStateById(id) {
95
+ async findStateById(id) {
96
96
  return (this.db
97
97
  .prepare("SELECT * FROM states WHERE id = ?")
98
98
  .get(id) ?? null);
99
99
  }
100
- listStates(namespace) {
100
+ async listStates(namespace) {
101
101
  return this.db
102
102
  .prepare("SELECT id, key, snapshot, version, created_at, updated_at FROM states WHERE namespace = ?")
103
103
  .all(namespace);
104
104
  }
105
- createState(state) {
105
+ async createState(state) {
106
106
  this.db
107
107
  .prepare(`INSERT INTO states (id, namespace, key, initial, snapshot, version, created_at, updated_at)
108
108
  VALUES (?, ?, ?, ?, ?, ?, ?, ?)`)
109
109
  .run(state.id, state.namespace, state.key, state.initial, state.snapshot, state.version, state.created_at, state.updated_at);
110
110
  }
111
- updateSnapshot(stateId, snapshot, version, updatedAt) {
111
+ async updateSnapshot(stateId, snapshot, version, updatedAt) {
112
112
  this.db
113
113
  .prepare("UPDATE states SET snapshot = ?, version = ?, updated_at = ? WHERE id = ?")
114
114
  .run(snapshot, version, updatedAt, stateId);
115
115
  }
116
116
  // ── Event Log ───────────────────────────────────────────────────────────
117
- getMaxSeq(stateId) {
117
+ async getMaxSeq(stateId) {
118
118
  const row = this.db
119
119
  .prepare("SELECT MAX(seq) as max_seq FROM event_log WHERE state_id = ?")
120
120
  .get(stateId);
121
121
  return row.max_seq;
122
122
  }
123
- insertEvents(events) {
123
+ async insertEvents(events) {
124
124
  const insert = this.db.prepare(`INSERT INTO event_log (id, state_id, client_id, client_ts, server_ts, seq, mutation, meta, created_at)
125
125
  VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)`);
126
126
  const batch = this.db.transaction(() => {
@@ -130,12 +130,12 @@ export class SqliteAdapter {
130
130
  });
131
131
  batch();
132
132
  }
133
- getEventsForReplay(stateId) {
133
+ async getEventsForReplay(stateId) {
134
134
  return this.db
135
135
  .prepare("SELECT mutation, meta FROM event_log WHERE state_id = ? ORDER BY server_ts ASC, seq ASC")
136
136
  .all(stateId);
137
137
  }
138
- getEventHistory(stateId, limit, cursor) {
138
+ async getEventHistory(stateId, limit, cursor) {
139
139
  let events;
140
140
  if (cursor) {
141
141
  events = this.db
@@ -158,7 +158,7 @@ export class SqliteAdapter {
158
158
  return { events, hasMore };
159
159
  }
160
160
  // ── Studio ──────────────────────────────────────────────────────────────
161
- getStats() {
161
+ async getStats() {
162
162
  const ns = this.db
163
163
  .prepare("SELECT COUNT(*) as count FROM namespaces")
164
164
  .get();
@@ -170,7 +170,7 @@ export class SqliteAdapter {
170
170
  .get();
171
171
  return { namespaces: ns.count, states: st.count, events: ev.count };
172
172
  }
173
- listAllStatesWithNamespace() {
173
+ async listAllStatesWithNamespace() {
174
174
  return this.db
175
175
  .prepare(`SELECT s.id, s.namespace, s.key, s.snapshot, s.version, s.created_at, s.updated_at, n.name as namespace_name
176
176
  FROM states s
@@ -178,7 +178,7 @@ export class SqliteAdapter {
178
178
  ORDER BY s.updated_at DESC`)
179
179
  .all();
180
180
  }
181
- getRecentEvents(limit) {
181
+ async getRecentEvents(limit) {
182
182
  const rows = this.db
183
183
  .prepare(`SELECT e.id, e.state_id, e.client_id, e.client_ts, e.server_ts, e.mutation, e.meta, s.key as state_key
184
184
  FROM event_log e
@@ -1 +1 @@
1
- {"version":3,"file":"sqlite.js","sourceRoot":"","sources":["../../src/storage/sqlite.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"sqlite.js","sourceRoot":"","sources":["../../src/storage/sqlite.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@better-state/server",
3
- "version": "0.2.0",
3
+ "version": "0.3.0",
4
4
  "description": "Better-State server — shared state primitive for developers",
5
5
  "type": "module",
6
6
  "bin": {
@@ -46,6 +46,7 @@
46
46
  "@types/better-sqlite3": "^7.6.0",
47
47
  "@types/cors": "^2.8.0",
48
48
  "@types/express": "^5.0.0",
49
+ "@types/pg": "^8.16.0",
49
50
  "@types/uuid": "^10.0.0",
50
51
  "socket.io-client": "^4.8.3",
51
52
  "tsx": "^4.19.0",