@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,212 +0,0 @@
1
- /**
2
- * Capability — the one definition of what a credential may do.
3
- *
4
- * A grant is declared once, in the vocabulary a developer writes:
5
- *
6
- * can: { documents: ['read', 'update'] }
7
- *
8
- * Everything downstream derives from that declaration: the wire spelling
9
- * (`documents.update`) stored on the key row, the typed `can` a schema narrows
10
- * to its own models, the request body the mint route parses, the pattern the
11
- * published contract advertises, and the scope block echoed back on the minted
12
- * session.
13
- *
14
- * Before this module the same grant was spelled five times — a literal union in
15
- * the resource types, a `z.array(z.string())` on the wire, a hand-rolled
16
- * field-by-field parser in the mint route, an object literal in the response
17
- * type, and a hand-written `model.verb` array at each caller that mints without
18
- * the SDK. Nothing failed when they drifted; the drift surfaced as
19
- * `capability_scope_denied` on a grant the caller believed it held.
20
- *
21
- * Two axes decide blast radius. VERBS come from `can`; ROWS come from
22
- * `syncGroups`. They belong to one grant, which is why they are declared
23
- * together here rather than meeting for the first time on the wire.
24
- */
25
- import { z } from 'zod';
26
- /**
27
- * The verbs a grant can name — the whole vocabulary, in one place. Every other
28
- * spelling of an operation in the system derives from this enum: the SDK's
29
- * `can` values, the wire's `model.verb` pattern, and the JSON Schema the
30
- * published contract advertises.
31
- */
32
- export declare const capabilityOperationSchema: z.ZodEnum<{
33
- update: "update";
34
- create: "create";
35
- delete: "delete";
36
- read: "read";
37
- }>;
38
- export type CapabilityOperation = z.infer<typeof capabilityOperationSchema>;
39
- /**
40
- * One granted operation in its wire spelling: `<model>.<verb>`, lowercased.
41
- *
42
- * The template literal derives both halves — the verb set from
43
- * {@link capabilityOperationSchema}, the pattern in the published contract from
44
- * the template — so tightening the verb vocabulary can never leave a stale
45
- * regex or a stale doc behind. The model half is the name the server matches
46
- * against a model's registered aliases (type name, schema key, or table name),
47
- * so it stays permissive here and is resolved at the gate.
48
- */
49
- export declare const grantedOperationSchema: z.ZodTemplateLiteral<`${string}.update` | `${string}.create` | `${string}.delete` | `${string}.read`>;
50
- export type GrantedOperation = z.infer<typeof grantedOperationSchema>;
51
- /**
52
- * The declared grant, per model — the runtime shape of `can`. Model keys are
53
- * free-form at runtime because the server resolves them against the schema it
54
- * has; {@link CapabilityCan} narrows them to a known schema's models at the
55
- * type level.
56
- */
57
- export declare const capabilityCanSchema: z.ZodRecord<z.ZodString, z.ZodReadonly<z.ZodArray<z.ZodEnum<{
58
- update: "update";
59
- create: "create";
60
- delete: "delete";
61
- read: "read";
62
- }>>>>;
63
- /**
64
- * `can`, narrowed to one schema's model names. A projection of
65
- * {@link capabilityCanSchema} — the value type is the operation enum, the key
66
- * domain is the schema's models, so `can: { tasks: ['update'] }` fails to
67
- * compile against a schema with no `tasks` model.
68
- */
69
- export type CapabilityCan<S> = Partial<Record<keyof S & string, readonly CapabilityOperation[]>>;
70
- /**
71
- * Read-your-writes expansion: append `<model>.read` for every model the grant
72
- * can write.
73
- *
74
- * A scoped agent that may update a row must be able to read it, or the read
75
- * gate (query / bootstrap / entity self-heal / delta fan-out) starves the very
76
- * writes the grant allows. The write verbs stay the source of truth; reads are
77
- * derived and deduped, and models the grant cannot write stay unreadable —
78
- * that is the read-side blast-radius reduction.
79
- *
80
- * It lives beside the declaration, so it applies wherever a grant is built,
81
- * rather than only at whichever mint the callers happen to share. The server
82
- * applies it again at the mint chokepoint for callers that post raw JSON; the
83
- * function is idempotent, so the second application is a no-op.
84
- */
85
- export declare function expandReadYourWrites(operations: readonly GrantedOperation[]): GrantedOperation[];
86
- /**
87
- * The parts of a model definition a grant can name. Structural, so both the
88
- * SDK (which holds a `Schema`) and the mint route (which holds the tenant's
89
- * pushed artifact) derive names from the same rule.
90
- */
91
- export interface CapabilityModelShape {
92
- readonly typename?: string;
93
- readonly tableName?: string;
94
- }
95
- /**
96
- * Schema key → the wire name a grant must be minted with.
97
- *
98
- * THE derivation. A model whose type name is overridden — schema key
99
- * `documents`, type name `Document` — has to mint `document.update`, not
100
- * `documents.update`, and a caller who works that out by hand gets it wrong
101
- * once and learns at `capability_scope_denied`. Callers pass their schema's
102
- * models, never a map they assembled themselves.
103
- */
104
- export declare function modelWireNames(models: Readonly<Record<string, CapabilityModelShape>>): Record<string, string>;
105
- /**
106
- * Every name the enforcement gates accept for a model, lowercased. Three
107
- * vocabularies name one logical model — the wire type name (`lineitem`), the
108
- * schema key (`lineItems`), and the table name (`line_items`) — so a grant
109
- * minted in any of them is honored, and the mint can tell a real model from a
110
- * typo without guessing which vocabulary the caller used.
111
- */
112
- export declare function capabilityModelAliases(models: Readonly<Record<string, CapabilityModelShape>>): Set<string>;
113
- /**
114
- * The granted operations whose model half names nothing in the schema.
115
- *
116
- * A grant is checked against the schema at MINT, the way a write to an unpushed
117
- * model already fails with `server_execute_unknown_model` — so a typo in
118
- * `lineitem.update` is a rejected mint rather than a credential that looks
119
- * healthy and is denied on its first write. Without this the `model` half is a
120
- * hole: an opaque string nothing validates until enforcement time.
121
- */
122
- export declare function unresolvableOperations(operations: readonly GrantedOperation[], aliases: ReadonlySet<string>): GrantedOperation[];
123
- /**
124
- * Serializes a declared `can` into the wire allowlist — the ONE translation
125
- * from what a developer writes to what the server stores and enforces.
126
- *
127
- * `wireNames` comes from {@link modelWireNames} over the client's own schema.
128
- * It is required rather than optional: an omitted map silently mints the schema
129
- * key verbatim, which is right for most models and wrong for every model with
130
- * a type-name override — the kind of default that is correct until it isn't.
131
- */
132
- export declare function grantedOperations(can: Readonly<Record<string, readonly CapabilityOperation[] | undefined>>, wireNames: Readonly<Record<string, string>>): GrantedOperation[];
133
- /**
134
- * The grant at rest: what the credential ended up with, on both axes, plus the
135
- * participant it acts as. The mint echoes this block, the key row stores it,
136
- * and the gates read it — so a session's reported scope and its enforced scope
137
- * are the same shape by construction.
138
- */
139
- export declare const capabilityScopeSchema: z.ZodObject<{
140
- organizationId: z.ZodString;
141
- syncGroups: z.ZodArray<z.ZodString>;
142
- operations: z.ZodArray<z.ZodTemplateLiteral<`${string}.update` | `${string}.create` | `${string}.delete` | `${string}.read`>>;
143
- participantKind: z.ZodEnum<{
144
- user: "user";
145
- agent: "agent";
146
- system: "system";
147
- }>;
148
- participantId: z.ZodString;
149
- }, z.core.$strip>;
150
- export type CapabilityScope = z.infer<typeof capabilityScopeSchema>;
151
- /**
152
- * What `POST /v1/capabilities` answers with — **201**, the credential is minted.
153
- *
154
- * This is the first call any non-TypeScript client makes, and until it had a
155
- * schema the published contract described it as `{ type: 'object' }`: a caller
156
- * working from the reference could see that a capability could be minted and
157
- * not where the token was in the reply.
158
- *
159
- * `scope` echoes what was MINTED, not what was asked. A `wideScope` mint stores
160
- * the org-wide default and read-your-writes widens the verb axis, so a client
161
- * that assumed its request came back verbatim would report a scope narrower
162
- * than the one being enforced.
163
- *
164
- * `userMeta` is the caller's own blob, echoed. Ablo has no view into their user
165
- * directory — the API key is what is trusted — so this is deliberately open.
166
- */
167
- export declare const capabilityMintResponseSchema: z.ZodObject<{
168
- capabilityId: z.ZodString;
169
- token: z.ZodString;
170
- expiresAt: z.ZodString;
171
- organizationId: z.ZodString;
172
- scope: z.ZodObject<{
173
- organizationId: z.ZodString;
174
- syncGroups: z.ZodArray<z.ZodString>;
175
- operations: z.ZodArray<z.ZodTemplateLiteral<`${string}.update` | `${string}.create` | `${string}.delete` | `${string}.read`>>;
176
- participantKind: z.ZodEnum<{
177
- user: "user";
178
- agent: "agent";
179
- system: "system";
180
- }>;
181
- participantId: z.ZodString;
182
- }, z.core.$strip>;
183
- userMeta: z.ZodRecord<z.ZodString, z.ZodUnknown>;
184
- }, z.core.$strip>;
185
- export type CapabilityMintResponse = z.infer<typeof capabilityMintResponseSchema>;
186
- /**
187
- * `POST /v1/capabilities` — mint a capability for a participant.
188
- *
189
- * Where an ephemeral key is a session for a person, a capability is a scoped,
190
- * revocable grant for an agent or a system. Narrow by default: an agent or
191
- * system capability must name its `operations` unless the caller explicitly
192
- * asks for `wideScope`, which is itself privileged.
193
- *
194
- * This is the parsed body — the mint route validates against it rather than
195
- * reading fields one at a time, so the shape and the validation rules cannot
196
- * drift from each other or from the published contract.
197
- */
198
- export declare const capabilityRequestSchema: z.ZodObject<{
199
- participantKind: z.ZodEnum<{
200
- user: "user";
201
- agent: "agent";
202
- system: "system";
203
- }>;
204
- participantId: z.ZodOptional<z.ZodString>;
205
- syncGroups: z.ZodOptional<z.ZodReadonly<z.ZodArray<z.ZodUnion<readonly [z.ZodLiteral<"default">, z.core.$ZodBranded<z.ZodTemplateLiteral<`${string}:${string}`>, "SyncGroup", "out">]>>>>;
206
- operations: z.ZodOptional<z.ZodReadonly<z.ZodArray<z.ZodTemplateLiteral<`${string}.update` | `${string}.create` | `${string}.delete` | `${string}.read`>>>>;
207
- ttlSeconds: z.ZodNumber;
208
- label: z.ZodOptional<z.ZodString>;
209
- wideScope: z.ZodOptional<z.ZodBoolean>;
210
- userMeta: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
211
- }, z.core.$strip>;
212
- export type CapabilityRequest = z.infer<typeof capabilityRequestSchema>;
@@ -1,224 +0,0 @@
1
- /**
2
- * Capability — the one definition of what a credential may do.
3
- *
4
- * A grant is declared once, in the vocabulary a developer writes:
5
- *
6
- * can: { documents: ['read', 'update'] }
7
- *
8
- * Everything downstream derives from that declaration: the wire spelling
9
- * (`documents.update`) stored on the key row, the typed `can` a schema narrows
10
- * to its own models, the request body the mint route parses, the pattern the
11
- * published contract advertises, and the scope block echoed back on the minted
12
- * session.
13
- *
14
- * Before this module the same grant was spelled five times — a literal union in
15
- * the resource types, a `z.array(z.string())` on the wire, a hand-rolled
16
- * field-by-field parser in the mint route, an object literal in the response
17
- * type, and a hand-written `model.verb` array at each caller that mints without
18
- * the SDK. Nothing failed when they drifted; the drift surfaced as
19
- * `capability_scope_denied` on a grant the caller believed it held.
20
- *
21
- * Two axes decide blast radius. VERBS come from `can`; ROWS come from
22
- * `syncGroups`. They belong to one grant, which is why they are declared
23
- * together here rather than meeting for the first time on the wire.
24
- */
25
- import { z } from 'zod';
26
- import { participantKindSchema } from '../coordination/schema.js';
27
- import { syncGroupInputSchema } from '../schema/roles.js';
28
- /**
29
- * The verbs a grant can name — the whole vocabulary, in one place. Every other
30
- * spelling of an operation in the system derives from this enum: the SDK's
31
- * `can` values, the wire's `model.verb` pattern, and the JSON Schema the
32
- * published contract advertises.
33
- */
34
- export const capabilityOperationSchema = z.enum(['read', 'create', 'update', 'delete']);
35
- /**
36
- * One granted operation in its wire spelling: `<model>.<verb>`, lowercased.
37
- *
38
- * The template literal derives both halves — the verb set from
39
- * {@link capabilityOperationSchema}, the pattern in the published contract from
40
- * the template — so tightening the verb vocabulary can never leave a stale
41
- * regex or a stale doc behind. The model half is the name the server matches
42
- * against a model's registered aliases (type name, schema key, or table name),
43
- * so it stays permissive here and is resolved at the gate.
44
- */
45
- export const grantedOperationSchema = z.templateLiteral([
46
- z.string().regex(/^[^.\s]+$/),
47
- '.',
48
- capabilityOperationSchema,
49
- ]);
50
- /**
51
- * The declared grant, per model — the runtime shape of `can`. Model keys are
52
- * free-form at runtime because the server resolves them against the schema it
53
- * has; {@link CapabilityCan} narrows them to a known schema's models at the
54
- * type level.
55
- */
56
- export const capabilityCanSchema = z.record(z.string().min(1), z.array(capabilityOperationSchema).readonly());
57
- /**
58
- * Read-your-writes expansion: append `<model>.read` for every model the grant
59
- * can write.
60
- *
61
- * A scoped agent that may update a row must be able to read it, or the read
62
- * gate (query / bootstrap / entity self-heal / delta fan-out) starves the very
63
- * writes the grant allows. The write verbs stay the source of truth; reads are
64
- * derived and deduped, and models the grant cannot write stay unreadable —
65
- * that is the read-side blast-radius reduction.
66
- *
67
- * It lives beside the declaration, so it applies wherever a grant is built,
68
- * rather than only at whichever mint the callers happen to share. The server
69
- * applies it again at the mint chokepoint for callers that post raw JSON; the
70
- * function is idempotent, so the second application is a no-op.
71
- */
72
- export function expandReadYourWrites(operations) {
73
- const out = new Set(operations);
74
- for (const op of operations) {
75
- const [model] = op.split('.');
76
- if (model)
77
- out.add(`${model}.read`);
78
- }
79
- return [...out];
80
- }
81
- /**
82
- * Schema key → the wire name a grant must be minted with.
83
- *
84
- * THE derivation. A model whose type name is overridden — schema key
85
- * `documents`, type name `Document` — has to mint `document.update`, not
86
- * `documents.update`, and a caller who works that out by hand gets it wrong
87
- * once and learns at `capability_scope_denied`. Callers pass their schema's
88
- * models, never a map they assembled themselves.
89
- */
90
- export function modelWireNames(models) {
91
- return Object.fromEntries(Object.entries(models).map(([key, def]) => [key, def.typename ?? key]));
92
- }
93
- /**
94
- * Every name the enforcement gates accept for a model, lowercased. Three
95
- * vocabularies name one logical model — the wire type name (`lineitem`), the
96
- * schema key (`lineItems`), and the table name (`line_items`) — so a grant
97
- * minted in any of them is honored, and the mint can tell a real model from a
98
- * typo without guessing which vocabulary the caller used.
99
- */
100
- export function capabilityModelAliases(models) {
101
- const aliases = new Set();
102
- for (const [key, def] of Object.entries(models)) {
103
- aliases.add(key.toLowerCase());
104
- if (def.typename)
105
- aliases.add(def.typename.toLowerCase());
106
- if (def.tableName)
107
- aliases.add(def.tableName.toLowerCase());
108
- }
109
- return aliases;
110
- }
111
- /**
112
- * The granted operations whose model half names nothing in the schema.
113
- *
114
- * A grant is checked against the schema at MINT, the way a write to an unpushed
115
- * model already fails with `server_execute_unknown_model` — so a typo in
116
- * `lineitem.update` is a rejected mint rather than a credential that looks
117
- * healthy and is denied on its first write. Without this the `model` half is a
118
- * hole: an opaque string nothing validates until enforcement time.
119
- */
120
- export function unresolvableOperations(operations, aliases) {
121
- // The model half holds no dot (see `grantedOperationSchema`), so the first
122
- // separator is the only one.
123
- return operations.filter((op) => !aliases.has(op.slice(0, op.indexOf('.'))));
124
- }
125
- /**
126
- * Serializes a declared `can` into the wire allowlist — the ONE translation
127
- * from what a developer writes to what the server stores and enforces.
128
- *
129
- * `wireNames` comes from {@link modelWireNames} over the client's own schema.
130
- * It is required rather than optional: an omitted map silently mints the schema
131
- * key verbatim, which is right for most models and wrong for every model with
132
- * a type-name override — the kind of default that is correct until it isn't.
133
- */
134
- export function grantedOperations(can, wireNames) {
135
- const declared = Object.entries(can).flatMap(([model, ops]) => {
136
- const wireName = (wireNames[model] ?? model).toLowerCase();
137
- return (ops ?? []).map((op) => `${wireName}.${op}`);
138
- });
139
- return expandReadYourWrites(declared);
140
- }
141
- /**
142
- * The grant at rest: what the credential ended up with, on both axes, plus the
143
- * participant it acts as. The mint echoes this block, the key row stores it,
144
- * and the gates read it — so a session's reported scope and its enforced scope
145
- * are the same shape by construction.
146
- */
147
- export const capabilityScopeSchema = z.object({
148
- organizationId: z.string().min(1),
149
- /**
150
- * The ROW axis — which sync groups this credential may act within. Read back
151
- * as plain strings rather than the branded form the request enforces: this is
152
- * what the key row already holds, including rows minted before that gate.
153
- */
154
- syncGroups: z.array(z.string()),
155
- /** The VERB axis — the allowlist as minted, after read-your-writes. */
156
- operations: z.array(grantedOperationSchema),
157
- participantKind: participantKindSchema,
158
- participantId: z.string().min(1),
159
- });
160
- /**
161
- * What `POST /v1/capabilities` answers with — **201**, the credential is minted.
162
- *
163
- * This is the first call any non-TypeScript client makes, and until it had a
164
- * schema the published contract described it as `{ type: 'object' }`: a caller
165
- * working from the reference could see that a capability could be minted and
166
- * not where the token was in the reply.
167
- *
168
- * `scope` echoes what was MINTED, not what was asked. A `wideScope` mint stores
169
- * the org-wide default and read-your-writes widens the verb axis, so a client
170
- * that assumed its request came back verbatim would report a scope narrower
171
- * than the one being enforced.
172
- *
173
- * `userMeta` is the caller's own blob, echoed. Ablo has no view into their user
174
- * directory — the API key is what is trusted — so this is deliberately open.
175
- */
176
- export const capabilityMintResponseSchema = z.object({
177
- capabilityId: z.string().min(1),
178
- token: z.string().min(1),
179
- /** ISO 8601. */
180
- expiresAt: z.string().min(1),
181
- organizationId: z.string().min(1),
182
- scope: capabilityScopeSchema,
183
- userMeta: z.record(z.string(), z.unknown()),
184
- });
185
- /**
186
- * `POST /v1/capabilities` — mint a capability for a participant.
187
- *
188
- * Where an ephemeral key is a session for a person, a capability is a scoped,
189
- * revocable grant for an agent or a system. Narrow by default: an agent or
190
- * system capability must name its `operations` unless the caller explicitly
191
- * asks for `wideScope`, which is itself privileged.
192
- *
193
- * This is the parsed body — the mint route validates against it rather than
194
- * reading fields one at a time, so the shape and the validation rules cannot
195
- * drift from each other or from the published contract.
196
- */
197
- export const capabilityRequestSchema = z.object({
198
- participantKind: participantKindSchema,
199
- participantId: z.string().min(1).optional(),
200
- /**
201
- * The ROW axis. Validated as the engine's branded sync-group form
202
- * (`default` or `<namespace>:<id>`): a malformed group stored on the key row
203
- * would subscribe the connection to NOTHING and fail silently at fan-out
204
- * time, so it is rejected loudly at the boundary.
205
- */
206
- syncGroups: z.array(syncGroupInputSchema).readonly().optional(),
207
- /** The VERB axis, as `model.verb` — e.g. `tasks.update`. */
208
- operations: z.array(grantedOperationSchema).readonly().optional(),
209
- ttlSeconds: z.number().int().positive(),
210
- label: z.string().min(1).optional(),
211
- /**
212
- * Opt out of narrow-by-default scoping. Without it, agent and system
213
- * capabilities require non-empty `operations`; with it, the caller must
214
- * additionally hold an admin/owner role or present a secret key.
215
- */
216
- wideScope: z.boolean().optional(),
217
- /**
218
- * Caller-attested identity for the end user this capability acts for — the
219
- * on-behalf-of pattern. Ablo does not validate it and has no view into the
220
- * caller's user directory; the API key is what is trusted, and this blob is
221
- * echoed back to the client.
222
- */
223
- userMeta: z.record(z.string(), z.unknown()).optional(),
224
- });
@@ -1,61 +0,0 @@
1
- /**
2
- * Support for the endpoint-string form of `apiKey`.
3
- *
4
- * With `Ablo({ schema, apiKey: '/api/ablo-session' })`, you point the client at
5
- * your own session-mint route and the client owns the exchange: it POSTs to the
6
- * endpoint, parses the minted token, keeps it fresh, and classifies failures
7
- * onto the resolver's three outcomes. The string form covers the common case;
8
- * the function form of `apiKey` remains the escape hatch for custom headers,
9
- * bodies, or non-HTTP mints.
10
- *
11
- * The form is detected by prefix: a string starting with `/`, `http://`, or
12
- * `https://` is an endpoint, and anything else is a literal key. Ablo keys are
13
- * prefixed (`sk_`/`pk_`/`ek_`/`rk_`), so the two shapes cannot collide. An
14
- * `ABLO_API_KEY` environment value is never treated as an endpoint — it is
15
- * always a literal key (see `resolveApiKey`).
16
- *
17
- * Wire contract:
18
- * POST <endpoint> (same-origin, `credentials: 'include'` so cookies flow)
19
- * → 200 `{ token, expiresAt? }` a fresh short-lived `ek_`/`rk_`
20
- * → 200 `{ token: null }` or 401/403 the login itself is gone (sign out)
21
- * → anything else transient — retry, do not sign out
22
- *
23
- * The three-way mapping is the reason to build this in. Hand-written token
24
- * fetchers routinely get it wrong — mapping any non-OK response to `null` signs
25
- * the user out on a 500. Encoded here once, every consumer inherits the correct
26
- * split between a terminal sign-out and a transient retry.
27
- */
28
- /**
29
- * An async callable that resolves the current credential. It serves two uses:
30
- * credential rotation (for example against AWS STS, GCP IAM, or Vault) and the
31
- * short-lived per-user browser path (minting a fresh `ek_`/`rk_` from the
32
- * signed-in session). It is re-exported from `./auth` so existing import paths
33
- * keep working, and defined here so the resolver it types has no import cycle.
34
- *
35
- * The contract has three outcomes: resolve a token; resolve `null` when the
36
- * login itself is gone (terminal — the credential lifecycle treats this as
37
- * `session_expired` and signs out); or throw on a transient failure (back off
38
- * and retry, without signing out). A long-lived static `apiKey` string needs
39
- * none of this and is used as-is.
40
- */
41
- export type ApiKeySetter = () => Promise<string | null>;
42
- /**
43
- * Is this `apiKey` string a session-mint endpoint rather than a literal key?
44
- * Prefix rule: `/relative/path`, `http://…`, or `https://…`.
45
- */
46
- export declare function isCredentialEndpoint(value: string): boolean;
47
- /**
48
- * Builds the resolver behind an endpoint-string `apiKey`. It follows the
49
- * {@link ApiKeySetter} contract end to end:
50
- * - resolves the minted token string on success;
51
- * - resolves `null` when the login is gone (a 401 or 403, or an explicit
52
- * `{ token: null }`) — terminal, so the client signs out;
53
- * - throws on anything transient (a network failure, a 5xx or 429, or a
54
- * malformed response) — so the lifecycle backs off and retries without
55
- * signing out.
56
- *
57
- * A relative endpoint invoked on a server (where `fetch` has no origin) throws,
58
- * which is transient by contract; the credential lifecycle translates that exact
59
- * failure into an actionable "use an absolute URL server-side" warning.
60
- */
61
- export declare function createEndpointCredentialResolver(endpoint: string): ApiKeySetter;
@@ -1,86 +0,0 @@
1
- /**
2
- * Support for the endpoint-string form of `apiKey`.
3
- *
4
- * With `Ablo({ schema, apiKey: '/api/ablo-session' })`, you point the client at
5
- * your own session-mint route and the client owns the exchange: it POSTs to the
6
- * endpoint, parses the minted token, keeps it fresh, and classifies failures
7
- * onto the resolver's three outcomes. The string form covers the common case;
8
- * the function form of `apiKey` remains the escape hatch for custom headers,
9
- * bodies, or non-HTTP mints.
10
- *
11
- * The form is detected by prefix: a string starting with `/`, `http://`, or
12
- * `https://` is an endpoint, and anything else is a literal key. Ablo keys are
13
- * prefixed (`sk_`/`pk_`/`ek_`/`rk_`), so the two shapes cannot collide. An
14
- * `ABLO_API_KEY` environment value is never treated as an endpoint — it is
15
- * always a literal key (see `resolveApiKey`).
16
- *
17
- * Wire contract:
18
- * POST <endpoint> (same-origin, `credentials: 'include'` so cookies flow)
19
- * → 200 `{ token, expiresAt? }` a fresh short-lived `ek_`/`rk_`
20
- * → 200 `{ token: null }` or 401/403 the login itself is gone (sign out)
21
- * → anything else transient — retry, do not sign out
22
- *
23
- * The three-way mapping is the reason to build this in. Hand-written token
24
- * fetchers routinely get it wrong — mapping any non-OK response to `null` signs
25
- * the user out on a 500. Encoded here once, every consumer inherits the correct
26
- * split between a terminal sign-out and a transient retry.
27
- */
28
- /**
29
- * Is this `apiKey` string a session-mint endpoint rather than a literal key?
30
- * Prefix rule: `/relative/path`, `http://…`, or `https://…`.
31
- */
32
- export function isCredentialEndpoint(value) {
33
- return value.startsWith('/') || /^https?:\/\//i.test(value);
34
- }
35
- /**
36
- * Builds the resolver behind an endpoint-string `apiKey`. It follows the
37
- * {@link ApiKeySetter} contract end to end:
38
- * - resolves the minted token string on success;
39
- * - resolves `null` when the login is gone (a 401 or 403, or an explicit
40
- * `{ token: null }`) — terminal, so the client signs out;
41
- * - throws on anything transient (a network failure, a 5xx or 429, or a
42
- * malformed response) — so the lifecycle backs off and retries without
43
- * signing out.
44
- *
45
- * A relative endpoint invoked on a server (where `fetch` has no origin) throws,
46
- * which is transient by contract; the credential lifecycle translates that exact
47
- * failure into an actionable "use an absolute URL server-side" warning.
48
- */
49
- export function createEndpointCredentialResolver(endpoint) {
50
- return async () => {
51
- // `fetch()` rejections (offline, DNS, a relative URL on a server) propagate
52
- // as-is: a throw is the transient signal in the resolver contract.
53
- const res = await fetch(endpoint, {
54
- method: 'POST',
55
- credentials: 'include',
56
- });
57
- // The login itself is gone — terminal. Only these two statuses sign out.
58
- if (res.status === 401 || res.status === 403)
59
- return null;
60
- // 5xx / 429 / anything unexpected: the login may be perfectly valid —
61
- // transient, retry later.
62
- if (!res.ok) {
63
- throw new Error(`credential endpoint ${endpoint} answered ${res.status} — transient, will retry`);
64
- }
65
- let body;
66
- try {
67
- body = await res.json();
68
- }
69
- catch {
70
- throw new Error(`credential endpoint ${endpoint} returned non-JSON — expected { token }`);
71
- }
72
- // Distinguish "explicitly signed out" (`{ token: null }`) from "not a mint
73
- // endpoint at all" (no `token` key). A misconfiguration must fail loudly and
74
- // transiently, never as a silent sign-out.
75
- if (typeof body !== 'object' || body === null || !('token' in body)) {
76
- throw new Error(`credential endpoint ${endpoint} returned no \`token\` field — expected { token }`);
77
- }
78
- const token = body.token;
79
- if (token === null || token === undefined)
80
- return null;
81
- if (typeof token !== 'string') {
82
- throw new Error(`credential endpoint ${endpoint} returned a non-string \`token\``);
83
- }
84
- return token;
85
- };
86
- }