@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,17 +1,43 @@
1
1
  /**
2
- * Linear Sync Engine - Sync Action Store
3
- *
4
- * Stores and manages sync actions received from the server.
5
- * Critical for delta sync and maintaining sync state consistency.
2
+ * A local, IndexedDB-backed store for the sync actions (change deltas) the
3
+ * server sends. See {@link SyncActionStore}.
6
4
  */
5
+ // Uses native IndexedDB for maximum performance
6
+ import { z } from 'zod';
7
+ import { getContext } from '../context.js';
7
8
  /**
8
- * SyncActionStore - Manages sync actions (deltas)
9
- *
10
- * Features:
11
- * - Stores sync actions by ID for replay
12
- * - Tracks applied vs pending actions
13
- * - Enables rewind/replay for conflict resolution
14
- * - Maintains sync watermark
9
+ * The validation boundary for rows read back from the store. A row may have
10
+ * been written by an earlier session, so this build cannot assume its shape.
11
+ * Parsing in strip mode also drops the storage bookkeeping fields
12
+ * (`storedAt`, `applied`, `appliedAt`) that are not part of a
13
+ * {@link SyncAction}. A row that fails to parse is dropped and logged rather
14
+ * than replayed as a malformed delta.
15
+ */
16
+ const storedSyncActionSchema = z.object({
17
+ id: z.number(),
18
+ modelName: z.string(),
19
+ modelId: z.string(),
20
+ action: z.enum(['I', 'U', 'A', 'D', 'C', 'G', 'S', 'V']),
21
+ data: z.unknown(),
22
+ __class: z.literal('SyncAction').default('SyncAction'),
23
+ });
24
+ /** Parse one stored row into a SyncAction, or `null` (dropped + logged). */
25
+ function toSyncAction(row) {
26
+ const parsed = storedSyncActionSchema.safeParse(row);
27
+ if (!parsed.success) {
28
+ getContext().logger.debug('[SyncActionStore] Dropping malformed stored sync action', {
29
+ issues: parsed.error.issues.map((i) => i.path.join('.')).join(', '),
30
+ });
31
+ return null;
32
+ }
33
+ return parsed.data;
34
+ }
35
+ /**
36
+ * Stores the sync actions (the change deltas) the server sends, keyed by
37
+ * their sync id, and tracks which ones have been applied. It keeps a
38
+ * watermark of the last applied id, holds not-yet-applied actions as
39
+ * pending, and can rewind a range of actions back to pending so they can be
40
+ * replayed while resolving a conflict.
15
41
  */
16
42
  export class SyncActionStore {
17
43
  db;
@@ -51,8 +77,8 @@ export class SyncActionStore {
51
77
  }
52
78
  resolve();
53
79
  };
54
- tx.onerror = () => reject(tx.error);
55
- request.onerror = () => reject(request.error);
80
+ tx.onerror = () => { reject(tx.error); };
81
+ request.onerror = () => { reject(request.error); };
56
82
  });
57
83
  }
58
84
  /**
@@ -83,10 +109,10 @@ export class SyncActionStore {
83
109
  }
84
110
  }
85
111
  };
86
- request.onerror = () => reject(request.error);
112
+ request.onerror = () => { reject(request.error); };
87
113
  }
88
- tx.oncomplete = () => resolve();
89
- tx.onerror = () => reject(tx.error);
114
+ tx.oncomplete = () => { resolve(); };
115
+ tx.onerror = () => { reject(tx.error); };
90
116
  });
91
117
  }
92
118
  /**
@@ -103,10 +129,9 @@ export class SyncActionStore {
103
129
  resolve(undefined);
104
130
  return;
105
131
  }
106
- const { storedAt, applied, ...action } = data;
107
- resolve(action);
132
+ resolve(toSyncAction(data) ?? undefined);
108
133
  };
109
- request.onerror = () => reject(request.error);
134
+ request.onerror = () => { reject(request.error); };
110
135
  });
111
136
  }
112
137
  /**
@@ -121,10 +146,12 @@ export class SyncActionStore {
121
146
  const request = index.getAll(range);
122
147
  request.onsuccess = () => {
123
148
  const allData = request.result;
124
- const actions = allData.map(({ storedAt, applied, ...action }) => action);
149
+ const actions = allData
150
+ .map(toSyncAction)
151
+ .filter((action) => action !== null);
125
152
  resolve(actions);
126
153
  };
127
- request.onerror = () => reject(request.error);
154
+ request.onerror = () => { reject(request.error); };
128
155
  });
129
156
  }
130
157
  /**
@@ -142,7 +169,9 @@ export class SyncActionStore {
142
169
  * Mark sync action as applied
143
170
  */
