@abloatai/ablo 0.36.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 (597) hide show
  1. package/AGENTS.md +2 -2
  2. package/CHANGELOG.md +71 -2013
  3. package/NOTICE +2 -2
  4. package/README.md +25 -71
  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 -114
  19. package/dist/index.d.ts.map +1 -0
  20. package/dist/index.js +3 -163
  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 +1 -1
  59. package/docs/api-keys.md +7 -6
  60. package/docs/api.md +10 -10
  61. package/docs/client-behavior.md +5 -5
  62. package/docs/coordination.md +52 -62
  63. package/docs/data-sources.md +1 -1
  64. package/docs/examples/agent-human.md +4 -4
  65. package/docs/examples/ai-sdk-tool.md +1 -1
  66. package/docs/examples/existing-python-backend.md +15 -4
  67. package/docs/examples/nextjs.md +27 -6
  68. package/docs/examples/server-agent.md +2 -2
  69. package/docs/how-it-works.md +4 -4
  70. package/docs/identity.md +2 -1
  71. package/docs/integration-guide.md +24 -13
  72. package/docs/internal/README.md +18 -0
  73. package/docs/internal/agent-fleet-coordination-design.md +171 -0
  74. package/docs/internal/agent-orchestration.md +58 -0
  75. package/docs/internal/commit-identifiers.md +91 -0
  76. package/docs/internal/concurrency-open-decisions.md +37 -0
  77. package/docs/internal/data-source-reverse-channel.md +150 -0
  78. package/docs/internal/per-field-conflict-detection.md +165 -0
  79. package/docs/internal/postgres-replication.md +64 -0
  80. package/docs/internal/serializable-schema.md +119 -0
  81. package/docs/internal/structure.md +32 -0
  82. package/docs/mcp.md +2 -2
  83. package/docs/migration.md +3 -3
  84. package/docs/quickstart.md +2 -2
  85. package/docs/react.md +5 -5
  86. package/docs/schema-contract.md +3 -3
  87. package/docs/sessions.md +91 -37
  88. package/examples/README.md +2 -2
  89. package/examples/data-source/README.md +1 -1
  90. package/examples/data-source/ablo-driver.ts +1 -1
  91. package/examples/data-source/customer-server.ts +1 -1
  92. package/examples/data-source/run.ts +1 -1
  93. package/examples/data-source/schema.ts +1 -1
  94. package/examples/quickstart.ts +2 -2
  95. package/llms.txt +8 -8
  96. package/package.json +63 -166
  97. package/bin/ablo.cjs +0 -39
  98. package/dist/BaseSyncedStore.d.ts +0 -843
  99. package/dist/BaseSyncedStore.js +0 -1971
  100. package/dist/Database.d.ts +0 -323
  101. package/dist/Database.js +0 -1502
  102. package/dist/InstanceCache.d.ts +0 -237
  103. package/dist/InstanceCache.js +0 -1166
  104. package/dist/LazyReferenceCollection.d.ts +0 -177
  105. package/dist/LazyReferenceCollection.js +0 -461
  106. package/dist/Model.d.ts +0 -454
  107. package/dist/Model.js +0 -919
  108. package/dist/ModelRegistry.d.ts +0 -225
  109. package/dist/ModelRegistry.js +0 -539
  110. package/dist/NetworkMonitor.d.ts +0 -28
  111. package/dist/NetworkMonitor.js +0 -79
  112. package/dist/RuntimeContext.d.ts +0 -52
  113. package/dist/RuntimeContext.js +0 -80
  114. package/dist/SyncClient.d.ts +0 -541
  115. package/dist/SyncClient.js +0 -2202
  116. package/dist/adapters/alwaysOnline.d.ts +0 -14
  117. package/dist/adapters/alwaysOnline.js +0 -17
  118. package/dist/adapters/inMemoryStorage.d.ts +0 -31
  119. package/dist/adapters/inMemoryStorage.js +0 -110
  120. package/dist/ai-sdk/coordinatedTool.d.ts +0 -120
  121. package/dist/ai-sdk/coordinatedTool.js +0 -134
  122. package/dist/ai-sdk/coordinationContext.d.ts +0 -46
  123. package/dist/ai-sdk/coordinationContext.js +0 -106
  124. package/dist/ai-sdk/index.d.ts +0 -121
  125. package/dist/ai-sdk/index.js +0 -121
  126. package/dist/ai-sdk/wrap.d.ts +0 -65
  127. package/dist/ai-sdk/wrap.js +0 -39
  128. package/dist/auth/index.d.ts +0 -1
  129. package/dist/auth/index.js +0 -8
  130. package/dist/batching/index.d.ts +0 -55
  131. package/dist/batching/index.js +0 -147
  132. package/dist/client/Ablo.d.ts +0 -231
  133. package/dist/client/Ablo.js +0 -160
  134. package/dist/client/abloClient.d.ts +0 -309
  135. package/dist/client/abloClient.js +0 -13
  136. package/dist/client/clientPrelude.d.ts +0 -52
  137. package/dist/client/clientPrelude.js +0 -60
  138. package/dist/client/consoleLogger.d.ts +0 -35
  139. package/dist/client/consoleLogger.js +0 -44
  140. package/dist/client/coreClient.d.ts +0 -60
  141. package/dist/client/coreClient.js +0 -118
  142. package/dist/client/createInternalComponents.d.ts +0 -50
  143. package/dist/client/createInternalComponents.js +0 -98
  144. package/dist/client/createModelProxy.d.ts +0 -248
  145. package/dist/client/createModelProxy.js +0 -884
  146. package/dist/client/humans.d.ts +0 -69
  147. package/dist/client/humans.js +0 -78
  148. package/dist/client/modelRegistration.d.ts +0 -10
  149. package/dist/client/modelRegistration.js +0 -312
  150. package/dist/client/options.d.ts +0 -461
  151. package/dist/client/options.js +0 -7
  152. package/dist/client/reactiveEngine.d.ts +0 -53
  153. package/dist/client/reactiveEngine.js +0 -688
  154. package/dist/client/resourceTypes.d.ts +0 -12
  155. package/dist/client/resourceTypes.js +0 -10
  156. package/dist/client/schemaConfig.d.ts +0 -44
  157. package/dist/client/schemaConfig.js +0 -185
  158. package/dist/client/storeCluster.d.ts +0 -47
  159. package/dist/client/storeCluster.js +0 -118
  160. package/dist/client/storeLifecycle.d.ts +0 -61
  161. package/dist/client/storeLifecycle.js +0 -231
  162. package/dist/client/validateAbloOptions.d.ts +0 -42
  163. package/dist/client/validateAbloOptions.js +0 -43
  164. package/dist/client/wsMutationExecutor.d.ts +0 -27
  165. package/dist/client/wsMutationExecutor.js +0 -72
  166. package/dist/context.d.ts +0 -42
  167. package/dist/context.js +0 -81
  168. package/dist/coordination/ClaimLog.d.ts +0 -26
  169. package/dist/coordination/ClaimLog.js +0 -32
  170. package/dist/coordination/index.d.ts +0 -1
  171. package/dist/coordination/index.js +0 -8
  172. package/dist/core/index.d.ts +0 -33
  173. package/dist/core/index.js +0 -48
  174. package/dist/docs/catalog.d.ts +0 -72
  175. package/dist/docs/catalog.js +0 -230
  176. package/dist/docs/index.d.ts +0 -10
  177. package/dist/docs/index.js +0 -10
  178. package/dist/environment.d.ts +0 -1
  179. package/dist/environment.js +0 -8
  180. package/dist/interfaces/index.d.ts +0 -311
  181. package/dist/interfaces/index.js +0 -9
  182. package/dist/keys/index.d.ts +0 -1
  183. package/dist/keys/index.js +0 -8
  184. package/dist/mutators/RecordingMutation.d.ts +0 -36
  185. package/dist/mutators/RecordingMutation.js +0 -182
  186. package/dist/mutators/Transaction.d.ts +0 -40
  187. package/dist/mutators/Transaction.js +0 -58
  188. package/dist/mutators/UndoManager.d.ts +0 -258
  189. package/dist/mutators/UndoManager.js +0 -658
  190. package/dist/mutators/defineMutators.d.ts +0 -60
  191. package/dist/mutators/defineMutators.js +0 -18
  192. package/dist/mutators/inverseOp.d.ts +0 -126
  193. package/dist/mutators/inverseOp.js +0 -71
  194. package/dist/mutators/mutateActions.d.ts +0 -45
  195. package/dist/mutators/mutateActions.js +0 -105
  196. package/dist/mutators/readerActions.d.ts +0 -33
  197. package/dist/mutators/readerActions.js +0 -57
  198. package/dist/mutators/undoApply.d.ts +0 -51
  199. package/dist/mutators/undoApply.js +0 -117
  200. package/dist/policy/index.d.ts +0 -21
  201. package/dist/policy/index.js +0 -20
  202. package/dist/query/QueryProcessor.d.ts +0 -75
  203. package/dist/query/QueryProcessor.js +0 -255
  204. package/dist/query/client.d.ts +0 -64
  205. package/dist/query/client.js +0 -138
  206. package/dist/query/types.d.ts +0 -85
  207. package/dist/query/types.js +0 -16
  208. package/dist/react/AbloProvider.d.ts +0 -242
  209. package/dist/react/AbloProvider.js +0 -458
  210. package/dist/react/ClientSideSuspense.d.ts +0 -36
  211. package/dist/react/ClientSideSuspense.js +0 -17
  212. package/dist/react/DefaultFallback.d.ts +0 -24
  213. package/dist/react/DefaultFallback.js +0 -43
  214. package/dist/react/context.d.ts +0 -55
  215. package/dist/react/context.js +0 -29
  216. package/dist/react/createAbloReact.d.ts +0 -56
  217. package/dist/react/createAbloReact.js +0 -51
  218. package/dist/react/index.d.ts +0 -62
  219. package/dist/react/index.js +0 -69
  220. package/dist/react/internalContext.d.ts +0 -33
  221. package/dist/react/internalContext.js +0 -3
  222. package/dist/react/useAblo.d.ts +0 -82
  223. package/dist/react/useAblo.js +0 -120
  224. package/dist/react/useCurrentUserId.d.ts +0 -22
  225. package/dist/react/useCurrentUserId.js +0 -34
  226. package/dist/react/useErrorListener.d.ts +0 -20
  227. package/dist/react/useErrorListener.js +0 -38
  228. package/dist/react/useMutationFailureListener.d.ts +0 -26
  229. package/dist/react/useMutationFailureListener.js +0 -38
  230. package/dist/react/useMutators.d.ts +0 -56
  231. package/dist/react/useMutators.js +0 -84
  232. package/dist/react/useReactive.d.ts +0 -35
  233. package/dist/react/useReactive.js +0 -123
  234. package/dist/react/useSyncStatus.d.ts +0 -59
  235. package/dist/react/useSyncStatus.js +0 -76
  236. package/dist/react/useUndoScope.d.ts +0 -34
  237. package/dist/react/useUndoScope.js +0 -81
  238. package/dist/schema/coordination.d.ts +0 -112
  239. package/dist/schema/coordination.js +0 -133
  240. package/dist/schema/ddl.d.ts +0 -97
  241. package/dist/schema/ddl.js +0 -491
  242. package/dist/schema/ddlLock.d.ts +0 -35
  243. package/dist/schema/ddlLock.js +0 -46
  244. package/dist/schema/diff.d.ts +0 -225
  245. package/dist/schema/diff.js +0 -289
  246. package/dist/schema/generate.d.ts +0 -19
  247. package/dist/schema/generate.js +0 -86
  248. package/dist/schema/index.d.ts +0 -42
  249. package/dist/schema/index.js +0 -80
  250. package/dist/schema/queries.d.ts +0 -201
  251. package/dist/schema/queries.js +0 -144
  252. package/dist/schema/select.d.ts +0 -40
  253. package/dist/schema/select.js +0 -90
  254. package/dist/schema/serialize.d.ts +0 -115
  255. package/dist/schema/serialize.js +0 -265
  256. package/dist/schema/sugar.d.ts +0 -109
  257. package/dist/schema/sugar.js +0 -83
  258. package/dist/schema/syncDeltaRow.d.ts +0 -6
  259. package/dist/schema/syncDeltaRow.js +0 -6
  260. package/dist/server/adapter.d.ts +0 -173
  261. package/dist/server/adapter.js +0 -18
  262. package/dist/server/commit.d.ts +0 -107
  263. package/dist/server/commit.js +0 -1
  264. package/dist/server/index.d.ts +0 -14
  265. package/dist/server/index.js +0 -2
  266. package/dist/server/readConfig.d.ts +0 -80
  267. package/dist/server/readConfig.js +0 -8
  268. package/dist/server/storageMode.d.ts +0 -23
  269. package/dist/server/storageMode.js +0 -17
  270. package/dist/source/adapter.d.ts +0 -83
  271. package/dist/source/adapter.js +0 -24
  272. package/dist/source/adapters/drizzle.d.ts +0 -48
  273. package/dist/source/adapters/drizzle.js +0 -219
  274. package/dist/source/adapters/kysely.d.ts +0 -42
  275. package/dist/source/adapters/kysely.js +0 -205
  276. package/dist/source/adapters/kyselyMutationCore.d.ts +0 -76
  277. package/dist/source/adapters/kyselyMutationCore.js +0 -125
  278. package/dist/source/adapters/memory.d.ts +0 -13
  279. package/dist/source/adapters/memory.js +0 -130
  280. package/dist/source/adapters/prisma.d.ts +0 -63
  281. package/dist/source/adapters/prisma.js +0 -202
  282. package/dist/source/conformance.d.ts +0 -37
  283. package/dist/source/conformance.js +0 -215
  284. package/dist/source/connector.d.ts +0 -95
  285. package/dist/source/connector.js +0 -266
  286. package/dist/source/connectorProtocol.d.ts +0 -154
  287. package/dist/source/connectorProtocol.js +0 -163
  288. package/dist/source/contract.d.ts +0 -195
  289. package/dist/source/contract.js +0 -164
  290. package/dist/source/factory.d.ts +0 -92
  291. package/dist/source/factory.js +0 -286
  292. package/dist/source/idempotency.d.ts +0 -61
  293. package/dist/source/idempotency.js +0 -144
  294. package/dist/source/index.d.ts +0 -23
  295. package/dist/source/index.js +0 -30
  296. package/dist/source/migrations.d.ts +0 -21
  297. package/dist/source/migrations.js +0 -103
  298. package/dist/source/next.d.ts +0 -32
  299. package/dist/source/next.js +0 -25
  300. package/dist/source/pushQueue.d.ts +0 -134
  301. package/dist/source/pushQueue.js +0 -256
  302. package/dist/source/signing.d.ts +0 -92
  303. package/dist/source/signing.js +0 -162
  304. package/dist/source/types.d.ts +0 -401
  305. package/dist/source/types.js +0 -59
  306. package/dist/storeContract.d.ts +0 -145
  307. package/dist/storeContract.js +0 -12
  308. package/dist/stores/DatabaseManager.d.ts +0 -107
  309. package/dist/stores/DatabaseManager.js +0 -388
  310. package/dist/stores/ObjectStore.d.ts +0 -115
  311. package/dist/stores/ObjectStore.js +0 -393
  312. package/dist/stores/ObjectStoreContract.d.ts +0 -38
  313. package/dist/stores/ObjectStoreContract.js +0 -1
  314. package/dist/stores/StoreManager.d.ts +0 -114
  315. package/dist/stores/StoreManager.js +0 -304
  316. package/dist/stores/SyncActionStore.d.ts +0 -99
  317. package/dist/stores/SyncActionStore.js +0 -506
  318. package/dist/stores/openIDBWithTimeout.d.ts +0 -65
  319. package/dist/stores/openIDBWithTimeout.js +0 -153
  320. package/dist/stores/syncAction.d.ts +0 -26
  321. package/dist/stores/syncAction.js +0 -16
  322. package/dist/surface.d.ts +0 -36
  323. package/dist/surface.js +0 -75
  324. package/dist/sync/BootstrapFetcher.d.ts +0 -284
  325. package/dist/sync/BootstrapFetcher.js +0 -964
  326. package/dist/sync/ConnectionManager.d.ts +0 -8
  327. package/dist/sync/ConnectionManager.js +0 -8
  328. package/dist/sync/OnDemandLoader.d.ts +0 -231
  329. package/dist/sync/OnDemandLoader.js +0 -743
  330. package/dist/sync/SubscriptionManager.d.ts +0 -159
  331. package/dist/sync/SubscriptionManager.js +0 -243
  332. package/dist/sync/SyncWebSocket.d.ts +0 -173
  333. package/dist/sync/SyncWebSocket.js +0 -438
  334. package/dist/sync/awaitClaimGrant.d.ts +0 -6
  335. package/dist/sync/awaitClaimGrant.js +0 -6
  336. package/dist/sync/bootstrapApply.d.ts +0 -73
  337. package/dist/sync/bootstrapApply.js +0 -73
  338. package/dist/sync/commitFrames.d.ts +0 -8
  339. package/dist/sync/commitFrames.js +0 -8
  340. package/dist/sync/contextPorts.d.ts +0 -18
  341. package/dist/sync/contextPorts.js +0 -31
  342. package/dist/sync/createClaimStream.d.ts +0 -7
  343. package/dist/sync/createClaimStream.js +0 -7
  344. package/dist/sync/createPresenceStream.d.ts +0 -69
  345. package/dist/sync/createPresenceStream.js +0 -200
  346. package/dist/sync/createSnapshot.d.ts +0 -29
  347. package/dist/sync/createSnapshot.js +0 -118
  348. package/dist/sync/credentialLifecycle.d.ts +0 -7
  349. package/dist/sync/credentialLifecycle.js +0 -7
  350. package/dist/sync/deltaPipeline.d.ts +0 -114
  351. package/dist/sync/deltaPipeline.js +0 -278
  352. package/dist/sync/groupChange.d.ts +0 -116
  353. package/dist/sync/groupChange.js +0 -244
  354. package/dist/sync/participants.d.ts +0 -132
  355. package/dist/sync/participants.js +0 -346
  356. package/dist/sync/persistedPrefix.d.ts +0 -12
  357. package/dist/sync/persistedPrefix.js +0 -22
  358. package/dist/sync/schemaDrift.d.ts +0 -55
  359. package/dist/sync/schemaDrift.js +0 -53
  360. package/dist/sync/schemas.d.ts +0 -71
  361. package/dist/sync/schemas.js +0 -94
  362. package/dist/sync/syncCursor.d.ts +0 -40
  363. package/dist/sync/syncCursor.js +0 -55
  364. package/dist/sync/syncPlan.d.ts +0 -54
  365. package/dist/sync/syncPlan.js +0 -50
  366. package/dist/sync/wsFrameHandlers.d.ts +0 -8
  367. package/dist/sync/wsFrameHandlers.js +0 -8
  368. package/dist/syncLog/contract.d.ts +0 -20
  369. package/dist/syncLog/contract.js +0 -19
  370. package/dist/syncLog/index.d.ts +0 -1
  371. package/dist/syncLog/index.js +0 -1
  372. package/dist/transaction/ablo.d.ts +0 -88
  373. package/dist/transaction/ablo.js +0 -33
  374. package/dist/transaction/auth/apiKey.d.ts +0 -152
  375. package/dist/transaction/auth/apiKey.js +0 -419
  376. package/dist/transaction/auth/bootstrapScope.d.ts +0 -15
  377. package/dist/transaction/auth/bootstrapScope.js +0 -1
  378. package/dist/transaction/auth/capability.d.ts +0 -212
  379. package/dist/transaction/auth/capability.js +0 -224
  380. package/dist/transaction/auth/credentialEndpoint.d.ts +0 -61
  381. package/dist/transaction/auth/credentialEndpoint.js +0 -86
  382. package/dist/transaction/auth/credentialPolicy.d.ts +0 -148
  383. package/dist/transaction/auth/credentialPolicy.js +0 -125
  384. package/dist/transaction/auth/credentialSource.d.ts +0 -30
  385. package/dist/transaction/auth/credentialSource.js +0 -55
  386. package/dist/transaction/auth/hostedEndpoints.d.ts +0 -21
  387. package/dist/transaction/auth/hostedEndpoints.js +0 -21
  388. package/dist/transaction/auth/identity.d.ts +0 -55
  389. package/dist/transaction/auth/identity.js +0 -210
  390. package/dist/transaction/auth/index.d.ts +0 -162
  391. package/dist/transaction/auth/index.js +0 -304
  392. package/dist/transaction/auth/schemas.d.ts +0 -59
  393. package/dist/transaction/auth/schemas.js +0 -85
  394. package/dist/transaction/auth/sessionMint.d.ts +0 -28
  395. package/dist/transaction/auth/sessionMint.js +0 -85
  396. package/dist/transaction/coordination/awaitClaimGrant.d.ts +0 -56
  397. package/dist/transaction/coordination/awaitClaimGrant.js +0 -124
  398. package/dist/transaction/coordination/claimHeartbeatLoop.d.ts +0 -84
  399. package/dist/transaction/coordination/claimHeartbeatLoop.js +0 -108
  400. package/dist/transaction/coordination/claimMeta.d.ts +0 -49
  401. package/dist/transaction/coordination/claimMeta.js +0 -52
  402. package/dist/transaction/coordination/createClaimStream.d.ts +0 -64
  403. package/dist/transaction/coordination/createClaimStream.js +0 -475
  404. package/dist/transaction/coordination/events.d.ts +0 -74
  405. package/dist/transaction/coordination/events.js +0 -7
  406. package/dist/transaction/coordination/index.d.ts +0 -19
  407. package/dist/transaction/coordination/index.js +0 -45
  408. package/dist/transaction/coordination/locator.d.ts +0 -104
  409. package/dist/transaction/coordination/locator.js +0 -102
  410. package/dist/transaction/coordination/schema.d.ts +0 -1536
  411. package/dist/transaction/coordination/schema.js +0 -1177
  412. package/dist/transaction/coordination/targetConflict.d.ts +0 -2
  413. package/dist/transaction/coordination/targetConflict.js +0 -107
  414. package/dist/transaction/coordination/trace.d.ts +0 -78
  415. package/dist/transaction/coordination/trace.js +0 -138
  416. package/dist/transaction/durableWrites.d.ts +0 -62
  417. package/dist/transaction/durableWrites.js +0 -71
  418. package/dist/transaction/environment.d.ts +0 -105
  419. package/dist/transaction/environment.js +0 -108
  420. package/dist/transaction/errorCodes.d.ts +0 -403
  421. package/dist/transaction/errorCodes.js +0 -484
  422. package/dist/transaction/errors.d.ts +0 -428
  423. package/dist/transaction/errors.js +0 -686
  424. package/dist/transaction/footprint.d.ts +0 -111
  425. package/dist/transaction/footprint.js +0 -0
  426. package/dist/transaction/index.d.ts +0 -20
  427. package/dist/transaction/index.js +0 -20
  428. package/dist/transaction/keys/index.d.ts +0 -87
  429. package/dist/transaction/keys/index.js +0 -207
  430. package/dist/transaction/log/syncDeltaRow.d.ts +0 -158
  431. package/dist/transaction/log/syncDeltaRow.js +0 -95
  432. package/dist/transaction/logPosition.d.ts +0 -97
  433. package/dist/transaction/logPosition.js +0 -125
  434. package/dist/transaction/logger.d.ts +0 -16
  435. package/dist/transaction/logger.js +0 -7
  436. package/dist/transaction/observability.d.ts +0 -53
  437. package/dist/transaction/observability.js +0 -19
  438. package/dist/transaction/persistence.d.ts +0 -12
  439. package/dist/transaction/persistence.js +0 -11
  440. package/dist/transaction/plugin.d.ts +0 -285
  441. package/dist/transaction/plugin.js +0 -106
  442. package/dist/transaction/policy/types.d.ts +0 -217
  443. package/dist/transaction/policy/types.js +0 -126
  444. package/dist/transaction/resources/functionalUpdate.d.ts +0 -79
  445. package/dist/transaction/resources/functionalUpdate.js +0 -87
  446. package/dist/transaction/resources/httpResources.d.ts +0 -321
  447. package/dist/transaction/resources/httpResources.js +0 -7
  448. package/dist/transaction/resources/modelOperations.d.ts +0 -427
  449. package/dist/transaction/resources/modelOperations.js +0 -12
  450. package/dist/transaction/resources/mutationOptions.d.ts +0 -66
  451. package/dist/transaction/resources/mutationOptions.js +0 -9
  452. package/dist/transaction/resources/where.d.ts +0 -101
  453. package/dist/transaction/resources/where.js +0 -115
  454. package/dist/transaction/resources/writeOptionsSchema.d.ts +0 -47
  455. package/dist/transaction/resources/writeOptionsSchema.js +0 -73
  456. package/dist/transaction/schema/field.d.ts +0 -120
  457. package/dist/transaction/schema/field.js +0 -265
  458. package/dist/transaction/schema/fieldRef.d.ts +0 -38
  459. package/dist/transaction/schema/fieldRef.js +0 -11
  460. package/dist/transaction/schema/loadStrategy.d.ts +0 -45
  461. package/dist/transaction/schema/loadStrategy.js +0 -46
  462. package/dist/transaction/schema/model.d.ts +0 -379
  463. package/dist/transaction/schema/model.js +0 -123
  464. package/dist/transaction/schema/openapi.d.ts +0 -58
  465. package/dist/transaction/schema/openapi.js +0 -501
  466. package/dist/transaction/schema/relation.d.ts +0 -204
  467. package/dist/transaction/schema/relation.js +0 -104
  468. package/dist/transaction/schema/residency.d.ts +0 -29
  469. package/dist/transaction/schema/residency.js +0 -25
  470. package/dist/transaction/schema/roles.d.ts +0 -249
  471. package/dist/transaction/schema/roles.js +0 -230
  472. package/dist/transaction/schema/schema.d.ts +0 -351
  473. package/dist/transaction/schema/schema.js +0 -325
  474. package/dist/transaction/schema/tenancy.d.ts +0 -139
  475. package/dist/transaction/schema/tenancy.js +0 -190
  476. package/dist/transaction/transactionLayer.d.ts +0 -82
  477. package/dist/transaction/transactionLayer.js +0 -24
  478. package/dist/transaction/transactions/settlement/commitEnvelope.d.ts +0 -143
  479. package/dist/transaction/transactions/settlement/commitEnvelope.js +0 -161
  480. package/dist/transaction/transactions/settlement/httpCommitEnvelope.d.ts +0 -53
  481. package/dist/transaction/transactions/settlement/httpCommitEnvelope.js +0 -207
  482. package/dist/transaction/transactions/settlement/idempotencyKey.d.ts +0 -10
  483. package/dist/transaction/transactions/settlement/idempotencyKey.js +0 -9
  484. package/dist/transaction/transactions/settlement/pendingWrite.d.ts +0 -112
  485. package/dist/transaction/transactions/settlement/pendingWrite.js +0 -20
  486. package/dist/transaction/transport/commitFrames.d.ts +0 -90
  487. package/dist/transaction/transport/commitFrames.js +0 -134
  488. package/dist/transaction/transport/connectionManager.d.ts +0 -215
  489. package/dist/transaction/transport/connectionManager.js +0 -673
  490. package/dist/transaction/transport/credentialLifecycle.d.ts +0 -177
  491. package/dist/transaction/transport/credentialLifecycle.js +0 -324
  492. package/dist/transaction/transport/heartbeat.d.ts +0 -65
  493. package/dist/transaction/transport/heartbeat.js +0 -93
  494. package/dist/transaction/transport/httpClient.d.ts +0 -131
  495. package/dist/transaction/transport/httpClient.js +0 -146
  496. package/dist/transaction/transport/httpOptions.d.ts +0 -33
  497. package/dist/transaction/transport/httpOptions.js +0 -12
  498. package/dist/transaction/transport/httpTransport.d.ts +0 -8
  499. package/dist/transaction/transport/httpTransport.js +0 -1388
  500. package/dist/transaction/transport/networkProbe.d.ts +0 -84
  501. package/dist/transaction/transport/networkProbe.js +0 -207
  502. package/dist/transaction/transport/wsFrameHandlers.d.ts +0 -128
  503. package/dist/transaction/transport/wsFrameHandlers.js +0 -429
  504. package/dist/transaction/transport/wsTransport.d.ts +0 -574
  505. package/dist/transaction/transport/wsTransport.js +0 -1023
  506. package/dist/transaction/types/assertExact.d.ts +0 -17
  507. package/dist/transaction/types/assertExact.js +0 -1
  508. package/dist/transaction/types/global.d.ts +0 -107
  509. package/dist/transaction/types/global.js +0 -40
  510. package/dist/transaction/types/index.d.ts +0 -205
  511. package/dist/transaction/types/index.js +0 -56
  512. package/dist/transaction/types/modelData.d.ts +0 -10
  513. package/dist/transaction/types/modelData.js +0 -9
  514. package/dist/transaction/types/participant.d.ts +0 -20
  515. package/dist/transaction/types/participant.js +0 -10
  516. package/dist/transaction/types/streams.d.ts +0 -550
  517. package/dist/transaction/types/streams.js +0 -11
  518. package/dist/transaction/utils/asyncIterator.d.ts +0 -34
  519. package/dist/transaction/utils/asyncIterator.js +0 -135
  520. package/dist/transaction/utils/duration.d.ts +0 -50
  521. package/dist/transaction/utils/duration.js +0 -77
  522. package/dist/transaction/utils/json.d.ts +0 -57
  523. package/dist/transaction/utils/json.js +0 -276
  524. package/dist/transaction/wire/accountResponses.d.ts +0 -420
  525. package/dist/transaction/wire/accountResponses.js +0 -290
  526. package/dist/transaction/wire/auth.d.ts +0 -56
  527. package/dist/transaction/wire/auth.js +0 -63
  528. package/dist/transaction/wire/bootstrapReason.d.ts +0 -9
  529. package/dist/transaction/wire/bootstrapReason.js +0 -8
  530. package/dist/transaction/wire/claimEvent.d.ts +0 -76
  531. package/dist/transaction/wire/claimEvent.js +0 -73
  532. package/dist/transaction/wire/claims.d.ts +0 -530
  533. package/dist/transaction/wire/claims.js +0 -327
  534. package/dist/transaction/wire/commit.d.ts +0 -603
  535. package/dist/transaction/wire/commit.js +0 -321
  536. package/dist/transaction/wire/delta.d.ts +0 -250
  537. package/dist/transaction/wire/delta.js +0 -147
  538. package/dist/transaction/wire/errorEnvelope.d.ts +0 -72
  539. package/dist/transaction/wire/errorEnvelope.js +0 -123
  540. package/dist/transaction/wire/feedCursor.d.ts +0 -60
  541. package/dist/transaction/wire/feedCursor.js +0 -82
  542. package/dist/transaction/wire/feedEvent.d.ts +0 -204
  543. package/dist/transaction/wire/feedEvent.js +0 -65
  544. package/dist/transaction/wire/frames.d.ts +0 -194
  545. package/dist/transaction/wire/frames.js +0 -50
  546. package/dist/transaction/wire/inboundFrames.d.ts +0 -562
  547. package/dist/transaction/wire/inboundFrames.js +0 -116
  548. package/dist/transaction/wire/index.d.ts +0 -54
  549. package/dist/transaction/wire/index.js +0 -83
  550. package/dist/transaction/wire/listEnvelope.d.ts +0 -37
  551. package/dist/transaction/wire/listEnvelope.js +0 -42
  552. package/dist/transaction/wire/modelMutations.d.ts +0 -31
  553. package/dist/transaction/wire/modelMutations.js +0 -52
  554. package/dist/transaction/wire/modelResponses.d.ts +0 -85
  555. package/dist/transaction/wire/modelResponses.js +0 -43
  556. package/dist/transaction/wire/modelShape.d.ts +0 -78
  557. package/dist/transaction/wire/modelShape.js +0 -74
  558. package/dist/transaction/wire/protocol.d.ts +0 -38
  559. package/dist/transaction/wire/protocol.js +0 -38
  560. package/dist/transaction/wire/protocolVersion.d.ts +0 -73
  561. package/dist/transaction/wire/protocolVersion.js +0 -83
  562. package/dist/transactions/mutations/MutationQueue.d.ts +0 -661
  563. package/dist/transactions/mutations/MutationQueue.js +0 -2807
  564. package/dist/transactions/mutations/MutationStore.d.ts +0 -20
  565. package/dist/transactions/mutations/MutationStore.js +0 -53
  566. package/dist/transactions/mutations/UnconfirmedWrites.d.ts +0 -82
  567. package/dist/transactions/mutations/UnconfirmedWrites.js +0 -104
  568. package/dist/transactions/mutations/coalesceRules.d.ts +0 -58
  569. package/dist/transactions/mutations/coalesceRules.js +0 -140
  570. package/dist/transactions/mutations/commitLatency.d.ts +0 -52
  571. package/dist/transactions/mutations/commitLatency.js +0 -130
  572. package/dist/transactions/mutations/commitOutboxStore.d.ts +0 -28
  573. package/dist/transactions/mutations/commitOutboxStore.js +0 -26
  574. package/dist/transactions/mutations/commitPayload.d.ts +0 -165
  575. package/dist/transactions/mutations/commitPayload.js +0 -152
  576. package/dist/transactions/mutations/deltaConfirmation.d.ts +0 -63
  577. package/dist/transactions/mutations/deltaConfirmation.js +0 -235
  578. package/dist/transactions/mutations/durableWriteStore.d.ts +0 -14
  579. package/dist/transactions/mutations/durableWriteStore.js +0 -12
  580. package/dist/transactions/mutations/optimisticApply.d.ts +0 -49
  581. package/dist/transactions/mutations/optimisticApply.js +0 -65
  582. package/dist/transactions/mutations/replayValidation.d.ts +0 -187
  583. package/dist/transactions/mutations/replayValidation.js +0 -164
  584. package/dist/utils/mobxSetup.d.ts +0 -53
  585. package/dist/utils/mobxSetup.js +0 -330
  586. package/dist/views/QueryView.d.ts +0 -79
  587. package/dist/views/QueryView.js +0 -218
  588. package/dist/views/ViewRegistry.d.ts +0 -20
  589. package/dist/views/ViewRegistry.js +0 -55
  590. package/dist/views/incrementalView.d.ts +0 -45
  591. package/dist/views/incrementalView.js +0 -69
  592. package/dist/webhooks/events.d.ts +0 -43
  593. package/dist/webhooks/events.js +0 -42
  594. package/dist/webhooks/index.d.ts +0 -8
  595. package/dist/webhooks/index.js +0 -8
  596. package/dist/wire/index.d.ts +0 -1
  597. package/dist/wire/index.js +0 -8
