@abloatai/ablo 0.36.0 → 0.37.1

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 (597) hide show
  1. package/AGENTS.md +2 -2
  2. package/CHANGELOG.md +55 -2014
  3. package/NOTICE +2 -2
  4. package/README.md +45 -63
  5. package/assets/banner.png +0 -0
  6. package/dist/auth.d.ts +2 -0
  7. package/dist/auth.d.ts.map +1 -0
  8. package/dist/auth.js +2 -0
  9. package/dist/auth.js.map +1 -0
  10. package/dist/client.d.ts +3 -0
  11. package/dist/client.d.ts.map +1 -0
  12. package/dist/client.js +3 -0
  13. package/dist/client.js.map +1 -0
  14. package/dist/coordination.d.ts +2 -0
  15. package/dist/coordination.d.ts.map +1 -0
  16. package/dist/coordination.js +2 -0
  17. package/dist/coordination.js.map +1 -0
  18. package/dist/index.d.ts +3 -114
  19. package/dist/index.d.ts.map +1 -0
  20. package/dist/index.js +3 -163
  21. package/dist/index.js.map +1 -0
  22. package/dist/react.d.ts +4 -0
  23. package/dist/react.d.ts.map +1 -0
  24. package/dist/react.js +3 -0
  25. package/dist/react.js.map +1 -0
  26. package/dist/schema.d.ts +2 -0
  27. package/dist/schema.d.ts.map +1 -0
  28. package/dist/schema.js +2 -0
  29. package/dist/schema.js.map +1 -0
  30. package/dist/server.d.ts +2 -0
  31. package/dist/server.d.ts.map +1 -0
  32. package/dist/server.js +2 -0
  33. package/dist/server.js.map +1 -0
  34. package/dist/source-conformance.d.ts +2 -0
  35. package/dist/source-conformance.d.ts.map +1 -0
  36. package/dist/source-conformance.js +2 -0
  37. package/dist/source-conformance.js.map +1 -0
  38. package/dist/source-drizzle.d.ts +2 -0
  39. package/dist/source-drizzle.d.ts.map +1 -0
  40. package/dist/source-drizzle.js +2 -0
  41. package/dist/source-drizzle.js.map +1 -0
  42. package/dist/source-kysely.d.ts +2 -0
  43. package/dist/source-kysely.d.ts.map +1 -0
  44. package/dist/source-kysely.js +2 -0
  45. package/dist/source-kysely.js.map +1 -0
  46. package/dist/source-next.d.ts +2 -0
  47. package/dist/source-next.d.ts.map +1 -0
  48. package/dist/source-next.js +2 -0
  49. package/dist/source-next.js.map +1 -0
  50. package/dist/source.d.ts +2 -0
  51. package/dist/source.d.ts.map +1 -0
  52. package/dist/source.js +2 -0
  53. package/dist/source.js.map +1 -0
  54. package/dist/wire.d.ts +2 -0
  55. package/dist/wire.d.ts.map +1 -0
  56. package/dist/wire.js +2 -0
  57. package/dist/wire.js.map +1 -0
  58. package/docs/agents.md +1 -1
  59. package/docs/api-keys.md +7 -6
  60. package/docs/api.md +10 -10
  61. package/docs/client-behavior.md +5 -5
  62. package/docs/coordination.md +52 -62
  63. package/docs/data-sources.md +1 -1
  64. package/docs/examples/agent-human.md +4 -4
  65. package/docs/examples/ai-sdk-tool.md +1 -1
  66. package/docs/examples/existing-python-backend.md +15 -4
  67. package/docs/examples/nextjs.md +27 -6
  68. package/docs/examples/server-agent.md +2 -2
  69. package/docs/how-it-works.md +4 -4
  70. package/docs/identity.md +2 -1
  71. package/docs/integration-guide.md +24 -13
  72. package/docs/internal/README.md +18 -0
  73. package/docs/internal/agent-fleet-coordination-design.md +171 -0
  74. package/docs/internal/agent-orchestration.md +58 -0
  75. package/docs/internal/commit-identifiers.md +91 -0
  76. package/docs/internal/concurrency-open-decisions.md +37 -0
  77. package/docs/internal/data-source-reverse-channel.md +150 -0
  78. package/docs/internal/per-field-conflict-detection.md +165 -0
  79. package/docs/internal/postgres-replication.md +64 -0
  80. package/docs/internal/serializable-schema.md +119 -0
  81. package/docs/internal/structure.md +32 -0
  82. package/docs/mcp.md +2 -2
  83. package/docs/migration.md +3 -3
  84. package/docs/quickstart.md +2 -2
  85. package/docs/react.md +5 -5
  86. package/docs/schema-contract.md +3 -3
  87. package/docs/sessions.md +91 -37
  88. package/examples/README.md +2 -2
  89. package/examples/data-source/README.md +1 -1
  90. package/examples/data-source/ablo-driver.ts +1 -1
  91. package/examples/data-source/customer-server.ts +1 -1
  92. package/examples/data-source/run.ts +1 -1
  93. package/examples/data-source/schema.ts +1 -1
  94. package/examples/quickstart.ts +2 -2
  95. package/llms.txt +8 -8
  96. package/package.json +63 -166
  97. package/bin/ablo.cjs +0 -39
  98. package/dist/BaseSyncedStore.d.ts +0 -843
  99. package/dist/BaseSyncedStore.js +0 -1971
  100. package/dist/Database.d.ts +0 -323
  101. package/dist/Database.js +0 -1502
  102. package/dist/InstanceCache.d.ts +0 -237
  103. package/dist/InstanceCache.js +0 -1166
  104. package/dist/LazyReferenceCollection.d.ts +0 -177
  105. package/dist/LazyReferenceCollection.js +0 -461
  106. package/dist/Model.d.ts +0 -454
  107. package/dist/Model.js +0 -919
  108. package/dist/ModelRegistry.d.ts +0 -225
  109. package/dist/ModelRegistry.js +0 -539
  110. package/dist/NetworkMonitor.d.ts +0 -28
  111. package/dist/NetworkMonitor.js +0 -79
  112. package/dist/RuntimeContext.d.ts +0 -52
  113. package/dist/RuntimeContext.js +0 -80
  114. package/dist/SyncClient.d.ts +0 -541
  115. package/dist/SyncClient.js +0 -2202
  116. package/dist/adapters/alwaysOnline.d.ts +0 -14
  117. package/dist/adapters/alwaysOnline.js +0 -17
  118. package/dist/adapters/inMemoryStorage.d.ts +0 -31
  119. package/dist/adapters/inMemoryStorage.js +0 -110
  120. package/dist/ai-sdk/coordinatedTool.d.ts +0 -120
  121. package/dist/ai-sdk/coordinatedTool.js +0 -134
  122. package/dist/ai-sdk/coordinationContext.d.ts +0 -46
  123. package/dist/ai-sdk/coordinationContext.js +0 -106
  124. package/dist/ai-sdk/index.d.ts +0 -121
  125. package/dist/ai-sdk/index.js +0 -121
  126. package/dist/ai-sdk/wrap.d.ts +0 -65
  127. package/dist/ai-sdk/wrap.js +0 -39
  128. package/dist/auth/index.d.ts +0 -1
  129. package/dist/auth/index.js +0 -8
  130. package/dist/batching/index.d.ts +0 -55
  131. package/dist/batching/index.js +0 -147
  132. package/dist/client/Ablo.d.ts +0 -231
  133. package/dist/client/Ablo.js +0 -160
  134. package/dist/client/abloClient.d.ts +0 -309
  135. package/dist/client/abloClient.js +0 -13
  136. package/dist/client/clientPrelude.d.ts +0 -52
  137. package/dist/client/clientPrelude.js +0 -60
  138. package/dist/client/consoleLogger.d.ts +0 -35
  139. package/dist/client/consoleLogger.js +0 -44
  140. package/dist/client/coreClient.d.ts +0 -60
  141. package/dist/client/coreClient.js +0 -118
  142. package/dist/client/createInternalComponents.d.ts +0 -50
  143. package/dist/client/createInternalComponents.js +0 -98
  144. package/dist/client/createModelProxy.d.ts +0 -248
  145. package/dist/client/createModelProxy.js +0 -884
  146. package/dist/client/humans.d.ts +0 -69
  147. package/dist/client/humans.js +0 -78
  148. package/dist/client/modelRegistration.d.ts +0 -10
  149. package/dist/client/modelRegistration.js +0 -312
  150. package/dist/client/options.d.ts +0 -461
  151. package/dist/client/options.js +0 -7
  152. package/dist/client/reactiveEngine.d.ts +0 -53
  153. package/dist/client/reactiveEngine.js +0 -688
  154. package/dist/client/resourceTypes.d.ts +0 -12
  155. package/dist/client/resourceTypes.js +0 -10
  156. package/dist/client/schemaConfig.d.ts +0 -44
  157. package/dist/client/schemaConfig.js +0 -185
  158. package/dist/client/storeCluster.d.ts +0 -47
  159. package/dist/client/storeCluster.js +0 -118
  160. package/dist/client/storeLifecycle.d.ts +0 -61
  161. package/dist/client/storeLifecycle.js +0 -231
  162. package/dist/client/validateAbloOptions.d.ts +0 -42
  163. package/dist/client/validateAbloOptions.js +0 -43
  164. package/dist/client/wsMutationExecutor.d.ts +0 -27
  165. package/dist/client/wsMutationExecutor.js +0 -72
  166. package/dist/context.d.ts +0 -42
  167. package/dist/context.js +0 -81
  168. package/dist/coordination/ClaimLog.d.ts +0 -26
  169. package/dist/coordination/ClaimLog.js +0 -32
  170. package/dist/coordination/index.d.ts +0 -1
  171. package/dist/coordination/index.js +0 -8
  172. package/dist/core/index.d.ts +0 -33
  173. package/dist/core/index.js +0 -48
  174. package/dist/docs/catalog.d.ts +0 -72
  175. package/dist/docs/catalog.js +0 -230
  176. package/dist/docs/index.d.ts +0 -10
  177. package/dist/docs/index.js +0 -10
  178. package/dist/environment.d.ts +0 -1
  179. package/dist/environment.js +0 -8
  180. package/dist/interfaces/index.d.ts +0 -311
  181. package/dist/interfaces/index.js +0 -9
  182. package/dist/keys/index.d.ts +0 -1
  183. package/dist/keys/index.js +0 -8
  184. package/dist/mutators/RecordingMutation.d.ts +0 -36
  185. package/dist/mutators/RecordingMutation.js +0 -182
  186. package/dist/mutators/Transaction.d.ts +0 -40
  187. package/dist/mutators/Transaction.js +0 -58
  188. package/dist/mutators/UndoManager.d.ts +0 -258
  189. package/dist/mutators/UndoManager.js +0 -658
  190. package/dist/mutators/defineMutators.d.ts +0 -60
  191. package/dist/mutators/defineMutators.js +0 -18
  192. package/dist/mutators/inverseOp.d.ts +0 -126
  193. package/dist/mutators/inverseOp.js +0 -71
  194. package/dist/mutators/mutateActions.d.ts +0 -45
  195. package/dist/mutators/mutateActions.js +0 -105
  196. package/dist/mutators/readerActions.d.ts +0 -33
  197. package/dist/mutators/readerActions.js +0 -57
  198. package/dist/mutators/undoApply.d.ts +0 -51
  199. package/dist/mutators/undoApply.js +0 -117
  200. package/dist/policy/index.d.ts +0 -21
  201. package/dist/policy/index.js +0 -20
  202. package/dist/query/QueryProcessor.d.ts +0 -75
  203. package/dist/query/QueryProcessor.js +0 -255
  204. package/dist/query/client.d.ts +0 -64
  205. package/dist/query/client.js +0 -138
  206. package/dist/query/types.d.ts +0 -85
  207. package/dist/query/types.js +0 -16
  208. package/dist/react/AbloProvider.d.ts +0 -242
  209. package/dist/react/AbloProvider.js +0 -458
  210. package/dist/react/ClientSideSuspense.d.ts +0 -36
  211. package/dist/react/ClientSideSuspense.js +0 -17
  212. package/dist/react/DefaultFallback.d.ts +0 -24
  213. package/dist/react/DefaultFallback.js +0 -43
  214. package/dist/react/context.d.ts +0 -55
  215. package/dist/react/context.js +0 -29
  216. package/dist/react/createAbloReact.d.ts +0 -56
  217. package/dist/react/createAbloReact.js +0 -51
  218. package/dist/react/index.d.ts +0 -62
  219. package/dist/react/index.js +0 -69
  220. package/dist/react/internalContext.d.ts +0 -33
  221. package/dist/react/internalContext.js +0 -3
  222. package/dist/react/useAblo.d.ts +0 -82
  223. package/dist/react/useAblo.js +0 -120
  224. package/dist/react/useCurrentUserId.d.ts +0 -22
  225. package/dist/react/useCurrentUserId.js +0 -34
  226. package/dist/react/useErrorListener.d.ts +0 -20
  227. package/dist/react/useErrorListener.js +0 -38
  228. package/dist/react/useMutationFailureListener.d.ts +0 -26
  229. package/dist/react/useMutationFailureListener.js +0 -38
  230. package/dist/react/useMutators.d.ts +0 -56
  231. package/dist/react/useMutators.js +0 -84
  232. package/dist/react/useReactive.d.ts +0 -35
  233. package/dist/react/useReactive.js +0 -123
  234. package/dist/react/useSyncStatus.d.ts +0 -59
  235. package/dist/react/useSyncStatus.js +0 -76
  236. package/dist/react/useUndoScope.d.ts +0 -34
  237. package/dist/react/useUndoScope.js +0 -81
  238. package/dist/schema/coordination.d.ts +0 -112
  239. package/dist/schema/coordination.js +0 -133
  240. package/dist/schema/ddl.d.ts +0 -97
  241. package/dist/schema/ddl.js +0 -491
  242. package/dist/schema/ddlLock.d.ts +0 -35
  243. package/dist/schema/ddlLock.js +0 -46
  244. package/dist/schema/diff.d.ts +0 -225
  245. package/dist/schema/diff.js +0 -289
  246. package/dist/schema/generate.d.ts +0 -19
  247. package/dist/schema/generate.js +0 -86
  248. package/dist/schema/index.d.ts +0 -42
  249. package/dist/schema/index.js +0 -80
  250. package/dist/schema/queries.d.ts +0 -201
  251. package/dist/schema/queries.js +0 -144
  252. package/dist/schema/select.d.ts +0 -40
  253. package/dist/schema/select.js +0 -90
  254. package/dist/schema/serialize.d.ts +0 -115
  255. package/dist/schema/serialize.js +0 -265
  256. package/dist/schema/sugar.d.ts +0 -109
  257. package/dist/schema/sugar.js +0 -83
  258. package/dist/schema/syncDeltaRow.d.ts +0 -6
  259. package/dist/schema/syncDeltaRow.js +0 -6
  260. package/dist/server/adapter.d.ts +0 -173
  261. package/dist/server/adapter.js +0 -18
  262. package/dist/server/commit.d.ts +0 -107
  263. package/dist/server/commit.js +0 -1
  264. package/dist/server/index.d.ts +0 -14
  265. package/dist/server/index.js +0 -2
  266. package/dist/server/readConfig.d.ts +0 -80
  267. package/dist/server/readConfig.js +0 -8
  268. package/dist/server/storageMode.d.ts +0 -23
  269. package/dist/server/storageMode.js +0 -17
  270. package/dist/source/adapter.d.ts +0 -83
  271. package/dist/source/adapter.js +0 -24
  272. package/dist/source/adapters/drizzle.d.ts +0 -48
  273. package/dist/source/adapters/drizzle.js +0 -219
  274. package/dist/source/adapters/kysely.d.ts +0 -42
  275. package/dist/source/adapters/kysely.js +0 -205
  276. package/dist/source/adapters/kyselyMutationCore.d.ts +0 -76
  277. package/dist/source/adapters/kyselyMutationCore.js +0 -125
  278. package/dist/source/adapters/memory.d.ts +0 -13
  279. package/dist/source/adapters/memory.js +0 -130
  280. package/dist/source/adapters/prisma.d.ts +0 -63
  281. package/dist/source/adapters/prisma.js +0 -202
  282. package/dist/source/conformance.d.ts +0 -37
  283. package/dist/source/conformance.js +0 -215
  284. package/dist/source/connector.d.ts +0 -95
  285. package/dist/source/connector.js +0 -266
  286. package/dist/source/connectorProtocol.d.ts +0 -154
  287. package/dist/source/connectorProtocol.js +0 -163
  288. package/dist/source/contract.d.ts +0 -195
  289. package/dist/source/contract.js +0 -164
  290. package/dist/source/factory.d.ts +0 -92
  291. package/dist/source/factory.js +0 -286
  292. package/dist/source/idempotency.d.ts +0 -61
  293. package/dist/source/idempotency.js +0 -144
  294. package/dist/source/index.d.ts +0 -23
  295. package/dist/source/index.js +0 -30
  296. package/dist/source/migrations.d.ts +0 -21
  297. package/dist/source/migrations.js +0 -103
  298. package/dist/source/next.d.ts +0 -32
  299. package/dist/source/next.js +0 -25
  300. package/dist/source/pushQueue.d.ts +0 -134
  301. package/dist/source/pushQueue.js +0 -256
  302. package/dist/source/signing.d.ts +0 -92
  303. package/dist/source/signing.js +0 -162
  304. package/dist/source/types.d.ts +0 -401
  305. package/dist/source/types.js +0 -59
  306. package/dist/storeContract.d.ts +0 -145
  307. package/dist/storeContract.js +0 -12
  308. package/dist/stores/DatabaseManager.d.ts +0 -107
  309. package/dist/stores/DatabaseManager.js +0 -388
  310. package/dist/stores/ObjectStore.d.ts +0 -115
  311. package/dist/stores/ObjectStore.js +0 -393
  312. package/dist/stores/ObjectStoreContract.d.ts +0 -38
  313. package/dist/stores/ObjectStoreContract.js +0 -1
  314. package/dist/stores/StoreManager.d.ts +0 -114
  315. package/dist/stores/StoreManager.js +0 -304
  316. package/dist/stores/SyncActionStore.d.ts +0 -99
  317. package/dist/stores/SyncActionStore.js +0 -506
  318. package/dist/stores/openIDBWithTimeout.d.ts +0 -65
  319. package/dist/stores/openIDBWithTimeout.js +0 -153
  320. package/dist/stores/syncAction.d.ts +0 -26
  321. package/dist/stores/syncAction.js +0 -16
  322. package/dist/surface.d.ts +0 -36
  323. package/dist/surface.js +0 -75
  324. package/dist/sync/BootstrapFetcher.d.ts +0 -284
  325. package/dist/sync/BootstrapFetcher.js +0 -964
  326. package/dist/sync/ConnectionManager.d.ts +0 -8
  327. package/dist/sync/ConnectionManager.js +0 -8
  328. package/dist/sync/OnDemandLoader.d.ts +0 -231
  329. package/dist/sync/OnDemandLoader.js +0 -743
  330. package/dist/sync/SubscriptionManager.d.ts +0 -159
  331. package/dist/sync/SubscriptionManager.js +0 -243
  332. package/dist/sync/SyncWebSocket.d.ts +0 -173
  333. package/dist/sync/SyncWebSocket.js +0 -438
  334. package/dist/sync/awaitClaimGrant.d.ts +0 -6
  335. package/dist/sync/awaitClaimGrant.js +0 -6
  336. package/dist/sync/bootstrapApply.d.ts +0 -73
  337. package/dist/sync/bootstrapApply.js +0 -73
  338. package/dist/sync/commitFrames.d.ts +0 -8
  339. package/dist/sync/commitFrames.js +0 -8
  340. package/dist/sync/contextPorts.d.ts +0 -18
  341. package/dist/sync/contextPorts.js +0 -31
  342. package/dist/sync/createClaimStream.d.ts +0 -7
  343. package/dist/sync/createClaimStream.js +0 -7
  344. package/dist/sync/createPresenceStream.d.ts +0 -69
  345. package/dist/sync/createPresenceStream.js +0 -200
  346. package/dist/sync/createSnapshot.d.ts +0 -29
  347. package/dist/sync/createSnapshot.js +0 -118
  348. package/dist/sync/credentialLifecycle.d.ts +0 -7
  349. package/dist/sync/credentialLifecycle.js +0 -7
  350. package/dist/sync/deltaPipeline.d.ts +0 -114
  351. package/dist/sync/deltaPipeline.js +0 -278
  352. package/dist/sync/groupChange.d.ts +0 -116
  353. package/dist/sync/groupChange.js +0 -244
  354. package/dist/sync/participants.d.ts +0 -132
  355. package/dist/sync/participants.js +0 -346
  356. package/dist/sync/persistedPrefix.d.ts +0 -12
  357. package/dist/sync/persistedPrefix.js +0 -22
  358. package/dist/sync/schemaDrift.d.ts +0 -55
  359. package/dist/sync/schemaDrift.js +0 -53
  360. package/dist/sync/schemas.d.ts +0 -71
  361. package/dist/sync/schemas.js +0 -94
  362. package/dist/sync/syncCursor.d.ts +0 -40
  363. package/dist/sync/syncCursor.js +0 -55
  364. package/dist/sync/syncPlan.d.ts +0 -54
  365. package/dist/sync/syncPlan.js +0 -50
  366. package/dist/sync/wsFrameHandlers.d.ts +0 -8
  367. package/dist/sync/wsFrameHandlers.js +0 -8
  368. package/dist/syncLog/contract.d.ts +0 -20
  369. package/dist/syncLog/contract.js +0 -19
  370. package/dist/syncLog/index.d.ts +0 -1
  371. package/dist/syncLog/index.js +0 -1
  372. package/dist/transaction/ablo.d.ts +0 -88
  373. package/dist/transaction/ablo.js +0 -33
  374. package/dist/transaction/auth/apiKey.d.ts +0 -152
  375. package/dist/transaction/auth/apiKey.js +0 -419
  376. package/dist/transaction/auth/bootstrapScope.d.ts +0 -15
  377. package/dist/transaction/auth/bootstrapScope.js +0 -1
  378. package/dist/transaction/auth/capability.d.ts +0 -212
  379. package/dist/transaction/auth/capability.js +0 -224
  380. package/dist/transaction/auth/credentialEndpoint.d.ts +0 -61
  381. package/dist/transaction/auth/credentialEndpoint.js +0 -86
  382. package/dist/transaction/auth/credentialPolicy.d.ts +0 -148
  383. package/dist/transaction/auth/credentialPolicy.js +0 -125
  384. package/dist/transaction/auth/credentialSource.d.ts +0 -30
  385. package/dist/transaction/auth/credentialSource.js +0 -55
  386. package/dist/transaction/auth/hostedEndpoints.d.ts +0 -21
  387. package/dist/transaction/auth/hostedEndpoints.js +0 -21
  388. package/dist/transaction/auth/identity.d.ts +0 -55
  389. package/dist/transaction/auth/identity.js +0 -210
  390. package/dist/transaction/auth/index.d.ts +0 -162
  391. package/dist/transaction/auth/index.js +0 -304
  392. package/dist/transaction/auth/schemas.d.ts +0 -59
  393. package/dist/transaction/auth/schemas.js +0 -85
  394. package/dist/transaction/auth/sessionMint.d.ts +0 -28
  395. package/dist/transaction/auth/sessionMint.js +0 -85
  396. package/dist/transaction/coordination/awaitClaimGrant.d.ts +0 -56
  397. package/dist/transaction/coordination/awaitClaimGrant.js +0 -124
  398. package/dist/transaction/coordination/claimHeartbeatLoop.d.ts +0 -84
  399. package/dist/transaction/coordination/claimHeartbeatLoop.js +0 -108
  400. package/dist/transaction/coordination/claimMeta.d.ts +0 -49
  401. package/dist/transaction/coordination/claimMeta.js +0 -52
  402. package/dist/transaction/coordination/createClaimStream.d.ts +0 -64
  403. package/dist/transaction/coordination/createClaimStream.js +0 -475
  404. package/dist/transaction/coordination/events.d.ts +0 -74
  405. package/dist/transaction/coordination/events.js +0 -7
  406. package/dist/transaction/coordination/index.d.ts +0 -19
  407. package/dist/transaction/coordination/index.js +0 -45
  408. package/dist/transaction/coordination/locator.d.ts +0 -104
  409. package/dist/transaction/coordination/locator.js +0 -102
  410. package/dist/transaction/coordination/schema.d.ts +0 -1536
  411. package/dist/transaction/coordination/schema.js +0 -1177
  412. package/dist/transaction/coordination/targetConflict.d.ts +0 -2
  413. package/dist/transaction/coordination/targetConflict.js +0 -107
  414. package/dist/transaction/coordination/trace.d.ts +0 -78
  415. package/dist/transaction/coordination/trace.js +0 -138
  416. package/dist/transaction/durableWrites.d.ts +0 -62
  417. package/dist/transaction/durableWrites.js +0 -71
  418. package/dist/transaction/environment.d.ts +0 -105
  419. package/dist/transaction/environment.js +0 -108
  420. package/dist/transaction/errorCodes.d.ts +0 -403
  421. package/dist/transaction/errorCodes.js +0 -484
  422. package/dist/transaction/errors.d.ts +0 -428
  423. package/dist/transaction/errors.js +0 -686
  424. package/dist/transaction/footprint.d.ts +0 -111
  425. package/dist/transaction/footprint.js +0 -0
  426. package/dist/transaction/index.d.ts +0 -20
  427. package/dist/transaction/index.js +0 -20
  428. package/dist/transaction/keys/index.d.ts +0 -87
  429. package/dist/transaction/keys/index.js +0 -207
  430. package/dist/transaction/log/syncDeltaRow.d.ts +0 -158
  431. package/dist/transaction/log/syncDeltaRow.js +0 -95
  432. package/dist/transaction/logPosition.d.ts +0 -97
  433. package/dist/transaction/logPosition.js +0 -125
  434. package/dist/transaction/logger.d.ts +0 -16
  435. package/dist/transaction/logger.js +0 -7
  436. package/dist/transaction/observability.d.ts +0 -53
  437. package/dist/transaction/observability.js +0 -19
  438. package/dist/transaction/persistence.d.ts +0 -12
  439. package/dist/transaction/persistence.js +0 -11
  440. package/dist/transaction/plugin.d.ts +0 -285
  441. package/dist/transaction/plugin.js +0 -106
  442. package/dist/transaction/policy/types.d.ts +0 -217
  443. package/dist/transaction/policy/types.js +0 -126
  444. package/dist/transaction/resources/functionalUpdate.d.ts +0 -79
  445. package/dist/transaction/resources/functionalUpdate.js +0 -87
  446. package/dist/transaction/resources/httpResources.d.ts +0 -321
  447. package/dist/transaction/resources/httpResources.js +0 -7
  448. package/dist/transaction/resources/modelOperations.d.ts +0 -427
  449. package/dist/transaction/resources/modelOperations.js +0 -12
  450. package/dist/transaction/resources/mutationOptions.d.ts +0 -66
  451. package/dist/transaction/resources/mutationOptions.js +0 -9
  452. package/dist/transaction/resources/where.d.ts +0 -101
  453. package/dist/transaction/resources/where.js +0 -115
  454. package/dist/transaction/resources/writeOptionsSchema.d.ts +0 -47
  455. package/dist/transaction/resources/writeOptionsSchema.js +0 -73
  456. package/dist/transaction/schema/field.d.ts +0 -120
  457. package/dist/transaction/schema/field.js +0 -265
  458. package/dist/transaction/schema/fieldRef.d.ts +0 -38
  459. package/dist/transaction/schema/fieldRef.js +0 -11
  460. package/dist/transaction/schema/loadStrategy.d.ts +0 -45
  461. package/dist/transaction/schema/loadStrategy.js +0 -46
  462. package/dist/transaction/schema/model.d.ts +0 -379
  463. package/dist/transaction/schema/model.js +0 -123
  464. package/dist/transaction/schema/openapi.d.ts +0 -58
  465. package/dist/transaction/schema/openapi.js +0 -501
  466. package/dist/transaction/schema/relation.d.ts +0 -204
  467. package/dist/transaction/schema/relation.js +0 -104
  468. package/dist/transaction/schema/residency.d.ts +0 -29
  469. package/dist/transaction/schema/residency.js +0 -25
  470. package/dist/transaction/schema/roles.d.ts +0 -249
  471. package/dist/transaction/schema/roles.js +0 -230
  472. package/dist/transaction/schema/schema.d.ts +0 -351
  473. package/dist/transaction/schema/schema.js +0 -325
  474. package/dist/transaction/schema/tenancy.d.ts +0 -139
  475. package/dist/transaction/schema/tenancy.js +0 -190
  476. package/dist/transaction/transactionLayer.d.ts +0 -82
  477. package/dist/transaction/transactionLayer.js +0 -24
  478. package/dist/transaction/transactions/settlement/commitEnvelope.d.ts +0 -143
  479. package/dist/transaction/transactions/settlement/commitEnvelope.js +0 -161
  480. package/dist/transaction/transactions/settlement/httpCommitEnvelope.d.ts +0 -53
  481. package/dist/transaction/transactions/settlement/httpCommitEnvelope.js +0 -207
  482. package/dist/transaction/transactions/settlement/idempotencyKey.d.ts +0 -10
  483. package/dist/transaction/transactions/settlement/idempotencyKey.js +0 -9
  484. package/dist/transaction/transactions/settlement/pendingWrite.d.ts +0 -112
  485. package/dist/transaction/transactions/settlement/pendingWrite.js +0 -20
  486. package/dist/transaction/transport/commitFrames.d.ts +0 -90
  487. package/dist/transaction/transport/commitFrames.js +0 -134
  488. package/dist/transaction/transport/connectionManager.d.ts +0 -215
  489. package/dist/transaction/transport/connectionManager.js +0 -673
  490. package/dist/transaction/transport/credentialLifecycle.d.ts +0 -177
  491. package/dist/transaction/transport/credentialLifecycle.js +0 -324
  492. package/dist/transaction/transport/heartbeat.d.ts +0 -65
  493. package/dist/transaction/transport/heartbeat.js +0 -93
  494. package/dist/transaction/transport/httpClient.d.ts +0 -131
  495. package/dist/transaction/transport/httpClient.js +0 -146
  496. package/dist/transaction/transport/httpOptions.d.ts +0 -33
  497. package/dist/transaction/transport/httpOptions.js +0 -12
  498. package/dist/transaction/transport/httpTransport.d.ts +0 -8
  499. package/dist/transaction/transport/httpTransport.js +0 -1388
  500. package/dist/transaction/transport/networkProbe.d.ts +0 -84
  501. package/dist/transaction/transport/networkProbe.js +0 -207
  502. package/dist/transaction/transport/wsFrameHandlers.d.ts +0 -128
  503. package/dist/transaction/transport/wsFrameHandlers.js +0 -429
  504. package/dist/transaction/transport/wsTransport.d.ts +0 -574
  505. package/dist/transaction/transport/wsTransport.js +0 -1023
  506. package/dist/transaction/types/assertExact.d.ts +0 -17
  507. package/dist/transaction/types/assertExact.js +0 -1
  508. package/dist/transaction/types/global.d.ts +0 -107
  509. package/dist/transaction/types/global.js +0 -40
  510. package/dist/transaction/types/index.d.ts +0 -205
  511. package/dist/transaction/types/index.js +0 -56
  512. package/dist/transaction/types/modelData.d.ts +0 -10
  513. package/dist/transaction/types/modelData.js +0 -9
  514. package/dist/transaction/types/participant.d.ts +0 -20
  515. package/dist/transaction/types/participant.js +0 -10
  516. package/dist/transaction/types/streams.d.ts +0 -550
  517. package/dist/transaction/types/streams.js +0 -11
  518. package/dist/transaction/utils/asyncIterator.d.ts +0 -34
  519. package/dist/transaction/utils/asyncIterator.js +0 -135
  520. package/dist/transaction/utils/duration.d.ts +0 -50
  521. package/dist/transaction/utils/duration.js +0 -77
  522. package/dist/transaction/utils/json.d.ts +0 -57
  523. package/dist/transaction/utils/json.js +0 -276
  524. package/dist/transaction/wire/accountResponses.d.ts +0 -420
  525. package/dist/transaction/wire/accountResponses.js +0 -290
  526. package/dist/transaction/wire/auth.d.ts +0 -56
  527. package/dist/transaction/wire/auth.js +0 -63
  528. package/dist/transaction/wire/bootstrapReason.d.ts +0 -9
  529. package/dist/transaction/wire/bootstrapReason.js +0 -8
  530. package/dist/transaction/wire/claimEvent.d.ts +0 -76
  531. package/dist/transaction/wire/claimEvent.js +0 -73
  532. package/dist/transaction/wire/claims.d.ts +0 -530
  533. package/dist/transaction/wire/claims.js +0 -327
  534. package/dist/transaction/wire/commit.d.ts +0 -603
  535. package/dist/transaction/wire/commit.js +0 -321
  536. package/dist/transaction/wire/delta.d.ts +0 -250
  537. package/dist/transaction/wire/delta.js +0 -147
  538. package/dist/transaction/wire/errorEnvelope.d.ts +0 -72
  539. package/dist/transaction/wire/errorEnvelope.js +0 -123
  540. package/dist/transaction/wire/feedCursor.d.ts +0 -60
  541. package/dist/transaction/wire/feedCursor.js +0 -82
  542. package/dist/transaction/wire/feedEvent.d.ts +0 -204
  543. package/dist/transaction/wire/feedEvent.js +0 -65
  544. package/dist/transaction/wire/frames.d.ts +0 -194
  545. package/dist/transaction/wire/frames.js +0 -50
  546. package/dist/transaction/wire/inboundFrames.d.ts +0 -562
  547. package/dist/transaction/wire/inboundFrames.js +0 -116
  548. package/dist/transaction/wire/index.d.ts +0 -54
  549. package/dist/transaction/wire/index.js +0 -83
  550. package/dist/transaction/wire/listEnvelope.d.ts +0 -37
  551. package/dist/transaction/wire/listEnvelope.js +0 -42
  552. package/dist/transaction/wire/modelMutations.d.ts +0 -31
  553. package/dist/transaction/wire/modelMutations.js +0 -52
  554. package/dist/transaction/wire/modelResponses.d.ts +0 -85
  555. package/dist/transaction/wire/modelResponses.js +0 -43
  556. package/dist/transaction/wire/modelShape.d.ts +0 -78
  557. package/dist/transaction/wire/modelShape.js +0 -74
  558. package/dist/transaction/wire/protocol.d.ts +0 -38
  559. package/dist/transaction/wire/protocol.js +0 -38
  560. package/dist/transaction/wire/protocolVersion.d.ts +0 -73
  561. package/dist/transaction/wire/protocolVersion.js +0 -83
  562. package/dist/transactions/mutations/MutationQueue.d.ts +0 -661
  563. package/dist/transactions/mutations/MutationQueue.js +0 -2807
  564. package/dist/transactions/mutations/MutationStore.d.ts +0 -20
  565. package/dist/transactions/mutations/MutationStore.js +0 -53
  566. package/dist/transactions/mutations/UnconfirmedWrites.d.ts +0 -82
  567. package/dist/transactions/mutations/UnconfirmedWrites.js +0 -104
  568. package/dist/transactions/mutations/coalesceRules.d.ts +0 -58
  569. package/dist/transactions/mutations/coalesceRules.js +0 -140
  570. package/dist/transactions/mutations/commitLatency.d.ts +0 -52
  571. package/dist/transactions/mutations/commitLatency.js +0 -130
  572. package/dist/transactions/mutations/commitOutboxStore.d.ts +0 -28
  573. package/dist/transactions/mutations/commitOutboxStore.js +0 -26
  574. package/dist/transactions/mutations/commitPayload.d.ts +0 -165
  575. package/dist/transactions/mutations/commitPayload.js +0 -152
  576. package/dist/transactions/mutations/deltaConfirmation.d.ts +0 -63
  577. package/dist/transactions/mutations/deltaConfirmation.js +0 -235
  578. package/dist/transactions/mutations/durableWriteStore.d.ts +0 -14
  579. package/dist/transactions/mutations/durableWriteStore.js +0 -12
  580. package/dist/transactions/mutations/optimisticApply.d.ts +0 -49
  581. package/dist/transactions/mutations/optimisticApply.js +0 -65
  582. package/dist/transactions/mutations/replayValidation.d.ts +0 -187
  583. package/dist/transactions/mutations/replayValidation.js +0 -164
  584. package/dist/utils/mobxSetup.d.ts +0 -53
  585. package/dist/utils/mobxSetup.js +0 -330
  586. package/dist/views/QueryView.d.ts +0 -79
  587. package/dist/views/QueryView.js +0 -218
  588. package/dist/views/ViewRegistry.d.ts +0 -20
  589. package/dist/views/ViewRegistry.js +0 -55
  590. package/dist/views/incrementalView.d.ts +0 -45
  591. package/dist/views/incrementalView.js +0 -69
  592. package/dist/webhooks/events.d.ts +0 -43
  593. package/dist/webhooks/events.js +0 -42
  594. package/dist/webhooks/index.d.ts +0 -8
  595. package/dist/webhooks/index.js +0 -8
  596. package/dist/wire/index.d.ts +0 -1
  597. package/dist/wire/index.js +0 -8
