@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,346 @@
1
+ /**
2
+ * S3-compatible blob storage adapter.
3
+ *
4
+ * Works with AWS S3, Cloudflare R2, MinIO, and other S3-compatible services.
5
+ * Requires @aws-sdk/client-s3 and @aws-sdk/s3-request-presigner as peer dependencies.
6
+ */
7
+
8
+ import type {
9
+ BlobSignDownloadOptions,
10
+ BlobSignedUpload,
11
+ BlobSignUploadOptions,
12
+ BlobStorageAdapter,
13
+ } from '@syncular/core';
14
+
15
+ /**
16
+ * S3 client interface (minimal subset of @aws-sdk/client-s3).
17
+ * This allows users to pass in their own configured S3 client.
18
+ */
19
+ export interface S3ClientLike {
20
+ send(command: unknown): Promise<unknown>;
21
+ }
22
+
23
+ /**
24
+ * Function to create presigned URLs.
25
+ * This should be getSignedUrl from @aws-sdk/s3-request-presigner.
26
+ */
27
+ export type GetSignedUrlFn = (
28
+ client: S3ClientLike,
29
+ command: unknown,
30
+ options: { expiresIn: number }
31
+ ) => Promise<string>;
32
+
33
+ /**
34
+ * S3 command constructors.
35
+ * These should be imported from @aws-sdk/client-s3.
36
+ */
37
+ export interface S3Commands {
38
+ PutObjectCommand: new (input: {
39
+ Bucket: string;
40
+ Key: string;
41
+ ContentLength?: number;
42
+ ContentType?: string;
43
+ ChecksumSHA256?: string;
44
+ Body?: Uint8Array | ReadableStream<Uint8Array>;
45
+ }) => unknown;
46
+ GetObjectCommand: new (input: { Bucket: string; Key: string }) => unknown;
47
+ HeadObjectCommand: new (input: { Bucket: string; Key: string }) => unknown;
48
+ DeleteObjectCommand: new (input: { Bucket: string; Key: string }) => unknown;
49
+ }
50
+
51
+ export interface S3BlobStorageAdapterOptions {
52
+ /** S3 client instance */
53
+ client: S3ClientLike;
54
+ /** S3 bucket name */
55
+ bucket: string;
56
+ /** Optional key prefix for all blobs */
57
+ keyPrefix?: string;
58
+ /** S3 command constructors */
59
+ commands: S3Commands;
60
+ /** getSignedUrl function from @aws-sdk/s3-request-presigner */
61
+ getSignedUrl: GetSignedUrlFn;
62
+ /**
63
+ * Whether to require SHA-256 checksum validation on upload.
64
+ * Supported by S3 and R2. Default: true.
65
+ */
66
+ requireChecksum?: boolean;
67
+ }
68
+
69
+ /**
70
+ * Create an S3-compatible blob storage adapter.
71
+ *
72
+ * @example
73
+ * ```typescript
74
+ * import { S3Client, PutObjectCommand, GetObjectCommand, HeadObjectCommand, DeleteObjectCommand } from '@aws-sdk/client-s3';
75
+ * import { getSignedUrl } from '@aws-sdk/s3-request-presigner';
76
+ *
77
+ * const adapter = createS3BlobStorageAdapter({
78
+ * client: new S3Client({ region: 'us-east-1' }),
79
+ * bucket: 'my-bucket',
80
+ * keyPrefix: 'blobs/',
81
+ * commands: { PutObjectCommand, GetObjectCommand, HeadObjectCommand, DeleteObjectCommand },
82
+ * getSignedUrl,
83
+ * });
84
+ * ```
85
+ */
86
+ export function createS3BlobStorageAdapter(
87
+ options: S3BlobStorageAdapterOptions
88
+ ): BlobStorageAdapter {
89
+ const {
90
+ client,
91
+ bucket,
92
+ keyPrefix = '',
93
+ commands,
94
+ getSignedUrl,
95
+ requireChecksum = true,
96
+ } = options;
97
+
98
+ function getKey(hash: string, partitionId?: string): string {
99
+ // Remove "sha256:" prefix and use hex as key
100
+ const hex = hash.startsWith('sha256:') ? hash.slice(7) : hash;
101
+ const normalizedPartition = partitionId?.trim();
102
+ if (!normalizedPartition || normalizedPartition === 'default') {
103
+ return `${keyPrefix}${hex}`;
104
+ }
105
+ return `${keyPrefix}${encodeURIComponent(normalizedPartition)}/${hex}`;
106
+ }
107
+
108
+ return {
109
+ name: 's3',
110
+
111
+ async signUpload(opts: BlobSignUploadOptions): Promise<BlobSignedUpload> {
112
+ const key = getKey(opts.hash, opts.partitionId);
113
+
114
+ // Extract hex hash for checksum (S3 expects base64-encoded SHA-256)
115
+ const hexHash = opts.hash.startsWith('sha256:')
116
+ ? opts.hash.slice(7)
117
+ : opts.hash;
118
+
119
+ // Convert hex to base64 for S3 checksum header
120
+ const checksumBase64 = hexToBase64(hexHash);
121
+
122
+ const commandInput: {
123
+ Bucket: string;
124
+ Key: string;
125
+ ContentLength: number;
126
+ ContentType: string;
127
+ ChecksumSHA256?: string;
128
+ } = {
129
+ Bucket: bucket,
130
+ Key: key,
131
+ ContentLength: opts.size,
132
+ ContentType: opts.mimeType,
133
+ };
134
+
135
+ if (requireChecksum) {
136
+ commandInput.ChecksumSHA256 = checksumBase64;
137
+ }
138
+
139
+ const command = new commands.PutObjectCommand(commandInput);
140
+ const url = await getSignedUrl(client, command, {
141
+ expiresIn: opts.expiresIn,
142
+ });
143
+
144
+ const headers: Record<string, string> = {
145
+ 'Content-Type': opts.mimeType,
146
+ 'Content-Length': String(opts.size),
147
+ };
148
+
149
+ if (requireChecksum) {
150
+ headers['x-amz-checksum-sha256'] = checksumBase64;
151
+ }
152
+
153
+ return {
154
+ url,
155
+ method: 'PUT',
156
+ headers,
157
+ };
158
+ },
159
+
160
+ async signDownload(opts: BlobSignDownloadOptions): Promise<string> {
161
+ const key = getKey(opts.hash, opts.partitionId);
162
+ const command = new commands.GetObjectCommand({
163
+ Bucket: bucket,
164
+ Key: key,
165
+ });
166
+ return getSignedUrl(client, command, { expiresIn: opts.expiresIn });
167
+ },
168
+
169
+ async exists(
170
+ hash: string,
171
+ options?: { partitionId?: string }
172
+ ): Promise<boolean> {
173
+ const key = getKey(hash, options?.partitionId);
174
+ try {
175
+ const command = new commands.HeadObjectCommand({
176
+ Bucket: bucket,
177
+ Key: key,
178
+ });
179
+ await client.send(command);
180
+ return true;
181
+ } catch (err) {
182
+ // Check for NotFound error
183
+ if (isNotFoundError(err)) {
184
+ return false;
185
+ }
186
+ throw err;
187
+ }
188
+ },
189
+
190
+ async delete(
191
+ hash: string,
192
+ options?: { partitionId?: string }
193
+ ): Promise<void> {
194
+ const key = getKey(hash, options?.partitionId);
195
+ const command = new commands.DeleteObjectCommand({
196
+ Bucket: bucket,
197
+ Key: key,
198
+ });
199
+ await client.send(command);
200
+ },
201
+
202
+ async getMetadata(
203
+ hash: string,
204
+ options?: { partitionId?: string }
205
+ ): Promise<{ size: number; mimeType?: string } | null> {
206
+ const key = getKey(hash, options?.partitionId);
207
+ try {
208
+ const command = new commands.HeadObjectCommand({
209
+ Bucket: bucket,
210
+ Key: key,
211
+ });
212
+ const response = (await client.send(command)) as {
213
+ ContentLength?: number;
214
+ ContentType?: string;
215
+ };
216
+ return {
217
+ size: response.ContentLength ?? 0,
218
+ mimeType: response.ContentType,
219
+ };
220
+ } catch (err) {
221
+ if (isNotFoundError(err)) {
222
+ return null;
223
+ }
224
+ throw err;
225
+ }
226
+ },
227
+
228
+ async put(
229
+ hash: string,
230
+ data: Uint8Array,
231
+ _metadata?: Record<string, unknown>,
232
+ options?: { partitionId?: string }
233
+ ): Promise<void> {
234
+ const key = getKey(hash, options?.partitionId);
235
+ const command = new commands.PutObjectCommand({
236
+ Bucket: bucket,
237
+ Key: key,
238
+ Body: data,
239
+ ContentLength: data.length,
240
+ ContentType: 'application/octet-stream',
241
+ });
242
+ await client.send(command);
243
+ },
244
+
245
+ async get(
246
+ hash: string,
247
+ options?: { partitionId?: string }
248
+ ): Promise<Uint8Array | null> {
249
+ const key = getKey(hash, options?.partitionId);
250
+ try {
251
+ const command = new commands.GetObjectCommand({
252
+ Bucket: bucket,
253
+ Key: key,
254
+ });
255
+ const response = (await client.send(command)) as {
256
+ Body?: { transformToByteArray(): Promise<Uint8Array> };
257
+ };
258
+ if (!response.Body) return null;
259
+ return response.Body.transformToByteArray();
260
+ } catch (err) {
261
+ if (isNotFoundError(err)) {
262
+ return null;
263
+ }
264
+ throw err;
265
+ }
266
+ },
267
+
268
+ async getStream(
269
+ hash: string,
270
+ options?: { partitionId?: string }
271
+ ): Promise<ReadableStream<Uint8Array> | null> {
272
+ const key = getKey(hash, options?.partitionId);
273
+ try {
274
+ const command = new commands.GetObjectCommand({
275
+ Bucket: bucket,
276
+ Key: key,
277
+ });
278
+ const response = (await client.send(command)) as {
279
+ Body?: { transformToWebStream(): ReadableStream<Uint8Array> };
280
+ };
281
+ if (!response.Body) return null;
282
+ return response.Body.transformToWebStream();
283
+ } catch (err) {
284
+ if (isNotFoundError(err)) {
285
+ return null;
286
+ }
287
+ throw err;
288
+ }
289
+ },
290
+ };
291
+ }
292
+
293
+ function isNotFoundError(err: unknown): boolean {
294
+ if (typeof err !== 'object' || err === null) return false;
295
+ const e = err as { name?: string; $metadata?: { httpStatusCode?: number } };
296
+ return (
297
+ e.name === 'NotFound' ||
298
+ e.name === 'NoSuchKey' ||
299
+ e.$metadata?.httpStatusCode === 404
300
+ );
301
+ }
302
+
303
+ function hexToBase64(hex: string): string {
304
+ const bytes = new Uint8Array(hex.length / 2);
305
+ for (let i = 0; i < bytes.length; i++) {
306
+ bytes[i] = Number.parseInt(hex.slice(i * 2, i * 2 + 2), 16);
307
+ }
308
+
309
+ // Use Buffer if available (Node/Bun), otherwise manual base64
310
+ if (typeof Buffer !== 'undefined') {
311
+ return Buffer.from(bytes).toString('base64');
312
+ }
313
+
314
+ // Manual base64 encoding
315
+ const chars =
316
+ 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';
317
+ let result = '';
318
+ const len = bytes.length;
319
+ const remainder = len % 3;
320
+
321
+ for (let i = 0; i < len - remainder; i += 3) {
322
+ const a = bytes[i]!;
323
+ const b = bytes[i + 1]!;
324
+ const c = bytes[i + 2]!;
325
+ result +=
326
+ chars.charAt((a >> 2) & 0x3f) +
327
+ chars.charAt(((a << 4) | (b >> 4)) & 0x3f) +
328
+ chars.charAt(((b << 2) | (c >> 6)) & 0x3f) +
329
+ chars.charAt(c & 0x3f);
330
+ }
331
+
332
+ if (remainder === 1) {
333
+ const a = bytes[len - 1]!;
334
+ result += `${chars.charAt((a >> 2) & 0x3f) + chars.charAt((a << 4) & 0x3f)}==`;
335
+ } else if (remainder === 2) {
336
+ const a = bytes[len - 2]!;
337
+ const b = bytes[len - 1]!;
338
+ result +=
339
+ chars.charAt((a >> 2) & 0x3f) +
340
+ chars.charAt(((a << 4) | (b >> 4)) & 0x3f) +
341
+ chars.charAt((b << 2) & 0x3f) +
342
+ '=';
343
+ }
344
+
345
+ return result;
346
+ }
package/src/schema.ts CHANGED
@@ -5,6 +5,7 @@
5
5
  * - sync_commits: one row per committed push