@@ -1,539 +0,0 @@
1
- /**
2
- * ModelRegistry is the source of truth for model metadata: which model classes
3
- * exist, the properties and references declared on each, the back-references
4
- * used for cascade handling, and a stable hash of the whole schema.
5
- * {@link Model} instances resolve their metadata through the active registry,
6
- * and {@link InstanceCache} uses it to map between model names and constructor
7
- * classes. References resolve lazily, so a model may declare a reference to
8
- * another model that is registered later.
9
- */
10
- // Removed Node.js crypto import for browser compatibility
11
- import { PropertyType, LoadStrategy, } from './transaction/types/index.js';
12
- import { globalRuntime } from './context.js';
13
- import { AbloValidationError } from './transaction/errors.js';
14
- /**
15
- * Module-level active registry. Set by createSyncEngine so that Model instances
16
- * (which don't receive DI) can look up metadata without static maps.
17
- */
18
- let _activeRegistry = null;
19
- /** Set the active ModelRegistry instance (called by createSyncEngine) */
20
- export function setActiveRegistry(registry) {
21
- _activeRegistry = registry;
22
- }
23
- /** Get the active ModelRegistry. Throws if none set. */
24
- export function getActiveRegistry() {
25
- if (!_activeRegistry) {
26
- throw new AbloValidationError('No active ModelRegistry — call createSyncEngine() first', { code: 'registry_not_initialized' });
27
- }
28
- return _activeRegistry;
29
- }
30
- /** Whether an active ModelRegistry has been set. */
31
- export function hasActiveRegistry() {
32
- return _activeRegistry !== null;
33
- }
34
- /** Clear the active ModelRegistry (tests only). */
35
- export function clearActiveRegistry() {
36
- _activeRegistry = null;
37
- }
38
- export class ModelRegistry {
39
- models = new Map();
40
- modelMetadata = new Map();
41
- properties = new Map();
42
- references = new Map();
43
- pendingReferences = new Map();
44
- // Maps a constructor back to its model name. Keyed as `unknown` on purpose:
45
- // lookups arrive both as `this.constructor` (a Function) and as typed model
46
- // classes, and both are accepted without a cast.
47
- constructorToModelName = new Map();
48
- // Back-references for cascade-aware transaction handling. Maps a child model
49
- // name to the parent models it references. The inverse direction (parent to
50
- // children) is derived on demand by `getChildModels`; it is populated here.
51
- backReferences = new Map();
52
- schemaHash;
53
- config;
54
- runtime;
55
- registeredModels = new Set();
56
- pendingHashUpdate = false;
57
- constructor(config = {}) {
58
- this.config = {
59
- validateOnRegister: config.validateOnRegister ?? true,
60
- allowLateReferences: config.allowLateReferences ?? true,
61
- };
62
- this.runtime = config.runtime ?? globalRuntime;
63
- }
64
- validateModelConstructor(name, constructor) {
65
- if (typeof constructor !== 'function') {
66
- throw new AbloValidationError(`Model ${name} constructor must be a function`, { code: 'registry_invalid_constructor' });
67
- }
68
- const prototype = constructor.prototype;
69
- if (!prototype || typeof prototype !== 'object') {
70
- throw new AbloValidationError(`Model ${name} constructor must have a prototype`, { code: 'registry_invalid_constructor' });
71
- }
72
- // Check for required methods
73
- const required = ['updateFromData', 'toJSON', 'getModelName'];
74
- for (const method of required) {
75
- if (typeof prototype[method] !== 'function') {
76
- this.runtime.logger.debug('Model missing required method', name, { method });
77
- }
78
- }
79
- }
80
- arePropertiesCompatible(existing, incoming) {
81
- // For reference-generated ID properties, be more lenient
82
- // Only check core compatibility, not all metadata fields
83
- return (existing.type === incoming.type &&
84
- // For indexed, treat undefined as false for comparison
85
- (existing.indexed ?? false) === (incoming.indexed ?? false) &&
86
- // For optional, treat undefined as false for comparison
87
- (existing.optional ?? false) === (incoming.optional ?? false));
88
- }
89
- addPendingReference(modelName, propertyName, metadata) {
90
- // Get target model name
91
- let targetName;
92
- try {
93
- targetName = metadata.referencedModel()?.name || 'Unknown';
94
- }
95
- catch {
96
- targetName = 'Unknown';
97
- }
98
- let pending = this.pendingReferences.get(targetName);
99
- if (!pending) {
100
- pending = [];
101
- this.pendingReferences.set(targetName, pending);
102
- }
103
- pending.push({ modelName, propertyName, metadata });
104
- this.runtime.logger.debug('Reference deferred', `${modelName}.${propertyName}`, { targetModel: targetName });
105
- }
106
- resolvePendingReferences(targetModelName) {
107
- const pending = this.pendingReferences.get(targetModelName);
108
- if (!pending)
109
- return;
110
- for (const ref of pending) {
111
- try {
112
- this.completeReferenceRegistration(ref.modelName, ref.propertyName, ref.metadata);
113
- this.runtime.logger.debug('Reference resolved', `${ref.modelName}.${ref.propertyName}`, {
114
- targetModel: targetModelName,
115
- });
116
- }
117
- catch (error) {
118
- this.runtime.observability.breadcrumb(`Failed to resolve reference ${ref.modelName}.${ref.propertyName}`, 'sync.database', 'error', {
119
- error: error instanceof Error ? error.message : String(error),
120
- });
121
- }
122
- }
123
- this.pendingReferences.delete(targetModelName);
124
- }
125
- completeReferenceRegistration(modelName, propertyName, metadata) {
126
- // Store reference
127
- let refs = this.references.get(modelName);
128
- if (!refs) {
129
- refs = new Map();
130
- this.references.set(modelName, refs);
131
- }
132
- refs.set(propertyName, metadata);
133
- // Register ID property (skip organizationId as it's handled by models themselves)
134
- const idPropName = propertyName.endsWith('Id') ? propertyName : `${propertyName}Id`;
135
- if (idPropName !== 'organizationId') {
136
- this.registerProperty(modelName, idPropName, {
137
- type: PropertyType.reference,
138
- indexed: metadata.indexed || false,
139
- optional: metadata.nullable || false,
140
- });
141
- }
142
- // Register model property
143
- this.registerProperty(modelName, propertyName, {
144
- type: PropertyType.referenceModel,
145
- optional: metadata.nullable || false,
146
- });
147
- this.schemaHash = undefined;
148
- }
149
- /**
150
- * Register a model with validation
151
- */
152
- registerModel(name, constructor, metadata = { loadStrategy: LoadStrategy.instant }) {
153
- // Validate
154
- if (this.config.validateOnRegister) {
155
- this.validateModelConstructor(name, constructor);
156
- }
157
- // Check for duplicate
158
- if (this.models.has(name)) {
159
- this.runtime.logger.debug('Model already registered, skipping', name);
160
- return;
161
- }
162
- this.runtime.logger.debug('Registering model', name);
163
- // Register. The one cast in this file: input is any Model-subclass
164
- // constructor (validated above); registered classes are concrete
165
- // subclasses constructible with `data?` and carrying Model's statics —
166
- // the shape `RegisteredModelClass` names for every read site.
167
- const modelClass = constructor;
168
- this.models.set(name, modelClass);
169
- this.modelMetadata.set(name, metadata);
170
- // Record the reverse mapping from constructor to model name
171
- this.constructorToModelName.set(constructor, name);
172
- // Initialize property maps
173
- if (!this.properties.has(name)) {
174
- this.properties.set(name, new Map());
175
- }
176
- if (!this.references.has(name)) {
177
- this.references.set(name, new Map());
178
- }
179
- // Mark as registered
180
- this.registeredModels.add(name);
181
- // Resolve pending references to this model
182
- this.resolvePendingReferences(name);
183
- // Invalidate schema hash
184
- this.schemaHash = undefined;
185
- this.runtime.logger.debug('Model registered', name, metadata);
186
- }
187
- /**
188
- * Register property with validation
189
- */
190
- registerProperty(modelName, propertyName, metadata) {
191
- // Validate model exists
192
- if (!this.models.has(modelName) && this.config.validateOnRegister) {
193
- throw new AbloValidationError(`Cannot register property for unknown model: ${modelName}`, { code: 'registry_unknown_model' });
194
- }
195
- // Get or create property map
196
- let props = this.properties.get(modelName);
197
- if (!props) {
198
- props = new Map();
199
- this.properties.set(modelName, props);
200
- }
201
- // Check for conflicts
202
- const existing = props.get(propertyName);
203
- if (existing) {
204
- if (this.arePropertiesCompatible(existing, metadata)) {
205
- // Properties are compatible, skip re-registration
206
- this.runtime.logger.debug('Property already registered (compatible)', `${modelName}.${propertyName}`);
207
- return;
208
- }
209
- else {
210
- throw new AbloValidationError(`Property ${modelName}.${propertyName} already registered with incompatible metadata`, { code: 'registry_property_conflict' });
211
- }
212
- }
213
- props.set(propertyName, metadata);
214
- this.schemaHash = undefined;
215
- this.runtime.logger.debug('Property registered', `${modelName}.${propertyName}`, metadata);
216
- }
217
- /**
218
- * Register reference with lazy resolution
219
- */
220
- registerReference(modelName, propertyName, metadata) {
221
- // Try to resolve target model
222
- let targetModelName;
223
- try {
224
- const targetModel = metadata.referencedModel();
225
- targetModelName = targetModel?.name;
226
- }
227
- catch {
228
- // Defer resolution
229
- if (this.config.allowLateReferences) {
230
- this.addPendingReference(modelName, propertyName, metadata);
231
- return;
232
- }
233
- throw new AbloValidationError(`Cannot resolve reference ${modelName}.${propertyName}`, { code: 'registry_reference_unresolved' });
234
- }
235
- // Validate target exists or defer
236
- if (!this.models.has(targetModelName)) {
237
- if (this.config.allowLateReferences) {
238
- this.addPendingReference(modelName, propertyName, metadata);
239
- return;
240
- }
241
- throw new AbloValidationError(`Reference ${modelName}.${propertyName} points to unknown model ${targetModelName}`, { code: 'registry_reference_unknown_target' });
242
- }
243
- // Complete registration
244
- this.completeReferenceRegistration(modelName, propertyName, metadata);
245
- }
246
- /**
247
- * Register a back-reference for cascade-aware transaction handling.
248
- *
249
- * When a parent model is deleted, the transaction queue cancels pending
250
- * transactions for every child model that declares a back-reference to that
251
- * parent.
252
- *
253
- * @param childModelName - The model that holds a foreign key to the parent (e.g., 'Section')
254
- * @param metadata - The back-reference configuration
255
- */
256
- registerBackReference(childModelName, metadata) {
257
- // Add to instance map
258
- let refs = this.backReferences.get(childModelName);
259
- if (!refs) {
260
- refs = [];
261
- this.backReferences.set(childModelName, refs);
262
- }
263
- // Avoid duplicates
264
- const exists = refs.some((r) => r.parentModel === metadata.parentModel && r.foreignKey === metadata.foreignKey);
265
- if (!exists) {
266
- refs.push(metadata);
267
- }
268
- // Reverse lookup (parent → children) is derived on demand by
269
- // `getChildModels`, which scans this map.
270
- this.runtime.logger.debug('BackReference registered', `${childModelName} -> ${metadata.parentModel}`, {
271
- foreignKey: metadata.foreignKey,
272
- cascadeDelete: metadata.cascadeDelete,
273
- });
274
- }
275
- /** Get all models with specific load strategy. */
276
- getModelsByLoadStrategy(strategy) {
277
- const models = [];
278
- for (const [modelName, metadata] of this.modelMetadata) {
279
- if (metadata.loadStrategy === strategy) {
280
- models.push(modelName);
281
- }
282
- }
283
- return models;
284
- }
285
- /** Get model name from constructor (production-safe). */
286
- getModelNameFromConstructor(constructor) {
287
- return this.constructorToModelName.get(constructor);
288
- }
289
- /** Get properties for a model. */
290
- getPropertiesForModel(modelName) {
291
- return this.properties.get(modelName) || new Map();
292
- }
293
- /**
294
- * Get all registered model names for this instance
295
- */
296
- getRegisteredModelNames() {
297
- return Array.from(this.models.keys());
298
- }
299
- /** Get model constructor by name */
300
- getModelByName(name) {
301
- return this.models.get(name);
302
- }
303
- /** Check if model is registered */
304
- hasModel(name) {
305
- return this.models.has(name);
306
- }
307
- /** Get model metadata by name */
308
- getMetadata(name) {
309
- return this.modelMetadata.get(name);
310
- }
311
- /** Get properties for a model */
312
- getProperties(name) {
313
- return this.properties.get(name) || new Map();
314
- }
315
- /** Get references for a model */
316
- getReferences(name) {
317
- return this.references.get(name) || new Map();
318
- }
319
- /** Get indexed properties for a model */
320
- getIndexedProperties(modelName) {
321
- const properties = this.getProperties(modelName);
322
- const indexed = [];
323
- for (const [propName, metadata] of properties) {
324
- if (metadata.indexed)
325
- indexed.push(propName);
326
- }
327
- return indexed;
328
- }
329
- /** Get back-references for a child model */
330
- getBackReferences(childModelName) {
331
- return this.backReferences.get(childModelName) || [];
332
- }
333
- /** Get child models for a parent */
334
- getChildModels(parentModelName) {
335
- // Derive from backReferences
336
- const children = [];
337
- for (const [childModel, refs] of this.backReferences) {
338
- for (const ref of refs) {
339
- if (ref.parentModel === parentModelName) {
340
- children.push({ childModel, foreignKey: ref.foreignKey });
341
- }
342
- }
343
- }
344
- return children;
345
- }
346
- /**
347
- * Compute a stable hash of the registered schema — model names, property
348
- * types, and their indexed and optional flags. Memoized until the schema
349
- * changes.
350
- */
351
- getSchemaHash() {
352
- if (this.schemaHash)
353
- return this.schemaHash;
354
- const schema = {};
355
- // Build schema object
356
- for (const [modelName, props] of this.properties) {
357
- schema[modelName] = {};
358
- for (const [propName, meta] of props) {
359
- schema[modelName][propName] = {
360
- type: meta.type,
361
- indexed: meta.indexed || false,
362
- optional: meta.optional || false,
363
- };
364
- }
365
- }
366
- // Sort and stringify
367
- const sorted = JSON.stringify(schema, Object.keys(schema).sort());
368
- // Create hash - browser-compatible simple hash
369
- this.schemaHash = this.simpleHash(sorted);
370
- this.runtime.logger.debug('Schema hash updated', this.schemaHash);
371
- return this.schemaHash;
372
- }
373
- /**
374
- * Browser-compatible hash function
375
- */
376
- simpleHash(str) {
377
- let hash = 0;
378
- for (let i = 0; i < str.length; i++) {
379
- const char = str.charCodeAt(i);
380
- hash = (hash << 5) - hash + char;
381
- hash = hash & hash; // Convert to 32bit integer
382
- }
383
- return Math.abs(hash).toString(16).padStart(8, '0');
384
- }
385
- /**
386
- * Static wrapper for backward compatibility
387
- */
388
- /**
389
- * Validate all references
390
- */
391
- validateReferences() {
392
- const errors = [];
393
- // Check pending references
394
- for (const [target, pending] of this.pendingReferences) {
395
- for (const ref of pending) {
396
- errors.push(`Unresolved reference: ${ref.modelName}.${ref.propertyName} -> ${target}`);
397
- }
398
- }
399
- // Check resolved references
400
- for (const [modelName, refs] of this.references) {
401
- for (const [propName, meta] of refs) {
402
- try {
403
- const target = meta.referencedModel();
404
- if (!this.models.has(target.name)) {
405
- errors.push(`Invalid reference: ${modelName}.${propName} -> ${target.name}`);
406
- }
407
- }
408
- catch (error) {
409
- errors.push(`Cannot resolve reference: ${modelName}.${propName}`);
410
- }
411
- }
412
- }
413
- const isValid = errors.length === 0;
414
- if (isValid) {
415
- this.runtime.logger.info('All model references are valid');
416
- }
417
- else {
418
- this.runtime.observability.breadcrumb('Reference validation failed', 'sync.database', 'error');
419
- }
420
- return {
421
- valid: isValid,
422
- errors,
423
- };
424
- }
425
- /**
426
- * Static wrapper for backward compatibility
427
- */
428
- /**
429
- * Start batch registration mode to optimize performance
430
- */
431
- startBatch() {
432
- this.pendingHashUpdate = false;
433
- }
434
- /**
435
- * Static wrapper for backward compatibility
436
- */
437
- /**
438
- * End batch registration mode and update schema hash if needed
439
- */
440
- endBatch() {
441
- if (this.pendingHashUpdate) {
442
- this.getSchemaHash(); // This will recalculate if needed
443
- this.pendingHashUpdate = false;
444
- }
445
- }
446
- /**
447
- * Static wrapper for backward compatibility
448
- */
449
- /**
450
- * Clear registry
451
- */
452
- clear() {
453
- this.models.clear();
454
- this.modelMetadata.clear();
455
- this.properties.clear();
456
- this.references.clear();
457
- this.pendingReferences.clear();
458
- this.registeredModels.clear();
459
- this.backReferences.clear();
460
- this.constructorToModelName.clear();
461
- this.schemaHash = undefined;
462
- this.pendingHashUpdate = false;
463
- this.runtime.logger.info('ModelRegistry cleared');
464
- }
465
- /**
466
- * Static wrapper for backward compatibility
467
- */
468
- /**
469
- * Export for debugging
470
- */
471
- export() {
472
- return {
473
- models: Array.from(this.models.keys()),
474
- metadata: Object.fromEntries(this.modelMetadata),
475
- properties: Object.fromEntries(Array.from(this.properties.entries()).map(([name, props]) => [
476
- name,
477
- Object.fromEntries(props),
478
- ])),
479
- references: Object.fromEntries(Array.from(this.references.entries()).map(([name, refs]) => [
480
- name,
481
- Object.fromEntries(refs),
482
- ])),
483
- pending: Object.fromEntries(Array.from(this.pendingReferences.entries()).map(([name, refs]) => [
484
- name,
485
- refs.map((r) => `${r.modelName}.${r.propertyName}`),
486
- ])),
487
- schemaHash: this.getSchemaHash(),
488
- };
489
- }
490
- /**
491
- * Export registry data for debugging (backward compatibility)
492
- */
493
- exportRegistryData() {
494
- const models = {};
495
- const properties = {};
496
- const references = {};
497
- const metadata = {};
498
- // Export models
499
- for (const [name, constructor] of this.models) {
500
- models[name] = constructor.name;
501
- }
502
- // Export properties
503
- for (const [modelName, propertyMap] of this.properties) {
504
- properties[modelName] = {};
505
- for (const [propName, propMetadata] of propertyMap) {
506
- properties[modelName][propName] = propMetadata;
507
- }
508
- }
509
- // Export references
510
- for (const [modelName, referenceMap] of this.references) {
511
- references[modelName] = {};
512
- for (const [refName, refMetadata] of referenceMap) {
513
- try {
514
- references[modelName][refName] = {
515
- ...refMetadata,
516
- referencedModel: refMetadata.referencedModel().name,
517
- };
518
- }
519
- catch {
520
- references[modelName][refName] = {
521
- ...refMetadata,
522
- referencedModel: 'Unresolved',
523
- };
524
- }
525
- }
526
- }
527
- // Export metadata
528
- for (const [modelName, modelMetadata] of this.modelMetadata) {
529
- metadata[modelName] = modelMetadata;
530
- }
531
- return {
532
- models,
533
- properties,
534
- references,
535
- metadata,
536
- schemaHash: this.getSchemaHash(),
537
- };
538
- }
539
- }
@@ -1,28 +0,0 @@
1
- /**
2
- * NetworkMonitor tracks network connectivity and reports it through events.
3
- * It listens to the browser's online and offline events, and it also watches
4
- * for a tab becoming visible again: after a laptop sleep/wake or a long spell
5
- * in the background, the WebSocket can die silently without an offline event
6
- * firing, so returning to the tab emits a recovery signal the store can act on.
7
- */
8
- import { EventEmitter } from 'events';
9
- import type { RuntimeContext } from './RuntimeContext.js';
10
- export declare class NetworkMonitor extends EventEmitter {
11
- private readonly runtime;
12
- private isOnline;
13
- private lastOnlineCheck;
14
- constructor(runtime?: RuntimeContext);
15
- private handleOnline;
16
- private handleOffline;
17
- /**
18
- * When the tab becomes visible, the WebSocket may have silently died
19
- * (e.g., laptop sleep/wake, long background). Browser online/offline events
20
- * don't fire in this case because the network itself didn't change.
21
- * Emit 'visibility_online' so SyncedStore can check and recover.
22
- */
23
- private handleVisibilityChange;
24
- private setupListeners;
25
- getStatus(): boolean;
26
- getLastOnlineTime(): Date;
27
- dispose(): void;
28
- }
@@ -1,79 +0,0 @@
1
- /**
2
- * NetworkMonitor tracks network connectivity and reports it through events.
3
- * It listens to the browser's online and offline events, and it also watches
4
- * for a tab becoming visible again: after a laptop sleep/wake or a long spell
5
- * in the background, the WebSocket can die silently without an offline event
6
- * firing, so returning to the tab emits a recovery signal the store can act on.
7
- */
8
- import { EventEmitter } from 'events';
9
- import { globalRuntime } from './context.js';
10
- export class NetworkMonitor extends EventEmitter {
11
- runtime;
12
- // Only `navigator.onLine === false` means offline. Node 18+ exposes a global
13
- // `navigator` with `onLine === undefined`, so the naive `navigator.onLine`
14
- // would seed `false` (offline) on every server client — start optimistic.
15
- isOnline = !(typeof navigator !== 'undefined' && navigator.onLine === false);
16
- lastOnlineCheck = new Date();
17
- constructor(runtime = globalRuntime) {
18
- super();
19
- this.runtime = runtime;
20
- this.setupListeners();
21
- }
22
- handleOnline = () => {
23
- const wasOffline = !this.isOnline;
24
- this.isOnline = true;
25
- this.lastOnlineCheck = new Date();
26
- if (wasOffline) {
27
- this.runtime.logger.info('Network connection restored');
28
- this.emit('online');
29
- }
30
- };
31
- handleOffline = () => {
32
- const wasOnline = this.isOnline;
33
- this.isOnline = false;
34
- if (wasOnline) {
35
- // Symmetric with 'Network connection restored' (info) — expected,
36
- // transient connectivity state, not an actionable warning.
37
- this.runtime.logger.info('Network connection lost');
38
- this.emit('offline');
39
- }
40
- };
41
- /**
42
- * When the tab becomes visible, the WebSocket may have silently died
43
- * (e.g., laptop sleep/wake, long background). Browser online/offline events
44
- * don't fire in this case because the network itself didn't change.
45
- * Emit 'visibility_online' so SyncedStore can check and recover.
46
- */
47
- handleVisibilityChange = () => {
48
- if (document.visibilityState !== 'visible')
49
- return;
50
- // Update navigator.onLine state — it may have changed while hidden
51
- this.isOnline = navigator.onLine;
52
- this.lastOnlineCheck = new Date();
53
- if (this.isOnline) {
54
- this.runtime.logger.info('Tab became visible with network available — emitting visibility_online');
55
- this.emit('visibility_online');
56
- }
57
- };
58
- setupListeners() {
59
- if (typeof window === 'undefined')
60
- return;
61
- window.addEventListener('online', this.handleOnline);
62
- window.addEventListener('offline', this.handleOffline);
63
- document.addEventListener('visibilitychange', this.handleVisibilityChange);
64
- }
65
- getStatus() {
66
- return this.isOnline;
67
- }
68
- getLastOnlineTime() {
69
- return this.lastOnlineCheck;
70
- }
71
- dispose() {
72
- if (typeof window !== 'undefined') {
73
- window.removeEventListener('online', this.handleOnline);
74
- window.removeEventListener('offline', this.handleOffline);
75
- document.removeEventListener('visibilitychange', this.handleVisibilityChange);
76
- }
77
- this.removeAllListeners();
78
- }
79
- }