@abloatai/ablo 0.35.0 → 0.37.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 (622) hide show
  1. package/AGENTS.md +2 -2
  2. package/CHANGELOG.md +71 -1929
  3. package/NOTICE +2 -2
  4. package/README.md +23 -532
  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 -112
  19. package/dist/index.d.ts.map +1 -0
  20. package/dist/index.js +3 -161
  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 +2 -2
  59. package/docs/api-keys.md +13 -12
  60. package/docs/api.md +15 -53
  61. package/docs/audit.md +4 -3
  62. package/docs/cli.md +11 -11
  63. package/docs/client-behavior.md +9 -9
  64. package/docs/concurrency-convention.md +28 -42
  65. package/docs/coordination.md +228 -86
  66. package/docs/data-sources.md +5 -5
  67. package/docs/debugging.md +34 -12
  68. package/docs/deployment.md +8 -8
  69. package/docs/examples/agent-human.md +4 -4
  70. package/docs/examples/ai-sdk-tool.md +1 -1
  71. package/docs/examples/existing-python-backend.md +15 -4
  72. package/docs/examples/nextjs.md +27 -6
  73. package/docs/examples/scoped-agent.md +3 -3
  74. package/docs/examples/server-agent.md +2 -2
  75. package/docs/groups.md +57 -3
  76. package/docs/guarantees.md +37 -10
  77. package/docs/how-it-works.md +32 -8
  78. package/docs/idempotency.md +6 -6
  79. package/docs/identity.md +24 -24
  80. package/docs/index.md +8 -8
  81. package/docs/integration-guide.md +38 -16
  82. package/docs/internal/README.md +18 -0
  83. package/docs/internal/agent-fleet-coordination-design.md +171 -0
  84. package/docs/internal/agent-orchestration.md +58 -0
  85. package/docs/internal/commit-identifiers.md +91 -0
  86. package/docs/internal/concurrency-open-decisions.md +37 -0
  87. package/docs/internal/data-source-reverse-channel.md +150 -0
  88. package/docs/internal/per-field-conflict-detection.md +165 -0
  89. package/docs/internal/postgres-replication.md +64 -0
  90. package/docs/internal/serializable-schema.md +119 -0
  91. package/docs/internal/structure.md +32 -0
  92. package/docs/mcp.md +9 -9
  93. package/docs/migration.md +37 -18
  94. package/docs/projects.md +1 -1
  95. package/docs/quickstart.md +2 -2
  96. package/docs/react.md +24 -13
  97. package/docs/schema-contract.md +3 -3
  98. package/docs/sessions.md +91 -37
  99. package/docs/webhooks.md +9 -9
  100. package/examples/README.md +2 -2
  101. package/examples/data-source/README.md +1 -1
  102. package/examples/data-source/ablo-driver.ts +1 -1
  103. package/examples/data-source/customer-server.ts +1 -1
  104. package/examples/data-source/run.ts +1 -1
  105. package/examples/data-source/schema.ts +1 -1
  106. package/examples/quickstart.ts +2 -2
  107. package/llms.txt +12 -12
  108. package/package.json +64 -174
  109. package/dist/BaseSyncedStore.d.ts +0 -823
  110. package/dist/BaseSyncedStore.js +0 -1955
  111. package/dist/Database.d.ts +0 -335
  112. package/dist/Database.js +0 -1500
  113. package/dist/InstanceCache.d.ts +0 -233
  114. package/dist/InstanceCache.js +0 -1164
  115. package/dist/LazyReferenceCollection.d.ts +0 -177
  116. package/dist/LazyReferenceCollection.js +0 -461
  117. package/dist/Model.d.ts +0 -444
  118. package/dist/Model.js +0 -909
  119. package/dist/ModelRegistry.d.ts +0 -221
  120. package/dist/ModelRegistry.js +0 -537
  121. package/dist/NetworkMonitor.d.ts +0 -26
  122. package/dist/NetworkMonitor.js +0 -77
  123. package/dist/RuntimeContext.d.ts +0 -52
  124. package/dist/RuntimeContext.js +0 -80
  125. package/dist/SyncClient.d.ts +0 -551
  126. package/dist/SyncClient.js +0 -2199
  127. package/dist/adapters/alwaysOnline.d.ts +0 -14
  128. package/dist/adapters/alwaysOnline.js +0 -17
  129. package/dist/adapters/inMemoryStorage.d.ts +0 -31
  130. package/dist/adapters/inMemoryStorage.js +0 -110
  131. package/dist/ai-sdk/coordinatedTool.d.ts +0 -120
  132. package/dist/ai-sdk/coordinatedTool.js +0 -134
  133. package/dist/ai-sdk/coordinationContext.d.ts +0 -46
  134. package/dist/ai-sdk/coordinationContext.js +0 -106
  135. package/dist/ai-sdk/index.d.ts +0 -121
  136. package/dist/ai-sdk/index.js +0 -121
  137. package/dist/ai-sdk/wrap.d.ts +0 -65
  138. package/dist/ai-sdk/wrap.js +0 -39
  139. package/dist/auth/index.d.ts +0 -1
  140. package/dist/auth/index.js +0 -8
  141. package/dist/batching/index.d.ts +0 -55
  142. package/dist/batching/index.js +0 -147
  143. package/dist/cli.cjs +0 -288600
  144. package/dist/client/Ablo.d.ts +0 -231
  145. package/dist/client/Ablo.js +0 -149
  146. package/dist/client/abloClient.d.ts +0 -309
  147. package/dist/client/abloClient.js +0 -13
  148. package/dist/client/clientPrelude.d.ts +0 -52
  149. package/dist/client/clientPrelude.js +0 -60
  150. package/dist/client/consoleLogger.d.ts +0 -35
  151. package/dist/client/consoleLogger.js +0 -44
  152. package/dist/client/coreClient.d.ts +0 -60
  153. package/dist/client/coreClient.js +0 -118
  154. package/dist/client/createInternalComponents.d.ts +0 -46
  155. package/dist/client/createInternalComponents.js +0 -92
  156. package/dist/client/createModelProxy.d.ts +0 -228
  157. package/dist/client/createModelProxy.js +0 -818
  158. package/dist/client/humans.d.ts +0 -48
  159. package/dist/client/humans.js +0 -52
  160. package/dist/client/modelRegistration.d.ts +0 -10
  161. package/dist/client/modelRegistration.js +0 -312
  162. package/dist/client/options.d.ts +0 -461
  163. package/dist/client/options.js +0 -7
  164. package/dist/client/reactiveEngine.d.ts +0 -48
  165. package/dist/client/reactiveEngine.js +0 -910
  166. package/dist/client/resourceTypes.d.ts +0 -12
  167. package/dist/client/resourceTypes.js +0 -10
  168. package/dist/client/schemaConfig.d.ts +0 -44
  169. package/dist/client/schemaConfig.js +0 -185
  170. package/dist/client/validateAbloOptions.d.ts +0 -42
  171. package/dist/client/validateAbloOptions.js +0 -43
  172. package/dist/client/wsMutationExecutor.d.ts +0 -27
  173. package/dist/client/wsMutationExecutor.js +0 -72
  174. package/dist/context.d.ts +0 -29
  175. package/dist/context.js +0 -58
  176. package/dist/coordination/ClaimLog.d.ts +0 -26
  177. package/dist/coordination/ClaimLog.js +0 -32
  178. package/dist/coordination/index.d.ts +0 -1
  179. package/dist/coordination/index.js +0 -8
  180. package/dist/core/DatabaseManager.d.ts +0 -105
  181. package/dist/core/DatabaseManager.js +0 -387
  182. package/dist/core/QueryProcessor.d.ts +0 -75
  183. package/dist/core/QueryProcessor.js +0 -255
  184. package/dist/core/QueryView.d.ts +0 -79
  185. package/dist/core/QueryView.js +0 -218
  186. package/dist/core/StoreManager.d.ts +0 -112
  187. package/dist/core/StoreManager.js +0 -302
  188. package/dist/core/ViewRegistry.d.ts +0 -20
  189. package/dist/core/ViewRegistry.js +0 -55
  190. package/dist/core/index.d.ts +0 -33
  191. package/dist/core/index.js +0 -48
  192. package/dist/core/openIDBWithTimeout.d.ts +0 -65
  193. package/dist/core/openIDBWithTimeout.js +0 -153
  194. package/dist/core/queryUtils.d.ts +0 -45
  195. package/dist/core/queryUtils.js +0 -69
  196. package/dist/core/storeContract.d.ts +0 -145
  197. package/dist/core/storeContract.js +0 -12
  198. package/dist/docs/catalog.d.ts +0 -72
  199. package/dist/docs/catalog.js +0 -227
  200. package/dist/docs/index.d.ts +0 -10
  201. package/dist/docs/index.js +0 -10
  202. package/dist/environment.d.ts +0 -1
  203. package/dist/environment.js +0 -8
  204. package/dist/interfaces/index.d.ts +0 -311
  205. package/dist/interfaces/index.js +0 -9
  206. package/dist/keys/index.d.ts +0 -1
  207. package/dist/keys/index.js +0 -8
  208. package/dist/mutators/RecordingMutation.d.ts +0 -36
  209. package/dist/mutators/RecordingMutation.js +0 -182
  210. package/dist/mutators/Transaction.d.ts +0 -40
  211. package/dist/mutators/Transaction.js +0 -58
  212. package/dist/mutators/UndoManager.d.ts +0 -258
  213. package/dist/mutators/UndoManager.js +0 -658
  214. package/dist/mutators/defineMutators.d.ts +0 -60
  215. package/dist/mutators/defineMutators.js +0 -18
  216. package/dist/mutators/inverseOp.d.ts +0 -126
  217. package/dist/mutators/inverseOp.js +0 -71
  218. package/dist/mutators/mutateActions.d.ts +0 -45
  219. package/dist/mutators/mutateActions.js +0 -105
  220. package/dist/mutators/readerActions.d.ts +0 -33
  221. package/dist/mutators/readerActions.js +0 -57
  222. package/dist/mutators/undoApply.d.ts +0 -51
  223. package/dist/mutators/undoApply.js +0 -117
  224. package/dist/policy/index.d.ts +0 -21
  225. package/dist/policy/index.js +0 -20
  226. package/dist/query/client.d.ts +0 -61
  227. package/dist/query/client.js +0 -137
  228. package/dist/query/types.d.ts +0 -85
  229. package/dist/query/types.js +0 -16
  230. package/dist/react/AbloProvider.d.ts +0 -230
  231. package/dist/react/AbloProvider.js +0 -455
  232. package/dist/react/ClientSideSuspense.d.ts +0 -36
  233. package/dist/react/ClientSideSuspense.js +0 -17
  234. package/dist/react/DefaultFallback.d.ts +0 -24
  235. package/dist/react/DefaultFallback.js +0 -43
  236. package/dist/react/context.d.ts +0 -55
  237. package/dist/react/context.js +0 -29
  238. package/dist/react/index.d.ts +0 -61
  239. package/dist/react/index.js +0 -66
  240. package/dist/react/internalContext.d.ts +0 -33
  241. package/dist/react/internalContext.js +0 -3
  242. package/dist/react/useAblo.d.ts +0 -75
  243. package/dist/react/useAblo.js +0 -102
  244. package/dist/react/useCurrentUserId.d.ts +0 -22
  245. package/dist/react/useCurrentUserId.js +0 -34
  246. package/dist/react/useErrorListener.d.ts +0 -20
  247. package/dist/react/useErrorListener.js +0 -38
  248. package/dist/react/useMutationFailureListener.d.ts +0 -26
  249. package/dist/react/useMutationFailureListener.js +0 -38
  250. package/dist/react/useMutators.d.ts +0 -56
  251. package/dist/react/useMutators.js +0 -84
  252. package/dist/react/useReactive.d.ts +0 -35
  253. package/dist/react/useReactive.js +0 -123
  254. package/dist/react/useSyncStatus.d.ts +0 -59
  255. package/dist/react/useSyncStatus.js +0 -76
  256. package/dist/react/useUndoScope.d.ts +0 -34
  257. package/dist/react/useUndoScope.js +0 -81
  258. package/dist/schema/coordination.d.ts +0 -112
  259. package/dist/schema/coordination.js +0 -129
  260. package/dist/schema/ddl.d.ts +0 -97
  261. package/dist/schema/ddl.js +0 -491
  262. package/dist/schema/ddlLock.d.ts +0 -35
  263. package/dist/schema/ddlLock.js +0 -46
  264. package/dist/schema/diff.d.ts +0 -225
  265. package/dist/schema/diff.js +0 -289
  266. package/dist/schema/generate.d.ts +0 -19
  267. package/dist/schema/generate.js +0 -86
  268. package/dist/schema/index.d.ts +0 -41
  269. package/dist/schema/index.js +0 -76
  270. package/dist/schema/queries.d.ts +0 -201
  271. package/dist/schema/queries.js +0 -144
  272. package/dist/schema/select.d.ts +0 -40
  273. package/dist/schema/select.js +0 -87
  274. package/dist/schema/serialize.d.ts +0 -115
  275. package/dist/schema/serialize.js +0 -262
  276. package/dist/schema/sugar.d.ts +0 -109
  277. package/dist/schema/sugar.js +0 -83
  278. package/dist/schema/syncDeltaRow.d.ts +0 -6
  279. package/dist/schema/syncDeltaRow.js +0 -6
  280. package/dist/server/adapter.d.ts +0 -173
  281. package/dist/server/adapter.js +0 -18
  282. package/dist/server/commit.d.ts +0 -107
  283. package/dist/server/commit.js +0 -1
  284. package/dist/server/index.d.ts +0 -14
  285. package/dist/server/index.js +0 -2
  286. package/dist/server/readConfig.d.ts +0 -80
  287. package/dist/server/readConfig.js +0 -8
  288. package/dist/server/storageMode.d.ts +0 -23
  289. package/dist/server/storageMode.js +0 -17
  290. package/dist/source/adapter.d.ts +0 -81
  291. package/dist/source/adapter.js +0 -22
  292. package/dist/source/adapters/drizzle.d.ts +0 -48
  293. package/dist/source/adapters/drizzle.js +0 -219
  294. package/dist/source/adapters/kysely.d.ts +0 -42
  295. package/dist/source/adapters/kysely.js +0 -205
  296. package/dist/source/adapters/kyselyMutationCore.d.ts +0 -76
  297. package/dist/source/adapters/kyselyMutationCore.js +0 -125
  298. package/dist/source/adapters/memory.d.ts +0 -13
  299. package/dist/source/adapters/memory.js +0 -130
  300. package/dist/source/adapters/prisma.d.ts +0 -63
  301. package/dist/source/adapters/prisma.js +0 -202
  302. package/dist/source/conformance.d.ts +0 -37
  303. package/dist/source/conformance.js +0 -215
  304. package/dist/source/connector.d.ts +0 -95
  305. package/dist/source/connector.js +0 -266
  306. package/dist/source/connectorProtocol.d.ts +0 -154
  307. package/dist/source/connectorProtocol.js +0 -163
  308. package/dist/source/contract.d.ts +0 -195
  309. package/dist/source/contract.js +0 -164
  310. package/dist/source/factory.d.ts +0 -92
  311. package/dist/source/factory.js +0 -286
  312. package/dist/source/footprint.d.ts +0 -111
  313. package/dist/source/footprint.js +0 -0
  314. package/dist/source/idempotency.d.ts +0 -61
  315. package/dist/source/idempotency.js +0 -144
  316. package/dist/source/index.d.ts +0 -23
  317. package/dist/source/index.js +0 -30
  318. package/dist/source/migrations.d.ts +0 -21
  319. package/dist/source/migrations.js +0 -103
  320. package/dist/source/next.d.ts +0 -32
  321. package/dist/source/next.js +0 -25
  322. package/dist/source/pushQueue.d.ts +0 -134
  323. package/dist/source/pushQueue.js +0 -256
  324. package/dist/source/signing.d.ts +0 -92
  325. package/dist/source/signing.js +0 -162
  326. package/dist/source/types.d.ts +0 -401
  327. package/dist/source/types.js +0 -59
  328. package/dist/stores/ObjectStore.d.ts +0 -115
  329. package/dist/stores/ObjectStore.js +0 -393
  330. package/dist/stores/ObjectStoreContract.d.ts +0 -38
  331. package/dist/stores/ObjectStoreContract.js +0 -1
  332. package/dist/stores/SyncActionStore.d.ts +0 -97
  333. package/dist/stores/SyncActionStore.js +0 -504
  334. package/dist/stores/syncAction.d.ts +0 -26
  335. package/dist/stores/syncAction.js +0 -16
  336. package/dist/surface.d.ts +0 -36
  337. package/dist/surface.js +0 -75
  338. package/dist/sync/BootstrapFetcher.d.ts +0 -280
  339. package/dist/sync/BootstrapFetcher.js +0 -962
  340. package/dist/sync/ConnectionManager.d.ts +0 -8
  341. package/dist/sync/ConnectionManager.js +0 -8
  342. package/dist/sync/OnDemandLoader.d.ts +0 -228
  343. package/dist/sync/OnDemandLoader.js +0 -742
  344. package/dist/sync/SubscriptionManager.d.ts +0 -159
  345. package/dist/sync/SubscriptionManager.js +0 -243
  346. package/dist/sync/SyncWebSocket.d.ts +0 -173
  347. package/dist/sync/SyncWebSocket.js +0 -438
  348. package/dist/sync/awaitClaimGrant.d.ts +0 -6
  349. package/dist/sync/awaitClaimGrant.js +0 -6
  350. package/dist/sync/bootstrapApply.d.ts +0 -70
  351. package/dist/sync/bootstrapApply.js +0 -73
  352. package/dist/sync/commitFrames.d.ts +0 -8
  353. package/dist/sync/commitFrames.js +0 -8
  354. package/dist/sync/contextPorts.d.ts +0 -18
  355. package/dist/sync/contextPorts.js +0 -31
  356. package/dist/sync/createClaimStream.d.ts +0 -7
  357. package/dist/sync/createClaimStream.js +0 -7
  358. package/dist/sync/createPresenceStream.d.ts +0 -69
  359. package/dist/sync/createPresenceStream.js +0 -200
  360. package/dist/sync/createSnapshot.d.ts +0 -29
  361. package/dist/sync/createSnapshot.js +0 -118
  362. package/dist/sync/credentialLifecycle.d.ts +0 -7
  363. package/dist/sync/credentialLifecycle.js +0 -7
  364. package/dist/sync/deltaPipeline.d.ts +0 -113
  365. package/dist/sync/deltaPipeline.js +0 -261
  366. package/dist/sync/groupChange.d.ts +0 -113
  367. package/dist/sync/groupChange.js +0 -242
  368. package/dist/sync/participants.d.ts +0 -115
  369. package/dist/sync/participants.js +0 -344
  370. package/dist/sync/persistedPrefix.d.ts +0 -12
  371. package/dist/sync/persistedPrefix.js +0 -22
  372. package/dist/sync/schemaDrift.d.ts +0 -55
  373. package/dist/sync/schemaDrift.js +0 -53
  374. package/dist/sync/schemas.d.ts +0 -70
  375. package/dist/sync/schemas.js +0 -94
  376. package/dist/sync/syncCursor.d.ts +0 -40
  377. package/dist/sync/syncCursor.js +0 -55
  378. package/dist/sync/syncPlan.d.ts +0 -54
  379. package/dist/sync/syncPlan.js +0 -50
  380. package/dist/sync/wsFrameHandlers.d.ts +0 -8
  381. package/dist/sync/wsFrameHandlers.js +0 -8
  382. package/dist/testing/fixtures/bootstrap.d.ts +0 -49
  383. package/dist/testing/fixtures/bootstrap.js +0 -59
  384. package/dist/testing/fixtures/deltas.d.ts +0 -83
  385. package/dist/testing/fixtures/deltas.js +0 -136
  386. package/dist/testing/fixtures/httpResponses.d.ts +0 -70
  387. package/dist/testing/fixtures/httpResponses.js +0 -90
  388. package/dist/testing/fixtures/models.d.ts +0 -83
  389. package/dist/testing/fixtures/models.js +0 -272
  390. package/dist/testing/helpers/reactWrapper.d.ts +0 -69
  391. package/dist/testing/helpers/reactWrapper.js +0 -67
  392. package/dist/testing/helpers/syncEngineHarness.d.ts +0 -54
  393. package/dist/testing/helpers/syncEngineHarness.js +0 -73
  394. package/dist/testing/helpers/wait.d.ts +0 -30
  395. package/dist/testing/helpers/wait.js +0 -49
  396. package/dist/testing/index.d.ts +0 -23
  397. package/dist/testing/index.js +0 -33
  398. package/dist/testing/mocks/FakeDatabase.d.ts +0 -18
  399. package/dist/testing/mocks/FakeDatabase.js +0 -10
  400. package/dist/testing/mocks/MockMutationExecutor.d.ts +0 -87
  401. package/dist/testing/mocks/MockMutationExecutor.js +0 -186
  402. package/dist/testing/mocks/MockNetworkMonitor.d.ts +0 -20
  403. package/dist/testing/mocks/MockNetworkMonitor.js +0 -46
  404. package/dist/testing/mocks/MockSyncContext.d.ts +0 -51
  405. package/dist/testing/mocks/MockSyncContext.js +0 -72
  406. package/dist/testing/mocks/MockSyncStore.d.ts +0 -88
  407. package/dist/testing/mocks/MockSyncStore.js +0 -171
  408. package/dist/testing/mocks/MockWebSocket.d.ts +0 -71
  409. package/dist/testing/mocks/MockWebSocket.js +0 -118
  410. package/dist/transaction/ablo.d.ts +0 -88
  411. package/dist/transaction/ablo.js +0 -33
  412. package/dist/transaction/auth/apiKey.d.ts +0 -152
  413. package/dist/transaction/auth/apiKey.js +0 -419
  414. package/dist/transaction/auth/bootstrapScope.d.ts +0 -15
  415. package/dist/transaction/auth/bootstrapScope.js +0 -1
  416. package/dist/transaction/auth/capability.d.ts +0 -177
  417. package/dist/transaction/auth/capability.js +0 -199
  418. package/dist/transaction/auth/credentialEndpoint.d.ts +0 -61
  419. package/dist/transaction/auth/credentialEndpoint.js +0 -86
  420. package/dist/transaction/auth/credentialPolicy.d.ts +0 -148
  421. package/dist/transaction/auth/credentialPolicy.js +0 -125
  422. package/dist/transaction/auth/credentialSource.d.ts +0 -30
  423. package/dist/transaction/auth/credentialSource.js +0 -55
  424. package/dist/transaction/auth/hostedEndpoints.d.ts +0 -21
  425. package/dist/transaction/auth/hostedEndpoints.js +0 -21
  426. package/dist/transaction/auth/identity.d.ts +0 -55
  427. package/dist/transaction/auth/identity.js +0 -210
  428. package/dist/transaction/auth/index.d.ts +0 -162
  429. package/dist/transaction/auth/index.js +0 -304
  430. package/dist/transaction/auth/schemas.d.ts +0 -59
  431. package/dist/transaction/auth/schemas.js +0 -85
  432. package/dist/transaction/auth/sessionMint.d.ts +0 -28
  433. package/dist/transaction/auth/sessionMint.js +0 -85
  434. package/dist/transaction/coordination/awaitClaimGrant.d.ts +0 -49
  435. package/dist/transaction/coordination/awaitClaimGrant.js +0 -112
  436. package/dist/transaction/coordination/claimHeartbeatLoop.d.ts +0 -50
  437. package/dist/transaction/coordination/claimHeartbeatLoop.js +0 -88
  438. package/dist/transaction/coordination/claimMeta.d.ts +0 -49
  439. package/dist/transaction/coordination/claimMeta.js +0 -52
  440. package/dist/transaction/coordination/createClaimStream.d.ts +0 -64
  441. package/dist/transaction/coordination/createClaimStream.js +0 -475
  442. package/dist/transaction/coordination/events.d.ts +0 -74
  443. package/dist/transaction/coordination/events.js +0 -7
  444. package/dist/transaction/coordination/index.d.ts +0 -19
  445. package/dist/transaction/coordination/index.js +0 -44
  446. package/dist/transaction/coordination/locator.d.ts +0 -83
  447. package/dist/transaction/coordination/locator.js +0 -82
  448. package/dist/transaction/coordination/schema.d.ts +0 -1473
  449. package/dist/transaction/coordination/schema.js +0 -1013
  450. package/dist/transaction/coordination/targetConflict.d.ts +0 -2
  451. package/dist/transaction/coordination/targetConflict.js +0 -103
  452. package/dist/transaction/coordination/trace.d.ts +0 -78
  453. package/dist/transaction/coordination/trace.js +0 -138
  454. package/dist/transaction/durableWrites.d.ts +0 -62
  455. package/dist/transaction/durableWrites.js +0 -71
  456. package/dist/transaction/environment.d.ts +0 -105
  457. package/dist/transaction/environment.js +0 -108
  458. package/dist/transaction/errorCodes.d.ts +0 -403
  459. package/dist/transaction/errorCodes.js +0 -480
  460. package/dist/transaction/errors.d.ts +0 -428
  461. package/dist/transaction/errors.js +0 -686
  462. package/dist/transaction/index.d.ts +0 -20
  463. package/dist/transaction/index.js +0 -20
  464. package/dist/transaction/keys/index.d.ts +0 -87
  465. package/dist/transaction/keys/index.js +0 -207
  466. package/dist/transaction/log/syncDeltaRow.d.ts +0 -158
  467. package/dist/transaction/log/syncDeltaRow.js +0 -95
  468. package/dist/transaction/logPosition.d.ts +0 -97
  469. package/dist/transaction/logPosition.js +0 -125
  470. package/dist/transaction/logger.d.ts +0 -16
  471. package/dist/transaction/logger.js +0 -7
  472. package/dist/transaction/observability.d.ts +0 -53
  473. package/dist/transaction/observability.js +0 -19
  474. package/dist/transaction/persistence.d.ts +0 -12
  475. package/dist/transaction/persistence.js +0 -11
  476. package/dist/transaction/plugin.d.ts +0 -192
  477. package/dist/transaction/plugin.js +0 -87
  478. package/dist/transaction/policy/types.d.ts +0 -217
  479. package/dist/transaction/policy/types.js +0 -126
  480. package/dist/transaction/resources/functionalUpdate.d.ts +0 -79
  481. package/dist/transaction/resources/functionalUpdate.js +0 -87
  482. package/dist/transaction/resources/httpResources.d.ts +0 -266
  483. package/dist/transaction/resources/httpResources.js +0 -7
  484. package/dist/transaction/resources/modelOperations.d.ts +0 -319
  485. package/dist/transaction/resources/modelOperations.js +0 -12
  486. package/dist/transaction/resources/mutationOptions.d.ts +0 -66
  487. package/dist/transaction/resources/mutationOptions.js +0 -9
  488. package/dist/transaction/resources/where.d.ts +0 -85
  489. package/dist/transaction/resources/where.js +0 -70
  490. package/dist/transaction/resources/writeOptionsSchema.d.ts +0 -47
  491. package/dist/transaction/resources/writeOptionsSchema.js +0 -73
  492. package/dist/transaction/schema/field.d.ts +0 -126
  493. package/dist/transaction/schema/field.js +0 -265
  494. package/dist/transaction/schema/loadStrategy.d.ts +0 -45
  495. package/dist/transaction/schema/loadStrategy.js +0 -46
  496. package/dist/transaction/schema/model.d.ts +0 -379
  497. package/dist/transaction/schema/model.js +0 -123
  498. package/dist/transaction/schema/openapi.d.ts +0 -57
  499. package/dist/transaction/schema/openapi.js +0 -340
  500. package/dist/transaction/schema/relation.d.ts +0 -199
  501. package/dist/transaction/schema/relation.js +0 -104
  502. package/dist/transaction/schema/residency.d.ts +0 -29
  503. package/dist/transaction/schema/residency.js +0 -25
  504. package/dist/transaction/schema/roles.d.ts +0 -249
  505. package/dist/transaction/schema/roles.js +0 -230
  506. package/dist/transaction/schema/schema.d.ts +0 -324
  507. package/dist/transaction/schema/schema.js +0 -305
  508. package/dist/transaction/schema/tenancy.d.ts +0 -139
  509. package/dist/transaction/schema/tenancy.js +0 -190
  510. package/dist/transaction/transactionLayer.d.ts +0 -82
  511. package/dist/transaction/transactionLayer.js +0 -24
  512. package/dist/transaction/transactions/settlement/commitEnvelope.d.ts +0 -143
  513. package/dist/transaction/transactions/settlement/commitEnvelope.js +0 -161
  514. package/dist/transaction/transactions/settlement/httpCommitEnvelope.d.ts +0 -53
  515. package/dist/transaction/transactions/settlement/httpCommitEnvelope.js +0 -207
  516. package/dist/transaction/transactions/settlement/idempotencyKey.d.ts +0 -10
  517. package/dist/transaction/transactions/settlement/idempotencyKey.js +0 -9
  518. package/dist/transaction/transactions/settlement/pendingWrite.d.ts +0 -112
  519. package/dist/transaction/transactions/settlement/pendingWrite.js +0 -20
  520. package/dist/transaction/transport/commitFrames.d.ts +0 -90
  521. package/dist/transaction/transport/commitFrames.js +0 -134
  522. package/dist/transaction/transport/connectionManager.d.ts +0 -215
  523. package/dist/transaction/transport/connectionManager.js +0 -673
  524. package/dist/transaction/transport/credentialLifecycle.d.ts +0 -177
  525. package/dist/transaction/transport/credentialLifecycle.js +0 -324
  526. package/dist/transaction/transport/heartbeat.d.ts +0 -65
  527. package/dist/transaction/transport/heartbeat.js +0 -93
  528. package/dist/transaction/transport/httpClient.d.ts +0 -123
  529. package/dist/transaction/transport/httpClient.js +0 -145
  530. package/dist/transaction/transport/httpOptions.d.ts +0 -33
  531. package/dist/transaction/transport/httpOptions.js +0 -12
  532. package/dist/transaction/transport/httpTransport.d.ts +0 -8
  533. package/dist/transaction/transport/httpTransport.js +0 -1276
  534. package/dist/transaction/transport/networkProbe.d.ts +0 -84
  535. package/dist/transaction/transport/networkProbe.js +0 -207
  536. package/dist/transaction/transport/wsFrameHandlers.d.ts +0 -128
  537. package/dist/transaction/transport/wsFrameHandlers.js +0 -429
  538. package/dist/transaction/transport/wsTransport.d.ts +0 -576
  539. package/dist/transaction/transport/wsTransport.js +0 -1017
  540. package/dist/transaction/types/assertExact.d.ts +0 -17
  541. package/dist/transaction/types/assertExact.js +0 -1
  542. package/dist/transaction/types/global.d.ts +0 -107
  543. package/dist/transaction/types/global.js +0 -40
  544. package/dist/transaction/types/index.d.ts +0 -205
  545. package/dist/transaction/types/index.js +0 -56
  546. package/dist/transaction/types/modelData.d.ts +0 -10
  547. package/dist/transaction/types/modelData.js +0 -9
  548. package/dist/transaction/types/participant.d.ts +0 -20
  549. package/dist/transaction/types/participant.js +0 -10
  550. package/dist/transaction/types/streams.d.ts +0 -540
  551. package/dist/transaction/types/streams.js +0 -11
  552. package/dist/transaction/utils/asyncIterator.d.ts +0 -34
  553. package/dist/transaction/utils/asyncIterator.js +0 -135
  554. package/dist/transaction/utils/duration.d.ts +0 -25
  555. package/dist/transaction/utils/duration.js +0 -45
  556. package/dist/transaction/utils/json.d.ts +0 -57
  557. package/dist/transaction/utils/json.js +0 -276
  558. package/dist/transaction/wire/accountResponses.d.ts +0 -351
  559. package/dist/transaction/wire/accountResponses.js +0 -255
  560. package/dist/transaction/wire/auth.d.ts +0 -49
  561. package/dist/transaction/wire/auth.js +0 -57
  562. package/dist/transaction/wire/bootstrapReason.d.ts +0 -9
  563. package/dist/transaction/wire/bootstrapReason.js +0 -8
  564. package/dist/transaction/wire/claimEvent.d.ts +0 -76
  565. package/dist/transaction/wire/claimEvent.js +0 -73
  566. package/dist/transaction/wire/claims.d.ts +0 -463
  567. package/dist/transaction/wire/claims.js +0 -229
  568. package/dist/transaction/wire/commit.d.ts +0 -603
  569. package/dist/transaction/wire/commit.js +0 -321
  570. package/dist/transaction/wire/delta.d.ts +0 -250
  571. package/dist/transaction/wire/delta.js +0 -147
  572. package/dist/transaction/wire/errorEnvelope.d.ts +0 -72
  573. package/dist/transaction/wire/errorEnvelope.js +0 -123
  574. package/dist/transaction/wire/feedCursor.d.ts +0 -60
  575. package/dist/transaction/wire/feedCursor.js +0 -82
  576. package/dist/transaction/wire/feedEvent.d.ts +0 -177
  577. package/dist/transaction/wire/feedEvent.js +0 -39
  578. package/dist/transaction/wire/frames.d.ts +0 -194
  579. package/dist/transaction/wire/frames.js +0 -50
  580. package/dist/transaction/wire/inboundFrames.d.ts +0 -552
  581. package/dist/transaction/wire/inboundFrames.js +0 -116
  582. package/dist/transaction/wire/index.d.ts +0 -50
  583. package/dist/transaction/wire/index.js +0 -74
  584. package/dist/transaction/wire/listEnvelope.d.ts +0 -37
  585. package/dist/transaction/wire/listEnvelope.js +0 -42
  586. package/dist/transaction/wire/modelResponses.d.ts +0 -85
  587. package/dist/transaction/wire/modelResponses.js +0 -43
  588. package/dist/transaction/wire/protocol.d.ts +0 -38
  589. package/dist/transaction/wire/protocol.js +0 -38
  590. package/dist/transaction/wire/protocolVersion.d.ts +0 -73
  591. package/dist/transaction/wire/protocolVersion.js +0 -83
  592. package/dist/transactions/mutations/MutationQueue.d.ts +0 -655
  593. package/dist/transactions/mutations/MutationQueue.js +0 -2797
  594. package/dist/transactions/mutations/MutationStore.d.ts +0 -20
  595. package/dist/transactions/mutations/MutationStore.js +0 -53
  596. package/dist/transactions/mutations/UnconfirmedWrites.d.ts +0 -82
  597. package/dist/transactions/mutations/UnconfirmedWrites.js +0 -104
  598. package/dist/transactions/mutations/coalesceRules.d.ts +0 -58
  599. package/dist/transactions/mutations/coalesceRules.js +0 -140
  600. package/dist/transactions/mutations/commitLatency.d.ts +0 -52
  601. package/dist/transactions/mutations/commitLatency.js +0 -130
  602. package/dist/transactions/mutations/commitOutboxStore.d.ts +0 -28
  603. package/dist/transactions/mutations/commitOutboxStore.js +0 -26
  604. package/dist/transactions/mutations/commitPayload.d.ts +0 -164
  605. package/dist/transactions/mutations/commitPayload.js +0 -152
  606. package/dist/transactions/mutations/deltaConfirmation.d.ts +0 -59
  607. package/dist/transactions/mutations/deltaConfirmation.js +0 -233
  608. package/dist/transactions/mutations/durableWriteStore.d.ts +0 -14
  609. package/dist/transactions/mutations/durableWriteStore.js +0 -12
  610. package/dist/transactions/mutations/optimisticApply.d.ts +0 -49
  611. package/dist/transactions/mutations/optimisticApply.js +0 -65
  612. package/dist/transactions/mutations/replayValidation.d.ts +0 -186
  613. package/dist/transactions/mutations/replayValidation.js +0 -163
  614. package/dist/utils/mobxSetup.d.ts +0 -53
  615. package/dist/utils/mobxSetup.js +0 -330
  616. package/dist/webhooks/events.d.ts +0 -43
  617. package/dist/webhooks/events.js +0 -42
  618. package/dist/webhooks/index.d.ts +0 -8
  619. package/dist/webhooks/index.js +0 -8
  620. package/dist/wire/index.d.ts +0 -1
  621. package/dist/wire/index.js +0 -8
  622. package/docs/interaction-model.md +0 -99
