@abloatai/ablo 0.35.0 → 0.37.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (622) hide show
  1. package/AGENTS.md +2 -2
  2. package/CHANGELOG.md +71 -1929
  3. package/NOTICE +2 -2
  4. package/README.md +23 -532
  5. package/assets/banner.png +0 -0
  6. package/dist/auth.d.ts +2 -0
  7. package/dist/auth.d.ts.map +1 -0
  8. package/dist/auth.js +2 -0
  9. package/dist/auth.js.map +1 -0
  10. package/dist/client.d.ts +3 -0
  11. package/dist/client.d.ts.map +1 -0
  12. package/dist/client.js +3 -0
  13. package/dist/client.js.map +1 -0
  14. package/dist/coordination.d.ts +2 -0
  15. package/dist/coordination.d.ts.map +1 -0
  16. package/dist/coordination.js +2 -0
  17. package/dist/coordination.js.map +1 -0
  18. package/dist/index.d.ts +3 -112
  19. package/dist/index.d.ts.map +1 -0
  20. package/dist/index.js +3 -161
  21. package/dist/index.js.map +1 -0
  22. package/dist/react.d.ts +4 -0
  23. package/dist/react.d.ts.map +1 -0
  24. package/dist/react.js +3 -0
  25. package/dist/react.js.map +1 -0
  26. package/dist/schema.d.ts +2 -0
  27. package/dist/schema.d.ts.map +1 -0
  28. package/dist/schema.js +2 -0
  29. package/dist/schema.js.map +1 -0
  30. package/dist/server.d.ts +2 -0
  31. package/dist/server.d.ts.map +1 -0
  32. package/dist/server.js +2 -0
  33. package/dist/server.js.map +1 -0
  34. package/dist/source-conformance.d.ts +2 -0
  35. package/dist/source-conformance.d.ts.map +1 -0
  36. package/dist/source-conformance.js +2 -0
  37. package/dist/source-conformance.js.map +1 -0
  38. package/dist/source-drizzle.d.ts +2 -0
  39. package/dist/source-drizzle.d.ts.map +1 -0
  40. package/dist/source-drizzle.js +2 -0
  41. package/dist/source-drizzle.js.map +1 -0
  42. package/dist/source-kysely.d.ts +2 -0
  43. package/dist/source-kysely.d.ts.map +1 -0
  44. package/dist/source-kysely.js +2 -0
  45. package/dist/source-kysely.js.map +1 -0
  46. package/dist/source-next.d.ts +2 -0
  47. package/dist/source-next.d.ts.map +1 -0
  48. package/dist/source-next.js +2 -0
  49. package/dist/source-next.js.map +1 -0
  50. package/dist/source.d.ts +2 -0
  51. package/dist/source.d.ts.map +1 -0
  52. package/dist/source.js +2 -0
  53. package/dist/source.js.map +1 -0
  54. package/dist/wire.d.ts +2 -0
  55. package/dist/wire.d.ts.map +1 -0
  56. package/dist/wire.js +2 -0
  57. package/dist/wire.js.map +1 -0
  58. package/docs/agents.md +2 -2
  59. package/docs/api-keys.md +13 -12
  60. package/docs/api.md +15 -53
  61. package/docs/audit.md +4 -3
  62. package/docs/cli.md +11 -11
  63. package/docs/client-behavior.md +9 -9
  64. package/docs/concurrency-convention.md +28 -42
  65. package/docs/coordination.md +228 -86
  66. package/docs/data-sources.md +5 -5
  67. package/docs/debugging.md +34 -12
  68. package/docs/deployment.md +8 -8
  69. package/docs/examples/agent-human.md +4 -4
  70. package/docs/examples/ai-sdk-tool.md +1 -1
  71. package/docs/examples/existing-python-backend.md +15 -4
  72. package/docs/examples/nextjs.md +27 -6
  73. package/docs/examples/scoped-agent.md +3 -3
  74. package/docs/examples/server-agent.md +2 -2
  75. package/docs/groups.md +57 -3
  76. package/docs/guarantees.md +37 -10
  77. package/docs/how-it-works.md +32 -8
  78. package/docs/idempotency.md +6 -6
  79. package/docs/identity.md +24 -24
  80. package/docs/index.md +8 -8
  81. package/docs/integration-guide.md +38 -16
  82. package/docs/internal/README.md +18 -0
  83. package/docs/internal/agent-fleet-coordination-design.md +171 -0
  84. package/docs/internal/agent-orchestration.md +58 -0
  85. package/docs/internal/commit-identifiers.md +91 -0
  86. package/docs/internal/concurrency-open-decisions.md +37 -0
  87. package/docs/internal/data-source-reverse-channel.md +150 -0
  88. package/docs/internal/per-field-conflict-detection.md +165 -0
  89. package/docs/internal/postgres-replication.md +64 -0
  90. package/docs/internal/serializable-schema.md +119 -0
  91. package/docs/internal/structure.md +32 -0
  92. package/docs/mcp.md +9 -9
  93. package/docs/migration.md +37 -18
  94. package/docs/projects.md +1 -1
  95. package/docs/quickstart.md +2 -2
  96. package/docs/react.md +24 -13
  97. package/docs/schema-contract.md +3 -3
  98. package/docs/sessions.md +91 -37
  99. package/docs/webhooks.md +9 -9
  100. package/examples/README.md +2 -2
  101. package/examples/data-source/README.md +1 -1
  102. package/examples/data-source/ablo-driver.ts +1 -1
  103. package/examples/data-source/customer-server.ts +1 -1
  104. package/examples/data-source/run.ts +1 -1
  105. package/examples/data-source/schema.ts +1 -1
  106. package/examples/quickstart.ts +2 -2
  107. package/llms.txt +12 -12
  108. package/package.json +64 -174
  109. package/dist/BaseSyncedStore.d.ts +0 -823
  110. package/dist/BaseSyncedStore.js +0 -1955
  111. package/dist/Database.d.ts +0 -335
  112. package/dist/Database.js +0 -1500
  113. package/dist/InstanceCache.d.ts +0 -233
  114. package/dist/InstanceCache.js +0 -1164
  115. package/dist/LazyReferenceCollection.d.ts +0 -177
  116. package/dist/LazyReferenceCollection.js +0 -461
  117. package/dist/Model.d.ts +0 -444
  118. package/dist/Model.js +0 -909
  119. package/dist/ModelRegistry.d.ts +0 -221
  120. package/dist/ModelRegistry.js +0 -537
  121. package/dist/NetworkMonitor.d.ts +0 -26
  122. package/dist/NetworkMonitor.js +0 -77
  123. package/dist/RuntimeContext.d.ts +0 -52
  124. package/dist/RuntimeContext.js +0 -80
  125. package/dist/SyncClient.d.ts +0 -551
  126. package/dist/SyncClient.js +0 -2199
  127. package/dist/adapters/alwaysOnline.d.ts +0 -14
  128. package/dist/adapters/alwaysOnline.js +0 -17
  129. package/dist/adapters/inMemoryStorage.d.ts +0 -31
  130. package/dist/adapters/inMemoryStorage.js +0 -110
  131. package/dist/ai-sdk/coordinatedTool.d.ts +0 -120
  132. package/dist/ai-sdk/coordinatedTool.js +0 -134
  133. package/dist/ai-sdk/coordinationContext.d.ts +0 -46
  134. package/dist/ai-sdk/coordinationContext.js +0 -106
  135. package/dist/ai-sdk/index.d.ts +0 -121
  136. package/dist/ai-sdk/index.js +0 -121
  137. package/dist/ai-sdk/wrap.d.ts +0 -65
  138. package/dist/ai-sdk/wrap.js +0 -39
  139. package/dist/auth/index.d.ts +0 -1
  140. package/dist/auth/index.js +0 -8
  141. package/dist/batching/index.d.ts +0 -55
  142. package/dist/batching/index.js +0 -147
  143. package/dist/cli.cjs +0 -288600
  144. package/dist/client/Ablo.d.ts +0 -231
  145. package/dist/client/Ablo.js +0 -149
  146. package/dist/client/abloClient.d.ts +0 -309
  147. package/dist/client/abloClient.js +0 -13
  148. package/dist/client/clientPrelude.d.ts +0 -52
  149. package/dist/client/clientPrelude.js +0 -60
  150. package/dist/client/consoleLogger.d.ts +0 -35
  151. package/dist/client/consoleLogger.js +0 -44
  152. package/dist/client/coreClient.d.ts +0 -60
  153. package/dist/client/coreClient.js +0 -118
  154. package/dist/client/createInternalComponents.d.ts +0 -46
  155. package/dist/client/createInternalComponents.js +0 -92
  156. package/dist/client/createModelProxy.d.ts +0 -228
  157. package/dist/client/createModelProxy.js +0 -818
  158. package/dist/client/humans.d.ts +0 -48
  159. package/dist/client/humans.js +0 -52
  160. package/dist/client/modelRegistration.d.ts +0 -10
  161. package/dist/client/modelRegistration.js +0 -312
  162. package/dist/client/options.d.ts +0 -461
  163. package/dist/client/options.js +0 -7
  164. package/dist/client/reactiveEngine.d.ts +0 -48
  165. package/dist/client/reactiveEngine.js +0 -910
  166. package/dist/client/resourceTypes.d.ts +0 -12
  167. package/dist/client/resourceTypes.js +0 -10
  168. package/dist/client/schemaConfig.d.ts +0 -44
  169. package/dist/client/schemaConfig.js +0 -185
  170. package/dist/client/validateAbloOptions.d.ts +0 -42
  171. package/dist/client/validateAbloOptions.js +0 -43
  172. package/dist/client/wsMutationExecutor.d.ts +0 -27
  173. package/dist/client/wsMutationExecutor.js +0 -72
  174. package/dist/context.d.ts +0 -29
  175. package/dist/context.js +0 -58
  176. package/dist/coordination/ClaimLog.d.ts +0 -26
  177. package/dist/coordination/ClaimLog.js +0 -32
  178. package/dist/coordination/index.d.ts +0 -1
  179. package/dist/coordination/index.js +0 -8
  180. package/dist/core/DatabaseManager.d.ts +0 -105
  181. package/dist/core/DatabaseManager.js +0 -387
  182. package/dist/core/QueryProcessor.d.ts +0 -75
  183. package/dist/core/QueryProcessor.js +0 -255
  184. package/dist/core/QueryView.d.ts +0 -79
  185. package/dist/core/QueryView.js +0 -218
  186. package/dist/core/StoreManager.d.ts +0 -112
  187. package/dist/core/StoreManager.js +0 -302
  188. package/dist/core/ViewRegistry.d.ts +0 -20
  189. package/dist/core/ViewRegistry.js +0 -55
  190. package/dist/core/index.d.ts +0 -33
  191. package/dist/core/index.js +0 -48
  192. package/dist/core/openIDBWithTimeout.d.ts +0 -65
  193. package/dist/core/openIDBWithTimeout.js +0 -153
  194. package/dist/core/queryUtils.d.ts +0 -45
  195. package/dist/core/queryUtils.js +0 -69
  196. package/dist/core/storeContract.d.ts +0 -145
  197. package/dist/core/storeContract.js +0 -12
  198. package/dist/docs/catalog.d.ts +0 -72
  199. package/dist/docs/catalog.js +0 -227
  200. package/dist/docs/index.d.ts +0 -10
  201. package/dist/docs/index.js +0 -10
  202. package/dist/environment.d.ts +0 -1
  203. package/dist/environment.js +0 -8
  204. package/dist/interfaces/index.d.ts +0 -311
  205. package/dist/interfaces/index.js +0 -9
  206. package/dist/keys/index.d.ts +0 -1
  207. package/dist/keys/index.js +0 -8
  208. package/dist/mutators/RecordingMutation.d.ts +0 -36
  209. package/dist/mutators/RecordingMutation.js +0 -182
  210. package/dist/mutators/Transaction.d.ts +0 -40
  211. package/dist/mutators/Transaction.js +0 -58
  212. package/dist/mutators/UndoManager.d.ts +0 -258
  213. package/dist/mutators/UndoManager.js +0 -658
  214. package/dist/mutators/defineMutators.d.ts +0 -60
  215. package/dist/mutators/defineMutators.js +0 -18
  216. package/dist/mutators/inverseOp.d.ts +0 -126
  217. package/dist/mutators/inverseOp.js +0 -71
  218. package/dist/mutators/mutateActions.d.ts +0 -45
  219. package/dist/mutators/mutateActions.js +0 -105
  220. package/dist/mutators/readerActions.d.ts +0 -33
  221. package/dist/mutators/readerActions.js +0 -57
  222. package/dist/mutators/undoApply.d.ts +0 -51
  223. package/dist/mutators/undoApply.js +0 -117
  224. package/dist/policy/index.d.ts +0 -21
  225. package/dist/policy/index.js +0 -20
  226. package/dist/query/client.d.ts +0 -61
  227. package/dist/query/client.js +0 -137
  228. package/dist/query/types.d.ts +0 -85
  229. package/dist/query/types.js +0 -16
  230. package/dist/react/AbloProvider.d.ts +0 -230
  231. package/dist/react/AbloProvider.js +0 -455
  232. package/dist/react/ClientSideSuspense.d.ts +0 -36
  233. package/dist/react/ClientSideSuspense.js +0 -17
  234. package/dist/react/DefaultFallback.d.ts +0 -24
  235. package/dist/react/DefaultFallback.js +0 -43
  236. package/dist/react/context.d.ts +0 -55
  237. package/dist/react/context.js +0 -29
  238. package/dist/react/index.d.ts +0 -61
  239. package/dist/react/index.js +0 -66
  240. package/dist/react/internalContext.d.ts +0 -33
  241. package/dist/react/internalContext.js +0 -3
  242. package/dist/react/useAblo.d.ts +0 -75
  243. package/dist/react/useAblo.js +0 -102
  244. package/dist/react/useCurrentUserId.d.ts +0 -22
  245. package/dist/react/useCurrentUserId.js +0 -34
  246. package/dist/react/useErrorListener.d.ts +0 -20
  247. package/dist/react/useErrorListener.js +0 -38
  248. package/dist/react/useMutationFailureListener.d.ts +0 -26
  249. package/dist/react/useMutationFailureListener.js +0 -38
  250. package/dist/react/useMutators.d.ts +0 -56
  251. package/dist/react/useMutators.js +0 -84
  252. package/dist/react/useReactive.d.ts +0 -35
  253. package/dist/react/useReactive.js +0 -123
  254. package/dist/react/useSyncStatus.d.ts +0 -59
  255. package/dist/react/useSyncStatus.js +0 -76
  256. package/dist/react/useUndoScope.d.ts +0 -34
  257. package/dist/react/useUndoScope.js +0 -81
  258. package/dist/schema/coordination.d.ts +0 -112
  259. package/dist/schema/coordination.js +0 -129
  260. package/dist/schema/ddl.d.ts +0 -97
  261. package/dist/schema/ddl.js +0 -491
  262. package/dist/schema/ddlLock.d.ts +0 -35
  263. package/dist/schema/ddlLock.js +0 -46
  264. package/dist/schema/diff.d.ts +0 -225
  265. package/dist/schema/diff.js +0 -289
  266. package/dist/schema/generate.d.ts +0 -19
  267. package/dist/schema/generate.js +0 -86
  268. package/dist/schema/index.d.ts +0 -41
  269. package/dist/schema/index.js +0 -76
  270. package/dist/schema/queries.d.ts +0 -201
  271. package/dist/schema/queries.js +0 -144
  272. package/dist/schema/select.d.ts +0 -40
  273. package/dist/schema/select.js +0 -87
  274. package/dist/schema/serialize.d.ts +0 -115
  275. package/dist/schema/serialize.js +0 -262
  276. package/dist/schema/sugar.d.ts +0 -109
  277. package/dist/schema/sugar.js +0 -83
  278. package/dist/schema/syncDeltaRow.d.ts +0 -6
  279. package/dist/schema/syncDeltaRow.js +0 -6
  280. package/dist/server/adapter.d.ts +0 -173
  281. package/dist/server/adapter.js +0 -18
  282. package/dist/server/commit.d.ts +0 -107
  283. package/dist/server/commit.js +0 -1
  284. package/dist/server/index.d.ts +0 -14
  285. package/dist/server/index.js +0 -2
  286. package/dist/server/readConfig.d.ts +0 -80
  287. package/dist/server/readConfig.js +0 -8
  288. package/dist/server/storageMode.d.ts +0 -23
  289. package/dist/server/storageMode.js +0 -17
  290. package/dist/source/adapter.d.ts +0 -81
  291. package/dist/source/adapter.js +0 -22
  292. package/dist/source/adapters/drizzle.d.ts +0 -48
  293. package/dist/source/adapters/drizzle.js +0 -219
  294. package/dist/source/adapters/kysely.d.ts +0 -42
  295. package/dist/source/adapters/kysely.js +0 -205
  296. package/dist/source/adapters/kyselyMutationCore.d.ts +0 -76
  297. package/dist/source/adapters/kyselyMutationCore.js +0 -125
  298. package/dist/source/adapters/memory.d.ts +0 -13
  299. package/dist/source/adapters/memory.js +0 -130
  300. package/dist/source/adapters/prisma.d.ts +0 -63
  301. package/dist/source/adapters/prisma.js +0 -202
  302. package/dist/source/conformance.d.ts +0 -37
  303. package/dist/source/conformance.js +0 -215
  304. package/dist/source/connector.d.ts +0 -95
  305. package/dist/source/connector.js +0 -266
  306. package/dist/source/connectorProtocol.d.ts +0 -154
  307. package/dist/source/connectorProtocol.js +0 -163
  308. package/dist/source/contract.d.ts +0 -195
  309. package/dist/source/contract.js +0 -164
  310. package/dist/source/factory.d.ts +0 -92
  311. package/dist/source/factory.js +0 -286
  312. package/dist/source/footprint.d.ts +0 -111
  313. package/dist/source/footprint.js +0 -0
  314. package/dist/source/idempotency.d.ts +0 -61
  315. package/dist/source/idempotency.js +0 -144
  316. package/dist/source/index.d.ts +0 -23
  317. package/dist/source/index.js +0 -30
  318. package/dist/source/migrations.d.ts +0 -21
  319. package/dist/source/migrations.js +0 -103
  320. package/dist/source/next.d.ts +0 -32
  321. package/dist/source/next.js +0 -25
  322. package/dist/source/pushQueue.d.ts +0 -134
  323. package/dist/source/pushQueue.js +0 -256
  324. package/dist/source/signing.d.ts +0 -92
  325. package/dist/source/signing.js +0 -162
  326. package/dist/source/types.d.ts +0 -401
  327. package/dist/source/types.js +0 -59
  328. package/dist/stores/ObjectStore.d.ts +0 -115
  329. package/dist/stores/ObjectStore.js +0 -393
  330. package/dist/stores/ObjectStoreContract.d.ts +0 -38
  331. package/dist/stores/ObjectStoreContract.js +0 -1
  332. package/dist/stores/SyncActionStore.d.ts +0 -97
  333. package/dist/stores/SyncActionStore.js +0 -504
  334. package/dist/stores/syncAction.d.ts +0 -26
  335. package/dist/stores/syncAction.js +0 -16
  336. package/dist/surface.d.ts +0 -36
  337. package/dist/surface.js +0 -75
  338. package/dist/sync/BootstrapFetcher.d.ts +0 -280
  339. package/dist/sync/BootstrapFetcher.js +0 -962
  340. package/dist/sync/ConnectionManager.d.ts +0 -8
  341. package/dist/sync/ConnectionManager.js +0 -8
  342. package/dist/sync/OnDemandLoader.d.ts +0 -228
  343. package/dist/sync/OnDemandLoader.js +0 -742
  344. package/dist/sync/SubscriptionManager.d.ts +0 -159
  345. package/dist/sync/SubscriptionManager.js +0 -243
  346. package/dist/sync/SyncWebSocket.d.ts +0 -173
  347. package/dist/sync/SyncWebSocket.js +0 -438
  348. package/dist/sync/awaitClaimGrant.d.ts +0 -6
  349. package/dist/sync/awaitClaimGrant.js +0 -6
  350. package/dist/sync/bootstrapApply.d.ts +0 -70
  351. package/dist/sync/bootstrapApply.js +0 -73
  352. package/dist/sync/commitFrames.d.ts +0 -8
  353. package/dist/sync/commitFrames.js +0 -8
  354. package/dist/sync/contextPorts.d.ts +0 -18
  355. package/dist/sync/contextPorts.js +0 -31
  356. package/dist/sync/createClaimStream.d.ts +0 -7
  357. package/dist/sync/createClaimStream.js +0 -7
  358. package/dist/sync/createPresenceStream.d.ts +0 -69
  359. package/dist/sync/createPresenceStream.js +0 -200
  360. package/dist/sync/createSnapshot.d.ts +0 -29
  361. package/dist/sync/createSnapshot.js +0 -118
  362. package/dist/sync/credentialLifecycle.d.ts +0 -7
  363. package/dist/sync/credentialLifecycle.js +0 -7
  364. package/dist/sync/deltaPipeline.d.ts +0 -113
  365. package/dist/sync/deltaPipeline.js +0 -261
  366. package/dist/sync/groupChange.d.ts +0 -113
  367. package/dist/sync/groupChange.js +0 -242
  368. package/dist/sync/participants.d.ts +0 -115
  369. package/dist/sync/participants.js +0 -344
  370. package/dist/sync/persistedPrefix.d.ts +0 -12
  371. package/dist/sync/persistedPrefix.js +0 -22
  372. package/dist/sync/schemaDrift.d.ts +0 -55
  373. package/dist/sync/schemaDrift.js +0 -53
  374. package/dist/sync/schemas.d.ts +0 -70
  375. package/dist/sync/schemas.js +0 -94
  376. package/dist/sync/syncCursor.d.ts +0 -40
  377. package/dist/sync/syncCursor.js +0 -55
  378. package/dist/sync/syncPlan.d.ts +0 -54
  379. package/dist/sync/syncPlan.js +0 -50
  380. package/dist/sync/wsFrameHandlers.d.ts +0 -8
  381. package/dist/sync/wsFrameHandlers.js +0 -8
  382. package/dist/testing/fixtures/bootstrap.d.ts +0 -49
  383. package/dist/testing/fixtures/bootstrap.js +0 -59
  384. package/dist/testing/fixtures/deltas.d.ts +0 -83
  385. package/dist/testing/fixtures/deltas.js +0 -136
  386. package/dist/testing/fixtures/httpResponses.d.ts +0 -70
  387. package/dist/testing/fixtures/httpResponses.js +0 -90
  388. package/dist/testing/fixtures/models.d.ts +0 -83
  389. package/dist/testing/fixtures/models.js +0 -272
  390. package/dist/testing/helpers/reactWrapper.d.ts +0 -69
  391. package/dist/testing/helpers/reactWrapper.js +0 -67
  392. package/dist/testing/helpers/syncEngineHarness.d.ts +0 -54
  393. package/dist/testing/helpers/syncEngineHarness.js +0 -73
  394. package/dist/testing/helpers/wait.d.ts +0 -30
  395. package/dist/testing/helpers/wait.js +0 -49
  396. package/dist/testing/index.d.ts +0 -23
  397. package/dist/testing/index.js +0 -33
  398. package/dist/testing/mocks/FakeDatabase.d.ts +0 -18
  399. package/dist/testing/mocks/FakeDatabase.js +0 -10
  400. package/dist/testing/mocks/MockMutationExecutor.d.ts +0 -87
  401. package/dist/testing/mocks/MockMutationExecutor.js +0 -186
  402. package/dist/testing/mocks/MockNetworkMonitor.d.ts +0 -20
  403. package/dist/testing/mocks/MockNetworkMonitor.js +0 -46
  404. package/dist/testing/mocks/MockSyncContext.d.ts +0 -51
  405. package/dist/testing/mocks/MockSyncContext.js +0 -72
  406. package/dist/testing/mocks/MockSyncStore.d.ts +0 -88
  407. package/dist/testing/mocks/MockSyncStore.js +0 -171
  408. package/dist/testing/mocks/MockWebSocket.d.ts +0 -71
  409. package/dist/testing/mocks/MockWebSocket.js +0 -118
  410. package/dist/transaction/ablo.d.ts +0 -88
  411. package/dist/transaction/ablo.js +0 -33
  412. package/dist/transaction/auth/apiKey.d.ts +0 -152
  413. package/dist/transaction/auth/apiKey.js +0 -419
  414. package/dist/transaction/auth/bootstrapScope.d.ts +0 -15
  415. package/dist/transaction/auth/bootstrapScope.js +0 -1
  416. package/dist/transaction/auth/capability.d.ts +0 -177
  417. package/dist/transaction/auth/capability.js +0 -199
  418. package/dist/transaction/auth/credentialEndpoint.d.ts +0 -61
  419. package/dist/transaction/auth/credentialEndpoint.js +0 -86
  420. package/dist/transaction/auth/credentialPolicy.d.ts +0 -148
  421. package/dist/transaction/auth/credentialPolicy.js +0 -125
  422. package/dist/transaction/auth/credentialSource.d.ts +0 -30
  423. package/dist/transaction/auth/credentialSource.js +0 -55
  424. package/dist/transaction/auth/hostedEndpoints.d.ts +0 -21
  425. package/dist/transaction/auth/hostedEndpoints.js +0 -21
  426. package/dist/transaction/auth/identity.d.ts +0 -55
  427. package/dist/transaction/auth/identity.js +0 -210
  428. package/dist/transaction/auth/index.d.ts +0 -162
  429. package/dist/transaction/auth/index.js +0 -304
  430. package/dist/transaction/auth/schemas.d.ts +0 -59
  431. package/dist/transaction/auth/schemas.js +0 -85
  432. package/dist/transaction/auth/sessionMint.d.ts +0 -28
  433. package/dist/transaction/auth/sessionMint.js +0 -85
  434. package/dist/transaction/coordination/awaitClaimGrant.d.ts +0 -49
  435. package/dist/transaction/coordination/awaitClaimGrant.js +0 -112
  436. package/dist/transaction/coordination/claimHeartbeatLoop.d.ts +0 -50
  437. package/dist/transaction/coordination/claimHeartbeatLoop.js +0 -88
  438. package/dist/transaction/coordination/claimMeta.d.ts +0 -49
  439. package/dist/transaction/coordination/claimMeta.js +0 -52
  440. package/dist/transaction/coordination/createClaimStream.d.ts +0 -64
  441. package/dist/transaction/coordination/createClaimStream.js +0 -475
  442. package/dist/transaction/coordination/events.d.ts +0 -74
  443. package/dist/transaction/coordination/events.js +0 -7
  444. package/dist/transaction/coordination/index.d.ts +0 -19
  445. package/dist/transaction/coordination/index.js +0 -44
  446. package/dist/transaction/coordination/locator.d.ts +0 -83
  447. package/dist/transaction/coordination/locator.js +0 -82
  448. package/dist/transaction/coordination/schema.d.ts +0 -1473
  449. package/dist/transaction/coordination/schema.js +0 -1013
  450. package/dist/transaction/coordination/targetConflict.d.ts +0 -2
  451. package/dist/transaction/coordination/targetConflict.js +0 -103
  452. package/dist/transaction/coordination/trace.d.ts +0 -78
  453. package/dist/transaction/coordination/trace.js +0 -138
  454. package/dist/transaction/durableWrites.d.ts +0 -62
  455. package/dist/transaction/durableWrites.js +0 -71
  456. package/dist/transaction/environment.d.ts +0 -105
  457. package/dist/transaction/environment.js +0 -108
  458. package/dist/transaction/errorCodes.d.ts +0 -403
  459. package/dist/transaction/errorCodes.js +0 -480
  460. package/dist/transaction/errors.d.ts +0 -428
  461. package/dist/transaction/errors.js +0 -686
  462. package/dist/transaction/index.d.ts +0 -20
  463. package/dist/transaction/index.js +0 -20
  464. package/dist/transaction/keys/index.d.ts +0 -87
  465. package/dist/transaction/keys/index.js +0 -207
  466. package/dist/transaction/log/syncDeltaRow.d.ts +0 -158
  467. package/dist/transaction/log/syncDeltaRow.js +0 -95
  468. package/dist/transaction/logPosition.d.ts +0 -97
  469. package/dist/transaction/logPosition.js +0 -125
  470. package/dist/transaction/logger.d.ts +0 -16
  471. package/dist/transaction/logger.js +0 -7
  472. package/dist/transaction/observability.d.ts +0 -53
  473. package/dist/transaction/observability.js +0 -19
  474. package/dist/transaction/persistence.d.ts +0 -12
  475. package/dist/transaction/persistence.js +0 -11
  476. package/dist/transaction/plugin.d.ts +0 -192
  477. package/dist/transaction/plugin.js +0 -87
  478. package/dist/transaction/policy/types.d.ts +0 -217
  479. package/dist/transaction/policy/types.js +0 -126
  480. package/dist/transaction/resources/functionalUpdate.d.ts +0 -79
  481. package/dist/transaction/resources/functionalUpdate.js +0 -87
  482. package/dist/transaction/resources/httpResources.d.ts +0 -266
  483. package/dist/transaction/resources/httpResources.js +0 -7
  484. package/dist/transaction/resources/modelOperations.d.ts +0 -319
  485. package/dist/transaction/resources/modelOperations.js +0 -12
  486. package/dist/transaction/resources/mutationOptions.d.ts +0 -66
  487. package/dist/transaction/resources/mutationOptions.js +0 -9
  488. package/dist/transaction/resources/where.d.ts +0 -85
  489. package/dist/transaction/resources/where.js +0 -70
  490. package/dist/transaction/resources/writeOptionsSchema.d.ts +0 -47
  491. package/dist/transaction/resources/writeOptionsSchema.js +0 -73
  492. package/dist/transaction/schema/field.d.ts +0 -126
  493. package/dist/transaction/schema/field.js +0 -265
  494. package/dist/transaction/schema/loadStrategy.d.ts +0 -45
  495. package/dist/transaction/schema/loadStrategy.js +0 -46
  496. package/dist/transaction/schema/model.d.ts +0 -379
  497. package/dist/transaction/schema/model.js +0 -123
  498. package/dist/transaction/schema/openapi.d.ts +0 -57
  499. package/dist/transaction/schema/openapi.js +0 -340
  500. package/dist/transaction/schema/relation.d.ts +0 -199
  501. package/dist/transaction/schema/relation.js +0 -104
  502. package/dist/transaction/schema/residency.d.ts +0 -29
  503. package/dist/transaction/schema/residency.js +0 -25
  504. package/dist/transaction/schema/roles.d.ts +0 -249
  505. package/dist/transaction/schema/roles.js +0 -230
  506. package/dist/transaction/schema/schema.d.ts +0 -324
  507. package/dist/transaction/schema/schema.js +0 -305
  508. package/dist/transaction/schema/tenancy.d.ts +0 -139
  509. package/dist/transaction/schema/tenancy.js +0 -190
  510. package/dist/transaction/transactionLayer.d.ts +0 -82
  511. package/dist/transaction/transactionLayer.js +0 -24
  512. package/dist/transaction/transactions/settlement/commitEnvelope.d.ts +0 -143
  513. package/dist/transaction/transactions/settlement/commitEnvelope.js +0 -161
  514. package/dist/transaction/transactions/settlement/httpCommitEnvelope.d.ts +0 -53
  515. package/dist/transaction/transactions/settlement/httpCommitEnvelope.js +0 -207
  516. package/dist/transaction/transactions/settlement/idempotencyKey.d.ts +0 -10
  517. package/dist/transaction/transactions/settlement/idempotencyKey.js +0 -9
  518. package/dist/transaction/transactions/settlement/pendingWrite.d.ts +0 -112
  519. package/dist/transaction/transactions/settlement/pendingWrite.js +0 -20
  520. package/dist/transaction/transport/commitFrames.d.ts +0 -90
  521. package/dist/transaction/transport/commitFrames.js +0 -134
  522. package/dist/transaction/transport/connectionManager.d.ts +0 -215
  523. package/dist/transaction/transport/connectionManager.js +0 -673
  524. package/dist/transaction/transport/credentialLifecycle.d.ts +0 -177
  525. package/dist/transaction/transport/credentialLifecycle.js +0 -324
  526. package/dist/transaction/transport/heartbeat.d.ts +0 -65
  527. package/dist/transaction/transport/heartbeat.js +0 -93
  528. package/dist/transaction/transport/httpClient.d.ts +0 -123
  529. package/dist/transaction/transport/httpClient.js +0 -145
  530. package/dist/transaction/transport/httpOptions.d.ts +0 -33
  531. package/dist/transaction/transport/httpOptions.js +0 -12
  532. package/dist/transaction/transport/httpTransport.d.ts +0 -8
  533. package/dist/transaction/transport/httpTransport.js +0 -1276
  534. package/dist/transaction/transport/networkProbe.d.ts +0 -84
  535. package/dist/transaction/transport/networkProbe.js +0 -207
  536. package/dist/transaction/transport/wsFrameHandlers.d.ts +0 -128
  537. package/dist/transaction/transport/wsFrameHandlers.js +0 -429
  538. package/dist/transaction/transport/wsTransport.d.ts +0 -576
  539. package/dist/transaction/transport/wsTransport.js +0 -1017
  540. package/dist/transaction/types/assertExact.d.ts +0 -17
  541. package/dist/transaction/types/assertExact.js +0 -1
  542. package/dist/transaction/types/global.d.ts +0 -107
  543. package/dist/transaction/types/global.js +0 -40
  544. package/dist/transaction/types/index.d.ts +0 -205
  545. package/dist/transaction/types/index.js +0 -56
  546. package/dist/transaction/types/modelData.d.ts +0 -10
  547. package/dist/transaction/types/modelData.js +0 -9
  548. package/dist/transaction/types/participant.d.ts +0 -20
  549. package/dist/transaction/types/participant.js +0 -10
  550. package/dist/transaction/types/streams.d.ts +0 -540
  551. package/dist/transaction/types/streams.js +0 -11
  552. package/dist/transaction/utils/asyncIterator.d.ts +0 -34
  553. package/dist/transaction/utils/asyncIterator.js +0 -135
  554. package/dist/transaction/utils/duration.d.ts +0 -25
  555. package/dist/transaction/utils/duration.js +0 -45
  556. package/dist/transaction/utils/json.d.ts +0 -57
  557. package/dist/transaction/utils/json.js +0 -276
  558. package/dist/transaction/wire/accountResponses.d.ts +0 -351
  559. package/dist/transaction/wire/accountResponses.js +0 -255
  560. package/dist/transaction/wire/auth.d.ts +0 -49
  561. package/dist/transaction/wire/auth.js +0 -57
  562. package/dist/transaction/wire/bootstrapReason.d.ts +0 -9
  563. package/dist/transaction/wire/bootstrapReason.js +0 -8
  564. package/dist/transaction/wire/claimEvent.d.ts +0 -76
  565. package/dist/transaction/wire/claimEvent.js +0 -73
  566. package/dist/transaction/wire/claims.d.ts +0 -463
  567. package/dist/transaction/wire/claims.js +0 -229
  568. package/dist/transaction/wire/commit.d.ts +0 -603
  569. package/dist/transaction/wire/commit.js +0 -321
  570. package/dist/transaction/wire/delta.d.ts +0 -250
  571. package/dist/transaction/wire/delta.js +0 -147
  572. package/dist/transaction/wire/errorEnvelope.d.ts +0 -72
  573. package/dist/transaction/wire/errorEnvelope.js +0 -123
  574. package/dist/transaction/wire/feedCursor.d.ts +0 -60
  575. package/dist/transaction/wire/feedCursor.js +0 -82
  576. package/dist/transaction/wire/feedEvent.d.ts +0 -177
  577. package/dist/transaction/wire/feedEvent.js +0 -39
  578. package/dist/transaction/wire/frames.d.ts +0 -194
  579. package/dist/transaction/wire/frames.js +0 -50
  580. package/dist/transaction/wire/inboundFrames.d.ts +0 -552
  581. package/dist/transaction/wire/inboundFrames.js +0 -116
  582. package/dist/transaction/wire/index.d.ts +0 -50
  583. package/dist/transaction/wire/index.js +0 -74
  584. package/dist/transaction/wire/listEnvelope.d.ts +0 -37
  585. package/dist/transaction/wire/listEnvelope.js +0 -42
  586. package/dist/transaction/wire/modelResponses.d.ts +0 -85
  587. package/dist/transaction/wire/modelResponses.js +0 -43
  588. package/dist/transaction/wire/protocol.d.ts +0 -38
  589. package/dist/transaction/wire/protocol.js +0 -38
  590. package/dist/transaction/wire/protocolVersion.d.ts +0 -73
  591. package/dist/transaction/wire/protocolVersion.js +0 -83
  592. package/dist/transactions/mutations/MutationQueue.d.ts +0 -655
  593. package/dist/transactions/mutations/MutationQueue.js +0 -2797
  594. package/dist/transactions/mutations/MutationStore.d.ts +0 -20
  595. package/dist/transactions/mutations/MutationStore.js +0 -53
  596. package/dist/transactions/mutations/UnconfirmedWrites.d.ts +0 -82
  597. package/dist/transactions/mutations/UnconfirmedWrites.js +0 -104
  598. package/dist/transactions/mutations/coalesceRules.d.ts +0 -58
  599. package/dist/transactions/mutations/coalesceRules.js +0 -140
  600. package/dist/transactions/mutations/commitLatency.d.ts +0 -52
  601. package/dist/transactions/mutations/commitLatency.js +0 -130
  602. package/dist/transactions/mutations/commitOutboxStore.d.ts +0 -28
  603. package/dist/transactions/mutations/commitOutboxStore.js +0 -26
  604. package/dist/transactions/mutations/commitPayload.d.ts +0 -164
  605. package/dist/transactions/mutations/commitPayload.js +0 -152
  606. package/dist/transactions/mutations/deltaConfirmation.d.ts +0 -59
  607. package/dist/transactions/mutations/deltaConfirmation.js +0 -233
  608. package/dist/transactions/mutations/durableWriteStore.d.ts +0 -14
  609. package/dist/transactions/mutations/durableWriteStore.js +0 -12
  610. package/dist/transactions/mutations/optimisticApply.d.ts +0 -49
  611. package/dist/transactions/mutations/optimisticApply.js +0 -65
  612. package/dist/transactions/mutations/replayValidation.d.ts +0 -186
  613. package/dist/transactions/mutations/replayValidation.js +0 -163
  614. package/dist/utils/mobxSetup.d.ts +0 -53
  615. package/dist/utils/mobxSetup.js +0 -330
  616. package/dist/webhooks/events.d.ts +0 -43
  617. package/dist/webhooks/events.js +0 -42
  618. package/dist/webhooks/index.d.ts +0 -8
  619. package/dist/webhooks/index.js +0 -8
  620. package/dist/wire/index.d.ts +0 -1
  621. package/dist/wire/index.js +0 -8
  622. package/docs/interaction-model.md +0 -99
