@abloatai/ablo 0.34.1 → 0.36.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 (536) hide show
  1. package/AGENTS.md +2 -1
  2. package/CHANGELOG.md +758 -5
  3. package/README.md +56 -502
  4. package/bin/ablo.cjs +39 -0
  5. package/dist/BaseSyncedStore.d.ts +176 -48
  6. package/dist/BaseSyncedStore.js +346 -214
  7. package/dist/Database.d.ts +17 -44
  8. package/dist/Database.js +96 -79
  9. package/dist/InstanceCache.d.ts +31 -6
  10. package/dist/InstanceCache.js +65 -30
  11. package/dist/LazyReferenceCollection.d.ts +3 -3
  12. package/dist/LazyReferenceCollection.js +4 -4
  13. package/dist/Model.d.ts +23 -13
  14. package/dist/Model.js +27 -17
  15. package/dist/ModelRegistry.d.ts +8 -4
  16. package/dist/ModelRegistry.js +20 -18
  17. package/dist/NetworkMonitor.d.ts +3 -1
  18. package/dist/NetworkMonitor.js +7 -5
  19. package/dist/{SyncEngineContext.d.ts → RuntimeContext.d.ts} +20 -13
  20. package/dist/{SyncEngineContext.js → RuntimeContext.js} +11 -12
  21. package/dist/SyncClient.d.ts +47 -47
  22. package/dist/SyncClient.js +215 -156
  23. package/dist/ai-sdk/coordinatedTool.d.ts +2 -2
  24. package/dist/ai-sdk/coordinatedTool.js +1 -1
  25. package/dist/ai-sdk/coordinationContext.d.ts +2 -2
  26. package/dist/ai-sdk/coordinationContext.js +1 -1
  27. package/dist/ai-sdk/wrap.d.ts +3 -3
  28. package/dist/ai-sdk/wrap.js +2 -2
  29. package/dist/auth/index.d.ts +1 -156
  30. package/dist/auth/index.js +8 -301
  31. package/dist/client/Ablo.d.ts +42 -287
  32. package/dist/client/Ablo.js +129 -963
  33. package/dist/client/abloClient.d.ts +309 -0
  34. package/dist/client/abloClient.js +13 -0
  35. package/dist/client/clientPrelude.d.ts +52 -0
  36. package/dist/client/clientPrelude.js +60 -0
  37. package/dist/client/consoleLogger.d.ts +2 -2
  38. package/dist/client/coreClient.d.ts +60 -0
  39. package/dist/client/coreClient.js +118 -0
  40. package/dist/client/createInternalComponents.d.ts +8 -4
  41. package/dist/client/createInternalComponents.js +17 -10
  42. package/dist/client/createModelProxy.d.ts +98 -373
  43. package/dist/client/createModelProxy.js +233 -139
  44. package/dist/client/humans.d.ts +69 -0
  45. package/dist/client/humans.js +78 -0
  46. package/dist/client/modelRegistration.d.ts +1 -1
  47. package/dist/client/modelRegistration.js +9 -9
  48. package/dist/client/options.d.ts +73 -17
  49. package/dist/client/reactiveEngine.d.ts +53 -0
  50. package/dist/client/reactiveEngine.js +688 -0
  51. package/dist/client/resourceTypes.d.ts +9 -250
  52. package/dist/client/resourceTypes.js +8 -5
  53. package/dist/client/schemaConfig.d.ts +4 -4
  54. package/dist/client/schemaConfig.js +6 -2
  55. package/dist/client/storeCluster.d.ts +47 -0
  56. package/dist/client/storeCluster.js +118 -0
  57. package/dist/client/storeLifecycle.d.ts +61 -0
  58. package/dist/client/storeLifecycle.js +231 -0
  59. package/dist/client/validateAbloOptions.d.ts +3 -2
  60. package/dist/client/validateAbloOptions.js +1 -1
  61. package/dist/client/wsMutationExecutor.d.ts +3 -3
  62. package/dist/client/wsMutationExecutor.js +3 -3
  63. package/dist/context.d.ts +22 -9
  64. package/dist/context.js +33 -9
  65. package/dist/coordination/ClaimLog.d.ts +26 -0
  66. package/dist/coordination/ClaimLog.js +32 -0
  67. package/dist/coordination/index.d.ts +1 -15
  68. package/dist/coordination/index.js +8 -31
  69. package/dist/core/index.d.ts +3 -3
  70. package/dist/core/index.js +2 -2
  71. package/dist/docs/catalog.d.ts +72 -0
  72. package/dist/docs/catalog.js +230 -0
  73. package/dist/docs/index.d.ts +10 -0
  74. package/dist/docs/index.js +10 -0
  75. package/dist/environment.d.ts +1 -40
  76. package/dist/environment.js +8 -37
  77. package/dist/index.d.ts +44 -36
  78. package/dist/index.js +30 -22
  79. package/dist/interfaces/index.d.ts +44 -134
  80. package/dist/keys/index.d.ts +1 -77
  81. package/dist/keys/index.js +8 -190
  82. package/dist/mutators/{RecordingTransaction.d.ts → RecordingMutation.d.ts} +4 -4
  83. package/dist/mutators/{RecordingTransaction.js → RecordingMutation.js} +2 -2
  84. package/dist/mutators/Transaction.d.ts +1 -1
  85. package/dist/mutators/Transaction.js +1 -1
  86. package/dist/mutators/UndoManager.d.ts +6 -6
  87. package/dist/mutators/UndoManager.js +5 -5
  88. package/dist/mutators/defineMutators.d.ts +3 -3
  89. package/dist/mutators/defineMutators.js +1 -1
  90. package/dist/mutators/inverseOp.js +2 -2
  91. package/dist/mutators/mutateActions.d.ts +3 -3
  92. package/dist/mutators/mutateActions.js +1 -1
  93. package/dist/mutators/readerActions.d.ts +1 -1
  94. package/dist/mutators/undoApply.d.ts +1 -1
  95. package/dist/mutators/undoApply.js +1 -1
  96. package/dist/policy/index.d.ts +2 -2
  97. package/dist/policy/index.js +1 -1
  98. package/dist/query/client.d.ts +5 -2
  99. package/dist/query/client.js +10 -9
  100. package/dist/query/types.d.ts +6 -41
  101. package/dist/query/types.js +2 -2
  102. package/dist/react/AbloProvider.d.ts +18 -8
  103. package/dist/react/AbloProvider.js +10 -9
  104. package/dist/react/context.d.ts +3 -3
  105. package/dist/react/context.js +1 -1
  106. package/dist/react/createAbloReact.d.ts +56 -0
  107. package/dist/react/createAbloReact.js +51 -0
  108. package/dist/react/index.d.ts +6 -5
  109. package/dist/react/index.js +6 -3
  110. package/dist/react/internalContext.d.ts +1 -1
  111. package/dist/react/useAblo.d.ts +12 -5
  112. package/dist/react/useAblo.js +26 -8
  113. package/dist/react/useCurrentUserId.js +1 -1
  114. package/dist/react/useErrorListener.js +1 -1
  115. package/dist/react/useMutationFailureListener.d.ts +2 -2
  116. package/dist/react/useMutationFailureListener.js +1 -1
  117. package/dist/react/useMutators.d.ts +3 -3
  118. package/dist/react/useMutators.js +3 -3
  119. package/dist/react/useUndoScope.d.ts +5 -5
  120. package/dist/react/useUndoScope.js +1 -1
  121. package/dist/schema/coordination.d.ts +69 -10
  122. package/dist/schema/coordination.js +90 -9
  123. package/dist/schema/ddl.js +2 -2
  124. package/dist/schema/diff.d.ts +1 -1
  125. package/dist/schema/generate.js +1 -1
  126. package/dist/schema/index.d.ts +11 -10
  127. package/dist/schema/index.js +22 -18
  128. package/dist/schema/queries.d.ts +27 -27
  129. package/dist/schema/queries.js +23 -23
  130. package/dist/schema/select.d.ts +3 -3
  131. package/dist/schema/select.js +6 -3
  132. package/dist/schema/serialize.d.ts +15 -6
  133. package/dist/schema/serialize.js +20 -3
  134. package/dist/schema/sugar.d.ts +6 -7
  135. package/dist/schema/sugar.js +9 -12
  136. package/dist/schema/syncDeltaRow.d.ts +4 -152
  137. package/dist/schema/syncDeltaRow.js +4 -105
  138. package/dist/server/adapter.d.ts +18 -1
  139. package/dist/server/commit.d.ts +10 -16
  140. package/dist/server/index.d.ts +1 -1
  141. package/dist/server/index.js +1 -1
  142. package/dist/server/readConfig.d.ts +1 -1
  143. package/dist/source/adapter.d.ts +7 -5
  144. package/dist/source/adapter.js +7 -5
  145. package/dist/source/adapters/drizzle.d.ts +1 -1
  146. package/dist/source/adapters/drizzle.js +2 -2
  147. package/dist/source/adapters/kysely.d.ts +1 -1
  148. package/dist/source/adapters/kysely.js +1 -1
  149. package/dist/source/adapters/kyselyMutationCore.d.ts +1 -1
  150. package/dist/source/adapters/kyselyMutationCore.js +2 -2
  151. package/dist/source/adapters/memory.js +1 -1
  152. package/dist/source/adapters/prisma.d.ts +8 -3
  153. package/dist/source/adapters/prisma.js +1 -1
  154. package/dist/source/connector.js +1 -1
  155. package/dist/source/connectorProtocol.d.ts +2 -8
  156. package/dist/source/connectorProtocol.js +3 -2
  157. package/dist/source/contract.d.ts +29 -17
  158. package/dist/source/contract.js +27 -22
  159. package/dist/source/factory.d.ts +1 -1
  160. package/dist/source/idempotency.js +2 -2
  161. package/dist/source/index.d.ts +1 -0
  162. package/dist/source/index.js +3 -0
  163. package/dist/source/next.d.ts +1 -1
  164. package/dist/source/signing.d.ts +9 -2
  165. package/dist/source/signing.js +4 -1
  166. package/dist/source/types.d.ts +6 -4
  167. package/dist/source/types.js +1 -1
  168. package/dist/{core/storeContract.d.ts → storeContract.d.ts} +6 -6
  169. package/dist/{core → stores}/DatabaseManager.d.ts +3 -1
  170. package/dist/{core → stores}/DatabaseManager.js +14 -13
  171. package/dist/stores/ObjectStore.d.ts +1 -1
  172. package/dist/{core → stores}/StoreManager.d.ts +9 -26
  173. package/dist/{core → stores}/StoreManager.js +29 -77
  174. package/dist/stores/SyncActionStore.d.ts +4 -2
  175. package/dist/stores/SyncActionStore.js +11 -17
  176. package/dist/stores/syncAction.d.ts +26 -0
  177. package/dist/stores/syncAction.js +16 -0
  178. package/dist/surface.d.ts +3 -3
  179. package/dist/surface.js +6 -4
  180. package/dist/sync/BootstrapFetcher.d.ts +127 -6
  181. package/dist/sync/BootstrapFetcher.js +511 -83
  182. package/dist/sync/ConnectionManager.d.ts +6 -198
  183. package/dist/sync/ConnectionManager.js +6 -677
  184. package/dist/sync/OnDemandLoader.d.ts +5 -2
  185. package/dist/sync/OnDemandLoader.js +61 -21
  186. package/dist/sync/SubscriptionManager.d.ts +13 -2
  187. package/dist/sync/SubscriptionManager.js +23 -5
  188. package/dist/sync/SyncWebSocket.d.ts +27 -510
  189. package/dist/sync/SyncWebSocket.js +76 -954
  190. package/dist/sync/awaitClaimGrant.d.ts +4 -44
  191. package/dist/sync/awaitClaimGrant.js +4 -109
  192. package/dist/sync/bootstrapApply.d.ts +3 -0
  193. package/dist/sync/bootstrapApply.js +2 -2
  194. package/dist/sync/commitFrames.d.ts +6 -40
  195. package/dist/sync/commitFrames.js +6 -97
  196. package/dist/sync/contextPorts.d.ts +18 -0
  197. package/dist/sync/contextPorts.js +31 -0
  198. package/dist/sync/createClaimStream.d.ts +5 -49
  199. package/dist/sync/createClaimStream.js +5 -469
  200. package/dist/sync/createPresenceStream.d.ts +26 -4
  201. package/dist/sync/createPresenceStream.js +28 -20
  202. package/dist/sync/createSnapshot.d.ts +2 -2
  203. package/dist/sync/createSnapshot.js +1 -1
  204. package/dist/sync/credentialLifecycle.d.ts +5 -173
  205. package/dist/sync/credentialLifecycle.js +5 -320
  206. package/dist/sync/deltaPipeline.d.ts +13 -12
  207. package/dist/sync/deltaPipeline.js +21 -4
  208. package/dist/sync/groupChange.d.ts +3 -0
  209. package/dist/sync/groupChange.js +16 -14
  210. package/dist/sync/participants.d.ts +24 -6
  211. package/dist/sync/participants.js +32 -23
  212. package/dist/sync/schemaDrift.d.ts +55 -0
  213. package/dist/sync/schemaDrift.js +53 -0
  214. package/dist/sync/schemas.d.ts +23 -33
  215. package/dist/sync/schemas.js +29 -20
  216. package/dist/sync/syncPlan.d.ts +3 -3
  217. package/dist/sync/wsFrameHandlers.d.ts +6 -114
  218. package/dist/sync/wsFrameHandlers.js +6 -392
  219. package/dist/syncLog/contract.d.ts +20 -0
  220. package/dist/syncLog/contract.js +19 -0
  221. package/dist/syncLog/index.d.ts +1 -0
  222. package/dist/syncLog/index.js +1 -0
  223. package/dist/transaction/ablo.d.ts +88 -0
  224. package/dist/transaction/ablo.js +33 -0
  225. package/dist/{client/auth.d.ts → transaction/auth/apiKey.d.ts} +43 -8
  226. package/dist/{client/auth.js → transaction/auth/apiKey.js} +19 -0
  227. package/dist/transaction/auth/bootstrapScope.d.ts +15 -0
  228. package/dist/transaction/auth/bootstrapScope.js +1 -0
  229. package/dist/transaction/auth/capability.d.ts +212 -0
  230. package/dist/transaction/auth/capability.js +224 -0
  231. package/dist/{auth → transaction/auth}/credentialSource.d.ts +8 -1
  232. package/dist/{client → transaction/auth}/identity.d.ts +8 -7
  233. package/dist/{client → transaction/auth}/identity.js +1 -1
  234. package/dist/transaction/auth/index.d.ts +162 -0
  235. package/dist/transaction/auth/index.js +304 -0
  236. package/dist/{auth → transaction/auth}/schemas.d.ts +1 -1
  237. package/dist/{auth → transaction/auth}/schemas.js +13 -13
  238. package/dist/{client → transaction/auth}/sessionMint.d.ts +8 -8
  239. package/dist/{client → transaction/auth}/sessionMint.js +4 -7
  240. package/dist/transaction/coordination/awaitClaimGrant.d.ts +56 -0
  241. package/dist/transaction/coordination/awaitClaimGrant.js +124 -0
  242. package/dist/{client → transaction/coordination}/claimHeartbeatLoop.d.ts +34 -0
  243. package/dist/{client → transaction/coordination}/claimHeartbeatLoop.js +20 -0
  244. package/dist/transaction/coordination/claimMeta.d.ts +49 -0
  245. package/dist/transaction/coordination/claimMeta.js +52 -0
  246. package/dist/transaction/coordination/createClaimStream.d.ts +64 -0
  247. package/dist/transaction/coordination/createClaimStream.js +475 -0
  248. package/dist/transaction/coordination/events.d.ts +74 -0
  249. package/dist/transaction/coordination/events.js +7 -0
  250. package/dist/transaction/coordination/index.d.ts +19 -0
  251. package/dist/transaction/coordination/index.js +45 -0
  252. package/dist/transaction/coordination/locator.d.ts +104 -0
  253. package/dist/transaction/coordination/locator.js +102 -0
  254. package/dist/transaction/coordination/schema.d.ts +1536 -0
  255. package/dist/transaction/coordination/schema.js +1177 -0
  256. package/dist/transaction/coordination/targetConflict.d.ts +2 -0
  257. package/dist/transaction/coordination/targetConflict.js +107 -0
  258. package/dist/{coordination → transaction/coordination}/trace.d.ts +7 -18
  259. package/dist/{coordination → transaction/coordination}/trace.js +18 -25
  260. package/dist/transaction/durableWrites.d.ts +62 -0
  261. package/dist/{client → transaction}/durableWrites.js +28 -3
  262. package/dist/transaction/environment.d.ts +105 -0
  263. package/dist/transaction/environment.js +108 -0
  264. package/dist/{errorCodes.d.ts → transaction/errorCodes.d.ts} +12 -12
  265. package/dist/{errorCodes.js → transaction/errorCodes.js} +45 -18
  266. package/dist/{errors.d.ts → transaction/errors.d.ts} +37 -13
  267. package/dist/{errors.js → transaction/errors.js} +85 -16
  268. package/dist/transaction/footprint.d.ts +111 -0
  269. package/dist/transaction/footprint.js +0 -0
  270. package/dist/transaction/index.d.ts +20 -0
  271. package/dist/transaction/index.js +20 -0
  272. package/dist/transaction/keys/index.d.ts +87 -0
  273. package/dist/transaction/keys/index.js +207 -0
  274. package/dist/transaction/log/syncDeltaRow.d.ts +158 -0
  275. package/dist/transaction/log/syncDeltaRow.js +95 -0
  276. package/dist/{sync/syncPosition.d.ts → transaction/logPosition.d.ts} +22 -8
  277. package/dist/{sync/syncPosition.js → transaction/logPosition.js} +15 -6
  278. package/dist/transaction/logger.d.ts +16 -0
  279. package/dist/transaction/logger.js +7 -0
  280. package/dist/transaction/observability.d.ts +53 -0
  281. package/dist/transaction/observability.js +19 -0
  282. package/dist/transaction/plugin.d.ts +285 -0
  283. package/dist/transaction/plugin.js +106 -0
  284. package/dist/{policy → transaction/policy}/types.d.ts +3 -3
  285. package/dist/{policy → transaction/policy}/types.js +2 -0
  286. package/dist/transaction/resources/httpResources.d.ts +321 -0
  287. package/dist/transaction/resources/httpResources.js +7 -0
  288. package/dist/transaction/resources/modelOperations.d.ts +427 -0
  289. package/dist/transaction/resources/modelOperations.js +12 -0
  290. package/dist/transaction/resources/mutationOptions.d.ts +66 -0
  291. package/dist/transaction/resources/mutationOptions.js +9 -0
  292. package/dist/transaction/resources/where.d.ts +101 -0
  293. package/dist/transaction/resources/where.js +115 -0
  294. package/dist/{client → transaction/resources}/writeOptionsSchema.d.ts +2 -6
  295. package/dist/{client → transaction/resources}/writeOptionsSchema.js +9 -5
  296. package/dist/{schema → transaction/schema}/field.d.ts +17 -23
  297. package/dist/{schema → transaction/schema}/field.js +5 -5
  298. package/dist/transaction/schema/fieldRef.d.ts +38 -0
  299. package/dist/transaction/schema/fieldRef.js +11 -0
  300. package/dist/transaction/schema/loadStrategy.d.ts +45 -0
  301. package/dist/transaction/schema/loadStrategy.js +46 -0
  302. package/dist/{schema → transaction/schema}/model.d.ts +50 -35
  303. package/dist/{schema → transaction/schema}/model.js +30 -20
  304. package/dist/transaction/schema/openapi.d.ts +58 -0
  305. package/dist/transaction/schema/openapi.js +501 -0
  306. package/dist/{schema → transaction/schema}/relation.d.ts +21 -16
  307. package/dist/{schema → transaction/schema}/relation.js +7 -7
  308. package/dist/{schema → transaction/schema}/residency.d.ts +0 -9
  309. package/dist/{schema → transaction/schema}/residency.js +0 -5
  310. package/dist/{schema → transaction/schema}/roles.d.ts +5 -5
  311. package/dist/{schema → transaction/schema}/roles.js +5 -5
  312. package/dist/{schema → transaction/schema}/schema.d.ts +39 -10
  313. package/dist/{schema → transaction/schema}/schema.js +24 -3
  314. package/dist/{schema → transaction/schema}/tenancy.d.ts +1 -1
  315. package/dist/{schema → transaction/schema}/tenancy.js +7 -4
  316. package/dist/transaction/transactionLayer.d.ts +82 -0
  317. package/dist/transaction/transactionLayer.js +24 -0
  318. package/dist/{transactions → transaction/transactions/settlement}/commitEnvelope.d.ts +5 -6
  319. package/dist/{transactions → transaction/transactions/settlement}/commitEnvelope.js +9 -13
  320. package/dist/{transactions → transaction/transactions/settlement}/httpCommitEnvelope.d.ts +9 -2
  321. package/dist/{transactions → transaction/transactions/settlement}/httpCommitEnvelope.js +5 -9
  322. package/dist/{transactions/durableWriteStore.d.ts → transaction/transactions/settlement/pendingWrite.d.ts} +11 -37
  323. package/dist/transaction/transactions/settlement/pendingWrite.js +20 -0
  324. package/dist/transaction/transport/commitFrames.d.ts +90 -0
  325. package/dist/transaction/transport/commitFrames.js +134 -0
  326. package/dist/transaction/transport/connectionManager.d.ts +215 -0
  327. package/dist/transaction/transport/connectionManager.js +673 -0
  328. package/dist/transaction/transport/credentialLifecycle.d.ts +177 -0
  329. package/dist/transaction/transport/credentialLifecycle.js +324 -0
  330. package/dist/{sync → transaction/transport}/heartbeat.d.ts +3 -1
  331. package/dist/{sync → transaction/transport}/heartbeat.js +6 -4
  332. package/dist/transaction/transport/httpClient.d.ts +131 -0
  333. package/dist/{client → transaction/transport}/httpClient.js +6 -5
  334. package/dist/transaction/transport/httpOptions.d.ts +33 -0
  335. package/dist/transaction/transport/httpOptions.js +12 -0
  336. package/dist/{client → transaction/transport}/httpTransport.js +295 -97
  337. package/dist/{sync/NetworkProbe.d.ts → transaction/transport/networkProbe.d.ts} +7 -4
  338. package/dist/{sync/NetworkProbe.js → transaction/transport/networkProbe.js} +14 -13
  339. package/dist/transaction/transport/wsFrameHandlers.d.ts +128 -0
  340. package/dist/transaction/transport/wsFrameHandlers.js +429 -0
  341. package/dist/transaction/transport/wsTransport.d.ts +574 -0
  342. package/dist/transaction/transport/wsTransport.js +1023 -0
  343. package/dist/transaction/types/assertExact.d.ts +17 -0
  344. package/dist/transaction/types/assertExact.js +1 -0
  345. package/dist/{types → transaction/types}/global.d.ts +17 -2
  346. package/dist/{types → transaction/types}/global.js +2 -1
  347. package/dist/{types → transaction/types}/index.d.ts +14 -46
  348. package/dist/{types → transaction/types}/index.js +7 -16
  349. package/dist/{types → transaction/types}/streams.d.ts +73 -45
  350. package/dist/transaction/utils/duration.d.ts +50 -0
  351. package/dist/{utils → transaction/utils}/duration.js +32 -0
  352. package/dist/{utils → transaction/utils}/json.d.ts +18 -0
  353. package/dist/transaction/utils/json.js +276 -0
  354. package/dist/transaction/wire/accountResponses.d.ts +420 -0
  355. package/dist/transaction/wire/accountResponses.js +290 -0
  356. package/dist/transaction/wire/auth.d.ts +56 -0
  357. package/dist/transaction/wire/auth.js +63 -0
  358. package/dist/transaction/wire/claimEvent.d.ts +76 -0
  359. package/dist/transaction/wire/claimEvent.js +73 -0
  360. package/dist/transaction/wire/claims.d.ts +530 -0
  361. package/dist/transaction/wire/claims.js +327 -0
  362. package/dist/{wire → transaction/wire}/commit.d.ts +125 -193
  363. package/dist/{wire → transaction/wire}/commit.js +68 -47
  364. package/dist/{wire → transaction/wire}/delta.d.ts +66 -17
  365. package/dist/{wire → transaction/wire}/delta.js +37 -13
  366. package/dist/transaction/wire/errorEnvelope.d.ts +72 -0
  367. package/dist/{wire → transaction/wire}/errorEnvelope.js +36 -5
  368. package/dist/transaction/wire/feedCursor.d.ts +60 -0
  369. package/dist/transaction/wire/feedCursor.js +82 -0
  370. package/dist/transaction/wire/feedEvent.d.ts +204 -0
  371. package/dist/transaction/wire/feedEvent.js +65 -0
  372. package/dist/transaction/wire/frames.d.ts +194 -0
  373. package/dist/transaction/wire/frames.js +50 -0
  374. package/dist/transaction/wire/inboundFrames.d.ts +562 -0
  375. package/dist/transaction/wire/inboundFrames.js +116 -0
  376. package/dist/transaction/wire/index.d.ts +54 -0
  377. package/dist/transaction/wire/index.js +83 -0
  378. package/dist/{wire → transaction/wire}/listEnvelope.d.ts +13 -14
  379. package/dist/transaction/wire/listEnvelope.js +42 -0
  380. package/dist/transaction/wire/modelMutations.d.ts +31 -0
  381. package/dist/transaction/wire/modelMutations.js +52 -0
  382. package/dist/transaction/wire/modelResponses.d.ts +85 -0
  383. package/dist/transaction/wire/modelResponses.js +43 -0
  384. package/dist/transaction/wire/modelShape.d.ts +78 -0
  385. package/dist/transaction/wire/modelShape.js +74 -0
  386. package/dist/transactions/{TransactionQueue.d.ts → mutations/MutationQueue.d.ts} +85 -38
  387. package/dist/transactions/{TransactionQueue.js → mutations/MutationQueue.js} +141 -80
  388. package/dist/transactions/{TransactionStore.d.ts → mutations/MutationStore.d.ts} +8 -8
  389. package/dist/transactions/{TransactionStore.js → mutations/MutationStore.js} +2 -2
  390. package/dist/transactions/{coalesceRules.d.ts → mutations/coalesceRules.d.ts} +10 -10
  391. package/dist/transactions/{coalesceRules.js → mutations/coalesceRules.js} +1 -1
  392. package/dist/transactions/mutations/commitLatency.d.ts +52 -0
  393. package/dist/transactions/mutations/commitLatency.js +130 -0
  394. package/dist/transactions/{commitOutboxStore.d.ts → mutations/commitOutboxStore.d.ts} +1 -5
  395. package/dist/transactions/{commitOutboxStore.js → mutations/commitOutboxStore.js} +1 -1
  396. package/dist/transactions/{commitPayload.d.ts → mutations/commitPayload.d.ts} +18 -16
  397. package/dist/transactions/{commitPayload.js → mutations/commitPayload.js} +15 -15
  398. package/dist/transactions/{deltaConfirmation.d.ts → mutations/deltaConfirmation.d.ts} +15 -11
  399. package/dist/transactions/{deltaConfirmation.js → mutations/deltaConfirmation.js} +14 -12
  400. package/dist/transactions/mutations/durableWriteStore.d.ts +14 -0
  401. package/dist/transactions/mutations/durableWriteStore.js +12 -0
  402. package/dist/transactions/{optimisticApply.d.ts → mutations/optimisticApply.d.ts} +7 -7
  403. package/dist/transactions/{replayValidation.d.ts → mutations/replayValidation.d.ts} +4 -3
  404. package/dist/transactions/{replayValidation.js → mutations/replayValidation.js} +7 -5
  405. package/dist/utils/mobxSetup.d.ts +1 -1
  406. package/dist/utils/mobxSetup.js +5 -2
  407. package/dist/{core → views}/QueryView.d.ts +2 -2
  408. package/dist/{core → views}/QueryView.js +2 -2
  409. package/dist/{core → views}/ViewRegistry.d.ts +1 -1
  410. package/dist/{core/queryUtils.d.ts → views/incrementalView.d.ts} +6 -6
  411. package/dist/{core/queryUtils.js → views/incrementalView.js} +6 -6
  412. package/dist/webhooks/events.d.ts +2 -2
  413. package/dist/wire/index.d.ts +1 -34
  414. package/dist/wire/index.js +8 -49
  415. package/docs/agent-messaging.md +3 -3
  416. package/docs/agents.md +20 -13
  417. package/docs/api-keys.md +14 -10
  418. package/docs/api.md +27 -61
  419. package/docs/audit.md +6 -3
  420. package/docs/cli.md +41 -13
  421. package/docs/client-behavior.md +11 -9
  422. package/docs/concurrency-convention.md +49 -57
  423. package/docs/coordination.md +283 -121
  424. package/docs/data-sources.md +7 -5
  425. package/docs/debugging.md +39 -15
  426. package/docs/deployment.md +267 -0
  427. package/docs/examples/agent-human.md +49 -42
  428. package/docs/examples/ai-sdk-tool.md +69 -44
  429. package/docs/examples/existing-python-backend.md +8 -6
  430. package/docs/examples/nextjs.md +129 -47
  431. package/docs/examples/scoped-agent.md +46 -45
  432. package/docs/examples/server-agent.md +46 -26
  433. package/docs/groups.md +87 -30
  434. package/docs/guarantees.md +41 -12
  435. package/docs/how-it-works.md +38 -12
  436. package/docs/idempotency.md +126 -0
  437. package/docs/identity.md +77 -74
  438. package/docs/index.md +172 -86
  439. package/docs/integration-guide.md +31 -19
  440. package/docs/mcp.md +46 -21
  441. package/docs/migration.md +95 -18
  442. package/docs/operating-on-your-database.md +3 -1
  443. package/docs/projects.md +3 -1
  444. package/docs/quickstart.md +22 -5
  445. package/docs/react.md +31 -18
  446. package/docs/schema-contract.md +5 -3
  447. package/docs/session-settings.md +108 -0
  448. package/docs/sessions.md +4 -2
  449. package/docs/webhooks.md +12 -10
  450. package/llms.txt +48 -18
  451. package/package.json +21 -26
  452. package/dist/agent/Agent.d.ts +0 -366
  453. package/dist/agent/Agent.js +0 -514
  454. package/dist/agent/index.d.ts +0 -115
  455. package/dist/agent/index.js +0 -128
  456. package/dist/agent/session.d.ts +0 -93
  457. package/dist/agent/session.js +0 -149
  458. package/dist/agent/types.d.ts +0 -68
  459. package/dist/agent/types.js +0 -9
  460. package/dist/cli.cjs +0 -286329
  461. package/dist/client/durableWrites.d.ts +0 -21
  462. package/dist/client/httpClient.d.ts +0 -80
  463. package/dist/coordination/schema.d.ts +0 -722
  464. package/dist/coordination/schema.js +0 -578
  465. package/dist/schema/openapi.d.ts +0 -29
  466. package/dist/schema/openapi.js +0 -124
  467. package/dist/testing/fixtures/bootstrap.d.ts +0 -49
  468. package/dist/testing/fixtures/bootstrap.js +0 -59
  469. package/dist/testing/fixtures/deltas.d.ts +0 -83
  470. package/dist/testing/fixtures/deltas.js +0 -136
  471. package/dist/testing/fixtures/models.d.ts +0 -83
  472. package/dist/testing/fixtures/models.js +0 -272
  473. package/dist/testing/helpers/reactWrapper.d.ts +0 -69
  474. package/dist/testing/helpers/reactWrapper.js +0 -67
  475. package/dist/testing/helpers/syncEngineHarness.d.ts +0 -54
  476. package/dist/testing/helpers/syncEngineHarness.js +0 -73
  477. package/dist/testing/helpers/wait.d.ts +0 -30
  478. package/dist/testing/helpers/wait.js +0 -49
  479. package/dist/testing/index.d.ts +0 -23
  480. package/dist/testing/index.js +0 -33
  481. package/dist/testing/mocks/FakeDatabase.d.ts +0 -18
  482. package/dist/testing/mocks/FakeDatabase.js +0 -10
  483. package/dist/testing/mocks/MockMutationExecutor.d.ts +0 -87
  484. package/dist/testing/mocks/MockMutationExecutor.js +0 -192
  485. package/dist/testing/mocks/MockNetworkMonitor.d.ts +0 -20
  486. package/dist/testing/mocks/MockNetworkMonitor.js +0 -46
  487. package/dist/testing/mocks/MockSyncContext.d.ts +0 -51
  488. package/dist/testing/mocks/MockSyncContext.js +0 -71
  489. package/dist/testing/mocks/MockSyncStore.d.ts +0 -88
  490. package/dist/testing/mocks/MockSyncStore.js +0 -171
  491. package/dist/testing/mocks/MockWebSocket.d.ts +0 -71
  492. package/dist/testing/mocks/MockWebSocket.js +0 -118
  493. package/dist/transactions/durableWriteStore.js +0 -30
  494. package/dist/utils/duration.d.ts +0 -25
  495. package/dist/utils/json.js +0 -88
  496. package/dist/wire/errorEnvelope.d.ts +0 -55
  497. package/dist/wire/frames.d.ts +0 -197
  498. package/dist/wire/frames.js +0 -49
  499. package/dist/wire/listEnvelope.js +0 -18
  500. package/docs/interaction-model.md +0 -97
  501. /package/dist/{core → query}/QueryProcessor.d.ts +0 -0
  502. /package/dist/{core → query}/QueryProcessor.js +0 -0
  503. /package/dist/{core/storeContract.js → storeContract.js} +0 -0
  504. /package/dist/{core → stores}/openIDBWithTimeout.d.ts +0 -0
  505. /package/dist/{core → stores}/openIDBWithTimeout.js +0 -0
  506. /package/dist/{client → transaction/auth}/credentialEndpoint.d.ts +0 -0
  507. /package/dist/{client → transaction/auth}/credentialEndpoint.js +0 -0
  508. /package/dist/{auth → transaction/auth}/credentialPolicy.d.ts +0 -0
  509. /package/dist/{auth → transaction/auth}/credentialPolicy.js +0 -0
  510. /package/dist/{auth → transaction/auth}/credentialSource.js +0 -0
  511. /package/dist/{client → transaction/auth}/hostedEndpoints.d.ts +0 -0
  512. /package/dist/{client → transaction/auth}/hostedEndpoints.js +0 -0
  513. /package/dist/{client → transaction}/persistence.d.ts +0 -0
  514. /package/dist/{client → transaction}/persistence.js +0 -0
  515. /package/dist/{client → transaction/resources}/functionalUpdate.d.ts +0 -0
  516. /package/dist/{client → transaction/resources}/functionalUpdate.js +0 -0
  517. /package/dist/{transactions → transaction/transactions/settlement}/idempotencyKey.d.ts +0 -0
  518. /package/dist/{transactions → transaction/transactions/settlement}/idempotencyKey.js +0 -0
  519. /package/dist/{client → transaction/transport}/httpTransport.d.ts +0 -0
  520. /package/dist/{types → transaction/types}/modelData.d.ts +0 -0
  521. /package/dist/{types → transaction/types}/modelData.js +0 -0
  522. /package/dist/{types → transaction/types}/participant.d.ts +0 -0
  523. /package/dist/{types → transaction/types}/participant.js +0 -0
  524. /package/dist/{types → transaction/types}/streams.js +0 -0
  525. /package/dist/{utils → transaction/utils}/asyncIterator.d.ts +0 -0
  526. /package/dist/{utils → transaction/utils}/asyncIterator.js +0 -0
  527. /package/dist/{wire → transaction/wire}/bootstrapReason.d.ts +0 -0
  528. /package/dist/{wire → transaction/wire}/bootstrapReason.js +0 -0
  529. /package/dist/{wire → transaction/wire}/protocol.d.ts +0 -0
  530. /package/dist/{wire → transaction/wire}/protocol.js +0 -0
  531. /package/dist/{wire → transaction/wire}/protocolVersion.d.ts +0 -0
  532. /package/dist/{wire → transaction/wire}/protocolVersion.js +0 -0
  533. /package/dist/transactions/{UnconfirmedWrites.d.ts → mutations/UnconfirmedWrites.d.ts} +0 -0
  534. /package/dist/transactions/{UnconfirmedWrites.js → mutations/UnconfirmedWrites.js} +0 -0
  535. /package/dist/transactions/{optimisticApply.js → mutations/optimisticApply.js} +0 -0
  536. /package/dist/{core → views}/ViewRegistry.js +0 -0