@@ -1,76 +0,0 @@
1
- /**
2
- * @abloatai/ablo/schema — Schema Definition DSL
3
- *
4
- * Define your data models with Zod. Types are inferred automatically.
5
- *
6
- * ```ts
7
- * import { z } from 'zod';
8
- * import { defineSchema, model, relation } from '@abloatai/ablo/schema';
9
- *
10
- * export const schema = defineSchema({
11
- * tasks: model({
12
- * title: z.string(),
13
- * status: z.enum(['todo', 'doing', 'done']).default('todo'),
14
- * projectId: z.string().optional(),
15
- * }, {
16
- * project: relation.belongsTo('projects', 'projectId'),
17
- * }),
18
- * });
19
- *
20
- * type Task = Model<typeof schema, 'tasks'>;
21
- * ```
22
- */
23
- // Re-export Zod for convenience (consumers can also import directly)
24
- export { z } from 'zod';
25
- // Field helpers (optional convenience wrappers around Zod)
26
- export { field, indexed, getFieldMeta } from '../transaction/schema/field.js';
27
- // Relation builders
28
- export { relation } from '../transaction/schema/relation.js';
29
- // Tenancy — the single source of truth for how a model's rows are tenant-scoped.
30
- export { tenancySchema, scopedViaRefSchema, policyInputSchema, resolvePolicy, resolveTenancy, tenancyColumn, DEFAULT_ORG_COLUMN, } from '../transaction/schema/tenancy.js';
31
- // Model residency — which database a model's rows live in (`tenant` can be a
32
- // customer's own database, `control` is Ablo's). A sibling axis to `tenancy`.
33
- export { residencySchema, DEFAULT_RESIDENCY, } from '../transaction/schema/residency.js';
34
- // The stored `sync_deltas` row, described as Zod schemas grouped by subsystem and by
35
- // which database the columns live in.
36
- export { syncDeltaCoreSchema, deltaAttributionSchema, syncDeltaRowSchema, participantKindSchema, confirmationStateSchema, backfillProvenanceSchema, DELTA_DATA_CLASSIFICATION, DELTA_PHYSICAL_STORAGE, } from './syncDeltaRow.js';
37
- // The wire delta contract — the server-to-client projection of the stored row.
38
- // Both the client SDK and the server derive their `SyncDelta` type from these with
39
- // `z.infer`, so the two ends cannot drift apart.
40
- export { syncDeltaActionSchema, wireDeltaDataSchema, participantRefSchema, syncDeltaWireCoreSchema, clientSyncDeltaSchema, serverSyncDeltaSchema, } from '../transaction/wire/delta.js';
41
- // Model builder
42
- export { model, scopeKindOf,
43
- // Both meanings: the value a tool enumerates to learn the strategies, and the
44
- // type a `load` option is checked against. `loadsAtBootstrap` is the one
45
- // predicate both the client subscription and the server payload ask.
46
- LoadStrategy, DEFAULT_LOAD_STRATEGY, loadsAtBootstrap, } from '../transaction/schema/model.js';
47
- // Coordination authoring helpers for the `conflict` axis — composable disposition
48
- // functions plus a combinator that merges them.
49
- export { coordination, humansOverwrite, humansReject, humansNotify, agentsOverwrite, agentsReject, agentsNotify, systemOverwrite, systemReject, systemNotify, } from './coordination.js';
50
- // Claim-first shorthand for common model options: `mutable.lazy({...})` and friends
51
- // encode a model's write-safety and load strategy in the verb, and fall back to
52
- // sensible defaults for everything else.
53
- export { mutable, readOnly } from './sugar.js';
54
- // Schema definition + type inference
55
- export { defineSchema, composeIdentitySyncGroups, composeEntitySyncGroups, intersectRequestedWithAllowed, identityRole, entityRole, extractIdentityIds, extractEntityIds, syncGroup, syncGroupSchema, syncGroupInputSchema, isSyncGroupInput, identityRoleSchema, entityRoleSchema, roleSchema, roleSourceSchema, scopeSchema, grantsRefSchema, groupsInputSchema, RESERVED_SESSION_SETTINGS, } from '../transaction/schema/schema.js';
56
- // Schema ⇄ JSON — serialize a schema for transport and rebuild it on the far side.
57
- export { serializeSchema, parseSchema, toSchemaJSON, fromSchemaJSON, schemaHash, modelHash, } from './serialize.js';
58
- // Schema projection — derive an app's subset from one canonical schema.
59
- export { selectModels, omitModels } from './select.js';
60
- // Schema → Postgres DDL — shared by the host implementation and the command-line tools.
61
- export { generateProvisionPlan, generateMigrationPlan, appSchemaName, camelToSnake, snakeToCamel, q, sqlType, } from './ddl.js';
62
- // Safe-DDL locking knobs (lock_timeout plus a bounded retry on lock contention),
63
- // shared by `ablo migrate` and the host that applies a schema push, so tuning the
64
- // ABLO_SCHEMA_LOCK_* variables changes both paths the same way.
65
- export { PG_LOCK_NOT_AVAILABLE, resolveDdlLockTimeout, resolveDdlMaxLockAttempts, ddlLockRetryBackoffMs, } from './ddlLock.js';
66
- // Schema diff + migration planning — produces the plan the DDL layer turns into SQL.
67
- export { diffSchema, classifyMigration, classifyCast, isAutoApplicable, isBlockerResolved, unresolvedBlockers, } from './diff.js';
68
- // Schema → TypeScript type emission.
69
- export { generateTypes } from './generate.js';
70
- // Query definition DSL + type inference
71
- export { query, defineQueries, } from './queries.js';
72
- // The OpenAPI generator describes the language-agnostic `/v1` surface — the
73
- // primitive itself, which a Python or Go caller consumes with no TypeScript
74
- // anywhere — so it lives in the settlement core (ADR 0016). Re-exported here so
75
- // the `@abloatai/ablo/schema` import path keeps resolving.
76
- export { abloOpenApi, schemaToOpenApi } from '../transaction/schema/openapi.js';
@@ -1,201 +0,0 @@
1
- /**
2
- * Query definitions for a schema.
3
- *
4
- * A query pairs a Zod input schema with the name of the model it returns.
5
- * Input types flow through `z.infer` and result types through `InferModel`,
6
- * the same inference path `model` and `relation` use, so there is no separate
7
- * type system to learn.
8
- *
9
- * Usage:
10
- * import { z } from 'zod';
11
- * import {
12
- * defineSchema, defineQueries, model, query, relation,
13
- * } from '@abloatai/ablo/schema';
14
- *
15
- * const schema = defineSchema({
16
- * block: model(
17
- * { sectionId: z.string(), type: z.string() },
18
- * { section: relation.belongsTo('sections', 'sectionId') },
19
- * { load: 'lazy', typename: 'Block', persist: {} },
20
- * ),
21
- * });
22
- *
23
- * const queries = defineQueries(schema, {
24
- * blocksByReport: query({
25
- * input: z.object({ reportId: z.string() }),
26
- * returns: 'block', // ← type-checked against schema.models
27
- * }),
28
- * });
29
- *
30
- * type Input = InferQueryInput<typeof queries.queries.blocksByReport>;
31
- * // ^? { reportId: string }
32
- * type Result = InferQueryResult<
33
- * typeof schema,
34
- * typeof queries.queries.blocksByReport
35
- * >;
36
- * // ^? Array<Block>
37
- *
38
- * Design notes:
39
- *
40
- * - `query()` accepts any string for `returns`. The check that the string
41
- * names a real model runs when the query passes through
42
- * `defineQueries(schema, ...)`, the same way
43
- * `relation.belongsTo('projects', 'projectId')` takes a plain string at
44
- * the factory and defers the cross-reference check to schema assembly.
45
- *
46
- * - A query carries no `name` until `defineQueries()` assigns one from its
47
- * record key — the same pattern `defineSchema({ tasks: model(...) })`
48
- * uses, where the model's name is the record key rather than a field on
49
- * the factory.
50
- *
51
- * - Every query returns an array of a single model type. To fetch several
52
- * model types at once, run several queries in one batch rather than
53
- * declaring a combined shape. Each `QueryDef` therefore points at exactly
54
- * one model, and the loader hydrates results through a single
55
- * `schema.models[queryDef.returns]` lookup.
56
- */
57
- import { z } from 'zod';
58
- import type { Schema, InferModel, InferModelNames } from '../transaction/schema/schema.js';
59
- /**
60
- * A single query definition: a zod input shape, the schema key of the
61
- * model it returns, and (after assembly) the name it was registered
62
- * under.
63
- *
64
- * `name` is filled in by `defineQueries()` from the record key. It is
65
- * optional on the type so `query()` can return a value without one —
66
- * downstream code should only read `name` after the query has been
67
- * passed through `defineQueries()`.
68
- */
69
- export interface QueryDef<TInput extends z.ZodType = z.ZodType, TReturns extends string = string> {
70
- /** Zod schema for the query's input arguments. */
71
- readonly input: TInput;
72
- /**
73
- * The schema key of the model this query returns. Narrowed by
74
- * `defineQueries()` to `InferModelNames<S>` via the `Q` generic, so
75
- * a query whose `returns` does not match a known model fails at
76
- * compile time.
77
- */
78
- readonly returns: TReturns;
79
- /**
80
- * The name under which the query is registered. {@link defineQueries}
81
- * fills this in from the record key; you do not set it directly. It lives
82
- * on the definition itself so dispatch and lookup code can read the name
83
- * straight off a {@link QueryDef} without carrying the surrounding
84
- * {@link Queries} object.
85
- */
86
- readonly name?: string;
87
- }
88
- /**
89
- * The raw spec accepted by `query()`. Internal type — consumers never
90
- * reference this directly, they call `query({ input, returns })`.
91
- */
92
- interface QuerySpec<TInput extends z.ZodType, TReturns extends string> {
93
- readonly input: TInput;
94
- readonly returns: TReturns;
95
- }
96
- /**
97
- * Define a query.
98
- *
99
- * `TReturns` is a `const` generic so TypeScript preserves the literal
100
- * type of the `returns` value at call time (e.g., `'block'`
101
- * instead of widening to `string`). This is what lets `defineQueries`
102
- * type-check `returns` against the schema's model keys without
103
- * requiring the consumer to write `as const` manually.
104
- *
105
- * ```ts
106
- * const blocksByReport = query({
107
- * input: z.object({ reportId: z.string() }),
108
- * returns: 'block',
109
- * });
110
- * ```
111
- */
112
- export declare function query<TInput extends z.ZodType, const TReturns extends string>(spec: QuerySpec<TInput, TReturns>): QueryDef<TInput, TReturns>;
113
- /**
114
- * A record of query names → query definitions, parameterized by a
115
- * schema so each query's `returns` must reference a known model.
116
- *
117
- * This is the constraint type used by `defineQueries()` — it's what
118
- * turns "any string" into "a model in this schema" without touching
119
- * the `query()` factory itself.
120
- */
121
- export type QueryRecord<S extends Schema> = Record<string, QueryDef<z.ZodType, InferModelNames<S>>>;
122
- /**
123
- * The object returned by `defineQueries()`. Holds a reference back to
124
- * the schema (so the loader can resolve `queryDef.returns` to
125
- * a `ModelDef` at runtime via `schema.models[def.returns]`) and the
126
- * resolved record of queries, each with its `name` field filled in.
127
- */
128
- export interface Queries<S extends Schema, Q extends QueryRecord<S>> {
129
- readonly schema: S;
130
- readonly queries: Q;
131
- }
132
- /**
133
- * Infer the input type of a query from its zod schema.
134
- *
135
- * ```ts
136
- * type Input = InferQueryInput<typeof queries.queries.blocksByReport>;
137
- * // { reportId: string }
138
- * ```
139
- */
140
- export type InferQueryInput<Q extends QueryDef> = z.infer<Q['input']>;
141
- /**
142
- * Infer the result type of a query by looking up its `returns` model
143
- * in the schema.
144
- *
145
- * Returns `Array<InferModel<S, returns>>` — all queries return a
146
- * collection at this layer. Single-entity fetches use
147
- * `ids: [singleId]` and the caller picks `result[0]`; this avoids a
148
- * second `scope: 'single'` shape in the DSL for a case that can be
149
- * expressed with the collection form.
150
- *
151
- * ```ts
152
- * type Result = InferQueryResult<
153
- * typeof schema,
154
- * typeof queries.queries.blocksByReport
155
- * >;
156
- * // Array<Block>
157
- * ```
158
- */
159
- export type InferQueryResult<S extends Schema, Q extends QueryDef> = Q extends QueryDef<z.ZodType, infer R> ? R extends InferModelNames<S> ? InferModel<S, R>[] : never : never;
160
- /**
161
- * Define a typed query set against a schema.
162
- *
163
- * Each entry's `returns` field is constrained to the schema's model
164
- * names at compile time via the `Q` generic bound to `QueryRecord<S>`.
165
- * A query whose `returns` does not match a known model will fail at
166
- * the `defineQueries` call site with a TypeScript error, not at
167
- * runtime.
168
- *
169
- * The factory also performs a runtime validation of the same
170
- * invariant. This catches the edge case where the schema and the
171
- * queries live in separate modules that drift out of sync — for
172
- * example, when a developer removes a model from the schema without
173
- * updating the queries that referenced it. The runtime error points
174
- * at the specific offending query and lists the available models,
175
- * which is a nicer failure mode than a generic "property does not
176
- * exist" error deep inside the loader.
177
- *
178
- * Each resolved query gets its `name` populated from the record key:
179
- * `queries.blocksByReport.name === 'blocksByReport'`. Dispatch and
180
- * lookup code read `queryDef.name` directly rather than re-deriving it from
181
- * the surrounding record.
182
- *
183
- * ```ts
184
- * const schema = defineSchema({
185
- * block: model(
186
- * { sectionId: z.string() },
187
- * {},
188
- * { load: 'lazy', typename: 'Block', persist: {} },
189
- * ),
190
- * });
191
- *
192
- * const queries = defineQueries(schema, {
193
- * blocksByReport: query({
194
- * input: z.object({ reportId: z.string() }),
195
- * returns: 'block', // ← type-checked
196
- * }),
197
- * });
198
- * ```
199
- */
200
- export declare function defineQueries<S extends Schema, const Q extends QueryRecord<S>>(schema: S, queries: Q): Queries<S, Q>;
201
- export {};
@@ -1,144 +0,0 @@
1
- /**
2
- * Query definitions for a schema.
3
- *
4
- * A query pairs a Zod input schema with the name of the model it returns.
5
- * Input types flow through `z.infer` and result types through `InferModel`,
6
- * the same inference path `model` and `relation` use, so there is no separate
7
- * type system to learn.
8
- *
9
- * Usage:
10
- * import { z } from 'zod';
11
- * import {
12
- * defineSchema, defineQueries, model, query, relation,
13
- * } from '@abloatai/ablo/schema';
14
- *
15
- * const schema = defineSchema({
16
- * block: model(
17
- * { sectionId: z.string(), type: z.string() },
18
- * { section: relation.belongsTo('sections', 'sectionId') },
19
- * { load: 'lazy', typename: 'Block', persist: {} },
20
- * ),
21
- * });
22
- *
23
- * const queries = defineQueries(schema, {
24
- * blocksByReport: query({
25
- * input: z.object({ reportId: z.string() }),
26
- * returns: 'block', // ← type-checked against schema.models
27
- * }),
28
- * });
29
- *
30
- * type Input = InferQueryInput<typeof queries.queries.blocksByReport>;
31
- * // ^? { reportId: string }
32
- * type Result = InferQueryResult<
33
- * typeof schema,
34
- * typeof queries.queries.blocksByReport
35
- * >;
36
- * // ^? Array<Block>
37
- *
38
- * Design notes:
39
- *
40
- * - `query()` accepts any string for `returns`. The check that the string
41
- * names a real model runs when the query passes through
42
- * `defineQueries(schema, ...)`, the same way
43
- * `relation.belongsTo('projects', 'projectId')` takes a plain string at
44
- * the factory and defers the cross-reference check to schema assembly.
45
- *
46
- * - A query carries no `name` until `defineQueries()` assigns one from its
47
- * record key — the same pattern `defineSchema({ tasks: model(...) })`
48
- * uses, where the model's name is the record key rather than a field on
49
- * the factory.
50
- *
51
- * - Every query returns an array of a single model type. To fetch several
52
- * model types at once, run several queries in one batch rather than
53
- * declaring a combined shape. Each `QueryDef` therefore points at exactly
54
- * one model, and the loader hydrates results through a single
55
- * `schema.models[queryDef.returns]` lookup.
56
- */
57
- import { z } from 'zod';
58
- import { AbloValidationError } from '../transaction/errors.js';
59
- // ── query() factory ───────────────────────────────────────────────────────
60
- /**
61
- * Define a query.
62
- *
63
- * `TReturns` is a `const` generic so TypeScript preserves the literal
64
- * type of the `returns` value at call time (e.g., `'block'`
65
- * instead of widening to `string`). This is what lets `defineQueries`
66
- * type-check `returns` against the schema's model keys without
67
- * requiring the consumer to write `as const` manually.
68
- *
69
- * ```ts
70
- * const blocksByReport = query({
71
- * input: z.object({ reportId: z.string() }),
72
- * returns: 'block',
73
- * });
74
- * ```
75
- */
76
- export function query(spec) {
77
- return {
78
- input: spec.input,
79
- returns: spec.returns,
80
- };
81
- }
82
- // ── defineQueries() factory ───────────────────────────────────────────────
83
- /**
84
- * Define a typed query set against a schema.
85
- *
86
- * Each entry's `returns` field is constrained to the schema's model
87
- * names at compile time via the `Q` generic bound to `QueryRecord<S>`.
88
- * A query whose `returns` does not match a known model will fail at
89
- * the `defineQueries` call site with a TypeScript error, not at
90
- * runtime.
91
- *
92
- * The factory also performs a runtime validation of the same
93
- * invariant. This catches the edge case where the schema and the
94
- * queries live in separate modules that drift out of sync — for
95
- * example, when a developer removes a model from the schema without
96
- * updating the queries that referenced it. The runtime error points
97
- * at the specific offending query and lists the available models,
98
- * which is a nicer failure mode than a generic "property does not
99
- * exist" error deep inside the loader.
100
- *
101
- * Each resolved query gets its `name` populated from the record key:
102
- * `queries.blocksByReport.name === 'blocksByReport'`. Dispatch and
103
- * lookup code read `queryDef.name` directly rather than re-deriving it from
104
- * the surrounding record.
105
- *
106
- * ```ts
107
- * const schema = defineSchema({
108
- * block: model(
109
- * { sectionId: z.string() },
110
- * {},
111
- * { load: 'lazy', typename: 'Block', persist: {} },
112
- * ),
113
- * });
114
- *
115
- * const queries = defineQueries(schema, {
116
- * blocksByReport: query({
117
- * input: z.object({ reportId: z.string() }),
118
- * returns: 'block', // ← type-checked
119
- * }),
120
- * });
121
- * ```
122
- */
123
- export function defineQueries(schema, queries) {
124
- // Rebuild the queries record with `name` populated per entry. Same
125
- // shallow-spread strategy `defineSchema` uses for `typename` / `persist`
126
- // defaults — preserves input references, avoids mutating `readonly`
127
- // fields in place, and keeps each resolved `QueryDef` immutable from
128
- // construction onward.
129
- const resolvedQueries = {};
130
- for (const [name, def] of Object.entries(queries)) {
131
- if (!(def.returns in schema.models)) {
132
- throw new AbloValidationError(`defineQueries: query "${name}" declares returns: "${def.returns}", ` +
133
- `which is not a model in the schema. ` +
134
- `Available models: ${Object.keys(schema.models).join(', ') || '(none)'}`, { code: 'query_returns_unknown_model' });
135
- }
136
- resolvedQueries[name] = { ...def, name };
137
- }
138
- return {
139
- schema,
140
- // Cast back to Q: the rebuild only added `name` (already optional on
141
- // QueryDef) to each entry, so the shape is structurally unchanged.
142
- queries: resolvedQueries,
143
- };
144
- }
@@ -1,40 +0,0 @@
1
- /**
2
- * `selectModels` projects a schema down to a subset of its models.
3
- *
4
- * It lets one canonical schema serve several apps, each subscribing only to the
5
- * models it needs. Rather than re-declare a model's fields in a second schema —
6
- * which you would then have to keep identical by hand — an app selects the
7
- * models it wants from the canonical schema. Field shapes, resolved foreign-key
8
- * columns, computed getters, typenames, and identity roles all come from the
9
- * source, so a subset cannot drift from the canonical definition.
10
- *
11
- * ```ts
12
- * import { schema as full } from './schema';
13
- * import { selectModels } from '@abloatai/ablo/schema';
14
- *
15
- * // Subscribe to identity and document content only.
16
- * export const schema = selectModels(full, ['users', 'organizations', 'workspaces', 'folders', 'files']);
17
- * ```
18
- *
19
- * Relations whose target falls outside the selected set are dropped, so the
20
- * subset sees only its own models. Dropping a relation that carries `parent`
21
- * scope-inheritance throws instead, because silently losing it would mis-route
22
- * a record's fan-out — the selected set must be closed under `parent` edges.
23
- */
24
- import type { Schema, SchemaRecord } from '../transaction/schema/schema.js';
25
- export declare function selectModels<S extends SchemaRecord, K extends keyof S & string>(schema: Schema<S>, keys: readonly K[]): Schema<Pick<S, K>>;
26
- /**
27
- * `omitModels` is `selectModels` from the other side: keep every model EXCEPT
28
- * the named ones. Use it when an app is the general case and a separate app
29
- * owns the omitted models — the suite shell drops a specialized store that the
30
- * standalone app selects for itself:
31
- *
32
- * ```ts
33
- * export const schema = omitModels(full, ['reports', 'reportSections']);
34
- * ```
35
- *
36
- * Same validation as `selectModels`: relations into the omitted set are
37
- * dropped, and a dropped `parent` edge throws — so a model whose scope routes
38
- * through an omitted parent cannot be silently kept.
39
- */
40
- export declare function omitModels<S extends SchemaRecord, K extends keyof S & string>(schema: Schema<S>, keys: readonly K[]): Schema<Omit<S, K>>;
@@ -1,87 +0,0 @@
1
- /**
2
- * `selectModels` projects a schema down to a subset of its models.
3
- *
4
- * It lets one canonical schema serve several apps, each subscribing only to the
5
- * models it needs. Rather than re-declare a model's fields in a second schema —
6
- * which you would then have to keep identical by hand — an app selects the
7
- * models it wants from the canonical schema. Field shapes, resolved foreign-key
8
- * columns, computed getters, typenames, and identity roles all come from the
9
- * source, so a subset cannot drift from the canonical definition.
10
- *
11
- * ```ts
12
- * import { schema as full } from './schema';
13
- * import { selectModels } from '@abloatai/ablo/schema';
14
- *
15
- * // Subscribe to identity and document content only.
16
- * export const schema = selectModels(full, ['users', 'organizations', 'workspaces', 'folders', 'files']);
17
- * ```
18
- *
19
- * Relations whose target falls outside the selected set are dropped, so the
20
- * subset sees only its own models. Dropping a relation that carries `parent`
21
- * scope-inheritance throws instead, because silently losing it would mis-route
22
- * a record's fan-out — the selected set must be closed under `parent` edges.
23
- */
24
- import { AbloValidationError } from '../transaction/errors.js';
25
- import { schemaHash } from './serialize.js';
26
- export function selectModels(schema, keys) {
27
- const keep = new Set(keys);
28
- const models = {};
29
- const validators = {};
30
- for (const key of keys) {
31
- const def = schema.models[key];
32
- if (!def) {
33
- throw new AbloValidationError(`selectModels: "${key}" is not a model in the source schema`, { code: 'invalid_schema', param: key });
34
- }
35
- // Prune relations whose target isn't in the selected set. A pruned
36
- // `parent` edge is a routing error, not a silent drop.
37
- const relations = {};
38
- for (const [relName, rel] of Object.entries(def.relations)) {
39
- if (keep.has(rel.target)) {
40
- relations[relName] = rel;
41
- continue;
42
- }
43
- if (rel.options?.parent) {
44
- throw new AbloValidationError(`selectModels: model "${key}" has a parent relation "${relName}" → "${rel.target}", ` +
45
- `which is not in the selected set. Include "${rel.target}" so scope inheritance still routes.`, { code: 'invalid_schema', param: `${key}.${relName}` });
46
- }
47
- }
48
- models[key] = { ...def, relations };
49
- validators[key] = schema.validators[key];
50
- }
51
- return {
52
- models: models,
53
- validators: validators,
54
- identityRoles: schema.identityRoles,
55
- sessionSettings: schema.sessionSettings,
56
- // Record the full source's hash so the drift check can recognize this subset
57
- // as current against a server running that full schema. Prefer the source's
58
- // OWN `sourceSchemaHash` when it is itself a projection, so a subset-of-a-
59
- // subset still points at the original full schema rather than an intermediate
60
- // one. `schemaHash` ignores this field, so re-projecting stays deterministic.
61
- sourceSchemaHash: schema.sourceSchemaHash ?? schemaHash(schema),
62
- };
63
- }
64
- /**
65
- * `omitModels` is `selectModels` from the other side: keep every model EXCEPT
66
- * the named ones. Use it when an app is the general case and a separate app
67
- * owns the omitted models — the suite shell drops a specialized store that the
68
- * standalone app selects for itself:
69
- *
70
- * ```ts
71
- * export const schema = omitModels(full, ['reports', 'reportSections']);
72
- * ```
73
- *
74
- * Same validation as `selectModels`: relations into the omitted set are
75
- * dropped, and a dropped `parent` edge throws — so a model whose scope routes
76
- * through an omitted parent cannot be silently kept.
77
- */
78
- export function omitModels(schema, keys) {
79
- const drop = new Set(keys);
80
- for (const key of keys) {
81
- if (!schema.models[key]) {
82
- throw new AbloValidationError(`omitModels: "${key}" is not a model in the source schema`, { code: 'invalid_schema', param: key });
83
- }
84
- }
85
- const kept = Object.keys(schema.models).filter((k) => !drop.has(k));
86
- return selectModels(schema, kept);
87
- }
@@ -1,115 +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 type { FieldMeta } from '../transaction/schema/field.js';
30
- import type { Tenancy } from '../transaction/schema/tenancy.js';
31
- import type { ModelResidency } from '../transaction/schema/residency.js';
32
- import type { GrantsRef, LoadStrategy, PersistOptions, AutoFillRule, ConflictAxis } from '../transaction/schema/model.js';
33
- import type { RelationType } from '../transaction/schema/relation.js';
34
- import { type Schema, type IdentityRole, type EntityRole, type SessionSettings } from '../transaction/schema/schema.js';
35
- /** Current schema-JSON envelope version. Bump this on a breaking change to the
36
- * JSON shape itself — not to a user's schema. */
37
- declare const SCHEMA_JSON_VERSION: 3;
38
- /** A relation in JSON form. Mirrors the serializable members of {@link RelationDef}. */
39
- export interface RelationJSON {
40
- readonly type: RelationType;
41
- readonly target: string;
42
- readonly foreignKey: string;
43
- readonly foreignKeyColumn: string;
44
- readonly options?: Record<string, boolean>;
45
- readonly orderBy?: string;
46
- }
47
- /** A model in JSON form. Everything on {@link ModelDef} except closures. */
48
- export interface ModelJSON {
49
- readonly fields: Record<string, FieldMeta>;
50
- readonly relations: Record<string, RelationJSON>;
51
- readonly load: LoadStrategy;
52
- readonly typename: string;
53
- readonly tableName?: string;
54
- readonly tenancy: Tenancy;
55
- /** The database plane the model's rows live in. Optional for backward
56
- * compatibility: when absent (an artifact written before this field existed)
57
- * it reads as `tenant`, the default. See {@link ModelResidency}. */
58
- readonly plane?: ModelResidency;
59
- readonly scope?: boolean | string;
60
- readonly grants?: GrantsRef;
61
- readonly entityRoles?: readonly EntityRole[];
62
- /** The declared write-conflict disposition per committer kind. When absent,
63
- * the engine falls back to its default. */
64
- readonly conflict?: ConflictAxis;
65
- readonly bootstrapLimit?: number;
66
- readonly bootstrapOrderBy?: string;
67
- readonly mutable?: boolean;
68
- readonly lazyObservable?: boolean;
69
- readonly persist?: PersistOptions;
70
- readonly autoFill?: readonly AutoFillRule[];
71
- readonly requiredFields?: readonly string[];
72
- }
73
- /** The JSON form of a {@link Schema}. The `ablo push` payload. */
74
- export interface SchemaJSON {
75
- readonly v: typeof SCHEMA_JSON_VERSION;
76
- readonly models: Record<string, ModelJSON>;
77
- readonly identityRoles: readonly IdentityRole[];
78
- /** Optional so schemas pushed before ADR 0011 still parse (defaults to `{}`). */
79
- readonly sessionSettings?: SessionSettings;
80
- }
81
- /**
82
- * Project a `Schema` to its JSON form. Drops the client-only closures
83
- * (validators, `computed`); keeps everything the server and a faithful
84
- * rebuild need. The result is plain data — `JSON.stringify`-safe.
85
- */
86
- export declare function toSchemaJSON(schema: Schema): SchemaJSON;
87
- /** Serialize a `Schema` to a JSON string (the `ablo push` payload). */
88
- export declare function serializeSchema(schema: Schema): string;
89
- /**
90
- * Reconstruct a working `Schema` from its JSON form. Validators are rebuilt
91
- * permissively from field metadata (the server never validates field shapes);
92
- * `computed` getters are absent. Everything the server reads — routing,
93
- * scoping, relations, identity roles — is restored exactly.
94
- */
95
- export declare function fromSchemaJSON(json: SchemaJSON): Schema;
96
- /** Parse a `Schema` from a JSON string (inverse of {@link serializeSchema}). */
97
- export declare function parseSchema(json: string): Schema;
98
- /**
99
- * Stable content hash of a `Schema`'s JSON form. FNV-1a over a canonical
100
- * (sorted-key) encoding — deterministic across runs and order-invariant, no
101
- * `crypto` dependency. Used for connect-time version gating: the client sends
102
- * the hash it was built against, the server compares it to the tenant's
103
- * active schema hash. Not a security primitive.
104
- */
105
- export declare function schemaHash(schema: Schema): string;
106
- /**
107
- * Content hash of ONE serialized model — the unit of the semantic drift check.
108
- * Two schemas agree on a model exactly when these match, which is what lets a
109
- * client compare only the models it declares instead of welding itself to the
110
- * whole-schema hash (where any additive push reads as drift). Computed over the
111
- * model's `SchemaJSON` entry with the same canonicalization and hash as
112
- * {@link schemaHash}, on both the client and the server's `GET /api/schema`.
113
- */
114
- export declare function modelHash(modelJson: unknown): string;
115
- export {};