@@ -1,265 +0,0 @@
1
- /**
2
- * Schema ⇄ JSON.
3
- *
4
- * A `Schema` is fully serializable apart from its client-only closures — the
5
- * Zod validators and computed getters. {@link serializeSchema} emits the
6
- * plain-data JSON form and {@link parseSchema} reconstructs a working `Schema`
7
- * from it: one `Schema` type with two representations.
8
- *
9
- * A hosted, multi-tenant server loads a tenant's schema with `parseSchema(json)`
10
- * rather than importing it in process. The JSON is what `ablo push` sends and
11
- * what the server stores per tenant and version.
12
- *
13
- * What round-trips:
14
- * - all model routing and scoping metadata: typename, tableName, load,
15
- * mutable, the `tenancy` descriptor, bootstrap hints, scope, grants,
16
- * entityRoles, the `conflict` disposition map, persist, autoFill,
17
- * requiredFields, and lazyObservable. The authoring shorthands (`policy`
18
- * and `groups`) are normalized into these canonical fields when the model
19
- * is built, so only the canonical fields cross here.
20
- * - relations, including the resolved `foreignKeyColumn`
21
- * - field metadata (names and type tags), from which validators are rebuilt
22
- * - identity roles
23
- *
24
- * What does not round-trip, because the server never needs it:
25
- * - computed getters, which are closures and are dropped
26
- * - exact Zod refinements, which are rebuilt as permissive validators from
27
- * {@link FieldMeta}; the server does no field-shape validation
28
- */
29
- import { z } from 'zod';
30
- import { AbloValidationError } from '../transaction/errors.js';
31
- import { buildFieldRefs } from '../transaction/schema/schema.js';
32
- import { baseFieldsSchema, } from '../transaction/schema/schema.js';
33
- /** Current schema-JSON envelope version. Bump this on a breaking change to the
34
- * JSON shape itself — not to a user's schema. */
35
- const SCHEMA_JSON_VERSION = 3;
36
- // ── Serialize ────────────────────────────────────────────────────────────────
37
- function relationToJSON(rel) {
38
- const options = rel.options;
39
- return {
40
- type: rel.type,
41
- target: rel.target,
42
- foreignKey: rel.foreignKey,
43
- foreignKeyColumn: rel.foreignKeyColumn,
44
- options: options && Object.keys(options).length > 0 ? { ...options } : undefined,
45
- orderBy: rel._orderBy,
46
- };
47
- }
48
- function modelToJSON(def) {
49
- const relations = {};
50
- for (const [name, rel] of Object.entries(def.relations)) {
51
- relations[name] = relationToJSON(rel);
52
- }
53
- return {
54
- fields: def.fields,
55
- relations,
56
- load: def.load,
57
- // `defineSchema` always resolves `typename` to the schema key when unset,
58
- // so it is present on a built ModelDef; fall back defensively anyway.
59
- typename: def.typename ?? '',
60
- tableName: def.tableName,
61
- tenancy: def.tenancy,
62
- plane: def.plane,
63
- scope: def.scope,
64
- grants: def.grants,
65
- entityRoles: def.entityRoles,
66
- conflict: def.conflict,
67
- bootstrapLimit: def.bootstrapLimit,
68
- bootstrapOrderBy: def.bootstrapOrderBy,
69
- mutable: def.mutable,
70
- lazyObservable: def.lazyObservable,
71
- persist: def.persist,
72
- autoFill: def.autoFill,
73
- requiredFields: def.requiredFields,
74
- };
75
- }
76
- /**
77
- * Project a `Schema` to its JSON form. Drops the client-only closures
78
- * (validators, `computed`); keeps everything the server and a faithful
79
- * rebuild need. The result is plain data — `JSON.stringify`-safe.
80
- */
81
- export function toSchemaJSON(schema) {
82
- const models = {};
83
- for (const [key, def] of Object.entries(schema.models)) {
84
- if (def.typename === '' || def.typename === undefined) {
85
- // typename '' only happens for a malformed def; surface it loudly
86
- // rather than ship a model the server can't route.
87
- models[key] = { ...modelToJSON(def), typename: key };
88
- }
89
- else {
90
- models[key] = modelToJSON(def);
91
- }
92
- }
93
- return {
94
- v: SCHEMA_JSON_VERSION,
95
- models,
96
- identityRoles: schema.identityRoles,
97
- ...(Object.keys(schema.sessionSettings).length > 0
98
- ? { sessionSettings: schema.sessionSettings }
99
- : {}),
100
- };
101
- }
102
- /** Serialize a `Schema` to a JSON string (the `ablo push` payload). */
103
- export function serializeSchema(schema) {
104
- return JSON.stringify(toSchemaJSON(schema));
105
- }
106
- // ── Parse ──────────────────────────────────────────────────────────────────
107
- /** Rebuild a Zod validator for a field from its metadata. Permissive by
108
- * design — the server does no field-shape validation; this exists so a
109
- * parsed `Schema` is structurally a real `Schema`. */
110
- function zodForField(meta) {
111
- let base;
112
- switch (meta.type) {
113
- case 'string':
114
- base = z.string();
115
- break;
116
- case 'number':
117
- base = z.number();
118
- break;
119
- case 'boolean':
120
- base = z.boolean();
121
- break;
122
- case 'date':
123
- base = z.date();
124
- break;
125
- case 'enum':
126
- base =
127
- meta.enumValues && meta.enumValues.length > 0
128
- ? z.enum(meta.enumValues)
129
- : z.string();
130
- break;
131
- case 'json':
132
- default:
133
- base = z.unknown();
134
- break;
135
- }
136
- return meta.isOptional ? base.optional() : base;
137
- }
138
- function relationFromJSON(rel) {
139
- // The brand symbols on RelationDef are declare-only (no runtime
140
- // presence), so a plain object with the runtime members satisfies every
141
- // server-side reader. Cast through unknown to attach the nominal type.
142
- return {
143
- type: rel.type,
144
- target: rel.target,
145
- foreignKey: rel.foreignKey,
146
- foreignKeyColumn: rel.foreignKeyColumn,
147
- options: rel.options ?? {},
148
- _orderBy: rel.orderBy,
149
- };
150
- }
151
- function modelFromJSON(json) {
152
- // `z.ZodRawShape` is a readonly index signature in Zod v4, so build a
153
- // mutable record and cast once when handing it to `z.object`/`ModelDef`.
154
- const shapeMut = {};
155
- for (const [name, meta] of Object.entries(json.fields)) {
156
- shapeMut[name] = zodForField(meta);
157
- }
158
- const shape = shapeMut;
159
- const relations = {};
160
- for (const [name, rel] of Object.entries(json.relations)) {
161
- relations[name] = relationFromJSON(rel);
162
- }
163
- return {
164
- schema: z.object(shape),
165
- shape,
166
- fields: json.fields,
167
- relations,
168
- load: json.load,
169
- bootstrapLimit: json.bootstrapLimit,
170
- bootstrapOrderBy: json.bootstrapOrderBy,
171
- typename: json.typename,
172
- persist: json.persist,
173
- tableName: json.tableName,
174
- tenancy: json.tenancy,
175
- // Absent in older artifacts → default `tenant`, matching the model builder
176
- // and provisioning defaults so the round-trip stays stable.
177
- plane: json.plane ?? 'tenant',
178
- scope: json.scope,
179
- grants: json.grants,
180
- entityRoles: json.entityRoles,
181
- // Absent in older artifacts → undefined, so the commit path falls through to
182
- // the function registry or the engine default.
183
- conflict: json.conflict,
184
- mutable: json.mutable,
185
- lazyObservable: json.lazyObservable,
186
- // computed getters are closures and intentionally not serialized; a
187
- // parsed schema (server-side) has none.
188
- computed: undefined,
189
- autoFill: json.autoFill,
190
- requiredFields: json.requiredFields,
191
- };
192
- }
193
- /**
194
- * Reconstruct a working `Schema` from its JSON form. Validators are rebuilt
195
- * permissively from field metadata (the server never validates field shapes);
196
- * `computed` getters are absent. Everything the server reads — routing,
197
- * scoping, relations, identity roles — is restored exactly.
198
- */
199
- export function fromSchemaJSON(json) {
200
- const models = {};
201
- const validators = {};
202
- for (const [key, modelJson] of Object.entries(json.models)) {
203
- const def = modelFromJSON(modelJson);
204
- models[key] = def;
205
- validators[key] = baseFieldsSchema.merge(def.schema);
206
- }
207
- return {
208
- models: models,
209
- // A schema rebuilt from JSON carries references too — the shapes are here.
210
- fields: buildFieldRefs(models),
211
- validators: validators,
212
- identityRoles: json.identityRoles,
213
- sessionSettings: json.sessionSettings ?? {},
214
- };
215
- }
216
- /** Parse a `Schema` from a JSON string (inverse of {@link serializeSchema}). */
217
- export function parseSchema(json) {
218
- const parsed = JSON.parse(json);
219
- if (parsed.v !== SCHEMA_JSON_VERSION) {
220
- throw new AbloValidationError(`parseSchema: unsupported schema-JSON version ${parsed.v} (expected ${SCHEMA_JSON_VERSION})`, { code: 'schema_definition_invalid' });
221
- }
222
- return fromSchemaJSON(parsed);
223
- }
224
- // ── Hash ─────────────────────────────────────────────────────────────────────
225
- /**
226
- * Stable content hash of a `Schema`'s JSON form. FNV-1a over a canonical
227
- * (sorted-key) encoding — deterministic across runs and order-invariant, no
228
- * `crypto` dependency. Used for connect-time version gating: the client sends
229
- * the hash it was built against, the server compares it to the tenant's
230
- * active schema hash. Not a security primitive.
231
- */
232
- export function schemaHash(schema) {
233
- return fnv1a(canonicalJson(toSchemaJSON(schema)));
234
- }
235
- /**
236
- * Content hash of ONE serialized model — the unit of the semantic drift check.
237
- * Two schemas agree on a model exactly when these match, which is what lets a
238
- * client compare only the models it declares instead of welding itself to the
239
- * whole-schema hash (where any additive push reads as drift). Computed over the
240
- * model's `SchemaJSON` entry with the same canonicalization and hash as
241
- * {@link schemaHash}, on both the client and the server's `GET /api/schema`.
242
- */
243
- export function modelHash(modelJson) {
244
- return fnv1a(canonicalJson(modelJson));
245
- }
246
- /** FNV-1a over an already-canonical string — shared by both hashes above. */
247
- function fnv1a(canonical) {
248
- let h = 0x811c9dc5;
249
- for (let i = 0; i < canonical.length; i++) {
250
- h ^= canonical.charCodeAt(i);
251
- h = Math.imul(h, 0x01000193);
252
- }
253
- return (h >>> 0).toString(16).padStart(8, '0');
254
- }
255
- /** Stable JSON: object keys sorted recursively, `undefined` dropped. */
256
- function canonicalJson(value) {
257
- if (value === null || typeof value !== 'object')
258
- return JSON.stringify(value) ?? 'null';
259
- if (Array.isArray(value))
260
- return `[${value.map(canonicalJson).join(',')}]`;
261
- const entries = Object.entries(value)
262
- .filter(([, v]) => v !== undefined)
263
- .sort(([a], [b]) => (a < b ? -1 : a > b ? 1 : 0));
264
- return `{${entries.map(([k, v]) => `${JSON.stringify(k)}:${canonicalJson(v)}`).join(',')}}`;
265
- }
@@ -1,109 +0,0 @@
1
- /**
2
- * A concise, claim-first way to declare a model. Each verb is shorthand for a
3
- * {@link model} call with two decisions already made, so a reader learns the two
4
- * facts that matter most about an entity before scanning its fields:
5
- *
6
- * - Writability: `mutable.*` lets clients send create, update, and delete
7
- * operations over the commit protocol. `readOnly.*` means the server owns the
8
- * model — its changes stream to clients as deltas, but clients cannot mutate it.
9
- * - Load strategy: `.instant` loads the model at bootstrap, `.lazy` loads it on
10
- * first access, and `.manual` loads it only when you query it explicitly.
11
- *
12
- * The two-token form (`mutable.lazy({...})`) states the safety claim in the first
13
- * token and the load shape in the second. The plain {@link model} factory remains
14
- * available; these verbs are a convenience layered over it.
15
- *
16
- * @example
17
- * ```ts
18
- * tasks: mutable.lazy({ title: z.string() }, {
19
- * typename: 'Task', tableName: 'tasks',
20
- * relations: { ... },
21
- * computed: tasksComputed,
22
- * }),
23
- * ```
24
- */
25
- import type { z } from 'zod';
26
- import { type ModelDef, type ModelOptions, type ComputedRecord, type RelationRecord } from '../transaction/schema/model.js';
27
- /**
28
- * Options accepted by every sugar verb. A strict subset of
29
- * {@link ModelOptions} — anything the verb infers (`mutable`, `load`,
30
- * `lazyObservable`) is deliberately absent so the call site can't
31
- * contradict its verb.
32
- */
33
- export interface SugarOptions<R extends RelationRecord = RelationRecord, C extends ComputedRecord = ComputedRecord> {
34
- /** Relations to other models. Same shape as `model()`'s second arg. */
35
- relations?: R;
36
- /** Computed getters installed on the model class prototype. */
37
- computed?: C;
38
- /**
39
- * Wire `__typename` (PascalCase, e.g. `'Task'`). Defaults to the schema
40
- * key via `defineSchema` — override when the wire shape differs from
41
- * the camelCase schema key.
42
- */
43
- typename?: string;
44
- /**
45
- * The physical table name. Override it when the table name differs from the
46
- * snake_case of the typename — for example, a `Member` type stored in a table
47
- * named `'member'` rather than `'members'`.
48
- */
49
- tableName?: string;
50
- /**
51
- * The row-access policy for tenant isolation — the rule deciding who may read a
52
- * row. A discriminated union on `by` (`column`, `parent`, or `none`). See
53
- * {@link ModelOptions.policy}.
54
- */
55
- policy?: ModelOptions['policy'];
56
- /**
57
- * Sync-group routing — which delta *channels* a row fans into
58
- * (`root` / `grants` / `roles`). See {@link ModelOptions.groups}.
59
- */
60
- groups?: ModelOptions['groups'];
61
- /** Max rows loaded during bootstrap. Only applies to `.instant`. */
62
- bootstrapLimit?: number;
63
- /** Bootstrap sort order (e.g. `'created_at DESC'`). */
64
- bootstrapOrderBy?: string;
65
- /** IndexedDB persistence hints — see {@link ModelOptions.persist}. */
66
- persist?: ModelOptions['persist'];
67
- /**
68
- * Defer MobX observability to first access. Override the verb's
69
- * default when a `.lazy` model is small enough that eager MobX setup
70
- * is fine, or a `.instant` model is hot enough to justify deferral.
71
- */
72
- lazyObservable?: boolean;
73
- }
74
- /**
75
- * Client-writable entities. `mutable.*` is the opt-in signal for wire
76
- * mutations via `commit` — equivalent to setting
77
- * `{ mutable: true, load: X }` on `model()`.
78
- *
79
- * Pick the load suffix by data-access pattern:
80
- * - `.instant` — small, always-needed (Theme, Layout, StatusGroup)
81
- * - `.lazy` — large collections fetched on first query
82
- * (Block, Message, Task)
83
- */
84
- export declare const mutable: {
85
- instant: <Shape extends z.ZodRawShape, R extends RelationRecord = Record<string, never>, C extends ComputedRecord = Record<string, never>>(shape: Shape, opts?: SugarOptions<R, C>) => ModelDef<Shape, R, C>;
86
- lazy: <Shape extends z.ZodRawShape, R extends RelationRecord = Record<string, never>, C extends ComputedRecord = Record<string, never>>(shape: Shape, opts?: SugarOptions<R, C>) => ModelDef<Shape, R, C>;
87
- };
88
- /**
89
- * Server-managed entities. `readOnly.*` means clients subscribe to
90
- * deltas but cannot emit mutations — any `commit` op for this model
91
- * is rejected at the server with "Unknown model."
92
- *
93
- * Use for:
94
- * - Server-written state: `sync_deltas`, `presence`, version vectors
95
- * - Ingestion pipelines: digest entries, filing jobs
96
- * - Audit surfaces: anything where clients watch but only the server
97
- * writes
98
- */
99
- export declare const readOnly: {
100
- instant: <Shape extends z.ZodRawShape, R extends RelationRecord = Record<string, never>, C extends ComputedRecord = Record<string, never>>(shape: Shape, opts?: SugarOptions<R, C>) => ModelDef<Shape, R, C>;
101
- lazy: <Shape extends z.ZodRawShape, R extends RelationRecord = Record<string, never>, C extends ComputedRecord = Record<string, never>>(shape: Shape, opts?: SugarOptions<R, C>) => ModelDef<Shape, R, C>;
102
- /**
103
- * Internal-only: kept out of bootstrap and never written by clients. The
104
- * strongest safety posture — use for tables the SDK must know about (for type
105
- * inference) but that no client should be able to write. Rows still reach a
106
- * client that reads the model, so this is a write boundary, not a read one.
107
- */
108
- internal: <Shape extends z.ZodRawShape, R extends RelationRecord = Record<string, never>, C extends ComputedRecord = Record<string, never>>(shape: Shape, opts?: SugarOptions<R, C>) => ModelDef<Shape, R, C>;
109
- };
@@ -1,83 +0,0 @@
1
- /**
2
- * A concise, claim-first way to declare a model. Each verb is shorthand for a
3
- * {@link model} call with two decisions already made, so a reader learns the two
4
- * facts that matter most about an entity before scanning its fields:
5
- *
6
- * - Writability: `mutable.*` lets clients send create, update, and delete
7
- * operations over the commit protocol. `readOnly.*` means the server owns the
8
- * model — its changes stream to clients as deltas, but clients cannot mutate it.
9
- * - Load strategy: `.instant` loads the model at bootstrap, `.lazy` loads it on
10
- * first access, and `.manual` loads it only when you query it explicitly.
11
- *
12
- * The two-token form (`mutable.lazy({...})`) states the safety claim in the first
13
- * token and the load shape in the second. The plain {@link model} factory remains
14
- * available; these verbs are a convenience layered over it.
15
- *
16
- * @example
17
- * ```ts
18
- * tasks: mutable.lazy({ title: z.string() }, {
19
- * typename: 'Task', tableName: 'tasks',
20
- * relations: { ... },
21
- * computed: tasksComputed,
22
- * }),
23
- * ```
24
- */
25
- import { model, } from '../transaction/schema/model.js';
26
- /** Internal helper — builds a ModelDef with baseline safety+load flags applied. */
27
- function build(shape, opts, baseline) {
28
- return model(shape, { relations: (opts?.relations ?? {}), mutable: baseline.mutable,
29
- load: baseline.load,
30
- lazyObservable: opts?.lazyObservable ?? baseline.lazyObservable,
31
- typename: opts?.typename,
32
- tableName: opts?.tableName,
33
- policy: opts?.policy,
34
- groups: opts?.groups,
35
- bootstrapLimit: opts?.bootstrapLimit,
36
- bootstrapOrderBy: opts?.bootstrapOrderBy,
37
- persist: opts?.persist,
38
- computed: opts?.computed, });
39
- }
40
- /**
41
- * Client-writable entities. `mutable.*` is the opt-in signal for wire
42
- * mutations via `commit` — equivalent to setting
43
- * `{ mutable: true, load: X }` on `model()`.
44
- *
45
- * Pick the load suffix by data-access pattern:
46
- * - `.instant` — small, always-needed (Theme, Layout, StatusGroup)
47
- * - `.lazy` — large collections fetched on first query
48
- * (Block, Message, Task)
49
- */
50
- export const mutable = {
51
- instant: (shape, opts) =>
52
- // Reactive by default (see readonly.instant note): opt out with
53
- // `lazyObservable: false` only for very large read-only list models.
54
- build(shape, opts, { mutable: true, load: 'instant', lazyObservable: true }),
55
- lazy: (shape, opts) => build(shape, opts, { mutable: true, load: 'lazy', lazyObservable: true }),
56
- };
57
- /**
58
- * Server-managed entities. `readOnly.*` means clients subscribe to
59
- * deltas but cannot emit mutations — any `commit` op for this model
60
- * is rejected at the server with "Unknown model."
61
- *
62
- * Use for:
63
- * - Server-written state: `sync_deltas`, `presence`, version vectors
64
- * - Ingestion pipelines: digest entries, filing jobs
65
- * - Audit surfaces: anything where clients watch but only the server
66
- * writes
67
- */
68
- export const readOnly = {
69
- instant: (shape, opts) =>
70
- // Reactive by default, like every variant: a remote delta that mutates a row
71
- // in place must re-render reactive reads. Opt out per-model with
72
- // `lazyObservable: false` for very large read-only lists where per-field
73
- // atoms cost more than the QueryView's entry-replaced reactivity.
74
- build(shape, opts, { mutable: false, load: 'instant', lazyObservable: true }),
75
- lazy: (shape, opts) => build(shape, opts, { mutable: false, load: 'lazy', lazyObservable: true }),
76
- /**
77
- * Internal-only: kept out of bootstrap and never written by clients. The
78
- * strongest safety posture — use for tables the SDK must know about (for type
79
- * inference) but that no client should be able to write. Rows still reach a
80
- * client that reads the model, so this is a write boundary, not a read one.
81
- */
82
- internal: (shape, opts) => build(shape, opts, { mutable: false, load: 'lazy', lazyObservable: true }),
83
- };
@@ -1,6 +0,0 @@
1
- /**
2
- * Compatibility entry point for the durable `sync_deltas` row contract, which
3
- * is owned by the transaction layer. The schema barrel continues to re-export
4
- * this path so existing `@abloatai/ablo/schema` consumers do not change.
5
- */
6
- export * from '../transaction/log/syncDeltaRow.js';
@@ -1,6 +0,0 @@
1
- /**
2
- * Compatibility entry point for the durable `sync_deltas` row contract, which
3
- * is owned by the transaction layer. The schema barrel continues to re-export
4
- * this path so existing `@abloatai/ablo/schema` consumers do not change.
5
- */
6
- export * from '../transaction/log/syncDeltaRow.js';
@@ -1,173 +0,0 @@
1
- /**
2
- * `@abloatai/ablo/server` — the `DataAdapter` storage contract.
3
- *
4
- * A `DataAdapter` is the boundary between the sync engine and a database. The
5
- * engine asks it to do three things — `read` canonical rows, `commit` a change,
6
- * and `sync` the change log — and expects nothing beyond that. Everything
7
- * higher up, such as proposing a change or resolving a conflict, is handled
8
- * before the adapter is ever called.
9
- *
10
- * This module declares the contract and the value types that travel through it;
11
- * you supply the implementation for your own database. The reference Postgres
12
- * implementation ships separately, because it carries a SQL driver and raw
13
- * queries that have no place in this browser-safe build.
14
- *
15
- * Every shape here builds on {@link Row}, the single canonical form of a
16
- * database row that the rest of the engine reads and writes.
17
- */
18
- import type { SourceListQuery, SourceOperation, SourceRequestContext } from '../source/index.js';
19
- import type { ServerSyncDelta } from '../transaction/wire/delta.js';
20
- import type { BootstrapModel } from './readConfig.js';
21
- import type { CommitContext, CommitResult } from './commit.js';
22
- import type { StorageMode } from './storageMode.js';
23
- /**
24
- * A canonical database row: one record, keyed by column name. The value type is
25
- * `unknown` by design, not `any` — columns arrive as JSON or in whatever form
26
- * the driver hands back, so a caller must narrow a value before using it. Reach
27
- * for this type wherever a row is passed around; it is the one name for that
28
- * shape, and a later schema-typed `read<T>()` can specialize it to a concrete
29
- * model without changing any call site.
30
- */
31
- export type Row = Record<string, unknown>;
32
- /**
33
- * The result of a {@link Row} read. Its two shapes mirror the two kinds of
34
- * {@link ReadRequest}:
35
- * - `bootstrap`: a full load, returned as a map from model name to its rows.
36
- * - `query`: the rows of a single filtered query.
37
- */
38
- export type ReadResult = {
39
- readonly kind: 'bootstrap';
40
- /** model name → its rows. Empty models are omitted. */
41
- readonly models: Record<string, Row[]>;
42
- /** Models whose read failed (partial success), if any. */
43
- readonly failedModels?: string[];
44
- /**
45
- * Present when a paged read (`ReadRequest.page`) stopped at its row
46
- * limit with rows remaining: pass it back as the next page's cursor.
47
- * Absent on the final page and on unpaged reads.
48
- */
49
- readonly nextCursor?: string;
50
- } | {
51
- readonly kind: 'query';
52
- readonly rows: readonly Row[];
53
- };
54
- /**
55
- * Where a `sync` call resumes: the client's last-seen position in the
56
- * `sync_deltas` change log. The cursor carries only that position. Everything
57
- * else a sync needs — the organization, the sync groups, the largest gap it
58
- * will stream — is bound onto the adapter when it is resolved, so a client can
59
- * never ask to read an organization other than its own. A `lastSyncId` of zero
60
- * or less means "no position yet", which `sync` answers with `needsFullRead`.
61
- */
62
- export interface SyncCursor {
63
- readonly lastSyncId: number;
64
- }
65
- export interface DataAdapterCapabilities {
66
- /** The backend can dry-run a change without committing it. */
67
- readonly propose?: boolean;
68
- /** `commit` is atomic (all-or-nothing) across the change's operations. */
69
- readonly transactions?: boolean;
70
- /** Changes fan out in real time (vs poll-only). */
71
- readonly realtime?: boolean;
72
- /** The backend can be introspected for its schema. */
73
- readonly schemaIntrospection?: boolean;
74
- }
75
- /** Result of a dry-run proposal (only adapters with `capabilities.propose`). */
76
- export interface ProposalResult {
77
- readonly ok: boolean;
78
- readonly conflicts?: readonly {
79
- readonly model: string;
80
- readonly id: string;
81
- readonly reason: string;
82
- }[];
83
- readonly rows?: readonly Row[];
84
- }
85
- /**
86
- * A request for canonical rows, in one of two shapes:
87
- * - `bootstrap`: the full-load reader — every enabled model's rows at once.
88
- * - `query`: a single filtered query against one model, used by the live
89
- * `/sync/query` path.
90
- *
91
- * A `query` carries its own execution as the `runHosted` closure, the same way
92
- * a {@link ChangeSet} carries its write. This lets the adapter decide how to
93
- * answer the request — a data source runs the customer's `list`, a hosted
94
- * database runs the closure — without the query engine itself having to live
95
- * inside the adapter.
96
- */
97
- export type ReadRequest = {
98
- readonly kind: 'bootstrap';
99
- readonly models: readonly BootstrapModel[];
100
- readonly requestedModels?: readonly string[];
101
- readonly scope?: SourceRequestContext;
102
- /**
103
- * Keyset pagination for a SINGLE-model read (`requestedModels` names
104
- * exactly one model): return at most `limit` rows, starting after the
105
- * row whose id equals `cursor`. The result carries `nextCursor` while
106
- * rows remain. Ignored for multi-model reads and by adapters whose
107
- * backend pages upstream on its own.
108
- */
109
- readonly page?: {
110
- readonly cursor?: string;
111
- readonly limit: number;
112
- };
113
- } | {
114
- readonly kind: 'query';
115
- readonly model: string;
116
- /** Source-side model name, when it differs from `model`. */
117
- readonly sourceModel?: string;
118
- /** `__typename` stamped on each returned row. */
119
- readonly typename: string;
120
- readonly query: SourceListQuery;
121
- readonly scope?: SourceRequestContext;
122
- /** Runs the query against a hosted database: compile, take the tenant pool, apply row-level security, unpack the rows. */
123
- readonly runHosted: () => Promise<Row[]>;
124
- };
125
- /**
126
- * A change to apply to the canonical store. `runHosted` holds the write already
127
- * bound to its execution: a hosted adapter simply runs it, while a data-source
128
- * adapter ignores it and ships the operations to the customer's own endpoint.
129
- * The adapter therefore decides how a change is applied, while the write logic
130
- * itself is prepared above it.
131
- */
132
- export interface ChangeSet {
133
- readonly operations: readonly SourceOperation[];
134
- readonly context: CommitContext;
135
- readonly clientTxId: string;
136
- readonly runHosted: () => Promise<CommitResult>;
137
- }
138
- export interface SyncResult {
139
- /** Deltas in `(cursor.lastSyncId, nextCursor.lastSyncId]`, scoped to syncGroups. */
140
- readonly changes: readonly ServerSyncDelta[];
141
- readonly nextCursor: {
142
- readonly lastSyncId: number;
143
- };
144
- /** True when the gap was too large to stream — caller must full-`read`. */
145
- readonly needsFullRead: boolean;
146
- }
147
- /**
148
- * The interface every storage mode implements. The package defines the
149
- * contract; you implement it against your own database. An adapter is
150
- * responsible for one thing — reaching the data — and offers exactly three
151
- * methods to do it: `read` fetches canonical rows, `commit` applies a change,
152
- * and `sync` reads the change log. Anything above that line, such as proposing
153
- * a change or resolving a conflict, happens before the adapter is called.
154
- * `propose` is an optional capability, not a required method.
155
- */
156
- export interface DataAdapter {
157
- /** Names the adapter's storage mode, for diagnostics. Routing is decided by
158
- * the resolver, not by reading this field. */
159
- readonly mode: StorageMode;
160
- readonly capabilities: DataAdapterCapabilities;
161
- read(req: ReadRequest): Promise<ReadResult>;
162
- commit(change: ChangeSet): Promise<CommitResult>;
163
- sync(cursor: SyncCursor): Promise<SyncResult>;
164
- }
165
- /** A `DataAdapter` whose backend can dry-run a change. Narrow to this only after confirming the `propose` capability. */
166
- export interface ProposableDataAdapter extends DataAdapter {
167
- propose(change: ChangeSet): Promise<ProposalResult>;
168
- }
169
- /** Resolves an authenticated scope to the adapter that serves it. */
170
- export type AdapterResolver = (scope: {
171
- readonly projectId: string;
172
- readonly accountScope?: string;
173
- }) => Promise<DataAdapter> | DataAdapter;
@@ -1,18 +0,0 @@
1
- /**
2
- * `@abloatai/ablo/server` — the `DataAdapter` storage contract.
3
- *
4
- * A `DataAdapter` is the boundary between the sync engine and a database. The
5
- * engine asks it to do three things — `read` canonical rows, `commit` a change,
6
- * and `sync` the change log — and expects nothing beyond that. Everything
7
- * higher up, such as proposing a change or resolving a conflict, is handled
8
- * before the adapter is ever called.
9
- *
10
- * This module declares the contract and the value types that travel through it;
11
- * you supply the implementation for your own database. The reference Postgres
12
- * implementation ships separately, because it carries a SQL driver and raw
13
- * queries that have no place in this browser-safe build.
14
- *
15
- * Every shape here builds on {@link Row}, the single canonical form of a
16
- * database row that the rest of the engine reads and writes.
17
- */
18
- export {};