@@ -1,124 +0,0 @@
1
- // Pulled from the endpoints module to keep this schema file free of the client's
2
- // error-handling and credential dependencies.
3
- import { ABLO_HOSTED_HTTP_BASE_URL } from '../client/hostedEndpoints.js';
4
- function fieldSchema(f) {
5
- switch (f.type) {
6
- case 'number':
7
- return { type: 'number' };
8
- case 'boolean':
9
- return { type: 'boolean' };
10
- case 'date':
11
- return { type: 'string', format: 'date-time' };
12
- case 'enum':
13
- return f.enumValues ? { type: 'string', enum: [...f.enumValues] } : { type: 'string' };
14
- case 'json':
15
- return { type: 'object', additionalProperties: true };
16
- case 'string':
17
- default:
18
- return { type: 'string' };
19
- }
20
- }
21
- const pascal = (s) => s.charAt(0).toUpperCase() + s.slice(1);
22
- const idParam = () => ({ name: 'id', in: 'path', required: true, schema: { type: 'string' } });
23
- const jsonBody = (schema) => ({
24
- required: true,
25
- content: { 'application/json': { schema } },
26
- });
27
- const jsonResp = (description, schema) => ({
28
- description,
29
- content: { 'application/json': { schema } },
30
- });
31
- const commitReceipt = () => jsonResp('Commit receipt', {
32
- type: 'object',
33
- properties: {
34
- object: { type: 'string', enum: ['commit_receipt'] },
35
- clientTxId: { type: 'string' },
36
- serverTxId: { type: 'string' },
37
- success: { type: 'boolean' },
38
- lastSyncId: { type: 'integer' },
39
- },
40
- });
41
- export function schemaToOpenApi(schema, options = {}) {
42
- const models = schema.models;
43
- const paths = {};
44
- const schemas = {};
45
- for (const [key, def] of Object.entries(models)) {
46
- const ref = { $ref: `#/components/schemas/${pascal(key)}` };
47
- const properties = { id: { type: 'string' } };
48
- const required = ['id'];
49
- const createProps = {};
50
- for (const [fname, fmeta] of Object.entries(def.fields)) {
51
- const fs = fieldSchema(fmeta);
52
- properties[fname] = fs;
53
- createProps[fname] = fs;
54
- if (!fmeta.isOptional)
55
- required.push(fname);
56
- }
57
- schemas[pascal(key)] = { type: 'object', properties, required };
58
- const createBody = jsonBody({ type: 'object', properties: createProps });
59
- paths[`/v1/models/${key}`] = {
60
- get: {
61
- tags: [key],
62
- summary: `List ${key}`,
63
- parameters: [
64
- { name: 'limit', in: 'query', schema: { type: 'integer' } },
65
- { name: 'order_by', in: 'query', schema: { type: 'string' } },
66
- { name: 'order', in: 'query', schema: { type: 'string', enum: ['asc', 'desc'] } },
67
- ],
68
- responses: {
69
- '200': jsonResp('List of rows', {
70
- type: 'object',
71
- properties: { object: { type: 'string', enum: ['list'] }, data: { type: 'array', items: ref } },
72
- }),
73
- },
74
- },
75
- post: { tags: [key], summary: `Create a ${key}`, requestBody: createBody, responses: { '200': commitReceipt() } },
76
- };
77
- paths[`/v1/models/${key}/{id}`] = {
78
- get: {
79
- tags: [key],
80
- summary: `Retrieve a ${key}`,
81
- parameters: [idParam()],
82
- responses: {
83
- '200': jsonResp('The row', {
84
- type: 'object',
85
- properties: { data: ref, stamp: { type: 'integer' } },
86
- }),
87
- },
88
- },
89
- patch: { tags: [key], summary: `Update a ${key}`, parameters: [idParam()], requestBody: createBody, responses: { '200': commitReceipt() } },
90
- delete: { tags: [key], summary: `Delete a ${key}`, parameters: [idParam()], responses: { '200': commitReceipt() } },
91
- };
92
- paths[`/v1/models/${key}/{id}/claim`] = {
93
- post: { tags: [key], summary: `Claim a ${key} (acquire lease)`, parameters: [idParam()], responses: { '200': jsonResp('Claim acquired', { type: 'object' }) } },
94
- delete: { tags: [key], summary: `Release a ${key} claim`, parameters: [idParam()], responses: { '200': jsonResp('Released', { type: 'object' }) } },
95
- };
96
- paths[`/v1/models/${key}/{id}/claim/heartbeat`] = {
97
- post: { tags: [key], summary: `Heartbeat a held ${key} claim (extend the lease for long-running work)`, parameters: [idParam()], responses: { '200': jsonResp('Lease extended (or queued slot refreshed)', { type: 'object', properties: { object: { type: 'string', enum: ['claim_heartbeat'] }, claimId: { type: 'string' }, status: { type: 'string', enum: ['held', 'queued'] }, expiresAt: { type: 'integer' }, position: { type: 'integer' } } }) } },
98
- };
99
- paths[`/v1/models/${key}/{id}/claim/reorder`] = {
100
- post: { tags: [key], summary: `Reorder the ${key} wait-line (privileged)`, parameters: [idParam()], responses: { '200': jsonResp('Reordered', { type: 'object' }) } },
101
- };
102
- }
103
- paths['/v1/commits'] = {
104
- post: { tags: ['commits'], summary: 'Commit a batch of operations atomically', responses: { '200': commitReceipt() } },
105
- };
106
- return {
107
- openapi: '3.1.0',
108
- info: {
109
- title: options.title ?? 'Ablo API',
110
- version: options.version ?? '1.0.0',
111
- description: 'Generated from your pushed Ablo schema — these routes are your models. ' +
112
- 'Authenticate every request with your API key as a Bearer token.',
113
- },
114
- servers: [{ url: options.serverUrl ?? `${ABLO_HOSTED_HTTP_BASE_URL}/api` }],
115
- security: [{ bearerAuth: [] }],
116
- components: {
117
- securitySchemes: {
118
- bearerAuth: { type: 'http', scheme: 'bearer', description: 'Your Ablo API key (sk_… / rk_…).' },
119
- },
120
- schemas,
121
- },
122
- paths,
123
- };
124
- }
@@ -1,49 +0,0 @@
1
- /**
2
- * Factories that build well-formed bootstrap responses for tests. A
3
- * bootstrap response is what the server returns when a client first syncs:
4
- * either a full snapshot of the models or a partial batch of deltas since a
5
- * known point. These helpers produce the same shapes, so tests can exercise
6
- * client sync logic without a live server.
7
- */
8
- import type { BootstrapType } from '../../types/index.js';
9
- export type BootstrapModelData = Record<string, Record<string, unknown>[]>;
10
- export interface BootstrapResponse {
11
- type: BootstrapType;
12
- lastSyncId: number;
13
- models?: BootstrapModelData;
14
- deltas?: {
15
- id: number;
16
- modelName: string;
17
- modelId: string;
18
- action: string;
19
- data: Record<string, unknown>;
20
- }[];
21
- deltaCount?: number;
22
- failedModels?: string[];
23
- timestamp: number;
24
- }
25
- /**
26
- * Builds a full bootstrap response — a fresh snapshot of the given models,
27
- * as the server sends on a client's first sync.
28
- */
29
- export declare function createFullBootstrapResponse(models: BootstrapModelData, lastSyncId?: number): BootstrapResponse;
30
- /**
31
- * Builds a partial bootstrap response — a batch of deltas applied on top of
32
- * the client's last known sync point, given by `lastSyncId`.
33
- */
34
- export declare function createPartialBootstrapResponse(deltas: BootstrapResponse['deltas'], lastSyncId: number): BootstrapResponse;
35
- /**
36
- * Builds a full bootstrap response with the common test models
37
- * pre-populated. Pass any of the named model arrays to include them in the
38
- * snapshot.
39
- */
40
- export declare function createTestBootstrapResponse(options?: {
41
- tasks?: Record<string, unknown>[];
42
- projects?: Record<string, unknown>[];
43
- slideDecks?: Record<string, unknown>[];
44
- slides?: Record<string, unknown>[];
45
- slideLayers?: Record<string, unknown>[];
46
- comments?: Record<string, unknown>[];
47
- lastSyncId?: number;
48
- failedModels?: string[];
49
- }): BootstrapResponse;
@@ -1,59 +0,0 @@
1
- /**
2
- * Factories that build well-formed bootstrap responses for tests. A
3
- * bootstrap response is what the server returns when a client first syncs:
4
- * either a full snapshot of the models or a partial batch of deltas since a
5
- * known point. These helpers produce the same shapes, so tests can exercise
6
- * client sync logic without a live server.
7
- */
8
- /**
9
- * Builds a full bootstrap response — a fresh snapshot of the given models,
10
- * as the server sends on a client's first sync.
11
- */
12
- export function createFullBootstrapResponse(models, lastSyncId = 100) {
13
- return {
14
- type: 'full',
15
- lastSyncId,
16
- models,
17
- timestamp: Date.now(),
18
- };
19
- }
20
- /**
21
- * Builds a partial bootstrap response — a batch of deltas applied on top of
22
- * the client's last known sync point, given by `lastSyncId`.
23
- */
24
- export function createPartialBootstrapResponse(deltas, lastSyncId) {
25
- return {
26
- type: 'partial',
27
- lastSyncId,
28
- deltas,
29
- deltaCount: deltas?.length ?? 0,
30
- timestamp: Date.now(),
31
- };
32
- }
33
- /**
34
- * Builds a full bootstrap response with the common test models
35
- * pre-populated. Pass any of the named model arrays to include them in the
36
- * snapshot.
37
- */
38
- export function createTestBootstrapResponse(options = {}) {
39
- const models = {};
40
- if (options.tasks)
41
- models.Task = options.tasks;
42
- if (options.projects)
43
- models.Project = options.projects;
44
- if (options.slideDecks)
45
- models.SlideDeck = options.slideDecks;
46
- if (options.slides)
47
- models.Slide = options.slides;
48
- if (options.slideLayers)
49
- models.SlideLayer = options.slideLayers;
50
- if (options.comments)
51
- models.Comment = options.comments;
52
- return {
53
- type: 'full',
54
- lastSyncId: options.lastSyncId ?? 100,
55
- models,
56
- failedModels: options.failedModels,
57
- timestamp: Date.now(),
58
- };
59
- }
@@ -1,83 +0,0 @@
1
- /**
2
- * Factories that build well-formed delta objects for tests. A delta, a
3
- * {@link SyncAction}, is a single change to one model instance in the wire
4
- * format the server sends: an insert, update, delete, archive, and so on.
5
- * These helpers let tests construct deltas without a live server.
6
- */
7
- import type { SyncActionType, SyncAction } from '../../types/index.js';
8
- /** Reset the delta counter (call in beforeEach for deterministic IDs) */
9
- export declare function resetDeltaCounter(): void;
10
- export interface CreateDeltaOptions {
11
- /** Sync ID (auto-increments if not provided) */
12
- id?: number;
13
- /** Model name (e.g., 'Task', 'Slide') */
14
- modelName: string;
15
- /** Model ID */
16
- modelId: string;
17
- /** Action type: I=Insert, U=Update, D=Delete, A=Archive, V=Unarchive */
18
- action: SyncActionType;
19
- /** Delta payload data */
20
- data?: Record<string, unknown>;
21
- }
22
- /**
23
- * Builds a single delta ({@link SyncAction}) in the server's wire format.
24
- */
25
- export declare function createDelta(options: CreateDeltaOptions): SyncAction;
26
- /**
27
- * Builds an insert delta for a new entity.
28
- */
29
- export declare function createInsertDelta(modelName: string, modelId: string, data: Record<string, unknown>, syncId?: number): SyncAction;
30
- /**
31
- * Builds an update delta for an existing entity.
32
- */
33
- export declare function createUpdateDelta(modelName: string, modelId: string, data: Record<string, unknown>, syncId?: number): SyncAction;
34
- /**
35
- * Builds a delete delta.
36
- */
37
- export declare function createDeleteDelta(modelName: string, modelId: string, syncId?: number): SyncAction;
38
- /**
39
- * Builds an archive delta, stamping `archivedAt` with the current time.
40
- */
41
- export declare function createArchiveDelta(modelName: string, modelId: string, syncId?: number): SyncAction;
42
- /**
43
- * Builds an unarchive delta, clearing `archivedAt`.
44
- */
45
- export declare function createUnarchiveDelta(modelName: string, modelId: string, syncId?: number): SyncAction;
46
- /**
47
- * Builds a covering ('C') delta. It signals that the client has gained
48
- * permission to see an entity that already exists. The client treats it
49
- * like an insert, adding the entity to its local store as if newly created.
50
- * A covering delta typically follows a group-added delta.
51
- */
52
- export declare function createCoveringDelta(modelName: string, modelId: string, data: Record<string, unknown>, syncId?: number): SyncAction;
53
- /**
54
- * Builds a group-added ('G') delta in the incremental payload shape. It
55
- * signals that the recipient was added to a single sync group. The client
56
- * updates its subscription state and waits for covering deltas to deliver
57
- * the newly visible entities. Unlike the older payload that carries both
58
- * added and removed groups, this shape does not trigger a re-bootstrap.
59
- */
60
- export declare function createGroupAddedDelta(userId: string, group: string, syncId?: number): SyncAction;
61
- /**
62
- * Builds a group-change ('G') delta in the older payload shape, which
63
- * carries both added and removed groups in one delta and forces a full
64
- * re-bootstrap on the client. Useful for testing backward compatibility
65
- * with that older shape.
66
- */
67
- export declare function createLegacyGroupChangeDelta(userId: string, added: string[], removed: string[], syncId?: number): SyncAction;
68
- /**
69
- * Builds a group-removed ('S') delta. It signals that the recipient lost
70
- * access to a sync group. The client purges the affected local state and
71
- * re-bootstraps with the updated group list.
72
- */
73
- export declare function createGroupRemovedDelta(userId: string, group: string, syncId?: number): SyncAction;
74
- /**
75
- * Builds a batch of deltas with sequential sync IDs.
76
- */
77
- export declare function createDeltaBatch(deltas: Omit<CreateDeltaOptions, 'id'>[], startingSyncId?: number): SyncAction[];
78
- /**
79
- * Builds a confirmation delta, which signals that a mutation was persisted
80
- * by the server. The client's transaction queue watches for these to
81
- * confirm its in-flight writes.
82
- */
83
- export declare function createConfirmationDelta(modelName: string, modelId: string, syncId: number, action?: SyncActionType, data?: Record<string, unknown>): SyncAction;
@@ -1,136 +0,0 @@
1
- /**
2
- * Factories that build well-formed delta objects for tests. A delta, a
3
- * {@link SyncAction}, is a single change to one model instance in the wire
4
- * format the server sends: an insert, update, delete, archive, and so on.
5
- * These helpers let tests construct deltas without a live server.
6
- */
7
- let deltaCounter = 0;
8
- /** Reset the delta counter (call in beforeEach for deterministic IDs) */
9
- export function resetDeltaCounter() {
10
- deltaCounter = 0;
11
- }
12
- /**
13
- * Builds a single delta ({@link SyncAction}) in the server's wire format.
14
- */
15
- export function createDelta(options) {
16
- deltaCounter++;
17
- return {
18
- id: options.id ?? deltaCounter,
19
- modelName: options.modelName,
20
- modelId: options.modelId,
21
- action: options.action,
22
- data: options.data ?? {},
23
- __class: 'SyncAction',
24
- };
25
- }
26
- /**
27
- * Builds an insert delta for a new entity.
28
- */
29
- export function createInsertDelta(modelName, modelId, data, syncId) {
30
- return createDelta({ modelName, modelId, action: 'I', data, id: syncId });
31
- }
32
- /**
33
- * Builds an update delta for an existing entity.
34
- */
35
- export function createUpdateDelta(modelName, modelId, data, syncId) {
36
- return createDelta({ modelName, modelId, action: 'U', data, id: syncId });
37
- }
38
- /**
39
- * Builds a delete delta.
40
- */
41
- export function createDeleteDelta(modelName, modelId, syncId) {
42
- return createDelta({ modelName, modelId, action: 'D', data: {}, id: syncId });
43
- }
44
- /**
45
- * Builds an archive delta, stamping `archivedAt` with the current time.
46
- */
47
- export function createArchiveDelta(modelName, modelId, syncId) {
48
- return createDelta({
49
- modelName,
50
- modelId,
51
- action: 'A',
52
- data: { archivedAt: new Date().toISOString() },
53
- id: syncId,
54
- });
55
- }
56
- /**
57
- * Builds an unarchive delta, clearing `archivedAt`.
58
- */
59
- export function createUnarchiveDelta(modelName, modelId, syncId) {
60
- return createDelta({
61
- modelName,
62
- modelId,
63
- action: 'V',
64
- data: { archivedAt: null },
65
- id: syncId,
66
- });
67
- }
68
- /**
69
- * Builds a covering ('C') delta. It signals that the client has gained
70
- * permission to see an entity that already exists. The client treats it
71
- * like an insert, adding the entity to its local store as if newly created.
72
- * A covering delta typically follows a group-added delta.
73
- */
74
- export function createCoveringDelta(modelName, modelId, data, syncId) {
75
- return createDelta({ modelName, modelId, action: 'C', data, id: syncId });
76
- }
77
- /**
78
- * Builds a group-added ('G') delta in the incremental payload shape. It
79
- * signals that the recipient was added to a single sync group. The client
80
- * updates its subscription state and waits for covering deltas to deliver
81
- * the newly visible entities. Unlike the older payload that carries both
82
- * added and removed groups, this shape does not trigger a re-bootstrap.
83
- */
84
- export function createGroupAddedDelta(userId, group, syncId) {
85
- return createDelta({
86
- modelName: 'SyncGroupChange',
87
- modelId: `sga_${userId}`,
88
- action: 'G',
89
- data: { group, userId },
90
- id: syncId,
91
- });
92
- }
93
- /**
94
- * Builds a group-change ('G') delta in the older payload shape, which
95
- * carries both added and removed groups in one delta and forces a full
96
- * re-bootstrap on the client. Useful for testing backward compatibility
97
- * with that older shape.
98
- */
99
- export function createLegacyGroupChangeDelta(userId, added, removed, syncId) {
100
- return createDelta({
101
- modelName: 'SyncGroupChange',
102
- modelId: `sgc_${userId}`,
103
- action: 'G',
104
- data: { addedGroups: added, removedGroups: removed },
105
- id: syncId,
106
- });
107
- }
108
- /**
109
- * Builds a group-removed ('S') delta. It signals that the recipient lost
110
- * access to a sync group. The client purges the affected local state and
111
- * re-bootstraps with the updated group list.
112
- */
113
- export function createGroupRemovedDelta(userId, group, syncId) {
114
- return createDelta({
115
- modelName: 'SyncGroupChange',
116
- modelId: `sgr_${userId}`,
117
- action: 'S',
118
- data: { group, userId },
119
- id: syncId,
120
- });
121
- }
122
- /**
123
- * Builds a batch of deltas with sequential sync IDs.
124
- */
125
- export function createDeltaBatch(deltas, startingSyncId) {
126
- const start = startingSyncId ?? deltaCounter + 1;
127
- return deltas.map((d, i) => createDelta({ ...d, id: start + i }));
128
- }
129
- /**
130
- * Builds a confirmation delta, which signals that a mutation was persisted
131
- * by the server. The client's transaction queue watches for these to
132
- * confirm its in-flight writes.
133
- */
134
- export function createConfirmationDelta(modelName, modelId, syncId, action = 'U', data = {}) {
135
- return createDelta({ modelName, modelId, action, data, id: syncId });
136
- }
@@ -1,83 +0,0 @@
1
- /**
2
- * A small set of {@link Model} subclasses used across the package's tests.
3
- * They form two foreign-key chains and carry the creation priorities the
4
- * transaction queue uses to order dependent writes:
5
- * TestProject (10) → TestTask (10, references Project) → TestComment (30, references Task)
6
- * TestSlideDeck (10) → TestSlide (15, references SlideDeck) → TestSlideLayer (20, references Slide)
7
- */
8
- import { Model } from '../../Model.js';
9
- import { ModelRegistry } from '../../ModelRegistry.js';
10
- export declare class TestProject extends Model {
11
- name: string;
12
- description: string;
13
- organizationId: string;
14
- constructor(data?: Partial<TestProject> & Record<string, unknown>);
15
- getModelName(): string;
16
- }
17
- export declare class TestTask extends Model {
18
- title: string;
19
- status: string;
20
- projectId: string | null;
21
- assigneeId: string | null;
22
- organizationId: string;
23
- constructor(data?: Partial<TestTask> & Record<string, unknown>);
24
- getModelName(): string;
25
- }
26
- export declare class TestComment extends Model {
27
- body: string;
28
- taskId: string | null;
29
- organizationId: string;
30
- constructor(data?: Partial<TestComment> & Record<string, unknown>);
31
- getModelName(): string;
32
- }
33
- export declare class TestSlideDeck extends Model {
34
- title: string;
35
- organizationId: string;
36
- constructor(data?: Partial<TestSlideDeck> & Record<string, unknown>);
37
- getModelName(): string;
38
- }
39
- export declare class TestSlide extends Model {
40
- order: number;
41
- deckId: string | null;
42
- organizationId: string;
43
- constructor(data?: Partial<TestSlide> & Record<string, unknown>);
44
- getModelName(): string;
45
- }
46
- export declare class TestSlideLayer extends Model {
47
- slideId: string | null;
48
- zIndex: number;
49
- type: string;
50
- content: string;
51
- organizationId: string;
52
- constructor(data?: Partial<TestSlideLayer> & Record<string, unknown>);
53
- getModelName(): string;
54
- }
55
- /**
56
- * Maps each test model to its creation priority, matching the order the
57
- * transaction queue uses when writing dependent models.
58
- */
59
- export declare const TEST_MODEL_PRIORITIES: Map<string, number>;
60
- /**
61
- * Registers every test model with a {@link ModelRegistry}, wiring up their
62
- * properties, references, and foreign-key relationships.
63
- */
64
- export declare function registerTestModels(registry: ModelRegistry): void;
65
- /**
66
- * Builds a sync engine configuration pre-loaded with the test models'
67
- * creation priorities and related settings.
68
- */
69
- export declare function createTestConfig(): {
70
- modelCreatePriority: ReadonlyMap<string, number>;
71
- defaultCreatePriority: number;
72
- defaultNonCreatePriority: number;
73
- essentialFields: Readonly<Record<string, readonly string[]>>;
74
- classNameFallbackMap: Readonly<Record<string, string>>;
75
- };
76
- /** Reset the counter (call in beforeEach for deterministic IDs) */
77
- export declare function resetFixtureCounter(): void;
78
- export declare function createProjectFixture(overrides?: Partial<Record<string, unknown>>): TestProject;
79
- export declare function createTaskFixture(overrides?: Partial<Record<string, unknown>>): TestTask;
80
- export declare function createCommentFixture(overrides?: Partial<Record<string, unknown>>): TestComment;
81
- export declare function createSlideDeckFixture(overrides?: Partial<Record<string, unknown>>): TestSlideDeck;
82
- export declare function createSlideFixture(overrides?: Partial<Record<string, unknown>>): TestSlide;
83
- export declare function createSlideLayerFixture(overrides?: Partial<Record<string, unknown>>): TestSlideLayer;