@syncular/server 0.0.6-95 → 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (601) hide show
  1. package/README.md +1 -2
  2. package/dist/auth-leases.d.ts +85 -0
  3. package/dist/auth-leases.d.ts.map +1 -0
  4. package/dist/auth-leases.js +368 -0
  5. package/dist/auth-leases.js.map +1 -0
  6. package/dist/better-sqlite3.d.ts +22 -0
  7. package/dist/better-sqlite3.d.ts.map +1 -0
  8. package/dist/better-sqlite3.js +16 -0
  9. package/dist/better-sqlite3.js.map +1 -0
  10. package/dist/blobs/access.d.ts +35 -0
  11. package/dist/blobs/access.d.ts.map +1 -0
  12. package/dist/blobs/access.js +149 -0
  13. package/dist/blobs/access.js.map +1 -0
  14. package/dist/blobs/adapters/database.d.ts +26 -9
  15. package/dist/blobs/adapters/database.d.ts.map +1 -1
  16. package/dist/blobs/adapters/database.js +68 -23
  17. package/dist/blobs/adapters/database.js.map +1 -1
  18. package/dist/blobs/index.d.ts +1 -0
  19. package/dist/blobs/index.d.ts.map +1 -1
  20. package/dist/blobs/index.js +5 -4
  21. package/dist/blobs/index.js.map +1 -1
  22. package/dist/blobs/manager.d.ts +69 -44
  23. package/dist/blobs/manager.d.ts.map +1 -1
  24. package/dist/blobs/manager.js +250 -65
  25. package/dist/blobs/manager.js.map +1 -1
  26. package/dist/blobs/migrate.d.ts.map +1 -1
  27. package/dist/blobs/migrate.js +16 -8
  28. package/dist/blobs/migrate.js.map +1 -1
  29. package/dist/blobs/types.d.ts +4 -0
  30. package/dist/blobs/types.d.ts.map +1 -1
  31. package/dist/bun-sqlite.d.ts +19 -0
  32. package/dist/bun-sqlite.d.ts.map +1 -0
  33. package/dist/bun-sqlite.js +19 -0
  34. package/dist/bun-sqlite.js.map +1 -0
  35. package/dist/clients.d.ts +1 -0
  36. package/dist/clients.d.ts.map +1 -1
  37. package/dist/clients.js.map +1 -1
  38. package/dist/cloudflare/durable-object.d.ts +93 -0
  39. package/dist/cloudflare/durable-object.d.ts.map +1 -0
  40. package/dist/cloudflare/durable-object.js +210 -0
  41. package/dist/cloudflare/durable-object.js.map +1 -0
  42. package/dist/cloudflare/index.d.ts +22 -0
  43. package/dist/cloudflare/index.d.ts.map +1 -0
  44. package/dist/cloudflare/index.js +22 -0
  45. package/dist/cloudflare/index.js.map +1 -0
  46. package/dist/cloudflare/r2.d.ts +180 -0
  47. package/dist/cloudflare/r2.d.ts.map +1 -0
  48. package/dist/cloudflare/r2.js +258 -0
  49. package/dist/cloudflare/r2.js.map +1 -0
  50. package/dist/cloudflare/scope-cache.d.ts +54 -0
  51. package/dist/cloudflare/scope-cache.d.ts.map +1 -0
  52. package/dist/cloudflare/scope-cache.js +223 -0
  53. package/dist/cloudflare/scope-cache.js.map +1 -0
  54. package/dist/cloudflare/sentry.d.ts +47 -0
  55. package/dist/cloudflare/sentry.d.ts.map +1 -0
  56. package/dist/cloudflare/sentry.js +163 -0
  57. package/dist/cloudflare/sentry.js.map +1 -0
  58. package/dist/cloudflare/worker.d.ts +46 -0
  59. package/dist/cloudflare/worker.d.ts.map +1 -0
  60. package/dist/cloudflare/worker.js +63 -0
  61. package/dist/cloudflare/worker.js.map +1 -0
  62. package/dist/commit-integrity.d.ts +38 -0
  63. package/dist/commit-integrity.d.ts.map +1 -0
  64. package/dist/commit-integrity.js +260 -0
  65. package/dist/commit-integrity.js.map +1 -0
  66. package/dist/compaction.js.map +1 -1
  67. package/dist/crdt-yjs/index.d.ts +99 -0
  68. package/dist/crdt-yjs/index.d.ts.map +1 -0
  69. package/dist/crdt-yjs/index.js +629 -0
  70. package/dist/crdt-yjs/index.js.map +1 -0
  71. package/dist/d1.d.ts +13 -0
  72. package/dist/d1.d.ts.map +1 -0
  73. package/dist/d1.js +14 -0
  74. package/dist/d1.js.map +1 -0
  75. package/dist/dialect/base.d.ts +11 -1
  76. package/dist/dialect/base.d.ts.map +1 -1
  77. package/dist/dialect/base.js +43 -6
  78. package/dist/dialect/base.js.map +1 -1
  79. package/dist/dialect/helpers.d.ts +6 -0
  80. package/dist/dialect/helpers.d.ts.map +1 -1
  81. package/dist/dialect/helpers.js +24 -0
  82. package/dist/dialect/helpers.js.map +1 -1
  83. package/dist/dialect/index.js +3 -3
  84. package/dist/dialect/types.d.ts +40 -0
  85. package/dist/dialect/types.d.ts.map +1 -1
  86. package/dist/encrypted-crdt.d.ts +67 -0
  87. package/dist/encrypted-crdt.d.ts.map +1 -0
  88. package/dist/encrypted-crdt.js +426 -0
  89. package/dist/encrypted-crdt.js.map +1 -0
  90. package/dist/errors.d.ts +10 -0
  91. package/dist/errors.d.ts.map +1 -0
  92. package/dist/errors.js +13 -0
  93. package/dist/errors.js.map +1 -0
  94. package/dist/filesystem/index.d.ts +44 -0
  95. package/dist/filesystem/index.d.ts.map +1 -0
  96. package/dist/filesystem/index.js +164 -0
  97. package/dist/filesystem/index.js.map +1 -0
  98. package/dist/handlers/collection.d.ts +11 -3
  99. package/dist/handlers/collection.d.ts.map +1 -1
  100. package/dist/handlers/collection.js +34 -56
  101. package/dist/handlers/collection.js.map +1 -1
  102. package/dist/handlers/create-handler.d.ts +31 -7
  103. package/dist/handlers/create-handler.d.ts.map +1 -1
  104. package/dist/handlers/create-handler.js +332 -115
  105. package/dist/handlers/create-handler.js.map +1 -1
  106. package/dist/handlers/index.js +3 -3
  107. package/dist/handlers/types.d.ts +86 -1
  108. package/dist/handlers/types.d.ts.map +1 -1
  109. package/dist/helpers/conflict.js.map +1 -1
  110. package/dist/helpers/emitted-change.js.map +1 -1
  111. package/dist/helpers/index.d.ts +2 -0
  112. package/dist/helpers/index.d.ts.map +1 -1
  113. package/dist/helpers/index.js +6 -4
  114. package/dist/helpers/index.js.map +1 -1
  115. package/dist/helpers/paginate.js.map +1 -1
  116. package/dist/helpers/scope-authorization.d.ts +7 -0
  117. package/dist/helpers/scope-authorization.d.ts.map +1 -0
  118. package/dist/helpers/scope-authorization.js +19 -0
  119. package/dist/helpers/scope-authorization.js.map +1 -0
  120. package/dist/helpers/scope-commit-index.d.ts +12 -0
  121. package/dist/helpers/scope-commit-index.d.ts.map +1 -0
  122. package/dist/helpers/scope-commit-index.js +35 -0
  123. package/dist/helpers/scope-commit-index.js.map +1 -0
  124. package/dist/helpers/scope-strings.js.map +1 -1
  125. package/dist/hono/api-key-auth.d.ts +49 -0
  126. package/dist/hono/api-key-auth.d.ts.map +1 -0
  127. package/dist/hono/api-key-auth.js +108 -0
  128. package/dist/hono/api-key-auth.js.map +1 -0
  129. package/dist/hono/audit-redaction.d.ts +20 -0
  130. package/dist/hono/audit-redaction.d.ts.map +1 -0
  131. package/dist/hono/audit-redaction.js +85 -0
  132. package/dist/hono/audit-redaction.js.map +1 -0
  133. package/dist/hono/blobs.d.ts +75 -0
  134. package/dist/hono/blobs.d.ts.map +1 -0
  135. package/dist/hono/blobs.js +586 -0
  136. package/dist/hono/blobs.js.map +1 -0
  137. package/dist/hono/console/gateway.d.ts +42 -0
  138. package/dist/hono/console/gateway.d.ts.map +1 -0
  139. package/dist/hono/console/gateway.js +2158 -0
  140. package/dist/hono/console/gateway.js.map +1 -0
  141. package/dist/hono/console/live-auth.d.ts +7 -0
  142. package/dist/hono/console/live-auth.d.ts.map +1 -0
  143. package/dist/hono/console/live-auth.js +39 -0
  144. package/dist/hono/console/live-auth.js.map +1 -0
  145. package/dist/hono/console/route-descriptor.d.ts +6 -0
  146. package/dist/hono/console/route-descriptor.d.ts.map +1 -0
  147. package/dist/hono/console/route-descriptor.js +16 -0
  148. package/dist/hono/console/route-descriptor.js.map +1 -0
  149. package/dist/hono/console/routes/api-keys.d.ts +8 -0
  150. package/dist/hono/console/routes/api-keys.d.ts.map +1 -0
  151. package/dist/hono/console/routes/api-keys.js +575 -0
  152. package/dist/hono/console/routes/api-keys.js.map +1 -0
  153. package/dist/hono/console/routes/clients.d.ts +8 -0
  154. package/dist/hono/console/routes/clients.d.ts.map +1 -0
  155. package/dist/hono/console/routes/clients.js +322 -0
  156. package/dist/hono/console/routes/clients.js.map +1 -0
  157. package/dist/hono/console/routes/commits.d.ts +8 -0
  158. package/dist/hono/console/routes/commits.d.ts.map +1 -0
  159. package/dist/hono/console/routes/commits.js +882 -0
  160. package/dist/hono/console/routes/commits.js.map +1 -0
  161. package/dist/hono/console/routes/context.d.ts +188 -0
  162. package/dist/hono/console/routes/context.d.ts.map +1 -0
  163. package/dist/hono/console/routes/context.js +633 -0
  164. package/dist/hono/console/routes/context.js.map +1 -0
  165. package/dist/hono/console/routes/events.d.ts +8 -0
  166. package/dist/hono/console/routes/events.d.ts.map +1 -0
  167. package/dist/hono/console/routes/events.js +501 -0
  168. package/dist/hono/console/routes/events.js.map +1 -0
  169. package/dist/hono/console/routes/maintenance.d.ts +8 -0
  170. package/dist/hono/console/routes/maintenance.d.ts.map +1 -0
  171. package/dist/hono/console/routes/maintenance.js +341 -0
  172. package/dist/hono/console/routes/maintenance.js.map +1 -0
  173. package/dist/hono/console/routes/shared.d.ts +174 -0
  174. package/dist/hono/console/routes/shared.d.ts.map +1 -0
  175. package/dist/hono/console/routes/shared.js +583 -0
  176. package/dist/hono/console/routes/shared.js.map +1 -0
  177. package/dist/hono/console/routes/stats.d.ts +8 -0
  178. package/dist/hono/console/routes/stats.d.ts.map +1 -0
  179. package/dist/hono/console/routes/stats.js +295 -0
  180. package/dist/hono/console/routes/stats.js.map +1 -0
  181. package/dist/hono/console/routes/storage.d.ts +8 -0
  182. package/dist/hono/console/routes/storage.d.ts.map +1 -0
  183. package/dist/hono/console/routes/storage.js +121 -0
  184. package/dist/hono/console/routes/storage.js.map +1 -0
  185. package/dist/hono/console/routes.d.ts +36 -0
  186. package/dist/hono/console/routes.d.ts.map +1 -0
  187. package/dist/hono/console/routes.js +112 -0
  188. package/dist/hono/console/routes.js.map +1 -0
  189. package/dist/hono/console/schema-errors.d.ts +2 -0
  190. package/dist/hono/console/schema-errors.d.ts.map +1 -0
  191. package/dist/hono/console/schema-errors.js +17 -0
  192. package/dist/hono/console/schema-errors.js.map +1 -0
  193. package/dist/hono/console/schemas.d.ts +1515 -0
  194. package/dist/hono/console/schemas.d.ts.map +1 -0
  195. package/dist/hono/console/schemas.js +661 -0
  196. package/dist/hono/console/schemas.js.map +1 -0
  197. package/dist/hono/console/types.d.ts +213 -0
  198. package/dist/hono/console/types.d.ts.map +1 -0
  199. package/dist/hono/console/types.js +2 -0
  200. package/dist/hono/console/types.js.map +1 -0
  201. package/dist/hono/console/ui.d.ts +38 -0
  202. package/dist/hono/console/ui.d.ts.map +1 -0
  203. package/dist/hono/console/ui.js +43 -0
  204. package/dist/hono/console/ui.js.map +1 -0
  205. package/dist/hono/create-server.d.ts +71 -0
  206. package/dist/hono/create-server.d.ts.map +1 -0
  207. package/dist/hono/create-server.js +121 -0
  208. package/dist/hono/create-server.js.map +1 -0
  209. package/dist/hono/errors.d.ts +13 -0
  210. package/dist/hono/errors.d.ts.map +1 -0
  211. package/dist/hono/errors.js +21 -0
  212. package/dist/hono/errors.js.map +1 -0
  213. package/dist/hono/index.d.ts +20 -0
  214. package/dist/hono/index.d.ts.map +1 -0
  215. package/dist/hono/index.js +31 -0
  216. package/dist/hono/index.js.map +1 -0
  217. package/dist/hono/openapi.d.ts +72 -0
  218. package/dist/hono/openapi.d.ts.map +1 -0
  219. package/dist/hono/openapi.js +99 -0
  220. package/dist/hono/openapi.js.map +1 -0
  221. package/dist/hono/proxy/connection-manager.d.ts +78 -0
  222. package/dist/hono/proxy/connection-manager.d.ts.map +1 -0
  223. package/dist/hono/proxy/connection-manager.js +251 -0
  224. package/dist/hono/proxy/connection-manager.js.map +1 -0
  225. package/dist/hono/proxy/index.d.ts +8 -0
  226. package/dist/hono/proxy/index.d.ts.map +1 -0
  227. package/dist/hono/proxy/index.js +8 -0
  228. package/dist/hono/proxy/index.js.map +1 -0
  229. package/dist/hono/proxy/routes.d.ts +86 -0
  230. package/dist/hono/proxy/routes.d.ts.map +1 -0
  231. package/dist/hono/proxy/routes.js +183 -0
  232. package/dist/hono/proxy/routes.js.map +1 -0
  233. package/dist/hono/rate-limit.d.ts +101 -0
  234. package/dist/hono/rate-limit.d.ts.map +1 -0
  235. package/dist/hono/rate-limit.js +184 -0
  236. package/dist/hono/rate-limit.js.map +1 -0
  237. package/dist/hono/realtime-sync-packs.d.ts +43 -0
  238. package/dist/hono/realtime-sync-packs.d.ts.map +1 -0
  239. package/dist/hono/realtime-sync-packs.js +219 -0
  240. package/dist/hono/realtime-sync-packs.js.map +1 -0
  241. package/dist/hono/routes/audit.d.ts +12 -0
  242. package/dist/hono/routes/audit.d.ts.map +1 -0
  243. package/dist/hono/routes/audit.js +385 -0
  244. package/dist/hono/routes/audit.js.map +1 -0
  245. package/dist/hono/routes/auth-leases.d.ts +8 -0
  246. package/dist/hono/routes/auth-leases.d.ts.map +1 -0
  247. package/dist/hono/routes/auth-leases.js +88 -0
  248. package/dist/hono/routes/auth-leases.js.map +1 -0
  249. package/dist/hono/routes/combined.d.ts +8 -0
  250. package/dist/hono/routes/combined.d.ts.map +1 -0
  251. package/dist/hono/routes/combined.js +392 -0
  252. package/dist/hono/routes/combined.js.map +1 -0
  253. package/dist/hono/routes/context.d.ts +314 -0
  254. package/dist/hono/routes/context.d.ts.map +1 -0
  255. package/dist/hono/routes/context.js +1147 -0
  256. package/dist/hono/routes/context.js.map +1 -0
  257. package/dist/hono/routes/health.d.ts +8 -0
  258. package/dist/hono/routes/health.d.ts.map +1 -0
  259. package/dist/hono/routes/health.js +16 -0
  260. package/dist/hono/routes/health.js.map +1 -0
  261. package/dist/hono/routes/realtime.d.ts +9 -0
  262. package/dist/hono/routes/realtime.d.ts.map +1 -0
  263. package/dist/hono/routes/realtime.js +626 -0
  264. package/dist/hono/routes/realtime.js.map +1 -0
  265. package/dist/hono/routes/shared.d.ts +689 -0
  266. package/dist/hono/routes/shared.d.ts.map +1 -0
  267. package/dist/hono/routes/shared.js +972 -0
  268. package/dist/hono/routes/shared.js.map +1 -0
  269. package/dist/hono/routes/snapshots.d.ts +10 -0
  270. package/dist/hono/routes/snapshots.d.ts.map +1 -0
  271. package/dist/hono/routes/snapshots.js +281 -0
  272. package/dist/hono/routes/snapshots.js.map +1 -0
  273. package/dist/hono/routes.d.ts +19 -0
  274. package/dist/hono/routes.d.ts.map +1 -0
  275. package/dist/hono/routes.js +37 -0
  276. package/dist/hono/routes.js.map +1 -0
  277. package/dist/hono/validation.d.ts +5 -0
  278. package/dist/hono/validation.d.ts.map +1 -0
  279. package/dist/hono/validation.js +47 -0
  280. package/dist/hono/validation.js.map +1 -0
  281. package/dist/hono/websocket-origin.d.ts +9 -0
  282. package/dist/hono/websocket-origin.d.ts.map +1 -0
  283. package/dist/hono/websocket-origin.js +96 -0
  284. package/dist/hono/websocket-origin.js.map +1 -0
  285. package/dist/hono/ws.d.ts +341 -0
  286. package/dist/hono/ws.d.ts.map +1 -0
  287. package/dist/hono/ws.js +711 -0
  288. package/dist/hono/ws.js.map +1 -0
  289. package/dist/index.d.ts +6 -0
  290. package/dist/index.d.ts.map +1 -1
  291. package/dist/index.js +24 -18
  292. package/dist/index.js.map +1 -1
  293. package/dist/libsql.d.ts +29 -0
  294. package/dist/libsql.d.ts.map +1 -0
  295. package/dist/libsql.js +25 -0
  296. package/dist/libsql.js.map +1 -0
  297. package/dist/migrate.js.map +1 -1
  298. package/dist/neon.d.ts +21 -0
  299. package/dist/neon.d.ts.map +1 -0
  300. package/dist/neon.js +22 -0
  301. package/dist/neon.js.map +1 -0
  302. package/dist/notify.d.ts +30 -0
  303. package/dist/notify.d.ts.map +1 -1
  304. package/dist/notify.js +160 -41
  305. package/dist/notify.js.map +1 -1
  306. package/dist/pglite.d.ts +37 -0
  307. package/dist/pglite.d.ts.map +1 -0
  308. package/dist/pglite.js +37 -0
  309. package/dist/pglite.js.map +1 -0
  310. package/dist/plugins/index.d.ts +2 -0
  311. package/dist/plugins/index.d.ts.map +1 -0
  312. package/dist/plugins/index.js +2 -0
  313. package/dist/plugins/index.js.map +1 -0
  314. package/dist/plugins/types.d.ts +73 -0
  315. package/dist/plugins/types.d.ts.map +1 -0
  316. package/dist/plugins/types.js +30 -0
  317. package/dist/plugins/types.js.map +1 -0
  318. package/dist/postgres/index.d.ts +68 -0
  319. package/dist/postgres/index.d.ts.map +1 -0
  320. package/dist/postgres/index.js +924 -0
  321. package/dist/postgres/index.js.map +1 -0
  322. package/dist/proxy/collection.d.ts +0 -2
  323. package/dist/proxy/collection.d.ts.map +1 -1
  324. package/dist/proxy/collection.js +2 -17
  325. package/dist/proxy/collection.js.map +1 -1
  326. package/dist/proxy/handler.d.ts +1 -1
  327. package/dist/proxy/handler.d.ts.map +1 -1
  328. package/dist/proxy/handler.js +3 -4
  329. package/dist/proxy/handler.js.map +1 -1
  330. package/dist/proxy/index.d.ts +1 -1
  331. package/dist/proxy/index.d.ts.map +1 -1
  332. package/dist/proxy/index.js +3 -3
  333. package/dist/proxy/index.js.map +1 -1
  334. package/dist/proxy/mutation-detector.js.map +1 -1
  335. package/dist/proxy/oplog.d.ts.map +1 -1
  336. package/dist/proxy/oplog.js +32 -8
  337. package/dist/proxy/oplog.js.map +1 -1
  338. package/dist/prune.d.ts +8 -1
  339. package/dist/prune.d.ts.map +1 -1
  340. package/dist/prune.js +68 -28
  341. package/dist/prune.js.map +1 -1
  342. package/dist/pull.d.ts +31 -0
  343. package/dist/pull.d.ts.map +1 -1
  344. package/dist/pull.js +1014 -474
  345. package/dist/pull.js.map +1 -1
  346. package/dist/push.d.ts +36 -2
  347. package/dist/push.d.ts.map +1 -1
  348. package/dist/push.js +603 -358
  349. package/dist/push.js.map +1 -1
  350. package/dist/realtime/in-memory.js.map +1 -1
  351. package/dist/realtime/index.d.ts +2 -1
  352. package/dist/realtime/index.d.ts.map +1 -1
  353. package/dist/realtime/index.js +2 -1
  354. package/dist/realtime/index.js.map +1 -1
  355. package/dist/realtime/types.d.ts +12 -0
  356. package/dist/realtime/types.d.ts.map +1 -1
  357. package/dist/realtime/types.js +13 -1
  358. package/dist/realtime/types.js.map +1 -1
  359. package/dist/relay/client-role/forward-engine.d.ts +63 -0
  360. package/dist/relay/client-role/forward-engine.d.ts.map +1 -0
  361. package/dist/relay/client-role/forward-engine.js +267 -0
  362. package/dist/relay/client-role/forward-engine.js.map +1 -0
  363. package/dist/relay/client-role/index.d.ts +9 -0
  364. package/dist/relay/client-role/index.d.ts.map +1 -0
  365. package/dist/relay/client-role/index.js +9 -0
  366. package/dist/relay/client-role/index.js.map +1 -0
  367. package/dist/relay/client-role/pull-engine.d.ts +72 -0
  368. package/dist/relay/client-role/pull-engine.d.ts.map +1 -0
  369. package/dist/relay/client-role/pull-engine.js +249 -0
  370. package/dist/relay/client-role/pull-engine.js.map +1 -0
  371. package/dist/relay/client-role/sequence-mapper.d.ts +65 -0
  372. package/dist/relay/client-role/sequence-mapper.d.ts.map +1 -0
  373. package/dist/relay/client-role/sequence-mapper.js +161 -0
  374. package/dist/relay/client-role/sequence-mapper.js.map +1 -0
  375. package/dist/relay/evaluation/relay-paths.d.ts +41 -0
  376. package/dist/relay/evaluation/relay-paths.d.ts.map +1 -0
  377. package/dist/relay/evaluation/relay-paths.js +504 -0
  378. package/dist/relay/evaluation/relay-paths.js.map +1 -0
  379. package/dist/relay/evaluation/rust-boundary.d.ts +47 -0
  380. package/dist/relay/evaluation/rust-boundary.d.ts.map +1 -0
  381. package/dist/relay/evaluation/rust-boundary.js +220 -0
  382. package/dist/relay/evaluation/rust-boundary.js.map +1 -0
  383. package/dist/relay/index.d.ts +37 -0
  384. package/dist/relay/index.d.ts.map +1 -0
  385. package/dist/relay/index.js +44 -0
  386. package/dist/relay/index.js.map +1 -0
  387. package/dist/relay/migrate.d.ts +18 -0
  388. package/dist/relay/migrate.d.ts.map +1 -0
  389. package/dist/relay/migrate.js +99 -0
  390. package/dist/relay/migrate.js.map +1 -0
  391. package/dist/relay/mode-manager.d.ts +60 -0
  392. package/dist/relay/mode-manager.d.ts.map +1 -0
  393. package/dist/relay/mode-manager.js +114 -0
  394. package/dist/relay/mode-manager.js.map +1 -0
  395. package/dist/relay/realtime.d.ts +90 -0
  396. package/dist/relay/realtime.d.ts.map +1 -0
  397. package/dist/relay/realtime.js +147 -0
  398. package/dist/relay/realtime.js.map +1 -0
  399. package/dist/relay/relay.d.ts +190 -0
  400. package/dist/relay/relay.d.ts.map +1 -0
  401. package/dist/relay/relay.js +320 -0
  402. package/dist/relay/relay.js.map +1 -0
  403. package/dist/relay/schema.d.ts +158 -0
  404. package/dist/relay/schema.d.ts.map +1 -0
  405. package/dist/relay/schema.js +7 -0
  406. package/dist/relay/schema.js.map +1 -0
  407. package/dist/relay/server-role/index.d.ts +56 -0
  408. package/dist/relay/server-role/index.d.ts.map +1 -0
  409. package/dist/relay/server-role/index.js +193 -0
  410. package/dist/relay/server-role/index.js.map +1 -0
  411. package/dist/relay/server-role/pull.d.ts +27 -0
  412. package/dist/relay/server-role/pull.d.ts.map +1 -0
  413. package/dist/relay/server-role/pull.js +24 -0
  414. package/dist/relay/server-role/pull.js.map +1 -0
  415. package/dist/relay/server-role/push.d.ts +29 -0
  416. package/dist/relay/server-role/push.d.ts.map +1 -0
  417. package/dist/relay/server-role/push.js +122 -0
  418. package/dist/relay/server-role/push.js.map +1 -0
  419. package/dist/s3/index.d.ts +83 -0
  420. package/dist/s3/index.d.ts.map +1 -0
  421. package/dist/s3/index.js +223 -0
  422. package/dist/s3/index.js.map +1 -0
  423. package/dist/schema.d.ts +137 -1
  424. package/dist/schema.d.ts.map +1 -1
  425. package/dist/schema.js +1 -0
  426. package/dist/schema.js.map +1 -1
  427. package/dist/service-worker/index.d.ts +114 -0
  428. package/dist/service-worker/index.d.ts.map +1 -0
  429. package/dist/service-worker/index.js +487 -0
  430. package/dist/service-worker/index.js.map +1 -0
  431. package/dist/snapshot-artifacts/sqlite-bun.d.ts +15 -0
  432. package/dist/snapshot-artifacts/sqlite-bun.d.ts.map +1 -0
  433. package/dist/snapshot-artifacts/sqlite-bun.js +128 -0
  434. package/dist/snapshot-artifacts/sqlite-bun.js.map +1 -0
  435. package/dist/snapshot-artifacts.d.ts +206 -0
  436. package/dist/snapshot-artifacts.d.ts.map +1 -0
  437. package/dist/snapshot-artifacts.js +545 -0
  438. package/dist/snapshot-artifacts.js.map +1 -0
  439. package/dist/snapshot-chunks/db-metadata.d.ts +18 -0
  440. package/dist/snapshot-chunks/db-metadata.d.ts.map +1 -1
  441. package/dist/snapshot-chunks/db-metadata.js +91 -63
  442. package/dist/snapshot-chunks/db-metadata.js.map +1 -1
  443. package/dist/snapshot-chunks/index.js +2 -2
  444. package/dist/snapshot-chunks/types.d.ts +2 -0
  445. package/dist/snapshot-chunks/types.d.ts.map +1 -1
  446. package/dist/snapshot-chunks.d.ts +33 -3
  447. package/dist/snapshot-chunks.d.ts.map +1 -1
  448. package/dist/snapshot-chunks.js +136 -55
  449. package/dist/snapshot-chunks.js.map +1 -1
  450. package/dist/sqlite/index.d.ts +53 -0
  451. package/dist/sqlite/index.d.ts.map +1 -0
  452. package/dist/sqlite/index.js +795 -0
  453. package/dist/sqlite/index.js.map +1 -0
  454. package/dist/sqlite3.d.ts +22 -0
  455. package/dist/sqlite3.d.ts.map +1 -0
  456. package/dist/sqlite3.js +99 -0
  457. package/dist/sqlite3.js.map +1 -0
  458. package/dist/stats.d.ts +8 -0
  459. package/dist/stats.d.ts.map +1 -1
  460. package/dist/stats.js +45 -13
  461. package/dist/stats.js.map +1 -1
  462. package/dist/subscriptions/cache.d.ts +3 -0
  463. package/dist/subscriptions/cache.d.ts.map +1 -1
  464. package/dist/subscriptions/cache.js +44 -0
  465. package/dist/subscriptions/cache.js.map +1 -1
  466. package/dist/subscriptions/index.js +2 -2
  467. package/dist/subscriptions/resolve.d.ts +3 -1
  468. package/dist/subscriptions/resolve.d.ts.map +1 -1
  469. package/dist/subscriptions/resolve.js +91 -52
  470. package/dist/subscriptions/resolve.js.map +1 -1
  471. package/dist/sync.d.ts +3 -0
  472. package/dist/sync.d.ts.map +1 -1
  473. package/dist/sync.js +9 -5
  474. package/dist/sync.js.map +1 -1
  475. package/package.json +297 -8
  476. package/src/auth-leases.ts +649 -0
  477. package/src/better-sqlite3.ts +35 -0
  478. package/src/blobs/access.ts +244 -0
  479. package/src/blobs/adapters/database.ts +125 -43
  480. package/src/blobs/index.ts +1 -0
  481. package/src/blobs/manager.ts +366 -65
  482. package/src/blobs/migrate.ts +16 -8
  483. package/src/blobs/types.ts +4 -0
  484. package/src/bun-sqlite-ambient.d.ts +19 -0
  485. package/src/bun-sqlite.ts +27 -0
  486. package/src/clients.ts +1 -0
  487. package/src/cloudflare/durable-object.ts +289 -0
  488. package/src/cloudflare/index.ts +22 -0
  489. package/src/cloudflare/r2.ts +526 -0
  490. package/src/cloudflare/scope-cache.ts +341 -0
  491. package/src/cloudflare/sentry.ts +230 -0
  492. package/src/cloudflare/worker.ts +77 -0
  493. package/src/commit-integrity.ts +371 -0
  494. package/src/crdt-yjs/index.ts +931 -0
  495. package/src/d1.ts +16 -0
  496. package/src/dialect/base.ts +71 -5
  497. package/src/dialect/helpers.ts +31 -0
  498. package/src/dialect/types.ts +47 -0
  499. package/src/encrypted-crdt.ts +786 -0
  500. package/src/errors.ts +22 -0
  501. package/src/filesystem/index.ts +262 -0
  502. package/src/handlers/collection.ts +78 -78
  503. package/src/handlers/create-handler.ts +540 -147
  504. package/src/handlers/types.ts +116 -0
  505. package/src/helpers/index.ts +2 -0
  506. package/src/helpers/scope-authorization.ts +27 -0
  507. package/src/helpers/scope-commit-index.ts +52 -0
  508. package/src/hono/api-key-auth.ts +177 -0
  509. package/src/hono/audit-redaction.ts +135 -0
  510. package/src/hono/blobs.ts +851 -0
  511. package/src/hono/console/gateway.ts +3046 -0
  512. package/src/hono/console/live-auth.ts +46 -0
  513. package/src/hono/console/route-descriptor.ts +22 -0
  514. package/src/hono/console/routes/api-keys.ts +721 -0
  515. package/src/hono/console/routes/clients.ts +447 -0
  516. package/src/hono/console/routes/commits.ts +1137 -0
  517. package/src/hono/console/routes/context.ts +956 -0
  518. package/src/hono/console/routes/events.ts +669 -0
  519. package/src/hono/console/routes/maintenance.ts +461 -0
  520. package/src/hono/console/routes/shared.ts +816 -0
  521. package/src/hono/console/routes/stats.ts +392 -0
  522. package/src/hono/console/routes/storage.ts +159 -0
  523. package/src/hono/console/routes.ts +146 -0
  524. package/src/hono/console/schema-errors.ts +23 -0
  525. package/src/hono/console/schemas.ts +914 -0
  526. package/src/hono/console/types.ts +223 -0
  527. package/src/hono/console/ui.ts +100 -0
  528. package/src/hono/create-server.ts +230 -0
  529. package/src/hono/errors.ts +50 -0
  530. package/src/hono/index.ts +54 -0
  531. package/src/hono/openapi.ts +139 -0
  532. package/src/hono/proxy/connection-manager.ts +340 -0
  533. package/src/hono/proxy/index.ts +8 -0
  534. package/src/hono/proxy/routes.ts +272 -0
  535. package/src/hono/rate-limit.ts +319 -0
  536. package/src/hono/realtime-sync-packs.ts +354 -0
  537. package/src/hono/routes/audit.ts +499 -0
  538. package/src/hono/routes/auth-leases.ts +119 -0
  539. package/src/hono/routes/combined.ts +583 -0
  540. package/src/hono/routes/context.ts +1629 -0
  541. package/src/hono/routes/health.ts +26 -0
  542. package/src/hono/routes/realtime.ts +808 -0
  543. package/src/hono/routes/shared.ts +1626 -0
  544. package/src/hono/routes/snapshots.ts +345 -0
  545. package/src/hono/routes.ts +68 -0
  546. package/src/hono/validation.ts +81 -0
  547. package/src/hono/websocket-origin.ts +131 -0
  548. package/src/hono/ws.ts +1134 -0
  549. package/src/index.ts +6 -0
  550. package/src/libsql.ts +51 -0
  551. package/src/neon.ts +28 -0
  552. package/src/notify.ts +224 -44
  553. package/src/pglite.ts +68 -0
  554. package/src/plugins/index.ts +1 -0
  555. package/src/plugins/types.ts +144 -0
  556. package/src/postgres/index.ts +1291 -0
  557. package/src/proxy/collection.ts +5 -27
  558. package/src/proxy/handler.ts +2 -2
  559. package/src/proxy/index.ts +0 -2
  560. package/src/proxy/oplog.ts +41 -10
  561. package/src/prune.ts +137 -36
  562. package/src/pull.ts +1504 -591
  563. package/src/push.ts +881 -443
  564. package/src/realtime/index.ts +2 -0
  565. package/src/realtime/types.ts +35 -0
  566. package/src/relay/bun-types.d.ts +50 -0
  567. package/src/relay/client-role/forward-engine.ts +355 -0
  568. package/src/relay/client-role/index.ts +9 -0
  569. package/src/relay/client-role/pull-engine.ts +329 -0
  570. package/src/relay/client-role/sequence-mapper.ts +201 -0
  571. package/src/relay/evaluation/relay-paths.ts +699 -0
  572. package/src/relay/evaluation/rust-boundary.ts +464 -0
  573. package/src/relay/index.ts +50 -0
  574. package/src/relay/migrate.ts +113 -0
  575. package/src/relay/mode-manager.ts +142 -0
  576. package/src/relay/realtime.ts +207 -0
  577. package/src/relay/relay.ts +431 -0
  578. package/src/relay/schema.ts +171 -0
  579. package/src/relay/server-role/index.ts +338 -0
  580. package/src/relay/server-role/pull.ts +43 -0
  581. package/src/relay/server-role/push.ts +164 -0
  582. package/src/s3/index.ts +346 -0
  583. package/src/schema.ts +141 -1
  584. package/src/service-worker/index.ts +773 -0
  585. package/src/snapshot-artifacts/sqlite-bun.ts +168 -0
  586. package/src/snapshot-artifacts.ts +896 -0
  587. package/src/snapshot-chunks/db-metadata.ts +131 -72
  588. package/src/snapshot-chunks/types.ts +2 -0
  589. package/src/snapshot-chunks.ts +194 -70
  590. package/src/sqlite/index.ts +1064 -0
  591. package/src/sqlite3.ts +137 -0
  592. package/src/stats.ts +76 -13
  593. package/src/subscriptions/cache.ts +58 -0
  594. package/src/subscriptions/resolve.ts +99 -58
  595. package/src/sync.ts +16 -6
  596. package/src/blobs/adapters/database.test.ts +0 -67
  597. package/src/notify.test.ts +0 -520
  598. package/src/proxy/handler.test.ts +0 -126
  599. package/src/proxy/mutation-detector.test.ts +0 -71
  600. package/src/snapshot-chunks/db-metadata.test.ts +0 -172
  601. package/src/subscriptions/resolve.test.ts +0 -180