6
6
  * - sync_changes: one row per emitted change, stamped with scopes
7
7
  * - sync_table_commits: commit routing index for fast pull
8
+ * - sync_scope_commits: scope routing index for scoped incremental pull
8
9
  */
9
10
 
10
11
  import type { SyncOp } from '@syncular/core';
@@ -32,6 +33,10 @@ export interface SyncCommitsTable {
32
33
  result_json: unknown | null;
33
34
  /** Number of emitted changes (denormalized for observability) */
34
35
  change_count: Generated<number>;
36
+ /** Hex SHA-256 digest of the canonical persisted commit payload */
37
+ commit_digest: Generated<string | null>;
38
+ /** Hex SHA-256 root chaining this commit to the previous partition root */
39
+ commit_chain_root: Generated<string | null>;
35
40
  /**
36
41
  * Tables affected by this commit (for realtime notifications).
37
42
  * Array of table names that had changes.
@@ -83,6 +88,15 @@ export interface SyncClientCursorsTable {
83
88
  * This is the intersection of requested scopes and allowed scopes.
84
89
  */
85
90
  effective_scopes: unknown;
91
+ /**
92
+ * Last active realtime subscription snapshot for websocket binary packs.
93
+ *
94
+ * This duplicates the protocol-level subscription id/table/scope/cursor/root
95
+ * shape from the latest successful pull so a restarted realtime server can
96
+ * rebuild scoped binary notifications before the client performs another
97
+ * HTTP pull.
98
+ */
99
+ realtime_subscriptions: unknown | null;
86
100
  /** Last update timestamp */
87
101
  updated_at: Generated<string>;
88
102
  }
