@better-state/server 0.1.1 → 0.2.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
@@ -6,15 +6,15 @@ const dataDir = path.join(process.cwd(), ".better-state");
6
6
  mkdirSync(dataDir, { recursive: true });
7
7
  process.env.DATABASE_PATH = process.env.DATABASE_PATH || path.join(dataDir, "state.db");
8
8
  process.env.DEV_KEY_PATH = process.env.DEV_KEY_PATH || path.join(dataDir, ".dev-key");
9
- const { createDatabase, runMigrations } = await import("./db.js");
9
+ const { SqliteAdapter } = await import("./storage/index.js");
10
10
  const PORT = parseInt(process.env.PORT || "3001", 10);
11
11
  function autoSeed() {
12
- const db = createDatabase();
13
- runMigrations(db);
12
+ const store = new SqliteAdapter({ dbPath: process.env.DATABASE_PATH });
13
+ store.init();
14
14
  const devKeyPath = process.env.DEV_KEY_PATH;
15
- const existing = db.prepare("SELECT id FROM namespaces WHERE name = ?").get("default");
15
+ const existing = store.findNamespaceByName("default");
16
16
  if (existing) {
17
- db.close();
17
+ store.close();
18
18
  if (existsSync(devKeyPath)) {
19
19
  return readFileSync(devKeyPath, "utf-8").trim();
20
20
  }
@@ -24,9 +24,9 @@ function autoSeed() {
24
24
  const hashedKey = createHash("sha256").update(rawKey).digest("hex");
25
25
  const id = randomUUID();
26
26
  const now = Date.now();
27
- db.prepare("INSERT INTO namespaces (id, name, api_key, created_at) VALUES (?, ?, ?, ?)").run(id, "default", hashedKey, now);
27
+ store.createNamespace({ id, name: "default", api_key: hashedKey, created_at: now });
28
28
  writeFileSync(devKeyPath, rawKey, "utf-8");
29
- db.close();
29
+ store.close();
30
30
  return rawKey;
31
31
  }
32
32
  const apiKey = autoSeed();
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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"}
package/dist/index.d.ts CHANGED
@@ -1,6 +1,8 @@
1
1
  import express from "express";
2
2
  import { Server } from "socket.io";
3
+ import type { StorageAdapter } from "./storage/index.js";
4
+ declare const store: StorageAdapter;
3
5
  declare const app: ReturnType<typeof express>;
4
6
  declare const io: Server<import("socket.io").DefaultEventsMap, import("socket.io").DefaultEventsMap, import("socket.io").DefaultEventsMap, any>;
5
- export { app, io };
7
+ export { app, io, store };
6
8
  //# sourceMappingURL=index.d.ts.map
@@ -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;AAYnC,QAAA,MAAM,GAAG,EAAE,UAAU,CAAC,OAAO,OAAO,CAAa,CAAC;AAKlD,QAAA,MAAM,EAAE,+HAEN,CAAC;AAuVH,OAAO,EAAE,GAAG,EAAE,EAAE,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;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"}
package/dist/index.js CHANGED
@@ -1,18 +1,18 @@
1
1
  import express from "express";
2
2
  import cors from "cors";
3
3
  import { createServer } from "node:http";
4
- import { readFileSync } from "node:fs";
4
+ import { readFileSync, existsSync } from "node:fs";
5
5
  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 { createDatabase, runMigrations } from "./db.js";
9
+ import { SqliteAdapter } 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 db = createDatabase();
15
- runMigrations(db);
14
+ const store = new SqliteAdapter();
15
+ store.init();
16
16
  const app = express();
17
17
  app.use(cors({ origin: CORS_ORIGIN }));
18
18
  app.use(express.json());
@@ -25,8 +25,7 @@ app.get("/api/v1/health", (_req, res) => {
25
25
  res.json({ status: "ok", uptime: process.uptime() });
26
26
  });
27
27
  app.get("/api/v1/namespaces", (_req, res) => {
28
- const rows = db.prepare("SELECT id, name, created_at FROM namespaces").all();
29
- res.json(rows);
28
+ res.json(store.listNamespaces());
30
29
  });
31
30
  app.post("/api/v1/namespaces", (req, res) => {
32
31
  const { name } = req.body;
@@ -38,7 +37,7 @@ app.post("/api/v1/namespaces", (req, res) => {
38
37
  const hashedKey = createHash("sha256").update(rawKey).digest("hex");
39
38
  const id = randomUUID();
40
39
  const now = Date.now();
41
- db.prepare("INSERT INTO namespaces (id, name, api_key, created_at) VALUES (?, ?, ?, ?)").run(id, name, hashedKey, now);
40
+ store.createNamespace({ id, name, api_key: hashedKey, created_at: now });
42
41
  res.status(201).json({ id, name, apiKey: rawKey, created_at: now });
43
42
  });
44
43
  app.get("/api/v1/states", (req, res) => {
@@ -47,10 +46,7 @@ app.get("/api/v1/states", (req, res) => {
47
46
  res.status(400).json({ error: "namespace query param is required" });
48
47
  return;
49
48
  }
50
- const rows = db
51
- .prepare("SELECT id, key, snapshot, version, created_at, updated_at FROM states WHERE namespace = ?")
52
- .all(namespace);
53
- res.json(rows);
49
+ res.json(store.listStates(namespace));
54
50
  });
55
51
  app.get("/api/v1/states/:key/history", (req, res) => {
56
52
  const namespace = req.query.namespace;
@@ -58,16 +54,14 @@ app.get("/api/v1/states/:key/history", (req, res) => {
58
54
  res.status(400).json({ error: "namespace query param is required" });
59
55
  return;
60
56
  }
61
- const stateRow = db
62
- .prepare("SELECT * FROM states WHERE namespace = ? AND key = ?")
63
- .get(namespace, req.params.key);
57
+ const stateRow = store.findState(namespace, req.params.key);
64
58
  if (!stateRow) {
65
59
  res.status(404).json({ error: "state not found" });
66
60
  return;
67
61
  }
68
62
  const limit = parseInt(req.query.limit, 10) || 50;
69
63
  const cursor = req.query.cursor;
70
- const { events, hasMore } = getHistory(db, stateRow.id, limit, cursor);
64
+ const { events, hasMore } = getHistory(store, stateRow.id, limit, cursor);
71
65
  res.json({
72
66
  key: stateRow.key,
73
67
  version: stateRow.version,
@@ -77,7 +71,6 @@ app.get("/api/v1/states/:key/history", (req, res) => {
77
71
  });
78
72
  });
79
73
  // ─── Playground & SDK Serving ─────────────────────────────────────────────────
80
- import { existsSync } from "node:fs";
81
74
  const CLIENT_BUNDLE = path.resolve(__dirname, "../../client/dist/browser.mjs");
82
75
  const CLIENT_SOURCEMAP = path.resolve(__dirname, "../../client/dist/browser.mjs.map");
83
76
  const PLAYGROUND_HTML = path.resolve(__dirname, "../public/playground.html");
@@ -100,7 +93,7 @@ app.get("/sdk/browser.mjs.map", (_req, res) => {
100
93
  }
101
94
  });
102
95
  app.get("/playground", (_req, res) => {
103
- const ns = db.prepare("SELECT api_key FROM namespaces WHERE name = ?").get("default");
96
+ const ns = store.findNamespaceByName("default");
104
97
  if (!ns) {
105
98
  res.status(500).send("No default namespace. Run the server via CLI to auto-seed.");
106
99
  return;
@@ -147,14 +140,12 @@ window.reset=()=>counter.set(0);
147
140
  </script></body></html>`;
148
141
  }
149
142
  // ─── WebSocket (Real-time Sync) ──────────────────────────────────────────────
150
- const namespaceCache = new Map(); // apiKey hash → namespace id
143
+ const namespaceCache = new Map();
151
144
  function authenticateApiKey(rawKey) {
152
145
  const hash = createHash("sha256").update(rawKey).digest("hex");
153
146
  if (namespaceCache.has(hash))
154
147
  return namespaceCache.get(hash);
155
- const row = db
156
- .prepare("SELECT id FROM namespaces WHERE api_key = ?")
157
- .get(hash);
148
+ const row = store.findNamespaceByApiKey(hash);
158
149
  if (!row)
159
150
  return null;
160
151
  namespaceCache.set(hash, row.id);
@@ -189,7 +180,7 @@ io.on("connection", (socket) => {
189
180
  const initialValue = typeof entry === "object" && entry !== null ? entry.initialValue : null;
190
181
  const room = `${authedNamespace}:${key}`;
191
182
  socket.join(room);
192
- const state = ensureState(db, authedNamespace, key, initialValue);
183
+ const state = ensureState(store, authedNamespace, key, initialValue);
193
184
  socket.emit("state:init", {
194
185
  key,
195
186
  value: JSON.parse(state.snapshot),
@@ -219,7 +210,7 @@ io.on("connection", (socket) => {
219
210
  }
220
211
  try {
221
212
  console.log(`[ws] mutate: key=${payload.key} client=${clientId} count=${payload.mutations.length}`);
222
- const { value, version, mutationIds } = processMutations(db, authedNamespace, payload.key, clientId, payload.mutations);
213
+ const { value, version, mutationIds } = processMutations(store, authedNamespace, payload.key, clientId, payload.mutations);
223
214
  socket.emit("mutate:ack", { mutationIds });
224
215
  const room = `${authedNamespace}:${payload.key}`;
225
216
  const studioRoom = `studio:${authedNamespace}`;
@@ -246,37 +237,20 @@ io.on("connection", (socket) => {
246
237
  });
247
238
  // ─── Studio API ──────────────────────────────────────────────────────────────
248
239
  app.get("/api/v1/studio/stats", (_req, res) => {
249
- const namespaces = db.prepare("SELECT COUNT(*) as count FROM namespaces").get();
250
- const states = db.prepare("SELECT COUNT(*) as count FROM states").get();
251
- const events = db.prepare("SELECT COUNT(*) as count FROM event_log").get();
240
+ const stats = store.getStats();
252
241
  const connectedSockets = io.sockets.sockets.size;
253
242
  res.json({
254
- namespaces: namespaces.count,
255
- states: states.count,
256
- events: events.count,
243
+ ...stats,
257
244
  connections: connectedSockets,
258
245
  uptime: process.uptime(),
259
246
  });
260
247
  });
261
248
  app.get("/api/v1/studio/states", (_req, res) => {
262
- const rows = db.prepare(`
263
- SELECT s.id, s.namespace, s.key, s.snapshot, s.version, s.created_at, s.updated_at, n.name as namespace_name
264
- FROM states s
265
- JOIN namespaces n ON s.namespace = n.id
266
- ORDER BY s.updated_at DESC
267
- `).all();
268
- res.json(rows);
249
+ res.json(store.listAllStatesWithNamespace());
269
250
  });
270
251
  app.get("/api/v1/studio/events/recent", (req, res) => {
271
252
  const limit = parseInt(req.query.limit, 10) || 30;
272
- const rows = db.prepare(`
273
- SELECT e.id, e.state_id, e.client_id, e.client_ts, e.server_ts, e.mutation, e.meta, s.key as state_key
274
- FROM event_log e
275
- JOIN states s ON e.state_id = s.id
276
- ORDER BY e.server_ts DESC, e.seq DESC
277
- LIMIT ?
278
- `).all(limit);
279
- res.json(rows.reverse());
253
+ res.json(store.getRecentEvents(limit));
280
254
  });
281
255
  const STUDIO_HTML = path.resolve(__dirname, "../public/studio.html");
282
256
  app.get("/studio", (_req, res) => {
@@ -298,5 +272,5 @@ app.get("/studio", (_req, res) => {
298
272
  httpServer.listen(PORT, () => {
299
273
  console.log(`[better-state] server running on http://localhost:${PORT}`);
300
274
  });
301
- export { app, io };
275
+ export { app, io, store };
302
276
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,OAAO,MAAM,SAAS,CAAC;AAC9B,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AACzC,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAAE,WAAW,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAClE,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAE,MAAM,EAAE,MAAM,WAAW,CAAC;AACnC,OAAO,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AACxD,OAAO,EAAE,WAAW,EAAE,gBAAgB,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAG9E,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;AAC/D,MAAM,IAAI,GAAG,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,IAAI,MAAM,EAAE,EAAE,CAAC,CAAC;AACtD,MAAM,WAAW,GAAG,OAAO,CAAC,GAAG,CAAC,WAAW,IAAI,GAAG,CAAC;AAEnD,MAAM,EAAE,GAAG,cAAc,EAAE,CAAC;AAC5B,aAAa,CAAC,EAAE,CAAC,CAAC;AAElB,MAAM,GAAG,GAA+B,OAAO,EAAE,CAAC;AAClD,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,WAAW,EAAE,CAAC,CAAC,CAAC;AACvC,GAAG,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC;AAExB,MAAM,UAAU,GAAG,YAAY,CAAC,GAAG,CAAC,CAAC;AACrC,MAAM,EAAE,GAAG,IAAI,MAAM,CAAC,UAAU,EAAE;IAChC,IAAI,EAAE,EAAE,MAAM,EAAE,WAAW,EAAE,OAAO,EAAE,CAAC,KAAK,EAAE,MAAM,CAAC,EAAE;CACxD,CAAC,CAAC;AAEH,gFAAgF;AAEhF,GAAG,CAAC,GAAG,CAAC,gBAAgB,EAAE,CAAC,IAAI,EAAE,GAAG,EAAE,EAAE;IACtC,GAAG,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;AACvD,CAAC,CAAC,CAAC;AAEH,GAAG,CAAC,GAAG,CAAC,oBAAoB,EAAE,CAAC,IAAI,EAAE,GAAG,EAAE,EAAE;IAC1C,MAAM,IAAI,GAAG,EAAE,CAAC,OAAO,CAAC,6CAA6C,CAAC,CAAC,GAAG,EAAE,CAAC;IAC7E,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACjB,CAAC,CAAC,CAAC;AAEH,GAAG,CAAC,IAAI,CAAC,oBAAoB,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE;IAC1C,MAAM,EAAE,IAAI,EAAE,GAAG,GAAG,CAAC,IAAI,CAAC;IAC1B,IAAI,CAAC,IAAI,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE,CAAC;QACtC,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,kBAAkB,EAAE,CAAC,CAAC;QACpD,OAAO;IACT,CAAC;IAED,MAAM,MAAM,GAAG,WAAW,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;IAC/C,MAAM,SAAS,GAAG,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IACpE,MAAM,EAAE,GAAG,UAAU,EAAE,CAAC;IACxB,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IAEvB,EAAE,CAAC,OAAO,CACR,4EAA4E,CAC7E,CAAC,GAAG,CAAC,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,GAAG,CAAC,CAAC;IAEhC,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,GAAG,EAAE,CAAC,CAAC;AACtE,CAAC,CAAC,CAAC;AAEH,GAAG,CAAC,GAAG,CAAC,gBAAgB,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE;IACrC,MAAM,SAAS,GAAG,GAAG,CAAC,KAAK,CAAC,SAAmB,CAAC;IAChD,IAAI,CAAC,SAAS,EAAE,CAAC;QACf,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,mCAAmC,EAAE,CAAC,CAAC;QACrE,OAAO;IACT,CAAC;IACD,MAAM,IAAI,GAAG,EAAE;SACZ,OAAO,CACN,2FAA2F,CAC5F;SACA,GAAG,CAAC,SAAS,CAAC,CAAC;IAClB,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACjB,CAAC,CAAC,CAAC;AAEH,GAAG,CAAC,GAAG,CAAC,6BAA6B,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE;IAClD,MAAM,SAAS,GAAG,GAAG,CAAC,KAAK,CAAC,SAAmB,CAAC;IAChD,IAAI,CAAC,SAAS,EAAE,CAAC;QACf,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,mCAAmC,EAAE,CAAC,CAAC;QACrE,OAAO;IACT,CAAC;IAED,MAAM,QAAQ,GAAG,EAAE;SAChB,OAAO,CAAC,sDAAsD,CAAC;SAC/D,GAAG,CAAC,SAAS,EAAE,GAAG,CAAC,MAAM,CAAC,GAAG,CAA4B,CAAC;IAE7D,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,iBAAiB,EAAE,CAAC,CAAC;QACnD,OAAO;IACT,CAAC;IAED,MAAM,KAAK,GAAG,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,KAAe,EAAE,EAAE,CAAC,IAAI,EAAE,CAAC;IAC5D,MAAM,MAAM,GAAG,GAAG,CAAC,KAAK,CAAC,MAA4B,CAAC;IACtD,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,UAAU,CAAC,EAAE,EAAE,QAAQ,CAAC,EAAE,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC;IAEvE,GAAG,CAAC,IAAI,CAAC;QACP,GAAG,EAAE,QAAQ,CAAC,GAAG;QACjB,OAAO,EAAE,QAAQ,CAAC,OAAO;QACzB,MAAM;QACN,MAAM,EAAE,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI;QAC/D,OAAO;KACR,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,iFAAiF;AAEjF,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAErC,MAAM,aAAa,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,+BAA+B,CAAC,CAAC;AAC/E,MAAM,gBAAgB,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,mCAAmC,CAAC,CAAC;AACtF,MAAM,eAAe,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,2BAA2B,CAAC,CAAC;AAE7E,GAAG,CAAC,GAAG,CAAC,kBAAkB,EAAE,CAAC,IAAI,EAAE,GAAG,EAAE,EAAE;IACxC,IAAI,UAAU,CAAC,aAAa,CAAC,EAAE,CAAC;QAC9B,GAAG,CAAC,SAAS,CAAC,cAAc,EAAE,wBAAwB,CAAC,CAAC;QACxD,GAAG,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC;IAC9B,CAAC;SAAM,CAAC;QACN,GAAG,CAAC,QAAQ,CAAC,yDAAyD,CAAC,CAAC;IAC1E,CAAC;AACH,CAAC,CAAC,CAAC;AAEH,GAAG,CAAC,GAAG,CAAC,sBAAsB,EAAE,CAAC,IAAI,EAAE,GAAG,EAAE,EAAE;IAC5C,IAAI,UAAU,CAAC,gBAAgB,CAAC,EAAE,CAAC;QACjC,GAAG,CAAC,SAAS,CAAC,cAAc,EAAE,kBAAkB,CAAC,CAAC;QAClD,GAAG,CAAC,QAAQ,CAAC,gBAAgB,CAAC,CAAC;IACjC,CAAC;SAAM,CAAC;QACN,GAAG,CAAC,QAAQ,CAAC,6DAA6D,CAAC,CAAC;IAC9E,CAAC;AACH,CAAC,CAAC,CAAC;AAEH,GAAG,CAAC,GAAG,CAAC,aAAa,EAAE,CAAC,IAAI,EAAE,GAAG,EAAE,EAAE;IACnC,MAAM,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,+CAA+C,CAAC,CAAC,GAAG,CAAC,SAAS,CAAoC,CAAC;IACzH,IAAI,CAAC,EAAE,EAAE,CAAC;QACR,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,4DAA4D,CAAC,CAAC;QACnF,OAAO;IACT,CAAC;IAED,MAAM,UAAU,GAAG,OAAO,CAAC,GAAG,CAAC,YAAY,IAAI,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,kBAAkB,CAAC,CAAC;IAC3F,IAAI,MAAc,CAAC;IACnB,IAAI,CAAC;QACH,MAAM,GAAG,YAAY,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC,IAAI,EAAE,CAAC;IACpD,CAAC;IAAC,MAAM,CAAC;QACP,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAClB,mFAAmF,CACpF,CAAC;QACF,OAAO;IACT,CAAC;IAED,IAAI,CAAC,UAAU,CAAC,eAAe,CAAC,EAAE,CAAC;QACjC,MAAM,MAAM,GAAG,mBAAmB,CAAC,MAAM,CAAC,CAAC;QAC3C,GAAG,CAAC,SAAS,CAAC,cAAc,EAAE,WAAW,CAAC,CAAC;QAC3C,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACjB,OAAO;IACT,CAAC;IAED,MAAM,IAAI,GAAG,YAAY,CAAC,eAAe,EAAE,OAAO,CAAC,CAAC,OAAO,CAAC,aAAa,EAAE,MAAM,CAAC,CAAC;IACnF,GAAG,CAAC,SAAS,CAAC,cAAc,EAAE,WAAW,CAAC,CAAC;IAC3C,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACjB,CAAC,CAAC,CAAC;AAEH,SAAS,mBAAmB,CAAC,MAAc;IACzC,OAAO;;;;;;;;;;;;iDAYwC,MAAM;;;;;;;wBAO/B,CAAC;AACzB,CAAC;AAED,gFAAgF;AAEhF,MAAM,cAAc,GAAG,IAAI,GAAG,EAAkB,CAAC,CAAC,6BAA6B;AAE/E,SAAS,kBAAkB,CAAC,MAAc;IACxC,MAAM,IAAI,GAAG,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IAE/D,IAAI,cAAc,CAAC,GAAG,CAAC,IAAI,CAAC;QAAE,OAAO,cAAc,CAAC,GAAG,CAAC,IAAI,CAAE,CAAC;IAE/D,MAAM,GAAG,GAAG,EAAE;SACX,OAAO,CAAC,6CAA6C,CAAC;SACtD,GAAG,CAAC,IAAI,CAA+B,CAAC;IAE3C,IAAI,CAAC,GAAG;QAAE,OAAO,IAAI,CAAC;IAEtB,cAAc,CAAC,GAAG,CAAC,IAAI,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC;IACjC,OAAO,GAAG,CAAC,EAAE,CAAC;AAChB,CAAC;AAED,EAAE,CAAC,EAAE,CAAC,YAAY,EAAE,CAAC,MAAM,EAAE,EAAE;IAC7B,IAAI,eAAe,GAAkB,IAAI,CAAC;IAC1C,IAAI,QAAQ,GAAkB,IAAI,CAAC;IAEnC,OAAO,CAAC,GAAG,CAAC,wBAAwB,MAAM,CAAC,EAAE,EAAE,CAAC,CAAC;IAEjD,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,OAA6C,EAAE,GAAG,EAAE,EAAE;QACvE,MAAM,IAAI,GAAG,kBAAkB,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;QAChD,IAAI,CAAC,IAAI,EAAE,CAAC;YACV,MAAM,CAAC,IAAI,CAAC,YAAY,EAAE,EAAE,OAAO,EAAE,iBAAiB,EAAE,CAAC,CAAC;YAC1D,IAAI,OAAO,GAAG,KAAK,UAAU;gBAAE,GAAG,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC;YAClD,OAAO;QACT,CAAC;QAED,eAAe,GAAG,IAAI,CAAC;QACvB,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC;QAC5B,OAAO,CAAC,GAAG,CAAC,wBAAwB,MAAM,CAAC,EAAE,WAAW,QAAQ,EAAE,CAAC,CAAC;QACpE,MAAM,CAAC,IAAI,CAAC,SAAS,EAAE,EAAE,SAAS,EAAE,MAAM,CAAC,EAAE,EAAE,CAAC,CAAC;QACjD,IAAI,OAAO,GAAG,KAAK,UAAU;YAAE,GAAG,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC;IACnD,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,WAAW,EAAE,CAAC,OAAuE,EAAE,EAAE;QACjG,IAAI,CAAC,eAAe,EAAE,CAAC;YACrB,MAAM,CAAC,IAAI,CAAC,YAAY,EAAE,EAAE,OAAO,EAAE,mBAAmB,EAAE,CAAC,CAAC;YAC5D,OAAO;QACT,CAAC;QAED,KAAK,MAAM,KAAK,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;YACjC,MAAM,GAAG,GAAG,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC;YAC1D,MAAM,YAAY,GAAG,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC,CAAC,IAAI,CAAC;YAC7F,MAAM,IAAI,GAAG,GAAG,eAAe,IAAI,GAAG,EAAE,CAAC;YACzC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAElB,MAAM,KAAK,GAAG,WAAW,CAAC,EAAE,EAAE,eAAe,EAAE,GAAG,EAAE,YAAY,CAAC,CAAC;YAClE,MAAM,CAAC,IAAI,CAAC,YAAY,EAAE;gBACxB,GAAG;gBACH,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,QAAQ,CAAC;gBACjC,OAAO,EAAE,KAAK,CAAC,OAAO;aACvB,CAAC,CAAC;QACL,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,kBAAkB,EAAE,GAAG,EAAE;QACjC,IAAI,CAAC,eAAe,EAAE,CAAC;YACrB,MAAM,CAAC,IAAI,CAAC,YAAY,EAAE,EAAE,OAAO,EAAE,mBAAmB,EAAE,CAAC,CAAC;YAC5D,OAAO;QACT,CAAC;QACD,MAAM,CAAC,IAAI,CAAC,UAAU,eAAe,EAAE,CAAC,CAAC;QACzC,OAAO,CAAC,GAAG,CAAC,kCAAkC,MAAM,CAAC,EAAE,cAAc,eAAe,EAAE,CAAC,CAAC;IAC1F,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,aAAa,EAAE,CAAC,OAA2B,EAAE,EAAE;QACvD,IAAI,CAAC,eAAe;YAAE,OAAO;QAC7B,KAAK,MAAM,GAAG,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;YAC/B,MAAM,CAAC,KAAK,CAAC,GAAG,eAAe,IAAI,GAAG,EAAE,CAAC,CAAC;QAC5C,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CACP,QAAQ,EACR,CAAC,OAAoG,EAAE,EAAE;QACvG,IAAI,CAAC,eAAe,IAAI,CAAC,QAAQ,EAAE,CAAC;YAClC,MAAM,CAAC,IAAI,CAAC,YAAY,EAAE,EAAE,OAAO,EAAE,mBAAmB,EAAE,CAAC,CAAC;YAC5D,OAAO;QACT,CAAC;QAED,IAAI,CAAC;YACH,OAAO,CAAC,GAAG,CAAC,oBAAoB,OAAO,CAAC,GAAG,WAAW,QAAQ,UAAU,OAAO,CAAC,SAAS,CAAC,MAAM,EAAE,CAAC,CAAC;YAEpG,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,WAAW,EAAE,GAAG,gBAAgB,CACtD,EAAE,EACF,eAAe,EACf,OAAO,CAAC,GAAG,EACX,QAAQ,EACR,OAAO,CAAC,SAAS,CAClB,CAAC;YAEF,MAAM,CAAC,IAAI,CAAC,YAAY,EAAE,EAAE,WAAW,EAAE,CAAC,CAAC;YAE3C,MAAM,IAAI,GAAG,GAAG,eAAe,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC;YACjD,MAAM,UAAU,GAAG,UAAU,eAAe,EAAE,CAAC;YAC/C,MAAM,aAAa,GAAG,EAAE,GAAG,EAAE,OAAO,CAAC,GAAG,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC;YAE3D,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,cAAc,EAAE,aAAa,CAAC,CAAC;YAChD,EAAE,CAAC,EAAE,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,iBAAiB,EAAE;gBACxC,GAAG,aAAa;gBAChB,QAAQ;gBACR,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;aACtB,CAAC,CAAC;YAEH,OAAO,CAAC,GAAG,CAAC,uBAAuB,OAAO,CAAC,GAAG,YAAY,OAAO,EAAE,CAAC,CAAC;QACvE,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,MAAM,CAAC,IAAI,CAAC,cAAc,EAAE;gBAC1B,OAAO,EAAG,GAAa,CAAC,OAAO;aAChC,CAAC,CAAC;QACL,CAAC;IACH,CAAC,CACF,CAAC;IAEF,MAAM,CAAC,EAAE,CAAC,YAAY,EAAE,CAAC,MAAM,EAAE,EAAE;QACjC,OAAO,CAAC,GAAG,CAAC,2BAA2B,MAAM,CAAC,EAAE,WAAW,QAAQ,WAAW,MAAM,EAAE,CAAC,CAAC;QACxF,eAAe,GAAG,IAAI,CAAC;QACvB,QAAQ,GAAG,IAAI,CAAC;IAClB,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,gFAAgF;AAEhF,GAAG,CAAC,GAAG,CAAC,sBAAsB,EAAE,CAAC,IAAI,EAAE,GAAG,EAAE,EAAE;IAC5C,MAAM,UAAU,GAAG,EAAE,CAAC,OAAO,CAAC,0CAA0C,CAAC,CAAC,GAAG,EAAuB,CAAC;IACrG,MAAM,MAAM,GAAG,EAAE,CAAC,OAAO,CAAC,sCAAsC,CAAC,CAAC,GAAG,EAAuB,CAAC;IAC7F,MAAM,MAAM,GAAG,EAAE,CAAC,OAAO,CAAC,yCAAyC,CAAC,CAAC,GAAG,EAAuB,CAAC;IAChG,MAAM,gBAAgB,GAAG,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC;IAEjD,GAAG,CAAC,IAAI,CAAC;QACP,UAAU,EAAE,UAAU,CAAC,KAAK;QAC5B,MAAM,EAAE,MAAM,CAAC,KAAK;QACpB,MAAM,EAAE,MAAM,CAAC,KAAK;QACpB,WAAW,EAAE,gBAAgB;QAC7B,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE;KACzB,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,GAAG,CAAC,GAAG,CAAC,uBAAuB,EAAE,CAAC,IAAI,EAAE,GAAG,EAAE,EAAE;IAC7C,MAAM,IAAI,GAAG,EAAE,CAAC,OAAO,CAAC;;;;;GAKvB,CAAC,CAAC,GAAG,EAAE,CAAC;IACT,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACjB,CAAC,CAAC,CAAC;AAEH,GAAG,CAAC,GAAG,CAAC,8BAA8B,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE;IACnD,MAAM,KAAK,GAAG,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,KAAe,EAAE,EAAE,CAAC,IAAI,EAAE,CAAC;IAC5D,MAAM,IAAI,GAAG,EAAE,CAAC,OAAO,CAAC;;;;;;GAMvB,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;IACd,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC;AAC3B,CAAC,CAAC,CAAC;AAEH,MAAM,WAAW,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,uBAAuB,CAAC,CAAC;AAErE,GAAG,CAAC,GAAG,CAAC,SAAS,EAAE,CAAC,IAAI,EAAE,GAAG,EAAE,EAAE;IAC/B,MAAM,UAAU,GAAG,OAAO,CAAC,GAAG,CAAC,YAAY,IAAI,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,kBAAkB,CAAC,CAAC;IAC3F,IAAI,MAAM,GAAG,EAAE,CAAC;IAChB,IAAI,CAAC;QACH,MAAM,GAAG,YAAY,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC,IAAI,EAAE,CAAC;IACpD,CAAC;IAAC,MAAM,CAAC,CAAC,gBAAgB,CAAC,CAAC;IAE5B,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,EAAE,CAAC;QAC7B,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,sBAAsB,CAAC,CAAC;QAC7C,OAAO;IACT,CAAC;IAED,MAAM,IAAI,GAAG,YAAY,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC,OAAO,CAAC,aAAa,EAAE,MAAM,CAAC,CAAC;IAC/E,GAAG,CAAC,SAAS,CAAC,cAAc,EAAE,WAAW,CAAC,CAAC;IAC3C,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACjB,CAAC,CAAC,CAAC;AAEH,gFAAgF;AAEhF,UAAU,CAAC,MAAM,CAAC,IAAI,EAAE,GAAG,EAAE;IAC3B,OAAO,CAAC,GAAG,CAAC,qDAAqD,IAAI,EAAE,CAAC,CAAC;AAC3E,CAAC,CAAC,CAAC;AAEH,OAAO,EAAE,GAAG,EAAE,EAAE,EAAE,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,OAAO,MAAM,SAAS,CAAC;AAC9B,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AACzC,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACnD,OAAO,EAAE,WAAW,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAClE,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAE,MAAM,EAAE,MAAM,WAAW,CAAC;AACnC,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAEnD,OAAO,EAAE,WAAW,EAAE,gBAAgB,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAG9E,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;AAC/D,MAAM,IAAI,GAAG,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,IAAI,MAAM,EAAE,EAAE,CAAC,CAAC;AACtD,MAAM,WAAW,GAAG,OAAO,CAAC,GAAG,CAAC,WAAW,IAAI,GAAG,CAAC;AAEnD,MAAM,KAAK,GAAmB,IAAI,aAAa,EAAE,CAAC;AAClD,KAAK,CAAC,IAAI,EAAE,CAAC;AAEb,MAAM,GAAG,GAA+B,OAAO,EAAE,CAAC;AAClD,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,WAAW,EAAE,CAAC,CAAC,CAAC;AACvC,GAAG,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC;AAExB,MAAM,UAAU,GAAG,YAAY,CAAC,GAAG,CAAC,CAAC;AACrC,MAAM,EAAE,GAAG,IAAI,MAAM,CAAC,UAAU,EAAE;IAChC,IAAI,EAAE,EAAE,MAAM,EAAE,WAAW,EAAE,OAAO,EAAE,CAAC,KAAK,EAAE,MAAM,CAAC,EAAE;CACxD,CAAC,CAAC;AAEH,gFAAgF;AAEhF,GAAG,CAAC,GAAG,CAAC,gBAAgB,EAAE,CAAC,IAAI,EAAE,GAAG,EAAE,EAAE;IACtC,GAAG,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;AACvD,CAAC,CAAC,CAAC;AAEH,GAAG,CAAC,GAAG,CAAC,oBAAoB,EAAE,CAAC,IAAI,EAAE,GAAG,EAAE,EAAE;IAC1C,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,cAAc,EAAE,CAAC,CAAC;AACnC,CAAC,CAAC,CAAC;AAEH,GAAG,CAAC,IAAI,CAAC,oBAAoB,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE;IAC1C,MAAM,EAAE,IAAI,EAAE,GAAG,GAAG,CAAC,IAAI,CAAC;IAC1B,IAAI,CAAC,IAAI,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE,CAAC;QACtC,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,kBAAkB,EAAE,CAAC,CAAC;QACpD,OAAO;IACT,CAAC;IAED,MAAM,MAAM,GAAG,WAAW,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;IAC/C,MAAM,SAAS,GAAG,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IACpE,MAAM,EAAE,GAAG,UAAU,EAAE,CAAC;IACxB,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IAEvB,KAAK,CAAC,eAAe,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,GAAG,EAAE,CAAC,CAAC;IAEzE,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,GAAG,EAAE,CAAC,CAAC;AACtE,CAAC,CAAC,CAAC;AAEH,GAAG,CAAC,GAAG,CAAC,gBAAgB,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE;IACrC,MAAM,SAAS,GAAG,GAAG,CAAC,KAAK,CAAC,SAAmB,CAAC;IAChD,IAAI,CAAC,SAAS,EAAE,CAAC;QACf,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,mCAAmC,EAAE,CAAC,CAAC;QACrE,OAAO;IACT,CAAC;IACD,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC,CAAC;AACxC,CAAC,CAAC,CAAC;AAEH,GAAG,CAAC,GAAG,CAAC,6BAA6B,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE;IAClD,MAAM,SAAS,GAAG,GAAG,CAAC,KAAK,CAAC,SAAmB,CAAC;IAChD,IAAI,CAAC,SAAS,EAAE,CAAC;QACf,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,mCAAmC,EAAE,CAAC,CAAC;QACrE,OAAO;IACT,CAAC;IAED,MAAM,QAAQ,GAAG,KAAK,CAAC,SAAS,CAAC,SAAS,EAAE,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;IAE5D,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,iBAAiB,EAAE,CAAC,CAAC;QACnD,OAAO;IACT,CAAC;IAED,MAAM,KAAK,GAAG,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,KAAe,EAAE,EAAE,CAAC,IAAI,EAAE,CAAC;IAC5D,MAAM,MAAM,GAAG,GAAG,CAAC,KAAK,CAAC,MAA4B,CAAC;IACtD,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,UAAU,CAAC,KAAK,EAAE,QAAQ,CAAC,EAAE,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC;IAE1E,GAAG,CAAC,IAAI,CAAC;QACP,GAAG,EAAE,QAAQ,CAAC,GAAG;QACjB,OAAO,EAAE,QAAQ,CAAC,OAAO;QACzB,MAAM;QACN,MAAM,EAAE,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI;QAC/D,OAAO;KACR,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,iFAAiF;AAEjF,MAAM,aAAa,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,+BAA+B,CAAC,CAAC;AAC/E,MAAM,gBAAgB,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,mCAAmC,CAAC,CAAC;AACtF,MAAM,eAAe,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,2BAA2B,CAAC,CAAC;AAE7E,GAAG,CAAC,GAAG,CAAC,kBAAkB,EAAE,CAAC,IAAI,EAAE,GAAG,EAAE,EAAE;IACxC,IAAI,UAAU,CAAC,aAAa,CAAC,EAAE,CAAC;QAC9B,GAAG,CAAC,SAAS,CAAC,cAAc,EAAE,wBAAwB,CAAC,CAAC;QACxD,GAAG,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC;IAC9B,CAAC;SAAM,CAAC;QACN,GAAG,CAAC,QAAQ,CAAC,yDAAyD,CAAC,CAAC;IAC1E,CAAC;AACH,CAAC,CAAC,CAAC;AAEH,GAAG,CAAC,GAAG,CAAC,sBAAsB,EAAE,CAAC,IAAI,EAAE,GAAG,EAAE,EAAE;IAC5C,IAAI,UAAU,CAAC,gBAAgB,CAAC,EAAE,CAAC;QACjC,GAAG,CAAC,SAAS,CAAC,cAAc,EAAE,kBAAkB,CAAC,CAAC;QAClD,GAAG,CAAC,QAAQ,CAAC,gBAAgB,CAAC,CAAC;IACjC,CAAC;SAAM,CAAC;QACN,GAAG,CAAC,QAAQ,CAAC,6DAA6D,CAAC,CAAC;IAC9E,CAAC;AACH,CAAC,CAAC,CAAC;AAEH,GAAG,CAAC,GAAG,CAAC,aAAa,EAAE,CAAC,IAAI,EAAE,GAAG,EAAE,EAAE;IACnC,MAAM,EAAE,GAAG,KAAK,CAAC,mBAAmB,CAAC,SAAS,CAAC,CAAC;IAChD,IAAI,CAAC,EAAE,EAAE,CAAC;QACR,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,4DAA4D,CAAC,CAAC;QACnF,OAAO;IACT,CAAC;IAED,MAAM,UAAU,GAAG,OAAO,CAAC,GAAG,CAAC,YAAY,IAAI,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,kBAAkB,CAAC,CAAC;IAC3F,IAAI,MAAc,CAAC;IACnB,IAAI,CAAC;QACH,MAAM,GAAG,YAAY,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC,IAAI,EAAE,CAAC;IACpD,CAAC;IAAC,MAAM,CAAC;QACP,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAClB,mFAAmF,CACpF,CAAC;QACF,OAAO;IACT,CAAC;IAED,IAAI,CAAC,UAAU,CAAC,eAAe,CAAC,EAAE,CAAC;QACjC,MAAM,MAAM,GAAG,mBAAmB,CAAC,MAAM,CAAC,CAAC;QAC3C,GAAG,CAAC,SAAS,CAAC,cAAc,EAAE,WAAW,CAAC,CAAC;QAC3C,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACjB,OAAO;IACT,CAAC;IAED,MAAM,IAAI,GAAG,YAAY,CAAC,eAAe,EAAE,OAAO,CAAC,CAAC,OAAO,CAAC,aAAa,EAAE,MAAM,CAAC,CAAC;IACnF,GAAG,CAAC,SAAS,CAAC,cAAc,EAAE,WAAW,CAAC,CAAC;IAC3C,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACjB,CAAC,CAAC,CAAC;AAEH,SAAS,mBAAmB,CAAC,MAAc;IACzC,OAAO;;;;;;;;;;;;iDAYwC,MAAM;;;;;;;wBAO/B,CAAC;AACzB,CAAC;AAED,gFAAgF;AAEhF,MAAM,cAAc,GAAG,IAAI,GAAG,EAAkB,CAAC;AAEjD,SAAS,kBAAkB,CAAC,MAAc;IACxC,MAAM,IAAI,GAAG,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IAE/D,IAAI,cAAc,CAAC,GAAG,CAAC,IAAI,CAAC;QAAE,OAAO,cAAc,CAAC,GAAG,CAAC,IAAI,CAAE,CAAC;IAE/D,MAAM,GAAG,GAAG,KAAK,CAAC,qBAAqB,CAAC,IAAI,CAAC,CAAC;IAC9C,IAAI,CAAC,GAAG;QAAE,OAAO,IAAI,CAAC;IAEtB,cAAc,CAAC,GAAG,CAAC,IAAI,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC;IACjC,OAAO,GAAG,CAAC,EAAE,CAAC;AAChB,CAAC;AAED,EAAE,CAAC,EAAE,CAAC,YAAY,EAAE,CAAC,MAAM,EAAE,EAAE;IAC7B,IAAI,eAAe,GAAkB,IAAI,CAAC;IAC1C,IAAI,QAAQ,GAAkB,IAAI,CAAC;IAEnC,OAAO,CAAC,GAAG,CAAC,wBAAwB,MAAM,CAAC,EAAE,EAAE,CAAC,CAAC;IAEjD,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,OAA6C,EAAE,GAAG,EAAE,EAAE;QACvE,MAAM,IAAI,GAAG,kBAAkB,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;QAChD,IAAI,CAAC,IAAI,EAAE,CAAC;YACV,MAAM,CAAC,IAAI,CAAC,YAAY,EAAE,EAAE,OAAO,EAAE,iBAAiB,EAAE,CAAC,CAAC;YAC1D,IAAI,OAAO,GAAG,KAAK,UAAU;gBAAE,GAAG,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC;YAClD,OAAO;QACT,CAAC;QAED,eAAe,GAAG,IAAI,CAAC;QACvB,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC;QAC5B,OAAO,CAAC,GAAG,CAAC,wBAAwB,MAAM,CAAC,EAAE,WAAW,QAAQ,EAAE,CAAC,CAAC;QACpE,MAAM,CAAC,IAAI,CAAC,SAAS,EAAE,EAAE,SAAS,EAAE,MAAM,CAAC,EAAE,EAAE,CAAC,CAAC;QACjD,IAAI,OAAO,GAAG,KAAK,UAAU;YAAE,GAAG,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC;IACnD,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,WAAW,EAAE,CAAC,OAAuE,EAAE,EAAE;QACjG,IAAI,CAAC,eAAe,EAAE,CAAC;YACrB,MAAM,CAAC,IAAI,CAAC,YAAY,EAAE,EAAE,OAAO,EAAE,mBAAmB,EAAE,CAAC,CAAC;YAC5D,OAAO;QACT,CAAC;QAED,KAAK,MAAM,KAAK,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;YACjC,MAAM,GAAG,GAAG,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC;YAC1D,MAAM,YAAY,GAAG,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC,CAAC,IAAI,CAAC;YAC7F,MAAM,IAAI,GAAG,GAAG,eAAe,IAAI,GAAG,EAAE,CAAC;YACzC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAElB,MAAM,KAAK,GAAG,WAAW,CAAC,KAAK,EAAE,eAAe,EAAE,GAAG,EAAE,YAAY,CAAC,CAAC;YACrE,MAAM,CAAC,IAAI,CAAC,YAAY,EAAE;gBACxB,GAAG;gBACH,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,QAAQ,CAAC;gBACjC,OAAO,EAAE,KAAK,CAAC,OAAO;aACvB,CAAC,CAAC;QACL,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,kBAAkB,EAAE,GAAG,EAAE;QACjC,IAAI,CAAC,eAAe,EAAE,CAAC;YACrB,MAAM,CAAC,IAAI,CAAC,YAAY,EAAE,EAAE,OAAO,EAAE,mBAAmB,EAAE,CAAC,CAAC;YAC5D,OAAO;QACT,CAAC;QACD,MAAM,CAAC,IAAI,CAAC,UAAU,eAAe,EAAE,CAAC,CAAC;QACzC,OAAO,CAAC,GAAG,CAAC,kCAAkC,MAAM,CAAC,EAAE,cAAc,eAAe,EAAE,CAAC,CAAC;IAC1F,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,aAAa,EAAE,CAAC,OAA2B,EAAE,EAAE;QACvD,IAAI,CAAC,eAAe;YAAE,OAAO;QAC7B,KAAK,MAAM,GAAG,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;YAC/B,MAAM,CAAC,KAAK,CAAC,GAAG,eAAe,IAAI,GAAG,EAAE,CAAC,CAAC;QAC5C,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CACP,QAAQ,EACR,CAAC,OAAoG,EAAE,EAAE;QACvG,IAAI,CAAC,eAAe,IAAI,CAAC,QAAQ,EAAE,CAAC;YAClC,MAAM,CAAC,IAAI,CAAC,YAAY,EAAE,EAAE,OAAO,EAAE,mBAAmB,EAAE,CAAC,CAAC;YAC5D,OAAO;QACT,CAAC;QAED,IAAI,CAAC;YACH,OAAO,CAAC,GAAG,CAAC,oBAAoB,OAAO,CAAC,GAAG,WAAW,QAAQ,UAAU,OAAO,CAAC,SAAS,CAAC,MAAM,EAAE,CAAC,CAAC;YAEpG,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,WAAW,EAAE,GAAG,gBAAgB,CACtD,KAAK,EACL,eAAe,EACf,OAAO,CAAC,GAAG,EACX,QAAQ,EACR,OAAO,CAAC,SAAS,CAClB,CAAC;YAEF,MAAM,CAAC,IAAI,CAAC,YAAY,EAAE,EAAE,WAAW,EAAE,CAAC,CAAC;YAE3C,MAAM,IAAI,GAAG,GAAG,eAAe,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC;YACjD,MAAM,UAAU,GAAG,UAAU,eAAe,EAAE,CAAC;YAC/C,MAAM,aAAa,GAAG,EAAE,GAAG,EAAE,OAAO,CAAC,GAAG,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC;YAE3D,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,cAAc,EAAE,aAAa,CAAC,CAAC;YAChD,EAAE,CAAC,EAAE,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,iBAAiB,EAAE;gBACxC,GAAG,aAAa;gBAChB,QAAQ;gBACR,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;aACtB,CAAC,CAAC;YAEH,OAAO,CAAC,GAAG,CAAC,uBAAuB,OAAO,CAAC,GAAG,YAAY,OAAO,EAAE,CAAC,CAAC;QACvE,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,MAAM,CAAC,IAAI,CAAC,cAAc,EAAE;gBAC1B,OAAO,EAAG,GAAa,CAAC,OAAO;aAChC,CAAC,CAAC;QACL,CAAC;IACH,CAAC,CACF,CAAC;IAEF,MAAM,CAAC,EAAE,CAAC,YAAY,EAAE,CAAC,MAAM,EAAE,EAAE;QACjC,OAAO,CAAC,GAAG,CAAC,2BAA2B,MAAM,CAAC,EAAE,WAAW,QAAQ,WAAW,MAAM,EAAE,CAAC,CAAC;QACxF,eAAe,GAAG,IAAI,CAAC;QACvB,QAAQ,GAAG,IAAI,CAAC;IAClB,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,gFAAgF;AAEhF,GAAG,CAAC,GAAG,CAAC,sBAAsB,EAAE,CAAC,IAAI,EAAE,GAAG,EAAE,EAAE;IAC5C,MAAM,KAAK,GAAG,KAAK,CAAC,QAAQ,EAAE,CAAC;IAC/B,MAAM,gBAAgB,GAAG,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC;IAEjD,GAAG,CAAC,IAAI,CAAC;QACP,GAAG,KAAK;QACR,WAAW,EAAE,gBAAgB;QAC7B,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE;KACzB,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,GAAG,CAAC,GAAG,CAAC,uBAAuB,EAAE,CAAC,IAAI,EAAE,GAAG,EAAE,EAAE;IAC7C,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,0BAA0B,EAAE,CAAC,CAAC;AAC/C,CAAC,CAAC,CAAC;AAEH,GAAG,CAAC,GAAG,CAAC,8BAA8B,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE;IACnD,MAAM,KAAK,GAAG,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,KAAe,EAAE,EAAE,CAAC,IAAI,EAAE,CAAC;IAC5D,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC,CAAC;AACzC,CAAC,CAAC,CAAC;AAEH,MAAM,WAAW,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,uBAAuB,CAAC,CAAC;AAErE,GAAG,CAAC,GAAG,CAAC,SAAS,EAAE,CAAC,IAAI,EAAE,GAAG,EAAE,EAAE;IAC/B,MAAM,UAAU,GAAG,OAAO,CAAC,GAAG,CAAC,YAAY,IAAI,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,kBAAkB,CAAC,CAAC;IAC3F,IAAI,MAAM,GAAG,EAAE,CAAC;IAChB,IAAI,CAAC;QACH,MAAM,GAAG,YAAY,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC,IAAI,EAAE,CAAC;IACpD,CAAC;IAAC,MAAM,CAAC,CAAC,gBAAgB,CAAC,CAAC;IAE5B,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,EAAE,CAAC;QAC7B,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,sBAAsB,CAAC,CAAC;QAC7C,OAAO;IACT,CAAC;IAED,MAAM,IAAI,GAAG,YAAY,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC,OAAO,CAAC,aAAa,EAAE,MAAM,CAAC,CAAC;IAC/E,GAAG,CAAC,SAAS,CAAC,cAAc,EAAE,WAAW,CAAC,CAAC;IAC3C,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACjB,CAAC,CAAC,CAAC;AAEH,gFAAgF;AAEhF,UAAU,CAAC,MAAM,CAAC,IAAI,EAAE,GAAG,EAAE;IAC3B,OAAO,CAAC,GAAG,CAAC,qDAAqD,IAAI,EAAE,CAAC,CAAC;AAC3E,CAAC,CAAC,CAAC;AAEH,OAAO,EAAE,GAAG,EAAE,EAAE,EAAE,KAAK,EAAE,CAAC"}
package/dist/seed.js CHANGED
@@ -1,21 +1,22 @@
1
- import { createDatabase, runMigrations } from "./db.js";
2
1
  import { randomBytes, createHash, randomUUID } from "node:crypto";
3
2
  import { writeFileSync } from "node:fs";
4
3
  import path from "node:path";
5
4
  import { fileURLToPath } from "node:url";
5
+ import { SqliteAdapter } from "./storage/index.js";
6
6
  const __dirname = path.dirname(fileURLToPath(import.meta.url));
7
- const db = createDatabase();
8
- runMigrations(db);
9
- const existing = db.prepare("SELECT id FROM namespaces WHERE name = ?").get("default");
7
+ const store = new SqliteAdapter();
8
+ store.init();
9
+ const existing = store.findNamespaceByName("default");
10
10
  if (existing) {
11
11
  console.log("[seed] Default namespace already exists. Skipping.");
12
+ store.close();
12
13
  process.exit(0);
13
14
  }
14
15
  const rawKey = randomBytes(32).toString("hex");
15
16
  const hashedKey = createHash("sha256").update(rawKey).digest("hex");
16
17
  const id = randomUUID();
17
18
  const now = Date.now();
18
- db.prepare("INSERT INTO namespaces (id, name, api_key, created_at) VALUES (?, ?, ?, ?)").run(id, "default", hashedKey, now);
19
+ store.createNamespace({ id, name: "default", api_key: hashedKey, created_at: now });
19
20
  const devKeyPath = path.resolve(__dirname, "../data/.dev-key");
20
21
  writeFileSync(devKeyPath, rawKey, "utf-8");
21
22
  console.log("[seed] Created default namespace:");
@@ -25,4 +26,5 @@ console.log(` Dev key file : ${devKeyPath}`);
25
26
  console.log("");
26
27
  console.log("Use it in your client: createClient({ apiKey: '...' })");
27
28
  console.log("Or open http://localhost:3001/playground to test interactively.");
29
+ store.close();
28
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,cAAc,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AACxD,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;AAEzC,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;AAE/D,MAAM,EAAE,GAAG,cAAc,EAAE,CAAC;AAC5B,aAAa,CAAC,EAAE,CAAC,CAAC;AAElB,MAAM,QAAQ,GAAG,EAAE,CAAC,OAAO,CAAC,0CAA0C,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;AACvF,IAAI,QAAQ,EAAE,CAAC;IACb,OAAO,CAAC,GAAG,CAAC,oDAAoD,CAAC,CAAC;IAClE,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,EAAE,CAAC,OAAO,CACR,4EAA4E,CAC7E,CAAC,GAAG,CAAC,EAAE,EAAE,SAAS,EAAE,SAAS,EAAE,GAAG,CAAC,CAAC;AAErC,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"}
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,43 +1,22 @@
1
- import type Database from "better-sqlite3";
1
+ import type { StorageAdapter, StateRecord, EventRecord } from "./storage/index.js";
2
+ export type { StateRecord, EventRecord } from "./storage/index.js";
2
3
  export interface MutationInput {
3
4
  id: string;
4
5
  clientTs: number;
5
6
  fn: string;
6
7
  value?: unknown;
7
8
  }
8
- export interface EventRecord {
9
- id: string;
10
- state_id: string;
11
- client_id: string;
12
- client_ts: number;
13
- server_ts: number;
14
- seq: number;
15
- mutation: string;
16
- meta: string | null;
17
- created_at: number;
18
- }
19
- export interface StateRecord {
20
- id: string;
21
- namespace: string;
22
- key: string;
23
- initial: string;
24
- snapshot: string;
25
- version: number;
26
- created_at: number;
27
- updated_at: number;
28
- }
29
9
  /**
30
10
  * Ensures a state row exists for the given namespace + key.
31
11
  * If it doesn't exist, creates one with the provided initial value.
32
- * Returns the state row.
33
12
  */
34
- export declare function ensureState(db: Database.Database, namespace: string, key: string, initialValue?: unknown): StateRecord;
13
+ export declare function ensureState(store: StorageAdapter, namespace: string, key: string, initialValue?: unknown): StateRecord;
35
14
  /**
36
15
  * Processes a batch of mutations for a given state key.
37
16
  * Appends events to the log, replays to compute new snapshot,
38
17
  * persists the snapshot, and returns the new value + version.
39
18
  */
40
- export declare function processMutations(db: Database.Database, namespace: string, key: string, clientId: string, mutations: MutationInput[]): {
19
+ export declare function processMutations(store: StorageAdapter, namespace: string, key: string, clientId: string, mutations: MutationInput[]): {
41
20
  value: unknown;
42
21
  version: number;
43
22
  mutationIds: string[];
@@ -46,11 +25,11 @@ export declare function processMutations(db: Database.Database, namespace: strin
46
25
  * Replays the full event log for a state to compute the current value.
47
26
  * This is the authoritative state computation.
48
27
  */
49
- export declare function replayState(db: Database.Database, stateId: string, initialJson: string): unknown;
28
+ export declare function replayState(store: StorageAdapter, stateId: string, initialJson: string): unknown;
50
29
  /**
51
30
  * Returns the event history for a state key (paginated).
52
31
  */
53
- export declare function getHistory(db: Database.Database, stateId: string, limit?: number, cursor?: string): {
32
+ export declare function getHistory(store: StorageAdapter, stateId: string, limit?: number, cursor?: string): {
54
33
  events: EventRecord[];
55
34
  hasMore: boolean;
56
35
  };
@@ -1 +1 @@
1
- {"version":3,"file":"state-engine.d.ts","sourceRoot":"","sources":["../src/state-engine.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,QAAQ,MAAM,gBAAgB,CAAC;AAG3C,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,MAAM,WAAW,WAAW;IAC1B,EAAE,EAAE,MAAM,CAAC;IACX,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,GAAG,EAAE,MAAM,CAAC;IACZ,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,WAAW;IAC1B,EAAE,EAAE,MAAM,CAAC;IACX,SAAS,EAAE,MAAM,CAAC;IAClB,GAAG,EAAE,MAAM,CAAC;IACZ,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED;;;;GAIG;AACH,wBAAgB,WAAW,CACzB,EAAE,EAAE,QAAQ,CAAC,QAAQ,EACrB,SAAS,EAAE,MAAM,EACjB,GAAG,EAAE,MAAM,EACX,YAAY,GAAE,OAAc,GAC3B,WAAW,CAmBb;AAED;;;;GAIG;AACH,wBAAgB,gBAAgB,CAC9B,EAAE,EAAE,QAAQ,CAAC,QAAQ,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,CAmC5D;AAED;;;GAGG;AACH,wBAAgB,WAAW,CACzB,EAAE,EAAE,QAAQ,CAAC,QAAQ,EACrB,OAAO,EAAE,MAAM,EACf,WAAW,EAAE,MAAM,GAClB,OAAO,CAoCT;AAoCD;;GAEG;AACH,wBAAgB,UAAU,CACxB,EAAE,EAAE,QAAQ,CAAC,QAAQ,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,CA0B7C"}
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"}
@@ -2,61 +2,66 @@ import { v4 as uuid } from "uuid";
2
2
  /**
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
- * Returns the state row.
6
5
  */
7
- export function ensureState(db, namespace, key, initialValue = null) {
8
- const existing = db
9
- .prepare("SELECT * FROM states WHERE namespace = ? AND key = ?")
10
- .get(namespace, key);
6
+ export function ensureState(store, namespace, key, initialValue = null) {
7
+ const existing = store.findState(namespace, key);
11
8
  if (existing)
12
9
  return existing;
13
10
  const now = Date.now();
14
11
  const serialized = JSON.stringify(initialValue);
15
12
  const id = uuid();
16
- db.prepare(`INSERT INTO states (id, namespace, key, initial, snapshot, version, created_at, updated_at)
17
- VALUES (?, ?, ?, ?, ?, 0, ?, ?)`).run(id, namespace, key, serialized, serialized, now, now);
18
- return db
19
- .prepare("SELECT * FROM states WHERE id = ?")
20
- .get(id);
13
+ store.createState({
14
+ id,
15
+ namespace,
16
+ key,
17
+ initial: serialized,
18
+ snapshot: serialized,
19
+ version: 0,
20
+ created_at: now,
21
+ updated_at: now,
22
+ });
23
+ return store.findStateById(id);
21
24
  }
22
25
  /**
23
26
  * Processes a batch of mutations for a given state key.
24
27
  * Appends events to the log, replays to compute new snapshot,
25
28
  * persists the snapshot, and returns the new value + version.
26
29
  */
27
- export function processMutations(db, namespace, key, clientId, mutations) {
28
- const state = ensureState(db, namespace, key);
29
- const maxSeqRow = db
30
- .prepare("SELECT MAX(seq) as max_seq FROM event_log WHERE state_id = ?")
31
- .get(state.id);
32
- let seq = (maxSeqRow.max_seq ?? -1) + 1;
30
+ export function processMutations(store, namespace, key, clientId, mutations) {
31
+ const state = ensureState(store, namespace, key);
32
+ const maxSeq = store.getMaxSeq(state.id);
33
+ let seq = (maxSeq ?? -1) + 1;
33
34
  const now = Date.now();
34
- const insertEvent = db.prepare(`INSERT INTO event_log (id, state_id, client_id, client_ts, server_ts, seq, mutation, meta, created_at)
35
- VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)`);
36
35
  const mutationIds = [];
37
- const insertAll = db.transaction(() => {
38
- for (const mut of mutations) {
39
- const eventId = mut.id || uuid();
40
- const meta = mut.value !== undefined ? JSON.stringify({ fallbackValue: mut.value }) : null;
41
- insertEvent.run(eventId, state.id, clientId, mut.clientTs, now, seq, mut.fn, meta, now);
42
- mutationIds.push(eventId);
43
- seq++;
44
- }
36
+ const events = mutations.map((mut) => {
37
+ const eventId = mut.id || uuid();
38
+ mutationIds.push(eventId);
39
+ const meta = mut.value !== undefined
40
+ ? JSON.stringify({ fallbackValue: mut.value })
41
+ : null;
42
+ return {
43
+ id: eventId,
44
+ stateId: state.id,
45
+ clientId,
46
+ clientTs: mut.clientTs,
47
+ serverTs: now,
48
+ seq: seq++,
49
+ mutation: mut.fn,
50
+ meta,
51
+ };
45
52
  });
46
- insertAll();
47
- const newValue = replayState(db, state.id, state.initial);
53
+ store.insertEvents(events);
54
+ const newValue = replayState(store, state.id, state.initial);
48
55
  const newVersion = state.version + mutations.length;
49
- db.prepare("UPDATE states SET snapshot = ?, version = ?, updated_at = ? WHERE id = ?").run(JSON.stringify(newValue), newVersion, Date.now(), state.id);
56
+ store.updateSnapshot(state.id, JSON.stringify(newValue), newVersion, Date.now());
50
57
  return { value: newValue, version: newVersion, mutationIds };
51
58
  }
52
59
  /**
53
60
  * Replays the full event log for a state to compute the current value.
54
61
  * This is the authoritative state computation.
55
62
  */
56
- export function replayState(db, stateId, initialJson) {
57
- const events = db
58
- .prepare("SELECT mutation, meta FROM event_log WHERE state_id = ? ORDER BY server_ts ASC, seq ASC")
59
- .all(stateId);
63
+ export function replayState(store, stateId, initialJson) {
64
+ const events = store.getEventsForReplay(stateId);
60
65
  let state = JSON.parse(initialJson);
61
66
  for (const event of events) {
62
67
  if (event.mutation === "__SET__") {
@@ -116,26 +121,7 @@ function applyMutation(state, mutationBody) {
116
121
  /**
117
122
  * Returns the event history for a state key (paginated).
118
123
  */
119
- export function getHistory(db, stateId, limit = 50, cursor) {
120
- let events;
121
- if (cursor) {
122
- events = db
123
- .prepare(`SELECT * FROM event_log
124
- WHERE state_id = ? AND (server_ts, seq) > (
125
- SELECT server_ts, seq FROM event_log WHERE id = ?
126
- )
127
- ORDER BY server_ts ASC, seq ASC
128
- LIMIT ?`)
129
- .all(stateId, cursor, limit + 1);
130
- }
131
- else {
132
- events = db
133
- .prepare("SELECT * FROM event_log WHERE state_id = ? ORDER BY server_ts ASC, seq ASC LIMIT ?")
134
- .all(stateId, limit + 1);
135
- }
136
- const hasMore = events.length > limit;
137
- if (hasMore)
138
- events.pop();
139
- return { events, hasMore };
124
+ export function getHistory(store, stateId, limit = 50, cursor) {
125
+ return store.getEventHistory(stateId, limit, cursor);
140
126
  }
141
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":"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"}
@@ -0,0 +1,102 @@
1
+ /**
2
+ * StorageAdapter — the contract any persistence backend must implement.
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.
10
+ */
11
+ export interface NamespaceRecord {
12
+ id: string;
13
+ name: string;
14
+ api_key: string;
15
+ created_at: number;
16
+ }
17
+ export interface StateRecord {
18
+ id: string;
19
+ namespace: string;
20
+ key: string;
21
+ initial: string;
22
+ snapshot: string;
23
+ version: number;
24
+ created_at: number;
25
+ updated_at: number;
26
+ }
27
+ export interface EventRecord {
28
+ id: string;
29
+ state_id: string;
30
+ client_id: string;
31
+ client_ts: number;
32
+ server_ts: number;
33
+ seq: number;
34
+ mutation: string;
35
+ meta: string | null;
36
+ created_at: number;
37
+ }
38
+ export interface EventInput {
39
+ id: string;
40
+ stateId: string;
41
+ clientId: string;
42
+ clientTs: number;
43
+ serverTs: number;
44
+ seq: number;
45
+ mutation: string;
46
+ meta: string | null;
47
+ }
48
+ export interface StorageAdapter {
49
+ /** Run migrations / create tables. Called once at boot. */
50
+ init(): void;
51
+ /** Clean shutdown (close connections, etc.) */
52
+ close(): void;
53
+ /** List all namespaces (api_key excluded from result for safety). */
54
+ listNamespaces(): Pick<NamespaceRecord, "id" | "name" | "created_at">[];
55
+ /** Find a namespace by its hashed API key. Returns just the id, or null. */
56
+ findNamespaceByApiKey(apiKeyHash: string): {
57
+ id: string;
58
+ } | null;
59
+ /** Find a namespace by name. Returns the full record, or null. */
60
+ findNamespaceByName(name: string): NamespaceRecord | null;
61
+ /** Insert a new namespace. */
62
+ createNamespace(ns: NamespaceRecord): void;
63
+ /** Find a state by (namespace, key). */
64
+ findState(namespace: string, key: string): StateRecord | null;
65
+ /** Find a state by primary key. */
66
+ findStateById(id: string): StateRecord | null;
67
+ /** List states for a namespace (snapshot included). */
68
+ listStates(namespace: string): StateRecord[];
69
+ /** Insert a new state row. */
70
+ createState(state: StateRecord): void;
71
+ /** Update the snapshot, version, and updated_at for a state. */
72
+ updateSnapshot(stateId: string, snapshot: string, version: number, updatedAt: number): void;
73
+ /** Get the current max sequence number for a state. null if no events. */
74
+ getMaxSeq(stateId: string): number | null;
75
+ /** Insert a batch of events atomically (single transaction). */
76
+ insertEvents(events: EventInput[]): void;
77
+ /** Get all events for replay: just mutation + meta, ordered by (server_ts, seq). */
78
+ getEventsForReplay(stateId: string): {
79
+ mutation: string;
80
+ meta: string | null;
81
+ }[];
82
+ /** Get paginated event history (full records). */
83
+ getEventHistory(stateId: string, limit: number, cursor?: string): {
84
+ events: EventRecord[];
85
+ hasMore: boolean;
86
+ };
87
+ /** Counts for the studio overview. */
88
+ getStats(): {
89
+ namespaces: number;
90
+ states: number;
91
+ events: number;
92
+ };
93
+ /** All states with their namespace name, ordered by last updated. */
94
+ listAllStatesWithNamespace(): (StateRecord & {
95
+ namespace_name: string;
96
+ })[];
97
+ /** Recent events across all states, with state key attached. */
98
+ getRecentEvents(limit: number): (EventRecord & {
99
+ state_key: string;
100
+ })[];
101
+ }
102
+ //# sourceMappingURL=adapter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"adapter.d.ts","sourceRoot":"","sources":["../../src/storage/adapter.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ /**
2
+ * StorageAdapter — the contract any persistence backend must implement.
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.
10
+ */
11
+ export {};
12
+ //# sourceMappingURL=adapter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"adapter.js","sourceRoot":"","sources":["../../src/storage/adapter.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG"}
@@ -0,0 +1,4 @@
1
+ export type { StorageAdapter, NamespaceRecord, StateRecord, EventRecord, EventInput, } from "./adapter.js";
2
+ export { SqliteAdapter } from "./sqlite.js";
3
+ export type { SqliteOptions } from "./sqlite.js";
4
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +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"}
@@ -0,0 +1,2 @@
1
+ export { SqliteAdapter } from "./sqlite.js";
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/storage/index.ts"],"names":[],"mappings":"AAQA,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC"}
@@ -0,0 +1,49 @@
1
+ import Database from "better-sqlite3";
2
+ import type { StorageAdapter, NamespaceRecord, StateRecord, EventRecord, EventInput } from "./adapter.js";
3
+ export interface SqliteOptions {
4
+ /** Path to the .db file. Defaults to process.env.DATABASE_PATH or ./data/state.db */
5
+ dbPath?: string;
6
+ /** If true, uses an in-memory database (useful for tests). */
7
+ memory?: boolean;
8
+ }
9
+ export declare class SqliteAdapter implements StorageAdapter {
10
+ private db;
11
+ constructor(opts?: SqliteOptions);
12
+ /** Expose the raw database for edge cases (tests, legacy code). */
13
+ get raw(): Database.Database;
14
+ init(): void;
15
+ close(): void;
16
+ listNamespaces(): Pick<NamespaceRecord, "id" | "name" | "created_at">[];
17
+ findNamespaceByApiKey(apiKeyHash: string): {
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): {
30
+ mutation: string;
31
+ meta: string | null;
32
+ }[];
33
+ getEventHistory(stateId: string, limit: number, cursor?: string): {
34
+ events: EventRecord[];
35
+ hasMore: boolean;
36
+ };
37
+ getStats(): {
38
+ namespaces: number;
39
+ states: number;
40
+ events: number;
41
+ };
42
+ listAllStatesWithNamespace(): (StateRecord & {
43
+ namespace_name: string;
44
+ })[];
45
+ getRecentEvents(limit: number): (EventRecord & {
46
+ state_key: string;
47
+ })[];
48
+ }
49
+ //# sourceMappingURL=sqlite.d.ts.map
@@ -0,0 +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"}
@@ -0,0 +1,192 @@
1
+ import Database from "better-sqlite3";
2
+ import { mkdirSync } from "node:fs";
3
+ import path from "node:path";
4
+ export class SqliteAdapter {
5
+ db;
6
+ constructor(opts = {}) {
7
+ if (opts.memory) {
8
+ this.db = new Database(":memory:");
9
+ }
10
+ else {
11
+ const dbPath = opts.dbPath ||
12
+ process.env.DATABASE_PATH ||
13
+ path.join(process.cwd(), "data", "state.db");
14
+ mkdirSync(path.dirname(dbPath), { recursive: true });
15
+ this.db = new Database(dbPath);
16
+ }
17
+ this.db.pragma("journal_mode = WAL");
18
+ this.db.pragma("foreign_keys = ON");
19
+ }
20
+ /** Expose the raw database for edge cases (tests, legacy code). */
21
+ get raw() {
22
+ return this.db;
23
+ }
24
+ // ── Lifecycle ───────────────────────────────────────────────────────────
25
+ init() {
26
+ this.db.exec(`
27
+ CREATE TABLE IF NOT EXISTS namespaces (
28
+ id TEXT PRIMARY KEY,
29
+ name TEXT NOT NULL,
30
+ api_key TEXT NOT NULL UNIQUE,
31
+ created_at INTEGER NOT NULL
32
+ );
33
+
34
+ CREATE TABLE IF NOT EXISTS states (
35
+ id TEXT PRIMARY KEY,
36
+ namespace TEXT NOT NULL REFERENCES namespaces(id),
37
+ key TEXT NOT NULL,
38
+ initial TEXT NOT NULL,
39
+ snapshot TEXT NOT NULL,
40
+ version INTEGER NOT NULL DEFAULT 0,
41
+ created_at INTEGER NOT NULL,
42
+ updated_at INTEGER NOT NULL,
43
+ UNIQUE(namespace, key)
44
+ );
45
+
46
+ CREATE TABLE IF NOT EXISTS event_log (
47
+ id TEXT PRIMARY KEY,
48
+ state_id TEXT NOT NULL REFERENCES states(id),
49
+ client_id TEXT NOT NULL,
50
+ client_ts INTEGER NOT NULL,
51
+ server_ts INTEGER NOT NULL,
52
+ seq INTEGER NOT NULL,
53
+ mutation TEXT NOT NULL,
54
+ meta TEXT,
55
+ created_at INTEGER NOT NULL
56
+ );
57
+
58
+ CREATE INDEX IF NOT EXISTS idx_event_log_state_ts
59
+ ON event_log(state_id, server_ts, seq);
60
+
61
+ CREATE INDEX IF NOT EXISTS idx_states_namespace_key
62
+ ON states(namespace, key);
63
+ `);
64
+ }
65
+ close() {
66
+ this.db.close();
67
+ }
68
+ // ── Namespaces ──────────────────────────────────────────────────────────
69
+ listNamespaces() {
70
+ return this.db
71
+ .prepare("SELECT id, name, created_at FROM namespaces")
72
+ .all();
73
+ }
74
+ findNamespaceByApiKey(apiKeyHash) {
75
+ return (this.db
76
+ .prepare("SELECT id FROM namespaces WHERE api_key = ?")
77
+ .get(apiKeyHash) ?? null);
78
+ }
79
+ findNamespaceByName(name) {
80
+ return (this.db
81
+ .prepare("SELECT * FROM namespaces WHERE name = ?")
82
+ .get(name) ?? null);
83
+ }
84
+ createNamespace(ns) {
85
+ this.db
86
+ .prepare("INSERT INTO namespaces (id, name, api_key, created_at) VALUES (?, ?, ?, ?)")
87
+ .run(ns.id, ns.name, ns.api_key, ns.created_at);
88
+ }
89
+ // ── States ──────────────────────────────────────────────────────────────
90
+ findState(namespace, key) {
91
+ return (this.db
92
+ .prepare("SELECT * FROM states WHERE namespace = ? AND key = ?")
93
+ .get(namespace, key) ?? null);
94
+ }
95
+ findStateById(id) {
96
+ return (this.db
97
+ .prepare("SELECT * FROM states WHERE id = ?")
98
+ .get(id) ?? null);
99
+ }
100
+ listStates(namespace) {
101
+ return this.db
102
+ .prepare("SELECT id, key, snapshot, version, created_at, updated_at FROM states WHERE namespace = ?")
103
+ .all(namespace);
104
+ }
105
+ createState(state) {
106
+ this.db
107
+ .prepare(`INSERT INTO states (id, namespace, key, initial, snapshot, version, created_at, updated_at)
108
+ VALUES (?, ?, ?, ?, ?, ?, ?, ?)`)
109
+ .run(state.id, state.namespace, state.key, state.initial, state.snapshot, state.version, state.created_at, state.updated_at);
110
+ }
111
+ updateSnapshot(stateId, snapshot, version, updatedAt) {
112
+ this.db
113
+ .prepare("UPDATE states SET snapshot = ?, version = ?, updated_at = ? WHERE id = ?")
114
+ .run(snapshot, version, updatedAt, stateId);
115
+ }
116
+ // ── Event Log ───────────────────────────────────────────────────────────
117
+ getMaxSeq(stateId) {
118
+ const row = this.db
119
+ .prepare("SELECT MAX(seq) as max_seq FROM event_log WHERE state_id = ?")
120
+ .get(stateId);
121
+ return row.max_seq;
122
+ }
123
+ insertEvents(events) {
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
+ VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)`);
126
+ const batch = this.db.transaction(() => {
127
+ for (const e of events) {
128
+ insert.run(e.id, e.stateId, e.clientId, e.clientTs, e.serverTs, e.seq, e.mutation, e.meta, e.serverTs);
129
+ }
130
+ });
131
+ batch();
132
+ }
133
+ getEventsForReplay(stateId) {
134
+ return this.db
135
+ .prepare("SELECT mutation, meta FROM event_log WHERE state_id = ? ORDER BY server_ts ASC, seq ASC")
136
+ .all(stateId);
137
+ }
138
+ getEventHistory(stateId, limit, cursor) {
139
+ let events;
140
+ if (cursor) {
141
+ events = this.db
142
+ .prepare(`SELECT * FROM event_log
143
+ WHERE state_id = ? AND (server_ts, seq) > (
144
+ SELECT server_ts, seq FROM event_log WHERE id = ?
145
+ )
146
+ ORDER BY server_ts ASC, seq ASC
147
+ LIMIT ?`)
148
+ .all(stateId, cursor, limit + 1);
149
+ }
150
+ else {
151
+ events = this.db
152
+ .prepare("SELECT * FROM event_log WHERE state_id = ? ORDER BY server_ts ASC, seq ASC LIMIT ?")
153
+ .all(stateId, limit + 1);
154
+ }
155
+ const hasMore = events.length > limit;
156
+ if (hasMore)
157
+ events.pop();
158
+ return { events, hasMore };
159
+ }
160
+ // ── Studio ──────────────────────────────────────────────────────────────
161
+ getStats() {
162
+ const ns = this.db
163
+ .prepare("SELECT COUNT(*) as count FROM namespaces")
164
+ .get();
165
+ const st = this.db
166
+ .prepare("SELECT COUNT(*) as count FROM states")
167
+ .get();
168
+ const ev = this.db
169
+ .prepare("SELECT COUNT(*) as count FROM event_log")
170
+ .get();
171
+ return { namespaces: ns.count, states: st.count, events: ev.count };
172
+ }
173
+ listAllStatesWithNamespace() {
174
+ return this.db
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
+ FROM states s
177
+ JOIN namespaces n ON s.namespace = n.id
178
+ ORDER BY s.updated_at DESC`)
179
+ .all();
180
+ }
181
+ getRecentEvents(limit) {
182
+ const rows = this.db
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
+ FROM event_log e
185
+ JOIN states s ON e.state_id = s.id
186
+ ORDER BY e.server_ts DESC, e.seq DESC
187
+ LIMIT ?`)
188
+ .all(limit);
189
+ return rows.reverse();
190
+ }
191
+ }
192
+ //# sourceMappingURL=sqlite.js.map
@@ -0,0 +1 @@
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.1.1",
3
+ "version": "0.2.0",
4
4
  "description": "Better-State server — shared state primitive for developers",
5
5
  "type": "module",
6
6
  "bin": {