@@ -0,0 +1,914 @@
1
+ /**
2
+ * @syncular/server/hono - Console API Zod schemas
3
+ */
4
+
5
+ import { z } from 'zod';
6
+
7
+ // ============================================================================
8
+ // Stats Schema
9
+ // ============================================================================
10
+
11
+ export const SyncStatsSchema = z.object({
12
+ commitCount: z.number().int(),
13
+ changeCount: z.number().int(),
14
+ minCommitSeq: z.number().int(),
15
+ maxCommitSeq: z.number().int(),
16
+ clientCount: z.number().int(),
17
+ activeClientCount: z.number().int(),
18
+ minActiveClientCursor: z.number().int().nullable(),
19
+ maxActiveClientCursor: z.number().int().nullable(),
20
+ snapshotChunkCount: z.number().int().nonnegative(),
21
+ snapshotChunkBytes: z.number().int().nonnegative(),
22
+ expiredSnapshotChunkCount: z.number().int().nonnegative(),
23
+ expiredSnapshotChunkBytes: z.number().int().nonnegative(),
24
+ snapshotArtifactCount: z.number().int().nonnegative(),
25
+ snapshotArtifactBytes: z.number().int().nonnegative(),
26
+ expiredSnapshotArtifactCount: z.number().int().nonnegative(),
27
+ expiredSnapshotArtifactBytes: z.number().int().nonnegative(),
28
+ });
29
+
30
+ export type SyncStats = z.infer<typeof SyncStatsSchema>;
31
+
32
+ // ============================================================================
33
+ // Commit Schemas
34
+ // ============================================================================
35
+
36
+ export const ConsoleCommitListItemSchema = z.object({
37
+ commitSeq: z.number().int(),
38
+ actorId: z.string(),
39
+ clientId: z.string(),
40
+ clientCommitId: z.string(),
41
+ createdAt: z.string(),
42
+ changeCount: z.number().int(),
43
+ affectedTables: z.array(z.string()),
44
+ });
45
+
46
+ export type ConsoleCommitListItem = z.infer<typeof ConsoleCommitListItemSchema>;
47
+
48
+ export const ConsoleAuditChangeKindSchema = z.enum([
49
+ 'app_row',
50
+ 'delete',
51
+ 'blob_reference',
52
+ 'encrypted_field_envelope',
53
+ 'encrypted_crdt_update',
54
+ 'encrypted_crdt_checkpoint',
55
+ ]);
56
+
57
+ export const ConsoleAuditChangeRedactionSchema = z.object({
58
+ payload: z.literal('omitted'),
59
+ reason: z.literal('audit_redacted_by_default'),
60
+ });
61
+
62
+ export const ConsoleChangeSchema = z.object({
63
+ changeId: z.number().int(),
64
+ table: z.string(),
65
+ rowId: z.string(),
66
+ op: z.enum(['upsert', 'delete']),
67
+ rowVersion: z.number().int().nullable(),
68
+ fields: z.array(z.string()),
69
+ scopeFields: z.array(z.string()),
70
+ changeKind: ConsoleAuditChangeKindSchema,
71
+ sensitiveFields: z.array(z.string()),
72
+ redaction: ConsoleAuditChangeRedactionSchema,
73
+ });
74
+
75
+ export type ConsoleChange = z.infer<typeof ConsoleChangeSchema>;
76
+
77
+ export const ConsoleCommitDetailSchema = ConsoleCommitListItemSchema.extend({
78
+ changes: z.array(ConsoleChangeSchema),
79
+ });
80
+
81
+ export type ConsoleCommitDetail = z.infer<typeof ConsoleCommitDetailSchema>;
82
+
83
+ export const ConsoleRowHistoryEntrySchema = z.object({
84
+ commitSeq: z.number().int(),
85
+ actorId: z.string(),
86
+ clientId: z.string(),
87
+ clientCommitId: z.string(),
88
+ createdAt: z.string(),
89
+ changeId: z.number().int(),
90
+ table: z.string(),
91
+ rowId: z.string(),
92
+ op: z.enum(['upsert', 'delete']),
93
+ rowVersion: z.number().int().nullable(),
94
+ fields: z.array(z.string()),
95
+ scopeFields: z.array(z.string()),
96
+ changeKind: ConsoleAuditChangeKindSchema,
97
+ sensitiveFields: z.array(z.string()),
98
+ redaction: ConsoleAuditChangeRedactionSchema,
99
+ requestEventIds: z.array(z.number().int()),
100
+ requestIds: z.array(z.string()),
101
+ traceIds: z.array(z.string()),
102
+ });
103
+
104
+ export type ConsoleRowHistoryEntry = z.infer<
105
+ typeof ConsoleRowHistoryEntrySchema
106
+ >;
107
+
108
+ export const ConsoleRowHistoryResponseSchema = z.object({
109
+ table: z.string(),
110
+ rowId: z.string(),
111
+ partitionId: z.string(),
112
+ history: z.array(ConsoleRowHistoryEntrySchema),
113
+ nextCursor: z.number().int().nullable(),
114
+ });
115
+
116
+ export type ConsoleRowHistoryResponse = z.infer<
117
+ typeof ConsoleRowHistoryResponseSchema
118
+ >;
119
+
120
+ export const ConsoleRowInvestigationClientSchema = z.object({
121
+ clientId: z.string(),
122
+ actorId: z.string(),
123
+ cursor: z.number().int(),
124
+ effectiveScopeKeys: z.array(z.string()),
125
+ updatedAt: z.string(),
126
+ lastRequestAt: z.string().nullable(),
127
+ lastRequestType: z.enum(['sync', 'push', 'pull']).nullable(),
128
+ lastRequestOutcome: z.string().nullable(),
129
+ });
130
+
131
+ export type ConsoleRowInvestigationClient = z.infer<
132
+ typeof ConsoleRowInvestigationClientSchema
133
+ >;
134
+
135
+ export const ConsoleRowInvestigationScopeEligibilitySchema = z.object({
136
+ status: z.enum(['eligible', 'not_eligible', 'unknown', 'no_client']),
137
+ requiredScopeKeys: z.array(z.string()),
138
+ matchedScopeKeys: z.array(z.string()),
139
+ missingScopeKeys: z.array(z.string()),
140
+ });
141
+
142
+ export type ConsoleRowInvestigationScopeEligibility = z.infer<
143
+ typeof ConsoleRowInvestigationScopeEligibilitySchema
144
+ >;
145
+
146
+ export const ConsoleRowInvestigationFindingSchema = z.object({
147
+ severity: z.enum(['info', 'warning', 'error']),
148
+ code: z.string(),
149
+ message: z.string(),
150
+ });
151
+
152
+ export type ConsoleRowInvestigationFinding = z.infer<
153
+ typeof ConsoleRowInvestigationFindingSchema
154
+ >;
155
+
156
+ export const ConsoleRowInvestigationSubscriptionEvidenceSchema = z.object({
157
+ status: z.enum(['observed', 'revoked', 'not_observed', 'unknown']),
158
+ matchingEventCount: z.number().int().nonnegative(),
159
+ latestEventId: z.number().int().nullable(),
160
+ latestRequestId: z.string().nullable(),
161
+ latestEventOutcome: z.string().nullable(),
162
+ latestSubscriptionCount: z.number().int().nullable(),
163
+ requestedTableObserved: z.boolean(),
164
+ observedScopeKeys: z.array(z.string()),
165
+ });
166
+
167
+ export type ConsoleRowInvestigationSubscriptionEvidence = z.infer<
168
+ typeof ConsoleRowInvestigationSubscriptionEvidenceSchema
169
+ >;
170
+
171
+ export const ConsoleRowInvestigationRequestEvidenceSchema = z.object({
172
+ matchingEventCount: z.number().int().nonnegative(),
173
+ successEventCount: z.number().int().nonnegative(),
174
+ nonSuccessEventCount: z.number().int().nonnegative(),
175
+ latestEventId: z.number().int().nullable(),
176
+ latestRequestId: z.string().nullable(),
177
+ latestOutcome: z.string().nullable(),
178
+ latestResponseStatus: z.string().nullable(),
179
+ latestErrorCode: z.string().nullable(),
180
+ latestErrorMessage: z.string().nullable(),
181
+ latestSuccessRequestId: z.string().nullable(),
182
+ latestNonSuccessRequestId: z.string().nullable(),
183
+ latestNonSuccessResponseStatus: z.string().nullable(),
184
+ latestNonSuccessErrorCode: z.string().nullable(),
185
+ });
186
+
187
+ export type ConsoleRowInvestigationRequestEvidence = z.infer<
188
+ typeof ConsoleRowInvestigationRequestEvidenceSchema
189
+ >;
190
+
191
+ export const ConsoleRowInvestigationSnapshotEvidenceSchema = z.object({
192
+ pageCount: z.number().int().nonnegative(),
193
+ inlineRowCount: z.number().int().nonnegative(),
194
+ chunkCount: z.number().int().nonnegative(),
195
+ chunkBytes: z.number().int().nonnegative(),
196
+ artifactCount: z.number().int().nonnegative(),
197
+ artifactBytes: z.number().int().nonnegative(),
198
+ });
199
+
200
+ export type ConsoleRowInvestigationSnapshotEvidence = z.infer<
201
+ typeof ConsoleRowInvestigationSnapshotEvidenceSchema
202
+ >;
203
+
204
+ export const ConsoleRowInvestigationRealtimeEvidenceSchema = z.object({
205
+ matchingEventCount: z.number().int().nonnegative(),
206
+ connectedEventCount: z.number().int().nonnegative(),
207
+ pullRequiredEventCount: z.number().int().nonnegative(),
208
+ ackEventCount: z.number().int().nonnegative(),
209
+ rejectedEventCount: z.number().int().nonnegative(),
210
+ errorEventCount: z.number().int().nonnegative(),
211
+ latestEventId: z.number().int().nullable(),
212
+ latestEventType: z.string().nullable(),
213
+ latestReason: z.string().nullable(),
214
+ latestCursor: z.number().int().nullable(),
215
+ latestServerCursor: z.number().int().nullable(),
216
+ latestPullRequiredReason: z.string().nullable(),
217
+ });
218
+
219
+ export type ConsoleRowInvestigationRealtimeEvidence = z.infer<
220
+ typeof ConsoleRowInvestigationRealtimeEvidenceSchema
221
+ >;
222
+
223
+ export const ConsoleRequestEventResponseSummarySchema = z
224
+ .object({
225
+ subscriptionCount: z.number().int().nonnegative().optional(),
226
+ activeSubscriptionCount: z.number().int().nonnegative().optional(),
227
+ revokedSubscriptionCount: z.number().int().nonnegative().optional(),
228
+ bootstrapSubscriptionCount: z.number().int().nonnegative().optional(),
229
+ commitCount: z.number().int().nonnegative().optional(),
230
+ changeCount: z.number().int().nonnegative().optional(),
231
+ snapshotPageCount: z.number().int().nonnegative().optional(),
232
+ snapshotInlineRowCount: z.number().int().nonnegative().optional(),
233
+ snapshotChunkCount: z.number().int().nonnegative().optional(),
234
+ snapshotChunkBytes: z.number().int().nonnegative().optional(),
235
+ snapshotArtifactCount: z.number().int().nonnegative().optional(),
236
+ snapshotArtifactBytes: z.number().int().nonnegative().optional(),
237
+ })
238
+ .passthrough();
239
+
240
+ export type ConsoleRequestEventResponseSummary = z.infer<
241
+ typeof ConsoleRequestEventResponseSummarySchema
242
+ >;
243
+
244
+ export const ConsoleDebugExportCommitSchema =
245
+ ConsoleCommitListItemSchema.extend({
246
+ changes: z.array(ConsoleChangeSchema),
247
+ });
248
+
249
+ export type ConsoleDebugExportCommit = z.infer<
250
+ typeof ConsoleDebugExportCommitSchema
251
+ >;
252
+
253
+ export const ConsoleDebugExportEventSchema = z.object({
254
+ eventId: z.number().int(),
255
+ partitionId: z.string(),
256
+ requestId: z.string(),
257
+ traceId: z.string().nullable(),
258
+ spanId: z.string().nullable(),
259
+ eventType: z.enum(['sync', 'push', 'pull']),
260
+ syncPath: z.enum(['http-combined', 'ws-push']),
261
+ transportPath: z.enum(['direct', 'relay']),
262
+ actorId: z.string(),
263
+ clientId: z.string(),
264
+ statusCode: z.number().int(),
265
+ outcome: z.string(),
266
+ responseStatus: z.string(),
267
+ errorCode: z.string().nullable(),
268
+ durationMs: z.number().int(),
269
+ commitSeq: z.number().int().nullable(),
270
+ operationCount: z.number().int().nullable(),
271
+ rowCount: z.number().int().nullable(),
272
+ subscriptionCount: z.number().int().nullable(),
273
+ scopesSummary: z
274
+ .record(z.string(), z.union([z.string(), z.array(z.string())]))
275
+ .nullable(),
276
+ responseSummary: ConsoleRequestEventResponseSummarySchema.nullable(),
277
+ tables: z.array(z.string()),
278
+ createdAt: z.string(),
279
+ });
280
+
281
+ export type ConsoleDebugExportEvent = z.infer<
282
+ typeof ConsoleDebugExportEventSchema
283
+ >;
284
+
285
+ export const ConsoleDebugExportResponseSchema = z.object({
286
+ generatedAt: z.string(),
287
+ partitionId: z.string(),
288
+ limits: z.object({
289
+ commits: z.number().int(),
290
+ requestEvents: z.number().int(),
291
+ }),
292
+ truncated: z.object({
293
+ commits: z.boolean(),
294
+ requestEvents: z.boolean(),
295
+ }),
296
+ commits: z.array(ConsoleDebugExportCommitSchema),
297
+ requestEvents: z.array(ConsoleDebugExportEventSchema),
298
+ });
299
+
300
+ export type ConsoleDebugExportResponse = z.infer<
301
+ typeof ConsoleDebugExportResponseSchema
302
+ >;
303
+
304
+ // ============================================================================
305
+ // Client Schemas
306
+ // ============================================================================
307
+
308
+ export const ConsoleClientDiagnosticHealthSeveritySchema = z.enum([
309
+ 'debug',
310
+ 'info',
311
+ 'warn',
312
+ 'error',
313
+ ]);
314
+
315
+ export type ConsoleClientDiagnosticHealthSeverity = z.infer<
316
+ typeof ConsoleClientDiagnosticHealthSeveritySchema
317
+ >;
318
+
319
+ export const ConsoleClientDiagnosticFreshnessStateSchema = z.enum([
320
+ 'active',
321
+ 'idle',
322
+ 'stale',
323
+ ]);
324
+
325
+ export type ConsoleClientDiagnosticFreshnessState = z.infer<
326
+ typeof ConsoleClientDiagnosticFreshnessStateSchema
327
+ >;
328
+
329
+ export const ConsoleClientSchema = z.object({
330
+ clientId: z.string(),
331
+ actorId: z.string(),
332
+ cursor: z.number().int(),
333
+ lagCommitCount: z.number().int().nonnegative(),
334
+ connectionPath: z.enum(['direct', 'relay']),
335
+ connectionMode: z.enum(['polling', 'realtime']),
336
+ realtimeConnectionCount: z.number().int().nonnegative(),
337
+ isRealtimeConnected: z.boolean(),
338
+ activityState: z.enum(['active', 'idle', 'stale']),
339
+ diagnosticFreshnessState:
340
+ ConsoleClientDiagnosticFreshnessStateSchema.nullable(),
341
+ diagnosticHealthMaxSeverity:
342
+ ConsoleClientDiagnosticHealthSeveritySchema.nullable(),
343
+ diagnosticReceivedAt: z.string().nullable(),
344
+ lastRequestAt: z.string().nullable(),
345
+ lastRequestType: z.enum(['sync', 'push', 'pull']).nullable(),
346
+ lastRequestOutcome: z.string().nullable(),
347
+ effectiveScopes: z.record(z.string(), z.unknown()),
348
+ updatedAt: z.string(),
349
+ });
350
+
351
+ export type ConsoleClient = z.infer<typeof ConsoleClientSchema>;
352
+
353
+ export const ConsoleClientDiagnosticRuntimeSchema = z
354
+ .object({
355
+ packageName: z.string().optional(),
356
+ packageVersion: z.string().optional(),
357
+ workerProtocolVersion: z.number().int().optional(),
358
+ storage: z.string().optional(),
359
+ storageFallback: z
360
+ .object({
361
+ from: z.string().optional(),
362
+ to: z.string().optional(),
363
+ reason: z.string().optional(),
364
+ })
365
+ .passthrough()
366
+ .optional(),
367
+ workerUrl: z.string().optional(),
368
+ wasmGlueUrl: z.string().optional(),
369
+ wasmUrl: z.string().optional(),
370
+ rust: z
371
+ .object({
372
+ crateName: z.string().optional(),
373
+ crateVersion: z.string().optional(),
374
+ schemaVersion: z.number().int().optional(),
375
+ features: z.array(z.string()).optional(),
376
+ })
377
+ .passthrough()
378
+ .optional(),
379
+ })
380
+ .passthrough();
381
+
382
+ export type ConsoleClientDiagnosticRuntime = z.infer<
383
+ typeof ConsoleClientDiagnosticRuntimeSchema
384
+ >;
385
+
386
+ export const ConsoleClientDiagnosticConnectionSchema = z
387
+ .object({
388
+ closed: z.boolean().optional(),
389
+ pendingRequests: z.number().int().nonnegative().optional(),
390
+ realtime: z.string().optional(),
391
+ storageFallback: z.unknown().optional(),
392
+ lastDiagnostic: z.unknown().optional(),
393
+ lastError: z.unknown().optional(),
394
+ })
395
+ .passthrough();
396
+
397
+ export const ConsoleClientDiagnosticLifecycleSchema = z
398
+ .object({
399
+ phase: z.string().optional(),
400
+ realtime: z.string().optional(),
401
+ online: z.boolean().optional(),
402
+ requiresAction: z.boolean().optional(),
403
+ pendingRequests: z.number().int().nonnegative().optional(),
404
+ bootstrap: z.unknown().optional(),
405
+ outbox: z.unknown().optional(),
406
+ conflicts: z.unknown().optional(),
407
+ blobUploads: z.unknown().optional(),
408
+ lastDiagnostic: z.unknown().optional(),
409
+ lastError: z.unknown().optional(),
410
+ })
411
+ .passthrough();
412
+
413
+ export const ConsoleClientDiagnosticSubscriptionSchema = z
414
+ .object({
415
+ id: z.string(),
416
+ table: z.string(),
417
+ scopeKeys: z.array(z.string()).default([]),
418
+ scopeValueCount: z.number().int().nonnegative().default(0),
419
+ paramsKeys: z.array(z.string()).default([]),
420
+ paramsValueCount: z.number().int().nonnegative().default(0),
421
+ status: z.string().nullable().default(null),
422
+ ready: z.boolean().default(false),
423
+ phase: z.string().optional(),
424
+ progressPercent: z.number().default(0),
425
+ cursor: z.union([z.number().int(), z.string()]).nullable().default(null),
426
+ bootstrapPhase: z.number().int().default(0),
427
+ bootstrapState: z.unknown().nullable().default(null),
428
+ })
429
+ .passthrough();
430
+
431
+ export type ConsoleClientDiagnosticSubscription = z.infer<
432
+ typeof ConsoleClientDiagnosticSubscriptionSchema
433
+ >;
434
+
435
+ export const ConsoleClientDiagnosticEventSchema = z
436
+ .object({
437
+ at: z.number(),
438
+ level: z.enum(['debug', 'info', 'warn', 'error']).catch('info'),
439
+ source: z.string(),
440
+ code: z.string(),
441
+ message: z.string(),
442
+ syncAttemptId: z.string().optional(),
443
+ traceId: z.string().optional(),
444
+ spanId: z.string().optional(),
445
+ clientId: z.string().optional(),
446
+ subscriptionId: z.string().optional(),
447
+ table: z.string().optional(),
448
+ rowId: z.string().optional(),
449
+ cursor: z.union([z.number(), z.string()]).nullable().optional(),
450
+ details: z.record(z.string(), z.unknown()).optional(),
451
+ })
452
+ .passthrough();
453
+
454
+ export type ConsoleClientDiagnosticEvent = z.infer<
455
+ typeof ConsoleClientDiagnosticEventSchema
456
+ >;
457
+
458
+ export const ConsoleClientDiagnosticCodeSummarySchema = z.object({
459
+ code: z.string(),
460
+ count: z.number().int().nonnegative(),
461
+ maxLevel: ConsoleClientDiagnosticHealthSeveritySchema,
462
+ });
463
+
464
+ export type ConsoleClientDiagnosticCodeSummary = z.infer<
465
+ typeof ConsoleClientDiagnosticCodeSummarySchema
466
+ >;
467
+
468
+ export const ConsoleClientDiagnosticSnapshotSchema = z
469
+ .object({
470
+ generatedAt: z.number().optional(),
471
+ runtime: ConsoleClientDiagnosticRuntimeSchema.optional(),
472
+ connection: ConsoleClientDiagnosticConnectionSchema.optional(),
473
+ subscriptions: z
474
+ .array(ConsoleClientDiagnosticSubscriptionSchema)
475
+ .default([]),
476
+ recentDiagnostics: z.array(ConsoleClientDiagnosticEventSchema).default([]),
477
+ recentSyncTimings: z.array(z.record(z.string(), z.unknown())).default([]),
478
+ bootstrap: z.record(z.string(), z.unknown()).optional(),
479
+ transportStats: z.record(z.string(), z.unknown()).optional(),
480
+ outboxStats: z.record(z.string(), z.unknown()).optional(),
481
+ conflictStats: z.record(z.string(), z.unknown()).optional(),
482
+ blobUploadStats: z.record(z.string(), z.unknown()).optional(),
483
+ })
484
+ .passthrough();
485
+
486
+ export type ConsoleClientDiagnosticSnapshot = z.infer<
487
+ typeof ConsoleClientDiagnosticSnapshotSchema
488
+ >;
489
+
490
+ export const ConsoleClientDiagnosticIngestSchema = z.object({
491
+ clientId: z.string().min(1),
492
+ actorId: z.string().min(1).optional(),
493
+ partitionId: z.string().min(1).default('default'),
494
+ lifecycle: ConsoleClientDiagnosticLifecycleSchema.optional(),
495
+ snapshot: ConsoleClientDiagnosticSnapshotSchema,
496
+ });
497
+
498
+ export type ConsoleClientDiagnosticIngest = z.infer<
499
+ typeof ConsoleClientDiagnosticIngestSchema
500
+ >;
501
+
502
+ export const ConsoleClientDiagnosticRecordSchema = z.object({
503
+ clientId: z.string(),
504
+ actorId: z.string().nullable(),
505
+ partitionId: z.string(),
506
+ reportedAt: z.string(),
507
+ receivedAt: z.string(),
508
+ freshnessState: ConsoleClientDiagnosticFreshnessStateSchema,
509
+ healthMaxSeverity: ConsoleClientDiagnosticHealthSeveritySchema.nullable(),
510
+ diagnosticCodesSummary: z.array(ConsoleClientDiagnosticCodeSummarySchema),
511
+ queueSummary: z.record(z.string(), z.unknown()).nullable(),
512
+ timingSummary: z.record(z.string(), z.unknown()).nullable(),
513
+ redactionSummary: z.record(z.string(), z.unknown()),
514
+ runtime: ConsoleClientDiagnosticRuntimeSchema.nullable(),
515
+ connection: ConsoleClientDiagnosticConnectionSchema.nullable(),
516
+ lifecycle: ConsoleClientDiagnosticLifecycleSchema.nullable(),
517
+ bootstrap: z.record(z.string(), z.unknown()).nullable(),
518
+ transportStats: z.record(z.string(), z.unknown()).nullable(),
519
+ outboxStats: z.record(z.string(), z.unknown()).nullable(),
520
+ conflictStats: z.record(z.string(), z.unknown()).nullable(),
521
+ blobUploadStats: z.record(z.string(), z.unknown()).nullable(),
522
+ subscriptions: z.array(ConsoleClientDiagnosticSubscriptionSchema),
523
+ recentDiagnostics: z.array(ConsoleClientDiagnosticEventSchema),
524
+ recentSyncTimings: z.array(z.record(z.string(), z.unknown())),
525
+ });
526
+
527
+ export type ConsoleClientDiagnosticRecord = z.infer<
528
+ typeof ConsoleClientDiagnosticRecordSchema
529
+ >;
530
+
531
+ // ============================================================================
532
+ // Handler Schemas
533
+ // ============================================================================
534
+
535
+ export const ConsoleHandlerSchema = z.object({
536
+ table: z.string(),
537
+ dependsOn: z.array(z.string()).optional(),
538
+ snapshotChunkTtlMs: z.number().int().optional(),
539
+ });
540
+
541
+ export type ConsoleHandler = z.infer<typeof ConsoleHandlerSchema>;
542
+
543
+ // ============================================================================
544
+ // Prune & Compact Schemas
545
+ // ============================================================================
546
+
547
+ export const ConsolePrunePreviewSchema = z.object({
548
+ watermarkCommitSeq: z.number().int(),
549
+ commitsToDelete: z.number().int(),
550
+ });
551
+
552
+ export type ConsolePrunePreview = z.infer<typeof ConsolePrunePreviewSchema>;
553
+
554
+ export const ConsolePruneResultSchema = z.object({
555
+ deletedCommits: z.number().int(),
556
+ });
557
+
558
+ export type ConsolePruneResult = z.infer<typeof ConsolePruneResultSchema>;
559
+
560
+ export const ConsoleCompactResultSchema = z.object({
561
+ deletedChanges: z.number().int(),
562
+ });
563
+
564
+ export type ConsoleCompactResult = z.infer<typeof ConsoleCompactResultSchema>;
565
+
566
+ // ============================================================================
567
+ // Evict Schema
568
+ // ============================================================================
569
+
570
+ export const ConsoleEvictResultSchema = z.object({
571
+ evicted: z.boolean(),
572
+ });
573
+
574
+ export type ConsoleEvictResult = z.infer<typeof ConsoleEvictResultSchema>;
575
+
576
+ // ============================================================================
577
+ // Request Event Schemas
578
+ // ============================================================================
579
+
580
+ export const ConsoleRequestEventSchema = z.object({
581
+ eventId: z.number().int(),
582
+ partitionId: z.string(),
583
+ requestId: z.string(),
584
+ traceId: z.string().nullable(),
585
+ spanId: z.string().nullable(),
586
+ eventType: z.enum(['sync', 'push', 'pull']),
587
+ syncPath: z.enum(['http-combined', 'ws-push']),
588
+ transportPath: z.enum(['direct', 'relay']),
589
+ actorId: z.string(),
590
+ clientId: z.string(),
591
+ statusCode: z.number().int(),
592
+ outcome: z.string(),
593
+ responseStatus: z.string(),
594
+ errorCode: z.string().nullable(),
595
+ durationMs: z.number().int(),
596
+ commitSeq: z.number().int().nullable(),
597
+ operationCount: z.number().int().nullable(),
598
+ rowCount: z.number().int().nullable(),
599
+ subscriptionCount: z.number().int().nullable(),
600
+ scopesSummary: z
601
+ .record(z.string(), z.union([z.string(), z.array(z.string())]))
602
+ .nullable(),
603
+ responseSummary: ConsoleRequestEventResponseSummarySchema.nullable(),
604
+ tables: z.array(z.string()),
605
+ errorMessage: z.string().nullable(),
606
+ payloadRef: z.string().nullable(),
607
+ createdAt: z.string(),
608
+ });
609
+
610
+ export type ConsoleRequestEvent = z.infer<typeof ConsoleRequestEventSchema>;
611
+
612
+ export const ConsoleRowInvestigationResponseSchema = z.object({
613
+ table: z.string(),
614
+ rowId: z.string(),
615
+ partitionId: z.string(),
616
+ clientId: z.string().nullable(),
617
+ rowKnown: z.boolean(),
618
+ latestCommitSeq: z.number().int().nullable(),
619
+ latestOp: z.enum(['upsert', 'delete']).nullable(),
620
+ client: ConsoleRowInvestigationClientSchema.nullable(),
621
+ scopeEligibility: ConsoleRowInvestigationScopeEligibilitySchema,
622
+ subscriptionEvidence: ConsoleRowInvestigationSubscriptionEvidenceSchema,
623
+ requestEvidence: ConsoleRowInvestigationRequestEvidenceSchema,
624
+ snapshotEvidence: ConsoleRowInvestigationSnapshotEvidenceSchema,
625
+ realtimeEvidence: ConsoleRowInvestigationRealtimeEvidenceSchema,
626
+ history: z.array(ConsoleRowHistoryEntrySchema),
627
+ relevantEvents: z.array(ConsoleRequestEventSchema),
628
+ findings: z.array(ConsoleRowInvestigationFindingSchema),
629
+ nextCursor: z.number().int().nullable(),
630
+ });
631
+
632
+ export type ConsoleRowInvestigationResponse = z.infer<
633
+ typeof ConsoleRowInvestigationResponseSchema
634
+ >;
635
+
636
+ export const ConsoleRequestPayloadSchema = z.object({
637
+ payloadRef: z.string(),
638
+ partitionId: z.string(),
639
+ requestPayload: z.unknown(),
640
+ responsePayload: z.unknown().nullable(),
641
+ createdAt: z.string(),
642
+ });
643
+
644
+ export type ConsoleRequestPayload = z.infer<typeof ConsoleRequestPayloadSchema>;
645
+
646
+ export const ConsoleTimelineItemSchema = z.object({
647
+ type: z.enum(['commit', 'event']),
648
+ timestamp: z.string(),
649
+ commit: ConsoleCommitListItemSchema.nullable(),
650
+ event: ConsoleRequestEventSchema.nullable(),
651
+ });
652
+
653
+ export type ConsoleTimelineItem = z.infer<typeof ConsoleTimelineItemSchema>;
654
+
655
+ export const ConsoleClearEventsResultSchema = z.object({
656
+ deletedCount: z.number().int(),
657
+ });
658
+
659
+ export type ConsoleClearEventsResult = z.infer<
660
+ typeof ConsoleClearEventsResultSchema
661
+ >;
662
+
663
+ export const ConsolePruneEventsResultSchema = z.object({
664
+ deletedCount: z.number().int(),
665
+ requestEventsDeleted: z.number().int().nonnegative(),
666
+ operationEventsDeleted: z.number().int().nonnegative(),
667
+ realtimeEventsDeleted: z.number().int().nonnegative(),
668
+ payloadDeletedCount: z.number().int().nonnegative(),
669
+ });
670
+
671
+ export type ConsolePruneEventsResult = z.infer<
672
+ typeof ConsolePruneEventsResultSchema
673
+ >;
674
+
675
+ // ============================================================================
676
+ // Operation Audit Schemas
677
+ // ============================================================================
678
+
679
+ export const ConsoleOperationTypeSchema = z.enum([
680
+ 'prune',
681
+ 'compact',
682
+ 'notify_data_change',
683
+ 'evict_client',
684
+ ]);
685
+
686
+ export type ConsoleOperationType = z.infer<typeof ConsoleOperationTypeSchema>;
687
+
688
+ export const ConsoleOperationEventSchema = z.object({
689
+ operationId: z.number().int(),
690
+ operationType: ConsoleOperationTypeSchema,
691
+ consoleUserId: z.string().nullable(),
692
+ partitionId: z.string().nullable(),
693
+ targetClientId: z.string().nullable(),
694
+ requestPayload: z.unknown().nullable(),
695
+ resultPayload: z.unknown().nullable(),
696
+ createdAt: z.string(),
697
+ });
698
+
699
+ export type ConsoleOperationEvent = z.infer<typeof ConsoleOperationEventSchema>;
700
+
701
+ // ============================================================================
702
+ // API Key Schemas
703
+ // ============================================================================
704
+
705
+ export const ApiKeyTypeSchema = z.enum(['relay', 'proxy', 'admin']);
706
+ export type ApiKeyType = z.infer<typeof ApiKeyTypeSchema>;
707
+
708
+ export const ConsoleApiKeySchema = z.object({
709
+ keyId: z.string(),
710
+ keyPrefix: z.string(),
711
+ name: z.string(),
712
+ keyType: ApiKeyTypeSchema,
713
+ scopeKeys: z.array(z.string()),
714
+ actorId: z.string().nullable(),
715
+ createdAt: z.string(),
716
+ expiresAt: z.string().nullable(),
717
+ lastUsedAt: z.string().nullable(),
718
+ revokedAt: z.string().nullable(),
719
+ });
720
+
721
+ export type ConsoleApiKey = z.infer<typeof ConsoleApiKeySchema>;
722
+
723
+ export const ConsoleApiKeyCreateRequestSchema = z.object({
724
+ name: z.string().min(1),
725
+ keyType: ApiKeyTypeSchema,
726
+ scopeKeys: z.array(z.string()).optional(),
727
+ actorId: z.string().optional(),
728
+ expiresInDays: z.number().int().positive().optional(),
729
+ });
730
+
731
+ export const ConsoleApiKeyCreateResponseSchema = z.object({
732
+ key: ConsoleApiKeySchema,
733
+ secretKey: z.string(),
734
+ });
735
+
736
+ export type ConsoleApiKeyCreateResponse = z.infer<
737
+ typeof ConsoleApiKeyCreateResponseSchema
738
+ >;
739
+
740
+ export const ConsoleApiKeyRevokeResponseSchema = z.object({
741
+ revoked: z.boolean(),
742
+ });
743
+
744
+ export const ConsoleApiKeyBulkRevokeRequestSchema = z.object({
745
+ keyIds: z.array(z.string().min(1)).min(1).max(200),
746
+ });
747
+
748
+ export const ConsoleApiKeyBulkRevokeResponseSchema = z.object({
749
+ requestedCount: z.number().int().nonnegative(),
750
+ revokedCount: z.number().int().nonnegative(),
751
+ alreadyRevokedCount: z.number().int().nonnegative(),
752
+ notFoundCount: z.number().int().nonnegative(),
753
+ revokedKeyIds: z.array(z.string()),
754
+ alreadyRevokedKeyIds: z.array(z.string()),
755
+ notFoundKeyIds: z.array(z.string()),
756
+ });
757
+
758
+ export type ConsoleApiKeyBulkRevokeResponse = z.infer<
759
+ typeof ConsoleApiKeyBulkRevokeResponseSchema
760
+ >;
761
+
762
+ // ============================================================================
763
+ // Pagination Schemas (Console-specific)
764
+ // ============================================================================
765
+
766
+ export const ConsolePaginationQuerySchema = z.object({
767
+ limit: z.coerce.number().int().min(1).max(100).default(50),
768
+ offset: z.coerce.number().int().min(0).max(10_000).default(0),
769
+ });
770
+
771
+ export const ConsolePartitionQuerySchema = z.object({
772
+ partitionId: z.string().min(1).optional(),
773
+ });
774
+
775
+ export const ConsolePartitionedPaginationQuerySchema =
776
+ ConsolePaginationQuerySchema.extend({
777
+ partitionId: z.string().min(1).optional(),
778
+ });
779
+
780
+ export const ConsolePaginatedResponseSchema = <T extends z.ZodTypeAny>(
781
+ itemSchema: T
782
+ ) =>
783
+ z.object({
784
+ items: z.array(itemSchema),
785
+ total: z.number().int(),
786
+ offset: z.number().int(),
787
+ limit: z.number().int(),
788
+ });
789
+
790
+ export type ConsolePaginatedResponse<T> = {
791
+ items: T[];
792
+ total: number;
793
+ offset: number;
794
+ limit: number;
795
+ };
796
+
797
+ export const ConsoleTimelineQuerySchema =
798
+ ConsolePartitionedPaginationQuerySchema.extend({
799
+ view: z.enum(['all', 'commits', 'events']).default('all'),
800
+ eventType: z.enum(['sync', 'push', 'pull']).optional(),
801
+ actorId: z.string().optional(),
802
+ clientId: z.string().optional(),
803
+ requestId: z.string().optional(),
804
+ traceId: z.string().optional(),
805
+ syncAttemptId: z.string().optional(),
806
+ table: z.string().optional(),
807
+ outcome: z.string().optional(),
808
+ search: z.string().optional(),
809
+ from: z.string().datetime().optional(),
810
+ to: z.string().datetime().optional(),
811
+ });
812
+
813
+ export const ConsoleOperationsQuerySchema =
814
+ ConsolePartitionedPaginationQuerySchema.extend({
815
+ operationType: ConsoleOperationTypeSchema.optional(),
816
+ });
817
+
818
+ // ============================================================================
819
+ // Time-Series Stats Schemas
820
+ // ============================================================================
821
+
822
+ const TimeseriesIntervalSchema = z.enum(['minute', 'hour', 'day']);
823
+ const TimeseriesRangeSchema = z.enum(['1h', '6h', '24h', '7d', '30d']);
824
+ export const TimeseriesQuerySchema = z.object({
825
+ interval: TimeseriesIntervalSchema.default('hour'),
826
+ range: TimeseriesRangeSchema.default('24h'),
827
+ partitionId: z.string().min(1).optional(),
828
+ });
829
+
830
+ export const TimeseriesBucketSchema = z.object({
831
+ timestamp: z.string(),
832
+ pushCount: z.number().int(),
833
+ pullCount: z.number().int(),
834
+ errorCount: z.number().int(),
835
+ avgLatencyMs: z.number(),
836
+ });
837
+
838
+ export type TimeseriesBucket = z.infer<typeof TimeseriesBucketSchema>;
839
+
840
+ export const TimeseriesStatsResponseSchema = z.object({
841
+ buckets: z.array(TimeseriesBucketSchema),
842
+ interval: TimeseriesIntervalSchema,
843
+ range: TimeseriesRangeSchema,
844
+ });
845
+
846
+ export type TimeseriesStatsResponse = z.infer<
847
+ typeof TimeseriesStatsResponseSchema
848
+ >;
849
+
850
+ // ============================================================================
851
+ // Latency Percentiles Schemas
852
+ // ============================================================================
853
+
854
+ export const LatencyPercentilesSchema = z.object({
855
+ p50: z.number(),
856
+ p90: z.number(),
857
+ p99: z.number(),
858
+ });
859
+
860
+ export type LatencyPercentiles = z.infer<typeof LatencyPercentilesSchema>;
861
+
862
+ export const LatencyStatsResponseSchema = z.object({
863
+ push: LatencyPercentilesSchema,
864
+ pull: LatencyPercentilesSchema,
865
+ range: TimeseriesRangeSchema,
866
+ });
867
+
868
+ export type LatencyStatsResponse = z.infer<typeof LatencyStatsResponseSchema>;
869
+
870
+ export const LatencyQuerySchema = z.object({
871
+ range: TimeseriesRangeSchema.default('24h'),
872
+ partitionId: z.string().min(1).optional(),
873
+ });
874
+
875
+ // ============================================================================
876
+ // Live Events Schemas (for WebSocket)
877
+ // ============================================================================
878
+
879
+ export const LiveEventSchema = z.object({
880
+ type: z.enum(['sync', 'push', 'pull', 'commit', 'client_update']),
881
+ timestamp: z.string(),
882
+ data: z.record(z.string(), z.unknown()),
883
+ });
884
+
885
+ export type LiveEvent = z.infer<typeof LiveEventSchema>;
886
+
887
+ // ---------------------------------------------------------------------------
888
+ // Blob storage
889
+ // ---------------------------------------------------------------------------
890
+
891
+ export const ConsoleBlobSchema = z.object({
892
+ key: z.string(),
893
+ size: z.number().int(),
894
+ uploaded: z.string(),
895
+ httpMetadata: z.object({ contentType: z.string().optional() }).optional(),
896
+ });
897
+
898
+ export type ConsoleBlob = z.infer<typeof ConsoleBlobSchema>;
899
+
900
+ export const ConsoleBlobListQuerySchema = z.object({
901
+ prefix: z.string().optional(),
902
+ cursor: z.string().optional(),
903
+ limit: z.coerce.number().int().min(1).max(1000).default(100),
904
+ });
905
+
906
+ export const ConsoleBlobListResponseSchema = z.object({
907
+ items: z.array(ConsoleBlobSchema),
908
+ truncated: z.boolean(),
909
+ cursor: z.string().nullable(),
910
+ });
911
+
912
+ export const ConsoleBlobDeleteResponseSchema = z.object({
913
+ deleted: z.boolean(),
914
+ });