@tensorix/metahub 0.2.0 → 0.2.2

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.
Files changed (50) hide show
  1. package/dist/cli.js +18498 -16193
  2. package/dist/cli.js.map +43 -34
  3. package/dist/core/blobs.d.ts +10 -0
  4. package/dist/core/blobs.d.ts.map +1 -1
  5. package/dist/core/cache.d.ts +5 -0
  6. package/dist/core/cache.d.ts.map +1 -1
  7. package/dist/core/config.d.ts +4 -0
  8. package/dist/core/config.d.ts.map +1 -1
  9. package/dist/core/crdt.d.ts +7 -0
  10. package/dist/core/crdt.d.ts.map +1 -1
  11. package/dist/core/schema-init.d.ts +29 -0
  12. package/dist/core/schema-init.d.ts.map +1 -1
  13. package/dist/core/schema.d.ts +1 -1
  14. package/dist/core/schema.d.ts.map +1 -1
  15. package/dist/core/shares.d.ts +60 -0
  16. package/dist/core/shares.d.ts.map +1 -0
  17. package/dist/core/sites-core.d.ts.map +1 -1
  18. package/dist/core/sites.d.ts.map +1 -1
  19. package/dist/core/sync/auth.d.ts +15 -2
  20. package/dist/core/sync/auth.d.ts.map +1 -1
  21. package/dist/core/sync/blob-routes.d.ts.map +1 -1
  22. package/dist/core/sync/client.d.ts +5 -0
  23. package/dist/core/sync/client.d.ts.map +1 -1
  24. package/dist/core/sync/e2ee.d.ts +7 -0
  25. package/dist/core/sync/e2ee.d.ts.map +1 -1
  26. package/dist/core/sync/peers.d.ts +1 -2
  27. package/dist/core/sync/peers.d.ts.map +1 -1
  28. package/dist/core/sync/server.d.ts.map +1 -1
  29. package/dist/core/sync/share-actions.d.ts +69 -0
  30. package/dist/core/sync/share-actions.d.ts.map +1 -0
  31. package/dist/core/sync/share-export.d.ts +72 -0
  32. package/dist/core/sync/share-export.d.ts.map +1 -0
  33. package/dist/core/sync/share-render.d.ts +10 -0
  34. package/dist/core/sync/share-render.d.ts.map +1 -0
  35. package/dist/core/sync/share-serve.d.ts +3 -0
  36. package/dist/core/sync/share-serve.d.ts.map +1 -0
  37. package/dist/core/sync/storage-s3-bun.d.ts +9 -0
  38. package/dist/core/sync/storage-s3-bun.d.ts.map +1 -1
  39. package/dist/core/sync/storage-url.d.ts +18 -0
  40. package/dist/core/sync/storage-url.d.ts.map +1 -0
  41. package/dist/db-worker.js +92 -62
  42. package/dist/index.js +19597 -17598
  43. package/dist/index.js.map +36 -29
  44. package/dist/sw.js +1 -1
  45. package/dist/webui/server/assets.d.ts.map +1 -1
  46. package/dist/webui/server/routes.d.ts.map +1 -1
  47. package/dist/webui/server/share-routes.d.ts +3 -0
  48. package/dist/webui/server/share-routes.d.ts.map +1 -0
  49. package/dist/webui.js +85 -58
  50. package/package.json +2 -1
package/dist/index.js.map CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "version": 3,
3
- "sources": ["../src/core/errors.ts", "../src/core/paths.ts", "../src/core/ids.ts", "../src/core/node.ts", "../src/core/hlc.ts", "../src/core/blocks.ts", "../src/core/crdt.ts", "../src/core/cache.ts", "../src/core/sites-core.ts", "../src/core/blobs-core.ts", "../src/core/sites.ts", "../node_modules/zod/v4/core/core.js", "../node_modules/zod/v4/core/util.js", "../node_modules/zod/v4/core/errors.js", "../node_modules/zod/v4/core/parse.js", "../node_modules/zod/v4/core/regexes.js", "../node_modules/zod/v4/core/checks.js", "../node_modules/zod/v4/core/doc.js", "../node_modules/zod/v4/core/versions.js", "../node_modules/zod/v4/core/schemas.js", "../node_modules/zod/v4/locales/ar.js", "../node_modules/zod/v4/locales/az.js", "../node_modules/zod/v4/locales/be.js", "../node_modules/zod/v4/locales/bg.js", "../node_modules/zod/v4/locales/ca.js", "../node_modules/zod/v4/locales/cs.js", "../node_modules/zod/v4/locales/da.js", "../node_modules/zod/v4/locales/de.js", "../node_modules/zod/v4/locales/el.js", "../node_modules/zod/v4/locales/en.js", "../node_modules/zod/v4/locales/eo.js", "../node_modules/zod/v4/locales/es.js", "../node_modules/zod/v4/locales/fa.js", "../node_modules/zod/v4/locales/fi.js", "../node_modules/zod/v4/locales/fr.js", "../node_modules/zod/v4/locales/fr-CA.js", "../node_modules/zod/v4/locales/he.js", "../node_modules/zod/v4/locales/hr.js", "../node_modules/zod/v4/locales/hu.js", "../node_modules/zod/v4/locales/hy.js", "../node_modules/zod/v4/locales/id.js", "../node_modules/zod/v4/locales/is.js", "../node_modules/zod/v4/locales/it.js", "../node_modules/zod/v4/locales/ja.js", "../node_modules/zod/v4/locales/ka.js", "../node_modules/zod/v4/locales/km.js", "../node_modules/zod/v4/locales/kh.js", "../node_modules/zod/v4/locales/ko.js", "../node_modules/zod/v4/locales/lt.js", "../node_modules/zod/v4/locales/mk.js", "../node_modules/zod/v4/locales/ms.js", "../node_modules/zod/v4/locales/nl.js", "../node_modules/zod/v4/locales/no.js", "../node_modules/zod/v4/locales/ota.js", "../node_modules/zod/v4/locales/ps.js", "../node_modules/zod/v4/locales/pl.js", "../node_modules/zod/v4/locales/pt.js", "../node_modules/zod/v4/locales/ro.js", "../node_modules/zod/v4/locales/ru.js", "../node_modules/zod/v4/locales/sl.js", "../node_modules/zod/v4/locales/sv.js", "../node_modules/zod/v4/locales/ta.js", "../node_modules/zod/v4/locales/th.js", "../node_modules/zod/v4/locales/tr.js", "../node_modules/zod/v4/locales/uk.js", "../node_modules/zod/v4/locales/ua.js", "../node_modules/zod/v4/locales/ur.js", "../node_modules/zod/v4/locales/uz.js", "../node_modules/zod/v4/locales/vi.js", "../node_modules/zod/v4/locales/zh-CN.js", "../node_modules/zod/v4/locales/zh-TW.js", "../node_modules/zod/v4/locales/yo.js", "../node_modules/zod/v4/locales/index.js", "../node_modules/zod/v4/core/registries.js", "../node_modules/zod/v4/core/api.js", "../node_modules/zod/v4/core/to-json-schema.js", "../node_modules/zod/v4/core/json-schema-processors.js", "../node_modules/zod/v4/core/json-schema-generator.js", "../node_modules/zod/v4/core/index.js", "../node_modules/zod/v4/classic/checks.js", "../node_modules/zod/v4/classic/iso.js", "../node_modules/zod/v4/classic/errors.js", "../node_modules/zod/v4/classic/parse.js", "../node_modules/zod/v4/classic/schemas.js", "../node_modules/zod/v4/classic/compat.js", "../node_modules/zod/v4/classic/from-json-schema.js", "../node_modules/zod/v4/classic/coerce.js", "../node_modules/zod/v4/classic/external.js", "../node_modules/zod/index.js", "../src/core/sync/protocol.ts", "../src/core/sync/client.ts", "../node_modules/aws4fetch/dist/aws4fetch.esm.mjs", "../src/core/sync/publisher-lease.ts", "../src/core/sync/e2ee.ts", "../src/core/sync/storage.ts", "../src/core/sync/storage-s3-bun.ts", "../src/core/sync/token.ts", "../src/core/config.ts", "../src/core/sync/sites-routes.ts", "../src/core/sync/peers.ts", "../src/core/sync/pairing.ts", "../src/core/sync/peers-routes.ts", "../src/core/blobs.ts", "../src/core/sync/blob-routes.ts", "../src/core/sync/routes.ts", "../src/core/sync/sites-serve.ts", "../src/core/index.ts", "../src/core/db.ts", "../src/core/schema.ts", "../src/core/records.ts", "../src/core/databases.ts", "../src/core/properties.ts", "../src/core/indexing.ts", "../src/core/resolve.ts", "../src/core/fracdex.ts", "../src/core/documents.ts", "../src/core/schema-init.ts", "../src/core/context.ts", "../src/core/search.ts", "../src/core/sync/server.ts", "../src/core/sync/openapi.ts", "../src/core/sync/auth.ts", "../src/webui/server/assets.ts", "../src/webui/server/icons.ts", "../src/webui/server/routes.ts", "../src/core/history.ts"],
3
+ "sources": ["../src/core/errors.ts", "../src/core/paths.ts", "../src/core/ids.ts", "../src/core/node.ts", "../src/core/hlc.ts", "../src/core/blocks.ts", "../src/core/crdt.ts", "../src/core/indexing.ts", "../src/core/properties.ts", "../src/core/databases.ts", "../src/core/resolve.ts", "../src/core/fracdex.ts", "../src/core/records.ts", "../src/core/documents.ts", "../src/core/blobs-core.ts", "../src/core/sync/storage-url.ts", "../src/core/cache.ts", "../src/core/sites-core.ts", "../node_modules/zod/v4/core/core.js", "../node_modules/zod/v4/core/util.js", "../node_modules/zod/v4/core/errors.js", "../node_modules/zod/v4/core/parse.js", "../node_modules/zod/v4/core/regexes.js", "../node_modules/zod/v4/core/checks.js", "../node_modules/zod/v4/core/doc.js", "../node_modules/zod/v4/core/versions.js", "../node_modules/zod/v4/core/schemas.js", "../node_modules/zod/v4/locales/ar.js", "../node_modules/zod/v4/locales/az.js", "../node_modules/zod/v4/locales/be.js", "../node_modules/zod/v4/locales/bg.js", "../node_modules/zod/v4/locales/ca.js", "../node_modules/zod/v4/locales/cs.js", "../node_modules/zod/v4/locales/da.js", "../node_modules/zod/v4/locales/de.js", "../node_modules/zod/v4/locales/el.js", "../node_modules/zod/v4/locales/en.js", "../node_modules/zod/v4/locales/eo.js", "../node_modules/zod/v4/locales/es.js", "../node_modules/zod/v4/locales/fa.js", "../node_modules/zod/v4/locales/fi.js", "../node_modules/zod/v4/locales/fr.js", "../node_modules/zod/v4/locales/fr-CA.js", "../node_modules/zod/v4/locales/he.js", "../node_modules/zod/v4/locales/hr.js", "../node_modules/zod/v4/locales/hu.js", "../node_modules/zod/v4/locales/hy.js", "../node_modules/zod/v4/locales/id.js", "../node_modules/zod/v4/locales/is.js", "../node_modules/zod/v4/locales/it.js", "../node_modules/zod/v4/locales/ja.js", "../node_modules/zod/v4/locales/ka.js", "../node_modules/zod/v4/locales/km.js", "../node_modules/zod/v4/locales/kh.js", "../node_modules/zod/v4/locales/ko.js", "../node_modules/zod/v4/locales/lt.js", "../node_modules/zod/v4/locales/mk.js", "../node_modules/zod/v4/locales/ms.js", "../node_modules/zod/v4/locales/nl.js", "../node_modules/zod/v4/locales/no.js", "../node_modules/zod/v4/locales/ota.js", "../node_modules/zod/v4/locales/ps.js", "../node_modules/zod/v4/locales/pl.js", "../node_modules/zod/v4/locales/pt.js", "../node_modules/zod/v4/locales/ro.js", "../node_modules/zod/v4/locales/ru.js", "../node_modules/zod/v4/locales/sl.js", "../node_modules/zod/v4/locales/sv.js", "../node_modules/zod/v4/locales/ta.js", "../node_modules/zod/v4/locales/th.js", "../node_modules/zod/v4/locales/tr.js", "../node_modules/zod/v4/locales/uk.js", "../node_modules/zod/v4/locales/ua.js", "../node_modules/zod/v4/locales/ur.js", "../node_modules/zod/v4/locales/uz.js", "../node_modules/zod/v4/locales/vi.js", "../node_modules/zod/v4/locales/zh-CN.js", "../node_modules/zod/v4/locales/zh-TW.js", "../node_modules/zod/v4/locales/yo.js", "../node_modules/zod/v4/locales/index.js", "../node_modules/zod/v4/core/registries.js", "../node_modules/zod/v4/core/api.js", "../node_modules/zod/v4/core/to-json-schema.js", "../node_modules/zod/v4/core/json-schema-processors.js", "../node_modules/zod/v4/core/json-schema-generator.js", "../node_modules/zod/v4/core/index.js", "../node_modules/zod/v4/classic/checks.js", "../node_modules/zod/v4/classic/iso.js", "../node_modules/zod/v4/classic/errors.js", "../node_modules/zod/v4/classic/parse.js", "../node_modules/zod/v4/classic/schemas.js", "../node_modules/zod/v4/classic/compat.js", "../node_modules/zod/v4/classic/from-json-schema.js", "../node_modules/zod/v4/classic/coerce.js", "../node_modules/zod/v4/classic/external.js", "../node_modules/zod/index.js", "../src/core/sync/protocol.ts", "../src/core/sync/client.ts", "../src/core/sync/publisher-lease.ts", "../src/core/sync/e2ee.ts", "../src/core/sync/storage.ts", "../src/core/sync/peers.ts", "../src/core/sync/token.ts", "../src/core/config.ts", "../src/core/blobs.ts", "../src/core/sites.ts", "../node_modules/aws4fetch/dist/aws4fetch.esm.mjs", "../src/core/sync/storage-s3-bun.ts", "../src/core/sync/sites-routes.ts", "../src/core/sync/pairing.ts", "../src/core/sync/peers-routes.ts", "../src/core/sync/blob-routes.ts", "../src/core/sync/routes.ts", "../src/core/sync/sites-serve.ts", "../src/core/shares.ts", "../src/core/sync/share-render.ts", "../src/core/sync/share-serve.ts", "../src/core/index.ts", "../src/core/db.ts", "../src/core/schema.ts", "../src/core/schema-init.ts", "../src/core/context.ts", "../src/core/search.ts", "../src/core/sync/server.ts", "../src/core/sync/openapi.ts", "../src/core/sync/auth.ts", "../src/webui/server/assets.ts", "../src/webui/server/icons.ts", "../src/webui/server/routes.ts", "../src/core/history.ts", "../src/webui/server/share-routes.ts", "../src/core/sync/share-actions.ts", "../src/core/sync/share-export.ts"],
4
4
  "sourcesContent": [
5
5
  "/**\n * Machine-readable error taxonomy — the contract between core and its callers.\n *\n * Agents and scripts dispatch on `code`, never on message text (messages may\n * be reworded freely). The CLI maps codes to exit codes (src/cli/output.ts)\n * and the HTTP layer maps them to status codes (src/webui/server/routes.ts),\n * so adding a code here is enough for both surfaces to pick it up.\n */\nexport type MhErrorCode =\n /** Bad arguments / refusing a request as stated (HTTP 400, exit 2). */\n | \"invalid_input\"\n /** Referenced entity does not exist (HTTP 404, exit 3). */\n | \"not_found\"\n /** A ref matched more than one entity — disambiguate and retry (exit 4). */\n | \"ambiguous\"\n /** Optimistic-concurrency failure: re-read, then retry (HTTP 409, exit 5). */\n | \"stale\"\n /** State conflict, e.g. a name that already exists (HTTP 409, exit 5). */\n | \"conflict\"\n /** Missing/invalid credentials (HTTP 401, exit 6). */\n | \"auth\"\n /** A remote peer was unreachable or replied non-OK — retryable (exit 7). */\n | \"network\"\n /** The requested listen port is taken (exit 98, historical). */\n | \"port_in_use\";\n\nexport class MhError extends Error {\n constructor(\n readonly code: MhErrorCode,\n message: string,\n ) {\n super(message);\n this.name = \"MhError\";\n }\n}\n\n/** The error's code, for errors that carry one (anything else → undefined). */\nexport function errorCode(e: unknown): MhErrorCode | undefined {\n return e instanceof MhError ? e.code : undefined;\n}\n",
6
6
  "import { homedir } from \"node:os\";\nimport { join } from \"node:path\";\n\nexport function metahubHome(): string {\n return process.env.METAHUB_HOME ?? join(homedir(), \".metahub\");\n}\n\nexport function dbPath(): string {\n return join(metahubHome(), \"metahub.db\");\n}\n\nexport function cacheDir(): string {\n return join(metahubHome(), \"cache\");\n}\n",
@@ -8,11 +8,18 @@
8
8
  "import type { DbDriver } from \"./driver.ts\";\nimport { randomSuffix } from \"./ids.ts\";\n\n/** Stable per-machine node id, persisted in the meta table. */\nexport function getNodeId(db: DbDriver): string {\n const row = db\n .query(\"SELECT value FROM meta WHERE key = 'node_id'\")\n .get() as { value: string } | null;\n if (row) return row.value;\n const id = randomSuffix(8);\n db.query(\"INSERT INTO meta (key, value) VALUES ('node_id', ?)\").run(id);\n return id;\n}\n",
9
9
  "import type { DbDriver } from \"./driver.ts\";\n\n// Hybrid Logical Clock. String form `<millis:15>-<counter:hex4>-<node>` so that\n// lexicographic order == causal/total order (ASCII, fixed-width numeric parts).\n\nexport interface Hlc {\n millis: number;\n counter: number;\n node: string;\n}\n\nexport function formatHlc(h: Hlc): string {\n return `${String(h.millis).padStart(15, \"0\")}-${h.counter\n .toString(16)\n .padStart(4, \"0\")}-${h.node}`;\n}\n\nexport function parseHlc(s: string): Hlc {\n const i1 = s.indexOf(\"-\");\n const i2 = s.indexOf(\"-\", i1 + 1);\n return {\n millis: Number(s.slice(0, i1)),\n counter: parseInt(s.slice(i1 + 1, i2), 16),\n node: s.slice(i2 + 1),\n };\n}\n\nfunction readLast(db: DbDriver, node: string): Hlc {\n const row = db.query(\"SELECT value FROM meta WHERE key = 'hlc'\").get() as\n | { value: string }\n | null;\n return row ? parseHlc(row.value) : { millis: 0, counter: 0, node };\n}\n\nfunction writeLast(db: DbDriver, h: Hlc): void {\n db.query(\n \"INSERT INTO meta (key, value) VALUES ('hlc', ?) ON CONFLICT(key) DO UPDATE SET value = excluded.value\",\n ).run(formatHlc(h));\n}\n\n/** Issue a new timestamp for a local event, advancing the persisted clock. */\nexport function nextHlc(db: DbDriver, node: string, now = Date.now()): string {\n const last = readLast(db, node);\n const millis = Math.max(last.millis, now);\n const counter = millis === last.millis ? last.counter + 1 : 0;\n const h: Hlc = { millis, counter, node };\n writeLast(db, h);\n return formatHlc(h);\n}\n\n/** Advance the local clock to account for an observed remote timestamp. */\nexport function observeHlc(\n db: DbDriver,\n node: string,\n remote: string,\n now = Date.now(),\n): void {\n const last = readLast(db, node);\n const r = parseHlc(remote);\n const millis = Math.max(last.millis, r.millis, now);\n let counter: number;\n if (millis === last.millis && millis === r.millis)\n counter = Math.max(last.counter, r.counter) + 1;\n else if (millis === last.millis) counter = last.counter + 1;\n else if (millis === r.millis) counter = r.counter + 1;\n else counter = 0;\n writeLast(db, { millis, counter, node });\n}\n",
10
10
  "// Pure markdown <-> block conversion and diffing. A document body is a sequence\n// of blocks separated by blank lines; fenced code blocks (``` / ~~~) are kept\n// whole so their internal blank lines don't split them. No DB dependency.\n\n/**\n * A document block plus the blank lines the user left after it. `blankAfter` is\n * the count *beyond* the standard single-blank-line separator (so a normal\n * paragraph break is 0); for the last block it's the trailing blank-line run.\n * This is what lets deliberate vertical spacing survive a save/reload without\n * representing blank lines as zero-content blocks (which would churn the\n * text-keyed reconcile). See [[blocks]] doc-block model.\n */\nexport interface DocBlock {\n text: string;\n blankAfter: number;\n}\n\n/**\n * Split markdown into doc blocks, preserving blank-line runs as `blankAfter`.\n * Leading blank lines (before the first block) are dropped; one blank line\n * between two blocks is the standard separator, every extra blank line is kept.\n */\nexport function parseDocBlocks(md: string): DocBlock[] {\n if (!md) return [];\n const lines = md.replace(/\\r\\n?/g, \"\\n\").split(\"\\n\");\n const blocks: DocBlock[] = [];\n let cur: string[] = [];\n let fenceChar: \"`\" | \"~\" | null = null;\n let fenceLen = 0;\n\n const closeBlock = () => {\n if (cur.length) {\n blocks.push({ text: cur.join(\"\\n\"), blankAfter: 0 });\n cur = [];\n }\n };\n const onBlank = () => {\n closeBlock();\n // Count toward the preceding block; a blank line before any block (leading\n // whitespace) has nowhere to attach and is dropped.\n if (blocks.length) blocks[blocks.length - 1]!.blankAfter++;\n };\n\n for (const raw of lines) {\n if (fenceChar) {\n cur.push(raw);\n const m = raw.match(/^\\s*(`{3,}|~{3,})\\s*$/);\n if (m && m[1]![0] === fenceChar && m[1]!.length >= fenceLen) {\n closeBlock();\n fenceChar = null;\n fenceLen = 0;\n }\n continue;\n }\n const open = raw.match(/^\\s*(`{3,}|~{3,})/);\n if (open) {\n closeBlock();\n fenceChar = open[1]![0] as \"`\" | \"~\";\n fenceLen = open[1]!.length;\n cur.push(raw);\n } else if (raw.trim() === \"\") {\n onBlank();\n } else {\n cur.push(raw);\n }\n }\n closeBlock(); // trailing paragraph or unterminated fence\n\n // Convert raw blank-line counts to \"extra beyond the standard separator\". The\n // last block keeps its raw count (trailing blanks have no following separator).\n for (let i = 0; i < blocks.length - 1; i++)\n blocks[i]!.blankAfter = Math.max(0, blocks[i]!.blankAfter - 1);\n return blocks;\n}\n\n/** Serialize doc blocks back to a body, re-emitting kept blank-line runs. */\nexport function serializeDocBlocks(\n blocks: readonly { text: string | null; blankAfter?: number }[],\n): string {\n const live = blocks.filter((b): b is { text: string; blankAfter?: number } => !!b.text && b.text.length > 0);\n const out: string[] = [];\n live.forEach((b, i) => {\n out.push(...b.text.split(\"\\n\"));\n const extra = Math.max(0, b.blankAfter ?? 0);\n if (i < live.length - 1) out.push(\"\"); // standard single-blank-line separator\n for (let k = 0; k < extra; k++) out.push(\"\");\n });\n return out.join(\"\\n\");\n}\n\nexport type ReconcileItem = { keep: number } | { insert: string };\nexport interface ReconcilePlan {\n /** The new block sequence, each item either reusing an old block or inserting text. */\n items: ReconcileItem[];\n /** Old block indices that are no longer present. */\n deleted: number[];\n}\n\n/**\n * Align a new sequence of block texts against the old one. Unchanged blocks\n * (exact text match, in order — the LCS) are kept by index so their identity and\n * order survive; everything else in a gap is a delete (old) or insert (new).\n */\nexport function reconcile(oldTexts: string[], newTexts: string[]): ReconcilePlan {\n const keep = lcs(oldTexts, newTexts);\n const keptOld = new Set(keep.map((p) => p[0]));\n const newToOld = new Map(keep.map((p) => [p[1], p[0]]));\n\n const items: ReconcileItem[] = newTexts.map((text, ni) =>\n newToOld.has(ni) ? { keep: newToOld.get(ni)! } : { insert: text },\n );\n const deleted: number[] = [];\n for (let oi = 0; oi < oldTexts.length; oi++)\n if (!keptOld.has(oi)) deleted.push(oi);\n\n return { items, deleted };\n}\n\n/** Longest common subsequence as aligned (oldIndex, newIndex) pairs. */\nfunction lcs(a: string[], b: string[]): [number, number][] {\n const m = a.length;\n const n = b.length;\n const dp: number[][] = Array.from({ length: m + 1 }, () =>\n new Array<number>(n + 1).fill(0),\n );\n for (let i = m - 1; i >= 0; i--)\n for (let j = n - 1; j >= 0; j--)\n dp[i]![j] =\n a[i] === b[j]\n ? dp[i + 1]![j + 1]! + 1\n : Math.max(dp[i + 1]![j]!, dp[i]![j + 1]!);\n\n const pairs: [number, number][] = [];\n let i = 0;\n let j = 0;\n while (i < m && j < n) {\n if (a[i] === b[j]) {\n pairs.push([i, j]);\n i++;\n j++;\n } else if (dp[i + 1]![j]! >= dp[i]![j + 1]!) {\n i++;\n } else {\n j++;\n }\n }\n return pairs;\n}\n",
11
- "import type { DbDriver } from \"./driver.ts\";\nimport { getNodeId } from \"./node.ts\";\nimport { nextHlc, observeHlc } from \"./hlc.ts\";\nimport { serializeDocBlocks } from \"./blocks.ts\";\nimport { randomSuffix } from \"./ids.ts\";\nimport type { ColumnsOf } from \"./sqlcols.ts\";\n\n// A single field assignment — the unit of replication. `value` is JSON-encoded\n// (or null). `dataset`/`row_id`/`col` identify the CRDT register. `txn` groups\n// the changes of one logical mutation (one save / one API call) so history can\n// render them as a single revision; it replicates but plays no role in LWW.\nexport interface Change {\n hlc: string;\n node_id: string;\n dataset: string;\n row_id: string;\n col: string;\n value: string | null;\n txn?: string | null;\n}\n\n/** Oplog SELECT list, locked to the Change interface (also reused by history). */\nexport const CHANGE_COLS = [\"hlc\", \"node_id\", \"dataset\", \"row_id\", \"col\", \"value\", \"txn\"] as const;\nconst _changeCols: ColumnsOf<Change, typeof CHANGE_COLS> = CHANGE_COLS;\nexport const CHANGE_SELECT = CHANGE_COLS.join(\", \");\n\n// Current change group. Core mutations are synchronous and single-threaded, so\n// a module-level slot (set around each public mutator via grouped()) is enough.\nlet currentTxn: string | null = null;\n\n/**\n * Run `fn` with all emits stamped with one shared txn id. Nested calls keep the\n * outermost group (a revert that calls updateDocument is ONE revision). `label`\n * prefixes the id (\"repair:\", \"revert:\") so history can classify the source.\n */\nexport function withChangeGroup<T>(label: string | null, fn: () => T): T {\n if (currentTxn !== null) return fn();\n currentTxn = (label ? label + \":\" : \"\") + randomSuffix(8);\n try {\n return fn();\n } finally {\n currentTxn = null;\n }\n}\n\n/** Wrap a mutator so its body runs inside one change group. */\nexport function grouped<A extends unknown[], R>(\n fn: (...args: A) => R,\n label: string | null = null,\n): (...args: A) => R {\n return (...args) => withChangeGroup(label, () => fn(...args));\n}\n\n// Domain tables addressable by id, with their write-allowed columns. `col` is\n// interpolated into SQL, so it MUST be validated against these allowlists\n// (changes can arrive from untrusted sync peers).\nconst DOMAIN: Record<string, { table: string; cols: Set<string> }> = {\n databases: {\n table: \"databases\",\n cols: new Set([\"name\", \"icon\", \"created_hlc\", \"__deleted\"]),\n },\n properties: {\n table: \"properties\",\n cols: new Set([\"database_id\", \"name\", \"type\", \"config\", \"position\", \"__deleted\"]),\n },\n documents: {\n table: \"documents\",\n cols: new Set([\"title\", \"body\", \"database_id\", \"parent_id\", \"created_hlc\", \"order_key\", \"__deleted\"]),\n },\n doc_blocks: {\n table: \"doc_blocks\",\n cols: new Set([\"doc_id\", \"text\", \"order_key\", \"blank_after\", \"__deleted\"]),\n },\n sites: {\n table: \"sites\",\n cols: new Set([\"name\", \"title\", \"created_hlc\", \"__deleted\"]),\n },\n site_files: {\n table: \"site_files\",\n cols: new Set([\n \"site_id\",\n \"path\",\n \"content_type\",\n \"encoding\",\n \"content\",\n \"created_hlc\",\n \"__deleted\",\n ]),\n },\n // blob_policy designates the durable full-blob device(s); it replicates so\n // every node agrees on the anchor. blob_cache (incl. the local `pending` gate\n // that governs clearing) is node-local and deliberately absent — clearing is\n // decided purely locally, never synced. (The old synced blob_presence is gone.)\n blob_policy: {\n table: \"blob_policy\",\n cols: new Set([\"full_nodes\", \"redundancy\", \"__deleted\"]),\n },\n};\n\n// The `records` dataset is special: these cols hit the `records` table, any\n// other col is a property cell (col == property id) folded into records.data JSON.\nconst RECORD_META = new Set([\"database_id\", \"created_hlc\", \"order_key\", \"__deleted\"]);\n\ntype SqlValue = string | number | null;\n\nfunction encodeScalar(val: unknown): SqlValue {\n if (val === null || val === undefined) return null;\n if (typeof val === \"boolean\") return val ? 1 : 0;\n if (typeof val === \"number\") return val;\n if (typeof val === \"string\") return val;\n return JSON.stringify(val);\n}\n\nfunction ensureRow(db: DbDriver, table: string, id: string): void {\n db.query(`INSERT OR IGNORE INTO ${table} (id) VALUES (?)`).run(id);\n}\n\n/** A doc is \"block-managed\" once it has any block row; blocks then own its body. */\nfunction isBlockManaged(db: DbDriver, docId: string): boolean {\n return (\n db.query(\"SELECT 1 AS x FROM doc_blocks WHERE doc_id = ? LIMIT 1\").get(docId) !=\n null\n );\n}\n\n/** Rebuild a document's materialized body from its live blocks (ordered). */\nfunction recomputeDocBody(db: DbDriver, docId: string): void {\n const rows = db\n .query(\n \"SELECT text, blank_after FROM doc_blocks WHERE doc_id = ? AND __deleted = 0 ORDER BY order_key, id\",\n )\n .all(docId) as { text: string | null; blank_after: number | null }[];\n ensureRow(db, \"documents\", docId);\n db.query(\"UPDATE documents SET body = ? WHERE id = ?\").run(\n serializeDocBlocks(rows.map((r) => ({ text: r.text, blankAfter: r.blank_after ?? 0 }))),\n docId,\n );\n}\n\nfunction materialize(\n db: DbDriver,\n dataset: string,\n rowId: string,\n col: string,\n valueJson: string | null,\n): void {\n if (dataset === \"records\") {\n if (RECORD_META.has(col)) {\n ensureRow(db, \"records\", rowId);\n const v = valueJson === null ? null : JSON.parse(valueJson);\n db.query(`UPDATE records SET \"${col}\" = ? WHERE id = ?`).run(\n encodeScalar(v),\n rowId,\n );\n } else {\n // Property cell -> a key in the record's JSON `data`. ensureRow first:\n // a cell write can arrive before database_id (out-of-order sync).\n ensureRow(db, \"records\", rowId);\n if (valueJson === null) {\n db.query(\n `UPDATE records SET data = json_remove(data, '$.\"' || ? || '\"') WHERE id = ?`,\n ).run(col, rowId);\n } else {\n // json(?) embeds the value with its real JSON type (number/array/object),\n // not as a quoted string.\n db.query(\n `UPDATE records SET data = json_set(coalesce(data, '{}'), '$.\"' || ? || '\"', json(?)) WHERE id = ?`,\n ).run(col, valueJson, rowId);\n }\n }\n return;\n }\n\n const d = DOMAIN[dataset];\n if (!d || !d.cols.has(col)) return; // unknown dataset/column -> ignore (forward-compat)\n\n // Legacy documents.body register is ignored once the doc is block-managed:\n // blocks are authoritative and recompute the body cache themselves.\n if (dataset === \"documents\" && col === \"body\" && isBlockManaged(db, rowId)) return;\n\n ensureRow(db, d.table, rowId);\n const v = valueJson === null ? null : JSON.parse(valueJson);\n db.query(`UPDATE ${d.table} SET \"${col}\" = ? WHERE id = ?`).run(\n encodeScalar(v),\n rowId,\n );\n\n // A block change re-derives its document's body cache. doc_id may not have\n // materialized yet (out-of-order sync) — the later doc_id write recomputes.\n if (dataset === \"doc_blocks\") {\n const blk = db\n .query(\"SELECT doc_id FROM doc_blocks WHERE id = ?\")\n .get(rowId) as { doc_id: string | null } | null;\n if (blk?.doc_id) recomputeDocBody(db, blk.doc_id);\n }\n}\n\n/** Outcome of applying one change to the oplog. `inserted` reports whether the\n * oplog actually gained a NEW row (false when we already had this exact change —\n * the INSERT OR IGNORE was a no-op); it is the honest \"did we receive new data\"\n * signal, distinct from `winner` (whether this change now wins its register and\n * was materialized). Re-applying a change we already hold still returns\n * `winner:true` if it's the current max-HLC, so callers that want progress (not\n * re-materialization) must key off `inserted`. */\nexport interface ApplyResult {\n inserted: boolean;\n winner: boolean;\n}\n\n/**\n * Record a change in the oplog (idempotent) and, if it is the latest write for\n * its register, materialize it. Order-independent: convergence holds regardless\n * of the order changes are applied, because the winner is recomputed as the max\n * HLC over the full oplog for that register.\n */\nexport function applyChange(db: DbDriver, c: Change): ApplyResult {\n const inserted =\n db\n .query(\n \"INSERT OR IGNORE INTO crdt_changes (hlc, node_id, dataset, row_id, col, value, txn) VALUES (?, ?, ?, ?, ?, ?, ?)\",\n )\n .run(c.hlc, c.node_id, c.dataset, c.row_id, c.col, c.value, c.txn ?? null).changes > 0;\n\n const cur = db\n .query(\n \"SELECT MAX(hlc) AS h FROM crdt_changes WHERE dataset = ? AND row_id = ? AND col = ?\",\n )\n .get(c.dataset, c.row_id, c.col) as { h: string | null };\n\n if (cur.h !== c.hlc) return { inserted, winner: false }; // a newer write already wins\n materialize(db, c.dataset, c.row_id, c.col, c.value);\n return { inserted, winner: true };\n}\n\n/** Apply a local write: assign a fresh HLC, append to oplog, materialize. */\nexport function emit(\n db: DbDriver,\n dataset: string,\n rowId: string,\n col: string,\n value: unknown,\n): Change {\n const node = getNodeId(db);\n const change: Change = {\n hlc: nextHlc(db, node),\n node_id: node,\n dataset,\n row_id: rowId,\n col,\n value: value === undefined ? null : JSON.stringify(value),\n txn: currentTxn,\n };\n applyChange(db, change);\n return change;\n}\n\n/** Apply multiple local field writes to the same row. */\nexport function emitFields(\n db: DbDriver,\n dataset: string,\n rowId: string,\n fields: Record<string, unknown>,\n): Change[] {\n const out: Change[] = [];\n for (const [col, value] of Object.entries(fields)) {\n out.push(emit(db, dataset, rowId, col, value));\n }\n return out;\n}\n\n/** Apply remote changes from a sync peer (advances clock, then merges). Returns\n * the number of changes that were NEW to our oplog (rows actually inserted) —\n * the honest \"received\" count. Re-ingesting data we already hold returns 0, so\n * this is a reliable progress signal for the auto-sync backoff (a round that\n * only re-reads known data must not count as activity). */\nexport function ingest(db: DbDriver, changes: Change[]): number {\n const node = getNodeId(db);\n let received = 0;\n const tx = db.transaction((cs: Change[]) => {\n for (const c of cs) {\n observeHlc(db, node, c.hlc);\n if (applyChange(db, c).inserted) received++;\n }\n });\n tx(changes);\n return received;\n}\n\n/** All oplog changes with HLC strictly greater than `since` (test/debug helper). */\nexport function changesSince(db: DbDriver, since: string): Change[] {\n return db\n .query(`SELECT ${CHANGE_SELECT} FROM crdt_changes WHERE hlc > ? ORDER BY hlc`)\n .all(since) as Change[];\n}\n\nexport interface ChangeBatch {\n changes: Change[];\n cursor: number;\n}\n\nexport interface ChangesAfterOpts {\n /** Max rows to return — pagination for large pulls (initial hydration). */\n limit?: number;\n /** Datasets to omit (partial replicas, e.g. a phone skipping site_files). */\n excludeDatasets?: string[];\n /**\n * Return only changes this node produced itself. Storage-sync (see\n * sync/storage.ts) publishes each node's own ops under its own bucket prefix,\n * so it must not re-upload ops it merely ingested from peers. The cursor still\n * advances over the filtered-out rows (high-water on exhaustion), so ingested\n * ops are skipped once, not rescanned every round.\n */\n onlyNode?: string;\n}\n\n/**\n * Changes inserted after `seq` (a local rowid), in insertion order, plus the\n * new high-water cursor. Used for replication: insertion order never skips a\n * change even when clocks are skewed.\n *\n * With `limit`, the cursor stops at the last returned row so the next pull\n * resumes there; when the scan is exhausted (fewer rows than the limit, or no\n * limit) the cursor jumps to the table's high-water rowid so excluded-dataset\n * tails aren't rescanned every round.\n */\nexport function changesAfterSeq(\n db: DbDriver,\n seq: number,\n opts: ChangesAfterOpts = {},\n): ChangeBatch {\n const exclude = opts.excludeDatasets ?? [];\n const clauses = [\"rowid > ?\"];\n const params: (string | number)[] = [seq];\n if (exclude.length) {\n clauses.push(`dataset NOT IN (${exclude.map(() => \"?\").join(\", \")})`);\n params.push(...exclude);\n }\n if (opts.onlyNode != null) {\n clauses.push(\"node_id = ?\");\n params.push(opts.onlyNode);\n }\n const where = clauses.join(\" AND \");\n const limitSql = opts.limit != null && opts.limit > 0 ? ` LIMIT ${Math.floor(opts.limit)}` : \"\";\n const rows = db\n .query(\n `SELECT rowid AS seq, ${CHANGE_SELECT} FROM crdt_changes WHERE ${where} ORDER BY rowid${limitSql}`,\n )\n .all(...params) as (Change & { seq: number })[];\n\n const exhausted = opts.limit == null || opts.limit <= 0 || rows.length < opts.limit;\n let cursor: number;\n if (exhausted) {\n // High-water on exhaustion. crdt_changes.seq is an AUTOINCREMENT PK (rowid\n // alias), stable across VACUUM and never reused, so MAX(rowid) no longer\n // drops below a cursor a client already holds — the Math.max is now just a\n // defensive floor (was load-bearing before the seq migration, see\n // migrateCrdtChangesSeq).\n const top = db.query(\"SELECT MAX(rowid) AS m FROM crdt_changes\").get() as { m: number | null };\n cursor = Math.max(seq, top.m ?? seq);\n } else {\n cursor = rows[rows.length - 1]!.seq;\n }\n return { changes: rows.map(({ seq: _seq, ...c }) => c), cursor };\n}\n",
12
- "import { join } from \"node:path\";\nimport { cacheDir } from \"./paths.ts\";\n\nexport interface BlobInfo {\n hash: string;\n path: string;\n size: number;\n}\n\nexport function blobPath(hash: string): string {\n return join(cacheDir(), hash);\n}\n\n/** Content key length: sha256 truncated to 128 bits (32 hex). Shorter keys keep\n * doc markdown (`![](/blob/<hash>.png)`) readable; collision is negligible.\n * Addressing stays length-agnostic, so legacy full 64-hex refs still resolve. */\nexport const BLOB_HASH_HEX = 32;\n\n/** Full sha256 hex of the bytes. */\nexport function sha256Hex(bytes: Uint8Array): string {\n const hasher = new Bun.CryptoHasher(\"sha256\");\n hasher.update(bytes);\n return hasher.digest(\"hex\");\n}\n\n/** Canonical content hash for new blobs: sha256 of the bytes, truncated. */\nexport function blobHash(bytes: Uint8Array): string {\n return sha256Hex(bytes).slice(0, BLOB_HASH_HEX);\n}\n\n/** Verify fetched bytes match a content reference of either length (canonical\n * 32-hex or legacy 64-hex) — the ref is always a prefix of the full sha256. */\nexport function verifyBlobBytes(bytes: Uint8Array, hash: string): boolean {\n return sha256Hex(bytes).slice(0, hash.length) === hash;\n}\n\n/** Store bytes content-addressed under cache/. Returns its hash + path. */\nexport async function putBlob(data: ArrayBuffer | Uint8Array | string): Promise<BlobInfo> {\n const bytes =\n typeof data === \"string\"\n ? new TextEncoder().encode(data)\n : data instanceof Uint8Array\n ? data\n : new Uint8Array(data);\n const hash = blobHash(bytes);\n const path = blobPath(hash);\n if (!(await Bun.file(path).exists())) await Bun.write(path, bytes);\n return { hash, path, size: bytes.byteLength };\n}\n\nexport async function getBlob(hash: string): Promise<Uint8Array | null> {\n const file = Bun.file(blobPath(hash));\n if (!(await file.exists())) return null;\n return new Uint8Array(await file.arrayBuffer());\n}\n\n/** Store bytes under a GIVEN content hash (not recomputed) — for caching a blob\n * fetched from a peer/bucket by its reference, which may be a legacy 64-hex hash\n * that putBlob's truncation would not reproduce. Returns the byte length. */\nexport async function putBlobAt(hash: string, bytes: Uint8Array): Promise<number> {\n const path = blobPath(hash);\n if (!(await Bun.file(path).exists())) await Bun.write(path, bytes);\n return bytes.byteLength;\n}\n\n/** Remove a blob's bytes from the cache. Returns its size, or 0 if absent. */\nexport async function deleteBlob(hash: string): Promise<number> {\n const file = Bun.file(blobPath(hash));\n if (!(await file.exists())) return 0;\n const size = file.size;\n await file.delete();\n return size;\n}\n",
13
- "// Portable (driver-only) half of the sites feature: types, name/path\n// canonicalization, MIME inference, and read paths. Split from sites.ts so the\n// browser replica's worker can serve site files offline without pulling the\n// blob store (cache.ts → node:fs) into a browser bundle. sites.ts re-exports\n// everything here — server-side callers keep importing from sites.ts.\n\nimport type { DbDriver } from \"./driver.ts\";\nimport { MhError } from \"./errors.ts\";\nimport { emit, grouped, withChangeGroup } from \"./crdt.ts\";\nimport { newId } from \"./ids.ts\";\nimport type { ColumnsOf } from \"./sqlcols.ts\";\n\nexport interface SiteRow {\n id: string;\n name: string;\n title: string | null;\n created_hlc: string;\n}\n\nexport const SITE_COLS = [\"id\", \"name\", \"title\", \"created_hlc\"] as const;\nconst _siteCols: ColumnsOf<SiteRow, typeof SITE_COLS> = SITE_COLS;\nconst SITE_SELECT = SITE_COLS.join(\", \");\n\nexport type FileEncoding = \"utf8\" | \"base64\" | \"blob\";\n\nexport interface SiteFileRow {\n id: string;\n site_id: string;\n path: string;\n content_type: string;\n encoding: FileEncoding;\n /** Inline text/base64, or a blob hash when encoding === \"blob\". */\n content: string | null;\n}\n\n/** Manifest entry — file metadata without the (potentially large) content. */\nexport type SiteFileSummary = Omit<SiteFileRow, \"content\">;\n\nexport const SITE_FILE_COLS = [\n \"id\", \"site_id\", \"path\", \"content_type\", \"encoding\", \"content\",\n] as const;\nconst _siteFileCols: ColumnsOf<SiteFileRow, typeof SITE_FILE_COLS> = SITE_FILE_COLS;\nexport const SITE_FILE_SELECT = SITE_FILE_COLS.join(\", \");\n\n// ---- mime / encoding helpers -----------------------------------------------\n\nconst MIME: Record<string, string> = {\n html: \"text/html; charset=utf-8\",\n htm: \"text/html; charset=utf-8\",\n css: \"text/css; charset=utf-8\",\n js: \"text/javascript; charset=utf-8\",\n mjs: \"text/javascript; charset=utf-8\",\n json: \"application/json; charset=utf-8\",\n svg: \"image/svg+xml\",\n txt: \"text/plain; charset=utf-8\",\n md: \"text/markdown; charset=utf-8\",\n xml: \"application/xml; charset=utf-8\",\n webmanifest: \"application/manifest+json\",\n ico: \"image/x-icon\",\n png: \"image/png\",\n jpg: \"image/jpeg\",\n jpeg: \"image/jpeg\",\n gif: \"image/gif\",\n webp: \"image/webp\",\n avif: \"image/avif\",\n woff: \"font/woff\",\n woff2: \"font/woff2\",\n ttf: \"font/ttf\",\n otf: \"font/otf\",\n pdf: \"application/pdf\",\n wasm: \"application/wasm\",\n};\n\n/** Guess a content type from a file path's extension; default octet-stream. */\nexport function inferContentType(path: string): string {\n const ext = path.slice(path.lastIndexOf(\".\") + 1).toLowerCase();\n return MIME[ext] ?? \"application/octet-stream\";\n}\n\n// ---- name / path normalization ---------------------------------------------\n\n/**\n * Canonical site slug: lowercase, [a-z0-9-] only, no leading/trailing/repeated\n * dashes. Applied at every write and lookup so the served URL (/sites/<name>/),\n * duplicate detection, and sync replication all agree on one form regardless of\n * how the name was typed (CLI, API, or browser). Throws when nothing usable\n * remains (empty, or all-punctuation). Matches the WebUI's slugify exactly.\n */\nexport function normalizeSiteName(raw: string): string {\n const slug = raw\n .trim()\n .toLowerCase()\n .replace(/[^a-z0-9-]+/g, \"-\")\n .replace(/^-+|-+$/g, \"\");\n if (!slug) throw new MhError(\"invalid_input\", `invalid site name: ${JSON.stringify(raw)}`);\n return slug;\n}\n\n/**\n * Canonical in-site file path: drop empty / \".\" segments, resolve \"..\" within\n * the bucket, strip leading and duplicate slashes. Files live in SQLite keyed by\n * this exact string (there is no filesystem behind them), so normalizing at the\n * write/serve boundary keeps storage, URL routing, and deletes consistent no\n * matter how the path was typed or percent-encoded. May return \"\" (caller decides).\n */\nexport function normalizeSitePath(raw: string): string {\n const segs: string[] = [];\n for (const seg of raw.split(\"/\")) {\n if (seg === \"\" || seg === \".\") continue;\n if (seg === \"..\") segs.pop();\n else segs.push(seg);\n }\n return segs.join(\"/\");\n}\n\n// ---- read paths --------------------------------------------------------------\n\nexport function getSite(db: DbDriver, id: string): SiteRow | null {\n return db\n .query(`SELECT ${SITE_SELECT} FROM sites WHERE id = ? AND __deleted = 0`)\n .get(id) as SiteRow | null;\n}\n\n/** Most recently created live site with this name (URL routing). */\nexport function getSiteByName(db: DbDriver, name: string): SiteRow | null {\n // Normalize so lookups, dedup, and URL routing all key off the canonical slug\n // (e.g. \"Demo\" and \"demo\" collide). An unusable name simply matches nothing.\n let slug: string;\n try {\n slug = normalizeSiteName(name);\n } catch {\n return null;\n }\n return db\n .query(\n `SELECT ${SITE_SELECT} FROM sites WHERE name = ? AND __deleted = 0 ORDER BY created_hlc DESC LIMIT 1`,\n )\n .get(slug) as SiteRow | null;\n}\n\nexport function listSites(db: DbDriver): SiteRow[] {\n return db\n .query(`SELECT ${SITE_SELECT} FROM sites WHERE __deleted = 0 ORDER BY created_hlc`)\n .all() as SiteRow[];\n}\n\n/** Resolve a site ref (`site_…` id or name) to its row, or throw. */\nexport function resolveSite(db: DbDriver, ref: string): SiteRow {\n const byId = ref.startsWith(\"site_\") ? getSite(db, ref) : null;\n const site = byId ?? getSiteByName(db, ref);\n if (!site) throw new MhError(\"not_found\", `no such site: ${ref}`);\n return site;\n}\n\n/**\n * Portable half of file serving: canonical path resolution (\"\" / trailing \"/\"\n * → index.html, same normalization putFile stored under) + the raw row. Used\n * directly by the browser replica's worker, which must decode utf8/base64\n * itself and cannot reach \"blob\" content at all (blob bytes live in the\n * server's on-disk store, not the oplog — they don't replicate).\n */\nexport function getFileRow(\n db: DbDriver,\n siteId: string,\n path: string,\n): { content_type: string; encoding: FileEncoding; content: string | null } | null {\n // Resolve directory-style requests to index.html *before* normalizing (the\n // trailing-slash signal is lost once empty segments are dropped).\n const withIndex = path === \"\" || path.endsWith(\"/\") ? `${path}index.html` : path;\n const p = normalizeSitePath(withIndex);\n if (!p) return null;\n return db\n .query(\n \"SELECT content_type, encoding, content FROM site_files WHERE site_id = ? AND path = ? AND __deleted = 0 ORDER BY created_hlc LIMIT 1\",\n )\n .get(siteId, p) as { content_type: string; encoding: FileEncoding; content: string | null } | null;\n}\n\nexport function listFiles(db: DbDriver, siteId: string): SiteFileSummary[] {\n return db\n .query(\n \"SELECT id, site_id, path, content_type, encoding FROM site_files WHERE site_id = ? AND __deleted = 0 ORDER BY path\",\n )\n .all(siteId) as SiteFileSummary[];\n}\n\n// ---- portable mutations -----------------------------------------------------\n// All write through emit() so sites replicate over the oplog. These are\n// driver-only (no node:fs / blob store), so the browser replica can author\n// sites offline too — large-binary blob storage is the one server-only piece\n// (see putFile in sites.ts).\n\n/** Binaries at or below this size store inline (base64); larger need a blob. */\nexport const INLINE_LIMIT = 256 * 1024;\n\n/** Text-ish types store as readable utf8; everything else is binary. */\nexport function isTextType(contentType: string): boolean {\n const ct = contentType.toLowerCase();\n return (\n ct.startsWith(\"text/\") ||\n ct.startsWith(\"application/json\") ||\n ct.startsWith(\"application/manifest+json\") ||\n ct.startsWith(\"application/xml\") ||\n ct.startsWith(\"application/javascript\") ||\n ct.startsWith(\"image/svg+xml\")\n );\n}\n\n/** Raster image types (svg is text, handled by isTextType). These always store\n * as a content-addressed blob regardless of size — they never base64-inline\n * into the oplog, keeping replicas lean. */\nexport function isImageType(contentType: string): boolean {\n return contentType.toLowerCase().startsWith(\"image/\") && !isTextType(contentType);\n}\n\nexport function toBytes(data: string | Uint8Array | ArrayBuffer): Uint8Array {\n if (typeof data === \"string\") return new TextEncoder().encode(data);\n return data instanceof Uint8Array ? data : new Uint8Array(data);\n}\n\n/** Portable base64 (no Buffer): for inline small-binary file content. */\nfunction bytesToBase64(bytes: Uint8Array): string {\n let s = \"\";\n for (let i = 0; i < bytes.length; i++) s += String.fromCharCode(bytes[i]!);\n return btoa(s);\n}\n\nexport const createSite = grouped(function createSite(\n db: DbDriver,\n opts: { name: string; title?: string },\n): SiteRow {\n const name = normalizeSiteName(opts.name);\n if (getSiteByName(db, name)) throw new MhError(\"conflict\", `site name already exists: ${name}`);\n const id = newId(\"site\", name);\n const first = emit(db, \"sites\", id, \"name\", name);\n emit(db, \"sites\", id, \"created_hlc\", first.hlc);\n if (opts.title !== undefined) emit(db, \"sites\", id, \"title\", opts.title);\n return getSite(db, id)!;\n});\n\n/** Rename a site and/or change its title. Guards against duplicate names. */\nexport const updateSite = grouped(function updateSite(\n db: DbDriver,\n id: string,\n opts: { name?: string; title?: string },\n): SiteRow {\n if (!getSite(db, id)) throw new MhError(\"not_found\", `no such site: ${id}`);\n if (opts.name !== undefined) {\n const name = normalizeSiteName(opts.name);\n const dup = getSiteByName(db, name);\n if (dup && dup.id !== id) throw new MhError(\"conflict\", `site name already exists: ${name}`);\n emit(db, \"sites\", id, \"name\", name);\n }\n if (opts.title !== undefined) emit(db, \"sites\", id, \"title\", opts.title);\n return getSite(db, id)!;\n});\n\nexport const deleteSite = grouped(function deleteSite(db: DbDriver, id: string): boolean {\n if (!getSite(db, id)) return false;\n const files = db\n .query(\"SELECT id FROM site_files WHERE site_id = ? AND __deleted = 0\")\n .all(id) as { id: string }[];\n for (const f of files) emit(db, \"site_files\", f.id, \"__deleted\", 1);\n emit(db, \"sites\", id, \"__deleted\", 1);\n return true;\n});\n\n/** Stable id for a (site, path) pair so re-uploads merge instead of duplicate. */\nexport function fileIdFor(db: DbDriver, siteId: string, path: string): string | null {\n const row = db\n .query(\"SELECT id FROM site_files WHERE site_id = ? AND path = ? ORDER BY created_hlc LIMIT 1\")\n .get(siteId, path) as { id: string } | null;\n return row?.id ?? null;\n}\n\n/** Emit the register writes for one file (shared by inline + blob put paths). */\nexport function writeFileRow(\n db: DbDriver,\n siteId: string,\n cleanPath: string,\n contentType: string,\n encoding: FileEncoding,\n content: string,\n): SiteFileRow {\n const existing = fileIdFor(db, siteId, cleanPath);\n const id = existing ?? newId(\"sf\", cleanPath);\n withChangeGroup(null, () => {\n if (!existing) {\n const first = emit(db, \"site_files\", id, \"site_id\", siteId);\n emit(db, \"site_files\", id, \"path\", cleanPath);\n emit(db, \"site_files\", id, \"created_hlc\", first.hlc);\n }\n emit(db, \"site_files\", id, \"content_type\", contentType);\n emit(db, \"site_files\", id, \"encoding\", encoding);\n emit(db, \"site_files\", id, \"content\", content);\n emit(db, \"site_files\", id, \"__deleted\", 0); // un-delete on re-upload\n });\n return db.query(`SELECT ${SITE_FILE_SELECT} FROM site_files WHERE id = ?`).get(id) as SiteFileRow;\n}\n\n/**\n * Upload/replace one file inline (utf8 text or small base64 binary) — portable,\n * so the browser replica authors sites offline. Binaries over INLINE_LIMIT need\n * the server-only blob store; here they throw (sites.ts putFile handles them).\n */\nexport function putFileInline(\n db: DbDriver,\n siteId: string,\n path: string,\n opts: { data: string | Uint8Array | ArrayBuffer; contentType?: string },\n): SiteFileRow {\n const cleanPath = normalizeSitePath(path);\n if (!cleanPath) throw new MhError(\"invalid_input\", `invalid file path: ${JSON.stringify(path)}`);\n const contentType = opts.contentType ?? inferContentType(cleanPath);\n let encoding: FileEncoding;\n let content: string;\n if (isTextType(contentType)) {\n encoding = \"utf8\";\n content = typeof opts.data === \"string\" ? opts.data : new TextDecoder().decode(toBytes(opts.data));\n } else {\n const bytes = toBytes(opts.data);\n if (bytes.byteLength > INLINE_LIMIT)\n throw new MhError(\n \"invalid_input\",\n \"binary too large for inline storage (needs a server-backed blob)\",\n );\n encoding = \"base64\";\n content = bytesToBase64(bytes);\n }\n return writeFileRow(db, siteId, cleanPath, contentType, encoding, content);\n}\n\nexport const deleteFile = grouped(function deleteFile(\n db: DbDriver,\n siteId: string,\n path: string,\n): boolean {\n const id = fileIdFor(db, siteId, normalizeSitePath(path));\n if (!id) return false;\n const live = db.query(\"SELECT __deleted AS d FROM site_files WHERE id = ?\").get(id) as {\n d: number;\n } | null;\n if (!live || live.d) return false;\n emit(db, \"site_files\", id, \"__deleted\", 1);\n return true;\n});\n\n/** Count of live files per site (for the management list's file_count). */\nexport function fileCount(db: DbDriver, siteId: string): number {\n return (\n db\n .query(\"SELECT COUNT(*) AS n FROM site_files WHERE site_id = ? AND __deleted = 0\")\n .get(siteId) as { n: number }\n ).n;\n}\n",
11
+ "import type { DbDriver } from \"./driver.ts\";\nimport { getNodeId } from \"./node.ts\";\nimport { nextHlc, observeHlc } from \"./hlc.ts\";\nimport { serializeDocBlocks } from \"./blocks.ts\";\nimport { randomSuffix } from \"./ids.ts\";\nimport type { ColumnsOf } from \"./sqlcols.ts\";\n\n// A single field assignment — the unit of replication. `value` is JSON-encoded\n// (or null). `dataset`/`row_id`/`col` identify the CRDT register. `txn` groups\n// the changes of one logical mutation (one save / one API call) so history can\n// render them as a single revision; it replicates but plays no role in LWW.\nexport interface Change {\n hlc: string;\n node_id: string;\n dataset: string;\n row_id: string;\n col: string;\n value: string | null;\n txn?: string | null;\n}\n\n/** Oplog SELECT list, locked to the Change interface (also reused by history). */\nexport const CHANGE_COLS = [\"hlc\", \"node_id\", \"dataset\", \"row_id\", \"col\", \"value\", \"txn\"] as const;\nconst _changeCols: ColumnsOf<Change, typeof CHANGE_COLS> = CHANGE_COLS;\nexport const CHANGE_SELECT = CHANGE_COLS.join(\", \");\n\n// Current change group. Core mutations are synchronous and single-threaded, so\n// a module-level slot (set around each public mutator via grouped()) is enough.\nlet currentTxn: string | null = null;\n\n// Optional node-id override for the next emits, same single-threaded-mutator\n// assumption as currentTxn above. Used by edit-share write handlers so a write\n// made through a public share is attributed to that share's synthetic \"guest\"\n// node (see core/shares.ts, sync/share-serve.ts) instead of this host node —\n// the edit then replicates to the owner's devices as a distinct author.\nlet currentNodeOverride: string | null = null;\n\n/**\n * Run `fn` with every emit stamped with `node` as its node_id (and HLC node\n * segment) instead of the host node. INVARIANT: relies on core mutators being\n * synchronous (set/clear around one synchronous call) — do not make the wrapped\n * mutators async or the slot can leak across requests.\n */\nexport function withNodeId<T>(node: string | null, fn: () => T): T {\n const prev = currentNodeOverride;\n currentNodeOverride = node;\n try {\n return fn();\n } finally {\n currentNodeOverride = prev;\n }\n}\n\n/**\n * Run `fn` with all emits stamped with one shared txn id. Nested calls keep the\n * outermost group (a revert that calls updateDocument is ONE revision). `label`\n * prefixes the id (\"repair:\", \"revert:\") so history can classify the source.\n */\nexport function withChangeGroup<T>(label: string | null, fn: () => T): T {\n if (currentTxn !== null) return fn();\n currentTxn = (label ? label + \":\" : \"\") + randomSuffix(8);\n try {\n return fn();\n } finally {\n currentTxn = null;\n }\n}\n\n/** Wrap a mutator so its body runs inside one change group. */\nexport function grouped<A extends unknown[], R>(\n fn: (...args: A) => R,\n label: string | null = null,\n): (...args: A) => R {\n return (...args) => withChangeGroup(label, () => fn(...args));\n}\n\n// Domain tables addressable by id, with their write-allowed columns. `col` is\n// interpolated into SQL, so it MUST be validated against these allowlists\n// (changes can arrive from untrusted sync peers).\nconst DOMAIN: Record<string, { table: string; cols: Set<string> }> = {\n databases: {\n table: \"databases\",\n cols: new Set([\"name\", \"icon\", \"created_hlc\", \"__deleted\"]),\n },\n properties: {\n table: \"properties\",\n cols: new Set([\"database_id\", \"name\", \"type\", \"config\", \"position\", \"__deleted\"]),\n },\n documents: {\n table: \"documents\",\n cols: new Set([\"title\", \"body\", \"database_id\", \"parent_id\", \"created_hlc\", \"order_key\", \"__deleted\"]),\n },\n doc_blocks: {\n table: \"doc_blocks\",\n cols: new Set([\"doc_id\", \"text\", \"order_key\", \"blank_after\", \"__deleted\"]),\n },\n sites: {\n table: \"sites\",\n cols: new Set([\"name\", \"title\", \"created_hlc\", \"__deleted\"]),\n },\n site_files: {\n table: \"site_files\",\n cols: new Set([\n \"site_id\",\n \"path\",\n \"content_type\",\n \"encoding\",\n \"content\",\n \"created_hlc\",\n \"__deleted\",\n ]),\n },\n // blob_policy designates the durable full-blob device(s); it replicates so\n // every node agrees on the anchor. blob_cache (incl. the local `pending` gate\n // that governs clearing) is node-local and deliberately absent — clearing is\n // decided purely locally, never synced. (The old synced blob_presence is gone.)\n blob_policy: {\n table: \"blob_policy\",\n cols: new Set([\"full_nodes\", \"redundancy\", \"__deleted\"]),\n },\n};\n\n// The `records` dataset is special: these cols hit the `records` table, any\n// other col is a property cell (col == property id) folded into records.data JSON.\nconst RECORD_META = new Set([\"database_id\", \"created_hlc\", \"order_key\", \"__deleted\"]);\n\ntype SqlValue = string | number | null;\n\nfunction encodeScalar(val: unknown): SqlValue {\n if (val === null || val === undefined) return null;\n if (typeof val === \"boolean\") return val ? 1 : 0;\n if (typeof val === \"number\") return val;\n if (typeof val === \"string\") return val;\n return JSON.stringify(val);\n}\n\nfunction ensureRow(db: DbDriver, table: string, id: string): void {\n db.query(`INSERT OR IGNORE INTO ${table} (id) VALUES (?)`).run(id);\n}\n\n/** A doc is \"block-managed\" once it has any block row; blocks then own its body. */\nfunction isBlockManaged(db: DbDriver, docId: string): boolean {\n return (\n db.query(\"SELECT 1 AS x FROM doc_blocks WHERE doc_id = ? LIMIT 1\").get(docId) !=\n null\n );\n}\n\n/** Rebuild a document's materialized body from its live blocks (ordered). */\nfunction recomputeDocBody(db: DbDriver, docId: string): void {\n const rows = db\n .query(\n \"SELECT text, blank_after FROM doc_blocks WHERE doc_id = ? AND __deleted = 0 ORDER BY order_key, id\",\n )\n .all(docId) as { text: string | null; blank_after: number | null }[];\n ensureRow(db, \"documents\", docId);\n db.query(\"UPDATE documents SET body = ? WHERE id = ?\").run(\n serializeDocBlocks(rows.map((r) => ({ text: r.text, blankAfter: r.blank_after ?? 0 }))),\n docId,\n );\n}\n\nfunction materialize(\n db: DbDriver,\n dataset: string,\n rowId: string,\n col: string,\n valueJson: string | null,\n): void {\n if (dataset === \"records\") {\n if (RECORD_META.has(col)) {\n ensureRow(db, \"records\", rowId);\n const v = valueJson === null ? null : JSON.parse(valueJson);\n db.query(`UPDATE records SET \"${col}\" = ? WHERE id = ?`).run(\n encodeScalar(v),\n rowId,\n );\n } else {\n // Property cell -> a key in the record's JSON `data`. ensureRow first:\n // a cell write can arrive before database_id (out-of-order sync).\n ensureRow(db, \"records\", rowId);\n if (valueJson === null) {\n db.query(\n `UPDATE records SET data = json_remove(data, '$.\"' || ? || '\"') WHERE id = ?`,\n ).run(col, rowId);\n } else {\n // json(?) embeds the value with its real JSON type (number/array/object),\n // not as a quoted string.\n db.query(\n `UPDATE records SET data = json_set(coalesce(data, '{}'), '$.\"' || ? || '\"', json(?)) WHERE id = ?`,\n ).run(col, valueJson, rowId);\n }\n }\n return;\n }\n\n const d = DOMAIN[dataset];\n if (!d || !d.cols.has(col)) return; // unknown dataset/column -> ignore (forward-compat)\n\n // Legacy documents.body register is ignored once the doc is block-managed:\n // blocks are authoritative and recompute the body cache themselves.\n if (dataset === \"documents\" && col === \"body\" && isBlockManaged(db, rowId)) return;\n\n ensureRow(db, d.table, rowId);\n const v = valueJson === null ? null : JSON.parse(valueJson);\n db.query(`UPDATE ${d.table} SET \"${col}\" = ? WHERE id = ?`).run(\n encodeScalar(v),\n rowId,\n );\n\n // A block change re-derives its document's body cache. doc_id may not have\n // materialized yet (out-of-order sync) — the later doc_id write recomputes.\n if (dataset === \"doc_blocks\") {\n const blk = db\n .query(\"SELECT doc_id FROM doc_blocks WHERE id = ?\")\n .get(rowId) as { doc_id: string | null } | null;\n if (blk?.doc_id) recomputeDocBody(db, blk.doc_id);\n }\n}\n\n/** Outcome of applying one change to the oplog. `inserted` reports whether the\n * oplog actually gained a NEW row (false when we already had this exact change —\n * the INSERT OR IGNORE was a no-op); it is the honest \"did we receive new data\"\n * signal, distinct from `winner` (whether this change now wins its register and\n * was materialized). Re-applying a change we already hold still returns\n * `winner:true` if it's the current max-HLC, so callers that want progress (not\n * re-materialization) must key off `inserted`. */\nexport interface ApplyResult {\n inserted: boolean;\n winner: boolean;\n}\n\n/**\n * Record a change in the oplog (idempotent) and, if it is the latest write for\n * its register, materialize it. Order-independent: convergence holds regardless\n * of the order changes are applied, because the winner is recomputed as the max\n * HLC over the full oplog for that register.\n */\nexport function applyChange(db: DbDriver, c: Change): ApplyResult {\n const inserted =\n db\n .query(\n \"INSERT OR IGNORE INTO crdt_changes (hlc, node_id, dataset, row_id, col, value, txn) VALUES (?, ?, ?, ?, ?, ?, ?)\",\n )\n .run(c.hlc, c.node_id, c.dataset, c.row_id, c.col, c.value, c.txn ?? null).changes > 0;\n\n const cur = db\n .query(\n \"SELECT MAX(hlc) AS h FROM crdt_changes WHERE dataset = ? AND row_id = ? AND col = ?\",\n )\n .get(c.dataset, c.row_id, c.col) as { h: string | null };\n\n if (cur.h !== c.hlc) return { inserted, winner: false }; // a newer write already wins\n materialize(db, c.dataset, c.row_id, c.col, c.value);\n return { inserted, winner: true };\n}\n\n/** Apply a local write: assign a fresh HLC, append to oplog, materialize. */\nexport function emit(\n db: DbDriver,\n dataset: string,\n rowId: string,\n col: string,\n value: unknown,\n): Change {\n const node = currentNodeOverride ?? getNodeId(db);\n const change: Change = {\n hlc: nextHlc(db, node),\n node_id: node,\n dataset,\n row_id: rowId,\n col,\n value: value === undefined ? null : JSON.stringify(value),\n txn: currentTxn,\n };\n applyChange(db, change);\n return change;\n}\n\n/** Apply multiple local field writes to the same row. */\nexport function emitFields(\n db: DbDriver,\n dataset: string,\n rowId: string,\n fields: Record<string, unknown>,\n): Change[] {\n const out: Change[] = [];\n for (const [col, value] of Object.entries(fields)) {\n out.push(emit(db, dataset, rowId, col, value));\n }\n return out;\n}\n\n/** Apply remote changes from a sync peer (advances clock, then merges). Returns\n * the number of changes that were NEW to our oplog (rows actually inserted) —\n * the honest \"received\" count. Re-ingesting data we already hold returns 0, so\n * this is a reliable progress signal for the auto-sync backoff (a round that\n * only re-reads known data must not count as activity). */\nexport function ingest(db: DbDriver, changes: Change[]): number {\n const node = getNodeId(db);\n let received = 0;\n const tx = db.transaction((cs: Change[]) => {\n for (const c of cs) {\n observeHlc(db, node, c.hlc);\n if (applyChange(db, c).inserted) received++;\n }\n });\n tx(changes);\n return received;\n}\n\n/** All oplog changes with HLC strictly greater than `since` (test/debug helper). */\nexport function changesSince(db: DbDriver, since: string): Change[] {\n return db\n .query(`SELECT ${CHANGE_SELECT} FROM crdt_changes WHERE hlc > ? ORDER BY hlc`)\n .all(since) as Change[];\n}\n\nexport interface ChangeBatch {\n changes: Change[];\n cursor: number;\n}\n\nexport interface ChangesAfterOpts {\n /** Max rows to return — pagination for large pulls (initial hydration). */\n limit?: number;\n /** Datasets to omit (partial replicas, e.g. a phone skipping site_files). */\n excludeDatasets?: string[];\n /**\n * Return only changes this node produced itself. Storage-sync (see\n * sync/storage.ts) publishes each node's own ops under its own bucket prefix,\n * so it must not re-upload ops it merely ingested from peers. The cursor still\n * advances over the filtered-out rows (high-water on exhaustion), so ingested\n * ops are skipped once, not rescanned every round.\n */\n onlyNode?: string;\n}\n\n/**\n * Changes inserted after `seq` (a local rowid), in insertion order, plus the\n * new high-water cursor. Used for replication: insertion order never skips a\n * change even when clocks are skewed.\n *\n * With `limit`, the cursor stops at the last returned row so the next pull\n * resumes there; when the scan is exhausted (fewer rows than the limit, or no\n * limit) the cursor jumps to the table's high-water rowid so excluded-dataset\n * tails aren't rescanned every round.\n */\nexport function changesAfterSeq(\n db: DbDriver,\n seq: number,\n opts: ChangesAfterOpts = {},\n): ChangeBatch {\n const exclude = opts.excludeDatasets ?? [];\n const clauses = [\"rowid > ?\"];\n const params: (string | number)[] = [seq];\n if (exclude.length) {\n clauses.push(`dataset NOT IN (${exclude.map(() => \"?\").join(\", \")})`);\n params.push(...exclude);\n }\n if (opts.onlyNode != null) {\n clauses.push(\"node_id = ?\");\n params.push(opts.onlyNode);\n }\n const where = clauses.join(\" AND \");\n const limitSql = opts.limit != null && opts.limit > 0 ? ` LIMIT ${Math.floor(opts.limit)}` : \"\";\n const rows = db\n .query(\n `SELECT rowid AS seq, ${CHANGE_SELECT} FROM crdt_changes WHERE ${where} ORDER BY rowid${limitSql}`,\n )\n .all(...params) as (Change & { seq: number })[];\n\n const exhausted = opts.limit == null || opts.limit <= 0 || rows.length < opts.limit;\n let cursor: number;\n if (exhausted) {\n // High-water on exhaustion. crdt_changes.seq is an AUTOINCREMENT PK (rowid\n // alias), stable across VACUUM and never reused, so MAX(rowid) no longer\n // drops below a cursor a client already holds — the Math.max is now just a\n // defensive floor (was load-bearing before the seq migration, see\n // migrateCrdtChangesSeq).\n const top = db.query(\"SELECT MAX(rowid) AS m FROM crdt_changes\").get() as { m: number | null };\n cursor = Math.max(seq, top.m ?? seq);\n } else {\n cursor = rows[rows.length - 1]!.seq;\n }\n return { changes: rows.map(({ seq: _seq, ...c }) => c), cursor };\n}\n",
12
+ "import type { DbDriver } from \"./driver.ts\";\nimport type { PropertyRow } from \"./properties.ts\";\n\n// Records of all databases share one `records` table; indexes are partial on\n// database_id so they stay small and per-collection. A field is indexed only\n// when it's actually used to filter/sort AND the collection is large enough to\n// matter — small tables scan instantly and don't earn the write cost.\nconst AUTO_INDEX_ROW_THRESHOLD = 2000;\n\n/** SQLite identifiers we build are slug+suffix ids; keep only safe chars. */\nfunction sanitize(s: string): string {\n return s.replace(/[^a-zA-Z0-9_]/g, \"_\");\n}\n\n/** Escape a string for embedding as a single-quoted SQL literal. */\nfunction lit(s: string): string {\n return s.replace(/'/g, \"''\");\n}\n\nfunction indexName(databaseId: string, propId: string): string {\n return `idx_rec_${sanitize(databaseId)}_${sanitize(propId)}`;\n}\n\nexport function hasIndex(db: DbDriver, databaseId: string, propId: string): boolean {\n const row = db\n .query(\"SELECT 1 AS ok FROM sqlite_master WHERE type = 'index' AND name = ?\")\n .get(indexName(databaseId, propId)) as { ok: number } | null;\n return row != null;\n}\n\n/**\n * Create an expression index on `data ->> '<propId>'` (with created_hlc as the\n * sort tail), partial on this database. Idempotent. The expression matches\n * exactly what listRecords emits, so the optimizer uses it.\n */\nexport function ensurePropIndex(db: DbDriver, databaseId: string, propId: string): void {\n const name = indexName(databaseId, propId);\n db.exec(\n `CREATE INDEX IF NOT EXISTS \"${name}\" ON records (data ->> '${lit(propId)}', created_hlc) ` +\n `WHERE database_id = '${lit(databaseId)}' AND __deleted = 0`,\n );\n}\n\n/**\n * Ensure an index for a field that a query filters/sorts on — but only when it\n * will pay off. relation fields are almost always query keys (cheap, index\n * eagerly); other fields wait until the collection crosses the row threshold.\n */\nexport function maybeAutoIndex(db: DbDriver, databaseId: string, prop: PropertyRow): void {\n if (hasIndex(db, databaseId, prop.id)) return;\n if (prop.type !== \"relation\") {\n const row = db\n .query(\n \"SELECT COUNT(*) AS c FROM records WHERE database_id = ? AND __deleted = 0\",\n )\n .get(databaseId) as { c: number };\n if (row.c < AUTO_INDEX_ROW_THRESHOLD) return;\n }\n ensurePropIndex(db, databaseId, prop.id);\n}\n",
13
+ "import type { DbDriver } from \"./driver.ts\";\nimport { newId } from \"./ids.ts\";\nimport { emit, grouped } from \"./crdt.ts\";\nimport { getDatabase } from \"./databases.ts\";\nimport { ensurePropIndex } from \"./indexing.ts\";\nimport { MhError } from \"./errors.ts\";\nimport type { ColumnsOf } from \"./sqlcols.ts\";\n\nexport type PropType =\n | \"text\"\n | \"number\"\n | \"checkbox\"\n | \"select\"\n | \"multi_select\"\n | \"date\"\n | \"relation\"\n | \"url\";\n\nexport const PROP_TYPES: ReadonlySet<string> = new Set([\n \"text\",\n \"number\",\n \"checkbox\",\n \"select\",\n \"multi_select\",\n \"date\",\n \"relation\",\n \"url\",\n]);\n\nexport interface PropertyConfig {\n options?: string[]; // select / multi_select\n database?: string; // relation target database id\n indexed?: boolean; // hot query key — materialize an index for this field\n width?: number; // table column width in px (UI metadata, replicated via config)\n}\n\nexport interface PropertyRow {\n id: string;\n database_id: string;\n name: string;\n type: PropType;\n config: PropertyConfig | null;\n position: number;\n}\n\n// SQL returns config as a JSON string; rows are parsed into PropertyRow after.\nexport const PROPERTY_COLS = [\"id\", \"database_id\", \"name\", \"type\", \"config\", \"position\"] as const;\nconst _propertyCols: ColumnsOf<PropertyRow, typeof PROPERTY_COLS> = PROPERTY_COLS;\nconst PROPERTY_SELECT = PROPERTY_COLS.join(\", \");\n\nfunction validateConfig(type: PropType, config: PropertyConfig | undefined): void {\n if (type === \"select\" || type === \"multi_select\") {\n const opts = config?.options;\n if (!Array.isArray(opts) || opts.length === 0 || !opts.every((o) => typeof o === \"string\"))\n throw new MhError(\"invalid_input\", `${type} requires config.options: string[]`);\n }\n if (type === \"relation\") {\n if (typeof config?.database !== \"string\")\n throw new MhError(\"invalid_input\", \"relation requires config.database (target database id)\");\n }\n}\n\nfunction nextPosition(db: DbDriver, databaseId: string): number {\n const row = db\n .query(\n \"SELECT MAX(position) AS m FROM properties WHERE database_id = ? AND __deleted = 0\",\n )\n .get(databaseId) as { m: number | null };\n return (row.m ?? 0) + 1;\n}\n\nexport const addProperty = grouped(function addProperty(\n db: DbDriver,\n databaseId: string,\n opts: {\n name: string;\n type: PropType;\n config?: PropertyConfig;\n position?: number;\n // Low-level hint for built-in features that know a field is a hot query\n // key (e.g. an IM conversation id). Not surfaced to CLI users — ad-hoc\n // fields get indexed automatically from query usage (see indexing.ts).\n indexed?: boolean;\n },\n): PropertyRow {\n if (!getDatabase(db, databaseId)) throw new MhError(\"not_found\", `no such database: ${databaseId}`);\n if (!PROP_TYPES.has(opts.type)) throw new MhError(\"invalid_input\", `unknown property type: ${opts.type}`);\n validateConfig(opts.type, opts.config);\n\n // Persist the indexed hint in config so it replicates to peers and survives\n // snapshot/restore (the index itself is derived, not in the oplog).\n const config: PropertyConfig | null = opts.indexed\n ? { ...(opts.config ?? {}), indexed: true }\n : (opts.config ?? null);\n\n const id = newId(\"prop\", opts.name);\n emit(db, \"properties\", id, \"database_id\", databaseId);\n emit(db, \"properties\", id, \"name\", opts.name);\n emit(db, \"properties\", id, \"type\", opts.type);\n emit(db, \"properties\", id, \"config\", config);\n emit(db, \"properties\", id, \"position\", opts.position ?? nextPosition(db, databaseId));\n\n // Relations are almost always query keys; index eagerly. Honor explicit hint.\n if (opts.type === \"relation\" || opts.indexed === true)\n ensurePropIndex(db, databaseId, id);\n return getProperty(db, id)!;\n});\n\nexport function getProperty(db: DbDriver, id: string): PropertyRow | null {\n const row = db\n .query(`SELECT ${PROPERTY_SELECT} FROM properties WHERE id = ? AND __deleted = 0`)\n .get(id) as (Omit<PropertyRow, \"config\"> & { config: string | null }) | null;\n if (!row) return null;\n return { ...row, config: row.config ? (JSON.parse(row.config) as PropertyConfig) : null };\n}\n\nexport function listProperties(db: DbDriver, databaseId: string): PropertyRow[] {\n const rows = db\n .query(\n `SELECT ${PROPERTY_SELECT} FROM properties WHERE database_id = ? AND __deleted = 0 ORDER BY position`,\n )\n .all(databaseId) as (Omit<PropertyRow, \"config\"> & { config: string | null })[];\n return rows.map((r) => ({\n ...r,\n config: r.config ? (JSON.parse(r.config) as PropertyConfig) : null,\n }));\n}\n\nexport const updateProperty = grouped(function updateProperty(\n db: DbDriver,\n id: string,\n fields: { name?: string; type?: PropType; config?: PropertyConfig; position?: number },\n): PropertyRow {\n const cur = getProperty(db, id);\n if (!cur) throw new MhError(\"not_found\", `no such property: ${id}`);\n\n const typeChanged = fields.type !== undefined && fields.type !== cur.type;\n if (fields.type !== undefined && !PROP_TYPES.has(fields.type))\n throw new MhError(\"invalid_input\", `unknown property type: ${fields.type}`);\n\n // Validate config against whichever type will be in effect.\n const effectiveType = fields.type ?? cur.type;\n if (fields.config !== undefined) validateConfig(effectiveType, fields.config);\n else if (typeChanged) validateConfig(fields.type!, undefined);\n\n if (fields.name !== undefined) emit(db, \"properties\", id, \"name\", fields.name);\n if (fields.type !== undefined) emit(db, \"properties\", id, \"type\", fields.type);\n if (fields.config !== undefined) emit(db, \"properties\", id, \"config\", fields.config);\n if (fields.position !== undefined) emit(db, \"properties\", id, \"position\", fields.position);\n\n // A type change invalidates existing cell values (a number may not be a valid\n // select option, etc.), so clear the cells that currently hold a value for\n // this property. The field is keyed by property id in the records data JSON.\n if (typeChanged) {\n const rows = db\n .query(\n \"SELECT id FROM records WHERE database_id = ? AND __deleted = 0 AND data ->> ? IS NOT NULL\",\n )\n .all(cur.database_id, id) as { id: string }[];\n for (const r of rows) emit(db, \"records\", r.id, id, null);\n }\n return getProperty(db, id)!;\n});\n\n// Persist a column's display width. Merges into the existing config server-side\n// so concurrent callers can't strip sibling fields (e.g. a select's `options`),\n// and clamps to a sane range. The width replicates with `config` via the oplog.\nexport function setPropertyWidth(db: DbDriver, id: string, width: number): PropertyRow {\n const cur = getProperty(db, id);\n if (!cur) throw new MhError(\"not_found\", `no such property: ${id}`);\n if (!Number.isFinite(width)) throw new MhError(\"invalid_input\", \"width must be a finite number\");\n const w = Math.max(80, Math.min(2000, Math.round(width)));\n return updateProperty(db, id, { config: { ...(cur.config ?? {}), width: w } });\n}\n\nexport const removeProperty = grouped(function removeProperty(db: DbDriver, id: string): boolean {\n const prop = getProperty(db, id);\n if (!prop) return false;\n emit(db, \"properties\", id, \"__deleted\", 1);\n // Clear this property's now-orphaned cells (keyed by property id in the records\n // data JSON) so no dead cell data lingers — same cleanup repairHub would do off\n // the property tombstone. emit(undefined) materializes to json_remove.\n const rows = db\n .query(\n \"SELECT id FROM records WHERE database_id = ? AND __deleted = 0 AND data ->> ? IS NOT NULL\",\n )\n .all(prop.database_id, id) as { id: string }[];\n for (const r of rows) emit(db, \"records\", r.id, id, undefined);\n return true;\n});\n",
14
+ "import type { DbDriver } from \"./driver.ts\";\nimport { newId } from \"./ids.ts\";\nimport { emit, grouped } from \"./crdt.ts\";\nimport { MhError } from \"./errors.ts\";\nimport { addProperty, listProperties, type PropertyConfig } from \"./properties.ts\";\nimport { createRecord, listRecords } from \"./records.ts\";\nimport type { ColumnsOf } from \"./sqlcols.ts\";\n\nexport interface DatabaseRow {\n id: string;\n name: string;\n icon: string | null;\n created_hlc: string;\n}\n\nexport const DATABASE_COLS = [\"id\", \"name\", \"icon\", \"created_hlc\"] as const;\nconst _databaseCols: ColumnsOf<DatabaseRow, typeof DATABASE_COLS> = DATABASE_COLS;\nconst DATABASE_SELECT = DATABASE_COLS.join(\", \");\n\nexport const createDatabase = grouped(function createDatabase(\n db: DbDriver,\n opts: { name: string; icon?: string },\n): DatabaseRow {\n const id = newId(\"db\", opts.name);\n const first = emit(db, \"databases\", id, \"name\", opts.name);\n emit(db, \"databases\", id, \"created_hlc\", first.hlc);\n if (opts.icon !== undefined) emit(db, \"databases\", id, \"icon\", opts.icon);\n return getDatabase(db, id)!;\n});\n\nexport const updateDatabase = grouped(function updateDatabase(\n db: DbDriver,\n id: string,\n fields: { name?: string; icon?: string | null },\n): DatabaseRow {\n if (!getDatabase(db, id)) throw new MhError(\"not_found\", `no such database: ${id}`);\n if (fields.name !== undefined) emit(db, \"databases\", id, \"name\", fields.name);\n if (fields.icon !== undefined) emit(db, \"databases\", id, \"icon\", fields.icon);\n return getDatabase(db, id)!;\n});\n\n/**\n * Copy a database whole — name, icon, every property (type/config/position\n * preserved) and every record (in order, cells carried via an old→new property\n * id map, so duplicate property names copy losslessly). A relation column\n * pointing back at the *source* database is remapped to the copy so it stays\n * self-referential; relations to other databases keep their target.\n * `name`/`icon` override the defaults; the locale \"copy\" suffix is the\n * caller's job. All emits share one txn, so the copy syncs as one revision.\n */\nexport const duplicateDatabase = grouped(function duplicateDatabase(\n db: DbDriver,\n id: string,\n opts: { name?: string; icon?: string } = {},\n): DatabaseRow {\n const src = getDatabase(db, id);\n if (!src) throw new MhError(\"not_found\", `no such database: ${id}`);\n const dup = createDatabase(db, {\n name: opts.name ?? src.name,\n icon: (opts.icon ?? src.icon) ?? undefined,\n });\n const propIdMap = new Map<string, string>();\n for (const p of listProperties(db, id)) {\n const config: PropertyConfig | undefined =\n p.config?.database === id ? { ...p.config, database: dup.id } : (p.config ?? undefined);\n const np = addProperty(db, dup.id, { name: p.name, type: p.type, config, position: p.position });\n propIdMap.set(p.id, np.id);\n }\n for (const r of listRecords(db, id)) {\n const data: Record<string, unknown> = {};\n for (const [pid, v] of Object.entries(r.cells)) {\n const nid = propIdMap.get(pid);\n if (nid) data[nid] = v;\n }\n createRecord(db, dup.id, data);\n }\n return getDatabase(db, dup.id)!;\n});\n\nexport function getDatabase(db: DbDriver, id: string): DatabaseRow | null {\n return db\n .query(`SELECT ${DATABASE_SELECT} FROM databases WHERE id = ? AND __deleted = 0`)\n .get(id) as DatabaseRow | null;\n}\n\nexport function listDatabases(db: DbDriver): DatabaseRow[] {\n return db\n .query(`SELECT ${DATABASE_SELECT} FROM databases WHERE __deleted = 0 ORDER BY created_hlc`)\n .all() as DatabaseRow[];\n}\n\nexport const deleteDatabase = grouped(function deleteDatabase(db: DbDriver, id: string): boolean {\n if (!getDatabase(db, id)) return false;\n emit(db, \"databases\", id, \"__deleted\", 1);\n\n // Cascade so nothing is left dangling (the same fixes repairHub would make off\n // the database tombstone, applied eagerly here by the deleting node):\n // - properties/records are meaningless without the database -> tombstone;\n // - documents keep an optional scope link -> detach so their content survives.\n const tombstone = (table: string) => {\n for (const r of liveChildren(db, table, \"database_id\", id))\n emit(db, table, r, \"__deleted\", 1);\n };\n tombstone(\"properties\");\n tombstone(\"records\");\n for (const d of liveChildren(db, \"documents\", \"database_id\", id))\n emit(db, \"documents\", d, \"database_id\", null);\n\n // Drop the \"current database\" pointer if it referenced this one (raw query to\n // avoid a context.ts <-> databases.ts import cycle; read-side also self-heals).\n db.query(\"DELETE FROM meta WHERE key = 'current_db' AND value = ?\").run(id);\n return true;\n});\n\n/** Ids of live rows in `table` whose `col` references `parentId`. */\nfunction liveChildren(db: DbDriver, table: string, col: string, parentId: string): string[] {\n return (\n db\n .query(`SELECT id FROM ${table} WHERE ${col} = ? AND __deleted = 0`)\n .all(parentId) as { id: string }[]\n ).map((r) => r.id);\n}\n",
15
+ "import type { DbDriver } from \"./driver.ts\";\nimport { idKind, type Kind } from \"./ids.ts\";\nimport { MhError } from \"./errors.ts\";\n\n/** Kinds reachable through the public reference resolver. `blk` is internal. */\nexport type PublicKind = \"db\" | \"prop\" | \"rec\" | \"doc\";\n\nexport interface Candidate {\n kind: PublicKind;\n id: string;\n label: string;\n}\n\ninterface KindSpec {\n table: string;\n nameCol: string | null; // column matched by name/title (null = no name match)\n scoped: boolean; // filtered by database_id when a scope is supplied\n noun: string; // human label for \"no such <noun>\"\n}\n\nconst SPECS: Record<PublicKind, KindSpec> = {\n db: { table: \"databases\", nameCol: \"name\", scoped: false, noun: \"database\" },\n prop: { table: \"properties\", nameCol: \"name\", scoped: true, noun: \"property\" },\n rec: { table: \"records\", nameCol: null, scoped: true, noun: \"record\" },\n doc: { table: \"documents\", nameCol: \"title\", scoped: true, noun: \"document\" },\n};\n\nconst PUBLIC_KINDS: PublicKind[] = [\"db\", \"prop\", \"rec\", \"doc\"];\n\nfunction isPublic(k: Kind | null): k is PublicKind {\n return k !== null && k !== \"blk\";\n}\n\ntype SqlValue = string;\n\n// '{' (0x7B) is the first code point above every char an id can contain\n// ([a-z0-9_-], max 'z' = 0x7A), so [p, p+'{') is exactly the set of ids with\n// prefix p under BINARY collation — a primary-key range scan, no LIKE wildcards.\nconst HI = \"{\";\n\n/** The first text property's id for a database — a record's de-facto title. */\nfunction titlePropId(db: DbDriver, databaseId: string): string | null {\n const row = db\n .query(\n \"SELECT id FROM properties WHERE database_id = ? AND type = 'text' AND __deleted = 0 ORDER BY position LIMIT 1\",\n )\n .get(databaseId) as { id: string } | null;\n return row?.id ?? null;\n}\n\n/** All live rows of one kind matching `ref` by id-prefix or name. */\nfunction queryKind(\n db: DbDriver,\n kind: PublicKind,\n ref: string,\n databaseId?: string,\n): Candidate[] {\n const spec = SPECS[kind];\n // Records have no name column; when scoped to a database, match/show the\n // first text property's value (its title) so \"Alice Chen\" resolves.\n let nameCol = spec.nameCol;\n if (kind === \"rec\" && databaseId) {\n const tp = titlePropId(db, databaseId);\n if (tp) nameCol = `data ->> '${tp.replace(/'/g, \"''\")}'`;\n }\n const labelExpr = nameCol ?? \"''\"; // kinds without a name show id only\n const conds: string[] = [];\n const args: SqlValue[] = [];\n\n // Raw prefix (covers an exact full id, and a typed prefix like \"rec_log\").\n conds.push(\"(id >= ? AND id < ?)\");\n args.push(ref, ref + HI);\n // Typed slug prefix: lets a bare slug \"login-bug\" hit \"rec_login-bug-…\".\n const typed = `${kind}_${ref}`;\n conds.push(\"(id >= ? AND id < ?)\");\n args.push(typed, typed + HI);\n // Name/title equality (case-insensitive), where the kind has a name.\n if (nameCol) {\n conds.push(`lower(${nameCol}) = lower(?)`);\n args.push(ref);\n }\n\n let sql = `SELECT id, ${labelExpr} AS label FROM ${spec.table} WHERE __deleted = 0 AND (${conds.join(\" OR \")})`;\n if (spec.scoped && databaseId) {\n sql += \" AND database_id = ?\";\n args.push(databaseId);\n }\n\n const rows = db.query(sql).all(...args) as { id: string; label: string | null }[];\n return rows.map((r) => ({ kind, id: r.id, label: r.label ?? \"\" }));\n}\n\n/**\n * Every entity matching `ref`. Kind scope: an explicit `opts.kind` (the command\n * knows what it wants) wins; otherwise a typed prefix on `ref` dispatches; else\n * all public kinds are searched (the generic `mh get`). `databaseId` narrows\n * rec/doc/prop to one collection.\n */\nexport function resolveCandidates(\n db: DbDriver,\n ref: string,\n opts: { kind?: PublicKind; databaseId?: string } = {},\n): Candidate[] {\n const kinds: PublicKind[] = opts.kind\n ? [opts.kind]\n : isPublic(idKind(ref))\n ? [idKind(ref) as PublicKind]\n : PUBLIC_KINDS;\n\n const out: Candidate[] = [];\n const seen = new Set<string>();\n for (const k of kinds) {\n for (const c of queryKind(db, k, ref, opts.databaseId)) {\n if (seen.has(c.id)) continue;\n seen.add(c.id);\n out.push(c);\n }\n }\n return out;\n}\n\nfunction fmt(cands: Candidate[]): string {\n return cands\n .map((c) => ` ${c.id}${c.label ? \" \" + c.label : \"\"} (${c.kind})`)\n .join(\"\\n\");\n}\n\n/**\n * Resolve `ref` to one entity. An exact full-id match always wins (the full id\n * keeps working). Otherwise a single candidate is returned; zero throws\n * \"no such …\"; multiple throws a git-style ambiguity list.\n */\nexport function resolveEntity(\n db: DbDriver,\n ref: string,\n opts: { kind?: PublicKind; databaseId?: string } = {},\n): Candidate {\n const cands = resolveCandidates(db, ref, opts);\n const exact = cands.filter((c) => c.id === ref);\n if (exact.length === 1) return exact[0]!;\n if (exact.length === 0 && cands.length === 1) return cands[0]!;\n\n if (cands.length === 0) {\n const noun = opts.kind ? SPECS[opts.kind].noun : \"item\";\n throw new MhError(\"not_found\", `no such ${noun}: ${ref}`);\n }\n const shown = exact.length > 1 ? exact : cands;\n throw new MhError(\n \"ambiguous\",\n `ambiguous \"${ref}\" — ${shown.length} matches:\\n${fmt(shown)}\\n add more characters.`,\n );\n}\n\n/** Resolve `ref` to one concrete row id. See {@link resolveEntity}. */\nexport function resolveRef(\n db: DbDriver,\n ref: string,\n opts: { kind?: PublicKind; databaseId?: string } = {},\n): string {\n return resolveEntity(db, ref, opts).id;\n}\n",
16
+ "// Fractional indexing: compact string keys that sort lexicographically, so a new\n// key can always be produced strictly between two existing ones. Used to order\n// document blocks; concurrent inserts at the same slot are tie-broken by block id.\n//\n// Alphabet is base62 with ASCII order matching digit order (0-9 < A-Z < a-z), so\n// SQLite's default BINARY collation orders keys correctly with plain `ORDER BY`.\n\nconst DIGITS = \"0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz\";\n\n/**\n * A digit string strictly between `a` and `b`. `a` is a digit string (possibly\n * \"\" = start) and `b` is a digit string or null (= end), with `a < b`. Neither\n * may end in the zero digit; this invariant is preserved by construction.\n */\nfunction midpoint(a: string, b: string | null): string {\n const zero = DIGITS[0]!;\n if (b !== null && a >= b) throw new Error(`fracdex: ${a} >= ${b}`);\n if (a.endsWith(zero) || (b !== null && b.endsWith(zero)))\n throw new Error(`fracdex: trailing zero in ${a}/${b}`);\n\n if (b !== null) {\n // Strip the common prefix, padding `a` with implicit zeros as we descend.\n let n = 0;\n while ((a[n] ?? zero) === b[n]) n++;\n if (n > 0) return b.slice(0, n) + midpoint(a.slice(n), b.slice(n));\n }\n\n const da = a === \"\" ? 0 : DIGITS.indexOf(a[0]!);\n const db = b === null ? DIGITS.length : DIGITS.indexOf(b[0]!);\n if (db - da > 1) {\n const mid = Math.round(0.5 * (da + db));\n return DIGITS[mid]!;\n }\n // First digits are consecutive (or equal at the boundary): descend.\n if (b !== null && b.length > 1) return b.slice(0, 1);\n return DIGITS[da]! + midpoint(a.slice(1), null);\n}\n\n/** A key strictly between `a` and `b` (lexicographically). null = open boundary. */\nexport function keyBetween(a: string | null, b: string | null): string {\n return midpoint(a ?? \"\", b);\n}\n\n/** `n` distinct keys in ascending order, all strictly between `a` and `b`. */\nexport function keysBetween(\n a: string | null,\n b: string | null,\n n: number,\n): string[] {\n if (n <= 0) return [];\n if (n === 1) return [keyBetween(a, b)];\n\n if (b === null) {\n let prev = keyBetween(a, null);\n const out = [prev];\n for (let i = 1; i < n; i++) {\n prev = keyBetween(prev, null);\n out.push(prev);\n }\n return out;\n }\n if (a === null) {\n let next = keyBetween(null, b);\n const out = [next];\n for (let i = 1; i < n; i++) {\n next = keyBetween(null, next);\n out.unshift(next);\n }\n return out;\n }\n\n // Both bounded: bisect so key lengths grow logarithmically.\n const mid = Math.floor(n / 2);\n const c = keyBetween(a, b);\n return [...keysBetween(a, c, mid), c, ...keysBetween(c, b, n - mid - 1)];\n}\n",
17
+ "import type { DbDriver } from \"./driver.ts\";\nimport { newId, slugify, idKind } from \"./ids.ts\";\nimport { emit, grouped } from \"./crdt.ts\";\nimport { getDatabase } from \"./databases.ts\";\nimport { listProperties, type PropertyRow } from \"./properties.ts\";\nimport { maybeAutoIndex } from \"./indexing.ts\";\nimport { resolveCandidates } from \"./resolve.ts\";\nimport { keyBetween, keysBetween } from \"./fracdex.ts\";\nimport { MhError } from \"./errors.ts\";\n\ntype SqlValue = string | number | null;\n\n/** Scalars push down to SQL; arrays/objects/null are filtered in JS. */\nfunction isSqlScalar(v: unknown): v is string | number | boolean {\n return typeof v === \"string\" || typeof v === \"number\" || typeof v === \"boolean\";\n}\n\n/** Encode a coerced scalar to match what `data ->> '<prop>'` returns. */\nfunction sqlFilterValue(v: string | number | boolean): SqlValue {\n return typeof v === \"boolean\" ? (v ? 1 : 0) : v;\n}\n\nexport interface RecordRow {\n id: string;\n database_id: string;\n /** Cells keyed by property NAME — friendly for CLI / external agents, but\n * lossy when two properties share a name (one entry wins). */\n values: Record<string, unknown>;\n /** Cells keyed by property ID — lossless under duplicate names; the WebUI\n * reads/writes through this. */\n cells: Record<string, unknown>;\n}\n\ninterface OrderedRecordRow {\n id: string;\n database_id: string;\n created_hlc: string | null;\n order_key: string | null;\n}\n\n/**\n * Resolve one relation value to a concrete record id in the target database.\n * Accepts a full id / unique prefix / name. A well-formed record id that does\n * not (yet) exist passes through unchanged — a forward reference / explicit id\n * escape valve. Names/prefixes that match nothing, or match many, throw.\n */\nfunction resolveRelation(db: DbDriver, prop: PropertyRow, value: string): string {\n const target = prop.config?.database;\n if (!target) return value; // misconfigured relation — leave the value as-is\n const cands = resolveCandidates(db, value, { kind: \"rec\", databaseId: target });\n const exact = cands.find((c) => c.id === value);\n if (exact) return exact.id;\n if (cands.length === 1) return cands[0]!.id;\n if (cands.length === 0) {\n if (idKind(value) === \"rec\") return value; // forward reference to a full id\n throw new MhError(\"not_found\", `${prop.name}: no such record in target database: ${value}`);\n }\n throw new MhError(\"ambiguous\", `${prop.name}: ambiguous relation \"${value}\" (${cands.length} matches); use a full id`);\n}\n\n/** Validate + normalize a value for a property's type. Throws on mismatch. */\nfunction coerce(db: DbDriver, prop: PropertyRow, value: unknown): unknown {\n switch (prop.type) {\n case \"text\":\n case \"url\":\n case \"date\": {\n if (value === null) return null;\n if (typeof value !== \"string\") throw new MhError(\"invalid_input\", `${prop.name} expects a string`);\n return value;\n }\n case \"number\": {\n if (value === null) return null;\n const n = typeof value === \"number\" ? value : Number(value);\n if (!Number.isFinite(n)) throw new MhError(\"invalid_input\", `${prop.name} expects a number`);\n return n;\n }\n case \"checkbox\": {\n if (typeof value === \"boolean\") return value;\n if (value === \"true\" || value === 1) return true;\n if (value === \"false\" || value === 0 || value === null) return false;\n throw new MhError(\"invalid_input\", `${prop.name} expects a boolean`);\n }\n case \"select\": {\n if (value === null) return null;\n const v = String(value);\n if (!prop.config?.options?.includes(v))\n throw new MhError(\"invalid_input\", `${prop.name}: '${v}' is not an allowed option`);\n return v;\n }\n case \"multi_select\": {\n const arr = value === null ? [] : Array.isArray(value) ? value : [value];\n const opts = prop.config?.options ?? [];\n for (const item of arr)\n if (!opts.includes(String(item)))\n throw new MhError(\"invalid_input\", `${prop.name}: '${item}' is not an allowed option`);\n return arr.map(String);\n }\n case \"relation\": {\n const arr = value === null ? [] : Array.isArray(value) ? value : [value];\n return arr.map((v) => resolveRelation(db, prop, String(v)));\n }\n }\n}\n\n/** Group properties by lowercased name; duplicate names are legal. */\nfunction propsByName(props: PropertyRow[]): Map<string, PropertyRow[]> {\n const byName = new Map<string, PropertyRow[]>();\n for (const p of props) {\n const k = p.name.toLowerCase();\n const list = byName.get(k);\n if (list) list.push(p);\n else byName.set(k, [p]);\n }\n return byName;\n}\n\n/**\n * Match data keys (property name OR id) to properties. Duplicate property\n * names are a legal state (offline peers can create them concurrently), so a\n * name that matches several properties is ambiguous — callers must switch to\n * the property id.\n */\nfunction resolveData(\n props: PropertyRow[],\n data: Record<string, unknown>,\n): { prop: PropertyRow; value: unknown }[] {\n const byId = new Map(props.map((p) => [p.id, p]));\n const byName = propsByName(props);\n const out: { prop: PropertyRow; value: unknown }[] = [];\n for (const [key, value] of Object.entries(data)) {\n let prop = byId.get(key);\n if (!prop) {\n const matches = byName.get(key.toLowerCase()) ?? [];\n if (matches.length > 1)\n throw new MhError(\n \"ambiguous\",\n `property name \"${key}\" matches ${matches.length} properties; use a property id`,\n );\n prop = matches[0];\n }\n if (!prop) throw new MhError(\"not_found\", `unknown property: ${key}`);\n out.push({ prop, value });\n }\n return out;\n}\n\n/** Build a RecordRow from a materialized row; keys in `data` are property ids. */\nfunction rowToRecord(\n row: { id: string; database_id: string; data: string },\n props: PropertyRow[],\n): RecordRow {\n const raw = JSON.parse(row.data || \"{}\") as Record<string, unknown>;\n const byId = new Map(props.map((p) => [p.id, p]));\n const values: Record<string, unknown> = {};\n const cells: Record<string, unknown> = {};\n for (const [propId, v] of Object.entries(raw)) {\n const p = byId.get(propId);\n if (!p) continue; // skip cells for removed properties\n values[p.name] = v;\n cells[p.id] = v;\n }\n return { id: row.id, database_id: row.database_id, values, cells };\n}\n\nfunction deriveTitle(\n props: PropertyRow[],\n resolved: { prop: PropertyRow; value: unknown }[],\n fallbackBase: string,\n): string {\n const text = resolved.find(\n (r) => r.prop.type === \"text\" && typeof r.value === \"string\" && r.value,\n );\n return newId(\"rec\", text ? String(text.value) : \"\", fallbackBase);\n}\n\nfunction tableExists(db: DbDriver, table: string): boolean {\n return (\n db\n .query(\"SELECT 1 AS ok FROM sqlite_master WHERE type = 'table' AND name = ?\")\n .get(table) != null\n );\n}\n\nfunction canEmitOrderKeys(db: DbDriver): boolean {\n return tableExists(db, \"meta\") && tableExists(db, \"crdt_changes\");\n}\n\nfunction writeRecordOrderKey(db: DbDriver, recordId: string, orderKey: string, emitChange: boolean): void {\n if (emitChange) emit(db, \"records\", recordId, \"order_key\", orderKey);\n else db.query(\"UPDATE records SET order_key = ? WHERE id = ?\").run(orderKey, recordId);\n}\n\nfunction lastRecordOrderKey(db: DbDriver, databaseId: string): string | null {\n const row = db\n .query(\n `SELECT order_key FROM records\n WHERE database_id = ? AND __deleted = 0 AND order_key IS NOT NULL\n ORDER BY order_key DESC, id DESC LIMIT 1`,\n )\n .get(databaseId) as { order_key: string | null } | null;\n return row?.order_key ?? null;\n}\n\nfunction orderedRecordRows(db: DbDriver, databaseId: string): OrderedRecordRow[] {\n return db\n .query(\n `SELECT id, database_id, created_hlc, order_key FROM records\n WHERE database_id = ? AND __deleted = 0\n ORDER BY order_key IS NULL, order_key, created_hlc, id`,\n )\n .all(databaseId) as OrderedRecordRow[];\n}\n\nfunction rebalanceRecordOrderKeys(db: DbDriver, databaseId: string): void {\n const rows = orderedRecordRows(db, databaseId);\n const keys = keysBetween(null, null, rows.length);\n rows.forEach((row, i) => {\n if (row.order_key !== keys[i]) emit(db, \"records\", row.id, \"order_key\", keys[i]!);\n });\n}\n\nexport const backfillRecordOrderKeys = grouped(function backfillRecordOrderKeys(\n db: DbDriver,\n databaseId?: string,\n): void {\n const emitChange = canEmitOrderKeys(db);\n const dbRows = databaseId\n ? [{ database_id: databaseId }]\n : (db\n .query(\n `SELECT DISTINCT database_id FROM records\n WHERE database_id IS NOT NULL AND __deleted = 0 AND order_key IS NULL`,\n )\n .all() as { database_id: string }[]);\n\n for (const d of dbRows) {\n const missing = db\n .query(\n `SELECT id FROM records\n WHERE database_id = ? AND __deleted = 0 AND order_key IS NULL\n ORDER BY created_hlc, id`,\n )\n .all(d.database_id) as { id: string }[];\n if (!missing.length) continue;\n\n const start = lastRecordOrderKey(db, d.database_id);\n const keys = keysBetween(start, null, missing.length);\n missing.forEach((row, i) => writeRecordOrderKey(db, row.id, keys[i]!, emitChange));\n }\n});\n\nexport const createRecord = grouped(function createRecord(\n db: DbDriver,\n databaseId: string,\n data: Record<string, unknown>,\n): RecordRow {\n const dbRow = getDatabase(db, databaseId);\n if (!dbRow) throw new MhError(\"not_found\", `no such database: ${databaseId}`);\n const props = listProperties(db, databaseId);\n const resolved = resolveData(props, data);\n const id = deriveTitle(props, resolved, slugify(dbRow.name, \"rec\"));\n const orderKey = keyBetween(lastRecordOrderKey(db, databaseId), null);\n\n const first = emit(db, \"records\", id, \"database_id\", databaseId);\n emit(db, \"records\", id, \"created_hlc\", first.hlc);\n emit(db, \"records\", id, \"order_key\", orderKey);\n for (const { prop, value } of resolved)\n emit(db, \"records\", id, prop.id, coerce(db, prop, value));\n return getRecord(db, id)!;\n});\n\nexport function getRecord(db: DbDriver, id: string): RecordRow | null {\n const row = db\n .query(\"SELECT id, database_id, data FROM records WHERE id = ? AND __deleted = 0\")\n .get(id) as { id: string; database_id: string; data: string } | null;\n if (!row) return null;\n return rowToRecord(row, listProperties(db, row.database_id));\n}\n\n/** Quote a property id for embedding in a JSON path / index expression. */\nfunction jsonKeyLit(propId: string): string {\n return propId.replace(/'/g, \"''\");\n}\n\nexport function listRecords(\n db: DbDriver,\n databaseId: string,\n opts: { filter?: Record<string, unknown>; sort?: string; limit?: number } = {},\n): RecordRow[] {\n const props = listProperties(db, databaseId);\n\n // Coerce filters, then split: scalars push down to SQL (and earn an index),\n // arrays/objects/null are matched in JS afterward.\n const resolved =\n opts.filter && Object.keys(opts.filter).length\n ? resolveData(props, opts.filter).map(({ prop, value }) => ({\n prop,\n value: coerce(db, prop, value),\n }))\n : [];\n const sqlFilters = resolved.filter((f) => isSqlScalar(f.value));\n const jsFilters = resolved.filter((f) => !isSqlScalar(f.value));\n\n // Resolve sort: default created_hlc; \"-field\" = descending.\n let sortProp: PropertyRow | undefined;\n let sortDesc = false;\n if (opts.sort) {\n let key = opts.sort;\n if (key.startsWith(\"-\")) {\n sortDesc = true;\n key = key.slice(1);\n }\n if (key !== \"created\" && key !== \"created_hlc\") {\n let p = props.find((p) => p.id === key);\n if (!p) {\n const matches = props.filter((q) => q.name.toLowerCase() === key.toLowerCase());\n if (matches.length > 1)\n throw new MhError(\n \"ambiguous\",\n `sort field \"${key}\" matches ${matches.length} properties; use a property id`,\n );\n p = matches[0];\n }\n if (!p) throw new MhError(\"not_found\", `unknown sort field: ${key}`);\n sortProp = p;\n }\n }\n\n // The act of filtering/sorting on a field is the signal to (maybe) index it.\n for (const f of sqlFilters) maybeAutoIndex(db, databaseId, f.prop);\n if (sortProp) maybeAutoIndex(db, databaseId, sortProp);\n\n const where = [\"database_id = ?\", \"__deleted = 0\"];\n const args: SqlValue[] = [databaseId];\n for (const f of sqlFilters) {\n where.push(`data ->> '${jsonKeyLit(f.prop.id)}' = ?`);\n args.push(sqlFilterValue(f.value as string | number | boolean));\n }\n\n const manualOrder = opts.sort == null;\n const orderExpr = sortProp\n ? `data ->> '${jsonKeyLit(sortProp.id)}'`\n : \"created_hlc\";\n let sql =\n `SELECT id, database_id, data FROM records WHERE ${where.join(\" AND \")} ` +\n (manualOrder\n ? \"ORDER BY order_key IS NULL, order_key, id\"\n : `ORDER BY ${orderExpr} ${sortDesc ? \"DESC\" : \"ASC\"}, id`);\n\n // LIMIT only pushes down when no JS-side filtering remains.\n const pushLimit = opts.limit != null && jsFilters.length === 0;\n if (pushLimit) {\n sql += \" LIMIT ?\";\n args.push(opts.limit!);\n }\n\n let rows = (\n db.query(sql).all(...args) as { id: string; database_id: string; data: string }[]\n ).map((r) => rowToRecord(r, props));\n\n if (jsFilters.length) {\n rows = rows.filter((r) =>\n jsFilters.every(\n (f) => JSON.stringify(r.cells[f.prop.id] ?? null) === JSON.stringify(f.value),\n ),\n );\n if (opts.limit != null) rows = rows.slice(0, opts.limit);\n }\n return rows;\n}\n\nexport const moveRecord = grouped(function moveRecord(\n db: DbDriver,\n id: string,\n targetId: string,\n where: \"before\" | \"after\",\n): RecordRow {\n if (where !== \"before\" && where !== \"after\")\n throw new MhError(\"invalid_input\", `unknown move position: ${where}`);\n\n const src = db\n .query(\n \"SELECT id, database_id FROM records WHERE id = ? AND __deleted = 0\",\n )\n .get(id) as { id: string; database_id: string } | null;\n if (!src) throw new MhError(\"not_found\", `no such record: ${id}`);\n const target = db\n .query(\n \"SELECT id, database_id FROM records WHERE id = ? AND __deleted = 0\",\n )\n .get(targetId) as { id: string; database_id: string } | null;\n if (!target) throw new MhError(\"not_found\", `no such record: ${targetId}`);\n if (src.database_id !== target.database_id)\n throw new MhError(\"invalid_input\", \"cannot move a record across databases\");\n if (id === targetId) return getRecord(db, id)!;\n\n backfillRecordOrderKeys(db, src.database_id);\n\n let rows = orderedRecordRows(db, src.database_id).filter((r) => r.id !== id);\n let to = rows.findIndex((r) => r.id === targetId);\n if (to < 0) throw new MhError(\"not_found\", `no such target record: ${targetId}`);\n\n let left = where === \"before\" ? (rows[to - 1]?.order_key ?? null) : rows[to]!.order_key;\n let right = where === \"before\" ? rows[to]!.order_key : (rows[to + 1]?.order_key ?? null);\n if (left !== null && right !== null && left >= right) {\n rebalanceRecordOrderKeys(db, src.database_id);\n rows = orderedRecordRows(db, src.database_id).filter((r) => r.id !== id);\n to = rows.findIndex((r) => r.id === targetId);\n left = where === \"before\" ? (rows[to - 1]?.order_key ?? null) : rows[to]!.order_key;\n right = where === \"before\" ? rows[to]!.order_key : (rows[to + 1]?.order_key ?? null);\n }\n emit(db, \"records\", id, \"order_key\", keyBetween(left, right));\n return getRecord(db, id)!;\n});\n\nexport const updateRecord = grouped(function updateRecord(\n db: DbDriver,\n id: string,\n data: Record<string, unknown>,\n): RecordRow {\n const rec = db\n .query(\"SELECT id, database_id FROM records WHERE id = ? AND __deleted = 0\")\n .get(id) as { id: string; database_id: string } | null;\n if (!rec) throw new MhError(\"not_found\", `no such record: ${id}`);\n const resolved = resolveData(listProperties(db, rec.database_id), data);\n for (const { prop, value } of resolved)\n emit(db, \"records\", id, prop.id, coerce(db, prop, value));\n return getRecord(db, id)!;\n});\n\nexport const deleteRecord = grouped(function deleteRecord(db: DbDriver, id: string): boolean {\n const rec = db\n .query(\"SELECT id FROM records WHERE id = ? AND __deleted = 0\")\n .get(id) as { id: string } | null;\n if (!rec) return false;\n emit(db, \"records\", id, \"__deleted\", 1);\n return true;\n});\n",
18
+ "import type { DbDriver } from \"./driver.ts\";\nimport { newId } from \"./ids.ts\";\nimport { emit, grouped } from \"./crdt.ts\";\nimport { parseDocBlocks, serializeDocBlocks, reconcile, type DocBlock } from \"./blocks.ts\";\nimport { keyBetween, keysBetween } from \"./fracdex.ts\";\nimport { MhError } from \"./errors.ts\";\nimport type { ColumnsOf } from \"./sqlcols.ts\";\n\nexport interface DocumentRow {\n id: string;\n title: string;\n body: string | null;\n database_id: string | null;\n parent_id: string | null;\n created_hlc: string;\n order_key: string | null;\n}\n\nexport type DocumentSummary = Omit<DocumentRow, \"body\">;\n\nexport const DOCUMENT_COLS = [\n \"id\", \"title\", \"body\", \"database_id\", \"parent_id\", \"created_hlc\", \"order_key\",\n] as const;\nconst _documentCols: ColumnsOf<DocumentRow, typeof DOCUMENT_COLS> = DOCUMENT_COLS;\nconst DOCUMENT_SELECT = DOCUMENT_COLS.join(\", \");\n\nconst DOC_SUMMARY_COLS = [\n \"id\", \"title\", \"database_id\", \"parent_id\", \"created_hlc\", \"order_key\",\n] as const;\nconst _docSummaryCols: ColumnsOf<DocumentSummary, typeof DOC_SUMMARY_COLS> = DOC_SUMMARY_COLS;\nconst DOC_SUMMARY_SELECT = DOC_SUMMARY_COLS.join(\", \");\n\ninterface BlockRow {\n id: string;\n text: string;\n order_key: string;\n blank_after: number;\n}\n\n// ---- block helpers ---------------------------------------------------------\n\nfunction liveBlocks(db: DbDriver, docId: string): BlockRow[] {\n return db\n .query(\n \"SELECT id, text, order_key, blank_after FROM doc_blocks WHERE doc_id = ? AND __deleted = 0 ORDER BY order_key, id\",\n )\n .all(docId) as BlockRow[];\n}\n\nfunction makeBlockId(text: string): string {\n return newId(\"blk\", text.split(\"\\n\", 1)[0] ?? \"\");\n}\n\n/** Emit a new block's fields; text last so the final body recompute is complete.\n * blank_after is only emitted when non-zero (0 is the column default). */\nfunction emitBlock(\n db: DbDriver,\n docId: string,\n fields: { text: string; order_key: string; blankAfter: number },\n): void {\n const id = makeBlockId(fields.text);\n emit(db, \"doc_blocks\", id, \"doc_id\", docId);\n emit(db, \"doc_blocks\", id, \"order_key\", fields.order_key);\n if (fields.blankAfter) emit(db, \"doc_blocks\", id, \"blank_after\", fields.blankAfter);\n emit(db, \"doc_blocks\", id, \"text\", fields.text);\n}\n\nfunction insertBlocks(\n db: DbDriver,\n docId: string,\n blocks: readonly DocBlock[],\n after: string | null,\n before: string | null,\n): void {\n const keys = keysBetween(after, before, blocks.length);\n blocks.forEach((b, i) =>\n emitBlock(db, docId, { text: b.text, order_key: keys[i]!, blankAfter: b.blankAfter }),\n );\n}\n\n/** Lazily migrate a legacy body-only document into blocks (idempotent). */\nfunction ensureBlocks(db: DbDriver, docId: string): void {\n if (db.query(\"SELECT 1 AS x FROM doc_blocks WHERE doc_id = ? LIMIT 1\").get(docId))\n return;\n const row = db.query(\"SELECT body FROM documents WHERE id = ?\").get(docId) as\n | { body: string | null }\n | null;\n const blocks = parseDocBlocks(row?.body ?? \"\");\n if (blocks.length) insertBlocks(db, docId, blocks, null, null);\n}\n\n/** Diff a full new body against current blocks; keep unchanged, delete/insert the rest. */\nfunction reconcileBody(db: DbDriver, docId: string, body: string): void {\n const old = liveBlocks(db, docId);\n const next = parseDocBlocks(body);\n const plan = reconcile(\n old.map((b) => b.text),\n next.map((b) => b.text),\n );\n\n for (const oi of plan.deleted) emit(db, \"doc_blocks\", old[oi]!.id, \"__deleted\", 1);\n\n const { items } = plan;\n let i = 0;\n while (i < items.length) {\n const it = items[i]!;\n if (\"keep\" in it) {\n // Text unchanged: only the surrounding blank-line count may have shifted.\n const oldB = old[it.keep]!;\n const want = next[i]!.blankAfter;\n if ((oldB.blank_after ?? 0) !== want) emit(db, \"doc_blocks\", oldB.id, \"blank_after\", want);\n i++;\n continue;\n }\n let j = i;\n while (j < items.length && \"insert\" in items[j]!) j++;\n const left = i > 0 ? old[(items[i - 1] as { keep: number }).keep]!.order_key : null;\n const right = j < items.length ? old[(items[j] as { keep: number }).keep]!.order_key : null;\n insertBlocks(db, docId, next.slice(i, j), left, right);\n i = j;\n }\n}\n\n/** Max HLC over a document's own register and all its blocks — a read/edit token. */\nexport function documentVersion(db: DbDriver, id: string): string {\n const row = db\n .query(\n `SELECT MAX(hlc) AS h FROM crdt_changes\n WHERE (dataset = 'documents' AND row_id = ?)\n OR (dataset = 'doc_blocks' AND row_id IN (SELECT id FROM doc_blocks WHERE doc_id = ?))`,\n )\n .get(id, id) as { h: string | null };\n return row.h ?? \"\";\n}\n\n// ---- public API ------------------------------------------------------------\n\nexport const createDocument = grouped(function createDocument(\n db: DbDriver,\n opts: { title: string; body?: string; database_id?: string; parent_id?: string },\n): DocumentRow {\n const id = newId(\"doc\", opts.title);\n const first = emit(db, \"documents\", id, \"title\", opts.title);\n emit(db, \"documents\", id, \"created_hlc\", first.hlc);\n if (opts.database_id !== undefined) emit(db, \"documents\", id, \"database_id\", opts.database_id);\n if (opts.parent_id !== undefined) emit(db, \"documents\", id, \"parent_id\", opts.parent_id);\n placeInSiblings(db, id, opts.parent_id ?? null); // append to the end of its sibling group\n if (opts.body !== undefined) {\n const blocks = parseDocBlocks(opts.body);\n if (blocks.length) insertBlocks(db, id, blocks, null, null);\n }\n return getDocument(db, id)!;\n});\n\nexport function getDocument(db: DbDriver, id: string): DocumentRow | null {\n return db\n .query(`SELECT ${DOCUMENT_SELECT} FROM documents WHERE id = ? AND __deleted = 0`)\n .get(id) as DocumentRow | null;\n}\n\n/** Display order among siblings: explicit order_key first, NULLs fall back to\n * creation time so an un-backfilled tree still renders in its historical order. */\nconst ORDER_BY = \"ORDER BY order_key IS NULL, order_key, created_hlc, id\";\n\nexport function listDocuments(\n db: DbDriver,\n opts: { database_id?: string; parent_id?: string } = {},\n): DocumentSummary[] {\n const cols = `SELECT ${DOC_SUMMARY_SELECT} FROM documents WHERE __deleted = 0`;\n if (opts.parent_id !== undefined)\n return db\n .query(`${cols} AND parent_id = ? ${ORDER_BY}`)\n .all(opts.parent_id) as DocumentSummary[];\n if (opts.database_id)\n return db\n .query(`${cols} AND database_id = ? ${ORDER_BY}`)\n .all(opts.database_id) as DocumentSummary[];\n return db.query(`${cols} ${ORDER_BY}`).all() as DocumentSummary[];\n}\n\n// ---- sibling ordering (fractional index scoped per parent_id) --------------\n\ninterface SiblingRow {\n id: string;\n order_key: string | null;\n}\n\n/** WHERE fragment + args selecting siblings under `parentId` (null = top level). */\nfunction siblingWhere(parentId: string | null): { clause: string; args: string[] } {\n return parentId === null\n ? { clause: \"parent_id IS NULL\", args: [] }\n : { clause: \"parent_id = ?\", args: [parentId] };\n}\n\nfunction canEmitOrderKeys(db: DbDriver): boolean {\n return tableExists(db, \"meta\") && tableExists(db, \"crdt_changes\");\n}\n\nfunction tableExists(db: DbDriver, table: string): boolean {\n return (\n db\n .query(\"SELECT 1 AS ok FROM sqlite_master WHERE type = 'table' AND name = ?\")\n .get(table) != null\n );\n}\n\n/** Greatest order_key among siblings (optionally ignoring one row being placed). */\nfunction lastSiblingOrderKey(\n db: DbDriver,\n parentId: string | null,\n excludeId?: string,\n): string | null {\n const w = siblingWhere(parentId);\n const exclude = excludeId ? \" AND id <> ?\" : \"\";\n const row = db\n .query(\n `SELECT order_key FROM documents WHERE ${w.clause}${exclude}\n AND __deleted = 0 AND order_key IS NOT NULL\n ORDER BY order_key DESC, id DESC LIMIT 1`,\n )\n .get(...w.args, ...(excludeId ? [excludeId] : [])) as { order_key: string | null } | null;\n return row?.order_key ?? null;\n}\n\nfunction orderedSiblings(db: DbDriver, parentId: string | null): SiblingRow[] {\n const w = siblingWhere(parentId);\n return db\n .query(`SELECT id, order_key FROM documents WHERE ${w.clause} AND __deleted = 0 ${ORDER_BY}`)\n .all(...w.args) as SiblingRow[];\n}\n\n/** Re-space every sibling's key evenly — escape hatch when fractional keys collide. */\nfunction rebalanceSiblings(db: DbDriver, parentId: string | null): void {\n const rows = orderedSiblings(db, parentId);\n const keys = keysBetween(null, null, rows.length);\n rows.forEach((row, i) => {\n if (row.order_key !== keys[i]) emit(db, \"documents\", row.id, \"order_key\", keys[i]!);\n });\n}\n\n/** Assign keys to siblings that still lack one, appending in creation order. */\nfunction backfillSiblings(db: DbDriver, parentId: string | null): void {\n const emitChange = canEmitOrderKeys(db);\n const w = siblingWhere(parentId);\n const missing = db\n .query(\n `SELECT id FROM documents WHERE ${w.clause} AND __deleted = 0 AND order_key IS NULL\n ORDER BY created_hlc, id`,\n )\n .all(...w.args) as { id: string }[];\n if (!missing.length) return;\n const keys = keysBetween(lastSiblingOrderKey(db, parentId), null, missing.length);\n missing.forEach((row, i) => {\n if (emitChange) emit(db, \"documents\", row.id, \"order_key\", keys[i]!);\n else db.query(\"UPDATE documents SET order_key = ? WHERE id = ?\").run(keys[i]!, row.id);\n });\n}\n\n/** Backfill order_key for every parent group that has un-keyed live documents. */\nexport const backfillDocumentOrderKeys = grouped(function backfillDocumentOrderKeys(\n db: DbDriver,\n): void {\n const parents = db\n .query(\"SELECT DISTINCT parent_id FROM documents WHERE __deleted = 0 AND order_key IS NULL\")\n .all() as { parent_id: string | null }[];\n for (const p of parents) backfillSiblings(db, p.parent_id);\n});\n\n/**\n * Place `id` under `parentId` at the given position — the single point where a\n * document's parent_id and order_key are kept consistent (reparent always\n * implies a new sibling scope). No `anchor` appends to the end of the group.\n */\nfunction placeInSiblings(\n db: DbDriver,\n id: string,\n parentId: string | null,\n anchor?: { targetId: string; where: \"before\" | \"after\" },\n): void {\n // Walk the prospective ancestor chain; reaching `id` would form a cycle and\n // make the tree unrenderable. Guarded here so every caller is protected.\n let cur: string | null | undefined = parentId;\n while (cur) {\n if (cur === id) throw new MhError(\"invalid_input\", `cannot set parent_id: would create a cycle (${id})`);\n cur = getDocument(db, cur)?.parent_id ?? null;\n }\n\n const current = getDocument(db, id);\n if (current && (current.parent_id ?? null) !== parentId)\n emit(db, \"documents\", id, \"parent_id\", parentId);\n\n let key: string;\n if (!anchor) {\n key = keyBetween(lastSiblingOrderKey(db, parentId, id), null);\n } else {\n backfillSiblings(db, parentId); // ensure neighbors carry comparable keys\n const neighbors = (): [string | null, string | null] => {\n const rows = orderedSiblings(db, parentId).filter((r) => r.id !== id);\n const to = rows.findIndex((r) => r.id === anchor.targetId);\n if (to < 0) throw new MhError(\"not_found\", `no such target document: ${anchor.targetId}`);\n return anchor.where === \"before\"\n ? [rows[to - 1]?.order_key ?? null, rows[to]!.order_key]\n : [rows[to]!.order_key, rows[to + 1]?.order_key ?? null];\n };\n let [left, right] = neighbors();\n if (left !== null && right !== null && left >= right) {\n rebalanceSiblings(db, parentId);\n [left, right] = neighbors();\n }\n key = keyBetween(left, right);\n }\n emit(db, \"documents\", id, \"order_key\", key);\n}\n\n/**\n * Move a document next to / into another, atomically updating both its parent\n * and its order_key. `into` nests it as the last child of `targetId`;\n * `before`/`after` re-orders (and reparents if needed) among the target's siblings.\n */\nexport const moveDocument = grouped(function moveDocument(\n db: DbDriver,\n id: string,\n targetId: string,\n where: \"before\" | \"after\" | \"into\",\n): DocumentRow {\n const src = getDocument(db, id);\n if (!src) throw new MhError(\"not_found\", `no such document: ${id}`);\n if (id === targetId) return src;\n const target = getDocument(db, targetId);\n if (!target) throw new MhError(\"not_found\", `no such target document: ${targetId}`);\n\n if (where === \"into\") placeInSiblings(db, id, targetId);\n else placeInSiblings(db, id, target.parent_id, { targetId, where });\n return getDocument(db, id)!;\n});\n\n/**\n * Copy a document — title, every block (verbatim, with fresh block ids so the\n * copy edits independently) and its `database_id`/`parent_id`. The copy lands\n * right after its source in the same sibling scope. Blocks are cloned at the\n * block level (not via a markdown round-trip) so empty list items / blank-line\n * runs survive losslessly. `title`/`parentId` override the defaults; the locale\n * \"copy\" suffix is the caller's job. `created_hlc` is the copy's own birth time.\n */\nexport const duplicateDocument = grouped(function duplicateDocument(\n db: DbDriver,\n id: string,\n opts: { title?: string; parentId?: string | null } = {},\n): DocumentRow {\n const src = getDocument(db, id);\n if (!src) throw new MhError(\"not_found\", `no such document: ${id}`);\n ensureBlocks(db, id);\n const blocks = liveBlocks(db, id);\n const parentId = opts.parentId !== undefined ? opts.parentId : src.parent_id;\n const dup = createDocument(db, {\n title: opts.title ?? src.title,\n database_id: src.database_id ?? undefined,\n parent_id: parentId ?? undefined,\n });\n if (blocks.length)\n insertBlocks(\n db,\n dup.id,\n blocks.map((b) => ({ text: b.text, blankAfter: b.blank_after })),\n null,\n null,\n );\n // Sit the copy right after its source when they share a sibling scope.\n if (parentId === src.parent_id) moveDocument(db, dup.id, src.id, \"after\");\n return getDocument(db, dup.id)!;\n});\n\nexport const updateDocument = grouped(function updateDocument(\n db: DbDriver,\n id: string,\n fields: { title?: string; body?: string; database_id?: string; parent_id?: string | null },\n opts: { ifMatch?: string } = {},\n): DocumentRow {\n if (!getDocument(db, id)) throw new MhError(\"not_found\", `no such document: ${id}`);\n // Same staleness backstop as editDocument: a version from documentVersion()\n // rejects the write if the doc changed since the caller read it.\n if (opts.ifMatch !== undefined && documentVersion(db, id) !== opts.ifMatch)\n throw new MhError(\"stale\", `stale: document changed since ${opts.ifMatch}; re-read first`);\n if (fields.title !== undefined) emit(db, \"documents\", id, \"title\", fields.title);\n if (fields.database_id !== undefined) emit(db, \"documents\", id, \"database_id\", fields.database_id);\n if (fields.parent_id !== undefined) {\n // Reparenting moves the document into a new sibling scope, so its order_key\n // must be reassigned too — placeInSiblings keeps both consistent (and guards\n // against cycles) for every caller: CLI, WebUI, sync. Only act on a real\n // change so a no-op PATCH doesn't silently jump the document to the end.\n const next = fields.parent_id ?? null;\n if ((getDocument(db, id)!.parent_id ?? null) !== next) placeInSiblings(db, id, next);\n }\n if (fields.body !== undefined) {\n ensureBlocks(db, id);\n reconcileBody(db, id, fields.body);\n }\n return getDocument(db, id)!;\n});\n\nexport interface EditDocResult {\n id: string;\n changed: boolean;\n replaced: number;\n version: string;\n}\n\n/**\n * Anchored find/replace, like the Edit tool. `old` must occur exactly once\n * (or pass `replaceAll`); supplying it is the read-before-edit guarantee — you\n * cannot author it without current content, and drift surfaces as \"not found\".\n * `ifMatch` is an optional staleness backstop (a version from documentVersion).\n */\nexport const editDocument = grouped(function editDocument(\n db: DbDriver,\n id: string,\n opts: { old: string; new: string; replaceAll?: boolean; ifMatch?: string },\n): EditDocResult {\n if (!getDocument(db, id)) throw new MhError(\"not_found\", `no such document: ${id}`);\n if (opts.ifMatch !== undefined && documentVersion(db, id) !== opts.ifMatch)\n throw new MhError(\"stale\", `stale: document changed since ${opts.ifMatch}; re-read first`);\n if (opts.old === \"\") throw new MhError(\"invalid_input\", \"--old must not be empty\");\n\n ensureBlocks(db, id);\n const blocks = liveBlocks(db, id);\n const body = serializeDocBlocks(blocks.map((b) => ({ text: b.text, blankAfter: b.blank_after })));\n const count = countOccurrences(body, opts.old);\n if (count === 0) throw new MhError(\"invalid_input\", `anchor not found: no match for --old`);\n if (count > 1 && !opts.replaceAll)\n throw new MhError(\n \"ambiguous\",\n `${count} matches for --old; add surrounding context or use --replace-all`,\n );\n\n // Fast path: edit stays within single blocks and introduces no block break.\n if (!opts.old.includes(\"\\n\\n\")) {\n const affected = blocks.filter((b) => b.text.includes(opts.old));\n const next = affected.map((b) =>\n opts.replaceAll ? b.text.replaceAll(opts.old, opts.new) : b.text.replace(opts.old, opts.new),\n );\n if (next.every((t) => t.length > 0 && !t.includes(\"\\n\\n\"))) {\n const targets = opts.replaceAll ? affected : affected.slice(0, 1);\n targets.forEach((b, i) => emit(db, \"doc_blocks\", b.id, \"text\", next[i]!));\n return { id, changed: true, replaced: opts.replaceAll ? count : 1, version: documentVersion(db, id) };\n }\n }\n\n // General path: rewrite the body and reconcile (handles spans/splits/merges).\n const newBody = opts.replaceAll\n ? body.replaceAll(opts.old, opts.new)\n : body.replace(opts.old, opts.new);\n reconcileBody(db, id, newBody);\n return { id, changed: newBody !== body, replaced: opts.replaceAll ? count : 1, version: documentVersion(db, id) };\n});\n\nexport const appendDocument = grouped(function appendDocument(\n db: DbDriver,\n id: string,\n body: string,\n): EditDocResult {\n if (!getDocument(db, id)) throw new MhError(\"not_found\", `no such document: ${id}`);\n ensureBlocks(db, id);\n const next = parseDocBlocks(body);\n if (next.length) {\n const blocks = liveBlocks(db, id);\n const last = blocks.length ? blocks[blocks.length - 1]!.order_key : null;\n insertBlocks(db, id, next, last, null);\n }\n return { id, changed: next.length > 0, replaced: next.length, version: documentVersion(db, id) };\n});\n\nexport const prependDocument = grouped(function prependDocument(\n db: DbDriver,\n id: string,\n body: string,\n): EditDocResult {\n if (!getDocument(db, id)) throw new MhError(\"not_found\", `no such document: ${id}`);\n ensureBlocks(db, id);\n const next = parseDocBlocks(body);\n if (next.length) {\n const blocks = liveBlocks(db, id);\n const first = blocks.length ? blocks[0]!.order_key : null;\n insertBlocks(db, id, next, null, first);\n }\n return { id, changed: next.length > 0, replaced: next.length, version: documentVersion(db, id) };\n});\n\nexport const deleteDocument = grouped(function deleteDocument(db: DbDriver, id: string): boolean {\n if (!getDocument(db, id)) return false;\n emit(db, \"documents\", id, \"__deleted\", 1);\n // Cascade off the tombstone, mirroring repairHub: the doc's blocks are derived\n // content -> tombstone them; live child documents survive as roots -> unparent.\n for (const b of liveChildIds(db, \"doc_blocks\", \"doc_id\", id))\n emit(db, \"doc_blocks\", b, \"__deleted\", 1);\n for (const c of liveChildIds(db, \"documents\", \"parent_id\", id))\n emit(db, \"documents\", c, \"parent_id\", null);\n return true;\n});\n\n/** Ids of live rows in `table` whose `col` references `parentId`. */\nfunction liveChildIds(db: DbDriver, table: string, col: string, parentId: string): string[] {\n return (\n db\n .query(`SELECT id FROM ${table} WHERE ${col} = ? AND __deleted = 0`)\n .all(parentId) as { id: string }[]\n ).map((r) => r.id);\n}\n\nfunction countOccurrences(haystack: string, needle: string): number {\n if (needle === \"\") return 0;\n let n = 0;\n let i = haystack.indexOf(needle);\n while (i !== -1) {\n n++;\n i = haystack.indexOf(needle, i + needle.length);\n }\n return n;\n}\n",
14
19
  "// Portable (driver-only) half of the blob ledger: policy, presence, the offline\n// \"is this cached blob safe to clear?\" judgment, the reference index, and the\n// node-local blob_cache bookkeeping. No node:fs / Bun here, so a browser worker\n// can read the same judgment. The byte-touching half (delete from disk, resolve\n// missing bytes over the network) lives in blobs.ts.\n//\n// Model: blob bytes are content-addressed (cache.ts). A device may CLEAR a local\n// blob's bytes only when a durable anchor is designated (blob_policy.fullNodes)\n// AND the blob is not this node's own not-yet-flushed production — so the\n// reference (hash, kept in the oplog) stays re-fetchable. A device that is itself\n// a full node, or ANY device while no full node is designated, never clears (the\n// safety floor: with no anchor there is no guaranteed holder, so a cache copy may\n// be the last copy). Durability is judged locally via blob_cache.pending; see\n// docs/impl-context/22-blob-sync (D4, safety-floor revision).\n\nimport type { DbDriver } from \"./driver.ts\";\nimport { emit, withChangeGroup } from \"./crdt.ts\";\nimport { getNodeId } from \"./node.ts\";\n\nexport const POLICY_ID = \"default\";\n\nexport type Redundancy = \"all\" | \"any\";\n\nexport interface BlobPolicy {\n fullNodes: string[];\n redundancy: Redundancy;\n}\n\nexport interface CachedBlob {\n hash: string;\n size: number;\n content_type: string | null;\n last_access: number | null;\n /** Node-local pin: 1 = never auto-evicted / cleared (does not sync). */\n pinned: number;\n /** 1 = bytes produced here, not yet flushed to a durable anchor — protected. */\n pending: number;\n /** Node-local: 1 = the last presence verify confirmed a designated anchor holds\n * this blob (per redundancy). Drives isClearable; reset to 0 on policy change. */\n anchored: number;\n}\n\nexport interface CacheStats {\n /** Total bytes currently held in the node-local cache. */\n totalBytes: number;\n /** Bytes safe to clear (durable on the required full set). */\n clearableBytes: number;\n /** Bytes that cannot be cleared (sole copy / no anchor / this is a full node). */\n retainedBytes: number;\n count: number;\n clearableCount: number;\n}\n\n// ---- policy -----------------------------------------------------------------\n\nexport function readPolicy(db: DbDriver): BlobPolicy {\n const row = db\n .query(\"SELECT full_nodes, redundancy FROM blob_policy WHERE id = ? AND __deleted = 0\")\n .get(POLICY_ID) as { full_nodes: string | null; redundancy: string | null } | null;\n let fullNodes: string[] = [];\n if (row?.full_nodes) {\n try {\n const parsed = JSON.parse(row.full_nodes);\n if (Array.isArray(parsed)) fullNodes = parsed.filter((n) => typeof n === \"string\");\n } catch {\n // malformed — treat as none designated\n }\n }\n const redundancy: Redundancy = row?.redundancy === \"any\" ? \"any\" : \"all\";\n return { fullNodes, redundancy };\n}\n\n/** Designate the full-blob anchors (synced workspace policy). Each entry is\n * either a node id (a device that keeps everything) OR a bucket url `s3://…`\n * (object storage as a durable full library). Bucket urls never match a node id,\n * so isFullBlobNode()/isClearable() are unaffected — they're a visible guardrail. */\nexport const setFullNodes = (db: DbDriver, nodeIds: string[]): void => {\n withChangeGroup(null, () => {\n // de-dupe, keep order\n const seen = new Set<string>();\n const list = nodeIds.filter((n) => n && !seen.has(n) && seen.add(n) != null);\n emit(db, \"blob_policy\", POLICY_ID, \"full_nodes\", list);\n // ensure redundancy has a concrete value on first designation\n const cur = readPolicy(db);\n if (cur.redundancy == null) emit(db, \"blob_policy\", POLICY_ID, \"redundancy\", \"all\");\n });\n invalidateAnchored(db); // anchor set changed → prior verify verdict is stale\n};\n\nexport const setRedundancy = (db: DbDriver, redundancy: Redundancy): void => {\n emit(db, \"blob_policy\", POLICY_ID, \"redundancy\", redundancy);\n invalidateAnchored(db); // any/all changed → re-verify before anything is clearable\n};\n\n/** Is `node` (default: this device) a designated full-blob library? */\nexport function isFullBlobNode(db: DbDriver, node?: string): boolean {\n const id = node ?? getNodeId(db);\n return readPolicy(db).fullNodes.includes(id);\n}\n\n// ---- clear judgment ---------------------------------------------------------\n\n/**\n * Whether this device may safely drop `hash`'s local bytes — a purely LOCAL,\n * offline decision read from local flags. Clearable requires ALL of:\n * 1. This node is not itself the full-blob library (a full node keeps everything).\n * 2. The blob is not a `pending` production (bytes produced here, not yet flushed\n * to an anchor) — the only locally-unique copy.\n * 3. `anchored == 1`: the last presence verify confirmed a designated anchor holds\n * this blob, per redundancy(any/all). Until a verify runs (or after a policy\n * change resets it), anchored is 0 → nothing is clearable (conservative). This\n * replaces the earlier coarse \"an anchor is designated\" floor with a per-blob,\n * freshly-verified fact. See verifyAnchorPresence (blobs.ts) and\n * docs/impl-context/22-blob-sync (D4, on-demand presence verify).\n */\nexport function isClearable(db: DbDriver, hash: string): boolean {\n if (isFullBlobNode(db)) return false; // this node IS the full library → keeps everything\n const row = db\n .query(\"SELECT pending, anchored FROM blob_cache WHERE hash = ?\")\n .get(hash) as { pending: number; anchored: number } | null;\n return !!row && row.pending === 0 && row.anchored === 1;\n}\n\n// ---- verified-presence bookkeeping (node-local) -----------------------------\n\n/** Record/clear the per-blob \"a designated anchor verifiably holds this\" flag. */\nexport function setAnchored(db: DbDriver, hash: string, anchored: boolean): void {\n db.query(\"UPDATE blob_cache SET anchored = ? WHERE hash = ?\").run(anchored ? 1 : 0, hash);\n}\n\nexport function isAnchored(db: DbDriver, hash: string): boolean {\n const row = db.query(\"SELECT anchored FROM blob_cache WHERE hash = ?\").get(hash) as\n | { anchored: number }\n | null;\n return !!row && row.anchored === 1;\n}\n\n/** Drop every verified verdict (after a policy change) — forces a re-verify before\n * anything is clearable again. Also clears the last-verified stamp. */\nexport function invalidateAnchored(db: DbDriver): void {\n db.query(\"UPDATE blob_cache SET anchored = 0\").run();\n db.query(\"DELETE FROM meta WHERE key = ?\").run(BLOB_VERIFIED_AT_KEY);\n}\n\nconst BLOB_VERIFIED_AT_KEY = \"blob_verified_at\";\n\n/** Epoch-ms of the last successful presence verify, or null if never / invalidated. */\nexport function readBlobVerifiedAt(db: DbDriver): number | null {\n const row = db.query(\"SELECT value FROM meta WHERE key = ?\").get(BLOB_VERIFIED_AT_KEY) as\n | { value: string }\n | null;\n return row ? Number(row.value) : null;\n}\n\nexport function writeBlobVerifiedAt(db: DbDriver, ts: number): void {\n db.query(\n \"INSERT INTO meta (key, value) VALUES (?, ?) ON CONFLICT(key) DO UPDATE SET value = excluded.value\",\n ).run(BLOB_VERIFIED_AT_KEY, String(ts));\n}\n\n// ---- reference index --------------------------------------------------------\n\n/** Matches a doc image reference `/blob/<hash>` (canonical 32-hex or legacy\n * 64-hex). Works on raw markdown and JSON-encoded oplog values alike. */\nconst DOC_BLOB_REF = /\\/blob\\/([0-9a-f]{16,64})/g;\n\n/** Blob hashes referenced by a `/blob/<hash>` URL inside a markdown/text value. */\nexport function blobRefsIn(text: string | null): string[] {\n if (!text) return [];\n const out: string[] = [];\n for (const m of text.matchAll(DOC_BLOB_REF)) out.push(m[1]!);\n return out;\n}\n\n/**\n * Every blob hash a live document or site still points at. Union of:\n * - site_files rows stored as a blob (content = hash), and\n * - `/blob/<hash>` references inside live doc_blocks markdown (doc images).\n * Drives GC (orphan = not in this set) and a full node's byte acquisition.\n */\nexport function referencedHashes(db: DbDriver): Set<string> {\n const out = new Set<string>();\n const files = db\n .query(\"SELECT content FROM site_files WHERE encoding = 'blob' AND __deleted = 0\")\n .all() as { content: string | null }[];\n for (const f of files) if (f.content) out.add(f.content);\n\n const blocks = db\n .query(\"SELECT text FROM doc_blocks WHERE __deleted = 0 AND text LIKE '%/blob/%'\")\n .all() as { text: string | null }[];\n for (const b of blocks) for (const h of blobRefsIn(b.text)) out.add(h);\n return out;\n}\n\n// ---- node-local cache ledger (blob_cache) -----------------------------------\n\n/** Record/refresh a blob's ledger row after its bytes land in the cache. */\n/** Record/refresh a cached blob. `pending`: 1 for bytes PRODUCED here (must flush\n * to an anchor before they're clearable), 0 for an ACQUIRED cache copy (already\n * durable at its source). */\nexport function recordBlob(\n db: DbDriver,\n hash: string,\n size: number,\n contentType?: string | null,\n pending = 1,\n): void {\n db.query(\n `INSERT INTO blob_cache (hash, size, content_type, last_access, pending)\n VALUES (?, ?, ?, ?, ?)\n ON CONFLICT(hash) DO UPDATE SET\n size = excluded.size,\n content_type = coalesce(excluded.content_type, blob_cache.content_type),\n last_access = excluded.last_access,\n pending = excluded.pending`,\n ).run(hash, size, contentType ?? null, Date.now(), pending ? 1 : 0);\n}\n\n/** Mark a blob flushed (0) or pending (1). Flush is set after the bytes are\n * confirmed at the durable anchor (see blobs.ts blobMaintenance). */\nexport function setPending(db: DbDriver, hash: string, pending: boolean): void {\n db.query(\"UPDATE blob_cache SET pending = ? WHERE hash = ?\").run(pending ? 1 : 0, hash);\n}\n\n/** Bump last_access on a cache hit (LRU signal for stats/future eviction). */\nexport function touchBlob(db: DbDriver, hash: string): void {\n db.query(\"UPDATE blob_cache SET last_access = ? WHERE hash = ?\").run(Date.now(), hash);\n}\n\nexport function forgetBlob(db: DbDriver, hash: string): void {\n db.query(\"DELETE FROM blob_cache WHERE hash = ?\").run(hash);\n}\n\nexport function cachedBlobs(db: DbDriver): CachedBlob[] {\n return db\n .query(\"SELECT hash, size, content_type, last_access, pinned, pending, anchored FROM blob_cache\")\n .all() as CachedBlob[];\n}\n\n/** Blobs produced here that are not yet flushed to a durable anchor (the upload\n * worklist; steady state is empty). */\nexport function pendingBlobs(db: DbDriver): { hash: string; size: number }[] {\n return db\n .query(\"SELECT hash, size FROM blob_cache WHERE pending = 1\")\n .all() as { hash: string; size: number }[];\n}\n\n/** Pin/unpin a cached blob (node-local; never synced). Returns true when a row\n * was updated (false when the hash isn't in the ledger). */\nexport function setPinned(db: DbDriver, hash: string, pinned: boolean): boolean {\n return (\n db.query(\"UPDATE blob_cache SET pinned = ? WHERE hash = ?\").run(pinned ? 1 : 0, hash)\n .changes > 0\n );\n}\n\n/** Is a cached blob pinned? (false when not in the ledger). */\nexport function isPinned(db: DbDriver, hash: string): boolean {\n const row = db\n .query(\"SELECT pinned FROM blob_cache WHERE hash = ?\")\n .get(hash) as { pinned: number } | null;\n return !!row?.pinned;\n}\n\n/** Recorded content type for a cached blob (null when unknown / not cached). */\nexport function blobContentType(db: DbDriver, hash: string): string | null {\n const row = db\n .query(\"SELECT content_type FROM blob_cache WHERE hash = ?\")\n .get(hash) as { content_type: string | null } | null;\n return row?.content_type ?? null;\n}\n\nexport function cacheStats(db: DbDriver): CacheStats {\n const blobs = cachedBlobs(db);\n let totalBytes = 0;\n let clearableBytes = 0;\n let clearableCount = 0;\n for (const b of blobs) {\n totalBytes += b.size;\n if (isClearable(db, b.hash)) {\n clearableBytes += b.size;\n clearableCount++;\n }\n }\n return {\n totalBytes,\n clearableBytes,\n retainedBytes: totalBytes - clearableBytes,\n count: blobs.length,\n clearableCount,\n };\n}\n\n// ---- device roster (for designating full nodes) -----------------------------\n\nexport interface KnownNode {\n nodeId: string;\n label: string | null;\n self: boolean;\n}\n\n/** Distinct node ids this device knows about (self + outbound peers + grantees),\n * for the \"pick a full-blob device\" selector in Settings / CLI. */\nexport function knownNodes(db: DbDriver): KnownNode[] {\n const self = getNodeId(db);\n const byId = new Map<string, string | null>();\n byId.set(self, null);\n const peers = db\n .query(\"SELECT node_id, label FROM peers WHERE node_id IS NOT NULL\")\n .all() as { node_id: string; label: string | null }[];\n for (const p of peers) if (!byId.get(p.node_id)) byId.set(p.node_id, p.label ?? byId.get(p.node_id) ?? null);\n const grants = db\n .query(\"SELECT DISTINCT node_id FROM peer_grants WHERE node_id IS NOT NULL\")\n .all() as { node_id: string }[];\n for (const g of grants) if (!byId.has(g.node_id)) byId.set(g.node_id, null);\n return [...byId.entries()].map(([nodeId, label]) => ({ nodeId, label, self: nodeId === self }));\n}\n",
15
- "import type { DbDriver } from \"./driver.ts\";\nimport { putBlob, getBlob } from \"./cache.ts\";\nimport { MhError } from \"./errors.ts\";\nimport {\n type SiteFileRow,\n INLINE_LIMIT,\n inferContentType,\n normalizeSitePath,\n isTextType,\n isImageType,\n toBytes,\n writeFileRow,\n putFileInline,\n getFileRow,\n} from \"./sites-core.ts\";\nimport { recordBlob, touchBlob } from \"./blobs-core.ts\";\n\n// A \"site\" is a named bucket of files (Supabase-Storage-style) served at\n// /sites/<name>/. Everything is written through emit() so sites replicate over\n// /sync like records and documents. File bytes are stored inline as utf8 (text)\n// or base64 (small binaries) so they ride the oplog; large binaries offload to\n// the content-addressed cache (encoding=\"blob\"), whose bytes are node-local.\n//\n// Types, normalization, read paths, AND the inline (utf8/base64) mutations live\n// in sites-core.ts (portable — the browser replica authors + serves sites\n// offline from the same code). This module adds only the two node-only pieces:\n// large-binary blob storage on write and blob byte decoding on serve.\n\nexport * from \"./sites-core.ts\";\n\n/** Upload or replace one file. utf8 text and small binaries ride the oplog via\n * putFileInline (portable); binaries over the inline limit offload to the\n * node-local blob store (server-only — their bytes don't replicate). */\nexport async function putFile(\n db: DbDriver,\n siteId: string,\n path: string,\n opts: { data: string | Uint8Array | ArrayBuffer; contentType?: string },\n): Promise<SiteFileRow> {\n const cleanPath = normalizeSitePath(path);\n if (!cleanPath) throw new MhError(\"invalid_input\", `invalid file path: ${JSON.stringify(path)}`);\n const contentType = opts.contentType ?? inferContentType(cleanPath);\n if (!isTextType(contentType)) {\n const bytes = toBytes(opts.data);\n // Images always offload to a blob (never base64-inline); other binaries only\n // once they exceed the inline limit.\n if (isImageType(contentType) || bytes.byteLength > INLINE_LIMIT) {\n const info = await putBlob(bytes);\n recordBlob(db, info.hash, info.size, contentType); // produced here → pending=1\n return writeFileRow(db, siteId, cleanPath, contentType, \"blob\", info.hash);\n }\n }\n return putFileInline(db, siteId, cleanPath, opts);\n}\n\n/** Resolve a file to served bytes + content type. \"\" / trailing \"/\" → index.html. */\nexport async function getFileForServe(\n db: DbDriver,\n siteId: string,\n path: string,\n): Promise<{ contentType: string; bytes: Uint8Array } | null> {\n const row = getFileRow(db, siteId, path);\n if (!row) return null;\n\n const content = row.content ?? \"\";\n let bytes: Uint8Array | null;\n if (row.encoding === \"utf8\") bytes = new TextEncoder().encode(content);\n else if (row.encoding === \"base64\") bytes = new Uint8Array(Buffer.from(content, \"base64\"));\n else {\n bytes = await getBlob(content); // blob hash\n if (bytes) touchBlob(db, content); // LRU signal for cache stats/clearing\n }\n if (!bytes) return null;\n\n return { contentType: row.content_type, bytes };\n}\n",
20
+ "// Single source of truth for the synthetic storage-peer key. Runtime-agnostic\n// (no Bun / node imports) so EVERY producer derives the identical key: the CLI\n// and server route (peers.ts addAndSyncStoragePeer), the WebUI worker's own add\n// path (db-worker addStorageReplica), and the schema migration. Any divergence\n// re-creates the very bug this key shape fixes — the same bucket registered two\n// ways becomes two peers with independent cursors, and a migration that rewrites\n// one producer's output while another keeps emitting the old shape turns into a\n// permanent whack-a-mole rename.\n\nexport const DEFAULT_STORAGE_PREFIX = \"metahub\";\n\nconst DEFAULT_PORT: Record<string, string> = { \"https:\": \"443\", \"http:\": \"80\" };\n\n/**\n * Stable host[:port] component of an S3 endpoint for the peer key. The default\n * port is stripped so `https://h` and `https://h:443` collapse to one key (that\n * spurious split is exactly the collision class the endpoint-qualified key is\n * meant to remove). Falls back to a parsed-by-hand host when the endpoint isn't\n * a valid URL, kept deterministic.\n */\nexport function storageEndpointHost(endpoint: string): string {\n try {\n const u = new URL(endpoint);\n const port = u.port && u.port !== DEFAULT_PORT[u.protocol] ? `:${u.port}` : \"\";\n return u.hostname + port;\n } catch {\n return endpoint\n .trim()\n .replace(/^[a-z]+:\\/\\//i, \"\")\n .replace(/\\/.*$/, \"\")\n .replace(/:(80|443)$/, \"\");\n }\n}\n\n/**\n * Synthetic peer key for a storage peer: one per endpoint+bucket+prefix. The\n * endpoint host is part of the identity because bucket names are only unique\n * within a single S3-compatible endpoint (R2/MinIO/COS each have their own\n * namespace) — without it, the same bucket+prefix on a second endpoint would\n * collide with (and silently overwrite, keeping the stale cursor) the first.\n */\nexport function storageUrl(endpoint: string, bucket: string, prefix?: string): string {\n const p = prefix?.trim() || DEFAULT_STORAGE_PREFIX;\n return `s3://${storageEndpointHost(endpoint)}/${bucket}/${p}`;\n}\n",
21
+ "import { join } from \"node:path\";\nimport { cacheDir } from \"./paths.ts\";\n\nexport interface BlobInfo {\n hash: string;\n path: string;\n size: number;\n}\n\nexport function blobPath(hash: string): string {\n return join(cacheDir(), hash);\n}\n\n/** Content key length: sha256 truncated to 128 bits (32 hex). Shorter keys keep\n * doc markdown (`![](/blob/<hash>.png)`) readable; collision is negligible.\n * Addressing stays length-agnostic, so legacy full 64-hex refs still resolve. */\nexport const BLOB_HASH_HEX = 32;\n\n/** Full sha256 hex of the bytes. */\nexport function sha256Hex(bytes: Uint8Array): string {\n const hasher = new Bun.CryptoHasher(\"sha256\");\n hasher.update(bytes);\n return hasher.digest(\"hex\");\n}\n\n/** Canonical content hash for new blobs: sha256 of the bytes, truncated. */\nexport function blobHash(bytes: Uint8Array): string {\n return sha256Hex(bytes).slice(0, BLOB_HASH_HEX);\n}\n\n/** Verify fetched bytes match a content reference of either length (canonical\n * 32-hex or legacy 64-hex) — the ref is always a prefix of the full sha256. */\nexport function verifyBlobBytes(bytes: Uint8Array, hash: string): boolean {\n return sha256Hex(bytes).slice(0, hash.length) === hash;\n}\n\n/** Store bytes content-addressed under cache/. Returns its hash + path. */\nexport async function putBlob(data: ArrayBuffer | Uint8Array | string): Promise<BlobInfo> {\n const bytes =\n typeof data === \"string\"\n ? new TextEncoder().encode(data)\n : data instanceof Uint8Array\n ? data\n : new Uint8Array(data);\n const hash = blobHash(bytes);\n const path = blobPath(hash);\n if (!(await Bun.file(path).exists())) await Bun.write(path, bytes);\n return { hash, path, size: bytes.byteLength };\n}\n\nexport async function getBlob(hash: string): Promise<Uint8Array | null> {\n const file = Bun.file(blobPath(hash));\n if (!(await file.exists())) return null;\n return new Uint8Array(await file.arrayBuffer());\n}\n\n/** Whether this node currently holds a blob's bytes on disk — a cheap existence\n * check (no read). Use over the ledger when correctness depends on the bytes\n * actually being present (e.g. answering a peer's \"do you hold X\" before it\n * drops its own copy), since the ledger can lag a vanished file. */\nexport function blobExists(hash: string): Promise<boolean> {\n return Bun.file(blobPath(hash)).exists();\n}\n\n/** Store bytes under a GIVEN content hash (not recomputed) — for caching a blob\n * fetched from a peer/bucket by its reference, which may be a legacy 64-hex hash\n * that putBlob's truncation would not reproduce. Returns the byte length. */\nexport async function putBlobAt(hash: string, bytes: Uint8Array): Promise<number> {\n const path = blobPath(hash);\n if (!(await Bun.file(path).exists())) await Bun.write(path, bytes);\n return bytes.byteLength;\n}\n\n/** Remove a blob's bytes from the cache. Returns its size, or 0 if absent. */\nexport async function deleteBlob(hash: string): Promise<number> {\n const file = Bun.file(blobPath(hash));\n if (!(await file.exists())) return 0;\n const size = file.size;\n await file.delete();\n return size;\n}\n",
22
+ "// Portable (driver-only) half of the sites feature: types, name/path\n// canonicalization, MIME inference, and read paths. Split from sites.ts so the\n// browser replica's worker can serve site files offline without pulling the\n// blob store (cache.ts → node:fs) into a browser bundle. sites.ts re-exports\n// everything here — server-side callers keep importing from sites.ts.\n\nimport type { DbDriver } from \"./driver.ts\";\nimport { MhError } from \"./errors.ts\";\nimport { emit, grouped, withChangeGroup } from \"./crdt.ts\";\nimport { newId } from \"./ids.ts\";\nimport type { ColumnsOf } from \"./sqlcols.ts\";\n\nexport interface SiteRow {\n id: string;\n name: string;\n title: string | null;\n created_hlc: string;\n}\n\nexport const SITE_COLS = [\"id\", \"name\", \"title\", \"created_hlc\"] as const;\nconst _siteCols: ColumnsOf<SiteRow, typeof SITE_COLS> = SITE_COLS;\nconst SITE_SELECT = SITE_COLS.join(\", \");\n\nexport type FileEncoding = \"utf8\" | \"base64\" | \"blob\";\n\nexport interface SiteFileRow {\n id: string;\n site_id: string;\n path: string;\n content_type: string;\n encoding: FileEncoding;\n /** Inline text/base64, or a blob hash when encoding === \"blob\". */\n content: string | null;\n}\n\n/** Manifest entry — file metadata without the (potentially large) content. */\nexport type SiteFileSummary = Omit<SiteFileRow, \"content\">;\n\nexport const SITE_FILE_COLS = [\n \"id\", \"site_id\", \"path\", \"content_type\", \"encoding\", \"content\",\n] as const;\nconst _siteFileCols: ColumnsOf<SiteFileRow, typeof SITE_FILE_COLS> = SITE_FILE_COLS;\nexport const SITE_FILE_SELECT = SITE_FILE_COLS.join(\", \");\n\n// ---- mime / encoding helpers -----------------------------------------------\n\nconst MIME: Record<string, string> = {\n html: \"text/html; charset=utf-8\",\n htm: \"text/html; charset=utf-8\",\n css: \"text/css; charset=utf-8\",\n js: \"text/javascript; charset=utf-8\",\n mjs: \"text/javascript; charset=utf-8\",\n json: \"application/json; charset=utf-8\",\n svg: \"image/svg+xml\",\n txt: \"text/plain; charset=utf-8\",\n md: \"text/markdown; charset=utf-8\",\n xml: \"application/xml; charset=utf-8\",\n webmanifest: \"application/manifest+json\",\n ico: \"image/x-icon\",\n png: \"image/png\",\n jpg: \"image/jpeg\",\n jpeg: \"image/jpeg\",\n gif: \"image/gif\",\n webp: \"image/webp\",\n avif: \"image/avif\",\n woff: \"font/woff\",\n woff2: \"font/woff2\",\n ttf: \"font/ttf\",\n otf: \"font/otf\",\n pdf: \"application/pdf\",\n wasm: \"application/wasm\",\n // Audio / video: doc media blocks serve from /blob/<hash>.<ext>, so the byte\n // route needs a correct type for <video>/<audio> to play (esp. Safari, which\n // refuses octet-stream). Keep in sync with blocks.ts VIDEO_EXTS / AUDIO_EXTS.\n mp4: \"video/mp4\",\n m4v: \"video/mp4\",\n webm: \"video/webm\",\n ogv: \"video/ogg\",\n mov: \"video/quicktime\",\n mkv: \"video/x-matroska\",\n mp3: \"audio/mpeg\",\n wav: \"audio/wav\",\n ogg: \"audio/ogg\",\n oga: \"audio/ogg\",\n m4a: \"audio/mp4\",\n aac: \"audio/aac\",\n flac: \"audio/flac\",\n opus: \"audio/opus\",\n weba: \"audio/webm\",\n // Common attachment types so a downloaded file keeps a sensible type.\n csv: \"text/csv; charset=utf-8\",\n zip: \"application/zip\",\n gz: \"application/gzip\",\n tar: \"application/x-tar\",\n doc: \"application/msword\",\n docx: \"application/vnd.openxmlformats-officedocument.wordprocessingml.document\",\n xls: \"application/vnd.ms-excel\",\n xlsx: \"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet\",\n ppt: \"application/vnd.ms-powerpoint\",\n pptx: \"application/vnd.openxmlformats-officedocument.presentationml.presentation\",\n};\n\n/** Guess a content type from a file path's extension; default octet-stream. */\nexport function inferContentType(path: string): string {\n const ext = path.slice(path.lastIndexOf(\".\") + 1).toLowerCase();\n return MIME[ext] ?? \"application/octet-stream\";\n}\n\n// ---- name / path normalization ---------------------------------------------\n\n/**\n * Canonical site slug: lowercase, [a-z0-9-] only, no leading/trailing/repeated\n * dashes. Applied at every write and lookup so the served URL (/sites/<name>/),\n * duplicate detection, and sync replication all agree on one form regardless of\n * how the name was typed (CLI, API, or browser). Throws when nothing usable\n * remains (empty, or all-punctuation). Matches the WebUI's slugify exactly.\n */\nexport function normalizeSiteName(raw: string): string {\n const slug = raw\n .trim()\n .toLowerCase()\n .replace(/[^a-z0-9-]+/g, \"-\")\n .replace(/^-+|-+$/g, \"\");\n if (!slug) throw new MhError(\"invalid_input\", `invalid site name: ${JSON.stringify(raw)}`);\n return slug;\n}\n\n/**\n * Canonical in-site file path: drop empty / \".\" segments, resolve \"..\" within\n * the bucket, strip leading and duplicate slashes. Files live in SQLite keyed by\n * this exact string (there is no filesystem behind them), so normalizing at the\n * write/serve boundary keeps storage, URL routing, and deletes consistent no\n * matter how the path was typed or percent-encoded. May return \"\" (caller decides).\n */\nexport function normalizeSitePath(raw: string): string {\n const segs: string[] = [];\n for (const seg of raw.split(\"/\")) {\n if (seg === \"\" || seg === \".\") continue;\n if (seg === \"..\") segs.pop();\n else segs.push(seg);\n }\n return segs.join(\"/\");\n}\n\n// ---- read paths --------------------------------------------------------------\n\nexport function getSite(db: DbDriver, id: string): SiteRow | null {\n return db\n .query(`SELECT ${SITE_SELECT} FROM sites WHERE id = ? AND __deleted = 0`)\n .get(id) as SiteRow | null;\n}\n\n/** Most recently created live site with this name (URL routing). */\nexport function getSiteByName(db: DbDriver, name: string): SiteRow | null {\n // Normalize so lookups, dedup, and URL routing all key off the canonical slug\n // (e.g. \"Demo\" and \"demo\" collide). An unusable name simply matches nothing.\n let slug: string;\n try {\n slug = normalizeSiteName(name);\n } catch {\n return null;\n }\n return db\n .query(\n `SELECT ${SITE_SELECT} FROM sites WHERE name = ? AND __deleted = 0 ORDER BY created_hlc DESC LIMIT 1`,\n )\n .get(slug) as SiteRow | null;\n}\n\nexport function listSites(db: DbDriver): SiteRow[] {\n return db\n .query(`SELECT ${SITE_SELECT} FROM sites WHERE __deleted = 0 ORDER BY created_hlc`)\n .all() as SiteRow[];\n}\n\n/** Resolve a site ref (`site_…` id or name) to its row, or throw. */\nexport function resolveSite(db: DbDriver, ref: string): SiteRow {\n const byId = ref.startsWith(\"site_\") ? getSite(db, ref) : null;\n const site = byId ?? getSiteByName(db, ref);\n if (!site) throw new MhError(\"not_found\", `no such site: ${ref}`);\n return site;\n}\n\n/**\n * Portable half of file serving: canonical path resolution (\"\" / trailing \"/\"\n * → index.html, same normalization putFile stored under) + the raw row. Used\n * directly by the browser replica's worker, which must decode utf8/base64\n * itself and cannot reach \"blob\" content at all (blob bytes live in the\n * server's on-disk store, not the oplog — they don't replicate).\n */\nexport function getFileRow(\n db: DbDriver,\n siteId: string,\n path: string,\n): { content_type: string; encoding: FileEncoding; content: string | null } | null {\n // Resolve directory-style requests to index.html *before* normalizing (the\n // trailing-slash signal is lost once empty segments are dropped).\n const withIndex = path === \"\" || path.endsWith(\"/\") ? `${path}index.html` : path;\n const p = normalizeSitePath(withIndex);\n if (!p) return null;\n return db\n .query(\n \"SELECT content_type, encoding, content FROM site_files WHERE site_id = ? AND path = ? AND __deleted = 0 ORDER BY created_hlc LIMIT 1\",\n )\n .get(siteId, p) as { content_type: string; encoding: FileEncoding; content: string | null } | null;\n}\n\nexport function listFiles(db: DbDriver, siteId: string): SiteFileSummary[] {\n return db\n .query(\n \"SELECT id, site_id, path, content_type, encoding FROM site_files WHERE site_id = ? AND __deleted = 0 ORDER BY path\",\n )\n .all(siteId) as SiteFileSummary[];\n}\n\n// ---- portable mutations -----------------------------------------------------\n// All write through emit() so sites replicate over the oplog. These are\n// driver-only (no node:fs / blob store), so the browser replica can author\n// sites offline too — large-binary blob storage is the one server-only piece\n// (see putFile in sites.ts).\n\n/** Binaries at or below this size store inline (base64); larger need a blob. */\nexport const INLINE_LIMIT = 256 * 1024;\n\n/** Text-ish types store as readable utf8; everything else is binary. */\nexport function isTextType(contentType: string): boolean {\n const ct = contentType.toLowerCase();\n return (\n ct.startsWith(\"text/\") ||\n ct.startsWith(\"application/json\") ||\n ct.startsWith(\"application/manifest+json\") ||\n ct.startsWith(\"application/xml\") ||\n ct.startsWith(\"application/javascript\") ||\n ct.startsWith(\"image/svg+xml\")\n );\n}\n\n/** Raster image types (svg is text, handled by isTextType). These always store\n * as a content-addressed blob regardless of size — they never base64-inline\n * into the oplog, keeping replicas lean. */\nexport function isImageType(contentType: string): boolean {\n return contentType.toLowerCase().startsWith(\"image/\") && !isTextType(contentType);\n}\n\nexport function toBytes(data: string | Uint8Array | ArrayBuffer): Uint8Array {\n if (typeof data === \"string\") return new TextEncoder().encode(data);\n return data instanceof Uint8Array ? data : new Uint8Array(data);\n}\n\n/** Portable base64 (no Buffer): for inline small-binary file content. */\nfunction bytesToBase64(bytes: Uint8Array): string {\n let s = \"\";\n for (let i = 0; i < bytes.length; i++) s += String.fromCharCode(bytes[i]!);\n return btoa(s);\n}\n\nexport const createSite = grouped(function createSite(\n db: DbDriver,\n opts: { name: string; title?: string },\n): SiteRow {\n const name = normalizeSiteName(opts.name);\n if (getSiteByName(db, name)) throw new MhError(\"conflict\", `site name already exists: ${name}`);\n const id = newId(\"site\", name);\n const first = emit(db, \"sites\", id, \"name\", name);\n emit(db, \"sites\", id, \"created_hlc\", first.hlc);\n if (opts.title !== undefined) emit(db, \"sites\", id, \"title\", opts.title);\n return getSite(db, id)!;\n});\n\n/** Rename a site and/or change its title. Guards against duplicate names. */\nexport const updateSite = grouped(function updateSite(\n db: DbDriver,\n id: string,\n opts: { name?: string; title?: string },\n): SiteRow {\n if (!getSite(db, id)) throw new MhError(\"not_found\", `no such site: ${id}`);\n if (opts.name !== undefined) {\n const name = normalizeSiteName(opts.name);\n const dup = getSiteByName(db, name);\n if (dup && dup.id !== id) throw new MhError(\"conflict\", `site name already exists: ${name}`);\n emit(db, \"sites\", id, \"name\", name);\n }\n if (opts.title !== undefined) emit(db, \"sites\", id, \"title\", opts.title);\n return getSite(db, id)!;\n});\n\nexport const deleteSite = grouped(function deleteSite(db: DbDriver, id: string): boolean {\n if (!getSite(db, id)) return false;\n const files = db\n .query(\"SELECT id FROM site_files WHERE site_id = ? AND __deleted = 0\")\n .all(id) as { id: string }[];\n for (const f of files) emit(db, \"site_files\", f.id, \"__deleted\", 1);\n emit(db, \"sites\", id, \"__deleted\", 1);\n return true;\n});\n\n/** Stable id for a (site, path) pair so re-uploads merge instead of duplicate. */\nexport function fileIdFor(db: DbDriver, siteId: string, path: string): string | null {\n const row = db\n .query(\"SELECT id FROM site_files WHERE site_id = ? AND path = ? ORDER BY created_hlc LIMIT 1\")\n .get(siteId, path) as { id: string } | null;\n return row?.id ?? null;\n}\n\n/** Emit the register writes for one file (shared by inline + blob put paths). */\nexport function writeFileRow(\n db: DbDriver,\n siteId: string,\n cleanPath: string,\n contentType: string,\n encoding: FileEncoding,\n content: string,\n): SiteFileRow {\n const existing = fileIdFor(db, siteId, cleanPath);\n const id = existing ?? newId(\"sf\", cleanPath);\n withChangeGroup(null, () => {\n if (!existing) {\n const first = emit(db, \"site_files\", id, \"site_id\", siteId);\n emit(db, \"site_files\", id, \"path\", cleanPath);\n emit(db, \"site_files\", id, \"created_hlc\", first.hlc);\n }\n emit(db, \"site_files\", id, \"content_type\", contentType);\n emit(db, \"site_files\", id, \"encoding\", encoding);\n emit(db, \"site_files\", id, \"content\", content);\n emit(db, \"site_files\", id, \"__deleted\", 0); // un-delete on re-upload\n });\n return db.query(`SELECT ${SITE_FILE_SELECT} FROM site_files WHERE id = ?`).get(id) as SiteFileRow;\n}\n\n/**\n * Upload/replace one file inline (utf8 text or small base64 binary) — portable,\n * so the browser replica authors sites offline. Binaries over INLINE_LIMIT need\n * the server-only blob store; here they throw (sites.ts putFile handles them).\n */\nexport function putFileInline(\n db: DbDriver,\n siteId: string,\n path: string,\n opts: { data: string | Uint8Array | ArrayBuffer; contentType?: string },\n): SiteFileRow {\n const cleanPath = normalizeSitePath(path);\n if (!cleanPath) throw new MhError(\"invalid_input\", `invalid file path: ${JSON.stringify(path)}`);\n const contentType = opts.contentType ?? inferContentType(cleanPath);\n let encoding: FileEncoding;\n let content: string;\n if (isTextType(contentType)) {\n encoding = \"utf8\";\n content = typeof opts.data === \"string\" ? opts.data : new TextDecoder().decode(toBytes(opts.data));\n } else {\n const bytes = toBytes(opts.data);\n if (bytes.byteLength > INLINE_LIMIT)\n throw new MhError(\n \"invalid_input\",\n \"binary too large for inline storage (needs a server-backed blob)\",\n );\n encoding = \"base64\";\n content = bytesToBase64(bytes);\n }\n return writeFileRow(db, siteId, cleanPath, contentType, encoding, content);\n}\n\nexport const deleteFile = grouped(function deleteFile(\n db: DbDriver,\n siteId: string,\n path: string,\n): boolean {\n const id = fileIdFor(db, siteId, normalizeSitePath(path));\n if (!id) return false;\n const live = db.query(\"SELECT __deleted AS d FROM site_files WHERE id = ?\").get(id) as {\n d: number;\n } | null;\n if (!live || live.d) return false;\n emit(db, \"site_files\", id, \"__deleted\", 1);\n return true;\n});\n\n/** Count of live files per site (for the management list's file_count). */\nexport function fileCount(db: DbDriver, siteId: string): number {\n return (\n db\n .query(\"SELECT COUNT(*) AS n FROM site_files WHERE site_id = ? AND __deleted = 0\")\n .get(siteId) as { n: number }\n ).n;\n}\n",
16
23
  "var _a;\n/** A special constant with type `never` */\nexport const NEVER = /*@__PURE__*/ Object.freeze({\n status: \"aborted\",\n});\nexport /*@__NO_SIDE_EFFECTS__*/ function $constructor(name, initializer, params) {\n function init(inst, def) {\n if (!inst._zod) {\n Object.defineProperty(inst, \"_zod\", {\n value: {\n def,\n constr: _,\n traits: new Set(),\n },\n enumerable: false,\n });\n }\n if (inst._zod.traits.has(name)) {\n return;\n }\n inst._zod.traits.add(name);\n initializer(inst, def);\n // support prototype modifications\n const proto = _.prototype;\n const keys = Object.keys(proto);\n for (let i = 0; i < keys.length; i++) {\n const k = keys[i];\n if (!(k in inst)) {\n inst[k] = proto[k].bind(inst);\n }\n }\n }\n // doesn't work if Parent has a constructor with arguments\n const Parent = params?.Parent ?? Object;\n class Definition extends Parent {\n }\n Object.defineProperty(Definition, \"name\", { value: name });\n function _(def) {\n var _a;\n const inst = params?.Parent ? new Definition() : this;\n init(inst, def);\n (_a = inst._zod).deferred ?? (_a.deferred = []);\n for (const fn of inst._zod.deferred) {\n fn();\n }\n return inst;\n }\n Object.defineProperty(_, \"init\", { value: init });\n Object.defineProperty(_, Symbol.hasInstance, {\n value: (inst) => {\n if (params?.Parent && inst instanceof params.Parent)\n return true;\n return inst?._zod?.traits?.has(name);\n },\n });\n Object.defineProperty(_, \"name\", { value: name });\n return _;\n}\n////////////////////////////// UTILITIES ///////////////////////////////////////\nexport const $brand = Symbol(\"zod_brand\");\nexport class $ZodAsyncError extends Error {\n constructor() {\n super(`Encountered Promise during synchronous parse. Use .parseAsync() instead.`);\n }\n}\nexport class $ZodEncodeError extends Error {\n constructor(name) {\n super(`Encountered unidirectional transform during encode: ${name}`);\n this.name = \"ZodEncodeError\";\n }\n}\n(_a = globalThis).__zod_globalConfig ?? (_a.__zod_globalConfig = {});\nexport const globalConfig = globalThis.__zod_globalConfig;\nexport function config(newConfig) {\n if (newConfig)\n Object.assign(globalConfig, newConfig);\n return globalConfig;\n}\n",
17
24
  "import { globalConfig } from \"./core.js\";\n// functions\nexport function assertEqual(val) {\n return val;\n}\nexport function assertNotEqual(val) {\n return val;\n}\nexport function assertIs(_arg) { }\nexport function assertNever(_x) {\n throw new Error(\"Unexpected value in exhaustive check\");\n}\nexport function assert(_) { }\nexport function getEnumValues(entries) {\n const numericValues = Object.values(entries).filter((v) => typeof v === \"number\");\n const values = Object.entries(entries)\n .filter(([k, _]) => numericValues.indexOf(+k) === -1)\n .map(([_, v]) => v);\n return values;\n}\nexport function joinValues(array, separator = \"|\") {\n return array.map((val) => stringifyPrimitive(val)).join(separator);\n}\nexport function jsonStringifyReplacer(_, value) {\n if (typeof value === \"bigint\")\n return value.toString();\n return value;\n}\nexport function cached(getter) {\n const set = false;\n return {\n get value() {\n if (!set) {\n const value = getter();\n Object.defineProperty(this, \"value\", { value });\n return value;\n }\n throw new Error(\"cached value already set\");\n },\n };\n}\nexport function nullish(input) {\n return input === null || input === undefined;\n}\nexport function cleanRegex(source) {\n const start = source.startsWith(\"^\") ? 1 : 0;\n const end = source.endsWith(\"$\") ? source.length - 1 : source.length;\n return source.slice(start, end);\n}\nexport function floatSafeRemainder(val, step) {\n const ratio = val / step;\n const roundedRatio = Math.round(ratio);\n // Use a relative epsilon scaled to the magnitude of the result\n const tolerance = Number.EPSILON * Math.max(Math.abs(ratio), 1);\n if (Math.abs(ratio - roundedRatio) < tolerance)\n return 0;\n return ratio - roundedRatio;\n}\nconst EVALUATING = /* @__PURE__*/ Symbol(\"evaluating\");\nexport function defineLazy(object, key, getter) {\n let value = undefined;\n Object.defineProperty(object, key, {\n get() {\n if (value === EVALUATING) {\n // Circular reference detected, return undefined to break the cycle\n return undefined;\n }\n if (value === undefined) {\n value = EVALUATING;\n value = getter();\n }\n return value;\n },\n set(v) {\n Object.defineProperty(object, key, {\n value: v,\n // configurable: true,\n });\n // object[key] = v;\n },\n configurable: true,\n });\n}\nexport function objectClone(obj) {\n return Object.create(Object.getPrototypeOf(obj), Object.getOwnPropertyDescriptors(obj));\n}\nexport function assignProp(target, prop, value) {\n Object.defineProperty(target, prop, {\n value,\n writable: true,\n enumerable: true,\n configurable: true,\n });\n}\nexport function mergeDefs(...defs) {\n const mergedDescriptors = {};\n for (const def of defs) {\n const descriptors = Object.getOwnPropertyDescriptors(def);\n Object.assign(mergedDescriptors, descriptors);\n }\n return Object.defineProperties({}, mergedDescriptors);\n}\nexport function cloneDef(schema) {\n return mergeDefs(schema._zod.def);\n}\nexport function getElementAtPath(obj, path) {\n if (!path)\n return obj;\n return path.reduce((acc, key) => acc?.[key], obj);\n}\nexport function promiseAllObject(promisesObj) {\n const keys = Object.keys(promisesObj);\n const promises = keys.map((key) => promisesObj[key]);\n return Promise.all(promises).then((results) => {\n const resolvedObj = {};\n for (let i = 0; i < keys.length; i++) {\n resolvedObj[keys[i]] = results[i];\n }\n return resolvedObj;\n });\n}\nexport function randomString(length = 10) {\n const chars = \"abcdefghijklmnopqrstuvwxyz\";\n let str = \"\";\n for (let i = 0; i < length; i++) {\n str += chars[Math.floor(Math.random() * chars.length)];\n }\n return str;\n}\nexport function esc(str) {\n return JSON.stringify(str);\n}\nexport function slugify(input) {\n return input\n .toLowerCase()\n .trim()\n .replace(/[^\\w\\s-]/g, \"\")\n .replace(/[\\s_-]+/g, \"-\")\n .replace(/^-+|-+$/g, \"\");\n}\nexport const captureStackTrace = (\"captureStackTrace\" in Error ? Error.captureStackTrace : (..._args) => { });\nexport function isObject(data) {\n return typeof data === \"object\" && data !== null && !Array.isArray(data);\n}\nexport const allowsEval = /* @__PURE__*/ cached(() => {\n // Skip the probe under `jitless`: strict CSPs report the caught `new Function`\n // as a `securitypolicyviolation` even though the throw is swallowed.\n if (globalConfig.jitless) {\n return false;\n }\n // @ts-ignore\n if (typeof navigator !== \"undefined\" && navigator?.userAgent?.includes(\"Cloudflare\")) {\n return false;\n }\n try {\n const F = Function;\n new F(\"\");\n return true;\n }\n catch (_) {\n return false;\n }\n});\nexport function isPlainObject(o) {\n if (isObject(o) === false)\n return false;\n // modified constructor\n const ctor = o.constructor;\n if (ctor === undefined)\n return true;\n if (typeof ctor !== \"function\")\n return true;\n // modified prototype\n const prot = ctor.prototype;\n if (isObject(prot) === false)\n return false;\n // ctor doesn't have static `isPrototypeOf`\n if (Object.prototype.hasOwnProperty.call(prot, \"isPrototypeOf\") === false) {\n return false;\n }\n return true;\n}\nexport function shallowClone(o) {\n if (isPlainObject(o))\n return { ...o };\n if (Array.isArray(o))\n return [...o];\n if (o instanceof Map)\n return new Map(o);\n if (o instanceof Set)\n return new Set(o);\n return o;\n}\nexport function numKeys(data) {\n let keyCount = 0;\n for (const key in data) {\n if (Object.prototype.hasOwnProperty.call(data, key)) {\n keyCount++;\n }\n }\n return keyCount;\n}\nexport const getParsedType = (data) => {\n const t = typeof data;\n switch (t) {\n case \"undefined\":\n return \"undefined\";\n case \"string\":\n return \"string\";\n case \"number\":\n return Number.isNaN(data) ? \"nan\" : \"number\";\n case \"boolean\":\n return \"boolean\";\n case \"function\":\n return \"function\";\n case \"bigint\":\n return \"bigint\";\n case \"symbol\":\n return \"symbol\";\n case \"object\":\n if (Array.isArray(data)) {\n return \"array\";\n }\n if (data === null) {\n return \"null\";\n }\n if (data.then && typeof data.then === \"function\" && data.catch && typeof data.catch === \"function\") {\n return \"promise\";\n }\n if (typeof Map !== \"undefined\" && data instanceof Map) {\n return \"map\";\n }\n if (typeof Set !== \"undefined\" && data instanceof Set) {\n return \"set\";\n }\n if (typeof Date !== \"undefined\" && data instanceof Date) {\n return \"date\";\n }\n // @ts-ignore\n if (typeof File !== \"undefined\" && data instanceof File) {\n return \"file\";\n }\n return \"object\";\n default:\n throw new Error(`Unknown data type: ${t}`);\n }\n};\nexport const propertyKeyTypes = /* @__PURE__*/ new Set([\"string\", \"number\", \"symbol\"]);\nexport const primitiveTypes = /* @__PURE__*/ new Set([\n \"string\",\n \"number\",\n \"bigint\",\n \"boolean\",\n \"symbol\",\n \"undefined\",\n]);\nexport function escapeRegex(str) {\n return str.replace(/[.*+?^${}()|[\\]\\\\]/g, \"\\\\$&\");\n}\n// zod-specific utils\nexport function clone(inst, def, params) {\n const cl = new inst._zod.constr(def ?? inst._zod.def);\n if (!def || params?.parent)\n cl._zod.parent = inst;\n return cl;\n}\nexport function normalizeParams(_params) {\n const params = _params;\n if (!params)\n return {};\n if (typeof params === \"string\")\n return { error: () => params };\n if (params?.message !== undefined) {\n if (params?.error !== undefined)\n throw new Error(\"Cannot specify both `message` and `error` params\");\n params.error = params.message;\n }\n delete params.message;\n if (typeof params.error === \"string\")\n return { ...params, error: () => params.error };\n return params;\n}\nexport function createTransparentProxy(getter) {\n let target;\n return new Proxy({}, {\n get(_, prop, receiver) {\n target ?? (target = getter());\n return Reflect.get(target, prop, receiver);\n },\n set(_, prop, value, receiver) {\n target ?? (target = getter());\n return Reflect.set(target, prop, value, receiver);\n },\n has(_, prop) {\n target ?? (target = getter());\n return Reflect.has(target, prop);\n },\n deleteProperty(_, prop) {\n target ?? (target = getter());\n return Reflect.deleteProperty(target, prop);\n },\n ownKeys(_) {\n target ?? (target = getter());\n return Reflect.ownKeys(target);\n },\n getOwnPropertyDescriptor(_, prop) {\n target ?? (target = getter());\n return Reflect.getOwnPropertyDescriptor(target, prop);\n },\n defineProperty(_, prop, descriptor) {\n target ?? (target = getter());\n return Reflect.defineProperty(target, prop, descriptor);\n },\n });\n}\nexport function stringifyPrimitive(value) {\n if (typeof value === \"bigint\")\n return value.toString() + \"n\";\n if (typeof value === \"string\")\n return `\"${value}\"`;\n return `${value}`;\n}\nexport function optionalKeys(shape) {\n return Object.keys(shape).filter((k) => {\n return shape[k]._zod.optin === \"optional\" && shape[k]._zod.optout === \"optional\";\n });\n}\nexport const NUMBER_FORMAT_RANGES = {\n safeint: [Number.MIN_SAFE_INTEGER, Number.MAX_SAFE_INTEGER],\n int32: [-2147483648, 2147483647],\n uint32: [0, 4294967295],\n float32: [-3.4028234663852886e38, 3.4028234663852886e38],\n float64: [-Number.MAX_VALUE, Number.MAX_VALUE],\n};\nexport const BIGINT_FORMAT_RANGES = {\n int64: [/* @__PURE__*/ BigInt(\"-9223372036854775808\"), /* @__PURE__*/ BigInt(\"9223372036854775807\")],\n uint64: [/* @__PURE__*/ BigInt(0), /* @__PURE__*/ BigInt(\"18446744073709551615\")],\n};\nexport function pick(schema, mask) {\n const currDef = schema._zod.def;\n const checks = currDef.checks;\n const hasChecks = checks && checks.length > 0;\n if (hasChecks) {\n throw new Error(\".pick() cannot be used on object schemas containing refinements\");\n }\n const def = mergeDefs(schema._zod.def, {\n get shape() {\n const newShape = {};\n for (const key in mask) {\n if (!(key in currDef.shape)) {\n throw new Error(`Unrecognized key: \"${key}\"`);\n }\n if (!mask[key])\n continue;\n newShape[key] = currDef.shape[key];\n }\n assignProp(this, \"shape\", newShape); // self-caching\n return newShape;\n },\n checks: [],\n });\n return clone(schema, def);\n}\nexport function omit(schema, mask) {\n const currDef = schema._zod.def;\n const checks = currDef.checks;\n const hasChecks = checks && checks.length > 0;\n if (hasChecks) {\n throw new Error(\".omit() cannot be used on object schemas containing refinements\");\n }\n const def = mergeDefs(schema._zod.def, {\n get shape() {\n const newShape = { ...schema._zod.def.shape };\n for (const key in mask) {\n if (!(key in currDef.shape)) {\n throw new Error(`Unrecognized key: \"${key}\"`);\n }\n if (!mask[key])\n continue;\n delete newShape[key];\n }\n assignProp(this, \"shape\", newShape); // self-caching\n return newShape;\n },\n checks: [],\n });\n return clone(schema, def);\n}\nexport function extend(schema, shape) {\n if (!isPlainObject(shape)) {\n throw new Error(\"Invalid input to extend: expected a plain object\");\n }\n const checks = schema._zod.def.checks;\n const hasChecks = checks && checks.length > 0;\n if (hasChecks) {\n // Only throw if new shape overlaps with existing shape\n // Use getOwnPropertyDescriptor to check key existence without accessing values\n const existingShape = schema._zod.def.shape;\n for (const key in shape) {\n if (Object.getOwnPropertyDescriptor(existingShape, key) !== undefined) {\n throw new Error(\"Cannot overwrite keys on object schemas containing refinements. Use `.safeExtend()` instead.\");\n }\n }\n }\n const def = mergeDefs(schema._zod.def, {\n get shape() {\n const _shape = { ...schema._zod.def.shape, ...shape };\n assignProp(this, \"shape\", _shape); // self-caching\n return _shape;\n },\n });\n return clone(schema, def);\n}\nexport function safeExtend(schema, shape) {\n if (!isPlainObject(shape)) {\n throw new Error(\"Invalid input to safeExtend: expected a plain object\");\n }\n const def = mergeDefs(schema._zod.def, {\n get shape() {\n const _shape = { ...schema._zod.def.shape, ...shape };\n assignProp(this, \"shape\", _shape); // self-caching\n return _shape;\n },\n });\n return clone(schema, def);\n}\nexport function merge(a, b) {\n if (a._zod.def.checks?.length) {\n throw new Error(\".merge() cannot be used on object schemas containing refinements. Use .safeExtend() instead.\");\n }\n const def = mergeDefs(a._zod.def, {\n get shape() {\n const _shape = { ...a._zod.def.shape, ...b._zod.def.shape };\n assignProp(this, \"shape\", _shape); // self-caching\n return _shape;\n },\n get catchall() {\n return b._zod.def.catchall;\n },\n checks: b._zod.def.checks ?? [],\n });\n return clone(a, def);\n}\nexport function partial(Class, schema, mask) {\n const currDef = schema._zod.def;\n const checks = currDef.checks;\n const hasChecks = checks && checks.length > 0;\n if (hasChecks) {\n throw new Error(\".partial() cannot be used on object schemas containing refinements\");\n }\n const def = mergeDefs(schema._zod.def, {\n get shape() {\n const oldShape = schema._zod.def.shape;\n const shape = { ...oldShape };\n if (mask) {\n for (const key in mask) {\n if (!(key in oldShape)) {\n throw new Error(`Unrecognized key: \"${key}\"`);\n }\n if (!mask[key])\n continue;\n // if (oldShape[key]!._zod.optin === \"optional\") continue;\n shape[key] = Class\n ? new Class({\n type: \"optional\",\n innerType: oldShape[key],\n })\n : oldShape[key];\n }\n }\n else {\n for (const key in oldShape) {\n // if (oldShape[key]!._zod.optin === \"optional\") continue;\n shape[key] = Class\n ? new Class({\n type: \"optional\",\n innerType: oldShape[key],\n })\n : oldShape[key];\n }\n }\n assignProp(this, \"shape\", shape); // self-caching\n return shape;\n },\n checks: [],\n });\n return clone(schema, def);\n}\nexport function required(Class, schema, mask) {\n const def = mergeDefs(schema._zod.def, {\n get shape() {\n const oldShape = schema._zod.def.shape;\n const shape = { ...oldShape };\n if (mask) {\n for (const key in mask) {\n if (!(key in shape)) {\n throw new Error(`Unrecognized key: \"${key}\"`);\n }\n if (!mask[key])\n continue;\n // overwrite with non-optional\n shape[key] = new Class({\n type: \"nonoptional\",\n innerType: oldShape[key],\n });\n }\n }\n else {\n for (const key in oldShape) {\n // overwrite with non-optional\n shape[key] = new Class({\n type: \"nonoptional\",\n innerType: oldShape[key],\n });\n }\n }\n assignProp(this, \"shape\", shape); // self-caching\n return shape;\n },\n });\n return clone(schema, def);\n}\n// invalid_type | too_big | too_small | invalid_format | not_multiple_of | unrecognized_keys | invalid_union | invalid_key | invalid_element | invalid_value | custom\nexport function aborted(x, startIndex = 0) {\n if (x.aborted === true)\n return true;\n for (let i = startIndex; i < x.issues.length; i++) {\n if (x.issues[i]?.continue !== true) {\n return true;\n }\n }\n return false;\n}\n// Checks for explicit abort (continue === false), as opposed to implicit abort (continue === undefined).\n// Used to respect `abort: true` in .refine() even for checks that have a `when` function.\nexport function explicitlyAborted(x, startIndex = 0) {\n if (x.aborted === true)\n return true;\n for (let i = startIndex; i < x.issues.length; i++) {\n if (x.issues[i]?.continue === false) {\n return true;\n }\n }\n return false;\n}\nexport function prefixIssues(path, issues) {\n return issues.map((iss) => {\n var _a;\n (_a = iss).path ?? (_a.path = []);\n iss.path.unshift(path);\n return iss;\n });\n}\nexport function unwrapMessage(message) {\n return typeof message === \"string\" ? message : message?.message;\n}\nexport function finalizeIssue(iss, ctx, config) {\n const message = iss.message\n ? iss.message\n : (unwrapMessage(iss.inst?._zod.def?.error?.(iss)) ??\n unwrapMessage(ctx?.error?.(iss)) ??\n unwrapMessage(config.customError?.(iss)) ??\n unwrapMessage(config.localeError?.(iss)) ??\n \"Invalid input\");\n const { inst: _inst, continue: _continue, input: _input, ...rest } = iss;\n rest.path ?? (rest.path = []);\n rest.message = message;\n if (ctx?.reportInput) {\n rest.input = _input;\n }\n return rest;\n}\nexport function getSizableOrigin(input) {\n if (input instanceof Set)\n return \"set\";\n if (input instanceof Map)\n return \"map\";\n // @ts-ignore\n if (input instanceof File)\n return \"file\";\n return \"unknown\";\n}\nexport function getLengthableOrigin(input) {\n if (Array.isArray(input))\n return \"array\";\n if (typeof input === \"string\")\n return \"string\";\n return \"unknown\";\n}\nexport function parsedType(data) {\n const t = typeof data;\n switch (t) {\n case \"number\": {\n return Number.isNaN(data) ? \"nan\" : \"number\";\n }\n case \"object\": {\n if (data === null) {\n return \"null\";\n }\n if (Array.isArray(data)) {\n return \"array\";\n }\n const obj = data;\n if (obj && Object.getPrototypeOf(obj) !== Object.prototype && \"constructor\" in obj && obj.constructor) {\n return obj.constructor.name;\n }\n }\n }\n return t;\n}\nexport function issue(...args) {\n const [iss, input, inst] = args;\n if (typeof iss === \"string\") {\n return {\n message: iss,\n code: \"custom\",\n input,\n inst,\n };\n }\n return { ...iss };\n}\nexport function cleanEnum(obj) {\n return Object.entries(obj)\n .filter(([k, _]) => {\n // return true if NaN, meaning it's not a number, thus a string key\n return Number.isNaN(Number.parseInt(k, 10));\n })\n .map((el) => el[1]);\n}\n// Codec utility functions\nexport function base64ToUint8Array(base64) {\n const binaryString = atob(base64);\n const bytes = new Uint8Array(binaryString.length);\n for (let i = 0; i < binaryString.length; i++) {\n bytes[i] = binaryString.charCodeAt(i);\n }\n return bytes;\n}\nexport function uint8ArrayToBase64(bytes) {\n let binaryString = \"\";\n for (let i = 0; i < bytes.length; i++) {\n binaryString += String.fromCharCode(bytes[i]);\n }\n return btoa(binaryString);\n}\nexport function base64urlToUint8Array(base64url) {\n const base64 = base64url.replace(/-/g, \"+\").replace(/_/g, \"/\");\n const padding = \"=\".repeat((4 - (base64.length % 4)) % 4);\n return base64ToUint8Array(base64 + padding);\n}\nexport function uint8ArrayToBase64url(bytes) {\n return uint8ArrayToBase64(bytes).replace(/\\+/g, \"-\").replace(/\\//g, \"_\").replace(/=/g, \"\");\n}\nexport function hexToUint8Array(hex) {\n const cleanHex = hex.replace(/^0x/, \"\");\n if (cleanHex.length % 2 !== 0) {\n throw new Error(\"Invalid hex string length\");\n }\n const bytes = new Uint8Array(cleanHex.length / 2);\n for (let i = 0; i < cleanHex.length; i += 2) {\n bytes[i / 2] = Number.parseInt(cleanHex.slice(i, i + 2), 16);\n }\n return bytes;\n}\nexport function uint8ArrayToHex(bytes) {\n return Array.from(bytes)\n .map((b) => b.toString(16).padStart(2, \"0\"))\n .join(\"\");\n}\n// instanceof\nexport class Class {\n constructor(..._args) { }\n}\n",
18
25
  "import { $constructor } from \"./core.js\";\nimport * as util from \"./util.js\";\nconst initializer = (inst, def) => {\n inst.name = \"$ZodError\";\n Object.defineProperty(inst, \"_zod\", {\n value: inst._zod,\n enumerable: false,\n });\n Object.defineProperty(inst, \"issues\", {\n value: def,\n enumerable: false,\n });\n inst.message = JSON.stringify(def, util.jsonStringifyReplacer, 2);\n Object.defineProperty(inst, \"toString\", {\n value: () => inst.message,\n enumerable: false,\n });\n};\nexport const $ZodError = $constructor(\"$ZodError\", initializer);\nexport const $ZodRealError = $constructor(\"$ZodError\", initializer, { Parent: Error });\nexport function flattenError(error, mapper = (issue) => issue.message) {\n const fieldErrors = {};\n const formErrors = [];\n for (const sub of error.issues) {\n if (sub.path.length > 0) {\n fieldErrors[sub.path[0]] = fieldErrors[sub.path[0]] || [];\n fieldErrors[sub.path[0]].push(mapper(sub));\n }\n else {\n formErrors.push(mapper(sub));\n }\n }\n return { formErrors, fieldErrors };\n}\nexport function formatError(error, mapper = (issue) => issue.message) {\n const fieldErrors = { _errors: [] };\n const processError = (error, path = []) => {\n for (const issue of error.issues) {\n if (issue.code === \"invalid_union\" && issue.errors.length) {\n issue.errors.map((issues) => processError({ issues }, [...path, ...issue.path]));\n }\n else if (issue.code === \"invalid_key\") {\n processError({ issues: issue.issues }, [...path, ...issue.path]);\n }\n else if (issue.code === \"invalid_element\") {\n processError({ issues: issue.issues }, [...path, ...issue.path]);\n }\n else {\n const fullpath = [...path, ...issue.path];\n if (fullpath.length === 0) {\n fieldErrors._errors.push(mapper(issue));\n }\n else {\n let curr = fieldErrors;\n let i = 0;\n while (i < fullpath.length) {\n const el = fullpath[i];\n const terminal = i === fullpath.length - 1;\n if (!terminal) {\n curr[el] = curr[el] || { _errors: [] };\n }\n else {\n curr[el] = curr[el] || { _errors: [] };\n curr[el]._errors.push(mapper(issue));\n }\n curr = curr[el];\n i++;\n }\n }\n }\n }\n };\n processError(error);\n return fieldErrors;\n}\nexport function treeifyError(error, mapper = (issue) => issue.message) {\n const result = { errors: [] };\n const processError = (error, path = []) => {\n var _a, _b;\n for (const issue of error.issues) {\n if (issue.code === \"invalid_union\" && issue.errors.length) {\n // regular union error\n issue.errors.map((issues) => processError({ issues }, [...path, ...issue.path]));\n }\n else if (issue.code === \"invalid_key\") {\n processError({ issues: issue.issues }, [...path, ...issue.path]);\n }\n else if (issue.code === \"invalid_element\") {\n processError({ issues: issue.issues }, [...path, ...issue.path]);\n }\n else {\n const fullpath = [...path, ...issue.path];\n if (fullpath.length === 0) {\n result.errors.push(mapper(issue));\n continue;\n }\n let curr = result;\n let i = 0;\n while (i < fullpath.length) {\n const el = fullpath[i];\n const terminal = i === fullpath.length - 1;\n if (typeof el === \"string\") {\n curr.properties ?? (curr.properties = {});\n (_a = curr.properties)[el] ?? (_a[el] = { errors: [] });\n curr = curr.properties[el];\n }\n else {\n curr.items ?? (curr.items = []);\n (_b = curr.items)[el] ?? (_b[el] = { errors: [] });\n curr = curr.items[el];\n }\n if (terminal) {\n curr.errors.push(mapper(issue));\n }\n i++;\n }\n }\n }\n };\n processError(error);\n return result;\n}\n/** Format a ZodError as a human-readable string in the following form.\n *\n * From\n *\n * ```ts\n * ZodError {\n * issues: [\n * {\n * expected: 'string',\n * code: 'invalid_type',\n * path: [ 'username' ],\n * message: 'Invalid input: expected string'\n * },\n * {\n * expected: 'number',\n * code: 'invalid_type',\n * path: [ 'favoriteNumbers', 1 ],\n * message: 'Invalid input: expected number'\n * }\n * ];\n * }\n * ```\n *\n * to\n *\n * ```\n * username\n * ✖ Expected number, received string at \"username\n * favoriteNumbers[0]\n * ✖ Invalid input: expected number\n * ```\n */\nexport function toDotPath(_path) {\n const segs = [];\n const path = _path.map((seg) => (typeof seg === \"object\" ? seg.key : seg));\n for (const seg of path) {\n if (typeof seg === \"number\")\n segs.push(`[${seg}]`);\n else if (typeof seg === \"symbol\")\n segs.push(`[${JSON.stringify(String(seg))}]`);\n else if (/[^\\w$]/.test(seg))\n segs.push(`[${JSON.stringify(seg)}]`);\n else {\n if (segs.length)\n segs.push(\".\");\n segs.push(seg);\n }\n }\n return segs.join(\"\");\n}\nexport function prettifyError(error) {\n const lines = [];\n // sort by path length\n const issues = [...error.issues].sort((a, b) => (a.path ?? []).length - (b.path ?? []).length);\n // Process each issue\n for (const issue of issues) {\n lines.push(`✖ ${issue.message}`);\n if (issue.path?.length)\n lines.push(` → at ${toDotPath(issue.path)}`);\n }\n // Convert Map to formatted string\n return lines.join(\"\\n\");\n}\n",
@@ -92,44 +99,44 @@
92
99
  "export * as core from \"../core/index.js\";\nexport * from \"./schemas.js\";\nexport * from \"./checks.js\";\nexport * from \"./errors.js\";\nexport * from \"./parse.js\";\nexport * from \"./compat.js\";\n// zod-specified\nimport { config } from \"../core/index.js\";\nimport en from \"../locales/en.js\";\nconfig(en());\nexport { globalRegistry, registry, config, $output, $input, $brand, clone, regexes, treeifyError, prettifyError, formatError, flattenError, TimePrecision, util, NEVER, } from \"../core/index.js\";\nexport { toJSONSchema } from \"../core/json-schema-processors.js\";\nexport { fromJSONSchema } from \"./from-json-schema.js\";\nexport * as locales from \"../locales/index.js\";\n// iso\n// must be exported from top-level\n// https://github.com/colinhacks/zod/issues/4491\nexport { ZodISODateTime, ZodISODate, ZodISOTime, ZodISODuration } from \"./iso.js\";\nexport * as iso from \"./iso.js\";\nexport * as coerce from \"./coerce.js\";\n",
93
100
  "import * as z from \"./v4/classic/external.js\";\nexport * from \"./v4/classic/external.js\";\nexport { z };\nexport default z;\n",
94
101
  "import { z } from \"zod\";\nimport type { Change as CrdtChange } from \"../crdt.ts\";\n\n// Single source of truth: these Zod schemas drive runtime validation *and*\n// the auto-generated OpenAPI docs (see ./openapi.ts). `.describe(...)` text\n// flows straight into the published spec.\n\nexport const ChangeSchema = z.object({\n hlc: z.string().describe(\"Hybrid Logical Clock timestamp\"),\n node_id: z.string().describe(\"Origin node that produced the change\"),\n dataset: z.string().describe(\"CRDT dataset, e.g. databases / records / documents\"),\n row_id: z.string().describe(\"Row identifier within the dataset\"),\n col: z.string().describe(\"Column / property identifier\"),\n value: z.string().nullable().describe(\"JSON-encoded field value, or null\"),\n // Change-group id for history rendering; optional so pre-txn peers interop\n // (their changes simply fall back to time-gap clustering in history views).\n txn: z.string().nullable().optional().describe(\"Change-group id (one logical mutation)\"),\n});\n\nexport const SyncRequestSchema = z.object({\n node_id: z.string().describe(\"Calling client's node id\"),\n since: z.number().describe(\"Server cursor the client last pulled\"),\n changes: z.array(ChangeSchema).describe(\"Client's changes to push\"),\n // Both optional and absent in classic peer rounds (full pull). Browser\n // replicas use them: `limit` chunks the initial hydration into bounded\n // pulls, `exclude_datasets` lets a device opt out of heavy datasets it\n // never edits (e.g. site_files on a small phone).\n limit: z.number().optional().describe(\"Max changes to return (pagination for hydration)\"),\n exclude_datasets: z\n .array(z.string())\n .optional()\n .describe(\"Datasets to omit from the pull (partial replica)\"),\n});\n\nexport const SyncResponseSchema = z.object({\n node_id: z.string().describe(\"Server's node id\"),\n changes: z.array(ChangeSchema).describe(\"Server changes after `since`\"),\n cursor: z.number().describe(\"New server cursor for the client to store\"),\n});\n\nexport const HealthResponseSchema = z.object({\n ok: z.boolean(),\n node: z.string().describe(\"Server's node id\"),\n});\n\n// Pairing handshake (see ./pairing.ts). The caller (device B) presents a\n// one-time code, its node id, the durable credential it issues to us, and\n// optionally its own reachable URL so we can register it back as a peer.\nexport const PairRequestSchema = z.object({\n code: z.string().describe(\"One-time pairing code minted by this server\"),\n node_id: z.string().describe(\"Calling device's node id\"),\n grant: z.string().describe(\"Durable credential the caller issues to us\"),\n self_url: z.string().optional().describe(\"Caller's reachable server URL (for mutual sync)\"),\n});\n\nexport const PairResponseSchema = z.object({\n node_id: z.string().describe(\"This server's node id\"),\n grant: z.string().describe(\"Durable credential we issue to the caller\"),\n});\n\nexport type PairRequest = z.infer<typeof PairRequestSchema>;\nexport type PairResponse = z.infer<typeof PairResponseSchema>;\n\n// `Change` stays sourced from crdt.ts to avoid a second source of truth; the\n// schema above is structurally compatible and used only for validation/docs.\nexport type SyncRequest = z.infer<typeof SyncRequestSchema> & { changes: CrdtChange[] };\nexport type SyncResponse = z.infer<typeof SyncResponseSchema> & { changes: CrdtChange[] };\nexport type HealthResponse = z.infer<typeof HealthResponseSchema>;\n\nexport const SYNC_PATH = \"/sync\";\nexport const HEALTH_PATH = \"/health\";\n// Token exchange: a holder of the current (or an in-grace previous) token swaps\n// it for the current token. Exempt from the gate so an expired token can reach it.\nexport const RENEW_PATH = \"/auth/token\";\n// Pairing handshake. Exempt from the master-token gate because the caller only\n// holds a one-time code (validated inside the handler), not the server token.\nexport const PAIR_PATH = \"/api/pair\";\n",
95
- "import type { DbDriver } from \"../driver.ts\";\nimport { getNodeId } from \"../node.ts\";\nimport { ingest, changesAfterSeq } from \"../crdt.ts\";\nimport { type SyncResponse, SYNC_PATH } from \"./protocol.ts\";\nimport { MhError } from \"../errors.ts\";\n\ninterface PeerCursors {\n pull_cursor: number;\n push_cursor: number;\n token: string | null;\n}\n\nfunction getPeer(db: DbDriver, url: string): PeerCursors {\n const row = db\n .query(\"SELECT pull_cursor, push_cursor, token FROM peers WHERE url = ?\")\n .get(url) as PeerCursors | null;\n return row ?? { pull_cursor: 0, push_cursor: 0, token: null };\n}\n\nfunction setPeer(db: DbDriver, url: string, c: { pull_cursor: number; push_cursor: number }): void {\n db.query(\n \"INSERT INTO peers (url, pull_cursor, push_cursor) VALUES (?, ?, ?) ON CONFLICT(url) DO UPDATE SET pull_cursor = excluded.pull_cursor, push_cursor = excluded.push_cursor\",\n ).run(url, c.pull_cursor, c.push_cursor);\n}\n\nexport interface SyncResult {\n pushed: number;\n pulled: number;\n /** Storage-sync only: local own ops exist but were deferred by push batching. */\n pendingPush?: boolean;\n}\n\nexport interface SyncOpts {\n /** Bearer credential; defaults to the one stored for this peer (pairing). */\n token?: string;\n /** Max changes to pull this round — chunked initial hydration. */\n pullLimit?: number;\n /** Datasets this replica opts out of (partial replica, e.g. site_files). */\n excludeDatasets?: string[];\n}\n\n/**\n * Run one push/pull round against a peer server. A single round is bidirectional\n * (pushes local changes, pulls remote ones). The token defaults to the credential\n * stored for this peer (set during pairing) and is sent as a Bearer header so a\n * token-gated /sync accepts the request.\n */\nexport async function syncWithPeer(\n db: DbDriver,\n url: string,\n opts: SyncOpts | string = {},\n): Promise<SyncResult> {\n // Back-compat: the third parameter used to be the bare token string.\n const o: SyncOpts = typeof opts === \"string\" ? { token: opts } : opts;\n const node = getNodeId(db);\n const peer = getPeer(db, url);\n const bearer = o.token ?? peer.token ?? undefined;\n const toPush = changesAfterSeq(db, peer.push_cursor);\n\n const headers: Record<string, string> = { \"content-type\": \"application/json\" };\n if (bearer) headers.authorization = `Bearer ${bearer}`;\n const res = await fetch(new URL(SYNC_PATH, url), {\n method: \"POST\",\n headers,\n body: JSON.stringify({\n node_id: node,\n since: peer.pull_cursor,\n changes: toPush.changes,\n ...(o.pullLimit != null ? { limit: o.pullLimit } : {}),\n ...(o.excludeDatasets?.length ? { exclude_datasets: o.excludeDatasets } : {}),\n }),\n });\n if (!res.ok)\n throw new MhError(\n res.status === 401 || res.status === 403 ? \"auth\" : \"network\",\n `sync failed: ${res.status} ${await res.text()}`,\n );\n\n const data = (await res.json()) as SyncResponse;\n // `pulled` = changes new to our oplog (ingest's return), not the response size,\n // so re-pulled-but-known data doesn't read as activity (consistent with the\n // storage path; keeps the auto-sync backoff honest).\n const pulled = ingest(db, data.changes ?? []);\n setPeer(db, url, { pull_cursor: data.cursor, push_cursor: toPush.cursor });\n\n return { pushed: toPush.changes.length, pulled };\n}\n",
96
- "/**\n * @license MIT <https://opensource.org/licenses/MIT>\n * @copyright Michael Hart 2024\n */\nconst encoder = new TextEncoder();\nconst HOST_SERVICES = {\n appstream2: 'appstream',\n cloudhsmv2: 'cloudhsm',\n email: 'ses',\n marketplace: 'aws-marketplace',\n mobile: 'AWSMobileHubService',\n pinpoint: 'mobiletargeting',\n queue: 'sqs',\n 'git-codecommit': 'codecommit',\n 'mturk-requester-sandbox': 'mturk-requester',\n 'personalize-runtime': 'personalize',\n};\nconst UNSIGNABLE_HEADERS = new Set([\n 'authorization',\n 'content-type',\n 'content-length',\n 'user-agent',\n 'presigned-expires',\n 'expect',\n 'x-amzn-trace-id',\n 'range',\n 'connection',\n]);\nclass AwsClient {\n constructor({ accessKeyId, secretAccessKey, sessionToken, service, region, cache, retries, initRetryMs }) {\n if (accessKeyId == null) throw new TypeError('accessKeyId is a required option')\n if (secretAccessKey == null) throw new TypeError('secretAccessKey is a required option')\n this.accessKeyId = accessKeyId;\n this.secretAccessKey = secretAccessKey;\n this.sessionToken = sessionToken;\n this.service = service;\n this.region = region;\n this.cache = cache || new Map();\n this.retries = retries != null ? retries : 10;\n this.initRetryMs = initRetryMs || 50;\n }\n async sign(input, init) {\n if (input instanceof Request) {\n const { method, url, headers, body } = input;\n init = Object.assign({ method, url, headers }, init);\n if (init.body == null && headers.has('Content-Type')) {\n init.body = body != null && headers.has('X-Amz-Content-Sha256') ? body : await input.clone().arrayBuffer();\n }\n input = url;\n }\n const signer = new AwsV4Signer(Object.assign({ url: input.toString() }, init, this, init && init.aws));\n const signed = Object.assign({}, init, await signer.sign());\n delete signed.aws;\n try {\n return new Request(signed.url.toString(), signed)\n } catch (e) {\n if (e instanceof TypeError) {\n return new Request(signed.url.toString(), Object.assign({ duplex: 'half' }, signed))\n }\n throw e\n }\n }\n async fetch(input, init) {\n for (let i = 0; i <= this.retries; i++) {\n const fetched = fetch(await this.sign(input, init));\n if (i === this.retries) {\n return fetched\n }\n const res = await fetched;\n if (res.status < 500 && res.status !== 429) {\n return res\n }\n await new Promise(resolve => setTimeout(resolve, Math.random() * this.initRetryMs * Math.pow(2, i)));\n }\n throw new Error('An unknown error occurred, ensure retries is not negative')\n }\n}\nclass AwsV4Signer {\n constructor({ method, url, headers, body, accessKeyId, secretAccessKey, sessionToken, service, region, cache, datetime, signQuery, appendSessionToken, allHeaders, singleEncode }) {\n if (url == null) throw new TypeError('url is a required option')\n if (accessKeyId == null) throw new TypeError('accessKeyId is a required option')\n if (secretAccessKey == null) throw new TypeError('secretAccessKey is a required option')\n this.method = method || (body ? 'POST' : 'GET');\n this.url = new URL(url);\n this.headers = new Headers(headers || {});\n this.body = body;\n this.accessKeyId = accessKeyId;\n this.secretAccessKey = secretAccessKey;\n this.sessionToken = sessionToken;\n let guessedService, guessedRegion;\n if (!service || !region) {\n[guessedService, guessedRegion] = guessServiceRegion(this.url, this.headers);\n }\n this.service = service || guessedService || '';\n this.region = region || guessedRegion || 'us-east-1';\n this.cache = cache || new Map();\n this.datetime = datetime || new Date().toISOString().replace(/[:-]|\\.\\d{3}/g, '');\n this.signQuery = signQuery;\n this.appendSessionToken = appendSessionToken || this.service === 'iotdevicegateway';\n this.headers.delete('Host');\n if (this.service === 's3' && !this.signQuery && !this.headers.has('X-Amz-Content-Sha256')) {\n this.headers.set('X-Amz-Content-Sha256', 'UNSIGNED-PAYLOAD');\n }\n const params = this.signQuery ? this.url.searchParams : this.headers;\n params.set('X-Amz-Date', this.datetime);\n if (this.sessionToken && !this.appendSessionToken) {\n params.set('X-Amz-Security-Token', this.sessionToken);\n }\n this.signableHeaders = ['host', ...this.headers.keys()]\n .filter(header => allHeaders || !UNSIGNABLE_HEADERS.has(header))\n .sort();\n this.signedHeaders = this.signableHeaders.join(';');\n this.canonicalHeaders = this.signableHeaders\n .map(header => header + ':' + (header === 'host' ? this.url.host : (this.headers.get(header) || '').replace(/\\s+/g, ' ')))\n .join('\\n');\n this.credentialString = [this.datetime.slice(0, 8), this.region, this.service, 'aws4_request'].join('/');\n if (this.signQuery) {\n if (this.service === 's3' && !params.has('X-Amz-Expires')) {\n params.set('X-Amz-Expires', '86400');\n }\n params.set('X-Amz-Algorithm', 'AWS4-HMAC-SHA256');\n params.set('X-Amz-Credential', this.accessKeyId + '/' + this.credentialString);\n params.set('X-Amz-SignedHeaders', this.signedHeaders);\n }\n if (this.service === 's3') {\n try {\n this.encodedPath = decodeURIComponent(this.url.pathname.replace(/\\+/g, ' '));\n } catch (e) {\n this.encodedPath = this.url.pathname;\n }\n } else {\n this.encodedPath = this.url.pathname.replace(/\\/+/g, '/');\n }\n if (!singleEncode) {\n this.encodedPath = encodeURIComponent(this.encodedPath).replace(/%2F/g, '/');\n }\n this.encodedPath = encodeRfc3986(this.encodedPath);\n const seenKeys = new Set();\n this.encodedSearch = [...this.url.searchParams]\n .filter(([k]) => {\n if (!k) return false\n if (this.service === 's3') {\n if (seenKeys.has(k)) return false\n seenKeys.add(k);\n }\n return true\n })\n .map(pair => pair.map(p => encodeRfc3986(encodeURIComponent(p))))\n .sort(([k1, v1], [k2, v2]) => k1 < k2 ? -1 : k1 > k2 ? 1 : v1 < v2 ? -1 : v1 > v2 ? 1 : 0)\n .map(pair => pair.join('='))\n .join('&');\n }\n async sign() {\n if (this.signQuery) {\n this.url.searchParams.set('X-Amz-Signature', await this.signature());\n if (this.sessionToken && this.appendSessionToken) {\n this.url.searchParams.set('X-Amz-Security-Token', this.sessionToken);\n }\n } else {\n this.headers.set('Authorization', await this.authHeader());\n }\n return {\n method: this.method,\n url: this.url,\n headers: this.headers,\n body: this.body,\n }\n }\n async authHeader() {\n return [\n 'AWS4-HMAC-SHA256 Credential=' + this.accessKeyId + '/' + this.credentialString,\n 'SignedHeaders=' + this.signedHeaders,\n 'Signature=' + (await this.signature()),\n ].join(', ')\n }\n async signature() {\n const date = this.datetime.slice(0, 8);\n const cacheKey = [this.secretAccessKey, date, this.region, this.service].join();\n let kCredentials = this.cache.get(cacheKey);\n if (!kCredentials) {\n const kDate = await hmac('AWS4' + this.secretAccessKey, date);\n const kRegion = await hmac(kDate, this.region);\n const kService = await hmac(kRegion, this.service);\n kCredentials = await hmac(kService, 'aws4_request');\n this.cache.set(cacheKey, kCredentials);\n }\n return buf2hex(await hmac(kCredentials, await this.stringToSign()))\n }\n async stringToSign() {\n return [\n 'AWS4-HMAC-SHA256',\n this.datetime,\n this.credentialString,\n buf2hex(await hash(await this.canonicalString())),\n ].join('\\n')\n }\n async canonicalString() {\n return [\n this.method.toUpperCase(),\n this.encodedPath,\n this.encodedSearch,\n this.canonicalHeaders + '\\n',\n this.signedHeaders,\n await this.hexBodyHash(),\n ].join('\\n')\n }\n async hexBodyHash() {\n let hashHeader = this.headers.get('X-Amz-Content-Sha256') || (this.service === 's3' && this.signQuery ? 'UNSIGNED-PAYLOAD' : null);\n if (hashHeader == null) {\n if (this.body && typeof this.body !== 'string' && !('byteLength' in this.body)) {\n throw new Error('body must be a string, ArrayBuffer or ArrayBufferView, unless you include the X-Amz-Content-Sha256 header')\n }\n hashHeader = buf2hex(await hash(this.body || ''));\n }\n return hashHeader\n }\n}\nasync function hmac(key, string) {\n const cryptoKey = await crypto.subtle.importKey(\n 'raw',\n typeof key === 'string' ? encoder.encode(key) : key,\n { name: 'HMAC', hash: { name: 'SHA-256' } },\n false,\n ['sign'],\n );\n return crypto.subtle.sign('HMAC', cryptoKey, encoder.encode(string))\n}\nasync function hash(content) {\n return crypto.subtle.digest('SHA-256', typeof content === 'string' ? encoder.encode(content) : content)\n}\nconst HEX_CHARS = ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f'];\nfunction buf2hex(arrayBuffer) {\n const buffer = new Uint8Array(arrayBuffer);\n let out = '';\n for (let idx = 0; idx < buffer.length; idx++) {\n const n = buffer[idx];\n out += HEX_CHARS[(n >>> 4) & 0xF];\n out += HEX_CHARS[n & 0xF];\n }\n return out\n}\nfunction encodeRfc3986(urlEncodedStr) {\n return urlEncodedStr.replace(/[!'()*]/g, c => '%' + c.charCodeAt(0).toString(16).toUpperCase())\n}\nfunction guessServiceRegion(url, headers) {\n const { hostname, pathname } = url;\n if (hostname.endsWith('.on.aws')) {\n const match = hostname.match(/^[^.]{1,63}\\.lambda-url\\.([^.]{1,63})\\.on\\.aws$/);\n return match != null ? ['lambda', match[1] || ''] : ['', '']\n }\n if (hostname.endsWith('.r2.cloudflarestorage.com')) {\n return ['s3', 'auto']\n }\n if (hostname.endsWith('.backblazeb2.com')) {\n const match = hostname.match(/^(?:[^.]{1,63}\\.)?s3\\.([^.]{1,63})\\.backblazeb2\\.com$/);\n return match != null ? ['s3', match[1] || ''] : ['', '']\n }\n const match = hostname.replace('dualstack.', '').match(/([^.]{1,63})\\.(?:([^.]{0,63})\\.)?amazonaws\\.com(?:\\.cn)?$/);\n let service = (match && match[1]) || '';\n let region = match && match[2];\n if (region === 'us-gov') {\n region = 'us-gov-west-1';\n } else if (region === 's3' || region === 's3-accelerate') {\n region = 'us-east-1';\n service = 's3';\n } else if (service === 'iot') {\n if (hostname.startsWith('iot.')) {\n service = 'execute-api';\n } else if (hostname.startsWith('data.jobs.iot.')) {\n service = 'iot-jobs-data';\n } else {\n service = pathname === '/mqtt' ? 'iotdevicegateway' : 'iotdata';\n }\n } else if (service === 'autoscaling') {\n const targetPrefix = (headers.get('X-Amz-Target') || '').split('.')[0];\n if (targetPrefix === 'AnyScaleFrontendService') {\n service = 'application-autoscaling';\n } else if (targetPrefix === 'AnyScaleScalingPlannerFrontendService') {\n service = 'autoscaling-plans';\n }\n } else if (region == null && service.startsWith('s3-')) {\n region = service.slice(3).replace(/^fips-|^external-1/, '');\n service = 's3';\n } else if (service.endsWith('-fips')) {\n service = service.slice(0, -5);\n } else if (region && /-\\d$/.test(service) && !/-\\d$/.test(region)) {\n[service, region] = [region, service];\n }\n return [HOST_SERVICES[service] || service, region || '']\n}\n\nexport { AwsClient, AwsV4Signer };\n",
102
+ "import type { DbDriver } from \"../driver.ts\";\nimport { getNodeId } from \"../node.ts\";\nimport { ingest, changesAfterSeq } from \"../crdt.ts\";\nimport { type SyncResponse, SYNC_PATH } from \"./protocol.ts\";\nimport { MhError } from \"../errors.ts\";\n\ninterface PeerCursors {\n pull_cursor: number;\n push_cursor: number;\n token: string | null;\n}\n\nfunction getPeer(db: DbDriver, url: string): PeerCursors {\n const row = db\n .query(\"SELECT pull_cursor, push_cursor, token FROM peers WHERE url = ?\")\n .get(url) as PeerCursors | null;\n return row ?? { pull_cursor: 0, push_cursor: 0, token: null };\n}\n\nfunction setPeer(db: DbDriver, url: string, c: { pull_cursor: number; push_cursor: number }): void {\n db.query(\n \"INSERT INTO peers (url, pull_cursor, push_cursor) VALUES (?, ?, ?) ON CONFLICT(url) DO UPDATE SET pull_cursor = excluded.pull_cursor, push_cursor = excluded.push_cursor\",\n ).run(url, c.pull_cursor, c.push_cursor);\n}\n\nexport interface SyncResult {\n pushed: number;\n pulled: number;\n /** Response page size (changes the peer returned this round), independent of\n * how many were new to our oplog. Pagination must break on this, NOT on\n * `pulled`: a page of all-known changes ingests 0 but may not be the last\n * page (e.g. after a cursor reset re-pulls data we already hold). */\n received?: number;\n /** Storage-sync only: local own ops exist but were deferred by push batching. */\n pendingPush?: boolean;\n}\n\nexport interface SyncOpts {\n /** Bearer credential; defaults to the one stored for this peer (pairing). */\n token?: string;\n /** Max changes to pull this round — chunked initial hydration. */\n pullLimit?: number;\n /** Datasets this replica opts out of (partial replica, e.g. site_files). */\n excludeDatasets?: string[];\n}\n\n/**\n * Run one push/pull round against a peer server. A single round is bidirectional\n * (pushes local changes, pulls remote ones). The token defaults to the credential\n * stored for this peer (set during pairing) and is sent as a Bearer header so a\n * token-gated /sync accepts the request.\n */\nexport async function syncWithPeer(\n db: DbDriver,\n url: string,\n opts: SyncOpts | string = {},\n): Promise<SyncResult> {\n // Back-compat: the third parameter used to be the bare token string.\n const o: SyncOpts = typeof opts === \"string\" ? { token: opts } : opts;\n const node = getNodeId(db);\n const peer = getPeer(db, url);\n const bearer = o.token ?? peer.token ?? undefined;\n const toPush = changesAfterSeq(db, peer.push_cursor);\n\n const headers: Record<string, string> = { \"content-type\": \"application/json\" };\n if (bearer) headers.authorization = `Bearer ${bearer}`;\n const res = await fetch(new URL(SYNC_PATH, url), {\n method: \"POST\",\n headers,\n body: JSON.stringify({\n node_id: node,\n since: peer.pull_cursor,\n changes: toPush.changes,\n ...(o.pullLimit != null ? { limit: o.pullLimit } : {}),\n ...(o.excludeDatasets?.length ? { exclude_datasets: o.excludeDatasets } : {}),\n }),\n });\n if (!res.ok)\n throw new MhError(\n res.status === 401 || res.status === 403 ? \"auth\" : \"network\",\n `sync failed: ${res.status} ${await res.text()}`,\n );\n\n const data = (await res.json()) as SyncResponse;\n const changes = data.changes ?? [];\n // `pulled` = changes new to our oplog (ingest's return), not the response size,\n // so re-pulled-but-known data doesn't read as activity (consistent with the\n // storage path; keeps the auto-sync backoff honest). `received` carries the\n // response page size separately so paginated hydration can break on it.\n const pulled = ingest(db, changes);\n setPeer(db, url, { pull_cursor: data.cursor, push_cursor: toPush.cursor });\n\n return { pushed: toPush.changes.length, pulled, received: changes.length };\n}\n",
97
103
  "// Best-effort publisher election over the dumb bucket (doc 19 §5.4).\n//\n// Several nodes may be eligible to publish whole-hub snapshots (a server, a few\n// browser replicas). We don't want them all uploading the same snapshot every\n// interval, so we park \"publishing duty\" on the highest-priority LIVE candidate.\n//\n// Correctness never depends on this being exact: concurrent snapshots are\n// content-addressed and idempotent (storage.ts publishSnapshot), so a brief\n// double-elect just wastes a PUT. That lets the election avoid compare-and-swap\n// entirely — each candidate writes its OWN heartbeat key (the same per-node\n// prefix model as the oplog, no contention), reads everyone's, and the winner is\n// a pure function of the live set (max priority; ties broken by node id). A dead\n// candidate's heartbeat expires (TTL), so duty fails over automatically.\n\nimport type { StorageClient } from \"./storage.ts\";\n\nconst TTL_MS = 5 * 60_000;\n/** Refresh well within the TTL so a live candidate never lets its own lease lapse. */\nconst HEARTBEAT_EVERY_MS = TTL_MS / 3;\n\ninterface Heartbeat {\n node: string;\n priority: number;\n expiresAt: number;\n}\n\nconst leaseRoot = (base: string) => `${base}/publisher/`;\nconst leaseKey = (base: string, node: string) => `${base}/publisher/${node}.lease`;\n\n/** Last wall time we wrote our heartbeat, keyed per (base,node), to throttle PUTs\n * across sync rounds within one process. */\nconst lastBeat = new Map<string, number>();\n\n/**\n * Refresh this node's heartbeat (throttled) and return whether it is the elected\n * publisher among currently-live candidates. Call only when a snapshot is\n * actually due, so the lease LIST/GETs aren't paid on idle rounds.\n */\nexport async function isElectedPublisher(\n client: StorageClient,\n base: string,\n node: string,\n priority: number,\n now: number = Date.now(),\n): Promise<boolean> {\n // 1. Heartbeat — but not every round (a PUT per round would be wasteful).\n const beatId = `${base}\u0000${node}`;\n if (now - (lastBeat.get(beatId) ?? 0) >= HEARTBEAT_EVERY_MS) {\n const hb: Heartbeat = { node, priority, expiresAt: now + TTL_MS };\n await client.put(leaseKey(base, node), new TextEncoder().encode(JSON.stringify(hb)), {\n contentType: \"application/json\",\n });\n lastBeat.set(beatId, now);\n }\n\n // 2. Read the live set and pick the deterministic winner; collect long-expired\n // leases to reap so a churn of past devices doesn't grow the per-election GET.\n let winner: Heartbeat | null = null;\n const stale: string[] = [];\n for (const o of await client.list(leaseRoot(base))) {\n if (!o.key.endsWith(\".lease\")) continue;\n const bytes = await client.get(o.key);\n if (!bytes) continue;\n let hb: Heartbeat;\n try {\n hb = JSON.parse(new TextDecoder().decode(bytes)) as Heartbeat;\n } catch {\n continue;\n }\n if (!hb.node || hb.expiresAt <= now) {\n // Expired by a full extra TTL → safe to delete: a live owner re-beats every\n // TTL/3 so its lease can't be this stale; reaping is idempotent (a returning\n // owner just re-creates the key on its next publish).\n if (hb.expiresAt <= now - TTL_MS) stale.push(o.key);\n continue; // expired → ignore for election (failover)\n }\n if (\n !winner ||\n hb.priority > winner.priority ||\n (hb.priority === winner.priority && hb.node < winner.node)\n ) {\n winner = hb;\n }\n }\n\n // No live heartbeat visible yet (e.g. our own write not yet listable on an\n // eventually-consistent store) → act as publisher so a lone node still works.\n const elected = winner ? winner.node === node : true;\n // Only the elected publisher reaps, to avoid del write-amplification across all\n // readers (a brief double-reap is harmless — del is idempotent).\n if (elected) for (const k of stale) await client.del(k);\n return elected;\n}\n",
98
- "// End-to-end encryption for storage-sync (sync/storage.ts). The bucket is a\n// third-party dumb store, so every oplog segment and snapshot is encrypted\n// before it leaves the device; the bucket only ever holds ciphertext.\n//\n// Two key layers (the Joplin / age-style envelope):\n// - Master key K (random 256-bit): encrypts every segment and snapshot. Kept\n// locally as raw bytes (peers.config — same trust model as peer tokens).\n// - KEK, derived from the user's passphrase via PBKDF2: wraps K into the\n// bucket's keys/main.json. Any new device recovers K from\n// bucket-credentials + passphrase alone — no device-to-device key transfer.\n//\n// We wrap K by AES-GCM-encrypting its raw bytes rather than via WebCrypto's\n// AES-KW: AES-GCM + PBKDF2 are present in every runtime we target (Bun and the\n// browser worker), AES-KW support is uneven. A wrong passphrase fails the GCM\n// auth tag, which we surface as an MhError.\n//\n// Runtime-agnostic: uses only the global WebCrypto (`crypto.subtle`,\n// `crypto.getRandomValues`) and btoa/atob, all present on Bun and in browsers.\n\nimport { MhError } from \"../errors.ts\";\n\nconst PBKDF2_ITERATIONS = 600_000;\nconst SALT_BYTES = 16;\nconst IV_BYTES = 12; // AES-GCM standard nonce length\nconst KEY_BYTES = 32; // AES-256\n\n// TS 5.7 widens `Uint8Array` to `Uint8Array<ArrayBufferLike>`. Give WebCrypto an\n// explicit ArrayBuffer without naming DOM-only helper types in declaration builds.\nfunction ab(u: Uint8Array): ArrayBuffer {\n const out = new Uint8Array(u.byteLength);\n out.set(u);\n return out.buffer;\n}\n\n/** The bucket's keys/main.json: the master key wrapped by the passphrase KEK. */\nexport interface KeyEnvelope {\n v: 1;\n kdf: \"PBKDF2-SHA256\";\n iter: number;\n salt: string; // base64\n wrap: \"AES-GCM\";\n /** base64(iv ‖ ciphertext) of the raw 32-byte master key. */\n wrapped_key: string;\n}\n\n// ---- base64 (portable: no Buffer dependency) ----------------------------------\n\nexport function toB64(bytes: Uint8Array): string {\n let s = \"\";\n for (let i = 0; i < bytes.length; i++) s += String.fromCharCode(bytes[i]!);\n return btoa(s);\n}\n\nexport function fromB64(b64: string): Uint8Array {\n const s = atob(b64);\n const out = new Uint8Array(s.length);\n for (let i = 0; i < s.length; i++) out[i] = s.charCodeAt(i);\n return out;\n}\n\n// ---- master key ----------------------------------------------------------------\n\n/** A fresh random 256-bit master key (raw bytes). */\nexport function generateMasterKey(): Uint8Array {\n return crypto.getRandomValues(new Uint8Array(KEY_BYTES));\n}\n\nasync function deriveKek(passphrase: string, salt: Uint8Array): Promise<CryptoKey> {\n const base = await crypto.subtle.importKey(\n \"raw\",\n ab(new TextEncoder().encode(passphrase)),\n \"PBKDF2\",\n false,\n [\"deriveKey\"],\n );\n return crypto.subtle.deriveKey(\n { name: \"PBKDF2\", salt: ab(salt), iterations: PBKDF2_ITERATIONS, hash: \"SHA-256\" },\n base,\n { name: \"AES-GCM\", length: 256 },\n false,\n [\"encrypt\", \"decrypt\"],\n );\n}\n\n/** Wrap the master key under a passphrase-derived KEK → bucket keys/main.json. */\nexport async function wrapMasterKey(rawKey: Uint8Array, passphrase: string): Promise<KeyEnvelope> {\n const salt = crypto.getRandomValues(new Uint8Array(SALT_BYTES));\n const kek = await deriveKek(passphrase, salt);\n const iv = crypto.getRandomValues(new Uint8Array(IV_BYTES));\n const ct = new Uint8Array(\n await crypto.subtle.encrypt({ name: \"AES-GCM\", iv: ab(iv) }, kek, ab(rawKey)),\n );\n const packed = new Uint8Array(iv.length + ct.length);\n packed.set(iv, 0);\n packed.set(ct, iv.length);\n return {\n v: 1,\n kdf: \"PBKDF2-SHA256\",\n iter: PBKDF2_ITERATIONS,\n salt: toB64(salt),\n wrap: \"AES-GCM\",\n wrapped_key: toB64(packed),\n };\n}\n\n/** Recover the master key from the envelope + passphrase. Throws `auth` on a\n * wrong passphrase (the GCM tag won't verify) or a malformed envelope. */\nexport async function unwrapMasterKey(env: KeyEnvelope, passphrase: string): Promise<Uint8Array> {\n if (env.v !== 1 || env.kdf !== \"PBKDF2-SHA256\" || env.wrap !== \"AES-GCM\")\n throw new MhError(\"invalid_input\", \"unsupported key envelope format\");\n const salt = fromB64(env.salt);\n const kek = await deriveKek(passphrase, salt);\n const packed = fromB64(env.wrapped_key);\n const iv = packed.subarray(0, IV_BYTES);\n const ct = packed.subarray(IV_BYTES);\n try {\n const raw = await crypto.subtle.decrypt({ name: \"AES-GCM\", iv: ab(iv) }, kek, ab(ct));\n return new Uint8Array(raw);\n } catch {\n throw new MhError(\"auth\", \"wrong passphrase — could not unwrap the master key\");\n }\n}\n\n// ---- segment encryption --------------------------------------------------------\n\nasync function importGcmKey(rawKey: Uint8Array): Promise<CryptoKey> {\n return crypto.subtle.importKey(\"raw\", ab(rawKey), { name: \"AES-GCM\" }, false, [\n \"encrypt\",\n \"decrypt\",\n ]);\n}\n\n/** Encrypt arbitrary bytes (a compressed segment/snapshot) → iv ‖ ciphertext. */\nexport async function encryptBytes(rawKey: Uint8Array, plaintext: Uint8Array): Promise<Uint8Array> {\n const key = await importGcmKey(rawKey);\n const iv = crypto.getRandomValues(new Uint8Array(IV_BYTES));\n const ct = new Uint8Array(\n await crypto.subtle.encrypt({ name: \"AES-GCM\", iv: ab(iv) }, key, ab(plaintext)),\n );\n const out = new Uint8Array(iv.length + ct.length);\n out.set(iv, 0);\n out.set(ct, iv.length);\n return out;\n}\n\n/** Inverse of encryptBytes. Throws `auth` if the key is wrong or data tampered. */\nexport async function decryptBytes(rawKey: Uint8Array, payload: Uint8Array): Promise<Uint8Array> {\n const key = await importGcmKey(rawKey);\n const iv = payload.subarray(0, IV_BYTES);\n const ct = payload.subarray(IV_BYTES);\n try {\n const raw = await crypto.subtle.decrypt({ name: \"AES-GCM\", iv: ab(iv) }, key, ab(ct));\n return new Uint8Array(raw);\n } catch {\n throw new MhError(\"auth\", \"could not decrypt — wrong master key or corrupt data\");\n }\n}\n",
104
+ "// End-to-end encryption for storage-sync (sync/storage.ts). The bucket is a\n// third-party dumb store, so every oplog segment and snapshot is encrypted\n// before it leaves the device; the bucket only ever holds ciphertext.\n//\n// Two key layers (the Joplin / age-style envelope):\n// - Master key K (random 256-bit): encrypts every segment and snapshot. Kept\n// locally as raw bytes (peers.config — same trust model as peer tokens).\n// - KEK, derived from the user's passphrase via PBKDF2: wraps K into the\n// bucket's keys/main.json. Any new device recovers K from\n// bucket-credentials + passphrase alone — no device-to-device key transfer.\n//\n// We wrap K by AES-GCM-encrypting its raw bytes rather than via WebCrypto's\n// AES-KW: AES-GCM + PBKDF2 are present in every runtime we target (Bun and the\n// browser worker), AES-KW support is uneven. A wrong passphrase fails the GCM\n// auth tag, which we surface as an MhError.\n//\n// Runtime-agnostic: uses only the global WebCrypto (`crypto.subtle`,\n// `crypto.getRandomValues`) and btoa/atob, all present on Bun and in browsers.\n\nimport { MhError } from \"../errors.ts\";\n\nconst PBKDF2_ITERATIONS = 600_000;\nconst SALT_BYTES = 16;\nconst IV_BYTES = 12; // AES-GCM standard nonce length\nconst KEY_BYTES = 32; // AES-256\n\n// TS 5.7 widens `Uint8Array` to `Uint8Array<ArrayBufferLike>`. Give WebCrypto an\n// explicit ArrayBuffer without naming DOM-only helper types in declaration builds.\nfunction ab(u: Uint8Array): ArrayBuffer {\n const out = new Uint8Array(u.byteLength);\n out.set(u);\n return out.buffer;\n}\n\n/** The bucket's keys/main.json: the master key wrapped by the passphrase KEK. */\nexport interface KeyEnvelope {\n v: 1;\n kdf: \"PBKDF2-SHA256\";\n iter: number;\n salt: string; // base64\n wrap: \"AES-GCM\";\n /** base64(iv ‖ ciphertext) of the raw 32-byte master key. */\n wrapped_key: string;\n}\n\n// ---- base64 (portable: no Buffer dependency) ----------------------------------\n\nexport function toB64(bytes: Uint8Array): string {\n let s = \"\";\n for (let i = 0; i < bytes.length; i++) s += String.fromCharCode(bytes[i]!);\n return btoa(s);\n}\n\nexport function fromB64(b64: string): Uint8Array {\n const s = atob(b64);\n const out = new Uint8Array(s.length);\n for (let i = 0; i < s.length; i++) out[i] = s.charCodeAt(i);\n return out;\n}\n\n// ---- master key ----------------------------------------------------------------\n\n/** A fresh random 256-bit master key (raw bytes). */\nexport function generateMasterKey(): Uint8Array {\n return crypto.getRandomValues(new Uint8Array(KEY_BYTES));\n}\n\nasync function deriveKek(passphrase: string, salt: Uint8Array): Promise<CryptoKey> {\n const base = await crypto.subtle.importKey(\n \"raw\",\n ab(new TextEncoder().encode(passphrase)),\n \"PBKDF2\",\n false,\n [\"deriveKey\"],\n );\n return crypto.subtle.deriveKey(\n { name: \"PBKDF2\", salt: ab(salt), iterations: PBKDF2_ITERATIONS, hash: \"SHA-256\" },\n base,\n { name: \"AES-GCM\", length: 256 },\n false,\n [\"encrypt\", \"decrypt\"],\n );\n}\n\n/** Wrap the master key under a passphrase-derived KEK → bucket keys/main.json. */\nexport async function wrapMasterKey(rawKey: Uint8Array, passphrase: string): Promise<KeyEnvelope> {\n const salt = crypto.getRandomValues(new Uint8Array(SALT_BYTES));\n const kek = await deriveKek(passphrase, salt);\n const iv = crypto.getRandomValues(new Uint8Array(IV_BYTES));\n const ct = new Uint8Array(\n await crypto.subtle.encrypt({ name: \"AES-GCM\", iv: ab(iv) }, kek, ab(rawKey)),\n );\n const packed = new Uint8Array(iv.length + ct.length);\n packed.set(iv, 0);\n packed.set(ct, iv.length);\n return {\n v: 1,\n kdf: \"PBKDF2-SHA256\",\n iter: PBKDF2_ITERATIONS,\n salt: toB64(salt),\n wrap: \"AES-GCM\",\n wrapped_key: toB64(packed),\n };\n}\n\n/** Recover the master key from the envelope + passphrase. Throws `auth` on a\n * wrong passphrase (the GCM tag won't verify) or a malformed envelope. */\nexport async function unwrapMasterKey(env: KeyEnvelope, passphrase: string): Promise<Uint8Array> {\n if (env.v !== 1 || env.kdf !== \"PBKDF2-SHA256\" || env.wrap !== \"AES-GCM\")\n throw new MhError(\"invalid_input\", \"unsupported key envelope format\");\n const salt = fromB64(env.salt);\n const kek = await deriveKek(passphrase, salt);\n const packed = fromB64(env.wrapped_key);\n const iv = packed.subarray(0, IV_BYTES);\n const ct = packed.subarray(IV_BYTES);\n try {\n const raw = await crypto.subtle.decrypt({ name: \"AES-GCM\", iv: ab(iv) }, kek, ab(ct));\n return new Uint8Array(raw);\n } catch {\n throw new MhError(\"auth\", \"wrong passphrase — could not unwrap the master key\");\n }\n}\n\n/**\n * Derive a raw 32-byte content key from a share password + salt (same PBKDF2\n * parameters as the bucket KEK). Used by the object-storage share path: the\n * exporter and the in-browser viewer both derive the identical key, so a wrong\n * password simply fails the GCM tag on decrypt — no server-side verifier needed.\n */\nexport async function deriveShareKey(password: string, salt: Uint8Array): Promise<Uint8Array> {\n const base = await crypto.subtle.importKey(\n \"raw\",\n ab(new TextEncoder().encode(password)),\n \"PBKDF2\",\n false,\n [\"deriveBits\"],\n );\n const bits = await crypto.subtle.deriveBits(\n { name: \"PBKDF2\", salt: ab(salt), iterations: PBKDF2_ITERATIONS, hash: \"SHA-256\" },\n base,\n 256,\n );\n return new Uint8Array(bits);\n}\n\n// ---- segment encryption --------------------------------------------------------\n\nasync function importGcmKey(rawKey: Uint8Array): Promise<CryptoKey> {\n return crypto.subtle.importKey(\"raw\", ab(rawKey), { name: \"AES-GCM\" }, false, [\n \"encrypt\",\n \"decrypt\",\n ]);\n}\n\n/** Encrypt arbitrary bytes (a compressed segment/snapshot) → iv ‖ ciphertext. */\nexport async function encryptBytes(rawKey: Uint8Array, plaintext: Uint8Array): Promise<Uint8Array> {\n const key = await importGcmKey(rawKey);\n const iv = crypto.getRandomValues(new Uint8Array(IV_BYTES));\n const ct = new Uint8Array(\n await crypto.subtle.encrypt({ name: \"AES-GCM\", iv: ab(iv) }, key, ab(plaintext)),\n );\n const out = new Uint8Array(iv.length + ct.length);\n out.set(iv, 0);\n out.set(ct, iv.length);\n return out;\n}\n\n/** Inverse of encryptBytes. Throws `auth` if the key is wrong or data tampered. */\nexport async function decryptBytes(rawKey: Uint8Array, payload: Uint8Array): Promise<Uint8Array> {\n const key = await importGcmKey(rawKey);\n const iv = payload.subarray(0, IV_BYTES);\n const ct = payload.subarray(IV_BYTES);\n try {\n const raw = await crypto.subtle.decrypt({ name: \"AES-GCM\", iv: ab(iv) }, key, ab(ct));\n return new Uint8Array(raw);\n } catch {\n throw new MhError(\"auth\", \"could not decrypt — wrong master key or corrupt data\");\n }\n}\n",
99
105
  "// Storage-sync: use an S3-compatible bucket as dumb store-and-forward, so two\n// devices sync without either running a publicly reachable server and without\n// being online at the same time. The bucket only needs list/get/put/del — no\n// metahub code runs there. This is a second transport behind the same peer\n// model and the same CRDT primitives; core replication is unchanged.\n//\n// Each node publishes ONLY its own ops (crdt.ts changesAfterSeq onlyNode) under\n// its own bucket prefix, as append-only segments. Pulling = list every other\n// node's prefix, download new segments, ingest() them — order-independent and\n// idempotent, so segments arriving out of order or twice converge regardless.\n//\n// Bucket layout (prefix = user-configured path within the bucket):\n// <prefix>/spaces/default/keys/main.json E2EE: master key wrapped by passphrase\n// <prefix>/spaces/default/snapshot/<hlc>~<hash>.snap winners-only baseline (any node publishes)\n// <prefix>/spaces/default/oplog/<node>/HEAD latest segment key (cheap \"anything new?\" poll)\n// <prefix>/spaces/default/oplog/<node>/<seq>.seg that node's ops, JSONL→gzip→AES-GCM\n// The spaces/default/ level is reserved now so future per-space sharing needs\n// no storage migration.\n\nimport type { DbDriver } from \"../driver.ts\";\nimport { getNodeId } from \"../node.ts\";\nimport { changesAfterSeq, ingest, CHANGE_SELECT, type Change } from \"../crdt.ts\";\nimport { isElectedPublisher } from \"./publisher-lease.ts\";\nimport { MhError, errorCode } from \"../errors.ts\";\nimport type { SyncResult } from \"./client.ts\";\nimport {\n encryptBytes,\n decryptBytes,\n generateMasterKey,\n wrapMasterKey,\n unwrapMasterKey,\n toB64,\n fromB64,\n type KeyEnvelope,\n} from \"./e2ee.ts\";\n\n// ---- config + client surface ---------------------------------------------------\n\n/** An 's3' peer's bucket settings, stored as JSON in peers.config (local-only). */\nexport interface S3Config {\n endpoint: string;\n region: string;\n bucket: string;\n prefix: string;\n accessKeyId: string;\n secretAccessKey: string;\n /** When false (`--no-encrypt`) segments are gzip-only plaintext. */\n encrypt: boolean;\n /** base64 raw 32-byte master key; present iff encrypt. Resolved at peer-add. */\n masterKey?: string;\n /**\n * Address objects as `<bucket>.<host>/<key>` (virtual-hosted) instead of\n * `<host>/<bucket>/<key>` (path-style). Some providers (Tencent COS) reject\n * path-style outright. When undefined, the clients auto-detect: virtual-hosted\n * iff the endpoint host already starts with `<bucket>.` (see\n * isVirtualHostedStyle). R2/MinIO keep using path-style.\n */\n virtualHostedStyle?: boolean;\n /**\n * Node-role hints for this bucket (not bucket settings — safe to omit from\n * shared enroll links). `publish` marks this node as the bucket's publisher\n * (writes whole-hub snapshots; see StorageSyncOpts.publish): true for the data\n * home (a server, or a no-origin PWA which IS the home), false for a replica\n * that only attaches the bucket for its own away-sync. `priority` ranks\n * publisher candidates when several are eligible (higher wins; see\n * publisher-lease.ts) — server > desktop > laptop > phone.\n */\n publish?: boolean;\n priority?: number;\n}\n\n/** Whether to use virtual-hosted addressing for this bucket: the explicit flag,\n * or — when unset — auto-detected from an endpoint whose host already carries\n * the bucket (e.g. COS's `<bucket>.cos.<region>.myqcloud.com`). */\nexport function isVirtualHostedStyle(config: S3Config): boolean {\n if (config.virtualHostedStyle != null) return config.virtualHostedStyle;\n try {\n return new URL(config.endpoint).hostname.startsWith(`${config.bucket}.`);\n } catch {\n return false;\n }\n}\n\nexport interface StorageObject {\n key: string;\n etag?: string;\n}\n\n/** Options for a conditional/typed put. */\nexport interface StoragePutOpts {\n contentType?: string;\n /** Conditional create (S3 `If-None-Match: *`): fail with an MhError(\"conflict\")\n * if the object already exists. Used to make first-time key provisioning a\n * compare-and-set so two devices initializing the same empty bucket can't\n * clobber each other's master key. */\n ifNoneMatch?: boolean;\n}\n\n/** The minimal object-store surface storage-sync needs. Implemented per runtime:\n * Bun.S3Client on the CLI/desktop (storage-s3-bun.ts), aws4fetch SigV4 + fetch\n * in the browser worker (webui/data/storage-s3-browser.ts). */\nexport interface StorageClient {\n /** Keys under `prefix`, ascending, optionally only those strictly after\n * `startAfter`. With `delimiter` (\"/\"), collapse one level into common\n * prefixes (their keys end in the delimiter) to discover child \"folders\"\n * cheaply — callers must tolerate a backend that ignores it and returns full\n * keys instead. */\n list(prefix: string, startAfter?: string, delimiter?: string): Promise<StorageObject[]>;\n get(key: string): Promise<Uint8Array | null>;\n put(key: string, body: Uint8Array, opts?: StoragePutOpts): Promise<void>;\n del(key: string): Promise<void>;\n}\n\ntype StorageClientFactory = (config: S3Config) => StorageClient;\nlet factory: StorageClientFactory | null = null;\n\n/** Register this runtime's S3 client builder (see the per-runtime impls). */\nexport function setStorageClientFactory(f: StorageClientFactory): void {\n factory = f;\n}\n\nexport function storageClientFor(config: S3Config): StorageClient {\n if (!factory)\n throw new MhError(\"network\", \"no S3 storage client is registered for this runtime\");\n return factory(config);\n}\n\n// ---- bucket key layout ----------------------------------------------------------\n\n/** Reserved cursor key for \"which snapshots have we already ingested\". Real node\n * ids are 8-char random suffixes, so this sentinel can't collide with one. */\nconst SNAPSHOT_CURSOR = \"__snapshot__\";\nconst SEG_PAD = 16;\n/** Separator between the snapshot's max-HLC and its content hash in the object\n * key. Must not appear in an HLC (which is digits + '-'); '~' sorts above every\n * HLC char so keys still order by max-HLC then hash. */\nconst SNAP_SEP = \"~\";\n\n// ---- snapshot/truncation policy defaults (log-structured; see ⑤) ----------------\n/** Keep this many of our most recent own segments alive past a snapshot so a\n * consumer behind by < a window catches up incrementally instead of re-pulling\n * the whole-hub snapshot. Older segments are truncated → bucket stays bounded. */\nconst DEFAULT_RETAIN_SEGMENTS = 40;\n/** Publish a new snapshot once the whole-hub delta since the newest snapshot\n * reaches max(MIN_DELTA ops, hub_size × DELTA_RATIO) — a checkpoint that \"pays\n * for itself\", instead of a short wall-clock timer that re-checkpoints every 60s\n * and strands consumers on full downloads. */\nconst DEFAULT_SNAPSHOT_MIN_DELTA = 200;\nconst DEFAULT_SNAPSHOT_DELTA_RATIO = 0.5;\n/** Safety cap: publish anyway if the hub advanced and this long passed since the\n * newest snapshot, so a slow trickle of edits still gets a fresh baseline. */\nconst DEFAULT_SNAPSHOT_MAX_INTERVAL_MS = 30 * 60_000;\n\nfunction basePrefix(prefix: string): string {\n const p = (prefix || \"\").replace(/^\\/+|\\/+$/g, \"\");\n return p ? `${p}/spaces/default` : \"spaces/default\";\n}\nconst oplogRoot = (base: string) => `${base}/oplog/`;\nconst nodePrefix = (base: string, node: string) => `${base}/oplog/${node}/`;\nconst headKey = (base: string, node: string) => `${base}/oplog/${node}/HEAD`;\nconst segKey = (base: string, node: string, seq: number) =>\n `${base}/oplog/${node}/${String(seq).padStart(SEG_PAD, \"0\")}.seg`;\nconst snapshotRoot = (base: string) => `${base}/snapshot/`;\nconst mainKeyPath = (base: string) => `${base}/keys/main.json`;\n\n// ---- segment codec (Change[] ⇄ bytes) -------------------------------------------\n\nfunction ab(u: Uint8Array): ArrayBuffer {\n const out = new Uint8Array(u.byteLength);\n out.set(u);\n return out.buffer;\n}\n\nasync function gzip(bytes: Uint8Array): Promise<Uint8Array> {\n const stream = new Response(ab(bytes)).body!.pipeThrough(new CompressionStream(\"gzip\"));\n return new Uint8Array(await new Response(stream).arrayBuffer());\n}\nasync function gunzip(bytes: Uint8Array): Promise<Uint8Array> {\n const stream = new Response(ab(bytes)).body!.pipeThrough(new DecompressionStream(\"gzip\"));\n return new Uint8Array(await new Response(stream).arrayBuffer());\n}\n\n/** Serialize changes to the canonical JSONL the segment/snapshot codec stores. */\nfunction toJsonl(changes: Change[]): string {\n return changes.map((c) => JSON.stringify(c)).join(\"\\n\");\n}\n\nasync function encodeSegment(changes: Change[], key: Uint8Array | null): Promise<Uint8Array> {\n const gz = await gzip(new TextEncoder().encode(toJsonl(changes)));\n return key ? encryptBytes(key, gz) : gz;\n}\n\nasync function decodeSegment(bytes: Uint8Array, key: Uint8Array | null): Promise<Change[]> {\n const gz = key ? await decryptBytes(key, bytes) : bytes;\n const jsonl = new TextDecoder().decode(await gunzip(gz));\n if (!jsonl) return [];\n return jsonl\n .split(\"\\n\")\n .filter((l) => l.length > 0)\n .map((l) => JSON.parse(l) as Change);\n}\n\nfunction masterKeyOf(config: S3Config): Uint8Array | null {\n if (!config.encrypt) return null;\n // encrypt is on but the key is absent: provisioning partially failed or a\n // config migration dropped masterKey. Refuse loudly — silently returning null\n // here would let encodeSegment/decodeSegment write/read *plaintext* segments\n // to an \"encrypted\" bucket.\n if (!config.masterKey)\n throw new MhError(\n \"invalid_input\",\n \"encrypted bucket but master key missing — refusing to read/write plaintext\",\n );\n return fromB64(config.masterKey);\n}\n\n// ---- blob byte transport (content-addressed objects in the same bucket) --------\n// Doc images / large files never enter the oplog (only their hash does). A node\n// may publish a blob's bytes at <base>/blobs/<hash> (encrypted with the same\n// master key) so other nodes pull them on demand. A separate namespace from\n// oplog/snapshot — never listed during a sync round.\n\nconst blobsKey = (base: string, hash: string) => `${base}/blobs/${hash}`;\n\n/** Upload a blob's bytes to the bucket (idempotent via If-None-Match). Returns\n * true when actually written, false when the object already existed. */\nexport async function putBucketBlob(\n config: S3Config,\n hash: string,\n bytes: Uint8Array,\n): Promise<boolean> {\n const client = storageClientFor(config);\n const key = blobsKey(basePrefix(config.prefix), hash);\n const mk = masterKeyOf(config);\n const body = mk ? await encryptBytes(mk, bytes) : bytes;\n try {\n await client.put(key, body, { ifNoneMatch: true, contentType: \"application/octet-stream\" });\n return true;\n } catch (e) {\n if (errorCode(e) === \"conflict\") return false; // already present\n throw e;\n }\n}\n\n/** Every blob hash the bucket durably holds — one paginated LIST of the `blobs/`\n * namespace (the client loops continuation tokens internally). Used by the\n * on-demand clear-presence verify; keeps the `<base>/blobs/<hash>` key layout\n * encapsulated here. Throws if the bucket is unreachable (caller treats the\n * anchor as unverified). */\nexport async function listBucketBlobHashes(config: S3Config): Promise<Set<string>> {\n const client = storageClientFor(config);\n const prefix = blobsKey(basePrefix(config.prefix), \"\");\n const objs = await client.list(prefix);\n const out = new Set<string>();\n for (const o of objs) {\n const tail = o.key.slice(prefix.length);\n if (tail) out.add(tail); // key tail after `blobs/` is the hash\n }\n return out;\n}\n\n/** Fetch a blob's bytes from the bucket, or null if absent. */\nexport async function getBucketBlob(config: S3Config, hash: string): Promise<Uint8Array | null> {\n const client = storageClientFor(config);\n const obj = await client.get(blobsKey(basePrefix(config.prefix), hash));\n if (!obj) return null;\n const mk = masterKeyOf(config);\n return mk ? decryptBytes(mk, obj) : obj;\n}\n\n/** Short content hash (hex) for snapshot keying — runtime-agnostic (WebCrypto). */\nasync function contentHash(s: string): Promise<string> {\n const digest = await crypto.subtle.digest(\n \"SHA-256\",\n ab(new TextEncoder().encode(s)),\n );\n return [...new Uint8Array(digest)].map((b) => b.toString(16).padStart(2, \"0\")).join(\"\").slice(0, 16);\n}\n\n// ---- cursors --------------------------------------------------------------------\n\nfunction getPushCursor(db: DbDriver, url: string): number {\n const r = db.query(\"SELECT push_cursor FROM peers WHERE url = ?\").get(url) as\n | { push_cursor: number }\n | null;\n return r?.push_cursor ?? 0;\n}\nfunction setPushCursor(db: DbDriver, url: string, c: number): void {\n db.query(\"UPDATE peers SET push_cursor = ? WHERE url = ?\").run(c, url);\n}\nfunction getStorageCursor(db: DbDriver, url: string, node: string): string | null {\n const r = db\n .query(\"SELECT last_key FROM storage_cursors WHERE peer_url = ? AND node_id = ?\")\n .get(url, node) as { last_key: string | null } | null;\n return r?.last_key ?? null;\n}\nfunction setStorageCursor(db: DbDriver, url: string, node: string, key: string): void {\n db.query(\n \"INSERT INTO storage_cursors (peer_url, node_id, last_key) VALUES (?, ?, ?) \" +\n \"ON CONFLICT(peer_url, node_id) DO UPDATE SET last_key = excluded.last_key\",\n ).run(url, node, key);\n}\n\n/** Snapshot keys we've already ingested for this peer (newline-joined set in the\n * SNAPSHOT_CURSOR sentinel row). A set, not a single \"latest\" key: two nodes\n * can publish different-content snapshots at the same max-HLC, and a single\n * lexicographic cursor would skip one of them. */\nfunction getSnapshotConsumed(db: DbDriver, url: string): Set<string> {\n const raw = getStorageCursor(db, url, SNAPSHOT_CURSOR);\n return new Set(raw ? raw.split(\"\\n\").filter(Boolean) : []);\n}\nfunction setSnapshotConsumed(db: DbDriver, url: string, keys: Iterable<string>): void {\n setStorageCursor(db, url, SNAPSHOT_CURSOR, [...keys].join(\"\\n\"));\n}\n\n// ---- winners snapshot -----------------------------------------------------------\n\n/** The current winner (max-HLC row) of every register — the head state as oplog\n * rows. Mirrors compact.ts's \"collapse to as-of-cutoff winner\": a consumer that\n * ingests this reaches the same materialized state. Tombstone winners included. */\nfunction winnersSnapshot(db: DbDriver): Change[] {\n return db\n .query(\n `SELECT ${CHANGE_SELECT} FROM crdt_changes c\n WHERE NOT EXISTS (\n SELECT 1 FROM crdt_changes k\n WHERE k.dataset = c.dataset AND k.row_id = c.row_id AND k.col = c.col AND k.hlc > c.hlc\n )`,\n )\n .all() as Change[];\n}\n\n// ---- snapshot frontier (vector clock) for incremental skip -----------------------\n\n/** Per-node HLC frontier: node_id → max HLC reflected for that node. A consumer\n * whose own frontier dominates a snapshot's already holds every winner in it. */\ntype Frontier = Record<string, string>;\n\n/** Frontier of a winner set: per author node, the max winner HLC. */\nfunction frontierOfWinners(winners: Change[]): Frontier {\n const f: Frontier = {};\n for (const c of winners) if (!f[c.node_id] || c.hlc > f[c.node_id]!) f[c.node_id] = c.hlc;\n return f;\n}\n\n/** This node's local frontier from its oplog (per node, max ingested HLC). Cheap\n * GROUP BY; segments are pulled gap-free per node so this is a true prefix. */\nfunction localFrontier(db: DbDriver): Frontier {\n const rows = db\n .query(\"SELECT node_id, MAX(hlc) AS h FROM crdt_changes GROUP BY node_id\")\n .all() as { node_id: string; h: string }[];\n const f: Frontier = {};\n for (const r of rows) f[r.node_id] = r.h;\n return f;\n}\n\n/** True when `local` already covers every node frontier in `snap` (∀ node n:\n * local[n] ≥ snap[n]). Then ingesting the snapshot would add nothing → skip it. */\nfunction dominates(local: Frontier, snap: Frontier): boolean {\n for (const n in snap) if (!local[n] || local[n]! < snap[n]!) return false;\n return true;\n}\n\n/** Sidecar object carrying a snapshot's frontier so a caught-up consumer can skip\n * the (whole-hub) body GET, plus the publisher's own latest seg key at snapshot\n * time so a consumer that DID ingest the snapshot can advance its cursor past the\n * publisher's retained segments (⑤c) instead of re-pulling them. */\ninterface SnapMeta {\n frontier: Frontier;\n ownNode: string;\n ownSegHigh: string | null;\n}\nconst vcKey = (snapKey: string) => `${snapKey}.vc`;\n\nasync function encodeVc(meta: SnapMeta, key: Uint8Array | null): Promise<Uint8Array> {\n const gz = await gzip(new TextEncoder().encode(JSON.stringify(meta)));\n return key ? encryptBytes(key, gz) : gz;\n}\nasync function decodeVc(bytes: Uint8Array, key: Uint8Array | null): Promise<SnapMeta | null> {\n try {\n const gz = key ? await decryptBytes(key, bytes) : bytes;\n return JSON.parse(new TextDecoder().decode(await gunzip(gz))) as SnapMeta;\n } catch {\n return null; // unreadable/legacy snapshot with no .vc → caller falls back to GET\n }\n}\n\n// ---- node-prefix discovery ------------------------------------------------------\n\nfunction nodesFromKeys(objs: StorageObject[], root: string): string[] {\n const nodes = new Set<string>();\n for (const o of objs) {\n const rest = o.key.slice(root.length); // \"<node>/\" (delimiter) or \"<node>/<file>\"\n const slash = rest.indexOf(\"/\");\n if (slash > 0) nodes.add(rest.slice(0, slash));\n }\n return [...nodes];\n}\n\n/** Discover the node prefixes under oplog/. Asks for a delimited (one-level)\n * listing so a backend that honors it returns just the \"<node>/\" folders\n * instead of every segment; nodesFromKeys derives the same node set whether the\n * backend collapsed them or returned full keys. */\nasync function listRemoteNodes(client: StorageClient, base: string): Promise<string[]> {\n const root = oplogRoot(base);\n return nodesFromKeys(await client.list(root, undefined, \"/\"), root);\n}\n\n// ---- master-key provisioning (peer-add time) ------------------------------------\n\n/**\n * Resolve the master key for a bucket at setup: read keys/main.json and unwrap\n * with the passphrase, or — when absent — generate a key, wrap it, and upload\n * it with `If-None-Match` so a concurrent first-time init can't clobber it.\n * Returns base64(K) to store in peers.config, or null when encryption is off.\n * Wrong passphrase throws `auth` (from unwrapMasterKey).\n */\nexport async function provisionMasterKey(\n client: StorageClient,\n config: S3Config,\n passphrase: string,\n): Promise<string | null> {\n if (!config.encrypt) return null;\n const base = basePrefix(config.prefix);\n const path = mainKeyPath(base);\n const unwrap = async (bytes: Uint8Array) =>\n toB64(await unwrapMasterKey(JSON.parse(new TextDecoder().decode(bytes)) as KeyEnvelope, passphrase));\n\n const existing = await client.get(path);\n if (existing) return unwrap(existing);\n\n const K = generateMasterKey();\n const env = await wrapMasterKey(K, passphrase);\n try {\n await client.put(path, new TextEncoder().encode(JSON.stringify(env)), {\n contentType: \"application/json\",\n ifNoneMatch: true,\n });\n return toB64(K);\n } catch (e) {\n // Lost a first-init race: another device created the key between our GET and\n // PUT. Adopt theirs (unwraps with the same passphrase, or fails `auth`).\n if (errorCode(e) === \"conflict\") {\n const winner = await client.get(path);\n if (winner) return unwrap(winner);\n }\n throw e;\n }\n}\n\n// ---- snapshot publish + truncation ----------------------------------------------\n\n/**\n * Publish a winners-only snapshot and truncate this node's own segments. Every\n * op we've uploaded so far is in the local oplog now, so the snapshot (winners\n * as-of the current max HLC) supersedes all of them — they're safe to delete\n * (compact.ts invariant #1). Ops produced afterwards go into fresh, higher-keyed\n * segments; consumers reach our pre-snapshot state via the snapshot itself.\n *\n * The key is `<maxHlc>~<hash>.snap`: the hash (over the canonical winner set)\n * makes converged nodes collide on one key (deduped) while two nodes that are\n * NOT converged — same max HLC but different extra winners — get distinct keys,\n * so neither overwrites the other. Then old snapshots (strictly lower max-HLC)\n * are GC'd so the bucket stays bounded.\n *\n * Returns the snapshot key + change count, or null when the oplog is empty.\n */\nexport async function publishSnapshot(\n db: DbDriver,\n client: StorageClient,\n config: S3Config,\n retainSegments: number = DEFAULT_RETAIN_SEGMENTS,\n): Promise<{ key: string; changes: number } | null> {\n const key = masterKeyOf(config);\n const base = basePrefix(config.prefix);\n const node = getNodeId(db);\n\n // Cut the segment frontier BEFORE reading winners. If another local sync uploads\n // a segment while we are publishing, it either lands before this list and is in\n // the snapshot, or after it and remains below the consumer's cursor.\n const ownSegs = (await client.list(nodePrefix(base, node)))\n .map((o) => o.key)\n .filter((k) => k.endsWith(\".seg\"))\n .sort();\n const ownSegHigh = ownSegs.length ? ownSegs[ownSegs.length - 1]! : null;\n\n const winners = winnersSnapshot(db);\n if (winners.length === 0) return null;\n const maxHlc = winners.reduce((m, c) => (c.hlc > m ? c.hlc : m), \"\");\n // Hash a deterministic (sorted) view so row order can't change the key.\n const hash = await contentHash(winners.map((c) => JSON.stringify(c)).sort().join(\"\\n\"));\n const snapKey = `${snapshotRoot(base)}${maxHlc}${SNAP_SEP}${hash}.snap`;\n\n await client.put(snapKey, await encodeSegment(winners, key), {\n contentType: \"application/octet-stream\",\n });\n // Frontier sidecar (⑤b): pullSnapshots reads it to skip the whole-hub body GET\n // when already caught up, and to advance its cursor past our retained segments.\n await client.put(\n vcKey(snapKey),\n await encodeVc({ frontier: frontierOfWinners(winners), ownNode: node, ownSegHigh }, key),\n { contentType: \"application/octet-stream\" },\n );\n\n // GC: drop snapshots (and their .vc) from a strictly older frontier (keep this\n // max-HLC and any concurrent sibling/newer one). maxHlc is fixed width, so a\n // basename compare before SNAP_SEP is the max-HLC compare.\n for (const o of await client.list(snapshotRoot(base))) {\n if (!o.key.endsWith(\".snap\")) continue;\n const mh = o.key.slice(snapshotRoot(base).length).split(SNAP_SEP)[0]!;\n if (mh < maxHlc) {\n await client.del(o.key);\n await client.del(vcKey(o.key));\n }\n }\n\n // Truncate our own superseded segments but RETAIN the most recent\n // `retainSegments` (⑤c): a consumer behind by < a window catches up via segments\n // (incremental) instead of re-downloading the whole-hub snapshot.\n const toDelete = ownSegs.slice(0, Math.max(0, ownSegs.length - retainSegments));\n for (const k of toDelete) await client.del(k);\n return { key: snapKey, changes: winners.length };\n}\n\n// ---- one sync round -------------------------------------------------------------\n\nexport interface StorageSyncOpts {\n /** Publisher-only: publish a snapshot + truncate once this node's own segment\n * count reaches this. Default 200 — high enough that typical use rarely hits\n * it, low enough to keep the bucket bounded under heavy publisher use. */\n snapshotEverySegments?: number;\n /** Push-batching: defer uploading our pending own ops until there are at least\n * this many (default 1 → push every round). Coalesces a burst of edits into\n * one segment instead of many tiny ones (each is a billed request + a GET for\n * every puller). */\n minPushChanges?: number;\n /** …or until the oldest pending op is at least this old (ms; default 0 → no\n * age bound). Bounds how long a small trailing edit waits. */\n maxPushAgeMs?: number;\n /** Push regardless of the batching thresholds — use on explicit \"sync now\" and\n * when the app is backgrounding, so edits are never stranded unsynced. */\n forcePush?: boolean;\n /**\n * This node is the bucket's *publisher*: keep the bucket a complete, fresh\n * whole-hub mirror by writing a winners-only snapshot (publishSnapshot) when\n * the bucket has none yet, or when the hub has advanced past the newest\n * snapshot. The snapshot spans the WHOLE db, so it captures data authored by\n * nodes that never push to this bucket themselves (e.g. a server holding the\n * canonical hub while browsers only window onto it) — fixing the \"attached a\n * bucket but it stays empty\" footgun. Any node holding the full hub can be the\n * publisher; who is one is decided above storage.ts (server by default, else a\n * lease — see publisher-lease.ts). Correctness never depends on a single\n * publisher: concurrent snapshots are content-addressed and idempotent. */\n publish?: boolean;\n /** ⑤d snapshot trigger: publish once the whole-hub delta since the newest\n * snapshot reaches max(`snapshotMinDelta` ops, hub_size × `snapshotDeltaRatio`),\n * or `snapshotMaxIntervalMs` elapsed (safety). Replaces the old 60s timer that\n * re-checkpointed constantly and forced full re-downloads. Defaults:\n * DEFAULT_SNAPSHOT_MIN_DELTA / _DELTA_RATIO / _MAX_INTERVAL_MS. */\n snapshotMinDelta?: number;\n snapshotDeltaRatio?: number;\n snapshotMaxIntervalMs?: number;\n /** ⑤c: keep this many of our most recent own segments alive past a snapshot so\n * slightly-behind consumers catch up incrementally (default DEFAULT_RETAIN_SEGMENTS). */\n snapshotRetainSegments?: number;\n /** This node's publisher priority when contending for the lease (higher wins;\n * see publisher-lease.ts). Only consulted when `publish` is set. */\n priority?: number;\n /**\n * Run the PULL half of the round (snapshots + other nodes' segments). Default\n * true. Set false for *push-only* rounds: an origin-backed replica gets a\n * superset of bucket contents from its origin (HTTP), so it never needs to PULL\n * the bucket — it only PUSHes its own segments here for independent durability\n * (Path B). Skipping PULL drops the two unconditional LISTs (snapshot/, oplog/)\n * that dominate idle bucket cost. A *publisher* must always PULL (it needs the\n * snapshot list to decide what to publish), so callers never combine\n * `publish:true` with `pull:false`.\n */\n pull?: boolean;\n}\n\n/** Epoch millis encoded in an HLC's first 15 chars (hlc.ts formatHlc). */\nfunction hlcMs(hlc: string): number {\n return parseInt(hlc.slice(0, 15), 10);\n}\n\n/** Wall-clock age (ms) of a change from its HLC. */\nfunction changeAgeMs(c: Change): number {\n return Date.now() - hlcMs(c.hlc);\n}\n\n/** The max-HLC of the newest snapshot present in the bucket, or null when none.\n * Parsed from the `<maxHlc>~<hash>.snap` key, so it needs no GET. */\nfunction newestSnapshotHlc(snapKeys: string[], base: string): string | null {\n const root = snapshotRoot(base);\n let max: string | null = null;\n for (const k of snapKeys) {\n const mh = k.slice(root.length).split(SNAP_SEP)[0]!;\n if (max === null || mh > max) max = mh;\n }\n return max;\n}\n\n/**\n * One push/pull round against a storage peer. Push uploads this node's pending\n * own ops as a new segment (subject to batching); pull hydrates from snapshots\n * (any not yet ingested) then drains each other node's new segments. Returns\n * { pushed, pulled } like syncWithPeer so peers.ts status writeback is shared.\n */\nexport async function syncWithStorage(\n db: DbDriver,\n peerUrl: string,\n client: StorageClient,\n config: S3Config,\n opts: StorageSyncOpts = {},\n): Promise<SyncResult> {\n const node = getNodeId(db);\n const key = masterKeyOf(config);\n const base = basePrefix(config.prefix);\n\n // PUSH: our own un-uploaded ops → one new segment + HEAD pointer.\n const pushCursor = getPushCursor(db, peerUrl);\n const batch = changesAfterSeq(db, pushCursor, { onlyNode: node });\n let pushed = 0;\n let pendingPush = false;\n if (batch.changes.length === 0) {\n // No own ops pending: still advance past any ingested foreign rows so they\n // aren't rescanned every round (changesAfterSeq's high-water on exhaustion).\n setPushCursor(db, peerUrl, batch.cursor);\n } else {\n const minChanges = opts.minPushChanges ?? 1;\n const maxAge = opts.maxPushAgeMs ?? 0;\n const ready =\n opts.forcePush || batch.changes.length >= minChanges || changeAgeMs(batch.changes[0]!) >= maxAge;\n if (ready) {\n // Write HEAD *before* the segment: a crash between the two then leaves HEAD\n // pointing at a not-yet-present key, which only makes a puller LIST once\n // more (safe) — the reverse order could leave HEAD behind a written\n // segment and make the cheap-skip below silently miss it.\n const k = segKey(base, node, batch.cursor);\n await client.put(headKey(base, node), new TextEncoder().encode(k), {\n contentType: \"text/plain\",\n });\n await client.put(k, await encodeSegment(batch.changes, key), {\n contentType: \"application/octet-stream\",\n });\n setPushCursor(db, peerUrl, batch.cursor);\n pushed = batch.changes.length;\n } else {\n pendingPush = true;\n }\n // Pending but below threshold → leave the cursor, retry next round.\n }\n\n // PULL: snapshots first (every one we haven't ingested)…then each other node's\n // new segments. Skipped entirely in push-only mode (opts.pull === false) — see\n // StorageSyncOpts.pull. `snapKeys` stays [] then; the PUBLISHER block below only\n // runs when opts.publish, and a publisher always pulls, so it never sees [].\n let snapKeys: string[] = [];\n let pulled = 0;\n if (opts.pull ?? true) {\n snapKeys = (await client.list(snapshotRoot(base)))\n .map((o) => o.key)\n .filter((k) => k.endsWith(\".snap\"));\n pulled += await pullSnapshots(db, peerUrl, snapKeys, client, key);\n\n // …then each other node's new segments.\n for (const remote of await listRemoteNodes(client, base)) {\n if (remote === node) continue; // never pull our own prefix back in\n const cursor = getStorageCursor(db, peerUrl, remote);\n // Cheap skip: HEAD names the latest segment key; if we're already at/after\n // it there's nothing new. HEAD is written before its segment, so it's never\n // behind the real latest — this can't skip a present-but-newer segment.\n const head = await client.get(headKey(base, remote));\n if (head) {\n const latest = new TextDecoder().decode(head);\n if (cursor && latest <= cursor) continue;\n }\n const segs = (await client.list(nodePrefix(base, remote), cursor ?? undefined)).filter(\n (o) => o.key.endsWith(\".seg\"),\n );\n for (const seg of segs) {\n const bytes = await client.get(seg.key);\n if (!bytes) continue;\n const changes = await decodeSegment(bytes, key);\n // Count only changes NEW to our oplog (ingest's return), not the segment's\n // raw size — a re-read of already-known data is not sync progress and must\n // not keep the auto-sync backoff (server.ts) flagged \"busy\".\n pulled += ingest(db, changes);\n setStorageCursor(db, peerUrl, remote, seg.key);\n }\n }\n }\n\n // PUBLISHER: keep the bucket a complete, fresh whole-hub mirror. The snapshot\n // spans the whole db, so it carries data authored by nodes that never push\n // here — and an empty bucket gets its first snapshot immediately (the\n // \"attached but empty\" fix). Rate-limited so a steady edit stream doesn't\n // snapshot every round; `snapKeys` was already listed above, so no extra LIST.\n let didSnapshot = false;\n if (opts.publish) {\n const hubSize = (db.query(\"SELECT COUNT(*) AS n FROM crdt_changes\").get() as { n: number }).n;\n if (hubSize > 0) {\n const newest = newestSnapshotHlc(snapKeys, base);\n // ⑤d: checkpoint when the whole-hub delta since the newest snapshot is worth\n // a fresh baseline — max(min ops, hub_size × ratio) — or a safety time cap.\n // Local-only queries; no extra bucket calls. (⑤a: forcePush no longer forces\n // a snapshot — it only forces the PUSH above — so a steady \"sync now\" / user\n // refresh can't trigger whole-hub re-publishes.)\n const minDelta = opts.snapshotMinDelta ?? DEFAULT_SNAPSHOT_MIN_DELTA;\n const ratio = opts.snapshotDeltaRatio ?? DEFAULT_SNAPSHOT_DELTA_RATIO;\n const maxInterval = opts.snapshotMaxIntervalMs ?? DEFAULT_SNAPSHOT_MAX_INTERVAL_MS;\n const delta =\n newest === null\n ? hubSize\n : (db.query(\"SELECT COUNT(*) AS n FROM crdt_changes WHERE hlc > ?\").get(newest) as {\n n: number;\n }).n;\n const due =\n newest === null || // empty bucket → first snapshot now\n delta >= Math.max(minDelta, hubSize * ratio) ||\n (delta > 0 && Date.now() - hlcMs(newest) >= maxInterval); // trickle → safety cap\n // Only publish when we're the elected publisher among live candidates, so\n // multiple publishers don't all upload the same snapshot. Election is\n // best-effort (idempotent snapshots make a double-elect harmless).\n if (due && (await isElectedPublisher(client, base, node, opts.priority ?? 0))) {\n await publishSnapshot(db, client, config, opts.snapshotRetainSegments);\n didSnapshot = true;\n }\n }\n }\n\n // Publisher-only bucket bounding: snapshot + truncate once our own prefix grows\n // large. Non-publishers may push their own segments, but `publish:false` is a\n // hard promise that this node never writes a whole-hub snapshot.\n if (opts.publish && !didSnapshot && pushed > 0) {\n const threshold = opts.snapshotEverySegments ?? 200;\n const ownCount = (await client.list(nodePrefix(base, node))).filter((o) =>\n o.key.endsWith(\".seg\"),\n ).length;\n if (ownCount >= threshold) await publishSnapshot(db, client, config, opts.snapshotRetainSegments);\n }\n\n return { pushed, pulled, pendingPush };\n}\n\n/** Ingest only the snapshots we don't already cover, then prune the consumed set\n * to keys still present so it stays bounded as old snapshots GC. ⑤b: a small\n * frontier sidecar (.vc) lets a caught-up consumer skip the whole-hub body GET;\n * newest-first so ingesting the latest dominates (and thus skips) older ones. */\nasync function pullSnapshots(\n db: DbDriver,\n peerUrl: string,\n present: string[],\n client: StorageClient,\n key: Uint8Array | null,\n): Promise<number> {\n if (present.length === 0) return 0;\n const consumed = getSnapshotConsumed(db, peerUrl);\n const local = localFrontier(db);\n let pulled = 0;\n for (const k of [...present].sort().reverse()) {\n if (consumed.has(k)) continue;\n // Read the small frontier sidecar. If our local frontier already dominates\n // this snapshot we hold every winner in it → skip the whole-hub body GET.\n const metaBytes = await client.get(vcKey(k));\n const meta = metaBytes ? await decodeVc(metaBytes, key) : null;\n if (meta && dominates(local, meta.frontier)) {\n consumed.add(k);\n continue;\n }\n const bytes = await client.get(k);\n if (!bytes) continue;\n const changes = await decodeSegment(bytes, key);\n // A whole-hub snapshot mostly carries data we already hold; count only the\n // rows new to our oplog (ingest's return), not the snapshot's full size, so a\n // puller that's barely behind doesn't report a huge false \"pulled\" that pins\n // the auto-sync backoff at full cadence. The frontier advance below still\n // walks all changes (idempotent max).\n pulled += ingest(db, changes);\n consumed.add(k);\n for (const c of changes)\n if (!local[c.node_id] || c.hlc > local[c.node_id]!) local[c.node_id] = c.hlc;\n // ⑤c: the snapshot already covers the publisher's retained segments up to\n // ownSegHigh — advance our cursor past them so the segment loop won't re-pull.\n if (meta?.ownSegHigh) {\n const cur = getStorageCursor(db, peerUrl, meta.ownNode);\n if (!cur || cur < meta.ownSegHigh)\n setStorageCursor(db, peerUrl, meta.ownNode, meta.ownSegHigh);\n }\n }\n // Forget keys no longer in the bucket (GC'd) so the set can't grow unbounded.\n const presentSet = new Set(present);\n setSnapshotConsumed(db, peerUrl, [...consumed].filter((k) => presentSet.has(k)));\n return pulled;\n}\n",
100
- "// Bun runtime implementation of the storage-sync StorageClient, backed by the\n// built-in Bun.S3Client (zero dependencies). Importing this module registers\n// the factory; CLI and server entry points import it for its side effect so any\n// 's3' peer they sync resolves to a real client. The browser worker registers\n// its own SigV4 client instead (webui/data/storage-s3-browser.ts) and never\n// imports this Bun-only module, keeping `bun` out of the browser bundle.\n\nimport { S3Client } from \"bun\";\nimport { AwsClient } from \"aws4fetch\";\nimport { MhError } from \"../errors.ts\";\nimport {\n setStorageClientFactory,\n isVirtualHostedStyle,\n type StorageClient,\n type StorageObject,\n type StoragePutOpts,\n type S3Config,\n} from \"./storage.ts\";\n\nfunction makeClient(config: S3Config): StorageClient {\n // Virtual-hosted (e.g. Tencent COS, which rejects path-style): the endpoint\n // host already carries the bucket, so Bun ignores the `bucket` option.\n const vhost = isVirtualHostedStyle(config);\n const s3 = new S3Client({\n accessKeyId: config.accessKeyId,\n secretAccessKey: config.secretAccessKey,\n region: config.region || \"auto\", // R2 uses \"auto\"\n endpoint: config.endpoint,\n bucket: config.bucket,\n ...(vhost ? { virtualHostedStyle: true } : {}),\n });\n\n return {\n async list(prefix: string, startAfter?: string, delimiter?: string): Promise<StorageObject[]> {\n const out: StorageObject[] = [];\n let continuationToken: string | undefined;\n do {\n const res = await s3.list({ prefix, startAfter, maxKeys: 1000, continuationToken, delimiter });\n for (const c of res.contents ?? []) out.push({ key: c.key, etag: c.eTag });\n // With delimiter, child \"folders\" come back as common prefixes (their\n // keys end in the delimiter); nodesFromKeys treats them like full keys.\n for (const p of res.commonPrefixes ?? []) out.push({ key: p.prefix });\n continuationToken = res.isTruncated ? res.nextContinuationToken : undefined;\n } while (continuationToken);\n return out;\n },\n\n async get(key: string): Promise<Uint8Array | null> {\n const f = s3.file(key);\n try {\n return new Uint8Array(await f.arrayBuffer());\n } catch (e) {\n // Single GET on the happy path; only an error pays for the existence\n // probe that tells \"absent\" (→ null) apart from a real failure (rethrow).\n if (await f.exists().catch(() => true)) throw e;\n return null;\n }\n },\n\n async put(key: string, body: Uint8Array, opts?: StoragePutOpts): Promise<void> {\n // Bun.S3Client.write has no native If-None-Match. Approximate the conditional\n // create with an existence pre-check: this catches the realistic ordering\n // (one device's create already visible — S3/R2 are read-after-write\n // consistent for new objects) and lets provisionMasterKey adopt the winner.\n // A truly simultaneous Bun-vs-Bun first-init on an empty bucket can still\n // race (no atomic CAS here); the browser client uses real If-None-Match.\n if (opts?.ifNoneMatch && (await s3.file(key).exists())) {\n throw new MhError(\"conflict\", `S3 object already exists: ${key}`);\n }\n await s3.file(key).write(body, opts?.contentType ? { type: opts.contentType } : undefined);\n },\n\n async del(key: string): Promise<void> {\n await s3.file(key).delete();\n },\n };\n}\n\nsetStorageClientFactory(makeClient);\n\n// ── Bucket CORS bootstrap (Bun-only) ────────────────────────────────────────\n// A browser shell can't open its own CORS: the PutBucketCors request would itself\n// be a cross-origin call the bucket hasn't whitelisted yet (chicken-and-egg). So\n// the desktop (which holds the bucket credentials) sets it on the phone's behalf.\n// Bun.S3Client has no PutBucketCors API, so we sign a raw `?cors` request with\n// aws4fetch — same signer the browser client already uses (no hand-rolled SigV4).\n\nconst MANAGED_CORS_RULE_ID = \"metahub-pwa\";\n\nfunction corsEndpoint(config: S3Config): { aws: AwsClient; url: string } {\n const aws = new AwsClient({\n accessKeyId: config.accessKeyId,\n secretAccessKey: config.secretAccessKey,\n region: config.region || \"auto\",\n service: \"s3\",\n });\n const origin = new URL(config.endpoint).origin;\n // Bucket-level subresource: virtual-hosted has the bucket in the host already\n // (COS), path-style puts it in the path (R2/MinIO/S3).\n const base = isVirtualHostedStyle(config) ? origin : `${origin}/${config.bucket}`;\n return { aws, url: `${base}/?cors` };\n}\n\nfunction escapeXml(s: string): string {\n return s\n .replace(/&/g, \"&amp;\")\n .replace(/</g, \"&lt;\")\n .replace(/>/g, \"&gt;\")\n .replace(/\"/g, \"&quot;\");\n}\n\nfunction unescapeXml(s: string): string {\n return s\n .replace(/&lt;/g, \"<\")\n .replace(/&gt;/g, \">\")\n .replace(/&quot;/g, '\"')\n .replace(/&amp;/g, \"&\"); // ampersand last, so it can't re-trigger the others\n}\n\nfunction managedCorsRule(origins: string[]): string {\n const o = origins.map((x) => `<AllowedOrigin>${escapeXml(x)}</AllowedOrigin>`).join(\"\");\n return (\n `<CORSRule><ID>${MANAGED_CORS_RULE_ID}</ID>${o}` +\n `<AllowedMethod>GET</AllowedMethod><AllowedMethod>PUT</AllowedMethod>` +\n `<AllowedMethod>HEAD</AllowedMethod><AllowedMethod>DELETE</AllowedMethod>` +\n `<AllowedHeader>*</AllowedHeader><ExposeHeader>ETag</ExposeHeader>` +\n `<MaxAgeSeconds>3600</MaxAgeSeconds></CORSRule>`\n );\n}\n\n/** Read the bucket's current CORS config (raw XML), or null if none is set. */\nexport async function getBucketCors(config: S3Config): Promise<string | null> {\n const { aws, url } = corsEndpoint(config);\n const res = await aws.fetch(url, { method: \"GET\" });\n if (res.status === 404) return null; // NoSuchCORSConfiguration\n if (!res.ok) {\n const detail = await res.text().catch(() => \"\");\n throw new Error(`S3 get-cors failed: ${res.status} ${detail.slice(0, 200)}`);\n }\n return await res.text();\n}\n\n/**\n * Build the PutBucketCors XML body from the bucket's current config. PutBucketCors\n * replaces the whole config, so we keep every rule that isn't ours and re-emit our\n * managed rule (id=metahub-pwa). `merge` decides our rule's origins:\n * - false (CLI `peer cors`): SET — exactly `origins` (lets the user shrink/reset).\n * - true (auto-open on bucket-attach): UNION with the managed rule's existing\n * origins, so attaching the same bucket from a second shell/origin (a homelab\n * server origin alongside the official PWA shell) adds to the allow-list\n * instead of clobbering it.\n * A wildcard `*` collapses the set. Pure (no I/O) so it's unit-testable.\n */\nexport function buildCorsXml(existing: string | null, origins: string[], merge: boolean): string {\n const kept: string[] = [];\n const prev: string[] = [];\n if (existing) {\n for (const rule of existing.match(/<CORSRule>[\\s\\S]*?<\\/CORSRule>/g) ?? []) {\n if (rule.includes(`<ID>${MANAGED_CORS_RULE_ID}</ID>`)) {\n if (merge)\n for (const m of rule.matchAll(/<AllowedOrigin>([\\s\\S]*?)<\\/AllowedOrigin>/g))\n prev.push(unescapeXml(m[1]!.trim()));\n } else {\n kept.push(rule);\n }\n }\n }\n const merged = [...new Set([...prev, ...origins])];\n const finalOrigins = merged.includes(\"*\") ? [\"*\"] : merged;\n return (\n `<?xml version=\"1.0\" encoding=\"UTF-8\"?>` +\n `<CORSConfiguration>${kept.join(\"\")}${managedCorsRule(finalOrigins)}</CORSConfiguration>`\n );\n}\n\n/**\n * Allow a browser shell served from `origins` to talk to the bucket directly\n * (GET/PUT/HEAD/DELETE) via GET-merge-PUT (see buildCorsXml). `opts.merge` unions\n * with existing managed origins instead of replacing them — used when a second\n * origin attaches the same bucket. Content-MD5 is required by the CORS API\n * (S3 and COS both).\n */\nexport async function putBucketCors(\n config: S3Config,\n origins: string[],\n opts: { merge?: boolean } = {},\n): Promise<void> {\n const clean = origins.map((o) => o.trim()).filter(Boolean);\n if (clean.length === 0) throw new MhError(\"invalid_input\", \"putBucketCors: no origins given\");\n const { aws, url } = corsEndpoint(config);\n\n const existing = await getBucketCors(config).catch(() => null);\n const xml = buildCorsXml(existing, clean, opts.merge ?? false);\n const body = new TextEncoder().encode(xml);\n const contentMd5 = new Bun.CryptoHasher(\"md5\").update(body).digest(\"base64\");\n\n const res = await aws.fetch(url, {\n method: \"PUT\",\n body: new Uint8Array(body).buffer,\n headers: { \"content-type\": \"application/xml\", \"content-md5\": contentMd5 },\n });\n if (!res.ok) {\n const detail = await res.text().catch(() => \"\");\n throw new Error(`S3 put-cors failed: ${res.status} ${detail.slice(0, 200)}`);\n }\n}\n",
106
+ "// Outbound peer management: the devices this node syncs *to*. Each row carries\n// the durable credential the remote issued to us during pairing (see pairing.ts)\n// plus replication cursors and last-sync status. `syncAllPeers` is what the\n// server's auto-sync timer calls each tick.\n\nimport type { DbDriver } from \"../driver.ts\";\nimport { MhError } from \"../errors.ts\";\nimport { syncWithPeer, type SyncResult } from \"./client.ts\";\nimport { storageUrl } from \"./storage-url.ts\";\nimport {\n syncWithStorage,\n storageClientFor,\n provisionMasterKey,\n type S3Config,\n type StorageSyncOpts,\n} from \"./storage.ts\";\n\nconst PEER_COLS =\n \"url, pull_cursor, push_cursor, token, label, node_id, enabled, last_sync_at, last_success_at, last_status, last_error, kind, config\";\nconst syncInFlight = new WeakMap<object, Map<string, Promise<PeerSyncOutcome>>>();\n\nasync function waitForPeerIdle(db: DbDriver, url: string): Promise<void> {\n const existing = syncInFlight.get(db as object)?.get(url);\n if (existing) await existing.catch(() => undefined);\n}\n\nexport interface PeerRow {\n url: string;\n pull_cursor: number;\n push_cursor: number;\n token: string | null;\n label: string | null;\n node_id: string | null;\n enabled: number;\n /** Last sync attempt, successful or failed. */\n last_sync_at: number | null;\n /** Last successful sync. Freshness gates must use this, not last_sync_at. */\n last_success_at: number | null;\n last_status: string | null;\n last_error: string | null;\n /** Transport: 'http' (POST /sync) or 's3' (bucket store-and-forward). */\n kind: string;\n /** JSON S3Config for 's3' peers; null for 'http'. */\n config: string | null;\n}\n\nexport function listPeers(db: DbDriver): PeerRow[] {\n return db.query(`SELECT ${PEER_COLS} FROM peers ORDER BY url`).all() as PeerRow[];\n}\n\nexport function getPeer(db: DbDriver, url: string): PeerRow | null {\n return (\n (db.query(`SELECT ${PEER_COLS} FROM peers WHERE url = ?`).get(url) as PeerRow | null) ?? null\n );\n}\n\nexport interface AddPeerInput {\n url: string;\n token?: string | null;\n label?: string | null;\n node_id?: string | null;\n}\n\n/** Upsert a peer, preserving replication cursors on conflict. */\nexport function addPeer(db: DbDriver, input: AddPeerInput): void {\n db.query(\n `INSERT INTO peers (url, token, label, node_id, enabled, pull_cursor, push_cursor)\n VALUES (?, ?, ?, ?, 1, 0, 0)\n ON CONFLICT(url) DO UPDATE SET\n token = coalesce(excluded.token, peers.token),\n label = coalesce(excluded.label, peers.label),\n node_id = coalesce(excluded.node_id, peers.node_id),\n enabled = 1`,\n ).run(input.url, input.token ?? null, input.label ?? null, input.node_id ?? null);\n}\n\nexport interface AddStoragePeerInput {\n /** Synthetic peer key, by convention s3://<bucket>/<prefix>. */\n url: string;\n config: S3Config;\n label?: string | null;\n}\n\n/** Upsert an 's3' (bucket store-and-forward) peer, preserving cursors on conflict. */\nexport function addStoragePeer(db: DbDriver, input: AddStoragePeerInput): void {\n db.query(\n `INSERT INTO peers (url, kind, config, label, enabled, pull_cursor, push_cursor)\n VALUES (?, 's3', ?, ?, 1, 0, 0)\n ON CONFLICT(url) DO UPDATE SET\n kind = 's3',\n config = excluded.config,\n label = coalesce(excluded.label, peers.label),\n enabled = 1`,\n ).run(input.url, JSON.stringify(input.config), input.label ?? null);\n}\n\nfunction restorePeerRow(db: DbDriver, row: PeerRow): void {\n db.query(\n `UPDATE peers SET\n pull_cursor = ?,\n push_cursor = ?,\n token = ?,\n label = ?,\n node_id = ?,\n enabled = ?,\n last_sync_at = ?,\n last_success_at = ?,\n last_status = ?,\n last_error = ?,\n kind = ?,\n config = ?\n WHERE url = ?`,\n ).run(\n row.pull_cursor,\n row.push_cursor,\n row.token,\n row.label,\n row.node_id,\n row.enabled,\n row.last_sync_at,\n row.last_success_at,\n row.last_status,\n row.last_error,\n row.kind,\n row.config,\n row.url,\n );\n}\n\n// The storage-peer key derivation lives in the runtime-agnostic storage-url.ts\n// so the worker and the schema migration share one definition; re-exported here\n// for existing `from \"./peers.ts\"` importers.\nexport { storageUrl, storageEndpointHost } from \"./storage-url.ts\";\n\nexport interface StoragePeerSpec {\n endpoint: string;\n region?: string;\n bucket: string;\n prefix?: string;\n accessKeyId: string;\n secretAccessKey: string;\n /** Virtual-hosted (COS) vs path-style addressing; undefined → auto-detect.\n * Carried by enroll codes so COS buckets join correctly. */\n virtualHostedStyle?: boolean;\n /** Default true; pass false for `--no-encrypt` plaintext buckets. */\n encrypt?: boolean;\n /** Required when encrypt — provisions/adopts the bucket's wrapped master key. */\n passphrase?: string;\n /** Mark this node the bucket's publisher (writes whole-hub snapshots). */\n publish?: boolean;\n priority?: number;\n label?: string | null;\n}\n\n/**\n * Resolve + persist an S3 storage peer and run one sync so a bad endpoint /\n * credentials / missing CORS fail fast at the call site. Shared by the CLI\n * (`mh config peer add --s3`) and the WebUI server endpoint (`POST /api/peer/s3`)\n * so both go through the exact same provisioning + first-sync path. Returns the\n * resolved config (incl. the wrapped master key) and the first sync outcome.\n */\nexport async function addAndSyncStoragePeer(\n db: DbDriver,\n spec: StoragePeerSpec,\n): Promise<{ url: string; config: S3Config; sync: PeerSyncOutcome }> {\n const prefix = spec.prefix?.trim() || \"metahub\";\n const encrypt = spec.encrypt !== false;\n const config: S3Config = {\n endpoint: spec.endpoint.trim(),\n region: spec.region?.trim() || \"auto\",\n bucket: spec.bucket.trim(),\n prefix,\n accessKeyId: spec.accessKeyId.trim(),\n secretAccessKey: spec.secretAccessKey.trim(),\n encrypt,\n virtualHostedStyle: spec.virtualHostedStyle,\n publish: spec.publish,\n priority: spec.priority,\n };\n if (encrypt) {\n if (!spec.passphrase) throw new MhError(\"invalid_input\", \"passphrase required for an encrypted bucket\");\n config.masterKey =\n (await provisionMasterKey(storageClientFor(config), config, spec.passphrase)) ?? undefined;\n }\n const url = storageUrl(config.endpoint, config.bucket, prefix);\n await waitForPeerIdle(db, url);\n const previous = getPeer(db, url);\n addStoragePeer(db, { url, config, label: spec.label ?? config.bucket });\n const sync = await syncPeer(db, url);\n if (!sync.ok) {\n if (previous) restorePeerRow(db, previous);\n else removePeer(db, url);\n throw new MhError(\"network\", `storage peer first sync failed: ${sync.error ?? \"unknown error\"}`);\n }\n return { url, config, sync };\n}\n\n/**\n * Remove a peer AND revoke the credential we issued to it during pairing, so\n * disconnecting is mutual: we stop syncing out to it (peers row) and it can no\n * longer sync in to us (peer_grants row, keyed by peer_url). Grants minted for a\n * peer that never sent a self_url have a null peer_url and can't be revoked here.\n */\nexport function removePeer(db: DbDriver, url: string): boolean {\n const tx = db.transaction(() => {\n const changed = db.query(\"DELETE FROM peers WHERE url = ?\").run(url).changes > 0;\n db.query(\"DELETE FROM peer_grants WHERE peer_url = ?\").run(url);\n // Drop any storage-sync per-node cursors for this peer (no-op for http peers).\n db.query(\"DELETE FROM storage_cursors WHERE peer_url = ?\").run(url);\n return changed;\n });\n return tx();\n}\n\nexport function setPeerEnabled(db: DbDriver, url: string, enabled: boolean): boolean {\n return (\n db.query(\"UPDATE peers SET enabled = ? WHERE url = ?\").run(enabled ? 1 : 0, url).changes > 0\n );\n}\n\nexport function setPeerLabel(db: DbDriver, url: string, label: string): boolean {\n return db.query(\"UPDATE peers SET label = ? WHERE url = ?\").run(label, url).changes > 0;\n}\n\nexport function updatePeerStatus(\n db: DbDriver,\n url: string,\n status: string,\n error?: string | null,\n): void {\n const now = Date.now();\n if (status === \"ok\") {\n db.query(\n \"UPDATE peers SET last_sync_at = ?, last_success_at = ?, last_status = ?, last_error = ? WHERE url = ?\",\n ).run(now, now, status, error ?? null, url);\n return;\n }\n db.query(\n \"UPDATE peers SET last_sync_at = ?, last_status = ?, last_error = ? WHERE url = ?\",\n ).run(now, status, error ?? null, url);\n}\n\nexport interface PeerSyncOutcome {\n url: string;\n ok: boolean;\n pushed?: number;\n pulled?: number;\n pendingPush?: boolean;\n error?: string;\n}\n\n/** Sync once with a single peer, recording status. Errors are captured, not\n * thrown. Dispatches on transport: 's3' peers go through the bucket\n * store-and-forward client, everything else POSTs /sync. */\nexport async function syncPeer(\n db: DbDriver,\n url: string,\n opts?: { storage?: StorageSyncOpts },\n): Promise<PeerSyncOutcome> {\n let byUrl = syncInFlight.get(db as object);\n if (!byUrl) {\n byUrl = new Map();\n syncInFlight.set(db as object, byUrl);\n }\n const existing = byUrl.get(url);\n if (existing) return existing;\n const run = syncPeerOnce(db, url, opts).finally(() => {\n if (byUrl.get(url) === run) byUrl.delete(url);\n });\n byUrl.set(url, run);\n return run;\n}\n\nasync function syncPeerOnce(\n db: DbDriver,\n url: string,\n opts?: { storage?: StorageSyncOpts },\n): Promise<PeerSyncOutcome> {\n try {\n const peer = getPeer(db, url);\n let result: SyncResult;\n if (peer?.kind === \"s3\") {\n if (!peer.config) throw new Error(`storage peer ${url} has no config`);\n const config = JSON.parse(peer.config) as S3Config;\n // The persisted per-node role (publish/priority) drives snapshot publishing;\n // the caller's opts (forcePush, batching) layer on top.\n const storageOpts: StorageSyncOpts = {\n ...opts?.storage,\n publish: opts?.storage?.publish ?? config.publish,\n priority: opts?.storage?.priority ?? config.priority,\n };\n result = await syncWithStorage(db, url, storageClientFor(config), config, storageOpts);\n } else {\n result = await syncWithPeer(db, url);\n }\n updatePeerStatus(db, url, \"ok\", null);\n return { url, ok: true, pushed: result.pushed, pulled: result.pulled, pendingPush: result.pendingPush };\n } catch (e) {\n const error = (e as Error).message;\n updatePeerStatus(db, url, \"error\", error);\n return { url, ok: false, error };\n }\n}\n\n/** Sync once with every enabled peer. Used by the auto-sync timer. */\nexport async function syncAllPeers(db: DbDriver): Promise<PeerSyncOutcome[]> {\n const peers = listPeers(db).filter((p) => p.enabled);\n const out: PeerSyncOutcome[] = [];\n for (const p of peers) out.push(await syncPeer(db, p.url));\n return out;\n}\n\n/** Reads within this of the last successful sync skip the network entirely. */\nconst DEFAULT_FRESH_MAX_AGE_MS = 3 * 60_000;\n/** Bound on the blocking pre-read sync so a read never hangs on a slow bucket. */\nconst FRESH_SYNC_TIMEOUT_MS = 8_000;\n\n/**\n * Freshness gate for *non-reactive* consumers — CLI reads and the PWA's served\n * site pages (②b). Their local DB is only as fresh as the last sync, and unlike\n * the reactive WebUI they have no background poll and no `synced` revalidate. So\n * if the newest successful peer sync is older than `maxAgeMs`, block on one\n * bounded sync round before the caller reads; otherwise return immediately\n * (read local).\n *\n * No enabled peers → no-op. A running daemon keeps `last_success_at` recent, so\n * this is a near-instant no-op there and only does real work on a daemon-less node\n * that hasn't synced successfully in a while. Failed attempts update\n * `last_sync_at`, but never make local data fresh. Env overrides: MH_OFFLINE=1\n * skips; MH_FRESH=1 forces; MH_SYNC_MAX_AGE=<ms> tunes the threshold.\n */\nexport async function ensureFresh(\n db: DbDriver,\n opts: { maxAgeMs?: number; force?: boolean; offline?: boolean } = {},\n): Promise<void> {\n if (opts.offline ?? process.env.MH_OFFLINE === \"1\") return;\n const peers = listPeers(db).filter((p) => p.enabled);\n if (peers.length === 0) return;\n if (!(opts.force ?? process.env.MH_FRESH === \"1\")) {\n const maxAge = opts.maxAgeMs ?? (Number(process.env.MH_SYNC_MAX_AGE) || DEFAULT_FRESH_MAX_AGE_MS);\n const last = Math.max(0, ...peers.map((p) => p.last_success_at ?? 0));\n if (last && Date.now() - last < maxAge) return; // fresh enough → read local\n }\n // Stale (or forced): one bounded sync; on timeout/error fall back to local data.\n await Promise.race([\n syncAllPeers(db).then(() => undefined),\n new Promise<undefined>((r) => setTimeout(r, FRESH_SYNC_TIMEOUT_MS)),\n ]).catch(() => undefined);\n}\n",
101
107
  "// Managed server auth token, persisted in the `meta` table (same pattern as\n// getNodeId in ../node.ts). The DB is the source of truth: the running server\n// reads state per request, so a separate `mh token refresh` process is picked up\n// immediately and expiry rotation happens lazily on the next request.\n//\n// auth_token current token\n// auth_token_exp when it expires (epoch ms) → lazy rotation past this\n// auth_token_prev the token from before the last rotation (one generation)\n// auth_token_prev_exp until when `prev` may still be exchanged (epoch ms)\n\nimport type { Database } from \"bun:sqlite\";\nimport { randomSuffix } from \"../ids.ts\";\n\nconst K_TOKEN = \"auth_token\";\nconst K_EXP = \"auth_token_exp\";\nconst K_PREV = \"auth_token_prev\";\nconst K_PREV_EXP = \"auth_token_prev_exp\";\n\nexport interface TokenState {\n token: string;\n /** Epoch ms; once `now > exp`, the next request rotates. */\n exp: number;\n /** The immediately-previous token, exchangeable until `prevExp`. */\n prev: string | null;\n /** Epoch ms; how long `prev` stays exchangeable. */\n prevExp: number;\n}\n\n/** Parse a duration like \"30d\" / \"24h\" / \"90m\" / \"3600\" (bare number = seconds). */\nexport function parseDuration(s: string | undefined, fallbackMs: number): number {\n if (!s) return fallbackMs;\n const m = /^(\\d+)\\s*(ms|s|m|h|d)?$/.exec(s.trim());\n if (!m) return fallbackMs;\n const n = Number(m[1]);\n switch (m[2]) {\n case \"ms\":\n return n;\n case \"m\":\n return n * 60_000;\n case \"h\":\n return n * 3_600_000;\n case \"d\":\n return n * 86_400_000;\n default:\n return n * 1000; // \"s\" or bare = seconds\n }\n}\n\nconst DAY = 86_400_000;\n/** Default token lifetime (override with METAHUB_TOKEN_TTL). */\nexport const DEFAULT_TTL_MS = parseDuration(process.env.METAHUB_TOKEN_TTL, 30 * DAY);\n/** Default grace window an old token stays swappable (override with METAHUB_TOKEN_GRACE). */\nexport const DEFAULT_GRACE_MS = parseDuration(process.env.METAHUB_TOKEN_GRACE, 7 * DAY);\n\nfunction getMeta(db: Database, key: string): string | null {\n const row = db.query(\"SELECT value FROM meta WHERE key = ?\").get(key) as\n | { value: string }\n | null;\n return row ? row.value : null;\n}\n\nfunction setMeta(db: Database, key: string, value: string): void {\n db.query(\n \"INSERT INTO meta (key, value) VALUES (?, ?) ON CONFLICT(key) DO UPDATE SET value = excluded.value\",\n ).run(key, value);\n}\n\n/** Current persisted state, or null if no token has been minted yet. */\nexport function readState(db: Database): TokenState | null {\n const token = getMeta(db, K_TOKEN);\n if (!token) return null;\n const prev = getMeta(db, K_PREV);\n return {\n token,\n exp: Number(getMeta(db, K_EXP) ?? 0),\n prev: prev && prev.length > 0 ? prev : null,\n prevExp: Number(getMeta(db, K_PREV_EXP) ?? 0),\n };\n}\n\n/** Rotate: current → prev (swappable for `graceMs`), mint a fresh current. */\nexport function rotate(db: Database, ttlMs: number, graceMs: number): TokenState {\n const now = Date.now();\n const old = getMeta(db, K_TOKEN);\n const next: TokenState = {\n token: randomSuffix(24),\n exp: now + ttlMs,\n prev: old,\n prevExp: old ? now + graceMs : 0,\n };\n setMeta(db, K_TOKEN, next.token);\n setMeta(db, K_EXP, String(next.exp));\n setMeta(db, K_PREV, next.prev ?? \"\");\n setMeta(db, K_PREV_EXP, String(next.prevExp));\n return next;\n}\n\n/** Persisted state, minting or rotating when missing/expired. */\nexport function loadOrRotate(db: Database, ttlMs: number, graceMs: number): TokenState {\n const s = readState(db);\n if (!s || Date.now() > s.exp) return rotate(db, ttlMs, graceMs);\n return s;\n}\n",
102
- "// Server-level configuration, persisted in the `meta` table (same pattern as\n// getNodeId / context.ts). These are local-machine settings — they never enter\n// the CRDT oplog and never sync to peers. `mh --server` reads them as defaults\n// (CLI flags still win); `mh config` and the WebUI settings page edit them.\n\nimport type { DbDriver } from \"./driver.ts\";\nimport { parseDuration } from \"./sync/token.ts\";\n\nconst K_HOST = \"cfg_host\";\nconst K_PORT = \"cfg_port\";\nconst K_SYNC_INTERVAL = \"cfg_sync_interval\";\nconst K_AUTO_SYNC = \"cfg_auto_sync\";\nconst K_BLOB_QUOTA = \"cfg_blob_quota\";\n\nexport interface ServerConfig {\n host: string;\n port: number;\n /** Auto-sync poll interval in ms; <= 0 disables the timer. */\n syncIntervalMs: number;\n autoSync: boolean;\n /** Local blob cache quota in bytes. When the cache exceeds it, the sync tick\n * auto-evicts clearable, unpinned blobs (LRU). <= 0 disables eviction. */\n blobCacheQuotaBytes: number;\n}\n\nexport const DEFAULT_CONFIG: ServerConfig = {\n host: \"127.0.0.1\",\n port: 7777,\n syncIntervalMs: parseDuration(process.env.METAHUB_SYNC_INTERVAL, 30_000),\n autoSync: true,\n blobCacheQuotaBytes: Number(process.env.METAHUB_BLOB_QUOTA) || 2 * 1024 * 1024 * 1024,\n};\n\nfunction getMeta(db: DbDriver, key: string): string | null {\n const row = db.query(\"SELECT value FROM meta WHERE key = ?\").get(key) as\n | { value: string }\n | null;\n return row ? row.value : null;\n}\n\nfunction setMeta(db: DbDriver, key: string, value: string): void {\n db.query(\n \"INSERT INTO meta (key, value) VALUES (?, ?) ON CONFLICT(key) DO UPDATE SET value = excluded.value\",\n ).run(key, value);\n}\n\n/** Persisted server config, falling back to DEFAULT_CONFIG per field. */\nexport function getServerConfig(db: DbDriver): ServerConfig {\n const host = getMeta(db, K_HOST);\n const port = getMeta(db, K_PORT);\n const interval = getMeta(db, K_SYNC_INTERVAL);\n const auto = getMeta(db, K_AUTO_SYNC);\n const blobQuota = getMeta(db, K_BLOB_QUOTA);\n return {\n host: host ?? DEFAULT_CONFIG.host,\n port: port != null ? Number(port) : DEFAULT_CONFIG.port,\n syncIntervalMs: interval != null ? Number(interval) : DEFAULT_CONFIG.syncIntervalMs,\n autoSync: auto != null ? auto === \"1\" : DEFAULT_CONFIG.autoSync,\n blobCacheQuotaBytes:\n blobQuota != null ? Number(blobQuota) : DEFAULT_CONFIG.blobCacheQuotaBytes,\n };\n}\n\n/** Persist a partial config update. Only provided fields are written. */\nexport function setServerConfig(db: DbDriver, partial: Partial<ServerConfig>): ServerConfig {\n if (partial.host != null) setMeta(db, K_HOST, partial.host);\n if (partial.port != null) setMeta(db, K_PORT, String(partial.port));\n if (partial.syncIntervalMs != null)\n setMeta(db, K_SYNC_INTERVAL, String(partial.syncIntervalMs));\n if (partial.autoSync != null) setMeta(db, K_AUTO_SYNC, partial.autoSync ? \"1\" : \"0\");\n if (partial.blobCacheQuotaBytes != null)\n setMeta(db, K_BLOB_QUOTA, String(partial.blobCacheQuotaBytes));\n return getServerConfig(db);\n}\n",
108
+ "// Server-level configuration, persisted in the `meta` table (same pattern as\n// getNodeId / context.ts). These are local-machine settings — they never enter\n// the CRDT oplog and never sync to peers. `mh --server` reads them as defaults\n// (CLI flags still win); `mh config` and the WebUI settings page edit them.\n\nimport type { DbDriver } from \"./driver.ts\";\nimport { parseDuration } from \"./sync/token.ts\";\n\n/** Authoritative upper bound for a single POST /api/blob upload (bytes). The\n * WebUI applies friendlier per-kind caps (image 25MB / av 100MB / file 100MB)\n * client-side; this is the hard server ceiling. Override with METAHUB_MAX_BLOB_UPLOAD. */\nexport const MAX_BLOB_UPLOAD_BYTES = Number(process.env.METAHUB_MAX_BLOB_UPLOAD) || 100 * 1024 * 1024;\n\nconst K_HOST = \"cfg_host\";\nconst K_PORT = \"cfg_port\";\nconst K_SYNC_INTERVAL = \"cfg_sync_interval\";\nconst K_AUTO_SYNC = \"cfg_auto_sync\";\nconst K_BLOB_QUOTA = \"cfg_blob_quota\";\n\nexport interface ServerConfig {\n host: string;\n port: number;\n /** Auto-sync poll interval in ms; <= 0 disables the timer. */\n syncIntervalMs: number;\n autoSync: boolean;\n /** Local blob cache quota in bytes. When the cache exceeds it, the sync tick\n * auto-evicts clearable, unpinned blobs (LRU). <= 0 disables eviction. */\n blobCacheQuotaBytes: number;\n}\n\nexport const DEFAULT_CONFIG: ServerConfig = {\n host: \"127.0.0.1\",\n port: 7777,\n syncIntervalMs: parseDuration(process.env.METAHUB_SYNC_INTERVAL, 30_000),\n autoSync: true,\n blobCacheQuotaBytes: Number(process.env.METAHUB_BLOB_QUOTA) || 2 * 1024 * 1024 * 1024,\n};\n\nfunction getMeta(db: DbDriver, key: string): string | null {\n const row = db.query(\"SELECT value FROM meta WHERE key = ?\").get(key) as\n | { value: string }\n | null;\n return row ? row.value : null;\n}\n\nfunction setMeta(db: DbDriver, key: string, value: string): void {\n db.query(\n \"INSERT INTO meta (key, value) VALUES (?, ?) ON CONFLICT(key) DO UPDATE SET value = excluded.value\",\n ).run(key, value);\n}\n\n/** Persisted server config, falling back to DEFAULT_CONFIG per field. */\nexport function getServerConfig(db: DbDriver): ServerConfig {\n const host = getMeta(db, K_HOST);\n const port = getMeta(db, K_PORT);\n const interval = getMeta(db, K_SYNC_INTERVAL);\n const auto = getMeta(db, K_AUTO_SYNC);\n const blobQuota = getMeta(db, K_BLOB_QUOTA);\n return {\n host: host ?? DEFAULT_CONFIG.host,\n port: port != null ? Number(port) : DEFAULT_CONFIG.port,\n syncIntervalMs: interval != null ? Number(interval) : DEFAULT_CONFIG.syncIntervalMs,\n autoSync: auto != null ? auto === \"1\" : DEFAULT_CONFIG.autoSync,\n blobCacheQuotaBytes:\n blobQuota != null ? Number(blobQuota) : DEFAULT_CONFIG.blobCacheQuotaBytes,\n };\n}\n\n/** Persist a partial config update. Only provided fields are written. */\nexport function setServerConfig(db: DbDriver, partial: Partial<ServerConfig>): ServerConfig {\n if (partial.host != null) setMeta(db, K_HOST, partial.host);\n if (partial.port != null) setMeta(db, K_PORT, String(partial.port));\n if (partial.syncIntervalMs != null)\n setMeta(db, K_SYNC_INTERVAL, String(partial.syncIntervalMs));\n if (partial.autoSync != null) setMeta(db, K_AUTO_SYNC, partial.autoSync ? \"1\" : \"0\");\n if (partial.blobCacheQuotaBytes != null)\n setMeta(db, K_BLOB_QUOTA, String(partial.blobCacheQuotaBytes));\n return getServerConfig(db);\n}\n",
109
+ "// Node-only half of the blob ledger: the pieces that touch the on-disk cache\n// (delete bytes, reconcile legacy files) or the network (resolve missing bytes —\n// added with the transport layer). Re-exports blobs-core.ts so server-side\n// callers import everything from here.\n\nimport { join } from \"node:path\";\nimport { readdirSync, statSync } from \"node:fs\";\nimport type { DbDriver } from \"./driver.ts\";\nimport { cacheDir } from \"./paths.ts\";\nimport { deleteBlob, getBlob, putBlobAt, verifyBlobBytes } from \"./cache.ts\";\nimport { listPeers } from \"./sync/peers.ts\";\nimport { type S3Config, getBucketBlob, putBucketBlob, listBucketBlobHashes } from \"./sync/storage.ts\";\nimport { getServerConfig } from \"./config.ts\";\nimport { getNodeId } from \"./node.ts\";\nimport {\n cachedBlobs,\n isClearable,\n forgetBlob,\n recordBlob,\n touchBlob,\n referencedHashes,\n pendingBlobs,\n setPending,\n isFullBlobNode,\n readPolicy,\n setAnchored,\n writeBlobVerifiedAt,\n} from \"./blobs-core.ts\";\n\nexport * from \"./blobs-core.ts\";\n\nexport interface KnownBucket {\n url: string;\n label: string | null;\n bucket: string | null;\n}\n\n/** Attached object-storage buckets (s3 peers), for the \"pick a full-blob anchor\"\n * selector in Settings. A bucket is a durable full-blob library but is NOT a node\n * (1:N store-and-forward, no single node id), so it lives alongside knownNodes()\n * rather than inside it — designated by its synthetic url, not a node_id. */\nexport function knownBuckets(db: DbDriver): KnownBucket[] {\n return listPeers(db)\n .filter((p) => p.kind === \"s3\" && p.config)\n .map((p) => {\n let bucket: string | null = null;\n try {\n bucket = (JSON.parse(p.config!) as S3Config).bucket ?? null;\n } catch {\n // malformed config — show url only\n }\n return { url: p.url, label: p.label, bucket };\n });\n}\n\n// ---- byte transport: on-demand resolution + full-node maintenance -----------\n\n/** Cache bytes fetched for a reference (by the ref's own hash — which may be a\n * legacy 64-hex that putBlob's truncation would not reproduce). */\nasync function storeFetched(db: DbDriver, hash: string, bytes: Uint8Array): Promise<void> {\n await putBlobAt(hash, bytes);\n recordBlob(db, hash, bytes.byteLength, null, 0); // acquired cache → already durable at its source\n}\n\n/**\n * Resolve a blob's bytes by content hash: local cache → each enabled HTTP peer's\n * `GET /blob/<hash>?local=1` (local=1 keeps the peer from re-resolving, so there\n * are no fetch loops) → each attached bucket's `blobs/<hash>`. Content-addressed,\n * so every source is verified by re-hashing and any source is interchangeable.\n * The first verified hit is cached locally and returned; null when unreachable.\n */\nexport async function resolveBlob(db: DbDriver, hash: string): Promise<Uint8Array | null> {\n const local = await getBlob(hash);\n if (local) {\n touchBlob(db, hash);\n return local;\n }\n for (const peer of listPeers(db)) {\n if (!peer.enabled) continue;\n try {\n if (peer.kind === \"s3\") {\n if (!peer.config) continue;\n const bytes = await getBucketBlob(JSON.parse(peer.config) as S3Config, hash);\n if (bytes && verifyBlobBytes(bytes, hash)) {\n await storeFetched(db, hash, bytes);\n return bytes;\n }\n } else {\n const res = await fetch(new URL(`/blob/${hash}?local=1`, peer.url), {\n headers: peer.token ? { authorization: `Bearer ${peer.token}` } : {},\n });\n if (!res.ok) continue;\n const bytes = new Uint8Array(await res.arrayBuffer());\n if (verifyBlobBytes(bytes, hash)) {\n await storeFetched(db, hash, bytes);\n return bytes;\n }\n }\n } catch {\n // unreachable / error — try the next source\n }\n }\n return null;\n}\n\n// ---- on-demand presence verify (drives isClearable's `anchored`) -------------\n\nexport interface VerifyResult {\n /** Blobs confirmed durable on the anchor set (per redundancy) → clearable. */\n anchoredCount: number;\n anchoredBytes: number;\n /** Designated anchors (bucket urls / device node ids) we could not reach to\n * check. Under `all`, any unreachable anchor makes everything un-clearable. */\n unreachable: string[];\n /** Epoch-ms this verify ran. */\n at: number;\n}\n\n/** Ask a designated full-blob DEVICE anchor which of `hashes` it holds. */\nasync function queryPeerHas(\n url: string,\n token: string | null,\n hashes: string[],\n): Promise<Set<string>> {\n const res = await fetch(new URL(\"/api/blobs/has\", url), {\n method: \"POST\",\n headers: {\n \"content-type\": \"application/json\",\n ...(token ? { authorization: `Bearer ${token}` } : {}),\n },\n body: JSON.stringify({ hashes }),\n });\n if (!res.ok) throw new Error(`/api/blobs/has → ${res.status}`);\n const data = (await res.json()) as { has?: string[] };\n return new Set(data.has ?? []);\n}\n\n/**\n * Verify, right now, which locally-cached blobs a designated anchor durably holds,\n * and record the per-blob `anchored` flag that `isClearable` reads. Buckets are\n * checked with one paginated LIST (listBucketBlobHashes); device anchors with a\n * `POST /api/blobs/has`. An anchor we can't reach (offline / no stored url+token /\n * bad creds) goes into `unreachable` and is treated as NOT holding anything —\n * conservative, so a transient outage defers clearing rather than risking loss.\n *\n * Redundancy: `any` → present on ≥1 reachable anchor; `all` → every designated\n * anchor reachable AND holding it. Run on demand only (panel open / refresh /\n * pre-eviction when over quota), never in the steady-state maintenance loop.\n */\nexport async function verifyAnchorPresence(db: DbDriver): Promise<VerifyResult> {\n const policy = readPolicy(db);\n const self = getNodeId(db);\n const anchors = policy.fullNodes.filter((a) => a !== self);\n const blobs = cachedBlobs(db);\n const at = Date.now();\n\n if (anchors.length === 0) {\n for (const b of blobs) setAnchored(db, b.hash, false);\n writeBlobVerifiedAt(db, at);\n return { anchoredCount: 0, anchoredBytes: 0, unreachable: [], at };\n }\n\n const peers = listPeers(db);\n const localHashes = blobs.map((b) => b.hash);\n const anchorSets: Set<string>[] = [];\n const unreachable: string[] = [];\n\n for (const a of anchors) {\n let set: Set<string> | null = null;\n try {\n if (a.startsWith(\"s3://\")) {\n const peer = peers.find((p) => p.url === a && p.kind === \"s3\" && p.config);\n if (peer) set = await listBucketBlobHashes(JSON.parse(peer.config!) as S3Config);\n } else {\n const peer = peers.find((p) => p.node_id === a && p.kind !== \"s3\" && p.url);\n if (peer) set = await queryPeerHas(peer.url, peer.token, localHashes);\n }\n } catch {\n set = null; // unreachable / error\n }\n if (set) anchorSets.push(set);\n else unreachable.push(a);\n }\n\n const allReachable = unreachable.length === 0;\n let anchoredCount = 0;\n let anchoredBytes = 0;\n for (const b of blobs) {\n const presentIn = anchorSets.reduce((n, s) => n + (s.has(b.hash) ? 1 : 0), 0);\n const ok =\n policy.redundancy === \"all\"\n ? allReachable && presentIn === anchors.length // every designated anchor holds it\n : presentIn >= 1; // any reachable anchor holds it\n setAnchored(db, b.hash, ok);\n if (ok) {\n anchoredCount++;\n anchoredBytes += b.size;\n }\n }\n writeBlobVerifiedAt(db, at);\n return { anchoredCount, anchoredBytes, unreachable, at };\n}\n\nexport interface BlobMaintenanceResult {\n /** Referenced blobs a full library pulled in this round. */\n acquired: number;\n /** Pending productions confirmed flushed to the bucket(s) this round. */\n flushed: number;\n /** Blobs auto-evicted to stay under the configured cache quota. */\n evicted: number;\n}\n\n/**\n * Background blob upkeep, run from the sync tick (throttled). Cheap in steady\n * state — it only touches work that actually exists:\n * 1. A full blob library pulls every referenced blob it is still MISSING\n * (resolveBlob); self-limiting, a no-op once caught up.\n * 2. This node flushes its own PENDING productions to each attached bucket, then\n * marks them flushed (→ clearable). It iterates ONLY pending blobs (empty in\n * steady state), so — unlike the old design — it does NOT re-read/encrypt/HEAD\n * every already-uploaded blob each round.\n * 3. Evicts to stay under the cache quota.\n */\nexport async function blobMaintenance(db: DbDriver): Promise<BlobMaintenanceResult> {\n let acquired = 0;\n let flushed = 0;\n const s3peers = listPeers(db).filter((p) => p.enabled && p.kind === \"s3\" && p.config);\n\n // 1) Full library: pull referenced blobs it's missing (O(missing); storeFetched\n // records them pending=0 — they're durable at their source).\n if (isFullBlobNode(db)) {\n for (const hash of referencedHashes(db)) {\n if (await getBlob(hash)) continue;\n if (await resolveBlob(db, hash)) acquired++;\n }\n }\n\n // 2) Flush this node's pending productions to every attached bucket, then clear\n // pending. Only iterates the (steady-state-empty) pending worklist.\n if (s3peers.length > 0) {\n for (const { hash } of pendingBlobs(db)) {\n const bytes = await getBlob(hash);\n if (!bytes) continue; // bytes gone (shouldn't happen — pending is protected)\n let ok = true;\n for (const p of s3peers) {\n try {\n await putBucketBlob(JSON.parse(p.config!) as S3Config, hash, bytes); // true | already-there\n } catch {\n ok = false; // bucket unreachable / credentials — retry next round\n }\n }\n if (ok) {\n setPending(db, hash, false);\n flushed++;\n }\n }\n }\n\n // Keep the local cache under the configured quota (no-op when disabled / under).\n const { evicted } = await evictToQuota(db, getServerConfig(db).blobCacheQuotaBytes);\n return { acquired, flushed, evicted };\n}\n\nexport interface EvictResult {\n evicted: number;\n freedBytes: number;\n}\n\n/** Fraction of the quota to drain down to when eviction triggers, so a node that\n * crosses the quota doesn't re-evict one blob per tick at the boundary. */\nconst EVICT_LOW_WATER = 0.8;\n\n/**\n * Auto-evict clearable, unpinned blobs by least-recently-accessed order until the\n * local cache total is at/under the low-water mark. No-op when quotaBytes <= 0\n * (disabled) or the cache is already under quota. Only touches blobs `isClearable`\n * marks safe (durable on the full set) and never a pinned blob — bytes stay\n * re-fetchable, so this is loss-free.\n */\nexport async function evictToQuota(db: DbDriver, quotaBytes: number): Promise<EvictResult> {\n let evicted = 0;\n let freedBytes = 0;\n if (quotaBytes <= 0) return { evicted, freedBytes };\n reconcileCache(db);\n let blobs = cachedBlobs(db);\n let total = blobs.reduce((s, b) => s + b.size, 0);\n if (total <= quotaBytes) return { evicted, freedBytes };\n // Over quota: verify presence on the anchors NOW so eviction only drops blobs a\n // designated anchor verifiably still holds. When an anchor is offline the verify\n // marks the affected blobs anchored=0 → they fall out of the candidate set →\n // nothing is evicted and the cache stays over quota until the next tick can\n // confirm (loss-free degradation: eviction defers, it never loses data).\n await verifyAnchorPresence(db);\n blobs = cachedBlobs(db);\n const lowWater = Math.floor(quotaBytes * EVICT_LOW_WATER);\n // Oldest first; a null last_access (never touched since record) sorts as oldest.\n const candidates = blobs\n .filter((b) => !b.pinned && isClearable(db, b.hash))\n .sort((a, b) => (a.last_access ?? 0) - (b.last_access ?? 0));\n for (const b of candidates) {\n if (total <= lowWater) break;\n freedBytes += await deleteBlob(b.hash);\n forgetBlob(db, b.hash);\n total -= b.size;\n evicted++;\n }\n return { evicted, freedBytes };\n}\n\nexport interface ClearResult {\n /** Blobs whose bytes were dropped. */\n cleared: number;\n /** Actual bytes freed on disk. */\n freedBytes: number;\n /** Blobs left in place (sole copy / no anchor / this is a full node). */\n skipped: number;\n}\n\nexport interface GcResult {\n removed: number;\n freedBytes: number;\n}\n\n/**\n * Fold on-disk cache files into the blob_cache ledger so stats/clear/gc also see\n * blobs written before the ledger existed. content_type is unknown for these\n * (left null — serve falls back to the URL suffix).\n */\nexport function reconcileCache(db: DbDriver): void {\n let names: string[];\n try {\n names = readdirSync(cacheDir());\n } catch {\n return; // no cache dir yet\n }\n const known = new Set(cachedBlobs(db).map((b) => b.hash));\n for (const name of names) {\n if (known.has(name)) continue;\n try {\n const st = statSync(join(cacheDir(), name));\n if (st.isFile()) recordBlob(db, name, st.size, null);\n } catch {\n // file vanished mid-scan — ignore\n }\n }\n}\n\n/** Drop the bytes of every locally-cached blob that is safe to clear (durable on\n * the designated full set). Reference + hash stay in the oplog, re-fetchable. */\nexport async function clearCache(db: DbDriver): Promise<ClearResult> {\n reconcileCache(db);\n let cleared = 0;\n let freedBytes = 0;\n let skipped = 0;\n for (const b of cachedBlobs(db)) {\n // Pinned blobs are kept regardless of clearability (user opt-out of eviction).\n if (b.pinned || !isClearable(db, b.hash)) {\n skipped++;\n continue;\n }\n freedBytes += await deleteBlob(b.hash);\n forgetBlob(db, b.hash);\n cleared++;\n }\n return { cleared, freedBytes, skipped };\n}\n\n/** Drop bytes for blobs no live site_files / doc image still references (true\n * garbage, distinct from clearable cache). */\nexport async function gcOrphans(db: DbDriver): Promise<GcResult> {\n reconcileCache(db);\n const referenced = referencedHashes(db);\n let removed = 0;\n let freedBytes = 0;\n for (const b of cachedBlobs(db)) {\n if (referenced.has(b.hash)) continue;\n freedBytes += await deleteBlob(b.hash);\n forgetBlob(db, b.hash);\n removed++;\n }\n return { removed, freedBytes };\n}\n\n/** Clear a CHOSEN subset of cached blobs — the per-blob counterpart of\n * clearCache, for the Settings blob manager. Same safety floor: only a blob that\n * is unpinned AND isClearable (durable on the designated full set) has its bytes\n * dropped; everything else is left in place and counted as skipped. */\nexport async function clearBlobs(db: DbDriver, hashes: string[]): Promise<ClearResult> {\n reconcileCache(db);\n const known = new Map(cachedBlobs(db).map((b) => [b.hash, b]));\n let cleared = 0;\n let freedBytes = 0;\n let skipped = 0;\n for (const hash of new Set(hashes)) {\n const b = known.get(hash);\n if (!b || b.pinned || !isClearable(db, hash)) {\n skipped++;\n continue;\n }\n freedBytes += await deleteBlob(hash);\n forgetBlob(db, hash);\n cleared++;\n }\n return { cleared, freedBytes, skipped };\n}\n\n/** Delete a CHOSEN subset of ORPHAN blobs — the per-blob counterpart of gcOrphans.\n * A hash is removed only when no live site_files / doc image still references it;\n * any still-referenced (or unknown) hash is skipped, so a blob a document points\n * at can never be deleted out from under it. */\nexport async function deleteOrphanBlobs(db: DbDriver, hashes: string[]): Promise<GcResult> {\n reconcileCache(db);\n const known = new Set(cachedBlobs(db).map((b) => b.hash));\n const referenced = referencedHashes(db);\n let removed = 0;\n let freedBytes = 0;\n for (const hash of new Set(hashes)) {\n if (!known.has(hash) || referenced.has(hash)) continue;\n freedBytes += await deleteBlob(hash);\n forgetBlob(db, hash);\n removed++;\n }\n return { removed, freedBytes };\n}\n",
110
+ "import type { DbDriver } from \"./driver.ts\";\nimport { putBlob } from \"./cache.ts\";\nimport { MhError } from \"./errors.ts\";\nimport {\n type SiteFileRow,\n INLINE_LIMIT,\n inferContentType,\n normalizeSitePath,\n isTextType,\n isImageType,\n toBytes,\n writeFileRow,\n putFileInline,\n getFileRow,\n} from \"./sites-core.ts\";\nimport { recordBlob } from \"./blobs-core.ts\";\nimport { resolveBlob } from \"./blobs.ts\";\n\n// A \"site\" is a named bucket of files (Supabase-Storage-style) served at\n// /sites/<name>/. Everything is written through emit() so sites replicate over\n// /sync like records and documents. File bytes are stored inline as utf8 (text)\n// or base64 (small binaries) so they ride the oplog; large binaries offload to\n// the content-addressed cache (encoding=\"blob\"), whose bytes are node-local.\n//\n// Types, normalization, read paths, AND the inline (utf8/base64) mutations live\n// in sites-core.ts (portable — the browser replica authors + serves sites\n// offline from the same code). This module adds only the two node-only pieces:\n// large-binary blob storage on write and blob byte decoding on serve.\n\nexport * from \"./sites-core.ts\";\n\n/** Upload or replace one file. utf8 text and small binaries ride the oplog via\n * putFileInline (portable); binaries over the inline limit offload to the\n * node-local blob store (server-only — their bytes don't replicate). */\nexport async function putFile(\n db: DbDriver,\n siteId: string,\n path: string,\n opts: { data: string | Uint8Array | ArrayBuffer; contentType?: string },\n): Promise<SiteFileRow> {\n const cleanPath = normalizeSitePath(path);\n if (!cleanPath) throw new MhError(\"invalid_input\", `invalid file path: ${JSON.stringify(path)}`);\n const contentType = opts.contentType ?? inferContentType(cleanPath);\n if (!isTextType(contentType)) {\n const bytes = toBytes(opts.data);\n // Images always offload to a blob (never base64-inline); other binaries only\n // once they exceed the inline limit.\n if (isImageType(contentType) || bytes.byteLength > INLINE_LIMIT) {\n const info = await putBlob(bytes);\n recordBlob(db, info.hash, info.size, contentType); // produced here → pending=1\n return writeFileRow(db, siteId, cleanPath, contentType, \"blob\", info.hash);\n }\n }\n return putFileInline(db, siteId, cleanPath, opts);\n}\n\n/** Upper bound on remote blob resolution from the site-serve path. A miss fans\n * out to every peer + bucket; without a cap a slow/unreachable source would hang\n * the (token-gated) /sites/<name>/<asset> request. On timeout we 404 — the local\n * cache hit is still instant (resolveBlob is local-first), so this only bounds\n * the self-heal-from-remote tail. */\nconst SITE_BLOB_RESOLVE_TIMEOUT_MS = 5_000;\n\n/** Resolve a file to served bytes + content type. \"\" / trailing \"/\" → index.html. */\nexport async function getFileForServe(\n db: DbDriver,\n siteId: string,\n path: string,\n): Promise<{ contentType: string; bytes: Uint8Array } | null> {\n const row = getFileRow(db, siteId, path);\n if (!row) return null;\n\n const content = row.content ?? \"\";\n let bytes: Uint8Array | null;\n if (row.encoding === \"utf8\") bytes = new TextEncoder().encode(content);\n else if (row.encoding === \"base64\") bytes = new Uint8Array(Buffer.from(content, \"base64\"));\n else {\n // blob hash — resolve on demand (local cache → HTTP peer → bucket) so a\n // published asset whose local bytes were cache-evicted still serves from a\n // bucket/peer instead of 404ing, consistent with /blob. resolveBlob touches\n // the LRU on a local hit and caches any remote fetch. Bounded so a slow source\n // can't hang the serve path (404 on timeout; an in-flight fetch still finishes\n // and populates the cache for the next request).\n bytes = await Promise.race([\n resolveBlob(db, content),\n new Promise<null>((r) => setTimeout(() => r(null), SITE_BLOB_RESOLVE_TIMEOUT_MS)),\n ]);\n }\n if (!bytes) return null;\n\n return { contentType: row.content_type, bytes };\n}\n",
111
+ "/**\n * @license MIT <https://opensource.org/licenses/MIT>\n * @copyright Michael Hart 2024\n */\nconst encoder = new TextEncoder();\nconst HOST_SERVICES = {\n appstream2: 'appstream',\n cloudhsmv2: 'cloudhsm',\n email: 'ses',\n marketplace: 'aws-marketplace',\n mobile: 'AWSMobileHubService',\n pinpoint: 'mobiletargeting',\n queue: 'sqs',\n 'git-codecommit': 'codecommit',\n 'mturk-requester-sandbox': 'mturk-requester',\n 'personalize-runtime': 'personalize',\n};\nconst UNSIGNABLE_HEADERS = new Set([\n 'authorization',\n 'content-type',\n 'content-length',\n 'user-agent',\n 'presigned-expires',\n 'expect',\n 'x-amzn-trace-id',\n 'range',\n 'connection',\n]);\nclass AwsClient {\n constructor({ accessKeyId, secretAccessKey, sessionToken, service, region, cache, retries, initRetryMs }) {\n if (accessKeyId == null) throw new TypeError('accessKeyId is a required option')\n if (secretAccessKey == null) throw new TypeError('secretAccessKey is a required option')\n this.accessKeyId = accessKeyId;\n this.secretAccessKey = secretAccessKey;\n this.sessionToken = sessionToken;\n this.service = service;\n this.region = region;\n this.cache = cache || new Map();\n this.retries = retries != null ? retries : 10;\n this.initRetryMs = initRetryMs || 50;\n }\n async sign(input, init) {\n if (input instanceof Request) {\n const { method, url, headers, body } = input;\n init = Object.assign({ method, url, headers }, init);\n if (init.body == null && headers.has('Content-Type')) {\n init.body = body != null && headers.has('X-Amz-Content-Sha256') ? body : await input.clone().arrayBuffer();\n }\n input = url;\n }\n const signer = new AwsV4Signer(Object.assign({ url: input.toString() }, init, this, init && init.aws));\n const signed = Object.assign({}, init, await signer.sign());\n delete signed.aws;\n try {\n return new Request(signed.url.toString(), signed)\n } catch (e) {\n if (e instanceof TypeError) {\n return new Request(signed.url.toString(), Object.assign({ duplex: 'half' }, signed))\n }\n throw e\n }\n }\n async fetch(input, init) {\n for (let i = 0; i <= this.retries; i++) {\n const fetched = fetch(await this.sign(input, init));\n if (i === this.retries) {\n return fetched\n }\n const res = await fetched;\n if (res.status < 500 && res.status !== 429) {\n return res\n }\n await new Promise(resolve => setTimeout(resolve, Math.random() * this.initRetryMs * Math.pow(2, i)));\n }\n throw new Error('An unknown error occurred, ensure retries is not negative')\n }\n}\nclass AwsV4Signer {\n constructor({ method, url, headers, body, accessKeyId, secretAccessKey, sessionToken, service, region, cache, datetime, signQuery, appendSessionToken, allHeaders, singleEncode }) {\n if (url == null) throw new TypeError('url is a required option')\n if (accessKeyId == null) throw new TypeError('accessKeyId is a required option')\n if (secretAccessKey == null) throw new TypeError('secretAccessKey is a required option')\n this.method = method || (body ? 'POST' : 'GET');\n this.url = new URL(url);\n this.headers = new Headers(headers || {});\n this.body = body;\n this.accessKeyId = accessKeyId;\n this.secretAccessKey = secretAccessKey;\n this.sessionToken = sessionToken;\n let guessedService, guessedRegion;\n if (!service || !region) {\n[guessedService, guessedRegion] = guessServiceRegion(this.url, this.headers);\n }\n this.service = service || guessedService || '';\n this.region = region || guessedRegion || 'us-east-1';\n this.cache = cache || new Map();\n this.datetime = datetime || new Date().toISOString().replace(/[:-]|\\.\\d{3}/g, '');\n this.signQuery = signQuery;\n this.appendSessionToken = appendSessionToken || this.service === 'iotdevicegateway';\n this.headers.delete('Host');\n if (this.service === 's3' && !this.signQuery && !this.headers.has('X-Amz-Content-Sha256')) {\n this.headers.set('X-Amz-Content-Sha256', 'UNSIGNED-PAYLOAD');\n }\n const params = this.signQuery ? this.url.searchParams : this.headers;\n params.set('X-Amz-Date', this.datetime);\n if (this.sessionToken && !this.appendSessionToken) {\n params.set('X-Amz-Security-Token', this.sessionToken);\n }\n this.signableHeaders = ['host', ...this.headers.keys()]\n .filter(header => allHeaders || !UNSIGNABLE_HEADERS.has(header))\n .sort();\n this.signedHeaders = this.signableHeaders.join(';');\n this.canonicalHeaders = this.signableHeaders\n .map(header => header + ':' + (header === 'host' ? this.url.host : (this.headers.get(header) || '').replace(/\\s+/g, ' ')))\n .join('\\n');\n this.credentialString = [this.datetime.slice(0, 8), this.region, this.service, 'aws4_request'].join('/');\n if (this.signQuery) {\n if (this.service === 's3' && !params.has('X-Amz-Expires')) {\n params.set('X-Amz-Expires', '86400');\n }\n params.set('X-Amz-Algorithm', 'AWS4-HMAC-SHA256');\n params.set('X-Amz-Credential', this.accessKeyId + '/' + this.credentialString);\n params.set('X-Amz-SignedHeaders', this.signedHeaders);\n }\n if (this.service === 's3') {\n try {\n this.encodedPath = decodeURIComponent(this.url.pathname.replace(/\\+/g, ' '));\n } catch (e) {\n this.encodedPath = this.url.pathname;\n }\n } else {\n this.encodedPath = this.url.pathname.replace(/\\/+/g, '/');\n }\n if (!singleEncode) {\n this.encodedPath = encodeURIComponent(this.encodedPath).replace(/%2F/g, '/');\n }\n this.encodedPath = encodeRfc3986(this.encodedPath);\n const seenKeys = new Set();\n this.encodedSearch = [...this.url.searchParams]\n .filter(([k]) => {\n if (!k) return false\n if (this.service === 's3') {\n if (seenKeys.has(k)) return false\n seenKeys.add(k);\n }\n return true\n })\n .map(pair => pair.map(p => encodeRfc3986(encodeURIComponent(p))))\n .sort(([k1, v1], [k2, v2]) => k1 < k2 ? -1 : k1 > k2 ? 1 : v1 < v2 ? -1 : v1 > v2 ? 1 : 0)\n .map(pair => pair.join('='))\n .join('&');\n }\n async sign() {\n if (this.signQuery) {\n this.url.searchParams.set('X-Amz-Signature', await this.signature());\n if (this.sessionToken && this.appendSessionToken) {\n this.url.searchParams.set('X-Amz-Security-Token', this.sessionToken);\n }\n } else {\n this.headers.set('Authorization', await this.authHeader());\n }\n return {\n method: this.method,\n url: this.url,\n headers: this.headers,\n body: this.body,\n }\n }\n async authHeader() {\n return [\n 'AWS4-HMAC-SHA256 Credential=' + this.accessKeyId + '/' + this.credentialString,\n 'SignedHeaders=' + this.signedHeaders,\n 'Signature=' + (await this.signature()),\n ].join(', ')\n }\n async signature() {\n const date = this.datetime.slice(0, 8);\n const cacheKey = [this.secretAccessKey, date, this.region, this.service].join();\n let kCredentials = this.cache.get(cacheKey);\n if (!kCredentials) {\n const kDate = await hmac('AWS4' + this.secretAccessKey, date);\n const kRegion = await hmac(kDate, this.region);\n const kService = await hmac(kRegion, this.service);\n kCredentials = await hmac(kService, 'aws4_request');\n this.cache.set(cacheKey, kCredentials);\n }\n return buf2hex(await hmac(kCredentials, await this.stringToSign()))\n }\n async stringToSign() {\n return [\n 'AWS4-HMAC-SHA256',\n this.datetime,\n this.credentialString,\n buf2hex(await hash(await this.canonicalString())),\n ].join('\\n')\n }\n async canonicalString() {\n return [\n this.method.toUpperCase(),\n this.encodedPath,\n this.encodedSearch,\n this.canonicalHeaders + '\\n',\n this.signedHeaders,\n await this.hexBodyHash(),\n ].join('\\n')\n }\n async hexBodyHash() {\n let hashHeader = this.headers.get('X-Amz-Content-Sha256') || (this.service === 's3' && this.signQuery ? 'UNSIGNED-PAYLOAD' : null);\n if (hashHeader == null) {\n if (this.body && typeof this.body !== 'string' && !('byteLength' in this.body)) {\n throw new Error('body must be a string, ArrayBuffer or ArrayBufferView, unless you include the X-Amz-Content-Sha256 header')\n }\n hashHeader = buf2hex(await hash(this.body || ''));\n }\n return hashHeader\n }\n}\nasync function hmac(key, string) {\n const cryptoKey = await crypto.subtle.importKey(\n 'raw',\n typeof key === 'string' ? encoder.encode(key) : key,\n { name: 'HMAC', hash: { name: 'SHA-256' } },\n false,\n ['sign'],\n );\n return crypto.subtle.sign('HMAC', cryptoKey, encoder.encode(string))\n}\nasync function hash(content) {\n return crypto.subtle.digest('SHA-256', typeof content === 'string' ? encoder.encode(content) : content)\n}\nconst HEX_CHARS = ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f'];\nfunction buf2hex(arrayBuffer) {\n const buffer = new Uint8Array(arrayBuffer);\n let out = '';\n for (let idx = 0; idx < buffer.length; idx++) {\n const n = buffer[idx];\n out += HEX_CHARS[(n >>> 4) & 0xF];\n out += HEX_CHARS[n & 0xF];\n }\n return out\n}\nfunction encodeRfc3986(urlEncodedStr) {\n return urlEncodedStr.replace(/[!'()*]/g, c => '%' + c.charCodeAt(0).toString(16).toUpperCase())\n}\nfunction guessServiceRegion(url, headers) {\n const { hostname, pathname } = url;\n if (hostname.endsWith('.on.aws')) {\n const match = hostname.match(/^[^.]{1,63}\\.lambda-url\\.([^.]{1,63})\\.on\\.aws$/);\n return match != null ? ['lambda', match[1] || ''] : ['', '']\n }\n if (hostname.endsWith('.r2.cloudflarestorage.com')) {\n return ['s3', 'auto']\n }\n if (hostname.endsWith('.backblazeb2.com')) {\n const match = hostname.match(/^(?:[^.]{1,63}\\.)?s3\\.([^.]{1,63})\\.backblazeb2\\.com$/);\n return match != null ? ['s3', match[1] || ''] : ['', '']\n }\n const match = hostname.replace('dualstack.', '').match(/([^.]{1,63})\\.(?:([^.]{0,63})\\.)?amazonaws\\.com(?:\\.cn)?$/);\n let service = (match && match[1]) || '';\n let region = match && match[2];\n if (region === 'us-gov') {\n region = 'us-gov-west-1';\n } else if (region === 's3' || region === 's3-accelerate') {\n region = 'us-east-1';\n service = 's3';\n } else if (service === 'iot') {\n if (hostname.startsWith('iot.')) {\n service = 'execute-api';\n } else if (hostname.startsWith('data.jobs.iot.')) {\n service = 'iot-jobs-data';\n } else {\n service = pathname === '/mqtt' ? 'iotdevicegateway' : 'iotdata';\n }\n } else if (service === 'autoscaling') {\n const targetPrefix = (headers.get('X-Amz-Target') || '').split('.')[0];\n if (targetPrefix === 'AnyScaleFrontendService') {\n service = 'application-autoscaling';\n } else if (targetPrefix === 'AnyScaleScalingPlannerFrontendService') {\n service = 'autoscaling-plans';\n }\n } else if (region == null && service.startsWith('s3-')) {\n region = service.slice(3).replace(/^fips-|^external-1/, '');\n service = 's3';\n } else if (service.endsWith('-fips')) {\n service = service.slice(0, -5);\n } else if (region && /-\\d$/.test(service) && !/-\\d$/.test(region)) {\n[service, region] = [region, service];\n }\n return [HOST_SERVICES[service] || service, region || '']\n}\n\nexport { AwsClient, AwsV4Signer };\n",
112
+ "// Bun runtime implementation of the storage-sync StorageClient, backed by the\n// built-in Bun.S3Client (zero dependencies). Importing this module registers\n// the factory; CLI and server entry points import it for its side effect so any\n// 's3' peer they sync resolves to a real client. The browser worker registers\n// its own SigV4 client instead (webui/data/storage-s3-browser.ts) and never\n// imports this Bun-only module, keeping `bun` out of the browser bundle.\n\nimport { S3Client } from \"bun\";\nimport { AwsClient } from \"aws4fetch\";\nimport { MhError } from \"../errors.ts\";\nimport {\n setStorageClientFactory,\n isVirtualHostedStyle,\n type StorageClient,\n type StorageObject,\n type StoragePutOpts,\n type S3Config,\n} from \"./storage.ts\";\n\nfunction makeClient(config: S3Config): StorageClient {\n // Virtual-hosted (e.g. Tencent COS, which rejects path-style): the endpoint\n // host already carries the bucket, so Bun ignores the `bucket` option.\n const vhost = isVirtualHostedStyle(config);\n const s3 = new S3Client({\n accessKeyId: config.accessKeyId,\n secretAccessKey: config.secretAccessKey,\n region: config.region || \"auto\", // R2 uses \"auto\"\n endpoint: config.endpoint,\n bucket: config.bucket,\n ...(vhost ? { virtualHostedStyle: true } : {}),\n });\n\n return {\n async list(prefix: string, startAfter?: string, delimiter?: string): Promise<StorageObject[]> {\n const out: StorageObject[] = [];\n let continuationToken: string | undefined;\n do {\n const res = await s3.list({ prefix, startAfter, maxKeys: 1000, continuationToken, delimiter });\n for (const c of res.contents ?? []) out.push({ key: c.key, etag: c.eTag });\n // With delimiter, child \"folders\" come back as common prefixes (their\n // keys end in the delimiter); nodesFromKeys treats them like full keys.\n for (const p of res.commonPrefixes ?? []) out.push({ key: p.prefix });\n continuationToken = res.isTruncated ? res.nextContinuationToken : undefined;\n } while (continuationToken);\n return out;\n },\n\n async get(key: string): Promise<Uint8Array | null> {\n const f = s3.file(key);\n try {\n return new Uint8Array(await f.arrayBuffer());\n } catch (e) {\n // Single GET on the happy path; only an error pays for the existence\n // probe that tells \"absent\" (→ null) apart from a real failure (rethrow).\n if (await f.exists().catch(() => true)) throw e;\n return null;\n }\n },\n\n async put(key: string, body: Uint8Array, opts?: StoragePutOpts): Promise<void> {\n // Bun.S3Client.write has no native If-None-Match. Approximate the conditional\n // create with an existence pre-check: this catches the realistic ordering\n // (one device's create already visible — S3/R2 are read-after-write\n // consistent for new objects) and lets provisionMasterKey adopt the winner.\n // A truly simultaneous Bun-vs-Bun first-init on an empty bucket can still\n // race (no atomic CAS here); the browser client uses real If-None-Match.\n if (opts?.ifNoneMatch && (await s3.file(key).exists())) {\n throw new MhError(\"conflict\", `S3 object already exists: ${key}`);\n }\n await s3.file(key).write(body, opts?.contentType ? { type: opts.contentType } : undefined);\n },\n\n async del(key: string): Promise<void> {\n await s3.file(key).delete();\n },\n };\n}\n\nsetStorageClientFactory(makeClient);\n\n// ── Bucket CORS bootstrap (Bun-only) ────────────────────────────────────────\n// A browser shell can't open its own CORS: the PutBucketCors request would itself\n// be a cross-origin call the bucket hasn't whitelisted yet (chicken-and-egg). So\n// the desktop (which holds the bucket credentials) sets it on the phone's behalf.\n// Bun.S3Client has no PutBucketCors API, so we sign a raw `?cors` request with\n// aws4fetch — same signer the browser client already uses (no hand-rolled SigV4).\n\nconst MANAGED_CORS_RULE_ID = \"metahub-pwa\";\n\nfunction corsEndpoint(config: S3Config): { aws: AwsClient; url: string } {\n const aws = new AwsClient({\n accessKeyId: config.accessKeyId,\n secretAccessKey: config.secretAccessKey,\n region: config.region || \"auto\",\n service: \"s3\",\n });\n const origin = new URL(config.endpoint).origin;\n // Bucket-level subresource: virtual-hosted has the bucket in the host already\n // (COS), path-style puts it in the path (R2/MinIO/S3).\n const base = isVirtualHostedStyle(config) ? origin : `${origin}/${config.bucket}`;\n return { aws, url: `${base}/?cors` };\n}\n\nfunction escapeXml(s: string): string {\n return s\n .replace(/&/g, \"&amp;\")\n .replace(/</g, \"&lt;\")\n .replace(/>/g, \"&gt;\")\n .replace(/\"/g, \"&quot;\");\n}\n\nfunction unescapeXml(s: string): string {\n return s\n .replace(/&lt;/g, \"<\")\n .replace(/&gt;/g, \">\")\n .replace(/&quot;/g, '\"')\n .replace(/&amp;/g, \"&\"); // ampersand last, so it can't re-trigger the others\n}\n\nfunction managedCorsRule(origins: string[]): string {\n const o = origins.map((x) => `<AllowedOrigin>${escapeXml(x)}</AllowedOrigin>`).join(\"\");\n return (\n `<CORSRule><ID>${MANAGED_CORS_RULE_ID}</ID>${o}` +\n `<AllowedMethod>GET</AllowedMethod><AllowedMethod>PUT</AllowedMethod>` +\n `<AllowedMethod>HEAD</AllowedMethod><AllowedMethod>DELETE</AllowedMethod>` +\n `<AllowedHeader>*</AllowedHeader><ExposeHeader>ETag</ExposeHeader>` +\n `<MaxAgeSeconds>3600</MaxAgeSeconds></CORSRule>`\n );\n}\n\n/** SigV4 presigned GET cap: 7 days (604800s) is the protocol maximum. */\nexport const MAX_PRESIGN_SECONDS = 604800;\n\n/**\n * Build a presigned GET URL for one object (used by the object-storage share\n * path — the recipient fetches the ciphertext directly from the bucket, no\n * credential in the link). Addressing mirrors corsEndpoint (virtual-hosted vs\n * path-style). `expiresSec` is clamped to the 7-day SigV4 maximum.\n */\nexport async function presignGet(config: S3Config, key: string, expiresSec: number): Promise<string> {\n const aws = new AwsClient({\n accessKeyId: config.accessKeyId,\n secretAccessKey: config.secretAccessKey,\n region: config.region || \"auto\",\n service: \"s3\",\n });\n const origin = new URL(config.endpoint).origin;\n const base = isVirtualHostedStyle(config) ? origin : `${origin}/${config.bucket}`;\n const u = new URL(`${base}/${key.split(\"/\").map(encodeURIComponent).join(\"/\")}`);\n u.searchParams.set(\"X-Amz-Expires\", String(Math.min(Math.max(1, Math.floor(expiresSec)), MAX_PRESIGN_SECONDS)));\n const signed = await aws.sign(u.toString(), { method: \"GET\", aws: { signQuery: true } });\n return signed.url;\n}\n\n/** Read the bucket's current CORS config (raw XML), or null if none is set. */\nexport async function getBucketCors(config: S3Config): Promise<string | null> {\n const { aws, url } = corsEndpoint(config);\n const res = await aws.fetch(url, { method: \"GET\" });\n if (res.status === 404) return null; // NoSuchCORSConfiguration\n if (!res.ok) {\n const detail = await res.text().catch(() => \"\");\n throw new Error(`S3 get-cors failed: ${res.status} ${detail.slice(0, 200)}`);\n }\n return await res.text();\n}\n\n/**\n * Build the PutBucketCors XML body from the bucket's current config. PutBucketCors\n * replaces the whole config, so we keep every rule that isn't ours and re-emit our\n * managed rule (id=metahub-pwa). `merge` decides our rule's origins:\n * - false (CLI `peer cors`): SET — exactly `origins` (lets the user shrink/reset).\n * - true (auto-open on bucket-attach): UNION with the managed rule's existing\n * origins, so attaching the same bucket from a second shell/origin (a homelab\n * server origin alongside the official PWA shell) adds to the allow-list\n * instead of clobbering it.\n * A wildcard `*` collapses the set. Pure (no I/O) so it's unit-testable.\n */\nexport function buildCorsXml(existing: string | null, origins: string[], merge: boolean): string {\n const kept: string[] = [];\n const prev: string[] = [];\n if (existing) {\n for (const rule of existing.match(/<CORSRule>[\\s\\S]*?<\\/CORSRule>/g) ?? []) {\n if (rule.includes(`<ID>${MANAGED_CORS_RULE_ID}</ID>`)) {\n if (merge)\n for (const m of rule.matchAll(/<AllowedOrigin>([\\s\\S]*?)<\\/AllowedOrigin>/g))\n prev.push(unescapeXml(m[1]!.trim()));\n } else {\n kept.push(rule);\n }\n }\n }\n const merged = [...new Set([...prev, ...origins])];\n const finalOrigins = merged.includes(\"*\") ? [\"*\"] : merged;\n return (\n `<?xml version=\"1.0\" encoding=\"UTF-8\"?>` +\n `<CORSConfiguration>${kept.join(\"\")}${managedCorsRule(finalOrigins)}</CORSConfiguration>`\n );\n}\n\n/**\n * Allow a browser shell served from `origins` to talk to the bucket directly\n * (GET/PUT/HEAD/DELETE) via GET-merge-PUT (see buildCorsXml). `opts.merge` unions\n * with existing managed origins instead of replacing them — used when a second\n * origin attaches the same bucket. Content-MD5 is required by the CORS API\n * (S3 and COS both).\n */\nexport async function putBucketCors(\n config: S3Config,\n origins: string[],\n opts: { merge?: boolean } = {},\n): Promise<void> {\n const clean = origins.map((o) => o.trim()).filter(Boolean);\n if (clean.length === 0) throw new MhError(\"invalid_input\", \"putBucketCors: no origins given\");\n const { aws, url } = corsEndpoint(config);\n\n const existing = await getBucketCors(config).catch(() => null);\n const xml = buildCorsXml(existing, clean, opts.merge ?? false);\n const body = new TextEncoder().encode(xml);\n const contentMd5 = new Bun.CryptoHasher(\"md5\").update(body).digest(\"base64\");\n\n const res = await aws.fetch(url, {\n method: \"PUT\",\n body: new Uint8Array(body).buffer,\n headers: { \"content-type\": \"application/xml\", \"content-md5\": contentMd5 },\n });\n if (!res.ok) {\n const detail = await res.text().catch(() => \"\");\n throw new Error(`S3 put-cors failed: ${res.status} ${detail.slice(0, 200)}`);\n }\n}\n",
103
113
  "import { z } from \"zod\";\nimport { MhError } from \"../errors.ts\";\nimport { errorResponse, type Route, type RouteCtx } from \"./routes.ts\";\nimport {\n listSites,\n listFiles,\n resolveSite,\n createSite,\n updateSite,\n deleteSite,\n putFile,\n deleteFile,\n} from \"../sites.ts\";\n\n// Site endpoints for the WebUI / served pages. Reads (list sites/files) and\n// authoring (create, rename, delete, upload) both wrap the same core functions\n// the `mh site` CLI uses, so changes ride the CRDT oplog and replicate over\n// /sync. All routes are gated by the server's master-token middleware.\n\nconst SiteSchema = z.object({\n id: z.string(),\n name: z.string(),\n title: z.string().nullable(),\n created_hlc: z.string(),\n});\nconst SiteWithCountSchema = SiteSchema.extend({ file_count: z.number() });\nconst SiteFileSchema = z.object({\n id: z.string(),\n site_id: z.string(),\n path: z.string(),\n content_type: z.string(),\n encoding: z.string(),\n});\n// Request bodies — used both for the OpenAPI doc and to .parse() at runtime so a\n// malformed body is a clean 400 rather than an `as`-cast lie. Semantic rules\n// (slug/path shape) live in core (normalizeSiteName/normalizeSitePath).\nconst CreateSiteBody = z.object({ name: z.string(), title: z.string().optional() });\nconst UpdateSiteBody = z.object({ name: z.string().optional(), title: z.string().optional() });\n\nfunction need(req: Request, key: string): string {\n const v = new URL(req.url).searchParams.get(key);\n if (!v) throw new MhError(\"invalid_input\", `missing query param: ${key}`);\n return v;\n}\n\nfunction handle(fn: (req: Request, ctx: RouteCtx) => unknown): Route[\"handler\"] {\n return async (req, ctx) => {\n try {\n return Response.json((await fn(req, ctx)) ?? null);\n } catch (e) {\n return errorResponse(e);\n }\n };\n}\n\nexport const sitesRoutes: Route[] = [\n {\n method: \"GET\",\n path: \"/api/sites\",\n summary: \"List published sites (with file counts)\",\n response: z.array(SiteWithCountSchema),\n handler: handle((_req, { db }) =>\n listSites(db).map((s) => ({ ...s, file_count: listFiles(db, s.id).length })),\n ),\n },\n {\n method: \"GET\",\n path: \"/api/site/files\",\n summary: \"List a site's files (manifest). Query: ?site=<id|name>\",\n response: z.array(SiteFileSchema),\n handler: handle((req, { db }) => listFiles(db, resolveSite(db, need(req, \"site\")).id)),\n },\n {\n method: \"POST\",\n path: \"/api/sites\",\n summary: \"Create a site\",\n request: CreateSiteBody,\n response: SiteSchema,\n handler: handle(async (req, { db }) => {\n const body = CreateSiteBody.parse(await req.json());\n return createSite(db, body);\n }),\n },\n {\n method: \"PATCH\",\n path: \"/api/site\",\n summary: \"Rename a site or change its title. Query: ?id=<id>\",\n request: UpdateSiteBody,\n response: SiteSchema,\n handler: handle(async (req, { db }) => {\n const body = UpdateSiteBody.parse(await req.json());\n return updateSite(db, need(req, \"id\"), body);\n }),\n },\n {\n method: \"DELETE\",\n path: \"/api/site\",\n summary: \"Delete a site and its files. Query: ?id=<id>\",\n response: z.object({ ok: z.boolean() }),\n handler: handle((req, { db }) => ({ ok: deleteSite(db, need(req, \"id\")) })),\n },\n {\n method: \"POST\",\n path: \"/api/site/file\",\n summary: \"Upload/replace a file. Query: ?site=<id|name>&path=<path>; body is raw bytes\",\n response: SiteFileSchema,\n handler: handle(async (req, { db }) => {\n const site = resolveSite(db, need(req, \"site\"));\n // Fall back to path-based inference when the browser sends no/generic type.\n const ct = req.headers.get(\"content-type\");\n const file = await putFile(db, site.id, need(req, \"path\"), {\n data: await req.arrayBuffer(),\n contentType: ct && ct !== \"application/octet-stream\" ? ct : undefined,\n });\n const { content: _content, ...summary } = file;\n return summary;\n }),\n },\n {\n method: \"DELETE\",\n path: \"/api/site/file\",\n summary: \"Delete a file. Query: ?site=<id|name>&path=<path>\",\n response: z.object({ ok: z.boolean() }),\n handler: handle((req, { db }) => ({\n ok: deleteFile(db, resolveSite(db, need(req, \"site\")).id, need(req, \"path\")),\n })),\n },\n];\n",
104
- "// Outbound peer management: the devices this node syncs *to*. Each row carries\n// the durable credential the remote issued to us during pairing (see pairing.ts)\n// plus replication cursors and last-sync status. `syncAllPeers` is what the\n// server's auto-sync timer calls each tick.\n\nimport type { DbDriver } from \"../driver.ts\";\nimport { MhError } from \"../errors.ts\";\nimport { syncWithPeer, type SyncResult } from \"./client.ts\";\nimport {\n syncWithStorage,\n storageClientFor,\n provisionMasterKey,\n type S3Config,\n type StorageSyncOpts,\n} from \"./storage.ts\";\n\nconst PEER_COLS =\n \"url, pull_cursor, push_cursor, token, label, node_id, enabled, last_sync_at, last_success_at, last_status, last_error, kind, config\";\nconst syncInFlight = new WeakMap<object, Map<string, Promise<PeerSyncOutcome>>>();\n\nasync function waitForPeerIdle(db: DbDriver, url: string): Promise<void> {\n const existing = syncInFlight.get(db as object)?.get(url);\n if (existing) await existing.catch(() => undefined);\n}\n\nexport interface PeerRow {\n url: string;\n pull_cursor: number;\n push_cursor: number;\n token: string | null;\n label: string | null;\n node_id: string | null;\n enabled: number;\n /** Last sync attempt, successful or failed. */\n last_sync_at: number | null;\n /** Last successful sync. Freshness gates must use this, not last_sync_at. */\n last_success_at: number | null;\n last_status: string | null;\n last_error: string | null;\n /** Transport: 'http' (POST /sync) or 's3' (bucket store-and-forward). */\n kind: string;\n /** JSON S3Config for 's3' peers; null for 'http'. */\n config: string | null;\n}\n\nexport function listPeers(db: DbDriver): PeerRow[] {\n return db.query(`SELECT ${PEER_COLS} FROM peers ORDER BY url`).all() as PeerRow[];\n}\n\nexport function getPeer(db: DbDriver, url: string): PeerRow | null {\n return (\n (db.query(`SELECT ${PEER_COLS} FROM peers WHERE url = ?`).get(url) as PeerRow | null) ?? null\n );\n}\n\nexport interface AddPeerInput {\n url: string;\n token?: string | null;\n label?: string | null;\n node_id?: string | null;\n}\n\n/** Upsert a peer, preserving replication cursors on conflict. */\nexport function addPeer(db: DbDriver, input: AddPeerInput): void {\n db.query(\n `INSERT INTO peers (url, token, label, node_id, enabled, pull_cursor, push_cursor)\n VALUES (?, ?, ?, ?, 1, 0, 0)\n ON CONFLICT(url) DO UPDATE SET\n token = coalesce(excluded.token, peers.token),\n label = coalesce(excluded.label, peers.label),\n node_id = coalesce(excluded.node_id, peers.node_id),\n enabled = 1`,\n ).run(input.url, input.token ?? null, input.label ?? null, input.node_id ?? null);\n}\n\nexport interface AddStoragePeerInput {\n /** Synthetic peer key, by convention s3://<bucket>/<prefix>. */\n url: string;\n config: S3Config;\n label?: string | null;\n}\n\n/** Upsert an 's3' (bucket store-and-forward) peer, preserving cursors on conflict. */\nexport function addStoragePeer(db: DbDriver, input: AddStoragePeerInput): void {\n db.query(\n `INSERT INTO peers (url, kind, config, label, enabled, pull_cursor, push_cursor)\n VALUES (?, 's3', ?, ?, 1, 0, 0)\n ON CONFLICT(url) DO UPDATE SET\n kind = 's3',\n config = excluded.config,\n label = coalesce(excluded.label, peers.label),\n enabled = 1`,\n ).run(input.url, JSON.stringify(input.config), input.label ?? null);\n}\n\nfunction restorePeerRow(db: DbDriver, row: PeerRow): void {\n db.query(\n `UPDATE peers SET\n pull_cursor = ?,\n push_cursor = ?,\n token = ?,\n label = ?,\n node_id = ?,\n enabled = ?,\n last_sync_at = ?,\n last_success_at = ?,\n last_status = ?,\n last_error = ?,\n kind = ?,\n config = ?\n WHERE url = ?`,\n ).run(\n row.pull_cursor,\n row.push_cursor,\n row.token,\n row.label,\n row.node_id,\n row.enabled,\n row.last_sync_at,\n row.last_success_at,\n row.last_status,\n row.last_error,\n row.kind,\n row.config,\n row.url,\n );\n}\n\n/** Synthetic peer key for a storage peer: one per bucket+prefix. */\nexport const storageUrl = (bucket: string, prefix: string) => `s3://${bucket}/${prefix}`;\n\nexport interface StoragePeerSpec {\n endpoint: string;\n region?: string;\n bucket: string;\n prefix?: string;\n accessKeyId: string;\n secretAccessKey: string;\n /** Virtual-hosted (COS) vs path-style addressing; undefined → auto-detect.\n * Carried by enroll codes so COS buckets join correctly. */\n virtualHostedStyle?: boolean;\n /** Default true; pass false for `--no-encrypt` plaintext buckets. */\n encrypt?: boolean;\n /** Required when encrypt — provisions/adopts the bucket's wrapped master key. */\n passphrase?: string;\n /** Mark this node the bucket's publisher (writes whole-hub snapshots). */\n publish?: boolean;\n priority?: number;\n label?: string | null;\n}\n\n/**\n * Resolve + persist an S3 storage peer and run one sync so a bad endpoint /\n * credentials / missing CORS fail fast at the call site. Shared by the CLI\n * (`mh config peer add --s3`) and the WebUI server endpoint (`POST /api/peer/s3`)\n * so both go through the exact same provisioning + first-sync path. Returns the\n * resolved config (incl. the wrapped master key) and the first sync outcome.\n */\nexport async function addAndSyncStoragePeer(\n db: DbDriver,\n spec: StoragePeerSpec,\n): Promise<{ url: string; config: S3Config; sync: PeerSyncOutcome }> {\n const prefix = spec.prefix?.trim() || \"metahub\";\n const encrypt = spec.encrypt !== false;\n const config: S3Config = {\n endpoint: spec.endpoint.trim(),\n region: spec.region?.trim() || \"auto\",\n bucket: spec.bucket.trim(),\n prefix,\n accessKeyId: spec.accessKeyId.trim(),\n secretAccessKey: spec.secretAccessKey.trim(),\n encrypt,\n virtualHostedStyle: spec.virtualHostedStyle,\n publish: spec.publish,\n priority: spec.priority,\n };\n if (encrypt) {\n if (!spec.passphrase) throw new MhError(\"invalid_input\", \"passphrase required for an encrypted bucket\");\n config.masterKey =\n (await provisionMasterKey(storageClientFor(config), config, spec.passphrase)) ?? undefined;\n }\n const url = storageUrl(config.bucket, prefix);\n await waitForPeerIdle(db, url);\n const previous = getPeer(db, url);\n addStoragePeer(db, { url, config, label: spec.label ?? config.bucket });\n const sync = await syncPeer(db, url);\n if (!sync.ok) {\n if (previous) restorePeerRow(db, previous);\n else removePeer(db, url);\n throw new MhError(\"network\", `storage peer first sync failed: ${sync.error ?? \"unknown error\"}`);\n }\n return { url, config, sync };\n}\n\n/**\n * Remove a peer AND revoke the credential we issued to it during pairing, so\n * disconnecting is mutual: we stop syncing out to it (peers row) and it can no\n * longer sync in to us (peer_grants row, keyed by peer_url). Grants minted for a\n * peer that never sent a self_url have a null peer_url and can't be revoked here.\n */\nexport function removePeer(db: DbDriver, url: string): boolean {\n const tx = db.transaction(() => {\n const changed = db.query(\"DELETE FROM peers WHERE url = ?\").run(url).changes > 0;\n db.query(\"DELETE FROM peer_grants WHERE peer_url = ?\").run(url);\n // Drop any storage-sync per-node cursors for this peer (no-op for http peers).\n db.query(\"DELETE FROM storage_cursors WHERE peer_url = ?\").run(url);\n return changed;\n });\n return tx();\n}\n\nexport function setPeerEnabled(db: DbDriver, url: string, enabled: boolean): boolean {\n return (\n db.query(\"UPDATE peers SET enabled = ? WHERE url = ?\").run(enabled ? 1 : 0, url).changes > 0\n );\n}\n\nexport function setPeerLabel(db: DbDriver, url: string, label: string): boolean {\n return db.query(\"UPDATE peers SET label = ? WHERE url = ?\").run(label, url).changes > 0;\n}\n\nexport function updatePeerStatus(\n db: DbDriver,\n url: string,\n status: string,\n error?: string | null,\n): void {\n const now = Date.now();\n if (status === \"ok\") {\n db.query(\n \"UPDATE peers SET last_sync_at = ?, last_success_at = ?, last_status = ?, last_error = ? WHERE url = ?\",\n ).run(now, now, status, error ?? null, url);\n return;\n }\n db.query(\n \"UPDATE peers SET last_sync_at = ?, last_status = ?, last_error = ? WHERE url = ?\",\n ).run(now, status, error ?? null, url);\n}\n\nexport interface PeerSyncOutcome {\n url: string;\n ok: boolean;\n pushed?: number;\n pulled?: number;\n pendingPush?: boolean;\n error?: string;\n}\n\n/** Sync once with a single peer, recording status. Errors are captured, not\n * thrown. Dispatches on transport: 's3' peers go through the bucket\n * store-and-forward client, everything else POSTs /sync. */\nexport async function syncPeer(\n db: DbDriver,\n url: string,\n opts?: { storage?: StorageSyncOpts },\n): Promise<PeerSyncOutcome> {\n let byUrl = syncInFlight.get(db as object);\n if (!byUrl) {\n byUrl = new Map();\n syncInFlight.set(db as object, byUrl);\n }\n const existing = byUrl.get(url);\n if (existing) return existing;\n const run = syncPeerOnce(db, url, opts).finally(() => {\n if (byUrl.get(url) === run) byUrl.delete(url);\n });\n byUrl.set(url, run);\n return run;\n}\n\nasync function syncPeerOnce(\n db: DbDriver,\n url: string,\n opts?: { storage?: StorageSyncOpts },\n): Promise<PeerSyncOutcome> {\n try {\n const peer = getPeer(db, url);\n let result: SyncResult;\n if (peer?.kind === \"s3\") {\n if (!peer.config) throw new Error(`storage peer ${url} has no config`);\n const config = JSON.parse(peer.config) as S3Config;\n // The persisted per-node role (publish/priority) drives snapshot publishing;\n // the caller's opts (forcePush, batching) layer on top.\n const storageOpts: StorageSyncOpts = {\n ...opts?.storage,\n publish: opts?.storage?.publish ?? config.publish,\n priority: opts?.storage?.priority ?? config.priority,\n };\n result = await syncWithStorage(db, url, storageClientFor(config), config, storageOpts);\n } else {\n result = await syncWithPeer(db, url);\n }\n updatePeerStatus(db, url, \"ok\", null);\n return { url, ok: true, pushed: result.pushed, pulled: result.pulled, pendingPush: result.pendingPush };\n } catch (e) {\n const error = (e as Error).message;\n updatePeerStatus(db, url, \"error\", error);\n return { url, ok: false, error };\n }\n}\n\n/** Sync once with every enabled peer. Used by the auto-sync timer. */\nexport async function syncAllPeers(db: DbDriver): Promise<PeerSyncOutcome[]> {\n const peers = listPeers(db).filter((p) => p.enabled);\n const out: PeerSyncOutcome[] = [];\n for (const p of peers) out.push(await syncPeer(db, p.url));\n return out;\n}\n\n/** Reads within this of the last successful sync skip the network entirely. */\nconst DEFAULT_FRESH_MAX_AGE_MS = 3 * 60_000;\n/** Bound on the blocking pre-read sync so a read never hangs on a slow bucket. */\nconst FRESH_SYNC_TIMEOUT_MS = 8_000;\n\n/**\n * Freshness gate for *non-reactive* consumers — CLI reads and the PWA's served\n * site pages (②b). Their local DB is only as fresh as the last sync, and unlike\n * the reactive WebUI they have no background poll and no `synced` revalidate. So\n * if the newest successful peer sync is older than `maxAgeMs`, block on one\n * bounded sync round before the caller reads; otherwise return immediately\n * (read local).\n *\n * No enabled peers → no-op. A running daemon keeps `last_success_at` recent, so\n * this is a near-instant no-op there and only does real work on a daemon-less node\n * that hasn't synced successfully in a while. Failed attempts update\n * `last_sync_at`, but never make local data fresh. Env overrides: MH_OFFLINE=1\n * skips; MH_FRESH=1 forces; MH_SYNC_MAX_AGE=<ms> tunes the threshold.\n */\nexport async function ensureFresh(\n db: DbDriver,\n opts: { maxAgeMs?: number; force?: boolean; offline?: boolean } = {},\n): Promise<void> {\n if (opts.offline ?? process.env.MH_OFFLINE === \"1\") return;\n const peers = listPeers(db).filter((p) => p.enabled);\n if (peers.length === 0) return;\n if (!(opts.force ?? process.env.MH_FRESH === \"1\")) {\n const maxAge = opts.maxAgeMs ?? (Number(process.env.MH_SYNC_MAX_AGE) || DEFAULT_FRESH_MAX_AGE_MS);\n const last = Math.max(0, ...peers.map((p) => p.last_success_at ?? 0));\n if (last && Date.now() - last < maxAge) return; // fresh enough → read local\n }\n // Stale (or forced): one bounded sync; on timeout/error fall back to local data.\n await Promise.race([\n syncAllPeers(db).then(() => undefined),\n new Promise<undefined>((r) => setTimeout(r, FRESH_SYNC_TIMEOUT_MS)),\n ]).catch(() => undefined);\n}\n",
105
114
  "// Device pairing: bootstrap a mutual trust relationship between two nodes using\n// a short-lived one-time code, then exchange durable per-peer credentials\n// (\"certificates\"). The master server token is never shared.\n//\n// A: generatePairingCode() -> CODE (printed in A's terminal / UI)\n// B: performPairing(A-url, CODE) -> calls POST {A-url}/api/pair\n// A: handlePairRequest(...) -> redeems CODE, mints+returns a grant\n//\n// After the handshake each side holds a grant it ISSUED (stored in peer_grants,\n// accepted on /sync) and a grant it RECEIVED (stored in peers.token, presented\n// when syncing out). See acceptsSyncToken in ./auth.ts and syncWithPeer.\n\nimport type { Database } from \"bun:sqlite\";\nimport { randomSuffix } from \"../ids.ts\";\nimport { parseDuration } from \"./token.ts\";\nimport { addPeer } from \"./peers.ts\";\nimport { PAIR_PATH, type PairRequest, type PairResponse } from \"./protocol.ts\";\nimport { MhError } from \"../errors.ts\";\n\n/** Default one-time pairing-code lifetime (override with METAHUB_PAIR_TTL). */\nexport const DEFAULT_PAIR_TTL_MS = parseDuration(process.env.METAHUB_PAIR_TTL, 10 * 60_000);\n\nexport interface PairingCode {\n code: string;\n exp: number;\n}\n\n/** Mint a one-time pairing code, stored until redeemed or expired. */\nexport function generatePairingCode(db: Database, ttlMs: number = DEFAULT_PAIR_TTL_MS): PairingCode {\n const now = Date.now();\n // Opportunistic housekeeping: drop spent/expired codes so the table can't grow.\n db.query(\"DELETE FROM pairing_codes WHERE used = 1 OR exp < ?\").run(now);\n const code = randomSuffix(12); // ~62 bits; brute-forcing within the TTL is infeasible\n const exp = now + ttlMs;\n db.query(\n \"INSERT INTO pairing_codes (code, exp, used, created_at) VALUES (?, ?, 0, ?)\",\n ).run(code, exp, now);\n return { code, exp };\n}\n\n/**\n * Validate and consume a pairing code. The check-and-consume is a single atomic\n * UPDATE (guarded on used=0 AND not-expired) so two concurrent redemptions of\n * the same code can't both succeed. Returns false if unknown/used/expired.\n */\nexport function redeemPairingCode(db: Database, code: string): boolean {\n return (\n db\n .query(\"UPDATE pairing_codes SET used = 1 WHERE code = ? AND used = 0 AND exp >= ?\")\n .run(code, Date.now()).changes > 0\n );\n}\n\n/** Mint a durable credential we issue to a peer and will accept on /sync. */\nexport function mintGrant(db: Database, peerUrl: string | null, nodeId: string | null): string {\n const token = randomSuffix(32);\n db.query(\n \"INSERT INTO peer_grants (token, peer_url, node_id, created_at) VALUES (?, ?, ?, ?)\",\n ).run(token, peerUrl, nodeId, Date.now());\n return token;\n}\n\n/** Whether a presented token matches a credential we issued during pairing. */\nexport function isAcceptedGrant(db: Database, token: string): boolean {\n return db.query(\"SELECT 1 FROM peer_grants WHERE token = ?\").get(token) != null;\n}\n\nexport interface GrantRow {\n token: string;\n peer_url: string | null;\n node_id: string | null;\n created_at: number | null;\n}\n\n/** All credentials we have issued and still accept on /sync (inbound access). */\nexport function listGrants(db: Database): GrantRow[] {\n return db\n .query(\"SELECT token, peer_url, node_id, created_at FROM peer_grants ORDER BY created_at DESC\")\n .all() as GrantRow[];\n}\n\n/**\n * Revoke issued credentials by exact token or a unique prefix (handy for the\n * grants minted by one-directional pairing, which removePeer can't reach since\n * they have a null peer_url). Returns the number of grants revoked.\n */\nexport function revokeGrant(db: Database, tokenOrPrefix: string): number {\n return db\n .query(\"DELETE FROM peer_grants WHERE token = ? OR token LIKE ? || '%'\")\n .run(tokenOrPrefix, tokenOrPrefix).changes;\n}\n\n/**\n * Inbound side (device A): redeem the caller's one-time code, mint a grant for\n * the caller, register the caller back as a peer if it gave a reachable URL.\n */\nexport function handlePairRequest(db: Database, node: string, body: PairRequest): PairResponse {\n if (!redeemPairingCode(db, body.code)) {\n throw new MhError(\"auth\", \"invalid or expired pairing code\");\n }\n // The caller's grant lets us sync OUT to it; store it as our peer token.\n if (body.self_url) {\n addPeer(db, { url: body.self_url, token: body.grant, node_id: body.node_id });\n }\n // Mint a grant the caller will present when syncing IN to us.\n const grant = mintGrant(db, body.self_url ?? null, body.node_id);\n return { node_id: node, grant };\n}\n\nexport interface PairOutcome {\n /** The paired peer's node id. */\n node_id: string;\n url: string;\n}\n\n/**\n * Outbound side (device B): mint a grant for the remote, post the handshake to\n * its /api/pair, then register it as a peer with the grant it returned.\n */\nexport async function performPairing(\n db: Database,\n node: string,\n remoteUrl: string,\n code: string,\n selfUrl?: string,\n): Promise<PairOutcome> {\n // Our grant lets the remote sync OUT to us; we store it so we accept it.\n const ourGrant = mintGrant(db, remoteUrl, null);\n const reqBody: PairRequest = { code, node_id: node, grant: ourGrant, self_url: selfUrl };\n\n const res = await fetch(new URL(PAIR_PATH, remoteUrl), {\n method: \"POST\",\n headers: { \"content-type\": \"application/json\" },\n body: JSON.stringify(reqBody),\n });\n if (!res.ok)\n throw new MhError(\n res.status === 401 || res.status === 403 ? \"auth\" : \"network\",\n `pairing failed: ${res.status} ${await res.text()}`,\n );\n\n const data = (await res.json()) as PairResponse;\n // The remote's grant lets us sync OUT to it; store it as our peer token.\n addPeer(db, { url: remoteUrl, token: data.grant, node_id: data.node_id });\n return { node_id: data.node_id, url: remoteUrl };\n}\n",
106
115
  "import { z } from \"zod\";\nimport { MhError } from \"../errors.ts\";\nimport { errorResponse, type Route, type RouteCtx } from \"./routes.ts\";\nimport {\n PairRequestSchema,\n PairResponseSchema,\n PAIR_PATH,\n type PairRequest,\n} from \"./protocol.ts\";\nimport {\n generatePairingCode,\n handlePairRequest,\n performPairing,\n listGrants,\n revokeGrant,\n} from \"./pairing.ts\";\nimport {\n listPeers,\n removePeer,\n setPeerEnabled,\n setPeerLabel,\n syncPeer,\n addAndSyncStoragePeer,\n} from \"./peers.ts\";\nimport { putBucketCors } from \"./storage-s3-bun.ts\";\nimport type { S3Config } from \"./storage.ts\";\n\n// Peer pairing + management API. Mirrors the `mh config peer` CLI; the WebUI\n// settings page calls these. POST /api/pair is the cross-device handshake\n// endpoint (exempt from the master-token gate in server.ts — it authenticates\n// via the one-time code inside handlePairRequest). Everything else is gated by\n// the master token like the rest of /api/*.\n\n// --- schemas (drive /docs; intentionally loose) -----------------------------\n\nconst PeerSchema = z.object({\n url: z.string(),\n pull_cursor: z.number(),\n push_cursor: z.number(),\n token: z.string().nullable(),\n label: z.string().nullable(),\n node_id: z.string().nullable(),\n enabled: z.number(),\n last_sync_at: z.number().nullable(),\n last_success_at: z.number().nullable(),\n last_status: z.string().nullable(),\n last_error: z.string().nullable(),\n});\nconst PairingCodeSchema = z.object({ code: z.string(), exp: z.number() });\nconst AddPeerReq = z.object({\n url: z.string(),\n code: z.string(),\n self_url: z.string().optional(),\n});\nconst AddPeerRes = z.object({ node_id: z.string(), url: z.string() });\nconst UpdatePeerReq = z.object({\n enabled: z.boolean().optional(),\n label: z.string().optional(),\n});\nconst PeerSyncRes = z.object({\n url: z.string(),\n ok: z.boolean(),\n pushed: z.number().optional(),\n pulled: z.number().optional(),\n error: z.string().optional(),\n});\nconst AddS3PeerReq = z.object({\n endpoint: z.string(),\n bucket: z.string(),\n accessKeyId: z.string(),\n secretAccessKey: z.string(),\n region: z.string().optional(),\n prefix: z.string().optional(),\n encrypt: z.boolean().optional(),\n passphrase: z.string().optional(),\n /** Browser origin(s) to open bucket CORS for, so a replica behind this server\n * can hit the bucket directly (away-from-server sync). Usually [location.origin]. */\n corsOrigins: z.array(z.string()).optional(),\n});\n/** S3 peer view for the WebUI — no secrets (creds/master key stay server-side). */\nconst S3PeerSchema = z.object({\n url: z.string(),\n label: z.string().nullable(),\n enabled: z.number(),\n status: z.string().nullable(),\n error: z.string().nullable(),\n lastSyncAt: z.number().nullable(),\n lastAttemptAt: z.number().nullable(),\n publish: z.boolean(),\n endpoint: z.string().nullable(),\n bucket: z.string().nullable(),\n // Non-secret config bits so a browser replica can re-activate this server\n // bucket for its OWN away-sync by re-entering only the secret (the secret and\n // the encryption passphrase never leave the server). accessKeyId is the\n // non-secret half (travels in every request header), so it's safe to surface.\n region: z.string().nullable(),\n prefix: z.string().nullable(),\n accessKeyId: z.string().nullable(),\n encrypt: z.boolean(),\n virtualHostedStyle: z.boolean().nullable(),\n});\nconst GrantSchema = z.object({\n token: z.string(),\n peer_url: z.string().nullable(),\n node_id: z.string().nullable(),\n created_at: z.number().nullable(),\n});\nconst RevokeRes = z.object({ revoked: z.number() });\nconst OkSchema = z.object({ ok: z.boolean() });\n\n// --- helpers ----------------------------------------------------------------\n\nfunction need(req: Request, key: string): string {\n const v = new URL(req.url).searchParams.get(key);\n if (!v) throw new MhError(\"invalid_input\", `missing query param: ${key}`);\n return v;\n}\n\n/** Sanitized views of this server's 's3' peers for the WebUI: status + the\n * non-secret config a replica needs to re-attach the same bucket (endpoint,\n * bucket, region, prefix, accessKeyId, encrypt flag, addressing style). The\n * secretAccessKey, the encryption passphrase and the master key never leave the\n * server — the browser re-enters the secret to activate the bucket on itself.\n * endpoint is the full URL (the UI extracts the host for display). */\nfunction s3PeerViews(db: RouteCtx[\"db\"]): z.infer<typeof S3PeerSchema>[] {\n return listPeers(db)\n .filter((p) => p.kind === \"s3\" && p.config)\n .map((p) => {\n const c = JSON.parse(p.config!) as S3Config;\n return {\n url: p.url,\n label: p.label,\n enabled: p.enabled,\n status: p.last_status,\n error: p.last_error,\n lastSyncAt: p.last_success_at,\n lastAttemptAt: p.last_sync_at,\n publish: c.publish === true,\n endpoint: c.endpoint || null,\n bucket: c.bucket ?? null,\n region: c.region ?? null,\n prefix: c.prefix ?? null,\n accessKeyId: c.accessKeyId ?? null,\n encrypt: c.encrypt !== false,\n virtualHostedStyle: c.virtualHostedStyle ?? null,\n };\n });\n}\n\n/** Full stored config (incl. secretAccessKey) for one 's3' peer. Unlike\n * s3PeerViews this does NOT redact — it's served only on the master-token-gated\n * /api/* surface to the local desktop owner so it can build a phone-enroll QR\n * (which carries the bucket creds) for a bucket the sidecar holds. */\nfunction s3PeerConfig(db: RouteCtx[\"db\"], url: string): S3Config {\n const p = listPeers(db).find((x) => x.url === url && x.kind === \"s3\" && x.config);\n if (!p) throw new MhError(\"not_found\", `s3 storage peer ${url} not found`);\n return JSON.parse(p.config!) as S3Config;\n}\n\nfunction handle(\n fn: (req: Request, ctx: RouteCtx) => unknown | Promise<unknown>,\n): Route[\"handler\"] {\n return async (req, ctx) => {\n try {\n const out = await fn(req, ctx);\n if (out instanceof Response) return out;\n return Response.json(out ?? null);\n } catch (e) {\n return errorResponse(e);\n }\n };\n}\n\n// --- routes -----------------------------------------------------------------\n\nexport const peersRoutes: Route[] = [\n {\n method: \"POST\",\n path: PAIR_PATH,\n summary: \"Pairing handshake: redeem a one-time code and exchange credentials\",\n request: PairRequestSchema,\n response: PairResponseSchema,\n handler: handle(async (req, { db, node }) => {\n const body = (await req.json()) as PairRequest;\n return handlePairRequest(db, node, body);\n }),\n },\n {\n method: \"POST\",\n path: \"/api/pair/new\",\n summary: \"Mint a one-time pairing code for another device to redeem\",\n response: PairingCodeSchema,\n handler: handle((_req, { db }) => generatePairingCode(db)),\n },\n {\n method: \"POST\",\n path: \"/api/peers/pair\",\n summary: \"Pair this server with a remote one using its one-time code\",\n request: AddPeerReq,\n response: AddPeerRes,\n handler: handle(async (req, { db, node }) => {\n const body = (await req.json()) as z.infer<typeof AddPeerReq>;\n return performPairing(db, node, body.url, body.code, body.self_url);\n }),\n },\n {\n method: \"GET\",\n path: \"/api/peers\",\n summary: \"List configured sync peers with status\",\n response: z.array(PeerSchema),\n handler: handle((_req, { db }) => listPeers(db)),\n },\n {\n method: \"PATCH\",\n path: \"/api/peer\",\n summary: \"Update a peer (enable/disable or label). Query: ?url=<url>\",\n request: UpdatePeerReq,\n response: OkSchema,\n handler: handle(async (req, { db }) => {\n const url = need(req, \"url\");\n const body = (await req.json()) as z.infer<typeof UpdatePeerReq>;\n if (body.enabled != null) setPeerEnabled(db, url, body.enabled);\n if (body.label != null) setPeerLabel(db, url, body.label);\n return { ok: true };\n }),\n },\n {\n method: \"DELETE\",\n path: \"/api/peer\",\n summary: \"Remove a sync peer. Query: ?url=<url>\",\n response: OkSchema,\n handler: handle((req, { db }) => ({ ok: removePeer(db, need(req, \"url\")) })),\n },\n {\n method: \"POST\",\n path: \"/api/peer/sync\",\n summary: \"Manually sync once with a peer. Query: ?url=<url>\",\n response: PeerSyncRes,\n handler: handle((req, { db }) => syncPeer(db, need(req, \"url\"))),\n },\n {\n // Attach an S3 bucket to THIS server (the data home), making the server the\n // bucket's publisher. The WebUI calls this in origin mode so \"add a cloud\n // backup\" targets the node that actually holds the hub — not the browser\n // replica (which would push nothing). Creds travel over the server's TLS and\n // are stored server-side, same as the CLI path.\n method: \"POST\",\n path: \"/api/peer/s3\",\n summary: \"Attach an S3 storage bucket to this server (server becomes publisher)\",\n request: AddS3PeerReq,\n response: S3PeerSchema,\n handler: handle(async (req, { db }) => {\n const { corsOrigins, ...spec } = (await req.json()) as z.infer<typeof AddS3PeerReq>;\n const { url, config } = await addAndSyncStoragePeer(db, { ...spec, publish: true, priority: 100 });\n // Open the bucket's CORS for the caller's browser origin(s) so a replica\n // behind this server can talk to the bucket directly (away-from-server sync).\n // Only the server can do this (Bun PutBucketCors). Best-effort: if it doesn't\n // take, the browser's own first sync surfaces a CORS error with a fix hint.\n if (corsOrigins?.length) {\n try {\n await putBucketCors(config, corsOrigins, { merge: true });\n } catch {\n /* non-fatal: bucket is attached; retry via `mh config peer cors` */\n }\n }\n const view = s3PeerViews(db).find((v) => v.url === url);\n if (!view) throw new MhError(\"not_found\", `storage peer ${url} missing after add`);\n return view;\n }),\n },\n {\n method: \"GET\",\n path: \"/api/peers/s3\",\n summary: \"List S3 storage buckets attached to this server (no secrets)\",\n response: z.array(S3PeerSchema),\n handler: handle((_req, { db }) => s3PeerViews(db)),\n },\n {\n // Full config (incl. secretAccessKey) for one bucket. Master-token gated like\n // the rest of /api/*; the local desktop owner uses it to build a phone-enroll\n // QR for a bucket the sidecar holds (the desktop renderer has no replica to\n // read the config from, and the redacted /api/peers/s3 view omits the secret).\n method: \"GET\",\n path: \"/api/peer/s3/config\",\n summary: \"Full stored config (incl. secret) for one S3 bucket. Query: ?url=<url>\",\n response: z.record(z.string(), z.unknown()),\n handler: handle((req, { db }) => s3PeerConfig(db, need(req, \"url\"))),\n },\n {\n method: \"GET\",\n path: \"/api/grants\",\n summary: \"List credentials this server issued and accepts on /sync (inbound)\",\n response: z.array(GrantSchema),\n handler: handle((_req, { db }) => listGrants(db)),\n },\n {\n method: \"DELETE\",\n path: \"/api/grant\",\n summary: \"Revoke an issued credential by token or prefix. Query: ?token=<token>\",\n response: RevokeRes,\n handler: handle((req, { db }) => ({ revoked: revokeGrant(db, need(req, \"token\")) })),\n },\n];\n",
107
- "// Node-only half of the blob ledger: the pieces that touch the on-disk cache\n// (delete bytes, reconcile legacy files) or the network (resolve missing bytes —\n// added with the transport layer). Re-exports blobs-core.ts so server-side\n// callers import everything from here.\n\nimport { join } from \"node:path\";\nimport { readdirSync, statSync } from \"node:fs\";\nimport type { DbDriver } from \"./driver.ts\";\nimport { cacheDir } from \"./paths.ts\";\nimport { deleteBlob, getBlob, putBlobAt, verifyBlobBytes } from \"./cache.ts\";\nimport { listPeers } from \"./sync/peers.ts\";\nimport { type S3Config, getBucketBlob, putBucketBlob, listBucketBlobHashes } from \"./sync/storage.ts\";\nimport { getServerConfig } from \"./config.ts\";\nimport { getNodeId } from \"./node.ts\";\nimport {\n cachedBlobs,\n isClearable,\n forgetBlob,\n recordBlob,\n touchBlob,\n referencedHashes,\n pendingBlobs,\n setPending,\n isFullBlobNode,\n readPolicy,\n setAnchored,\n writeBlobVerifiedAt,\n} from \"./blobs-core.ts\";\n\nexport * from \"./blobs-core.ts\";\n\nexport interface KnownBucket {\n url: string;\n label: string | null;\n bucket: string | null;\n}\n\n/** Attached object-storage buckets (s3 peers), for the \"pick a full-blob anchor\"\n * selector in Settings. A bucket is a durable full-blob library but is NOT a node\n * (1:N store-and-forward, no single node id), so it lives alongside knownNodes()\n * rather than inside it — designated by its synthetic url, not a node_id. */\nexport function knownBuckets(db: DbDriver): KnownBucket[] {\n return listPeers(db)\n .filter((p) => p.kind === \"s3\" && p.config)\n .map((p) => {\n let bucket: string | null = null;\n try {\n bucket = (JSON.parse(p.config!) as S3Config).bucket ?? null;\n } catch {\n // malformed config — show url only\n }\n return { url: p.url, label: p.label, bucket };\n });\n}\n\n// ---- byte transport: on-demand resolution + full-node maintenance -----------\n\n/** Cache bytes fetched for a reference (by the ref's own hash — which may be a\n * legacy 64-hex that putBlob's truncation would not reproduce). */\nasync function storeFetched(db: DbDriver, hash: string, bytes: Uint8Array): Promise<void> {\n await putBlobAt(hash, bytes);\n recordBlob(db, hash, bytes.byteLength, null, 0); // acquired cache → already durable at its source\n}\n\n/**\n * Resolve a blob's bytes by content hash: local cache → each enabled HTTP peer's\n * `GET /blob/<hash>?local=1` (local=1 keeps the peer from re-resolving, so there\n * are no fetch loops) → each attached bucket's `blobs/<hash>`. Content-addressed,\n * so every source is verified by re-hashing and any source is interchangeable.\n * The first verified hit is cached locally and returned; null when unreachable.\n */\nexport async function resolveBlob(db: DbDriver, hash: string): Promise<Uint8Array | null> {\n const local = await getBlob(hash);\n if (local) {\n touchBlob(db, hash);\n return local;\n }\n for (const peer of listPeers(db)) {\n if (!peer.enabled) continue;\n try {\n if (peer.kind === \"s3\") {\n if (!peer.config) continue;\n const bytes = await getBucketBlob(JSON.parse(peer.config) as S3Config, hash);\n if (bytes && verifyBlobBytes(bytes, hash)) {\n await storeFetched(db, hash, bytes);\n return bytes;\n }\n } else {\n const res = await fetch(new URL(`/blob/${hash}?local=1`, peer.url), {\n headers: peer.token ? { authorization: `Bearer ${peer.token}` } : {},\n });\n if (!res.ok) continue;\n const bytes = new Uint8Array(await res.arrayBuffer());\n if (verifyBlobBytes(bytes, hash)) {\n await storeFetched(db, hash, bytes);\n return bytes;\n }\n }\n } catch {\n // unreachable / error — try the next source\n }\n }\n return null;\n}\n\n// ---- on-demand presence verify (drives isClearable's `anchored`) -------------\n\nexport interface VerifyResult {\n /** Blobs confirmed durable on the anchor set (per redundancy) → clearable. */\n anchoredCount: number;\n anchoredBytes: number;\n /** Designated anchors (bucket urls / device node ids) we could not reach to\n * check. Under `all`, any unreachable anchor makes everything un-clearable. */\n unreachable: string[];\n /** Epoch-ms this verify ran. */\n at: number;\n}\n\n/** Ask a designated full-blob DEVICE anchor which of `hashes` it holds. */\nasync function queryPeerHas(\n url: string,\n token: string | null,\n hashes: string[],\n): Promise<Set<string>> {\n const res = await fetch(new URL(\"/api/blobs/has\", url), {\n method: \"POST\",\n headers: {\n \"content-type\": \"application/json\",\n ...(token ? { authorization: `Bearer ${token}` } : {}),\n },\n body: JSON.stringify({ hashes }),\n });\n if (!res.ok) throw new Error(`/api/blobs/has → ${res.status}`);\n const data = (await res.json()) as { has?: string[] };\n return new Set(data.has ?? []);\n}\n\n/**\n * Verify, right now, which locally-cached blobs a designated anchor durably holds,\n * and record the per-blob `anchored` flag that `isClearable` reads. Buckets are\n * checked with one paginated LIST (listBucketBlobHashes); device anchors with a\n * `POST /api/blobs/has`. An anchor we can't reach (offline / no stored url+token /\n * bad creds) goes into `unreachable` and is treated as NOT holding anything —\n * conservative, so a transient outage defers clearing rather than risking loss.\n *\n * Redundancy: `any` → present on ≥1 reachable anchor; `all` → every designated\n * anchor reachable AND holding it. Run on demand only (panel open / refresh /\n * pre-eviction when over quota), never in the steady-state maintenance loop.\n */\nexport async function verifyAnchorPresence(db: DbDriver): Promise<VerifyResult> {\n const policy = readPolicy(db);\n const self = getNodeId(db);\n const anchors = policy.fullNodes.filter((a) => a !== self);\n const blobs = cachedBlobs(db);\n const at = Date.now();\n\n if (anchors.length === 0) {\n for (const b of blobs) setAnchored(db, b.hash, false);\n writeBlobVerifiedAt(db, at);\n return { anchoredCount: 0, anchoredBytes: 0, unreachable: [], at };\n }\n\n const peers = listPeers(db);\n const localHashes = blobs.map((b) => b.hash);\n const anchorSets: Set<string>[] = [];\n const unreachable: string[] = [];\n\n for (const a of anchors) {\n let set: Set<string> | null = null;\n try {\n if (a.startsWith(\"s3://\")) {\n const peer = peers.find((p) => p.url === a && p.kind === \"s3\" && p.config);\n if (peer) set = await listBucketBlobHashes(JSON.parse(peer.config!) as S3Config);\n } else {\n const peer = peers.find((p) => p.node_id === a && p.kind !== \"s3\" && p.url);\n if (peer) set = await queryPeerHas(peer.url, peer.token, localHashes);\n }\n } catch {\n set = null; // unreachable / error\n }\n if (set) anchorSets.push(set);\n else unreachable.push(a);\n }\n\n const allReachable = unreachable.length === 0;\n let anchoredCount = 0;\n let anchoredBytes = 0;\n for (const b of blobs) {\n const presentIn = anchorSets.reduce((n, s) => n + (s.has(b.hash) ? 1 : 0), 0);\n const ok =\n policy.redundancy === \"all\"\n ? allReachable && presentIn === anchors.length // every designated anchor holds it\n : presentIn >= 1; // any reachable anchor holds it\n setAnchored(db, b.hash, ok);\n if (ok) {\n anchoredCount++;\n anchoredBytes += b.size;\n }\n }\n writeBlobVerifiedAt(db, at);\n return { anchoredCount, anchoredBytes, unreachable, at };\n}\n\nexport interface BlobMaintenanceResult {\n /** Referenced blobs a full library pulled in this round. */\n acquired: number;\n /** Pending productions confirmed flushed to the bucket(s) this round. */\n flushed: number;\n /** Blobs auto-evicted to stay under the configured cache quota. */\n evicted: number;\n}\n\n/**\n * Background blob upkeep, run from the sync tick (throttled). Cheap in steady\n * state — it only touches work that actually exists:\n * 1. A full blob library pulls every referenced blob it is still MISSING\n * (resolveBlob); self-limiting, a no-op once caught up.\n * 2. This node flushes its own PENDING productions to each attached bucket, then\n * marks them flushed (→ clearable). It iterates ONLY pending blobs (empty in\n * steady state), so — unlike the old design — it does NOT re-read/encrypt/HEAD\n * every already-uploaded blob each round.\n * 3. Evicts to stay under the cache quota.\n */\nexport async function blobMaintenance(db: DbDriver): Promise<BlobMaintenanceResult> {\n let acquired = 0;\n let flushed = 0;\n const s3peers = listPeers(db).filter((p) => p.enabled && p.kind === \"s3\" && p.config);\n\n // 1) Full library: pull referenced blobs it's missing (O(missing); storeFetched\n // records them pending=0 — they're durable at their source).\n if (isFullBlobNode(db)) {\n for (const hash of referencedHashes(db)) {\n if (await getBlob(hash)) continue;\n if (await resolveBlob(db, hash)) acquired++;\n }\n }\n\n // 2) Flush this node's pending productions to every attached bucket, then clear\n // pending. Only iterates the (steady-state-empty) pending worklist.\n if (s3peers.length > 0) {\n for (const { hash } of pendingBlobs(db)) {\n const bytes = await getBlob(hash);\n if (!bytes) continue; // bytes gone (shouldn't happen — pending is protected)\n let ok = true;\n for (const p of s3peers) {\n try {\n await putBucketBlob(JSON.parse(p.config!) as S3Config, hash, bytes); // true | already-there\n } catch {\n ok = false; // bucket unreachable / credentials — retry next round\n }\n }\n if (ok) {\n setPending(db, hash, false);\n flushed++;\n }\n }\n }\n\n // Keep the local cache under the configured quota (no-op when disabled / under).\n const { evicted } = await evictToQuota(db, getServerConfig(db).blobCacheQuotaBytes);\n return { acquired, flushed, evicted };\n}\n\nexport interface EvictResult {\n evicted: number;\n freedBytes: number;\n}\n\n/** Fraction of the quota to drain down to when eviction triggers, so a node that\n * crosses the quota doesn't re-evict one blob per tick at the boundary. */\nconst EVICT_LOW_WATER = 0.8;\n\n/**\n * Auto-evict clearable, unpinned blobs by least-recently-accessed order until the\n * local cache total is at/under the low-water mark. No-op when quotaBytes <= 0\n * (disabled) or the cache is already under quota. Only touches blobs `isClearable`\n * marks safe (durable on the full set) and never a pinned blob — bytes stay\n * re-fetchable, so this is loss-free.\n */\nexport async function evictToQuota(db: DbDriver, quotaBytes: number): Promise<EvictResult> {\n let evicted = 0;\n let freedBytes = 0;\n if (quotaBytes <= 0) return { evicted, freedBytes };\n reconcileCache(db);\n let blobs = cachedBlobs(db);\n let total = blobs.reduce((s, b) => s + b.size, 0);\n if (total <= quotaBytes) return { evicted, freedBytes };\n // Over quota: verify presence on the anchors NOW so eviction only drops blobs a\n // designated anchor verifiably still holds. When an anchor is offline the verify\n // marks the affected blobs anchored=0 → they fall out of the candidate set →\n // nothing is evicted and the cache stays over quota until the next tick can\n // confirm (loss-free degradation: eviction defers, it never loses data).\n await verifyAnchorPresence(db);\n blobs = cachedBlobs(db);\n const lowWater = Math.floor(quotaBytes * EVICT_LOW_WATER);\n // Oldest first; a null last_access (never touched since record) sorts as oldest.\n const candidates = blobs\n .filter((b) => !b.pinned && isClearable(db, b.hash))\n .sort((a, b) => (a.last_access ?? 0) - (b.last_access ?? 0));\n for (const b of candidates) {\n if (total <= lowWater) break;\n freedBytes += await deleteBlob(b.hash);\n forgetBlob(db, b.hash);\n total -= b.size;\n evicted++;\n }\n return { evicted, freedBytes };\n}\n\nexport interface ClearResult {\n /** Blobs whose bytes were dropped. */\n cleared: number;\n /** Actual bytes freed on disk. */\n freedBytes: number;\n /** Blobs left in place (sole copy / no anchor / this is a full node). */\n skipped: number;\n}\n\nexport interface GcResult {\n removed: number;\n freedBytes: number;\n}\n\n/**\n * Fold on-disk cache files into the blob_cache ledger so stats/clear/gc also see\n * blobs written before the ledger existed. content_type is unknown for these\n * (left null — serve falls back to the URL suffix).\n */\nexport function reconcileCache(db: DbDriver): void {\n let names: string[];\n try {\n names = readdirSync(cacheDir());\n } catch {\n return; // no cache dir yet\n }\n const known = new Set(cachedBlobs(db).map((b) => b.hash));\n for (const name of names) {\n if (known.has(name)) continue;\n try {\n const st = statSync(join(cacheDir(), name));\n if (st.isFile()) recordBlob(db, name, st.size, null);\n } catch {\n // file vanished mid-scan — ignore\n }\n }\n}\n\n/** Drop the bytes of every locally-cached blob that is safe to clear (durable on\n * the designated full set). Reference + hash stay in the oplog, re-fetchable. */\nexport async function clearCache(db: DbDriver): Promise<ClearResult> {\n reconcileCache(db);\n let cleared = 0;\n let freedBytes = 0;\n let skipped = 0;\n for (const b of cachedBlobs(db)) {\n // Pinned blobs are kept regardless of clearability (user opt-out of eviction).\n if (b.pinned || !isClearable(db, b.hash)) {\n skipped++;\n continue;\n }\n freedBytes += await deleteBlob(b.hash);\n forgetBlob(db, b.hash);\n cleared++;\n }\n return { cleared, freedBytes, skipped };\n}\n\n/** Drop bytes for blobs no live site_files / doc image still references (true\n * garbage, distinct from clearable cache). */\nexport async function gcOrphans(db: DbDriver): Promise<GcResult> {\n reconcileCache(db);\n const referenced = referencedHashes(db);\n let removed = 0;\n let freedBytes = 0;\n for (const b of cachedBlobs(db)) {\n if (referenced.has(b.hash)) continue;\n freedBytes += await deleteBlob(b.hash);\n forgetBlob(db, b.hash);\n removed++;\n }\n return { removed, freedBytes };\n}\n",
108
- "import { z } from \"zod\";\nimport { errorResponse, type Route, type RouteCtx } from \"./routes.ts\";\nimport { MhError } from \"../errors.ts\";\nimport { putBlob, getBlob } from \"../cache.ts\";\nimport { recordBlob, touchBlob, resolveBlob, blobContentType, cachedBlobs, reconcileCache } from \"../blobs.ts\";\nimport { inferContentType } from \"../sites-core.ts\";\n\n// Content-addressed blob byte transport (document images / large files). The\n// oplog carries only the hash; bytes move on demand over this endpoint and the\n// bucket (see blobs.ts resolveBlob). Reference lives wherever the caller put it\n// (doc markdown `/blob/<hash>` or a site_files row) — this layer is hash-only.\n\nfunction ext(ct: string): string {\n const t = ct.toLowerCase().split(\";\")[0]!.trim();\n const map: Record<string, string> = {\n \"image/png\": \"png\",\n \"image/jpeg\": \"jpg\",\n \"image/gif\": \"gif\",\n \"image/webp\": \"webp\",\n \"image/avif\": \"avif\",\n \"image/svg+xml\": \"svg\",\n \"application/pdf\": \"pdf\",\n };\n return map[t] ?? \"\";\n}\n\n/**\n * Serve `GET /blob/<hash>[.ext]`. Default: resolve on demand (local cache → peers\n * → bucket) so a browser <img> or a far node gets the bytes even if this node\n * hadn't cached them. `?local=1` (used by peer-to-peer resolution) serves only\n * what we already hold, so cross-node fetches can't loop. Content-addressed →\n * immutable cache. Returns null when the path isn't a blob URL (so the caller\n * falls through to the next matcher).\n */\nexport async function serveBlob(req: Request, ctx: RouteCtx): Promise<Response | null> {\n const url = new URL(req.url);\n const rest = decodeURIComponent(url.pathname.slice(\"/blob/\".length));\n if (!rest) return null;\n const dot = rest.indexOf(\".\");\n const hash = (dot >= 0 ? rest.slice(0, dot) : rest).toLowerCase();\n if (!/^[0-9a-f]{16,64}$/.test(hash)) return null;\n\n const localOnly = url.searchParams.get(\"local\") === \"1\";\n const bytes = localOnly ? await getBlob(hash) : await resolveBlob(ctx.db, hash);\n if (!bytes) return new Response(\"not found\", { status: 404 });\n if (localOnly) touchBlob(ctx.db, hash);\n\n const ct = dot >= 0 ? inferContentType(rest) : blobContentType(ctx.db, hash) ?? \"application/octet-stream\";\n // Copy into a fresh ArrayBuffer-backed view (same shape as sites-serve.ts) so\n // the body type is a plain BodyInit.\n const body = new Uint8Array(bytes.byteLength);\n body.set(bytes);\n return new Response(body.buffer, {\n headers: { \"content-type\": ct, \"cache-control\": \"public, max-age=31536000, immutable\" },\n });\n}\n\nconst BlobUploadSchema = z.object({\n hash: z.string(),\n size: z.number(),\n content_type: z.string(),\n url: z.string().describe(\"Stable served path, e.g. /blob/<hash>.png\"),\n});\n\nconst BlobHasReq = z.object({\n hashes: z.array(z.string()).describe(\"Candidate blob hashes to check for presence.\"),\n});\nconst BlobHasRes = z.object({\n has: z.array(z.string()).describe(\"Subset of the requested hashes this node holds.\"),\n});\n\nexport const blobRoutes: Route[] = [\n {\n method: \"POST\",\n path: \"/api/blobs/has\",\n summary:\n \"Given candidate blob hashes, return the subset this node durably holds. A peer's \" +\n \"clear-presence verify calls this on a designated full-blob device anchor to confirm \" +\n \"the anchor still holds a blob before the peer drops its own cached copy. \" +\n \"Authorized like /blob/ byte transport (master token or per-peer grant).\",\n request: BlobHasReq,\n response: BlobHasRes,\n handler: async (req, { db }) => {\n try {\n const body = (await req.json()) as { hashes?: unknown };\n const want = Array.isArray(body.hashes) ? body.hashes.filter((h) => typeof h === \"string\") : [];\n reconcileCache(db); // disk is the truth — drop rows whose bytes are gone\n const held = new Set(cachedBlobs(db).map((b) => b.hash));\n return Response.json({ has: want.filter((h) => held.has(h as string)) });\n } catch (err) {\n return errorResponse(err);\n }\n },\n },\n {\n method: \"POST\",\n path: \"/api/blob\",\n summary:\n \"Upload a content-addressed blob (document image / large file); raw bytes in the body, \" +\n \"content-type header sets the type. Returns its hash + stable /blob/<hash>.<ext> URL. \" +\n \"Unlike /api/site/file it creates NO reference row — the caller (e.g. doc markdown) holds the reference.\",\n response: BlobUploadSchema,\n handler: async (req, { db }) => {\n try {\n const ct = req.headers.get(\"content-type\") || \"application/octet-stream\";\n const bytes = new Uint8Array(await req.arrayBuffer());\n if (!bytes.byteLength) throw new MhError(\"invalid_input\", \"empty blob body\");\n const info = await putBlob(bytes);\n recordBlob(db, info.hash, info.size, ct); // produced here → pending=1\n const e = ext(ct);\n return Response.json({\n hash: info.hash,\n size: info.size,\n content_type: ct,\n url: `/blob/${info.hash}${e ? \".\" + e : \"\"}`,\n });\n } catch (err) {\n return errorResponse(err);\n }\n },\n },\n];\n",
116
+ "import { z } from \"zod\";\nimport { errorResponse, type Route, type RouteCtx } from \"./routes.ts\";\nimport { MhError } from \"../errors.ts\";\nimport { putBlob, getBlob, blobExists } from \"../cache.ts\";\nimport { recordBlob, touchBlob, resolveBlob, blobContentType } from \"../blobs.ts\";\nimport { inferContentType } from \"../sites-core.ts\";\nimport { MAX_BLOB_UPLOAD_BYTES } from \"../config.ts\";\n\n// Content-addressed blob byte transport (document images / large files). The\n// oplog carries only the hash; bytes move on demand over this endpoint and the\n// bucket (see blobs.ts resolveBlob). Reference lives wherever the caller put it\n// (doc markdown `/blob/<hash>` or a site_files row) — this layer is hash-only.\n\n/** A content-addressed blob hash: canonical 32-hex or legacy 64-hex (any length\n * in between for forward-compat). The single source of truth for \"is this a hash\n * shape we serve\" — used by both GET /blob/<hash> and the /api/blobs/has probe so\n * the latter never feeds peer-supplied path fragments to the filesystem. */\nconst HASH_RE = /^[0-9a-f]{16,64}$/;\n/** Cap a presence probe so a peer can't fan out an unbounded existence sweep. */\nconst MAX_HAS_HASHES = 1024;\n\nfunction ext(ct: string): string {\n const t = ct.toLowerCase().split(\";\")[0]!.trim();\n const map: Record<string, string> = {\n \"image/png\": \"png\",\n \"image/jpeg\": \"jpg\",\n \"image/gif\": \"gif\",\n \"image/webp\": \"webp\",\n \"image/avif\": \"avif\",\n \"image/svg+xml\": \"svg\",\n \"application/pdf\": \"pdf\",\n // Media: give the served URL a real extension so the byte route can infer\n // the right content-type and <video>/<audio> play (see sites-core MIME).\n \"video/mp4\": \"mp4\",\n \"video/webm\": \"webm\",\n \"video/ogg\": \"ogv\",\n \"video/quicktime\": \"mov\",\n \"video/x-matroska\": \"mkv\",\n \"audio/mpeg\": \"mp3\",\n \"audio/wav\": \"wav\",\n \"audio/x-wav\": \"wav\",\n \"audio/ogg\": \"ogg\",\n \"audio/mp4\": \"m4a\",\n \"audio/aac\": \"aac\",\n \"audio/flac\": \"flac\",\n \"audio/opus\": \"opus\",\n \"audio/webm\": \"weba\",\n };\n return map[t] ?? \"\";\n}\n\n/**\n * Serve `GET /blob/<hash>[.ext]`. Default: resolve on demand (local cache → peers\n * → bucket) so a browser <img> or a far node gets the bytes even if this node\n * hadn't cached them. `?local=1` (used by peer-to-peer resolution) serves only\n * what we already hold, so cross-node fetches can't loop. Content-addressed →\n * immutable cache. Returns null when the path isn't a blob URL (so the caller\n * falls through to the next matcher).\n */\nexport async function serveBlob(req: Request, ctx: RouteCtx): Promise<Response | null> {\n const url = new URL(req.url);\n const rest = decodeURIComponent(url.pathname.slice(\"/blob/\".length));\n if (!rest) return null;\n const dot = rest.indexOf(\".\");\n const hash = (dot >= 0 ? rest.slice(0, dot) : rest).toLowerCase();\n if (!HASH_RE.test(hash)) return null;\n\n const localOnly = url.searchParams.get(\"local\") === \"1\";\n const bytes = localOnly ? await getBlob(hash) : await resolveBlob(ctx.db, hash);\n if (!bytes) return new Response(\"not found\", { status: 404 });\n if (localOnly) touchBlob(ctx.db, hash);\n\n const ct = dot >= 0 ? inferContentType(rest) : blobContentType(ctx.db, hash) ?? \"application/octet-stream\";\n // Copy into a fresh ArrayBuffer-backed view (same shape as sites-serve.ts) so\n // the body type is a plain BodyInit.\n const body = new Uint8Array(bytes.byteLength);\n body.set(bytes);\n return new Response(body.buffer, {\n headers: { \"content-type\": ct, \"cache-control\": \"public, max-age=31536000, immutable\" },\n });\n}\n\nconst BlobUploadSchema = z.object({\n hash: z.string(),\n size: z.number(),\n content_type: z.string(),\n url: z.string().describe(\"Stable served path, e.g. /blob/<hash>.png\"),\n});\n\nconst BlobHasReq = z.object({\n hashes: z.array(z.string()).describe(\"Candidate blob hashes to check for presence.\"),\n});\nconst BlobHasRes = z.object({\n has: z.array(z.string()).describe(\"Subset of the requested hashes this node holds.\"),\n});\n\nexport const blobRoutes: Route[] = [\n {\n method: \"POST\",\n path: \"/api/blobs/has\",\n summary:\n \"Given candidate blob hashes, return the subset this node durably holds. A peer's \" +\n \"clear-presence verify calls this on a designated full-blob device anchor to confirm \" +\n \"the anchor still holds a blob before the peer drops its own cached copy. \" +\n \"Authorized like /blob/ byte transport (master token or per-peer grant).\",\n request: BlobHasReq,\n response: BlobHasRes,\n handler: async (req, _ctx) => {\n try {\n const body = (await req.json()) as { hashes?: unknown };\n // Validate the shape and cap the count BEFORE touching the filesystem:\n // `want` is peer-supplied and flows into blobExists → blobPath → join,\n // so an unchecked entry like \"../../etc/passwd\" would be a path-traversal\n // existence oracle, and an unbounded list a fan-out of exists() calls.\n const want = (Array.isArray(body.hashes) ? body.hashes : [])\n .filter((h): h is string => typeof h === \"string\" && HASH_RE.test(h))\n .slice(0, MAX_HAS_HASHES);\n // Disk is the truth: check each requested hash's bytes actually exist on\n // disk rather than trusting the ledger (which only grows — a row can\n // outlive its file after a crash, compaction GC, or manual cache wipe).\n // A peer drops its own last copy based on this answer, so a false \"yes\"\n // risks total loss.\n const present = await Promise.all(want.map((h) => blobExists(h)));\n return Response.json({ has: want.filter((_h, i) => present[i]) });\n } catch (err) {\n return errorResponse(err);\n }\n },\n },\n {\n method: \"POST\",\n path: \"/api/blob\",\n summary:\n \"Upload a content-addressed blob (document image / large file); raw bytes in the body, \" +\n \"content-type header sets the type. Returns its hash + stable /blob/<hash>.<ext> URL. \" +\n \"Unlike /api/site/file it creates NO reference row — the caller (e.g. doc markdown) holds the reference.\",\n response: BlobUploadSchema,\n handler: async (req, { db }) => {\n try {\n const ct = req.headers.get(\"content-type\") || \"application/octet-stream\";\n // Reject oversize uploads from the Content-Length header BEFORE buffering\n // the body, so a huge file can't blow up memory via arrayBuffer().\n const declared = Number(req.headers.get(\"content-length\") || 0);\n if (declared > MAX_BLOB_UPLOAD_BYTES)\n throw new MhError(\"invalid_input\", `blob too large (max ${MAX_BLOB_UPLOAD_BYTES} bytes)`);\n const bytes = new Uint8Array(await req.arrayBuffer());\n if (!bytes.byteLength) throw new MhError(\"invalid_input\", \"empty blob body\");\n // Re-check the actual size (a chunked / spoofed Content-Length can lie).\n if (bytes.byteLength > MAX_BLOB_UPLOAD_BYTES)\n throw new MhError(\"invalid_input\", `blob too large (max ${MAX_BLOB_UPLOAD_BYTES} bytes)`);\n const info = await putBlob(bytes);\n recordBlob(db, info.hash, info.size, ct); // produced here → pending=1\n const e = ext(ct);\n return Response.json({\n hash: info.hash,\n size: info.size,\n content_type: ct,\n url: `/blob/${info.hash}${e ? \".\" + e : \"\"}`,\n });\n } catch (err) {\n return errorResponse(err);\n }\n },\n },\n];\n",
109
117
  "import type { ZodType } from \"zod\";\nimport type { Database } from \"bun:sqlite\";\nimport { ingest, changesAfterSeq } from \"../crdt.ts\";\nimport {\n SyncRequestSchema,\n SyncResponseSchema,\n HealthResponseSchema,\n SYNC_PATH,\n HEALTH_PATH,\n type SyncRequest,\n} from \"./protocol.ts\";\nimport { sitesRoutes } from \"./sites-routes.ts\";\nimport { peersRoutes } from \"./peers-routes.ts\";\nimport { blobRoutes } from \"./blob-routes.ts\";\nimport { errorCode, type MhErrorCode } from \"../errors.ts\";\n\n/** Injected at server startup; handlers reuse the open DB connection. */\nexport interface RouteCtx {\n db: Database;\n node: string;\n}\n\n/** HTTP status per error code (see core/errors.ts). Uncategorized errors stay\n * 400, matching the historical catch-all behavior. */\nconst HTTP_STATUS: Record<MhErrorCode, number> = {\n invalid_input: 400,\n not_found: 404,\n ambiguous: 400,\n stale: 409,\n conflict: 409,\n auth: 401,\n network: 502,\n port_in_use: 500,\n};\n\n/** Turn a thrown handler error into a JSON response: `{error, code?}` with a\n * semantic status, so HTTP clients can dispatch on `code` like CLI users\n * dispatch on exit codes. */\nexport function errorResponse(e: unknown): Response {\n const message = e instanceof Error ? e.message : String(e);\n const code = errorCode(e);\n return Response.json(code ? { error: message, code } : { error: message }, {\n status: code ? HTTP_STATUS[code] : 400,\n });\n}\n\n/**\n * One entry per endpoint. `request`/`response` are Zod schemas that double as\n * the OpenAPI source (see ./openapi.ts). Add an endpoint here and it shows up\n * in /docs automatically — no generate step, no separate spec file.\n */\nexport interface Route {\n method: \"GET\" | \"POST\" | \"PATCH\" | \"DELETE\";\n path: string;\n summary: string;\n request?: ZodType;\n response: ZodType;\n handler: (req: Request, ctx: RouteCtx) => Promise<Response> | Response;\n}\n\nconst syncRoutes: Route[] = [\n {\n method: \"POST\",\n path: SYNC_PATH,\n summary: \"CRDT replication: push local changes and pull server changes\",\n request: SyncRequestSchema,\n response: SyncResponseSchema,\n async handler(req, { db, node }) {\n const body = (await req.json()) as SyncRequest;\n ingest(db, body.changes ?? []);\n const batch = changesAfterSeq(db, body.since ?? 0, {\n limit: body.limit,\n excludeDatasets: body.exclude_datasets,\n });\n return Response.json({ node_id: node, changes: batch.changes, cursor: batch.cursor });\n },\n },\n {\n method: \"GET\",\n path: HEALTH_PATH,\n summary: \"Health check\",\n response: HealthResponseSchema,\n handler(_req, { node }) {\n return Response.json({ ok: true, node });\n },\n },\n];\n\n// CRDT sync protocol routes + read-only site endpoints (sites are authored via\n// the `mh site` CLI) + peer pairing/management endpoints. The WebUI's data API\n// is not part of core: it is injected via startServer's `ui` option.\nexport const routes: Route[] = [...syncRoutes, ...sitesRoutes, ...peersRoutes, ...blobRoutes];\n",
110
118
  "import type { RouteCtx } from \"./routes.ts\";\nimport { resolveSite, getFileForServe } from \"../sites.ts\";\n\n// Serves agent-published sites at /sites/<name>/<path...>. Imported lazily from\n// server.ts so it stays off the CLI startup path. Returns null only for paths it\n// does not own (so the caller can fall through to 404). HTML responses get the\n// auth fetch-shim injected by the caller (server.ts withShim) in non-debug mode.\n\nexport async function serveSite(req: Request, ctx: RouteCtx): Promise<Response | null> {\n const url = new URL(req.url);\n const rest = url.pathname.slice(\"/sites/\".length);\n if (rest === \"\") return null; // /sites/ with no site name\n\n const slash = rest.indexOf(\"/\");\n const name = decodeURIComponent(slash === -1 ? rest : rest.slice(0, slash));\n\n // /sites/<name> → canonical /sites/<name>/ so relative asset URLs resolve.\n if (slash === -1) return Response.redirect(`${url.origin}/sites/${name}/`, 301);\n\n const filePath = decodeURIComponent(rest.slice(slash + 1));\n\n let siteId: string;\n try {\n siteId = resolveSite(ctx.db, name).id;\n } catch {\n return new Response(\"site not found\", { status: 404 });\n }\n\n const file = await getFileForServe(ctx.db, siteId, filePath);\n if (!file) return new Response(\"not found\", { status: 404 });\n const body = new Uint8Array(file.bytes.byteLength);\n body.set(file.bytes);\n return new Response(body.buffer, { headers: { \"content-type\": file.contentType } });\n}\n",
119
+ "// Public capability links to a doc / database / site. The `shares` table is\n// node-local (declared in schema.ts, deliberately absent from crdt.ts's DOMAIN)\n// so it never enters the oplog and never syncs — same trust model as peers.\n//\n// A share is served either by this node's token-exempt /share/<slug> endpoint\n// (transport 'server') or as a presigned static export in a bucket (transport\n// 's3'; always read-only — a presigned object can't accept writes). Passwords:\n// the server path stores a PBKDF2 verifier (pw_hash+pw_salt); the s3 path is\n// end-to-end encrypted, so only pw_salt is kept (it travels in the link) and the\n// viewer derives the content key from password+salt — there is no server-side\n// verifier on the s3 path.\n\nimport type { DbDriver } from \"./driver.ts\";\nimport { MhError } from \"./errors.ts\";\nimport { randomSuffix } from \"./ids.ts\";\nimport { toB64, fromB64 } from \"./sync/e2ee.ts\";\n\nexport type ShareKind = \"doc\" | \"database\" | \"site\";\nexport type SharePermission = \"view\" | \"edit\";\nexport type ShareTransport = \"server\" | \"s3\";\n\nconst SHARE_KINDS: ReadonlySet<string> = new Set<ShareKind>([\"doc\", \"database\", \"site\"]);\n\nexport interface ShareRow {\n slug: string;\n kind: ShareKind;\n target_id: string;\n permission: SharePermission;\n transport: ShareTransport;\n /** base64 salt; null = no password. */\n pw_salt: string | null;\n /** base64 PBKDF2 verifier — server path only (s3 password is client-side E2EE). */\n pw_hash: string | null;\n /** epoch ms; null = never. */\n expires_at: number | null;\n /** synthetic node id every edit through this share is attributed to (edit only). */\n guest_node_id: string | null;\n /** Reachable base URL chosen at creation (for the link / source label). */\n served_base: string | null;\n // Vestigial s3_* columns (object-storage shares now live in the bucket, not in\n // this table); kept so the SELECT list matches existing DBs. Always null here.\n s3_peer_url: string | null;\n s3_object_prefix: string | null;\n s3_presign_exp: number | null;\n s3_key_b64: string | null;\n created_at: number;\n}\n\nconst SHARE_COLS =\n \"slug, kind, target_id, permission, transport, pw_salt, pw_hash, expires_at, guest_node_id, served_base, s3_peer_url, s3_object_prefix, s3_presign_exp, s3_key_b64, created_at\";\n\nexport interface CreateShareInput {\n kind: ShareKind;\n target_id: string;\n permission?: SharePermission;\n /** base64 salt + verifier (server path); produce with hashSharePassword. */\n pwSalt?: string | null;\n pwHash?: string | null;\n expiresAt?: number | null;\n /** Reachable base URL recorded for the link / source label. */\n servedBase?: string | null;\n}\n\n/**\n * Mint a server-transport share row. (Object-storage shares are NOT stored here —\n * they live in the bucket; see sync/share-export.ts.) Validates enums + the\n * `edit ⇒ server` rule and allocates an unguessable slug (+ guest node for edit).\n * The caller verifies that `target_id` exists.\n */\nexport function createShare(db: DbDriver, input: CreateShareInput): ShareRow {\n const permission = input.permission ?? \"view\";\n if (!SHARE_KINDS.has(input.kind))\n throw new MhError(\"invalid_input\", `unknown share kind: ${input.kind}`);\n if (permission !== \"view\" && permission !== \"edit\")\n throw new MhError(\"invalid_input\", `unknown share permission: ${permission}`);\n\n let slug = randomSuffix(12);\n while (getShare(db, slug)) slug = randomSuffix(12);\n const guest = permission === \"edit\" ? \"g\" + randomSuffix(8) : null;\n\n db.query(\n `INSERT INTO shares (${SHARE_COLS}) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)`,\n ).run(\n slug,\n input.kind,\n input.target_id,\n permission,\n \"server\",\n input.pwSalt ?? null,\n input.pwHash ?? null,\n input.expiresAt ?? null,\n guest,\n input.servedBase ?? null,\n null,\n null,\n null,\n null,\n Date.now(),\n );\n return getShare(db, slug)!;\n}\n\nexport function getShare(db: DbDriver, slug: string): ShareRow | null {\n return (\n (db.query(`SELECT ${SHARE_COLS} FROM shares WHERE slug = ?`).get(slug) as ShareRow | null) ??\n null\n );\n}\n\nexport function listShares(db: DbDriver): ShareRow[] {\n return db\n .query(`SELECT ${SHARE_COLS} FROM shares ORDER BY created_at DESC`)\n .all() as ShareRow[];\n}\n\n/** Shares pointing at one target — used to surface existing links in the UI. */\nexport function listSharesForTarget(db: DbDriver, targetId: string): ShareRow[] {\n return db\n .query(`SELECT ${SHARE_COLS} FROM shares WHERE target_id = ? ORDER BY created_at DESC`)\n .all(targetId) as ShareRow[];\n}\n\nexport function deleteShare(db: DbDriver, slug: string): boolean {\n return db.query(\"DELETE FROM shares WHERE slug = ?\").run(slug).changes > 0;\n}\n\n/** True once a share is past its expiry (null expiry = never expires). */\nexport function shareExpired(row: ShareRow, now = Date.now()): boolean {\n return row.expires_at != null && now >= row.expires_at;\n}\n\n// ---- password (PBKDF2-SHA256, matching e2ee.ts's KDF parameters) ---------------\n\nconst PW_ITER = 600_000;\nconst PW_SALT_BYTES = 16;\nconst PW_HASH_BITS = 256;\n\n// WebCrypto wants a real ArrayBuffer; mirror e2ee.ts's `ab` to avoid TS widening.\nfunction ab(u: Uint8Array): ArrayBuffer {\n const out = new Uint8Array(u.byteLength);\n out.set(u);\n return out.buffer;\n}\n\nasync function pbkdf2(password: string, salt: Uint8Array): Promise<Uint8Array> {\n const base = await crypto.subtle.importKey(\n \"raw\",\n ab(new TextEncoder().encode(password)),\n \"PBKDF2\",\n false,\n [\"deriveBits\"],\n );\n const bits = await crypto.subtle.deriveBits(\n { name: \"PBKDF2\", salt: ab(salt), iterations: PW_ITER, hash: \"SHA-256\" },\n base,\n PW_HASH_BITS,\n );\n return new Uint8Array(bits);\n}\n\n/** Derive a fresh {salt, hash} verifier for the server-path password. */\nexport async function hashSharePassword(password: string): Promise<{ salt: string; hash: string }> {\n const salt = crypto.getRandomValues(new Uint8Array(PW_SALT_BYTES));\n const hash = await pbkdf2(password, salt);\n return { salt: toB64(salt), hash: toB64(hash) };\n}\n\n/** Constant-time check of `password` against a share's stored verifier. A share\n * with no password always returns true (nothing to verify). */\nexport async function verifySharePassword(row: ShareRow, password: string): Promise<boolean> {\n if (!row.pw_hash || !row.pw_salt) return true;\n const expect = fromB64(row.pw_hash);\n const got = await pbkdf2(password, fromB64(row.pw_salt));\n return timingSafeEqual(expect, got);\n}\n\nfunction timingSafeEqual(a: Uint8Array, b: Uint8Array): boolean {\n if (a.length !== b.length) return false;\n let diff = 0;\n for (let i = 0; i < a.length; i++) diff |= a[i]! ^ b[i]!;\n return diff === 0;\n}\n",
120
+ "// Runtime-agnostic Markdown → HTML rendering for read-only share pages. Pure\n// string ops (no DOM, no node:* — usable both server-side in serveShare and in\n// the static Cloudflare-Pages viewer that decrypts an s3 bundle in the browser).\n//\n// This is a deliberately small block renderer covering the document model\n// (headings, lists, code fences, quotes, rules, pipe tables, paragraphs with\n// inline bold/italic/code/link/image). It is NOT a full CommonMark engine — the\n// editor's own block model is the source of truth; this just presents it.\n\nexport function escapeHtml(s: string): string {\n return s\n .replace(/&/g, \"&amp;\")\n .replace(/</g, \"&lt;\")\n .replace(/>/g, \"&gt;\")\n .replace(/\"/g, \"&quot;\");\n}\n\nexport interface RenderOpts {\n /** Rewrite a `/blob/<hash>` URL to a reachable one (scoped endpoint or data URL). */\n rewriteBlob?: (url: string) => string;\n}\n\n// Private-use sentinels wrapping a protected code-span index (mirrors markdown.tsx).\nconst A = String.fromCharCode(0xe000);\nconst B = String.fromCharCode(0xe001);\nconst RESTORE = new RegExp(A + \"(\\\\d+)\" + B, \"g\");\n\n/** Inline Markdown → HTML: `code`, **bold**, *italic*, [link](url), ![img](url). */\nexport function renderInline(src: string, opts: RenderOpts = {}): string {\n const codes: string[] = [];\n let s = src.replace(/`([^`]+)`/g, (_m, c) => {\n codes.push(c);\n return A + (codes.length - 1) + B;\n });\n s = escapeHtml(s);\n s = s.replace(/!\\[([^\\]]*)\\]\\(([^)\\s]+)\\)/g, (_m, alt, u) => {\n const url = rewrite(String(u), opts).replace(/\"/g, \"&quot;\");\n return `<img src=\"${url}\" alt=\"${escapeHtml(String(alt))}\" loading=\"lazy\">`;\n });\n s = s.replace(/\\[([^\\]]+)\\]\\(([^)\\s]+)\\)/g, (_m, t, u) => {\n const url = rewrite(String(u), opts).replace(/\"/g, \"&quot;\");\n return `<a href=\"${url}\" target=\"_blank\" rel=\"noreferrer noopener\">${t}</a>`;\n });\n s = s.replace(/\\*\\*([^*]+)\\*\\*/g, \"<strong>$1</strong>\");\n s = s.replace(/(^|[^*])\\*([^*\\n]+)\\*/g, \"$1<em>$2</em>\");\n s = s.replace(RESTORE, (_m, i) => `<code>${escapeHtml(codes[+i] ?? \"\")}</code>`);\n return s;\n}\n\nfunction rewrite(url: string, opts: RenderOpts): string {\n if (opts.rewriteBlob && url.startsWith(\"/blob/\")) return opts.rewriteBlob(url);\n return url;\n}\n\nconst FENCE = /^\\s*(`{3,}|~{3,})(.*)$/;\n\n/** Render a markdown body to an HTML string (block-level). */\nexport function renderMarkdown(md: string, opts: RenderOpts = {}): string {\n const lines = (md ?? \"\").replace(/\\r\\n?/g, \"\\n\").split(\"\\n\");\n const out: string[] = [];\n let i = 0;\n let para: string[] = [];\n\n const flushPara = () => {\n if (!para.length) return;\n out.push(`<p>${para.map((l) => renderInline(l, opts)).join(\"<br>\")}</p>`);\n para = [];\n };\n\n while (i < lines.length) {\n const line = lines[i]!;\n\n // Fenced code block (``` or ~~~). Info string `mh-html` renders as a\n // sandboxed iframe; everything else as <pre><code>.\n const fence = line.match(FENCE);\n if (fence) {\n flushPara();\n const marker = fence[1]![0];\n const info = (fence[2] ?? \"\").trim();\n const body: string[] = [];\n i++;\n while (i < lines.length) {\n const m = lines[i]!.match(/^\\s*(`{3,}|~{3,})\\s*$/);\n if (m && m[1]![0] === marker) {\n i++;\n break;\n }\n body.push(lines[i]!);\n i++;\n }\n if (info === \"mh-html\") {\n out.push(\n `<iframe class=\"mh-embed\" sandbox=\"allow-scripts allow-popups\" srcdoc=\"${escapeHtml(\n body.join(\"\\n\"),\n )}\"></iframe>`,\n );\n } else {\n const cls = info ? ` class=\"language-${escapeHtml(info)}\"` : \"\";\n out.push(`<pre><code${cls}>${escapeHtml(body.join(\"\\n\"))}</code></pre>`);\n }\n continue;\n }\n\n if (line.trim() === \"\") {\n flushPara();\n i++;\n continue;\n }\n\n // ATX heading.\n const h = line.match(/^(#{1,6})\\s+(.*)$/);\n if (h) {\n flushPara();\n const level = h[1]!.length;\n out.push(`<h${level}>${renderInline(h[2]!.trim(), opts)}</h${level}>`);\n i++;\n continue;\n }\n\n // Horizontal rule.\n if (/^\\s*([-*_])(\\s*\\1){2,}\\s*$/.test(line)) {\n flushPara();\n out.push(\"<hr>\");\n i++;\n continue;\n }\n\n // Blockquote: consecutive `> ` lines.\n if (/^\\s*>\\s?/.test(line)) {\n flushPara();\n const q: string[] = [];\n while (i < lines.length && /^\\s*>\\s?/.test(lines[i]!)) {\n q.push(lines[i]!.replace(/^\\s*>\\s?/, \"\"));\n i++;\n }\n out.push(`<blockquote>${renderMarkdown(q.join(\"\\n\"), opts)}</blockquote>`);\n continue;\n }\n\n // Pipe table: a header row followed by a |---|---| separator.\n if (line.includes(\"|\") && i + 1 < lines.length && /^\\s*\\|?[\\s:|-]+\\|?\\s*$/.test(lines[i + 1]!) && lines[i + 1]!.includes(\"-\")) {\n flushPara();\n const rows: string[][] = [];\n const head = splitRow(line);\n i += 2; // skip header + separator\n while (i < lines.length && lines[i]!.includes(\"|\") && lines[i]!.trim() !== \"\") {\n rows.push(splitRow(lines[i]!));\n i++;\n }\n const th = head.map((c) => `<th>${renderInline(c, opts)}</th>`).join(\"\");\n const body = rows\n .map((r) => `<tr>${r.map((c) => `<td>${renderInline(c, opts)}</td>`).join(\"\")}</tr>`)\n .join(\"\");\n out.push(`<table><thead><tr>${th}</tr></thead><tbody>${body}</tbody></table>`);\n continue;\n }\n\n // Unordered / ordered list: consecutive matching item lines.\n const ul = line.match(/^\\s*[-*+]\\s+/);\n const ol = line.match(/^\\s*\\d+[.)]\\s+/);\n if (ul || ol) {\n flushPara();\n const ordered = !!ol;\n const items: string[] = [];\n const re = ordered ? /^\\s*\\d+[.)]\\s+/ : /^\\s*[-*+]\\s+/;\n while (i < lines.length && re.test(lines[i]!)) {\n items.push(lines[i]!.replace(re, \"\"));\n i++;\n }\n const lis = items.map((t) => `<li>${renderInline(t, opts)}</li>`).join(\"\");\n out.push(ordered ? `<ol>${lis}</ol>` : `<ul>${lis}</ul>`);\n continue;\n }\n\n // Standalone image line → block image (avoid wrapping in <p>).\n if (/^\\s*!\\[[^\\]]*\\]\\([^)\\s]+\\)\\s*$/.test(line)) {\n flushPara();\n out.push(`<p class=\"mh-img\">${renderInline(line.trim(), opts)}</p>`);\n i++;\n continue;\n }\n\n para.push(line);\n i++;\n }\n flushPara();\n return out.join(\"\\n\");\n}\n\nfunction splitRow(line: string): string[] {\n let s = line.trim();\n if (s.startsWith(\"|\")) s = s.slice(1);\n if (s.endsWith(\"|\")) s = s.slice(0, -1);\n return s.split(\"|\").map((c) => c.trim());\n}\n",
121
+ "// Public, token-exempt serving of a share (/share/<slug>...). Mounted in\n// server.ts BEFORE the route matcher and deliberately NOT wrapped in withShim,\n// so a share page never carries the master-token runtime (/mh-runtime.js).\n//\n// Access control is per-share (slug lookup + expiry + optional password) — NOT\n// the master token gate. View shares are server-rendered live each request;\n// edit shares (server-only) accept writes attributed to the share's guest node\n// id (see core/shares.ts, crdt.ts withNodeId) so they replicate to the owner's\n// devices as a distinct author. Object-storage shares never reach here — they're\n// a presigned static export served by a separate viewer (see share-export.ts).\n\nimport type { RouteCtx } from \"./routes.ts\";\nimport { randomSuffix } from \"../ids.ts\";\nimport {\n getShare,\n deleteShare,\n shareExpired,\n verifySharePassword,\n type ShareRow,\n} from \"../shares.ts\";\nimport { getDocument, updateDocument, documentVersion } from \"../documents.ts\";\nimport { getDatabase } from \"../databases.ts\";\nimport { listProperties, type PropertyRow } from \"../properties.ts\";\nimport { listRecords, updateRecord, getRecord } from \"../records.ts\";\nimport { resolveSite, getFileForServe, listFiles, getFileRow, putFile, deleteFile } from \"../sites.ts\";\nimport { resolveBlob, blobContentType } from \"../blobs.ts\";\nimport { inferContentType } from \"../sites-core.ts\";\nimport { withNodeId } from \"../crdt.ts\";\nimport { renderMarkdown, escapeHtml } from \"./share-render.ts\";\n\nconst HTML = { \"content-type\": \"text/html; charset=utf-8\" } as const;\nconst HASH_RE = /^[0-9a-f]{16,64}$/;\n\nfunction notFound(): Response {\n return new Response(\"not found\", { status: 404 });\n}\nfunction gone(): Response {\n return new Response(\"this share has expired\", { status: 410 });\n}\nfunction unauthorizedJson(): Response {\n return Response.json({ error: \"unauthorized\" }, { status: 401 });\n}\nfunction wantsHtml(req: Request): boolean {\n return (req.headers.get(\"accept\") ?? \"\").includes(\"text/html\");\n}\n\nexport async function serveShare(req: Request, ctx: RouteCtx): Promise<Response | null> {\n const url = new URL(req.url);\n const rest0 = url.pathname.slice(\"/share/\".length);\n if (!rest0) return null;\n const slash = rest0.indexOf(\"/\");\n const slug = decodeURIComponent(slash === -1 ? rest0 : rest0.slice(0, slash));\n const sub = slash === -1 ? \"\" : rest0.slice(slash + 1);\n if (!slug) return null;\n\n const share = getShare(ctx.db, slug);\n if (!share) return notFound();\n if (share.transport !== \"server\") return notFound(); // s3 shares aren't served here\n if (shareExpired(share)) {\n deleteShare(ctx.db, slug);\n return gone();\n }\n\n // Password gate (the unlock endpoint authenticates inside itself).\n if (sub === \"unlock\" && req.method === \"POST\") return handleUnlock(ctx, req, share, url);\n const locked = !!share.pw_hash && !(await hasShareSession(ctx, req, share));\n if (locked) {\n return wantsHtml(req)\n ? new Response(passwordPage(share, false), { headers: HTML })\n : unauthorizedJson();\n }\n\n // Scoped blob bytes for doc/table images (token-exempt, but only hashes the\n // shared target actually references — never an open blob oracle).\n if (sub.startsWith(\"blob/\")) return serveScopedBlob(ctx, share, sub.slice(\"blob/\".length));\n\n if (share.kind === \"doc\") return serveDoc(ctx, req, share, sub);\n if (share.kind === \"database\") return serveTable(ctx, req, share, sub);\n if (share.kind === \"site\") return serveSiteShare(ctx, req, share, sub);\n return notFound();\n}\n\n// ---- documents ----------------------------------------------------------------\n\nasync function serveDoc(\n ctx: RouteCtx,\n req: Request,\n share: ShareRow,\n sub: string,\n): Promise<Response> {\n const doc = getDocument(ctx.db, share.target_id);\n if (!doc) return notFound();\n\n // Edit write-back: replace the whole body, attributed to the guest node.\n if (sub === \"doc\" && req.method === \"POST\") {\n if (share.permission !== \"edit\") return unauthorizedJson();\n const body = (await req.json().catch(() => ({}))) as { body?: string; ifMatch?: string };\n if (typeof body.body !== \"string\")\n return Response.json({ error: \"body required\" }, { status: 400 });\n try {\n withNodeId(share.guest_node_id, () =>\n updateDocument(ctx.db, share.target_id, { body: body.body }, { ifMatch: body.ifMatch }),\n );\n } catch (e) {\n return Response.json(\n { error: (e as Error).message },\n { status: (e as { code?: string }).code === \"stale\" ? 409 : 400 },\n );\n }\n return Response.json({ version: documentVersion(ctx.db, share.target_id) });\n }\n\n if (sub !== \"\") return notFound();\n\n const rendered = renderMarkdown(doc.body ?? \"\", {\n rewriteBlob: (u) => `/share/${share.slug}/${u.replace(/^\\//, \"\")}`,\n });\n const version = documentVersion(ctx.db, share.target_id);\n const editable = share.permission === \"edit\";\n const inner = `<article class=\"doc\">${rendered || '<p class=\"muted\">(空文档)</p>'}</article>`;\n const script = editable ? docEditScript(share.slug, version, doc.body ?? \"\") : \"\";\n return new Response(\n pageShell(doc.title || \"文档\", inner, { editable, editLabel: \"编辑文档\", script }),\n { headers: HTML },\n );\n}\n\nfunction docEditScript(slug: string, version: string, body: string): string {\n return `\n let editing=false; const ver=${JSON.stringify(version)}; const body0=${JSON.stringify(body)};\n const art=document.querySelector('article.doc');\n const btn=document.getElementById('mh-edit');\n let ta;\n btn.addEventListener('click', async ()=>{\n if(!editing){\n editing=true; btn.textContent='保存';\n ta=document.createElement('textarea'); ta.className='mh-raw'; ta.value=body0;\n art.replaceWith(ta); ta.focus();\n } else {\n btn.disabled=true; btn.textContent='保存中…';\n const res=await fetch('/share/${slug}/doc',{method:'POST',headers:{'content-type':'application/json'},body:JSON.stringify({body:ta.value,ifMatch:ver})});\n if(res.ok){ location.reload(); }\n else { const j=await res.json().catch(()=>({})); alert(j.error||'保存失败'); btn.disabled=false; btn.textContent='保存'; }\n }\n });`;\n}\n\n// ---- databases / tables -------------------------------------------------------\n\nfunction cellText(prop: PropertyRow, value: unknown): string {\n if (value === null || value === undefined) return \"\";\n if (prop.type === \"checkbox\") return value ? \"✓\" : \"\";\n if (Array.isArray(value)) return value.map((v) => String(v)).join(\", \");\n return String(value);\n}\n\nfunction cellHtml(prop: PropertyRow, value: unknown): string {\n if (value === null || value === undefined) return \"\";\n if (prop.type === \"checkbox\") return value ? \"✓\" : \"\";\n if (prop.type === \"url\") {\n const s = String(value);\n return `<a href=\"${escapeHtml(s)}\" target=\"_blank\" rel=\"noreferrer noopener\">${escapeHtml(s)}</a>`;\n }\n if (Array.isArray(value))\n return value.map((v) => `<span class=\"tag\">${escapeHtml(String(v))}</span>`).join(\" \");\n return escapeHtml(String(value));\n}\n\n/** Cell types a recipient can edit inline (free-text-ish). */\nfunction editableType(t: string): boolean {\n return t === \"text\" || t === \"number\" || t === \"url\" || t === \"date\";\n}\n\nasync function serveTable(\n ctx: RouteCtx,\n req: Request,\n share: ShareRow,\n sub: string,\n): Promise<Response> {\n const dbRow = getDatabase(ctx.db, share.target_id);\n if (!dbRow) return notFound();\n const props = listProperties(ctx.db, share.target_id).sort((a, b) => a.position - b.position);\n\n if (sub === \"record\" && req.method === \"POST\") {\n if (share.permission !== \"edit\") return unauthorizedJson();\n const body = (await req.json().catch(() => ({}))) as { id?: string; propId?: string; value?: unknown };\n if (!body.id || !body.propId)\n return Response.json({ error: \"id and propId required\" }, { status: 400 });\n // Scope: the record must belong to THIS shared database, and the column to a\n // free-text property of it (no schema edits, no cross-database writes).\n const rec = getRecord(ctx.db, body.id);\n if (!rec || rec.database_id !== share.target_id) return notFound();\n const prop = props.find((p) => p.id === body.propId);\n if (!prop || !editableType(prop.type))\n return Response.json({ error: \"not an editable column\" }, { status: 400 });\n try {\n withNodeId(share.guest_node_id, () =>\n updateRecord(ctx.db, body.id!, { [body.propId!]: body.value ?? null }),\n );\n } catch (e) {\n return Response.json({ error: (e as Error).message }, { status: 400 });\n }\n return Response.json({ ok: true });\n }\n\n if (sub !== \"\") return notFound();\n\n const records = listRecords(ctx.db, share.target_id);\n const editable = share.permission === \"edit\";\n const head = props.map((p) => `<th>${escapeHtml(p.name)}</th>`).join(\"\");\n const rows = records\n .map((r) => {\n const tds = props\n .map((p) => {\n const v = r.cells[p.id];\n if (editable && editableType(p.type)) {\n return `<td contenteditable data-rec=\"${escapeHtml(r.id)}\" data-prop=\"${escapeHtml(\n p.id,\n )}\" data-type=\"${p.type}\">${escapeHtml(cellText(p, v))}</td>`;\n }\n return `<td>${cellHtml(p, v)}</td>`;\n })\n .join(\"\");\n return `<tr>${tds}</tr>`;\n })\n .join(\"\");\n const inner = `<div class=\"table-wrap\"><table class=\"db\"><thead><tr>${head}</tr></thead><tbody>${rows}</tbody></table></div>`;\n const script = editable ? tableEditScript(share.slug) : \"\";\n return new Response(pageShell(dbRow.name || \"表格\", inner, { script, hint: editable ? \"可编辑文本/数字/URL/日期单元格,失焦自动保存\" : \"\" }), {\n headers: HTML,\n });\n}\n\nfunction tableEditScript(slug: string): string {\n return `\n document.querySelectorAll('td[contenteditable]').forEach(td=>{\n let orig=td.textContent;\n td.addEventListener('blur', async ()=>{\n const val=td.textContent;\n if(val===orig) return;\n const type=td.dataset.type;\n let v=val; if(type==='number'){ v = val===''?null:Number(val); if(v!==null && !isFinite(v)){ td.textContent=orig; return; } }\n td.classList.add('saving');\n const res=await fetch('/share/${slug}/record',{method:'POST',headers:{'content-type':'application/json'},body:JSON.stringify({id:td.dataset.rec,propId:td.dataset.prop,value:v})});\n td.classList.remove('saving');\n if(res.ok){ orig=val; td.classList.add('saved'); setTimeout(()=>td.classList.remove('saved'),600); }\n else { td.textContent=orig; const j=await res.json().catch(()=>({})); alert(j.error||'保存失败'); }\n });\n });`;\n}\n\n// ---- sites --------------------------------------------------------------------\n\nasync function serveSiteShare(\n ctx: RouteCtx,\n req: Request,\n share: ShareRow,\n sub: string,\n): Promise<Response> {\n let siteId: string;\n try {\n siteId = resolveSite(ctx.db, share.target_id).id;\n } catch {\n return notFound();\n }\n\n // Edit surface (reserved underscore paths so they never collide with files).\n if (share.permission === \"edit\") {\n if (sub === \"_files\") return new Response(siteFilesPage(ctx, share, siteId), { headers: HTML });\n if (sub === \"_file\" && req.method === \"POST\") {\n const body = (await req.json().catch(() => ({}))) as { path?: string; content?: string; contentType?: string };\n if (!body.path || typeof body.content !== \"string\")\n return Response.json({ error: \"path and content required\" }, { status: 400 });\n try {\n await withNodeId(share.guest_node_id, () =>\n putFile(ctx.db, siteId, body.path!, { data: body.content!, contentType: body.contentType }),\n );\n } catch (e) {\n return Response.json({ error: (e as Error).message }, { status: 400 });\n }\n return Response.json({ ok: true });\n }\n if (sub === \"_file/delete\" && req.method === \"POST\") {\n const body = (await req.json().catch(() => ({}))) as { path?: string };\n if (!body.path) return Response.json({ error: \"path required\" }, { status: 400 });\n withNodeId(share.guest_node_id, () => deleteFile(ctx.db, siteId, body.path!));\n return Response.json({ ok: true });\n }\n if (sub === \"_raw\") {\n // Raw text of one file for the editor (text files only).\n const url = new URL(req.url);\n const p = url.searchParams.get(\"path\") ?? \"\";\n const row = getFileRow(ctx.db, siteId, p);\n if (!row || row.encoding !== \"utf8\") return Response.json({ content: null });\n return Response.json({ content: row.content ?? \"\" });\n }\n }\n\n // Serve the site itself (live), exactly like /sites/<name>/ but token-exempt.\n const file = await getFileForServe(ctx.db, siteId, sub);\n if (!file) return notFound();\n const out = new Uint8Array(file.bytes.byteLength);\n out.set(file.bytes);\n return new Response(out.buffer, { headers: { \"content-type\": file.contentType } });\n}\n\nfunction siteFilesPage(ctx: RouteCtx, share: ShareRow, siteId: string): string {\n const files = listFiles(ctx.db, siteId);\n const list = files\n .map(\n (f) =>\n `<li><button class=\"file\" data-path=\"${escapeHtml(f.path)}\" data-text=\"${\n f.encoding === \"utf8\" ? \"1\" : \"0\"\n }\">${escapeHtml(f.path)}</button> <span class=\"muted\">${escapeHtml(f.content_type)}</span></li>`,\n )\n .join(\"\");\n const inner = `\n <p class=\"hint\">编辑站点文件(文本文件可在线编辑;保存即对所有访问者生效)。</p>\n <ul class=\"files\">${list || '<li class=\"muted\">(暂无文件)</li>'}</ul>\n <div id=\"editor\" hidden>\n <div class=\"row\"><strong id=\"fpath\"></strong> <a id=\"open\" target=\"_blank\" rel=\"noreferrer\">预览 ↗</a></div>\n <textarea class=\"mh-raw\" id=\"fbody\"></textarea>\n <div class=\"row\"><button id=\"save\">保存</button></div>\n </div>`;\n const script = `\n const slug=${JSON.stringify(share.slug)};\n const ed=document.getElementById('editor'), fpath=document.getElementById('fpath'), fbody=document.getElementById('fbody'), open=document.getElementById('open');\n let cur=null;\n document.querySelectorAll('button.file').forEach(b=>b.addEventListener('click', async ()=>{\n cur=b.dataset.path; fpath.textContent=cur; open.href='/share/'+slug+'/'+cur;\n if(b.dataset.text==='1'){ const r=await fetch('/share/'+slug+'/_raw?path='+encodeURIComponent(cur)); const j=await r.json(); fbody.value=j.content||''; fbody.disabled=false; }\n else { fbody.value='(二进制文件,不可在线编辑)'; fbody.disabled=true; }\n ed.hidden=false;\n }));\n document.getElementById('save').addEventListener('click', async ()=>{\n if(!cur||fbody.disabled) return;\n const res=await fetch('/share/'+slug+'/_file',{method:'POST',headers:{'content-type':'application/json'},body:JSON.stringify({path:cur,content:fbody.value})});\n if(res.ok){ const s=document.getElementById('save'); s.textContent='已保存 ✓'; setTimeout(()=>s.textContent='保存',900); }\n else { const j=await res.json().catch(()=>({})); alert(j.error||'保存失败'); }\n });`;\n return pageShell(`${resolveSite(ctx.db, share.target_id).name} · 文件`, inner, { script });\n}\n\n// ---- scoped blob --------------------------------------------------------------\n\nfunction referencedHashes(ctx: RouteCtx, share: ShareRow): Set<string> {\n const out = new Set<string>();\n const scan = (text: string | null | undefined) => {\n if (!text) return;\n const re = /\\/blob\\/([0-9a-f]{16,64})/g;\n let m: RegExpExecArray | null;\n while ((m = re.exec(text))) out.add(m[1]!.toLowerCase());\n };\n if (share.kind === \"doc\") scan(getDocument(ctx.db, share.target_id)?.body);\n else if (share.kind === \"database\")\n for (const r of listRecords(ctx.db, share.target_id)) scan(JSON.stringify(r.cells));\n return out;\n}\n\nasync function serveScopedBlob(ctx: RouteCtx, share: ShareRow, tail: string): Promise<Response> {\n const dot = tail.indexOf(\".\");\n const hash = (dot >= 0 ? tail.slice(0, dot) : tail).toLowerCase();\n if (!HASH_RE.test(hash)) return notFound();\n if (!referencedHashes(ctx, share).has(hash)) return notFound();\n const bytes = await resolveBlob(ctx.db, hash);\n if (!bytes) return notFound();\n const ct = dot >= 0 ? inferContentType(tail) : blobContentType(ctx.db, hash) ?? \"application/octet-stream\";\n const out = new Uint8Array(bytes.byteLength);\n out.set(bytes);\n return new Response(out.buffer, {\n headers: { \"content-type\": ct, \"cache-control\": \"private, max-age=3600\" },\n });\n}\n\n// ---- password session ---------------------------------------------------------\n\nfunction shareSecret(ctx: RouteCtx): string {\n const row = ctx.db.query(\"SELECT value FROM meta WHERE key='share_cookie_secret'\").get() as\n | { value: string }\n | null;\n if (row) return row.value;\n const secret = randomSuffix(32);\n ctx.db\n .query(\"INSERT INTO meta (key, value) VALUES ('share_cookie_secret', ?) ON CONFLICT(key) DO NOTHING\")\n .run(secret);\n return (\n (ctx.db.query(\"SELECT value FROM meta WHERE key='share_cookie_secret'\").get() as { value: string })\n .value\n );\n}\n\nfunction toHex(b: Uint8Array): string {\n let s = \"\";\n for (const x of b) s += x.toString(16).padStart(2, \"0\");\n return s;\n}\n\nasync function hmac(secret: string, msg: string): Promise<string> {\n const enc = new TextEncoder();\n const key = await crypto.subtle.importKey(\n \"raw\",\n enc.encode(secret) as unknown as ArrayBuffer,\n { name: \"HMAC\", hash: \"SHA-256\" },\n false,\n [\"sign\"],\n );\n const sig = await crypto.subtle.sign(\"HMAC\", key, enc.encode(msg) as unknown as ArrayBuffer);\n return toHex(new Uint8Array(sig));\n}\n\nconst SHARE_SESSION_TTL_MS = 12 * 60 * 60 * 1000;\n\nfunction shareCookieName(slug: string): string {\n return \"mh_share_\" + slug;\n}\n\nfunction readCookie(req: Request, name: string): string | null {\n const header = req.headers.get(\"cookie\");\n if (!header) return null;\n for (const part of header.split(\";\")) {\n const [k, ...v] = part.trim().split(\"=\");\n if (k === name) return decodeURIComponent(v.join(\"=\"));\n }\n return null;\n}\n\nasync function hasShareSession(ctx: RouteCtx, req: Request, share: ShareRow): Promise<boolean> {\n const raw = readCookie(req, shareCookieName(share.slug));\n if (!raw) return false;\n const dot = raw.lastIndexOf(\".\");\n if (dot < 0) return false;\n const exp = Number(raw.slice(0, dot));\n const mac = raw.slice(dot + 1);\n if (!Number.isFinite(exp) || Date.now() > exp) return false;\n const expect = await hmac(shareSecret(ctx), `${share.slug}:${exp}`);\n return timingSafeStr(expect, mac);\n}\n\nfunction timingSafeStr(a: string, b: string): boolean {\n if (a.length !== b.length) return false;\n let diff = 0;\n for (let i = 0; i < a.length; i++) diff |= a.charCodeAt(i) ^ b.charCodeAt(i);\n return diff === 0;\n}\n\nasync function handleUnlock(\n ctx: RouteCtx,\n req: Request,\n share: ShareRow,\n url: URL,\n): Promise<Response> {\n let pw = \"\";\n const ct = req.headers.get(\"content-type\") ?? \"\";\n if (ct.includes(\"application/json\")) pw = String(((await req.json().catch(() => ({}))) as { password?: string }).password ?? \"\");\n else {\n const form = await req.formData().catch(() => null);\n pw = form ? String(form.get(\"password\") ?? \"\") : \"\";\n }\n if (!(await verifySharePassword(share, pw))) {\n return new Response(passwordPage(share, true), { headers: HTML, status: 401 });\n }\n const exp = Date.now() + Math.min(SHARE_SESSION_TTL_MS, ttlRemaining(share));\n const mac = await hmac(shareSecret(ctx), `${share.slug}:${exp}`);\n const secure = url.protocol === \"https:\";\n const cookie =\n `${shareCookieName(share.slug)}=${exp}.${mac}; Path=/share/${share.slug}; SameSite=Strict; Max-Age=${Math.floor(\n (exp - Date.now()) / 1000,\n )}` + (secure ? \"; Secure\" : \"\");\n return new Response(null, {\n status: 303,\n headers: { location: `/share/${share.slug}`, \"set-cookie\": cookie },\n });\n}\n\nfunction ttlRemaining(share: ShareRow): number {\n return share.expires_at == null ? SHARE_SESSION_TTL_MS : Math.max(0, share.expires_at - Date.now());\n}\n\n// ---- page shell ---------------------------------------------------------------\n\nfunction passwordPage(share: ShareRow, error: boolean): string {\n const inner = `\n <form method=\"post\" action=\"/share/${share.slug}/unlock\" class=\"pw\">\n <h1>🔒 此分享受口令保护</h1>\n ${error ? '<p class=\"err\">口令错误,请重试。</p>' : \"\"}\n <input type=\"password\" name=\"password\" placeholder=\"口令\" autofocus autocomplete=\"current-password\">\n <button type=\"submit\">解锁</button>\n </form>`;\n return pageShell(\"受保护的分享\", inner, { bare: true });\n}\n\nfunction pageShell(\n title: string,\n inner: string,\n opts: { editable?: boolean; editLabel?: string; script?: string; hint?: string; bare?: boolean } = {},\n): string {\n const editBtn = opts.editable ? `<button id=\"mh-edit\" class=\"edit-btn\">${opts.editLabel ?? \"编辑\"}</button>` : \"\";\n const hint = opts.hint ? `<p class=\"hint\">${escapeHtml(opts.hint)}</p>` : \"\";\n const script = opts.script ? `<script>(function(){${opts.script}})();</script>` : \"\";\n return `<!doctype html><html lang=\"zh\"><head>\n<meta charset=\"utf-8\"><meta name=\"viewport\" content=\"width=device-width,initial-scale=1\">\n<meta name=\"robots\" content=\"noindex\">\n<title>${escapeHtml(title)}</title>\n<style>\n :root{--bg:#ffffff;--fg:#1f2328;--muted:#6e7781;--line:#d0d7de;--accent:#0969da;--card:#f6f8fa}\n @media (prefers-color-scheme: dark){:root{--bg:#0d1117;--fg:#e6edf3;--muted:#8b949e;--line:#30363d;--accent:#4493f8;--card:#161b22}}\n *{box-sizing:border-box}\n body{margin:0;background:var(--bg);color:var(--fg);font:16px/1.65 -apple-system,BlinkMacSystemFont,\"Segoe UI\",Roboto,\"PingFang SC\",\"Microsoft YaHei\",sans-serif}\n .wrap{max-width:820px;margin:0 auto;padding:32px 20px 80px}\n header.mh{display:flex;align-items:center;gap:12px;justify-content:space-between;margin-bottom:20px;border-bottom:1px solid var(--line);padding-bottom:14px}\n header.mh h1.title{font-size:22px;margin:0}\n .edit-btn{background:var(--accent);color:#fff;border:0;border-radius:7px;padding:7px 14px;cursor:pointer;font-size:14px}\n .hint{color:var(--muted);font-size:13px;margin:0 0 14px}\n article.doc h1,article.doc h2,article.doc h3{line-height:1.3;margin:1.4em 0 .5em}\n article.doc h1{font-size:1.7em} article.doc h2{font-size:1.4em} article.doc h3{font-size:1.2em}\n article.doc p{margin:.7em 0} article.doc img{max-width:100%;border-radius:8px}\n article.doc pre{background:var(--card);border:1px solid var(--line);border-radius:8px;padding:14px;overflow:auto}\n article.doc code{background:var(--card);padding:.15em .35em;border-radius:4px;font-size:.9em}\n article.doc pre code{background:none;padding:0}\n article.doc blockquote{margin:.8em 0;padding:.2em 1em;border-left:3px solid var(--line);color:var(--muted)}\n article.doc table,table.db{border-collapse:collapse;width:100%;font-size:14px}\n article.doc td,article.doc th,table.db td,table.db th{border:1px solid var(--line);padding:7px 10px;text-align:left}\n table.db th{background:var(--card)}\n .table-wrap{overflow:auto}\n td[contenteditable]{outline:none} td.saving{opacity:.5} td.saved{background:rgba(46,160,67,.18)}\n .tag{display:inline-block;background:var(--card);border:1px solid var(--line);border-radius:999px;padding:1px 9px;font-size:12px}\n .muted{color:var(--muted)} .mh-img{text-align:center}\n iframe.mh-embed{width:100%;border:1px solid var(--line);border-radius:8px;min-height:240px}\n textarea.mh-raw{width:100%;min-height:60vh;font:14px/1.6 ui-monospace,SFMono-Regular,Menlo,monospace;padding:14px;border:1px solid var(--line);border-radius:8px;background:var(--card);color:var(--fg)}\n ul.files{list-style:none;padding:0} ul.files li{padding:4px 0} button.file{background:none;border:0;color:var(--accent);cursor:pointer;font-size:15px;padding:0}\n .row{display:flex;gap:10px;align-items:center;margin:10px 0}\n form.pw{max-width:320px;margin:12vh auto 0;display:flex;flex-direction:column;gap:12px}\n form.pw input{padding:9px;border:1px solid var(--line);border-radius:7px;background:var(--card);color:var(--fg)}\n form.pw button{padding:9px;border:0;border-radius:7px;background:var(--accent);color:#fff;cursor:pointer}\n form.pw .err{color:#f85149;font-size:13px;margin:0}\n footer.mh{margin-top:48px;border-top:1px solid var(--line);padding-top:14px;color:var(--muted);font-size:12px;text-align:center}\n</style></head><body>\n${opts.bare ? `<div class=\"wrap\">${inner}</div>` : `<div class=\"wrap\">\n<header class=\"mh\"><h1 class=\"title\">${escapeHtml(title)}</h1>${editBtn}</header>\n${hint}\n${inner}\n<footer class=\"mh\">通过 metahub 分享</footer>\n</div>`}\n${script}\n</body></html>`;\n}\n",
111
122
  "export * from \"./errors.ts\";\nexport * from \"./paths.ts\";\nexport * from \"./driver.ts\";\nexport * from \"./db.ts\";\nexport * from \"./ids.ts\";\nexport * from \"./resolve.ts\";\nexport * from \"./hlc.ts\";\nexport * from \"./crdt.ts\";\nexport * from \"./blocks.ts\";\nexport * from \"./fracdex.ts\";\nexport * from \"./node.ts\";\nexport * from \"./databases.ts\";\nexport * from \"./context.ts\";\nexport * from \"./properties.ts\";\nexport * from \"./indexing.ts\";\nexport * from \"./records.ts\";\nexport * from \"./documents.ts\";\nexport * from \"./search.ts\";\nexport * from \"./cache.ts\";\nexport * from \"./sites.ts\";\nexport * from \"./sync/protocol.ts\";\nexport * from \"./sync/client.ts\";\nexport * from \"./sync/server.ts\";\n",
112
123
  "import { Database } from \"bun:sqlite\";\nimport { mkdirSync } from \"node:fs\";\nimport { dbPath, cacheDir, metahubHome } from \"./paths.ts\";\nimport { initSchema } from \"./schema-init.ts\";\n\n// Schema bootstrap lives in schema-init.ts (runtime-agnostic, driver-typed);\n// re-exported here so existing imports keep working.\nexport {\n runSchema,\n ftsAvailable,\n migrateRecords,\n migratePeers,\n migrateDocBlocks,\n migrateDocuments,\n migrateOplog,\n initSchema,\n} from \"./schema-init.ts\";\n\nexport function ensureDirs(): void {\n mkdirSync(metahubHome(), { recursive: true });\n mkdirSync(cacheDir(), { recursive: true });\n}\n\n/** Open (and migrate) the on-disk metahub database for the resolved home. */\nexport function openMetahub(): Database {\n ensureDirs();\n const db = new Database(dbPath(), { create: true });\n db.exec(\"PRAGMA journal_mode = WAL;\");\n initSchema(db);\n return db;\n}\n",
113
- "export const CORE_SCHEMA = `\nCREATE TABLE IF NOT EXISTS meta (\n key TEXT PRIMARY KEY,\n value TEXT\n);\n\n-- CRDT oplog: one row per field assignment. Source of truth for sync.\n-- txn groups the changes of one logical mutation for history rendering\n-- (nullable: legacy rows and changes from pre-txn peers have none).\n--\n-- seq is an explicit AUTOINCREMENT id used as the replication cursor. It must\n-- be a declared INTEGER PRIMARY KEY (not the implicit rowid): VACUUM renumbers\n-- the rowids of tables that lack one, which would shift them below a peer's\n-- stored push/pull cursor and silently strand every write in the gap.\n-- AUTOINCREMENT additionally guarantees ids are never reused. The\n-- (dataset,row_id,col,hlc) tuple stays UNIQUE so applyChange's INSERT OR IGNORE\n-- dedup is unchanged. Legacy databases are rebuilt into this shape by\n-- migrateCrdtChangesSeq (schema-init.ts).\nCREATE TABLE IF NOT EXISTS crdt_changes (\n seq INTEGER PRIMARY KEY AUTOINCREMENT,\n hlc TEXT NOT NULL,\n node_id TEXT NOT NULL,\n dataset TEXT NOT NULL,\n row_id TEXT NOT NULL,\n col TEXT NOT NULL,\n value TEXT,\n txn TEXT,\n UNIQUE (dataset, row_id, col, hlc)\n);\nCREATE INDEX IF NOT EXISTS idx_changes_hlc ON crdt_changes(hlc);\n-- Serves history's \"every block ever attached to this doc\" lookup. Partial so\n-- it never indexes the large values other datasets carry (e.g. site file bodies).\nCREATE INDEX IF NOT EXISTS idx_changes_docref ON crdt_changes(value)\n WHERE dataset = 'doc_blocks' AND col = 'doc_id';\n\n-- Per-peer replication cursors (crdt_changes.seq: AUTOINCREMENT, monotonic in\n-- insertion order and stable across VACUUM, so no change is ever skipped\n-- regardless of HLC/clock skew). Outbound side of\n-- a pairing: \"token\" is the credential the *remote* issued to us (sent as a\n-- Bearer header when we sync to them). See migratePeers in db.ts for the columns\n-- added to legacy databases.\n--\n-- kind selects the transport: 'http' (POST /sync to a peer server, the classic\n-- path) or 's3' (an S3-compatible bucket used as dumb store-and-forward — see\n-- sync/storage.ts). For 's3' peers url is a synthetic key (s3://<bucket>/<prefix>)\n-- and config holds the bucket settings + credentials + master key as JSON.\n-- Like the rest of peers, config is local-only and never enters the CRDT oplog.\nCREATE TABLE IF NOT EXISTS peers (\n url TEXT PRIMARY KEY,\n pull_cursor INTEGER NOT NULL DEFAULT 0,\n push_cursor INTEGER NOT NULL DEFAULT 0,\n token TEXT,\n label TEXT,\n node_id TEXT,\n enabled INTEGER NOT NULL DEFAULT 1,\n last_sync_at INTEGER,\n last_success_at INTEGER,\n last_status TEXT,\n last_error TEXT,\n kind TEXT NOT NULL DEFAULT 'http',\n config TEXT\n);\n\n-- Per-(storage-peer, remote-node) pull progress: the key of the last oplog\n-- segment we consumed from that node's bucket prefix. HTTP peers use the single\n-- pull_cursor above; storage peers need one cursor per remote node because each\n-- node publishes its own segment stream under its own prefix. last_key is a\n-- bucket object key (lexicographically ordered = chronological), so LIST\n-- start-after resumes exactly where we left off.\nCREATE TABLE IF NOT EXISTS storage_cursors (\n peer_url TEXT NOT NULL,\n node_id TEXT NOT NULL,\n last_key TEXT,\n PRIMARY KEY (peer_url, node_id)\n);\n\n-- Inbound side of a pairing: credentials *we* issued to remote devices. A peer\n-- presents one of these on /sync; acceptsSyncToken() checks it alongside the\n-- managed master token. Revoke by deleting the row.\nCREATE TABLE IF NOT EXISTS peer_grants (\n token TEXT PRIMARY KEY,\n peer_url TEXT,\n node_id TEXT,\n created_at INTEGER\n);\n\n-- One-time pairing codes minted by \"mh config peer code\" / POST /api/pair/new.\n-- Short-lived and single-use: redeemed during the pairing handshake, then the\n-- two devices exchange durable peer_grants. used/exp gate redemption.\nCREATE TABLE IF NOT EXISTS pairing_codes (\n code TEXT PRIMARY KEY,\n exp INTEGER NOT NULL,\n used INTEGER NOT NULL DEFAULT 0,\n created_at INTEGER\n);\n\nCREATE TABLE IF NOT EXISTS databases (\n id TEXT PRIMARY KEY,\n name TEXT,\n icon TEXT,\n created_hlc TEXT,\n __deleted INTEGER NOT NULL DEFAULT 0\n);\n\nCREATE TABLE IF NOT EXISTS properties (\n id TEXT PRIMARY KEY,\n database_id TEXT,\n name TEXT,\n type TEXT,\n config TEXT,\n position REAL,\n __deleted INTEGER NOT NULL DEFAULT 0\n);\nCREATE INDEX IF NOT EXISTS idx_properties_db ON properties(database_id);\n\n-- One row per record. Field cells live in the data JSON object, keyed by\n-- property id (rename-safe). Each (record,property) is still an independent\n-- CRDT register in the oplog; materialize() folds the winner into data via\n-- json_set/json_remove. Hot fields get expression indexes on data->>'propid'\n-- (see indexing.ts) so filter/sort/limit push down to SQL.\nCREATE TABLE IF NOT EXISTS records (\n id TEXT PRIMARY KEY,\n database_id TEXT,\n created_hlc TEXT,\n order_key TEXT,\n data TEXT NOT NULL DEFAULT '{}',\n __deleted INTEGER NOT NULL DEFAULT 0\n);\nCREATE INDEX IF NOT EXISTS idx_records_db_hlc ON records(database_id, created_hlc);\n\nCREATE TABLE IF NOT EXISTS documents (\n id TEXT PRIMARY KEY,\n title TEXT,\n body TEXT, -- materialized cache: serialized from doc_blocks\n database_id TEXT,\n parent_id TEXT,\n created_hlc TEXT,\n order_key TEXT, -- fractional index among siblings (same parent_id); ties broken by created_hlc,id\n __deleted INTEGER NOT NULL DEFAULT 0\n);\n\n-- Document body as an ordered list of blocks; each (block,field) is an\n-- independent CRDT register so concurrent edits to different blocks merge.\n-- order_key is a fractional index (ties broken by id) giving display order.\nCREATE TABLE IF NOT EXISTS doc_blocks (\n id TEXT PRIMARY KEY,\n doc_id TEXT,\n text TEXT,\n order_key TEXT,\n blank_after INTEGER NOT NULL DEFAULT 0, -- extra blank lines kept after this block (user spacing)\n __deleted INTEGER NOT NULL DEFAULT 0\n);\nCREATE INDEX IF NOT EXISTS idx_doc_blocks_doc ON doc_blocks(doc_id);\n\n-- A named static site (Supabase-Storage-style bucket). Served at /sites/<name>/.\nCREATE TABLE IF NOT EXISTS sites (\n id TEXT PRIMARY KEY,\n name TEXT, -- URL slug; resolved by getSiteByName\n title TEXT,\n created_hlc TEXT,\n __deleted INTEGER NOT NULL DEFAULT 0\n);\n\n-- One row per file in a site. content holds inline utf8/base64 text, or a blob\n-- hash (see cache.ts) when encoding = 'blob'. (site_id, path) maps to a stable\n-- id so re-uploads merge as a CRDT register instead of duplicating.\nCREATE TABLE IF NOT EXISTS site_files (\n id TEXT PRIMARY KEY,\n site_id TEXT,\n path TEXT,\n content_type TEXT,\n encoding TEXT, -- 'utf8' | 'base64' | 'blob'\n content TEXT,\n created_hlc TEXT,\n __deleted INTEGER NOT NULL DEFAULT 0\n);\nCREATE INDEX IF NOT EXISTS idx_site_files_site ON site_files(site_id);\n\n-- Node-local blob cache ledger (NOT synced, like peers/storage_cursors): one row\n-- per blob byte-file held in cache.ts's content-addressed store (~/.metahub/cache).\n-- Gives the bare hash-named files the metadata clearing/stats need. hash is the\n-- canonical content key (sha256 truncated to 32 hex; legacy 64-hex coexist).\n-- pending = bytes produced HERE not yet confirmed flushed to a durable anchor\n-- (bucket) — the only blobs a device must protect; never auto-evicted/cleared.\n-- pending=0 means a flushed production OR an acquired cache, both safely\n-- clearable (re-fetchable). This local fact replaces the old SYNCED blob_presence\n-- table — clearing is now purely local/offline. See blobs.ts / 22-blob-sync.\nCREATE TABLE IF NOT EXISTS blob_cache (\n hash TEXT PRIMARY KEY,\n size INTEGER NOT NULL,\n content_type TEXT,\n last_access INTEGER,\n pinned INTEGER NOT NULL DEFAULT 0, -- node-local: never auto-evicted / cleared\n pending INTEGER NOT NULL DEFAULT 1, -- produced here, not yet flushed to anchor\n anchored INTEGER NOT NULL DEFAULT 0 -- node-local: last verify confirmed a designated anchor holds it (per redundancy). Drives isClearable; reset on policy change\n);\n\n-- Synced workspace policy (single row \"default\"): which nodes are designated\n-- full-blob libraries — the durable anchor in no-bucket topologies (they pull\n-- everything and never clear). full_nodes is a JSON array of node_id; redundancy\n-- is retained but unused since clearing moved to the local pending model.\nCREATE TABLE IF NOT EXISTS blob_policy (\n id TEXT PRIMARY KEY, -- always \"default\"\n full_nodes TEXT, -- JSON array of node_id\n redundancy TEXT, -- 'all' | 'any'\n __deleted INTEGER NOT NULL DEFAULT 0\n);\n`;\n\n// Best-effort: FTS5 may not be compiled in. Search falls back to LIKE if this fails.\nexport const FTS_SCHEMA = `\nCREATE VIRTUAL TABLE IF NOT EXISTS search_fts USING fts5(\n kind UNINDEXED,\n id UNINDEXED,\n database_id UNINDEXED,\n title,\n body\n);\n`;\n",
114
- "import type { DbDriver } from \"./driver.ts\";\nimport { newId, slugify, idKind } from \"./ids.ts\";\nimport { emit, grouped } from \"./crdt.ts\";\nimport { getDatabase } from \"./databases.ts\";\nimport { listProperties, type PropertyRow } from \"./properties.ts\";\nimport { maybeAutoIndex } from \"./indexing.ts\";\nimport { resolveCandidates } from \"./resolve.ts\";\nimport { keyBetween, keysBetween } from \"./fracdex.ts\";\nimport { MhError } from \"./errors.ts\";\n\ntype SqlValue = string | number | null;\n\n/** Scalars push down to SQL; arrays/objects/null are filtered in JS. */\nfunction isSqlScalar(v: unknown): v is string | number | boolean {\n return typeof v === \"string\" || typeof v === \"number\" || typeof v === \"boolean\";\n}\n\n/** Encode a coerced scalar to match what `data ->> '<prop>'` returns. */\nfunction sqlFilterValue(v: string | number | boolean): SqlValue {\n return typeof v === \"boolean\" ? (v ? 1 : 0) : v;\n}\n\nexport interface RecordRow {\n id: string;\n database_id: string;\n /** Cells keyed by property NAME — friendly for CLI / external agents, but\n * lossy when two properties share a name (one entry wins). */\n values: Record<string, unknown>;\n /** Cells keyed by property ID — lossless under duplicate names; the WebUI\n * reads/writes through this. */\n cells: Record<string, unknown>;\n}\n\ninterface OrderedRecordRow {\n id: string;\n database_id: string;\n created_hlc: string | null;\n order_key: string | null;\n}\n\n/**\n * Resolve one relation value to a concrete record id in the target database.\n * Accepts a full id / unique prefix / name. A well-formed record id that does\n * not (yet) exist passes through unchanged — a forward reference / explicit id\n * escape valve. Names/prefixes that match nothing, or match many, throw.\n */\nfunction resolveRelation(db: DbDriver, prop: PropertyRow, value: string): string {\n const target = prop.config?.database;\n if (!target) return value; // misconfigured relation — leave the value as-is\n const cands = resolveCandidates(db, value, { kind: \"rec\", databaseId: target });\n const exact = cands.find((c) => c.id === value);\n if (exact) return exact.id;\n if (cands.length === 1) return cands[0]!.id;\n if (cands.length === 0) {\n if (idKind(value) === \"rec\") return value; // forward reference to a full id\n throw new MhError(\"not_found\", `${prop.name}: no such record in target database: ${value}`);\n }\n throw new MhError(\"ambiguous\", `${prop.name}: ambiguous relation \"${value}\" (${cands.length} matches); use a full id`);\n}\n\n/** Validate + normalize a value for a property's type. Throws on mismatch. */\nfunction coerce(db: DbDriver, prop: PropertyRow, value: unknown): unknown {\n switch (prop.type) {\n case \"text\":\n case \"url\":\n case \"date\": {\n if (value === null) return null;\n if (typeof value !== \"string\") throw new MhError(\"invalid_input\", `${prop.name} expects a string`);\n return value;\n }\n case \"number\": {\n if (value === null) return null;\n const n = typeof value === \"number\" ? value : Number(value);\n if (!Number.isFinite(n)) throw new MhError(\"invalid_input\", `${prop.name} expects a number`);\n return n;\n }\n case \"checkbox\": {\n if (typeof value === \"boolean\") return value;\n if (value === \"true\" || value === 1) return true;\n if (value === \"false\" || value === 0 || value === null) return false;\n throw new MhError(\"invalid_input\", `${prop.name} expects a boolean`);\n }\n case \"select\": {\n if (value === null) return null;\n const v = String(value);\n if (!prop.config?.options?.includes(v))\n throw new MhError(\"invalid_input\", `${prop.name}: '${v}' is not an allowed option`);\n return v;\n }\n case \"multi_select\": {\n const arr = value === null ? [] : Array.isArray(value) ? value : [value];\n const opts = prop.config?.options ?? [];\n for (const item of arr)\n if (!opts.includes(String(item)))\n throw new MhError(\"invalid_input\", `${prop.name}: '${item}' is not an allowed option`);\n return arr.map(String);\n }\n case \"relation\": {\n const arr = value === null ? [] : Array.isArray(value) ? value : [value];\n return arr.map((v) => resolveRelation(db, prop, String(v)));\n }\n }\n}\n\n/** Group properties by lowercased name; duplicate names are legal. */\nfunction propsByName(props: PropertyRow[]): Map<string, PropertyRow[]> {\n const byName = new Map<string, PropertyRow[]>();\n for (const p of props) {\n const k = p.name.toLowerCase();\n const list = byName.get(k);\n if (list) list.push(p);\n else byName.set(k, [p]);\n }\n return byName;\n}\n\n/**\n * Match data keys (property name OR id) to properties. Duplicate property\n * names are a legal state (offline peers can create them concurrently), so a\n * name that matches several properties is ambiguous — callers must switch to\n * the property id.\n */\nfunction resolveData(\n props: PropertyRow[],\n data: Record<string, unknown>,\n): { prop: PropertyRow; value: unknown }[] {\n const byId = new Map(props.map((p) => [p.id, p]));\n const byName = propsByName(props);\n const out: { prop: PropertyRow; value: unknown }[] = [];\n for (const [key, value] of Object.entries(data)) {\n let prop = byId.get(key);\n if (!prop) {\n const matches = byName.get(key.toLowerCase()) ?? [];\n if (matches.length > 1)\n throw new MhError(\n \"ambiguous\",\n `property name \"${key}\" matches ${matches.length} properties; use a property id`,\n );\n prop = matches[0];\n }\n if (!prop) throw new MhError(\"not_found\", `unknown property: ${key}`);\n out.push({ prop, value });\n }\n return out;\n}\n\n/** Build a RecordRow from a materialized row; keys in `data` are property ids. */\nfunction rowToRecord(\n row: { id: string; database_id: string; data: string },\n props: PropertyRow[],\n): RecordRow {\n const raw = JSON.parse(row.data || \"{}\") as Record<string, unknown>;\n const byId = new Map(props.map((p) => [p.id, p]));\n const values: Record<string, unknown> = {};\n const cells: Record<string, unknown> = {};\n for (const [propId, v] of Object.entries(raw)) {\n const p = byId.get(propId);\n if (!p) continue; // skip cells for removed properties\n values[p.name] = v;\n cells[p.id] = v;\n }\n return { id: row.id, database_id: row.database_id, values, cells };\n}\n\nfunction deriveTitle(\n props: PropertyRow[],\n resolved: { prop: PropertyRow; value: unknown }[],\n fallbackBase: string,\n): string {\n const text = resolved.find(\n (r) => r.prop.type === \"text\" && typeof r.value === \"string\" && r.value,\n );\n return newId(\"rec\", text ? String(text.value) : \"\", fallbackBase);\n}\n\nfunction tableExists(db: DbDriver, table: string): boolean {\n return (\n db\n .query(\"SELECT 1 AS ok FROM sqlite_master WHERE type = 'table' AND name = ?\")\n .get(table) != null\n );\n}\n\nfunction canEmitOrderKeys(db: DbDriver): boolean {\n return tableExists(db, \"meta\") && tableExists(db, \"crdt_changes\");\n}\n\nfunction writeRecordOrderKey(db: DbDriver, recordId: string, orderKey: string, emitChange: boolean): void {\n if (emitChange) emit(db, \"records\", recordId, \"order_key\", orderKey);\n else db.query(\"UPDATE records SET order_key = ? WHERE id = ?\").run(orderKey, recordId);\n}\n\nfunction lastRecordOrderKey(db: DbDriver, databaseId: string): string | null {\n const row = db\n .query(\n `SELECT order_key FROM records\n WHERE database_id = ? AND __deleted = 0 AND order_key IS NOT NULL\n ORDER BY order_key DESC, id DESC LIMIT 1`,\n )\n .get(databaseId) as { order_key: string | null } | null;\n return row?.order_key ?? null;\n}\n\nfunction orderedRecordRows(db: DbDriver, databaseId: string): OrderedRecordRow[] {\n return db\n .query(\n `SELECT id, database_id, created_hlc, order_key FROM records\n WHERE database_id = ? AND __deleted = 0\n ORDER BY order_key IS NULL, order_key, created_hlc, id`,\n )\n .all(databaseId) as OrderedRecordRow[];\n}\n\nfunction rebalanceRecordOrderKeys(db: DbDriver, databaseId: string): void {\n const rows = orderedRecordRows(db, databaseId);\n const keys = keysBetween(null, null, rows.length);\n rows.forEach((row, i) => {\n if (row.order_key !== keys[i]) emit(db, \"records\", row.id, \"order_key\", keys[i]!);\n });\n}\n\nexport const backfillRecordOrderKeys = grouped(function backfillRecordOrderKeys(\n db: DbDriver,\n databaseId?: string,\n): void {\n const emitChange = canEmitOrderKeys(db);\n const dbRows = databaseId\n ? [{ database_id: databaseId }]\n : (db\n .query(\n `SELECT DISTINCT database_id FROM records\n WHERE database_id IS NOT NULL AND __deleted = 0 AND order_key IS NULL`,\n )\n .all() as { database_id: string }[]);\n\n for (const d of dbRows) {\n const missing = db\n .query(\n `SELECT id FROM records\n WHERE database_id = ? AND __deleted = 0 AND order_key IS NULL\n ORDER BY created_hlc, id`,\n )\n .all(d.database_id) as { id: string }[];\n if (!missing.length) continue;\n\n const start = lastRecordOrderKey(db, d.database_id);\n const keys = keysBetween(start, null, missing.length);\n missing.forEach((row, i) => writeRecordOrderKey(db, row.id, keys[i]!, emitChange));\n }\n});\n\nexport const createRecord = grouped(function createRecord(\n db: DbDriver,\n databaseId: string,\n data: Record<string, unknown>,\n): RecordRow {\n const dbRow = getDatabase(db, databaseId);\n if (!dbRow) throw new MhError(\"not_found\", `no such database: ${databaseId}`);\n const props = listProperties(db, databaseId);\n const resolved = resolveData(props, data);\n const id = deriveTitle(props, resolved, slugify(dbRow.name, \"rec\"));\n const orderKey = keyBetween(lastRecordOrderKey(db, databaseId), null);\n\n const first = emit(db, \"records\", id, \"database_id\", databaseId);\n emit(db, \"records\", id, \"created_hlc\", first.hlc);\n emit(db, \"records\", id, \"order_key\", orderKey);\n for (const { prop, value } of resolved)\n emit(db, \"records\", id, prop.id, coerce(db, prop, value));\n return getRecord(db, id)!;\n});\n\nexport function getRecord(db: DbDriver, id: string): RecordRow | null {\n const row = db\n .query(\"SELECT id, database_id, data FROM records WHERE id = ? AND __deleted = 0\")\n .get(id) as { id: string; database_id: string; data: string } | null;\n if (!row) return null;\n return rowToRecord(row, listProperties(db, row.database_id));\n}\n\n/** Quote a property id for embedding in a JSON path / index expression. */\nfunction jsonKeyLit(propId: string): string {\n return propId.replace(/'/g, \"''\");\n}\n\nexport function listRecords(\n db: DbDriver,\n databaseId: string,\n opts: { filter?: Record<string, unknown>; sort?: string; limit?: number } = {},\n): RecordRow[] {\n const props = listProperties(db, databaseId);\n\n // Coerce filters, then split: scalars push down to SQL (and earn an index),\n // arrays/objects/null are matched in JS afterward.\n const resolved =\n opts.filter && Object.keys(opts.filter).length\n ? resolveData(props, opts.filter).map(({ prop, value }) => ({\n prop,\n value: coerce(db, prop, value),\n }))\n : [];\n const sqlFilters = resolved.filter((f) => isSqlScalar(f.value));\n const jsFilters = resolved.filter((f) => !isSqlScalar(f.value));\n\n // Resolve sort: default created_hlc; \"-field\" = descending.\n let sortProp: PropertyRow | undefined;\n let sortDesc = false;\n if (opts.sort) {\n let key = opts.sort;\n if (key.startsWith(\"-\")) {\n sortDesc = true;\n key = key.slice(1);\n }\n if (key !== \"created\" && key !== \"created_hlc\") {\n let p = props.find((p) => p.id === key);\n if (!p) {\n const matches = props.filter((q) => q.name.toLowerCase() === key.toLowerCase());\n if (matches.length > 1)\n throw new MhError(\n \"ambiguous\",\n `sort field \"${key}\" matches ${matches.length} properties; use a property id`,\n );\n p = matches[0];\n }\n if (!p) throw new MhError(\"not_found\", `unknown sort field: ${key}`);\n sortProp = p;\n }\n }\n\n // The act of filtering/sorting on a field is the signal to (maybe) index it.\n for (const f of sqlFilters) maybeAutoIndex(db, databaseId, f.prop);\n if (sortProp) maybeAutoIndex(db, databaseId, sortProp);\n\n const where = [\"database_id = ?\", \"__deleted = 0\"];\n const args: SqlValue[] = [databaseId];\n for (const f of sqlFilters) {\n where.push(`data ->> '${jsonKeyLit(f.prop.id)}' = ?`);\n args.push(sqlFilterValue(f.value as string | number | boolean));\n }\n\n const manualOrder = opts.sort == null;\n const orderExpr = sortProp\n ? `data ->> '${jsonKeyLit(sortProp.id)}'`\n : \"created_hlc\";\n let sql =\n `SELECT id, database_id, data FROM records WHERE ${where.join(\" AND \")} ` +\n (manualOrder\n ? \"ORDER BY order_key IS NULL, order_key, id\"\n : `ORDER BY ${orderExpr} ${sortDesc ? \"DESC\" : \"ASC\"}, id`);\n\n // LIMIT only pushes down when no JS-side filtering remains.\n const pushLimit = opts.limit != null && jsFilters.length === 0;\n if (pushLimit) {\n sql += \" LIMIT ?\";\n args.push(opts.limit!);\n }\n\n let rows = (\n db.query(sql).all(...args) as { id: string; database_id: string; data: string }[]\n ).map((r) => rowToRecord(r, props));\n\n if (jsFilters.length) {\n rows = rows.filter((r) =>\n jsFilters.every(\n (f) => JSON.stringify(r.cells[f.prop.id] ?? null) === JSON.stringify(f.value),\n ),\n );\n if (opts.limit != null) rows = rows.slice(0, opts.limit);\n }\n return rows;\n}\n\nexport const moveRecord = grouped(function moveRecord(\n db: DbDriver,\n id: string,\n targetId: string,\n where: \"before\" | \"after\",\n): RecordRow {\n if (where !== \"before\" && where !== \"after\")\n throw new MhError(\"invalid_input\", `unknown move position: ${where}`);\n\n const src = db\n .query(\n \"SELECT id, database_id FROM records WHERE id = ? AND __deleted = 0\",\n )\n .get(id) as { id: string; database_id: string } | null;\n if (!src) throw new MhError(\"not_found\", `no such record: ${id}`);\n const target = db\n .query(\n \"SELECT id, database_id FROM records WHERE id = ? AND __deleted = 0\",\n )\n .get(targetId) as { id: string; database_id: string } | null;\n if (!target) throw new MhError(\"not_found\", `no such record: ${targetId}`);\n if (src.database_id !== target.database_id)\n throw new MhError(\"invalid_input\", \"cannot move a record across databases\");\n if (id === targetId) return getRecord(db, id)!;\n\n backfillRecordOrderKeys(db, src.database_id);\n\n let rows = orderedRecordRows(db, src.database_id).filter((r) => r.id !== id);\n let to = rows.findIndex((r) => r.id === targetId);\n if (to < 0) throw new MhError(\"not_found\", `no such target record: ${targetId}`);\n\n let left = where === \"before\" ? (rows[to - 1]?.order_key ?? null) : rows[to]!.order_key;\n let right = where === \"before\" ? rows[to]!.order_key : (rows[to + 1]?.order_key ?? null);\n if (left !== null && right !== null && left >= right) {\n rebalanceRecordOrderKeys(db, src.database_id);\n rows = orderedRecordRows(db, src.database_id).filter((r) => r.id !== id);\n to = rows.findIndex((r) => r.id === targetId);\n left = where === \"before\" ? (rows[to - 1]?.order_key ?? null) : rows[to]!.order_key;\n right = where === \"before\" ? rows[to]!.order_key : (rows[to + 1]?.order_key ?? null);\n }\n emit(db, \"records\", id, \"order_key\", keyBetween(left, right));\n return getRecord(db, id)!;\n});\n\nexport const updateRecord = grouped(function updateRecord(\n db: DbDriver,\n id: string,\n data: Record<string, unknown>,\n): RecordRow {\n const rec = db\n .query(\"SELECT id, database_id FROM records WHERE id = ? AND __deleted = 0\")\n .get(id) as { id: string; database_id: string } | null;\n if (!rec) throw new MhError(\"not_found\", `no such record: ${id}`);\n const resolved = resolveData(listProperties(db, rec.database_id), data);\n for (const { prop, value } of resolved)\n emit(db, \"records\", id, prop.id, coerce(db, prop, value));\n return getRecord(db, id)!;\n});\n\nexport const deleteRecord = grouped(function deleteRecord(db: DbDriver, id: string): boolean {\n const rec = db\n .query(\"SELECT id FROM records WHERE id = ? AND __deleted = 0\")\n .get(id) as { id: string } | null;\n if (!rec) return false;\n emit(db, \"records\", id, \"__deleted\", 1);\n return true;\n});\n",
115
- "import type { DbDriver } from \"./driver.ts\";\nimport { newId } from \"./ids.ts\";\nimport { emit, grouped } from \"./crdt.ts\";\nimport { MhError } from \"./errors.ts\";\nimport { addProperty, listProperties, type PropertyConfig } from \"./properties.ts\";\nimport { createRecord, listRecords } from \"./records.ts\";\nimport type { ColumnsOf } from \"./sqlcols.ts\";\n\nexport interface DatabaseRow {\n id: string;\n name: string;\n icon: string | null;\n created_hlc: string;\n}\n\nexport const DATABASE_COLS = [\"id\", \"name\", \"icon\", \"created_hlc\"] as const;\nconst _databaseCols: ColumnsOf<DatabaseRow, typeof DATABASE_COLS> = DATABASE_COLS;\nconst DATABASE_SELECT = DATABASE_COLS.join(\", \");\n\nexport const createDatabase = grouped(function createDatabase(\n db: DbDriver,\n opts: { name: string; icon?: string },\n): DatabaseRow {\n const id = newId(\"db\", opts.name);\n const first = emit(db, \"databases\", id, \"name\", opts.name);\n emit(db, \"databases\", id, \"created_hlc\", first.hlc);\n if (opts.icon !== undefined) emit(db, \"databases\", id, \"icon\", opts.icon);\n return getDatabase(db, id)!;\n});\n\nexport const updateDatabase = grouped(function updateDatabase(\n db: DbDriver,\n id: string,\n fields: { name?: string; icon?: string | null },\n): DatabaseRow {\n if (!getDatabase(db, id)) throw new MhError(\"not_found\", `no such database: ${id}`);\n if (fields.name !== undefined) emit(db, \"databases\", id, \"name\", fields.name);\n if (fields.icon !== undefined) emit(db, \"databases\", id, \"icon\", fields.icon);\n return getDatabase(db, id)!;\n});\n\n/**\n * Copy a database whole — name, icon, every property (type/config/position\n * preserved) and every record (in order, cells carried via an old→new property\n * id map, so duplicate property names copy losslessly). A relation column\n * pointing back at the *source* database is remapped to the copy so it stays\n * self-referential; relations to other databases keep their target.\n * `name`/`icon` override the defaults; the locale \"copy\" suffix is the\n * caller's job. All emits share one txn, so the copy syncs as one revision.\n */\nexport const duplicateDatabase = grouped(function duplicateDatabase(\n db: DbDriver,\n id: string,\n opts: { name?: string; icon?: string } = {},\n): DatabaseRow {\n const src = getDatabase(db, id);\n if (!src) throw new MhError(\"not_found\", `no such database: ${id}`);\n const dup = createDatabase(db, {\n name: opts.name ?? src.name,\n icon: (opts.icon ?? src.icon) ?? undefined,\n });\n const propIdMap = new Map<string, string>();\n for (const p of listProperties(db, id)) {\n const config: PropertyConfig | undefined =\n p.config?.database === id ? { ...p.config, database: dup.id } : (p.config ?? undefined);\n const np = addProperty(db, dup.id, { name: p.name, type: p.type, config, position: p.position });\n propIdMap.set(p.id, np.id);\n }\n for (const r of listRecords(db, id)) {\n const data: Record<string, unknown> = {};\n for (const [pid, v] of Object.entries(r.cells)) {\n const nid = propIdMap.get(pid);\n if (nid) data[nid] = v;\n }\n createRecord(db, dup.id, data);\n }\n return getDatabase(db, dup.id)!;\n});\n\nexport function getDatabase(db: DbDriver, id: string): DatabaseRow | null {\n return db\n .query(`SELECT ${DATABASE_SELECT} FROM databases WHERE id = ? AND __deleted = 0`)\n .get(id) as DatabaseRow | null;\n}\n\nexport function listDatabases(db: DbDriver): DatabaseRow[] {\n return db\n .query(`SELECT ${DATABASE_SELECT} FROM databases WHERE __deleted = 0 ORDER BY created_hlc`)\n .all() as DatabaseRow[];\n}\n\nexport const deleteDatabase = grouped(function deleteDatabase(db: DbDriver, id: string): boolean {\n if (!getDatabase(db, id)) return false;\n emit(db, \"databases\", id, \"__deleted\", 1);\n\n // Cascade so nothing is left dangling (the same fixes repairHub would make off\n // the database tombstone, applied eagerly here by the deleting node):\n // - properties/records are meaningless without the database -> tombstone;\n // - documents keep an optional scope link -> detach so their content survives.\n const tombstone = (table: string) => {\n for (const r of liveChildren(db, table, \"database_id\", id))\n emit(db, table, r, \"__deleted\", 1);\n };\n tombstone(\"properties\");\n tombstone(\"records\");\n for (const d of liveChildren(db, \"documents\", \"database_id\", id))\n emit(db, \"documents\", d, \"database_id\", null);\n\n // Drop the \"current database\" pointer if it referenced this one (raw query to\n // avoid a context.ts <-> databases.ts import cycle; read-side also self-heals).\n db.query(\"DELETE FROM meta WHERE key = 'current_db' AND value = ?\").run(id);\n return true;\n});\n\n/** Ids of live rows in `table` whose `col` references `parentId`. */\nfunction liveChildren(db: DbDriver, table: string, col: string, parentId: string): string[] {\n return (\n db\n .query(`SELECT id FROM ${table} WHERE ${col} = ? AND __deleted = 0`)\n .all(parentId) as { id: string }[]\n ).map((r) => r.id);\n}\n",
116
- "import type { DbDriver } from \"./driver.ts\";\nimport { newId } from \"./ids.ts\";\nimport { emit, grouped } from \"./crdt.ts\";\nimport { getDatabase } from \"./databases.ts\";\nimport { ensurePropIndex } from \"./indexing.ts\";\nimport { MhError } from \"./errors.ts\";\nimport type { ColumnsOf } from \"./sqlcols.ts\";\n\nexport type PropType =\n | \"text\"\n | \"number\"\n | \"checkbox\"\n | \"select\"\n | \"multi_select\"\n | \"date\"\n | \"relation\"\n | \"url\";\n\nexport const PROP_TYPES: ReadonlySet<string> = new Set([\n \"text\",\n \"number\",\n \"checkbox\",\n \"select\",\n \"multi_select\",\n \"date\",\n \"relation\",\n \"url\",\n]);\n\nexport interface PropertyConfig {\n options?: string[]; // select / multi_select\n database?: string; // relation target database id\n indexed?: boolean; // hot query key — materialize an index for this field\n width?: number; // table column width in px (UI metadata, replicated via config)\n}\n\nexport interface PropertyRow {\n id: string;\n database_id: string;\n name: string;\n type: PropType;\n config: PropertyConfig | null;\n position: number;\n}\n\n// SQL returns config as a JSON string; rows are parsed into PropertyRow after.\nexport const PROPERTY_COLS = [\"id\", \"database_id\", \"name\", \"type\", \"config\", \"position\"] as const;\nconst _propertyCols: ColumnsOf<PropertyRow, typeof PROPERTY_COLS> = PROPERTY_COLS;\nconst PROPERTY_SELECT = PROPERTY_COLS.join(\", \");\n\nfunction validateConfig(type: PropType, config: PropertyConfig | undefined): void {\n if (type === \"select\" || type === \"multi_select\") {\n const opts = config?.options;\n if (!Array.isArray(opts) || opts.length === 0 || !opts.every((o) => typeof o === \"string\"))\n throw new MhError(\"invalid_input\", `${type} requires config.options: string[]`);\n }\n if (type === \"relation\") {\n if (typeof config?.database !== \"string\")\n throw new MhError(\"invalid_input\", \"relation requires config.database (target database id)\");\n }\n}\n\nfunction nextPosition(db: DbDriver, databaseId: string): number {\n const row = db\n .query(\n \"SELECT MAX(position) AS m FROM properties WHERE database_id = ? AND __deleted = 0\",\n )\n .get(databaseId) as { m: number | null };\n return (row.m ?? 0) + 1;\n}\n\nexport const addProperty = grouped(function addProperty(\n db: DbDriver,\n databaseId: string,\n opts: {\n name: string;\n type: PropType;\n config?: PropertyConfig;\n position?: number;\n // Low-level hint for built-in features that know a field is a hot query\n // key (e.g. an IM conversation id). Not surfaced to CLI users — ad-hoc\n // fields get indexed automatically from query usage (see indexing.ts).\n indexed?: boolean;\n },\n): PropertyRow {\n if (!getDatabase(db, databaseId)) throw new MhError(\"not_found\", `no such database: ${databaseId}`);\n if (!PROP_TYPES.has(opts.type)) throw new MhError(\"invalid_input\", `unknown property type: ${opts.type}`);\n validateConfig(opts.type, opts.config);\n\n // Persist the indexed hint in config so it replicates to peers and survives\n // snapshot/restore (the index itself is derived, not in the oplog).\n const config: PropertyConfig | null = opts.indexed\n ? { ...(opts.config ?? {}), indexed: true }\n : (opts.config ?? null);\n\n const id = newId(\"prop\", opts.name);\n emit(db, \"properties\", id, \"database_id\", databaseId);\n emit(db, \"properties\", id, \"name\", opts.name);\n emit(db, \"properties\", id, \"type\", opts.type);\n emit(db, \"properties\", id, \"config\", config);\n emit(db, \"properties\", id, \"position\", opts.position ?? nextPosition(db, databaseId));\n\n // Relations are almost always query keys; index eagerly. Honor explicit hint.\n if (opts.type === \"relation\" || opts.indexed === true)\n ensurePropIndex(db, databaseId, id);\n return getProperty(db, id)!;\n});\n\nexport function getProperty(db: DbDriver, id: string): PropertyRow | null {\n const row = db\n .query(`SELECT ${PROPERTY_SELECT} FROM properties WHERE id = ? AND __deleted = 0`)\n .get(id) as (Omit<PropertyRow, \"config\"> & { config: string | null }) | null;\n if (!row) return null;\n return { ...row, config: row.config ? (JSON.parse(row.config) as PropertyConfig) : null };\n}\n\nexport function listProperties(db: DbDriver, databaseId: string): PropertyRow[] {\n const rows = db\n .query(\n `SELECT ${PROPERTY_SELECT} FROM properties WHERE database_id = ? AND __deleted = 0 ORDER BY position`,\n )\n .all(databaseId) as (Omit<PropertyRow, \"config\"> & { config: string | null })[];\n return rows.map((r) => ({\n ...r,\n config: r.config ? (JSON.parse(r.config) as PropertyConfig) : null,\n }));\n}\n\nexport const updateProperty = grouped(function updateProperty(\n db: DbDriver,\n id: string,\n fields: { name?: string; type?: PropType; config?: PropertyConfig; position?: number },\n): PropertyRow {\n const cur = getProperty(db, id);\n if (!cur) throw new MhError(\"not_found\", `no such property: ${id}`);\n\n const typeChanged = fields.type !== undefined && fields.type !== cur.type;\n if (fields.type !== undefined && !PROP_TYPES.has(fields.type))\n throw new MhError(\"invalid_input\", `unknown property type: ${fields.type}`);\n\n // Validate config against whichever type will be in effect.\n const effectiveType = fields.type ?? cur.type;\n if (fields.config !== undefined) validateConfig(effectiveType, fields.config);\n else if (typeChanged) validateConfig(fields.type!, undefined);\n\n if (fields.name !== undefined) emit(db, \"properties\", id, \"name\", fields.name);\n if (fields.type !== undefined) emit(db, \"properties\", id, \"type\", fields.type);\n if (fields.config !== undefined) emit(db, \"properties\", id, \"config\", fields.config);\n if (fields.position !== undefined) emit(db, \"properties\", id, \"position\", fields.position);\n\n // A type change invalidates existing cell values (a number may not be a valid\n // select option, etc.), so clear the cells that currently hold a value for\n // this property. The field is keyed by property id in the records data JSON.\n if (typeChanged) {\n const rows = db\n .query(\n \"SELECT id FROM records WHERE database_id = ? AND __deleted = 0 AND data ->> ? IS NOT NULL\",\n )\n .all(cur.database_id, id) as { id: string }[];\n for (const r of rows) emit(db, \"records\", r.id, id, null);\n }\n return getProperty(db, id)!;\n});\n\n// Persist a column's display width. Merges into the existing config server-side\n// so concurrent callers can't strip sibling fields (e.g. a select's `options`),\n// and clamps to a sane range. The width replicates with `config` via the oplog.\nexport function setPropertyWidth(db: DbDriver, id: string, width: number): PropertyRow {\n const cur = getProperty(db, id);\n if (!cur) throw new MhError(\"not_found\", `no such property: ${id}`);\n if (!Number.isFinite(width)) throw new MhError(\"invalid_input\", \"width must be a finite number\");\n const w = Math.max(80, Math.min(2000, Math.round(width)));\n return updateProperty(db, id, { config: { ...(cur.config ?? {}), width: w } });\n}\n\nexport const removeProperty = grouped(function removeProperty(db: DbDriver, id: string): boolean {\n const prop = getProperty(db, id);\n if (!prop) return false;\n emit(db, \"properties\", id, \"__deleted\", 1);\n // Clear this property's now-orphaned cells (keyed by property id in the records\n // data JSON) so no dead cell data lingers — same cleanup repairHub would do off\n // the property tombstone. emit(undefined) materializes to json_remove.\n const rows = db\n .query(\n \"SELECT id FROM records WHERE database_id = ? AND __deleted = 0 AND data ->> ? IS NOT NULL\",\n )\n .all(prop.database_id, id) as { id: string }[];\n for (const r of rows) emit(db, \"records\", r.id, id, undefined);\n return true;\n});\n",
117
- "import type { DbDriver } from \"./driver.ts\";\nimport type { PropertyRow } from \"./properties.ts\";\n\n// Records of all databases share one `records` table; indexes are partial on\n// database_id so they stay small and per-collection. A field is indexed only\n// when it's actually used to filter/sort AND the collection is large enough to\n// matter — small tables scan instantly and don't earn the write cost.\nconst AUTO_INDEX_ROW_THRESHOLD = 2000;\n\n/** SQLite identifiers we build are slug+suffix ids; keep only safe chars. */\nfunction sanitize(s: string): string {\n return s.replace(/[^a-zA-Z0-9_]/g, \"_\");\n}\n\n/** Escape a string for embedding as a single-quoted SQL literal. */\nfunction lit(s: string): string {\n return s.replace(/'/g, \"''\");\n}\n\nfunction indexName(databaseId: string, propId: string): string {\n return `idx_rec_${sanitize(databaseId)}_${sanitize(propId)}`;\n}\n\nexport function hasIndex(db: DbDriver, databaseId: string, propId: string): boolean {\n const row = db\n .query(\"SELECT 1 AS ok FROM sqlite_master WHERE type = 'index' AND name = ?\")\n .get(indexName(databaseId, propId)) as { ok: number } | null;\n return row != null;\n}\n\n/**\n * Create an expression index on `data ->> '<propId>'` (with created_hlc as the\n * sort tail), partial on this database. Idempotent. The expression matches\n * exactly what listRecords emits, so the optimizer uses it.\n */\nexport function ensurePropIndex(db: DbDriver, databaseId: string, propId: string): void {\n const name = indexName(databaseId, propId);\n db.exec(\n `CREATE INDEX IF NOT EXISTS \"${name}\" ON records (data ->> '${lit(propId)}', created_hlc) ` +\n `WHERE database_id = '${lit(databaseId)}' AND __deleted = 0`,\n );\n}\n\n/**\n * Ensure an index for a field that a query filters/sorts on — but only when it\n * will pay off. relation fields are almost always query keys (cheap, index\n * eagerly); other fields wait until the collection crosses the row threshold.\n */\nexport function maybeAutoIndex(db: DbDriver, databaseId: string, prop: PropertyRow): void {\n if (hasIndex(db, databaseId, prop.id)) return;\n if (prop.type !== \"relation\") {\n const row = db\n .query(\n \"SELECT COUNT(*) AS c FROM records WHERE database_id = ? AND __deleted = 0\",\n )\n .get(databaseId) as { c: number };\n if (row.c < AUTO_INDEX_ROW_THRESHOLD) return;\n }\n ensurePropIndex(db, databaseId, prop.id);\n}\n",
118
- "import type { DbDriver } from \"./driver.ts\";\nimport { idKind, type Kind } from \"./ids.ts\";\nimport { MhError } from \"./errors.ts\";\n\n/** Kinds reachable through the public reference resolver. `blk` is internal. */\nexport type PublicKind = \"db\" | \"prop\" | \"rec\" | \"doc\";\n\nexport interface Candidate {\n kind: PublicKind;\n id: string;\n label: string;\n}\n\ninterface KindSpec {\n table: string;\n nameCol: string | null; // column matched by name/title (null = no name match)\n scoped: boolean; // filtered by database_id when a scope is supplied\n noun: string; // human label for \"no such <noun>\"\n}\n\nconst SPECS: Record<PublicKind, KindSpec> = {\n db: { table: \"databases\", nameCol: \"name\", scoped: false, noun: \"database\" },\n prop: { table: \"properties\", nameCol: \"name\", scoped: true, noun: \"property\" },\n rec: { table: \"records\", nameCol: null, scoped: true, noun: \"record\" },\n doc: { table: \"documents\", nameCol: \"title\", scoped: true, noun: \"document\" },\n};\n\nconst PUBLIC_KINDS: PublicKind[] = [\"db\", \"prop\", \"rec\", \"doc\"];\n\nfunction isPublic(k: Kind | null): k is PublicKind {\n return k !== null && k !== \"blk\";\n}\n\ntype SqlValue = string;\n\n// '{' (0x7B) is the first code point above every char an id can contain\n// ([a-z0-9_-], max 'z' = 0x7A), so [p, p+'{') is exactly the set of ids with\n// prefix p under BINARY collation — a primary-key range scan, no LIKE wildcards.\nconst HI = \"{\";\n\n/** The first text property's id for a database — a record's de-facto title. */\nfunction titlePropId(db: DbDriver, databaseId: string): string | null {\n const row = db\n .query(\n \"SELECT id FROM properties WHERE database_id = ? AND type = 'text' AND __deleted = 0 ORDER BY position LIMIT 1\",\n )\n .get(databaseId) as { id: string } | null;\n return row?.id ?? null;\n}\n\n/** All live rows of one kind matching `ref` by id-prefix or name. */\nfunction queryKind(\n db: DbDriver,\n kind: PublicKind,\n ref: string,\n databaseId?: string,\n): Candidate[] {\n const spec = SPECS[kind];\n // Records have no name column; when scoped to a database, match/show the\n // first text property's value (its title) so \"Alice Chen\" resolves.\n let nameCol = spec.nameCol;\n if (kind === \"rec\" && databaseId) {\n const tp = titlePropId(db, databaseId);\n if (tp) nameCol = `data ->> '${tp.replace(/'/g, \"''\")}'`;\n }\n const labelExpr = nameCol ?? \"''\"; // kinds without a name show id only\n const conds: string[] = [];\n const args: SqlValue[] = [];\n\n // Raw prefix (covers an exact full id, and a typed prefix like \"rec_log\").\n conds.push(\"(id >= ? AND id < ?)\");\n args.push(ref, ref + HI);\n // Typed slug prefix: lets a bare slug \"login-bug\" hit \"rec_login-bug-…\".\n const typed = `${kind}_${ref}`;\n conds.push(\"(id >= ? AND id < ?)\");\n args.push(typed, typed + HI);\n // Name/title equality (case-insensitive), where the kind has a name.\n if (nameCol) {\n conds.push(`lower(${nameCol}) = lower(?)`);\n args.push(ref);\n }\n\n let sql = `SELECT id, ${labelExpr} AS label FROM ${spec.table} WHERE __deleted = 0 AND (${conds.join(\" OR \")})`;\n if (spec.scoped && databaseId) {\n sql += \" AND database_id = ?\";\n args.push(databaseId);\n }\n\n const rows = db.query(sql).all(...args) as { id: string; label: string | null }[];\n return rows.map((r) => ({ kind, id: r.id, label: r.label ?? \"\" }));\n}\n\n/**\n * Every entity matching `ref`. Kind scope: an explicit `opts.kind` (the command\n * knows what it wants) wins; otherwise a typed prefix on `ref` dispatches; else\n * all public kinds are searched (the generic `mh get`). `databaseId` narrows\n * rec/doc/prop to one collection.\n */\nexport function resolveCandidates(\n db: DbDriver,\n ref: string,\n opts: { kind?: PublicKind; databaseId?: string } = {},\n): Candidate[] {\n const kinds: PublicKind[] = opts.kind\n ? [opts.kind]\n : isPublic(idKind(ref))\n ? [idKind(ref) as PublicKind]\n : PUBLIC_KINDS;\n\n const out: Candidate[] = [];\n const seen = new Set<string>();\n for (const k of kinds) {\n for (const c of queryKind(db, k, ref, opts.databaseId)) {\n if (seen.has(c.id)) continue;\n seen.add(c.id);\n out.push(c);\n }\n }\n return out;\n}\n\nfunction fmt(cands: Candidate[]): string {\n return cands\n .map((c) => ` ${c.id}${c.label ? \" \" + c.label : \"\"} (${c.kind})`)\n .join(\"\\n\");\n}\n\n/**\n * Resolve `ref` to one entity. An exact full-id match always wins (the full id\n * keeps working). Otherwise a single candidate is returned; zero throws\n * \"no such …\"; multiple throws a git-style ambiguity list.\n */\nexport function resolveEntity(\n db: DbDriver,\n ref: string,\n opts: { kind?: PublicKind; databaseId?: string } = {},\n): Candidate {\n const cands = resolveCandidates(db, ref, opts);\n const exact = cands.filter((c) => c.id === ref);\n if (exact.length === 1) return exact[0]!;\n if (exact.length === 0 && cands.length === 1) return cands[0]!;\n\n if (cands.length === 0) {\n const noun = opts.kind ? SPECS[opts.kind].noun : \"item\";\n throw new MhError(\"not_found\", `no such ${noun}: ${ref}`);\n }\n const shown = exact.length > 1 ? exact : cands;\n throw new MhError(\n \"ambiguous\",\n `ambiguous \"${ref}\" — ${shown.length} matches:\\n${fmt(shown)}\\n add more characters.`,\n );\n}\n\n/** Resolve `ref` to one concrete row id. See {@link resolveEntity}. */\nexport function resolveRef(\n db: DbDriver,\n ref: string,\n opts: { kind?: PublicKind; databaseId?: string } = {},\n): string {\n return resolveEntity(db, ref, opts).id;\n}\n",
119
- "// Fractional indexing: compact string keys that sort lexicographically, so a new\n// key can always be produced strictly between two existing ones. Used to order\n// document blocks; concurrent inserts at the same slot are tie-broken by block id.\n//\n// Alphabet is base62 with ASCII order matching digit order (0-9 < A-Z < a-z), so\n// SQLite's default BINARY collation orders keys correctly with plain `ORDER BY`.\n\nconst DIGITS = \"0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz\";\n\n/**\n * A digit string strictly between `a` and `b`. `a` is a digit string (possibly\n * \"\" = start) and `b` is a digit string or null (= end), with `a < b`. Neither\n * may end in the zero digit; this invariant is preserved by construction.\n */\nfunction midpoint(a: string, b: string | null): string {\n const zero = DIGITS[0]!;\n if (b !== null && a >= b) throw new Error(`fracdex: ${a} >= ${b}`);\n if (a.endsWith(zero) || (b !== null && b.endsWith(zero)))\n throw new Error(`fracdex: trailing zero in ${a}/${b}`);\n\n if (b !== null) {\n // Strip the common prefix, padding `a` with implicit zeros as we descend.\n let n = 0;\n while ((a[n] ?? zero) === b[n]) n++;\n if (n > 0) return b.slice(0, n) + midpoint(a.slice(n), b.slice(n));\n }\n\n const da = a === \"\" ? 0 : DIGITS.indexOf(a[0]!);\n const db = b === null ? DIGITS.length : DIGITS.indexOf(b[0]!);\n if (db - da > 1) {\n const mid = Math.round(0.5 * (da + db));\n return DIGITS[mid]!;\n }\n // First digits are consecutive (or equal at the boundary): descend.\n if (b !== null && b.length > 1) return b.slice(0, 1);\n return DIGITS[da]! + midpoint(a.slice(1), null);\n}\n\n/** A key strictly between `a` and `b` (lexicographically). null = open boundary. */\nexport function keyBetween(a: string | null, b: string | null): string {\n return midpoint(a ?? \"\", b);\n}\n\n/** `n` distinct keys in ascending order, all strictly between `a` and `b`. */\nexport function keysBetween(\n a: string | null,\n b: string | null,\n n: number,\n): string[] {\n if (n <= 0) return [];\n if (n === 1) return [keyBetween(a, b)];\n\n if (b === null) {\n let prev = keyBetween(a, null);\n const out = [prev];\n for (let i = 1; i < n; i++) {\n prev = keyBetween(prev, null);\n out.push(prev);\n }\n return out;\n }\n if (a === null) {\n let next = keyBetween(null, b);\n const out = [next];\n for (let i = 1; i < n; i++) {\n next = keyBetween(null, next);\n out.unshift(next);\n }\n return out;\n }\n\n // Both bounded: bisect so key lengths grow logarithmically.\n const mid = Math.floor(n / 2);\n const c = keyBetween(a, b);\n return [...keysBetween(a, c, mid), c, ...keysBetween(c, b, n - mid - 1)];\n}\n",
120
- "import type { DbDriver } from \"./driver.ts\";\nimport { newId } from \"./ids.ts\";\nimport { emit, grouped } from \"./crdt.ts\";\nimport { parseDocBlocks, serializeDocBlocks, reconcile, type DocBlock } from \"./blocks.ts\";\nimport { keyBetween, keysBetween } from \"./fracdex.ts\";\nimport { MhError } from \"./errors.ts\";\nimport type { ColumnsOf } from \"./sqlcols.ts\";\n\nexport interface DocumentRow {\n id: string;\n title: string;\n body: string | null;\n database_id: string | null;\n parent_id: string | null;\n created_hlc: string;\n order_key: string | null;\n}\n\nexport type DocumentSummary = Omit<DocumentRow, \"body\">;\n\nexport const DOCUMENT_COLS = [\n \"id\", \"title\", \"body\", \"database_id\", \"parent_id\", \"created_hlc\", \"order_key\",\n] as const;\nconst _documentCols: ColumnsOf<DocumentRow, typeof DOCUMENT_COLS> = DOCUMENT_COLS;\nconst DOCUMENT_SELECT = DOCUMENT_COLS.join(\", \");\n\nconst DOC_SUMMARY_COLS = [\n \"id\", \"title\", \"database_id\", \"parent_id\", \"created_hlc\", \"order_key\",\n] as const;\nconst _docSummaryCols: ColumnsOf<DocumentSummary, typeof DOC_SUMMARY_COLS> = DOC_SUMMARY_COLS;\nconst DOC_SUMMARY_SELECT = DOC_SUMMARY_COLS.join(\", \");\n\ninterface BlockRow {\n id: string;\n text: string;\n order_key: string;\n blank_after: number;\n}\n\n// ---- block helpers ---------------------------------------------------------\n\nfunction liveBlocks(db: DbDriver, docId: string): BlockRow[] {\n return db\n .query(\n \"SELECT id, text, order_key, blank_after FROM doc_blocks WHERE doc_id = ? AND __deleted = 0 ORDER BY order_key, id\",\n )\n .all(docId) as BlockRow[];\n}\n\nfunction makeBlockId(text: string): string {\n return newId(\"blk\", text.split(\"\\n\", 1)[0] ?? \"\");\n}\n\n/** Emit a new block's fields; text last so the final body recompute is complete.\n * blank_after is only emitted when non-zero (0 is the column default). */\nfunction emitBlock(\n db: DbDriver,\n docId: string,\n fields: { text: string; order_key: string; blankAfter: number },\n): void {\n const id = makeBlockId(fields.text);\n emit(db, \"doc_blocks\", id, \"doc_id\", docId);\n emit(db, \"doc_blocks\", id, \"order_key\", fields.order_key);\n if (fields.blankAfter) emit(db, \"doc_blocks\", id, \"blank_after\", fields.blankAfter);\n emit(db, \"doc_blocks\", id, \"text\", fields.text);\n}\n\nfunction insertBlocks(\n db: DbDriver,\n docId: string,\n blocks: readonly DocBlock[],\n after: string | null,\n before: string | null,\n): void {\n const keys = keysBetween(after, before, blocks.length);\n blocks.forEach((b, i) =>\n emitBlock(db, docId, { text: b.text, order_key: keys[i]!, blankAfter: b.blankAfter }),\n );\n}\n\n/** Lazily migrate a legacy body-only document into blocks (idempotent). */\nfunction ensureBlocks(db: DbDriver, docId: string): void {\n if (db.query(\"SELECT 1 AS x FROM doc_blocks WHERE doc_id = ? LIMIT 1\").get(docId))\n return;\n const row = db.query(\"SELECT body FROM documents WHERE id = ?\").get(docId) as\n | { body: string | null }\n | null;\n const blocks = parseDocBlocks(row?.body ?? \"\");\n if (blocks.length) insertBlocks(db, docId, blocks, null, null);\n}\n\n/** Diff a full new body against current blocks; keep unchanged, delete/insert the rest. */\nfunction reconcileBody(db: DbDriver, docId: string, body: string): void {\n const old = liveBlocks(db, docId);\n const next = parseDocBlocks(body);\n const plan = reconcile(\n old.map((b) => b.text),\n next.map((b) => b.text),\n );\n\n for (const oi of plan.deleted) emit(db, \"doc_blocks\", old[oi]!.id, \"__deleted\", 1);\n\n const { items } = plan;\n let i = 0;\n while (i < items.length) {\n const it = items[i]!;\n if (\"keep\" in it) {\n // Text unchanged: only the surrounding blank-line count may have shifted.\n const oldB = old[it.keep]!;\n const want = next[i]!.blankAfter;\n if ((oldB.blank_after ?? 0) !== want) emit(db, \"doc_blocks\", oldB.id, \"blank_after\", want);\n i++;\n continue;\n }\n let j = i;\n while (j < items.length && \"insert\" in items[j]!) j++;\n const left = i > 0 ? old[(items[i - 1] as { keep: number }).keep]!.order_key : null;\n const right = j < items.length ? old[(items[j] as { keep: number }).keep]!.order_key : null;\n insertBlocks(db, docId, next.slice(i, j), left, right);\n i = j;\n }\n}\n\n/** Max HLC over a document's own register and all its blocks — a read/edit token. */\nexport function documentVersion(db: DbDriver, id: string): string {\n const row = db\n .query(\n `SELECT MAX(hlc) AS h FROM crdt_changes\n WHERE (dataset = 'documents' AND row_id = ?)\n OR (dataset = 'doc_blocks' AND row_id IN (SELECT id FROM doc_blocks WHERE doc_id = ?))`,\n )\n .get(id, id) as { h: string | null };\n return row.h ?? \"\";\n}\n\n// ---- public API ------------------------------------------------------------\n\nexport const createDocument = grouped(function createDocument(\n db: DbDriver,\n opts: { title: string; body?: string; database_id?: string; parent_id?: string },\n): DocumentRow {\n const id = newId(\"doc\", opts.title);\n const first = emit(db, \"documents\", id, \"title\", opts.title);\n emit(db, \"documents\", id, \"created_hlc\", first.hlc);\n if (opts.database_id !== undefined) emit(db, \"documents\", id, \"database_id\", opts.database_id);\n if (opts.parent_id !== undefined) emit(db, \"documents\", id, \"parent_id\", opts.parent_id);\n placeInSiblings(db, id, opts.parent_id ?? null); // append to the end of its sibling group\n if (opts.body !== undefined) {\n const blocks = parseDocBlocks(opts.body);\n if (blocks.length) insertBlocks(db, id, blocks, null, null);\n }\n return getDocument(db, id)!;\n});\n\nexport function getDocument(db: DbDriver, id: string): DocumentRow | null {\n return db\n .query(`SELECT ${DOCUMENT_SELECT} FROM documents WHERE id = ? AND __deleted = 0`)\n .get(id) as DocumentRow | null;\n}\n\n/** Display order among siblings: explicit order_key first, NULLs fall back to\n * creation time so an un-backfilled tree still renders in its historical order. */\nconst ORDER_BY = \"ORDER BY order_key IS NULL, order_key, created_hlc, id\";\n\nexport function listDocuments(\n db: DbDriver,\n opts: { database_id?: string; parent_id?: string } = {},\n): DocumentSummary[] {\n const cols = `SELECT ${DOC_SUMMARY_SELECT} FROM documents WHERE __deleted = 0`;\n if (opts.parent_id !== undefined)\n return db\n .query(`${cols} AND parent_id = ? ${ORDER_BY}`)\n .all(opts.parent_id) as DocumentSummary[];\n if (opts.database_id)\n return db\n .query(`${cols} AND database_id = ? ${ORDER_BY}`)\n .all(opts.database_id) as DocumentSummary[];\n return db.query(`${cols} ${ORDER_BY}`).all() as DocumentSummary[];\n}\n\n// ---- sibling ordering (fractional index scoped per parent_id) --------------\n\ninterface SiblingRow {\n id: string;\n order_key: string | null;\n}\n\n/** WHERE fragment + args selecting siblings under `parentId` (null = top level). */\nfunction siblingWhere(parentId: string | null): { clause: string; args: string[] } {\n return parentId === null\n ? { clause: \"parent_id IS NULL\", args: [] }\n : { clause: \"parent_id = ?\", args: [parentId] };\n}\n\nfunction canEmitOrderKeys(db: DbDriver): boolean {\n return tableExists(db, \"meta\") && tableExists(db, \"crdt_changes\");\n}\n\nfunction tableExists(db: DbDriver, table: string): boolean {\n return (\n db\n .query(\"SELECT 1 AS ok FROM sqlite_master WHERE type = 'table' AND name = ?\")\n .get(table) != null\n );\n}\n\n/** Greatest order_key among siblings (optionally ignoring one row being placed). */\nfunction lastSiblingOrderKey(\n db: DbDriver,\n parentId: string | null,\n excludeId?: string,\n): string | null {\n const w = siblingWhere(parentId);\n const exclude = excludeId ? \" AND id <> ?\" : \"\";\n const row = db\n .query(\n `SELECT order_key FROM documents WHERE ${w.clause}${exclude}\n AND __deleted = 0 AND order_key IS NOT NULL\n ORDER BY order_key DESC, id DESC LIMIT 1`,\n )\n .get(...w.args, ...(excludeId ? [excludeId] : [])) as { order_key: string | null } | null;\n return row?.order_key ?? null;\n}\n\nfunction orderedSiblings(db: DbDriver, parentId: string | null): SiblingRow[] {\n const w = siblingWhere(parentId);\n return db\n .query(`SELECT id, order_key FROM documents WHERE ${w.clause} AND __deleted = 0 ${ORDER_BY}`)\n .all(...w.args) as SiblingRow[];\n}\n\n/** Re-space every sibling's key evenly — escape hatch when fractional keys collide. */\nfunction rebalanceSiblings(db: DbDriver, parentId: string | null): void {\n const rows = orderedSiblings(db, parentId);\n const keys = keysBetween(null, null, rows.length);\n rows.forEach((row, i) => {\n if (row.order_key !== keys[i]) emit(db, \"documents\", row.id, \"order_key\", keys[i]!);\n });\n}\n\n/** Assign keys to siblings that still lack one, appending in creation order. */\nfunction backfillSiblings(db: DbDriver, parentId: string | null): void {\n const emitChange = canEmitOrderKeys(db);\n const w = siblingWhere(parentId);\n const missing = db\n .query(\n `SELECT id FROM documents WHERE ${w.clause} AND __deleted = 0 AND order_key IS NULL\n ORDER BY created_hlc, id`,\n )\n .all(...w.args) as { id: string }[];\n if (!missing.length) return;\n const keys = keysBetween(lastSiblingOrderKey(db, parentId), null, missing.length);\n missing.forEach((row, i) => {\n if (emitChange) emit(db, \"documents\", row.id, \"order_key\", keys[i]!);\n else db.query(\"UPDATE documents SET order_key = ? WHERE id = ?\").run(keys[i]!, row.id);\n });\n}\n\n/** Backfill order_key for every parent group that has un-keyed live documents. */\nexport const backfillDocumentOrderKeys = grouped(function backfillDocumentOrderKeys(\n db: DbDriver,\n): void {\n const parents = db\n .query(\"SELECT DISTINCT parent_id FROM documents WHERE __deleted = 0 AND order_key IS NULL\")\n .all() as { parent_id: string | null }[];\n for (const p of parents) backfillSiblings(db, p.parent_id);\n});\n\n/**\n * Place `id` under `parentId` at the given position — the single point where a\n * document's parent_id and order_key are kept consistent (reparent always\n * implies a new sibling scope). No `anchor` appends to the end of the group.\n */\nfunction placeInSiblings(\n db: DbDriver,\n id: string,\n parentId: string | null,\n anchor?: { targetId: string; where: \"before\" | \"after\" },\n): void {\n // Walk the prospective ancestor chain; reaching `id` would form a cycle and\n // make the tree unrenderable. Guarded here so every caller is protected.\n let cur: string | null | undefined = parentId;\n while (cur) {\n if (cur === id) throw new MhError(\"invalid_input\", `cannot set parent_id: would create a cycle (${id})`);\n cur = getDocument(db, cur)?.parent_id ?? null;\n }\n\n const current = getDocument(db, id);\n if (current && (current.parent_id ?? null) !== parentId)\n emit(db, \"documents\", id, \"parent_id\", parentId);\n\n let key: string;\n if (!anchor) {\n key = keyBetween(lastSiblingOrderKey(db, parentId, id), null);\n } else {\n backfillSiblings(db, parentId); // ensure neighbors carry comparable keys\n const neighbors = (): [string | null, string | null] => {\n const rows = orderedSiblings(db, parentId).filter((r) => r.id !== id);\n const to = rows.findIndex((r) => r.id === anchor.targetId);\n if (to < 0) throw new MhError(\"not_found\", `no such target document: ${anchor.targetId}`);\n return anchor.where === \"before\"\n ? [rows[to - 1]?.order_key ?? null, rows[to]!.order_key]\n : [rows[to]!.order_key, rows[to + 1]?.order_key ?? null];\n };\n let [left, right] = neighbors();\n if (left !== null && right !== null && left >= right) {\n rebalanceSiblings(db, parentId);\n [left, right] = neighbors();\n }\n key = keyBetween(left, right);\n }\n emit(db, \"documents\", id, \"order_key\", key);\n}\n\n/**\n * Move a document next to / into another, atomically updating both its parent\n * and its order_key. `into` nests it as the last child of `targetId`;\n * `before`/`after` re-orders (and reparents if needed) among the target's siblings.\n */\nexport const moveDocument = grouped(function moveDocument(\n db: DbDriver,\n id: string,\n targetId: string,\n where: \"before\" | \"after\" | \"into\",\n): DocumentRow {\n const src = getDocument(db, id);\n if (!src) throw new MhError(\"not_found\", `no such document: ${id}`);\n if (id === targetId) return src;\n const target = getDocument(db, targetId);\n if (!target) throw new MhError(\"not_found\", `no such target document: ${targetId}`);\n\n if (where === \"into\") placeInSiblings(db, id, targetId);\n else placeInSiblings(db, id, target.parent_id, { targetId, where });\n return getDocument(db, id)!;\n});\n\n/**\n * Copy a document — title, every block (verbatim, with fresh block ids so the\n * copy edits independently) and its `database_id`/`parent_id`. The copy lands\n * right after its source in the same sibling scope. Blocks are cloned at the\n * block level (not via a markdown round-trip) so empty list items / blank-line\n * runs survive losslessly. `title`/`parentId` override the defaults; the locale\n * \"copy\" suffix is the caller's job. `created_hlc` is the copy's own birth time.\n */\nexport const duplicateDocument = grouped(function duplicateDocument(\n db: DbDriver,\n id: string,\n opts: { title?: string; parentId?: string | null } = {},\n): DocumentRow {\n const src = getDocument(db, id);\n if (!src) throw new MhError(\"not_found\", `no such document: ${id}`);\n ensureBlocks(db, id);\n const blocks = liveBlocks(db, id);\n const parentId = opts.parentId !== undefined ? opts.parentId : src.parent_id;\n const dup = createDocument(db, {\n title: opts.title ?? src.title,\n database_id: src.database_id ?? undefined,\n parent_id: parentId ?? undefined,\n });\n if (blocks.length)\n insertBlocks(\n db,\n dup.id,\n blocks.map((b) => ({ text: b.text, blankAfter: b.blank_after })),\n null,\n null,\n );\n // Sit the copy right after its source when they share a sibling scope.\n if (parentId === src.parent_id) moveDocument(db, dup.id, src.id, \"after\");\n return getDocument(db, dup.id)!;\n});\n\nexport const updateDocument = grouped(function updateDocument(\n db: DbDriver,\n id: string,\n fields: { title?: string; body?: string; database_id?: string; parent_id?: string | null },\n opts: { ifMatch?: string } = {},\n): DocumentRow {\n if (!getDocument(db, id)) throw new MhError(\"not_found\", `no such document: ${id}`);\n // Same staleness backstop as editDocument: a version from documentVersion()\n // rejects the write if the doc changed since the caller read it.\n if (opts.ifMatch !== undefined && documentVersion(db, id) !== opts.ifMatch)\n throw new MhError(\"stale\", `stale: document changed since ${opts.ifMatch}; re-read first`);\n if (fields.title !== undefined) emit(db, \"documents\", id, \"title\", fields.title);\n if (fields.database_id !== undefined) emit(db, \"documents\", id, \"database_id\", fields.database_id);\n if (fields.parent_id !== undefined) {\n // Reparenting moves the document into a new sibling scope, so its order_key\n // must be reassigned too — placeInSiblings keeps both consistent (and guards\n // against cycles) for every caller: CLI, WebUI, sync. Only act on a real\n // change so a no-op PATCH doesn't silently jump the document to the end.\n const next = fields.parent_id ?? null;\n if ((getDocument(db, id)!.parent_id ?? null) !== next) placeInSiblings(db, id, next);\n }\n if (fields.body !== undefined) {\n ensureBlocks(db, id);\n reconcileBody(db, id, fields.body);\n }\n return getDocument(db, id)!;\n});\n\nexport interface EditDocResult {\n id: string;\n changed: boolean;\n replaced: number;\n version: string;\n}\n\n/**\n * Anchored find/replace, like the Edit tool. `old` must occur exactly once\n * (or pass `replaceAll`); supplying it is the read-before-edit guarantee — you\n * cannot author it without current content, and drift surfaces as \"not found\".\n * `ifMatch` is an optional staleness backstop (a version from documentVersion).\n */\nexport const editDocument = grouped(function editDocument(\n db: DbDriver,\n id: string,\n opts: { old: string; new: string; replaceAll?: boolean; ifMatch?: string },\n): EditDocResult {\n if (!getDocument(db, id)) throw new MhError(\"not_found\", `no such document: ${id}`);\n if (opts.ifMatch !== undefined && documentVersion(db, id) !== opts.ifMatch)\n throw new MhError(\"stale\", `stale: document changed since ${opts.ifMatch}; re-read first`);\n if (opts.old === \"\") throw new MhError(\"invalid_input\", \"--old must not be empty\");\n\n ensureBlocks(db, id);\n const blocks = liveBlocks(db, id);\n const body = serializeDocBlocks(blocks.map((b) => ({ text: b.text, blankAfter: b.blank_after })));\n const count = countOccurrences(body, opts.old);\n if (count === 0) throw new MhError(\"invalid_input\", `anchor not found: no match for --old`);\n if (count > 1 && !opts.replaceAll)\n throw new MhError(\n \"ambiguous\",\n `${count} matches for --old; add surrounding context or use --replace-all`,\n );\n\n // Fast path: edit stays within single blocks and introduces no block break.\n if (!opts.old.includes(\"\\n\\n\")) {\n const affected = blocks.filter((b) => b.text.includes(opts.old));\n const next = affected.map((b) =>\n opts.replaceAll ? b.text.replaceAll(opts.old, opts.new) : b.text.replace(opts.old, opts.new),\n );\n if (next.every((t) => t.length > 0 && !t.includes(\"\\n\\n\"))) {\n const targets = opts.replaceAll ? affected : affected.slice(0, 1);\n targets.forEach((b, i) => emit(db, \"doc_blocks\", b.id, \"text\", next[i]!));\n return { id, changed: true, replaced: opts.replaceAll ? count : 1, version: documentVersion(db, id) };\n }\n }\n\n // General path: rewrite the body and reconcile (handles spans/splits/merges).\n const newBody = opts.replaceAll\n ? body.replaceAll(opts.old, opts.new)\n : body.replace(opts.old, opts.new);\n reconcileBody(db, id, newBody);\n return { id, changed: newBody !== body, replaced: opts.replaceAll ? count : 1, version: documentVersion(db, id) };\n});\n\nexport const appendDocument = grouped(function appendDocument(\n db: DbDriver,\n id: string,\n body: string,\n): EditDocResult {\n if (!getDocument(db, id)) throw new MhError(\"not_found\", `no such document: ${id}`);\n ensureBlocks(db, id);\n const next = parseDocBlocks(body);\n if (next.length) {\n const blocks = liveBlocks(db, id);\n const last = blocks.length ? blocks[blocks.length - 1]!.order_key : null;\n insertBlocks(db, id, next, last, null);\n }\n return { id, changed: next.length > 0, replaced: next.length, version: documentVersion(db, id) };\n});\n\nexport const prependDocument = grouped(function prependDocument(\n db: DbDriver,\n id: string,\n body: string,\n): EditDocResult {\n if (!getDocument(db, id)) throw new MhError(\"not_found\", `no such document: ${id}`);\n ensureBlocks(db, id);\n const next = parseDocBlocks(body);\n if (next.length) {\n const blocks = liveBlocks(db, id);\n const first = blocks.length ? blocks[0]!.order_key : null;\n insertBlocks(db, id, next, null, first);\n }\n return { id, changed: next.length > 0, replaced: next.length, version: documentVersion(db, id) };\n});\n\nexport const deleteDocument = grouped(function deleteDocument(db: DbDriver, id: string): boolean {\n if (!getDocument(db, id)) return false;\n emit(db, \"documents\", id, \"__deleted\", 1);\n // Cascade off the tombstone, mirroring repairHub: the doc's blocks are derived\n // content -> tombstone them; live child documents survive as roots -> unparent.\n for (const b of liveChildIds(db, \"doc_blocks\", \"doc_id\", id))\n emit(db, \"doc_blocks\", b, \"__deleted\", 1);\n for (const c of liveChildIds(db, \"documents\", \"parent_id\", id))\n emit(db, \"documents\", c, \"parent_id\", null);\n return true;\n});\n\n/** Ids of live rows in `table` whose `col` references `parentId`. */\nfunction liveChildIds(db: DbDriver, table: string, col: string, parentId: string): string[] {\n return (\n db\n .query(`SELECT id FROM ${table} WHERE ${col} = ? AND __deleted = 0`)\n .all(parentId) as { id: string }[]\n ).map((r) => r.id);\n}\n\nfunction countOccurrences(haystack: string, needle: string): number {\n if (needle === \"\") return 0;\n let n = 0;\n let i = haystack.indexOf(needle);\n while (i !== -1) {\n n++;\n i = haystack.indexOf(needle, i + needle.length);\n }\n return n;\n}\n",
121
- "// Runtime-agnostic schema bootstrap: everything needed to bring a metahub\n// database to the current schema, typed against the portable driver surface so\n// it runs both on Bun (bun:sqlite) and in a browser worker (sqlite-wasm).\n// Opening the on-disk database lives in db.ts, which composes these.\n\nimport type { DbDriver } from \"./driver.ts\";\nimport { CORE_SCHEMA, FTS_SCHEMA } from \"./schema.ts\";\nimport { backfillRecordOrderKeys } from \"./records.ts\";\nimport { backfillDocumentOrderKeys } from \"./documents.ts\";\n\nexport function runSchema(db: DbDriver): void {\n db.exec(CORE_SCHEMA);\n try {\n db.exec(FTS_SCHEMA);\n } catch {\n // FTS5 unavailable; search will fall back to LIKE.\n }\n}\n\nexport function ftsAvailable(db: DbDriver): boolean {\n const row = db\n .query(\"SELECT 1 AS ok FROM sqlite_master WHERE name = 'search_fts'\")\n .get() as { ok: number } | null;\n return row != null;\n}\n\nfunction hasColumn(db: DbDriver, table: string, column: string): boolean {\n const cols = db.query(`PRAGMA table_info(${table})`).all() as { name: string }[];\n return cols.some((c) => c.name === column);\n}\n\nfunction tableExists(db: DbDriver, table: string): boolean {\n return (\n db\n .query(\"SELECT 1 AS ok FROM sqlite_master WHERE type = 'table' AND name = ?\")\n .get(table) != null\n );\n}\n\n/**\n * Migrate legacy EAV records (record_values: one row per cell) to the JSON\n * layout (records.data: one row per record). Idempotent — keyed off schema\n * shape, no version flag. A no-op for fresh databases.\n */\nexport function migrateRecords(db: DbDriver): void {\n if (!hasColumn(db, \"records\", \"data\"))\n db.exec(\"ALTER TABLE records ADD COLUMN data TEXT NOT NULL DEFAULT '{}'\");\n if (!hasColumn(db, \"records\", \"order_key\"))\n db.exec(\"ALTER TABLE records ADD COLUMN order_key TEXT\");\n\n if (!tableExists(db, \"record_values\")) return;\n\n const tx = db.transaction(() => {\n // Fold each record's cells into a JSON object keyed by property id.\n db.exec(`\n UPDATE records SET data = coalesce((\n SELECT json_group_object(rv.property_id, json(rv.value))\n FROM record_values rv WHERE rv.record_id = records.id\n ), '{}')\n WHERE id IN (SELECT DISTINCT record_id FROM record_values);\n `);\n db.exec(\"DROP TABLE record_values\");\n backfillRecordOrderKeys(db);\n });\n tx();\n\n backfillRecordOrderKeys(db);\n}\n\n/**\n * Add the peer-pairing columns to a legacy `peers` table (token/label/node_id/\n * enabled/last_sync_at/last_success_at/last_status/last_error). Idempotent —\n * guarded per column, never drops the table so existing replication cursors survive.\n */\nexport function migratePeers(db: DbDriver): void {\n const add: [string, string][] = [\n [\"token\", \"TEXT\"],\n [\"label\", \"TEXT\"],\n [\"node_id\", \"TEXT\"],\n [\"enabled\", \"INTEGER NOT NULL DEFAULT 1\"],\n [\"last_sync_at\", \"INTEGER\"],\n [\"last_success_at\", \"INTEGER\"],\n [\"last_status\", \"TEXT\"],\n [\"last_error\", \"TEXT\"],\n // Storage-sync (sync/storage.ts): kind selects the transport, config holds\n // an 's3' peer's bucket settings. Legacy rows default to 'http', unchanged.\n [\"kind\", \"TEXT NOT NULL DEFAULT 'http'\"],\n [\"config\", \"TEXT\"],\n ];\n for (const [col, decl] of add) {\n if (!hasColumn(db, \"peers\", col)) db.exec(`ALTER TABLE peers ADD COLUMN ${col} ${decl}`);\n }\n db.exec(\n \"UPDATE peers SET last_success_at = last_sync_at \" +\n \"WHERE last_success_at IS NULL AND last_status = 'ok' AND last_sync_at IS NOT NULL\",\n );\n}\n\n/**\n * Add the `blank_after` column to a legacy `doc_blocks` table. Idempotent —\n * guarded by hasColumn; existing blocks default to 0 (canonical single-blank-line\n * separators), so the migration never changes an existing document's body.\n */\nexport function migrateDocBlocks(db: DbDriver): void {\n if (!hasColumn(db, \"doc_blocks\", \"blank_after\"))\n db.exec(\"ALTER TABLE doc_blocks ADD COLUMN blank_after INTEGER NOT NULL DEFAULT 0\");\n}\n\n/**\n * Bring a legacy `blob_cache` to the current shape and retire the old synced\n * `blob_presence` table. Idempotent (guarded by hasColumn / IF EXISTS).\n * - `pinned`: node-local, never auto-evicted/cleared.\n * - `pending`: bytes produced here, not yet flushed to a durable anchor. Existing\n * rows can't be classified produced-vs-acquired, so default to 1 (protected);\n * the next online flush sets already-in-bucket blobs back to 0, so it self-heals\n * and is loss-free. See blobs.ts.\n * - `blob_presence` (was synced) is dropped: clearing is now decided locally from\n * `pending`. Leftover presence oplog changes are ignored (forward-compat).\n */\nexport function migrateBlobCache(db: DbDriver): void {\n if (!hasColumn(db, \"blob_cache\", \"pinned\"))\n db.exec(\"ALTER TABLE blob_cache ADD COLUMN pinned INTEGER NOT NULL DEFAULT 0\");\n if (!hasColumn(db, \"blob_cache\", \"pending\"))\n db.exec(\"ALTER TABLE blob_cache ADD COLUMN pending INTEGER NOT NULL DEFAULT 1\");\n if (!hasColumn(db, \"blob_cache\", \"anchored\"))\n db.exec(\"ALTER TABLE blob_cache ADD COLUMN anchored INTEGER NOT NULL DEFAULT 0\");\n db.exec(\"DROP TABLE IF EXISTS blob_presence\");\n}\n\n/**\n * Add the `order_key` column to a legacy `documents` table and backfill it.\n * Idempotent — guarded by hasColumn; backfill only touches rows with a NULL key,\n * assigning per-parent fractional indices in current created_hlc order, so the\n * displayed document order is unchanged until the user first drags something.\n */\nexport function migrateDocuments(db: DbDriver): void {\n if (!hasColumn(db, \"documents\", \"order_key\"))\n db.exec(\"ALTER TABLE documents ADD COLUMN order_key TEXT\");\n backfillDocumentOrderKeys(db);\n}\n\n/**\n * Add the `txn` change-group column to a legacy `crdt_changes` table.\n * Idempotent — guarded by hasColumn; existing rows stay NULL (history falls\n * back to time-gap clustering for them).\n */\nexport function migrateOplog(db: DbDriver): void {\n if (!hasColumn(db, \"crdt_changes\", \"txn\"))\n db.exec(\"ALTER TABLE crdt_changes ADD COLUMN txn TEXT\");\n}\n\n/**\n * Rebuild a legacy `crdt_changes` (composite PRIMARY KEY, implicit rowid) into\n * the current shape with an explicit `seq INTEGER PRIMARY KEY AUTOINCREMENT`.\n *\n * Why: replication push/pull cursors are crdt_changes rowids. The legacy table\n * has no declared INTEGER PRIMARY KEY, so a `VACUUM` (run by `mh` compaction)\n * renumbers its rowids 1..N; a peer's stored cursor then sits above the new\n * MAX(rowid) and `changesAfterSeq`'s \"never regress\" floor pins it there,\n * silently never pushing/pulling the writes below it. The declared `seq` is\n * stable across VACUUM and never reused, closing the hole.\n *\n * Idempotent — guarded by the `seq` column. Old rowids are copied verbatim into\n * seq so any *uncorrupted* cursor stays meaningful; then push/pull cursors are\n * reset to 0 because we cannot tell which were already stranded by a past\n * VACUUM, and a from-scratch re-sync is safe (INSERT OR IGNORE / ingest dedup)\n * — a one-time catch-up on first sync after upgrade. storage_cursors are\n * object-key based, never rowids, so they are left intact.\n */\nexport function migrateCrdtChangesSeq(db: DbDriver): void {\n if (hasColumn(db, \"crdt_changes\", \"seq\")) return;\n const tx = db.transaction(() => {\n db.exec(`\n DROP TABLE IF EXISTS crdt_changes_new;\n CREATE TABLE crdt_changes_new (\n seq INTEGER PRIMARY KEY AUTOINCREMENT,\n hlc TEXT NOT NULL,\n node_id TEXT NOT NULL,\n dataset TEXT NOT NULL,\n row_id TEXT NOT NULL,\n col TEXT NOT NULL,\n value TEXT,\n txn TEXT,\n UNIQUE (dataset, row_id, col, hlc)\n );\n INSERT INTO crdt_changes_new (seq, hlc, node_id, dataset, row_id, col, value, txn)\n SELECT rowid, hlc, node_id, dataset, row_id, col, value, txn\n FROM crdt_changes ORDER BY rowid;\n DROP TABLE crdt_changes;\n ALTER TABLE crdt_changes_new RENAME TO crdt_changes;\n CREATE INDEX IF NOT EXISTS idx_changes_hlc ON crdt_changes(hlc);\n CREATE INDEX IF NOT EXISTS idx_changes_docref ON crdt_changes(value)\n WHERE dataset = 'doc_blocks' AND col = 'doc_id';\n `);\n if (tableExists(db, \"peers\")) db.exec(\"UPDATE peers SET push_cursor = 0, pull_cursor = 0\");\n });\n tx();\n}\n\n/** Bring a freshly opened (or legacy) database to the current schema. */\nexport function initSchema(db: DbDriver): void {\n runSchema(db);\n migrateOplog(db);\n migrateCrdtChangesSeq(db);\n migrateRecords(db);\n migratePeers(db);\n migrateDocBlocks(db);\n migrateDocuments(db);\n migrateBlobCache(db);\n}\n",
124
+ "export const CORE_SCHEMA = `\nCREATE TABLE IF NOT EXISTS meta (\n key TEXT PRIMARY KEY,\n value TEXT\n);\n\n-- CRDT oplog: one row per field assignment. Source of truth for sync.\n-- txn groups the changes of one logical mutation for history rendering\n-- (nullable: legacy rows and changes from pre-txn peers have none).\n--\n-- seq is an explicit AUTOINCREMENT id used as the replication cursor. It must\n-- be a declared INTEGER PRIMARY KEY (not the implicit rowid): VACUUM renumbers\n-- the rowids of tables that lack one, which would shift them below a peer's\n-- stored push/pull cursor and silently strand every write in the gap.\n-- AUTOINCREMENT additionally guarantees ids are never reused. The\n-- (dataset,row_id,col,hlc) tuple stays UNIQUE so applyChange's INSERT OR IGNORE\n-- dedup is unchanged. Legacy databases are rebuilt into this shape by\n-- migrateCrdtChangesSeq (schema-init.ts).\nCREATE TABLE IF NOT EXISTS crdt_changes (\n seq INTEGER PRIMARY KEY AUTOINCREMENT,\n hlc TEXT NOT NULL,\n node_id TEXT NOT NULL,\n dataset TEXT NOT NULL,\n row_id TEXT NOT NULL,\n col TEXT NOT NULL,\n value TEXT,\n txn TEXT,\n UNIQUE (dataset, row_id, col, hlc)\n);\nCREATE INDEX IF NOT EXISTS idx_changes_hlc ON crdt_changes(hlc);\n-- Serves history's \"every block ever attached to this doc\" lookup. Partial so\n-- it never indexes the large values other datasets carry (e.g. site file bodies).\nCREATE INDEX IF NOT EXISTS idx_changes_docref ON crdt_changes(value)\n WHERE dataset = 'doc_blocks' AND col = 'doc_id';\n\n-- Per-peer replication cursors (crdt_changes.seq: AUTOINCREMENT, monotonic in\n-- insertion order and stable across VACUUM, so no change is ever skipped\n-- regardless of HLC/clock skew). Outbound side of\n-- a pairing: \"token\" is the credential the *remote* issued to us (sent as a\n-- Bearer header when we sync to them). See migratePeers in db.ts for the columns\n-- added to legacy databases.\n--\n-- kind selects the transport: 'http' (POST /sync to a peer server, the classic\n-- path) or 's3' (an S3-compatible bucket used as dumb store-and-forward — see\n-- sync/storage.ts). For 's3' peers url is a synthetic key (s3://<bucket>/<prefix>)\n-- and config holds the bucket settings + credentials + master key as JSON.\n-- Like the rest of peers, config is local-only and never enters the CRDT oplog.\nCREATE TABLE IF NOT EXISTS peers (\n url TEXT PRIMARY KEY,\n pull_cursor INTEGER NOT NULL DEFAULT 0,\n push_cursor INTEGER NOT NULL DEFAULT 0,\n token TEXT,\n label TEXT,\n node_id TEXT,\n enabled INTEGER NOT NULL DEFAULT 1,\n last_sync_at INTEGER,\n last_success_at INTEGER,\n last_status TEXT,\n last_error TEXT,\n kind TEXT NOT NULL DEFAULT 'http',\n config TEXT\n);\n\n-- Per-(storage-peer, remote-node) pull progress: the key of the last oplog\n-- segment we consumed from that node's bucket prefix. HTTP peers use the single\n-- pull_cursor above; storage peers need one cursor per remote node because each\n-- node publishes its own segment stream under its own prefix. last_key is a\n-- bucket object key (lexicographically ordered = chronological), so LIST\n-- start-after resumes exactly where we left off.\nCREATE TABLE IF NOT EXISTS storage_cursors (\n peer_url TEXT NOT NULL,\n node_id TEXT NOT NULL,\n last_key TEXT,\n PRIMARY KEY (peer_url, node_id)\n);\n\n-- Inbound side of a pairing: credentials *we* issued to remote devices. A peer\n-- presents one of these on /sync; acceptsSyncToken() checks it alongside the\n-- managed master token. Revoke by deleting the row.\nCREATE TABLE IF NOT EXISTS peer_grants (\n token TEXT PRIMARY KEY,\n peer_url TEXT,\n node_id TEXT,\n created_at INTEGER\n);\n\n-- One-time pairing codes minted by \"mh config peer code\" / POST /api/pair/new.\n-- Short-lived and single-use: redeemed during the pairing handshake, then the\n-- two devices exchange durable peer_grants. used/exp gate redemption.\nCREATE TABLE IF NOT EXISTS pairing_codes (\n code TEXT PRIMARY KEY,\n exp INTEGER NOT NULL,\n used INTEGER NOT NULL DEFAULT 0,\n created_at INTEGER\n);\n\n-- Public capability links to a doc / database / site. Like peers and blob_cache\n-- this is node-local and deliberately ABSENT from crdt.ts's DOMAIN map, so it\n-- never enters the oplog and never syncs — a share is a property of the access\n-- point that minted it, not of the workspace. slug is the unguessable capability\n-- in the URL (/share/<slug>). transport selects how it's served: 'server' (the\n-- token-exempt /share endpoint on this node) or 's3' (a presigned static export\n-- under <prefix>/shares/<slug> in a bucket). permission 'edit' is server-only:\n-- a presigned static object can't accept writes. guest_node_id attributes every\n-- edit made through an edit-share to one synthetic node (see crdt.ts withNodeId).\n-- pw_hash/pw_salt: server path stores a PBKDF2 verifier; the s3 path is E2EE so\n-- only pw_salt travels (in the link) and decryption happens in the viewer.\nCREATE TABLE IF NOT EXISTS shares (\n slug TEXT PRIMARY KEY,\n kind TEXT NOT NULL, -- 'doc' | 'database' | 'site'\n target_id TEXT NOT NULL, -- documents.id / databases.id / sites.id\n permission TEXT NOT NULL, -- 'view' | 'edit'\n transport TEXT NOT NULL, -- 'server' | 's3'\n pw_salt TEXT, -- base64; null = no password\n pw_hash TEXT, -- base64 PBKDF2 verifier (server path only)\n expires_at INTEGER, -- epoch ms; null = never\n guest_node_id TEXT, -- synthetic node id for edit shares (null for view)\n served_base TEXT, -- reachable base URL chosen at creation (link / source label)\n s3_peer_url TEXT, -- vestigial (s3 shares live in the bucket, not here)\n s3_object_prefix TEXT, -- vestigial\n s3_presign_exp INTEGER, -- vestigial\n s3_key_b64 TEXT, -- vestigial\n created_at INTEGER NOT NULL\n);\nCREATE INDEX IF NOT EXISTS idx_shares_target ON shares(target_id);\n\nCREATE TABLE IF NOT EXISTS databases (\n id TEXT PRIMARY KEY,\n name TEXT,\n icon TEXT,\n created_hlc TEXT,\n __deleted INTEGER NOT NULL DEFAULT 0\n);\n\nCREATE TABLE IF NOT EXISTS properties (\n id TEXT PRIMARY KEY,\n database_id TEXT,\n name TEXT,\n type TEXT,\n config TEXT,\n position REAL,\n __deleted INTEGER NOT NULL DEFAULT 0\n);\nCREATE INDEX IF NOT EXISTS idx_properties_db ON properties(database_id);\n\n-- One row per record. Field cells live in the data JSON object, keyed by\n-- property id (rename-safe). Each (record,property) is still an independent\n-- CRDT register in the oplog; materialize() folds the winner into data via\n-- json_set/json_remove. Hot fields get expression indexes on data->>'propid'\n-- (see indexing.ts) so filter/sort/limit push down to SQL.\nCREATE TABLE IF NOT EXISTS records (\n id TEXT PRIMARY KEY,\n database_id TEXT,\n created_hlc TEXT,\n order_key TEXT,\n data TEXT NOT NULL DEFAULT '{}',\n __deleted INTEGER NOT NULL DEFAULT 0\n);\nCREATE INDEX IF NOT EXISTS idx_records_db_hlc ON records(database_id, created_hlc);\n\nCREATE TABLE IF NOT EXISTS documents (\n id TEXT PRIMARY KEY,\n title TEXT,\n body TEXT, -- materialized cache: serialized from doc_blocks\n database_id TEXT,\n parent_id TEXT,\n created_hlc TEXT,\n order_key TEXT, -- fractional index among siblings (same parent_id); ties broken by created_hlc,id\n __deleted INTEGER NOT NULL DEFAULT 0\n);\n\n-- Document body as an ordered list of blocks; each (block,field) is an\n-- independent CRDT register so concurrent edits to different blocks merge.\n-- order_key is a fractional index (ties broken by id) giving display order.\nCREATE TABLE IF NOT EXISTS doc_blocks (\n id TEXT PRIMARY KEY,\n doc_id TEXT,\n text TEXT,\n order_key TEXT,\n blank_after INTEGER NOT NULL DEFAULT 0, -- extra blank lines kept after this block (user spacing)\n __deleted INTEGER NOT NULL DEFAULT 0\n);\nCREATE INDEX IF NOT EXISTS idx_doc_blocks_doc ON doc_blocks(doc_id);\n\n-- A named static site (Supabase-Storage-style bucket). Served at /sites/<name>/.\nCREATE TABLE IF NOT EXISTS sites (\n id TEXT PRIMARY KEY,\n name TEXT, -- URL slug; resolved by getSiteByName\n title TEXT,\n created_hlc TEXT,\n __deleted INTEGER NOT NULL DEFAULT 0\n);\n\n-- One row per file in a site. content holds inline utf8/base64 text, or a blob\n-- hash (see cache.ts) when encoding = 'blob'. (site_id, path) maps to a stable\n-- id so re-uploads merge as a CRDT register instead of duplicating.\nCREATE TABLE IF NOT EXISTS site_files (\n id TEXT PRIMARY KEY,\n site_id TEXT,\n path TEXT,\n content_type TEXT,\n encoding TEXT, -- 'utf8' | 'base64' | 'blob'\n content TEXT,\n created_hlc TEXT,\n __deleted INTEGER NOT NULL DEFAULT 0\n);\nCREATE INDEX IF NOT EXISTS idx_site_files_site ON site_files(site_id);\n\n-- Node-local blob cache ledger (NOT synced, like peers/storage_cursors): one row\n-- per blob byte-file held in cache.ts's content-addressed store (~/.metahub/cache).\n-- Gives the bare hash-named files the metadata clearing/stats need. hash is the\n-- canonical content key (sha256 truncated to 32 hex; legacy 64-hex coexist).\n-- pending = bytes produced HERE not yet confirmed flushed to a durable anchor\n-- (bucket) — the only blobs a device must protect; never auto-evicted/cleared.\n-- pending=0 means a flushed production OR an acquired cache, both safely\n-- clearable (re-fetchable). This local fact replaces the old SYNCED blob_presence\n-- table — clearing is now purely local/offline. See blobs.ts / 22-blob-sync.\nCREATE TABLE IF NOT EXISTS blob_cache (\n hash TEXT PRIMARY KEY,\n size INTEGER NOT NULL,\n content_type TEXT,\n last_access INTEGER,\n pinned INTEGER NOT NULL DEFAULT 0, -- node-local: never auto-evicted / cleared\n pending INTEGER NOT NULL DEFAULT 1, -- produced here, not yet flushed to anchor\n anchored INTEGER NOT NULL DEFAULT 0 -- node-local: last verify confirmed a designated anchor holds it (per redundancy). Drives isClearable; reset on policy change\n);\n\n-- Synced workspace policy (single row \"default\"): which nodes are designated\n-- full-blob libraries — the durable anchor in no-bucket topologies (they pull\n-- everything and never clear). full_nodes is a JSON array of node_id; redundancy\n-- is retained but unused since clearing moved to the local pending model.\nCREATE TABLE IF NOT EXISTS blob_policy (\n id TEXT PRIMARY KEY, -- always \"default\"\n full_nodes TEXT, -- JSON array of node_id\n redundancy TEXT, -- 'all' | 'any'\n __deleted INTEGER NOT NULL DEFAULT 0\n);\n`;\n\n// Best-effort: FTS5 may not be compiled in. Search falls back to LIKE if this fails.\nexport const FTS_SCHEMA = `\nCREATE VIRTUAL TABLE IF NOT EXISTS search_fts USING fts5(\n kind UNINDEXED,\n id UNINDEXED,\n database_id UNINDEXED,\n title,\n body\n);\n`;\n",
125
+ "// Runtime-agnostic schema bootstrap: everything needed to bring a metahub\n// database to the current schema, typed against the portable driver surface so\n// it runs both on Bun (bun:sqlite) and in a browser worker (sqlite-wasm).\n// Opening the on-disk database lives in db.ts, which composes these.\n\nimport type { DbDriver } from \"./driver.ts\";\nimport { CORE_SCHEMA, FTS_SCHEMA } from \"./schema.ts\";\nimport { backfillRecordOrderKeys } from \"./records.ts\";\nimport { backfillDocumentOrderKeys } from \"./documents.ts\";\nimport { readPolicy, setFullNodes } from \"./blobs-core.ts\";\nimport { storageUrl } from \"./sync/storage-url.ts\";\n\nexport function runSchema(db: DbDriver): void {\n db.exec(CORE_SCHEMA);\n try {\n db.exec(FTS_SCHEMA);\n } catch {\n // FTS5 unavailable; search will fall back to LIKE.\n }\n}\n\nexport function ftsAvailable(db: DbDriver): boolean {\n const row = db\n .query(\"SELECT 1 AS ok FROM sqlite_master WHERE name = 'search_fts'\")\n .get() as { ok: number } | null;\n return row != null;\n}\n\nfunction hasColumn(db: DbDriver, table: string, column: string): boolean {\n const cols = db.query(`PRAGMA table_info(${table})`).all() as { name: string }[];\n return cols.some((c) => c.name === column);\n}\n\nfunction tableExists(db: DbDriver, table: string): boolean {\n return (\n db\n .query(\"SELECT 1 AS ok FROM sqlite_master WHERE type = 'table' AND name = ?\")\n .get(table) != null\n );\n}\n\n/**\n * Migrate legacy EAV records (record_values: one row per cell) to the JSON\n * layout (records.data: one row per record). Idempotent — keyed off schema\n * shape, no version flag. A no-op for fresh databases.\n */\nexport function migrateRecords(db: DbDriver): void {\n if (!hasColumn(db, \"records\", \"data\"))\n db.exec(\"ALTER TABLE records ADD COLUMN data TEXT NOT NULL DEFAULT '{}'\");\n if (!hasColumn(db, \"records\", \"order_key\"))\n db.exec(\"ALTER TABLE records ADD COLUMN order_key TEXT\");\n\n if (!tableExists(db, \"record_values\")) return;\n\n const tx = db.transaction(() => {\n // Fold each record's cells into a JSON object keyed by property id.\n db.exec(`\n UPDATE records SET data = coalesce((\n SELECT json_group_object(rv.property_id, json(rv.value))\n FROM record_values rv WHERE rv.record_id = records.id\n ), '{}')\n WHERE id IN (SELECT DISTINCT record_id FROM record_values);\n `);\n db.exec(\"DROP TABLE record_values\");\n backfillRecordOrderKeys(db);\n });\n tx();\n\n backfillRecordOrderKeys(db);\n}\n\n/**\n * Add the peer-pairing columns to a legacy `peers` table (token/label/node_id/\n * enabled/last_sync_at/last_success_at/last_status/last_error). Idempotent —\n * guarded per column, never drops the table so existing replication cursors survive.\n */\n/** Add `served_base` to a `shares` table created before the column existed\n * (idempotent). The vestigial s3_* columns are left as-is. */\nexport function migrateShares(db: DbDriver): void {\n if (!hasColumn(db, \"shares\", \"served_base\"))\n db.exec(\"ALTER TABLE shares ADD COLUMN served_base TEXT\");\n}\n\nexport function migratePeers(db: DbDriver): void {\n const add: [string, string][] = [\n [\"token\", \"TEXT\"],\n [\"label\", \"TEXT\"],\n [\"node_id\", \"TEXT\"],\n [\"enabled\", \"INTEGER NOT NULL DEFAULT 1\"],\n [\"last_sync_at\", \"INTEGER\"],\n [\"last_success_at\", \"INTEGER\"],\n [\"last_status\", \"TEXT\"],\n [\"last_error\", \"TEXT\"],\n // Storage-sync (sync/storage.ts): kind selects the transport, config holds\n // an 's3' peer's bucket settings. Legacy rows default to 'http', unchanged.\n [\"kind\", \"TEXT NOT NULL DEFAULT 'http'\"],\n [\"config\", \"TEXT\"],\n ];\n for (const [col, decl] of add) {\n if (!hasColumn(db, \"peers\", col)) db.exec(`ALTER TABLE peers ADD COLUMN ${col} ${decl}`);\n }\n db.exec(\n \"UPDATE peers SET last_success_at = last_sync_at \" +\n \"WHERE last_success_at IS NULL AND last_status = 'ok' AND last_sync_at IS NOT NULL\",\n );\n}\n\n/**\n * Add the `blank_after` column to a legacy `doc_blocks` table. Idempotent —\n * guarded by hasColumn; existing blocks default to 0 (canonical single-blank-line\n * separators), so the migration never changes an existing document's body.\n */\nexport function migrateDocBlocks(db: DbDriver): void {\n if (!hasColumn(db, \"doc_blocks\", \"blank_after\"))\n db.exec(\"ALTER TABLE doc_blocks ADD COLUMN blank_after INTEGER NOT NULL DEFAULT 0\");\n}\n\n/**\n * Bring a legacy `blob_cache` to the current shape and retire the old synced\n * `blob_presence` table. Idempotent (guarded by hasColumn / IF EXISTS).\n * - `pinned`: node-local, never auto-evicted/cleared.\n * - `pending`: bytes produced here, not yet flushed to a durable anchor. Existing\n * rows can't be classified produced-vs-acquired, so default to 1 (protected);\n * the next online flush sets already-in-bucket blobs back to 0, so it self-heals\n * and is loss-free. See blobs.ts.\n * - `blob_presence` (was synced) is dropped: clearing is now decided locally from\n * `pending`. Leftover presence oplog changes are ignored (forward-compat).\n */\nexport function migrateBlobCache(db: DbDriver): void {\n if (!hasColumn(db, \"blob_cache\", \"pinned\"))\n db.exec(\"ALTER TABLE blob_cache ADD COLUMN pinned INTEGER NOT NULL DEFAULT 0\");\n if (!hasColumn(db, \"blob_cache\", \"pending\"))\n db.exec(\"ALTER TABLE blob_cache ADD COLUMN pending INTEGER NOT NULL DEFAULT 1\");\n if (!hasColumn(db, \"blob_cache\", \"anchored\"))\n db.exec(\"ALTER TABLE blob_cache ADD COLUMN anchored INTEGER NOT NULL DEFAULT 0\");\n db.exec(\"DROP TABLE IF EXISTS blob_presence\");\n}\n\n/**\n * Add the `order_key` column to a legacy `documents` table and backfill it.\n * Idempotent — guarded by hasColumn; backfill only touches rows with a NULL key,\n * assigning per-parent fractional indices in current created_hlc order, so the\n * displayed document order is unchanged until the user first drags something.\n */\nexport function migrateDocuments(db: DbDriver): void {\n if (!hasColumn(db, \"documents\", \"order_key\"))\n db.exec(\"ALTER TABLE documents ADD COLUMN order_key TEXT\");\n backfillDocumentOrderKeys(db);\n}\n\n/**\n * Add the `txn` change-group column to a legacy `crdt_changes` table.\n * Idempotent — guarded by hasColumn; existing rows stay NULL (history falls\n * back to time-gap clustering for them).\n */\nexport function migrateOplog(db: DbDriver): void {\n if (!hasColumn(db, \"crdt_changes\", \"txn\"))\n db.exec(\"ALTER TABLE crdt_changes ADD COLUMN txn TEXT\");\n}\n\n/**\n * Rebuild a legacy `crdt_changes` (composite PRIMARY KEY, implicit rowid) into\n * the current shape with an explicit `seq INTEGER PRIMARY KEY AUTOINCREMENT`.\n *\n * Why: replication push/pull cursors are crdt_changes rowids. The legacy table\n * has no declared INTEGER PRIMARY KEY, so a `VACUUM` (run by `mh` compaction)\n * renumbers its rowids 1..N; a peer's stored cursor then sits above the new\n * MAX(rowid) and `changesAfterSeq`'s \"never regress\" floor pins it there,\n * silently never pushing/pulling the writes below it. The declared `seq` is\n * stable across VACUUM and never reused, closing the hole.\n *\n * Idempotent — guarded by the `seq` column. Old rowids are copied verbatim into\n * seq so any *uncorrupted* cursor stays meaningful; then push/pull cursors are\n * reset to 0 because we cannot tell which were already stranded by a past\n * VACUUM, and a from-scratch re-sync is safe (INSERT OR IGNORE / ingest dedup)\n * — a one-time catch-up on first sync after upgrade. storage_cursors are\n * object-key based, never rowids, so they are left intact.\n */\nexport function migrateCrdtChangesSeq(db: DbDriver): void {\n if (hasColumn(db, \"crdt_changes\", \"seq\")) return;\n const tx = db.transaction(() => {\n db.exec(`\n DROP TABLE IF EXISTS crdt_changes_new;\n CREATE TABLE crdt_changes_new (\n seq INTEGER PRIMARY KEY AUTOINCREMENT,\n hlc TEXT NOT NULL,\n node_id TEXT NOT NULL,\n dataset TEXT NOT NULL,\n row_id TEXT NOT NULL,\n col TEXT NOT NULL,\n value TEXT,\n txn TEXT,\n UNIQUE (dataset, row_id, col, hlc)\n );\n INSERT INTO crdt_changes_new (seq, hlc, node_id, dataset, row_id, col, value, txn)\n SELECT rowid, hlc, node_id, dataset, row_id, col, value, txn\n FROM crdt_changes ORDER BY rowid;\n DROP TABLE crdt_changes;\n ALTER TABLE crdt_changes_new RENAME TO crdt_changes;\n CREATE INDEX IF NOT EXISTS idx_changes_hlc ON crdt_changes(hlc);\n CREATE INDEX IF NOT EXISTS idx_changes_docref ON crdt_changes(value)\n WHERE dataset = 'doc_blocks' AND col = 'doc_id';\n `);\n if (tableExists(db, \"peers\")) db.exec(\"UPDATE peers SET push_cursor = 0, pull_cursor = 0\");\n });\n tx();\n}\n\n/**\n * Migrate legacy storage-peer keys `s3://<bucket>/<prefix>` to the\n * endpoint-qualified `s3://<host>/<bucket>/<prefix>` so two endpoints sharing a\n * bucket name (R2/MinIO/COS each have their own namespace) no longer collide and\n * silently overwrite each other's peer row (and stale cursor). Rewrites all three\n * places the key is referenced — the peers row, its storage_cursors, and any\n * blob_policy.fullNodes anchor pointing at the bucket.\n *\n * Key derivation goes through the shared `storageUrl` (storage-url.ts) so every\n * producer — CLI/server, the WebUI worker, and this migration — agrees byte for\n * byte; otherwise a producer still minting the legacy shape turns the rename into\n * a permanent whack-a-mole.\n *\n * Idempotent — a row already at its endpoint-qualified key produces no rename.\n * Keyed off config.endpoint (authoritative), so re-running is a no-op.\n *\n * Cross-version note: rewriting blob_policy.fullNodes is a CRDT write, so it\n * replicates. A device still on the old code keeps a legacy-format storage peer\n * and matches anchors by exact string, so it won't recognize the new-format\n * anchor until it upgrades — during that window a bucket-anchored device pauses\n * cache eviction (loss-free: bytes stay, nothing is dropped) and self-heals once\n * the fleet is upgraded. Only affects setups that designate a bucket as a\n * full-blob anchor. (Accepted over a tolerant-matcher rewrite, which is wider and\n * still can't fix already-shipped old clients.)\n */\nexport function migrateStoragePeerUrls(db: DbDriver): void {\n if (!tableExists(db, \"peers\")) return;\n const rows = db\n .query(\"SELECT url, config FROM peers WHERE kind = 's3' AND config IS NOT NULL\")\n .all() as { url: string; config: string }[];\n if (rows.length === 0) return;\n\n const renames: { oldUrl: string; newUrl: string }[] = [];\n const claimed = new Set<string>(); // newUrls taken this batch — avoid two→one\n for (const r of rows) {\n let cfg: { endpoint?: string; bucket?: string; prefix?: string };\n try {\n cfg = JSON.parse(r.config);\n } catch {\n continue; // malformed config — leave the row untouched\n }\n if (!cfg.endpoint || !cfg.bucket || !cfg.prefix) continue;\n const newUrl = storageUrl(cfg.endpoint, cfg.bucket, cfg.prefix);\n if (newUrl === r.url) {\n claimed.add(newUrl); // already canonical — reserve so nothing renames onto it\n continue;\n }\n // Skip if the target key is already occupied — by an existing peers row, an\n // existing storage_cursors row (composite PK would throw), or another row in\n // this same batch. A throwing migration would make the DB fail to open; the\n // legacy row is left as-is instead (collisions are vanishingly rare).\n if (\n claimed.has(newUrl) ||\n db.query(\"SELECT 1 FROM peers WHERE url = ?\").get(newUrl) ||\n (tableExists(db, \"storage_cursors\") &&\n db.query(\"SELECT 1 FROM storage_cursors WHERE peer_url = ?\").get(newUrl))\n ) {\n continue;\n }\n claimed.add(newUrl);\n renames.push({ oldUrl: r.url, newUrl });\n }\n if (renames.length === 0) return;\n\n const map = new Map(renames.map(({ oldUrl, newUrl }) => [oldUrl, newUrl]));\n const tx = db.transaction(() => {\n for (const { oldUrl, newUrl } of renames) {\n if (tableExists(db, \"storage_cursors\"))\n db.query(\"UPDATE storage_cursors SET peer_url = ? WHERE peer_url = ?\").run(newUrl, oldUrl);\n db.query(\"UPDATE peers SET url = ? WHERE url = ?\").run(newUrl, oldUrl);\n }\n // Rewrite synced anchor references (CRDT-backed, so this replicates). See the\n // cross-version note above.\n if (tableExists(db, \"blob_policy\")) {\n const fullNodes = readPolicy(db).fullNodes;\n if (fullNodes.some((n) => map.has(n)))\n setFullNodes(db, fullNodes.map((n) => map.get(n) ?? n));\n }\n });\n tx();\n}\n\n/** Bring a freshly opened (or legacy) database to the current schema. */\nexport function initSchema(db: DbDriver): void {\n runSchema(db);\n migrateOplog(db);\n migrateCrdtChangesSeq(db);\n migrateRecords(db);\n migratePeers(db);\n migrateStoragePeerUrls(db);\n migrateDocBlocks(db);\n migrateDocuments(db);\n migrateBlobCache(db);\n migrateShares(db);\n}\n",
122
126
  "import type { DbDriver } from \"./driver.ts\";\nimport { getDatabase, type DatabaseRow } from \"./databases.ts\";\n\n// The \"current database\" is per-machine UI context, not data — it lives in the\n// local `meta` table (like node_id / search_hlc), never in the oplog, so it\n// does not sync to peers.\nconst KEY = \"current_db\";\n\n/**\n * The current database, or null. Validated on read: if it points at a database\n * that no longer exists (deleted, or gone after a snapshot restore), the stale\n * pointer is cleared and null returned — no coupling to delete/restore paths.\n */\nexport function getCurrentDatabase(db: DbDriver): DatabaseRow | null {\n const row = db.query(\"SELECT value FROM meta WHERE key = ?\").get(KEY) as\n | { value: string }\n | null;\n if (!row) return null;\n const found = getDatabase(db, row.value);\n if (!found) {\n clearCurrentDatabase(db);\n return null;\n }\n return found;\n}\n\nexport function setCurrentDatabase(db: DbDriver, id: string): void {\n db.query(\n \"INSERT INTO meta (key, value) VALUES (?, ?) ON CONFLICT(key) DO UPDATE SET value = excluded.value\",\n ).run(KEY, id);\n}\n\nexport function clearCurrentDatabase(db: DbDriver): void {\n db.query(\"DELETE FROM meta WHERE key = ?\").run(KEY);\n}\n",
123
127
  "import type { DbDriver } from \"./driver.ts\";\nimport { ftsAvailable } from \"./schema-init.ts\";\nimport { changesAfterSeq } from \"./crdt.ts\";\n\nexport interface SearchHit {\n type: \"document\" | \"record\";\n id: string;\n database_id: string | null;\n title?: string;\n snippet: string;\n}\n\nconst TEXT_TYPES = \"('text','url','select','multi_select','date')\";\n\n// Bump when the indexing logic changes (TEXT_TYPES, indexed columns, FTS schema)\n// so existing hubs discard `search_seq` and rebuild from scratch on next search.\nconst SEARCH_INDEX_VERSION = \"1\";\n\nfunction readMeta(db: DbDriver, key: string): string | null {\n return (\n (db.query(\"SELECT value FROM meta WHERE key = ?\").get(key) as { value: string } | null)\n ?.value ?? null\n );\n}\n\nfunction writeMeta(db: DbDriver, key: string, value: string): void {\n db.query(\n \"INSERT INTO meta (key, value) VALUES (?, ?) ON CONFLICT(key) DO UPDATE SET value = excluded.value\",\n ).run(key, value);\n}\n\n// --- per-object (re)indexing ------------------------------------------------\n// FTS rows are derived from the materialized tables, so (re)indexing one object\n// is \"delete its rows, then re-derive from the live row(s)\". A tombstoned or\n// body-less object simply re-derives to nothing.\n\ninterface DocRow {\n id: string;\n title: string | null;\n body: string | null;\n database_id: string | null;\n}\n\nfunction reindexDocument(db: DbDriver, id: string): void {\n db.query(\"DELETE FROM search_fts WHERE kind = 'document' AND id = ?\").run(id);\n const d = db\n .query(\"SELECT id, title, body, database_id FROM documents WHERE id = ? AND __deleted = 0\")\n .get(id) as DocRow | null;\n if (d)\n db.query(\n \"INSERT INTO search_fts (kind, id, database_id, title, body) VALUES ('document', ?, ?, ?, ?)\",\n ).run(d.id, d.database_id, d.title ?? \"\", d.body ?? \"\");\n}\n\ninterface RecBodyRow {\n id: string;\n database_id: string | null;\n body: string | null;\n}\n\n// A record's body is the concatenation of its TEXT-typed cell values. `where`\n// scopes which records to (re)derive; it is a fixed literal, never user input.\nfunction recordBodyRows(db: DbDriver, where: string, ...args: (string | number)[]): RecBodyRow[] {\n return db\n .query(\n `SELECT r.id AS id, r.database_id AS database_id, group_concat(je.value, ' ') AS body\n FROM records r, json_each(r.data) je\n JOIN properties p ON p.id = je.key AND p.__deleted = 0\n WHERE ${where} AND r.__deleted = 0 AND p.type IN ${TEXT_TYPES}\n GROUP BY r.id`,\n )\n .all(...args) as RecBodyRow[];\n}\n\nfunction insertRecordRow(db: DbDriver, r: RecBodyRow): void {\n db.query(\n \"INSERT INTO search_fts (kind, id, database_id, title, body) VALUES ('record', ?, ?, ?, ?)\",\n ).run(r.id, r.database_id, r.id, r.body ?? \"\");\n}\n\nfunction reindexRecord(db: DbDriver, id: string): void {\n db.query(\"DELETE FROM search_fts WHERE kind = 'record' AND id = ?\").run(id);\n const r = recordBodyRows(db, \"r.id = ?\", id)[0];\n if (r) insertRecordRow(db, r);\n}\n\n// Used for property-level changes (type/deletion/scope) that affect a whole\n// database's records at once.\nfunction reindexDatabaseRecords(db: DbDriver, databaseId: string): void {\n db.query(\"DELETE FROM search_fts WHERE kind = 'record' AND database_id = ?\").run(databaseId);\n for (const r of recordBodyRows(db, \"r.database_id = ?\", databaseId)) insertRecordRow(db, r);\n}\n\n// --- index maintenance ------------------------------------------------------\n\n// Full rebuild: the fallback path (first build, version bump, snapshot reset,\n// manual repair). Clears the index and re-derives every object, then pins the\n// cursor to the current oplog head so incremental updates pick up from there.\nfunction fullRebuild(db: DbDriver): void {\n db.query(\"DELETE FROM search_fts\").run();\n for (const d of db\n .query(\"SELECT id, title, body, database_id FROM documents WHERE __deleted = 0\")\n .all() as DocRow[])\n db.query(\n \"INSERT INTO search_fts (kind, id, database_id, title, body) VALUES ('document', ?, ?, ?, ?)\",\n ).run(d.id, d.database_id, d.title ?? \"\", d.body ?? \"\");\n for (const r of recordBodyRows(db, \"1 = 1\")) insertRecordRow(db, r);\n const max = (db.query(\"SELECT MAX(rowid) AS m FROM crdt_changes\").get() as { m: number | null }).m ?? 0;\n writeMeta(db, \"search_seq\", String(max));\n writeMeta(db, \"search_index_version\", SEARCH_INDEX_VERSION);\n}\n\n// Incremental: scan oplog changes since the cursor, derive the set of affected\n// objects, and re-derive only those. Insertion-order (rowid) means no change is\n// ever skipped, even when a remote write carries an older HLC than the local max.\nfunction incrementalUpdate(db: DbDriver): void {\n const cursor = Number(readMeta(db, \"search_seq\") ?? \"0\");\n const { changes, cursor: next } = changesAfterSeq(db, cursor);\n if (changes.length === 0) return;\n\n const docIds = new Set<string>();\n const recordIds = new Set<string>();\n const dbIds = new Set<string>(); // databases whose records need a full re-derive\n\n for (const c of changes) {\n switch (c.dataset) {\n case \"documents\":\n docIds.add(c.row_id);\n break;\n case \"doc_blocks\": {\n const blk = db\n .query(\"SELECT doc_id FROM doc_blocks WHERE id = ?\")\n .get(c.row_id) as { doc_id: string | null } | null;\n if (blk?.doc_id) docIds.add(blk.doc_id);\n break;\n }\n case \"records\":\n recordIds.add(c.row_id);\n break;\n case \"properties\":\n // Only type/deletion/scope change which cells contribute to record bodies.\n if (c.col === \"type\" || c.col === \"__deleted\" || c.col === \"database_id\") {\n const p = db\n .query(\"SELECT database_id FROM properties WHERE id = ?\")\n .get(c.row_id) as { database_id: string | null } | null;\n if (p?.database_id) dbIds.add(p.database_id);\n }\n break;\n // databases / sites / site_files are not represented in the FTS index.\n }\n }\n\n for (const id of docIds) reindexDocument(db, id);\n for (const dbId of dbIds) reindexDatabaseRecords(db, dbId);\n for (const id of recordIds) {\n const r = db\n .query(\"SELECT database_id FROM records WHERE id = ?\")\n .get(id) as { database_id: string | null } | null;\n if (r?.database_id && dbIds.has(r.database_id)) continue; // already covered above\n reindexRecord(db, id);\n }\n writeMeta(db, \"search_seq\", String(next));\n}\n\n// Bring the FTS index up to date before searching. Returns false when FTS5 is\n// unavailable (caller falls back to LIKE). All work is one transaction so the\n// cursor never advances past the index state it describes.\nfunction ensureIndex(db: DbDriver): boolean {\n if (!ftsAvailable(db)) return false;\n const version = readMeta(db, \"search_index_version\");\n const seq = readMeta(db, \"search_seq\");\n db.transaction(() => {\n if (version !== SEARCH_INDEX_VERSION || seq === null) fullRebuild(db);\n else incrementalUpdate(db);\n })();\n return true;\n}\n\n/** Force a full rebuild of the search index (maintenance / repair). */\nexport function rebuildSearchIndex(db: DbDriver): boolean {\n if (!ftsAvailable(db)) return false;\n db.transaction(() => fullRebuild(db))();\n return true;\n}\n\nfunction ftsSearch(db: DbDriver, query: string, limit: number): SearchHit[] {\n const match = query\n .split(/\\s+/)\n .filter(Boolean)\n .map((t) => `\"${t.replace(/\"/g, '\"\"')}\"`)\n .join(\" \");\n if (!match) return [];\n const rows = db\n .query(\n \"SELECT kind, id, database_id, title, snippet(search_fts, -1, '[', ']', '…', 10) AS snippet FROM search_fts WHERE search_fts MATCH ? ORDER BY rank LIMIT ?\",\n )\n .all(match, limit) as {\n kind: \"document\" | \"record\";\n id: string;\n database_id: string | null;\n title: string | null;\n snippet: string;\n }[];\n return rows.map((r) => ({\n type: r.kind,\n id: r.id,\n database_id: r.database_id,\n title: r.title || undefined,\n snippet: r.snippet,\n }));\n}\n\nfunction makeSnippet(text: string, q: string): string {\n const i = text.toLowerCase().indexOf(q.toLowerCase());\n if (i < 0) return text.slice(0, 80);\n const start = Math.max(0, i - 30);\n return `${start > 0 ? \"…\" : \"\"}${text.slice(start, i + q.length + 50)}…`;\n}\n\n// Substring match — robust for CJK and exact phrases where FTS tokenization misses.\nfunction likeSearch(db: DbDriver, query: string, limit: number): SearchHit[] {\n const like = `%${query.replace(/[%_\\\\]/g, \"\\\\$&\")}%`;\n const out: SearchHit[] = [];\n const docs = db\n .query(\n \"SELECT id, title, body, database_id FROM documents WHERE __deleted = 0 AND (title LIKE ? ESCAPE '\\\\' OR body LIKE ? ESCAPE '\\\\') LIMIT ?\",\n )\n .all(like, like, limit) as {\n id: string;\n title: string | null;\n body: string | null;\n database_id: string | null;\n }[];\n for (const d of docs)\n out.push({\n type: \"document\",\n id: d.id,\n database_id: d.database_id,\n title: d.title ?? undefined,\n snippet: makeSnippet(d.body || d.title || \"\", query),\n });\n\n if (out.length < limit) {\n const recs = db\n .query(\n `SELECT r.id AS id, r.database_id AS database_id, group_concat(je.value, ' ') AS body\n FROM records r, json_each(r.data) je\n JOIN properties p ON p.id = je.key AND p.__deleted = 0\n WHERE r.__deleted = 0 AND p.type IN ${TEXT_TYPES}\n GROUP BY r.id HAVING body LIKE ? ESCAPE '\\\\' LIMIT ?`,\n )\n .all(like, limit - out.length) as {\n id: string;\n database_id: string | null;\n body: string | null;\n }[];\n for (const r of recs)\n out.push({\n type: \"record\",\n id: r.id,\n database_id: r.database_id,\n snippet: makeSnippet(r.body || \"\", query),\n });\n }\n return out;\n}\n\nexport function search(\n db: DbDriver,\n query: string,\n opts: { limit?: number } = {},\n): SearchHit[] {\n const limit = opts.limit ?? 20;\n if (ensureIndex(db)) {\n try {\n const hits = ftsSearch(db, query, limit);\n if (hits.length) return hits;\n } catch {\n // fall through to LIKE\n }\n }\n return likeSearch(db, query, limit);\n}\n",
124
- "import \"./storage-s3-bun.ts\"; // side effect: register the Bun S3 storage-sync client (auto-sync timer)\nimport { openMetahub } from \"../db.ts\";\nimport { MhError } from \"../errors.ts\";\nimport { getNodeId } from \"../node.ts\";\nimport { getServerConfig } from \"../config.ts\";\nimport pkg from \"../../../package.json\" with { type: \"json\" };\nimport { routes, type Route, type RouteCtx } from \"./routes.ts\";\nimport { SYNC_PATH, HEALTH_PATH, RENEW_PATH, PAIR_PATH } from \"./protocol.ts\";\nimport { DEFAULT_TTL_MS, DEFAULT_GRACE_MS } from \"./token.ts\";\nimport { syncPeer, listPeers } from \"./peers.ts\";\nimport { blobMaintenance } from \"../blobs.ts\";\nimport { buildOpenApi } from \"./openapi.ts\";\nimport {\n type AuthConfig,\n activeToken,\n hasValidToken,\n acceptsSyncToken,\n renewToken,\n wantsHtml,\n unlockPage,\n withShim,\n unauthorized,\n HTML_HEADERS,\n} from \"./auth.ts\";\n\nexport interface RunningServer {\n server: ReturnType<typeof Bun.serve>;\n node: string;\n port: number;\n /** Resolved bind address (loopback unless explicitly exposed). */\n host: string;\n /** The active token, or null in --debug mode (auth disabled). */\n token: string | null;\n /** Token expiry (epoch ms); Infinity for a static --token, null when auth is off. */\n exp: number | null;\n /** How the token was sourced: rotating (managed), fixed (static), or off (disabled). */\n authMode: \"managed\" | \"static\" | \"disabled\";\n /** Whether the server terminates TLS itself (URLs are https://). */\n tls: boolean;\n /** Whether the auto-sync timer is running. */\n autoSync: boolean;\n /** Auto-sync poll interval in ms (meaningful only when autoSync). */\n syncIntervalMs: number;\n /** Stop the server and the auto-sync timer. */\n stop: () => void;\n}\n\n/** Thrown when the requested port is already taken, so callers can react. */\nexport class PortInUseError extends MhError {\n constructor(\n readonly port: number,\n readonly host: string,\n ) {\n super(\n \"port_in_use\",\n `port ${port} is already in use — another mh server may be running. ` +\n `Stop it, or start on a free port with --port <n>.`,\n );\n this.name = \"PortInUseError\";\n }\n}\n\nexport interface ServerOptions {\n port?: number;\n /** Bind address. Defaults to 127.0.0.1; pass \"0.0.0.0\" to expose. */\n host?: string;\n /** Disable auth entirely. */\n debug?: boolean;\n /** Custom token. If omitted in non-debug mode, one is generated. */\n token?: string;\n /** Auto-sync poll interval in ms; <= 0 disables it. Falls back to stored config. */\n syncIntervalMs?: number;\n /** Master switch for the auto-sync timer. Falls back to stored config. */\n autoSync?: boolean;\n /** Browser UI plug-in point. Core ships no UI; callers (CLI, desktop\n * sidecar) inject the WebUI's asset handler + data API routes here.\n * Omitted = a headless sync/sites server. */\n ui?: UiHandler;\n /** Optional TLS (PEM file paths). When set the server terminates TLS itself\n * and serves https — service workers/PWA need a secure context off\n * localhost. A reverse proxy (Caddy, Tailscale Serve) in front is the\n * recommended alternative; this is for setups without one. */\n tls?: { certPath: string; keyPath: string };\n}\n\n/** What a pluggable browser UI provides (see src/webui/server/). */\nexport interface UiHandler {\n /** Serve UI assets (GET / , /webui.js, /webui.css); null = not a UI asset. */\n serveAssets(req: Request): Promise<Response | null>;\n /** The UI's data API routes, merged into the route registry (and /docs). */\n routes: Route[];\n}\n\n/** Scalar API reference UI, loaded from CDN — no bundling or npm dependency. */\nfunction scalarHtml(specUrl: string): string {\n return `<!doctype html><html><head>\n<meta charset=\"utf-8\"><title>Metahub API</title>\n<meta name=\"viewport\" content=\"width=device-width,initial-scale=1\"></head>\n<body><script id=\"api-reference\" data-url=\"${specUrl}\"></script>\n<script src=\"https://cdn.jsdelivr.net/npm/@scalar/api-reference\"></script>\n</body></html>`;\n}\n\n/** Start the CRDT sync server. It is just another node backed by ~/.metahub. */\nexport function startServer(opts: ServerOptions = {}): RunningServer {\n const db = openMetahub();\n const node = getNodeId(db);\n const ctx: RouteCtx = { db, node };\n const allRoutes = opts.ui ? [...routes, ...opts.ui.routes] : routes;\n\n // Resolve runtime settings: explicit opts (CLI flags) override stored config.\n const cfg = getServerConfig(db);\n const port = opts.port ?? cfg.port;\n const host = opts.host ?? cfg.host;\n const syncIntervalMs = opts.syncIntervalMs ?? cfg.syncIntervalMs;\n const autoSync = opts.autoSync ?? cfg.autoSync;\n\n // Three modes: --debug disables auth; an explicit --token/env is a fixed,\n // non-persisted token; otherwise a persistent, rotating token from ~/.metahub.\n const auth: AuthConfig = opts.debug\n ? { debug: true, staticToken: null, db: null, ttlMs: 0, graceMs: 0 }\n : opts.token\n ? { debug: false, staticToken: opts.token, db: null, ttlMs: 0, graceMs: 0 }\n : {\n debug: false,\n staticToken: null,\n db,\n ttlMs: DEFAULT_TTL_MS,\n graceMs: DEFAULT_GRACE_MS,\n };\n\n let server: ReturnType<typeof Bun.serve>;\n try {\n server = Bun.serve({\n port,\n hostname: host,\n tls: opts.tls\n ? { cert: Bun.file(opts.tls.certPath), key: Bun.file(opts.tls.keyPath) }\n : undefined,\n async fetch(req) {\n const url = new URL(req.url);\n\n // /sync now requires the master token OR a per-peer grant from pairing\n // (the old open trusted-peer model is gone; pairing distributes the\n // credentials — see ./pairing.ts, acceptsSyncToken). /health and\n // /auth/token stay open (the latter must work with an expired token), and\n // the pairing handshake authenticates via its one-time code in-handler.\n if (\n url.pathname === SYNC_PATH ||\n url.pathname.startsWith(\"/blob/\") ||\n url.pathname === \"/api/blobs/has\"\n ) {\n // /blob/<hash> byte transport (and /api/blobs/has presence probe) authorize\n // like /sync: the master token OR a per-peer grant (a paired peer fetching a\n // blob it only has the hash of, or asking whether this node holds hashes).\n if (!acceptsSyncToken(req, url, auth, db)) return unauthorized();\n } else {\n const exempt =\n url.pathname === HEALTH_PATH ||\n url.pathname === RENEW_PATH ||\n url.pathname === PAIR_PATH ||\n // PWA install metadata + the worker script: browsers fetch these\n // without credentials, and they carry nothing sensitive (app name,\n // icons, generic caching code), so they sit outside the token gate.\n url.pathname === \"/manifest.webmanifest\" ||\n url.pathname === \"/sw.js\" ||\n url.pathname.startsWith(\"/icons/\");\n\n // Token gate (no-op in --debug). A browser without a token gets the\n // unlock page; everything else gets 401. Once the unlock page sets the\n // cookie the reload passes here and the real content is served.\n if (!exempt && !hasValidToken(req, url, auth)) {\n return wantsHtml(req)\n ? // x-mh-unlock tells the service worker this 200 is the unlock\n // page, not the app shell — caching it would brick offline starts.\n new Response(unlockPage(), { headers: { ...HTML_HEADERS, \"x-mh-unlock\": \"1\" } })\n : unauthorized();\n }\n }\n\n // Seamless renewal: swap the current (or in-grace previous) token for the\n // current token + expiry. 401 if the presented token isn't recognized.\n if (url.pathname === RENEW_PATH) {\n const r = renewToken(req, url, auth);\n return r ? Response.json(r) : unauthorized();\n }\n\n // Auto-generated API docs.\n if (req.method === \"GET\" && url.pathname === \"/docs.json\") {\n return Response.json(buildOpenApi(pkg.version, allRoutes));\n }\n if (req.method === \"GET\" && url.pathname === \"/docs\") {\n return withShim(new Response(scalarHtml(\"/docs.json\"), { headers: HTML_HEADERS }), auth);\n }\n\n // Injected browser UI assets (core itself ships no UI).\n if (req.method === \"GET\" && opts.ui) {\n const res = await opts.ui.serveAssets(req);\n if (res) return withShim(res, auth);\n }\n\n // Agent-published static sites at /sites/<name>/<path...>. Lazy-imported\n // for the same zero-startup-cost reason as the WebUI.\n if (req.method === \"GET\" && url.pathname.startsWith(\"/sites/\")) {\n const { serveSite } = await import(\"./sites-serve.ts\");\n const res = await serveSite(req, ctx);\n if (res) return withShim(res, auth);\n }\n\n // Content-addressed blob bytes at /blob/<hash>[.ext] (document images /\n // large files). Resolves on demand (local → peers → bucket); raw bytes, no\n // shim. See blob-routes.ts / blobs.ts.\n if (req.method === \"GET\" && url.pathname.startsWith(\"/blob/\")) {\n const { serveBlob } = await import(\"./blob-routes.ts\");\n const res = await serveBlob(req, ctx);\n if (res) return res;\n }\n\n // Registered API routes.\n const route = allRoutes.find((r) => r.method === req.method && r.path === url.pathname);\n if (route) return route.handler(req, ctx);\n\n return new Response(\"not found\", { status: 404 });\n },\n });\n } catch (e) {\n // Bun.serve throws synchronously on a bind failure. Turn the raw EADDRINUSE\n // (and the related EACCES) into an actionable message instead of a stack\n // trace pointing into the framework.\n const code = (e as { code?: string } | null)?.code;\n if (code === \"EADDRINUSE\") {\n throw new PortInUseError(port, host);\n }\n if (code === \"EACCES\") {\n throw new MhError(\n \"invalid_input\",\n `permission denied binding ${host}:${port} — ports below 1024 need elevated privileges; pick a higher port with --port`,\n );\n }\n throw e;\n }\n // Auto-sync timer: each tick runs one push/pull round against every enabled\n // peer. The DB is the source of truth, so peers added by `mh config` (a\n // separate process) are picked up on the next tick without a restart.\n let timer: ReturnType<typeof setInterval> | null = null;\n if (autoSync && syncIntervalMs > 0) {\n // Per-peer idle backoff for storage (s3) peers — the bucket poll is the metered\n // cost. When the hub hasn't advanced (no local edit, nothing pulled) and a\n // peer's rounds keep coming up empty, slow it down, capped at TTL/2 so the\n // publisher lease / failover stay timely. Any hub advance (a local edit OR a\n // pulled remote edit) reclaims the base cadence so propagation stays prompt.\n // http peers sync every tick.\n const S3_POLL_MAX_MS = 150_000; // 2.5min ≈ publisher-lease TTL/2\n const s3Next = new Map<string, { delay: number; due: number }>();\n let lastMaxSeq = -1;\n let ticking = false;\n // Blob upkeep is metered separately from the oplog poll: a full-blob device\n // pulls/announces referenced blobs and pushes held blobs to buckets. Runs at\n // most once a minute regardless of the (possibly faster) sync cadence.\n const BLOB_MAINT_MS = 60_000;\n let lastBlobMaint = 0;\n const tick = async (): Promise<void> => {\n const maxSeq =\n (db.query(\"SELECT MAX(seq) AS s FROM crdt_changes\").get() as { s: number | null }).s ?? 0;\n const advanced = lastMaxSeq >= 0 && maxSeq > lastMaxSeq;\n lastMaxSeq = maxSeq;\n const now = Date.now();\n for (const p of listPeers(db)) {\n if (!p.enabled) continue;\n if (p.kind !== \"s3\") {\n await syncPeer(db, p.url);\n continue;\n }\n const st = s3Next.get(p.url);\n if (!advanced && st && now < st.due) continue; // idle & backed off → not due\n const out = await syncPeer(db, p.url);\n const busy = advanced || (out.pushed ?? 0) > 0 || (out.pulled ?? 0) > 0;\n const delay = busy\n ? syncIntervalMs\n : Math.min((st?.delay ?? syncIntervalMs) * 2, S3_POLL_MAX_MS);\n s3Next.set(p.url, { delay, due: Date.now() + delay });\n }\n if (Date.now() - lastBlobMaint >= BLOB_MAINT_MS) {\n lastBlobMaint = Date.now();\n try {\n await blobMaintenance(db);\n } catch (e) {\n console.error(\"[blob] maintenance failed —\", e);\n }\n }\n };\n timer = setInterval(() => {\n if (ticking) return;\n ticking = true;\n // Per-peer errors are already recorded in the DB (last_error) by syncPeer and\n // surfaced via CLI/WebUI; this catch only covers an *unexpected* tick crash.\n void tick()\n .catch((e) => console.error(\"[sync] auto-sync tick failed —\", e))\n .finally(() => {\n ticking = false;\n });\n }, syncIntervalMs);\n timer.unref?.();\n }\n\n const active = activeToken(auth);\n const authMode: RunningServer[\"authMode\"] = opts.debug\n ? \"disabled\"\n : opts.token\n ? \"static\"\n : \"managed\";\n return {\n server,\n node,\n port: server.port ?? port,\n host,\n token: active?.token ?? null,\n exp: active?.exp ?? null,\n authMode,\n tls: Boolean(opts.tls),\n autoSync: Boolean(autoSync && syncIntervalMs > 0),\n syncIntervalMs,\n stop() {\n if (timer) clearInterval(timer);\n server.stop();\n },\n };\n}\n",
128
+ "import \"./storage-s3-bun.ts\"; // side effect: register the Bun S3 storage-sync client (auto-sync timer)\nimport { openMetahub } from \"../db.ts\";\nimport { MhError } from \"../errors.ts\";\nimport { getNodeId } from \"../node.ts\";\nimport { getServerConfig } from \"../config.ts\";\nimport pkg from \"../../../package.json\" with { type: \"json\" };\nimport { routes, type Route, type RouteCtx } from \"./routes.ts\";\nimport { SYNC_PATH, HEALTH_PATH, RENEW_PATH, PAIR_PATH } from \"./protocol.ts\";\nimport { DEFAULT_TTL_MS, DEFAULT_GRACE_MS } from \"./token.ts\";\nimport { syncPeer, listPeers } from \"./peers.ts\";\nimport { blobMaintenance } from \"../blobs.ts\";\nimport { buildOpenApi } from \"./openapi.ts\";\nimport {\n type AuthConfig,\n activeToken,\n hasValidToken,\n acceptsSyncToken,\n renewToken,\n wantsHtml,\n unlockPage,\n withShim,\n unauthorized,\n HTML_HEADERS,\n} from \"./auth.ts\";\n\nexport interface RunningServer {\n server: ReturnType<typeof Bun.serve>;\n node: string;\n port: number;\n /** Resolved bind address (loopback unless explicitly exposed). */\n host: string;\n /** The active token, or null in --debug mode (auth disabled). */\n token: string | null;\n /** Token expiry (epoch ms); Infinity for a static --token, null when auth is off. */\n exp: number | null;\n /** How the token was sourced: rotating (managed), fixed (static), or off (disabled). */\n authMode: \"managed\" | \"static\" | \"disabled\";\n /** Whether the server terminates TLS itself (URLs are https://). */\n tls: boolean;\n /** Whether the auto-sync timer is running. */\n autoSync: boolean;\n /** Auto-sync poll interval in ms (meaningful only when autoSync). */\n syncIntervalMs: number;\n /** Stop the server and the auto-sync timer. */\n stop: () => void;\n}\n\n/** Thrown when the requested port is already taken, so callers can react. */\nexport class PortInUseError extends MhError {\n constructor(\n readonly port: number,\n readonly host: string,\n ) {\n super(\n \"port_in_use\",\n `port ${port} is already in use — another mh server may be running. ` +\n `Stop it, or start on a free port with --port <n>.`,\n );\n this.name = \"PortInUseError\";\n }\n}\n\nexport interface ServerOptions {\n port?: number;\n /** Bind address. Defaults to 127.0.0.1; pass \"0.0.0.0\" to expose. */\n host?: string;\n /** Disable auth entirely. */\n debug?: boolean;\n /** Custom token. If omitted in non-debug mode, one is generated. */\n token?: string;\n /** Auto-sync poll interval in ms; <= 0 disables it. Falls back to stored config. */\n syncIntervalMs?: number;\n /** Master switch for the auto-sync timer. Falls back to stored config. */\n autoSync?: boolean;\n /** Browser UI plug-in point. Core ships no UI; callers (CLI, desktop\n * sidecar) inject the WebUI's asset handler + data API routes here.\n * Omitted = a headless sync/sites server. */\n ui?: UiHandler;\n /** Optional TLS (PEM file paths). When set the server terminates TLS itself\n * and serves https — service workers/PWA need a secure context off\n * localhost. A reverse proxy (Caddy, Tailscale Serve) in front is the\n * recommended alternative; this is for setups without one. */\n tls?: { certPath: string; keyPath: string };\n}\n\n/** What a pluggable browser UI provides (see src/webui/server/). */\nexport interface UiHandler {\n /** Serve UI assets (GET / , /webui.js, /webui.css); null = not a UI asset. */\n serveAssets(req: Request): Promise<Response | null>;\n /** The UI's data API routes, merged into the route registry (and /docs). */\n routes: Route[];\n}\n\n/** Scalar API reference UI, loaded from CDN — no bundling or npm dependency. */\nfunction scalarHtml(specUrl: string): string {\n return `<!doctype html><html><head>\n<meta charset=\"utf-8\"><title>Metahub API</title>\n<meta name=\"viewport\" content=\"width=device-width,initial-scale=1\"></head>\n<body><script id=\"api-reference\" data-url=\"${specUrl}\"></script>\n<script src=\"https://cdn.jsdelivr.net/npm/@scalar/api-reference\"></script>\n</body></html>`;\n}\n\n/** Start the CRDT sync server. It is just another node backed by ~/.metahub. */\nexport function startServer(opts: ServerOptions = {}): RunningServer {\n const db = openMetahub();\n const node = getNodeId(db);\n const ctx: RouteCtx = { db, node };\n const allRoutes = opts.ui ? [...routes, ...opts.ui.routes] : routes;\n\n // Resolve runtime settings: explicit opts (CLI flags) override stored config.\n const cfg = getServerConfig(db);\n const port = opts.port ?? cfg.port;\n const host = opts.host ?? cfg.host;\n const syncIntervalMs = opts.syncIntervalMs ?? cfg.syncIntervalMs;\n const autoSync = opts.autoSync ?? cfg.autoSync;\n\n // Three modes: --debug disables auth; an explicit --token/env is a fixed,\n // non-persisted token; otherwise a persistent, rotating token from ~/.metahub.\n const auth: AuthConfig = opts.debug\n ? { debug: true, staticToken: null, db: null, ttlMs: 0, graceMs: 0 }\n : opts.token\n ? { debug: false, staticToken: opts.token, db: null, ttlMs: 0, graceMs: 0 }\n : {\n debug: false,\n staticToken: null,\n db,\n ttlMs: DEFAULT_TTL_MS,\n graceMs: DEFAULT_GRACE_MS,\n };\n\n let server: ReturnType<typeof Bun.serve>;\n try {\n server = Bun.serve({\n port,\n hostname: host,\n tls: opts.tls\n ? { cert: Bun.file(opts.tls.certPath), key: Bun.file(opts.tls.keyPath) }\n : undefined,\n async fetch(req) {\n const url = new URL(req.url);\n\n // /sync now requires the master token OR a per-peer grant from pairing\n // (the old open trusted-peer model is gone; pairing distributes the\n // credentials — see ./pairing.ts, acceptsSyncToken). /health and\n // /auth/token stay open (the latter must work with an expired token), and\n // the pairing handshake authenticates via its one-time code in-handler.\n // Share management a paired peer may drive remotely (create on / list from /\n // revoke on this node): authorized by the master token OR a pairing grant,\n // like /sync. EXACT paths only — /api/share/servers|buckets|renew (peer/bucket\n // inventory + re-presign) stay master-only via the else branch below.\n const shareMgmt =\n ((req.method === \"POST\" || req.method === \"DELETE\") && url.pathname === \"/api/share\") ||\n (req.method === \"GET\" && url.pathname === \"/api/shares\");\n if (\n url.pathname === SYNC_PATH ||\n url.pathname.startsWith(\"/blob/\") ||\n url.pathname === \"/api/blobs/has\" ||\n shareMgmt\n ) {\n // /blob/<hash> byte transport (and /api/blobs/has presence probe) authorize\n // like /sync: the master token OR a per-peer grant (a paired peer fetching a\n // blob it only has the hash of, or asking whether this node holds hashes).\n if (!acceptsSyncToken(req, url, auth, db)) return unauthorized();\n } else {\n const exempt =\n url.pathname === HEALTH_PATH ||\n url.pathname === RENEW_PATH ||\n url.pathname === PAIR_PATH ||\n // PWA install metadata + the worker script: browsers fetch these\n // without credentials, and they carry nothing sensitive (app name,\n // icons, generic caching code), so they sit outside the token gate.\n url.pathname === \"/manifest.webmanifest\" ||\n url.pathname === \"/sw.js\" ||\n url.pathname.startsWith(\"/icons/\") ||\n // Public shares enforce their own per-share access control (slug +\n // expiry + optional password) inside serveShare — never the master\n // token. See ./share-serve.ts.\n url.pathname.startsWith(\"/share/\");\n\n // Token gate (no-op in --debug). A browser without a token gets the\n // unlock page; everything else gets 401. Once the unlock page sets the\n // cookie the reload passes here and the real content is served.\n if (!exempt && !hasValidToken(req, url, auth)) {\n return wantsHtml(req)\n ? // x-mh-unlock tells the service worker this 200 is the unlock\n // page, not the app shell — caching it would brick offline starts.\n new Response(unlockPage(), { headers: { ...HTML_HEADERS, \"x-mh-unlock\": \"1\" } })\n : unauthorized();\n }\n }\n\n // Seamless renewal: swap the current (or in-grace previous) token for the\n // current token + expiry. 401 if the presented token isn't recognized.\n if (url.pathname === RENEW_PATH) {\n const r = renewToken(req, url, auth);\n return r ? Response.json(r) : unauthorized();\n }\n\n // Auto-generated API docs.\n if (req.method === \"GET\" && url.pathname === \"/docs.json\") {\n return Response.json(buildOpenApi(pkg.version, allRoutes));\n }\n if (req.method === \"GET\" && url.pathname === \"/docs\") {\n return withShim(new Response(scalarHtml(\"/docs.json\"), { headers: HTML_HEADERS }), auth, req, url);\n }\n\n // Injected browser UI assets (core itself ships no UI).\n if (req.method === \"GET\" && opts.ui) {\n const res = await opts.ui.serveAssets(req);\n if (res) return withShim(res, auth, req, url);\n }\n\n // Agent-published static sites at /sites/<name>/<path...>. Lazy-imported\n // for the same zero-startup-cost reason as the WebUI.\n if (req.method === \"GET\" && url.pathname.startsWith(\"/sites/\")) {\n const { serveSite } = await import(\"./sites-serve.ts\");\n const res = await serveSite(req, ctx);\n if (res) return withShim(res, auth, req, url);\n }\n\n // Content-addressed blob bytes at /blob/<hash>[.ext] (document images /\n // large files). Resolves on demand (local → peers → bucket); raw bytes, no\n // shim. See blob-routes.ts / blobs.ts.\n if (req.method === \"GET\" && url.pathname.startsWith(\"/blob/\")) {\n const { serveBlob } = await import(\"./blob-routes.ts\");\n const res = await serveBlob(req, ctx);\n if (res) return res;\n }\n\n // Public capability shares at /share/<slug>... (any method — edit shares\n // accept writes). Per-share access control lives in serveShare; responses\n // are returned RAW (never withShim) so a public page never carries the\n // master-token runtime. Lazy-imported like the other off-startup handlers.\n if (url.pathname.startsWith(\"/share/\")) {\n const { serveShare } = await import(\"./share-serve.ts\");\n const res = await serveShare(req, ctx);\n if (res) return res;\n }\n\n // Registered API routes.\n const route = allRoutes.find((r) => r.method === req.method && r.path === url.pathname);\n if (route) return route.handler(req, ctx);\n\n return new Response(\"not found\", { status: 404 });\n },\n });\n } catch (e) {\n // Bun.serve throws synchronously on a bind failure. Turn the raw EADDRINUSE\n // (and the related EACCES) into an actionable message instead of a stack\n // trace pointing into the framework.\n const code = (e as { code?: string } | null)?.code;\n if (code === \"EADDRINUSE\") {\n throw new PortInUseError(port, host);\n }\n if (code === \"EACCES\") {\n throw new MhError(\n \"invalid_input\",\n `permission denied binding ${host}:${port} — ports below 1024 need elevated privileges; pick a higher port with --port`,\n );\n }\n throw e;\n }\n // Auto-sync timer: each tick runs one push/pull round against every enabled\n // peer. The DB is the source of truth, so peers added by `mh config` (a\n // separate process) are picked up on the next tick without a restart.\n let timer: ReturnType<typeof setInterval> | null = null;\n if (autoSync && syncIntervalMs > 0) {\n // Per-peer idle backoff for storage (s3) peers — the bucket poll is the metered\n // cost. When the hub hasn't advanced (no local edit, nothing pulled) and a\n // peer's rounds keep coming up empty, slow it down, capped at TTL/2 so the\n // publisher lease / failover stay timely. Any hub advance (a local edit OR a\n // pulled remote edit) reclaims the base cadence so propagation stays prompt.\n // http peers sync every tick.\n const S3_POLL_MAX_MS = 150_000; // 2.5min ≈ publisher-lease TTL/2\n const s3Next = new Map<string, { delay: number; due: number }>();\n let lastMaxSeq = -1;\n let ticking = false;\n // Blob upkeep is metered separately from the oplog poll: a full-blob device\n // pulls/announces referenced blobs and pushes held blobs to buckets. Runs at\n // most once a minute regardless of the (possibly faster) sync cadence.\n const BLOB_MAINT_MS = 60_000;\n let lastBlobMaint = 0;\n const tick = async (): Promise<void> => {\n const maxSeq =\n (db.query(\"SELECT MAX(seq) AS s FROM crdt_changes\").get() as { s: number | null }).s ?? 0;\n const advanced = lastMaxSeq >= 0 && maxSeq > lastMaxSeq;\n lastMaxSeq = maxSeq;\n const now = Date.now();\n for (const p of listPeers(db)) {\n if (!p.enabled) continue;\n if (p.kind !== \"s3\") {\n await syncPeer(db, p.url);\n continue;\n }\n const st = s3Next.get(p.url);\n if (!advanced && st && now < st.due) continue; // idle & backed off → not due\n const out = await syncPeer(db, p.url);\n const busy = advanced || (out.pushed ?? 0) > 0 || (out.pulled ?? 0) > 0;\n const delay = busy\n ? syncIntervalMs\n : Math.min((st?.delay ?? syncIntervalMs) * 2, S3_POLL_MAX_MS);\n s3Next.set(p.url, { delay, due: Date.now() + delay });\n }\n if (Date.now() - lastBlobMaint >= BLOB_MAINT_MS) {\n lastBlobMaint = Date.now();\n try {\n await blobMaintenance(db);\n } catch (e) {\n console.error(\"[blob] maintenance failed —\", e);\n }\n }\n };\n timer = setInterval(() => {\n if (ticking) return;\n ticking = true;\n // Per-peer errors are already recorded in the DB (last_error) by syncPeer and\n // surfaced via CLI/WebUI; this catch only covers an *unexpected* tick crash.\n void tick()\n .catch((e) => console.error(\"[sync] auto-sync tick failed —\", e))\n .finally(() => {\n ticking = false;\n });\n }, syncIntervalMs);\n timer.unref?.();\n }\n\n const active = activeToken(auth);\n const authMode: RunningServer[\"authMode\"] = opts.debug\n ? \"disabled\"\n : opts.token\n ? \"static\"\n : \"managed\";\n return {\n server,\n node,\n port: server.port ?? port,\n host,\n token: active?.token ?? null,\n exp: active?.exp ?? null,\n authMode,\n tls: Boolean(opts.tls),\n autoSync: Boolean(autoSync && syncIntervalMs > 0),\n syncIntervalMs,\n stop() {\n if (timer) clearInterval(timer);\n server.stop();\n },\n };\n}\n",
125
129
  "import { z } from \"zod\";\nimport { routes as coreRoutes, type Route } from \"./routes.ts\";\n\n/**\n * Build an OpenAPI 3.1 document by walking a route registry. Each route's\n * Zod schemas are converted to JSON Schema (draft 2020-12, which 3.1 accepts).\n * Adding a route to ./routes.ts is enough — this picks it up with no codegen.\n * The server passes its full registry (core + injected UI routes) so /docs\n * always matches what is actually served.\n */\nexport function buildOpenApi(version: string, routes: readonly Route[] = coreRoutes) {\n const paths: Record<string, Record<string, unknown>> = {};\n\n for (const route of routes) {\n const op: Record<string, unknown> = {\n summary: route.summary,\n responses: {\n \"200\": {\n description: \"OK\",\n content: { \"application/json\": { schema: z.toJSONSchema(route.response) } },\n },\n },\n };\n if (route.request) {\n op.requestBody = {\n required: true,\n content: { \"application/json\": { schema: z.toJSONSchema(route.request) } },\n };\n }\n (paths[route.path] ??= {})[route.method.toLowerCase()] = op;\n }\n\n return {\n openapi: \"3.1.0\",\n info: { title: \"Metahub Sync API\", version },\n paths,\n };\n}\n",
126
- "// Token gate for the server. In --debug mode auth is disabled entirely. Otherwise\n// a single token guards every request. A token may arrive three ways so both\n// programmatic clients and browsers work:\n// - Authorization: Bearer <token> (API clients, and the injected fetch shim)\n// - Cookie: mh_token=<token> (browser top-level navigations)\n// - ?token=<token> (links / quick curl testing)\n// Browsers without a token get an unlock page that stores the password to\n// localStorage + a cookie and reloads; served HTML then gets a fetch shim that\n// re-attaches the token as a Bearer header on same-origin API calls.\n\nimport type { Database } from \"bun:sqlite\";\nimport { loadOrRotate } from \"./token.ts\";\nimport { isAcceptedGrant } from \"./pairing.ts\";\nimport { RENEW_PATH } from \"./protocol.ts\";\n\n// Three modes:\n// debug — auth off entirely.\n// staticToken — fixed token from --token/env; not persisted, never expires.\n// db (managed) — persistent, rotating token in ~/.metahub (see ./token.ts).\nexport interface AuthConfig {\n debug: boolean;\n staticToken: string | null;\n db: Database | null;\n ttlMs: number;\n graceMs: number;\n}\n\nconst COOKIE = \"mh_token\";\n\nfunction cookieToken(req: Request): string | null {\n const header = req.headers.get(\"cookie\");\n if (!header) return null;\n for (const part of header.split(\";\")) {\n const [k, ...v] = part.trim().split(\"=\");\n if (k === COOKIE) return decodeURIComponent(v.join(\"=\"));\n }\n return null;\n}\n\nexport function extractToken(req: Request, url: URL): string | null {\n const auth = req.headers.get(\"authorization\");\n if (auth?.startsWith(\"Bearer \")) return auth.slice(7);\n return cookieToken(req) ?? url.searchParams.get(\"token\");\n}\n\n/** Whether auth is on at all (so the gate runs and the fetch shim is injected). */\nexport function authActive(cfg: AuthConfig): boolean {\n return !cfg.debug && (cfg.staticToken != null || cfg.db != null);\n}\n\n/** The currently-valid token and its expiry, or null when auth is off. */\nexport function activeToken(cfg: AuthConfig): { token: string; exp: number } | null {\n if (cfg.debug) return null;\n if (cfg.staticToken != null) return { token: cfg.staticToken, exp: Infinity };\n if (cfg.db) {\n const s = loadOrRotate(cfg.db, cfg.ttlMs, cfg.graceMs);\n return { token: s.token, exp: s.exp };\n }\n return null;\n}\n\nexport function hasValidToken(req: Request, url: URL, cfg: AuthConfig): boolean {\n const cur = activeToken(cfg);\n if (!cur) return true;\n return extractToken(req, url) === cur.token;\n}\n\n/**\n * Gate for /sync: accept the master token OR any durable per-peer grant issued\n * during pairing (see ./pairing.ts). Returns true when auth is off (--debug).\n * `db` is needed to look up grants even in staticToken mode where cfg.db is null.\n */\nexport function acceptsSyncToken(req: Request, url: URL, cfg: AuthConfig, db: Database): boolean {\n if (!authActive(cfg)) return true;\n const presented = extractToken(req, url);\n if (!presented) return false;\n const cur = activeToken(cfg);\n if (cur && presented === cur.token) return true;\n return isAcceptedGrant(db, presented);\n}\n\n/**\n * Token exchange: a holder of the current token (or the in-grace previous token)\n * gets the current token back. Managed mode only — returns null otherwise.\n */\nexport function renewToken(\n req: Request,\n url: URL,\n cfg: AuthConfig,\n): { token: string; exp: number } | null {\n if (cfg.debug || cfg.staticToken != null || !cfg.db) return null;\n const s = loadOrRotate(cfg.db, cfg.ttlMs, cfg.graceMs);\n const presented = extractToken(req, url);\n if (!presented) return null;\n if (presented === s.token) return { token: s.token, exp: s.exp };\n if (s.prev && presented === s.prev && Date.now() < s.prevExp) {\n return { token: s.token, exp: s.exp };\n }\n return null;\n}\n\n/** A browser navigation (so we can answer with an unlock page instead of a 401). */\nexport function wantsHtml(req: Request): boolean {\n return req.method === \"GET\" && (req.headers.get(\"accept\") ?? \"\").includes(\"text/html\");\n}\n\nconst HTML_HEADERS = { \"content-type\": \"text/html; charset=utf-8\" };\n\n/** Self-contained password prompt: stores token to localStorage + cookie, reloads. */\nexport function unlockPage(): string {\n return `<!doctype html><html lang=\"en\"><head>\n<meta charset=\"utf-8\"><meta name=\"viewport\" content=\"width=device-width,initial-scale=1\">\n<title>Unlock</title>\n<style>\n body{font:14px/1.5 -apple-system,BlinkMacSystemFont,\"Segoe UI\",Roboto,sans-serif;\n display:flex;min-height:100vh;margin:0;align-items:center;justify-content:center;\n background:#0d1117;color:#e6edf3}\n form{background:#161b22;border:1px solid #30363d;border-radius:10px;padding:28px;width:300px}\n h1{font-size:16px;margin:0 0 14px}\n input{width:100%;box-sizing:border-box;padding:8px;border-radius:6px;border:1px solid #30363d;\n background:#0d1117;color:inherit;margin-bottom:12px}\n button{width:100%;padding:8px;border:0;border-radius:6px;background:#238636;color:#fff;cursor:pointer}\n .err{color:#f85149;margin:0 0 12px;font-size:13px}\n</style></head><body>\n<form id=\"f\" style=\"display:none\">\n <h1>🔒 This server requires a token</h1>\n <p class=\"err\" id=\"e\" style=\"display:none\">Token rejected — try again.</p>\n <input id=\"t\" type=\"password\" placeholder=\"Token\" autocomplete=\"current-password\">\n <button type=\"submit\">Unlock</button>\n</form>\n<script>\n var KEY = \"mh_token\";\n function save(t) {\n localStorage.setItem(KEY, t);\n document.cookie = \"${COOKIE}=\" + encodeURIComponent(t) + \"; path=/; SameSite=Strict; Max-Age=31536000\";\n }\n function showForm() {\n document.getElementById(\"f\").style.display = \"block\";\n // A leftover token means an attempt (or silent renewal) failed the gate.\n if (localStorage.getItem(KEY)) document.getElementById(\"e\").style.display = \"block\";\n document.getElementById(\"t\").focus();\n }\n document.getElementById(\"f\").addEventListener(\"submit\", function (ev) {\n ev.preventDefault();\n save(document.getElementById(\"t\").value);\n location.reload();\n });\n // Seamless renewal for top-level navigation: if we hold a token, try swapping\n // it for the current one before prompting. Covers the case where the token\n // rotated while this browser held the (in-grace) previous one.\n var stored = localStorage.getItem(KEY);\n if (stored) {\n fetch(\"${RENEW_PATH}\", { headers: { authorization: \"Bearer \" + stored } })\n .then(function (r) { return r.ok ? r.json() : null; })\n .then(function (d) { if (d && d.token) { save(d.token); location.reload(); } else { showForm(); } })\n .catch(showForm);\n } else {\n showForm();\n }\n</script>\n</body></html>`;\n}\n\n/**\n * The injected page runtime (built from src/webui/runtime.ts, served at\n * /mh-runtime.js). Carries what the old inline fetch shim did — same-origin\n * Bearer attach + transparent 401 renewal — plus the offline machinery:\n * service-worker registration and the local-replica RPC bridge that lets\n * hosted site pages read/write hub data with no network. Loaded synchronously\n * (classic script, head-first) so fetch is wrapped before page code runs.\n */\nconst RUNTIME_TAG = `<script src=\"/mh-runtime.js\"></script>`;\n\n/** Insert the runtime into an HTML document (right after <head>, else prepend). */\nexport function injectShim(html: string): string {\n const i = html.toLowerCase().indexOf(\"<head>\");\n if (i >= 0) return html.slice(0, i + 6) + RUNTIME_TAG + html.slice(i + 6);\n return RUNTIME_TAG + html;\n}\n\n/** Inject the page runtime into HTML responses. Unconditional (unlike the old\n * token-only shim): the offline bridge matters even in --debug mode where\n * auth is off — the token half simply no-ops without a stored token. */\nexport async function withShim(res: Response, _cfg: AuthConfig): Promise<Response> {\n const ct = res.headers.get(\"content-type\") ?? \"\";\n if (!ct.includes(\"text/html\")) return res;\n const html = injectShim(await res.text());\n const headers = new Headers(res.headers);\n return new Response(html, { status: res.status, headers });\n}\n\nexport function unauthorized(): Response {\n return Response.json({ error: \"unauthorized\" }, { status: 401 });\n}\n\nexport { HTML_HEADERS };\n",
127
- "import { fileURLToPath } from \"node:url\";\nimport { readdirSync, statSync } from \"node:fs\";\nimport { join, dirname } from \"node:path\";\n// Inlined as a string at build time (Bun text loader), so packaged builds and\n// compiled binaries carry the stylesheet with no extra asset file. In dev the\n// file is re-read from disk per request instead — see getCss().\nimport APP_CSS from \"../styles.css\" with { type: \"text\" };\nimport { ICON_192, ICON_512, ICON_180 } from \"./icons.ts\";\n\n// Serves the browser WebUI at `/`. Core never imports this module: it is wired\n// into the server through startServer's `ui` option (see core/sync/server.ts),\n// keeping presentation code out of the core layer and off the CLI startup path.\n// The Preact bundle itself is built or loaded lazily on the first request.\n\n/** True when running from the source tree (bun dev / bun test) rather than a\n * packaged dist build or a compiled binary. Switches asset serving to\n * rebuild-on-change so a browser refresh is enough to see edits. */\nconst RUNNING_FROM_SOURCE = import.meta.url.includes(\"/src/webui/\");\n\n/** The HTML shell. The Preact app and stylesheet are delivered separately as\n * /webui.js and /webui.css (both served below, never cached). */\nconst HTML = `<!doctype html>\n<html lang=\"zh\">\n<head>\n<meta charset=\"utf-8\" />\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1, viewport-fit=cover\" />\n<!-- Mobile browser chrome (status/address bar) tints to theme-color; app.tsx\n keeps #theme-color-meta in sync with the active theme + visible surface. -->\n<meta name=\"theme-color\" id=\"theme-color-meta\" content=\"#ffffff\" />\n<meta name=\"apple-mobile-web-app-capable\" content=\"yes\" />\n<meta name=\"apple-mobile-web-app-status-bar-style\" content=\"default\" />\n<title>Metahub</title>\n<link rel=\"preconnect\" href=\"https://fonts.googleapis.com\">\n<link rel=\"preconnect\" href=\"https://fonts.gstatic.com\" crossorigin>\n<!-- Load web fonts without blocking first paint: media=\"print\" keeps the\n stylesheet non-render-blocking, then onload flips it to \"all\". The page\n paints instantly with the system-font fallbacks baked into --ui/--mono and\n swaps to the web fonts when they arrive (or stays on system fonts offline).\n This is what kept the desktop cold-start white for seconds on slow networks. -->\n<link rel=\"stylesheet\" media=\"print\" onload=\"this.media='all'\" href=\"https://fonts.googleapis.com/css2?family=Hanken+Grotesk:wght@400;500;600;700&family=JetBrains+Mono:wght@400;500&display=swap\">\n<noscript><link rel=\"stylesheet\" href=\"https://fonts.googleapis.com/css2?family=Hanken+Grotesk:wght@400;500;600;700&family=JetBrains+Mono:wght@400;500&display=swap\"></noscript>\n<!-- FOUC guard: resolve the stored choice (system → OS preference) to an\n explicit data-resolved before first paint. CSS keys off data-resolved\n alone, so the dark palette exists exactly once — see styles.css. Dark also\n pre-tints the status bar (hex mirrors --bg) so the first frame isn't white. -->\n<script>try{var t=localStorage.getItem('mh-theme'),d=t==='dark'||(t!=='light'&&matchMedia('(prefers-color-scheme: dark)').matches);document.documentElement.dataset.resolved=d?'dark':'light';if(d)document.getElementById('theme-color-meta').content='#1a1a1c'}catch(e){}</script>\n<link rel=\"manifest\" href=\"/manifest.webmanifest\">\n<link rel=\"apple-touch-icon\" href=\"/icons/icon-180.png\">\n<link rel=\"stylesheet\" href=\"/webui.css\">\n</head>\n<body>\n<div id=\"app\"></div>\n<script type=\"module\" src=\"/webui.js\"></script>\n</body>\n</html>`;\n\n/** Bundles injected by `bun build --compile` binaries (e.g. the desktop\n * sidecar), where neither a sibling dist/ nor the source tree exists at\n * runtime — embedded at build time and handed in here. */\nconst injected: Record<string, string | null> = {\n js: null,\n sw: null,\n dbWorker: null,\n runtime: null,\n sdk: null,\n};\nlet injectedWasm: ArrayBuffer | null = null;\n\nexport function setWebuiBundle(bundle: {\n js: string;\n sw: string;\n dbWorker: string;\n runtime: string;\n sdk: string;\n wasm: Uint8Array;\n}): void {\n injected.js = bundle.js;\n injected.sw = bundle.sw;\n injected.dbWorker = bundle.dbWorker;\n injected.runtime = bundle.runtime;\n injected.sdk = bundle.sdk;\n // Normalize to a whole ArrayBuffer (what Response accepts under every lib).\n const w = bundle.wasm;\n injectedWasm =\n w.byteOffset === 0 && w.byteLength === w.buffer.byteLength\n ? (w.buffer as ArrayBuffer)\n : (w.slice().buffer as ArrayBuffer);\n}\n\n/** Newest mtime across the browser-bundle sources (src/webui/**.ts[x]).\n * ./server is skipped — server-side code never enters the browser bundle. */\nfunction newestSourceMtime(dir: string): number {\n let newest = 0;\n for (const e of readdirSync(dir, { withFileTypes: true })) {\n if (e.name === \"server\" || e.name.startsWith(\".\")) continue;\n const p = join(dir, e.name);\n if (e.isDirectory()) newest = Math.max(newest, newestSourceMtime(p));\n else if (/\\.tsx?$/.test(e.name)) newest = Math.max(newest, statSync(p).mtimeMs);\n }\n return newest;\n}\n\n/**\n * One resolver per browser bundle, all with the same three-way strategy:\n * embedded (compiled binary) > rebuild-on-change from source (dev: any newer\n * source file triggers a rebuild, so a refresh is enough) > prebuilt dist\n * sibling (packaged builds), process-cached.\n */\nfunction bundleGetter(opts: {\n key: keyof typeof injected;\n /** Dev entrypoint, relative to this file. */\n entry: string;\n /** Prebuilt artifact name in dist/ (sibling of the compiled assets.js). */\n dist: string;\n /** Extra source dirs (relative to repo src/) the dev mtime scan must cover. */\n extraDirs?: string[];\n}): () => Promise<string> {\n let cached: string | null = null;\n let cachedMtime = 0;\n return async () => {\n const fromBinary = injected[opts.key];\n if (fromBinary != null) return fromBinary;\n\n if (RUNNING_FROM_SOURCE) {\n const srcDir = fileURLToPath(new URL(\"..\", import.meta.url));\n let newest = newestSourceMtime(srcDir);\n for (const extra of opts.extraDirs ?? []) {\n newest = Math.max(newest, newestSourceMtime(fileURLToPath(new URL(extra, import.meta.url))));\n }\n if (cached == null || newest > cachedMtime) {\n const entry = fileURLToPath(new URL(opts.entry, import.meta.url));\n const res = await Bun.build({ entrypoints: [entry], target: \"browser\" });\n if (!res.success) throw new AggregateError(res.logs, `${opts.dist} build failed`);\n cached = await res.outputs[0]!.text();\n cachedMtime = newest;\n }\n return cached;\n }\n\n if (cached == null) {\n const prebuilt = Bun.file(fileURLToPath(new URL(`./${opts.dist}`, import.meta.url)));\n if (!(await prebuilt.exists())) {\n throw new Error(`${opts.dist} missing: run \\`bun run build\\``);\n }\n cached = await prebuilt.text();\n }\n return cached;\n };\n}\n\nconst getJs = bundleGetter({ key: \"js\", entry: \"../app.tsx\", dist: \"webui.js\" });\nconst getSwRaw = bundleGetter({ key: \"sw\", entry: \"../sw.ts\", dist: \"sw.js\" });\nconst getDbWorker = bundleGetter({ key: \"dbWorker\", entry: \"../data/db-worker.ts\", dist: \"db-worker.js\" });\nconst getRuntime = bundleGetter({ key: \"runtime\", entry: \"../runtime.ts\", dist: \"mh-runtime.js\" });\nconst getSdk = bundleGetter({ key: \"sdk\", entry: \"../../sdk/client.ts\", dist: \"metahub-sdk.js\", extraDirs: [\"../../sdk\"] });\n\n/** The stylesheet: read from disk per request in dev (so CSS edits land on the\n * next refresh), the build-time inlined copy otherwise. */\nasync function getCss(): Promise<string> {\n if (RUNNING_FROM_SOURCE) {\n return Bun.file(fileURLToPath(new URL(\"../styles.css\", import.meta.url))).text();\n }\n return APP_CSS;\n}\n\n/** /sw.js with its cache version stamped in: a hash of the current js+css, so\n * any bundle change byte-diffs the worker (the browser's update trigger) and\n * stale shell caches are dropped on activation. */\nasync function getSw(): Promise<string> {\n const [raw, js, css] = await Promise.all([getSwRaw(), getJs(), getCss()]);\n const version = new Bun.CryptoHasher(\"sha256\").update(js).update(css).digest(\"hex\").slice(0, 16);\n return raw.replaceAll(\"__MH_SW_VERSION__\", version);\n}\n\n/** sqlite3.wasm bytes: embedded (compiled binary) > node_modules (dev) >\n * sibling dist copy (packaged; build.ts copies it next to the bundles). */\nasync function getWasm(): Promise<ArrayBuffer> {\n if (injectedWasm != null) return injectedWasm;\n const path = RUNNING_FROM_SOURCE\n ? join(\n dirname(Bun.resolveSync(\"@sqlite.org/sqlite-wasm\", fileURLToPath(new URL(\".\", import.meta.url)))),\n \"sqlite3.wasm\",\n )\n : fileURLToPath(new URL(\"./sqlite3.wasm\", import.meta.url));\n const f = Bun.file(path);\n if (!(await f.exists())) {\n throw new Error(`sqlite3.wasm missing at ${path} — run \\`bun install\\` / \\`bun run build\\``);\n }\n return f.arrayBuffer();\n}\n\n/** Web app manifest: installability metadata for add-to-home-screen/PWA. */\nconst MANIFEST = JSON.stringify({\n name: \"Metahub\",\n short_name: \"Metahub\",\n start_url: \"/\",\n scope: \"/\",\n display: \"standalone\",\n background_color: \"#ffffff\",\n theme_color: \"#ffffff\",\n icons: [\n { src: \"/icons/icon-192.png\", sizes: \"192x192\", type: \"image/png\" },\n { src: \"/icons/icon-512.png\", sizes: \"512x512\", type: \"image/png\" },\n ],\n});\n\nconst ICONS: Record<string, string> = {\n \"/icons/icon-192.png\": ICON_192,\n \"/icons/icon-512.png\": ICON_512,\n \"/icons/icon-180.png\": ICON_180,\n};\n\n/** Pre-build & cache the JS bundle ahead of the first request. In dev the first\n * `/webui.js` hit otherwise pays for a `Bun.build` (1–3s) that blocks the\n * WebUI's first paint; warming it right after the server starts listening\n * moves that cost off the cold-start critical path. In packaged builds the\n * bundle is already embedded via setWebuiBundle(), so this is a no-op. */\nexport async function warmWebui(): Promise<void> {\n try {\n await getJs();\n } catch {\n // best-effort: a failed warm just falls back to building on first request\n }\n}\n\n// Served by a local server to (mostly) one machine: `no-store` everywhere\n// trades a few KB per load for never needing a hard refresh after an update.\nfunction asset(body: string, contentType: string): Response {\n return new Response(body, {\n headers: { \"content-type\": contentType, \"cache-control\": \"no-store\" },\n });\n}\n\n/** Handle WebUI asset requests. Returns null for anything else so the caller\n * can fall through to the API routes. */\nexport async function serveWebui(req: Request): Promise<Response | null> {\n if (req.method !== \"GET\") return null;\n const { pathname } = new URL(req.url);\n\n if (pathname === \"/\") return asset(HTML, \"text/html; charset=utf-8\");\n if (pathname === \"/webui.css\") return asset(await getCss(), \"text/css; charset=utf-8\");\n if (pathname === \"/manifest.webmanifest\") return asset(MANIFEST, \"application/manifest+json\");\n const icon = ICONS[pathname];\n if (icon) {\n return new Response(Buffer.from(icon, \"base64\"), {\n // Icons never change within a deploy; let the browser keep them a day.\n headers: { \"content-type\": \"image/png\", \"cache-control\": \"public, max-age=86400\" },\n });\n }\n if (pathname === \"/sqlite3.wasm\") {\n try {\n return new Response(await getWasm(), {\n // ~1MB and changes only on dependency upgrades; the service worker\n // additionally keeps it cache-first for offline starts.\n headers: { \"content-type\": \"application/wasm\", \"cache-control\": \"public, max-age=86400\" },\n });\n } catch (e) {\n console.error(\"[webui] failed to serve /sqlite3.wasm —\", e);\n return new Response(`sqlite3.wasm unavailable: ${e}`, { status: 500 });\n }\n }\n const script: Record<string, () => Promise<string>> = {\n \"/webui.js\": getJs,\n \"/sw.js\": getSw,\n \"/db-worker.js\": getDbWorker,\n \"/mh-runtime.js\": getRuntime,\n \"/metahub-sdk.js\": getSdk,\n };\n const getter = script[pathname];\n if (getter) {\n try {\n return asset(await getter(), \"text/javascript; charset=utf-8\");\n } catch (e) {\n // This catch is the only thing between the error and oblivion: Bun only\n // auto-logs *uncaught* handler errors, and we catch this one. Log the full\n // error object (not `${e}`) so getJs's AggregateError sub-logs surface —\n // otherwise the 500 lives solely in the response body, never the logs.\n console.error(`[webui] failed to serve ${pathname} —`, e);\n return new Response(`webui build failed: ${e}`, { status: 500 });\n }\n }\n return null;\n}\n",
130
+ "// Token gate for the server. In --debug mode auth is disabled entirely. Otherwise\n// a single token guards every request. A token may arrive three ways so both\n// programmatic clients and browsers work:\n// - Authorization: Bearer <token> (API clients, and the injected fetch shim)\n// - Cookie: mh_token=<token> (browser top-level navigations)\n// - ?token=<token> (links / quick curl testing)\n// Browsers without a token get an unlock page that stores the password to\n// localStorage + a cookie and reloads; served HTML then gets a fetch shim that\n// re-attaches the token as a Bearer header on same-origin API calls.\n\nimport type { Database } from \"bun:sqlite\";\nimport { loadOrRotate } from \"./token.ts\";\nimport { isAcceptedGrant } from \"./pairing.ts\";\nimport { RENEW_PATH } from \"./protocol.ts\";\n\n// Three modes:\n// debug — auth off entirely.\n// staticToken — fixed token from --token/env; not persisted, never expires.\n// db (managed) — persistent, rotating token in ~/.metahub (see ./token.ts).\nexport interface AuthConfig {\n debug: boolean;\n staticToken: string | null;\n db: Database | null;\n ttlMs: number;\n graceMs: number;\n}\n\nconst COOKIE = \"mh_token\";\n/** Shared cookie attributes for the token cookie (server Set-Cookie and the\n * unlock page's client-side write must stay identical). */\nconst COOKIE_ATTRS = \"path=/; SameSite=Strict; Max-Age=31536000\";\n\n/** The `Set-Cookie` value that persists `token` as the browser's mh_token. Adds\n * `Secure` over TLS so a cookie carrying the master credential can't leak over an\n * accidental plaintext same-host request. */\nfunction tokenCookie(token: string, secure: boolean): string {\n return `${COOKIE}=${encodeURIComponent(token)}; ${COOKIE_ATTRS}${secure ? \"; Secure\" : \"\"}`;\n}\n\n/**\n * When a request authenticated via a `?token=` query param and carries no cookie\n * yet, return the `Set-Cookie` to persist it; otherwise null. A `/?token=...`\n * link (QR / \"copy login link\") authorizes only that one navigation — without\n * this, the browser's follow-up /webui.css, /webui.js etc. carry no credential\n * and 401, serving a broken page. Setting the cookie on the HTML response lets\n * those same-origin sub-requests ride it automatically.\n */\nexport function queryTokenCookie(req: Request, url: URL, cfg: AuthConfig): string | null {\n const cur = activeToken(cfg);\n if (!cur) return null; // auth off — nothing to persist\n if (cookieToken(req) != null) return null; // already has a cookie session\n const q = url.searchParams.get(\"token\");\n return q && q === cur.token ? tokenCookie(cur.token, url.protocol === \"https:\") : null;\n}\n\nfunction cookieToken(req: Request): string | null {\n const header = req.headers.get(\"cookie\");\n if (!header) return null;\n for (const part of header.split(\";\")) {\n const [k, ...v] = part.trim().split(\"=\");\n if (k === COOKIE) return decodeURIComponent(v.join(\"=\"));\n }\n return null;\n}\n\nexport function extractToken(req: Request, url: URL): string | null {\n const auth = req.headers.get(\"authorization\");\n if (auth?.startsWith(\"Bearer \")) return auth.slice(7);\n return cookieToken(req) ?? url.searchParams.get(\"token\");\n}\n\n/** Whether auth is on at all (so the gate runs and the fetch shim is injected). */\nexport function authActive(cfg: AuthConfig): boolean {\n return !cfg.debug && (cfg.staticToken != null || cfg.db != null);\n}\n\n/** The currently-valid token and its expiry, or null when auth is off. */\nexport function activeToken(cfg: AuthConfig): { token: string; exp: number } | null {\n if (cfg.debug) return null;\n if (cfg.staticToken != null) return { token: cfg.staticToken, exp: Infinity };\n if (cfg.db) {\n const s = loadOrRotate(cfg.db, cfg.ttlMs, cfg.graceMs);\n return { token: s.token, exp: s.exp };\n }\n return null;\n}\n\nexport function hasValidToken(req: Request, url: URL, cfg: AuthConfig): boolean {\n const cur = activeToken(cfg);\n if (!cur) return true;\n return extractToken(req, url) === cur.token;\n}\n\n/**\n * Gate for /sync: accept the master token OR any durable per-peer grant issued\n * during pairing (see ./pairing.ts). Returns true when auth is off (--debug).\n * `db` is needed to look up grants even in staticToken mode where cfg.db is null.\n */\nexport function acceptsSyncToken(req: Request, url: URL, cfg: AuthConfig, db: Database): boolean {\n if (!authActive(cfg)) return true;\n const presented = extractToken(req, url);\n if (!presented) return false;\n const cur = activeToken(cfg);\n if (cur && presented === cur.token) return true;\n return isAcceptedGrant(db, presented);\n}\n\n/**\n * Token exchange: a holder of the current token (or the in-grace previous token)\n * gets the current token back. Managed mode only — returns null otherwise.\n */\nexport function renewToken(\n req: Request,\n url: URL,\n cfg: AuthConfig,\n): { token: string; exp: number } | null {\n if (cfg.debug || cfg.staticToken != null || !cfg.db) return null;\n const s = loadOrRotate(cfg.db, cfg.ttlMs, cfg.graceMs);\n const presented = extractToken(req, url);\n if (!presented) return null;\n if (presented === s.token) return { token: s.token, exp: s.exp };\n if (s.prev && presented === s.prev && Date.now() < s.prevExp) {\n return { token: s.token, exp: s.exp };\n }\n return null;\n}\n\n/** A browser navigation (so we can answer with an unlock page instead of a 401). */\nexport function wantsHtml(req: Request): boolean {\n return req.method === \"GET\" && (req.headers.get(\"accept\") ?? \"\").includes(\"text/html\");\n}\n\nconst HTML_HEADERS = { \"content-type\": \"text/html; charset=utf-8\" };\n\n/** Self-contained password prompt: stores token to localStorage + cookie, reloads. */\nexport function unlockPage(): string {\n return `<!doctype html><html lang=\"en\"><head>\n<meta charset=\"utf-8\"><meta name=\"viewport\" content=\"width=device-width,initial-scale=1\">\n<title>Unlock</title>\n<style>\n body{font:14px/1.5 -apple-system,BlinkMacSystemFont,\"Segoe UI\",Roboto,sans-serif;\n display:flex;min-height:100vh;margin:0;align-items:center;justify-content:center;\n background:#0d1117;color:#e6edf3}\n form{background:#161b22;border:1px solid #30363d;border-radius:10px;padding:28px;width:300px}\n h1{font-size:16px;margin:0 0 14px}\n input{width:100%;box-sizing:border-box;padding:8px;border-radius:6px;border:1px solid #30363d;\n background:#0d1117;color:inherit;margin-bottom:12px}\n button{width:100%;padding:8px;border:0;border-radius:6px;background:#238636;color:#fff;cursor:pointer}\n .err{color:#f85149;margin:0 0 12px;font-size:13px}\n</style></head><body>\n<form id=\"f\" style=\"display:none\">\n <h1>🔒 This server requires a token</h1>\n <p class=\"err\" id=\"e\" style=\"display:none\">Token rejected — try again.</p>\n <input id=\"t\" type=\"password\" placeholder=\"Token\" autocomplete=\"current-password\">\n <button type=\"submit\">Unlock</button>\n</form>\n<script>\n var KEY = \"mh_token\";\n function save(t) {\n localStorage.setItem(KEY, t);\n document.cookie = \"${COOKIE}=\" + encodeURIComponent(t) + \"; ${COOKIE_ATTRS}\" +\n (location.protocol === \"https:\" ? \"; Secure\" : \"\");\n }\n function showForm() {\n document.getElementById(\"f\").style.display = \"block\";\n // A leftover token means an attempt (or silent renewal) failed the gate.\n if (localStorage.getItem(KEY)) document.getElementById(\"e\").style.display = \"block\";\n document.getElementById(\"t\").focus();\n }\n document.getElementById(\"f\").addEventListener(\"submit\", function (ev) {\n ev.preventDefault();\n save(document.getElementById(\"t\").value);\n location.reload();\n });\n // Seamless renewal for top-level navigation: if we hold a token, try swapping\n // it for the current one before prompting. Covers the case where the token\n // rotated while this browser held the (in-grace) previous one.\n var stored = localStorage.getItem(KEY);\n if (stored) {\n fetch(\"${RENEW_PATH}\", { headers: { authorization: \"Bearer \" + stored } })\n .then(function (r) { return r.ok ? r.json() : null; })\n .then(function (d) { if (d && d.token) { save(d.token); location.reload(); } else { showForm(); } })\n .catch(showForm);\n } else {\n showForm();\n }\n</script>\n</body></html>`;\n}\n\n/**\n * The injected page runtime (built from src/webui/runtime.ts, served at\n * /mh-runtime.js). Carries what the old inline fetch shim did — same-origin\n * Bearer attach + transparent 401 renewal — plus the offline machinery:\n * service-worker registration and the local-replica RPC bridge that lets\n * hosted site pages read/write hub data with no network. Loaded synchronously\n * (classic script, head-first) so fetch is wrapped before page code runs.\n */\nconst RUNTIME_TAG = `<script src=\"/mh-runtime.js\"></script>`;\n\n/** Insert the runtime into an HTML document (right after <head>, else prepend). */\nexport function injectShim(html: string): string {\n const i = html.toLowerCase().indexOf(\"<head>\");\n if (i >= 0) return html.slice(0, i + 6) + RUNTIME_TAG + html.slice(i + 6);\n return RUNTIME_TAG + html;\n}\n\n/** Inject the page runtime into HTML responses. Unconditional (unlike the old\n * token-only shim): the offline bridge matters even in --debug mode where\n * auth is off — the token half simply no-ops without a stored token.\n *\n * When `req`/`url` are supplied and the navigation authenticated via a `?token=`\n * query param, persist that token as the mh_token cookie on this HTML response\n * so the browser's follow-up asset requests (/webui.css, /webui.js) carry it. */\nexport async function withShim(\n res: Response,\n cfg: AuthConfig,\n req?: Request,\n url?: URL,\n): Promise<Response> {\n const ct = res.headers.get(\"content-type\") ?? \"\";\n if (!ct.includes(\"text/html\")) return res;\n const html = injectShim(await res.text());\n const headers = new Headers(res.headers);\n if (req && url) {\n const cookie = queryTokenCookie(req, url, cfg);\n if (cookie) headers.append(\"set-cookie\", cookie);\n }\n return new Response(html, { status: res.status, headers });\n}\n\nexport function unauthorized(): Response {\n return Response.json({ error: \"unauthorized\" }, { status: 401 });\n}\n\nexport { HTML_HEADERS };\n",
131
+ "import { fileURLToPath } from \"node:url\";\nimport { readdirSync, statSync } from \"node:fs\";\nimport { join, dirname } from \"node:path\";\n// Inlined as a string at build time (Bun text loader), so packaged builds and\n// compiled binaries carry the stylesheet with no extra asset file. In dev the\n// file is re-read from disk per request instead — see getCss().\nimport APP_CSS from \"../styles.css\" with { type: \"text\" };\nimport { ICON_192, ICON_512, ICON_180 } from \"./icons.ts\";\nimport pkg from \"../../../package.json\" with { type: \"json\" };\n\n// Serves the browser WebUI at `/`. Core never imports this module: it is wired\n// into the server through startServer's `ui` option (see core/sync/server.ts),\n// keeping presentation code out of the core layer and off the CLI startup path.\n// The Preact bundle itself is built or loaded lazily on the first request.\n\n/** True when running from the source tree (bun dev / bun test) rather than a\n * packaged dist build or a compiled binary. Switches asset serving to\n * rebuild-on-change so a browser refresh is enough to see edits. */\nconst RUNNING_FROM_SOURCE = import.meta.url.includes(\"/src/webui/\");\n\n/** The HTML shell. The Preact app and stylesheet are delivered separately as\n * /webui.js and /webui.css (both served below, never cached). */\nconst HTML = `<!doctype html>\n<html lang=\"zh\">\n<head>\n<meta charset=\"utf-8\" />\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1, viewport-fit=cover\" />\n<!-- Mobile browser chrome (status/address bar) tints to theme-color; app.tsx\n keeps #theme-color-meta in sync with the active theme + visible surface. -->\n<meta name=\"theme-color\" id=\"theme-color-meta\" content=\"#ffffff\" />\n<meta name=\"apple-mobile-web-app-capable\" content=\"yes\" />\n<meta name=\"apple-mobile-web-app-status-bar-style\" content=\"default\" />\n<title>Metahub</title>\n<link rel=\"preconnect\" href=\"https://fonts.googleapis.com\">\n<link rel=\"preconnect\" href=\"https://fonts.gstatic.com\" crossorigin>\n<!-- Load web fonts without blocking first paint: media=\"print\" keeps the\n stylesheet non-render-blocking, then onload flips it to \"all\". The page\n paints instantly with the system-font fallbacks baked into --ui/--mono and\n swaps to the web fonts when they arrive (or stays on system fonts offline).\n This is what kept the desktop cold-start white for seconds on slow networks. -->\n<link rel=\"stylesheet\" media=\"print\" onload=\"this.media='all'\" href=\"https://fonts.googleapis.com/css2?family=Hanken+Grotesk:wght@400;500;600;700&family=JetBrains+Mono:wght@400;500&display=swap\">\n<noscript><link rel=\"stylesheet\" href=\"https://fonts.googleapis.com/css2?family=Hanken+Grotesk:wght@400;500;600;700&family=JetBrains+Mono:wght@400;500&display=swap\"></noscript>\n<!-- FOUC guard: resolve the stored choice (system → OS preference) to an\n explicit data-resolved before first paint. CSS keys off data-resolved\n alone, so the dark palette exists exactly once — see styles.css. Dark also\n pre-tints the status bar (hex mirrors --bg) so the first frame isn't white. -->\n<script>try{var t=localStorage.getItem('mh-theme'),d=t==='dark'||(t!=='light'&&matchMedia('(prefers-color-scheme: dark)').matches);document.documentElement.dataset.resolved=d?'dark':'light';if(d)document.getElementById('theme-color-meta').content='#1a1a1c'}catch(e){}</script>\n<link rel=\"manifest\" href=\"/manifest.webmanifest\">\n<link rel=\"apple-touch-icon\" href=\"/icons/icon-180.png\">\n<link rel=\"stylesheet\" href=\"/webui.css\">\n</head>\n<body>\n<div id=\"app\"></div>\n<script type=\"module\" src=\"/webui.js\"></script>\n</body>\n</html>`;\n\n/** Bundles injected by `bun build --compile` binaries (e.g. the desktop\n * sidecar), where neither a sibling dist/ nor the source tree exists at\n * runtime — embedded at build time and handed in here. */\nconst injected: Record<string, string | null> = {\n js: null,\n sw: null,\n dbWorker: null,\n runtime: null,\n sdk: null,\n};\nlet injectedWasm: ArrayBuffer | null = null;\n\nexport function setWebuiBundle(bundle: {\n js: string;\n sw: string;\n dbWorker: string;\n runtime: string;\n sdk: string;\n wasm: Uint8Array;\n}): void {\n injected.js = bundle.js;\n injected.sw = bundle.sw;\n injected.dbWorker = bundle.dbWorker;\n injected.runtime = bundle.runtime;\n injected.sdk = bundle.sdk;\n // Normalize to a whole ArrayBuffer (what Response accepts under every lib).\n const w = bundle.wasm;\n injectedWasm =\n w.byteOffset === 0 && w.byteLength === w.buffer.byteLength\n ? (w.buffer as ArrayBuffer)\n : (w.slice().buffer as ArrayBuffer);\n}\n\n/** Newest mtime across the browser-bundle sources (src/webui/**.ts[x]).\n * ./server is skipped — server-side code never enters the browser bundle. */\nfunction newestSourceMtime(dir: string): number {\n let newest = 0;\n for (const e of readdirSync(dir, { withFileTypes: true })) {\n if (e.name === \"server\" || e.name.startsWith(\".\")) continue;\n const p = join(dir, e.name);\n if (e.isDirectory()) newest = Math.max(newest, newestSourceMtime(p));\n else if (/\\.tsx?$/.test(e.name)) newest = Math.max(newest, statSync(p).mtimeMs);\n }\n return newest;\n}\n\n/**\n * One resolver per browser bundle, all with the same three-way strategy:\n * embedded (compiled binary) > rebuild-on-change from source (dev: any newer\n * source file triggers a rebuild, so a refresh is enough) > prebuilt dist\n * sibling (packaged builds), process-cached.\n */\nfunction bundleGetter(opts: {\n key: keyof typeof injected;\n /** Dev entrypoint, relative to this file. */\n entry: string;\n /** Prebuilt artifact name in dist/ (sibling of the compiled assets.js). */\n dist: string;\n /** Extra source dirs (relative to repo src/) the dev mtime scan must cover. */\n extraDirs?: string[];\n}): () => Promise<string> {\n let cached: string | null = null;\n let cachedMtime = 0;\n return async () => {\n const fromBinary = injected[opts.key];\n if (fromBinary != null) return fromBinary;\n\n if (RUNNING_FROM_SOURCE) {\n const srcDir = fileURLToPath(new URL(\"..\", import.meta.url));\n let newest = newestSourceMtime(srcDir);\n for (const extra of opts.extraDirs ?? []) {\n newest = Math.max(newest, newestSourceMtime(fileURLToPath(new URL(extra, import.meta.url))));\n }\n if (cached == null || newest > cachedMtime) {\n const entry = fileURLToPath(new URL(opts.entry, import.meta.url));\n const res = await Bun.build({ entrypoints: [entry], target: \"browser\" });\n if (!res.success) throw new AggregateError(res.logs, `${opts.dist} build failed`);\n cached = await res.outputs[0]!.text();\n cachedMtime = newest;\n }\n return cached;\n }\n\n if (cached == null) {\n const prebuilt = Bun.file(fileURLToPath(new URL(`./${opts.dist}`, import.meta.url)));\n if (!(await prebuilt.exists())) {\n throw new Error(`${opts.dist} missing: run \\`bun run build\\``);\n }\n cached = await prebuilt.text();\n }\n return cached;\n };\n}\n\nconst getJs = bundleGetter({ key: \"js\", entry: \"../app.tsx\", dist: \"webui.js\" });\nconst getSwRaw = bundleGetter({ key: \"sw\", entry: \"../sw.ts\", dist: \"sw.js\" });\nconst getDbWorker = bundleGetter({ key: \"dbWorker\", entry: \"../data/db-worker.ts\", dist: \"db-worker.js\" });\nconst getRuntime = bundleGetter({ key: \"runtime\", entry: \"../runtime.ts\", dist: \"mh-runtime.js\" });\nconst getSdk = bundleGetter({ key: \"sdk\", entry: \"../../sdk/client.ts\", dist: \"metahub-sdk.js\", extraDirs: [\"../../sdk\"] });\n\n/** The stylesheet: read from disk per request in dev (so CSS edits land on the\n * next refresh), the build-time inlined copy otherwise. */\nasync function getCss(): Promise<string> {\n if (RUNNING_FROM_SOURCE) {\n return Bun.file(fileURLToPath(new URL(\"../styles.css\", import.meta.url))).text();\n }\n return APP_CSS;\n}\n\n/** /webui.js with the package version stamped into the __MH_WEBUI_VERSION__\n * placeholder, so the data-blind PWA shell — which has no /api/version server\n * to ask — can still show its build version. Flows to every serve path (live\n * server, the static shell build via serveWebui, packaged dist, compiled\n * binary) the same way the SW version stamp does. */\nasync function getJsStamped(): Promise<string> {\n return (await getJs()).replaceAll(\"__MH_WEBUI_VERSION__\", pkg.version);\n}\n\n/** /sw.js with its cache version stamped in: a hash of the current js+css, so\n * any bundle change byte-diffs the worker (the browser's update trigger) and\n * stale shell caches are dropped on activation. Hashing the *stamped* js means\n * a version-only bump (identical code) still busts the shell cache. */\nasync function getSw(): Promise<string> {\n const [raw, js, css] = await Promise.all([getSwRaw(), getJsStamped(), getCss()]);\n const version = new Bun.CryptoHasher(\"sha256\").update(js).update(css).digest(\"hex\").slice(0, 16);\n return raw.replaceAll(\"__MH_SW_VERSION__\", version);\n}\n\n/** sqlite3.wasm bytes: embedded (compiled binary) > node_modules (dev) >\n * sibling dist copy (packaged; build.ts copies it next to the bundles). */\nasync function getWasm(): Promise<ArrayBuffer> {\n if (injectedWasm != null) return injectedWasm;\n const path = RUNNING_FROM_SOURCE\n ? join(\n dirname(Bun.resolveSync(\"@sqlite.org/sqlite-wasm\", fileURLToPath(new URL(\".\", import.meta.url)))),\n \"sqlite3.wasm\",\n )\n : fileURLToPath(new URL(\"./sqlite3.wasm\", import.meta.url));\n const f = Bun.file(path);\n if (!(await f.exists())) {\n throw new Error(`sqlite3.wasm missing at ${path} — run \\`bun install\\` / \\`bun run build\\``);\n }\n return f.arrayBuffer();\n}\n\n/** Web app manifest: installability metadata for add-to-home-screen/PWA. */\nconst MANIFEST = JSON.stringify({\n name: \"Metahub\",\n short_name: \"Metahub\",\n start_url: \"/\",\n scope: \"/\",\n display: \"standalone\",\n background_color: \"#ffffff\",\n theme_color: \"#ffffff\",\n icons: [\n { src: \"/icons/icon-192.png\", sizes: \"192x192\", type: \"image/png\" },\n { src: \"/icons/icon-512.png\", sizes: \"512x512\", type: \"image/png\" },\n ],\n});\n\nconst ICONS: Record<string, string> = {\n \"/icons/icon-192.png\": ICON_192,\n \"/icons/icon-512.png\": ICON_512,\n \"/icons/icon-180.png\": ICON_180,\n};\n\n/** Pre-build & cache the JS bundle ahead of the first request. In dev the first\n * `/webui.js` hit otherwise pays for a `Bun.build` (1–3s) that blocks the\n * WebUI's first paint; warming it right after the server starts listening\n * moves that cost off the cold-start critical path. In packaged builds the\n * bundle is already embedded via setWebuiBundle(), so this is a no-op. */\nexport async function warmWebui(): Promise<void> {\n try {\n await getJs();\n } catch {\n // best-effort: a failed warm just falls back to building on first request\n }\n}\n\n// Served by a local server to (mostly) one machine: `no-store` everywhere\n// trades a few KB per load for never needing a hard refresh after an update.\nfunction asset(body: string, contentType: string): Response {\n return new Response(body, {\n headers: { \"content-type\": contentType, \"cache-control\": \"no-store\" },\n });\n}\n\n/** Handle WebUI asset requests. Returns null for anything else so the caller\n * can fall through to the API routes. */\nexport async function serveWebui(req: Request): Promise<Response | null> {\n if (req.method !== \"GET\") return null;\n const { pathname } = new URL(req.url);\n\n if (pathname === \"/\") return asset(HTML, \"text/html; charset=utf-8\");\n if (pathname === \"/webui.css\") return asset(await getCss(), \"text/css; charset=utf-8\");\n if (pathname === \"/manifest.webmanifest\") return asset(MANIFEST, \"application/manifest+json\");\n const icon = ICONS[pathname];\n if (icon) {\n return new Response(Buffer.from(icon, \"base64\"), {\n // Icons never change within a deploy; let the browser keep them a day.\n headers: { \"content-type\": \"image/png\", \"cache-control\": \"public, max-age=86400\" },\n });\n }\n if (pathname === \"/sqlite3.wasm\") {\n try {\n return new Response(await getWasm(), {\n // ~1MB and changes only on dependency upgrades; the service worker\n // additionally keeps it cache-first for offline starts.\n headers: { \"content-type\": \"application/wasm\", \"cache-control\": \"public, max-age=86400\" },\n });\n } catch (e) {\n console.error(\"[webui] failed to serve /sqlite3.wasm —\", e);\n return new Response(`sqlite3.wasm unavailable: ${e}`, { status: 500 });\n }\n }\n const script: Record<string, () => Promise<string>> = {\n \"/webui.js\": getJsStamped,\n \"/sw.js\": getSw,\n \"/db-worker.js\": getDbWorker,\n \"/mh-runtime.js\": getRuntime,\n \"/metahub-sdk.js\": getSdk,\n };\n const getter = script[pathname];\n if (getter) {\n try {\n return asset(await getter(), \"text/javascript; charset=utf-8\");\n } catch (e) {\n // This catch is the only thing between the error and oblivion: Bun only\n // auto-logs *uncaught* handler errors, and we catch this one. Log the full\n // error object (not `${e}`) so getJs's AggregateError sub-logs surface —\n // otherwise the 500 lives solely in the response body, never the logs.\n console.error(`[webui] failed to serve ${pathname} —`, e);\n return new Response(`webui build failed: ${e}`, { status: 500 });\n }\n }\n return null;\n}\n",
128
132
  "// PWA icons (PNG, base64) — resized from apps/desktop/build/icon.png (1024px).\n// Embedded as strings so packaged builds and compiled binaries need no asset files.\n\nexport const ICON_192 = \"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\";\n\nexport const ICON_512 = \"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\";\n\nexport const ICON_180 = \"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\";\n",
129
- "import { z } from \"zod\";\nimport { MhError } from \"../../core/errors.ts\";\nimport { errorResponse, type Route, type RouteCtx } from \"../../core/sync/routes.ts\";\nimport {\n listDatabases,\n createDatabase,\n updateDatabase,\n duplicateDatabase,\n deleteDatabase,\n} from \"../../core/databases.ts\";\nimport {\n listProperties,\n addProperty,\n updateProperty,\n setPropertyWidth,\n removeProperty,\n type PropType,\n type PropertyConfig,\n} from \"../../core/properties.ts\";\nimport {\n listRecords,\n getRecord,\n createRecord,\n updateRecord,\n moveRecord,\n deleteRecord,\n} from \"../../core/records.ts\";\nimport {\n listDocuments,\n getDocument,\n createDocument,\n updateDocument,\n documentVersion,\n moveDocument,\n duplicateDocument,\n deleteDocument,\n} from \"../../core/documents.ts\";\nimport {\n listDocumentRevisions,\n documentAtVersion,\n revertDocument,\n listRecordRevisions,\n recordAtVersion,\n recordFieldHistory,\n revertRecord,\n listPropertyRevisions,\n revertProperty,\n listDatabaseActivity,\n} from \"../../core/history.ts\";\nimport { search } from \"../../core/search.ts\";\nimport { getNodeId } from \"../../core/node.ts\";\nimport {\n cacheStats,\n cachedBlobs,\n readPolicy,\n knownNodes,\n knownBuckets,\n clearCache,\n reconcileCache,\n setFullNodes,\n setRedundancy,\n setPinned,\n verifyAnchorPresence,\n readBlobVerifiedAt,\n} from \"../../core/blobs.ts\";\nimport type { DbDriver } from \"../../core/driver.ts\";\nimport { getServerConfig } from \"../../core/config.ts\";\nimport pkg from \"../../../package.json\" with { type: \"json\" };\n\n// Read-only viewer + light editing for the browser UI. These routes wrap the\n// same core functions the CLI uses, so every write goes through `emit()` and\n// replicates over /sync. Ids are carried as query params to keep the server's\n// exact-path matcher (see ./routes.ts) and OpenAPI generation unchanged.\n\n// --- pragmatic schemas (drive /docs; intentionally loose) -------------------\n\nconst DatabaseSchema = z.object({\n id: z.string(),\n name: z.string(),\n icon: z.string().nullable(),\n created_hlc: z.string(),\n});\nconst PropertySchema = z.object({\n id: z.string(),\n database_id: z.string(),\n name: z.string(),\n type: z.string(),\n config: z.any().nullable(),\n position: z.number(),\n});\nconst RecordSchema = z.object({\n id: z.string(),\n database_id: z.string(),\n values: z\n .record(z.string(), z.any())\n .describe(\n 'Field values keyed by property name (e.g. {\"Amount\":35}). Reads nest cells here; writes take a flat {column: value} map. Lossy when two properties share a name — prefer `cells` then.',\n ),\n cells: z\n .record(z.string(), z.any())\n .describe(\n \"Field values keyed by property id — lossless under duplicate property names. Writes accept property ids as keys too.\",\n ),\n});\nconst MoveRecordReq = z.object({\n target: z.string(),\n where: z.enum([\"before\", \"after\"]),\n});\nconst DocumentSummarySchema = z.object({\n id: z.string(),\n title: z.string(),\n database_id: z.string().nullable(),\n parent_id: z.string().nullable(),\n created_hlc: z.string(),\n order_key: z.string().nullable(),\n});\nconst MoveDocumentReq = z.object({\n target: z.string(),\n where: z.enum([\"before\", \"after\", \"into\"]),\n});\nconst DocumentSchema = DocumentSummarySchema.extend({\n body: z.string().nullable(),\n // Read/edit token (max HLC over the doc + its blocks); echo it back as\n // `if_match` on PATCH to detect concurrent changes.\n version: z.string().optional(),\n});\nconst SearchHitSchema = z.object({\n type: z.string(),\n id: z.string(),\n database_id: z.string().nullable(),\n title: z.string().optional(),\n snippet: z.string(),\n});\nconst OkSchema = z.object({ ok: z.boolean() });\n\nconst CreateDatabaseReq = z.object({ name: z.string(), icon: z.string().optional() });\nconst UpdateDatabaseReq = z.object({\n name: z.string().optional(),\n icon: z.string().nullable().optional(),\n});\nconst DuplicateDatabaseReq = z.object({\n name: z.string().optional().describe(\"Name for the copy (defaults to the source name)\"),\n icon: z.string().optional(),\n});\nconst CreatePropertyReq = z.object({\n db: z.string(),\n name: z.string(),\n type: z.string(),\n config: z.any().optional(),\n});\nconst UpdatePropertyReq = z.object({\n name: z.string().optional(),\n type: z.string().optional(),\n config: z.any().optional(),\n position: z.number().optional(),\n});\nconst SetWidthReq = z.object({ width: z.number() });\nconst RecordValuesReq = z\n .record(z.string(), z.any())\n .describe('Flat { column: value } cell patch (keyed by property name).');\nconst CreateDocumentReq = z.object({\n title: z.string(),\n body: z.string().optional(),\n database_id: z.string().optional(),\n parent_id: z.string().optional(),\n});\nconst UpdateDocumentReq = z.object({\n title: z.string().optional(),\n body: z.string().optional(),\n parent_id: z.string().nullable().optional(),\n // Optimistic concurrency: a `version` from GET /api/document. A concurrent\n // change (CLI, another window, sync) makes the PATCH fail 409 `stale`\n // instead of silently clobbering it.\n if_match: z.string().optional(),\n});\nconst DuplicateDocumentReq = z.object({\n title: z.string().optional().describe(\"Title for the copy (defaults to the source title)\"),\n parent_id: z.string().nullable().optional(),\n});\n\nconst RevisionBase = z.object({\n // Version token (max HLC of the revision); pass as `to` on revert or\n // `version` on GET /api/document/at.\n version: z.string(),\n at: z.string().describe(\"Wall-clock time of the revision (ISO 8601)\"),\n node_id: z.string(),\n kind: z.enum([\"user\", \"repair\", \"revert\"]).describe(\"Source of the revision\"),\n changes: z.number(),\n created: z.boolean(),\n deleted: z.boolean(),\n});\nconst DocRevisionSchema = RevisionBase.extend({\n title_changed: z.boolean(),\n blocks_changed: z.number(),\n blocks_deleted: z.number(),\n});\nconst RecordRevisionSchema = RevisionBase.extend({\n fields: z.array(z.string()).describe(\"Property ids of the cells written\"),\n moved: z.boolean(),\n});\nconst DatabaseActivityEntrySchema = RecordRevisionSchema.extend({\n record_id: z.string(),\n record_title: z\n .string()\n .nullable()\n .describe(\"Title-property value as of this revision (deleted records keep their last title)\"),\n diffs: z\n .array(\n z.object({\n prop: z.string(),\n before: z.any().optional(),\n after: z.any().optional(),\n }),\n )\n .describe(\"Value-level cell changes; a missing side means the cell did not exist\"),\n});\nconst DocumentVersionStateSchema = z.object({\n id: z.string(),\n title: z.string(),\n body: z.string(),\n deleted: z.boolean(),\n version: z.string(),\n});\nconst RevertDocumentReq = z.object({\n to: z.string().describe(\"Version token from /api/document/history\"),\n if_match: z.string().optional(),\n});\nconst RevertRecordReq = z.object({\n to: z.string().describe(\"Version token from /api/record/history\"),\n});\nconst RevertDocResultSchema = z.object({\n id: z.string(),\n changed: z.boolean(),\n restored: z.string(),\n version: z.string(),\n undeleted: z.boolean(),\n});\nconst RevertRecordResultSchema = z.object({\n id: z.string(),\n changed: z.boolean(),\n fields: z.array(z.string()),\n undeleted: z.boolean(),\n restored: z.string(),\n});\nconst PropertyRevisionSchema = RevisionBase.extend({\n fields: z.array(z.string()).describe(\"Definition columns touched (name/type/config/position)\"),\n cells_cleared: z.number(),\n});\nconst RevertPropertyReq = z.object({\n to: z.string().describe(\"Version token from /api/property/history\"),\n});\nconst RevertPropertyResultSchema = z.object({\n id: z.string(),\n changed: z.boolean(),\n fields: z.array(z.string()),\n restored_cells: z.number(),\n skipped_cells: z.number(),\n undeleted: z.boolean(),\n restored: z.string(),\n});\nconst RecordVersionStateSchema = z.object({\n id: z.string(),\n database_id: z.string().nullable(),\n deleted: z.boolean(),\n data: z.record(z.string(), z.any()).describe(\"Cells at that version, keyed by property id\"),\n version: z.string(),\n});\nconst FieldHistoryEntrySchema = z.object({\n version: z.string(),\n at: z.string(),\n node_id: z.string(),\n value: z.any().optional(),\n cleared: z.boolean(),\n});\nconst NodeInfoSchema = z.object({\n node_id: z.string(),\n label: z.string().nullable().describe(\"Peer label from pairing; null when unnamed\"),\n self: z.boolean().describe(\"True for the node serving this request\"),\n});\nconst CacheStatsSchema = z.object({\n totalBytes: z.number(),\n clearableBytes: z.number(),\n retainedBytes: z.number(),\n count: z.number(),\n clearableCount: z.number(),\n});\nconst BlobPolicySchema = z.object({\n fullNodes: z.array(z.string()),\n redundancy: z.enum([\"all\", \"any\"]),\n});\nconst KnownNodeSchema = z.object({\n nodeId: z.string(),\n label: z.string().nullable(),\n self: z.boolean(),\n});\nconst BucketAnchorSchema = z.object({\n url: z.string(),\n label: z.string().nullable(),\n bucket: z.string().nullable(),\n});\nconst BlobCacheSchema = z.object({\n stats: CacheStatsSchema,\n policy: BlobPolicySchema,\n nodes: z.array(KnownNodeSchema),\n buckets: z.array(BucketAnchorSchema).describe(\"Attached object-storage buckets, selectable as full-blob anchors\"),\n quotaBytes: z.number().describe(\"Auto-evict over this many bytes; 0 = disabled\"),\n pinnedCount: z.number(),\n pinnedBytes: z.number(),\n lastVerifiedAt: z\n .number()\n .nullable()\n .describe(\"Epoch-ms of the last anchor-presence verify; null = never / invalidated\"),\n unreachableAnchors: z\n .array(z.string())\n .describe(\"Anchors the last verify couldn't reach (only populated by /verify)\"),\n});\nconst PinReq = z.object({\n hash: z.string(),\n pinned: z.boolean(),\n});\nconst PinResSchema = z.object({ hash: z.string(), pinned: z.boolean() });\nconst ClearResultSchema = z.object({\n cleared: z.number(),\n freedBytes: z.number(),\n skipped: z.number(),\n});\nconst SetBlobPolicyReq = z.object({\n full_nodes: z\n .array(z.string())\n .optional()\n .describe(\"Full-blob anchors: node ids and/or bucket urls (s3://…)\"),\n redundancy: z.enum([\"all\", \"any\"]).optional(),\n});\nconst SetBlobPolicyResSchema = z.object({\n policy: BlobPolicySchema,\n});\n\n// --- helpers ----------------------------------------------------------------\n\nfunction need(req: Request, key: string): string {\n const v = new URL(req.url).searchParams.get(key);\n if (!v) throw new Error(`missing query param: ${key}`);\n return v;\n}\n\nfunction opt(req: Request, key: string): string | undefined {\n return new URL(req.url).searchParams.get(key) ?? undefined;\n}\n\n/** Wrap a handler: serialize the return value, turn thrown errors into 400 JSON. */\nfunction handle(\n fn: (req: Request, ctx: RouteCtx) => unknown | Promise<unknown>,\n): Route[\"handler\"] {\n return async (req, ctx) => {\n try {\n const out = await fn(req, ctx);\n if (out instanceof Response) return out;\n return Response.json(out ?? null);\n } catch (e) {\n return errorResponse(e);\n }\n };\n}\n\n// --- routes -----------------------------------------------------------------\n\nconst VersionSchema = z.object({ version: z.string() });\n\n/** Shape the Settings storage-panel payload. `unreachable` is supplied by /verify\n * (the anchors it couldn't reach); GET reports the stored last-verified stamp. */\nfunction blobCacheInfo(db: DbDriver, unreachable: string[] = []) {\n reconcileCache(db);\n const pinned = cachedBlobs(db).filter((b) => b.pinned);\n return {\n stats: cacheStats(db),\n policy: readPolicy(db),\n nodes: knownNodes(db),\n buckets: knownBuckets(db),\n quotaBytes: getServerConfig(db).blobCacheQuotaBytes,\n pinnedCount: pinned.length,\n pinnedBytes: pinned.reduce((s, b) => s + b.size, 0),\n lastVerifiedAt: readBlobVerifiedAt(db),\n unreachableAnchors: unreachable,\n };\n}\n\nexport const webuiRoutes: Route[] = [\n {\n method: \"GET\",\n path: \"/api/version\",\n summary: \"Version of the running core (sidecar). Used by the desktop app's settings footer.\",\n response: VersionSchema,\n handler: () => Response.json({ version: pkg.version }),\n },\n {\n method: \"GET\",\n path: \"/api/databases\",\n summary: \"List all databases\",\n response: z.array(DatabaseSchema),\n handler: handle((_req, { db }) => listDatabases(db)),\n },\n {\n method: \"POST\",\n path: \"/api/databases\",\n summary: \"Create a database\",\n request: CreateDatabaseReq,\n response: DatabaseSchema,\n handler: handle(async (req, { db }) => {\n const body = (await req.json()) as { name: string; icon?: string };\n return createDatabase(db, body);\n }),\n },\n {\n method: \"PATCH\",\n path: \"/api/database\",\n summary: \"Rename a database or change its icon. Query: ?id=<id>\",\n request: UpdateDatabaseReq,\n response: DatabaseSchema,\n handler: handle(async (req, { db }) => {\n const body = (await req.json()) as { name?: string; icon?: string | null };\n return updateDatabase(db, need(req, \"id\"), body);\n }),\n },\n {\n method: \"POST\",\n path: \"/api/database/duplicate\",\n summary: \"Copy a database whole — schema and all records. Query: ?id=<id>\",\n request: DuplicateDatabaseReq,\n response: DatabaseSchema,\n handler: handle(async (req, { db }) => {\n const body = (await req.json().catch(() => ({}))) as { name?: string; icon?: string };\n return duplicateDatabase(db, need(req, \"id\"), body);\n }),\n },\n {\n method: \"DELETE\",\n path: \"/api/database\",\n summary: \"Delete a database (and stop it being the current one). Query: ?id=<id>\",\n response: OkSchema,\n handler: handle((req, { db }) => ({ ok: deleteDatabase(db, need(req, \"id\")) })),\n },\n {\n method: \"GET\",\n path: \"/api/database/activity\",\n summary:\n \"Recent changes across all records of a database, newest first. Query: ?db=<id>&limit=<n>\",\n response: z.array(DatabaseActivityEntrySchema),\n handler: handle((req, { db }) => {\n const limit = opt(req, \"limit\");\n return listDatabaseActivity(db, need(req, \"db\"), {\n limit: limit ? Number(limit) : undefined,\n });\n }),\n },\n {\n method: \"GET\",\n path: \"/api/properties\",\n summary: \"List a database's properties (columns). Query: ?db=<id>\",\n response: z.array(PropertySchema),\n handler: handle((req, { db }) => listProperties(db, need(req, \"db\"))),\n },\n {\n method: \"POST\",\n path: \"/api/properties\",\n summary: \"Add a property to a database\",\n request: CreatePropertyReq,\n response: PropertySchema,\n handler: handle(async (req, { db }) => {\n const body = (await req.json()) as {\n db: string;\n name: string;\n type: PropType;\n config?: PropertyConfig;\n };\n return addProperty(db, body.db, { name: body.name, type: body.type, config: body.config });\n }),\n },\n {\n method: \"PATCH\",\n path: \"/api/property\",\n summary: \"Update a property: rename, change type, edit config/options, reorder. Query: ?id=<id>\",\n request: UpdatePropertyReq,\n response: PropertySchema,\n handler: handle(async (req, { db }) => {\n const body = (await req.json()) as {\n name?: string;\n type?: PropType;\n config?: PropertyConfig;\n position?: number;\n };\n return updateProperty(db, need(req, \"id\"), body);\n }),\n },\n {\n method: \"PATCH\",\n path: \"/api/property/width\",\n summary: \"Set a property's table column width (px). Query: ?id=<id>\",\n request: SetWidthReq,\n response: PropertySchema,\n handler: handle(async (req, { db }) => {\n const body = (await req.json()) as { width: number };\n return setPropertyWidth(db, need(req, \"id\"), body.width);\n }),\n },\n {\n method: \"DELETE\",\n path: \"/api/property\",\n summary: \"Delete a property (column) and its cells. Query: ?id=<id>\",\n response: OkSchema,\n handler: handle((req, { db }) => ({ ok: removeProperty(db, need(req, \"id\")) })),\n },\n {\n method: \"GET\",\n path: \"/api/property/history\",\n summary: \"List a property's definition revisions, newest first. Query: ?id=<id>\",\n response: z.array(PropertyRevisionSchema),\n handler: handle((req, { db }) => listPropertyRevisions(db, need(req, \"id\"))),\n },\n {\n method: \"POST\",\n path: \"/api/property/revert\",\n summary:\n \"Schema rollback: restore a property's definition and the cells its type-change/removal cleared (user edits since are kept). Query: ?id=<id>\",\n request: RevertPropertyReq,\n response: RevertPropertyResultSchema,\n handler: handle(async (req, { db }) => {\n const body = (await req.json()) as { to: string };\n return revertProperty(db, need(req, \"id\"), body.to);\n }),\n },\n {\n method: \"GET\",\n path: \"/api/records\",\n summary: \"List records in a database. Query: ?db=<id>&sort=<field>&limit=<n>\",\n response: z.array(RecordSchema),\n handler: handle((req, { db }) => {\n const limit = opt(req, \"limit\");\n return listRecords(db, need(req, \"db\"), {\n sort: opt(req, \"sort\"),\n limit: limit ? Number(limit) : undefined,\n });\n }),\n },\n {\n method: \"POST\",\n path: \"/api/records\",\n summary: \"Create a record. Query: ?db=<id>; body is a {field: value} map\",\n request: RecordValuesReq,\n response: RecordSchema,\n handler: handle(async (req, { db }) => {\n const values = (await req.json()) as Record<string, unknown>;\n return createRecord(db, need(req, \"db\"), values);\n }),\n },\n {\n method: \"GET\",\n path: \"/api/record\",\n summary: \"Get one record. Query: ?id=<id>\",\n response: RecordSchema,\n handler: handle((req, { db }) => {\n const id = need(req, \"id\");\n const rec = getRecord(db, id);\n if (!rec) throw new MhError(\"not_found\", `no such record: ${id}`);\n return rec;\n }),\n },\n {\n method: \"PATCH\",\n path: \"/api/record\",\n summary: \"Update record fields. Query: ?id=<id>; body is a {field: value} map\",\n request: RecordValuesReq,\n response: RecordSchema,\n handler: handle(async (req, { db }) => {\n const values = (await req.json()) as Record<string, unknown>;\n return updateRecord(db, need(req, \"id\"), values);\n }),\n },\n {\n method: \"PATCH\",\n path: \"/api/record/order\",\n summary: \"Move a record before or after another record. Query: ?id=<id>\",\n request: MoveRecordReq,\n response: RecordSchema,\n handler: handle(async (req, { db }) => {\n const body = (await req.json()) as { target: string; where: \"before\" | \"after\" };\n return moveRecord(db, need(req, \"id\"), body.target, body.where);\n }),\n },\n {\n method: \"GET\",\n path: \"/api/record/history\",\n summary: \"List a record's revisions, newest first. Query: ?id=<id>\",\n response: z.array(RecordRevisionSchema),\n handler: handle((req, { db }) => listRecordRevisions(db, need(req, \"id\"))),\n },\n {\n method: \"GET\",\n path: \"/api/record/at\",\n summary: \"A record's cells as of a past version. Query: ?id=<id>&version=<token>\",\n response: RecordVersionStateSchema,\n handler: handle((req, { db }) => recordAtVersion(db, need(req, \"id\"), need(req, \"version\"))),\n },\n {\n method: \"GET\",\n path: \"/api/record/field-history\",\n summary: \"The write trail of one record cell, newest first. Query: ?id=<id>&prop=<propertyId>\",\n response: z.array(FieldHistoryEntrySchema),\n handler: handle((req, { db }) => recordFieldHistory(db, need(req, \"id\"), need(req, \"prop\"))),\n },\n {\n method: \"POST\",\n path: \"/api/record/revert\",\n summary:\n \"Restore a record's cells to a past version, recorded as a new revision. Query: ?id=<id>\",\n request: RevertRecordReq,\n response: RevertRecordResultSchema,\n handler: handle(async (req, { db }) => {\n const body = (await req.json()) as { to: string };\n return revertRecord(db, need(req, \"id\"), body.to);\n }),\n },\n {\n method: \"DELETE\",\n path: \"/api/record\",\n summary: \"Delete a record. Query: ?id=<id>\",\n response: OkSchema,\n handler: handle((req, { db }) => ({ ok: deleteRecord(db, need(req, \"id\")) })),\n },\n {\n method: \"GET\",\n path: \"/api/documents\",\n summary: \"List documents. Optional query: ?db=<id> or ?parent=<id>\",\n response: z.array(DocumentSummarySchema),\n handler: handle((req, { db }) =>\n listDocuments(db, { database_id: opt(req, \"db\"), parent_id: opt(req, \"parent\") }),\n ),\n },\n {\n method: \"POST\",\n path: \"/api/documents\",\n summary: \"Create a document\",\n request: CreateDocumentReq,\n response: DocumentSchema,\n handler: handle(async (req, { db }) => {\n const body = (await req.json()) as {\n title: string;\n body?: string;\n database_id?: string;\n parent_id?: string;\n };\n return createDocument(db, body);\n }),\n },\n {\n method: \"GET\",\n path: \"/api/document\",\n summary: \"Get one document with full body. Query: ?id=<id>\",\n response: DocumentSchema,\n handler: handle((req, { db }) => {\n const id = need(req, \"id\");\n const doc = getDocument(db, id);\n if (!doc) throw new MhError(\"not_found\", `no such document: ${id}`);\n return { ...doc, version: documentVersion(db, doc.id) };\n }),\n },\n {\n method: \"PATCH\",\n path: \"/api/document\",\n summary: \"Update a document's title/body/parent_id (null = top level). Query: ?id=<id>\",\n request: UpdateDocumentReq,\n response: DocumentSchema,\n handler: handle(async (req, { db }) => {\n const body = (await req.json()) as {\n title?: string;\n body?: string;\n parent_id?: string | null;\n if_match?: string;\n };\n const { if_match, ...fields } = body;\n const doc = updateDocument(db, need(req, \"id\"), fields, { ifMatch: if_match });\n return { ...doc, version: documentVersion(db, doc.id) };\n }),\n },\n {\n method: \"POST\",\n path: \"/api/document/duplicate\",\n summary: \"Copy a document — title and every block — next to the source. Query: ?id=<id>\",\n request: DuplicateDocumentReq,\n response: DocumentSchema,\n handler: handle(async (req, { db }) => {\n const body = (await req.json().catch(() => ({}))) as {\n title?: string;\n parent_id?: string | null;\n };\n const doc = duplicateDocument(db, need(req, \"id\"), {\n title: body.title,\n parentId: body.parent_id,\n });\n return { ...doc, version: documentVersion(db, doc.id) };\n }),\n },\n {\n method: \"PATCH\",\n path: \"/api/document/move\",\n summary: \"Move a document before/after another, or into it as a child. Query: ?id=<id>\",\n request: MoveDocumentReq,\n response: DocumentSchema,\n handler: handle(async (req, { db }) => {\n const body = (await req.json()) as { target: string; where: \"before\" | \"after\" | \"into\" };\n return moveDocument(db, need(req, \"id\"), body.target, body.where);\n }),\n },\n {\n method: \"GET\",\n path: \"/api/document/history\",\n summary: \"List a document's revisions, newest first. Query: ?id=<id>\",\n response: z.array(DocRevisionSchema),\n handler: handle((req, { db }) => listDocumentRevisions(db, need(req, \"id\"))),\n },\n {\n method: \"GET\",\n path: \"/api/document/at\",\n summary: \"A document's title/body as of a past version. Query: ?id=<id>&version=<token>\",\n response: DocumentVersionStateSchema,\n handler: handle((req, { db }) => documentAtVersion(db, need(req, \"id\"), need(req, \"version\"))),\n },\n {\n method: \"POST\",\n path: \"/api/document/revert\",\n summary:\n \"Restore a document's title/body to a past version, recorded as a new revision. Query: ?id=<id>\",\n request: RevertDocumentReq,\n response: RevertDocResultSchema,\n handler: handle(async (req, { db }) => {\n const body = (await req.json()) as { to: string; if_match?: string };\n return revertDocument(db, need(req, \"id\"), body.to, { ifMatch: body.if_match });\n }),\n },\n {\n method: \"DELETE\",\n path: \"/api/document\",\n summary: \"Delete a document. Query: ?id=<id>\",\n response: OkSchema,\n handler: handle((req, { db }) => ({ ok: deleteDocument(db, need(req, \"id\")) })),\n },\n {\n method: \"GET\",\n path: \"/api/nodes\",\n summary: \"Known nodes for display: this device plus paired peers with their labels\",\n response: z.array(NodeInfoSchema),\n handler: handle((_req, { db }) => {\n const self = getNodeId(db);\n const peers = db\n .query(\n \"SELECT node_id, label FROM peers WHERE node_id IS NOT NULL AND node_id <> '' GROUP BY node_id\",\n )\n .all() as { node_id: string; label: string | null }[];\n return [\n { node_id: self, label: null, self: true },\n ...peers.filter((p) => p.node_id !== self).map((p) => ({ ...p, self: false })),\n ];\n }),\n },\n {\n method: \"GET\",\n path: \"/api/search\",\n summary: \"Full-text search across documents and records. Query: ?q=<text>&limit=<n>\",\n response: z.array(SearchHitSchema),\n handler: handle((req, { db }) => {\n const limit = opt(req, \"limit\");\n return search(db, need(req, \"q\"), { limit: limit ? Number(limit) : undefined });\n }),\n },\n {\n method: \"GET\",\n path: \"/api/blob-cache\",\n summary:\n \"Local blob cache stats + clear policy + device/bucket roster (Settings storage panel). \" +\n \"A blob is clearable only once a presence verify confirmed a designated anchor holds it.\",\n response: BlobCacheSchema,\n handler: handle((_req, { db }) => blobCacheInfo(db)),\n },\n {\n method: \"POST\",\n path: \"/api/blob-cache/verify\",\n summary:\n \"Verify NOW which cached blobs the designated anchors durably hold (bucket LIST / \" +\n \"device /api/blobs/has), recording the per-blob `anchored` flag that gates clearing. \" +\n \"Returns the refreshed cache info incl. any unreachable anchors. Run on panel open / refresh.\",\n response: BlobCacheSchema,\n handler: handle(async (_req, { db }) => {\n const r = await verifyAnchorPresence(db);\n return blobCacheInfo(db, r.unreachable);\n }),\n },\n {\n method: \"POST\",\n path: \"/api/blob-cache/clear\",\n summary:\n \"Drop locally-cached blob bytes a full blob device durably holds (the reference stays; bytes re-download on demand). Returns bytes freed.\",\n response: ClearResultSchema,\n handler: handle((_req, { db }) => clearCache(db)),\n },\n {\n method: \"POST\",\n path: \"/api/blob-cache/pin\",\n summary:\n \"Pin/unpin a cached blob by hash (node-local; never synced). Pinned blobs are kept by both manual clear and automatic quota eviction.\",\n request: PinReq,\n response: PinResSchema,\n handler: handle(async (req, { db }) => {\n const body = (await req.json()) as { hash: string; pinned: boolean };\n reconcileCache(db);\n if (!setPinned(db, body.hash, body.pinned))\n throw new MhError(\"not_found\", `blob not in cache: ${body.hash}`);\n return { hash: body.hash, pinned: body.pinned };\n }),\n },\n {\n method: \"POST\",\n path: \"/api/blob-policy\",\n summary:\n \"Set the full blob device(s) and/or redundancy (all|any). Anchor designation only — clearing is decided locally per device.\",\n request: SetBlobPolicyReq,\n response: SetBlobPolicyResSchema,\n handler: handle(async (req, { db }) => {\n const body = (await req.json()) as { full_nodes?: string[]; redundancy?: \"all\" | \"any\" };\n if (body.full_nodes) setFullNodes(db, body.full_nodes);\n if (body.redundancy) setRedundancy(db, body.redundancy);\n return { policy: readPolicy(db) };\n }),\n },\n];\n",
130
- "import type { DbDriver } from \"./driver.ts\";\nimport { emit, grouped, CHANGE_SELECT } from \"./crdt.ts\";\nimport { serializeDocBlocks } from \"./blocks.ts\";\nimport { getDocument, updateDocument, documentVersion } from \"./documents.ts\";\nimport { listProperties } from \"./properties.ts\";\nimport { MhError } from \"./errors.ts\";\n\n// Read-side history over the CRDT oplog. The oplog (crdt_changes) is append-only\n// and never compacted, so the state of any register at a cutoff HLC `at` is the\n// value with the greatest hlc <= at — the same last-write-wins rule materialize()\n// applies at the head. Revert is a *forward* write: reconstruct the old state,\n// diff against the present, and emit the differences as new changes. The oplog\n// itself is never edited (it is the sync source of truth), so reverts replicate\n// and converge like any other edit.\n\n/** Changes from the same node closer together than this are one revision: a\n * single save emits a burst of field writes with near-identical timestamps. */\nconst REVISION_GAP_MS = 1500;\n\n/** Physical wall-clock milliseconds encoded in an HLC (first 15 digits). */\nfunction hlcMillis(hlc: string): number {\n return Number(hlc.slice(0, 15));\n}\n\nfunction hlcIso(hlc: string): string {\n return new Date(hlcMillis(hlc)).toISOString();\n}\n\n// A fully-read oplog row: Change with txn always present (CHANGE_SELECT\n// includes it; NULL for legacy rows). The reused select list keeps these\n// queries locked to the Change interface.\ninterface RawChange {\n hlc: string;\n node_id: string;\n dataset: string;\n row_id: string;\n col: string;\n value: string | null;\n txn: string | null;\n}\n\n/** Where a revision came from, derived from its change-group label. */\nexport type RevisionKind = \"user\" | \"repair\" | \"revert\";\n\nfunction revisionKind(txn: string | null): RevisionKind {\n if (txn?.startsWith(\"repair:\")) return \"repair\";\n if (txn?.startsWith(\"revert:\")) return \"revert\";\n return \"user\";\n}\n\n/**\n * Group an HLC-ordered change stream into revisions. Changes sharing a txn are\n * one revision; between txn-less changes (legacy rows, pre-txn peers) fall back\n * to author + wall-clock gap. Clustering depends only on oplog content, so\n * every synced node renders the same list.\n */\nfunction clusterRevisions(changes: RawChange[]): RawChange[][] {\n const groups: RawChange[][] = [];\n let cur: RawChange[] = [];\n for (const c of changes) {\n const prev = cur[cur.length - 1];\n const boundary =\n prev &&\n (prev.txn !== null && c.txn !== null\n ? prev.txn !== c.txn\n : prev.node_id !== c.node_id || hlcMillis(c.hlc) - hlcMillis(prev.hlc) > REVISION_GAP_MS);\n if (boundary) {\n groups.push(cur);\n cur = [];\n }\n cur.push(c);\n }\n if (cur.length) groups.push(cur);\n return groups;\n}\n\n/** True when a JSON-encoded oplog value is a truthy flag (e.g. __deleted = 1). */\nfunction flagSet(value: string | null): boolean {\n return value !== null && value !== \"0\" && value !== \"false\" && value !== \"null\";\n}\n\n/** Latest value per register (col) among `changes` with hlc <= at.\n * A `null` value column means the register was cleared (json_remove). */\nfunction registersAt(\n changes: RawChange[],\n at: string,\n): Map<string, { value: string | null; hlc: string }> {\n const out = new Map<string, { value: string | null; hlc: string }>();\n for (const c of changes) {\n if (c.hlc > at) continue;\n const cur = out.get(c.col);\n if (!cur || c.hlc > cur.hlc) out.set(c.col, { value: c.value, hlc: c.hlc });\n }\n return out;\n}\n\n/** All oplog changes for one row of a dataset, in HLC order. */\nfunction rowChanges(db: DbDriver, dataset: string, rowId: string): RawChange[] {\n return db\n .query(\n `SELECT ${CHANGE_SELECT} FROM crdt_changes WHERE dataset = ? AND row_id = ? ORDER BY hlc`,\n )\n .all(dataset, rowId) as RawChange[];\n}\n\n// ---- documents ---------------------------------------------------------------\n\n/** Ids of every block that was ever assigned to this document. Whether a block\n * counts at a given cutoff is decided later from its registers at that cutoff. */\nfunction everBlockIds(db: DbDriver, docId: string): string[] {\n return (\n db\n .query(\n \"SELECT DISTINCT row_id FROM crdt_changes WHERE dataset = 'doc_blocks' AND col = 'doc_id' AND value = ?\",\n )\n .all(JSON.stringify(docId)) as { row_id: string }[]\n ).map((r) => r.row_id);\n}\n\n/** Doc register changes + changes of every block ever attached, in HLC order. */\nfunction docChanges(db: DbDriver, docId: string): RawChange[] {\n const blocks = everBlockIds(db, docId);\n const placeholders = blocks.map(() => \"?\").join(\",\");\n const blockClause = blocks.length\n ? ` OR (dataset = 'doc_blocks' AND row_id IN (${placeholders}))`\n : \"\";\n return db\n .query(\n `SELECT ${CHANGE_SELECT} FROM crdt_changes\n WHERE (dataset = 'documents' AND row_id = ?)${blockClause}\n ORDER BY hlc`,\n )\n .all(docId, ...blocks) as RawChange[];\n}\n\nexport interface DocRevision {\n /** Version token (max HLC of the revision) — pass to documentAtVersion/revertDocument. */\n version: string;\n /** Wall-clock time derived from the version HLC (ISO 8601). */\n at: string;\n node_id: string;\n /** Source of the revision: a user edit, a repairHub fix, or a revert. */\n kind: RevisionKind;\n changes: number;\n created: boolean;\n deleted: boolean;\n title_changed: boolean;\n blocks_changed: number;\n blocks_deleted: number;\n}\n\n/** A document's edit history, newest first, clustered into save-sized revisions. */\nexport function listDocumentRevisions(db: DbDriver, id: string): DocRevision[] {\n const changes = docChanges(db, id);\n if (!changes.length) throw new MhError(\"not_found\", `no such document: ${id}`);\n return clusterRevisions(changes)\n .map((group) => {\n const changedBlocks = new Set<string>();\n const deletedBlocks = new Set<string>();\n let created = false;\n let deleted = false;\n let titleChanged = false;\n for (const c of group) {\n if (c.dataset === \"documents\") {\n if (c.col === \"created_hlc\") created = true;\n else if (c.col === \"title\") titleChanged = true;\n else if (c.col === \"__deleted\") deleted = flagSet(c.value);\n } else if (c.col === \"__deleted\" && flagSet(c.value)) {\n deletedBlocks.add(c.row_id);\n } else if (c.col === \"text\") {\n changedBlocks.add(c.row_id);\n }\n }\n const last = group[group.length - 1]!;\n return {\n version: last.hlc,\n at: hlcIso(last.hlc),\n node_id: last.node_id,\n kind: revisionKind(last.txn),\n changes: group.length,\n created,\n deleted,\n title_changed: titleChanged,\n blocks_changed: changedBlocks.size,\n blocks_deleted: deletedBlocks.size,\n };\n })\n .reverse();\n}\n\nexport interface DocumentVersionState {\n id: string;\n title: string;\n body: string;\n deleted: boolean;\n /** Exact version (max HLC <= the requested cutoff) this state corresponds to. */\n version: string;\n}\n\n/** Reconstruct a document as of version cutoff `at` (state at hlc <= at). */\nexport function documentAtVersion(db: DbDriver, id: string, at: string): DocumentVersionState {\n if (!at) throw new MhError(\"invalid_input\", \"missing version cutoff\");\n const changes = docChanges(db, id).filter((c) => c.hlc <= at);\n if (!changes.length)\n throw new MhError(\"not_found\", `no version of document ${id} at or before ${at}`);\n\n const docRegs = registersAt(changes.filter((c) => c.dataset === \"documents\"), at);\n const parse = (col: string): unknown => {\n const r = docRegs.get(col);\n return r?.value == null ? undefined : JSON.parse(r.value);\n };\n\n // Per-block registers at the cutoff; a block counts only if it points at this\n // document, is not tombstoned, and has text — mirroring recomputeDocBody().\n const byBlock = new Map<string, RawChange[]>();\n for (const c of changes) {\n if (c.dataset !== \"doc_blocks\") continue;\n (byBlock.get(c.row_id) ?? byBlock.set(c.row_id, []).get(c.row_id)!).push(c);\n }\n const blocks: { id: string; text: string; order_key: string | null; blankAfter: number }[] = [];\n for (const [blockId, blockChanges] of byBlock) {\n const regs = registersAt(blockChanges, at);\n const reg = (col: string): unknown => {\n const r = regs.get(col);\n return r?.value == null ? undefined : JSON.parse(r.value);\n };\n if (reg(\"doc_id\") !== id) continue;\n if (regs.get(\"__deleted\") && flagSet(regs.get(\"__deleted\")!.value)) continue;\n const text = reg(\"text\");\n if (typeof text !== \"string\" || !text) continue;\n blocks.push({\n id: blockId,\n text,\n order_key: (reg(\"order_key\") as string | undefined) ?? null,\n blankAfter: (reg(\"blank_after\") as number | undefined) ?? 0,\n });\n }\n blocks.sort((a, b) => {\n if (a.order_key !== b.order_key) {\n if (a.order_key === null) return -1; // NULL sorts first, like the SQL ORDER BY\n if (b.order_key === null) return 1;\n return a.order_key < b.order_key ? -1 : 1;\n }\n return a.id < b.id ? -1 : 1;\n });\n\n // Pre-block-model documents kept their body in the documents.body register;\n // it stays authoritative until the first block exists (cf. isBlockManaged).\n const body = byBlock.size\n ? serializeDocBlocks(blocks)\n : ((parse(\"body\") as string | undefined) ?? \"\");\n\n return {\n id,\n title: (parse(\"title\") as string | undefined) ?? \"\",\n body,\n deleted: docRegs.get(\"__deleted\") ? flagSet(docRegs.get(\"__deleted\")!.value) : false,\n version: changes[changes.length - 1]!.hlc,\n };\n}\n\nexport interface RevertDocResult {\n id: string;\n changed: boolean;\n /** The version token the document was restored to. */\n restored: string;\n /** The document's version after the revert (a new head — revert is a forward write). */\n version: string;\n /** True when the revert resurrected a tombstoned document. */\n undeleted: boolean;\n}\n\n/**\n * Restore a document's title/body to a past version, as a new forward edit\n * (reuses updateDocument's block reconcile, so unchanged blocks keep identity).\n * Reverting a tombstoned document resurrects it; children unparented by the\n * delete stay where they are. One change group, so history shows ONE revision.\n */\nexport const revertDocument = grouped(function revertDocument(\n db: DbDriver,\n id: string,\n to: string,\n opts: { ifMatch?: string } = {},\n): RevertDocResult {\n let cur = getDocument(db, id);\n if (!cur && !db.query(\"SELECT 1 AS x FROM documents WHERE id = ?\").get(id))\n throw new MhError(\"not_found\", `no such document: ${id}`);\n if (opts.ifMatch !== undefined && documentVersion(db, id) !== opts.ifMatch)\n throw new MhError(\"stale\", `stale: document changed since ${opts.ifMatch}; re-read first`);\n\n const past = documentAtVersion(db, id, to);\n if (past.deleted)\n throw new MhError(\"invalid_input\", \"target version is a deleted state; use doc delete instead\");\n\n const undeleted = !cur;\n if (!cur) {\n // Resurrect the doc row; its blocks stay tombstoned (the body cache is empty),\n // so the body restore below re-inserts the past blocks via reconcile.\n emit(db, \"documents\", id, \"__deleted\", 0);\n cur = getDocument(db, id)!;\n }\n\n const fields: { title?: string; body?: string } = {};\n if (past.title !== cur.title) fields.title = past.title;\n if (past.body !== (cur.body ?? \"\")) fields.body = past.body;\n if (Object.keys(fields).length) updateDocument(db, id, fields);\n\n return {\n id,\n changed: Object.keys(fields).length > 0 || undeleted,\n restored: past.version,\n version: documentVersion(db, id),\n undeleted,\n };\n}, \"revert\");\n\n// ---- records -------------------------------------------------------------------\n\n/** records-dataset meta columns; every other col is a property cell. */\nconst RECORD_META = new Set([\"database_id\", \"created_hlc\", \"order_key\", \"__deleted\"]);\n\nexport interface RecordRevision {\n version: string;\n at: string;\n node_id: string;\n kind: RevisionKind;\n changes: number;\n created: boolean;\n deleted: boolean;\n /** Property ids of the cells written in this revision. */\n fields: string[];\n moved: boolean;\n}\n\n/** Summarize one change group of a record into a revision. */\nfunction recordRevisionOf(group: RawChange[]): RecordRevision {\n const fields = new Set<string>();\n let created = false;\n let deleted = false;\n let moved = false;\n for (const c of group) {\n if (c.col === \"created_hlc\") created = true;\n else if (c.col === \"__deleted\") deleted = flagSet(c.value);\n else if (c.col === \"order_key\") moved = true;\n else if (!RECORD_META.has(c.col)) fields.add(c.col);\n }\n const last = group[group.length - 1]!;\n return {\n version: last.hlc,\n at: hlcIso(last.hlc),\n node_id: last.node_id,\n kind: revisionKind(last.txn),\n changes: group.length,\n created,\n deleted,\n fields: [...fields],\n moved,\n };\n}\n\n/** A record's edit history, newest first, clustered into save-sized revisions. */\nexport function listRecordRevisions(db: DbDriver, id: string): RecordRevision[] {\n const changes = rowChanges(db, \"records\", id);\n if (!changes.length) throw new MhError(\"not_found\", `no such record: ${id}`);\n return clusterRevisions(changes).map(recordRevisionOf).reverse();\n}\n\n/** One cell's value change inside a revision. A missing `before`/`after` key\n * means the cell did not exist on that side (distinct from an explicit null). */\nexport interface FieldChange {\n prop: string;\n before?: unknown;\n after?: unknown;\n}\n\nexport interface DatabaseActivityEntry extends RecordRevision {\n record_id: string;\n /** Title-property value as of this revision — deleted records keep their last title. */\n record_title: string | null;\n /** Value-level changes of the touched cells. */\n diffs: FieldChange[];\n}\n\n/**\n * \"What happened in this table lately\": every record's revisions, merged and\n * sorted newest first. Includes tombstoned records (so deletions show up) — a\n * read-only aggregation, same clustering as listRecordRevisions per record.\n * Walking each record's change stream oldest-first lets us carry a running\n * cell-state map, so every entry ships its old→new values and a title snapshot\n * for free (no extra queries). After compaction, `before` at the window edge\n * may be missing (the superseded write was pruned) — it reads as \"was empty\".\n */\nexport function listDatabaseActivity(\n db: DbDriver,\n databaseId: string,\n opts: { limit?: number } = {},\n): DatabaseActivityEntry[] {\n if (!db.query(\"SELECT 1 AS x FROM databases WHERE id = ?\").get(databaseId))\n throw new MhError(\"not_found\", `no such database: ${databaseId}`);\n // The first live text property is the de-facto record title (same rule the\n // reference resolver uses).\n const titleProp =\n (\n db\n .query(\n \"SELECT id FROM properties WHERE database_id = ? AND type = 'text' AND __deleted = 0 ORDER BY position LIMIT 1\",\n )\n .get(databaseId) as { id: string } | null\n )?.id ?? null;\n\n const changes = db\n .query(\n `SELECT ${CHANGE_SELECT} FROM crdt_changes\n WHERE dataset = 'records' AND row_id IN (SELECT id FROM records WHERE database_id = ?)\n ORDER BY row_id, hlc`,\n )\n .all(databaseId) as RawChange[];\n\n const out: DatabaseActivityEntry[] = [];\n let start = 0;\n for (let i = 1; i <= changes.length; i++) {\n if (i !== changes.length && changes[i]!.row_id === changes[start]!.row_id) continue;\n const rowId = changes[start]!.row_id;\n // Running cell state, mirroring materialize(): null value = json_remove.\n const state = new Map<string, unknown>();\n for (const g of clusterRevisions(changes.slice(start, i))) {\n const touched = new Set<string>();\n for (const c of g) if (!RECORD_META.has(c.col)) touched.add(c.col);\n const before = new Map<string, unknown>();\n for (const col of touched) if (state.has(col)) before.set(col, state.get(col));\n for (const c of g) {\n if (RECORD_META.has(c.col)) continue;\n if (c.value === null) state.delete(c.col);\n else state.set(c.col, JSON.parse(c.value));\n }\n const diffs: FieldChange[] = [];\n for (const col of touched) {\n const fc: FieldChange = { prop: col };\n if (before.has(col)) fc.before = before.get(col);\n if (state.has(col)) fc.after = state.get(col);\n diffs.push(fc);\n }\n out.push({\n ...recordRevisionOf(g),\n record_id: rowId,\n record_title:\n titleProp && state.has(titleProp) ? String(state.get(titleProp) ?? \"\") : null,\n diffs,\n });\n }\n start = i;\n }\n out.sort((a, b) => (a.version < b.version ? 1 : -1));\n return out.slice(0, opts.limit ?? 100);\n}\n\nexport interface RecordVersionState {\n id: string;\n database_id: string | null;\n deleted: boolean;\n /** Cells present at that version, keyed by property id (raw, no name mapping). */\n data: Record<string, unknown>;\n version: string;\n}\n\n/** Reconstruct a record as of version cutoff `at` (state at hlc <= at). */\nexport function recordAtVersion(db: DbDriver, id: string, at: string): RecordVersionState {\n if (!at) throw new MhError(\"invalid_input\", \"missing version cutoff\");\n const changes = rowChanges(db, \"records\", id).filter((c) => c.hlc <= at);\n if (!changes.length)\n throw new MhError(\"not_found\", `no version of record ${id} at or before ${at}`);\n\n const regs = registersAt(changes, at);\n const data: Record<string, unknown> = {};\n for (const [col, reg] of regs) {\n if (RECORD_META.has(col)) continue;\n if (reg.value === null) continue; // cleared cell (json_remove)\n data[col] = JSON.parse(reg.value);\n }\n const dbReg = regs.get(\"database_id\");\n return {\n id,\n database_id: dbReg?.value == null ? null : (JSON.parse(dbReg.value) as string),\n deleted: regs.get(\"__deleted\") ? flagSet(regs.get(\"__deleted\")!.value) : false,\n data,\n version: changes[changes.length - 1]!.hlc,\n };\n}\n\nexport interface RevertRecordResult {\n id: string;\n changed: boolean;\n /** Property ids whose cells were written by the revert. */\n fields: string[];\n /** True when the revert resurrected a tombstoned record. */\n undeleted: boolean;\n restored: string;\n}\n\n/** Restore a record's cells to a past version as a new forward edit. Only cells\n * of currently-live properties are touched, so no orphan cells are recreated\n * (the repairHub invariant). Reverting a tombstoned record resurrects it. */\nexport const revertRecord = grouped(function revertRecord(\n db: DbDriver,\n id: string,\n to: string,\n): RevertRecordResult {\n const cur = db\n .query(\"SELECT database_id, data, __deleted FROM records WHERE id = ?\")\n .get(id) as { database_id: string | null; data: string; __deleted: number } | null;\n if (!cur) throw new MhError(\"not_found\", `no such record: ${id}`);\n\n const past = recordAtVersion(db, id, to);\n if (past.deleted)\n throw new MhError(\"invalid_input\", \"target version is a deleted state; use record delete instead\");\n\n const liveProps = new Set(\n cur.database_id ? listProperties(db, cur.database_id).map((p) => p.id) : [],\n );\n const curData = JSON.parse(cur.data || \"{}\") as Record<string, unknown>;\n const fields: string[] = [];\n for (const propId of liveProps) {\n const inPast = Object.hasOwn(past.data, propId);\n const inCur = Object.hasOwn(curData, propId);\n if (inPast && (!inCur || JSON.stringify(past.data[propId]) !== JSON.stringify(curData[propId]))) {\n emit(db, \"records\", id, propId, past.data[propId]);\n fields.push(propId);\n } else if (!inPast && inCur) {\n emit(db, \"records\", id, propId, undefined); // clear: materializes as json_remove\n fields.push(propId);\n }\n }\n const undeleted = cur.__deleted !== 0;\n if (undeleted) emit(db, \"records\", id, \"__deleted\", 0);\n\n return { id, changed: fields.length > 0 || undeleted, fields, undeleted, restored: past.version };\n}, \"revert\");\n\n// ---- properties (schema-level rollback) ------------------------------------------\n\n/** Property register columns that make up the column definition. */\nconst PROP_DEF_COLS = [\"name\", \"type\", \"config\", \"position\"] as const;\n\nexport interface PropertyRevision {\n version: string;\n at: string;\n node_id: string;\n kind: RevisionKind;\n changes: number;\n created: boolean;\n deleted: boolean;\n /** Definition columns touched in this revision (name/type/config/position). */\n fields: string[];\n /** Record cells the same change group cleared (a type change / removal cascade). */\n cells_cleared: number;\n}\n\n/** A property's definition history, newest first. Cascaded cell clears are\n * counted via the shared txn so a type change reads as one revision. */\nexport function listPropertyRevisions(db: DbDriver, id: string): PropertyRevision[] {\n const changes = rowChanges(db, \"properties\", id);\n if (!changes.length) throw new MhError(\"not_found\", `no such property: ${id}`);\n const clearedByTxn = new Map<string, number>(\n (\n db\n .query(\n \"SELECT txn, COUNT(*) AS n FROM crdt_changes WHERE dataset = 'records' AND col = ? AND txn IS NOT NULL GROUP BY txn\",\n )\n .all(id) as { txn: string; n: number }[]\n ).map((r) => [r.txn, r.n]),\n );\n return clusterRevisions(changes)\n .map((group) => {\n const fields = new Set<string>();\n let created = false;\n let deleted = false;\n for (const c of group) {\n if (c.col === \"database_id\") created = true; // only emitted at creation\n else if (c.col === \"__deleted\") deleted = flagSet(c.value);\n else if ((PROP_DEF_COLS as readonly string[]).includes(c.col)) fields.add(c.col);\n }\n const last = group[group.length - 1]!;\n return {\n version: last.hlc,\n at: hlcIso(last.hlc),\n node_id: last.node_id,\n kind: revisionKind(last.txn),\n changes: group.length,\n created,\n deleted,\n fields: [...fields],\n cells_cleared: last.txn ? (clearedByTxn.get(last.txn) ?? 0) : 0,\n };\n })\n .reverse();\n}\n\nexport interface PropertyVersionState {\n id: string;\n database_id: string | null;\n name: string;\n type: string;\n config: unknown;\n position: number | null;\n deleted: boolean;\n version: string;\n}\n\n/** Reconstruct a property definition as of version cutoff `at`. */\nexport function propertyAtVersion(db: DbDriver, id: string, at: string): PropertyVersionState {\n if (!at) throw new MhError(\"invalid_input\", \"missing version cutoff\");\n const changes = rowChanges(db, \"properties\", id).filter((c) => c.hlc <= at);\n if (!changes.length)\n throw new MhError(\"not_found\", `no version of property ${id} at or before ${at}`);\n const regs = registersAt(changes, at);\n const reg = (col: string): unknown => {\n const r = regs.get(col);\n return r?.value == null ? undefined : JSON.parse(r.value);\n };\n return {\n id,\n database_id: (reg(\"database_id\") as string | undefined) ?? null,\n name: (reg(\"name\") as string | undefined) ?? \"\",\n type: (reg(\"type\") as string | undefined) ?? \"text\",\n config: reg(\"config\") ?? null,\n position: (reg(\"position\") as number | undefined) ?? null,\n deleted: regs.get(\"__deleted\") ? flagSet(regs.get(\"__deleted\")!.value) : false,\n version: changes[changes.length - 1]!.hlc,\n };\n}\n\nexport interface RevertPropertyResult {\n id: string;\n changed: boolean;\n /** Definition columns the revert wrote. */\n fields: string[];\n /** Record cells restored to their value at the target version. */\n restored_cells: number;\n /** Cells left alone because a user wrote them after the target version. */\n skipped_cells: number;\n undeleted: boolean;\n restored: string;\n}\n\n/**\n * Schema-level rollback: restore a property's definition AND the record cells\n * its later type-change/removal cascades cleared. Definition registers are\n * emitted directly (never via updateProperty — its type-change cascade would\n * re-clear the cells being restored). A cell is only touched when its current\n * winner IS the cascade (or a repair); it is restored to the last value before\n * that cascade, so user data — written before or after the target version —\n * always survives. Cells whose winner is a user write are kept (skipped_cells).\n * Pre-txn legacy writes can't be attributed, so they count as user writes.\n */\nexport const revertProperty = grouped(function revertProperty(\n db: DbDriver,\n id: string,\n to: string,\n): RevertPropertyResult {\n const cur = db\n .query(\n \"SELECT database_id, name, type, config, position, __deleted FROM properties WHERE id = ?\",\n )\n .get(id) as {\n database_id: string | null;\n name: string | null;\n type: string | null;\n config: string | null;\n position: number | null;\n __deleted: number;\n } | null;\n if (!cur) throw new MhError(\"not_found\", `no such property: ${id}`);\n\n const past = propertyAtVersion(db, id, to);\n if (past.deleted)\n throw new MhError(\"invalid_input\", \"target version is a deleted state; use prop remove instead\");\n\n // 1) Restore the column definition (diff only — no cascades).\n const curDef: Record<string, unknown> = {\n name: cur.name,\n type: cur.type,\n config: cur.config ? JSON.parse(cur.config) : null,\n position: cur.position,\n };\n const pastDef: Record<string, unknown> = {\n name: past.name,\n type: past.type,\n config: past.config,\n position: past.position,\n };\n const fields: string[] = [];\n for (const col of PROP_DEF_COLS) {\n if (JSON.stringify(pastDef[col] ?? null) !== JSON.stringify(curDef[col] ?? null)) {\n emit(db, \"properties\", id, col, pastDef[col]);\n fields.push(col);\n }\n }\n const undeleted = cur.__deleted !== 0;\n if (undeleted) emit(db, \"properties\", id, \"__deleted\", 0);\n\n // 2) Restore the cells. Cascade writes are identified by sharing a txn with a\n // post-target change to this property's own registers.\n const schemaTxns = new Set(\n (\n db\n .query(\n \"SELECT DISTINCT txn FROM crdt_changes WHERE dataset = 'properties' AND row_id = ? AND hlc > ? AND txn IS NOT NULL\",\n )\n .all(id, to) as { txn: string }[]\n ).map((r) => r.txn),\n );\n const cellChanges = db\n .query(\n \"SELECT row_id, hlc, value, txn FROM crdt_changes WHERE dataset = 'records' AND col = ? ORDER BY row_id, hlc\",\n )\n .all(id) as { row_id: string; hlc: string; value: string | null; txn: string | null }[];\n\n const isCascade = (txn: string | null): boolean =>\n txn !== null && (schemaTxns.has(txn) || txn.startsWith(\"repair:\"));\n\n let restored = 0;\n let skipped = 0;\n let i = 0;\n while (i < cellChanges.length) {\n const rowId = cellChanges[i]!.row_id;\n let winner = cellChanges[i]!;\n let lastUser: { value: string | null } | null = null; // latest non-cascade write\n for (; i < cellChanges.length && cellChanges[i]!.row_id === rowId; i++) {\n winner = cellChanges[i]!;\n if (!isCascade(winner.txn)) lastUser = winner;\n }\n if (winner.hlc <= to) continue; // untouched since the target version\n if (!isCascade(winner.txn)) {\n skipped++; // current value is a user write — keep it\n continue;\n }\n const target = lastUser ? lastUser.value : null; // null = cell never had a user value\n if (target === winner.value) continue; // converged back on its own\n emit(db, \"records\", rowId, id, target === null ? undefined : JSON.parse(target));\n restored++;\n }\n\n return {\n id,\n changed: fields.length > 0 || undeleted || restored > 0,\n fields,\n restored_cells: restored,\n skipped_cells: skipped,\n undeleted,\n restored: past.version,\n };\n}, \"revert\");\n\nexport interface FieldHistoryEntry {\n version: string;\n at: string;\n node_id: string;\n /** The value written; undefined when the write cleared the cell. */\n value: unknown;\n cleared: boolean;\n}\n\n/** The full write trail of one record cell (property id), newest first. */\nexport function recordFieldHistory(db: DbDriver, id: string, propId: string): FieldHistoryEntry[] {\n const rows = db\n .query(\n \"SELECT hlc, node_id, value FROM crdt_changes WHERE dataset = 'records' AND row_id = ? AND col = ? ORDER BY hlc DESC\",\n )\n .all(id, propId) as { hlc: string; node_id: string; value: string | null }[];\n return rows.map((r) => ({\n version: r.hlc,\n at: hlcIso(r.hlc),\n node_id: r.node_id,\n value: r.value === null ? undefined : JSON.parse(r.value),\n cleared: r.value === null,\n }));\n}\n"
133
+ "import { z } from \"zod\";\nimport { MhError } from \"../../core/errors.ts\";\nimport { errorResponse, type Route, type RouteCtx } from \"../../core/sync/routes.ts\";\nimport {\n listDatabases,\n createDatabase,\n updateDatabase,\n duplicateDatabase,\n deleteDatabase,\n} from \"../../core/databases.ts\";\nimport {\n listProperties,\n addProperty,\n updateProperty,\n setPropertyWidth,\n removeProperty,\n type PropType,\n type PropertyConfig,\n} from \"../../core/properties.ts\";\nimport {\n listRecords,\n getRecord,\n createRecord,\n updateRecord,\n moveRecord,\n deleteRecord,\n} from \"../../core/records.ts\";\nimport {\n listDocuments,\n getDocument,\n createDocument,\n updateDocument,\n documentVersion,\n moveDocument,\n duplicateDocument,\n deleteDocument,\n} from \"../../core/documents.ts\";\nimport {\n listDocumentRevisions,\n documentAtVersion,\n revertDocument,\n listRecordRevisions,\n recordAtVersion,\n recordFieldHistory,\n revertRecord,\n listPropertyRevisions,\n revertProperty,\n listDatabaseActivity,\n} from \"../../core/history.ts\";\nimport { search } from \"../../core/search.ts\";\nimport { getNodeId } from \"../../core/node.ts\";\nimport {\n cacheStats,\n cachedBlobs,\n readPolicy,\n knownNodes,\n knownBuckets,\n clearCache,\n clearBlobs,\n deleteOrphanBlobs,\n isClearable,\n referencedHashes,\n reconcileCache,\n setFullNodes,\n setRedundancy,\n setPinned,\n verifyAnchorPresence,\n readBlobVerifiedAt,\n} from \"../../core/blobs.ts\";\nimport type { DbDriver } from \"../../core/driver.ts\";\nimport { getServerConfig } from \"../../core/config.ts\";\nimport { shareRoutes } from \"./share-routes.ts\";\nimport pkg from \"../../../package.json\" with { type: \"json\" };\n\n// Read-only viewer + light editing for the browser UI. These routes wrap the\n// same core functions the CLI uses, so every write goes through `emit()` and\n// replicates over /sync. Ids are carried as query params to keep the server's\n// exact-path matcher (see ./routes.ts) and OpenAPI generation unchanged.\n\n// --- pragmatic schemas (drive /docs; intentionally loose) -------------------\n\nconst DatabaseSchema = z.object({\n id: z.string(),\n name: z.string(),\n icon: z.string().nullable(),\n created_hlc: z.string(),\n});\nconst PropertySchema = z.object({\n id: z.string(),\n database_id: z.string(),\n name: z.string(),\n type: z.string(),\n config: z.any().nullable(),\n position: z.number(),\n});\nconst RecordSchema = z.object({\n id: z.string(),\n database_id: z.string(),\n values: z\n .record(z.string(), z.any())\n .describe(\n 'Field values keyed by property name (e.g. {\"Amount\":35}). Reads nest cells here; writes take a flat {column: value} map. Lossy when two properties share a name — prefer `cells` then.',\n ),\n cells: z\n .record(z.string(), z.any())\n .describe(\n \"Field values keyed by property id — lossless under duplicate property names. Writes accept property ids as keys too.\",\n ),\n});\nconst MoveRecordReq = z.object({\n target: z.string(),\n where: z.enum([\"before\", \"after\"]),\n});\nconst DocumentSummarySchema = z.object({\n id: z.string(),\n title: z.string(),\n database_id: z.string().nullable(),\n parent_id: z.string().nullable(),\n created_hlc: z.string(),\n order_key: z.string().nullable(),\n});\nconst MoveDocumentReq = z.object({\n target: z.string(),\n where: z.enum([\"before\", \"after\", \"into\"]),\n});\nconst DocumentSchema = DocumentSummarySchema.extend({\n body: z.string().nullable(),\n // Read/edit token (max HLC over the doc + its blocks); echo it back as\n // `if_match` on PATCH to detect concurrent changes.\n version: z.string().optional(),\n});\nconst SearchHitSchema = z.object({\n type: z.string(),\n id: z.string(),\n database_id: z.string().nullable(),\n title: z.string().optional(),\n snippet: z.string(),\n});\nconst OkSchema = z.object({ ok: z.boolean() });\n\nconst CreateDatabaseReq = z.object({ name: z.string(), icon: z.string().optional() });\nconst UpdateDatabaseReq = z.object({\n name: z.string().optional(),\n icon: z.string().nullable().optional(),\n});\nconst DuplicateDatabaseReq = z.object({\n name: z.string().optional().describe(\"Name for the copy (defaults to the source name)\"),\n icon: z.string().optional(),\n});\nconst CreatePropertyReq = z.object({\n db: z.string(),\n name: z.string(),\n type: z.string(),\n config: z.any().optional(),\n});\nconst UpdatePropertyReq = z.object({\n name: z.string().optional(),\n type: z.string().optional(),\n config: z.any().optional(),\n position: z.number().optional(),\n});\nconst SetWidthReq = z.object({ width: z.number() });\nconst RecordValuesReq = z\n .record(z.string(), z.any())\n .describe('Flat { column: value } cell patch (keyed by property name).');\nconst CreateDocumentReq = z.object({\n title: z.string(),\n body: z.string().optional(),\n database_id: z.string().optional(),\n parent_id: z.string().optional(),\n});\nconst UpdateDocumentReq = z.object({\n title: z.string().optional(),\n body: z.string().optional(),\n parent_id: z.string().nullable().optional(),\n // Optimistic concurrency: a `version` from GET /api/document. A concurrent\n // change (CLI, another window, sync) makes the PATCH fail 409 `stale`\n // instead of silently clobbering it.\n if_match: z.string().optional(),\n});\nconst DuplicateDocumentReq = z.object({\n title: z.string().optional().describe(\"Title for the copy (defaults to the source title)\"),\n parent_id: z.string().nullable().optional(),\n});\n\nconst RevisionBase = z.object({\n // Version token (max HLC of the revision); pass as `to` on revert or\n // `version` on GET /api/document/at.\n version: z.string(),\n at: z.string().describe(\"Wall-clock time of the revision (ISO 8601)\"),\n node_id: z.string(),\n kind: z.enum([\"user\", \"repair\", \"revert\"]).describe(\"Source of the revision\"),\n changes: z.number(),\n created: z.boolean(),\n deleted: z.boolean(),\n});\nconst DocRevisionSchema = RevisionBase.extend({\n title_changed: z.boolean(),\n blocks_changed: z.number(),\n blocks_deleted: z.number(),\n});\nconst RecordRevisionSchema = RevisionBase.extend({\n fields: z.array(z.string()).describe(\"Property ids of the cells written\"),\n moved: z.boolean(),\n});\nconst DatabaseActivityEntrySchema = RecordRevisionSchema.extend({\n record_id: z.string(),\n record_title: z\n .string()\n .nullable()\n .describe(\"Title-property value as of this revision (deleted records keep their last title)\"),\n diffs: z\n .array(\n z.object({\n prop: z.string(),\n before: z.any().optional(),\n after: z.any().optional(),\n }),\n )\n .describe(\"Value-level cell changes; a missing side means the cell did not exist\"),\n});\nconst DocumentVersionStateSchema = z.object({\n id: z.string(),\n title: z.string(),\n body: z.string(),\n deleted: z.boolean(),\n version: z.string(),\n});\nconst RevertDocumentReq = z.object({\n to: z.string().describe(\"Version token from /api/document/history\"),\n if_match: z.string().optional(),\n});\nconst RevertRecordReq = z.object({\n to: z.string().describe(\"Version token from /api/record/history\"),\n});\nconst RevertDocResultSchema = z.object({\n id: z.string(),\n changed: z.boolean(),\n restored: z.string(),\n version: z.string(),\n undeleted: z.boolean(),\n});\nconst RevertRecordResultSchema = z.object({\n id: z.string(),\n changed: z.boolean(),\n fields: z.array(z.string()),\n undeleted: z.boolean(),\n restored: z.string(),\n});\nconst PropertyRevisionSchema = RevisionBase.extend({\n fields: z.array(z.string()).describe(\"Definition columns touched (name/type/config/position)\"),\n cells_cleared: z.number(),\n});\nconst RevertPropertyReq = z.object({\n to: z.string().describe(\"Version token from /api/property/history\"),\n});\nconst RevertPropertyResultSchema = z.object({\n id: z.string(),\n changed: z.boolean(),\n fields: z.array(z.string()),\n restored_cells: z.number(),\n skipped_cells: z.number(),\n undeleted: z.boolean(),\n restored: z.string(),\n});\nconst RecordVersionStateSchema = z.object({\n id: z.string(),\n database_id: z.string().nullable(),\n deleted: z.boolean(),\n data: z.record(z.string(), z.any()).describe(\"Cells at that version, keyed by property id\"),\n version: z.string(),\n});\nconst FieldHistoryEntrySchema = z.object({\n version: z.string(),\n at: z.string(),\n node_id: z.string(),\n value: z.any().optional(),\n cleared: z.boolean(),\n});\nconst NodeInfoSchema = z.object({\n node_id: z.string(),\n label: z.string().nullable().describe(\"Peer label from pairing; null when unnamed\"),\n self: z.boolean().describe(\"True for the node serving this request\"),\n});\nconst CacheStatsSchema = z.object({\n totalBytes: z.number(),\n clearableBytes: z.number(),\n retainedBytes: z.number(),\n count: z.number(),\n clearableCount: z.number(),\n});\nconst BlobPolicySchema = z.object({\n fullNodes: z.array(z.string()),\n redundancy: z.enum([\"all\", \"any\"]),\n});\nconst KnownNodeSchema = z.object({\n nodeId: z.string(),\n label: z.string().nullable(),\n self: z.boolean(),\n});\nconst BucketAnchorSchema = z.object({\n url: z.string(),\n label: z.string().nullable(),\n bucket: z.string().nullable(),\n});\nconst BlobCacheSchema = z.object({\n stats: CacheStatsSchema,\n policy: BlobPolicySchema,\n nodes: z.array(KnownNodeSchema),\n buckets: z.array(BucketAnchorSchema).describe(\"Attached object-storage buckets, selectable as full-blob anchors\"),\n quotaBytes: z.number().describe(\"Auto-evict over this many bytes; 0 = disabled\"),\n pinnedCount: z.number(),\n pinnedBytes: z.number(),\n lastVerifiedAt: z\n .number()\n .nullable()\n .describe(\"Epoch-ms of the last anchor-presence verify; null = never / invalidated\"),\n unreachableAnchors: z\n .array(z.string())\n .describe(\"Anchors the last verify couldn't reach (only populated by /verify)\"),\n});\nconst PinReq = z.object({\n hash: z.string(),\n pinned: z.boolean(),\n});\nconst PinResSchema = z.object({ hash: z.string(), pinned: z.boolean() });\nconst ClearResultSchema = z.object({\n cleared: z.number(),\n freedBytes: z.number(),\n skipped: z.number(),\n});\nconst GcResultSchema = z.object({\n removed: z.number(),\n freedBytes: z.number(),\n});\nconst BlobRowSchema = z.object({\n hash: z.string(),\n size: z.number(),\n contentType: z.string().nullable(),\n lastAccess: z.number().nullable(),\n pinned: z.boolean(),\n pending: z.boolean().describe(\"Produced here, not yet flushed to an anchor — protected\"),\n clearable: z.boolean().describe(\"Safe to drop: durable on the designated full set\"),\n referenced: z.boolean().describe(\"A live document/site still points at it; !referenced = orphan\"),\n});\nconst BlobListSchema = z.array(BlobRowSchema);\nconst HashListReq = z.object({ hashes: z.array(z.string()) });\nconst SetBlobPolicyReq = z.object({\n full_nodes: z\n .array(z.string())\n .optional()\n .describe(\"Full-blob anchors: node ids and/or bucket urls (s3://…)\"),\n redundancy: z.enum([\"all\", \"any\"]).optional(),\n});\nconst SetBlobPolicyResSchema = z.object({\n policy: BlobPolicySchema,\n});\n\n// --- helpers ----------------------------------------------------------------\n\nfunction need(req: Request, key: string): string {\n const v = new URL(req.url).searchParams.get(key);\n if (!v) throw new Error(`missing query param: ${key}`);\n return v;\n}\n\nfunction opt(req: Request, key: string): string | undefined {\n return new URL(req.url).searchParams.get(key) ?? undefined;\n}\n\n/** Wrap a handler: serialize the return value, turn thrown errors into 400 JSON. */\nfunction handle(\n fn: (req: Request, ctx: RouteCtx) => unknown | Promise<unknown>,\n): Route[\"handler\"] {\n return async (req, ctx) => {\n try {\n const out = await fn(req, ctx);\n if (out instanceof Response) return out;\n return Response.json(out ?? null);\n } catch (e) {\n return errorResponse(e);\n }\n };\n}\n\n// --- routes -----------------------------------------------------------------\n\nconst VersionSchema = z.object({ version: z.string() });\n\n/** Shape the Settings storage-panel payload. `unreachable` is supplied by /verify\n * (the anchors it couldn't reach); GET reports the stored last-verified stamp. */\nfunction blobCacheInfo(db: DbDriver, unreachable: string[] = []) {\n reconcileCache(db);\n const pinned = cachedBlobs(db).filter((b) => b.pinned);\n return {\n stats: cacheStats(db),\n policy: readPolicy(db),\n nodes: knownNodes(db),\n buckets: knownBuckets(db),\n quotaBytes: getServerConfig(db).blobCacheQuotaBytes,\n pinnedCount: pinned.length,\n pinnedBytes: pinned.reduce((s, b) => s + b.size, 0),\n lastVerifiedAt: readBlobVerifiedAt(db),\n unreachableAnchors: unreachable,\n };\n}\n\n/** Per-blob detail for the Settings blob-manager popup: every cached blob with its\n * size/type/last-access plus the two computed flags the UI gates actions on —\n * `clearable` (safe to drop, durable elsewhere) and `referenced` (a live doc/site\n * points at it; the inverse is an orphan, eligible for true deletion). */\nfunction blobList(db: DbDriver) {\n reconcileCache(db);\n const refs = referencedHashes(db);\n return cachedBlobs(db).map((b) => ({\n hash: b.hash,\n size: b.size,\n contentType: b.content_type,\n lastAccess: b.last_access,\n pinned: !!b.pinned,\n pending: !!b.pending,\n clearable: isClearable(db, b.hash),\n referenced: refs.has(b.hash),\n }));\n}\n\nexport const webuiRoutes: Route[] = [\n {\n method: \"GET\",\n path: \"/api/version\",\n summary: \"Version of the running core (sidecar). Used by the desktop app's settings footer.\",\n response: VersionSchema,\n handler: () => Response.json({ version: pkg.version }),\n },\n {\n method: \"GET\",\n path: \"/api/databases\",\n summary: \"List all databases\",\n response: z.array(DatabaseSchema),\n handler: handle((_req, { db }) => listDatabases(db)),\n },\n {\n method: \"POST\",\n path: \"/api/databases\",\n summary: \"Create a database\",\n request: CreateDatabaseReq,\n response: DatabaseSchema,\n handler: handle(async (req, { db }) => {\n const body = (await req.json()) as { name: string; icon?: string };\n return createDatabase(db, body);\n }),\n },\n {\n method: \"PATCH\",\n path: \"/api/database\",\n summary: \"Rename a database or change its icon. Query: ?id=<id>\",\n request: UpdateDatabaseReq,\n response: DatabaseSchema,\n handler: handle(async (req, { db }) => {\n const body = (await req.json()) as { name?: string; icon?: string | null };\n return updateDatabase(db, need(req, \"id\"), body);\n }),\n },\n {\n method: \"POST\",\n path: \"/api/database/duplicate\",\n summary: \"Copy a database whole — schema and all records. Query: ?id=<id>\",\n request: DuplicateDatabaseReq,\n response: DatabaseSchema,\n handler: handle(async (req, { db }) => {\n const body = (await req.json().catch(() => ({}))) as { name?: string; icon?: string };\n return duplicateDatabase(db, need(req, \"id\"), body);\n }),\n },\n {\n method: \"DELETE\",\n path: \"/api/database\",\n summary: \"Delete a database (and stop it being the current one). Query: ?id=<id>\",\n response: OkSchema,\n handler: handle((req, { db }) => ({ ok: deleteDatabase(db, need(req, \"id\")) })),\n },\n {\n method: \"GET\",\n path: \"/api/database/activity\",\n summary:\n \"Recent changes across all records of a database, newest first. Query: ?db=<id>&limit=<n>\",\n response: z.array(DatabaseActivityEntrySchema),\n handler: handle((req, { db }) => {\n const limit = opt(req, \"limit\");\n return listDatabaseActivity(db, need(req, \"db\"), {\n limit: limit ? Number(limit) : undefined,\n });\n }),\n },\n {\n method: \"GET\",\n path: \"/api/properties\",\n summary: \"List a database's properties (columns). Query: ?db=<id>\",\n response: z.array(PropertySchema),\n handler: handle((req, { db }) => listProperties(db, need(req, \"db\"))),\n },\n {\n method: \"POST\",\n path: \"/api/properties\",\n summary: \"Add a property to a database\",\n request: CreatePropertyReq,\n response: PropertySchema,\n handler: handle(async (req, { db }) => {\n const body = (await req.json()) as {\n db: string;\n name: string;\n type: PropType;\n config?: PropertyConfig;\n };\n return addProperty(db, body.db, { name: body.name, type: body.type, config: body.config });\n }),\n },\n {\n method: \"PATCH\",\n path: \"/api/property\",\n summary: \"Update a property: rename, change type, edit config/options, reorder. Query: ?id=<id>\",\n request: UpdatePropertyReq,\n response: PropertySchema,\n handler: handle(async (req, { db }) => {\n const body = (await req.json()) as {\n name?: string;\n type?: PropType;\n config?: PropertyConfig;\n position?: number;\n };\n return updateProperty(db, need(req, \"id\"), body);\n }),\n },\n {\n method: \"PATCH\",\n path: \"/api/property/width\",\n summary: \"Set a property's table column width (px). Query: ?id=<id>\",\n request: SetWidthReq,\n response: PropertySchema,\n handler: handle(async (req, { db }) => {\n const body = (await req.json()) as { width: number };\n return setPropertyWidth(db, need(req, \"id\"), body.width);\n }),\n },\n {\n method: \"DELETE\",\n path: \"/api/property\",\n summary: \"Delete a property (column) and its cells. Query: ?id=<id>\",\n response: OkSchema,\n handler: handle((req, { db }) => ({ ok: removeProperty(db, need(req, \"id\")) })),\n },\n {\n method: \"GET\",\n path: \"/api/property/history\",\n summary: \"List a property's definition revisions, newest first. Query: ?id=<id>\",\n response: z.array(PropertyRevisionSchema),\n handler: handle((req, { db }) => listPropertyRevisions(db, need(req, \"id\"))),\n },\n {\n method: \"POST\",\n path: \"/api/property/revert\",\n summary:\n \"Schema rollback: restore a property's definition and the cells its type-change/removal cleared (user edits since are kept). Query: ?id=<id>\",\n request: RevertPropertyReq,\n response: RevertPropertyResultSchema,\n handler: handle(async (req, { db }) => {\n const body = (await req.json()) as { to: string };\n return revertProperty(db, need(req, \"id\"), body.to);\n }),\n },\n {\n method: \"GET\",\n path: \"/api/records\",\n summary: \"List records in a database. Query: ?db=<id>&sort=<field>&limit=<n>\",\n response: z.array(RecordSchema),\n handler: handle((req, { db }) => {\n const limit = opt(req, \"limit\");\n return listRecords(db, need(req, \"db\"), {\n sort: opt(req, \"sort\"),\n limit: limit ? Number(limit) : undefined,\n });\n }),\n },\n {\n method: \"POST\",\n path: \"/api/records\",\n summary: \"Create a record. Query: ?db=<id>; body is a {field: value} map\",\n request: RecordValuesReq,\n response: RecordSchema,\n handler: handle(async (req, { db }) => {\n const values = (await req.json()) as Record<string, unknown>;\n return createRecord(db, need(req, \"db\"), values);\n }),\n },\n {\n method: \"GET\",\n path: \"/api/record\",\n summary: \"Get one record. Query: ?id=<id>\",\n response: RecordSchema,\n handler: handle((req, { db }) => {\n const id = need(req, \"id\");\n const rec = getRecord(db, id);\n if (!rec) throw new MhError(\"not_found\", `no such record: ${id}`);\n return rec;\n }),\n },\n {\n method: \"PATCH\",\n path: \"/api/record\",\n summary: \"Update record fields. Query: ?id=<id>; body is a {field: value} map\",\n request: RecordValuesReq,\n response: RecordSchema,\n handler: handle(async (req, { db }) => {\n const values = (await req.json()) as Record<string, unknown>;\n return updateRecord(db, need(req, \"id\"), values);\n }),\n },\n {\n method: \"PATCH\",\n path: \"/api/record/order\",\n summary: \"Move a record before or after another record. Query: ?id=<id>\",\n request: MoveRecordReq,\n response: RecordSchema,\n handler: handle(async (req, { db }) => {\n const body = (await req.json()) as { target: string; where: \"before\" | \"after\" };\n return moveRecord(db, need(req, \"id\"), body.target, body.where);\n }),\n },\n {\n method: \"GET\",\n path: \"/api/record/history\",\n summary: \"List a record's revisions, newest first. Query: ?id=<id>\",\n response: z.array(RecordRevisionSchema),\n handler: handle((req, { db }) => listRecordRevisions(db, need(req, \"id\"))),\n },\n {\n method: \"GET\",\n path: \"/api/record/at\",\n summary: \"A record's cells as of a past version. Query: ?id=<id>&version=<token>\",\n response: RecordVersionStateSchema,\n handler: handle((req, { db }) => recordAtVersion(db, need(req, \"id\"), need(req, \"version\"))),\n },\n {\n method: \"GET\",\n path: \"/api/record/field-history\",\n summary: \"The write trail of one record cell, newest first. Query: ?id=<id>&prop=<propertyId>\",\n response: z.array(FieldHistoryEntrySchema),\n handler: handle((req, { db }) => recordFieldHistory(db, need(req, \"id\"), need(req, \"prop\"))),\n },\n {\n method: \"POST\",\n path: \"/api/record/revert\",\n summary:\n \"Restore a record's cells to a past version, recorded as a new revision. Query: ?id=<id>\",\n request: RevertRecordReq,\n response: RevertRecordResultSchema,\n handler: handle(async (req, { db }) => {\n const body = (await req.json()) as { to: string };\n return revertRecord(db, need(req, \"id\"), body.to);\n }),\n },\n {\n method: \"DELETE\",\n path: \"/api/record\",\n summary: \"Delete a record. Query: ?id=<id>\",\n response: OkSchema,\n handler: handle((req, { db }) => ({ ok: deleteRecord(db, need(req, \"id\")) })),\n },\n {\n method: \"GET\",\n path: \"/api/documents\",\n summary: \"List documents. Optional query: ?db=<id> or ?parent=<id>\",\n response: z.array(DocumentSummarySchema),\n handler: handle((req, { db }) =>\n listDocuments(db, { database_id: opt(req, \"db\"), parent_id: opt(req, \"parent\") }),\n ),\n },\n {\n method: \"POST\",\n path: \"/api/documents\",\n summary: \"Create a document\",\n request: CreateDocumentReq,\n response: DocumentSchema,\n handler: handle(async (req, { db }) => {\n const body = (await req.json()) as {\n title: string;\n body?: string;\n database_id?: string;\n parent_id?: string;\n };\n return createDocument(db, body);\n }),\n },\n {\n method: \"GET\",\n path: \"/api/document\",\n summary: \"Get one document with full body. Query: ?id=<id>\",\n response: DocumentSchema,\n handler: handle((req, { db }) => {\n const id = need(req, \"id\");\n const doc = getDocument(db, id);\n if (!doc) throw new MhError(\"not_found\", `no such document: ${id}`);\n return { ...doc, version: documentVersion(db, doc.id) };\n }),\n },\n {\n method: \"PATCH\",\n path: \"/api/document\",\n summary: \"Update a document's title/body/parent_id (null = top level). Query: ?id=<id>\",\n request: UpdateDocumentReq,\n response: DocumentSchema,\n handler: handle(async (req, { db }) => {\n const body = (await req.json()) as {\n title?: string;\n body?: string;\n parent_id?: string | null;\n if_match?: string;\n };\n const { if_match, ...fields } = body;\n const doc = updateDocument(db, need(req, \"id\"), fields, { ifMatch: if_match });\n return { ...doc, version: documentVersion(db, doc.id) };\n }),\n },\n {\n method: \"POST\",\n path: \"/api/document/duplicate\",\n summary: \"Copy a document — title and every block — next to the source. Query: ?id=<id>\",\n request: DuplicateDocumentReq,\n response: DocumentSchema,\n handler: handle(async (req, { db }) => {\n const body = (await req.json().catch(() => ({}))) as {\n title?: string;\n parent_id?: string | null;\n };\n const doc = duplicateDocument(db, need(req, \"id\"), {\n title: body.title,\n parentId: body.parent_id,\n });\n return { ...doc, version: documentVersion(db, doc.id) };\n }),\n },\n {\n method: \"PATCH\",\n path: \"/api/document/move\",\n summary: \"Move a document before/after another, or into it as a child. Query: ?id=<id>\",\n request: MoveDocumentReq,\n response: DocumentSchema,\n handler: handle(async (req, { db }) => {\n const body = (await req.json()) as { target: string; where: \"before\" | \"after\" | \"into\" };\n return moveDocument(db, need(req, \"id\"), body.target, body.where);\n }),\n },\n {\n method: \"GET\",\n path: \"/api/document/history\",\n summary: \"List a document's revisions, newest first. Query: ?id=<id>\",\n response: z.array(DocRevisionSchema),\n handler: handle((req, { db }) => listDocumentRevisions(db, need(req, \"id\"))),\n },\n {\n method: \"GET\",\n path: \"/api/document/at\",\n summary: \"A document's title/body as of a past version. Query: ?id=<id>&version=<token>\",\n response: DocumentVersionStateSchema,\n handler: handle((req, { db }) => documentAtVersion(db, need(req, \"id\"), need(req, \"version\"))),\n },\n {\n method: \"POST\",\n path: \"/api/document/revert\",\n summary:\n \"Restore a document's title/body to a past version, recorded as a new revision. Query: ?id=<id>\",\n request: RevertDocumentReq,\n response: RevertDocResultSchema,\n handler: handle(async (req, { db }) => {\n const body = (await req.json()) as { to: string; if_match?: string };\n return revertDocument(db, need(req, \"id\"), body.to, { ifMatch: body.if_match });\n }),\n },\n {\n method: \"DELETE\",\n path: \"/api/document\",\n summary: \"Delete a document. Query: ?id=<id>\",\n response: OkSchema,\n handler: handle((req, { db }) => ({ ok: deleteDocument(db, need(req, \"id\")) })),\n },\n {\n method: \"GET\",\n path: \"/api/nodes\",\n summary: \"Known nodes for display: this device plus paired peers with their labels\",\n response: z.array(NodeInfoSchema),\n handler: handle((_req, { db }) => {\n const self = getNodeId(db);\n const peers = db\n .query(\n \"SELECT node_id, label FROM peers WHERE node_id IS NOT NULL AND node_id <> '' GROUP BY node_id\",\n )\n .all() as { node_id: string; label: string | null }[];\n return [\n { node_id: self, label: null, self: true },\n ...peers.filter((p) => p.node_id !== self).map((p) => ({ ...p, self: false })),\n ];\n }),\n },\n {\n method: \"GET\",\n path: \"/api/search\",\n summary: \"Full-text search across documents and records. Query: ?q=<text>&limit=<n>\",\n response: z.array(SearchHitSchema),\n handler: handle((req, { db }) => {\n const limit = opt(req, \"limit\");\n return search(db, need(req, \"q\"), { limit: limit ? Number(limit) : undefined });\n }),\n },\n {\n method: \"GET\",\n path: \"/api/blob-cache\",\n summary:\n \"Local blob cache stats + clear policy + device/bucket roster (Settings storage panel). \" +\n \"A blob is clearable only once a presence verify confirmed a designated anchor holds it.\",\n response: BlobCacheSchema,\n handler: handle((_req, { db }) => blobCacheInfo(db)),\n },\n {\n method: \"POST\",\n path: \"/api/blob-cache/verify\",\n summary:\n \"Verify NOW which cached blobs the designated anchors durably hold (bucket LIST / \" +\n \"device /api/blobs/has), recording the per-blob `anchored` flag that gates clearing. \" +\n \"Returns the refreshed cache info incl. any unreachable anchors. Run on panel open / refresh.\",\n response: BlobCacheSchema,\n handler: handle(async (_req, { db }) => {\n const r = await verifyAnchorPresence(db);\n return blobCacheInfo(db, r.unreachable);\n }),\n },\n {\n method: \"POST\",\n path: \"/api/blob-cache/clear\",\n summary:\n \"Drop locally-cached blob bytes a full blob device durably holds (the reference stays; bytes re-download on demand). Returns bytes freed.\",\n response: ClearResultSchema,\n handler: handle((_req, { db }) => clearCache(db)),\n },\n {\n method: \"POST\",\n path: \"/api/blob-cache/pin\",\n summary:\n \"Pin/unpin a cached blob by hash (node-local; never synced). Pinned blobs are kept by both manual clear and automatic quota eviction.\",\n request: PinReq,\n response: PinResSchema,\n handler: handle(async (req, { db }) => {\n const body = (await req.json()) as { hash: string; pinned: boolean };\n reconcileCache(db);\n if (!setPinned(db, body.hash, body.pinned))\n throw new MhError(\"not_found\", `blob not in cache: ${body.hash}`);\n return { hash: body.hash, pinned: body.pinned };\n }),\n },\n {\n method: \"GET\",\n path: \"/api/blobs\",\n summary:\n \"Per-blob detail for the Settings blob manager: size, content type, last access, \" +\n \"and the pinned/pending/clearable/referenced flags the popup sorts, filters and acts on.\",\n response: BlobListSchema,\n handler: handle((_req, { db }) => blobList(db)),\n },\n {\n method: \"POST\",\n path: \"/api/blobs/clear\",\n summary:\n \"Drop bytes for a chosen subset of clearable blobs (the reference stays; bytes re-download on demand). \" +\n \"Pinned / non-clearable hashes are skipped. Returns bytes freed and skipped count.\",\n request: HashListReq,\n response: ClearResultSchema,\n handler: handle(async (req, { db }) => {\n const body = (await req.json()) as { hashes: string[] };\n return clearBlobs(db, body.hashes ?? []);\n }),\n },\n {\n method: \"POST\",\n path: \"/api/blobs/delete\",\n summary:\n \"Permanently delete a chosen subset of ORPHAN blobs (not referenced by any live document/site). \" +\n \"Still-referenced hashes are refused (skipped) so an in-use file is never removed. Returns bytes freed.\",\n request: HashListReq,\n response: GcResultSchema,\n handler: handle(async (req, { db }) => {\n const body = (await req.json()) as { hashes: string[] };\n return deleteOrphanBlobs(db, body.hashes ?? []);\n }),\n },\n {\n method: \"POST\",\n path: \"/api/blob-policy\",\n summary:\n \"Set the full blob device(s) and/or redundancy (all|any). Anchor designation only — clearing is decided locally per device.\",\n request: SetBlobPolicyReq,\n response: SetBlobPolicyResSchema,\n handler: handle(async (req, { db }) => {\n const body = (await req.json()) as { full_nodes?: string[]; redundancy?: \"all\" | \"any\" };\n if (body.full_nodes) setFullNodes(db, body.full_nodes);\n if (body.redundancy) setRedundancy(db, body.redundancy);\n return { policy: readPolicy(db) };\n }),\n },\n ...shareRoutes,\n];\n",
134
+ "import type { DbDriver } from \"./driver.ts\";\nimport { emit, grouped, CHANGE_SELECT } from \"./crdt.ts\";\nimport { serializeDocBlocks } from \"./blocks.ts\";\nimport { getDocument, updateDocument, documentVersion } from \"./documents.ts\";\nimport { listProperties } from \"./properties.ts\";\nimport { MhError } from \"./errors.ts\";\n\n// Read-side history over the CRDT oplog. The oplog (crdt_changes) is append-only\n// and never compacted, so the state of any register at a cutoff HLC `at` is the\n// value with the greatest hlc <= at — the same last-write-wins rule materialize()\n// applies at the head. Revert is a *forward* write: reconstruct the old state,\n// diff against the present, and emit the differences as new changes. The oplog\n// itself is never edited (it is the sync source of truth), so reverts replicate\n// and converge like any other edit.\n\n/** Changes from the same node closer together than this are one revision: a\n * single save emits a burst of field writes with near-identical timestamps. */\nconst REVISION_GAP_MS = 1500;\n\n/** Physical wall-clock milliseconds encoded in an HLC (first 15 digits). */\nfunction hlcMillis(hlc: string): number {\n return Number(hlc.slice(0, 15));\n}\n\nfunction hlcIso(hlc: string): string {\n return new Date(hlcMillis(hlc)).toISOString();\n}\n\n// A fully-read oplog row: Change with txn always present (CHANGE_SELECT\n// includes it; NULL for legacy rows). The reused select list keeps these\n// queries locked to the Change interface.\ninterface RawChange {\n hlc: string;\n node_id: string;\n dataset: string;\n row_id: string;\n col: string;\n value: string | null;\n txn: string | null;\n}\n\n/** Where a revision came from, derived from its change-group label. */\nexport type RevisionKind = \"user\" | \"repair\" | \"revert\";\n\nfunction revisionKind(txn: string | null): RevisionKind {\n if (txn?.startsWith(\"repair:\")) return \"repair\";\n if (txn?.startsWith(\"revert:\")) return \"revert\";\n return \"user\";\n}\n\n/**\n * Group an HLC-ordered change stream into revisions. Changes sharing a txn are\n * one revision; between txn-less changes (legacy rows, pre-txn peers) fall back\n * to author + wall-clock gap. Clustering depends only on oplog content, so\n * every synced node renders the same list.\n */\nfunction clusterRevisions(changes: RawChange[]): RawChange[][] {\n const groups: RawChange[][] = [];\n let cur: RawChange[] = [];\n for (const c of changes) {\n const prev = cur[cur.length - 1];\n const boundary =\n prev &&\n (prev.txn !== null && c.txn !== null\n ? prev.txn !== c.txn\n : prev.node_id !== c.node_id || hlcMillis(c.hlc) - hlcMillis(prev.hlc) > REVISION_GAP_MS);\n if (boundary) {\n groups.push(cur);\n cur = [];\n }\n cur.push(c);\n }\n if (cur.length) groups.push(cur);\n return groups;\n}\n\n/** True when a JSON-encoded oplog value is a truthy flag (e.g. __deleted = 1). */\nfunction flagSet(value: string | null): boolean {\n return value !== null && value !== \"0\" && value !== \"false\" && value !== \"null\";\n}\n\n/** Latest value per register (col) among `changes` with hlc <= at.\n * A `null` value column means the register was cleared (json_remove). */\nfunction registersAt(\n changes: RawChange[],\n at: string,\n): Map<string, { value: string | null; hlc: string }> {\n const out = new Map<string, { value: string | null; hlc: string }>();\n for (const c of changes) {\n if (c.hlc > at) continue;\n const cur = out.get(c.col);\n if (!cur || c.hlc > cur.hlc) out.set(c.col, { value: c.value, hlc: c.hlc });\n }\n return out;\n}\n\n/** All oplog changes for one row of a dataset, in HLC order. */\nfunction rowChanges(db: DbDriver, dataset: string, rowId: string): RawChange[] {\n return db\n .query(\n `SELECT ${CHANGE_SELECT} FROM crdt_changes WHERE dataset = ? AND row_id = ? ORDER BY hlc`,\n )\n .all(dataset, rowId) as RawChange[];\n}\n\n// ---- documents ---------------------------------------------------------------\n\n/** Ids of every block that was ever assigned to this document. Whether a block\n * counts at a given cutoff is decided later from its registers at that cutoff. */\nfunction everBlockIds(db: DbDriver, docId: string): string[] {\n return (\n db\n .query(\n \"SELECT DISTINCT row_id FROM crdt_changes WHERE dataset = 'doc_blocks' AND col = 'doc_id' AND value = ?\",\n )\n .all(JSON.stringify(docId)) as { row_id: string }[]\n ).map((r) => r.row_id);\n}\n\n/** Doc register changes + changes of every block ever attached, in HLC order. */\nfunction docChanges(db: DbDriver, docId: string): RawChange[] {\n const blocks = everBlockIds(db, docId);\n const placeholders = blocks.map(() => \"?\").join(\",\");\n const blockClause = blocks.length\n ? ` OR (dataset = 'doc_blocks' AND row_id IN (${placeholders}))`\n : \"\";\n return db\n .query(\n `SELECT ${CHANGE_SELECT} FROM crdt_changes\n WHERE (dataset = 'documents' AND row_id = ?)${blockClause}\n ORDER BY hlc`,\n )\n .all(docId, ...blocks) as RawChange[];\n}\n\nexport interface DocRevision {\n /** Version token (max HLC of the revision) — pass to documentAtVersion/revertDocument. */\n version: string;\n /** Wall-clock time derived from the version HLC (ISO 8601). */\n at: string;\n node_id: string;\n /** Source of the revision: a user edit, a repairHub fix, or a revert. */\n kind: RevisionKind;\n changes: number;\n created: boolean;\n deleted: boolean;\n title_changed: boolean;\n blocks_changed: number;\n blocks_deleted: number;\n}\n\n/** A document's edit history, newest first, clustered into save-sized revisions. */\nexport function listDocumentRevisions(db: DbDriver, id: string): DocRevision[] {\n const changes = docChanges(db, id);\n if (!changes.length) throw new MhError(\"not_found\", `no such document: ${id}`);\n return clusterRevisions(changes)\n .map((group) => {\n const changedBlocks = new Set<string>();\n const deletedBlocks = new Set<string>();\n let created = false;\n let deleted = false;\n let titleChanged = false;\n for (const c of group) {\n if (c.dataset === \"documents\") {\n if (c.col === \"created_hlc\") created = true;\n else if (c.col === \"title\") titleChanged = true;\n else if (c.col === \"__deleted\") deleted = flagSet(c.value);\n } else if (c.col === \"__deleted\" && flagSet(c.value)) {\n deletedBlocks.add(c.row_id);\n } else if (c.col === \"text\") {\n changedBlocks.add(c.row_id);\n }\n }\n const last = group[group.length - 1]!;\n return {\n version: last.hlc,\n at: hlcIso(last.hlc),\n node_id: last.node_id,\n kind: revisionKind(last.txn),\n changes: group.length,\n created,\n deleted,\n title_changed: titleChanged,\n blocks_changed: changedBlocks.size,\n blocks_deleted: deletedBlocks.size,\n };\n })\n .reverse();\n}\n\nexport interface DocumentVersionState {\n id: string;\n title: string;\n body: string;\n deleted: boolean;\n /** Exact version (max HLC <= the requested cutoff) this state corresponds to. */\n version: string;\n}\n\n/** Reconstruct a document as of version cutoff `at` (state at hlc <= at). */\nexport function documentAtVersion(db: DbDriver, id: string, at: string): DocumentVersionState {\n if (!at) throw new MhError(\"invalid_input\", \"missing version cutoff\");\n const changes = docChanges(db, id).filter((c) => c.hlc <= at);\n if (!changes.length)\n throw new MhError(\"not_found\", `no version of document ${id} at or before ${at}`);\n\n const docRegs = registersAt(changes.filter((c) => c.dataset === \"documents\"), at);\n const parse = (col: string): unknown => {\n const r = docRegs.get(col);\n return r?.value == null ? undefined : JSON.parse(r.value);\n };\n\n // Per-block registers at the cutoff; a block counts only if it points at this\n // document, is not tombstoned, and has text — mirroring recomputeDocBody().\n const byBlock = new Map<string, RawChange[]>();\n for (const c of changes) {\n if (c.dataset !== \"doc_blocks\") continue;\n (byBlock.get(c.row_id) ?? byBlock.set(c.row_id, []).get(c.row_id)!).push(c);\n }\n const blocks: { id: string; text: string; order_key: string | null; blankAfter: number }[] = [];\n for (const [blockId, blockChanges] of byBlock) {\n const regs = registersAt(blockChanges, at);\n const reg = (col: string): unknown => {\n const r = regs.get(col);\n return r?.value == null ? undefined : JSON.parse(r.value);\n };\n if (reg(\"doc_id\") !== id) continue;\n if (regs.get(\"__deleted\") && flagSet(regs.get(\"__deleted\")!.value)) continue;\n const text = reg(\"text\");\n if (typeof text !== \"string\" || !text) continue;\n blocks.push({\n id: blockId,\n text,\n order_key: (reg(\"order_key\") as string | undefined) ?? null,\n blankAfter: (reg(\"blank_after\") as number | undefined) ?? 0,\n });\n }\n blocks.sort((a, b) => {\n if (a.order_key !== b.order_key) {\n if (a.order_key === null) return -1; // NULL sorts first, like the SQL ORDER BY\n if (b.order_key === null) return 1;\n return a.order_key < b.order_key ? -1 : 1;\n }\n return a.id < b.id ? -1 : 1;\n });\n\n // Pre-block-model documents kept their body in the documents.body register;\n // it stays authoritative until the first block exists (cf. isBlockManaged).\n const body = byBlock.size\n ? serializeDocBlocks(blocks)\n : ((parse(\"body\") as string | undefined) ?? \"\");\n\n return {\n id,\n title: (parse(\"title\") as string | undefined) ?? \"\",\n body,\n deleted: docRegs.get(\"__deleted\") ? flagSet(docRegs.get(\"__deleted\")!.value) : false,\n version: changes[changes.length - 1]!.hlc,\n };\n}\n\nexport interface RevertDocResult {\n id: string;\n changed: boolean;\n /** The version token the document was restored to. */\n restored: string;\n /** The document's version after the revert (a new head — revert is a forward write). */\n version: string;\n /** True when the revert resurrected a tombstoned document. */\n undeleted: boolean;\n}\n\n/**\n * Restore a document's title/body to a past version, as a new forward edit\n * (reuses updateDocument's block reconcile, so unchanged blocks keep identity).\n * Reverting a tombstoned document resurrects it; children unparented by the\n * delete stay where they are. One change group, so history shows ONE revision.\n */\nexport const revertDocument = grouped(function revertDocument(\n db: DbDriver,\n id: string,\n to: string,\n opts: { ifMatch?: string } = {},\n): RevertDocResult {\n let cur = getDocument(db, id);\n if (!cur && !db.query(\"SELECT 1 AS x FROM documents WHERE id = ?\").get(id))\n throw new MhError(\"not_found\", `no such document: ${id}`);\n if (opts.ifMatch !== undefined && documentVersion(db, id) !== opts.ifMatch)\n throw new MhError(\"stale\", `stale: document changed since ${opts.ifMatch}; re-read first`);\n\n const past = documentAtVersion(db, id, to);\n if (past.deleted)\n throw new MhError(\"invalid_input\", \"target version is a deleted state; use doc delete instead\");\n\n const undeleted = !cur;\n if (!cur) {\n // Resurrect the doc row; its blocks stay tombstoned (the body cache is empty),\n // so the body restore below re-inserts the past blocks via reconcile.\n emit(db, \"documents\", id, \"__deleted\", 0);\n cur = getDocument(db, id)!;\n }\n\n const fields: { title?: string; body?: string } = {};\n if (past.title !== cur.title) fields.title = past.title;\n if (past.body !== (cur.body ?? \"\")) fields.body = past.body;\n if (Object.keys(fields).length) updateDocument(db, id, fields);\n\n return {\n id,\n changed: Object.keys(fields).length > 0 || undeleted,\n restored: past.version,\n version: documentVersion(db, id),\n undeleted,\n };\n}, \"revert\");\n\n// ---- records -------------------------------------------------------------------\n\n/** records-dataset meta columns; every other col is a property cell. */\nconst RECORD_META = new Set([\"database_id\", \"created_hlc\", \"order_key\", \"__deleted\"]);\n\nexport interface RecordRevision {\n version: string;\n at: string;\n node_id: string;\n kind: RevisionKind;\n changes: number;\n created: boolean;\n deleted: boolean;\n /** Property ids of the cells written in this revision. */\n fields: string[];\n moved: boolean;\n}\n\n/** Summarize one change group of a record into a revision. */\nfunction recordRevisionOf(group: RawChange[]): RecordRevision {\n const fields = new Set<string>();\n let created = false;\n let deleted = false;\n let moved = false;\n for (const c of group) {\n if (c.col === \"created_hlc\") created = true;\n else if (c.col === \"__deleted\") deleted = flagSet(c.value);\n else if (c.col === \"order_key\") moved = true;\n else if (!RECORD_META.has(c.col)) fields.add(c.col);\n }\n const last = group[group.length - 1]!;\n return {\n version: last.hlc,\n at: hlcIso(last.hlc),\n node_id: last.node_id,\n kind: revisionKind(last.txn),\n changes: group.length,\n created,\n deleted,\n fields: [...fields],\n moved,\n };\n}\n\n/** A record's edit history, newest first, clustered into save-sized revisions. */\nexport function listRecordRevisions(db: DbDriver, id: string): RecordRevision[] {\n const changes = rowChanges(db, \"records\", id);\n if (!changes.length) throw new MhError(\"not_found\", `no such record: ${id}`);\n return clusterRevisions(changes).map(recordRevisionOf).reverse();\n}\n\n/** One cell's value change inside a revision. A missing `before`/`after` key\n * means the cell did not exist on that side (distinct from an explicit null). */\nexport interface FieldChange {\n prop: string;\n before?: unknown;\n after?: unknown;\n}\n\nexport interface DatabaseActivityEntry extends RecordRevision {\n record_id: string;\n /** Title-property value as of this revision — deleted records keep their last title. */\n record_title: string | null;\n /** Value-level changes of the touched cells. */\n diffs: FieldChange[];\n}\n\n/**\n * \"What happened in this table lately\": every record's revisions, merged and\n * sorted newest first. Includes tombstoned records (so deletions show up) — a\n * read-only aggregation, same clustering as listRecordRevisions per record.\n * Walking each record's change stream oldest-first lets us carry a running\n * cell-state map, so every entry ships its old→new values and a title snapshot\n * for free (no extra queries). After compaction, `before` at the window edge\n * may be missing (the superseded write was pruned) — it reads as \"was empty\".\n */\nexport function listDatabaseActivity(\n db: DbDriver,\n databaseId: string,\n opts: { limit?: number } = {},\n): DatabaseActivityEntry[] {\n if (!db.query(\"SELECT 1 AS x FROM databases WHERE id = ?\").get(databaseId))\n throw new MhError(\"not_found\", `no such database: ${databaseId}`);\n // The first live text property is the de-facto record title (same rule the\n // reference resolver uses).\n const titleProp =\n (\n db\n .query(\n \"SELECT id FROM properties WHERE database_id = ? AND type = 'text' AND __deleted = 0 ORDER BY position LIMIT 1\",\n )\n .get(databaseId) as { id: string } | null\n )?.id ?? null;\n\n const changes = db\n .query(\n `SELECT ${CHANGE_SELECT} FROM crdt_changes\n WHERE dataset = 'records' AND row_id IN (SELECT id FROM records WHERE database_id = ?)\n ORDER BY row_id, hlc`,\n )\n .all(databaseId) as RawChange[];\n\n const out: DatabaseActivityEntry[] = [];\n let start = 0;\n for (let i = 1; i <= changes.length; i++) {\n if (i !== changes.length && changes[i]!.row_id === changes[start]!.row_id) continue;\n const rowId = changes[start]!.row_id;\n // Running cell state, mirroring materialize(): null value = json_remove.\n const state = new Map<string, unknown>();\n for (const g of clusterRevisions(changes.slice(start, i))) {\n const touched = new Set<string>();\n for (const c of g) if (!RECORD_META.has(c.col)) touched.add(c.col);\n const before = new Map<string, unknown>();\n for (const col of touched) if (state.has(col)) before.set(col, state.get(col));\n for (const c of g) {\n if (RECORD_META.has(c.col)) continue;\n if (c.value === null) state.delete(c.col);\n else state.set(c.col, JSON.parse(c.value));\n }\n const diffs: FieldChange[] = [];\n for (const col of touched) {\n const fc: FieldChange = { prop: col };\n if (before.has(col)) fc.before = before.get(col);\n if (state.has(col)) fc.after = state.get(col);\n diffs.push(fc);\n }\n out.push({\n ...recordRevisionOf(g),\n record_id: rowId,\n record_title:\n titleProp && state.has(titleProp) ? String(state.get(titleProp) ?? \"\") : null,\n diffs,\n });\n }\n start = i;\n }\n out.sort((a, b) => (a.version < b.version ? 1 : -1));\n return out.slice(0, opts.limit ?? 100);\n}\n\nexport interface RecordVersionState {\n id: string;\n database_id: string | null;\n deleted: boolean;\n /** Cells present at that version, keyed by property id (raw, no name mapping). */\n data: Record<string, unknown>;\n version: string;\n}\n\n/** Reconstruct a record as of version cutoff `at` (state at hlc <= at). */\nexport function recordAtVersion(db: DbDriver, id: string, at: string): RecordVersionState {\n if (!at) throw new MhError(\"invalid_input\", \"missing version cutoff\");\n const changes = rowChanges(db, \"records\", id).filter((c) => c.hlc <= at);\n if (!changes.length)\n throw new MhError(\"not_found\", `no version of record ${id} at or before ${at}`);\n\n const regs = registersAt(changes, at);\n const data: Record<string, unknown> = {};\n for (const [col, reg] of regs) {\n if (RECORD_META.has(col)) continue;\n if (reg.value === null) continue; // cleared cell (json_remove)\n data[col] = JSON.parse(reg.value);\n }\n const dbReg = regs.get(\"database_id\");\n return {\n id,\n database_id: dbReg?.value == null ? null : (JSON.parse(dbReg.value) as string),\n deleted: regs.get(\"__deleted\") ? flagSet(regs.get(\"__deleted\")!.value) : false,\n data,\n version: changes[changes.length - 1]!.hlc,\n };\n}\n\nexport interface RevertRecordResult {\n id: string;\n changed: boolean;\n /** Property ids whose cells were written by the revert. */\n fields: string[];\n /** True when the revert resurrected a tombstoned record. */\n undeleted: boolean;\n restored: string;\n}\n\n/** Restore a record's cells to a past version as a new forward edit. Only cells\n * of currently-live properties are touched, so no orphan cells are recreated\n * (the repairHub invariant). Reverting a tombstoned record resurrects it. */\nexport const revertRecord = grouped(function revertRecord(\n db: DbDriver,\n id: string,\n to: string,\n): RevertRecordResult {\n const cur = db\n .query(\"SELECT database_id, data, __deleted FROM records WHERE id = ?\")\n .get(id) as { database_id: string | null; data: string; __deleted: number } | null;\n if (!cur) throw new MhError(\"not_found\", `no such record: ${id}`);\n\n const past = recordAtVersion(db, id, to);\n if (past.deleted)\n throw new MhError(\"invalid_input\", \"target version is a deleted state; use record delete instead\");\n\n const liveProps = new Set(\n cur.database_id ? listProperties(db, cur.database_id).map((p) => p.id) : [],\n );\n const curData = JSON.parse(cur.data || \"{}\") as Record<string, unknown>;\n const fields: string[] = [];\n for (const propId of liveProps) {\n const inPast = Object.hasOwn(past.data, propId);\n const inCur = Object.hasOwn(curData, propId);\n if (inPast && (!inCur || JSON.stringify(past.data[propId]) !== JSON.stringify(curData[propId]))) {\n emit(db, \"records\", id, propId, past.data[propId]);\n fields.push(propId);\n } else if (!inPast && inCur) {\n emit(db, \"records\", id, propId, undefined); // clear: materializes as json_remove\n fields.push(propId);\n }\n }\n const undeleted = cur.__deleted !== 0;\n if (undeleted) emit(db, \"records\", id, \"__deleted\", 0);\n\n return { id, changed: fields.length > 0 || undeleted, fields, undeleted, restored: past.version };\n}, \"revert\");\n\n// ---- properties (schema-level rollback) ------------------------------------------\n\n/** Property register columns that make up the column definition. */\nconst PROP_DEF_COLS = [\"name\", \"type\", \"config\", \"position\"] as const;\n\nexport interface PropertyRevision {\n version: string;\n at: string;\n node_id: string;\n kind: RevisionKind;\n changes: number;\n created: boolean;\n deleted: boolean;\n /** Definition columns touched in this revision (name/type/config/position). */\n fields: string[];\n /** Record cells the same change group cleared (a type change / removal cascade). */\n cells_cleared: number;\n}\n\n/** A property's definition history, newest first. Cascaded cell clears are\n * counted via the shared txn so a type change reads as one revision. */\nexport function listPropertyRevisions(db: DbDriver, id: string): PropertyRevision[] {\n const changes = rowChanges(db, \"properties\", id);\n if (!changes.length) throw new MhError(\"not_found\", `no such property: ${id}`);\n const clearedByTxn = new Map<string, number>(\n (\n db\n .query(\n \"SELECT txn, COUNT(*) AS n FROM crdt_changes WHERE dataset = 'records' AND col = ? AND txn IS NOT NULL GROUP BY txn\",\n )\n .all(id) as { txn: string; n: number }[]\n ).map((r) => [r.txn, r.n]),\n );\n return clusterRevisions(changes)\n .map((group) => {\n const fields = new Set<string>();\n let created = false;\n let deleted = false;\n for (const c of group) {\n if (c.col === \"database_id\") created = true; // only emitted at creation\n else if (c.col === \"__deleted\") deleted = flagSet(c.value);\n else if ((PROP_DEF_COLS as readonly string[]).includes(c.col)) fields.add(c.col);\n }\n const last = group[group.length - 1]!;\n return {\n version: last.hlc,\n at: hlcIso(last.hlc),\n node_id: last.node_id,\n kind: revisionKind(last.txn),\n changes: group.length,\n created,\n deleted,\n fields: [...fields],\n cells_cleared: last.txn ? (clearedByTxn.get(last.txn) ?? 0) : 0,\n };\n })\n .reverse();\n}\n\nexport interface PropertyVersionState {\n id: string;\n database_id: string | null;\n name: string;\n type: string;\n config: unknown;\n position: number | null;\n deleted: boolean;\n version: string;\n}\n\n/** Reconstruct a property definition as of version cutoff `at`. */\nexport function propertyAtVersion(db: DbDriver, id: string, at: string): PropertyVersionState {\n if (!at) throw new MhError(\"invalid_input\", \"missing version cutoff\");\n const changes = rowChanges(db, \"properties\", id).filter((c) => c.hlc <= at);\n if (!changes.length)\n throw new MhError(\"not_found\", `no version of property ${id} at or before ${at}`);\n const regs = registersAt(changes, at);\n const reg = (col: string): unknown => {\n const r = regs.get(col);\n return r?.value == null ? undefined : JSON.parse(r.value);\n };\n return {\n id,\n database_id: (reg(\"database_id\") as string | undefined) ?? null,\n name: (reg(\"name\") as string | undefined) ?? \"\",\n type: (reg(\"type\") as string | undefined) ?? \"text\",\n config: reg(\"config\") ?? null,\n position: (reg(\"position\") as number | undefined) ?? null,\n deleted: regs.get(\"__deleted\") ? flagSet(regs.get(\"__deleted\")!.value) : false,\n version: changes[changes.length - 1]!.hlc,\n };\n}\n\nexport interface RevertPropertyResult {\n id: string;\n changed: boolean;\n /** Definition columns the revert wrote. */\n fields: string[];\n /** Record cells restored to their value at the target version. */\n restored_cells: number;\n /** Cells left alone because a user wrote them after the target version. */\n skipped_cells: number;\n undeleted: boolean;\n restored: string;\n}\n\n/**\n * Schema-level rollback: restore a property's definition AND the record cells\n * its later type-change/removal cascades cleared. Definition registers are\n * emitted directly (never via updateProperty — its type-change cascade would\n * re-clear the cells being restored). A cell is only touched when its current\n * winner IS the cascade (or a repair); it is restored to the last value before\n * that cascade, so user data — written before or after the target version —\n * always survives. Cells whose winner is a user write are kept (skipped_cells).\n * Pre-txn legacy writes can't be attributed, so they count as user writes.\n */\nexport const revertProperty = grouped(function revertProperty(\n db: DbDriver,\n id: string,\n to: string,\n): RevertPropertyResult {\n const cur = db\n .query(\n \"SELECT database_id, name, type, config, position, __deleted FROM properties WHERE id = ?\",\n )\n .get(id) as {\n database_id: string | null;\n name: string | null;\n type: string | null;\n config: string | null;\n position: number | null;\n __deleted: number;\n } | null;\n if (!cur) throw new MhError(\"not_found\", `no such property: ${id}`);\n\n const past = propertyAtVersion(db, id, to);\n if (past.deleted)\n throw new MhError(\"invalid_input\", \"target version is a deleted state; use prop remove instead\");\n\n // 1) Restore the column definition (diff only — no cascades).\n const curDef: Record<string, unknown> = {\n name: cur.name,\n type: cur.type,\n config: cur.config ? JSON.parse(cur.config) : null,\n position: cur.position,\n };\n const pastDef: Record<string, unknown> = {\n name: past.name,\n type: past.type,\n config: past.config,\n position: past.position,\n };\n const fields: string[] = [];\n for (const col of PROP_DEF_COLS) {\n if (JSON.stringify(pastDef[col] ?? null) !== JSON.stringify(curDef[col] ?? null)) {\n emit(db, \"properties\", id, col, pastDef[col]);\n fields.push(col);\n }\n }\n const undeleted = cur.__deleted !== 0;\n if (undeleted) emit(db, \"properties\", id, \"__deleted\", 0);\n\n // 2) Restore the cells. Cascade writes are identified by sharing a txn with a\n // post-target change to this property's own registers.\n const schemaTxns = new Set(\n (\n db\n .query(\n \"SELECT DISTINCT txn FROM crdt_changes WHERE dataset = 'properties' AND row_id = ? AND hlc > ? AND txn IS NOT NULL\",\n )\n .all(id, to) as { txn: string }[]\n ).map((r) => r.txn),\n );\n const cellChanges = db\n .query(\n \"SELECT row_id, hlc, value, txn FROM crdt_changes WHERE dataset = 'records' AND col = ? ORDER BY row_id, hlc\",\n )\n .all(id) as { row_id: string; hlc: string; value: string | null; txn: string | null }[];\n\n const isCascade = (txn: string | null): boolean =>\n txn !== null && (schemaTxns.has(txn) || txn.startsWith(\"repair:\"));\n\n let restored = 0;\n let skipped = 0;\n let i = 0;\n while (i < cellChanges.length) {\n const rowId = cellChanges[i]!.row_id;\n let winner = cellChanges[i]!;\n let lastUser: { value: string | null } | null = null; // latest non-cascade write\n for (; i < cellChanges.length && cellChanges[i]!.row_id === rowId; i++) {\n winner = cellChanges[i]!;\n if (!isCascade(winner.txn)) lastUser = winner;\n }\n if (winner.hlc <= to) continue; // untouched since the target version\n if (!isCascade(winner.txn)) {\n skipped++; // current value is a user write — keep it\n continue;\n }\n const target = lastUser ? lastUser.value : null; // null = cell never had a user value\n if (target === winner.value) continue; // converged back on its own\n emit(db, \"records\", rowId, id, target === null ? undefined : JSON.parse(target));\n restored++;\n }\n\n return {\n id,\n changed: fields.length > 0 || undeleted || restored > 0,\n fields,\n restored_cells: restored,\n skipped_cells: skipped,\n undeleted,\n restored: past.version,\n };\n}, \"revert\");\n\nexport interface FieldHistoryEntry {\n version: string;\n at: string;\n node_id: string;\n /** The value written; undefined when the write cleared the cell. */\n value: unknown;\n cleared: boolean;\n}\n\n/** The full write trail of one record cell (property id), newest first. */\nexport function recordFieldHistory(db: DbDriver, id: string, propId: string): FieldHistoryEntry[] {\n const rows = db\n .query(\n \"SELECT hlc, node_id, value FROM crdt_changes WHERE dataset = 'records' AND row_id = ? AND col = ? ORDER BY hlc DESC\",\n )\n .all(id, propId) as { hlc: string; node_id: string; value: string | null }[];\n return rows.map((r) => ({\n version: r.hlc,\n at: hlcIso(r.hlc),\n node_id: r.node_id,\n value: r.value === null ? undefined : JSON.parse(r.value),\n cleared: r.value === null,\n }));\n}\n",
135
+ "import { z } from \"zod\";\nimport { errorResponse, type Route } from \"../../core/sync/routes.ts\";\nimport { MhError } from \"../../core/errors.ts\";\nimport {\n createShareAction,\n revokeShareAction,\n renewShareAction,\n listSharesLocal,\n listShareServers,\n listShareBuckets,\n type CreateShareRequest,\n} from \"../../core/sync/share-actions.ts\";\n\n// Share management. POST/DELETE /api/share and GET /api/shares additionally accept\n// a pairing grant (see server.ts gate) so a paired peer can create/list/revoke a\n// share on this node remotely. The PUBLIC surface — opening a share — is the\n// separate token-exempt /share/<slug> path (core/sync/share-serve.ts).\n\nconst CreateShareReq = z.object({\n kind: z.enum([\"doc\", \"database\", \"site\"]),\n ref: z.string(),\n transport: z.enum([\"server\", \"s3\"]).optional(),\n permission: z.enum([\"view\", \"edit\"]).optional(),\n password: z.string().nullable().optional(),\n expiresMs: z.number().nullable().optional(),\n server: z.string().nullable().optional(),\n bucketUrl: z.string().nullable().optional(),\n viewerBase: z.string().optional(),\n});\nconst CreatedShareRes = z.object({\n slug: z.string(),\n kind: z.string(),\n permission: z.string(),\n transport: z.string(),\n url: z.string(),\n expiresAt: z.number().nullable(),\n source: z.string(),\n});\nconst ShareListItemRes = z.object({\n slug: z.string(),\n kind: z.string(),\n target_id: z.string(),\n title: z.string(),\n permission: z.string(),\n transport: z.string(),\n source: z.string(),\n sourceKind: z.string(),\n expiresAt: z.number().nullable(),\n hasPassword: z.boolean(),\n url: z.string().optional(),\n});\n\nfunction originBase(req: Request): string {\n const url = new URL(req.url);\n return `${url.protocol}//${url.host}`;\n}\n\nexport const shareRoutes: Route[] = [\n {\n method: \"GET\",\n path: \"/api/share/servers\",\n summary: \"Paired servers a share can be created on / served by (master-only).\",\n response: z.array(z.object({ url: z.string(), label: z.string() })),\n handler: (_req, { db }) => Response.json(listShareServers(db)),\n },\n {\n method: \"GET\",\n path: \"/api/share/buckets\",\n summary: \"Object-storage buckets available as a share transport (master-only).\",\n response: z.array(z.object({ url: z.string(), label: z.string() })),\n handler: (_req, { db }) => Response.json(listShareBuckets(db)),\n },\n {\n method: \"GET\",\n path: \"/api/shares\",\n summary:\n \"List shares this node serves (its local server shares + its buckets). Query: ?target=<id>. \" +\n \"Accepts a pairing grant so a peer's aggregated list can fan in. Does NOT fan out itself.\",\n response: z.array(ShareListItemRes),\n handler: async (req, { db }) => {\n try {\n const target = new URL(req.url).searchParams.get(\"target\") ?? undefined;\n return Response.json(await listSharesLocal(db, target));\n } catch (e) {\n return errorResponse(e);\n }\n },\n },\n {\n method: \"POST\",\n path: \"/api/share\",\n summary: \"Create a share (transport: server | s3). server=<peer url> creates it remotely on that peer.\",\n request: CreateShareReq,\n response: CreatedShareRes,\n handler: async (req, { db }) => {\n try {\n const body = (await req.json()) as Partial<CreateShareRequest>;\n if (!body.kind || !body.ref) throw new MhError(\"invalid_input\", \"kind and ref are required\");\n const transport = body.transport ?? \"server\";\n // For a LOCAL server share, default the recorded base to the address the\n // caller reached us on (so the copied link is reachable). A peer url in\n // `server` is left as-is → createShareAction creates it on that peer.\n let server = body.server ?? undefined;\n if (transport === \"server\" && !isPeer(db, server)) server = server || originBase(req);\n const out = await createShareAction(db, {\n kind: body.kind,\n ref: body.ref,\n transport,\n permission: body.permission,\n password: body.password ?? null,\n expiresMs: body.expiresMs ?? null,\n server,\n bucketUrl: body.bucketUrl ?? null,\n viewerBase: body.viewerBase,\n });\n return Response.json(out);\n } catch (e) {\n return errorResponse(e);\n }\n },\n },\n {\n method: \"POST\",\n path: \"/api/share/renew\",\n summary: \"Re-presign an object-storage share and return a fresh link. Query: ?slug=<slug>\",\n response: CreatedShareRes,\n handler: async (req, { db }) => {\n try {\n const slug = new URL(req.url).searchParams.get(\"slug\");\n if (!slug) throw new MhError(\"invalid_input\", \"slug required\");\n return Response.json(await renewShareAction(db, slug));\n } catch (e) {\n return errorResponse(e);\n }\n },\n },\n {\n method: \"DELETE\",\n path: \"/api/share\",\n summary: \"Revoke a share (local server row, or a bucket share's objects). Query: ?slug=<slug>\",\n response: z.object({ ok: z.boolean() }),\n handler: async (req, { db }) => {\n try {\n const slug = new URL(req.url).searchParams.get(\"slug\");\n if (!slug) throw new MhError(\"invalid_input\", \"slug required\");\n return Response.json({ ok: await revokeShareAction(db, slug) });\n } catch (e) {\n return errorResponse(e);\n }\n },\n },\n];\n\nfunction isPeer(db: import(\"../../core/driver.ts\").DbDriver, url?: string): boolean {\n if (!url) return false;\n return listShareServers(db).some((s) => s.url === url);\n}\n",
136
+ "// Share orchestration shared by the CLI (`mh share`) and the WebUI (/api/share),\n// so both surfaces resolve targets, mint rows / bucket bundles, and aggregate\n// listings identically (the addAndSyncStoragePeer pattern).\n//\n// Two backends, two homes for the record:\n// - server share → a local `shares` row on the serving node (this node, or a\n// paired peer when `server` names one — created there over HTTP with the grant).\n// - object-storage share → objects in the bucket (no local row); listable by any\n// device that holds the bucket. See share-export.ts.\n// Cross-device listing is fan-out: local rows + each bucket + each paired peer.\n\nimport type { DbDriver } from \"../driver.ts\";\nimport { MhError } from \"../errors.ts\";\nimport { randomSuffix } from \"../ids.ts\";\nimport { resolveEntity } from \"../resolve.ts\";\nimport { resolveSite, getSite } from \"../sites.ts\";\nimport { getDocument } from \"../documents.ts\";\nimport { getDatabase } from \"../databases.ts\";\nimport { listPeers, getPeer } from \"./peers.ts\";\nimport {\n createShare,\n deleteShare,\n getShare,\n listShares,\n listSharesForTarget,\n hashSharePassword,\n type ShareKind,\n type SharePermission,\n} from \"../shares.ts\";\nimport {\n createBucketShare,\n renewBucketShare,\n listBucketShares,\n deleteBucketShareObjects,\n} from \"./share-export.ts\";\nimport { MAX_PRESIGN_SECONDS } from \"./storage-s3-bun.ts\";\nimport type { S3Config } from \"./storage.ts\";\n\nconst DEFAULT_SHARE_VIEWER = \"https://share.mh.tensorix.org\";\nconst DEFAULT_S3_EXPIRY_SEC = MAX_PRESIGN_SECONDS;\nconst PEER_LIST_TIMEOUT_MS = 4000;\n\nexport interface CreateShareRequest {\n kind: ShareKind;\n ref: string;\n permission?: SharePermission;\n transport?: \"server\" | \"s3\";\n password?: string | null;\n /** Server: any duration (ms); null = never. s3: clamped to ≤7d; default 7d. */\n expiresMs?: number | null;\n /** server transport target: a paired peer url → create remotely on that peer;\n * any other base url (this node's origin / LAN / domain) → create locally and\n * record it as served_base; undefined → local with no recorded base. */\n server?: string | null;\n /** s3: which bucket peer url; default the single s3 peer if exactly one. */\n bucketUrl?: string | null;\n /** s3 only: the static viewer base for the link. */\n viewerBase?: string;\n}\n\nexport interface CreatedShare {\n slug: string;\n kind: ShareKind;\n permission: SharePermission;\n transport: \"server\" | \"s3\";\n /** Full link to copy (server: served_base/share/slug; s3: viewer link). */\n url: string;\n expiresAt: number | null;\n /** Human label of where it's served: a server address or a bucket name. */\n source: string;\n}\n\n/** A row in the aggregated share listing (CLI `list` / WebUI panel). */\nexport interface ShareListItem {\n slug: string;\n kind: string;\n target_id: string;\n /** Human title of the shared object (for the management list). */\n title: string;\n permission: string;\n transport: \"server\" | \"s3\";\n source: string;\n sourceKind: \"server\" | \"peer\" | \"bucket\";\n expiresAt: number | null;\n hasPassword: boolean;\n /** server: ready-to-copy link; s3: omitted (use renew to mint a fresh one). */\n url?: string;\n}\n\n/** Best-effort human title of a shared target (falls back to the id). */\nfunction targetTitle(db: DbDriver, kind: string, id: string): string {\n try {\n if (kind === \"doc\") return getDocument(db, id)?.title || id;\n if (kind === \"database\") return getDatabase(db, id)?.name || id;\n if (kind === \"site\") {\n const s = getSite(db, id);\n return s?.title || s?.name || id;\n }\n } catch {\n /* ignore — fall through to id */\n }\n return id;\n}\n\nfunction resolveTarget(db: DbDriver, kind: ShareKind, ref: string): { id: string; title: string } {\n if (kind === \"site\") {\n const s = resolveSite(db, ref);\n return { id: s.id, title: s.name };\n }\n const c = resolveEntity(db, ref, { kind: kind === \"database\" ? \"db\" : \"doc\" });\n return { id: c.id, title: c.label };\n}\n\nfunction s3PeerConfig(db: DbDriver, url: string): { config: S3Config; label: string } {\n const peer = getPeer(db, url);\n if (!peer || peer.kind !== \"s3\" || !peer.config)\n throw new MhError(\"not_found\", `no such object-storage bucket: ${url}`);\n return { config: JSON.parse(peer.config) as S3Config, label: peer.label ?? url };\n}\n\n/** s3 bucket peers (no secrets) for a transport picker. */\nexport function listShareBuckets(db: DbDriver): { url: string; label: string }[] {\n return listPeers(db)\n .filter((p) => p.kind === \"s3\")\n .map((p) => ({ url: p.url, label: p.label ?? p.url }));\n}\n\n/** Paired HTTP peer servers (a share can be created on / served by them). */\nexport function listShareServers(db: DbDriver): { url: string; label: string }[] {\n return listPeers(db)\n .filter((p) => p.kind !== \"s3\")\n .map((p) => ({ url: p.url, label: p.label ?? p.url }));\n}\n\nfunction pickBucket(db: DbDriver, bucketUrl?: string | null): string {\n if (bucketUrl) return bucketUrl;\n const buckets = listShareBuckets(db);\n if (buckets.length === 0)\n throw new MhError(\"invalid_input\", \"no object-storage bucket attached — add one with `mh config peer add --s3`\");\n if (buckets.length > 1)\n throw new MhError(\"invalid_input\", `multiple buckets — pass --bucket <url> (one of: ${buckets.map((b) => b.url).join(\", \")})`);\n return buckets[0]!.url;\n}\n\nfunction viewerBase(db: DbDriver, override?: string): string {\n if (override) return override.replace(/\\/+$/, \"\");\n const row = db.query(\"SELECT value FROM meta WHERE key='cfg_share_viewer_url'\").get() as\n | { value: string }\n | null;\n return (row?.value || DEFAULT_SHARE_VIEWER).replace(/\\/+$/, \"\");\n}\n\nfunction viewerOriginOf(base: string): string | undefined {\n try {\n return new URL(base).origin;\n } catch {\n return undefined;\n }\n}\n\nfunction bucketLink(base: string, manifestUrl: string, keyB64?: string, saltB64?: string): string {\n const frag = `m=${encodeURIComponent(manifestUrl)}&` + (keyB64 ? `k=${keyB64}` : `s=${saltB64}`);\n return `${base}/#${frag}`;\n}\n\n/** Resolve, validate, and create (server local / server remote / s3 bucket) a share. */\nexport async function createShareAction(db: DbDriver, req: CreateShareRequest): Promise<CreatedShare> {\n const permission = req.permission ?? \"view\";\n const transport = req.transport ?? \"server\";\n\n // ── object storage ──────────────────────────────────────────────────────────\n if (transport === \"s3\") {\n if (permission === \"edit\")\n throw new MhError(\"invalid_input\", \"object-storage shares are read-only — use the server transport to allow editing\");\n if (req.kind === \"site\")\n throw new MhError(\"invalid_input\", \"sites can't be shared via object storage — use the server transport\");\n const target = resolveTarget(db, req.kind, req.ref);\n const bucketUrl = pickBucket(db, req.bucketUrl);\n const { config, label } = s3PeerConfig(db, bucketUrl);\n const base = viewerBase(db, req.viewerBase);\n const slug = freshSlug(db);\n const out = await createBucketShare(db, {\n slug,\n kind: req.kind,\n targetId: target.id,\n config,\n password: req.password,\n expiresSec: req.expiresMs != null ? Math.floor(req.expiresMs / 1000) : DEFAULT_S3_EXPIRY_SEC,\n viewerOrigin: viewerOriginOf(base),\n });\n return {\n slug,\n kind: req.kind,\n permission: \"view\",\n transport: \"s3\",\n url: bucketLink(base, out.manifestUrl, out.keyB64, out.saltB64),\n expiresAt: out.presignExp,\n source: `桶 ${label}`,\n };\n }\n\n // ── server: remote (a paired peer) ────────────────────────────────────────────\n const peer = req.server ? getPeer(db, req.server) : null;\n if (req.server && peer && peer.kind !== \"s3\") {\n const res = await fetch(`${req.server.replace(/\\/+$/, \"\")}/api/share`, {\n method: \"POST\",\n headers: {\n \"content-type\": \"application/json\",\n ...(peer.token ? { authorization: `Bearer ${peer.token}` } : {}),\n },\n body: JSON.stringify({ ...req, server: undefined }),\n }).catch((e) => {\n throw new MhError(\"network\", `could not reach ${req.server}: ${(e as Error).message}`);\n });\n const data = (await res.json().catch(() => ({}))) as Partial<CreatedShare> & { error?: string };\n if (!res.ok) throw new MhError(\"network\", data.error || `remote share failed: ${res.status}`);\n return {\n slug: data.slug!,\n kind: req.kind,\n permission,\n transport: \"server\",\n url: data.url!,\n expiresAt: data.expiresAt ?? null,\n source: peer.label ?? req.server,\n };\n }\n\n // ── server: local ─────────────────────────────────────────────────────────────\n const target = resolveTarget(db, req.kind, req.ref);\n let pwSalt: string | null = null;\n let pwHash: string | null = null;\n if (req.password) {\n const h = await hashSharePassword(req.password);\n pwSalt = h.salt;\n pwHash = h.hash;\n }\n // `server` here is a plain reachable base (not a peer): record it as served_base.\n const servedBase = req.server ? req.server.replace(/\\/+$/, \"\") : null;\n const share = createShare(db, {\n kind: req.kind,\n target_id: target.id,\n permission,\n pwSalt,\n pwHash,\n expiresAt: req.expiresMs != null ? Date.now() + req.expiresMs : null,\n servedBase,\n });\n return {\n slug: share.slug,\n kind: req.kind,\n permission,\n transport: \"server\",\n url: `${servedBase ?? \"\"}/share/${share.slug}`,\n expiresAt: share.expires_at,\n source: servedBase || \"本机服务器\",\n };\n}\n\n/** Local listing (server rows + each attached bucket) — NO peer fan-out (so the\n * /api/shares endpoint a peer calls can't recurse). Optional target filter. */\nexport async function listSharesLocal(db: DbDriver, targetId?: string): Promise<ShareListItem[]> {\n const out: ShareListItem[] = [];\n const rows = targetId ? listSharesForTarget(db, targetId) : listShares(db);\n for (const r of rows) {\n out.push({\n slug: r.slug,\n kind: r.kind,\n target_id: r.target_id,\n title: targetTitle(db, r.kind, r.target_id),\n permission: r.permission,\n transport: \"server\",\n source: r.served_base || \"本机服务器\",\n sourceKind: \"server\",\n expiresAt: r.expires_at,\n hasPassword: !!r.pw_hash,\n url: r.served_base ? `${r.served_base}/share/${r.slug}` : `/share/${r.slug}`,\n });\n }\n for (const p of listPeers(db).filter((x) => x.kind === \"s3\" && x.config)) {\n const config = JSON.parse(p.config!) as S3Config;\n const metas = await listBucketShares(config).catch(() => []);\n for (const m of metas) {\n if (targetId && m.target_id !== targetId) continue;\n out.push({\n slug: m.slug,\n kind: m.kind,\n target_id: m.target_id,\n title: m.title || m.target_id,\n permission: m.permission,\n transport: \"s3\",\n source: `桶 ${p.label ?? p.url}`,\n sourceKind: \"bucket\",\n expiresAt: m.presign_exp,\n hasPassword: m.has_password,\n });\n }\n }\n return out;\n}\n\n/** Aggregated listing for CLI/WebUI: local ∪ each paired peer's /api/shares\n * (best-effort, bounded), deduped by slug. Optional target filter. */\nexport async function listSharesAggregated(db: DbDriver, targetId?: string): Promise<ShareListItem[]> {\n const bySlug = new Map<string, ShareListItem>();\n for (const item of await listSharesLocal(db, targetId)) bySlug.set(item.slug, item);\n\n await Promise.all(\n listShareServers(db).map(async ({ url, label }) => {\n const peer = getPeer(db, url);\n if (!peer?.token) return;\n const items = await fetchPeerShares(url, peer.token, targetId).catch(() => []);\n for (const it of items) {\n if (!bySlug.has(it.slug)) bySlug.set(it.slug, { ...it, source: label, sourceKind: \"peer\" });\n }\n }),\n );\n return [...bySlug.values()];\n}\n\nasync function fetchPeerShares(url: string, token: string, targetId?: string): Promise<ShareListItem[]> {\n const u = `${url.replace(/\\/+$/, \"\")}/api/shares${targetId ? `?target=${encodeURIComponent(targetId)}` : \"\"}`;\n const res = await Promise.race([\n fetch(u, { headers: { authorization: `Bearer ${token}` } }),\n new Promise<Response>((_r, rej) => setTimeout(() => rej(new Error(\"timeout\")), PEER_LIST_TIMEOUT_MS)),\n ]);\n if (!res.ok) return [];\n return (await res.json()) as ShareListItem[];\n}\n\n/** Revoke: local server row → delete it; else a bucket holds it → delete objects. */\nexport async function revokeShareAction(db: DbDriver, slug: string): Promise<boolean> {\n if (getShare(db, slug)) return deleteShare(db, slug);\n for (const p of listPeers(db).filter((x) => x.kind === \"s3\" && x.config)) {\n const config = JSON.parse(p.config!) as S3Config;\n const metas = await listBucketShares(config).catch(() => []);\n if (metas.some((m) => m.slug === slug)) {\n await deleteBucketShareObjects(config, slug);\n return true;\n }\n }\n return false;\n}\n\n/** Renew an s3 share (re-presign, mint a fresh ≤7d link). */\nexport async function renewShareAction(db: DbDriver, slug: string, viewerBaseOverride?: string): Promise<CreatedShare> {\n for (const p of listPeers(db).filter((x) => x.kind === \"s3\" && x.config)) {\n const config = JSON.parse(p.config!) as S3Config;\n const metas = await listBucketShares(config).catch(() => []);\n const m = metas.find((x) => x.slug === slug);\n if (!m) continue;\n const base = viewerBase(db, viewerBaseOverride);\n const out = await renewBucketShare(db, config, slug);\n return {\n slug,\n kind: m.kind,\n permission: \"view\",\n transport: \"s3\",\n url: bucketLink(base, out.manifestUrl, out.keyB64, out.saltB64),\n expiresAt: out.presignExp,\n source: `桶 ${p.label ?? p.url}`,\n };\n }\n throw new MhError(\"not_found\", `no such object-storage share: ${slug}`);\n}\n\n/** An unguessable slug that doesn't collide with a local server-share row. */\nfunction freshSlug(db: DbDriver): string {\n let slug = randomSuffix(12);\n while (getShare(db, slug)) slug = randomSuffix(12);\n return slug;\n}\n",
137
+ "// Object-storage share export (server-side only — needs the bucket credentials\n// and the blob bytes). Builds a self-contained, end-to-end-encrypted bundle for\n// one doc / database under <prefix>/shares/<slug>/ and presigns every object so\n// a recipient can fetch it with no credential. Decrypted in the browser viewer\n// (share/share-viewer.ts) — the bucket only ever holds ciphertext.\n//\n// Object-storage shares are READ-ONLY (a presigned static object can't accept\n// writes) and cover doc + database only (sites stay on the server transport).\n//\n// The share RECORD lives in the bucket, not in any local table: each share has a\n// `meta.json` (encrypted with the bucket MASTER key, so only devices that hold\n// the bucket can list/manage shares — recipients with just a link cannot). meta\n// carries the per-share content key, which lets any bucket-holding device renew\n// (re-presign) or re-copy the link without the original password.\n\nimport type { DbDriver } from \"../driver.ts\";\nimport { MhError } from \"../errors.ts\";\nimport { getDocument } from \"../documents.ts\";\nimport { getDatabase } from \"../databases.ts\";\nimport { listProperties } from \"../properties.ts\";\nimport { listRecords } from \"../records.ts\";\nimport { resolveBlob, blobContentType } from \"../blobs.ts\";\nimport { storageClientFor, type S3Config } from \"./storage.ts\";\nimport { presignGet, putBucketCors, MAX_PRESIGN_SECONDS } from \"./storage-s3-bun.ts\";\nimport {\n encryptBytes,\n decryptBytes,\n generateMasterKey,\n deriveShareKey,\n toB64,\n fromB64,\n} from \"./e2ee.ts\";\n\nexport interface ShareManifest {\n v: 1;\n kind: \"doc\" | \"database\";\n title: string;\n body?: string;\n properties?: { id: string; name: string; type: string }[];\n records?: { cells: Record<string, unknown> }[];\n /** hash → { presigned GET of the (encrypted) blob, original content-type }. */\n blobs?: Record<string, { url: string; ct: string }>;\n}\n\n/** Bucket-resident share descriptor (master-key encrypted). The listable source\n * of truth for an object-storage share. */\nexport interface BucketShareMeta {\n v: 1;\n slug: string;\n kind: \"doc\" | \"database\";\n target_id: string;\n title: string;\n permission: \"view\";\n created_at: number;\n /** epoch ms the presigned URLs expire (≤ 7 days out). */\n presign_exp: number;\n has_password: boolean;\n /** every object key this share owns (manifest + each blob) — for renew + delete. */\n objects: string[];\n /** base64 per-share content key (lets a bucket-holder renew / re-copy the link). */\n key: string;\n /** base64 salt (password shares); the link carries this, viewer derives the key. */\n salt?: string;\n}\n\nexport interface BucketShareLink {\n manifestUrl: string;\n presignExp: number;\n /** base64 random key (no-password) — goes in the link fragment as #k=. */\n keyB64?: string;\n /** base64 salt (password) — goes in the link fragment as #s=. */\n saltB64?: string;\n title: string;\n}\n\nfunction sharesRoot(prefix: string): string {\n const p = (prefix || \"\").replace(/^\\/+|\\/+$/g, \"\");\n return p ? `${p}/shares` : \"shares\";\n}\nconst metaKey = (root: string, slug: string) => `${root}/${slug}/meta.json`;\nconst manifestKeyOf = (root: string, slug: string) => `${root}/${slug}/manifest.bin`;\nconst blobKeyOf = (root: string, slug: string, hash: string) => `${root}/${slug}/blobs/${hash}`;\n\nfunction blobHashes(text: string): string[] {\n const out = new Set<string>();\n const re = /\\/blob\\/([0-9a-f]{16,64})/g;\n let m: RegExpExecArray | null;\n while ((m = re.exec(text))) out.add(m[1]!.toLowerCase());\n return [...out];\n}\n\n// ---- meta.json (master-key encrypted) -----------------------------------------\n\nfunction metaBytes(config: S3Config, meta: BucketShareMeta): Promise<Uint8Array> {\n const plain = new TextEncoder().encode(JSON.stringify(meta));\n return config.encrypt && config.masterKey\n ? encryptBytes(fromB64(config.masterKey), plain)\n : Promise.resolve(plain);\n}\n\nasync function readMeta(config: S3Config, slug: string): Promise<BucketShareMeta | null> {\n const client = storageClientFor(config);\n const raw = await client.get(metaKey(sharesRoot(config.prefix), slug)).catch(() => null);\n if (!raw) return null;\n try {\n const plain = config.encrypt && config.masterKey ? await decryptBytes(fromB64(config.masterKey), raw) : raw;\n return JSON.parse(new TextDecoder().decode(plain)) as BucketShareMeta;\n } catch {\n return null;\n }\n}\n\n// ---- manifest + blobs (per-share-key encrypted) -------------------------------\n\n/** Read the target, (re-)encrypt referenced blobs with `shareKey`, upload\n * manifest+blobs, presign all. Returns the presigned manifest URL + object keys. */\nasync function writeShareObjects(\n db: DbDriver,\n opts: { slug: string; kind: \"doc\" | \"database\"; targetId: string; config: S3Config; shareKey: Uint8Array; expiresSec: number },\n): Promise<{ manifestUrl: string; objects: string[]; title: string }> {\n const client = storageClientFor(opts.config);\n const root = sharesRoot(opts.config.prefix);\n\n const manifest: ShareManifest = { v: 1, kind: opts.kind, title: \"\" };\n let refHashes: string[] = [];\n if (opts.kind === \"doc\") {\n const doc = getDocument(db, opts.targetId);\n if (!doc) throw new MhError(\"not_found\", `no such document: ${opts.targetId}`);\n manifest.title = doc.title;\n manifest.body = doc.body ?? \"\";\n refHashes = blobHashes(manifest.body);\n } else {\n const dbRow = getDatabase(db, opts.targetId);\n if (!dbRow) throw new MhError(\"not_found\", `no such database: ${opts.targetId}`);\n manifest.title = dbRow.name;\n const props = listProperties(db, opts.targetId).sort((a, b) => a.position - b.position);\n manifest.properties = props.map((p) => ({ id: p.id, name: p.name, type: p.type }));\n const recs = listRecords(db, opts.targetId);\n manifest.records = recs.map((r) => ({ cells: r.cells }));\n refHashes = blobHashes(JSON.stringify(recs.map((r) => r.cells)));\n }\n\n const objects: string[] = [];\n const blobs: Record<string, { url: string; ct: string }> = {};\n for (const hash of refHashes) {\n const bytes = await resolveBlob(db, hash);\n if (!bytes) continue;\n const key = blobKeyOf(root, opts.slug, hash);\n await client.put(key, await encryptBytes(opts.shareKey, bytes), { contentType: \"application/octet-stream\" });\n objects.push(key);\n blobs[hash] = {\n url: await presignGet(opts.config, key, opts.expiresSec),\n ct: blobContentType(db, hash) ?? \"application/octet-stream\",\n };\n }\n if (Object.keys(blobs).length) manifest.blobs = blobs;\n\n const mKey = manifestKeyOf(root, opts.slug);\n await client.put(mKey, await encryptBytes(opts.shareKey, new TextEncoder().encode(JSON.stringify(manifest))), {\n contentType: \"application/octet-stream\",\n });\n objects.push(mKey);\n return { manifestUrl: await presignGet(opts.config, mKey, opts.expiresSec), objects, title: manifest.title };\n}\n\n/** Best-effort: allow the static viewer's origin to fetch this bucket's objects\n * (cross-origin presigned GET is CORS-gated). Non-fatal — surfaced as a warning. */\nasync function mergeViewerCors(config: S3Config, viewerOrigin?: string): Promise<void> {\n if (!viewerOrigin) return;\n try {\n await putBucketCors(config, [viewerOrigin], { merge: true });\n } catch (e) {\n console.warn(`share: could not add viewer origin to bucket CORS (${(e as Error).message}); the viewer may be blocked until CORS allows ${viewerOrigin}`);\n }\n}\n\n// ---- public: create / renew / list / delete -----------------------------------\n\n/** Create an object-storage share: write manifest+blobs (per-share-key encrypted)\n * then meta.json (master-key encrypted, written LAST so a half-built share is\n * never listed), and allow the viewer origin in the bucket's CORS. */\nexport async function createBucketShare(\n db: DbDriver,\n opts: {\n slug: string;\n kind: \"doc\" | \"database\";\n targetId: string;\n config: S3Config;\n password?: string | null;\n expiresSec: number;\n viewerOrigin?: string;\n },\n): Promise<BucketShareLink> {\n const expiresSec = clampExpiry(opts.expiresSec);\n let shareKey: Uint8Array;\n let saltB64: string | undefined;\n if (opts.password) {\n const salt = crypto.getRandomValues(new Uint8Array(16));\n shareKey = await deriveShareKey(opts.password, salt);\n saltB64 = toB64(salt);\n } else {\n shareKey = generateMasterKey();\n }\n\n const { manifestUrl, objects, title } = await writeShareObjects(db, {\n slug: opts.slug,\n kind: opts.kind,\n targetId: opts.targetId,\n config: opts.config,\n shareKey,\n expiresSec,\n });\n const presignExp = Date.now() + expiresSec * 1000;\n\n const meta: BucketShareMeta = {\n v: 1,\n slug: opts.slug,\n kind: opts.kind,\n target_id: opts.targetId,\n title,\n permission: \"view\",\n created_at: Date.now(),\n presign_exp: presignExp,\n has_password: !!opts.password,\n objects,\n key: toB64(shareKey),\n salt: saltB64,\n };\n await storageClientFor(opts.config).put(metaKey(sharesRoot(opts.config.prefix), opts.slug), await metaBytes(opts.config, meta), {\n contentType: \"application/octet-stream\",\n });\n await mergeViewerCors(opts.config, opts.viewerOrigin);\n\n return { manifestUrl, presignExp, keyB64: opts.password ? undefined : toB64(shareKey), saltB64, title };\n}\n\n/** Renew an object-storage share: re-read the (live) source, re-encrypt with the\n * stored per-share key, re-upload + re-presign, refresh meta.json. Works for\n * password shares too (the key is stored master-encrypted). */\nexport async function renewBucketShare(\n db: DbDriver,\n config: S3Config,\n slug: string,\n expiresSec = MAX_PRESIGN_SECONDS,\n): Promise<BucketShareLink> {\n const meta = await readMeta(config, slug);\n if (!meta) throw new MhError(\"not_found\", `no such bucket share: ${slug}`);\n const shareKey = fromB64(meta.key);\n const exp = clampExpiry(expiresSec);\n const { manifestUrl, objects, title } = await writeShareObjects(db, {\n slug,\n kind: meta.kind,\n targetId: meta.target_id,\n config,\n shareKey,\n expiresSec: exp,\n });\n const presignExp = Date.now() + exp * 1000;\n const next: BucketShareMeta = { ...meta, title, presign_exp: presignExp, objects };\n await storageClientFor(config).put(metaKey(sharesRoot(config.prefix), slug), await metaBytes(config, next), {\n contentType: \"application/octet-stream\",\n });\n return { manifestUrl, presignExp, keyB64: meta.has_password ? undefined : meta.key, saltB64: meta.salt, title };\n}\n\n/** List all object-storage shares in a bucket (decrypts each meta.json). */\nexport async function listBucketShares(config: S3Config): Promise<BucketShareMeta[]> {\n const client = storageClientFor(config);\n const root = sharesRoot(config.prefix);\n const entries = await client.list(`${root}/`, undefined, \"/\").catch(() => []);\n const slugs = entries\n .map((e) => e.key.slice(`${root}/`.length).replace(/\\/$/, \"\"))\n .filter((s) => s && !s.includes(\"/\"));\n const out: BucketShareMeta[] = [];\n for (const slug of slugs) {\n const meta = await readMeta(config, slug);\n if (meta) out.push(meta);\n }\n return out;\n}\n\n/** Delete a bucket share's objects. meta.json is deleted FIRST so the share\n * immediately disappears from listings even if the rest is slow. */\nexport async function deleteBucketShareObjects(config: S3Config, slug: string): Promise<void> {\n const client = storageClientFor(config);\n const root = sharesRoot(config.prefix);\n await client.del(metaKey(root, slug)).catch(() => undefined);\n const meta = await readMeta(config, slug).catch(() => null); // may already be gone\n const objs = meta?.objects ?? (await client.list(`${root}/${slug}/`).catch(() => [])).map((o) => o.key);\n for (const key of objs) await client.del(key).catch(() => undefined);\n}\n\nfunction clampExpiry(sec: number): number {\n return Math.min(Math.max(60, Math.floor(sec)), MAX_PRESIGN_SECONDS);\n}\n"
131
138
  ],
132
- "mappings": "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",
133
- "debugId": "DA5B2BE6A38E8FBC64756E2164756E21",
139
+ "mappings": "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;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;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",
140
+ "debugId": "53C623352D26C68364756E2164756E21",
134
141
  "names": []
135
142
  }