@syncular/server 0.1.3 → 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
@@ -0,0 +1,111 @@
1
+ /**
2
+ * Content-addressed blob store (SPEC.md §5.9.2).
3
+ *
4
+ * Blobs are the file-attachment bytes a row references through a `blob_ref`
5
+ * column (§2.4 tag 7). Unlike segments (§5.1 TTL cache entries), blobs are
6
+ * **durable**: a blob referenced by a live row must stay downloadable
7
+ * indefinitely (§5.9.5 B3). The store is keyed by `blobId`
8
+ * (`"sha256:" + hex`), shares the S3/R2 backend and presign machinery with
9
+ * segments, and exposes an orphan sweep (§5.9.2) rather than row-tied
10
+ * deletion.
11
+ */
12
+ import { type SyncularServerEvents } from './events.js';
13
+ import type { ServerStorage } from './storage.js';
14
+ export interface BlobRecord {
15
+ readonly blobId: string;
16
+ readonly partition: string;
17
+ readonly byteLength: number;
18
+ /** Advisory MIME type persisted from the upload, if any (§5.9.5). */
19
+ readonly mediaType?: string;
20
+ readonly createdAtMs: number;
21
+ }
22
+ /**
23
+ * Coarse blob-store counters for the admin/console read surface (TODO
24
+ * §2.5), partition-scoped. Optional. `count`/`bytes` are total stored
25
+ * blobs; a store that omits `stats()` cannot report them.
26
+ */
27
+ export interface BlobStoreStats {
28
+ readonly count: number;
29
+ readonly bytes: number;
30
+ /**
31
+ * ADDITIVE marker — present and `true` only on stores whose counters are
32
+ * approximate (a LIST-free S3/R2 accumulator). Absent on the exact
33
+ * in-process stores (memory/sqlite). The admin surface carries it through.
34
+ */
35
+ readonly approximate?: boolean;
36
+ }
37
+ export interface BlobStore {
38
+ /**
39
+ * Store blob bytes under `blobId` (idempotent — same id ⇒ no-op success,
40
+ * §5.9.3). The caller has already verified the content address matches.
41
+ */
42
+ put(partition: string, blobId: string, bytes: Uint8Array, nowMs: number, mediaType?: string): Promise<BlobRecord>;
43
+ /** Presence check for the push existence rule (§5.9.6) and download. */
44
+ has(partition: string, blobId: string): Promise<boolean>;
45
+ get(partition: string, blobId: string): Promise<{
46
+ record: BlobRecord;
47
+ bytes: Uint8Array;
48
+ } | undefined>;
49
+ /**
50
+ * §5.9.2 orphan sweep: delete blobs uploaded before `olderThanMs` that
51
+ * no live row references. The set of referenced blobIds is supplied by
52
+ * the storage reference index — the store never scans rows itself.
53
+ * Returns the deleted blobIds.
54
+ */
55
+ sweepOrphans(partition: string, olderThanMs: number, referencedBlobIds: ReadonlySet<string>): Promise<string[]>;
56
+ /** Admin/console counters (TODO §2.5) — ADDITIVE, optional. */
57
+ stats?(partition: string): Promise<BlobStoreStats>;
58
+ }
59
+ /** `"sha256:" + hex` of the bytes — the content address (§5.9.1). */
60
+ export declare function blobIdFor(bytes: Uint8Array): Promise<string>;
61
+ export declare function isBlobId(value: string): boolean;
62
+ export declare class MemoryBlobStore implements BlobStore {
63
+ #private;
64
+ put(partition: string, blobId: string, bytes: Uint8Array, nowMs: number, mediaType?: string): Promise<BlobRecord>;
65
+ has(partition: string, blobId: string): Promise<boolean>;
66
+ get(partition: string, blobId: string): Promise<{
67
+ record: BlobRecord;
68
+ bytes: Uint8Array;
69
+ } | undefined>;
70
+ sweepOrphans(partition: string, olderThanMs: number, referencedBlobIds: ReadonlySet<string>): Promise<string[]>;
71
+ stats(partition: string): Promise<BlobStoreStats>;
72
+ }
73
+ export interface SweepOrphanBlobsOptions {
74
+ /**
75
+ * Grace period: a blob uploaded within the last `graceMs` is NEVER swept,
76
+ * even if unreferenced. This is the whole protection for the §5.9.2
77
+ * upload-before-reference race — a fresh upload is legitimately
78
+ * unreferenced until its push lands, so the grace MUST comfortably exceed
79
+ * any sane upload→push latency. Default 24 h (well above any push window).
80
+ */
81
+ readonly graceMs?: number;
82
+ /** Sweep clock (epoch ms); defaults to `Date.now`. */
83
+ readonly nowMs?: number;
84
+ /** Optional structured-events sink (`blob.swept`). */
85
+ readonly events?: SyncularServerEvents;
86
+ }
87
+ export interface SweepOrphanBlobsResult {
88
+ readonly partition: string;
89
+ readonly swept: string[];
90
+ readonly referencedCount: number;
91
+ }
92
+ /**
93
+ * §5.9.2 orphan sweep — the ready-made GC helper. Reads the live keep-set
94
+ * (`storage.listReferencedBlobIds`) and hands it, with the grace cutoff, to
95
+ * `blobStore.sweepOrphans`, which deletes only blobs BOTH unreferenced AND
96
+ * older than the grace period. Returns the swept ids and emits one
97
+ * `blob.swept` ops event.
98
+ *
99
+ * The upload-before-reference race, stated honestly: a client uploads bytes
100
+ * before pushing the row that references them (§5.9.2), so a just-uploaded
101
+ * blob is unreferenced until its push arrives. The grace period is the ONLY
102
+ * thing standing between that fresh blob and deletion — keep it far above any
103
+ * push latency (the 24 h default is deliberately generous). The store's
104
+ * `createdAtMs` (object metadata) is the upload time the cutoff compares
105
+ * against.
106
+ *
107
+ * Requires `storage.listReferencedBlobIds` (the §5.9.4 reference index). A
108
+ * storage backend without it cannot be swept safely — this throws rather
109
+ * than sweeping against an empty keep-set (which would delete everything).
110
+ */
111
+ export declare function sweepOrphanBlobs(storage: ServerStorage, blobStore: BlobStore, partition: string, options?: SweepOrphanBlobsOptions): Promise<SweepOrphanBlobsResult>;
Binary file
@@ -0,0 +1,27 @@
1
+ /**
2
+ * §5.8 shipped compression posture for the direct segment endpoint:
3
+ * negotiate `Content-Encoding` from the request's `Accept-Encoding`
4
+ * (zstd preferred, gzip fallback, identity when the client offers
5
+ * neither), feature-detecting the runtime's codecs — zero dependencies.
6
+ *
7
+ * Segment bytes are stored and content-addressed UNCOMPRESSED (§5.1);
8
+ * this is a per-response serving concern only. It is never applied to
9
+ * stored objects or the signed-URL path (§5.8: presigned GETs serve the
10
+ * addressed bytes verbatim; edge compression is a deployment concern).
11
+ *
12
+ * Decision data (2026-07-03, 100k-row bench table, Bun 1.3): rows
13
+ * segments 6.2× in 8 ms (zstd) / 7.7× in 42 ms (gzip); sqlite images
14
+ * 3.4× in 14 ms (zstd) / 51 ms (gzip); client decompression ≤ 8 ms.
15
+ */
16
+ export type SegmentContentEncoding = 'zstd' | 'gzip';
17
+ export interface EncodedSegmentBody {
18
+ readonly bytes: Uint8Array;
19
+ /** Absent ⇒ identity (no `Content-Encoding` header). */
20
+ readonly contentEncoding?: SegmentContentEncoding;
21
+ }
22
+ /**
23
+ * Compress a buffered segment body per §5.8. Returns the original bytes
24
+ * (identity) when the client offered no supported encoding, the body is
25
+ * tiny, or the runtime has no codec.
26
+ */
27
+ export declare function encodeSegmentBody(bytes: Uint8Array, acceptEncoding: string | undefined): EncodedSegmentBody;
@@ -0,0 +1,69 @@
1
+ /**
2
+ * §5.8 shipped compression posture for the direct segment endpoint:
3
+ * negotiate `Content-Encoding` from the request's `Accept-Encoding`
4
+ * (zstd preferred, gzip fallback, identity when the client offers
5
+ * neither), feature-detecting the runtime's codecs — zero dependencies.
6
+ *
7
+ * Segment bytes are stored and content-addressed UNCOMPRESSED (§5.1);
8
+ * this is a per-response serving concern only. It is never applied to
9
+ * stored objects or the signed-URL path (§5.8: presigned GETs serve the
10
+ * addressed bytes verbatim; edge compression is a deployment concern).
11
+ *
12
+ * Decision data (2026-07-03, 100k-row bench table, Bun 1.3): rows
13
+ * segments 6.2× in 8 ms (zstd) / 7.7× in 42 ms (gzip); sqlite images
14
+ * 3.4× in 14 ms (zstd) / 51 ms (gzip); client decompression ≤ 8 ms.
15
+ */
16
+ /** Preference order is zstd, gzip (§5.8). Non-Bun runtimes without these
17
+ * codecs serve identity — negotiation, never a hard requirement here. */
18
+ function detectCodecs() {
19
+ const bun = globalThis.Bun;
20
+ const codecs = [];
21
+ const zstd = bun?.zstdCompressSync;
22
+ if (typeof zstd === 'function') {
23
+ codecs.push({ encoding: 'zstd', compress: (bytes) => zstd(bytes) });
24
+ }
25
+ const gzip = bun?.gzipSync;
26
+ if (typeof gzip === 'function') {
27
+ codecs.push({ encoding: 'gzip', compress: (bytes) => gzip(bytes) });
28
+ }
29
+ return codecs;
30
+ }
31
+ const CODECS = detectCodecs();
32
+ /** Bodies below this size are served identity (headers outweigh gains). */
33
+ const MIN_COMPRESS_BYTES = 1024;
34
+ /** Does the `Accept-Encoding` header value accept `encoding` (q > 0)? */
35
+ function accepts(header, encoding) {
36
+ for (const entry of header.split(',')) {
37
+ const [rawName, ...params] = entry.trim().split(';');
38
+ const name = rawName?.trim().toLowerCase();
39
+ if (name !== encoding)
40
+ continue;
41
+ for (const param of params) {
42
+ const [key, value] = param.trim().split('=');
43
+ if (key?.trim().toLowerCase() === 'q' && Number(value) === 0) {
44
+ return false;
45
+ }
46
+ }
47
+ return true;
48
+ }
49
+ return false;
50
+ }
51
+ /**
52
+ * Compress a buffered segment body per §5.8. Returns the original bytes
53
+ * (identity) when the client offered no supported encoding, the body is
54
+ * tiny, or the runtime has no codec.
55
+ */
56
+ export function encodeSegmentBody(bytes, acceptEncoding) {
57
+ if (acceptEncoding === undefined || bytes.length < MIN_COMPRESS_BYTES) {
58
+ return { bytes };
59
+ }
60
+ for (const codec of CODECS) {
61
+ if (accepts(acceptEncoding, codec.encoding)) {
62
+ return {
63
+ bytes: codec.compress(bytes),
64
+ contentEncoding: codec.encoding,
65
+ };
66
+ }
67
+ }
68
+ return { bytes };
69
+ }
@@ -0,0 +1,151 @@
1
+ /**
2
+ * The host context for `handleSyncRequest` (REVISE B2): storage, the
3
+ * `resolveScopes` host callback (runs in the host process — the moat),
4
+ * clock, and a segment store. Framework-free; adapters supply `partition`
5
+ * and `actorId` from host authentication (§1.1).
6
+ */
7
+ import type { ScopeMap } from '@syncular/core';
8
+ import type { BlobStore } from './blob-store.js';
9
+ import type { CrdtMergerRegistry } from './crdt-merger.js';
10
+ import type { SyncularServerEvents } from './events.js';
11
+ import type { LeaseStore } from './lease-store.js';
12
+ import type { ServerSchema } from './schema.js';
13
+ import type { SegmentStore } from './segment-store.js';
14
+ import type { BlobPresignConfig, BlobUploadPresignConfig, SegmentUrlConfig } from './signed-url.js';
15
+ import type { SqliteImageBuilder } from './sqlite-image.js';
16
+ import type { ServerStorage, StoredCommit } from './storage.js';
17
+ import type { ValidatorRegistry } from './validate.js';
18
+ /** SSP2 body content type (§1.1). */
19
+ export declare const SSP2_CONTENT_TYPE = "application/vnd.syncular.sync.v2";
20
+ export interface ResolveScopesArgs {
21
+ readonly partition: string;
22
+ readonly actorId: string;
23
+ /**
24
+ * The requesting client (§1.5). Present on sync rounds (the lease key,
25
+ * §7.3.3); absent on segment/blob downloads, which re-authorize by
26
+ * actor + scopes only (§5.5, §5.9.5) and never consult a lease.
27
+ */
28
+ readonly clientId?: string;
29
+ }
30
+ /**
31
+ * Sentinel a resolver returns to signal a **live-authorization outage**
32
+ * (§7.3.3): the live authority is unreachable, so the server SHOULD
33
+ * authorize this request against the actor's stored lease instead of
34
+ * throwing. Distinct from throwing (§3.2 rule 5, which still fails loud
35
+ * and revokes). Only meaningful when `leases` is configured; without a
36
+ * lease store an outage degrades to `sync.auth_lease_required`.
37
+ */
38
+ export declare const RESOLVER_OUTAGE: unique symbol;
39
+ export type ResolverOutage = typeof RESOLVER_OUTAGE;
40
+ /**
41
+ * Host callback: actor → allowed scopes (§3.2 step 3). Resolved at most
42
+ * once per request and memoized (§3.4 step 1). `'*'` means "any value for
43
+ * this variable". A throwing resolver revokes subscriptions and rejects
44
+ * writes with `sync.forbidden` — fail loud, never leak. Returning
45
+ * `RESOLVER_OUTAGE` instead opts the request into lease authorization
46
+ * (§7.3.3) — a deliberate outage signal, not a failure.
47
+ */
48
+ export type ResolveScopes = (args: ResolveScopesArgs) => ScopeMap | ResolverOutage | Promise<ScopeMap | ResolverOutage>;
49
+ /** §7.3: auth-lease feature config. Absent ⇒ leases off (zero cost). */
50
+ export interface LeaseConfig {
51
+ /** Lease TTL in ms — the sliding window width (§7.3.3). */
52
+ readonly ttlMs: number;
53
+ /** The lease store (§7.3.1); host-owned, optional like blobs. */
54
+ readonly store: LeaseStore;
55
+ }
56
+ export interface ServerLimits {
57
+ /** Operation cap per request (§6.1 `sync.too_many_operations`). */
58
+ readonly maxOperationsPerRequest: number;
59
+ /** Inline rows segments up to this size (§5.7 SHOULD: 256 KiB). */
60
+ readonly inlineSegmentMaxBytes: number;
61
+ }
62
+ export declare const DEFAULT_LIMITS: ServerLimits;
63
+ /** Receives applied commits for realtime fanout (§8.2). */
64
+ export interface RealtimeNotifier {
65
+ notifyCommit(partition: string, commit: StoredCommit): void | Promise<void>;
66
+ }
67
+ export interface SyncServerConfig {
68
+ readonly schema: ServerSchema;
69
+ readonly storage: ServerStorage;
70
+ readonly segments: SegmentStore;
71
+ /**
72
+ * Blob store (§5.9). Absent ⇒ blobs unsupported: a table with a
73
+ * `blob_ref` column may still sync (the ref is just a string), but the
74
+ * push existence check (§6.6) and the `/blobs` endpoints require it.
75
+ */
76
+ readonly blobs?: BlobStore;
77
+ /** Max upload size for `/blobs` (§5.9.3 `blob.too_large`); default 64 MiB. */
78
+ readonly maxBlobBytes?: number;
79
+ /**
80
+ * CRDT merger registry (§5.10.2), `crdtType` → merge fn. Absent ⇒ no
81
+ * column can CRDT-merge: a push touching a `crdt` column then fails
82
+ * `sync.crdt_merge_failed` (§5.10.6). Kept out of core — the reference
83
+ * `yjs-doc` merger ships in `@syncular/crdt-yjs` (the blob-store rule).
84
+ */
85
+ readonly crdtMergers?: CrdtMergerRegistry;
86
+ /**
87
+ * §6.7 per-table write-validation hooks (`table` → validator). Absent ⇒
88
+ * the feature is off: the push path pays only an `undefined` check and
89
+ * builds no validator context — zero cost. Present ⇒ each push operation
90
+ * on a listed table runs its validator after decode + §3.4 scope
91
+ * authorization, inside the commit transaction; a throw rejects the
92
+ * whole commit atomically (§6.4) with the host code (§6.3). Kept a host
93
+ * callback (like `resolveScopes`) — business rules live in the host
94
+ * process, never on the wire.
95
+ */
96
+ readonly validators?: ValidatorRegistry;
97
+ readonly resolveScopes: ResolveScopes;
98
+ /**
99
+ * §7.3 auth leases. Absent ⇒ the feature is off: no `LEASE` frame is
100
+ * ever emitted and a `RESOLVER_OUTAGE` signal degrades to
101
+ * `sync.auth_lease_required`. Present ⇒ successful authorized rounds
102
+ * issue/refresh a lease and outages authorize against it.
103
+ */
104
+ readonly leases?: LeaseConfig;
105
+ /** Epoch-ms clock; defaults to `Date.now`. */
106
+ readonly clock?: () => number;
107
+ readonly limits?: Partial<ServerLimits>;
108
+ /** §5.4 signed-URL delivery: native HMAC tokens or delegated presign. */
109
+ readonly signedUrls?: SegmentUrlConfig;
110
+ /**
111
+ * §5.9.5 signed-URL delivery for BLOB downloads (delegated presign,
112
+ * always-issue). When set, `handleBlobDownload` issues a provider-presigned
113
+ * GET URL AFTER the row-derived authorization check and returns
114
+ * `url`/`urlExpiresAtMs` on `BlobDownloadResult` WITHOUT loading the bytes
115
+ * (the sync server exits the download egress path). The reference client
116
+ * fetches the URL directly (§5.9.5 recovery rule: failure ⇒ re-request,
117
+ * never fall-through). Absent ⇒ blobs are served inline (the shipped
118
+ * default).
119
+ */
120
+ readonly blobSignedUrls?: BlobPresignConfig;
121
+ /**
122
+ * §5.9.3 presigned-upload (direct-to-storage) delivery. When set,
123
+ * `handleBlobUploadGrant` issues a single provider-presigned PUT URL AFTER
124
+ * host authentication + the size-cap check, and the client PUTs bytes
125
+ * straight to the object store (the sync server exits the upload egress
126
+ * path). Absent ⇒ the `/upload-grant` route reports no grant and clients
127
+ * stream through the direct `PUT /blobs/{blobId}` endpoint (§5.9.3 —
128
+ * capability, not fallback). Never a multipart/chunk protocol (single PUT).
129
+ */
130
+ readonly blobUploadUrls?: BlobUploadPresignConfig;
131
+ /**
132
+ * §5.3 sqlite-image builder (TODO §4.2), injected so the pull path never
133
+ * statically imports `bun:sqlite`. Absent ⇒ the sqlite-image lane is off
134
+ * (bit-2 clients are served the rows lane) — the Workers/edge posture. A
135
+ * Bun/Node host wires `buildSqliteImage` from `@syncular/server`.
136
+ */
137
+ readonly sqliteImageBuilder?: SqliteImageBuilder;
138
+ readonly realtime?: RealtimeNotifier;
139
+ /**
140
+ * Optional structured-events sink (ops seam). Absent ⇒ zero cost: no
141
+ * event objects are built. A throwing sink never affects processing.
142
+ */
143
+ readonly events?: SyncularServerEvents;
144
+ }
145
+ /** Per-request context: the config plus host-authenticated identity. */
146
+ export interface SyncRequestContext extends SyncServerConfig {
147
+ readonly partition: string;
148
+ readonly actorId: string;
149
+ }
150
+ export declare function clockOf(ctx: SyncServerConfig): () => number;
151
+ export declare function limitsOf(ctx: SyncServerConfig): ServerLimits;
@@ -0,0 +1,21 @@
1
+ /** SSP2 body content type (§1.1). */
2
+ export const SSP2_CONTENT_TYPE = 'application/vnd.syncular.sync.v2';
3
+ /**
4
+ * Sentinel a resolver returns to signal a **live-authorization outage**
5
+ * (§7.3.3): the live authority is unreachable, so the server SHOULD
6
+ * authorize this request against the actor's stored lease instead of
7
+ * throwing. Distinct from throwing (§3.2 rule 5, which still fails loud
8
+ * and revokes). Only meaningful when `leases` is configured; without a
9
+ * lease store an outage degrades to `sync.auth_lease_required`.
10
+ */
11
+ export const RESOLVER_OUTAGE = Symbol.for('syncular.resolver_outage');
12
+ export const DEFAULT_LIMITS = {
13
+ maxOperationsPerRequest: 500,
14
+ inlineSegmentMaxBytes: 256 * 1024,
15
+ };
16
+ export function clockOf(ctx) {
17
+ return ctx.clock ?? Date.now;
18
+ }
19
+ export function limitsOf(ctx) {
20
+ return { ...DEFAULT_LIMITS, ...ctx.limits };
21
+ }
@@ -0,0 +1,28 @@
1
+ /**
2
+ * CRDT column merge registry (SPEC.md §5.10.2) — the pluggability seam.
3
+ *
4
+ * The server core NEVER depends on a CRDT library. A `crdt` column (§2.4
5
+ * tag 8) is merged server-side on push (§5.10.3) by a host-supplied
6
+ * `CrdtMerger`, selected per column by its schema-IR `crdtType` (§5.10.1).
7
+ * The reference `yjs-doc` merger lives in `@syncular/crdt-yjs`, keeping
8
+ * Yjs out of core/server (the blob-store placement rule, §5.9.2, applied to
9
+ * CRDT).
10
+ */
11
+ /**
12
+ * Merge a `crdt` column's stored value with an incoming push value,
13
+ * returning the new stored bytes (§5.10.2). `stored` is `null` when the row
14
+ * is new or the column was NULL. Implementations MUST be commutative,
15
+ * associative, and idempotent over the updates they consume — the CRDT
16
+ * contract that makes concurrent-order-independent convergence and
17
+ * idempotent replay hold (§5.10.3).
18
+ *
19
+ * A synchronous return is fine; async is allowed so a native/WASM merger can
20
+ * cross an FFI boundary.
21
+ */
22
+ export type CrdtMerger = (stored: Uint8Array | null, incoming: Uint8Array) => Uint8Array | Promise<Uint8Array>;
23
+ /**
24
+ * `crdtType` (§5.10.1) → merger. Supplied through `SyncServerConfig`
25
+ * (§ context). Absent ⇒ no column can CRDT-merge: a push touching a `crdt`
26
+ * column then fails `sync.crdt_merge_failed` (§5.10.2, §5.10.6).
27
+ */
28
+ export type CrdtMergerRegistry = Readonly<Record<string, CrdtMerger>>;
@@ -0,0 +1,11 @@
1
+ /**
2
+ * CRDT column merge registry (SPEC.md §5.10.2) — the pluggability seam.
3
+ *
4
+ * The server core NEVER depends on a CRDT library. A `crdt` column (§2.4
5
+ * tag 8) is merged server-side on push (§5.10.3) by a host-supplied
6
+ * `CrdtMerger`, selected per column by its schema-IR `crdtType` (§5.10.1).
7
+ * The reference `yjs-doc` merger lives in `@syncular/crdt-yjs`, keeping
8
+ * Yjs out of core/server (the blob-store placement rule, §5.9.2, applied to
9
+ * CRDT).
10
+ */
11
+ export {};
@@ -0,0 +1,50 @@
1
+ import type { CompiledSchema, CompiledTable } from './schema.js';
2
+ import type { ClientCursorInfo, ClientRecord, CommitMetadata, CommitMetadataQuery, CommitWindowQuery, RowScanQuery, ScopeActivityQuery, ScopeCommitActivity, ServerStorage, StorageTransaction, StoredCommit, StoredPushResult, StoredRow } from './storage.js';
3
+ export interface D1PreparedStatement {
4
+ bind(...values: unknown[]): D1PreparedStatement;
5
+ first<T = Record<string, unknown>>(): Promise<T | null>;
6
+ all<T = Record<string, unknown>>(): Promise<{
7
+ results: T[];
8
+ }>;
9
+ run(): Promise<unknown>;
10
+ }
11
+ export interface D1Database {
12
+ prepare(query: string): D1PreparedStatement;
13
+ batch(statements: D1PreparedStatement[]): Promise<unknown[]>;
14
+ exec(query: string): Promise<unknown>;
15
+ }
16
+ export declare class D1ServerStorage implements ServerStorage {
17
+ #private;
18
+ constructor(db: D1Database);
19
+ /** Apply the schema DDL (idempotent). Call once before use. */
20
+ migrate(): Promise<void>;
21
+ /** Resolve a table's compiled schema; row operations require `ensureSchema`. */
22
+ table(name: string): CompiledTable;
23
+ ensureSchema(schema: CompiledSchema): Promise<void>;
24
+ begin(partition: string): Promise<StorageTransaction>;
25
+ getMaxCommitSeq(partition: string): Promise<number>;
26
+ getHorizonSeq(partition: string): Promise<number>;
27
+ setHorizonSeq(partition: string, seq: number): Promise<void>;
28
+ pruneCommitsThrough(partition: string, seq: number): Promise<number>;
29
+ getCommitSeqBefore(partition: string, createdBeforeMs: number): Promise<number>;
30
+ getRow(partition: string, table: string, rowId: string): Promise<StoredRow | undefined>;
31
+ getPushResult(partition: string, clientId: string, clientCommitId: string): Promise<StoredPushResult | undefined>;
32
+ readCommitWindow(partition: string, query: CommitWindowQuery): Promise<StoredCommit[]>;
33
+ scanRows(partition: string, query: RowScanQuery): Promise<StoredRow[]>;
34
+ getClientRecord(partition: string, clientId: string): Promise<ClientRecord | undefined>;
35
+ putClientRecord(partition: string, record: ClientRecord): Promise<void>;
36
+ listClientCursors(partition: string): Promise<ClientCursorInfo[]>;
37
+ listRowsReferencingBlob(partition: string, blobId: string): Promise<{
38
+ readonly table: string;
39
+ readonly rowId: string;
40
+ readonly scopes: Record<string, string>;
41
+ }[]>;
42
+ listReferencedBlobIds(partition: string): Promise<string[]>;
43
+ listClientRecords(partition: string): Promise<ClientRecord[]>;
44
+ listCommitMetadata(partition: string, query: CommitMetadataQuery): Promise<CommitMetadata[]>;
45
+ scopeActivity(partition: string, query: ScopeActivityQuery): Promise<ScopeCommitActivity[]>;
46
+ getRowScopes(partition: string, table: string, rowId: string): Promise<{
47
+ serverVersion: number;
48
+ scopes: Record<string, string>;
49
+ } | undefined>;
50
+ }
Binary file
package/dist/errors.d.ts CHANGED
@@ -1,10 +1,36 @@
1
- export declare class SyncClientSchemaUnsupportedError extends Error {
2
- readonly code: 'sync.client_schema_unsupported';
3
- readonly schemaVersion: number | null;
4
- readonly supportedSchemaVersions: readonly number[];
5
- constructor(options: {
6
- schemaVersion: number | null | undefined;
7
- supportedSchemaVersions: readonly number[];
8
- });
1
+ /**
2
+ * Server-side protocol errors (SPEC.md §10).
3
+ *
4
+ * Every request-level failure raised by the server core is a `SyncError`
5
+ * carrying the fixed catalog metadata of §10.2 (`category`, `retryable`,
6
+ * `recommendedAction`) plus an HTTP status for transport adapters. The
7
+ * catalog is closed: creating a `SyncError` with an unknown code throws.
8
+ */
9
+ export interface ErrorCatalogEntry {
10
+ readonly category: string;
11
+ readonly retryable: boolean;
12
+ readonly recommendedAction: string;
13
+ readonly httpStatus: number;
9
14
  }
10
- //# sourceMappingURL=errors.d.ts.map
15
+ /** The §10.2 wire catalog (21 sync.* + 4 blob.* codes), keyed by stable code. */
16
+ export declare const ERROR_CATALOG: Readonly<Record<string, ErrorCatalogEntry>>;
17
+ export declare class SyncError extends Error {
18
+ readonly name = "SyncError";
19
+ readonly code: string;
20
+ readonly category: string;
21
+ readonly retryable: boolean;
22
+ readonly recommendedAction: string;
23
+ readonly httpStatus: number;
24
+ readonly details?: string;
25
+ constructor(code: string, message?: string, details?: string);
26
+ }
27
+ export declare function syncError(code: string, message?: string, details?: string): SyncError;
28
+ /** The §10.1 JSON error shape, for HTTP-level error bodies (§1.1). */
29
+ export declare function errorBody(error: SyncError): {
30
+ code: string;
31
+ category: string;
32
+ retryable: boolean;
33
+ recommendedAction: string;
34
+ message: string;
35
+ details?: unknown;
36
+ };