@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,11 +1,14 @@
1
1
  /**
2
- * Database - Simplified persistence layer
3
- * Fixed bootstrap triggering and data flow
2
+ * The local persistence layer for synced models. It stores rows in the
3
+ * browser's IndexedDB (or in-memory maps when run headlessly), applies inbound
4
+ * deltas to that store, and fetches the bootstrap snapshot from your sync
5
+ * server. {@link BaseSyncedStore} drives it, and {@link InstanceCache} holds the
6
+ * in-memory mirror of what this class persists.
4
7
  */
5
8
  import { type DatabaseInfo, type WorkspaceMetadata } from './core/DatabaseManager.js';
6
9
  import { ModelRegistry } from './ModelRegistry.js';
7
10
  import { LoadStrategy } from './types/index.js';
8
- import type { BootstrapHelper, BootstrapData } from './sync/BootstrapHelper.js';
11
+ import type { BootstrapFetcher, BootstrapData } from './sync/BootstrapFetcher.js';
9
12
  import { InMemoryObjectStore } from './adapters/inMemoryStorage.js';
10
13
  /** Generic record type for model data */
11
14
  type ModelData = Record<string, unknown>;
@@ -43,19 +46,17 @@ interface PersistedTransaction {
43
46
  [key: string]: unknown;
44
47
  }
45
48
  /**
46
- * Bootstrap strategies (aligned with Linear's architecture):
49
+ * How a session establishes its baseline state at startup.
47
50
  *
48
- * 'full' - Full bootstrap from server
49
- * - Fetch complete snapshot from server
50
- * - Clear IndexedDB
51
- * - Load snapshot data
52
- * - Use snapshot's lastSyncId
51
+ * 'full' Fetch a complete snapshot from the server, clear the local store,
52
+ * load the snapshot, and adopt its `lastSyncId`.
53
53
  *
54
- * 'local' - Local-only bootstrap (skip server fetch)
55
- * - Use existing IndexedDB data
56
- * - Hydrate ObjectPool from IndexedDB
57
- * - Connect WebSocket with stored lastSyncId
58
- * - Receive deltas from lastSyncId+1 onwards
54
+ * 'partial' Fetch only the deltas since the stored `lastSyncId` and apply
55
+ * them on top of the existing local data.
56
+ *
57
+ * 'local' Skip the server entirely: hydrate the {@link InstanceCache} from the
58
+ * local store, connect the WebSocket with the stored `lastSyncId`, and
59
+ * receive deltas from there onward. Used when offline with valid local data.
59
60
  */
60
61
  export type BootstrapType = 'full' | 'partial' | 'local';