144
171
  async markAsApplied(syncId) {
145
- return new Promise(async (resolve, reject) => {
172
+ // Plain (non-async) executor: a sync throw (e.g. transaction() on a
173
+ // closing DB) must reject this promise, not vanish into an ignored one.
174
+ return new Promise((resolve, reject) => {
146
175
  const tx = this.db.transaction([this.storeName], 'readwrite');
147
176
  const store = tx.objectStore(this.storeName);
148
177
  const getRequest = store.get(syncId);
@@ -152,10 +181,10 @@ export class SyncActionStore {
152
181
  existing.applied = true;
153
182
  existing.appliedAt = Date.now();
154
183
  const putRequest = store.put(existing);
155
- putRequest.onerror = () => reject(putRequest.error);
184
+ putRequest.onerror = () => { reject(putRequest.error); };
156
185
  }
157
186
  };
158
- getRequest.onerror = () => reject(getRequest.error);
187
+ getRequest.onerror = () => { reject(getRequest.error); };
159
188
  tx.oncomplete = async () => {
160
189
  // Update tracking
161
190
  if (syncId > this.lastAppliedSyncId) {
@@ -172,7 +201,7 @@ export class SyncActionStore {
172
201
  reject(error);
173
202
  }
174
203
  };
175
- tx.onerror = () => reject(tx.error);
204
+ tx.onerror = () => { reject(tx.error); };
176
205
  });
177
206
  }
178
207
  /**
@@ -181,7 +210,7 @@ export class SyncActionStore {
181
210
  async markManyAsApplied(syncIds) {
182
211
  if (syncIds.length === 0)
183
212
  return;
184
- return new Promise(async (resolve, reject) => {
213
+ return new Promise((resolve, reject) => {
185
214
  const tx = this.db.transaction([this.storeName], 'readwrite');
186
215
  const store = tx.objectStore(this.storeName);
187
216
  let processed = 0;
@@ -206,14 +235,14 @@ export class SyncActionStore {
206
235
  }
207
236
  }
208
237
  };
209
- putRequest.onerror = () => reject(putRequest.error);
238
+ putRequest.onerror = () => { reject(putRequest.error); };
210
239
  }
211
240
  else {
212
241
  processed++;
213
242
  this.pendingActions.delete(syncId);
214
243
  }
215
244
  };
216
- getRequest.onerror = () => reject(getRequest.error);
245
+ getRequest.onerror = () => { reject(getRequest.error); };
217
246
  }
218
247
  tx.oncomplete = async () => {
219
248
  // Update metadata with the highest sync ID
@@ -231,7 +260,7 @@ export class SyncActionStore {
231
260
  resolve();
232
261
  }
233
262
  };
234
- tx.onerror = () => reject(tx.error);
263
+ tx.onerror = () => { reject(tx.error); };
235
264
  });
236
265
  }
237
266
  /**
@@ -265,7 +294,7 @@ export class SyncActionStore {
265
294
  currentId++;
266
295
  checkNext();
267
296
  };
268
- request.onerror = () => reject(request.error);
297
+ request.onerror = () => { reject(request.error); };
269
298
  };
270
299
  checkNext();
271
300
  });
@@ -293,7 +322,7 @@ export class SyncActionStore {
293
322
  currentId++;
294
323
  checkNext();
295
324
  };
296
- request.onerror = () => reject(request.error);
325
+ request.onerror = () => { reject(request.error); };
297
326
  };
298
327
  checkNext();
299
328
  });
@@ -317,7 +346,7 @@ export class SyncActionStore {
317
346
  cleaned++;
318
347
  cursor.continue();
319
348
  };
320
- deleteRequest.onerror = () => reject(deleteRequest.error);
349
+ deleteRequest.onerror = () => { reject(deleteRequest.error); };
321
350
  }
322
351
  else {
323
352
  cursor.continue();
@@ -328,7 +357,7 @@ export class SyncActionStore {
328
357
  resolve(cleaned);
329
358
  }
330
359
  };
331
- request.onerror = () => reject(request.error);
360
+ request.onerror = () => { reject(request.error); };
332
361
  });
333
362
  }
334
363
  /**
@@ -344,8 +373,8 @@ export class SyncActionStore {
344
373
  this.lastAppliedSyncId = 0;
345
374
  resolve();
346
375
  };
347
- tx.onerror = () => reject(tx.error);
348
- request.onerror = () => reject(request.error);
376
+ tx.onerror = () => { reject(tx.error); };
377
+ request.onerror = () => { reject(request.error); };
349
378
  });
350
379
  }
351
380
  /**
@@ -373,7 +402,7 @@ export class SyncActionStore {
373
402
  newestAction: timestamps.length > 0 ? new Date(timestamps[timestamps.length - 1]) : null,
374
403
  });
375
404
  };
376
- request.onerror = () => reject(request.error);
405
+ request.onerror = () => { reject(request.error); };
377
406
  });
378
407
  }
379
408
  /**
@@ -389,11 +418,11 @@ export class SyncActionStore {
389
418
  metadata.lastSyncId = syncId;
390
419
  metadata.updatedAt = new Date();
391
420
  const putRequest = store.put(metadata, 'metadata');
392
- putRequest.onerror = () => reject(putRequest.error);
421
+ putRequest.onerror = () => { reject(putRequest.error); };
393
422
  };
394
- getRequest.onerror = () => reject(getRequest.error);
395
- tx.oncomplete = () => resolve();
396
- tx.onerror = () => reject(tx.error);
423
+ getRequest.onerror = () => { reject(getRequest.error); };
424
+ tx.oncomplete = () => { resolve(); };
425
+ tx.onerror = () => { reject(tx.error); };
397
426
  });
398
427
  }
399
428
  /**
@@ -416,14 +445,14 @@ export class SyncActionStore {
416
445
  resolve(undefined);
417
446
  }
418
447
  };
419
- request.onerror = () => reject(request.error);
448
+ request.onerror = () => { reject(request.error); };
420
449
  });
421
450
  }
422
451
  /**
423
452
  * Rewind to a specific sync ID (for conflict resolution)
424
453
  */
425
454
  async rewindTo(syncId) {
426
- return new Promise(async (resolve, reject) => {
455
+ return new Promise((resolve, reject) => {
427
456
  // Get all actions after this sync ID
428
457
  const tx = this.db.transaction([this.storeName], 'readonly');
429
458
  const store = tx.objectStore(this.storeName);
@@ -461,21 +490,23 @@ export class SyncActionStore {
461
490
  this.lastAppliedSyncId = syncId - 1;
462
491
  }
463
492
  };
464
- putRequest.onerror = () => reject(putRequest.error);
493
+ putRequest.onerror = () => { reject(putRequest.error); };
465
494
  }
466
495
  writeTx.oncomplete = async () => {
467
496
  try {
468
497
  await this.updateLastSyncId(this.lastAppliedSyncId);
469
- const result = actionsToRewind.map(({ storedAt, applied, ...action }) => action);
498
+ const result = actionsToRewind
499
+ .map(toSyncAction)
500
+ .filter((action) => action !== null);
470
501
  resolve(result);
471
502
  }
472
503
  catch (error) {
473
504
  reject(error);
474
505
  }
475
506
  };
476
- writeTx.onerror = () => reject(writeTx.error);
507
+ writeTx.onerror = () => { reject(writeTx.error); };
477
508
  };
478
- request.onerror = () => reject(request.error);
509
+ request.onerror = () => { reject(request.error); };
479
510
  });
480
511
  }
481
512
  }
