@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
@@ -0,0 +1,88 @@
1
+ /**
2
+ * The auto-heartbeat loop behind `claim({ id, heartbeat: true })` — one
3
+ * implementation shared by both transports (the WebSocket claim stream and the
4
+ * HTTP `ApiClient`), so the cadence and failure semantics cannot drift.
5
+ *
6
+ * A beat is the "still working" signal that keeps a lease alive for the
7
+ * duration of real work. The loop's failure handling follows the lease-system
8
+ * convention (SQS visibility heartbeats, Kubernetes leases): a beat that fails
9
+ * for a transient reason — the network blipped, the server was briefly
10
+ * unavailable — is simply retried on the next tick, because the lease has
11
+ * runway to spare by construction (the default cadence is a third of the TTL,
12
+ * so two consecutive beats can fail before the lease is even at risk). Only a
13
+ * definitive answer from the server — the lease lapsed and may have been
14
+ * granted to the next in line ({@link AbloClaimedError}) — stops the loop and
15
+ * surfaces the loss, because for a caller with no push channel the failed beat
16
+ * IS the loss notification.
17
+ */
18
+ import { AbloClaimedError } from '../errors.js';
19
+ import { toMs } from '../utils/duration.js';
20
+ /**
21
+ * Normalize the public `heartbeat(options?)` argument — a bare Duration is
22
+ * shorthand for `{ ttl }`. Shared by both transports' handle assembly so the
23
+ * shorthand cannot drift.
24
+ */
25
+ export function resolveHeartbeatOptions(input) {
26
+ if (input === undefined)
27
+ return {};
28
+ if (typeof input === 'string' || typeof input === 'number') {
29
+ return { ttl: input };
30
+ }
31
+ return input;
32
+ }
33
+ /**
34
+ * The beat cadence for a lease of `ttlMs`: an explicit duration when the
35
+ * caller set one, otherwise a third of the TTL (floored at 1s) — the
36
+ * DynamoDB-lock-client rule, leaving two missed beats of runway before the
37
+ * lease is at risk while keeping crash recovery within one beat window.
38
+ */
39
+ export function heartbeatCadenceMs(ttlMs, heartbeat) {
40
+ if (heartbeat !== true)
41
+ return toMs(heartbeat);
42
+ return Math.max(Math.floor(ttlMs / 3), 1_000);
43
+ }
44
+ /**
45
+ * Start beating. Returns a stop function; callers stop the loop when the
46
+ * claim is released (all held-claim assembly sites tie this to `release`).
47
+ * Beats never overlap: a tick that fires while the previous beat is still
48
+ * in flight is skipped rather than stacked.
49
+ */
50
+ export function startClaimHeartbeatLoop(options) {
51
+ let stopped = false;
52
+ let inFlight = false;
53
+ const stop = () => {
54
+ if (stopped)
55
+ return;
56
+ stopped = true;
57
+ clearInterval(timer);
58
+ };
59
+ const timer = setInterval(() => {
60
+ if (stopped || inFlight)
61
+ return;
62
+ inFlight = true;
63
+ options
64
+ .beat()
65
+ .catch((error) => {
66
+ if (stopped)
67
+ return;
68
+ if (error instanceof AbloClaimedError) {
69
+ stop();
70
+ options.onLost?.(error);
71
+ return;
72
+ }
73
+ // Transient (connection, brief server unavailability): the next tick
74
+ // is the retry — the ttl/3 cadence leaves runway for missed beats.
75
+ })
76
+ .finally(() => {
77
+ inFlight = false;
78
+ });
79
+ }, options.intervalMs);
80
+ // The loop must never be what keeps a Node process alive — the held work
81
+ // is. A worker that finishes without releasing exits anyway, and the lease
82
+ // lapses on schedule. No-op in browsers (where setInterval returns a number
83
+ // without `unref`), which is why the call is optional even though the Node
84
+ // timer type always has it.
85
+ // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition
86
+ timer.unref?.();
87
+ return stop;
88
+ }
@@ -0,0 +1,35 @@
1
+ /**
2
+ * The default `[Ablo]` console logger and its level resolution.
3
+ *
4
+ * These helpers are exported so any entry point that needs a default logger can
5
+ * reuse the same level gating rather than hand-rolling a console wrapper.
6
+ */
7
+ import type { SyncLogger } from '../interfaces/index.js';
8
+ /**
9
+ * Level threshold for the default console logger.
10
+ *
11
+ * The SDK emits a `debug` line per model and per property during schema
12
+ * registration (see `ModelRegistry`), plus assorted lifecycle chatter. That
13
+ * is verbose by design but carries no actionable signal for app consumers, so
14
+ * the default threshold is `warn` — `debug`/`info` are dropped unless a
15
+ * consumer opts in.
16
+ *
17
+ * Opt back in with `ABLO_LOG_LEVEL=debug` (or `info`/`warn`/`error`/`silent`).
18
+ * Passing a custom `logger` to `Ablo({ logger })` bypasses this entirely.
19
+ */
20
+ export type LogLevel = 'debug' | 'info' | 'warn' | 'error' | 'silent';
21
+ /**
22
+ * Resolve the effective level. Precedence: explicit `logLevel` option →
23
+ * `debug: true` (⇒ debug) → `ABLO_LOG_LEVEL` env → default `warn`. `debug: false`
24
+ * / omitted just means "don't raise the level" — it falls through to env/default
25
+ * rather than force-silencing an ops-set env override.
26
+ */
27
+ export declare function resolveLogLevel(opts?: {
28
+ debug?: boolean;
29
+ logLevel?: LogLevel;
30
+ }): LogLevel;
31
+ /**
32
+ * Builds the default logger, gated at `level` and prefixed `[Ablo]` so its lines
33
+ * stand out in a console full of other tools' output.
34
+ */
35
+ export declare function createConsoleLogger(level: LogLevel): SyncLogger;
@@ -0,0 +1,44 @@
1
+ /**
2
+ * The default `[Ablo]` console logger and its level resolution.
3
+ *
4
+ * These helpers are exported so any entry point that needs a default logger can
5
+ * reuse the same level gating rather than hand-rolling a console wrapper.
6
+ */
7
+ const LOG_LEVEL_RANK = { debug: 10, info: 20, warn: 30, error: 40, silent: 99 };
8
+ /**
9
+ * Resolve the effective level. Precedence: explicit `logLevel` option →
10
+ * `debug: true` (⇒ debug) → `ABLO_LOG_LEVEL` env → default `warn`. `debug: false`
11
+ * / omitted just means "don't raise the level" — it falls through to env/default
12
+ * rather than force-silencing an ops-set env override.
13
+ */
14
+ export function resolveLogLevel(opts) {
15
+ if (opts?.logLevel && opts.logLevel in LOG_LEVEL_RANK)
16
+ return opts.logLevel;
17
+ if (opts?.debug === true)
18
+ return 'debug';
19
+ // `globalThis.process` guard keeps this safe in browser/edge runtimes that
20
+ // have no `process` binding — there we fall through to the default.
21
+ const raw = globalThis.process?.env?.ABLO_LOG_LEVEL;
22
+ const normalized = raw?.toLowerCase();
23
+ if (normalized && normalized in LOG_LEVEL_RANK)
24
+ return normalized;
25
+ return 'warn';
26
+ }
27
+ /**
28
+ * Builds the default logger, gated at `level` and prefixed `[Ablo]` so its lines
29
+ * stand out in a console full of other tools' output.
30
+ */
31
+ export function createConsoleLogger(level) {
32
+ const threshold = LOG_LEVEL_RANK[level];
33
+ const emit = (lvl, fn, args) => {
34
+ if (typeof console === 'undefined' || LOG_LEVEL_RANK[lvl] < threshold)
35
+ return;
36
+ fn('[Ablo]', ...args);
37
+ };
38
+ return {
39
+ debug: (...args) => { emit('debug', console.debug, args); },
40
+ info: (...args) => { emit('info', console.info, args); },
41
+ warn: (...args) => { emit('warn', console.warn, args); },
42
+ error: (...args) => { emit('error', console.error, args); },
43
+ };
44
+ }
@@ -1,28 +1,25 @@
1
1
  /**
2
- * Internal component construction for `Ablo()`.
2
+ * Builds the internal component graph the client runs on.
3
3
  *
4
- * Builds the full sync-engine component graph from options + schema:
5
- * `ModelRegistry`, `ObjectPool`, `BootstrapHelper`, `Database`,
6
- * `SyncClient`, `HydrationCoordinator`. Each component depends on
7
- * the previous one, so the construction order matters; isolating it
8
- * here means `Ablo.ts` doesn't need to know the dependency order.
9
- *
10
- * Mirrors the pattern Anthropic uses: their client constructor wires
11
- * endpoint modules. Ours wires the sync-engine components instead.
4
+ * From the caller's options and schema this wires together the model registry,
5
+ * object pool, bootstrap helper, database, sync client, and hydration
6
+ * coordinator. Each component depends on the one before it, so construction
7
+ * order matters; keeping it here means the client constructor does not have to
8
+ * know that order.
12
9
  */
