@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,107 +0,0 @@
1
- /**
2
- * The commit contract types for the sync engine's server surface.
3
- *
4
- * {@link CommitContext} is the attribution envelope stamped onto every delta a
5
- * commit produces; {@link CommitResult} is the receipt returned when the commit
6
- * finishes. Both are plain data descriptors — no database driver, no SQL, no
7
- * functions — so they belong to this package's public contract, which your commit
8
- * implementation reads and writes. They feed the `ChangeSet` and `DataAdapter`
9
- * contracts defined alongside them.
10
- *
11
- * The attribution fields reuse the shared {@link ParticipantKind},
12
- * {@link ConfirmationState}, and {@link ParticipantRef} types, so the shape at
13
- * commit time and the shape of a stored or broadcast delta share one definition
14
- * rather than being kept in step by hand.
15
- */
16
- import type { ParticipantKind, ConfirmationState } from '../schema/syncDeltaRow.js';
17
- import type { ParticipantRef } from '../transaction/wire/delta.js';
18
- import type { CommitExecutionResultInput } from '../transaction/wire/commit.js';
19
- import type { Environment } from '../transaction/environment.js';
20
- import type { ReadDependency, TrackDependency } from '../transaction/coordination/schema.js';
21
- export interface CommitContext {
22
- participantId: string;
23
- /**
24
- * The kind of participant making the commit. Required, so that every delta carries
25
- * structured attribution rather than a string-prefix convention.
26
- */
27
- participantKind: ParticipantKind;
28
- organizationId: string;
29
- /**
30
- * Project scope used to route source-mode storage. When omitted, the commit
31
- * targets the organization's default project.
32
- */
33
- projectId?: string;
34
- /** Exact sandbox plane derived from the authenticated key, when present. */
35
- sandboxId?: string;
36
- /** Optional external account scope forwarded to storage resolvers. */
37
- accountScope?: string;
38
- /**
39
- * The environment this commit runs in. Source-mode adapters forward it to the
40
- * customer's handlers so that sandbox and production traffic can reach distinct
41
- * customer-owned stores.
42
- */
43
- environment?: Environment;
44
- /**
45
- * The sync groups this participant subscribes to, taken from the connection
46
- * upgrade or the capability token. Each is appended to every delta's `sync_groups`
47
- * so that writes fan out to subscribers of entity-level groups (such as
48
- * `report:abc`), not only the default `org:X` and `user:Y` groups. When omitted, the
49
- * commit fans out to just the organization and user groups.
50
- */
51
- syncGroups?: readonly string[];
52
- /**
53
- * When true, the commit does not add `org:<organizationId>` to a delta's sync
54
- * groups. Set this for sandbox writes, so that live organization subscribers do
55
- * not receive test-environment changes.
56
- */
57
- omitOrgSyncGroup?: boolean;
58
- /**
59
- * The participant on whose authority the actor acted. For a direct human commit
60
- * this equals the actor; for an agent commit it is the human at the root of the
61
- * capability's delegation chain. Null for `system` principals.
62
- */
63
- onBehalfOf?: ParticipantRef | null;
64
- /**
65
- * The id of the scoped credential that authorized the commit. Non-null for agent
66
- * and system commits when that credential is known; null for direct human commits.
67
- */
68
- capabilityId?: string | null;
69
- /**
70
- * The id of the human user at the root of the delegated-authority chain. Stored
71
- * directly on `sync_deltas` so that audit triggers appending the hash chain never
72
- * need to join mutable credential tables.
73
- */
74
- delegationChainRootUserId?: string | null;
75
- /**
76
- * The id of the API key row when the caller authenticated with an API key. Used by
77
- * the idempotency cache and for usage attribution. Null for session and capability
78
- * callers.
79
- */
80
- apiKeyId?: string | null;
81
- /**
82
- * Whether a human explicitly approved the change. Defaults to `auto` when the
83
- * caller does not specify an approval state.
84
- */
85
- confirmationState?: ConfirmationState;
86
- /**
87
- * The premise for the whole batch. The committer declares the rows or groups
88
- * it read to form this batch; the engine checks that none of them changed since
89
- * each entry's `readAt` timestamp and applies that entry's `onStale` disposition
90
- * across the batch. This differs from the per-operation `readAt` guard, which
91
- * validates only the rows being written. Omit it to check the write targets alone.
92
- */
93
- reads?: ReadDependency[] | null;
94
- /**
95
- * Durable premises to persist for this commit's participant. Each entry is
96
- * kept in `track_dependencies` and re-checked against every future delta; a
97
- * later match opens a `StaleNotification` delivered out of band. Distinct
98
- * from `reads`, which is checked once here and discarded.
99
- */
100
- track?: TrackDependency[] | null;
101
- }
102
- /**
103
- * The server execution receipt persisted in `mutation_log`. Its runtime schema
104
- * lives with the HTTP/WS settlement contract so queued correlation cannot drift
105
- * between cache, transport, and client.
106
- */
107
- export type CommitResult = CommitExecutionResultInput;
@@ -1 +0,0 @@
1
- export {};
@@ -1,14 +0,0 @@
1
- /**
2
- * The server-side entry point of the sync engine. It re-exports the contract types
3
- * you implement a storage backend against: the {@link DataAdapter} and its
4
- * vocabulary ({@link Row}, {@link ReadRequest}, {@link ChangeSet}, and the rest),
5
- * the {@link CommitContext} and {@link CommitResult} commit types, the
6
- * {@link StorageMode} enumeration, and the per-model read configuration
7
- * ({@link BootstrapModel}, {@link ColumnOverride}). These are plain, driver-free
8
- * types; you supply the database code that fulfills them.
9
- */
10
- export type { Row, ReadResult, SyncCursor, DataAdapterCapabilities, ProposalResult, ReadRequest, ChangeSet, SyncResult, DataAdapter, ProposableDataAdapter, AdapterResolver, } from './adapter.js';
11
- export type { CommitContext, CommitResult } from './commit.js';
12
- export { commitExecutionResultSchema } from '../transaction/wire/commit.js';
13
- export { storageModeSchema, type StorageMode } from './storageMode.js';
14
- export type { ColumnOverride, BootstrapModel } from './readConfig.js';
@@ -1,2 +0,0 @@
1
- export { commitExecutionResultSchema } from '../transaction/wire/commit.js';
2
- export { storageModeSchema } from './storageMode.js';
@@ -1,80 +0,0 @@
1
- /**
2
- * Per-model read configuration consumed when a client bootstraps. Each
3
- * {@link BootstrapModel} maps a model to its physical table, its tenancy column, and
4
- * any parent scoping — plain data with no database driver. It feeds the read side of
5
- * the data adapter contract; your query builder reads it to load a model's initial
6
- * rows.
7
- */
8
- /** A mapping from a declared field to a physical column, with the alias to apply after a `SELECT *`. */
9
- export interface ColumnOverride {
10
- readonly field: string;
11
- readonly column: string;
12
- readonly alias: string;
13
- }
14
- /** Read configuration for one model: how to locate its rows and scope them to a tenant. */
15
- export interface BootstrapModel {
16
- name: string;
17
- /**
18
- * Extra names accepted when a request looks up or filters this model. When the
19
- * physical table name is canonical, `name` stays that table name and the aliases
20
- * cover generated compatibility names such as `WeatherReports` or `weatherReports`.
21
- */
22
- aliases?: readonly string[];
23
- /**
24
- * The schema key used by source endpoints. `name` stays the wire and result model
25
- * name (usually the typename), while source handlers are keyed by the developer's
26
- * schema key, such as `files` or `blocks`.
27
- */
28
- sourceModel?: string;
29
- table: string;
30
- syncGroups?: string[];
31
- enabled?: boolean;
32
- /** Max rows to return. Omit for unlimited. Maps to schema's bootstrapLimit. */
33
- limit?: number;
34
- /** SQL ORDER BY clause. Default: 'id'. Maps to schema's bootstrapOrderBy. */
35
- orderBy?: string;
36
- /** Whether the table has organization_id. Default: true. */
37
- orgScoped?: boolean;
38
- /**
39
- * The model derives its tenant from the connected data source (`policy:
40
- * { by: 'source' }`) rather than a row column. It carries no tenant predicate on a
41
- * log plane, so it is excluded from the bootstrap set entirely until the
42
- * write-through connect path can resolve the org from the source registration —
43
- * serving it now would return every row to every tenant. Kept on the type as a
44
- * defense-in-depth marker so a source-scoped model that reaches `getBootstrapData`
45
- * fails closed rather than bootstrapping unscoped.
46
- */
47
- sourceScoped?: boolean;
48
- /** Physical tenancy column (default `organization_id`, configurable per model). */
49
- orgColumn?: string;
50
- /**
51
- * Parent-table scoping for rows that have no `organization_id` column, mirroring
52
- * the schema's `scopedVia` option. When set, the bootstrap query adds:
53
- *
54
- * WHERE <table>.<localKey> IN
55
- * (SELECT <parentKey> FROM <parentTable> WHERE <parentOrgColumn> = $1)
56
- *
57
- * This applies on top of whatever `orgScoped` dictates, so a table can carry its
58
- * own `organization_id` and still narrow through a parent. The common case,
59
- * though, is `orgScoped: false` together with `scopedVia` on a table that lacks the
60
- * column.
61
- */
62
- scopedVia?: {
63
- localKey: string;
64
- parentTable: string;
65
- parentKey?: string;
66
- parentOrgColumn?: string;
67
- };
68
- /** Client-facing field name → physical DB column for declared fields. */
69
- fieldColumns?: Record<string, string>;
70
- /** Physical-column aliases needed after SELECT * for `.from(...)` fields. */
71
- columnOverrides?: readonly ColumnOverride[];
72
- /**
73
- * Physical columns the schema declares as JSON (via `field.json()`). A JSON field
74
- * stored in a text column comes back from `row_to_json` as a serialized string, so
75
- * the bootstrap reparses these columns to make the wire value the canonical object
76
- * regardless of the physical column type. A `jsonb` column already returns an
77
- * object, so reparsing it is a no-op.
78
- */
79
- jsonColumns?: readonly string[];
80
- }
@@ -1,8 +0,0 @@
1
- /**
2
- * Per-model read configuration consumed when a client bootstraps. Each
3
- * {@link BootstrapModel} maps a model to its physical table, its tenancy column, and
4
- * any parent scoping — plain data with no database driver. It feeds the read side of
5
- * the data adapter contract; your query builder reads it to load a model's initial
6
- * rows.
7
- */
8
- export {};
@@ -1,23 +0,0 @@
1
- /**
2
- * The set of storage modes a `DataAdapter` can run in. An adapter carries one of
3
- * these as a label for diagnostics; it does not decide routing, which the adapter
4
- * resolver handles separately. The package defines the enum so that the contract
5
- * and every adapter agree on the same closed set of values:
6
- *
7
- * - `hosted` — a database this engine operates on the caller's behalf.
8
- * - `selfHosted` — the caller's own database, reached through the same execution
9
- * path as `hosted`.
10
- * - `source` — a caller-owned endpoint that accepts changes over HTTP without
11
- * database credentials.
12
- *
13
- * These names describe where the data lives, not anything an end user sees.
14
- */
15
- import { z } from 'zod';
16
- /** Runtime validator for the storage-mode values; {@link StorageMode} is its inferred type. */
17
- export declare const storageModeSchema: z.ZodEnum<{
18
- source: "source";
19
- hosted: "hosted";
20
- selfHosted: "selfHosted";
21
- }>;
22
- /** The storage mode an adapter runs in — one of the values described in the module overview. */
23
- export type StorageMode = z.infer<typeof storageModeSchema>;
@@ -1,17 +0,0 @@
1
- /**
2
- * The set of storage modes a `DataAdapter` can run in. An adapter carries one of
3
- * these as a label for diagnostics; it does not decide routing, which the adapter
4
- * resolver handles separately. The package defines the enum so that the contract
5
- * and every adapter agree on the same closed set of values:
6
- *
7
- * - `hosted` — a database this engine operates on the caller's behalf.
8
- * - `selfHosted` — the caller's own database, reached through the same execution
9
- * path as `hosted`.
10
- * - `source` — a caller-owned endpoint that accepts changes over HTTP without
11
- * database credentials.
12
- *
13
- * These names describe where the data lives, not anything an end user sees.
14
- */
15
- import { z } from 'zod';
16
- /** Runtime validator for the storage-mode values; {@link StorageMode} is its inferred type. */
17
- export const storageModeSchema = z.enum(['hosted', 'source', 'selfHosted']);
@@ -1,83 +0,0 @@
1
- /**
2
- * The interface every data-source backend implements, together with the bridge
3
- * that wires an implementation into the `dataSource()` HTTP handler. This package
4
- * defines the contract and ships adapters for three object-relational mappers —
5
- * {@link prismaDataSource}, {@link drizzleDataSource}, and {@link kyselyDataSource} —
6
- * each verified by shared mutation checks plus endpoint-only outbox checks. The
7
- * direct Kysely wrapper runs only the shared mutation contract. You can also
8
- * write your own.
9
- *
10
- * An endpoint adapter reads and writes your database, and it owns the transactional
11
- * outbox and idempotency bookkeeping as well, so you never write those by hand.
12
- * Hand it to the handler in one slot:
13
- *
14
- * export const POST = dataSource({
15
- * schema, apiKey: process.env.ABLO_API_KEY!,
16
- * adapter: prismaDataSource(prisma, schema),
17
- * });
18
- *
19
- * That is the path to teach. {@link sourceHandlersFromAdapter} is the lower-level
20
- * bridge behind it — it expands one adapter into the handler's `commit`, `events`,
21
- * and per-model `load` and `list` operations, and is worth reaching for only when
22
- * you want to override one of those while the adapter serves the rest.
23
- */
24
- import type { SourceListQuery, SourceRequestContext } from './types.js';
25
- import type { AdapterCapabilities, ChangeSet, EventsPage, Migration } from './contract.js';
26
- /**
27
- * A single row keyed by the schema's field names (for example `operatorId`), not
28
- * by physical column names. Each adapter is the boundary that translates between
29
- * the two, mapping a field name to whatever the underlying database column is
30
- * called. Values are typed as `unknown`, so a caller must narrow a value before
31
- * using it.
32
- */
33
- export type Row = Record<string, unknown>;
34
- /** A read request handed to an adapter: either a single-row load by id, or a filtered list. */
35
- export type AdapterReadRequest = {
36
- readonly kind: 'load';
37
- readonly model: string;
38
- readonly id: string;
39
- readonly scope?: SourceRequestContext;
40
- } | {
41
- readonly kind: 'list';
42
- readonly model: string;
43
- readonly query?: SourceListQuery;
44
- readonly scope?: SourceRequestContext;
45
- };
46
- /** What {@link MutationAdapter.commit} returns: the rows as they stand after the write. */
47
- export interface AdapterCommitResult {
48
- /** The affected rows after the write. The change log is derived from these. */
49
- readonly rows: readonly Row[];
50
- }
51
- /**
52
- * Guarantees shared by direct and endpoint mutation wrappers. Both apply row DML
53
- * and write the permanent idempotency ledger in one transaction. The scoped,
54
- * server-authored `correlationId` is the ledger key; a caller-authored operation
55
- * transaction id is never used as that namespace.
56
- */
57
- export interface MutationAdapter {
58
- readonly capabilities: AdapterCapabilities;
59
- /** Infrastructure migrations required by this wrapper's advertised capabilities. */
60
- migrations(): readonly Migration[];
61
- /** The rows matching a load or list request. */
62
- read(req: AdapterReadRequest): Promise<readonly Row[]>;
63
- /**
64
- * Applies a change set in one transaction, keyed by its scoped `correlationId`.
65
- * Replaying the same correlation and canonical request hash returns the original
66
- * rows without applying DML again; a different hash fails closed.
67
- */
68
- commit(change: ChangeSet): Promise<AdapterCommitResult>;
69
- }
70
- /**
71
- * Endpoint-only extension of {@link MutationAdapter}. Its commit writes one
72
- * correlated outbox event per operation in the same transaction as the DML and
73
- * ledger. Direct wrappers deliberately do not implement this interface: WAL is
74
- * their authoritative source feed and they must never write `ablo_outbox`.
75
- */
76
- export interface DataSourceAdapter extends MutationAdapter {
77
- readonly capabilities: AdapterCapabilities & {
78
- readonly outboxEvents: true;
79
- };
80
- /** Reads outbox events after `cursor` (`null` starts from the beginning), up to `limit` events. */
81
- events(cursor: string | null, limit: number): Promise<EventsPage>;
82
- }
83
- export type { AdapterCapabilities, ChangeSet, Migration, OutboxEvent, EventsPage } from './contract.js';
@@ -1,24 +0,0 @@
1
- /**
2
- * The interface every data-source backend implements, together with the bridge
3
- * that wires an implementation into the `dataSource()` HTTP handler. This package
4
- * defines the contract and ships adapters for three object-relational mappers —
5
- * {@link prismaDataSource}, {@link drizzleDataSource}, and {@link kyselyDataSource} —
6
- * each verified by shared mutation checks plus endpoint-only outbox checks. The
7
- * direct Kysely wrapper runs only the shared mutation contract. You can also
8
- * write your own.
9
- *
10
- * An endpoint adapter reads and writes your database, and it owns the transactional
11
- * outbox and idempotency bookkeeping as well, so you never write those by hand.
12
- * Hand it to the handler in one slot:
13
- *
14
- * export const POST = dataSource({
15
- * schema, apiKey: process.env.ABLO_API_KEY!,
16
- * adapter: prismaDataSource(prisma, schema),
17
- * });
18
- *
19
- * That is the path to teach. {@link sourceHandlersFromAdapter} is the lower-level
20
- * bridge behind it — it expands one adapter into the handler's `commit`, `events`,
21
- * and per-model `load` and `list` operations, and is worth reaching for only when
22
- * you want to override one of those while the adapter serves the rest.
23
- */
24
- export {};
@@ -1,48 +0,0 @@
1
- /**
2
- * The Drizzle adapter for the data-source interface. It implements the same
3
- * {@link DataSourceAdapter} contract as {@link prismaDataSource} and passes the
4
- * same conformance suite, built against Drizzle's query API:
5
- * - `db.transaction(async (tx) => …)` runs an interactive transaction that
6
- * commits or rolls back as a unit.
7
- * - `db.execute(sql`…`)` runs parameterized raw SQL; `sql.identifier()` safely
8
- * quotes dynamic table and column names, and `sql`${value}`` parameterizes
9
- * values.
10
- *
11
- * Table and column names come from your schema, not from a hand-written Drizzle
12
- * table. Because this adapter issues raw SQL, it would otherwise bypass any
13
- * field-to-column translation, so it derives every name from the same rule the
14
- * table provisioner uses:
15
- * table = `model.tableName ?? key`
16
- * column = `fieldMeta.column ?? camelToSnake(field)` (plus the tenancy column)
17
- * This keeps the tables `ablo migrate` creates (for example `operator_id`) and the
18
- * columns this adapter reads and writes in agreement. You define the schema once
19
- * and point the engine at your Postgres database. The adapter is the translation
20
- * boundary: the rows it accepts and returns, and the outbox `data` it writes, are
21
- * keyed by field name, while the physical columns it touches are snake_case.
22
- *
23
- * Two things to know about drivers:
24
- * 1. Interactive `db.transaction` needs a driver that supports it. Neon's
25
- * `neon-http` driver is single-shot and does not, so use `neon-serverless`
26
- * (over WebSocket) or `pg`; under `neon-http` the commit path throws at
27
- * runtime.
28
- * 2. The `db.execute` result shape is driver-specific — `postgres-js` returns an
29
- * array-like row list, while `node-postgres` returns `{ rows }`. `rowsOf`
30
- * normalizes both.
31
- *
32
- * Every write goes through `sql` and `db.execute` rather than the fluent builder,
33
- * which keeps the adapter one small, fully typed unit with no per-driver builder
34
- * generics.
35
- */
36
- import { type SQL } from 'drizzle-orm';
37
- import type { DataSourceAdapter, Row } from '../adapter.js';
38
- import type { Schema, SchemaRecord } from '../../transaction/schema/schema.js';
39
- /** The subset of a Drizzle database/transaction handle the adapter calls. */
40
- export interface DrizzleLike {
41
- execute(query: SQL): Promise<DrizzleExecuteResult>;
42
- transaction<T>(fn: (tx: DrizzleLike) => Promise<T>): Promise<T>;
43
- }
44
- /** `db.execute` is array-like (postgres-js) or `{ rows }` (node-postgres). */
45
- export type DrizzleExecuteResult = readonly Row[] | {
46
- readonly rows: readonly Row[];
47
- };
48
- export declare function drizzleDataSource<S extends SchemaRecord>(db: DrizzleLike, schema: Schema<S>): DataSourceAdapter;
@@ -1,219 +0,0 @@
1
- /**
2
- * The Drizzle adapter for the data-source interface. It implements the same
3
- * {@link DataSourceAdapter} contract as {@link prismaDataSource} and passes the
4
- * same conformance suite, built against Drizzle's query API:
5
- * - `db.transaction(async (tx) => …)` runs an interactive transaction that
6
- * commits or rolls back as a unit.
7
- * - `db.execute(sql`…`)` runs parameterized raw SQL; `sql.identifier()` safely
8
- * quotes dynamic table and column names, and `sql`${value}`` parameterizes
9
- * values.
10
- *
11
- * Table and column names come from your schema, not from a hand-written Drizzle
12
- * table. Because this adapter issues raw SQL, it would otherwise bypass any
13
- * field-to-column translation, so it derives every name from the same rule the
14
- * table provisioner uses:
15
- * table = `model.tableName ?? key`
16
- * column = `fieldMeta.column ?? camelToSnake(field)` (plus the tenancy column)
17
- * This keeps the tables `ablo migrate` creates (for example `operator_id`) and the
18
- * columns this adapter reads and writes in agreement. You define the schema once
19
- * and point the engine at your Postgres database. The adapter is the translation
20
- * boundary: the rows it accepts and returns, and the outbox `data` it writes, are
21
- * keyed by field name, while the physical columns it touches are snake_case.
22
- *
23
- * Two things to know about drivers:
24
- * 1. Interactive `db.transaction` needs a driver that supports it. Neon's
25
- * `neon-http` driver is single-shot and does not, so use `neon-serverless`
26
- * (over WebSocket) or `pg`; under `neon-http` the commit path throws at
27
- * runtime.
28
- * 2. The `db.execute` result shape is driver-specific — `postgres-js` returns an
29
- * array-like row list, while `node-postgres` returns `{ rows }`. `rowsOf`
30
- * normalizes both.
31
- *
32
- * Every write goes through `sql` and `db.execute` rather than the fluent builder,
33
- * which keeps the adapter one small, fully typed unit with no per-driver builder
34
- * generics.
35
- */
36
- import { AbloValidationError } from '../../transaction/errors.js';
37
- import { sql } from 'drizzle-orm';
38
- import { outboxEventSchema } from '../contract.js';
39
- import { adapterTableMigrations } from '../migrations.js';
40
- import { assertSourceIdempotencyIntent, assertSourceIdempotencyRetention, SOURCE_IDEMPOTENCY_RETENTION, sourceChangeIntentHash, } from '../idempotency.js';
41
- import { toSchemaJSON } from '../../schema/serialize.js';
42
- import { camelToSnake, snakeToCamel } from '../../schema/ddl.js';
43
- import { tenancyColumn } from '../../transaction/schema/tenancy.js';
44
- import { ABLO_POSTGRES_COMMIT_ECHO_PREFIX } from '../types.js';
45
- function rowsOf(result) {
46
- return Array.isArray(result) ? result : result.rows;
47
- }
48
- function rowId(op) {
49
- const id = op.id ?? op.input?.id;
50
- if (typeof id !== 'string' || id.length === 0) {
51
- throw new AbloValidationError(`operation on "${op.model}" requires an id`, { code: 'source_operation_id_required' });
52
- }
53
- return id;
54
- }
55
- /** `col1, col2` as a safely-quoted identifier list. */
56
- const identList = (cols) => sql.join(cols.map((c) => sql.identifier(c)), sql `, `);
57
- function buildColumnMaps(schema) {
58
- const json = toSchemaJSON(schema);
59
- const out = new Map();
60
- for (const [key, model] of Object.entries(json.models)) {
61
- const fieldToColumn = new Map();
62
- const columnToField = new Map();
63
- const register = (field, column) => {
64
- // The default rule already covers `camelToSnake(field)`; only record real
65
- // divergences so the reverse map never shadows a clean round-trip.
66
- if (column === camelToSnake(field))
67
- return;
68
- fieldToColumn.set(field, column);
69
- columnToField.set(column, field);
70
- };
71
- for (const [field, meta] of Object.entries(model.fields)) {
72
- if (meta.column)
73
- register(field, meta.column);
74
- }
75
- const orgColumn = tenancyColumn(model.tenancy);
76
- if (orgColumn)
77
- register('organizationId', orgColumn);
78
- out.set(key, { table: model.tableName ?? key, fieldToColumn, columnToField });
79
- }
80
- return out;
81
- }
82
- export function drizzleDataSource(db, schema) {
83
- const maps = buildColumnMaps(schema);
84
- const modelColumns = (model) => {
85
- const mc = maps.get(model);
86
- if (!mc)
87
- throw new AbloValidationError(`drizzleDataSource: no model "${model}" in schema`, { code: 'source_adapter_misconfigured' });
88
- return mc;
89
- };
90
- const columnFor = (mc, field) => mc.fieldToColumn.get(field) ?? camelToSnake(field);
91
- const fieldFor = (mc, column) => mc.columnToField.get(column) ?? snakeToCamel(column);
92
- /** Field-keyed row to column-keyed row, for INSERT and UPDATE values. */
93
- const toColumns = (mc, row) => {
94
- const out = {};
95
- for (const k of Object.keys(row))
96
- out[columnFor(mc, k)] = row[k];
97
- return out;
98
- };
99
- /** Column-keyed row (from `RETURNING *` or `SELECT *`) back to a field-keyed row, for reads and results. */
100
- const toFields = (mc, row) => {
101
- const out = {};
102
- for (const k of Object.keys(row))
103
- out[fieldFor(mc, k)] = row[k];
104
- return out;
105
- };
106
- const applyOperation = async (tx, op) => {
107
- const mc = modelColumns(op.model);
108
- const table = sql.identifier(mc.table);
109
- const id = rowId(op);
110
- const input = op.input ?? {};
111
- if (op.type === 'DELETE') {
112
- const deleted = rowsOf(await tx.execute(sql `DELETE FROM ${table} WHERE id = ${id} RETURNING *`));
113
- return deleted[0] ? toFields(mc, deleted[0]) : { id };
114
- }
115
- if (op.type === 'CREATE') {
116
- const data = toColumns(mc, { id, ...input });
117
- const cols = Object.keys(data);
118
- const values = sql.join(cols.map((c) => sql `${data[c]}`), sql `, `);
119
- const inserted = rowsOf(await tx.execute(sql `INSERT INTO ${table} (${identList(cols)}) VALUES (${values}) RETURNING *`));
120
- return inserted[0] ? toFields(mc, inserted[0]) : { id, ...input };
121
- }
122
- // UPDATE / ARCHIVE / UNARCHIVE — a SET clause + the lifecycle field. The
123
- // lifecycle field is `archivedAt` (camelCase) and goes through `toColumns`
124
- // like any other, so it lands in `archived_at` — same column the provisioner
125
- // emits and the Prisma adapter writes (no per-adapter casing divergence).
126
- const patch = toColumns(mc, {
127
- ...input,
128
- ...(op.type === 'ARCHIVE' ? { archivedAt: new Date() } : {}),
129
- ...(op.type === 'UNARCHIVE' ? { archivedAt: null } : {}),
130
- });
131
- const assignments = sql.join(Object.keys(patch).map((c) => sql `${sql.identifier(c)} = ${patch[c]}`), sql `, `);
132
- const updated = rowsOf(await tx.execute(sql `UPDATE ${table} SET ${assignments} WHERE id = ${id} RETURNING *`));
133
- return updated[0] ? toFields(mc, updated[0]) : { id, ...input };
134
- };
135
- return {
136
- capabilities: {
137
- transactions: true,
138
- propose: false,
139
- schemaIntrospection: true,
140
- postgresWalEcho: true,
141
- outboxEvents: true,
142
- },
143
- migrations() {
144
- return adapterTableMigrations();
145
- },
146
- async read(req) {
147
- const mc = modelColumns(req.model);
148
- const table = sql.identifier(mc.table);
149
- if (req.kind === 'load') {
150
- const rows = rowsOf(await db.execute(sql `SELECT * FROM ${table} WHERE id = ${req.id} LIMIT 1`));
151
- return rows.map((r) => toFields(mc, r));
152
- }
153
- const limit = req.query?.limit ?? 1000;
154
- const rows = rowsOf(await db.execute(sql `SELECT * FROM ${table} LIMIT ${limit}`));
155
- return rows.map((r) => toFields(mc, r));
156
- },
157
- async commit(change) {
158
- const requestHash = sourceChangeIntentHash(change);
159
- return db.transaction(async (tx) => {
160
- const cached = rowsOf(await tx.execute(sql `SELECT response, request_hash AS "requestHash", expires_at AS "expiresAt"
161
- FROM ablo_idempotency
162
- WHERE client_tx_id = ${change.correlationId} LIMIT 1`));
163
- const cachedRow = cached[0];
164
- if (cachedRow) {
165
- assertSourceIdempotencyIntent(cachedRow.requestHash, requestHash);
166
- assertSourceIdempotencyRetention(cachedRow.expiresAt);
167
- return { rows: cachedRow.response };
168
- }
169
- const rows = [];
170
- for (const [index, op] of change.operations.entries()) {
171
- const row = await applyOperation(tx, op);
172
- rows.push(row);
173
- const entityId = String(row.id ?? rowId(op));
174
- await tx.execute(sql `
175
- INSERT INTO ablo_outbox (
176
- id, model, entity_id, type, data,
177
- correlation_id, transaction_id, occurred_at
178
- )
179
- VALUES (
180
- ${`${change.correlationId}:${index}`}, ${op.model}, ${entityId}, ${op.type},
181
- ${op.type === 'DELETE' ? null : JSON.stringify(row)}::jsonb,
182
- ${change.correlationId}, ${op.transactionId ?? null}, ${Date.now()}
183
- )`);
184
- }
185
- await tx.execute(sql `
186
- INSERT INTO ablo_idempotency (client_tx_id, response, request_hash, expires_at)
187
- VALUES (
188
- ${change.correlationId}, ${JSON.stringify(rows)}::jsonb, ${requestHash},
189
- now() + ${SOURCE_IDEMPOTENCY_RETENTION}::interval
190
- )`);
191
- if (change.echo?.kind === 'postgres-wal') {
192
- await tx.execute(sql `SELECT pg_logical_emit_message(true, ${ABLO_POSTGRES_COMMIT_ECHO_PREFIX}, ${change.echo.payload})`);
193
- }
194
- return { rows };
195
- });
196
- },
197
- async events(cursor, limit) {
198
- const after = cursor ?? '0';
199
- const rows = rowsOf(await db.execute(sql `
200
- SELECT cursor, id, model, entity_id, type, data, organization_id,
201
- client_tx_id, correlation_id, transaction_id, occurred_at
202
- FROM ablo_outbox WHERE cursor > ${after} ORDER BY cursor ASC LIMIT ${limit}`));
203
- const events = rows.map((r) => outboxEventSchema.parse({
204
- id: r.id,
205
- model: r.model,
206
- entityId: r.entity_id,
207
- type: r.type,
208
- data: r.data ?? null,
209
- organizationId: r.organization_id ?? null,
210
- clientTxId: r.client_tx_id ?? null,
211
- correlationId: r.correlation_id ?? null,
212
- transactionId: r.transaction_id ?? null,
213
- occurredAt: r.occurred_at != null ? Number(r.occurred_at) : null,
214
- cursor: String(r.cursor),
215
- }));
216
- return { events, nextCursor: events.at(-1)?.cursor ?? null };
217
- },
218
- };
219
- }