package/dist/surface.d.ts CHANGED
@@ -1,29 +1,36 @@
1
1
  /**
2
- * Machine-checked public API-surface manifest the SDK owns the description of
3
- * its OWN surface, bound to the real exported types at COMPILE TIME so the MCP
4
- * `get_api_surface` / docs can never drift from reality.
2
+ * A machine-checked manifest of this package's public API surface. It lists,
3
+ * as string tuples, the method names on `ablo.<model>`, the keys accepted by
4
+ * the list-style read options, and the keys of the client constructor
5
+ * options. Each tuple is proven equal to the keys of its source interface at
6
+ * compile time, so the lists cannot drift from the real types: add or remove
7
+ * a name on either side without updating the matching tuple and this file
8
+ * fails to compile, in both directions — no name the interface lacks, and no
9
+ * interface key the tuple omits.
5
10
  *
6
- * This exists because the hand-authored surface (apps/sync-web/.../api-surface.ts)
7
- * once named `load` / `count` / `scope` verbs/options that don't exist — with no
8
- * coupling to the code. The fix: the name lists live HERE, next to the types, and
9
- * each is proven EXACTLY equal to the keys of its source interface via
10
- * `Expect<Equal<…>>`. Add or remove a verb/option without updating the matching
11
- * tuple and THIS FILE FAILS TO COMPILE (the `Equal` constraint is checked eagerly
12
- * at the alias declaration both directions: no phantom name, no missing name).
13
- *
14
- * Consumers (the MCP `get_api_surface`) import these NAME tuples and build their
15
- * prose from them, so a summary can never reference a verb that doesn't exist.
16
- * NAMES are guaranteed; descriptions stay hand-written (prose can't be type-checked).
11
+ * Documentation tooling reads these tuples to describe the surface, which
12
+ * guarantees a generated summary never names a method or option that does
13
+ * not exist. The names are verified here; their prose descriptions are
14
+ * written by hand, since prose cannot be type-checked.
15
+ */
16
+ /**
17
+ * The names of every method available on `ablo.<model>`, matching the keys of
18
+ * the {@link ModelOperations} interface. Documentation tooling reads this
19
+ * tuple, so it is the one list of model-verb names a generated summary can
20
+ * describe.
17
21
  */
