@abloatai/ablo 0.25.0 → 0.27.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 (425) hide show
  1. package/AGENTS.md +5 -3
  2. package/CHANGELOG.md +34 -0
  3. package/README.md +104 -88
  4. package/dist/BaseSyncedStore.d.ts +140 -266
  5. package/dist/BaseSyncedStore.js +338 -739
  6. package/dist/Database.d.ts +62 -77
  7. package/dist/Database.js +106 -127
  8. package/dist/{ObjectPool.d.ts → InstanceCache.d.ts} +10 -13
  9. package/dist/{ObjectPool.js → InstanceCache.js} +91 -83
  10. package/dist/LazyReferenceCollection.d.ts +11 -15
  11. package/dist/LazyReferenceCollection.js +16 -15
  12. package/dist/Model.d.ts +37 -52
  13. package/dist/Model.js +52 -69
  14. package/dist/ModelRegistry.d.ts +46 -25
  15. package/dist/ModelRegistry.js +32 -30
  16. package/dist/NetworkMonitor.d.ts +5 -6
  17. package/dist/NetworkMonitor.js +6 -7
  18. package/dist/SyncClient.d.ts +119 -109
  19. package/dist/SyncClient.js +303 -224
  20. package/dist/SyncEngineContext.d.ts +1 -3
  21. package/dist/SyncEngineContext.js +1 -2
  22. package/dist/adapters/alwaysOnline.d.ts +6 -8
  23. package/dist/adapters/alwaysOnline.js +6 -8
  24. package/dist/adapters/inMemoryStorage.d.ts +9 -9
  25. package/dist/adapters/inMemoryStorage.js +9 -9
  26. package/dist/agent/Agent.d.ts +39 -31
  27. package/dist/agent/Agent.js +35 -23
  28. package/dist/agent/index.d.ts +4 -4
  29. package/dist/agent/index.js +5 -5
  30. package/dist/agent/session.d.ts +47 -44
  31. package/dist/agent/session.js +37 -48
  32. package/dist/agent/types.d.ts +26 -31
  33. package/dist/agent/types.js +6 -7
  34. package/dist/ai-sdk/coordinatedTool.d.ts +108 -0
  35. package/dist/ai-sdk/{coordinated-tool.js → coordinatedTool.js} +44 -38
  36. package/dist/ai-sdk/coordinationContext.d.ts +46 -0
  37. package/dist/ai-sdk/{coordination-context.js → coordinationContext.js} +30 -31
  38. package/dist/ai-sdk/index.d.ts +25 -22
  39. package/dist/ai-sdk/index.js +25 -22
  40. package/dist/ai-sdk/wrap.d.ts +7 -8
  41. package/dist/ai-sdk/wrap.js +2 -2
  42. package/dist/auth/credentialPolicy.d.ts +74 -71
  43. package/dist/auth/credentialPolicy.js +51 -56
  44. package/dist/auth/credentialSource.d.ts +7 -18
  45. package/dist/auth/credentialSource.js +10 -18
  46. package/dist/auth/index.d.ts +59 -58
  47. package/dist/auth/index.js +34 -40
  48. package/dist/auth/schemas.d.ts +5 -4
  49. package/dist/auth/schemas.js +5 -4
  50. package/dist/batching/index.d.ts +19 -21
  51. package/dist/batching/index.js +14 -17
  52. package/dist/cli.cjs +483 -369
  53. package/dist/client/Ablo.d.ts +107 -836
  54. package/dist/client/Ablo.js +174 -833
  55. package/dist/client/ApiClient.d.ts +44 -20
  56. package/dist/client/ApiClient.js +193 -44
  57. package/dist/client/auth.d.ts +51 -60
  58. package/dist/client/auth.js +137 -110
  59. package/dist/client/claimHeartbeatLoop.d.ts +50 -0
  60. package/dist/client/claimHeartbeatLoop.js +88 -0
  61. package/dist/client/consoleLogger.d.ts +35 -0
  62. package/dist/client/consoleLogger.js +44 -0
  63. package/dist/client/createInternalComponents.d.ts +14 -17
  64. package/dist/client/createInternalComponents.js +26 -31
  65. package/dist/client/createModelProxy.d.ts +130 -120
  66. package/dist/client/createModelProxy.js +158 -124
  67. package/dist/client/credentialEndpoint.d.ts +61 -0
  68. package/dist/client/credentialEndpoint.js +86 -0
  69. package/dist/client/functionalUpdate.d.ts +29 -27
  70. package/dist/client/functionalUpdate.js +21 -21
  71. package/dist/client/hostedEndpoints.d.ts +21 -0
  72. package/dist/client/hostedEndpoints.js +21 -0
  73. package/dist/client/httpClient.d.ts +58 -54
  74. package/dist/client/httpClient.js +29 -31
  75. package/dist/client/identity.d.ts +15 -20
  76. package/dist/client/identity.js +49 -59
  77. package/dist/client/modelRegistration.d.ts +10 -0
  78. package/dist/client/modelRegistration.js +301 -0
  79. package/dist/client/options.d.ts +373 -0
  80. package/dist/client/options.js +6 -0
  81. package/dist/client/registerDataSource.d.ts +9 -9
  82. package/dist/client/registerDataSource.js +15 -16
  83. package/dist/client/resourceTypes.d.ts +333 -0
  84. package/dist/client/resourceTypes.js +7 -0
  85. package/dist/client/schemaConfig.d.ts +44 -0
  86. package/dist/client/schemaConfig.js +176 -0
  87. package/dist/client/sessionMint.d.ts +17 -13
  88. package/dist/client/sessionMint.js +26 -31
  89. package/dist/client/validateAbloOptions.d.ts +12 -14
  90. package/dist/client/validateAbloOptions.js +9 -10
  91. package/dist/client/writeOptionsSchema.d.ts +18 -16
  92. package/dist/client/writeOptionsSchema.js +23 -20
  93. package/dist/client/wsMutationExecutor.d.ts +28 -0
  94. package/dist/client/wsMutationExecutor.js +71 -0
  95. package/dist/context.d.ts +6 -4
  96. package/dist/context.js +6 -7
  97. package/dist/coordination/index.d.ts +13 -4
  98. package/dist/coordination/index.js +29 -4
  99. package/dist/coordination/schema.d.ts +176 -128
  100. package/dist/coordination/schema.js +197 -133
  101. package/dist/coordination/trace.d.ts +9 -11
  102. package/dist/coordination/trace.js +13 -15
  103. package/dist/core/DatabaseManager.d.ts +5 -8
  104. package/dist/core/DatabaseManager.js +38 -40
  105. package/dist/core/QueryProcessor.d.ts +7 -9
  106. package/dist/core/QueryProcessor.js +27 -34
  107. package/dist/core/QueryView.d.ts +17 -5
  108. package/dist/core/QueryView.js +6 -7
  109. package/dist/core/StoreManager.d.ts +14 -16
  110. package/dist/core/StoreManager.js +26 -25
  111. package/dist/core/ViewRegistry.d.ts +5 -5
  112. package/dist/core/ViewRegistry.js +4 -4
  113. package/dist/core/index.d.ts +18 -13
  114. package/dist/core/index.js +32 -26
  115. package/dist/core/openIDBWithTimeout.d.ts +38 -36
  116. package/dist/core/openIDBWithTimeout.js +57 -54
  117. package/dist/core/queryUtils.d.ts +45 -0
  118. package/dist/core/queryUtils.js +69 -0
  119. package/dist/core/storeContract.d.ts +145 -0
  120. package/dist/core/storeContract.js +12 -0
  121. package/dist/environment.d.ts +28 -0
  122. package/dist/environment.js +21 -0
  123. package/dist/errorCodes.d.ts +118 -101
  124. package/dist/errorCodes.js +277 -260
  125. package/dist/errors.d.ts +170 -165
  126. package/dist/errors.js +161 -151
  127. package/dist/index.d.ts +30 -27
  128. package/dist/index.js +90 -82
  129. package/dist/interfaces/index.d.ts +108 -133
  130. package/dist/interfaces/index.js +5 -4
  131. package/dist/keys/index.d.ts +27 -29
  132. package/dist/keys/index.js +59 -49
  133. package/dist/mutators/RecordingTransaction.d.ts +16 -16
  134. package/dist/mutators/RecordingTransaction.js +31 -37
  135. package/dist/mutators/Transaction.d.ts +18 -26
  136. package/dist/mutators/Transaction.js +14 -20
  137. package/dist/mutators/UndoManager.d.ts +122 -131
  138. package/dist/mutators/UndoManager.js +149 -155
  139. package/dist/mutators/defineMutators.d.ts +24 -37
  140. package/dist/mutators/defineMutators.js +14 -20
  141. package/dist/mutators/inverseOp.d.ts +12 -15
  142. package/dist/mutators/inverseOp.js +12 -15
  143. package/dist/mutators/mutateActions.d.ts +10 -9
  144. package/dist/mutators/mutateActions.js +1 -1
  145. package/dist/mutators/readerActions.d.ts +9 -8
  146. package/dist/mutators/readerActions.js +2 -2
  147. package/dist/mutators/undoApply.d.ts +31 -27
  148. package/dist/mutators/undoApply.js +26 -24
  149. package/dist/policy/index.d.ts +5 -3
  150. package/dist/policy/index.js +5 -3
  151. package/dist/policy/types.d.ts +105 -101
  152. package/dist/policy/types.js +67 -66
  153. package/dist/query/client.d.ts +32 -16
  154. package/dist/query/client.js +103 -72
  155. package/dist/query/types.d.ts +37 -60
  156. package/dist/query/types.js +13 -33
  157. package/dist/react/AbloProvider.d.ts +7 -11
  158. package/dist/react/AbloProvider.js +24 -17
  159. package/dist/react/context.d.ts +27 -146
  160. package/dist/react/context.js +9 -10
  161. package/dist/react/index.d.ts +41 -42
  162. package/dist/react/index.js +37 -38
  163. package/dist/react/internalContext.d.ts +17 -19
  164. package/dist/react/useAblo.d.ts +23 -22
  165. package/dist/react/useAblo.js +17 -15
  166. package/dist/react/useCurrentUserId.d.ts +8 -7
  167. package/dist/react/useCurrentUserId.js +8 -7
  168. package/dist/react/useErrorListener.d.ts +7 -7
  169. package/dist/react/useErrorListener.js +11 -12
  170. package/dist/react/useMutationFailureListener.d.ts +8 -8
  171. package/dist/react/useMutationFailureListener.js +9 -9
  172. package/dist/react/useMutators.d.ts +11 -11
  173. package/dist/react/useMutators.js +10 -4
  174. package/dist/react/useReactive.js +2 -3
  175. package/dist/react/useSyncStatus.d.ts +4 -6
  176. package/dist/react/useUndoScope.d.ts +7 -9
  177. package/dist/react/useUndoScope.js +3 -3
  178. package/dist/schema/coordination.d.ts +21 -25
  179. package/dist/schema/coordination.js +21 -25
  180. package/dist/schema/ddl.d.ts +43 -39
  181. package/dist/schema/ddl.js +75 -68
  182. package/dist/schema/ddlLock.d.ts +35 -0
  183. package/dist/schema/ddlLock.js +46 -0
  184. package/dist/schema/diff.d.ts +99 -61
  185. package/dist/schema/diff.js +43 -34
  186. package/dist/schema/field.d.ts +37 -42
  187. package/dist/schema/field.js +36 -49
  188. package/dist/schema/generate.d.ts +12 -12
  189. package/dist/schema/generate.js +12 -12
  190. package/dist/schema/index.d.ts +5 -4
  191. package/dist/schema/index.js +29 -21
  192. package/dist/schema/model.d.ts +121 -146
  193. package/dist/schema/model.js +24 -35
  194. package/dist/schema/openapi.d.ts +10 -9
  195. package/dist/schema/openapi.js +7 -1
  196. package/dist/schema/queries.d.ts +30 -32
  197. package/dist/schema/queries.js +24 -25
  198. package/dist/schema/relation.d.ts +89 -99
  199. package/dist/schema/relation.js +13 -13
  200. package/dist/schema/residency.d.ts +38 -0
  201. package/dist/schema/residency.js +30 -0
  202. package/dist/schema/roles.d.ts +45 -27
  203. package/dist/schema/roles.js +52 -21
  204. package/dist/schema/schema.d.ts +36 -45
  205. package/dist/schema/schema.js +42 -39
  206. package/dist/schema/select.d.ts +13 -13
  207. package/dist/schema/select.js +13 -13
  208. package/dist/schema/serialize.d.ts +36 -39
  209. package/dist/schema/serialize.js +27 -31
  210. package/dist/schema/sugar.d.ts +17 -32
  211. package/dist/schema/sugar.js +14 -29
  212. package/dist/schema/{sync-delta-row.d.ts → syncDeltaRow.d.ts} +27 -50
  213. package/dist/schema/syncDeltaRow.js +89 -0
  214. package/dist/schema/tenancy.d.ts +44 -46
  215. package/dist/schema/tenancy.js +46 -48
  216. package/dist/server/adapter.d.ts +58 -58
  217. package/dist/server/adapter.js +13 -14
  218. package/dist/server/commit.d.ts +60 -64
  219. package/dist/server/index.d.ts +9 -10
  220. package/dist/server/index.js +1 -1
  221. package/dist/server/readConfig.d.ts +70 -0
  222. package/dist/server/readConfig.js +8 -0
  223. package/dist/server/storageMode.d.ts +23 -0
  224. package/dist/server/storageMode.js +17 -0
  225. package/dist/source/adapter.d.ts +31 -26
  226. package/dist/source/adapter.js +10 -10
  227. package/dist/source/adapters/drizzle.d.ts +28 -23
  228. package/dist/source/adapters/drizzle.js +34 -28
  229. package/dist/source/adapters/kysely.d.ts +27 -25
  230. package/dist/source/adapters/kysely.js +28 -26
  231. package/dist/source/adapters/memory.d.ts +8 -7
  232. package/dist/source/adapters/memory.js +10 -9
  233. package/dist/source/adapters/prisma.d.ts +13 -12
  234. package/dist/source/adapters/prisma.js +27 -29
  235. package/dist/source/conformance.d.ts +18 -11
  236. package/dist/source/conformance.js +27 -19
  237. package/dist/source/connector.d.ts +31 -32
  238. package/dist/source/connector.js +30 -28
  239. package/dist/source/connectorProtocol.d.ts +160 -0
  240. package/dist/source/connectorProtocol.js +162 -0
  241. package/dist/source/contract.d.ts +26 -27
  242. package/dist/source/contract.js +28 -29
  243. package/dist/source/factory.d.ts +94 -0
  244. package/dist/source/factory.js +268 -0
  245. package/dist/source/index.d.ts +10 -462
  246. package/dist/source/index.js +17 -421
  247. package/dist/source/migrations.d.ts +9 -9
  248. package/dist/source/migrations.js +9 -9
  249. package/dist/source/next.d.ts +10 -11
  250. package/dist/source/next.js +7 -8
  251. package/dist/source/pushQueue.d.ts +70 -48
  252. package/dist/source/pushQueue.js +36 -29
  253. package/dist/source/signing.d.ts +88 -0
  254. package/dist/source/signing.js +159 -0
  255. package/dist/source/types.d.ts +351 -0
  256. package/dist/source/types.js +43 -0
  257. package/dist/stores/ObjectStore.d.ts +11 -12
  258. package/dist/stores/ObjectStore.js +34 -35
  259. package/dist/stores/ObjectStoreContract.d.ts +12 -15
  260. package/dist/stores/SyncActionStore.d.ts +8 -12
  261. package/dist/stores/SyncActionStore.js +77 -46
  262. package/dist/surface.d.ts +28 -21
  263. package/dist/surface.js +28 -20
  264. package/dist/sync/{BootstrapHelper.d.ts → BootstrapFetcher.d.ts} +37 -45
  265. package/dist/sync/{BootstrapHelper.js → BootstrapFetcher.js} +101 -80
  266. package/dist/sync/ConnectionManager.d.ts +47 -50
  267. package/dist/sync/ConnectionManager.js +74 -70
  268. package/dist/sync/NetworkProbe.d.ts +27 -31
  269. package/dist/sync/NetworkProbe.js +67 -72
  270. package/dist/sync/{HydrationCoordinator.d.ts → OnDemandLoader.d.ts} +49 -36
  271. package/dist/sync/{HydrationCoordinator.js → OnDemandLoader.js} +79 -54
  272. package/dist/sync/{AreaOfInterestManager.d.ts → SubscriptionManager.d.ts} +45 -59
  273. package/dist/sync/{AreaOfInterestManager.js → SubscriptionManager.js} +44 -52
  274. package/dist/sync/SyncWebSocket.d.ts +175 -250
  275. package/dist/sync/SyncWebSocket.js +431 -769
  276. package/dist/sync/awaitClaimGrant.d.ts +18 -18
  277. package/dist/sync/awaitClaimGrant.js +38 -30
  278. package/dist/sync/bootstrapApply.d.ts +70 -0
  279. package/dist/sync/bootstrapApply.js +73 -0
  280. package/dist/sync/commitFrames.d.ts +44 -0
  281. package/dist/sync/commitFrames.js +94 -0
  282. package/dist/sync/createClaimStream.d.ts +23 -22
  283. package/dist/sync/createClaimStream.js +108 -25
  284. package/dist/sync/createPresenceStream.d.ts +19 -18
  285. package/dist/sync/createPresenceStream.js +25 -26
  286. package/dist/sync/createSnapshot.d.ts +13 -17
  287. package/dist/sync/createSnapshot.js +20 -26
  288. package/dist/sync/credentialLifecycle.d.ts +175 -0
  289. package/dist/sync/credentialLifecycle.js +322 -0
  290. package/dist/sync/deltaPipeline.d.ts +113 -0
  291. package/dist/sync/deltaPipeline.js +261 -0
  292. package/dist/sync/groupChange.d.ts +113 -0
  293. package/dist/sync/groupChange.js +242 -0
  294. package/dist/sync/heartbeat.d.ts +63 -0
  295. package/dist/sync/heartbeat.js +91 -0
  296. package/dist/sync/participants.d.ts +27 -27
  297. package/dist/sync/schemas.d.ts +3 -2
  298. package/dist/sync/schemas.js +14 -10
  299. package/dist/sync/syncCursor.d.ts +40 -0
  300. package/dist/sync/syncCursor.js +55 -0
  301. package/dist/sync/syncPlan.d.ts +54 -0
  302. package/dist/sync/syncPlan.js +50 -0
  303. package/dist/sync/syncPosition.d.ts +54 -49
  304. package/dist/sync/syncPosition.js +57 -52
  305. package/dist/sync/wsFrameHandlers.d.ts +116 -0
  306. package/dist/sync/wsFrameHandlers.js +374 -0
  307. package/dist/testing/fixtures/bootstrap.d.ts +21 -17
  308. package/dist/testing/fixtures/bootstrap.js +12 -6
  309. package/dist/testing/fixtures/deltas.d.ts +31 -34
  310. package/dist/testing/fixtures/deltas.js +30 -33
  311. package/dist/testing/fixtures/models.d.ts +11 -10
  312. package/dist/testing/fixtures/models.js +12 -10
  313. package/dist/testing/helpers/{react-wrapper.d.ts → reactWrapper.d.ts} +13 -10
  314. package/dist/testing/helpers/{react-wrapper.js → reactWrapper.js} +15 -12
  315. package/dist/testing/helpers/{sync-engine-harness.d.ts → syncEngineHarness.d.ts} +17 -18
  316. package/dist/testing/helpers/{sync-engine-harness.js → syncEngineHarness.js} +14 -11
  317. package/dist/testing/helpers/wait.d.ts +13 -8
  318. package/dist/testing/helpers/wait.js +13 -8
  319. package/dist/testing/index.d.ts +4 -4
  320. package/dist/testing/index.js +3 -3
  321. package/dist/testing/mocks/MockMutationExecutor.d.ts +18 -17
  322. package/dist/testing/mocks/MockMutationExecutor.js +15 -14
  323. package/dist/testing/mocks/MockNetworkMonitor.d.ts +8 -8
  324. package/dist/testing/mocks/MockNetworkMonitor.js +8 -8
  325. package/dist/testing/mocks/MockSyncContext.d.ts +21 -34
  326. package/dist/testing/mocks/MockSyncContext.js +16 -45
  327. package/dist/testing/mocks/MockSyncStore.d.ts +14 -14
  328. package/dist/testing/mocks/MockSyncStore.js +11 -11
  329. package/dist/testing/mocks/MockWebSocket.d.ts +28 -24
  330. package/dist/testing/mocks/MockWebSocket.js +22 -21
  331. package/dist/transactions/TransactionQueue.d.ts +190 -221
  332. package/dist/transactions/TransactionQueue.js +424 -822
  333. package/dist/transactions/TransactionStore.d.ts +20 -0
  334. package/dist/transactions/TransactionStore.js +53 -0
  335. package/dist/transactions/UnconfirmedWrites.d.ts +82 -0
  336. package/dist/transactions/UnconfirmedWrites.js +104 -0
  337. package/dist/transactions/coalesceRules.d.ts +58 -0
  338. package/dist/transactions/coalesceRules.js +140 -0
  339. package/dist/transactions/commitPayload.d.ts +130 -0
  340. package/dist/transactions/commitPayload.js +143 -0
  341. package/dist/transactions/deltaConfirmation.d.ts +58 -0
  342. package/dist/transactions/deltaConfirmation.js +215 -0
  343. package/dist/transactions/optimisticApply.d.ts +49 -0
  344. package/dist/transactions/optimisticApply.js +65 -0
  345. package/dist/transactions/replayValidation.d.ts +99 -0
  346. package/dist/transactions/replayValidation.js +111 -0
  347. package/dist/types/global.d.ts +46 -41
  348. package/dist/types/global.js +20 -19
  349. package/dist/types/index.d.ts +74 -80
  350. package/dist/types/index.js +22 -27
  351. package/dist/types/modelData.d.ts +10 -0
  352. package/dist/types/modelData.js +9 -0
  353. package/dist/types/participant.d.ts +20 -0
  354. package/dist/types/participant.js +10 -0
  355. package/dist/types/streams.d.ts +216 -209
  356. package/dist/types/streams.js +7 -7
  357. package/dist/utils/asyncIterator.d.ts +25 -32
  358. package/dist/utils/asyncIterator.js +25 -32
  359. package/dist/utils/duration.d.ts +12 -15
  360. package/dist/utils/duration.js +12 -15
  361. package/dist/utils/mobxSetup.d.ts +53 -0
  362. package/dist/utils/{mobx-setup.js → mobxSetup.js} +44 -100
  363. package/dist/webhooks/events.d.ts +21 -16
  364. package/dist/webhooks/events.js +10 -8
  365. package/dist/webhooks/index.d.ts +5 -7
  366. package/dist/webhooks/index.js +5 -7
  367. package/dist/{schema/sync-delta-wire.d.ts → wire/delta.d.ts} +58 -41
  368. package/dist/wire/delta.js +114 -0
  369. package/dist/wire/errorEnvelope.d.ts +35 -27
  370. package/dist/wire/errorEnvelope.js +38 -32
  371. package/dist/wire/frames.d.ts +150 -67
  372. package/dist/wire/frames.js +48 -1
  373. package/dist/wire/index.d.ts +18 -13
  374. package/dist/wire/index.js +36 -13
  375. package/dist/wire/listEnvelope.d.ts +16 -23
  376. package/dist/wire/listEnvelope.js +7 -6
  377. package/dist/wire/protocol.d.ts +38 -0
  378. package/dist/wire/protocol.js +38 -0
  379. package/dist/wire/protocolVersion.d.ts +60 -0
  380. package/dist/wire/protocolVersion.js +67 -0
  381. package/docs/api-keys.md +4 -3
  382. package/docs/coordination.md +59 -0
  383. package/docs/examples/existing-python-backend.md +3 -3
  384. package/docs/identity.md +4 -4
  385. package/docs/integration-guide.md +1 -1
  386. package/docs/react.md +1 -1
  387. package/docs/sessions.md +5 -7
  388. package/package.json +24 -21
  389. package/dist/ai-sdk/coordinated-tool.d.ts +0 -101
  390. package/dist/ai-sdk/coordination-context.d.ts +0 -52
  391. package/dist/client/index.d.ts +0 -36
  392. package/dist/client/index.js +0 -33
  393. package/dist/config/index.d.ts +0 -10
  394. package/dist/config/index.js +0 -12
  395. package/dist/core/query-utils.d.ts +0 -34
  396. package/dist/core/query-utils.js +0 -59
  397. package/dist/interfaces/headless.d.ts +0 -95
  398. package/dist/interfaces/headless.js +0 -41
  399. package/dist/query/index.d.ts +0 -6
  400. package/dist/query/index.js +0 -5
  401. package/dist/realtime/index.d.ts +0 -10
  402. package/dist/realtime/index.js +0 -9
  403. package/dist/schema/plane.d.ts +0 -23
  404. package/dist/schema/plane.js +0 -19
  405. package/dist/schema/sync-delta-row.js +0 -103
  406. package/dist/schema/sync-delta-wire.js +0 -102
  407. package/dist/server/next.d.ts +0 -51
  408. package/dist/server/next.js +0 -47
  409. package/dist/server/read-config.d.ts +0 -67
  410. package/dist/server/read-config.js +0 -8
  411. package/dist/server/storage-mode.d.ts +0 -1
  412. package/dist/server/storage-mode.js +0 -18
  413. package/dist/source/connector-protocol.d.ts +0 -159
  414. package/dist/source/connector-protocol.js +0 -161
  415. package/dist/sync/OfflineFlush.d.ts +0 -9
  416. package/dist/sync/OfflineFlush.js +0 -22
  417. package/dist/sync/OfflineTransactionStore.d.ts +0 -37
  418. package/dist/sync/OfflineTransactionStore.js +0 -263
  419. package/dist/transactions/OptimisticEchoTracker.d.ts +0 -82
  420. package/dist/transactions/OptimisticEchoTracker.js +0 -104
  421. package/dist/transactions/index.d.ts +0 -16
  422. package/dist/transactions/index.js +0 -7
  423. package/dist/transactions/mutation-error-handler.d.ts +0 -5
  424. package/dist/transactions/mutation-error-handler.js +0 -39
  425. package/dist/utils/mobx-setup.d.ts +0 -42
