@syncular/server 0.1.2 → 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (758) hide show
  1. package/README.md +773 -13
  2. package/dist/admin.d.ts +136 -0
  3. package/dist/admin.js +168 -0
  4. package/dist/blob-handlers.d.ts +69 -0
  5. package/dist/blob-handlers.js +245 -0
  6. package/dist/blob-store.d.ts +111 -0
  7. package/dist/blob-store.js +0 -0
  8. package/dist/content-encoding.d.ts +27 -0
  9. package/dist/content-encoding.js +69 -0
  10. package/dist/context.d.ts +151 -0
  11. package/dist/context.js +21 -0
  12. package/dist/crdt-merger.d.ts +28 -0
  13. package/dist/crdt-merger.js +11 -0
  14. package/dist/d1-storage.d.ts +50 -0
  15. package/dist/d1-storage.js +0 -0
  16. package/dist/errors.d.ts +35 -9
  17. package/dist/errors.js +220 -11
  18. package/dist/events-ring.d.ts +55 -0
  19. package/dist/events-ring.js +96 -0
  20. package/dist/events.d.ts +231 -0
  21. package/dist/events.js +22 -0
  22. package/dist/frame-bytes.d.ts +20 -0
  23. package/dist/frame-bytes.js +75 -0
  24. package/dist/handler.d.ts +9 -0
  25. package/dist/handler.js +490 -0
  26. package/dist/index.d.ts +42 -33
  27. package/dist/index.js +45 -27
  28. package/dist/lease-store.d.ts +50 -0
  29. package/dist/lease-store.js +0 -0
  30. package/dist/pg-executor-pglite.d.ts +27 -0
  31. package/dist/pg-executor-pglite.js +33 -0
  32. package/dist/pg-executor.d.ts +67 -0
  33. package/dist/pg-executor.js +56 -0
  34. package/dist/postgres-fanout.d.ts +83 -0
  35. package/dist/postgres-fanout.js +71 -0
  36. package/dist/postgres-storage.d.ts +69 -0
  37. package/dist/postgres-storage.js +766 -0
  38. package/dist/prune.d.ts +24 -39
  39. package/dist/prune.js +44 -146
  40. package/dist/pull.d.ts +42 -67
  41. package/dist/pull.js +387 -1187
  42. package/dist/push.d.ts +31 -66
  43. package/dist/push.js +406 -655
  44. package/dist/realtime.d.ts +197 -0
  45. package/dist/realtime.js +848 -0
  46. package/dist/relational-rows.d.ts +229 -0
  47. package/dist/relational-rows.js +514 -0
  48. package/dist/s3-blob-store.d.ts +142 -0
  49. package/dist/s3-blob-store.js +458 -0
  50. package/dist/s3-segment-store.d.ts +95 -0
  51. package/dist/s3-segment-store.js +380 -0
  52. package/dist/schema.d.ts +82 -286
  53. package/dist/schema.js +133 -9
  54. package/dist/scopes.d.ts +48 -0
  55. package/dist/scopes.js +98 -0
  56. package/dist/segment-download.d.ts +14 -0
  57. package/dist/segment-download.js +125 -0
  58. package/dist/segment-store.d.ts +81 -0
  59. package/dist/segment-store.js +63 -0
  60. package/dist/signed-url.d.ts +139 -0
  61. package/dist/signed-url.js +143 -0
  62. package/dist/sigv4.d.ts +97 -0
  63. package/dist/sigv4.js +161 -0
  64. package/dist/sqlite-blob-store.d.ts +22 -0
  65. package/dist/sqlite-blob-store.js +86 -0
  66. package/dist/sqlite-dialect.d.ts +101 -0
  67. package/dist/sqlite-dialect.js +250 -0
  68. package/dist/sqlite-image.d.ts +27 -0
  69. package/dist/sqlite-image.js +83 -0
  70. package/dist/sqlite-lease-store.d.ts +21 -0
  71. package/dist/sqlite-lease-store.js +94 -0
  72. package/dist/sqlite-segment-store.d.ts +25 -0
  73. package/dist/sqlite-segment-store.js +115 -0
  74. package/dist/sqlite-storage.d.ts +47 -0
  75. package/dist/sqlite-storage.js +477 -0
  76. package/dist/storage.d.ts +252 -0
  77. package/dist/storage.js +1 -0
  78. package/dist/validate.d.ts +83 -0
  79. package/dist/validate.js +44 -0
  80. package/package.json +17 -325
  81. package/src/admin.ts +312 -0
  82. package/src/blob-handlers.ts +340 -0
  83. package/src/blob-store.ts +0 -0
  84. package/src/content-encoding.ts +94 -0
  85. package/src/context.ts +176 -0
  86. package/src/crdt-merger.ts +33 -0
  87. package/src/d1-storage.ts +0 -0
  88. package/src/errors.ts +241 -19
  89. package/src/events-ring.ts +116 -0
  90. package/src/events.ts +291 -0
  91. package/src/frame-bytes.ts +94 -0
  92. package/src/handler.ts +678 -0
  93. package/src/index.ts +44 -27
  94. package/src/lease-store.ts +0 -0
  95. package/src/pg-executor-pglite.ts +63 -0
  96. package/src/pg-executor.ts +87 -0
  97. package/src/postgres-fanout.ts +143 -0
  98. package/src/postgres-storage.ts +1182 -0
  99. package/src/prune.ts +63 -289
  100. package/src/pull.ts +505 -1805
  101. package/src/push.ts +623 -1006
  102. package/src/realtime.ts +1082 -0
  103. package/src/relational-rows.ts +633 -0
  104. package/src/s3-blob-store.ts +616 -0
  105. package/src/s3-segment-store.ts +519 -0
  106. package/src/schema.ts +242 -281
  107. package/src/scopes.ts +127 -0
  108. package/src/segment-download.ts +169 -0
  109. package/src/segment-store.ts +154 -0
  110. package/src/signed-url.ts +308 -0
  111. package/src/sigv4.ts +267 -0
  112. package/src/sqlite-blob-store.ts +125 -0
  113. package/src/sqlite-dialect.ts +337 -0
  114. package/src/sqlite-image.ts +124 -0
  115. package/src/sqlite-lease-store.ts +144 -0
  116. package/src/sqlite-segment-store.ts +204 -0
  117. package/src/sqlite-storage.ts +792 -0
  118. package/src/storage.ts +316 -0
  119. package/src/validate.ts +123 -0
  120. package/dist/auth-leases.d.ts +0 -85
  121. package/dist/auth-leases.d.ts.map +0 -1
  122. package/dist/auth-leases.js +0 -368
  123. package/dist/auth-leases.js.map +0 -1
  124. package/dist/better-sqlite3.d.ts +0 -22
  125. package/dist/better-sqlite3.d.ts.map +0 -1
  126. package/dist/better-sqlite3.js +0 -16
  127. package/dist/better-sqlite3.js.map +0 -1
  128. package/dist/blobs/access.d.ts +0 -35
  129. package/dist/blobs/access.d.ts.map +0 -1
  130. package/dist/blobs/access.js +0 -149
  131. package/dist/blobs/access.js.map +0 -1
  132. package/dist/blobs/adapters/database.d.ts +0 -100
  133. package/dist/blobs/adapters/database.d.ts.map +0 -1
  134. package/dist/blobs/adapters/database.js +0 -247
  135. package/dist/blobs/adapters/database.js.map +0 -1
  136. package/dist/blobs/index.d.ts +0 -9
  137. package/dist/blobs/index.d.ts.map +0 -1
  138. package/dist/blobs/index.js +0 -9
  139. package/dist/blobs/index.js.map +0 -1
  140. package/dist/blobs/manager.d.ts +0 -220
  141. package/dist/blobs/manager.d.ts.map +0 -1
  142. package/dist/blobs/manager.js +0 -625
  143. package/dist/blobs/manager.js.map +0 -1
  144. package/dist/blobs/migrate.d.ts +0 -27
  145. package/dist/blobs/migrate.d.ts.map +0 -1
  146. package/dist/blobs/migrate.js +0 -127
  147. package/dist/blobs/migrate.js.map +0 -1
  148. package/dist/blobs/types.d.ts +0 -58
  149. package/dist/blobs/types.d.ts.map +0 -1
  150. package/dist/blobs/types.js +0 -5
  151. package/dist/blobs/types.js.map +0 -1
  152. package/dist/bun-sqlite.d.ts +0 -19
  153. package/dist/bun-sqlite.d.ts.map +0 -1
  154. package/dist/bun-sqlite.js +0 -19
  155. package/dist/bun-sqlite.js.map +0 -1
  156. package/dist/clients.d.ts +0 -15
  157. package/dist/clients.d.ts.map +0 -1
  158. package/dist/clients.js +0 -7
  159. package/dist/clients.js.map +0 -1
  160. package/dist/cloudflare/durable-object.d.ts +0 -93
  161. package/dist/cloudflare/durable-object.d.ts.map +0 -1
  162. package/dist/cloudflare/durable-object.js +0 -210
  163. package/dist/cloudflare/durable-object.js.map +0 -1
  164. package/dist/cloudflare/index.d.ts +0 -22
  165. package/dist/cloudflare/index.d.ts.map +0 -1
  166. package/dist/cloudflare/index.js +0 -22
  167. package/dist/cloudflare/index.js.map +0 -1
  168. package/dist/cloudflare/r2.d.ts +0 -180
  169. package/dist/cloudflare/r2.d.ts.map +0 -1
  170. package/dist/cloudflare/r2.js +0 -258
  171. package/dist/cloudflare/r2.js.map +0 -1
  172. package/dist/cloudflare/scope-cache.d.ts +0 -54
  173. package/dist/cloudflare/scope-cache.d.ts.map +0 -1
  174. package/dist/cloudflare/scope-cache.js +0 -223
  175. package/dist/cloudflare/scope-cache.js.map +0 -1
  176. package/dist/cloudflare/sentry.d.ts +0 -47
  177. package/dist/cloudflare/sentry.d.ts.map +0 -1
  178. package/dist/cloudflare/sentry.js +0 -163
  179. package/dist/cloudflare/sentry.js.map +0 -1
  180. package/dist/cloudflare/worker.d.ts +0 -46
  181. package/dist/cloudflare/worker.d.ts.map +0 -1
  182. package/dist/cloudflare/worker.js +0 -63
  183. package/dist/cloudflare/worker.js.map +0 -1
  184. package/dist/commit-integrity.d.ts +0 -38
  185. package/dist/commit-integrity.d.ts.map +0 -1
  186. package/dist/commit-integrity.js +0 -260
  187. package/dist/commit-integrity.js.map +0 -1
  188. package/dist/compaction.d.ts +0 -27
  189. package/dist/compaction.d.ts.map +0 -1
  190. package/dist/compaction.js +0 -49
  191. package/dist/compaction.js.map +0 -1
  192. package/dist/crdt-yjs/index.d.ts +0 -99
  193. package/dist/crdt-yjs/index.d.ts.map +0 -1
  194. package/dist/crdt-yjs/index.js +0 -629
  195. package/dist/crdt-yjs/index.js.map +0 -1
  196. package/dist/d1.d.ts +0 -13
  197. package/dist/d1.d.ts.map +0 -1
  198. package/dist/d1.js +0 -14
  199. package/dist/d1.js.map +0 -1
  200. package/dist/dialect/base.d.ts +0 -93
  201. package/dist/dialect/base.d.ts.map +0 -1
  202. package/dist/dialect/base.js +0 -181
  203. package/dist/dialect/base.js.map +0 -1
  204. package/dist/dialect/helpers.d.ts +0 -16
  205. package/dist/dialect/helpers.d.ts.map +0 -1
  206. package/dist/dialect/helpers.js +0 -83
  207. package/dist/dialect/helpers.js.map +0 -1
  208. package/dist/dialect/index.d.ts +0 -7
  209. package/dist/dialect/index.d.ts.map +0 -1
  210. package/dist/dialect/index.js +0 -7
  211. package/dist/dialect/index.js.map +0 -1
  212. package/dist/dialect/types.d.ts +0 -187
  213. package/dist/dialect/types.d.ts.map +0 -1
  214. package/dist/dialect/types.js +0 -8
  215. package/dist/dialect/types.js.map +0 -1
  216. package/dist/encrypted-crdt.d.ts +0 -67
  217. package/dist/encrypted-crdt.d.ts.map +0 -1
  218. package/dist/encrypted-crdt.js +0 -426
  219. package/dist/encrypted-crdt.js.map +0 -1
  220. package/dist/errors.d.ts.map +0 -1
  221. package/dist/errors.js.map +0 -1
  222. package/dist/filesystem/index.d.ts +0 -44
  223. package/dist/filesystem/index.d.ts.map +0 -1
  224. package/dist/filesystem/index.js +0 -164
  225. package/dist/filesystem/index.js.map +0 -1
  226. package/dist/handlers/collection.d.ts +0 -20
  227. package/dist/handlers/collection.d.ts.map +0 -1
  228. package/dist/handlers/collection.js +0 -42
  229. package/dist/handlers/collection.js.map +0 -1
  230. package/dist/handlers/create-handler.d.ts +0 -156
  231. package/dist/handlers/create-handler.d.ts.map +0 -1
  232. package/dist/handlers/create-handler.js +0 -626
  233. package/dist/handlers/create-handler.js.map +0 -1
  234. package/dist/handlers/index.d.ts +0 -4
  235. package/dist/handlers/index.d.ts.map +0 -1
  236. package/dist/handlers/index.js +0 -4
  237. package/dist/handlers/index.js.map +0 -1
  238. package/dist/handlers/types.d.ts +0 -295
  239. package/dist/handlers/types.d.ts.map +0 -1
  240. package/dist/handlers/types.js +0 -2
  241. package/dist/handlers/types.js.map +0 -1
  242. package/dist/helpers/conflict.d.ts +0 -52
  243. package/dist/helpers/conflict.d.ts.map +0 -1
  244. package/dist/helpers/conflict.js +0 -49
  245. package/dist/helpers/conflict.js.map +0 -1
  246. package/dist/helpers/emitted-change.d.ts +0 -56
  247. package/dist/helpers/emitted-change.d.ts.map +0 -1
  248. package/dist/helpers/emitted-change.js +0 -46
  249. package/dist/helpers/emitted-change.js.map +0 -1
  250. package/dist/helpers/index.d.ts +0 -12
  251. package/dist/helpers/index.d.ts.map +0 -1
  252. package/dist/helpers/index.js +0 -12
  253. package/dist/helpers/index.js.map +0 -1
  254. package/dist/helpers/paginate.d.ts +0 -49
  255. package/dist/helpers/paginate.d.ts.map +0 -1
  256. package/dist/helpers/paginate.js +0 -54
  257. package/dist/helpers/paginate.js.map +0 -1
  258. package/dist/helpers/scope-authorization.d.ts +0 -7
  259. package/dist/helpers/scope-authorization.d.ts.map +0 -1
  260. package/dist/helpers/scope-authorization.js +0 -19
  261. package/dist/helpers/scope-authorization.js.map +0 -1
  262. package/dist/helpers/scope-commit-index.d.ts +0 -12
  263. package/dist/helpers/scope-commit-index.d.ts.map +0 -1
  264. package/dist/helpers/scope-commit-index.js +0 -35
  265. package/dist/helpers/scope-commit-index.js.map +0 -1
  266. package/dist/helpers/scope-strings.d.ts +0 -74
  267. package/dist/helpers/scope-strings.d.ts.map +0 -1
  268. package/dist/helpers/scope-strings.js +0 -82
  269. package/dist/helpers/scope-strings.js.map +0 -1
  270. package/dist/hono/api-key-auth.d.ts +0 -49
  271. package/dist/hono/api-key-auth.d.ts.map +0 -1
  272. package/dist/hono/api-key-auth.js +0 -108
  273. package/dist/hono/api-key-auth.js.map +0 -1
  274. package/dist/hono/audit-redaction.d.ts +0 -20
  275. package/dist/hono/audit-redaction.d.ts.map +0 -1
  276. package/dist/hono/audit-redaction.js +0 -85
  277. package/dist/hono/audit-redaction.js.map +0 -1
  278. package/dist/hono/blobs.d.ts +0 -75
  279. package/dist/hono/blobs.d.ts.map +0 -1
  280. package/dist/hono/blobs.js +0 -586
  281. package/dist/hono/blobs.js.map +0 -1
  282. package/dist/hono/console/gateway.d.ts +0 -42
  283. package/dist/hono/console/gateway.d.ts.map +0 -1
  284. package/dist/hono/console/gateway.js +0 -2158
  285. package/dist/hono/console/gateway.js.map +0 -1
  286. package/dist/hono/console/live-auth.d.ts +0 -7
  287. package/dist/hono/console/live-auth.d.ts.map +0 -1
  288. package/dist/hono/console/live-auth.js +0 -39
  289. package/dist/hono/console/live-auth.js.map +0 -1
  290. package/dist/hono/console/route-descriptor.d.ts +0 -6
  291. package/dist/hono/console/route-descriptor.d.ts.map +0 -1
  292. package/dist/hono/console/route-descriptor.js +0 -16
  293. package/dist/hono/console/route-descriptor.js.map +0 -1
  294. package/dist/hono/console/routes/api-keys.d.ts +0 -8
  295. package/dist/hono/console/routes/api-keys.d.ts.map +0 -1
  296. package/dist/hono/console/routes/api-keys.js +0 -575
  297. package/dist/hono/console/routes/api-keys.js.map +0 -1
  298. package/dist/hono/console/routes/clients.d.ts +0 -8
  299. package/dist/hono/console/routes/clients.d.ts.map +0 -1
  300. package/dist/hono/console/routes/clients.js +0 -322
  301. package/dist/hono/console/routes/clients.js.map +0 -1
  302. package/dist/hono/console/routes/commits.d.ts +0 -8
  303. package/dist/hono/console/routes/commits.d.ts.map +0 -1
  304. package/dist/hono/console/routes/commits.js +0 -882
  305. package/dist/hono/console/routes/commits.js.map +0 -1
  306. package/dist/hono/console/routes/context.d.ts +0 -188
  307. package/dist/hono/console/routes/context.d.ts.map +0 -1
  308. package/dist/hono/console/routes/context.js +0 -633
  309. package/dist/hono/console/routes/context.js.map +0 -1
  310. package/dist/hono/console/routes/events.d.ts +0 -8
  311. package/dist/hono/console/routes/events.d.ts.map +0 -1
  312. package/dist/hono/console/routes/events.js +0 -501
  313. package/dist/hono/console/routes/events.js.map +0 -1
  314. package/dist/hono/console/routes/maintenance.d.ts +0 -8
  315. package/dist/hono/console/routes/maintenance.d.ts.map +0 -1
  316. package/dist/hono/console/routes/maintenance.js +0 -341
  317. package/dist/hono/console/routes/maintenance.js.map +0 -1
  318. package/dist/hono/console/routes/shared.d.ts +0 -174
  319. package/dist/hono/console/routes/shared.d.ts.map +0 -1
  320. package/dist/hono/console/routes/shared.js +0 -583
  321. package/dist/hono/console/routes/shared.js.map +0 -1
  322. package/dist/hono/console/routes/stats.d.ts +0 -8
  323. package/dist/hono/console/routes/stats.d.ts.map +0 -1
  324. package/dist/hono/console/routes/stats.js +0 -295
  325. package/dist/hono/console/routes/stats.js.map +0 -1
  326. package/dist/hono/console/routes/storage.d.ts +0 -8
  327. package/dist/hono/console/routes/storage.d.ts.map +0 -1
  328. package/dist/hono/console/routes/storage.js +0 -121
  329. package/dist/hono/console/routes/storage.js.map +0 -1
  330. package/dist/hono/console/routes.d.ts +0 -36
  331. package/dist/hono/console/routes.d.ts.map +0 -1
  332. package/dist/hono/console/routes.js +0 -112
  333. package/dist/hono/console/routes.js.map +0 -1
  334. package/dist/hono/console/schema-errors.d.ts +0 -2
  335. package/dist/hono/console/schema-errors.d.ts.map +0 -1
  336. package/dist/hono/console/schema-errors.js +0 -17
  337. package/dist/hono/console/schema-errors.js.map +0 -1
  338. package/dist/hono/console/schemas.d.ts +0 -1515
  339. package/dist/hono/console/schemas.d.ts.map +0 -1
  340. package/dist/hono/console/schemas.js +0 -661
  341. package/dist/hono/console/schemas.js.map +0 -1
  342. package/dist/hono/console/types.d.ts +0 -213
  343. package/dist/hono/console/types.d.ts.map +0 -1
  344. package/dist/hono/console/types.js +0 -2
  345. package/dist/hono/console/types.js.map +0 -1
  346. package/dist/hono/console/ui.d.ts +0 -38
  347. package/dist/hono/console/ui.d.ts.map +0 -1
  348. package/dist/hono/console/ui.js +0 -43
  349. package/dist/hono/console/ui.js.map +0 -1
  350. package/dist/hono/create-server.d.ts +0 -71
  351. package/dist/hono/create-server.d.ts.map +0 -1
  352. package/dist/hono/create-server.js +0 -121
  353. package/dist/hono/create-server.js.map +0 -1
  354. package/dist/hono/errors.d.ts +0 -13
  355. package/dist/hono/errors.d.ts.map +0 -1
  356. package/dist/hono/errors.js +0 -21
  357. package/dist/hono/errors.js.map +0 -1
  358. package/dist/hono/index.d.ts +0 -20
  359. package/dist/hono/index.d.ts.map +0 -1
  360. package/dist/hono/index.js +0 -31
  361. package/dist/hono/index.js.map +0 -1
  362. package/dist/hono/openapi.d.ts +0 -72
  363. package/dist/hono/openapi.d.ts.map +0 -1
  364. package/dist/hono/openapi.js +0 -99
  365. package/dist/hono/openapi.js.map +0 -1
  366. package/dist/hono/proxy/connection-manager.d.ts +0 -78
  367. package/dist/hono/proxy/connection-manager.d.ts.map +0 -1
  368. package/dist/hono/proxy/connection-manager.js +0 -251
  369. package/dist/hono/proxy/connection-manager.js.map +0 -1
  370. package/dist/hono/proxy/index.d.ts +0 -8
  371. package/dist/hono/proxy/index.d.ts.map +0 -1
  372. package/dist/hono/proxy/index.js +0 -8
  373. package/dist/hono/proxy/index.js.map +0 -1
  374. package/dist/hono/proxy/routes.d.ts +0 -86
  375. package/dist/hono/proxy/routes.d.ts.map +0 -1
  376. package/dist/hono/proxy/routes.js +0 -183
  377. package/dist/hono/proxy/routes.js.map +0 -1
  378. package/dist/hono/rate-limit.d.ts +0 -101
  379. package/dist/hono/rate-limit.d.ts.map +0 -1
  380. package/dist/hono/rate-limit.js +0 -184
  381. package/dist/hono/rate-limit.js.map +0 -1
  382. package/dist/hono/realtime-sync-packs.d.ts +0 -43
  383. package/dist/hono/realtime-sync-packs.d.ts.map +0 -1
  384. package/dist/hono/realtime-sync-packs.js +0 -219
  385. package/dist/hono/realtime-sync-packs.js.map +0 -1
  386. package/dist/hono/routes/audit.d.ts +0 -12
  387. package/dist/hono/routes/audit.d.ts.map +0 -1
  388. package/dist/hono/routes/audit.js +0 -385
  389. package/dist/hono/routes/audit.js.map +0 -1
  390. package/dist/hono/routes/auth-leases.d.ts +0 -8
  391. package/dist/hono/routes/auth-leases.d.ts.map +0 -1
  392. package/dist/hono/routes/auth-leases.js +0 -88
  393. package/dist/hono/routes/auth-leases.js.map +0 -1
  394. package/dist/hono/routes/combined.d.ts +0 -8
  395. package/dist/hono/routes/combined.d.ts.map +0 -1
  396. package/dist/hono/routes/combined.js +0 -392
  397. package/dist/hono/routes/combined.js.map +0 -1
  398. package/dist/hono/routes/context.d.ts +0 -314
  399. package/dist/hono/routes/context.d.ts.map +0 -1
  400. package/dist/hono/routes/context.js +0 -1147
  401. package/dist/hono/routes/context.js.map +0 -1
  402. package/dist/hono/routes/health.d.ts +0 -8
  403. package/dist/hono/routes/health.d.ts.map +0 -1
  404. package/dist/hono/routes/health.js +0 -16
  405. package/dist/hono/routes/health.js.map +0 -1
  406. package/dist/hono/routes/realtime.d.ts +0 -9
  407. package/dist/hono/routes/realtime.d.ts.map +0 -1
  408. package/dist/hono/routes/realtime.js +0 -626
  409. package/dist/hono/routes/realtime.js.map +0 -1
  410. package/dist/hono/routes/shared.d.ts +0 -689
  411. package/dist/hono/routes/shared.d.ts.map +0 -1
  412. package/dist/hono/routes/shared.js +0 -972
  413. package/dist/hono/routes/shared.js.map +0 -1
  414. package/dist/hono/routes/snapshots.d.ts +0 -10
  415. package/dist/hono/routes/snapshots.d.ts.map +0 -1
  416. package/dist/hono/routes/snapshots.js +0 -281
  417. package/dist/hono/routes/snapshots.js.map +0 -1
  418. package/dist/hono/routes.d.ts +0 -19
  419. package/dist/hono/routes.d.ts.map +0 -1
  420. package/dist/hono/routes.js +0 -37
  421. package/dist/hono/routes.js.map +0 -1
  422. package/dist/hono/validation.d.ts +0 -5
  423. package/dist/hono/validation.d.ts.map +0 -1
  424. package/dist/hono/validation.js +0 -47
  425. package/dist/hono/validation.js.map +0 -1
  426. package/dist/hono/websocket-origin.d.ts +0 -9
  427. package/dist/hono/websocket-origin.d.ts.map +0 -1
  428. package/dist/hono/websocket-origin.js +0 -96
  429. package/dist/hono/websocket-origin.js.map +0 -1
  430. package/dist/hono/ws.d.ts +0 -341
  431. package/dist/hono/ws.d.ts.map +0 -1
  432. package/dist/hono/ws.js +0 -711
  433. package/dist/hono/ws.js.map +0 -1
  434. package/dist/index.d.ts.map +0 -1
  435. package/dist/index.js.map +0 -1
  436. package/dist/libsql.d.ts +0 -29
  437. package/dist/libsql.d.ts.map +0 -1
  438. package/dist/libsql.js +0 -25
  439. package/dist/libsql.js.map +0 -1
  440. package/dist/migrate.d.ts +0 -14
  441. package/dist/migrate.d.ts.map +0 -1
  442. package/dist/migrate.js +0 -13
  443. package/dist/migrate.js.map +0 -1
  444. package/dist/neon.d.ts +0 -21
  445. package/dist/neon.d.ts.map +0 -1
  446. package/dist/neon.js +0 -22
  447. package/dist/neon.js.map +0 -1
  448. package/dist/notify.d.ts +0 -77
  449. package/dist/notify.d.ts.map +0 -1
  450. package/dist/notify.js +0 -233
  451. package/dist/notify.js.map +0 -1
  452. package/dist/pglite.d.ts +0 -37
  453. package/dist/pglite.d.ts.map +0 -1
  454. package/dist/pglite.js +0 -37
  455. package/dist/pglite.js.map +0 -1
  456. package/dist/plugins/index.d.ts +0 -2
  457. package/dist/plugins/index.d.ts.map +0 -1
  458. package/dist/plugins/index.js +0 -2
  459. package/dist/plugins/index.js.map +0 -1
  460. package/dist/plugins/types.d.ts +0 -73
  461. package/dist/plugins/types.d.ts.map +0 -1
  462. package/dist/plugins/types.js +0 -30
  463. package/dist/plugins/types.js.map +0 -1
  464. package/dist/postgres/index.d.ts +0 -68
  465. package/dist/postgres/index.d.ts.map +0 -1
  466. package/dist/postgres/index.js +0 -924
  467. package/dist/postgres/index.js.map +0 -1
  468. package/dist/proxy/collection.d.ts +0 -7
  469. package/dist/proxy/collection.d.ts.map +0 -1
  470. package/dist/proxy/collection.js +0 -6
  471. package/dist/proxy/collection.js.map +0 -1
  472. package/dist/proxy/handler.d.ts +0 -42
  473. package/dist/proxy/handler.d.ts.map +0 -1
  474. package/dist/proxy/handler.js +0 -102
  475. package/dist/proxy/handler.js.map +0 -1
  476. package/dist/proxy/index.d.ts +0 -9
  477. package/dist/proxy/index.d.ts.map +0 -1
  478. package/dist/proxy/index.js +0 -14
  479. package/dist/proxy/index.js.map +0 -1
  480. package/dist/proxy/mutation-detector.d.ts +0 -35
  481. package/dist/proxy/mutation-detector.d.ts.map +0 -1
  482. package/dist/proxy/mutation-detector.js +0 -246
  483. package/dist/proxy/mutation-detector.js.map +0 -1
  484. package/dist/proxy/oplog.d.ts +0 -30
  485. package/dist/proxy/oplog.d.ts.map +0 -1
  486. package/dist/proxy/oplog.js +0 -137
  487. package/dist/proxy/oplog.js.map +0 -1
  488. package/dist/proxy/types.d.ts +0 -44
  489. package/dist/proxy/types.d.ts.map +0 -1
  490. package/dist/proxy/types.js +0 -7
  491. package/dist/proxy/types.js.map +0 -1
  492. package/dist/prune.d.ts.map +0 -1
  493. package/dist/prune.js.map +0 -1
  494. package/dist/pull.d.ts.map +0 -1
  495. package/dist/pull.js.map +0 -1
  496. package/dist/push.d.ts.map +0 -1
  497. package/dist/push.js.map +0 -1
  498. package/dist/realtime/in-memory.d.ts +0 -13
  499. package/dist/realtime/in-memory.d.ts.map +0 -1
  500. package/dist/realtime/in-memory.js +0 -28
  501. package/dist/realtime/in-memory.js.map +0 -1
  502. package/dist/realtime/index.d.ts +0 -4
  503. package/dist/realtime/index.d.ts.map +0 -1
  504. package/dist/realtime/index.js +0 -3
  505. package/dist/realtime/index.js.map +0 -1
  506. package/dist/realtime/types.d.ts +0 -62
  507. package/dist/realtime/types.d.ts.map +0 -1
  508. package/dist/realtime/types.js +0 -19
  509. package/dist/realtime/types.js.map +0 -1
  510. package/dist/relay/client-role/forward-engine.d.ts +0 -63
  511. package/dist/relay/client-role/forward-engine.d.ts.map +0 -1
  512. package/dist/relay/client-role/forward-engine.js +0 -267
  513. package/dist/relay/client-role/forward-engine.js.map +0 -1
  514. package/dist/relay/client-role/index.d.ts +0 -9
  515. package/dist/relay/client-role/index.d.ts.map +0 -1
  516. package/dist/relay/client-role/index.js +0 -9
  517. package/dist/relay/client-role/index.js.map +0 -1
  518. package/dist/relay/client-role/pull-engine.d.ts +0 -72
  519. package/dist/relay/client-role/pull-engine.d.ts.map +0 -1
  520. package/dist/relay/client-role/pull-engine.js +0 -249
  521. package/dist/relay/client-role/pull-engine.js.map +0 -1
  522. package/dist/relay/client-role/sequence-mapper.d.ts +0 -65
  523. package/dist/relay/client-role/sequence-mapper.d.ts.map +0 -1
  524. package/dist/relay/client-role/sequence-mapper.js +0 -161
  525. package/dist/relay/client-role/sequence-mapper.js.map +0 -1
  526. package/dist/relay/evaluation/relay-paths.d.ts +0 -41
  527. package/dist/relay/evaluation/relay-paths.d.ts.map +0 -1
  528. package/dist/relay/evaluation/relay-paths.js +0 -504
  529. package/dist/relay/evaluation/relay-paths.js.map +0 -1
  530. package/dist/relay/evaluation/rust-boundary.d.ts +0 -47
  531. package/dist/relay/evaluation/rust-boundary.d.ts.map +0 -1
  532. package/dist/relay/evaluation/rust-boundary.js +0 -220
  533. package/dist/relay/evaluation/rust-boundary.js.map +0 -1
  534. package/dist/relay/index.d.ts +0 -37
  535. package/dist/relay/index.d.ts.map +0 -1
  536. package/dist/relay/index.js +0 -44
  537. package/dist/relay/index.js.map +0 -1
  538. package/dist/relay/migrate.d.ts +0 -18
  539. package/dist/relay/migrate.d.ts.map +0 -1
  540. package/dist/relay/migrate.js +0 -99
  541. package/dist/relay/migrate.js.map +0 -1
  542. package/dist/relay/mode-manager.d.ts +0 -60
  543. package/dist/relay/mode-manager.d.ts.map +0 -1
  544. package/dist/relay/mode-manager.js +0 -114
  545. package/dist/relay/mode-manager.js.map +0 -1
  546. package/dist/relay/realtime.d.ts +0 -90
  547. package/dist/relay/realtime.d.ts.map +0 -1
  548. package/dist/relay/realtime.js +0 -147
  549. package/dist/relay/realtime.js.map +0 -1
  550. package/dist/relay/relay.d.ts +0 -190
  551. package/dist/relay/relay.d.ts.map +0 -1
  552. package/dist/relay/relay.js +0 -320
  553. package/dist/relay/relay.js.map +0 -1
  554. package/dist/relay/schema.d.ts +0 -158
  555. package/dist/relay/schema.d.ts.map +0 -1
  556. package/dist/relay/schema.js +0 -7
  557. package/dist/relay/schema.js.map +0 -1
  558. package/dist/relay/server-role/index.d.ts +0 -56
  559. package/dist/relay/server-role/index.d.ts.map +0 -1
  560. package/dist/relay/server-role/index.js +0 -193
  561. package/dist/relay/server-role/index.js.map +0 -1
  562. package/dist/relay/server-role/pull.d.ts +0 -27
  563. package/dist/relay/server-role/pull.d.ts.map +0 -1
  564. package/dist/relay/server-role/pull.js +0 -24
  565. package/dist/relay/server-role/pull.js.map +0 -1
  566. package/dist/relay/server-role/push.d.ts +0 -29
  567. package/dist/relay/server-role/push.d.ts.map +0 -1
  568. package/dist/relay/server-role/push.js +0 -122
  569. package/dist/relay/server-role/push.js.map +0 -1
  570. package/dist/s3/index.d.ts +0 -83
  571. package/dist/s3/index.d.ts.map +0 -1
  572. package/dist/s3/index.js +0 -223
  573. package/dist/s3/index.js.map +0 -1
  574. package/dist/schema.d.ts.map +0 -1
  575. package/dist/schema.js.map +0 -1
  576. package/dist/service-worker/index.d.ts +0 -114
  577. package/dist/service-worker/index.d.ts.map +0 -1
  578. package/dist/service-worker/index.js +0 -487
  579. package/dist/service-worker/index.js.map +0 -1
  580. package/dist/snapshot-artifacts/sqlite-bun.d.ts +0 -15
  581. package/dist/snapshot-artifacts/sqlite-bun.d.ts.map +0 -1
  582. package/dist/snapshot-artifacts/sqlite-bun.js +0 -128
  583. package/dist/snapshot-artifacts/sqlite-bun.js.map +0 -1
  584. package/dist/snapshot-artifacts.d.ts +0 -206
  585. package/dist/snapshot-artifacts.d.ts.map +0 -1
  586. package/dist/snapshot-artifacts.js +0 -545
  587. package/dist/snapshot-artifacts.js.map +0 -1
  588. package/dist/snapshot-chunks/db-metadata.d.ts +0 -56
  589. package/dist/snapshot-chunks/db-metadata.d.ts.map +0 -1
  590. package/dist/snapshot-chunks/db-metadata.js +0 -360
  591. package/dist/snapshot-chunks/db-metadata.js.map +0 -1
  592. package/dist/snapshot-chunks/index.d.ts +0 -8
  593. package/dist/snapshot-chunks/index.d.ts.map +0 -1
  594. package/dist/snapshot-chunks/index.js +0 -8
  595. package/dist/snapshot-chunks/index.js.map +0 -1
  596. package/dist/snapshot-chunks/types.d.ts +0 -80
  597. package/dist/snapshot-chunks/types.d.ts.map +0 -1
  598. package/dist/snapshot-chunks/types.js +0 -8
  599. package/dist/snapshot-chunks/types.js.map +0 -1
  600. package/dist/snapshot-chunks.d.ts +0 -90
  601. package/dist/snapshot-chunks.d.ts.map +0 -1
  602. package/dist/snapshot-chunks.js +0 -304
  603. package/dist/snapshot-chunks.js.map +0 -1
  604. package/dist/sqlite/index.d.ts +0 -53
  605. package/dist/sqlite/index.d.ts.map +0 -1
  606. package/dist/sqlite/index.js +0 -795
  607. package/dist/sqlite/index.js.map +0 -1
  608. package/dist/sqlite3.d.ts +0 -22
  609. package/dist/sqlite3.d.ts.map +0 -1
  610. package/dist/sqlite3.js +0 -99
  611. package/dist/sqlite3.js.map +0 -1
  612. package/dist/stats.d.ts +0 -28
  613. package/dist/stats.d.ts.map +0 -1
  614. package/dist/stats.js +0 -93
  615. package/dist/stats.js.map +0 -1
  616. package/dist/subscriptions/cache.d.ts +0 -58
  617. package/dist/subscriptions/cache.d.ts.map +0 -1
  618. package/dist/subscriptions/cache.js +0 -250
  619. package/dist/subscriptions/cache.js.map +0 -1
  620. package/dist/subscriptions/index.d.ts +0 -3
  621. package/dist/subscriptions/index.d.ts.map +0 -1
  622. package/dist/subscriptions/index.js +0 -3
  623. package/dist/subscriptions/index.js.map +0 -1
  624. package/dist/subscriptions/resolve.d.ts +0 -40
  625. package/dist/subscriptions/resolve.d.ts.map +0 -1
  626. package/dist/subscriptions/resolve.js +0 -275
  627. package/dist/subscriptions/resolve.js.map +0 -1
  628. package/dist/sync.d.ts +0 -24
  629. package/dist/sync.d.ts.map +0 -1
  630. package/dist/sync.js +0 -27
  631. package/dist/sync.js.map +0 -1
  632. package/src/auth-leases.ts +0 -649
  633. package/src/better-sqlite3.ts +0 -35
  634. package/src/blobs/access.ts +0 -244
  635. package/src/blobs/adapters/database.ts +0 -397
  636. package/src/blobs/index.ts +0 -9
  637. package/src/blobs/manager.ts +0 -901
  638. package/src/blobs/migrate.ts +0 -158
  639. package/src/blobs/types.ts +0 -74
  640. package/src/bun-sqlite-ambient.d.ts +0 -19
  641. package/src/bun-sqlite.ts +0 -27
  642. package/src/clients.ts +0 -22
  643. package/src/cloudflare/durable-object.ts +0 -289
  644. package/src/cloudflare/index.ts +0 -22
  645. package/src/cloudflare/r2.ts +0 -526
  646. package/src/cloudflare/scope-cache.ts +0 -341
  647. package/src/cloudflare/sentry.ts +0 -230
  648. package/src/cloudflare/worker.ts +0 -77
  649. package/src/commit-integrity.ts +0 -371
  650. package/src/compaction.ts +0 -77
  651. package/src/crdt-yjs/index.ts +0 -931
  652. package/src/d1.ts +0 -16
  653. package/src/dialect/base.ts +0 -360
  654. package/src/dialect/helpers.ts +0 -92
  655. package/src/dialect/index.ts +0 -7
  656. package/src/dialect/types.ts +0 -247
  657. package/src/encrypted-crdt.ts +0 -786
  658. package/src/filesystem/index.ts +0 -262
  659. package/src/handlers/collection.ts +0 -121
  660. package/src/handlers/create-handler.ts +0 -1134
  661. package/src/handlers/index.ts +0 -3
  662. package/src/handlers/types.ts +0 -403
  663. package/src/helpers/conflict.ts +0 -64
  664. package/src/helpers/emitted-change.ts +0 -69
  665. package/src/helpers/index.ts +0 -12
  666. package/src/helpers/paginate.ts +0 -82
  667. package/src/helpers/scope-authorization.ts +0 -27
  668. package/src/helpers/scope-commit-index.ts +0 -52
  669. package/src/helpers/scope-strings.ts +0 -101
  670. package/src/hono/api-key-auth.ts +0 -177
  671. package/src/hono/audit-redaction.ts +0 -135
  672. package/src/hono/blobs.ts +0 -851
  673. package/src/hono/console/gateway.ts +0 -3046
  674. package/src/hono/console/live-auth.ts +0 -46
  675. package/src/hono/console/route-descriptor.ts +0 -22
  676. package/src/hono/console/routes/api-keys.ts +0 -721
  677. package/src/hono/console/routes/clients.ts +0 -447
  678. package/src/hono/console/routes/commits.ts +0 -1137
  679. package/src/hono/console/routes/context.ts +0 -956
  680. package/src/hono/console/routes/events.ts +0 -669
  681. package/src/hono/console/routes/maintenance.ts +0 -461
  682. package/src/hono/console/routes/shared.ts +0 -816
  683. package/src/hono/console/routes/stats.ts +0 -392
  684. package/src/hono/console/routes/storage.ts +0 -159
  685. package/src/hono/console/routes.ts +0 -146
  686. package/src/hono/console/schema-errors.ts +0 -23
  687. package/src/hono/console/schemas.ts +0 -914
  688. package/src/hono/console/types.ts +0 -223
  689. package/src/hono/console/ui.ts +0 -100
  690. package/src/hono/create-server.ts +0 -230
  691. package/src/hono/errors.ts +0 -50
  692. package/src/hono/index.ts +0 -54
  693. package/src/hono/openapi.ts +0 -139
  694. package/src/hono/proxy/connection-manager.ts +0 -340
  695. package/src/hono/proxy/index.ts +0 -8
  696. package/src/hono/proxy/routes.ts +0 -272
  697. package/src/hono/rate-limit.ts +0 -319
  698. package/src/hono/realtime-sync-packs.ts +0 -354
  699. package/src/hono/routes/audit.ts +0 -499
  700. package/src/hono/routes/auth-leases.ts +0 -119
  701. package/src/hono/routes/combined.ts +0 -583
  702. package/src/hono/routes/context.ts +0 -1629
  703. package/src/hono/routes/health.ts +0 -26
  704. package/src/hono/routes/realtime.ts +0 -808
  705. package/src/hono/routes/shared.ts +0 -1626
  706. package/src/hono/routes/snapshots.ts +0 -345
  707. package/src/hono/routes.ts +0 -68
  708. package/src/hono/validation.ts +0 -81
  709. package/src/hono/websocket-origin.ts +0 -131
  710. package/src/hono/ws.ts +0 -1134
  711. package/src/libsql.ts +0 -51
  712. package/src/migrate.ts +0 -20
  713. package/src/neon.ts +0 -28
  714. package/src/notify.ts +0 -341
  715. package/src/pglite.ts +0 -68
  716. package/src/plugins/index.ts +0 -1
  717. package/src/plugins/types.ts +0 -144
  718. package/src/postgres/index.ts +0 -1291
  719. package/src/proxy/collection.ts +0 -17
  720. package/src/proxy/handler.ts +0 -159
  721. package/src/proxy/index.ts +0 -21
  722. package/src/proxy/mutation-detector.ts +0 -281
  723. package/src/proxy/oplog.ts +0 -181
  724. package/src/proxy/types.ts +0 -46
  725. package/src/realtime/in-memory.ts +0 -33
  726. package/src/realtime/index.ts +0 -7
  727. package/src/realtime/types.ts +0 -90
  728. package/src/relay/bun-types.d.ts +0 -50
  729. package/src/relay/client-role/forward-engine.ts +0 -355
  730. package/src/relay/client-role/index.ts +0 -9
  731. package/src/relay/client-role/pull-engine.ts +0 -329
  732. package/src/relay/client-role/sequence-mapper.ts +0 -201
  733. package/src/relay/evaluation/relay-paths.ts +0 -699
  734. package/src/relay/evaluation/rust-boundary.ts +0 -464
  735. package/src/relay/index.ts +0 -50
  736. package/src/relay/migrate.ts +0 -113
  737. package/src/relay/mode-manager.ts +0 -142
  738. package/src/relay/realtime.ts +0 -207
  739. package/src/relay/relay.ts +0 -431
  740. package/src/relay/schema.ts +0 -171
  741. package/src/relay/server-role/index.ts +0 -338
  742. package/src/relay/server-role/pull.ts +0 -43
  743. package/src/relay/server-role/push.ts +0 -164
  744. package/src/s3/index.ts +0 -346
  745. package/src/service-worker/index.ts +0 -773
  746. package/src/snapshot-artifacts/sqlite-bun.ts +0 -168
  747. package/src/snapshot-artifacts.ts +0 -896
  748. package/src/snapshot-chunks/db-metadata.ts +0 -537
  749. package/src/snapshot-chunks/index.ts +0 -8
  750. package/src/snapshot-chunks/types.ts +0 -105
  751. package/src/snapshot-chunks.ts +0 -453
  752. package/src/sqlite/index.ts +0 -1064
  753. package/src/sqlite3.ts +0 -137
  754. package/src/stats.ts +0 -180
  755. package/src/subscriptions/cache.ts +0 -376
  756. package/src/subscriptions/index.ts +0 -2
  757. package/src/subscriptions/resolve.ts +0 -357
  758. package/src/sync.ts +0 -111