18
- /** Every method on `ablo.<model>` (the stateful `ModelOperations`). The single
19
- * source of truth for the model-verb names the docs/MCP may describe. */
20
22
  export declare const PUBLIC_MODEL_VERBS: readonly ["retrieve", "list", "get", "getAll", "getCount", "create", "update", "delete", "claim", "watch", "onChange"];
21
- /** Keys accepted by `list`/`getAll`/`onChange` options (`LocalReadOptions`).
22
- * Note `state` (lifecycle filter) NOT `scope` (a historic doc drift). */
23
+ /**
24
+ * The option keys accepted by `list`, `getAll`, and `onChange`, matching the
25
+ * keys of {@link LocalReadOptions}. Note that the lifecycle filter is named
26
+ * `state`, not `scope`.
27
+ */
23
28
  export declare const PUBLIC_LIST_OPTION_KEYS: readonly ["where", "filter", "orderBy", "limit", "offset", "state"];
24
- /** Public keys of `AbloOptions`. `schema` is required; the rest are optional
25
- * (the locked happy path is `Ablo({ schema, apiKey, databaseUrl, transport })`). */
26
- export declare const PUBLIC_ABLO_OPTION_KEYS: readonly ["schema", "apiKey", "databaseUrl", "persistence", "transport", "debug", "logLevel", "authToken", "baseURL", "fetch", "defaultHeaders", "defaultQuery", "dangerouslyAllowBrowser"];
29
+ /**
30
+ * The keys of the client constructor options, {@link AbloOptions}. Only
31
+ * `schema` is required; every other key is optional.
32
+ */
33
+ export declare const PUBLIC_ABLO_OPTION_KEYS: readonly ["schema", "apiKey", "authEndpoint", "databaseUrl", "persistence", "transport", "debug", "logLevel", "authToken", "baseURL", "fetch", "defaultHeaders", "defaultQuery", "dangerouslyAllowBrowser"];
27
34
  export type ModelVerb = (typeof PUBLIC_MODEL_VERBS)[number];