@@ -1,177 +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
- * `POST /v1/capabilities` — mint a capability for a participant.
153
- *
154
- * Where an ephemeral key is a session for a person, a capability is a scoped,
155
- * revocable grant for an agent or a system. Narrow by default: an agent or
156
- * system capability must name its `operations` unless the caller explicitly
157
- * asks for `wideScope`, which is itself privileged.
158
- *
159
- * This is the parsed body — the mint route validates against it rather than
160
- * reading fields one at a time, so the shape and the validation rules cannot
161
- * drift from each other or from the published contract.
162
- */
163
- export declare const capabilityRequestSchema: z.ZodObject<{
164
- participantKind: z.ZodEnum<{
165
- user: "user";
166
- agent: "agent";
167
- system: "system";
168
- }>;
169
- participantId: z.ZodOptional<z.ZodString>;
170
- syncGroups: z.ZodOptional<z.ZodReadonly<z.ZodArray<z.ZodUnion<readonly [z.ZodLiteral<"default">, z.core.$ZodBranded<z.ZodTemplateLiteral<`${string}:${string}`>, "SyncGroup", "out">]>>>>;
171
- operations: z.ZodOptional<z.ZodReadonly<z.ZodArray<z.ZodTemplateLiteral<`${string}.update` | `${string}.create` | `${string}.delete` | `${string}.read`>>>>;
172
- ttlSeconds: z.ZodNumber;
173
- label: z.ZodOptional<z.ZodString>;
174
- wideScope: z.ZodOptional<z.ZodBoolean>;
175
- userMeta: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
176
- }, z.core.$strip>;
177
- export type CapabilityRequest = z.infer<typeof capabilityRequestSchema>;
@@ -1,199 +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
- * `POST /v1/capabilities` — mint a capability for a participant.
162
- *
163
- * Where an ephemeral key is a session for a person, a capability is a scoped,
164
- * revocable grant for an agent or a system. Narrow by default: an agent or
165
- * system capability must name its `operations` unless the caller explicitly
166
- * asks for `wideScope`, which is itself privileged.
167
- *
168
- * This is the parsed body — the mint route validates against it rather than
169
- * reading fields one at a time, so the shape and the validation rules cannot
170
- * drift from each other or from the published contract.
171
- */
172
- export const capabilityRequestSchema = z.object({
173
- participantKind: participantKindSchema,
174
- participantId: z.string().min(1).optional(),
175
- /**
176
- * The ROW axis. Validated as the engine's branded sync-group form
177
- * (`default` or `<namespace>:<id>`): a malformed group stored on the key row
178
- * would subscribe the connection to NOTHING and fail silently at fan-out
179
- * time, so it is rejected loudly at the boundary.
180
- */
181
- syncGroups: z.array(syncGroupInputSchema).readonly().optional(),
182
- /** The VERB axis, as `model.verb` — e.g. `tasks.update`. */
183
- operations: z.array(grantedOperationSchema).readonly().optional(),
184
- ttlSeconds: z.number().int().positive(),
185
- label: z.string().min(1).optional(),
186
- /**
187
- * Opt out of narrow-by-default scoping. Without it, agent and system
188
- * capabilities require non-empty `operations`; with it, the caller must
189
- * additionally hold an admin/owner role or present a secret key.
190
- */
191
- wideScope: z.boolean().optional(),
192
- /**
193
- * Caller-attested identity for the end user this capability acts for — the
194
- * on-behalf-of pattern. Ablo does not validate it and has no view into the
195
- * caller's user directory; the API key is what is trusted, and this blob is
196
- * echoed back to the client.
197
- */
198
- userMeta: z.record(z.string(), z.unknown()).optional(),
199
- });
@@ -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
- }
@@ -1,148 +0,0 @@
1
- /**
2
- * Decides what a credential is and how to use it when a client connects. A
3
- * caller configures an Ablo client with an API key, and this module answers two
4
- * questions about that value: which of the four key kinds it is, and which
5
- * connect-time route it takes.
6
- *
7
- * The routing decision is the only thing that lives here. This module does not
8
- * perform the network calls that mint or exchange credentials;
9
- * {@link resolveCredential} delegates those to primitives the caller supplies,
10
- * so the decision of what to do stays separate from the work of doing it.
11
- *
12
- * {@link classifyCredentialKind} is a plain string check with no Node
13
- * dependencies, so it is safe to run in a browser bundle. It recognizes the key
14
- * prefixes `sk_` (secret), `rk_` (restricted), `ek_` (ephemeral), and `pk_`
15
- * (publishable), but does not validate a key's checksum or environment segment.
16
- */
17
- import type { exchangeApiKey, mintUserSessionKey, resolveIdentity } from './index.js';
18
- /**
19
- * The shape of the function that resolves a configured `apiKey` — which may be a
20
- * string or an async setter — down to a concrete string, or `null` when no key
21
- * is available. It is declared here structurally, rather than imported, to avoid
22
- * a circular dependency between this module and the code that supplies the
23
- * function. Any function with a matching shape satisfies it.
24
- */
25
- type ResolveApiKeyValueFn = (apiKey: string | (() => Promise<string | null>) | null) => Promise<string | null>;
26
- /**
27
- * The four kinds of Ablo API key, one per prefix: `sk_` is secret, `ek_` is
28
- * ephemeral, `rk_` is restricted, and `pk_` is publishable. The list is declared
29
- * here, rather than imported, so this browser-safe module stays free of Node-only
30
- * dependencies.
31
- */
32
- export type CredentialKind = 'secret' | 'ephemeral' | 'restricted' | 'publishable';
33
- /**
34
- * Classifies a credential by its prefix, returning its {@link CredentialKind}, or
35
- * `null` when the value carries no recognized Ablo key prefix — for example a
36
- * capability or auth token the caller supplied, or an empty string. This is a
37
- * plain string check that is safe to run in a browser; it decides only which of
38
- * the four kinds a value is, and does not validate the key's checksum or
39
- * environment segment.
40
- */
41
- export declare function classifyCredentialKind(value: string): CredentialKind | null;
42
- /**
43
- * The set of authentication primitives that {@link resolveCredential} delegates
44
- * to. Injecting them keeps the network calls that mint and exchange credentials
45
- * in one place and leaves this module responsible only for the routing decision.
46
- * {@link resolveCredential} never calls `mintUserSessionKey` itself — an
47
- * ephemeral `ek_` key is minted before the client connects and arrives ready to
48
- * use — but it is listed here to describe the full primitive surface.
49
- */
50
- export interface CredentialPrimitives {
51
- readonly exchangeApiKey: typeof exchangeApiKey;
52
- readonly mintUserSessionKey: typeof mintUserSessionKey;
53
- readonly resolveIdentity: typeof resolveIdentity;
54
- readonly resolveApiKeyValue: ResolveApiKeyValueFn;
55
- }
56
- export interface ResolveCredentialContext {
57
- readonly primitives: CredentialPrimitives;
58
- /**
59
- * The arguments for the credential exchange, minus the `apiKey`. The caller
60
- * derives the base URL and participant scope and supplies them here;
61
- * {@link resolveCredential} fills in the resolved `apiKey` and calls
62
- * `exchangeApiKey`.
63
- */
64
- readonly exchangeArgs: Omit<Parameters<typeof exchangeApiKey>[0], 'apiKey'>;
65
- }
66
- export interface ResolveCredentialInput {
67
- /** Resolved string value of the configured `apiKey` (callable already invoked), or null. */
68
- readonly apiKeyValue: string | null;
69
- /** The configured `apiKey` (string or setter) — threaded onto the refresh path. */
70
- readonly configuredApiKey: string | (() => Promise<string | null>) | null;
71
- /** Explicit caller-supplied capability token (`options.capabilityToken`). */
72
- readonly capabilityToken: string | undefined;
73
- /** Configured static `authToken`. */
74
- readonly authToken: string | null;
75
- /** True when the caller already knows its own identity, so no server round-trip is needed to resolve it. */
76
- readonly hasExplicitIdentity: boolean;
77
- }
78
- /**
79
- * The outcome of the connect-time decision, as a discriminated union over the
80
- * route rather than the key kind: an `ek_` and an `rk_` key both take the
81
- * `pre-minted` route, as does a bare capability token. The caller switches on
82
- * `kind` and wires up the scope and side effects each route needs.
83
- *
84
- * Every variant carries the same three fields:
85
- * - `getBearer` — the token used to authenticate the bootstrap and `/auth/*`
86
- * requests, and to seed the credential source.
87
- * - `expiresAtMs` — when the credential expires, which drives the refresh
88
- * scheduler, or `null` when there is nothing to refresh.
89
- * - `controlPlaneKey` — the original configured API key when the route minted
90
- * its bearer through an exchange, so a refresh can mint again; otherwise
91
- * `null`.
92
- */
93
- export type ResolvedCredential =
94
- /** `pk_` — long-lived browser-safe read-only project key. Used directly as the
95
- * bearer; never exchanged, never refreshed. Identity resolved via `/auth/identity`. */
96
- {
97
- readonly kind: 'publishable';
98
- readonly getBearer: string;
99
- readonly expiresAtMs: null;
100
- readonly controlPlaneKey: null;
101
- }
102
- /** `sk_` (no explicit cap token) — hosted-cloud. Exchanged for a capability
103
- * token via `exchangeApiKey`; the refresh scheduler re-mints before expiry. */
104
- | {
105
- readonly kind: 'exchange';
106
- /** Result of the initial `exchangeApiKey` call. */
107
- readonly exchange: Awaited<ReturnType<typeof exchangeApiKey>>;
108
- readonly getBearer: string;
109
- readonly expiresAtMs: number;
110
- /** The configured apiKey (string or setter) — read fresh on each refresh. */
111
- readonly controlPlaneKey: string | (() => Promise<string | null>);
112
- }
113
- /** A pre-minted `ek_` or `rk_` key, or an explicit capability or auth token,
114
- * used as the bearer without any exchange. Identity resolved via `/auth/identity`. */
115
- | {
116
- readonly kind: 'pre-minted';
117
- readonly getBearer: string;
118
- readonly expiresAtMs: null;
119
- readonly controlPlaneKey: null;
120
- }
121
- /** The caller already knows its own organization and user or agent id, so there
122
- * is no server round-trip; the optional bearer is the initial capability token. */
123
- | {
124
- readonly kind: 'explicit';
125
- readonly getBearer: string | undefined;
126
- readonly expiresAtMs: null;
127
- readonly controlPlaneKey: null;
128
- };
129
- /**
130
- * Routes a configured API key to its connect-time outcome. It classifies the
131
- * key, then returns one of four {@link ResolvedCredential} variants, delegating
132
- * any credential exchange to the injected `exchangeApiKey` primitive. The caller
133
- * switches on the result's `kind` to wire up scope and the refresh scheduler.
134
- *
135
- * The routes, in the order they are tried:
136
- * 0. A `pk_` key with no explicit capability token becomes `publishable`: used
137
- * directly as the bearer, with no refresh.
138
- * 1. Any other exchangeable key (one that is not a pre-minted `ek_` or `rk_`)
139
- * with no explicit capability token becomes `exchange`: a round-trip mints a
140
- * capability token, and the refresh scheduler renews it before it expires.
141
- * 2. Otherwise, when the caller's identity is not yet known, the result is
142
- * `pre-minted`: the capability token is used as-is. Throws `session_expired`
143
- * when there is no token to authenticate `/auth/identity`.
144
- * 3. Otherwise, when the caller already knows its identity, the result is
145
- * `explicit`, with no round-trip.
146
- */
147
- export declare function resolveCredential(input: ResolveCredentialInput, ctx: ResolveCredentialContext): Promise<ResolvedCredential>;
148
- export {};