@@ -105,7 +119,11 @@ export interface SyncSnapshotChunksTable {
105
119
  row_cursor: string;
106
120
  /** Snapshot row limit used to produce this chunk */
107
121
  row_limit: number;
108
- /** Row encoding (e.g. 'json-row-frame-v1') */
122
+ /** Cursor after this chunk; null means no next row for this table */
123
+ next_row_cursor?: string | null;
124
+ /** 1 when this chunk reaches the end of the table snapshot */
125
+ is_last_page?: number;
126
+ /** Row encoding (e.g. 'binary-table-v1') */
109
127
  encoding: string;
110
128
  /** Compression algorithm (e.g. 'gzip') */
111
129
  compression: string;
@@ -123,6 +141,108 @@ export interface SyncSnapshotChunksTable {
123
141
  expires_at: string;
124
142
  }
125
143
 
144
+ /**
145
+ * Cached scoped snapshot artifacts.
146
+ *
147
+ * Artifacts are larger immutable bootstrap payloads, such as scoped SQLite
148
+ * snapshot files, addressed by a verified manifest and stored in object
149
+ * storage via blob_hash.
150
+ */
151
+ export interface SyncSnapshotArtifactsTable {
152
+ /** Opaque artifact id */
153
+ artifact_id: string;
154
+ /** Logical partition key (tenant / demo / workspace) */
155
+ partition_id: string;
156
+ /** Effective scope key this artifact belongs to */
157
+ scope_key: string;
158
+ /** Stable subscription id this artifact serves */
159
+ subscription_id: string;
160
+ /** App table represented by the artifact */
161
+ table: string;
162
+ /** Artifact format (e.g. 'sqlite-snapshot-v1') */
163
+ artifact_kind: string;
164
+ /** App schema/cache semantic version */
165
+ schema_version: string;
166
+ /** Snapshot as-of commit sequence */
167
+ as_of_commit_seq: number;
168
+ /** Snapshot row cursor key (empty string represents null) */
169
+ row_cursor: string;
170
+ /** Snapshot row limit used to produce this artifact */
171
+ row_limit: number;
172
+ /** Number of rows included in the artifact */
173
+ row_count: number;
174
+ /** Cursor after this artifact; null means no next row for this table */
175
+ next_row_cursor?: string | null;
176
+ /** 1 when this artifact starts at the table's first page */
177
+ is_first_page: number;
178
+ /** 1 when this artifact reaches the end of the table snapshot */
179
+ is_last_page: number;
180
+ /** Artifact compression algorithm */
181
+ compression: string;
182
+ /** Hex-encoded sha256 of artifact body bytes */
183
+ sha256: string;
184
+ /** Byte length of artifact body bytes */
185
+ byte_length: number;
186
+ /** Hex digest of the scoped artifact manifest */
187
+ manifest_digest: string;
188
+ /** Normalized JSON feature set */
189
+ feature_set_json: string;
190
+ /** Canonical manifest JSON */
191
+ manifest_json: string;
192
+ /** Reference to blob storage */
193
+ blob_hash: string;
194
+ /** Created timestamp */
195
+ created_at: Generated<string>;
196
+ /** Expiration timestamp (server may delete after this) */
197
+ expires_at: string;
198
+ }
199
+
200
+ /**
201
+ * Shared encrypted CRDT update log.
202
+ *
203
+ * One physical table stores updates for every encrypted CRDT field. The logical
204
+ * stream is keyed by partition_id + stream_id, where stream_id is derived from
205
+ * app_table + row_id + field_name.
206
+ */
207
+ export interface SyncCrdtUpdatesTable {
208
+ seq: Generated<number>;
209
+ partition_id: string;
210
+ stream_id: string;
211
+ app_table: string;
212
+ row_id: string;
213
+ field_name: string;
214
+ update_id: string;
215
+ actor_id: string | null;
216
+ client_id: string | null;
217
+ key_id: string;
218
+ ciphertext: string;
219
+ scopes: unknown;
220
+ created_at: Generated<string>;
221
+ }
222
+
223
+ /**
224
+ * Shared encrypted CRDT checkpoints.
225
+ *
226
+ * Checkpoints contain encrypted full Yjs/Yrs state snapshots and allow old
227
+ * update-log rows to be garbage-collected after retention rules are satisfied.
228
+ */
229
+ export interface SyncCrdtCheckpointsTable {
230
+ seq: Generated<number>;
231
+ partition_id: string;
232
+ stream_id: string;
233
+ app_table: string;
234
+ row_id: string;
235
+ field_name: string;
236
+ checkpoint_id: string;
237
+ covers_seq: number;
238
+ actor_id: string | null;
239
+ client_id: string | null;
240
+ key_id: string;
241
+ ciphertext: string;
242
+ scopes: unknown;
243
+ created_at: Generated<string>;
244
+ }
245
+
126
246
  /**
127
247
  * Index table: which commits affect which tables.
128
248
  *
@@ -136,6 +256,20 @@ export interface SyncTableCommitsTable {
136
256
  commit_seq: number;
137
257
  }
138
258
 
259
+ /**
260
+ * Index table: which commits affect which table/scope route keys.
261
+ *
262
+ * Used to avoid scanning table-level commits that cannot match a scoped
263
+ * subscription. JSON scope filtering still validates exact multi-scope matches.
264
+ */
265
+ export interface SyncScopeCommitsTable {
266
+ /** Logical partition key (tenant / demo / workspace) */
267
+ partition_id: string;
268
+ table: string;
269
+ scope_key: string;
270
+ commit_seq: number;
271
+ }
272
+
139
273
  /**
140
274
  * Database interface for sync infrastructure tables
141
275
  * Merge this with your app's database interface
@@ -144,8 +278,12 @@ export interface SyncCoreDb {
144
278
  sync_commits: SyncCommitsTable;
145
279
  sync_changes: SyncChangesTable;
146
280
  sync_client_cursors: SyncClientCursorsTable;
281
+ sync_crdt_updates: SyncCrdtUpdatesTable;
282
+ sync_crdt_checkpoints: SyncCrdtCheckpointsTable;
147
283
  sync_table_commits: SyncTableCommitsTable;
284
+ sync_scope_commits: SyncScopeCommitsTable;
148
285
  sync_snapshot_chunks: SyncSnapshotChunksTable;
286
+ sync_snapshot_artifacts: SyncSnapshotArtifactsTable;
149
287
  }
150
288
 
151
289
  /**
@@ -156,6 +294,8 @@ export interface SyncCommitRow {
156
294
  actor_id: string;
157
295
  created_at: string;
158
296
  result_json: unknown | null;
297
+ commit_digest: string | null;
298
+ commit_chain_root: string | null;
159
299
  }
160
300
 
161
301
  /**