13
10
  import { Database } from '../Database.js';
14
11
  import { ModelRegistry } from '../ModelRegistry.js';
15
- import { ObjectPool } from '../ObjectPool.js';
12
+ import { InstanceCache } from '../InstanceCache.js';
16
13
  import { SyncClient } from '../SyncClient.js';
17
- import { HydrationCoordinator } from '../sync/HydrationCoordinator.js';
18
- import { BootstrapHelper } from '../sync/BootstrapHelper.js';
14
+ import { OnDemandLoader } from '../sync/OnDemandLoader.js';
15
+ import { BootstrapFetcher } from '../sync/BootstrapFetcher.js';
19
16
  import type { AuthCredentialSource } from '../auth/credentialSource.js';
20
17
  import type { Schema, SchemaRecord } from '../schema/schema.js';
21
18
  import { type AbloPersistence } from './persistence.js';
22
19
  export interface InternalComponentsInput<S extends SchemaRecord> {
23
20
  readonly schema: Schema<S>;
24
- /** WebSocket URL used to derive bootstrap HTTP base when the
25
- * caller didn't override `bootstrapBaseUrl`. */
21
+ /** The WebSocket URL. Used to derive the bootstrap HTTP base URL when the
22
+ * caller has not overridden `bootstrapBaseUrl`. */
26
23
  readonly url: string;
27
24
  readonly options: {
28
25
  readonly maxPoolSize?: number;
@@ -36,10 +33,10 @@ export interface InternalComponentsInput<S extends SchemaRecord> {
36
33
  }
37
34
  export interface InternalComponents {
38
35
  readonly modelRegistry: ModelRegistry;
39
- readonly objectPool: ObjectPool;
40
- readonly bootstrapHelper: BootstrapHelper;
36
+ readonly objectPool: InstanceCache;
37
+ readonly bootstrapHelper: BootstrapFetcher;
41
38
  readonly database: Database;
42
39
  readonly syncClient: SyncClient;
43
- readonly hydration: HydrationCoordinator;
40
+ readonly hydration: OnDemandLoader;
44
41
  }
45
42
  export declare function createInternalComponents<S extends SchemaRecord>(input: InternalComponentsInput<S>): InternalComponents;
@@ -1,56 +1,52 @@
1
1
  /**
2
- * Internal component construction for `Ablo()`.
2
+ * Builds the internal component graph the client runs on.
3
3
  *
4
- * Builds the full sync-engine component graph from options + schema:
5
- * `ModelRegistry`, `ObjectPool`, `BootstrapHelper`, `Database`,
6
- * `SyncClient`, `HydrationCoordinator`. Each component depends on
7
- * the previous one, so the construction order matters; isolating it
8
- * here means `Ablo.ts` doesn't need to know the dependency order.
9
- *
10
- * Mirrors the pattern Anthropic uses: their client constructor wires
11
- * endpoint modules. Ours wires the sync-engine components instead.
4
+ * From the caller's options and schema this wires together the model registry,
5
+ * object pool, bootstrap helper, database, sync client, and hydration
6
+ * coordinator. Each component depends on the one before it, so construction
7
+ * order matters; keeping it here means the client constructor does not have to
8
+ * know that order.
12
9
  */
13
10
  import { Database } from '../Database.js';
14
11
  import { ModelRegistry, setActiveRegistry } from '../ModelRegistry.js';
15
- import { ObjectPool } from '../ObjectPool.js';
12
+ import { InstanceCache } from '../InstanceCache.js';
16
13
  import { SyncClient } from '../SyncClient.js';
17
- import { HydrationCoordinator } from '../sync/HydrationCoordinator.js';
18
- import { BootstrapHelper } from '../sync/BootstrapHelper.js';
14
+ import { OnDemandLoader } from '../sync/OnDemandLoader.js';
15
+ import { BootstrapFetcher } from '../sync/BootstrapFetcher.js';
19
16
  import { resolveBootstrapBaseUrl } from './auth.js';
20
17
  import { shouldUseInMemoryPersistence } from './persistence.js';
21
18
  export function createInternalComponents(input) {
22
19
  const { schema, url, options, auth } = input;
23
- // The registry is created here but model registration happens in
24
- // the caller (Ablo.ts owns `registerModelsFromSchema` since the
25
- // schema-to-class translation depends on private helpers there).
20
+ // The registry is created here, but model registration happens in the caller,
21
+ // which owns the schema-to-class translation.
26
22
  const modelRegistry = new ModelRegistry({
27
23
  validateOnRegister: false,
28
24
  allowLateReferences: true,
29
25
  });
30
26
  setActiveRegistry(modelRegistry);
31
- const objectPool = new ObjectPool({ maxSize: options.maxPoolSize ?? 10000 }, modelRegistry);
27
+ const objectPool = new InstanceCache({ maxSize: options.maxPoolSize ?? 10000 }, modelRegistry);
32
28
  const bootstrapBaseUrl = resolveBootstrapBaseUrl({
33
29
  url,
34
30
  bootstrapBaseUrl: options.bootstrapBaseUrl,
35
31
  });
36
- const bootstrapHelper = new BootstrapHelper({
32
+ const bootstrapHelper = new BootstrapFetcher({
37
33
  baseUrl: bootstrapBaseUrl,
38
34
  syncGroups: options.syncGroups,
39
35
  instantModels: deriveInstantModels(schema),
40
36
  getAuthToken: auth?.getAuthToken,
41
37
  });
42
38
  const database = new Database(modelRegistry, bootstrapHelper, {
43
- // Point-solution default: no browser-local durable store unless the
44
- // caller explicitly asks for it. Node/edge runtimes always use the
45
- // in-memory store because IndexedDB is unavailable there.
39
+ // By default there is no browser-local durable store unless the caller asks
40
+ // for one. Node and edge runtimes always use the in-memory store because
41
+ // IndexedDB is unavailable there.
46
42
  inMemory: shouldUseInMemoryPersistence(options),
47
43
  });
48
44
  const syncClient = new SyncClient(objectPool, database);
49
- // Lazy-load lane: hydrates pool/IDB on `ablo.<model>.load(...)` for
50
- // entities not in scope at bootstrap (`load: 'lazy'` models, or
51
- // entities accessed via deep-link before the pool warmed up).
52
- // Single-flight + IDB write-through.
53
- const hydration = new HydrationCoordinator({
45
+ // Lazy-load lane: hydrates the object pool and IndexedDB on demand for
46
+ // entities not in scope at bootstrap (`load: 'lazy'` models, or an entity
47
+ // reached by deep link before the pool warmed up). Single-flight, with
48
+ // write-through to IndexedDB.
49
+ const hydration = new OnDemandLoader({
54
50
  objectPool,
55
51
  database,
56
52
  registry: modelRegistry,
@@ -62,7 +58,7 @@ export function createInternalComponents(input) {
62
58
  // WebSocket delta stream keeps hydrated rows fresh so repeat reads serve
63
59
  // pure-local with no network; after a drop, deltas may have been missed, so
64
60
  // the next read of each query must re-confirm with the server once.
65
- syncClient.on('sync:reconnecting', () => hydration.invalidate());
61
+ syncClient.on('sync:reconnecting', () => { hydration.invalidate(); });
66
62
  return {
67
63
  modelRegistry,
68
64
  objectPool,
@@ -73,11 +69,10 @@ export function createInternalComponents(input) {
73
69
  };
74
70
  }
75
71
  /**
76
- * Derive instant-bootstrap model names from schema load strategies.
77
- * Models with `load: 'lazy'` or `'manual'` are excluded from the
78
- * initial bootstrap request they're fetched on demand by the
79
- * `ensure*` loaders or (Phase 6) by the `ObjectPool` auto-fetch
80
- * mechanism. Default load strategy is `'instant'`.
72
+ * Derives the set of models to fetch in the initial bootstrap request from each
73
+ * model's load strategy. Models declared `load: 'lazy'` or `'manual'` are left
74
+ * out of the bootstrap and fetched on demand instead. The default strategy is
75
+ * `'instant'`, which includes the model.
81
76
  */
82
77
  function deriveInstantModels(schema) {
83
78
  const schemaModels = schema.models ?? schema;