package/dist/index.js CHANGED
@@ -1,35 +1,53 @@
1
1
  /**
2
- * @syncular/server - Server-side sync infrastructure
2
+ * @syncular/server framework-free embeddable SSP2 protocol library
3
+ * (SPEC.md is normative; REVISE.md B2 is the architectural mandate).
3
4
  *
4
- * Commit-log based sync with:
5
- * - commit log + change log
6
- * - scopes + subscriptions (partial sync + auth)
7
- * - commit-level idempotency
8
- * - blob/media storage
5
+ * Core surface: `handleSyncRequest(bytes, ctx) → bytes` over host-provided
6
+ * storage / scope-resolution / segment-store interfaces, plus a
7
+ * transport-agnostic realtime session (§8), the direct segment download
8
+ * handler (§5.5), and signed-URL token issuance/verification (§5.4).
9
9
  */
10
- export * from '@syncular/core';
11
- export * from './auth-leases.js';
12
- export * from './blobs/index.js';
13
- export * from './clients.js';
14
- export * from './commit-integrity.js';
15
- export * from './compaction.js';
16
- export * from './dialect/index.js';
17
- export * from './encrypted-crdt.js';
10
+ export * from './admin.js';
11
+ export * from './blob-handlers.js';
12
+ export * from './blob-store.js';
13
+ export * from './content-encoding.js';
14
+ export * from './context.js';
15
+ export * from './crdt-merger.js';
16
+ export * from './d1-storage.js';
18
17
  export * from './errors.js';
