@abloatai/ablo 0.35.0 → 0.37.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 (622) hide show
  1. package/AGENTS.md +2 -2
  2. package/CHANGELOG.md +71 -1929
  3. package/NOTICE +2 -2
  4. package/README.md +23 -532
  5. package/assets/banner.png +0 -0
  6. package/dist/auth.d.ts +2 -0
  7. package/dist/auth.d.ts.map +1 -0
  8. package/dist/auth.js +2 -0
  9. package/dist/auth.js.map +1 -0
  10. package/dist/client.d.ts +3 -0
  11. package/dist/client.d.ts.map +1 -0
  12. package/dist/client.js +3 -0
  13. package/dist/client.js.map +1 -0
  14. package/dist/coordination.d.ts +2 -0
  15. package/dist/coordination.d.ts.map +1 -0
  16. package/dist/coordination.js +2 -0
  17. package/dist/coordination.js.map +1 -0
  18. package/dist/index.d.ts +3 -112
  19. package/dist/index.d.ts.map +1 -0
  20. package/dist/index.js +3 -161
  21. package/dist/index.js.map +1 -0
  22. package/dist/react.d.ts +4 -0
  23. package/dist/react.d.ts.map +1 -0
  24. package/dist/react.js +3 -0
  25. package/dist/react.js.map +1 -0
  26. package/dist/schema.d.ts +2 -0
  27. package/dist/schema.d.ts.map +1 -0
  28. package/dist/schema.js +2 -0
  29. package/dist/schema.js.map +1 -0
  30. package/dist/server.d.ts +2 -0
  31. package/dist/server.d.ts.map +1 -0
  32. package/dist/server.js +2 -0
  33. package/dist/server.js.map +1 -0
  34. package/dist/source-conformance.d.ts +2 -0
  35. package/dist/source-conformance.d.ts.map +1 -0
  36. package/dist/source-conformance.js +2 -0
  37. package/dist/source-conformance.js.map +1 -0
  38. package/dist/source-drizzle.d.ts +2 -0
  39. package/dist/source-drizzle.d.ts.map +1 -0
  40. package/dist/source-drizzle.js +2 -0
  41. package/dist/source-drizzle.js.map +1 -0
  42. package/dist/source-kysely.d.ts +2 -0
  43. package/dist/source-kysely.d.ts.map +1 -0
  44. package/dist/source-kysely.js +2 -0
  45. package/dist/source-kysely.js.map +1 -0
  46. package/dist/source-next.d.ts +2 -0
  47. package/dist/source-next.d.ts.map +1 -0
  48. package/dist/source-next.js +2 -0
  49. package/dist/source-next.js.map +1 -0
  50. package/dist/source.d.ts +2 -0
  51. package/dist/source.d.ts.map +1 -0
  52. package/dist/source.js +2 -0
  53. package/dist/source.js.map +1 -0
  54. package/dist/wire.d.ts +2 -0
  55. package/dist/wire.d.ts.map +1 -0
  56. package/dist/wire.js +2 -0
  57. package/dist/wire.js.map +1 -0
  58. package/docs/agents.md +2 -2
  59. package/docs/api-keys.md +13 -12
  60. package/docs/api.md +15 -53
  61. package/docs/audit.md +4 -3
  62. package/docs/cli.md +11 -11
  63. package/docs/client-behavior.md +9 -9
  64. package/docs/concurrency-convention.md +28 -42
  65. package/docs/coordination.md +228 -86
  66. package/docs/data-sources.md +5 -5
  67. package/docs/debugging.md +34 -12
  68. package/docs/deployment.md +8 -8
  69. package/docs/examples/agent-human.md +4 -4
  70. package/docs/examples/ai-sdk-tool.md +1 -1
  71. package/docs/examples/existing-python-backend.md +15 -4
  72. package/docs/examples/nextjs.md +27 -6
  73. package/docs/examples/scoped-agent.md +3 -3
  74. package/docs/examples/server-agent.md +2 -2
  75. package/docs/groups.md +57 -3
  76. package/docs/guarantees.md +37 -10
  77. package/docs/how-it-works.md +32 -8
  78. package/docs/idempotency.md +6 -6
  79. package/docs/identity.md +24 -24
  80. package/docs/index.md +8 -8
  81. package/docs/integration-guide.md +38 -16
  82. package/docs/internal/README.md +18 -0
  83. package/docs/internal/agent-fleet-coordination-design.md +171 -0
  84. package/docs/internal/agent-orchestration.md +58 -0
  85. package/docs/internal/commit-identifiers.md +91 -0
  86. package/docs/internal/concurrency-open-decisions.md +37 -0
  87. package/docs/internal/data-source-reverse-channel.md +150 -0
  88. package/docs/internal/per-field-conflict-detection.md +165 -0
  89. package/docs/internal/postgres-replication.md +64 -0
  90. package/docs/internal/serializable-schema.md +119 -0
  91. package/docs/internal/structure.md +32 -0
  92. package/docs/mcp.md +9 -9
  93. package/docs/migration.md +37 -18
  94. package/docs/projects.md +1 -1
  95. package/docs/quickstart.md +2 -2
  96. package/docs/react.md +24 -13
  97. package/docs/schema-contract.md +3 -3
  98. package/docs/sessions.md +91 -37
  99. package/docs/webhooks.md +9 -9
  100. package/examples/README.md +2 -2
  101. package/examples/data-source/README.md +1 -1
  102. package/examples/data-source/ablo-driver.ts +1 -1
  103. package/examples/data-source/customer-server.ts +1 -1
  104. package/examples/data-source/run.ts +1 -1
  105. package/examples/data-source/schema.ts +1 -1
  106. package/examples/quickstart.ts +2 -2
  107. package/llms.txt +12 -12
  108. package/package.json +64 -174
  109. package/dist/BaseSyncedStore.d.ts +0 -823
  110. package/dist/BaseSyncedStore.js +0 -1955
  111. package/dist/Database.d.ts +0 -335
  112. package/dist/Database.js +0 -1500
  113. package/dist/InstanceCache.d.ts +0 -233
  114. package/dist/InstanceCache.js +0 -1164
  115. package/dist/LazyReferenceCollection.d.ts +0 -177
  116. package/dist/LazyReferenceCollection.js +0 -461
  117. package/dist/Model.d.ts +0 -444
  118. package/dist/Model.js +0 -909
  119. package/dist/ModelRegistry.d.ts +0 -221
  120. package/dist/ModelRegistry.js +0 -537
  121. package/dist/NetworkMonitor.d.ts +0 -26
  122. package/dist/NetworkMonitor.js +0 -77
  123. package/dist/RuntimeContext.d.ts +0 -52
  124. package/dist/RuntimeContext.js +0 -80
  125. package/dist/SyncClient.d.ts +0 -551
  126. package/dist/SyncClient.js +0 -2199
  127. package/dist/adapters/alwaysOnline.d.ts +0 -14
  128. package/dist/adapters/alwaysOnline.js +0 -17
  129. package/dist/adapters/inMemoryStorage.d.ts +0 -31
  130. package/dist/adapters/inMemoryStorage.js +0 -110
  131. package/dist/ai-sdk/coordinatedTool.d.ts +0 -120
  132. package/dist/ai-sdk/coordinatedTool.js +0 -134
  133. package/dist/ai-sdk/coordinationContext.d.ts +0 -46
  134. package/dist/ai-sdk/coordinationContext.js +0 -106
  135. package/dist/ai-sdk/index.d.ts +0 -121
  136. package/dist/ai-sdk/index.js +0 -121
  137. package/dist/ai-sdk/wrap.d.ts +0 -65
  138. package/dist/ai-sdk/wrap.js +0 -39
  139. package/dist/auth/index.d.ts +0 -1
  140. package/dist/auth/index.js +0 -8
  141. package/dist/batching/index.d.ts +0 -55
  142. package/dist/batching/index.js +0 -147
  143. package/dist/cli.cjs +0 -288600
  144. package/dist/client/Ablo.d.ts +0 -231
  145. package/dist/client/Ablo.js +0 -149
  146. package/dist/client/abloClient.d.ts +0 -309
  147. package/dist/client/abloClient.js +0 -13
  148. package/dist/client/clientPrelude.d.ts +0 -52
  149. package/dist/client/clientPrelude.js +0 -60
  150. package/dist/client/consoleLogger.d.ts +0 -35
  151. package/dist/client/consoleLogger.js +0 -44
  152. package/dist/client/coreClient.d.ts +0 -60
  153. package/dist/client/coreClient.js +0 -118
  154. package/dist/client/createInternalComponents.d.ts +0 -46
  155. package/dist/client/createInternalComponents.js +0 -92
  156. package/dist/client/createModelProxy.d.ts +0 -228
  157. package/dist/client/createModelProxy.js +0 -818
  158. package/dist/client/humans.d.ts +0 -48
  159. package/dist/client/humans.js +0 -52
  160. package/dist/client/modelRegistration.d.ts +0 -10
  161. package/dist/client/modelRegistration.js +0 -312
  162. package/dist/client/options.d.ts +0 -461
  163. package/dist/client/options.js +0 -7
  164. package/dist/client/reactiveEngine.d.ts +0 -48
  165. package/dist/client/reactiveEngine.js +0 -910
  166. package/dist/client/resourceTypes.d.ts +0 -12
  167. package/dist/client/resourceTypes.js +0 -10
  168. package/dist/client/schemaConfig.d.ts +0 -44
  169. package/dist/client/schemaConfig.js +0 -185
  170. package/dist/client/validateAbloOptions.d.ts +0 -42
  171. package/dist/client/validateAbloOptions.js +0 -43
  172. package/dist/client/wsMutationExecutor.d.ts +0 -27
  173. package/dist/client/wsMutationExecutor.js +0 -72
  174. package/dist/context.d.ts +0 -29
  175. package/dist/context.js +0 -58
  176. package/dist/coordination/ClaimLog.d.ts +0 -26
  177. package/dist/coordination/ClaimLog.js +0 -32
  178. package/dist/coordination/index.d.ts +0 -1
  179. package/dist/coordination/index.js +0 -8
  180. package/dist/core/DatabaseManager.d.ts +0 -105
  181. package/dist/core/DatabaseManager.js +0 -387
  182. package/dist/core/QueryProcessor.d.ts +0 -75
  183. package/dist/core/QueryProcessor.js +0 -255
  184. package/dist/core/QueryView.d.ts +0 -79
  185. package/dist/core/QueryView.js +0 -218
  186. package/dist/core/StoreManager.d.ts +0 -112
  187. package/dist/core/StoreManager.js +0 -302
  188. package/dist/core/ViewRegistry.d.ts +0 -20
  189. package/dist/core/ViewRegistry.js +0 -55
  190. package/dist/core/index.d.ts +0 -33
  191. package/dist/core/index.js +0 -48
  192. package/dist/core/openIDBWithTimeout.d.ts +0 -65
  193. package/dist/core/openIDBWithTimeout.js +0 -153
  194. package/dist/core/queryUtils.d.ts +0 -45
  195. package/dist/core/queryUtils.js +0 -69
  196. package/dist/core/storeContract.d.ts +0 -145
  197. package/dist/core/storeContract.js +0 -12
  198. package/dist/docs/catalog.d.ts +0 -72
  199. package/dist/docs/catalog.js +0 -227
  200. package/dist/docs/index.d.ts +0 -10
  201. package/dist/docs/index.js +0 -10
  202. package/dist/environment.d.ts +0 -1
  203. package/dist/environment.js +0 -8
  204. package/dist/interfaces/index.d.ts +0 -311
  205. package/dist/interfaces/index.js +0 -9
  206. package/dist/keys/index.d.ts +0 -1
  207. package/dist/keys/index.js +0 -8
  208. package/dist/mutators/RecordingMutation.d.ts +0 -36
  209. package/dist/mutators/RecordingMutation.js +0 -182
  210. package/dist/mutators/Transaction.d.ts +0 -40
  211. package/dist/mutators/Transaction.js +0 -58
  212. package/dist/mutators/UndoManager.d.ts +0 -258
  213. package/dist/mutators/UndoManager.js +0 -658
  214. package/dist/mutators/defineMutators.d.ts +0 -60
  215. package/dist/mutators/defineMutators.js +0 -18
  216. package/dist/mutators/inverseOp.d.ts +0 -126
  217. package/dist/mutators/inverseOp.js +0 -71
  218. package/dist/mutators/mutateActions.d.ts +0 -45
  219. package/dist/mutators/mutateActions.js +0 -105
  220. package/dist/mutators/readerActions.d.ts +0 -33
  221. package/dist/mutators/readerActions.js +0 -57
  222. package/dist/mutators/undoApply.d.ts +0 -51
  223. package/dist/mutators/undoApply.js +0 -117
  224. package/dist/policy/index.d.ts +0 -21
  225. package/dist/policy/index.js +0 -20
  226. package/dist/query/client.d.ts +0 -61
  227. package/dist/query/client.js +0 -137
  228. package/dist/query/types.d.ts +0 -85
  229. package/dist/query/types.js +0 -16
  230. package/dist/react/AbloProvider.d.ts +0 -230
  231. package/dist/react/AbloProvider.js +0 -455
  232. package/dist/react/ClientSideSuspense.d.ts +0 -36
  233. package/dist/react/ClientSideSuspense.js +0 -17
  234. package/dist/react/DefaultFallback.d.ts +0 -24
  235. package/dist/react/DefaultFallback.js +0 -43
  236. package/dist/react/context.d.ts +0 -55
  237. package/dist/react/context.js +0 -29
  238. package/dist/react/index.d.ts +0 -61
  239. package/dist/react/index.js +0 -66
  240. package/dist/react/internalContext.d.ts +0 -33
  241. package/dist/react/internalContext.js +0 -3
  242. package/dist/react/useAblo.d.ts +0 -75
  243. package/dist/react/useAblo.js +0 -102
  244. package/dist/react/useCurrentUserId.d.ts +0 -22
  245. package/dist/react/useCurrentUserId.js +0 -34
  246. package/dist/react/useErrorListener.d.ts +0 -20
  247. package/dist/react/useErrorListener.js +0 -38
  248. package/dist/react/useMutationFailureListener.d.ts +0 -26
  249. package/dist/react/useMutationFailureListener.js +0 -38
  250. package/dist/react/useMutators.d.ts +0 -56
  251. package/dist/react/useMutators.js +0 -84
  252. package/dist/react/useReactive.d.ts +0 -35
  253. package/dist/react/useReactive.js +0 -123
  254. package/dist/react/useSyncStatus.d.ts +0 -59
  255. package/dist/react/useSyncStatus.js +0 -76
  256. package/dist/react/useUndoScope.d.ts +0 -34
  257. package/dist/react/useUndoScope.js +0 -81
  258. package/dist/schema/coordination.d.ts +0 -112
  259. package/dist/schema/coordination.js +0 -129
  260. package/dist/schema/ddl.d.ts +0 -97
  261. package/dist/schema/ddl.js +0 -491
  262. package/dist/schema/ddlLock.d.ts +0 -35
  263. package/dist/schema/ddlLock.js +0 -46
  264. package/dist/schema/diff.d.ts +0 -225
  265. package/dist/schema/diff.js +0 -289
  266. package/dist/schema/generate.d.ts +0 -19
  267. package/dist/schema/generate.js +0 -86
  268. package/dist/schema/index.d.ts +0 -41
  269. package/dist/schema/index.js +0 -76
  270. package/dist/schema/queries.d.ts +0 -201
  271. package/dist/schema/queries.js +0 -144
  272. package/dist/schema/select.d.ts +0 -40
  273. package/dist/schema/select.js +0 -87
  274. package/dist/schema/serialize.d.ts +0 -115
  275. package/dist/schema/serialize.js +0 -262
  276. package/dist/schema/sugar.d.ts +0 -109
  277. package/dist/schema/sugar.js +0 -83
  278. package/dist/schema/syncDeltaRow.d.ts +0 -6
  279. package/dist/schema/syncDeltaRow.js +0 -6
  280. package/dist/server/adapter.d.ts +0 -173
  281. package/dist/server/adapter.js +0 -18
  282. package/dist/server/commit.d.ts +0 -107
  283. package/dist/server/commit.js +0 -1
  284. package/dist/server/index.d.ts +0 -14
  285. package/dist/server/index.js +0 -2
  286. package/dist/server/readConfig.d.ts +0 -80
  287. package/dist/server/readConfig.js +0 -8
  288. package/dist/server/storageMode.d.ts +0 -23
  289. package/dist/server/storageMode.js +0 -17
  290. package/dist/source/adapter.d.ts +0 -81
  291. package/dist/source/adapter.js +0 -22
  292. package/dist/source/adapters/drizzle.d.ts +0 -48
  293. package/dist/source/adapters/drizzle.js +0 -219
  294. package/dist/source/adapters/kysely.d.ts +0 -42
  295. package/dist/source/adapters/kysely.js +0 -205
  296. package/dist/source/adapters/kyselyMutationCore.d.ts +0 -76
  297. package/dist/source/adapters/kyselyMutationCore.js +0 -125
  298. package/dist/source/adapters/memory.d.ts +0 -13
  299. package/dist/source/adapters/memory.js +0 -130
  300. package/dist/source/adapters/prisma.d.ts +0 -63
  301. package/dist/source/adapters/prisma.js +0 -202
  302. package/dist/source/conformance.d.ts +0 -37
  303. package/dist/source/conformance.js +0 -215
  304. package/dist/source/connector.d.ts +0 -95
  305. package/dist/source/connector.js +0 -266
  306. package/dist/source/connectorProtocol.d.ts +0 -154
  307. package/dist/source/connectorProtocol.js +0 -163
  308. package/dist/source/contract.d.ts +0 -195
  309. package/dist/source/contract.js +0 -164
  310. package/dist/source/factory.d.ts +0 -92
  311. package/dist/source/factory.js +0 -286
  312. package/dist/source/footprint.d.ts +0 -111
  313. package/dist/source/footprint.js +0 -0
  314. package/dist/source/idempotency.d.ts +0 -61
  315. package/dist/source/idempotency.js +0 -144
  316. package/dist/source/index.d.ts +0 -23
  317. package/dist/source/index.js +0 -30
  318. package/dist/source/migrations.d.ts +0 -21
  319. package/dist/source/migrations.js +0 -103
  320. package/dist/source/next.d.ts +0 -32
  321. package/dist/source/next.js +0 -25
  322. package/dist/source/pushQueue.d.ts +0 -134
  323. package/dist/source/pushQueue.js +0 -256
  324. package/dist/source/signing.d.ts +0 -92
  325. package/dist/source/signing.js +0 -162
  326. package/dist/source/types.d.ts +0 -401
  327. package/dist/source/types.js +0 -59
  328. package/dist/stores/ObjectStore.d.ts +0 -115
  329. package/dist/stores/ObjectStore.js +0 -393
  330. package/dist/stores/ObjectStoreContract.d.ts +0 -38
  331. package/dist/stores/ObjectStoreContract.js +0 -1
  332. package/dist/stores/SyncActionStore.d.ts +0 -97
  333. package/dist/stores/SyncActionStore.js +0 -504
  334. package/dist/stores/syncAction.d.ts +0 -26
  335. package/dist/stores/syncAction.js +0 -16
  336. package/dist/surface.d.ts +0 -36
  337. package/dist/surface.js +0 -75
  338. package/dist/sync/BootstrapFetcher.d.ts +0 -280
  339. package/dist/sync/BootstrapFetcher.js +0 -962
  340. package/dist/sync/ConnectionManager.d.ts +0 -8
  341. package/dist/sync/ConnectionManager.js +0 -8
  342. package/dist/sync/OnDemandLoader.d.ts +0 -228
  343. package/dist/sync/OnDemandLoader.js +0 -742
  344. package/dist/sync/SubscriptionManager.d.ts +0 -159
  345. package/dist/sync/SubscriptionManager.js +0 -243
  346. package/dist/sync/SyncWebSocket.d.ts +0 -173
  347. package/dist/sync/SyncWebSocket.js +0 -438
  348. package/dist/sync/awaitClaimGrant.d.ts +0 -6
  349. package/dist/sync/awaitClaimGrant.js +0 -6
  350. package/dist/sync/bootstrapApply.d.ts +0 -70
  351. package/dist/sync/bootstrapApply.js +0 -73
  352. package/dist/sync/commitFrames.d.ts +0 -8
  353. package/dist/sync/commitFrames.js +0 -8
  354. package/dist/sync/contextPorts.d.ts +0 -18
  355. package/dist/sync/contextPorts.js +0 -31
  356. package/dist/sync/createClaimStream.d.ts +0 -7
  357. package/dist/sync/createClaimStream.js +0 -7
  358. package/dist/sync/createPresenceStream.d.ts +0 -69
  359. package/dist/sync/createPresenceStream.js +0 -200
  360. package/dist/sync/createSnapshot.d.ts +0 -29
  361. package/dist/sync/createSnapshot.js +0 -118
  362. package/dist/sync/credentialLifecycle.d.ts +0 -7
  363. package/dist/sync/credentialLifecycle.js +0 -7
  364. package/dist/sync/deltaPipeline.d.ts +0 -113
  365. package/dist/sync/deltaPipeline.js +0 -261
  366. package/dist/sync/groupChange.d.ts +0 -113
  367. package/dist/sync/groupChange.js +0 -242
  368. package/dist/sync/participants.d.ts +0 -115
  369. package/dist/sync/participants.js +0 -344
  370. package/dist/sync/persistedPrefix.d.ts +0 -12
  371. package/dist/sync/persistedPrefix.js +0 -22
  372. package/dist/sync/schemaDrift.d.ts +0 -55
  373. package/dist/sync/schemaDrift.js +0 -53
  374. package/dist/sync/schemas.d.ts +0 -70
  375. package/dist/sync/schemas.js +0 -94
  376. package/dist/sync/syncCursor.d.ts +0 -40
  377. package/dist/sync/syncCursor.js +0 -55
  378. package/dist/sync/syncPlan.d.ts +0 -54
  379. package/dist/sync/syncPlan.js +0 -50
  380. package/dist/sync/wsFrameHandlers.d.ts +0 -8
  381. package/dist/sync/wsFrameHandlers.js +0 -8
  382. package/dist/testing/fixtures/bootstrap.d.ts +0 -49
  383. package/dist/testing/fixtures/bootstrap.js +0 -59
  384. package/dist/testing/fixtures/deltas.d.ts +0 -83
  385. package/dist/testing/fixtures/deltas.js +0 -136
  386. package/dist/testing/fixtures/httpResponses.d.ts +0 -70
  387. package/dist/testing/fixtures/httpResponses.js +0 -90
  388. package/dist/testing/fixtures/models.d.ts +0 -83
  389. package/dist/testing/fixtures/models.js +0 -272
  390. package/dist/testing/helpers/reactWrapper.d.ts +0 -69
  391. package/dist/testing/helpers/reactWrapper.js +0 -67
  392. package/dist/testing/helpers/syncEngineHarness.d.ts +0 -54
  393. package/dist/testing/helpers/syncEngineHarness.js +0 -73
  394. package/dist/testing/helpers/wait.d.ts +0 -30
  395. package/dist/testing/helpers/wait.js +0 -49
  396. package/dist/testing/index.d.ts +0 -23
  397. package/dist/testing/index.js +0 -33
  398. package/dist/testing/mocks/FakeDatabase.d.ts +0 -18
  399. package/dist/testing/mocks/FakeDatabase.js +0 -10
  400. package/dist/testing/mocks/MockMutationExecutor.d.ts +0 -87
  401. package/dist/testing/mocks/MockMutationExecutor.js +0 -186
  402. package/dist/testing/mocks/MockNetworkMonitor.d.ts +0 -20
  403. package/dist/testing/mocks/MockNetworkMonitor.js +0 -46
  404. package/dist/testing/mocks/MockSyncContext.d.ts +0 -51
  405. package/dist/testing/mocks/MockSyncContext.js +0 -72
  406. package/dist/testing/mocks/MockSyncStore.d.ts +0 -88
  407. package/dist/testing/mocks/MockSyncStore.js +0 -171
  408. package/dist/testing/mocks/MockWebSocket.d.ts +0 -71
  409. package/dist/testing/mocks/MockWebSocket.js +0 -118
  410. package/dist/transaction/ablo.d.ts +0 -88
  411. package/dist/transaction/ablo.js +0 -33
  412. package/dist/transaction/auth/apiKey.d.ts +0 -152
  413. package/dist/transaction/auth/apiKey.js +0 -419
  414. package/dist/transaction/auth/bootstrapScope.d.ts +0 -15
  415. package/dist/transaction/auth/bootstrapScope.js +0 -1
  416. package/dist/transaction/auth/capability.d.ts +0 -177
  417. package/dist/transaction/auth/capability.js +0 -199
  418. package/dist/transaction/auth/credentialEndpoint.d.ts +0 -61
  419. package/dist/transaction/auth/credentialEndpoint.js +0 -86
  420. package/dist/transaction/auth/credentialPolicy.d.ts +0 -148
  421. package/dist/transaction/auth/credentialPolicy.js +0 -125
  422. package/dist/transaction/auth/credentialSource.d.ts +0 -30
  423. package/dist/transaction/auth/credentialSource.js +0 -55
  424. package/dist/transaction/auth/hostedEndpoints.d.ts +0 -21
  425. package/dist/transaction/auth/hostedEndpoints.js +0 -21
  426. package/dist/transaction/auth/identity.d.ts +0 -55
  427. package/dist/transaction/auth/identity.js +0 -210
  428. package/dist/transaction/auth/index.d.ts +0 -162
  429. package/dist/transaction/auth/index.js +0 -304
  430. package/dist/transaction/auth/schemas.d.ts +0 -59
  431. package/dist/transaction/auth/schemas.js +0 -85
  432. package/dist/transaction/auth/sessionMint.d.ts +0 -28
  433. package/dist/transaction/auth/sessionMint.js +0 -85
  434. package/dist/transaction/coordination/awaitClaimGrant.d.ts +0 -49
  435. package/dist/transaction/coordination/awaitClaimGrant.js +0 -112
  436. package/dist/transaction/coordination/claimHeartbeatLoop.d.ts +0 -50
  437. package/dist/transaction/coordination/claimHeartbeatLoop.js +0 -88
  438. package/dist/transaction/coordination/claimMeta.d.ts +0 -49
  439. package/dist/transaction/coordination/claimMeta.js +0 -52
  440. package/dist/transaction/coordination/createClaimStream.d.ts +0 -64
  441. package/dist/transaction/coordination/createClaimStream.js +0 -475
  442. package/dist/transaction/coordination/events.d.ts +0 -74
  443. package/dist/transaction/coordination/events.js +0 -7
  444. package/dist/transaction/coordination/index.d.ts +0 -19
  445. package/dist/transaction/coordination/index.js +0 -44
  446. package/dist/transaction/coordination/locator.d.ts +0 -83
  447. package/dist/transaction/coordination/locator.js +0 -82
  448. package/dist/transaction/coordination/schema.d.ts +0 -1473
  449. package/dist/transaction/coordination/schema.js +0 -1013
  450. package/dist/transaction/coordination/targetConflict.d.ts +0 -2
  451. package/dist/transaction/coordination/targetConflict.js +0 -103
  452. package/dist/transaction/coordination/trace.d.ts +0 -78
  453. package/dist/transaction/coordination/trace.js +0 -138
  454. package/dist/transaction/durableWrites.d.ts +0 -62
  455. package/dist/transaction/durableWrites.js +0 -71
  456. package/dist/transaction/environment.d.ts +0 -105
  457. package/dist/transaction/environment.js +0 -108
  458. package/dist/transaction/errorCodes.d.ts +0 -403
  459. package/dist/transaction/errorCodes.js +0 -480
  460. package/dist/transaction/errors.d.ts +0 -428
  461. package/dist/transaction/errors.js +0 -686
  462. package/dist/transaction/index.d.ts +0 -20
  463. package/dist/transaction/index.js +0 -20
  464. package/dist/transaction/keys/index.d.ts +0 -87
  465. package/dist/transaction/keys/index.js +0 -207
  466. package/dist/transaction/log/syncDeltaRow.d.ts +0 -158
  467. package/dist/transaction/log/syncDeltaRow.js +0 -95
  468. package/dist/transaction/logPosition.d.ts +0 -97
  469. package/dist/transaction/logPosition.js +0 -125
  470. package/dist/transaction/logger.d.ts +0 -16
  471. package/dist/transaction/logger.js +0 -7
  472. package/dist/transaction/observability.d.ts +0 -53
  473. package/dist/transaction/observability.js +0 -19
  474. package/dist/transaction/persistence.d.ts +0 -12
  475. package/dist/transaction/persistence.js +0 -11
  476. package/dist/transaction/plugin.d.ts +0 -192
  477. package/dist/transaction/plugin.js +0 -87
  478. package/dist/transaction/policy/types.d.ts +0 -217
  479. package/dist/transaction/policy/types.js +0 -126
  480. package/dist/transaction/resources/functionalUpdate.d.ts +0 -79
  481. package/dist/transaction/resources/functionalUpdate.js +0 -87
  482. package/dist/transaction/resources/httpResources.d.ts +0 -266
  483. package/dist/transaction/resources/httpResources.js +0 -7
  484. package/dist/transaction/resources/modelOperations.d.ts +0 -319
  485. package/dist/transaction/resources/modelOperations.js +0 -12
  486. package/dist/transaction/resources/mutationOptions.d.ts +0 -66
  487. package/dist/transaction/resources/mutationOptions.js +0 -9
  488. package/dist/transaction/resources/where.d.ts +0 -85
  489. package/dist/transaction/resources/where.js +0 -70
  490. package/dist/transaction/resources/writeOptionsSchema.d.ts +0 -47
  491. package/dist/transaction/resources/writeOptionsSchema.js +0 -73
  492. package/dist/transaction/schema/field.d.ts +0 -126
  493. package/dist/transaction/schema/field.js +0 -265
  494. package/dist/transaction/schema/loadStrategy.d.ts +0 -45
  495. package/dist/transaction/schema/loadStrategy.js +0 -46
  496. package/dist/transaction/schema/model.d.ts +0 -379
  497. package/dist/transaction/schema/model.js +0 -123
  498. package/dist/transaction/schema/openapi.d.ts +0 -57
  499. package/dist/transaction/schema/openapi.js +0 -340
  500. package/dist/transaction/schema/relation.d.ts +0 -199
  501. package/dist/transaction/schema/relation.js +0 -104
  502. package/dist/transaction/schema/residency.d.ts +0 -29
  503. package/dist/transaction/schema/residency.js +0 -25
  504. package/dist/transaction/schema/roles.d.ts +0 -249
  505. package/dist/transaction/schema/roles.js +0 -230
  506. package/dist/transaction/schema/schema.d.ts +0 -324
  507. package/dist/transaction/schema/schema.js +0 -305
  508. package/dist/transaction/schema/tenancy.d.ts +0 -139
  509. package/dist/transaction/schema/tenancy.js +0 -190
  510. package/dist/transaction/transactionLayer.d.ts +0 -82
  511. package/dist/transaction/transactionLayer.js +0 -24
  512. package/dist/transaction/transactions/settlement/commitEnvelope.d.ts +0 -143
  513. package/dist/transaction/transactions/settlement/commitEnvelope.js +0 -161
  514. package/dist/transaction/transactions/settlement/httpCommitEnvelope.d.ts +0 -53
  515. package/dist/transaction/transactions/settlement/httpCommitEnvelope.js +0 -207
  516. package/dist/transaction/transactions/settlement/idempotencyKey.d.ts +0 -10
  517. package/dist/transaction/transactions/settlement/idempotencyKey.js +0 -9
  518. package/dist/transaction/transactions/settlement/pendingWrite.d.ts +0 -112
  519. package/dist/transaction/transactions/settlement/pendingWrite.js +0 -20
  520. package/dist/transaction/transport/commitFrames.d.ts +0 -90
  521. package/dist/transaction/transport/commitFrames.js +0 -134
  522. package/dist/transaction/transport/connectionManager.d.ts +0 -215
  523. package/dist/transaction/transport/connectionManager.js +0 -673
  524. package/dist/transaction/transport/credentialLifecycle.d.ts +0 -177
  525. package/dist/transaction/transport/credentialLifecycle.js +0 -324
  526. package/dist/transaction/transport/heartbeat.d.ts +0 -65
  527. package/dist/transaction/transport/heartbeat.js +0 -93
  528. package/dist/transaction/transport/httpClient.d.ts +0 -123
  529. package/dist/transaction/transport/httpClient.js +0 -145
  530. package/dist/transaction/transport/httpOptions.d.ts +0 -33
  531. package/dist/transaction/transport/httpOptions.js +0 -12
  532. package/dist/transaction/transport/httpTransport.d.ts +0 -8
  533. package/dist/transaction/transport/httpTransport.js +0 -1276
  534. package/dist/transaction/transport/networkProbe.d.ts +0 -84
  535. package/dist/transaction/transport/networkProbe.js +0 -207
  536. package/dist/transaction/transport/wsFrameHandlers.d.ts +0 -128
  537. package/dist/transaction/transport/wsFrameHandlers.js +0 -429
  538. package/dist/transaction/transport/wsTransport.d.ts +0 -576
  539. package/dist/transaction/transport/wsTransport.js +0 -1017
  540. package/dist/transaction/types/assertExact.d.ts +0 -17
  541. package/dist/transaction/types/assertExact.js +0 -1
  542. package/dist/transaction/types/global.d.ts +0 -107
  543. package/dist/transaction/types/global.js +0 -40
  544. package/dist/transaction/types/index.d.ts +0 -205
  545. package/dist/transaction/types/index.js +0 -56
  546. package/dist/transaction/types/modelData.d.ts +0 -10
  547. package/dist/transaction/types/modelData.js +0 -9
  548. package/dist/transaction/types/participant.d.ts +0 -20
  549. package/dist/transaction/types/participant.js +0 -10
  550. package/dist/transaction/types/streams.d.ts +0 -540
  551. package/dist/transaction/types/streams.js +0 -11
  552. package/dist/transaction/utils/asyncIterator.d.ts +0 -34
  553. package/dist/transaction/utils/asyncIterator.js +0 -135
  554. package/dist/transaction/utils/duration.d.ts +0 -25
  555. package/dist/transaction/utils/duration.js +0 -45
  556. package/dist/transaction/utils/json.d.ts +0 -57
  557. package/dist/transaction/utils/json.js +0 -276
  558. package/dist/transaction/wire/accountResponses.d.ts +0 -351
  559. package/dist/transaction/wire/accountResponses.js +0 -255
  560. package/dist/transaction/wire/auth.d.ts +0 -49
  561. package/dist/transaction/wire/auth.js +0 -57
  562. package/dist/transaction/wire/bootstrapReason.d.ts +0 -9
  563. package/dist/transaction/wire/bootstrapReason.js +0 -8
  564. package/dist/transaction/wire/claimEvent.d.ts +0 -76
  565. package/dist/transaction/wire/claimEvent.js +0 -73
  566. package/dist/transaction/wire/claims.d.ts +0 -463
  567. package/dist/transaction/wire/claims.js +0 -229
  568. package/dist/transaction/wire/commit.d.ts +0 -603
  569. package/dist/transaction/wire/commit.js +0 -321
  570. package/dist/transaction/wire/delta.d.ts +0 -250
  571. package/dist/transaction/wire/delta.js +0 -147
  572. package/dist/transaction/wire/errorEnvelope.d.ts +0 -72
  573. package/dist/transaction/wire/errorEnvelope.js +0 -123
  574. package/dist/transaction/wire/feedCursor.d.ts +0 -60
  575. package/dist/transaction/wire/feedCursor.js +0 -82
  576. package/dist/transaction/wire/feedEvent.d.ts +0 -177
  577. package/dist/transaction/wire/feedEvent.js +0 -39
  578. package/dist/transaction/wire/frames.d.ts +0 -194
  579. package/dist/transaction/wire/frames.js +0 -50
  580. package/dist/transaction/wire/inboundFrames.d.ts +0 -552
  581. package/dist/transaction/wire/inboundFrames.js +0 -116
  582. package/dist/transaction/wire/index.d.ts +0 -50
  583. package/dist/transaction/wire/index.js +0 -74
  584. package/dist/transaction/wire/listEnvelope.d.ts +0 -37
  585. package/dist/transaction/wire/listEnvelope.js +0 -42
  586. package/dist/transaction/wire/modelResponses.d.ts +0 -85
  587. package/dist/transaction/wire/modelResponses.js +0 -43
  588. package/dist/transaction/wire/protocol.d.ts +0 -38
  589. package/dist/transaction/wire/protocol.js +0 -38
  590. package/dist/transaction/wire/protocolVersion.d.ts +0 -73
  591. package/dist/transaction/wire/protocolVersion.js +0 -83
  592. package/dist/transactions/mutations/MutationQueue.d.ts +0 -655
  593. package/dist/transactions/mutations/MutationQueue.js +0 -2797
  594. package/dist/transactions/mutations/MutationStore.d.ts +0 -20
  595. package/dist/transactions/mutations/MutationStore.js +0 -53
  596. package/dist/transactions/mutations/UnconfirmedWrites.d.ts +0 -82
  597. package/dist/transactions/mutations/UnconfirmedWrites.js +0 -104
  598. package/dist/transactions/mutations/coalesceRules.d.ts +0 -58
  599. package/dist/transactions/mutations/coalesceRules.js +0 -140
  600. package/dist/transactions/mutations/commitLatency.d.ts +0 -52
  601. package/dist/transactions/mutations/commitLatency.js +0 -130
  602. package/dist/transactions/mutations/commitOutboxStore.d.ts +0 -28
  603. package/dist/transactions/mutations/commitOutboxStore.js +0 -26
  604. package/dist/transactions/mutations/commitPayload.d.ts +0 -164
  605. package/dist/transactions/mutations/commitPayload.js +0 -152
  606. package/dist/transactions/mutations/deltaConfirmation.d.ts +0 -59
  607. package/dist/transactions/mutations/deltaConfirmation.js +0 -233
  608. package/dist/transactions/mutations/durableWriteStore.d.ts +0 -14
  609. package/dist/transactions/mutations/durableWriteStore.js +0 -12
  610. package/dist/transactions/mutations/optimisticApply.d.ts +0 -49
  611. package/dist/transactions/mutations/optimisticApply.js +0 -65
  612. package/dist/transactions/mutations/replayValidation.d.ts +0 -186
  613. package/dist/transactions/mutations/replayValidation.js +0 -163
  614. package/dist/utils/mobxSetup.d.ts +0 -53
  615. package/dist/utils/mobxSetup.js +0 -330
  616. package/dist/webhooks/events.d.ts +0 -43
  617. package/dist/webhooks/events.js +0 -42
  618. package/dist/webhooks/index.d.ts +0 -8
  619. package/dist/webhooks/index.js +0 -8
  620. package/dist/wire/index.d.ts +0 -1
  621. package/dist/wire/index.js +0 -8
  622. package/docs/interaction-model.md +0 -99