61
62
  export interface BootstrapRequirements {
@@ -67,7 +68,7 @@ export interface BootstrapRequirements {
67
68
  export interface BootstrapResult {
68
69
  modelsLoaded: number;
69
70
  modelsStored: number;
70
- /** The raw bootstrap response — callers can apply models directly to ObjectPool */
71
+ /** The raw bootstrap response — callers can apply models directly to InstanceCache */
71
72
  bootstrapData: BootstrapData;
72
73
  /**
73
74
  * Results of applying partial-bootstrap deltas to IDB. Present only when
@@ -77,12 +78,12 @@ export interface BootstrapResult {
77
78
  * was disconnected — without this, DELETE deltas persist to IDB but
78
79
  * ghost entities linger in the pool until a full reload.
79
80
  */
80
- deltaResults?: Array<{
81
+ deltaResults?: {
81
82
  action: 'add' | 'update' | 'remove' | 'archive' | 'verify';
82
83
  modelName: string;
83
84
  modelId: string;
84
85
  data?: ModelData | null;
85
- }>;
86
+ }[];
86
87
  }
87
88
  export declare class Database {
88
89
  private databaseManager;
@@ -90,13 +91,13 @@ export declare class Database {
90
91
  private modelRegistry;
91
92
  private bootstrapHelper;
92
93
  /** The pre-configured query helper for lazy-loading data from the sync server. */
93
- get helper(): BootstrapHelper;
94
+ get helper(): BootstrapFetcher;
94
95
  /**
95
- * PURE scoped snapshot fetch for hydrate-on-enter (P4). Returns the FULL
96
- * current rows of the given sync groups, with NO side effects — unlike
96
+ * Fetch the current rows of the given sync groups as a side-effect-free
97
+ * snapshot, used to hydrate a scope as the user enters it. Unlike
97
98
  * {@link bootstrapFromServer}, it does not persist to IndexedDB and does not
98
- * touch the connection's `subscribedSyncGroups` (which the shrinkage check
99
- * owns). The caller applies the result to the pool via the SCOPED apply path.
99
+ * change the connection's subscribed sync groups. The caller applies the
100
+ * result to the pool through the scoped apply path.
100
101
  */
101
102
  fetchScopedBootstrapData(syncGroups: readonly string[]): Promise<BootstrapData>;
102
103
  private currentDbInfo;
@@ -128,7 +129,7 @@ export declare class Database {
128
129
  private inMemoryStores;
129
130
  /** In-memory workspace metadata when inMemory=true. */
130
131
  private inMemoryMetadata;
131
- constructor(modelRegistry: ModelRegistry, bootstrapHelper: BootstrapHelper, options?: {
132
+ constructor(modelRegistry: ModelRegistry, bootstrapHelper: BootstrapFetcher, options?: {
132
133
  inMemory?: boolean;
133
134
  });
134
135
  /**
@@ -150,17 +151,14 @@ export declare class Database {
150
151
  private logPreservedFields;
151
152
  open(userId: string, organizationId: string, version?: number): Promise<void>;
152
153
  /**
153
- * Compact a record before persisting to IndexedDB
154
- * - Removes null/undefined fields
155
- * - Removes empty arrays and empty objects
156
- * - Drops redundant fields: __typename, __class, clientId, syncStatus
157
- *
158
- * ARCHITECTURE: By design, this method receives plain objects, not MobX observables:
159
- * - WebSocket deltas: Already JSON-parsed (SyncedStore.ts:889)
160
- * - Optimistic updates: Models call toJSON() which uses toJS() (SlideLayer.ts:224)
161
- * - Bootstrap data: Plain JSON from server
154
+ * Shrink a record before persisting it. Drops `undefined` fields, empty
155
+ * arrays, empty objects, and the redundant markers `__typename`, `__class`,
156
+ * `clientId`, and `syncStatus`. Explicit `null` values are preserved, since
157
+ * a null is a meaningful "clear this field" in a nullable column.
162
158
  *
163
- * Note: We do NOT drop required defaults; server provides them.
159
+ * By design this receives plain objects, never live observables: WebSocket
160
+ * deltas arrive already parsed, optimistic updates come through `toJSON()`,
161
+ * and bootstrap data is plain JSON from the server.
164
162
  */
165
163
  private compactRecord;
166
164
  /**
@@ -174,7 +172,9 @@ export declare class Database {
174
172
  */
175
173
  requiredBootstrap(): Promise<BootstrapRequirements>;
176
174
  /**
177
- * Bootstrap database with data from Go server
175
+ * Fetch a bootstrap snapshot (or delta batch) from the sync server and load
176
+ * it into the local store, then return a {@link BootstrapResult} the caller
177
+ * applies to the {@link InstanceCache}.
178
178
  */
179
179
  bootstrapFromServer(requirements: BootstrapRequirements,
180
180
  /** Full sync-group subscription list — what the WS subscribes to
@@ -183,17 +183,16 @@ export declare class Database {
183
183
  * team-derived groups. */
184
184
  syncGroups: readonly string[], onProgress?: (loaded: number) => void): Promise<BootstrapResult>;
185
185
  /**
186
- * Process incoming delta from WebSocket - simplified
186
+ * Apply a single inbound delta from the WebSocket to the local store.
187
187
  *
188
- * ⚠️ PERFORMANCE NOTE: This method is called for each individual delta.
189
- * For batch processing, use processDeltaBatch() instead to avoid
190
- * transaction overhead (2x transactions per delta = major bottleneck).
188
+ * This handles one delta at a time. To apply several, prefer
189
+ * {@link processDeltaBatch}, which commits them in one IndexedDB transaction
190
+ * rather than two transactions per delta.
191
191
  *
192
- * 📝 PARTIAL DELTA PATTERN:
193
- * - Server sends only changed fields: {id, position: {...}, updatedAt}
194
- * - UPDATE deltas are MERGED with existing records: {...existing, ...delta}
195
- * - This preserves fields not included in the delta (e.g., deckId, title)
196
- * - Explicit null values ARE preserved: {position: null} clears the field
192
+ * Update deltas carry only the changed fields, so they are merged onto the
193
+ * existing record rather than replacing it. That preserves fields the delta
194
+ * omits (such as deckId or title), and an explicit null is kept as a value,
195
+ * clearing that field.
197
196
  */
198
197
  processDelta(delta: {
199
198
  syncId?: number;
@@ -214,29 +213,22 @@ export declare class Database {
214
213
  data?: ModelData | null;
215
214
  }>;
216
215
  /**
217
- * PERFORMANCE FIX: Process multiple deltas in a single IndexedDB transaction
218
- *
219
- * This method dramatically improves sync performance by:
220
- * 1. Batch-reading all existing records for UPDATEs (outside transaction for speed)
221
- * 2. Opening a single transaction per store for all writes
222
- * 3. Merging UPDATE deltas with existing data to preserve unmodified fields
223
- * 4. Updating metadata only once at the end with highest syncId
224
- *
225
- * Performance impact: 186 deltas goes from ~372 transactions to just 1 transaction
216
+ * Apply many deltas to the local store in as few IndexedDB transactions as
217
+ * possible. Deltas are grouped by store, and each store's writes commit in a
218
+ * single transaction, so a batch of 186 deltas becomes roughly one
219
+ * transaction per store instead of two per delta.
226
220
  *
227
- * 📝 PARTIAL DELTA MERGE PATTERN:
228
- * - UPDATE deltas contain only changed fields
229
- * - We merge with existing: {...existing, ...delta}
230
- * - Preserves deckId, title, settings etc. when updating just position
231
- * - Handles explicit null: {field: null} clears the field correctly
221
+ * The method reads the existing records for update deltas up front, then
222
+ * merges each update onto its existing record so fields the delta omits are
223
+ * preserved and an explicit null still clears its field. It advances the
224
+ * persisted sync cursor once, to the highest committed sync id.
232
225
  *
233
- * 🔄 LINEAR-STYLE CONFLICT RESOLUTION:
234
- * - Builds a map of DELETE deltas with their syncIds
235
- * - Before processing UPDATE/INSERT, checks for DELETE with higher syncId
236
- * - Skips stale updates for entities that will be/were deleted
237
- * - Prevents 404 errors from fetching already-deleted entities
226
+ * Conflict resolution follows a delete-wins rule: it first indexes the
227
+ * delete deltas by entity, then skips any insert or update whose sync id is
228
+ * at or below a delete for the same entity. This avoids resurrecting a
229
+ * deleted entity and avoids fetching one that no longer exists.
238
230
  */
239
- processDeltaBatch(deltas: Array<{
231
+ processDeltaBatch(deltas: {
240
232
  syncId?: number;
241
233
  /**
242
234
  * Includes 'G' and 'S' defensively — they're routed upstream and
@@ -257,18 +249,18 @@ export declare class Database {
257
249
  * have a client transaction.
258
250
  */
259
251
  transactionId?: string;
260
- }>): Promise<{
261
- results: Array<{
252
+ }[]): Promise<{
253
+ results: {
262
254
  action: 'add' | 'update' | 'remove' | 'archive' | 'verify';
263
255
  modelName: string;
264
256
  modelId: string;
265
257
  data?: ModelData | null;
266
258
  transactionId?: string;
267
- }>;
259
+ }[];
268
260
  /**
269
261
  * Highest syncId whose IDB store transaction actually committed in this
270
262
  * batch. The runtime delta cursor (WS `lastSyncId`, server-side
271
- * `lastAckedSyncId`) must only advance to THIS value — not the input
263
+ * `lastAckedSyncId`) must only advance to this value — not the input
272
264
  * batch's range max — or it diverges from the persisted view and the
273
265
  * next catch-up request skips the un-persisted gap forever. Mirrors
274
266
  * the metadata-cursor invariant at `updateWorkspaceMetadata` below.
@@ -283,16 +275,9 @@ export declare class Database {
283
275
  /** Get data by index. `value` is an IDB key — string, number, Date,
284
276
  * BufferSource, or array thereof. */
285
277
  getDataByIndex(modelName: string, indexName: string, value: IDBValidKey): Promise<ModelData[]>;
286
- /**
287
- * Update workspace metadata
288
- */
289
- /**
290
- * Get the last sync ID from workspace metadata
291
- */
292
- /** Read workspace metadata from IDB (returns null if db not open). */
278
+ /** Read workspace metadata from IndexedDB. Returns null when the database is not open. */
293
279
  getWorkspaceMetadata(): Promise<WorkspaceMetadata | null>;
294
280
  getLastSyncId(): Promise<number>;
295
- getVersionVector(): Promise<Record<string, number> | null>;
296
281
  updateWorkspaceMetadata(metadata: Partial<WorkspaceMetadata>): Promise<void>;
297
282
  /** Transaction persistence for offline/retry support.
298
283
  * Returns either the IDB-backed ObjectStore or its in-memory twin
@@ -332,13 +317,13 @@ export declare class Database {
332
317
  notReady: number;
333
318
  };
334
319
  totalRecords: number;
335
- storeDetails: Array<{
320
+ storeDetails: {
336
321
  modelName: string;
337
322
  storeName: string;
338
323
  strategy: LoadStrategy;
339
324
  ready: boolean;
340
325
  count: number;
341
- }>;
326
+ }[];
342
327
  };
343
328
  metadata: WorkspaceMetadata | null;
344
329
  }>;