19
- export * from './handlers/index.js';
20
- export * from './helpers/index.js';
21
- export * from './migrate.js';
22
- export * from './notify.js';
23
- export * from './plugins/index.js';
24
- export * from './proxy/index.js';
18
+ export * from './events.js';
19
+ export * from './events-ring.js';
20
+ export * from './frame-bytes.js';
21
+ export * from './handler.js';
22
+ export * from './lease-store.js';
23
+ // The `PgExecutor` seam + Postgres storage/fanout are driver-agnostic (zero
24
+ // runtime deps). Concrete driver adapters (pglite for tests; Bun.sql /
25
+ // node-postgres for production, documented in the README) live in separate
26
+ // entry points so the barrel never imports a driver.
27
+ export * from './pg-executor.js';
28
+ export * from './postgres-fanout.js';
29
+ export * from './postgres-storage.js';
25
30
  export * from './prune.js';
26
31
  export * from './pull.js';
27
32
  export * from './push.js';
28
- export * from './realtime/index.js';
33
+ export * from './realtime.js';
34
+ export * from './relational-rows.js';
35
+ export * from './s3-blob-store.js';
36
+ export * from './s3-segment-store.js';
29
37
  export * from './schema.js';
30
- export * from './snapshot-artifacts.js';
31
- export * from './snapshot-chunks.js';
32
- export * from './stats.js';
33
- export * from './subscriptions/index.js';
34
- export * from './sync.js';
35
- //# sourceMappingURL=index.js.map
38
+ export * from './scopes.js';
39
+ export * from './segment-download.js';
40
+ export * from './segment-store.js';
41
+ export * from './signed-url.js';
42
+ // Bun-specific storages (top-level `bun:sqlite`): re-exported for Bun/Node
43
+ // hosts. Workers/edge builds tree-shake them (and their `bun:sqlite` import)
44
+ // away — the runtime-neutral core closure is enforced by
45
+ // `test/runtime-neutrality.test.ts`.
46
+ export * from './sqlite-blob-store.js';
47
+ export * from './sqlite-dialect.js';
48
+ export * from './sqlite-image.js';
49
+ export * from './sqlite-lease-store.js';
50
+ export * from './sqlite-segment-store.js';
51
+ export * from './sqlite-storage.js';
52
+ export * from './storage.js';
53
+ export * from './validate.js';
@@ -0,0 +1,50 @@
1
+ /**
2
+ * Auth-lease store (SPEC.md §7.3.1).
3
+ *
4
+ * A lease is a server-issued, time-bounded grant recording the actor's
5
+ * resolved allowed scopes at issuance, keyed by `(partition, clientId)`.
6
+ * It is the authorization the server falls to during a host-authorization
7
+ * outage (§7.3.3), and the client's offline-trust window (§7.3.5).
8
+ *
9
+ * The store is OPTIONAL, wired only when `leases` is configured
10
+ * (`leases` absent ⇒ the feature is off, zero cost — the blob-store
11
+ * pattern). Records are host-owned; a production store signs them at rest
12
+ * and verifies on read (§7.3.1). The reference stores keep them plain in
13
+ * memory / sqlite — the seam is what matters for conformance.
14
+ */
15
+ import type { ScopeMap } from '@syncular/core';
16
+ /** The stored lease record (§7.3.1). `revoked` is durable (§7.3.4). */
17
+ export interface LeaseRecord {
18
+ readonly leaseId: string;
19
+ readonly actorId: string;
20
+ /** The actor's resolved allowed scopes at issuance (§3.2 step 3). */
21
+ readonly allowedScopes: ScopeMap;
22
+ readonly issuedAtMs: number;
23
+ readonly expiresAtMs: number;
24
+ readonly revoked: boolean;
25
+ }
26
+ export interface LeaseStore {
27
+ /** The lease for `(partition, clientId)`, if any (revoked or not). */
28
+ get(partition: string, clientId: string): Promise<LeaseRecord | undefined>;
29
+ /**
30
+ * Issue or refresh the lease for `(partition, clientId)` (§7.3.3). A
31
+ * refresh slides the SAME `leaseId` — implementations MUST reuse the
32
+ * stored id for the pair unless it is revoked (a revoked handle never
33
+ * silently resurrects: a fresh id is minted only once the host clears
34
+ * the revocation). Returns the stored record.
35
+ */
36
+ issue(partition: string, clientId: string, actorId: string, allowedScopes: ScopeMap, nowMs: number, ttlMs: number): Promise<LeaseRecord>;
37
+ /** Revoke a lease by `leaseId` (§7.3.4); durable, survives refresh. */
38
+ revoke(partition: string, leaseId: string): Promise<void>;
39
+ }
40
+ /** Stable-per-pair id generator; overridable for deterministic tests. */
41
+ export type LeaseIdFactory = () => string;
42
+ export declare class MemoryLeaseStore implements LeaseStore {
43
+ #private;
44
+ constructor(options?: {
45
+ readonly leaseId?: LeaseIdFactory;
46
+ });
47
+ get(partition: string, clientId: string): Promise<LeaseRecord | undefined>;
48
+ issue(partition: string, clientId: string, actorId: string, allowedScopes: ScopeMap, nowMs: number, ttlMs: number): Promise<LeaseRecord>;
49
+ revoke(partition: string, leaseId: string): Promise<void>;
50
+ }
Binary file
@@ -0,0 +1,27 @@
1
+ /**
2
+ * A `PgExecutor` over @electric-sql/pglite (embedded WASM Postgres).
3
+ *
4
+ * This is the **test/dev** driver — hermetic, no docker, runs under bun.
5
+ * `@electric-sql/pglite` is a devDependency of `@syncular/server`; this
6
+ * module is exported for tests and local experiments, not the production
7
+ * path. Production wires Bun.sql or node-postgres against the same
8
+ * `PgExecutor` interface (see the server README).
9
+ *
10
+ * pglite is single-connection, so `transaction` runs `BEGIN`/`COMMIT`/
11
+ * `ROLLBACK` on the one connection and relies on the caller not interleaving
12
+ * unrelated queries during a transaction scope (the storage layer holds one
13
+ * transaction at a time per push).
14
+ */
15
+ import type { PGlite } from '@electric-sql/pglite';
16
+ import type { PgExecutor } from './pg-executor.js';
17
+ /** Minimal structural type for a pglite instance (avoids a hard type dep). */
18
+ interface PgliteLike {
19
+ query<Row>(query: string, params?: unknown[]): Promise<{
20
+ rows: Row[];
21
+ affectedRows?: number;
22
+ }>;
23
+ exec(query: string): Promise<unknown>;
24
+ close(): Promise<void>;
25
+ }
26
+ export declare function pgliteExecutor(db: PGlite | PgliteLike): PgExecutor;
27
+ export {};
@@ -0,0 +1,33 @@
1
+ function queryable(db) {
2
+ return {
3
+ async query(text, params) {
4
+ const result = await db.query(text, params ? [...params] : undefined);
5
+ return {
6
+ rows: result.rows,
7
+ rowCount: result.affectedRows ?? result.rows.length,
8
+ };
9
+ },
10
+ };
11
+ }
12
+ export function pgliteExecutor(db) {
13
+ const like = db;
14
+ const q = queryable(like);
15
+ return {
16
+ query: q.query,
17
+ async transaction(fn) {
18
+ await like.exec('BEGIN');
19
+ try {
20
+ const result = await fn(q);
21
+ await like.exec('COMMIT');
22
+ return result;
23
+ }
24
+ catch (error) {
25
+ await like.exec('ROLLBACK');
26
+ throw error;
27
+ }
28
+ },
29
+ async close() {
30
+ await like.close();
31
+ },
32
+ };
33
+ }
@@ -0,0 +1,67 @@
1
+ /**
2
+ * The minimal Postgres executor seam (REVISE B2: zero runtime deps).
3
+ *
4
+ * `PostgresServerStorage` is written entirely against this interface so the
5
+ * server library never imports a specific driver. Production wires one of:
6
+ *
7
+ * - **Bun.sql** (built into bun) — see `bunSqlExecutor` in the README;
8
+ * - **node-postgres** (`pg`) — a `Pool`/`PoolClient` adapter;
9
+ *
10
+ * and the test lane wires **@electric-sql/pglite** (embedded WASM Postgres,
11
+ * a devDependency) via `pgliteExecutor`. All three speak the same three
12
+ * primitives below.
13
+ *
14
+ * ## Type-parser contract (load-bearing)
15
+ *
16
+ * `commitSeq`/`serverVersion` are `int8`/`bigint` columns. Drivers disagree
17
+ * on how they decode `int8`:
18
+ *
19
+ * - pglite → JS `number`;
20
+ * - node-postgres → `string` (its default `int8` parser is off to avoid
21
+ * silent precision loss past 2^53);
22
+ * - Bun.sql → `bigint`.
23
+ *
24
+ * The storage layer therefore coerces every sequence value it reads through
25
+ * `Number(...)` (see `asNumber`). Sequences here are per-partition commit
26
+ * counters and server_version counters — both comfortably inside 2^53 for
27
+ * any realistic deployment, so the coercion is safe; a host that expects to
28
+ * exceed 2^53 commits in a single partition has bigger problems than this
29
+ * seam. `bytea` columns MUST decode to `Uint8Array`/`Buffer` (all three
30
+ * drivers do); `NULL` decodes to JS `null`.
31
+ */
32
+ /** One database row as a plain object keyed by (lower-cased) column name. */
33
+ export type PgRow = Record<string, unknown>;
34
+ /**
35
+ * A handle that runs parameterized statements. Both the pool-level executor
36
+ * and a per-transaction client implement it, so storage code is written once
37
+ * against `PgQueryable` regardless of transaction scope.
38
+ *
39
+ * `params` use Postgres positional placeholders (`$1`, `$2`, ...). `text`
40
+ * is a single statement (no multi-statement `;`-joined batches — those are
41
+ * driver-specific and defeat parameterization).
42
+ */
43
+ export interface PgQueryable {
44
+ query<Row = PgRow>(text: string, params?: readonly unknown[]): Promise<{
45
+ rows: Row[];
46
+ rowCount: number;
47
+ }>;
48
+ }
49
+ /**
50
+ * The pool-level executor: `PgQueryable` plus transaction control. A
51
+ * `transaction` callback receives a client pinned to one connection for the
52
+ * duration of a real Postgres `BEGIN … COMMIT/ROLLBACK`; throwing rolls back.
53
+ */
54
+ export interface PgExecutor extends PgQueryable {
55
+ /**
56
+ * Run `fn` inside a single Postgres transaction on one pinned connection.
57
+ * The executor issues `BEGIN` before `fn`, `COMMIT` on resolve, and
58
+ * `ROLLBACK` on throw (rethrowing the original error).
59
+ */
60
+ transaction<T>(fn: (client: PgQueryable) => Promise<T>): Promise<T>;
61
+ /** Release any pooled resources. Optional (pglite/Bun.sql). */
62
+ close?(): Promise<void>;
63
+ }
64
+ /** Coerce a driver-decoded sequence value (`number | string | bigint`). */
65
+ export declare function asNumber(value: unknown): number;
66
+ /** Coerce a driver-decoded `bytea` value to a `Uint8Array`. */
67
+ export declare function asBytes(value: unknown): Uint8Array;
@@ -0,0 +1,56 @@
1
+ /**
2
+ * The minimal Postgres executor seam (REVISE B2: zero runtime deps).
3
+ *
4
+ * `PostgresServerStorage` is written entirely against this interface so the
5
+ * server library never imports a specific driver. Production wires one of:
6
+ *
7
+ * - **Bun.sql** (built into bun) — see `bunSqlExecutor` in the README;
8
+ * - **node-postgres** (`pg`) — a `Pool`/`PoolClient` adapter;
9
+ *
10
+ * and the test lane wires **@electric-sql/pglite** (embedded WASM Postgres,
11
+ * a devDependency) via `pgliteExecutor`. All three speak the same three
12
+ * primitives below.
13
+ *
14
+ * ## Type-parser contract (load-bearing)
15
+ *
16
+ * `commitSeq`/`serverVersion` are `int8`/`bigint` columns. Drivers disagree
17
+ * on how they decode `int8`:
18
+ *
19
+ * - pglite → JS `number`;
20
+ * - node-postgres → `string` (its default `int8` parser is off to avoid
21
+ * silent precision loss past 2^53);
22
+ * - Bun.sql → `bigint`.
23
+ *
24
+ * The storage layer therefore coerces every sequence value it reads through
25
+ * `Number(...)` (see `asNumber`). Sequences here are per-partition commit
26
+ * counters and server_version counters — both comfortably inside 2^53 for
27
+ * any realistic deployment, so the coercion is safe; a host that expects to
28
+ * exceed 2^53 commits in a single partition has bigger problems than this
29
+ * seam. `bytea` columns MUST decode to `Uint8Array`/`Buffer` (all three
30
+ * drivers do); `NULL` decodes to JS `null`.
31
+ */
32
+ /** Coerce a driver-decoded sequence value (`number | string | bigint`). */
33
+ export function asNumber(value) {
34
+ if (typeof value === 'number')
35
+ return value;
36
+ if (typeof value === 'bigint')
37
+ return Number(value);
38
+ if (typeof value === 'string')
39
+ return Number.parseInt(value, 10);
40
+ if (value === null || value === undefined)
41
+ return 0;
42
+ throw new Error(`expected a numeric column, got ${typeof value}`);
43
+ }
44
+ /** Coerce a driver-decoded `bytea` value to a `Uint8Array`. */
45
+ export function asBytes(value) {
46
+ if (value instanceof Uint8Array)
47
+ return value;
48
+ if (value === null || value === undefined) {
49
+ throw new Error('expected bytea, got null');
50
+ }
51
+ // node-postgres/Bun.sql return Buffer (a Uint8Array subclass); this branch
52
+ // is a defensive copy for any array-like the driver hands back.
53
+ if (Array.isArray(value))
54
+ return new Uint8Array(value);
55
+ throw new Error(`expected bytea, got ${typeof value}`);
56
+ }
@@ -0,0 +1,83 @@
1
+ /**
2
+ * LISTEN/NOTIFY multi-instance fanout (TODO §4.1) — the primitive that lets
3
+ * N server instances behind a load balancer wake each other's realtime
4
+ * sessions when a commit lands on any one of them.
5
+ *
6
+ * ## The multi-instance problem
7
+ *
8
+ * A commit applied on instance A fans out to A's *local* RealtimeHub
9
+ * sessions immediately (in-memory `notifyCommit`, full delta, no re-read).
10
+ * But a client whose socket lives on instance B never saw it. LISTEN/NOTIFY
11
+ * closes that gap:
12
+ *
13
+ * 1. after a commit lands, the originating instance calls `notify(payload)`
14
+ * → `NOTIFY syncular_commit, '<partition>:<commitSeq>'`;
15
+ * 2. every instance runs a `listen()` loop on a dedicated connection;
16
+ * on a notification it parses the payload and calls
17
+ * `hub.wake(partition, 'sync')`.
18
+ *
19
+ * ## Why wake, not re-broadcast the delta
20
+ *
21
+ * Postgres NOTIFY payloads are capped (~8000 bytes) and are not an ordered,
22
+ * lossless delta channel — so we do NOT try to ship commit bytes through
23
+ * them. Remote sessions receive a `sync` wake and pull the delta from the
24
+ * shared Postgres storage they already read from (§8.3 wake semantics). The
25
+ * originating instance keeps the in-memory fast path (its own sessions get
26
+ * the full delta with no extra read); only *cross-instance* delivery pays
27
+ * the re-pull. Single-instance deployments never install a fanout at all.
28
+ *
29
+ * The payload carries `commitSeq` purely for observability/ordering in logs;
30
+ * the wake itself is seq-agnostic (a session pulls whatever it is behind).
31
+ *
32
+ * pglite cannot exercise cross-connection NOTIFY, so the integration
33
+ * (`postgres-fanout.integration.test.ts`) is env-gated on `SYNCULAR_PG_URL`
34
+ * and skips cleanly; the payload encode/parse is unit-tested hermetically.
35
+ */
36
+ import type { WakeReason } from '@syncular/core';
37
+ /** The channel every syncular instance LISTENs on. */
38
+ export declare const FANOUT_CHANNEL = "syncular_commit";
39
+ export interface FanoutPayload {
40
+ readonly partition: string;
41
+ readonly commitSeq: number;
42
+ }
43
+ /**
44
+ * Encode a fanout payload as `<partition>:<commitSeq>`. The partition is
45
+ * base64url-encoded so a partition string containing `:` cannot corrupt the
46
+ * frame; commitSeq is a plain decimal integer.
47
+ */
48
+ export declare function encodeFanoutPayload(payload: FanoutPayload): string;
49
+ /** Parse a fanout payload; returns `undefined` for a malformed frame. */
50
+ export declare function parseFanoutPayload(text: string): FanoutPayload | undefined;
51
+ /** The hub surface the fanout wakes (a `RealtimeHub` satisfies this). */
52
+ export interface FanoutWakeTarget {
53
+ wake(partition: string, reason: WakeReason): void;
54
+ }
55
+ /**
56
+ * A raw notification connection. Production wires a driver's LISTEN support:
57
+ * - node-postgres: a dedicated `Client` with `client.on('notification', …)`
58
+ * after `LISTEN syncular_commit`;
59
+ * - Bun.sql: `sql.listen(channel, handler)`.
60
+ * The `notify` side can reuse the main pool (`SELECT pg_notify($1,$2)`), but
61
+ * LISTEN needs its own long-lived connection.
62
+ */
63
+ export interface PgNotificationConnection {
64
+ /** Register a payload handler for the channel and begin listening. */
65
+ listen(channel: string, handler: (payload: string) => void): Promise<void> | void;
66
+ /** Send a notification on the channel. */
67
+ notify(channel: string, payload: string): Promise<void>;
68
+ close?(): Promise<void>;
69
+ }
70
+ /**
71
+ * The fanout primitive. `install(hub)` starts the LISTEN loop that wakes the
72
+ * hub on every remote commit; `notifyCommit` is called after a local commit
73
+ * lands to fan it to the other instances.
74
+ */
75
+ export declare class PostgresFanout {
76
+ #private;
77
+ constructor(conn: PgNotificationConnection);
78
+ /** Start the LISTEN loop, waking `hub` on every notification received. */
79
+ install(hub: FanoutWakeTarget): Promise<void>;
80
+ /** Fan an applied commit out to the other instances. */
81
+ notifyCommit(partition: string, commitSeq: number): Promise<void>;
82
+ close(): Promise<void>;
83
+ }
@@ -0,0 +1,71 @@
1
+ /** The channel every syncular instance LISTENs on. */
2
+ export const FANOUT_CHANNEL = 'syncular_commit';
3
+ /**
4
+ * The wake reason remote instances raise on a fanout notification (§8.3):
5
+ * `catchup-required` — a commit landed on another instance, so the local
6
+ * session pulls the delta it is now behind on from shared storage.
7
+ */
8
+ const FANOUT_WAKE_REASON = 'catchup-required';
9
+ /**
10
+ * Encode a fanout payload as `<partition>:<commitSeq>`. The partition is
11
+ * base64url-encoded so a partition string containing `:` cannot corrupt the
12
+ * frame; commitSeq is a plain decimal integer.
13
+ */
14
+ export function encodeFanoutPayload(payload) {
15
+ const partition = Buffer.from(payload.partition, 'utf8').toString('base64url');
16
+ return `${partition}:${payload.commitSeq}`;
17
+ }
18
+ /** Parse a fanout payload; returns `undefined` for a malformed frame. */
19
+ export function parseFanoutPayload(text) {
20
+ const sep = text.indexOf(':');
21
+ if (sep <= 0)
22
+ return undefined;
23
+ const partitionB64 = text.slice(0, sep);
24
+ const seqText = text.slice(sep + 1);
25
+ const commitSeq = Number.parseInt(seqText, 10);
26
+ if (!Number.isFinite(commitSeq) || commitSeq < 0)
27
+ return undefined;
28
+ if (!/^\d+$/.test(seqText))
29
+ return undefined;
30
+ let partition;
31
+ try {
32
+ partition = Buffer.from(partitionB64, 'base64url').toString('utf8');
33
+ }
34
+ catch {
35
+ return undefined;
36
+ }
37
+ if (partition.length === 0)
38
+ return undefined;
39
+ return { partition, commitSeq };
40
+ }
41
+ /**
42
+ * The fanout primitive. `install(hub)` starts the LISTEN loop that wakes the
43
+ * hub on every remote commit; `notifyCommit` is called after a local commit
44
+ * lands to fan it to the other instances.
45
+ */
46
+ export class PostgresFanout {
47
+ #conn;
48
+ #installed = false;
49
+ constructor(conn) {
50
+ this.#conn = conn;
51
+ }
52
+ /** Start the LISTEN loop, waking `hub` on every notification received. */
53
+ async install(hub) {
54
+ if (this.#installed)
55
+ throw new Error('fanout already installed');
56
+ this.#installed = true;
57
+ await this.#conn.listen(FANOUT_CHANNEL, (payload) => {
58
+ const parsed = parseFanoutPayload(payload);
59
+ if (parsed === undefined)
60
+ return; // ignore malformed frames
61
+ hub.wake(parsed.partition, FANOUT_WAKE_REASON);
62
+ });
63
+ }
64
+ /** Fan an applied commit out to the other instances. */
65
+ async notifyCommit(partition, commitSeq) {
66
+ await this.#conn.notify(FANOUT_CHANNEL, encodeFanoutPayload({ partition, commitSeq }));
67
+ }
68
+ async close() {
69
+ await this.#conn.close?.();
70
+ }
71
+ }
@@ -0,0 +1,69 @@
1
+ import { type PgExecutor } from './pg-executor.js';
2
+ import type { CompiledSchema, CompiledTable } from './schema.js';
3
+ import type { ClientCursorInfo, ClientRecord, CommitMetadata, CommitMetadataQuery, CommitWindowQuery, RowScanQuery, ScopeActivityQuery, ScopeCommitActivity, ServerStorage, StorageTransaction, StoredCommit, StoredPushResult, StoredRow } from './storage.js';
4
+ /**
5
+ * Schema DDL. Applied by `PostgresServerStorage.migrate()` (idempotent).
6
+ *
7
+ * Covering index design (the reason this file exists):
8
+ * - `sync_change_scopes_pk (partition, tbl, var, value, commit_seq)` — the
9
+ * candidate scan for `readCommitWindow` ranges on the (partition, tbl,
10
+ * var, value IN …) prefix and returns `commit_seq` already ascending;
11
+ * - `sync_row_scopes_pk (partition, tbl, var, value, row_id)` — same shape
12
+ * for `scanRows`, ordered by `row_id`.
13
+ * Both are the PRIMARY KEY, so they are the clustering/covering index for
14
+ * their table. No secondary index is needed for the hot path.
15
+ *
16
+ * Blob reference index (§5.9.4) — parity with the SQLite dialect's
17
+ * `sync_blob_refs`:
18
+ * - PRIMARY KEY `(partition, tbl, row_id, blob_id)` — the by-row prefix
19
+ * lets `setBlobRefs` replace a row's set with a single ranged DELETE and
20
+ * the delete path clear it by (partition, tbl, row_id);
21
+ * - the secondary `sync_blob_refs_by_blob (partition, blob_id)` index
22
+ * drives `listRowsReferencingBlob` (the download-authorization candidate
23
+ * set, §5.9.5) as an index range, never a scan. `postgres-explain
24
+ * .test.ts` asserts an `Index` node here too.
25
+ */
26
+ export declare const POSTGRES_DDL = "\nCREATE TABLE IF NOT EXISTS sync_partitions(\n partition TEXT PRIMARY KEY,\n max_commit_seq BIGINT NOT NULL DEFAULT 0,\n horizon_seq BIGINT NOT NULL DEFAULT 0\n);\nCREATE TABLE IF NOT EXISTS sync_row_scopes(\n partition TEXT NOT NULL, tbl TEXT NOT NULL,\n var TEXT NOT NULL, value TEXT NOT NULL, row_id TEXT NOT NULL,\n PRIMARY KEY(partition, tbl, var, value, row_id)\n);\nCREATE TABLE IF NOT EXISTS sync_commits(\n partition TEXT NOT NULL, commit_seq BIGINT NOT NULL,\n client_id TEXT NOT NULL, client_commit_id TEXT NOT NULL,\n actor_id TEXT NOT NULL, created_at_ms BIGINT NOT NULL,\n PRIMARY KEY(partition, commit_seq)\n);\nCREATE INDEX IF NOT EXISTS sync_commits_by_time\n ON sync_commits(partition, created_at_ms);\nCREATE TABLE IF NOT EXISTS sync_changes(\n partition TEXT NOT NULL, commit_seq BIGINT NOT NULL, idx INTEGER NOT NULL,\n tbl TEXT NOT NULL, row_id TEXT NOT NULL, op SMALLINT NOT NULL,\n row_version BIGINT, scopes JSONB NOT NULL, payload BYTEA,\n PRIMARY KEY(partition, commit_seq, idx)\n);\nCREATE INDEX IF NOT EXISTS sync_changes_by_table\n ON sync_changes(partition, commit_seq, tbl, idx);\nCREATE TABLE IF NOT EXISTS sync_change_scopes(\n partition TEXT NOT NULL, tbl TEXT NOT NULL,\n var TEXT NOT NULL, value TEXT NOT NULL, commit_seq BIGINT NOT NULL,\n PRIMARY KEY(partition, tbl, var, value, commit_seq)\n);\nCREATE TABLE IF NOT EXISTS sync_push_results(\n partition TEXT NOT NULL, client_id TEXT NOT NULL,\n client_commit_id TEXT NOT NULL, result JSONB NOT NULL,\n PRIMARY KEY(partition, client_id, client_commit_id)\n);\nCREATE TABLE IF NOT EXISTS sync_clients(\n partition TEXT NOT NULL, client_id TEXT NOT NULL, actor_id TEXT NOT NULL,\n cursor BIGINT NOT NULL, subscriptions JSONB NOT NULL,\n updated_at_ms BIGINT NOT NULL,\n PRIMARY KEY(partition, client_id)\n);\nCREATE TABLE IF NOT EXISTS sync_blob_refs(\n partition TEXT NOT NULL, tbl TEXT NOT NULL, row_id TEXT NOT NULL,\n blob_id TEXT NOT NULL,\n PRIMARY KEY(partition, tbl, row_id, blob_id)\n);\nCREATE INDEX IF NOT EXISTS sync_blob_refs_by_blob\n ON sync_blob_refs(partition, blob_id);\n";
27
+ export declare class PostgresServerStorage implements ServerStorage {
28
+ #private;
29
+ constructor(exec: PgExecutor);
30
+ /** Apply the schema DDL (idempotent). Call once before use. */
31
+ migrate(): Promise<void>;
32
+ /** Resolve a table's compiled schema; row operations require `ensureSchema`. */
33
+ table(name: string): CompiledTable;
34
+ ensureSchema(schema: CompiledSchema): Promise<void>;
35
+ /**
36
+ * Open a real Postgres transaction. The push handler drives the returned
37
+ * `StorageTransaction` imperatively (getRow/upsert/…/commit), but the
38
+ * driver seam models a transaction as a callback scope. We bridge the two:
39
+ * `transaction(fn)` blocks inside `fn` on a promise that the imperative
40
+ * `commit()`/`rollback()` resolves/rejects, so BEGIN…COMMIT wraps exactly
41
+ * the handler's writes on one pinned connection.
42
+ */
43
+ begin(partition: string): Promise<StorageTransaction>;
44
+ getMaxCommitSeq(partition: string): Promise<number>;
45
+ getHorizonSeq(partition: string): Promise<number>;
46
+ setHorizonSeq(partition: string, seq: number): Promise<void>;
47
+ pruneCommitsThrough(partition: string, seq: number): Promise<number>;
48
+ getCommitSeqBefore(partition: string, createdBeforeMs: number): Promise<number>;
49
+ getRow(partition: string, table: string, rowId: string): Promise<StoredRow | undefined>;
50
+ getPushResult(partition: string, clientId: string, clientCommitId: string): Promise<StoredPushResult | undefined>;
51
+ readCommitWindow(partition: string, query: CommitWindowQuery): Promise<StoredCommit[]>;
52
+ scanRows(partition: string, query: RowScanQuery): Promise<StoredRow[]>;
53
+ getClientRecord(partition: string, clientId: string): Promise<ClientRecord | undefined>;
54
+ putClientRecord(partition: string, record: ClientRecord): Promise<void>;
55
+ listClientCursors(partition: string): Promise<ClientCursorInfo[]>;
56
+ listRowsReferencingBlob(partition: string, blobId: string): Promise<{
57
+ readonly table: string;
58
+ readonly rowId: string;
59
+ readonly scopes: Record<string, string>;
60
+ }[]>;
61
+ listReferencedBlobIds(partition: string): Promise<string[]>;
62
+ listClientRecords(partition: string): Promise<ClientRecord[]>;
63
+ listCommitMetadata(partition: string, query: CommitMetadataQuery): Promise<CommitMetadata[]>;
64
+ scopeActivity(partition: string, query: ScopeActivityQuery): Promise<ScopeCommitActivity[]>;
65
+ getRowScopes(partition: string, table: string, rowId: string): Promise<{
66
+ serverVersion: number;
67
+ scopes: Record<string, string>;
68
+ } | undefined>;
69
+ }