28
35
  export type ListOptionKey = (typeof PUBLIC_LIST_OPTION_KEYS)[number];
29
36
  export type AbloOptionKey = (typeof PUBLIC_ABLO_OPTION_KEYS)[number];
package/dist/surface.js CHANGED
@@ -1,23 +1,25 @@
1
1
  /**
2
- * Machine-checked public API-surface manifest the SDK owns the description of
3
- * its OWN surface, bound to the real exported types at COMPILE TIME so the MCP
4
- * `get_api_surface` / docs can never drift from reality.
2
+ * A machine-checked manifest of this package's public API surface. It lists,
3
+ * as string tuples, the method names on `ablo.<model>`, the keys accepted by
4
+ * the list-style read options, and the keys of the client constructor
5
+ * options. Each tuple is proven equal to the keys of its source interface at
6
+ * compile time, so the lists cannot drift from the real types: add or remove
7
+ * a name on either side without updating the matching tuple and this file
8
+ * fails to compile, in both directions — no name the interface lacks, and no
9
+ * interface key the tuple omits.
5
10
  *
6
- * This exists because the hand-authored surface (apps/sync-web/.../api-surface.ts)
7
- * once named `load` / `count` / `scope` verbs/options that don't exist — with no
8
- * coupling to the code. The fix: the name lists live HERE, next to the types, and
9
- * each is proven EXACTLY equal to the keys of its source interface via
10
- * `Expect<Equal<…>>`. Add or remove a verb/option without updating the matching
11
- * tuple and THIS FILE FAILS TO COMPILE (the `Equal` constraint is checked eagerly
12
- * at the alias declaration — both directions: no phantom name, no missing name).
13
- *
14
- * Consumers (the MCP `get_api_surface`) import these NAME tuples and build their
15
- * prose from them, so a summary can never reference a verb that doesn't exist.
16
- * NAMES are guaranteed; descriptions stay hand-written (prose can't be type-checked).
11
+ * Documentation tooling reads these tuples to describe the surface, which
12
+ * guarantees a generated summary never names a method or option that does
13
+ * not exist. The names are verified here; their prose descriptions are
14
+ * written by hand, since prose cannot be type-checked.
17
15
  */
18
16
  // ── the per-`ablo.<model>` verb surface ────────────────────────────────────