@@ -1,105 +0,0 @@
1
- /**
2
- * Manages the client-side IndexedDB databases the sync engine keeps in the
3
- * browser. There are two tiers. A single registry database, `ablo_databases`,
4
- * records metadata about every workspace database. Each user-and-workspace pair
5
- * then gets its own data database, named `ablo_<hash>`, that holds the synced
6
- * rows. {@link DatabaseManager} creates, versions, and deletes both tiers.
7
- */
8
- export interface DatabaseInfo {
9
- name: string;
10
- userId: string;
11
- workspaceId: string;
12
- schemaHash: string;
13
- schemaVersion: number;
14
- userVersion?: number;
15
- createdAt: Date;
16
- updatedAt: Date;
17
- }
18
- export interface WorkspaceMetadata {
19
- lastSyncId: number;
20
- firstSyncId: number;
21
- backendDatabaseVersion: number;
22
- subscribedSyncGroups: string[];
23
- updatedAt: Date;
24
- schemaHash?: string;
25
- syncGroups?: string[];
26
- }
27
- /**
28
- * DatabaseManager - Manages Ablo's two-tier database architecture
29
- *
30
- * Key responsibilities:
31
- * - Manages ablo_databases (database registry)
32
- * - Creates workspace-specific databases (ablo_hash)
33
- * - Handles database migration and versioning
34
- * - Provides database info and metadata management
35
- */
36
- export declare class DatabaseManager {
37
- private metaDb;
38
- private readonly metaDbName;
39
- constructor();
40
- /**
41
- * Initialize the meta database (ablo_databases)
42
- */
43
- initializeMetaDatabase(): Promise<void>;
44
- /**
45
- * Calculate database info for a user/workspace combination
46
- */
47
- calculateDatabaseInfo(userId: string, workspaceId: string, userVersion?: number): Promise<DatabaseInfo>;
48
- /**
49
- * Generate deterministic database name
50
- */
51
- private generateDatabaseName;
52
- /**
53
- * Register database info in ablo_databases
54
- */
55
- registerDatabase(info: DatabaseInfo): Promise<void>;
56
- /**
57
- * Get database info by name
58
- */
59
- getDatabaseInfo(name: string): Promise<DatabaseInfo | null>;
60
- /**
61
- * Get all databases for a user
62
- */
63
- getDatabasesForUser(userId: string): Promise<DatabaseInfo[]>;
64
- /**
65
- * Open workspace-specific database
66
- */
67
- openWorkspaceDatabase(dbInfo: DatabaseInfo, createStoresFn?: (db: IDBDatabase, tx: IDBTransaction) => Promise<void>): Promise<IDBDatabase>;
68
- /**
69
- * Read workspace metadata from __meta table
70
- */
71
- getWorkspaceMetadata(db: IDBDatabase): Promise<WorkspaceMetadata | null>;
72
- /**
73
- * Write workspace metadata to __meta table
74
- */
75
- setWorkspaceMetadata(db: IDBDatabase, metadata: WorkspaceMetadata): Promise<void>;
76
- /**
77
- * Check if a model is persisted (all instances loaded)
78
- */
79
- isModelPersisted(db: IDBDatabase, modelName: string): Promise<boolean>;
80
- /**
81
- * Mark a model as persisted
82
- */
83
- setModelPersisted(db: IDBDatabase, modelName: string, persisted: boolean): Promise<void>;
84
- /**
85
- * Get all model persistence states
86
- */
87
- getAllModelPersistenceStates(db: IDBDatabase): Promise<Record<string, boolean>>;
88
- /**
89
- * Delete a workspace database
90
- */
91
- deleteWorkspaceDatabase(dbInfo: DatabaseInfo): Promise<void>;
92
- /**
93
- * Get comprehensive database statistics
94
- */
95
- getDatabaseStatistics(): Promise<{
96
- metaDatabaseSize: number;
97
- totalWorkspaceDatabases: number;
98
- databasesByUser: Record<string, number>;
99
- schemaVersions: Record<string, number>;
100
- }>;
101
- /**
102
- * Close all database connections
103
- */
104
- close(): Promise<void>;
105
- }
@@ -1,387 +0,0 @@
1
- /**
2
- * Manages the client-side IndexedDB databases the sync engine keeps in the
3
- * browser. There are two tiers. A single registry database, `ablo_databases`,
4
- * records metadata about every workspace database. Each user-and-workspace pair
5
- * then gets its own data database, named `ablo_<hash>`, that holds the synced
6
- * rows. {@link DatabaseManager} creates, versions, and deletes both tiers.
7
- */
8
- import { getContext } from '../context.js';
9
- import { openIDBWithTimeout, deleteIDBWithTimeout, IDBOpenTimeoutError, } from './openIDBWithTimeout.js';
10
- import { AbloConnectionError } from '../transaction/errors.js';
11
- import { getActiveRegistry, hasActiveRegistry } from '../ModelRegistry.js';
12
- /**
13
- * DatabaseManager - Manages Ablo's two-tier database architecture
14
- *
15
- * Key responsibilities:
16
- * - Manages ablo_databases (database registry)
17
- * - Creates workspace-specific databases (ablo_hash)
18
- * - Handles database migration and versioning
19
- * - Provides database info and metadata management
20
- */
21
- export class DatabaseManager {
22
- metaDb = null;
23
- metaDbName = 'ablo_databases';
24
- constructor() {
25
- // Singleton-like behavior
26
- }
27
- /**
28
- * Initialize the meta database (ablo_databases)
29
- */
30
- async initializeMetaDatabase() {
31
- const open = () => openIDBWithTimeout(this.metaDbName, 1, {
32
- onUpgrade: (request) => {
33
- const db = request.result;
34
- if (!db.objectStoreNames.contains('databases')) {
35
- const store = db.createObjectStore('databases', { keyPath: 'name' });
36
- store.createIndex('userId', 'userId');
37
- store.createIndex('workspaceId', 'workspaceId');
38
- store.createIndex('schemaHash', 'schemaHash');
39
- store.createIndex('updatedAt', 'updatedAt');
40
- }
41
- },
42
- });
43
- try {
44
- this.metaDb = await open();
45
- }
46
- catch (error) {
47
- // Self-heal a wedged meta DB. When `ablo_databases`'s backing store gets
48
- // stuck (a corrupted store, or a leaked connection from a prior
49
- // timed-out open), every open of that name hangs with no event and the
50
- // app is permanently bricked until the user manually clears site data —
51
- // the "open did not resolve within 10000ms" dead end. The registry this
52
- // DB holds is rebuildable from the server on the next bootstrap, so it is
53
- // safe to delete and re-create. Try exactly once: delete, then re-open.
54
- if (!(error instanceof IDBOpenTimeoutError))
55
- throw error;
56
- getContext().logger.debug('[sync-engine] meta DB open timed out — attempting self-heal (delete + retry)', { db: this.metaDbName, reason: error.reason });
57
- getContext().observability.captureBootstrapFailure(error, {
58
- type: 'meta-db-open-timeout',
59
- });
60
- const deleted = await deleteIDBWithTimeout(this.metaDbName);
61
- if (!deleted) {
62
- // The delete itself was blocked/stuck — a live connection in another
63
- // window or a deadlocked backing store. We cannot recover in-page;
64
- // rethrow so the provider surfaces the real (now actionable) error.
65
- throw error;
66
- }
67
- // Fresh store — this open creates `ablo_databases` from scratch.
68
- this.metaDb = await open();
69
- getContext().logger.info('[sync-engine] meta DB self-heal succeeded');
70
- }
71
- }
72
- /**
73
- * Calculate database info for a user/workspace combination
74
- */
75
- async calculateDatabaseInfo(userId, workspaceId, userVersion = 1) {
76
- // Get schema hash from the active ModelRegistry
77
- const schemaHash = hasActiveRegistry()
78
- ? getActiveRegistry().getSchemaHash()
79
- : 'no-registry-hash';
80
- // Generate database name from userId, workspaceId, and versions
81
- const dbName = this.generateDatabaseName(userId, workspaceId, userVersion);
82
- // Check if we need to increment schema version
83
- const existingInfo = await this.getDatabaseInfo(dbName);
84
- let schemaVersion = 1;
85
- if (existingInfo && existingInfo.schemaHash !== schemaHash) {
86
- schemaVersion = (existingInfo.schemaVersion || 1) + 1;
87
- }
88
- else if (existingInfo) {
89
- schemaVersion = existingInfo.schemaVersion || 1;
90
- }
91
- // Record the existing databases for this user so duplicates can be detected.
92
- const allUserDatabases = await this.getDatabasesForUser(userId);
93
- const allIndexedDBs = (await indexedDB.databases?.()) || [];
94
- const abloDatabases = allIndexedDBs.filter((db) => db.name?.startsWith('ablo_'));
95
- getContext().observability.breadcrumb('Database info calculated', 'sync.database', 'info', {
96
- dbName,
97
- schemaVersion,
98
- existingDbCount: allUserDatabases.length,
99
- abloDbCount: abloDatabases.length,
100
- });
101
- return {
102
- name: dbName,
103
- userId,
104
- workspaceId,
105
- schemaHash,
106
- schemaVersion,
107
- userVersion,
108
- createdAt: existingInfo?.createdAt ?? new Date(),
109
- updatedAt: new Date(),
110
- };
111
- }
112
- /**
113
- * Generate deterministic database name
114
- */
115
- generateDatabaseName(userId, workspaceId, userVersion = 1) {
116
- // Combine userId, workspaceId, and userVersion for unique database
117
- const combined = `${userId}:${workspaceId}:${userVersion}`;
118
- // Hash the combined key into a compact, deterministic identifier.
119
- let hash = 0;
120
- for (let i = 0; i < combined.length; i++) {
121
- hash = (hash << 5) - hash + combined.charCodeAt(i);
122
- hash = hash & hash; // Convert to 32bit integer
123
- }
124
- // Convert to hex and create Ablo-style name
125
- const hexHash = Math.abs(hash).toString(16).padStart(8, '0');
126
- return `ablo_${hexHash}`;
127
- }
128
- /**
129
- * Register database info in ablo_databases
130
- */
131
- async registerDatabase(info) {
132
- if (!this.metaDb) {
133
- throw new AbloConnectionError('Meta database not initialized', {
134
- code: 'meta_db_not_initialized',
135
- });
136
- }
137
- return new Promise((resolve, reject) => {
138
- const tx = this.metaDb.transaction(['databases'], 'readwrite');
139
- const store = tx.objectStore('databases');
140
- const request = store.put(info);
141
- tx.oncomplete = () => {
142
- resolve();
143
- };
144
- tx.onerror = () => { reject(tx.error); };
145
- request.onerror = () => { reject(request.error); };
146
- });
147
- }
148
- /**
149
- * Get database info by name
150
- */
151
- async getDatabaseInfo(name) {
152
- if (!this.metaDb)
153
- return null;
154
- return new Promise((resolve, reject) => {
155
- const tx = this.metaDb.transaction(['databases'], 'readonly');
156
- const store = tx.objectStore('databases');
157
- const request = store.get(name);
158
- request.onsuccess = () => { resolve(request.result ?? null); };
159
- request.onerror = () => { reject(request.error); };
160
- });
161
- }
162
- /**
163
- * Get all databases for a user
164
- */
165
- async getDatabasesForUser(userId) {
166
- if (!this.metaDb)
167
- return [];
168
- return new Promise((resolve, reject) => {
169
- const tx = this.metaDb.transaction(['databases'], 'readonly');
170
- const store = tx.objectStore('databases');
171
- const index = store.index('userId');
172
- const request = index.getAll(userId);
173
- request.onsuccess = () => { resolve(request.result || []); };
174
- request.onerror = () => { reject(request.error); };
175
- });
176
- }
177
- /**
178
- * Open workspace-specific database
179
- */
180
- async openWorkspaceDatabase(dbInfo, createStoresFn) {
181
- try {
182
- return await openIDBWithTimeout(dbInfo.name, dbInfo.schemaVersion, {
183
- onUpgrade: (request, event) => {
184
- const db = request.result;
185
- const tx = event.target.transaction;
186
- // IndexedDB rule: only awaits on IndexedDB requests keep an upgrade
187
- // transaction alive. Any other await — a fetch, a timer — commits the
188
- // transaction early, and later operations then throw
189
- // `TransactionInactiveError`. StoreManager.createStores runs only
190
- // synchronous createObjectStore / createIndex calls under an `async`
191
- // keyword, so calling it without awaiting is safe here.
192
- if (createStoresFn && tx) {
193
- try {
194
- void createStoresFn(db, tx).catch((err) => {
195
- getContext().observability.captureBootstrapFailure(err, {
196
- type: 'store-creation',
197
- });
198
- });
199
- }
200
- catch (err) {
201
- getContext().observability.captureBootstrapFailure(err, {
202
- type: 'store-creation',
203
- });
204
- }
205
- }
206
- },
207
- });
208
- }
209
- catch (error) {
210
- getContext().observability.captureBootstrapFailure(error, {
211
- type: 'database-open',
212
- });
213
- throw error;
214
- }
215
- }
216
- /**
217
- * Read workspace metadata from __meta table
218
- */
219
- async getWorkspaceMetadata(db) {
220
- return new Promise((resolve, reject) => {
221
- const tx = db.transaction(['__meta'], 'readonly');
222
- const store = tx.objectStore('__meta');
223
- const request = store.get('metadata');
224
- request.onsuccess = () => {
225
- const data = request.result;
226
- if (!data) {
227
- resolve(null);
228
- return;
229
- }
230
- const meta = {
231
- lastSyncId: data.lastSyncId ?? 0,
232
- firstSyncId: data.firstSyncId ?? 0,
233
- backendDatabaseVersion: data.backendDatabaseVersion ?? 1,
234
- subscribedSyncGroups: data.subscribedSyncGroups ?? [],
235
- updatedAt: data.updatedAt ? new Date(data.updatedAt) : new Date(),
236
- schemaHash: data.schemaHash,
237
- syncGroups: data.syncGroups,
238
- // Older persisted records may still carry an extra `versions` key
239
- // that is no longer used; it is tolerated by simply not reading it here.
240
- };
241
- resolve(meta);
242
- };
243
- request.onerror = () => { reject(request.error); };
244
- });
245
- }
246
- /**
247
- * Write workspace metadata to __meta table
248
- */
249
- async setWorkspaceMetadata(db, metadata) {
250
- return new Promise((resolve, reject) => {
251
- const tx = db.transaction(['__meta'], 'readwrite');
252
- const store = tx.objectStore('__meta');
253
- const request = store.put(metadata, 'metadata');
254
- tx.oncomplete = () => { resolve(); };
255
- tx.onerror = () => { reject(tx.error); };
256
- request.onerror = () => { reject(request.error); };
257
- });
258
- }
259
- /**
260
- * Check if a model is persisted (all instances loaded)
261
- */
262
- async isModelPersisted(db, modelName) {
263
- return new Promise((resolve, reject) => {
264
- const tx = db.transaction(['__meta'], 'readonly');
265
- const store = tx.objectStore('__meta');
266
- const request = store.get(modelName);
267
- request.onsuccess = () => {
268
- const data = request.result;
269
- resolve(data?.persisted === true);
270
- };
271
- request.onerror = () => { reject(request.error); };
272
- });
273
- }
274
- /**
275
- * Mark a model as persisted
276
- */
277
- async setModelPersisted(db, modelName, persisted) {
278
- return new Promise((resolve, reject) => {
279
- const tx = db.transaction(['__meta'], 'readwrite');
280
- const store = tx.objectStore('__meta');
281
- const persistenceData = {
282
- persisted,
283
- modelName,
284
- timestamp: Date.now(),
285
- updatedAt: new Date().toISOString(),
286
- };
287
- const request = store.put(persistenceData, modelName);
288
- tx.oncomplete = () => { resolve(); };
289
- tx.onerror = () => { reject(tx.error); };
290
- request.onerror = () => { reject(request.error); };
291
- });
292
- }
293
- /**
294
- * Get all model persistence states
295
- */
296
- async getAllModelPersistenceStates(db) {
297
- return new Promise((resolve, reject) => {
298
- const tx = db.transaction(['__meta'], 'readonly');
299
- const store = tx.objectStore('__meta');
300
- const request = store.getAll();
301
- request.onsuccess = () => {
302
- const states = {};
303
- for (const item of request.result) {
304
- // Skip metadata entry
305
- if (item.key === 'metadata')
306
- continue;
307
- if (item.modelName) {
308
- states[item.modelName] = item.persisted === true;
309
- }
310
- }
311
- resolve(states);
312
- };
313
- request.onerror = () => { reject(request.error); };
314
- });
315
- }
316
- /**
317
- * Delete a workspace database
318
- */
319
- async deleteWorkspaceDatabase(dbInfo) {
320
- return new Promise((resolve, reject) => {
321
- const deleteRequest = indexedDB.deleteDatabase(dbInfo.name);
322
- deleteRequest.onsuccess = async () => {
323
- // Remove from registry
324
- if (this.metaDb) {
325
- const tx = this.metaDb.transaction(['databases'], 'readwrite');
326
- const store = tx.objectStore('databases');
327
- store.delete(dbInfo.name);
328
- }
329
- resolve();
330
- };
331
- deleteRequest.onerror = () => {
332
- getContext().observability.breadcrumb(`Failed to delete workspace database: ${dbInfo.name}`, 'sync.database', 'error');
333
- reject(deleteRequest.error);
334
- };
335
- deleteRequest.onblocked = () => {
336
- getContext().observability.breadcrumb(`Database deletion blocked: ${dbInfo.name}`, 'sync.database', 'warning');
337
- // Could implement retry logic or user notification
338
- };
339
- });
340
- }
341
- /**
342
- * Get comprehensive database statistics
343
- */
344
- async getDatabaseStatistics() {
345
- if (!this.metaDb) {
346
- return {
347
- metaDatabaseSize: 0,
348
- totalWorkspaceDatabases: 0,
349
- databasesByUser: {},
350
- schemaVersions: {},
351
- };
352
- }
353
- return new Promise((resolve, reject) => {
354
- const tx = this.metaDb.transaction(['databases'], 'readonly');
355
- const store = tx.objectStore('databases');
356
- const request = store.getAll();
357
- request.onsuccess = () => {
358
- const databases = request.result;
359
- const databasesByUser = {};
360
- const schemaVersions = {};
361
- for (const db of databases) {
362
- // Count by user
363
- databasesByUser[db.userId] = (databasesByUser[db.userId] ?? 0) + 1;
364
- // Count schema versions
365
- const versionKey = `v${db.schemaVersion}`;
366
- schemaVersions[versionKey] = (schemaVersions[versionKey] ?? 0) + 1;
367
- }
368
- resolve({
369
- metaDatabaseSize: databases.length,
370
- totalWorkspaceDatabases: databases.length,
371
- databasesByUser,
372
- schemaVersions,
373
- });
374
- };
375
- request.onerror = () => { reject(request.error); };
376
- });
377
- }
378
- /**
379
- * Close all database connections
380
- */
381
- async close() {
382
- if (this.metaDb) {
383
- this.metaDb.close();
384
- this.metaDb = null;
385
- }
386
- }
387
- }
@@ -1,75 +0,0 @@
1
- /**
2
- * Runs in-memory queries over a set of models — filtering by predicate,
3
- * sorting, paginating, and caching the results. A caller hands
4
- * {@link QueryProcessor} the candidate models and the query options, and it
5
- * returns a {@link QueryResult}. It keeps two caches: a string-keyed cache for
6
- * plain queries, and a structural-identity cache for predicate queries, whose
7
- * closures cannot be turned into a stable string key.
8
- */
9
- import type { Model } from '../Model.js';
10
- import type { ModelScope } from '../InstanceCache.js';
11
- export interface QueryOptions<T extends Model> {
12
- predicate?: (model: T) => boolean;
13
- /** Stable key to distinguish different predicates for the same model type.
14
- * Required when multiple predicate queries exist for the same model — without this,
15
- * they share a cache key and thrash each other's cached result every render. */
16
- predicateKey?: string;
17
- scope?: ModelScope;
18
- orderBy?: keyof T;
19
- order?: 'asc' | 'desc';
20
- limit?: number;
21
- offset?: number;
22
- skipCache?: boolean;
23
- }
24
- export interface QueryResult<T extends Model> {
25
- data: T[];
26
- total: number;
27
- hasMore: boolean;
28
- fromCache?: boolean;
29
- }
30
- export declare class QueryProcessor {
31
- private cache;
32
- private enableCache;
33
- private predicateResultCache;
34
- constructor(config?: {
35
- enableCache?: boolean;
36
- });
37
- /**
38
- * Process query with filtering, sorting, and pagination
39
- */
40
- processQuery<T extends Model>(models: T[], modelName: string, options?: QueryOptions<T>): QueryResult<T>;
41
- /**
42
- * Sort models by field
43
- */
44
- private sortModels;
45
- /**
46
- * Find first matching model with predicate
47
- */
48
- findFirst<T extends Model>(models: Generator<T, void, unknown>, predicate: (model: T) => boolean): T | undefined;
49
- /**
50
- * Count models with optional predicate
51
- */
52
- countModels<T extends Model>(models: Generator<T, void, unknown>, predicate?: (model: T) => boolean): number;
53
- /**
54
- * Generate a deterministic cache key from query parameters.
55
- * Functions (predicates) are excluded from the key — predicate queries use
56
- * the structural identity cache (predicateResultCache) instead of the
57
- * string-based cache.
58
- */
59
- private generateCacheKey;
60
- /**
61
- * Invalidate cache by pattern
62
- */
63
- invalidateCache(pattern?: string): void;
64
- /**
65
- * Clear all cache
66
- */
67
- clearCache(): void;
68
- /**
69
- * Get cache stats for debugging
70
- */
71
- getCacheStats(): {
72
- size: number;
73
- enabled: boolean;
74
- };
75
- }