@abloatai/ablo 0.36.0 → 0.37.1

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 +55 -2014
  3. package/NOTICE +2 -2
  4. package/README.md +45 -63
  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,152 +0,0 @@
1
- /**
2
- * Authentication and URL resolution for the `Ablo()` client.
3
- *
4
- * Each function here makes one decision: it resolves a configuration value with
5
- * the right precedence, or fails with an actionable message. Together they let
6
- * the client constructor read as a sequence of named steps rather than a chain
7
- * of fallbacks.
8
- *
9
- * The environment surface is deliberately small: `ABLO_API_KEY` is the only
10
- * value read from the environment. Every other routing or authentication
11
- * override is an explicit option, so an app never picks up hidden behavior from
12
- * a stray environment variable.
13
- */
14
- import type { KeyEnvironment } from '../environment.js';
15
- /**
16
- * The credential-resolver callable type. It is defined alongside
17
- * {@link createEndpointCredentialResolver} in `./credentialEndpoint` and
18
- * re-exported here so importers of this module keep working. See that module
19
- * for the full contract.
20
- */
21
- import type { ApiKeySetter } from './credentialEndpoint.js';
22
- export type { ApiKeySetter };
23
- /**
24
- * The client options that decide a credential.
25
- *
26
- * This is the ONE declaration of that set. The resolvers below read it, and the
27
- * transport configs that accept these options derive from it rather than listing
28
- * the fields again — a second list is how `authEndpoint` came to be supported at
29
- * runtime, named in an error message, and absent from the type a caller writes
30
- * against.
31
- */
32
- export interface AuthClientOptions {
33
- readonly apiKey?: string | ApiKeySetter | null;
34
- /** A route that mints the token, instead of a key the process holds. */
35
- readonly authEndpoint?: string | ApiKeySetter | null;
36
- /** A token the caller already has, used as-is. */
37
- readonly authToken?: string | null;
38
- readonly baseURL?: string | null;
39
- readonly dangerouslyAllowBrowser?: boolean;
40
- }
41
- export interface AuthResolveInput {
42
- /**
43
- * The full set of options the caller passed to the client constructor. Each
44
- * resolver reads only the fields it needs; passing the whole object avoids
45
- * threading many separate parameters through every helper.
46
- */
47
- readonly options: AuthClientOptions;
48
- readonly env: Record<string, string | undefined>;
49
- }
50
- /**
51
- * Read `process.env` defensively. Works in browser (where `process`
52
- * is undefined), Node, and edge runtimes that expose a partial
53
- * process polyfill.
54
- */
55
- export declare function readProcessEnv(): Record<string, string | undefined>;
56
- export declare function resolveApiKey(input: AuthResolveInput): string | ApiKeySetter | null;
57
- /**
58
- * Narrow a resolved `apiKey` to the single resolver the credential lifecycle
59
- * needs: an async `() => token | null`, or `null` when auth is static — a plain
60
- * long-lived key string with no refresh, which is the common case.
61
- *
62
- * The short-lived per-user browser path passes a function `apiKey` (an
63
- * {@link ApiKeySetter}), and the SDK then drives the whole credential lifecycle
64
- * from it: mint-before-connect, the proactive refresh timer with its
65
- * wake/online/focus re-mint, and the reactive `credential_stale` re-mint. The
66
- * resolver follows the `ApiKeySetter` contract end to end: resolve a token,
67
- * resolve `null` when the login is gone (terminal — surfaces `session_expired`
68
- * and signs the user out), or throw on a transient failure (backs off, without
69
- * signing out).
70
- */
71
- export declare function resolveCredentialResolver(apiKey: string | ApiKeySetter | null): (() => Promise<string | null>) | null;
72
- export declare function resolveAuthToken(input: AuthResolveInput): string | null;
73
- /**
74
- * The credential axis, not a second copy of it. `environment.ts` documents two
75
- * incidents caused by conflating the plane a request runs on with the mode a
76
- * credential was minted in, and states the credential axis must not grow when
77
- * planes do — so the CLI mismatch path reads the canonical vocabulary rather
78
- * than restating its members here.
79
- */
80
- type CliMode = KeyEnvironment;
81
- type StaticApiKeySource = 'option' | 'env';
82
- interface StaticApiKey {
83
- readonly key: string;
84
- readonly source: StaticApiKeySource;
85
- }
86
- interface CliCredentialSnapshot {
87
- readonly mode: CliMode;
88
- readonly activeProfile: string;
89
- readonly storedKey?: string;
90
- }
91
- export interface CliKeyMismatch {
92
- readonly source: StaticApiKeySource;
93
- readonly configuredKeyPrefix: string;
94
- readonly configuredMode?: CliMode;
95
- readonly cliMode: CliMode;
96
- readonly storedKeyPrefix?: string;
97
- readonly kind: 'mode_mismatch' | 'key_override';
98
- readonly message: string;
99
- }
100
- /** Infer the sandbox or production mode from an Ablo key's prefix. */
101
- export declare function modeFromApiKey(key: string): CliMode | undefined;
102
- export declare function describeCliKeyMismatch(configured: StaticApiKey, cli: CliCredentialSnapshot): CliKeyMismatch | null;
103
- export declare function warnIfCliKeyMismatch(input: AuthResolveInput, warn?: (message: string) => void): Promise<void>;
104
- export { ABLO_HOSTED_API_DOMAIN, ABLO_HOSTED_HTTP_BASE_URL, ABLO_DEFAULT_BASE_URL } from './hostedEndpoints.js';
105
- /**
106
- * Normalizes older hosted host names to the current public API domain.
107
- * Self-hosted or custom URLs pass through unchanged; only the retired
108
- * first-party host names are rewritten.
109
- */
110
- export declare function normalizeAbloHostedBaseUrl(rawUrl: string): string;
111
- export declare function resolveBaseURL(input: AuthResolveInput): string;
112
- /**
113
- * Guards against using a secret `apiKey` in a browser. A secret key is
114
- * server-side only by default: shipping an `sk_live_...` key to a browser would
115
- * expose it in every visitor's network tab. Callers opt in explicitly when the
116
- * browser instead holds a minted session token (`ek_`/`rk_`) or routes through a
117
- * server proxy. Throws {@link AbloAuthenticationError} when a secret key is
118
- * detected in a browser without opt-in.
119
- */
120
- /**
121
- * Rejects the REMOVED `databaseUrl` dial-in option loudly. The option is gone
122
- * from the types, but an untyped or stale caller could still pass it — and
123
- * silently ignoring it would reroute their writes to Ablo-hosted storage,
124
- * the opposite of what that option used to promise. A construction-time throw
125
- * turns a wrong-storage surprise into a clear migration instruction.
126
- */
127
- export declare function rejectRemovedDatabaseUrlOption(options: object): void;
128
- export declare function assertBrowserSafety(input: {
129
- apiKey: string | ApiKeySetter | null;
130
- dangerouslyAllowBrowser: boolean | undefined;
131
- }): void;
132
- /**
133
- * Resolves an {@link ApiKeySetter} callable to its current string value, or
134
- * returns a plain string key as-is. Called at request time so a rotating
135
- * credential picks up new values between requests. Returns `null` when no key
136
- * was configured.
137
- */
138
- export declare function resolveApiKeyValue(apiKey: string | ApiKeySetter | null): Promise<string | null>;
139
- /**
140
- * Translates a WebSocket URL into the matching HTTP API base URL, defaulting to
141
- * `${url}/api` when the caller has not overridden `bootstrapBaseUrl`. The
142
- * bootstrap helper, the hydration coordinator, the credential-exchange flow, and
143
- * the identity flow all derive their base URL through this one function, so the
144
- * derivation stays consistent across them.
145
- *
146
- * When both `wss://` and `https://` are valid, the ws-to-http rewrite preserves
147
- * the protocol family: ws becomes http and wss becomes https.
148
- */
149
- export declare function resolveBootstrapBaseUrl(input: {
150
- readonly url: string;
151
- readonly bootstrapBaseUrl?: string;
152
- }): string;
@@ -1,419 +0,0 @@
1
- /**
2
- * Authentication and URL resolution for the `Ablo()` client.
3
- *
4
- * Each function here makes one decision: it resolves a configuration value with
5
- * the right precedence, or fails with an actionable message. Together they let
6
- * the client constructor read as a sequence of named steps rather than a chain
7
- * of fallbacks.
8
- *
9
- * The environment surface is deliberately small: `ABLO_API_KEY` is the only
10
- * value read from the environment. Every other routing or authentication
11
- * override is an explicit option, so an app never picks up hidden behavior from
12
- * a stray environment variable.
13
- */
14
- import { AbloAuthenticationError, AbloValidationError } from '../errors.js';
15
- import { classifyCredentialKind } from '../auth/credentialPolicy.js';
16
- import { ABLO_HOSTED_API_DOMAIN, ABLO_DEFAULT_BASE_URL } from './hostedEndpoints.js';
17
- import { isCredentialEndpoint, createEndpointCredentialResolver } from './credentialEndpoint.js';
18
- /**
19
- * Read `process.env` defensively. Works in browser (where `process`
20
- * is undefined), Node, and edge runtimes that expose a partial
21
- * process polyfill.
22
- */
23
- export function readProcessEnv() {
24
- const maybeGlobal = globalThis;
25
- return maybeGlobal.process?.env ?? {};
26
- }
27
- export function resolveApiKey(input) {
28
- // `authEndpoint` is the option that names a session-mint route: a URL the
29
- // client exchanges for a short-lived token, or an async resolver for custom
30
- // exchanges. It is resolved into an `ApiKeySetter` here — the single point
31
- // shared by every client variant (WebSocket, HTTP, and protocol clients) — so
32
- // every downstream consumer sees the same resolver and the credential
33
- // lifecycle drives renewal off it.
34
- const endpoint = input.options.authEndpoint;
35
- const configured = input.options.apiKey;
36
- if (endpoint != null) {
37
- if (configured != null) {
38
- throw new AbloValidationError('Ablo: pass either `apiKey` (a key the process holds) or `authEndpoint` ' +
39
- '(a route that mints the token) — not both; the client cannot know ' +
40
- 'which credential to use.', { code: 'invalid_options', param: 'authEndpoint' });
41
- }
42
- if (typeof endpoint === 'function')
43
- return endpoint;
44
- if (!isCredentialEndpoint(endpoint)) {
45
- throw new AbloValidationError('`authEndpoint` expects a URL or path (e.g. \'/api/ablo-session\') or an ' +
46
- 'async resolver — a key string belongs in `apiKey`.', { code: 'invalid_options', param: 'authEndpoint' });
47
- }
48
- return createEndpointCredentialResolver(endpoint);
49
- }
50
- // `apiKey` also accepts the endpoint-string form directly, detected the same
51
- // way — key strings are prefixed (`sk_`/`ek_`/`rk_`), so the two shapes never
52
- // collide. Only the explicit option is treated this way: an `ABLO_API_KEY`
53
- // environment value is always a literal key, never an endpoint.
54
- if (typeof configured === 'string' && isCredentialEndpoint(configured)) {
55
- return createEndpointCredentialResolver(configured);
56
- }
57
- return configured ?? input.env.ABLO_API_KEY ?? null;
58
- }
59
- /**
60
- * Narrow a resolved `apiKey` to the single resolver the credential lifecycle
61
- * needs: an async `() => token | null`, or `null` when auth is static — a plain
62
- * long-lived key string with no refresh, which is the common case.
63
- *
64
- * The short-lived per-user browser path passes a function `apiKey` (an
65
- * {@link ApiKeySetter}), and the SDK then drives the whole credential lifecycle
66
- * from it: mint-before-connect, the proactive refresh timer with its
67
- * wake/online/focus re-mint, and the reactive `credential_stale` re-mint. The
68
- * resolver follows the `ApiKeySetter` contract end to end: resolve a token,
69
- * resolve `null` when the login is gone (terminal — surfaces `session_expired`
70
- * and signs the user out), or throw on a transient failure (backs off, without
71
- * signing out).
72
- */
73
- export function resolveCredentialResolver(apiKey) {
74
- if (typeof apiKey === 'function')
75
- return apiKey;
76
- return null;
77
- }
78
- export function resolveAuthToken(input) {
79
- return input.options.authToken ?? null;
80
- }
81
- function keyPrefix(key) {
82
- return `${key.slice(0, 12)}…`;
83
- }
84
- /** Infer the sandbox or production mode from an Ablo key's prefix. */
85
- export function modeFromApiKey(key) {
86
- if (/^(sk|rk)_test_/.test(key))
87
- return 'sandbox';
88
- if (/^(sk|rk)_live_/.test(key))
89
- return 'production';
90
- return undefined;
91
- }
92
- function resolveStaticApiKey(input) {
93
- if (typeof input.options.apiKey === 'string') {
94
- // An endpoint-string `apiKey` is not a key — it never participates in
95
- // CLI-mode mismatch checks (its minted tokens carry the mode instead).
96
- if (isCredentialEndpoint(input.options.apiKey))
97
- return null;
98
- return { key: input.options.apiKey, source: 'option' };
99
- }
100
- if (input.options.apiKey !== undefined && input.options.apiKey !== null) {
101
- return null;
102
- }
103
- const envKey = input.env.ABLO_API_KEY;
104
- if (typeof envKey === 'string' && envKey.length > 0) {
105
- return { key: envKey, source: 'env' };
106
- }
107
- return null;
108
- }
109
- function readProfileKeys(value) {
110
- if (!value || typeof value !== 'object')
111
- return {};
112
- const profiles = {};
113
- for (const [name, raw] of Object.entries(value)) {
114
- if (!raw || typeof raw !== 'object')
115
- continue;
116
- const row = raw;
117
- const sandbox = row.sandbox;
118
- const production = row.production;
119
- profiles[name] = {
120
- sandbox: sandbox && typeof sandbox === 'object' ? sandbox : undefined,
121
- production: production && typeof production === 'object' ? production : undefined,
122
- };
123
- }
124
- return profiles;
125
- }
126
- function legacyProfileKeys(value) {
127
- if (!value)
128
- return { sandbox: undefined, production: undefined };
129
- const sandbox = value.sandbox;
130
- const production = value.production;
131
- if ((sandbox && typeof sandbox === 'object') ||
132
- (production && typeof production === 'object')) {
133
- return {
134
- sandbox: sandbox && typeof sandbox === 'object' ? sandbox : undefined,
135
- production: production && typeof production === 'object' ? production : undefined,
136
- };
137
- }
138
- if (typeof value.apiKey === 'string') {
139
- return { sandbox: { apiKey: value.apiKey }, production: undefined };
140
- }
141
- return { sandbox: undefined, production: undefined };
142
- }
143
- function normalizeCliMode(value) {
144
- return value === 'sandbox' || value === 'production' ? value : undefined;
145
- }
146
- function activeProjectSlug(value) {
147
- if (!value || typeof value !== 'object')
148
- return undefined;
149
- const slug = value.slug;
150
- return typeof slug === 'string' && slug.length > 0 ? slug : undefined;
151
- }
152
- function importNodeBuiltin(specifier) {
153
- // Node-only runtime import (CLI credential snapshot). The call is dead in
154
- // browser/edge builds — guarded by `process.versions.node` and `window`
155
- // checks in the callers — but bundlers still try to resolve the dynamic
156
- // `import()` and Turbopack fails the build on the unanalyzable specifier.
157
- // The magic comments tell each bundler to emit the import verbatim and never
158
- // resolve it. Keep both so webpack and Turbopack consumers are covered.
159
- return import(/* webpackIgnore: true */ /* turbopackIgnore: true */ specifier);
160
- }
161
- async function readJsonIfPresent(path) {
162
- try {
163
- const { readFile } = await importNodeBuiltin('node:fs/promises');
164
- const text = await readFile(path, 'utf8');
165
- const parsed = JSON.parse(text);
166
- return parsed && typeof parsed === 'object' ? parsed : null;
167
- }
168
- catch {
169
- return null;
170
- }
171
- }
172
- async function readCliCredentialSnapshot(env) {
173
- const processLike = globalThis.process;
174
- if (!processLike?.versions?.node)
175
- return null;
176
- if (typeof window !== 'undefined')
177
- return null;
178
- const [{ homedir }, { join }] = await Promise.all([
179
- importNodeBuiltin('node:os'),
180
- importNodeBuiltin('node:path'),
181
- ]);
182
- const dir = env.ABLO_CONFIG_DIR
183
- ?? (env.XDG_CONFIG_HOME ? join(env.XDG_CONFIG_HOME, 'ablo') : join(homedir(), '.config', 'ablo'));
184
- const [cfg, creds] = await Promise.all([
185
- readJsonIfPresent(join(dir, 'config.json')),
186
- readJsonIfPresent(join(dir, 'credentials.json')),
187
- ]);
188
- const mode = normalizeCliMode(cfg?.mode) ?? normalizeCliMode(creds?.mode);
189
- const activeProfile = activeProjectSlug(cfg?.activeProject) ?? 'default';
190
- const profiles = {
191
- ...readProfileKeys(creds?.profiles),
192
- ...readProfileKeys(cfg?.profiles),
193
- };
194
- if (!profiles[activeProfile]) {
195
- const legacy = { ...legacyProfileKeys(cfg), ...legacyProfileKeys(creds) };
196
- if (legacy.sandbox?.apiKey || legacy.production?.apiKey) {
197
- profiles[activeProfile] = legacy;
198
- }
199
- }
200
- const effectiveMode = mode ?? (Object.keys(profiles).length > 0 ? 'sandbox' : undefined);
201
- if (!effectiveMode)
202
- return null;
203
- return {
204
- mode: effectiveMode,
205
- activeProfile,
206
- ...(profiles[activeProfile]?.[effectiveMode]?.apiKey
207
- ? { storedKey: profiles[activeProfile][effectiveMode].apiKey }
208
- : {}),
209
- };
210
- }
211
- export function describeCliKeyMismatch(configured, cli) {
212
- const configuredMode = modeFromApiKey(configured.key);
213
- const configuredKeyPrefix = keyPrefix(configured.key);
214
- const storedKeyPrefix = cli.storedKey ? keyPrefix(cli.storedKey) : undefined;
215
- const sourceLabel = configured.source === 'env' ? 'ABLO_API_KEY' : 'configured apiKey';
216
- if (configuredMode && configuredMode !== cli.mode) {
217
- return {
218
- source: configured.source,
219
- configuredKeyPrefix,
220
- configuredMode,
221
- cliMode: cli.mode,
222
- ...(storedKeyPrefix ? { storedKeyPrefix } : {}),
223
- kind: 'mode_mismatch',
224
- message: `${sourceLabel} is a ${configuredMode} key (${configuredKeyPrefix}) but the Ablo CLI is in ` +
225
- `${cli.mode} mode${storedKeyPrefix ? ` (active stored key ${storedKeyPrefix})` : ''}. ` +
226
- `Requests will use ${configuredMode}. Use the ${cli.mode} key, unset ABLO_API_KEY, ` +
227
- `or run \`ablo mode ${configuredMode}\` intentionally.`,
228
- };
229
- }
230
- if (configured.source === 'env' && cli.storedKey && configured.key !== cli.storedKey) {
231
- return {
232
- source: configured.source,
233
- configuredKeyPrefix,
234
- ...(configuredMode ? { configuredMode } : {}),
235
- cliMode: cli.mode,
236
- storedKeyPrefix,
237
- kind: 'key_override',
238
- message: `ABLO_API_KEY (${configuredKeyPrefix}) overrides the CLI's stored active ${cli.mode} key ` +
239
- `(${storedKeyPrefix}). Requests will use the environment key. Unset ABLO_API_KEY to use ` +
240
- '`ablo status` / `ablo mode` credentials.',
241
- };
242
- }
243
- return null;
244
- }
245
- let warnedCliKeyMismatch = false;
246
- export async function warnIfCliKeyMismatch(input, warn) {
247
- if (warnedCliKeyMismatch)
248
- return;
249
- if (input.env.NODE_ENV === 'production')
250
- return;
251
- const configured = resolveStaticApiKey(input);
252
- if (!configured)
253
- return;
254
- const cli = await readCliCredentialSnapshot(input.env);
255
- if (!cli)
256
- return;
257
- const mismatch = describeCliKeyMismatch(configured, cli);
258
- if (!mismatch)
259
- return;
260
- warnedCliKeyMismatch = true;
261
- if (warn)
262
- warn(mismatch.message);
263
- else if (typeof console !== 'undefined')
264
- console.warn('[Ablo]', mismatch.message);
265
- }
266
- // Declared in `./hostedEndpoints`, the single source of the hosted domain, and
267
- // re-exported here so existing import paths keep working.
268
- export { ABLO_HOSTED_API_DOMAIN, ABLO_HOSTED_HTTP_BASE_URL, ABLO_DEFAULT_BASE_URL } from './hostedEndpoints.js';
269
- const LEGACY_HOSTED_API_HOSTS = new Set([
270
- 'mesh.ablo.finance',
271
- 'mesh-staging.ablo.finance',
272
- 'api.ablo.finance',
273
- 'sync-staging.ablo.finance',
274
- ]);
275
- /**
276
- * Normalizes older hosted host names to the current public API domain.
277
- * Self-hosted or custom URLs pass through unchanged; only the retired
278
- * first-party host names are rewritten.
279
- */
280
- export function normalizeAbloHostedBaseUrl(rawUrl) {
281
- const trimmed = rawUrl.trim();
282
- if (!trimmed)
283
- return trimmed;
284
- // A scheme-less value (e.g. `api-staging.abloatai.com`) is treated as a
285
- // relative URL: `new URL()` throws on it, and a later `fetch` would resolve it
286
- // against the current page — producing a 404 from the app's own origin.
287
- // Prepending a scheme makes the base absolute. `https` matches
288
- // {@link ABLO_HOSTED_HTTP_BASE_URL}; the socket layer derives `wss` from it.
289
- // An existing scheme (ws, wss, http, or https) is preserved untouched.
290
- const schemed = /^[a-z][a-z0-9+.-]*:\/\//i.test(trimmed) ? trimmed : `https://${trimmed}`;
291
- try {
292
- const url = new URL(schemed);
293
- // Canonicalize the scheme to the HTTP family: accept all four schemes
294
- // (http, https, ws, wss), normalize at this single entry point, and let
295
- // each layer derive its own protocol (the socket layer maps http to ws and
296
- // https to wss; fetch uses the URL as-is). Without this, a `ws://` base URL
297
- // reaches HTTP consumers un-normalized and the client fails at startup
298
- // instead of connecting.
299
- if (url.protocol === 'ws:')
300
- url.protocol = 'http:';
301
- if (url.protocol === 'wss:')
302
- url.protocol = 'https:';
303
- if (!LEGACY_HOSTED_API_HOSTS.has(url.hostname)) {
304
- return url.toString().replace(/\/+$/, '');
305
- }
306
- url.hostname = ABLO_HOSTED_API_DOMAIN;
307
- if (url.protocol === 'http:')
308
- url.protocol = 'https:';
309
- return url.toString().replace(/\/+$/, '');
310
- }
311
- catch {
312
- return schemed;
313
- }
314
- }
315
- export function resolveBaseURL(input) {
316
- return normalizeAbloHostedBaseUrl(input.options.baseURL ?? ABLO_DEFAULT_BASE_URL);
317
- }
318
- /**
319
- * Guards against using a secret `apiKey` in a browser. A secret key is
320
- * server-side only by default: shipping an `sk_live_...` key to a browser would
321
- * expose it in every visitor's network tab. Callers opt in explicitly when the
322
- * browser instead holds a minted session token (`ek_`/`rk_`) or routes through a
323
- * server proxy. Throws {@link AbloAuthenticationError} when a secret key is
324
- * detected in a browser without opt-in.
325
- */
326
- /**
327
- * Rejects the REMOVED `databaseUrl` dial-in option loudly. The option is gone
328
- * from the types, but an untyped or stale caller could still pass it — and
329
- * silently ignoring it would reroute their writes to Ablo-hosted storage,
330
- * the opposite of what that option used to promise. A construction-time throw
331
- * turns a wrong-storage surprise into a clear migration instruction.
332
- */
333
- export function rejectRemovedDatabaseUrlOption(options) {
334
- const legacyValue = Reflect.get(options, 'databaseUrl');
335
- if (legacyValue == null)
336
- return;
337
- throw new AbloValidationError('The `databaseUrl` option was removed. Your database connects through ' +
338
- '`ablo connect` now: Ablo writes it directly with a scoped DML role and ' +
339
- 'confirms through its replication stream. Run `npx ablo connect` to ' +
340
- 'register it, then construct the client with your API key only.', { code: 'invalid_body' });
341
- }
342
- export function assertBrowserSafety(input) {
343
- const inBrowser = typeof window !== 'undefined';
344
- if (!input.dangerouslyAllowBrowser &&
345
- inBrowser &&
346
- typeof input.apiKey === 'string' &&
347
- classifyCredentialKind(input.apiKey) === 'secret') {
348
- throw new AbloAuthenticationError("It looks like you're running in a browser-like environment.\n\n" +
349
- 'This is disabled by default — your secret API key would be ' +
350
- "exposed to every visitor's network tab. If you understand the risks " +
351
- 'and have appropriate mitigations in place, you can set the ' +
352
- '`dangerouslyAllowBrowser` option to `true`, e.g.,\n\n' +
353
- ' Ablo({ schema, apiKey, dangerouslyAllowBrowser: true });\n', { code: 'browser_apikey_blocked' });
354
- }
355
- }
356
- /**
357
- * Resolves an {@link ApiKeySetter} callable to its current string value, or
358
- * returns a plain string key as-is. Called at request time so a rotating
359
- * credential picks up new values between requests. Returns `null` when no key
360
- * was configured.
361
- */
362
- export async function resolveApiKeyValue(apiKey) {
363
- if (apiKey == null)
364
- return null;
365
- if (typeof apiKey === 'function')
366
- return apiKey();
367
- return apiKey;
368
- }
369
- /**
370
- * Translates a WebSocket URL into the matching HTTP API base URL, defaulting to
371
- * `${url}/api` when the caller has not overridden `bootstrapBaseUrl`. The
372
- * bootstrap helper, the hydration coordinator, the credential-exchange flow, and
373
- * the identity flow all derive their base URL through this one function, so the
374
- * derivation stays consistent across them.
375
- *
376
- * When both `wss://` and `https://` are valid, the ws-to-http rewrite preserves
377
- * the protocol family: ws becomes http and wss becomes https.
378
- */
379
- export function resolveBootstrapBaseUrl(input) {
380
- if (input.bootstrapBaseUrl) {
381
- // Coerce ws/wss to http/https on the override path as well. This base URL is
382
- // used for HTTP fetches (identity resolution, credential exchange, and
383
- // bootstrap), and the browser `fetch` rejects ws and wss schemes outright.
384
- // The override can legitimately arrive with a WebSocket scheme when a caller
385
- // derives it as `${baseUrl}/api` from a WebSocket base URL, so normalize it
386
- // here rather than failing at fetch time.
387
- return ensureApiSuffix(normalizeAbloHostedBaseUrl(input.bootstrapBaseUrl).replace(/^ws/, 'http'));
388
- }
389
- const url = normalizeAbloHostedBaseUrl(input.url);
390
- return ensureApiSuffix(url.replace(/^ws/, 'http'));
391
- }
392
- /**
393
- * Ensures the HTTP base ends in the `/api` route segment that every endpoint is
394
- * mounted under.
395
- *
396
- * A hosted deployment that sets a custom `baseURL` or `bootstrapBaseUrl` (a
397
- * custom subdomain, a staging host, and so on) without the `/api` suffix would
398
- * send every credential exchange to `…/auth/capability` instead of
399
- * `…/api/auth/capability`, producing a 404 that surfaces as `exchange_failed`.
400
- * Since the client builds routes relative to this base and no valid deployment
401
- * serves them from the root, appending a single trailing `/api` here is always
402
- * correct, and it is idempotent for callers who already include it.
403
- */
404
- function ensureApiSuffix(httpBase) {
405
- const trimmed = httpBase.replace(/\/+$/, '');
406
- try {
407
- const u = new URL(trimmed);
408
- const segments = u.pathname.split('/').filter(Boolean);
409
- if (segments[segments.length - 1] === 'api')
410
- return trimmed;
411
- u.pathname = `${u.pathname.replace(/\/+$/, '')}/api`;
412
- return u.toString().replace(/\/+$/, '');
413
- }
414
- catch {
415
- // Should be unreachable after `normalizeAbloHostedBaseUrl`, which yields an
416
- // absolute URL, but fall back to a string check rather than throwing.
417
- return trimmed.endsWith("/api") ? trimmed : `${trimmed}/api`;
418
- }
419
- }
@@ -1,15 +0,0 @@
1
- /**
2
- * The hand-off the identity flow performs once a credential resolves: it names
3
- * the account scope and the sync groups everything downstream should read under.
4
- *
5
- * The core defines the port; the consumer supplies the implementation. That
6
- * keeps identity resolution — which is settlement's business — from depending on
7
- * whatever happens to materialise rows on the other side of it (ADR 0016). The
8
- * reactive engine's `BootstrapFetcher` satisfies this structurally.
9
- */
10
- export interface BootstrapScope {
11
- /** Bind subsequent reads to one account's cache partition. */
12
- setCacheScope(cacheScope: string): void;
13
- /** Narrow subsequent reads to the sync groups the credential authorises. */
14
- setSyncGroups(syncGroups: readonly string[] | undefined): void;
15
- }
@@ -1 +0,0 @@
1
- export {};