19
- /** Every method on `ablo.<model>` (the stateful `ModelOperations`). The single
20
- * source of truth for the model-verb names the docs/MCP may describe. */
17
+ /**
18
+ * The names of every method available on `ablo.<model>`, matching the keys of
19
+ * the {@link ModelOperations} interface. Documentation tooling reads this
20
+ * tuple, so it is the one list of model-verb names a generated summary can
21
+ * describe.
22
+ */
21
23
  export const PUBLIC_MODEL_VERBS = [
22
24
  'retrieve',
23
25
  'list',
@@ -32,8 +34,11 @@ export const PUBLIC_MODEL_VERBS = [
32
34
  'onChange',
33
35
  ];
34
36
  // ── the read/list query option surface ─────────────────────────────────────
35
- /** Keys accepted by `list`/`getAll`/`onChange` options (`LocalReadOptions`).
36
- * Note `state` (lifecycle filter) NOT `scope` (a historic doc drift). */
37
+ /**
38
+ * The option keys accepted by `list`, `getAll`, and `onChange`, matching the
39
+ * keys of {@link LocalReadOptions}. Note that the lifecycle filter is named
40
+ * `state`, not `scope`.
41
+ */
37
42
  export const PUBLIC_LIST_OPTION_KEYS = [
38
43
  'where',
39
44
  'filter',
@@ -43,11 +48,14 @@ export const PUBLIC_LIST_OPTION_KEYS = [
43
48
  'state',
44
49
  ];
45
50
  // ── the `Ablo({ … })` constructor option surface ───────────────────────────
46
- /** Public keys of `AbloOptions`. `schema` is required; the rest are optional
47
- * (the locked happy path is `Ablo({ schema, apiKey, databaseUrl, transport })`). */
51
+ /**
52
+ * The keys of the client constructor options, {@link AbloOptions}. Only
53
+ * `schema` is required; every other key is optional.
54
+ */
48
55
  export const PUBLIC_ABLO_OPTION_KEYS = [
49
56
  'schema',
50
57
  'apiKey',
58
+ 'authEndpoint',
51
59
  'databaseUrl',
52
60
  'persistence',
53
61
  'transport',
@@ -1,27 +1,30 @@
1
1
  /**
2
- * BootstrapHelper - Fixed to always fetch fresh data
3
- * Removed problematic caching that was serving stale data
2
+ * Fetches the initial snapshot the sync engine needs before it can go live: the
3
+ * current rows for the requested models plus the sync position from which to
4
+ * resume live updates. It calls the sync server's `/sync/bootstrap` HTTP
5
+ * endpoint, retries transient failures with backoff, and can fall back to a
6
+ * cached snapshot when the device is offline. {@link BootstrapData} is the
7
+ * shape it returns; {@link BootstrapOptions} configures it.
4
8
  */
5
9
  export interface BootstrapData {
6
10
  type: 'full' | 'partial';
7
11
  lastSyncId: number;
8
12
  /**
9
- * Model rows keyed by typename. Each row is opaque to the SDK at this
10
- * boundary the per-model shape is asserted by the consumer (sync
11
- * engine reduce + IDB write) using the registered schema.
13
+ * Model rows keyed by type name. Each row is opaque at this boundary; the
14
+ * engine asserts the per-model shape against the registered schema when it
15
+ * reduces the rows and writes them to local storage.
12
16
  */
13
- models?: {
14
- [typename: string]: unknown[];
15
- };
17
+ models?: Record<string, unknown[]>;
16
18
  deltas?: ValidatedServerDelta[];
17
19
  deltaCount?: number;
18
- /** Model types whose server-side query failed (timeout, RLS error, etc.) */
20
+ /** Model types whose server-side query failed (timeout, RLS error, and the like). */
19
21
  failedModels?: string[];
20
22
  timestamp: number;
21
23
  /**
22
- * The server's ACTIVE schema content hash for this tenant (same `schemaHash`
23
- * the CLI push computes). Present once the tenant has pushed a schema; the
24
- * client compares it to its own `config.expectedSchemaHash` to warn on drift.
24
+ * The content hash of the schema the server currently has active for this
25
+ * tenant — the same hash `ablo push` computes. Present once a schema has been
26
+ * pushed. The client compares it against its own `expectedSchemaHash` to warn
27
+ * when the app's schema and the deployed schema have drifted apart.
25
28
  */
26
29
  schemaHash?: string;
27
30
  }
@@ -42,40 +45,38 @@ export interface BootstrapOptions {
42
45
  */
43
46
  baseUrl?: string;
44
47
  /**
45
- * Private cache namespace for offline bootstrap fallback. Hosted SDK
46
- * callers do not pass this; Ablo sets it after auth resolves the
47
- * account scope.
48
+ * Namespace for the offline bootstrap cache. Most callers leave this unset;
49
+ * the SDK fills it in once authentication has resolved the account scope, so
50
+ * the fallback cache is partitioned per account.
48
51
  */
49
52
  cacheScope?: string | null;
50
53
  /**
51
- * @deprecated Use `cacheScope`. Kept so older self-hosted code that
52
- * still constructs BootstrapHelper directly keeps its cache namespace.
54
+ * @deprecated Use `cacheScope`. Retained so code that constructs
55
+ * {@link BootstrapFetcher} directly keeps its cache namespace.
53
56
  */
54
57
  organizationId?: string;
55
58
  syncGroups?: string[];
56
59
  maxRetries?: number;
57
60
  retryDelay?: number;
58
- /** Timeout for individual fetch requests in ms (default: 30000) */
61
+ /** How long to wait for a single fetch before timing out, in milliseconds. Default 10000 (10 seconds). */
59
62
  fetchTimeout?: number;
60
63
  /**
61
- * Model names to request in bootstrap. When set, the server only returns
62
- * these models everything else is skipped. Derived from the schema's
63
- * `load` strategy: only models with `load: 'instant'` (or unset, which
64
- * defaults to instant) are included.
65
- *
66
- * When absent, the server returns all models (backward compatible with
67
- * old clients that don't send a models param).
64
+ * The model names to request. When set, the server returns only these models
65
+ * and skips the rest. This is derived from each model's `load` strategy: only
66
+ * models loaded instantly (the default) are included. When unset, the server
67
+ * returns every model.
68
68
  */
69
69
  instantModels?: string[];
70
70
  /**
71
- * Shared SDK credential getter. Preferred over `setAuthToken`; read at
72
- * request time so token refreshes apply without recreating BootstrapHelper.
71
+ * Getter for the current credential, read at request time so a refreshed
72
+ * token takes effect without recreating the helper. Preferred over
73
+ * {@link BootstrapFetcher.setAuthToken}.
73
74
  */
74
75
  getAuthToken?: AuthTokenGetter;
75
76
  }
76
77
  import { type AuthTokenGetter } from '../auth/credentialSource.js';
77
78
  import { type ValidatedServerDelta } from './schemas.js';
78
- export declare class BootstrapHelper {
79
+ export declare class BootstrapFetcher {
79
80
  private options;
80
81
  private abortController;
81
82
  /** Warn about schema drift at most once per helper. */
@@ -97,20 +98,10 @@ export declare class BootstrapHelper {
97
98
  setCacheScope(cacheScope: string): void;
98
99
  setSyncGroups(syncGroups: readonly string[] | undefined): void;
99
100
  /**
100
- * Compatibility setter for direct BootstrapHelper users. The SDK-owned
101
- * `Ablo()` path passes `getAuthToken` and does not mutate this helper.
101
+ * Sets a fixed credential for callers that construct the helper directly.
102
+ * The SDK instead supplies `getAuthToken` and never calls this.
102
103
  */
103
104
  setAuthToken(authToken: string | undefined): void;
104
- /**
105
- * Create a promise that rejects after a timeout
106
- * Used to race against fetch requests that may hang indefinitely
107
- */
108
- private createTimeoutPromise;
109
- /**
110
- * Wrap a promise with a timeout - if the promise doesn't resolve within
111
- * the timeout period, the AbortController is triggered and an error is thrown
112
- */
113
- private withTimeout;
114
105
  /**
115
106
  * Fetch bootstrap data from sync engine with partial bootstrap support
116
107
  * @param lastSyncId - Optional: client's current lastSyncId for partial bootstrap
@@ -118,11 +109,12 @@ export declare class BootstrapHelper {
118
109
  */
119
110
  fetchBootstrap(lastSyncId?: number,
120
111
  /**
121
- * Per-call sync-group override for SCOPED hydrate-on-enter. When provided,
122
- * the request uses THESE groups instead of `this.options.syncGroups`,
123
- * WITHOUT mutating the shared options (so a concurrent full bootstrap is
124
- * unaffected). Also bypasses the offline full-snapshot cache below, which
125
- * holds the connection's full bootstrap and would be wrong for a subset.
112
+ * A per-call set of sync groups for a scoped hydrate-on-enter. When given,
113
+ * the request uses these groups instead of the configured `syncGroups`, and
114
+ * does so without mutating the shared options, so a concurrent full
115
+ * bootstrap is unaffected. It also bypasses the offline snapshot cache,
116
+ * which holds the full bootstrap and would be a wrong answer to a subset
117
+ * request.
126
118
  */
127
119
  syncGroupsOverride?: readonly string[]): Promise<BootstrapData>;
128
120
  /**