@@ -1,67 +0,0 @@
1
- /**
2
- * `@abloatai/ablo/server` — per-model READ configuration the bootstrap
3
- * reader consumes. Host-side type config (physical table, tenancy column,
4
- * parent-scoping) — pure data, no `postgres` — so it lives in the server
5
- * subpath and feeds the `DataAdapter` read contract. The SQL that consumes it
6
- * (the bootstrap query builder) stays host-side.
7
- */
8
- /** A field→column mapping with an explicit post-`SELECT *` alias. */
9
- export interface ColumnOverride {
10
- readonly field: string;
11
- readonly column: string;
12
- readonly alias: string;
13
- }
14
- export interface BootstrapModel {
15
- name: string;
16
- /**
17
- * Additional names accepted for request-side lookup/filtering. In DB-canonical
18
- * mode `name` stays the physical table name, while aliases cover generated
19
- * compatibility names such as `WeatherReports` / `weatherReports`.
20
- */
21
- aliases?: readonly string[];
22
- /**
23
- * Schema key used by source endpoints. `name` remains the wire/result model
24
- * name, usually the typename; source handlers are keyed by the developer's
25
- * schema object (`files`, `slideLayers`, ...).
26
- */
27
- sourceModel?: string;
28
- table: string;
29
- syncGroups?: string[];
30
- enabled?: boolean;
31
- /** Max rows to return. Omit for unlimited. Maps to schema's bootstrapLimit. */
32
- limit?: number;
33
- /** SQL ORDER BY clause. Default: 'id'. Maps to schema's bootstrapOrderBy. */
34
- orderBy?: string;
35
- /** Whether the table has organization_id. Default: true. */
36
- orgScoped?: boolean;
37
- /** Physical tenancy column (default `organization_id`, configurable per model). */
38
- orgColumn?: string;
39
- /**
40
- * Parent-table scoping for rows with no `organization_id` column. Mirrors the
41
- * schema's `scopedVia` option. When set, the bootstrap query emits:
42
- *
43
- * WHERE <table>.<localKey> IN
44
- * (SELECT <parentKey> FROM <parentTable> WHERE <parentOrgColumn> = $1)
45
- *
46
- * Applied IN ADDITION TO whatever `orgScoped` dictates — so a table can have
47
- * its own `organization_id` AND further narrow via a parent, though the common
48
- * use is `orgScoped: false` + `scopedVia` on tables that lack the column.
49
- */
50
- scopedVia?: {
51
- localKey: string;
52
- parentTable: string;
53
- parentKey?: string;
54
- parentOrgColumn?: string;
55
- };
56
- /** Client-facing field name → physical DB column for declared fields. */
57
- fieldColumns?: Record<string, string>;
58
- /** Physical-column aliases needed after SELECT * for `.from(...)` fields. */
59
- columnOverrides?: readonly ColumnOverride[];
60
- /**
61
- * Physical columns the schema declares as `json` (`field.json()`). A json
62
- * field stored in a TEXT column comes back from `row_to_json` as a serialized
63
- * string; the bootstrap re-parses these so the wire is the canonical object
64
- * regardless of physical column type (jsonb returns objects natively → no-op).
65
- */
66
- jsonColumns?: readonly string[];
67
- }
@@ -1,8 +0,0 @@
1
- /**
2
- * `@abloatai/ablo/server` — per-model READ configuration the bootstrap
3
- * reader consumes. Host-side type config (physical table, tenancy column,
4
- * parent-scoping) — pure data, no `postgres` — so it lives in the server
5
- * subpath and feeds the `DataAdapter` read contract. The SQL that consumes it
6
- * (the bootstrap query builder) stays host-side.
7
- */
8
- export {};
@@ -1 +0,0 @@
1
- export {};
@@ -1,18 +0,0 @@
1
- /**
2
- * `@abloatai/ablo/server` — the storage-mode vocabulary the `DataAdapter`
3
- * contract supports. Analogous to Better Auth's adapter `id`/`adapterId`: a
4
- * diagnostic discriminator on the adapter, NOT a routing switch (routing goes
5
- * through the resolver/factory). The package owns this enum so the contract and
6
- * every host adapter agree on the closed set:
7
- * - `hosted` — Ablo's control-plane database.
8
- * - `selfHosted` — the customer's database, same execution path as hosted.
9
- * - `source` — a customer-owned endpoint (credentialless ingestion).
10
- *
11
- * @internal Deployment topology, not product vocabulary. Customers never see a
12
- * "storage mode" — their story is `Ablo({ schema, apiKey, databaseUrl })` and
13
- * one `datasource` resource (docs/plans/sync-engine-stripe-story-scope.md).
14
- * This export exists for the sync-server host only.
15
- */
16
- import { z } from 'zod';
17
- /** @internal See module note — host-deployment vocabulary, never customer-facing. */
18
- export const storageModeSchema = z.enum(['hosted', 'source', 'selfHosted']);
@@ -1,159 +0,0 @@
1
- /**
2
- * Data Source reverse-channel wire protocol.
3
- *
4
- * The `commit`/`load`/`list` leg of Data Source mode is normally an INBOUND
5
- * webhook (Ablo Cloud → your HTTPS endpoint). That requires a public URL, so it
6
- * doesn't work on `localhost` or inside a locked-down VPC with no inbound path.
7
- *
8
- * The reverse channel inverts the direction: the customer's connector dials OUT
9
- * to Ablo Cloud over a WebSocket and serves those same requests over the open
10
- * socket — the Stripe-CLI `stripe listen` pattern. This module defines the
11
- * frames that travel over that socket.
12
- *
13
- * Trust model is unchanged. A `request` frame carries the SAME Standard Webhooks
14
- * signature headers (`webhook-id` / `webhook-timestamp` / `webhook-signature`)
15
- * and the SAME raw body Ablo would have POSTed, so the connector verifies it
16
- * through the unchanged `verifyAbloSourceRequest`. Only the transport differs.
17
- *
18
- * Frames are validated with zod at the boundary (matching `contract.ts`): a
19
- * malformed frame is rejected at the edge, and every wire type is inferred from
20
- * one schema so the two sides can never silently drift.
21
- */
22
- import { z } from 'zod';
23
- /**
24
- * Wire-protocol version. Bumped on any breaking frame-shape change so an old
25
- * connector talking to a new server (or vice-versa) fails fast at `register`
26
- * instead of misparsing a frame mid-stream.
27
- */
28
- export declare const SOURCE_CONNECTOR_PROTOCOL_VERSION = 1;
29
- /** Path the connector dials. Appended to the connector's `baseURL`. */
30
- export declare const SOURCE_CONNECTOR_WS_PATH = "/v1/source/listen";
31
- /**
32
- * Negotiated WebSocket subprotocol that marks a reverse-channel source
33
- * connector (vs. the SDK sync client's `ablo.sync.v1`). The server selects and
34
- * echoes back ONLY this value, never the token-bearing subprotocol — keeping the
35
- * credential out of ALB / proxy logs exactly like the sync socket does.
36
- */
37
- export declare const WS_SOURCE_SUBPROTOCOL = "ablo.source.v1";
38
- /**
39
- * Build the `Sec-WebSocket-Protocol` list a connector offers: the source
40
- * protocol plus the bearer credential (`ablo.bearer.<apiKey>`). Browsers can't
41
- * set an `Authorization` header on a WebSocket, so the API key rides as a
42
- * subprotocol — the same mechanism the SDK sync client uses, read server-side by
43
- * the shared `extractBearer`.
44
- */
45
- export declare function sourceConnectorSubprotocols(apiKey: string): string[];
46
- /**
47
- * Connector → server, first frame after the socket opens and authenticates.
48
- * Auth and source resolution happen at the WS handshake from the API key; this
49
- * frame only carries protocol negotiation + advisory metadata.
50
- */
51
- export declare const registerFrameSchema: z.ZodObject<{
52
- type: z.ZodLiteral<"register">;
53
- protocolVersion: z.ZodNumber;
54
- client: z.ZodOptional<z.ZodString>;
55
- }, z.core.$strip>;
56
- export type RegisterFrame = z.infer<typeof registerFrameSchema>;
57
- /**
58
- * Server → connector, acknowledges a successful `register`. Echoes the resolved
59
- * source identity so the connector can log/verify which source it is serving.
60
- */
61
- export declare const readyFrameSchema: z.ZodObject<{
62
- type: z.ZodLiteral<"ready">;
63
- protocolVersion: z.ZodNumber;
64
- sourceId: z.ZodOptional<z.ZodString>;
65
- organizationId: z.ZodOptional<z.ZodString>;
66
- environment: z.ZodOptional<z.ZodEnum<{
67
- production: "production";
68
- sandbox: "sandbox";
69
- }>>;
70
- }, z.core.$strip>;
71
- export type ReadyFrame = z.infer<typeof readyFrameSchema>;
72
- /**
73
- * Server → connector, one drained `commit`/`load`/`list` request. `headers` and
74
- * `body` are byte-identical to what the inbound webhook path would have sent —
75
- * the connector replays them into a synthesized `Request` so the unchanged
76
- * handler verifies the signature exactly as in production.
77
- */
78
- export declare const requestFrameSchema: z.ZodObject<{
79
- type: z.ZodLiteral<"request">;
80
- id: z.ZodString;
81
- method: z.ZodLiteral<"POST">;
82
- url: z.ZodString;
83
- headers: z.ZodRecord<z.ZodString, z.ZodString>;
84
- body: z.ZodString;
85
- }, z.core.$strip>;
86
- export type RequestFrame = z.infer<typeof requestFrameSchema>;
87
- /**
88
- * Connector → server, the handler's `Response` for one `request`. The server
89
- * resolves the pending request keyed by `id` and feeds `status`/`body` back to
90
- * the `SourceClient` as if an HTTP response had returned.
91
- */
92
- export declare const responseFrameSchema: z.ZodObject<{
93
- type: z.ZodLiteral<"response">;
94
- id: z.ZodString;
95
- status: z.ZodNumber;
96
- headers: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
97
- body: z.ZodString;
98
- }, z.core.$strip>;
99
- export type ResponseFrame = z.infer<typeof responseFrameSchema>;
100
- /**
101
- * Either direction, out-of-band failure not tied to a single request body
102
- * (auth rejected, unsupported protocol version, malformed frame). When `id` is
103
- * present the error pertains to that pending request and fails it; otherwise it
104
- * is a connection-level error.
105
- */
106
- export declare const errorFrameSchema: z.ZodObject<{
107
- type: z.ZodLiteral<"error">;
108
- id: z.ZodOptional<z.ZodString>;
109
- code: z.ZodString;
110
- message: z.ZodString;
111
- }, z.core.$strip>;
112
- export type ErrorFrame = z.infer<typeof errorFrameSchema>;
113
- export declare const connectorFrameSchema: z.ZodDiscriminatedUnion<[z.ZodObject<{
114
- type: z.ZodLiteral<"register">;
115
- protocolVersion: z.ZodNumber;
116
- client: z.ZodOptional<z.ZodString>;
117
- }, z.core.$strip>, z.ZodObject<{
118
- type: z.ZodLiteral<"ready">;
119
- protocolVersion: z.ZodNumber;
120
- sourceId: z.ZodOptional<z.ZodString>;
121
- organizationId: z.ZodOptional<z.ZodString>;
122
- environment: z.ZodOptional<z.ZodEnum<{
123
- production: "production";
124
- sandbox: "sandbox";
125
- }>>;
126
- }, z.core.$strip>, z.ZodObject<{
127
- type: z.ZodLiteral<"request">;
128
- id: z.ZodString;
129
- method: z.ZodLiteral<"POST">;
130
- url: z.ZodString;
131
- headers: z.ZodRecord<z.ZodString, z.ZodString>;
132
- body: z.ZodString;
133
- }, z.core.$strip>, z.ZodObject<{
134
- type: z.ZodLiteral<"response">;
135
- id: z.ZodString;
136
- status: z.ZodNumber;
137
- headers: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
138
- body: z.ZodString;
139
- }, z.core.$strip>, z.ZodObject<{
140
- type: z.ZodLiteral<"error">;
141
- id: z.ZodOptional<z.ZodString>;
142
- code: z.ZodString;
143
- message: z.ZodString;
144
- }, z.core.$strip>], "type">;
145
- export type ConnectorFrame = z.infer<typeof connectorFrameSchema>;
146
- /** Thrown when an incoming frame fails to parse or validate. */
147
- export declare class ConnectorProtocolError extends Error {
148
- readonly code = "source_connector_protocol_error";
149
- constructor(message: string);
150
- }
151
- /** Serialize a frame for transmission. */
152
- export declare function encodeFrame(frame: ConnectorFrame): string;
153
- /**
154
- * Parse + validate an incoming frame. Accepts the string or binary payloads the
155
- * `ws` library / WebSocket `message` events deliver. Throws
156
- * `ConnectorProtocolError` on any malformed or unknown frame so callers can
157
- * reject the connection rather than act on garbage.
158
- */
159
- export declare function decodeFrame(raw: string | ArrayBuffer | Uint8Array): ConnectorFrame;
@@ -1,161 +0,0 @@
1
- /**
2
- * Data Source reverse-channel wire protocol.
3
- *
4
- * The `commit`/`load`/`list` leg of Data Source mode is normally an INBOUND
5
- * webhook (Ablo Cloud → your HTTPS endpoint). That requires a public URL, so it
6
- * doesn't work on `localhost` or inside a locked-down VPC with no inbound path.
7
- *
8
- * The reverse channel inverts the direction: the customer's connector dials OUT
9
- * to Ablo Cloud over a WebSocket and serves those same requests over the open
10
- * socket — the Stripe-CLI `stripe listen` pattern. This module defines the
11
- * frames that travel over that socket.
12
- *
13
- * Trust model is unchanged. A `request` frame carries the SAME Standard Webhooks
14
- * signature headers (`webhook-id` / `webhook-timestamp` / `webhook-signature`)
15
- * and the SAME raw body Ablo would have POSTed, so the connector verifies it
16
- * through the unchanged `verifyAbloSourceRequest`. Only the transport differs.
17
- *
18
- * Frames are validated with zod at the boundary (matching `contract.ts`): a
19
- * malformed frame is rejected at the edge, and every wire type is inferred from
20
- * one schema so the two sides can never silently drift.
21
- */
22
- import { z } from 'zod';
23
- import { WS_BEARER_SUBPROTOCOL_PREFIX } from '../auth/credentialSource.js';
24
- /**
25
- * Wire-protocol version. Bumped on any breaking frame-shape change so an old
26
- * connector talking to a new server (or vice-versa) fails fast at `register`
27
- * instead of misparsing a frame mid-stream.
28
- */
29
- export const SOURCE_CONNECTOR_PROTOCOL_VERSION = 1;
30
- /** Path the connector dials. Appended to the connector's `baseURL`. */
31
- export const SOURCE_CONNECTOR_WS_PATH = '/v1/source/listen';
32
- /**
33
- * Negotiated WebSocket subprotocol that marks a reverse-channel source
34
- * connector (vs. the SDK sync client's `ablo.sync.v1`). The server selects and
35
- * echoes back ONLY this value, never the token-bearing subprotocol — keeping the
36
- * credential out of ALB / proxy logs exactly like the sync socket does.
37
- */
38
- export const WS_SOURCE_SUBPROTOCOL = 'ablo.source.v1';
39
- /**
40
- * Build the `Sec-WebSocket-Protocol` list a connector offers: the source
41
- * protocol plus the bearer credential (`ablo.bearer.<apiKey>`). Browsers can't
42
- * set an `Authorization` header on a WebSocket, so the API key rides as a
43
- * subprotocol — the same mechanism the SDK sync client uses, read server-side by
44
- * the shared `extractBearer`.
45
- */
46
- export function sourceConnectorSubprotocols(apiKey) {
47
- return [WS_SOURCE_SUBPROTOCOL, `${WS_BEARER_SUBPROTOCOL_PREFIX}${apiKey}`];
48
- }
49
- const headerRecord = z.record(z.string(), z.string());
50
- /**
51
- * Connector → server, first frame after the socket opens and authenticates.
52
- * Auth and source resolution happen at the WS handshake from the API key; this
53
- * frame only carries protocol negotiation + advisory metadata.
54
- */
55
- export const registerFrameSchema = z.object({
56
- type: z.literal('register'),
57
- protocolVersion: z.number().int(),
58
- /**
59
- * Advisory client identifier (e.g. `@abloatai/ablo@0.12.0`) for server-side
60
- * logging. Not trusted for any decision.
61
- */
62
- client: z.string().optional(),
63
- });
64
- /**
65
- * Server → connector, acknowledges a successful `register`. Echoes the resolved
66
- * source identity so the connector can log/verify which source it is serving.
67
- */
68
- export const readyFrameSchema = z.object({
69
- type: z.literal('ready'),
70
- protocolVersion: z.number().int(),
71
- sourceId: z.string().optional(),
72
- organizationId: z.string().optional(),
73
- environment: z.enum(['production', 'sandbox']).optional(),
74
- });
75
- /**
76
- * Server → connector, one drained `commit`/`load`/`list` request. `headers` and
77
- * `body` are byte-identical to what the inbound webhook path would have sent —
78
- * the connector replays them into a synthesized `Request` so the unchanged
79
- * handler verifies the signature exactly as in production.
80
- */
81
- export const requestFrameSchema = z.object({
82
- type: z.literal('request'),
83
- /** Correlation id; the matching `response` frame carries the same value. */
84
- id: z.string().min(1),
85
- method: z.literal('POST'),
86
- /** Synthetic absolute URL used only to construct the `Request` object. */
87
- url: z.string().min(1),
88
- /** Signed Standard Webhooks headers + `Content-Type`. */
89
- headers: headerRecord,
90
- /** Raw JSON request body — exactly the bytes that were signed. */
91
- body: z.string(),
92
- });
93
- /**
94
- * Connector → server, the handler's `Response` for one `request`. The server
95
- * resolves the pending request keyed by `id` and feeds `status`/`body` back to
96
- * the `SourceClient` as if an HTTP response had returned.
97
- */
98
- export const responseFrameSchema = z.object({
99
- type: z.literal('response'),
100
- id: z.string().min(1),
101
- status: z.number().int(),
102
- headers: headerRecord.optional(),
103
- /** Raw JSON response body. */
104
- body: z.string(),
105
- });
106
- /**
107
- * Either direction, out-of-band failure not tied to a single request body
108
- * (auth rejected, unsupported protocol version, malformed frame). When `id` is
109
- * present the error pertains to that pending request and fails it; otherwise it
110
- * is a connection-level error.
111
- */
112
- export const errorFrameSchema = z.object({
113
- type: z.literal('error'),
114
- id: z.string().min(1).optional(),
115
- code: z.string().min(1),
116
- message: z.string(),
117
- });
118
- export const connectorFrameSchema = z.discriminatedUnion('type', [
119
- registerFrameSchema,
120
- readyFrameSchema,
121
- requestFrameSchema,
122
- responseFrameSchema,
123
- errorFrameSchema,
124
- ]);
125
- /** Thrown when an incoming frame fails to parse or validate. */
126
- export class ConnectorProtocolError extends Error {
127
- code = 'source_connector_protocol_error';
128
- constructor(message) {
129
- super(message);
130
- this.name = 'ConnectorProtocolError';
131
- }
132
- }
133
- /** Serialize a frame for transmission. */
134
- export function encodeFrame(frame) {
135
- return JSON.stringify(frame);
136
- }
137
- /**
138
- * Parse + validate an incoming frame. Accepts the string or binary payloads the
139
- * `ws` library / WebSocket `message` events deliver. Throws
140
- * `ConnectorProtocolError` on any malformed or unknown frame so callers can
141
- * reject the connection rather than act on garbage.
142
- */
143
- export function decodeFrame(raw) {
144
- const text = typeof raw === 'string' ? raw : decodeBinary(raw);
145
- let parsed;
146
- try {
147
- parsed = JSON.parse(text);
148
- }
149
- catch {
150
- throw new ConnectorProtocolError('Frame is not valid JSON');
151
- }
152
- const result = connectorFrameSchema.safeParse(parsed);
153
- if (!result.success) {
154
- throw new ConnectorProtocolError(`Invalid connector frame: ${result.error.message}`);
155
- }
156
- return result.data;
157
- }
158
- function decodeBinary(raw) {
159
- const bytes = raw instanceof Uint8Array ? raw : new Uint8Array(raw);
160
- return new TextDecoder().decode(bytes);
161
- }
@@ -1,9 +0,0 @@
1
- /**
2
- * OfflineFlush — Replays queued offline mutations on reconnect.
3
- *
4
- * SDK-generic version: delegates to MutationDispatcher from context.
5
- */
6
- export declare function flushOfflineQueueOnce(): Promise<{
7
- processed: number;
8
- failed: number;
9
- }>;
@@ -1,22 +0,0 @@
1
- /**
2
- * OfflineFlush — Replays queued offline mutations on reconnect.
3
- *
4
- * SDK-generic version: delegates to MutationDispatcher from context.
5
- */
6
- import { OfflineTransactionStore } from './OfflineTransactionStore.js';
7
- import { getContext } from '../context.js';
8
- let _offlineTxStore = null;
9
- function getOfflineTxStore() {
10
- if (!_offlineTxStore) {
11
- _offlineTxStore = new OfflineTransactionStore();
12
- }
13
- return _offlineTxStore;
14
- }
15
- export async function flushOfflineQueueOnce() {
16
- const store = getOfflineTxStore();
17
- await store.init();
18
- const dispatcher = getContext().mutationDispatcher;
19
- return store.flush(async (tx) => {
20
- await dispatcher.dispatch(tx.opName, tx.request.variables || {});
21
- });
22
- }
@@ -1,37 +0,0 @@
1
- export declare enum Priority {
2
- CRITICAL = 0,
3
- HIGH = 1,
4
- NORMAL = 2,
5
- LOW = 3
6
- }
7
- export type OfflineTransaction = {
8
- id: string;
9
- opName: string;
10
- priority: Priority;
11
- createdAt: number;
12
- dependsOn?: string[];
13
- request: {
14
- gqlId?: string;
15
- document?: string;
16
- variables?: Record<string, any>;
17
- headers?: Record<string, string>;
18
- method?: string;
19
- url?: string;
20
- body?: any;
21
- };
22
- };
23
- export declare class OfflineTransactionStore {
24
- private db;
25
- private key;
26
- init(): Promise<void>;
27
- enqueue(tx: Omit<OfflineTransaction, 'createdAt'>): Promise<string>;
28
- listAll(): Promise<OfflineTransaction[]>;
29
- getOptimizedSyncOrder(): Promise<OfflineTransaction[]>;
30
- remove(id: string): Promise<void>;
31
- clear(): Promise<void>;
32
- flush(processor: (tx: OfflineTransaction) => Promise<void>): Promise<{
33
- processed: number;
34
- failed: number;
35
- }>;
36
- }
37
- export declare const offlineTxStore: OfflineTransactionStore;