@sixb/core 0.1.12 → 0.1.14

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 (538) hide show
  1. package/dist/actions/index.d.ts +2 -2
  2. package/dist/actions/index.d.ts.map +1 -1
  3. package/dist/actions/index.js +28 -26
  4. package/dist/actions/index.js.map +1 -1
  5. package/dist/actions/read-facade.d.ts +14 -16
  6. package/dist/actions/read-facade.d.ts.map +1 -1
  7. package/dist/actions/request.d.ts.map +1 -1
  8. package/dist/actions/run-dispatch.d.ts +2 -0
  9. package/dist/actions/run-dispatch.d.ts.map +1 -1
  10. package/dist/actions/types/context.d.ts +18 -31
  11. package/dist/actions/types/context.d.ts.map +1 -1
  12. package/dist/actions/types/params.d.ts +2 -1
  13. package/dist/actions/types/params.d.ts.map +1 -1
  14. package/dist/actions/worker.js +1 -1
  15. package/dist/agents/index.js +41 -39
  16. package/dist/agents/index.js.map +1 -1
  17. package/dist/agents/streams/index.js +2 -2
  18. package/dist/agents/streams/internal.js +2 -2
  19. package/dist/assert-never.d.ts +6 -0
  20. package/dist/assert-never.d.ts.map +1 -0
  21. package/dist/auth/client-address.d.ts +3 -0
  22. package/dist/auth/client-address.d.ts.map +1 -0
  23. package/dist/auth/csrf.d.ts +5 -1
  24. package/dist/auth/csrf.d.ts.map +1 -1
  25. package/dist/auth/errors.d.ts +12 -0
  26. package/dist/auth/errors.d.ts.map +1 -1
  27. package/dist/auth/index.d.ts +4 -3
  28. package/dist/auth/index.d.ts.map +1 -1
  29. package/dist/auth/index.js +16 -8
  30. package/dist/auth/index.js.map +1 -1
  31. package/dist/auth/runtime.d.ts +58 -41
  32. package/dist/auth/runtime.d.ts.map +1 -1
  33. package/dist/auth/session-cache.d.ts +10 -3
  34. package/dist/auth/session-cache.d.ts.map +1 -1
  35. package/dist/auth/sessions.d.ts +12 -0
  36. package/dist/auth/sessions.d.ts.map +1 -1
  37. package/dist/auth/strategy.d.ts +2 -0
  38. package/dist/auth/strategy.d.ts.map +1 -1
  39. package/dist/auth/strategy.js +4 -2
  40. package/dist/auth/strategy.js.map +1 -1
  41. package/dist/auth/types.d.ts +16 -15
  42. package/dist/auth/types.d.ts.map +1 -1
  43. package/dist/authorization/index.js +3 -3
  44. package/dist/bootstrap/index.d.ts +1 -1
  45. package/dist/bootstrap/index.d.ts.map +1 -1
  46. package/dist/bootstrap/index.js +45 -43
  47. package/dist/bootstrap/index.js.map +1 -1
  48. package/dist/bootstrap/ontology-type-manifest.d.ts +8 -0
  49. package/dist/bootstrap/ontology-type-manifest.d.ts.map +1 -1
  50. package/dist/{chunk-m7cx05vp.js → chunk-00pfcqh4.js} +126 -59
  51. package/dist/{chunk-m7cx05vp.js.map → chunk-00pfcqh4.js.map} +13 -12
  52. package/dist/{chunk-nzsy3xrp.js → chunk-16jenmzw.js} +69 -44
  53. package/dist/{chunk-nzsy3xrp.js.map → chunk-16jenmzw.js.map} +7 -7
  54. package/dist/{chunk-y3ev53cq.js → chunk-2fv8sajb.js} +2 -2
  55. package/dist/{chunk-q5gz3g2j.js → chunk-2jntasmh.js} +13 -16
  56. package/dist/{chunk-q5gz3g2j.js.map → chunk-2jntasmh.js.map} +3 -3
  57. package/dist/chunk-3a338wrp.js +191 -0
  58. package/dist/chunk-3a338wrp.js.map +11 -0
  59. package/dist/{chunk-ybhz3j9g.js → chunk-3fpgxpsq.js} +104 -148
  60. package/dist/{chunk-ybhz3j9g.js.map → chunk-3fpgxpsq.js.map} +7 -8
  61. package/dist/{chunk-eyjzgav0.js → chunk-3nx8vj5a.js} +6 -4
  62. package/dist/chunk-3nx8vj5a.js.map +12 -0
  63. package/dist/{chunk-5tetw4hn.js → chunk-4tnrzqqh.js} +1 -1
  64. package/dist/{chunk-3ghw2t5q.js → chunk-4ypbe95r.js} +10 -16
  65. package/dist/chunk-4ypbe95r.js.map +10 -0
  66. package/dist/{chunk-2cxv584m.js → chunk-6rzb1g6h.js} +358 -248
  67. package/dist/chunk-6rzb1g6h.js.map +44 -0
  68. package/dist/{chunk-7zgecwy1.js → chunk-6x0pqh32.js} +12 -1
  69. package/dist/{chunk-7zgecwy1.js.map → chunk-6x0pqh32.js.map} +3 -3
  70. package/dist/{chunk-6ma8dvzc.js → chunk-728fp090.js} +49 -42
  71. package/dist/chunk-728fp090.js.map +15 -0
  72. package/dist/chunk-96yw3pwd.js.map +2 -2
  73. package/dist/{chunk-4k53sm9e.js → chunk-a0073121.js} +59 -59
  74. package/dist/{chunk-4k53sm9e.js.map → chunk-a0073121.js.map} +5 -5
  75. package/dist/{chunk-y1ahv8b7.js → chunk-bdhfn0ww.js} +1 -1
  76. package/dist/{chunk-kept9cdd.js → chunk-bxx3ms5t.js} +1 -1
  77. package/dist/{chunk-xtfryrfb.js → chunk-cbn96bve.js} +2 -2
  78. package/dist/{chunk-vsg0g7h9.js → chunk-d8yes9yx.js} +304 -45
  79. package/dist/chunk-d8yes9yx.js.map +20 -0
  80. package/dist/{chunk-vpxss818.js → chunk-drz59ve0.js} +9 -8
  81. package/dist/chunk-drz59ve0.js.map +10 -0
  82. package/dist/{chunk-7c2g3sz9.js → chunk-dsfw1bdr.js} +5 -5
  83. package/dist/{chunk-7c2g3sz9.js.map → chunk-dsfw1bdr.js.map} +1 -1
  84. package/dist/{chunk-qm535afa.js → chunk-dv4ct8mp.js} +66 -24
  85. package/dist/chunk-dv4ct8mp.js.map +15 -0
  86. package/dist/{chunk-t7dzd1tm.js → chunk-e2c5yxfe.js} +2 -2
  87. package/dist/{chunk-p6r1ex7t.js → chunk-ffwvdgk1.js} +5 -13
  88. package/dist/chunk-ffwvdgk1.js.map +10 -0
  89. package/dist/{chunk-tg4g4zh0.js → chunk-gct3m1da.js} +9 -9
  90. package/dist/{chunk-tg4g4zh0.js.map → chunk-gct3m1da.js.map} +3 -3
  91. package/dist/chunk-h89wz928.js +42 -0
  92. package/dist/chunk-h89wz928.js.map +10 -0
  93. package/dist/{chunk-b768c93y.js → chunk-hj0n3c2p.js} +83 -28
  94. package/dist/{chunk-b768c93y.js.map → chunk-hj0n3c2p.js.map} +5 -5
  95. package/dist/{chunk-hkw8rykk.js → chunk-ht4a7mjg.js} +74 -4
  96. package/dist/chunk-ht4a7mjg.js.map +15 -0
  97. package/dist/{chunk-7qnvhtcd.js → chunk-hxgj4kzd.js} +17 -17
  98. package/dist/{chunk-7qnvhtcd.js.map → chunk-hxgj4kzd.js.map} +5 -5
  99. package/dist/{chunk-bg2bs62d.js → chunk-jfdggg1p.js} +5 -5
  100. package/dist/{chunk-f06sf7rr.js → chunk-k4kkp58d.js} +18 -5
  101. package/dist/chunk-k4kkp58d.js.map +11 -0
  102. package/dist/{chunk-e1f1sqba.js → chunk-kxea54yg.js} +3 -3
  103. package/dist/{chunk-2h63nrde.js → chunk-ky7zpbtt.js} +5 -7
  104. package/dist/{chunk-2h63nrde.js.map → chunk-ky7zpbtt.js.map} +3 -4
  105. package/dist/chunk-m4ehq95f.js +9 -0
  106. package/dist/chunk-m4ehq95f.js.map +10 -0
  107. package/dist/{chunk-0mza4xb2.js → chunk-m8zkvep1.js} +2 -2
  108. package/dist/{chunk-xn686q2e.js → chunk-ma1mhh7w.js} +75 -57
  109. package/dist/{chunk-xn686q2e.js.map → chunk-ma1mhh7w.js.map} +3 -3
  110. package/dist/{chunk-yxb4c62x.js → chunk-mr60an99.js} +3 -2
  111. package/dist/{chunk-yxb4c62x.js.map → chunk-mr60an99.js.map} +3 -3
  112. package/dist/{chunk-g50nxqs5.js → chunk-pvgpckm1.js} +63 -20
  113. package/dist/chunk-pvgpckm1.js.map +20 -0
  114. package/dist/{chunk-jjwhy3rs.js → chunk-q2xghyft.js} +5 -5
  115. package/dist/chunk-rdghfsss.js.map +2 -2
  116. package/dist/{chunk-bbaa1fet.js → chunk-rzcjp5m2.js} +7 -3
  117. package/dist/chunk-rzcjp5m2.js.map +25 -0
  118. package/dist/{chunk-hzw7yv5g.js → chunk-rzkr70gr.js} +5 -1
  119. package/dist/{chunk-hzw7yv5g.js.map → chunk-rzkr70gr.js.map} +3 -3
  120. package/dist/{chunk-axndsymr.js → chunk-tw03bsmb.js} +2 -2
  121. package/dist/{chunk-axndsymr.js.map → chunk-tw03bsmb.js.map} +3 -3
  122. package/dist/{chunk-y0v18c2j.js → chunk-vef6qa14.js} +2 -2
  123. package/dist/{chunk-gzt6v1ja.js → chunk-vn3yh259.js} +1 -1
  124. package/dist/{chunk-sfypc7mk.js → chunk-wn7mznxc.js} +4 -4
  125. package/dist/{chunk-r5zythxp.js → chunk-wnxabtn4.js} +7 -7
  126. package/dist/{chunk-4ph94nhd.js → chunk-ww185kt6.js} +2 -2
  127. package/dist/{chunk-3h7ctayx.js → chunk-xgptywp0.js} +4 -3
  128. package/dist/chunk-xgptywp0.js.map +11 -0
  129. package/dist/{chunk-gswwr35f.js → chunk-y487ywrv.js} +4 -4
  130. package/dist/{chunk-bet1rb9h.js → chunk-y6vnvayj.js} +1 -1
  131. package/dist/{chunk-x9tmx3fc.js → chunk-ypj2wqtj.js} +3 -6
  132. package/dist/{chunk-x9tmx3fc.js.map → chunk-ypj2wqtj.js.map} +4 -4
  133. package/dist/{chunk-3bnt2wna.js → chunk-yvf2jqj8.js} +1 -1
  134. package/dist/{chunk-g2gezsg5.js → chunk-z9h698s8.js} +1 -1
  135. package/dist/{chunk-wjffn5m4.js → chunk-zdkcdshk.js} +3 -36
  136. package/dist/{chunk-wjffn5m4.js.map → chunk-zdkcdshk.js.map} +3 -4
  137. package/dist/{chunk-bfjv1adk.js → chunk-znw0zvy4.js} +1 -1
  138. package/dist/edits/types.d.ts +19 -19
  139. package/dist/edits/types.d.ts.map +1 -1
  140. package/dist/error-reporting/internal.js +3 -3
  141. package/dist/errors/catalog.d.ts +4 -0
  142. package/dist/errors/catalog.d.ts.map +1 -1
  143. package/dist/errors/internal.js +1 -1
  144. package/dist/events/envelope.d.ts +0 -12
  145. package/dist/events/envelope.d.ts.map +1 -1
  146. package/dist/events/index.d.ts +1 -1
  147. package/dist/events/index.d.ts.map +1 -1
  148. package/dist/events/index.js +3 -3
  149. package/dist/events/service.d.ts +1 -2
  150. package/dist/events/service.d.ts.map +1 -1
  151. package/dist/events/toStoredEvent.d.ts +1 -2
  152. package/dist/events/toStoredEvent.d.ts.map +1 -1
  153. package/dist/events/types/index.d.ts +2 -1
  154. package/dist/events/types/index.d.ts.map +1 -1
  155. package/dist/execution/agent.d.ts +1 -2
  156. package/dist/execution/agent.d.ts.map +1 -1
  157. package/dist/execution/agent.js +39 -37
  158. package/dist/execution/agent.js.map +1 -1
  159. package/dist/execution/authorized-object-reader.d.ts.map +1 -1
  160. package/dist/execution/primitive.d.ts +1 -2
  161. package/dist/execution/primitive.d.ts.map +1 -1
  162. package/dist/execution/primitive.js +38 -36
  163. package/dist/execution/primitive.js.map +3 -3
  164. package/dist/execution/request.d.ts +1 -2
  165. package/dist/execution/request.d.ts.map +1 -1
  166. package/dist/execution/request.js +39 -37
  167. package/dist/execution/request.js.map +3 -3
  168. package/dist/index.d.ts +6 -6
  169. package/dist/index.d.ts.map +1 -1
  170. package/dist/index.js +56 -50
  171. package/dist/index.js.map +1 -1
  172. package/dist/maintenance/ontology-maintenance.d.ts +11 -1
  173. package/dist/maintenance/ontology-maintenance.d.ts.map +1 -1
  174. package/dist/materialization/errors.d.ts +3 -1
  175. package/dist/materialization/errors.d.ts.map +1 -1
  176. package/dist/materialization/events.d.ts +27 -2
  177. package/dist/materialization/events.d.ts.map +1 -1
  178. package/dist/materializer/edits/commit.d.ts.map +1 -1
  179. package/dist/materializer/edits/operations.d.ts +2 -1
  180. package/dist/materializer/edits/operations.d.ts.map +1 -1
  181. package/dist/materializer/edits/plan.d.ts +2 -2
  182. package/dist/materializer/edits/plan.d.ts.map +1 -1
  183. package/dist/materializer/edits/user-refs.d.ts +30 -0
  184. package/dist/materializer/edits/user-refs.d.ts.map +1 -0
  185. package/dist/materializer/effective/build-events.d.ts +2 -2
  186. package/dist/materializer/effective/build-events.d.ts.map +1 -1
  187. package/dist/materializer/execution/scope.d.ts +11 -3
  188. package/dist/materializer/execution/scope.d.ts.map +1 -1
  189. package/dist/materializer/index.js +23 -21
  190. package/dist/materializer/index.js.map +1 -1
  191. package/dist/materializer/projections/replacement-plan.d.ts +2 -0
  192. package/dist/materializer/projections/replacement-plan.d.ts.map +1 -1
  193. package/dist/materializer/telemetry/plan.d.ts +2 -2
  194. package/dist/materializer/telemetry/plan.d.ts.map +1 -1
  195. package/dist/models/execution/index.js +23 -21
  196. package/dist/models/execution/index.js.map +1 -1
  197. package/dist/models/index.js +1 -1
  198. package/dist/objects/execution.d.ts +21 -27
  199. package/dist/objects/execution.d.ts.map +1 -1
  200. package/dist/objects/index.js +28 -26
  201. package/dist/objects/index.js.map +1 -1
  202. package/dist/objects/query/executor.d.ts.map +1 -1
  203. package/dist/objects/query/index.js +27 -25
  204. package/dist/objects/query/index.js.map +1 -1
  205. package/dist/objects/query/ir.d.ts +8 -1
  206. package/dist/objects/query/ir.d.ts.map +1 -1
  207. package/dist/objects/query/scalar-values.d.ts.map +1 -1
  208. package/dist/objects/query/validate.d.ts.map +1 -1
  209. package/dist/objects/sdk/object-handle.d.ts +1 -2
  210. package/dist/objects/sdk/object-handle.d.ts.map +1 -1
  211. package/dist/objects/sdk/object-set.d.ts +2 -3
  212. package/dist/objects/sdk/object-set.d.ts.map +1 -1
  213. package/dist/objects/sdk/query-builder.d.ts +8 -10
  214. package/dist/objects/sdk/query-builder.d.ts.map +1 -1
  215. package/dist/objects/sdk/telemetry-channel.d.ts +1 -2
  216. package/dist/objects/sdk/telemetry-channel.d.ts.map +1 -1
  217. package/dist/objects/sdk/where.d.ts +2 -3
  218. package/dist/objects/sdk/where.d.ts.map +1 -1
  219. package/dist/ontology/builders.d.ts +11 -10
  220. package/dist/ontology/builders.d.ts.map +1 -1
  221. package/dist/ontology/index.d.ts +4 -2
  222. package/dist/ontology/index.d.ts.map +1 -1
  223. package/dist/ontology/index.js +6 -4
  224. package/dist/ontology/index.js.map +1 -1
  225. package/dist/ontology/inference/index.d.ts +34 -22
  226. package/dist/ontology/inference/index.d.ts.map +1 -1
  227. package/dist/ontology/internal.d.ts +1 -0
  228. package/dist/ontology/internal.d.ts.map +1 -1
  229. package/dist/ontology/internal.js +9 -7
  230. package/dist/ontology/internal.js.map +1 -1
  231. package/dist/ontology/primitives.d.ts +38 -0
  232. package/dist/ontology/primitives.d.ts.map +1 -0
  233. package/dist/ontology/query-capabilities.d.ts +38 -0
  234. package/dist/ontology/query-capabilities.d.ts.map +1 -0
  235. package/dist/ontology/refs.d.ts +23 -2
  236. package/dist/ontology/refs.d.ts.map +1 -1
  237. package/dist/ontology/registered.d.ts +16 -0
  238. package/dist/ontology/registered.d.ts.map +1 -0
  239. package/dist/ontology/registry.d.ts.map +1 -1
  240. package/dist/ontology/tokens.d.ts +35 -1
  241. package/dist/ontology/tokens.d.ts.map +1 -1
  242. package/dist/ontology/types.d.ts +18 -4
  243. package/dist/ontology/types.d.ts.map +1 -1
  244. package/dist/ontology/user-ref.d.ts +35 -0
  245. package/dist/ontology/user-ref.d.ts.map +1 -0
  246. package/dist/ontology/validation/definition.d.ts.map +1 -1
  247. package/dist/ontology/validation/index.d.ts +1 -1
  248. package/dist/ontology/validation/index.d.ts.map +1 -1
  249. package/dist/ontology/validation/normalize.d.ts.map +1 -1
  250. package/dist/ontology/validation/properties.d.ts +6 -1
  251. package/dist/ontology/validation/properties.d.ts.map +1 -1
  252. package/dist/ontology/validation/query.d.ts.map +1 -1
  253. package/dist/ontology/validation/schema.d.ts.map +1 -1
  254. package/dist/pipelines/index.js +26 -24
  255. package/dist/pipelines/index.js.map +1 -1
  256. package/dist/predicates/types.d.ts +53 -3
  257. package/dist/predicates/types.d.ts.map +1 -1
  258. package/dist/projections/builders.d.ts +19 -1
  259. package/dist/projections/builders.d.ts.map +1 -1
  260. package/dist/projections/internal.js +23 -21
  261. package/dist/projections/internal.js.map +1 -1
  262. package/dist/projections/validation.d.ts.map +1 -1
  263. package/dist/query.js +2 -2
  264. package/dist/queues/in-memory.d.ts +1 -1
  265. package/dist/queues/in-memory.d.ts.map +1 -1
  266. package/dist/runtime/create.d.ts +1 -1
  267. package/dist/runtime/create.d.ts.map +1 -1
  268. package/dist/runtime/host.d.ts +5 -5
  269. package/dist/runtime/host.d.ts.map +1 -1
  270. package/dist/runtime/index.d.ts +1 -1
  271. package/dist/runtime/index.d.ts.map +1 -1
  272. package/dist/runtime/internal.js +27 -25
  273. package/dist/runtime/internal.js.map +1 -1
  274. package/dist/runtime/sixb.d.ts +5 -5
  275. package/dist/runtime/sixb.d.ts.map +1 -1
  276. package/dist/runtime/types.d.ts +171 -188
  277. package/dist/runtime/types.d.ts.map +1 -1
  278. package/dist/sandboxes/index.js +5 -5
  279. package/dist/sandboxes/sandbox.d.ts +4 -1
  280. package/dist/sandboxes/sandbox.d.ts.map +1 -1
  281. package/dist/shared/params/types.d.ts +4 -3
  282. package/dist/shared/params/types.d.ts.map +1 -1
  283. package/dist/shared/params/user-refs.d.ts +19 -0
  284. package/dist/shared/params/user-refs.d.ts.map +1 -0
  285. package/dist/shares/compiler.d.ts.map +1 -1
  286. package/dist/shares/internal.js +24 -22
  287. package/dist/shares/internal.js.map +2 -2
  288. package/dist/storage/action-runs/failure.js +2 -2
  289. package/dist/storage/action-runs/types.d.ts +1 -1
  290. package/dist/storage/action-runs/types.d.ts.map +1 -1
  291. package/dist/storage/agents/provider.js +1 -1
  292. package/dist/storage/ai-limits/enforcement.js +2 -2
  293. package/dist/storage/auth/errors.d.ts +1 -1
  294. package/dist/storage/auth/errors.d.ts.map +1 -1
  295. package/dist/storage/auth/in-memory/access-tokens.d.ts.map +1 -1
  296. package/dist/storage/auth/in-memory/auth-storage.d.ts +2 -1
  297. package/dist/storage/auth/in-memory/auth-storage.d.ts.map +1 -1
  298. package/dist/storage/auth/in-memory/device-authorizations.d.ts.map +1 -1
  299. package/dist/storage/auth/in-memory/sessions.d.ts +8 -1
  300. package/dist/storage/auth/in-memory/sessions.d.ts.map +1 -1
  301. package/dist/storage/auth/in-memory/shared.d.ts.map +1 -1
  302. package/dist/storage/auth/index.d.ts +1 -1
  303. package/dist/storage/auth/index.d.ts.map +1 -1
  304. package/dist/storage/auth/types.d.ts +77 -20
  305. package/dist/storage/auth/types.d.ts.map +1 -1
  306. package/dist/storage/connector-connections/provider.js +1 -1
  307. package/dist/storage/executions/provider.js +1 -1
  308. package/dist/storage/file-upload-sessions/in-memory.d.ts +9 -18
  309. package/dist/storage/file-upload-sessions/in-memory.d.ts.map +1 -1
  310. package/dist/storage/file-upload-sessions/index.d.ts +1 -1
  311. package/dist/storage/file-upload-sessions/index.d.ts.map +1 -1
  312. package/dist/storage/file-upload-sessions/provider.d.ts +52 -0
  313. package/dist/storage/file-upload-sessions/provider.d.ts.map +1 -0
  314. package/dist/storage/file-upload-sessions/provider.js +24 -0
  315. package/dist/storage/file-upload-sessions/provider.js.map +9 -0
  316. package/dist/storage/file-upload-sessions/types.d.ts +19 -1
  317. package/dist/storage/file-upload-sessions/types.d.ts.map +1 -1
  318. package/dist/storage/file-upload-sessions/utils.d.ts +8 -2
  319. package/dist/storage/file-upload-sessions/utils.d.ts.map +1 -1
  320. package/dist/storage/index.d.ts +3 -3
  321. package/dist/storage/index.d.ts.map +1 -1
  322. package/dist/storage/index.js +29 -25
  323. package/dist/storage/index.js.map +1 -1
  324. package/dist/storage/internal.js +11 -9
  325. package/dist/storage/internal.js.map +1 -1
  326. package/dist/storage/objects/in-memory/query.d.ts.map +1 -1
  327. package/dist/storage/ontology/commits.d.ts +6 -2
  328. package/dist/storage/ontology/commits.d.ts.map +1 -1
  329. package/dist/storage/ontology/in-memory/materializations.d.ts.map +1 -1
  330. package/dist/storage/ontology/provider-work.d.ts.map +1 -1
  331. package/dist/storage/ontology/provider.d.ts +14 -1
  332. package/dist/storage/ontology/provider.d.ts.map +1 -1
  333. package/dist/storage/ontology/provider.js +8 -2
  334. package/dist/storage/ontology/provider.js.map +1 -1
  335. package/dist/storage/operation-scope.d.ts.map +1 -1
  336. package/dist/storage/operation-scope.js +1 -1
  337. package/dist/storage/projection-runs/provider.js +2 -2
  338. package/dist/storage/types.d.ts +1 -1
  339. package/dist/storage/types.d.ts.map +1 -1
  340. package/dist/storage/workflow-interventions/index.d.ts +1 -1
  341. package/dist/storage/workflow-interventions/index.d.ts.map +1 -1
  342. package/dist/storage/workflow-interventions/types.d.ts +5 -8
  343. package/dist/storage/workflow-interventions/types.d.ts.map +1 -1
  344. package/dist/storage/workflow-runs/provider.js +8 -8
  345. package/dist/syncs/index.js +27 -25
  346. package/dist/syncs/index.js.map +1 -1
  347. package/dist/testing/action-execution.d.ts +4 -0
  348. package/dist/testing/action-execution.d.ts.map +1 -1
  349. package/dist/testing/auth-storage-contract.d.ts.map +1 -1
  350. package/dist/testing/execution.d.ts +1 -2
  351. package/dist/testing/execution.d.ts.map +1 -1
  352. package/dist/testing/file-upload-session-storage-contract.d.ts +12 -0
  353. package/dist/testing/file-upload-session-storage-contract.d.ts.map +1 -0
  354. package/dist/testing/index.d.ts +2 -0
  355. package/dist/testing/index.d.ts.map +1 -1
  356. package/dist/testing/index.js +2035 -1358
  357. package/dist/testing/index.js.map +15 -13
  358. package/dist/testing/materializer-storage-contract.d.ts.map +1 -1
  359. package/dist/testing/object-query-contract.d.ts.map +1 -1
  360. package/dist/testing/ontology-contract-fixture.d.ts +8 -0
  361. package/dist/testing/ontology-contract-fixture.d.ts.map +1 -1
  362. package/dist/testing/ontology-storage-contract.d.ts.map +1 -1
  363. package/dist/testing/sandboxes-contract.d.ts.map +1 -1
  364. package/dist/testing/workflow-intervention-storage-contract.d.ts +8 -0
  365. package/dist/testing/workflow-intervention-storage-contract.d.ts.map +1 -0
  366. package/dist/webhooks/internal.js +24 -22
  367. package/dist/webhooks/internal.js.map +2 -2
  368. package/dist/webhooks/types.d.ts +2 -2
  369. package/dist/webhooks/types.d.ts.map +1 -1
  370. package/dist/workers/index.js +1 -1
  371. package/dist/workflows/index.js +42 -40
  372. package/dist/workflows/index.js.map +1 -1
  373. package/dist/workflows/run-dispatch.d.ts.map +1 -1
  374. package/dist/workflows/types.d.ts +2 -2
  375. package/dist/workflows/types.d.ts.map +1 -1
  376. package/package.json +7 -1
  377. package/src/actions/index.ts +0 -3
  378. package/src/actions/read-facade.ts +102 -62
  379. package/src/actions/request.ts +13 -0
  380. package/src/actions/run-dispatch.ts +3 -0
  381. package/src/actions/types/context.ts +17 -65
  382. package/src/actions/types/params.ts +2 -1
  383. package/src/agents/authority.ts +1 -1
  384. package/src/assert-never.ts +7 -0
  385. package/src/auth/client-address.ts +12 -0
  386. package/src/auth/csrf.ts +14 -5
  387. package/src/auth/errors.ts +23 -0
  388. package/src/auth/index.ts +4 -3
  389. package/src/auth/runtime.ts +353 -297
  390. package/src/auth/session-cache.ts +18 -6
  391. package/src/auth/sessions.ts +30 -0
  392. package/src/auth/strategy.ts +2 -0
  393. package/src/auth/types.ts +15 -17
  394. package/src/bootstrap/index.ts +1 -0
  395. package/src/bootstrap/ontology-type-manifest.ts +112 -60
  396. package/src/edits/types.ts +47 -63
  397. package/src/errors/catalog.ts +4 -0
  398. package/src/events/envelope.ts +0 -13
  399. package/src/events/index.ts +1 -1
  400. package/src/events/service.ts +1 -11
  401. package/src/events/toStoredEvent.ts +1 -3
  402. package/src/events/types/index.ts +1 -1
  403. package/src/execution/agent.ts +1 -2
  404. package/src/execution/authorized-object-reader.ts +5 -7
  405. package/src/execution/primitive.ts +1 -2
  406. package/src/execution/request.ts +1 -2
  407. package/src/index.ts +8 -7
  408. package/src/maintenance/ontology-maintenance.ts +77 -1
  409. package/src/materialization/errors.ts +2 -0
  410. package/src/materialization/events.ts +27 -2
  411. package/src/materializer/README.md +2 -0
  412. package/src/materializer/edits/commit.ts +21 -12
  413. package/src/materializer/edits/operations.ts +32 -4
  414. package/src/materializer/edits/plan.ts +4 -5
  415. package/src/materializer/edits/user-refs.ts +115 -0
  416. package/src/materializer/effective/build-events.ts +4 -5
  417. package/src/materializer/execution/scope.ts +40 -7
  418. package/src/materializer/projections/replace.ts +2 -0
  419. package/src/materializer/projections/replacement-plan.ts +4 -0
  420. package/src/materializer/telemetry/append.ts +4 -12
  421. package/src/materializer/telemetry/plan.ts +4 -5
  422. package/src/objects/execution.ts +33 -62
  423. package/src/objects/query/executor.ts +12 -3
  424. package/src/objects/query/ir.ts +7 -0
  425. package/src/objects/query/planner.ts +1 -0
  426. package/src/objects/query/scalar-values.ts +19 -0
  427. package/src/objects/query/validate.ts +55 -44
  428. package/src/objects/sdk/object-handle.ts +8 -8
  429. package/src/objects/sdk/object-set.ts +8 -15
  430. package/src/objects/sdk/query-builder.ts +59 -71
  431. package/src/objects/sdk/telemetry-channel.ts +6 -7
  432. package/src/objects/sdk/where.ts +6 -13
  433. package/src/ontology/builders.ts +15 -11
  434. package/src/ontology/index.ts +4 -0
  435. package/src/ontology/inference/index.ts +56 -36
  436. package/src/ontology/internal.ts +1 -0
  437. package/src/ontology/json-schema.ts +12 -0
  438. package/src/ontology/primitives.ts +91 -0
  439. package/src/ontology/query-capabilities.ts +136 -0
  440. package/src/ontology/refs.ts +33 -6
  441. package/src/ontology/registered.ts +22 -0
  442. package/src/ontology/registry.ts +6 -3
  443. package/src/ontology/tokens.ts +41 -2
  444. package/src/ontology/types.ts +19 -3
  445. package/src/ontology/user-ref.ts +120 -0
  446. package/src/ontology/validation/definition.ts +2 -13
  447. package/src/ontology/validation/index.ts +1 -0
  448. package/src/ontology/validation/normalize.ts +39 -3
  449. package/src/ontology/validation/properties.ts +95 -19
  450. package/src/ontology/validation/query.ts +11 -42
  451. package/src/ontology/validation/schema.ts +16 -0
  452. package/src/predicates/types.ts +43 -33
  453. package/src/projections/builders.ts +24 -3
  454. package/src/projections/validation.ts +15 -1
  455. package/src/runtime/create.ts +2 -2
  456. package/src/runtime/host.ts +10 -12
  457. package/src/runtime/index.ts +3 -2
  458. package/src/runtime/sixb.ts +13 -23
  459. package/src/runtime/types.ts +277 -479
  460. package/src/sandboxes/sandbox.ts +4 -1
  461. package/src/shared/params/types.ts +4 -3
  462. package/src/shared/params/user-refs.ts +48 -0
  463. package/src/shares/compiler.ts +6 -16
  464. package/src/storage/action-runs/types.ts +1 -0
  465. package/src/storage/auth/errors.ts +0 -1
  466. package/src/storage/auth/in-memory/access-tokens.ts +5 -2
  467. package/src/storage/auth/in-memory/auth-storage.ts +49 -73
  468. package/src/storage/auth/in-memory/device-authorizations.ts +0 -2
  469. package/src/storage/auth/in-memory/sessions.ts +69 -1
  470. package/src/storage/auth/in-memory/shared.ts +13 -7
  471. package/src/storage/auth/index.ts +2 -1
  472. package/src/storage/auth/types.ts +72 -20
  473. package/src/storage/executions/validation.ts +1 -1
  474. package/src/storage/file-upload-sessions/in-memory.ts +64 -113
  475. package/src/storage/file-upload-sessions/index.ts +1 -0
  476. package/src/storage/file-upload-sessions/provider.ts +258 -0
  477. package/src/storage/file-upload-sessions/types.ts +20 -1
  478. package/src/storage/file-upload-sessions/utils.ts +25 -9
  479. package/src/storage/index.ts +3 -2
  480. package/src/storage/objects/in-memory/query.ts +13 -3
  481. package/src/storage/ontology/commits.ts +6 -2
  482. package/src/storage/ontology/in-memory/materializations.ts +6 -34
  483. package/src/storage/ontology/provider-header-validation.ts +57 -0
  484. package/src/storage/ontology/provider-work.ts +15 -3
  485. package/src/storage/ontology/provider.ts +59 -1
  486. package/src/storage/operation-scope.ts +1 -0
  487. package/src/storage/types.ts +0 -1
  488. package/src/storage/workflow-interventions/index.ts +0 -1
  489. package/src/storage/workflow-interventions/types.ts +5 -9
  490. package/src/testing/action-execution.ts +13 -3
  491. package/src/testing/auth-storage-contract.ts +253 -192
  492. package/src/testing/execution-storage-contract.ts +1 -2
  493. package/src/testing/execution.ts +4 -7
  494. package/src/testing/file-upload-session-storage-contract.ts +335 -0
  495. package/src/testing/index.ts +8 -0
  496. package/src/testing/materializer-storage-contract.ts +86 -4
  497. package/src/testing/object-query-contract.ts +121 -2
  498. package/src/testing/ontology-contract-fixture.ts +23 -3
  499. package/src/testing/ontology-storage-contract.ts +58 -0
  500. package/src/testing/sandboxes-contract.ts +27 -0
  501. package/src/testing/workflow-intervention-storage-contract.ts +203 -0
  502. package/src/webhooks/types.ts +2 -2
  503. package/src/workflows/run-dispatch.ts +12 -1
  504. package/src/workflows/snapshot.ts +16 -7
  505. package/src/workflows/types.ts +2 -2
  506. package/dist/chunk-2cxv584m.js.map +0 -43
  507. package/dist/chunk-3ghw2t5q.js.map +0 -10
  508. package/dist/chunk-3h7ctayx.js.map +0 -11
  509. package/dist/chunk-6ma8dvzc.js.map +0 -15
  510. package/dist/chunk-bbaa1fet.js.map +0 -25
  511. package/dist/chunk-eyjzgav0.js.map +0 -12
  512. package/dist/chunk-f06sf7rr.js.map +0 -11
  513. package/dist/chunk-g50nxqs5.js.map +0 -18
  514. package/dist/chunk-hkw8rykk.js.map +0 -15
  515. package/dist/chunk-p6r1ex7t.js.map +0 -10
  516. package/dist/chunk-qm535afa.js.map +0 -15
  517. package/dist/chunk-vpxss818.js.map +0 -10
  518. package/dist/chunk-vsg0g7h9.js.map +0 -17
  519. /package/dist/{chunk-y3ev53cq.js.map → chunk-2fv8sajb.js.map} +0 -0
  520. /package/dist/{chunk-5tetw4hn.js.map → chunk-4tnrzqqh.js.map} +0 -0
  521. /package/dist/{chunk-y1ahv8b7.js.map → chunk-bdhfn0ww.js.map} +0 -0
  522. /package/dist/{chunk-kept9cdd.js.map → chunk-bxx3ms5t.js.map} +0 -0
  523. /package/dist/{chunk-xtfryrfb.js.map → chunk-cbn96bve.js.map} +0 -0
  524. /package/dist/{chunk-t7dzd1tm.js.map → chunk-e2c5yxfe.js.map} +0 -0
  525. /package/dist/{chunk-bg2bs62d.js.map → chunk-jfdggg1p.js.map} +0 -0
  526. /package/dist/{chunk-e1f1sqba.js.map → chunk-kxea54yg.js.map} +0 -0
  527. /package/dist/{chunk-0mza4xb2.js.map → chunk-m8zkvep1.js.map} +0 -0
  528. /package/dist/{chunk-jjwhy3rs.js.map → chunk-q2xghyft.js.map} +0 -0
  529. /package/dist/{chunk-y0v18c2j.js.map → chunk-vef6qa14.js.map} +0 -0
  530. /package/dist/{chunk-gzt6v1ja.js.map → chunk-vn3yh259.js.map} +0 -0
  531. /package/dist/{chunk-sfypc7mk.js.map → chunk-wn7mznxc.js.map} +0 -0
  532. /package/dist/{chunk-r5zythxp.js.map → chunk-wnxabtn4.js.map} +0 -0
  533. /package/dist/{chunk-4ph94nhd.js.map → chunk-ww185kt6.js.map} +0 -0
  534. /package/dist/{chunk-gswwr35f.js.map → chunk-y487ywrv.js.map} +0 -0
  535. /package/dist/{chunk-bet1rb9h.js.map → chunk-y6vnvayj.js.map} +0 -0
  536. /package/dist/{chunk-3bnt2wna.js.map → chunk-yvf2jqj8.js.map} +0 -0
  537. /package/dist/{chunk-g2gezsg5.js.map → chunk-z9h698s8.js.map} +0 -0
  538. /package/dist/{chunk-bfjv1adk.js.map → chunk-znw0zvy4.js.map} +0 -0
@@ -16,7 +16,10 @@ export type SandboxStatus = "running" | "stopped" | "failed"
16
16
  * default set at factory.create(...).
17
17
  */
18
18
  export interface RunCommandOptions {
19
- /** Overrides the sandbox-level workingDirectory for this call. */
19
+ /**
20
+ * Working directory for this call. Defaults to the sandbox's workingDirectory;
21
+ * relative paths resolve against it, while absolute paths override it.
22
+ */
20
23
  readonly cwd?: string
21
24
  /** Merged on top of sandbox-level env. Per-call wins on collision. */
22
25
  readonly env?: Readonly<Record<string, string>>
@@ -6,6 +6,7 @@ import type {
6
6
  SchemaOrRef,
7
7
  ValueType,
8
8
  } from "../../ontology"
9
+ import type { RegisteredValueTypes } from "../../ontology/registered"
9
10
  import type { QuantitativeTypeId } from "../../ontology/units"
10
11
 
11
12
  type Simplify<T> = { [K in keyof T]: T[K] } & {}
@@ -57,14 +58,14 @@ type InferStructuredParamValue<
57
58
 
58
59
  type InferParamSchemaValue<
59
60
  TSchema extends SchemaOrRef,
60
- TValueTypes extends readonly ValueType[] = [],
61
+ TValueTypes extends readonly ValueType[] = RegisteredValueTypes,
61
62
  > = TSchema extends keyof ParamPrimitiveSchemaValues
62
63
  ? ParamPrimitiveSchemaValues[TSchema]
63
64
  : InferStructuredParamValue<TSchema, TValueTypes>
64
65
 
65
66
  type InferParamValue<
66
67
  TParam extends ParamConfig,
67
- TValueTypes extends readonly ValueType[] = [],
68
+ TValueTypes extends readonly ValueType[] = RegisteredValueTypes,
68
69
  > = TParam["nullable"] extends true
69
70
  ? InferParamSchemaValue<TParam["schema"], TValueTypes> | null
70
71
  : InferParamSchemaValue<TParam["schema"], TValueTypes>
@@ -72,7 +73,7 @@ type InferParamValue<
72
73
  /** Infer the validated runtime input represented by a parameter config. */
73
74
  export type InferParams<
74
75
  TParams extends ParamsConfig,
75
- TValueTypes extends readonly ValueType[] = [],
76
+ TValueTypes extends readonly ValueType[] = RegisteredValueTypes,
76
77
  > = string extends keyof TParams
77
78
  ? Record<string, unknown>
78
79
  : Simplify<
@@ -0,0 +1,48 @@
1
+ import type { SchemaOrRef, ValueType } from "../../ontology"
2
+ import { isObjectRefSchema } from "../../ontology/refs"
3
+ import { collectUserRefIds, userReferenceProblem } from "../../ontology/user-ref"
4
+ import type { AuthStorage } from "../../storage/auth/types"
5
+
6
+ /**
7
+ * Reject params that reference a user who does not exist or is not active.
8
+ *
9
+ * Callers run it only when a new run is created: replaying an existing run keeps the params it was
10
+ * accepted with, even if a referenced user was suspended since.
11
+ */
12
+ export async function assertParamUsersActive(input: {
13
+ readonly auth: AuthStorage | undefined
14
+ readonly projectId: string
15
+ readonly schemas: Readonly<Record<string, SchemaOrRef>>
16
+ readonly values: Readonly<Record<string, unknown>>
17
+ readonly valueTypesById: ReadonlyMap<string, ValueType>
18
+ /** Names one param in error messages, for example `Action param 'task.assign.assignee'`. */
19
+ readonly describe: (paramId: string) => string
20
+ readonly invalid: (message: string) => Error
21
+ }): Promise<void> {
22
+ const references: { readonly paramId: string; readonly id: string }[] = []
23
+ for (const [paramId, schema] of Object.entries(input.schemas)) {
24
+ if (isObjectRefSchema(schema)) continue
25
+ const ids = collectUserRefIds(schema, input.values[paramId], input.valueTypesById, new Set())
26
+ for (const id of ids) references.push({ paramId, id })
27
+ }
28
+ if (references.length === 0) return
29
+
30
+ const users = input.auth?.users
31
+ const statuses = new Map(
32
+ await Promise.all(
33
+ [...new Set(references.map((reference) => reference.id))].map(
34
+ async (id) =>
35
+ [
36
+ id,
37
+ users
38
+ ? ((await users.getById({ projectId: input.projectId, id }))?.status ?? null)
39
+ : "unverifiable",
40
+ ] as const
41
+ )
42
+ )
43
+ )
44
+ for (const { paramId, id } of references) {
45
+ const problem = userReferenceProblem(input.describe(paramId), id, statuses.get(id) ?? null)
46
+ if (problem) throw input.invalid(problem)
47
+ }
48
+ }
@@ -1,7 +1,8 @@
1
1
  import type { ActionDefinitionCatalog } from "../actions"
2
2
  import type { LinkPathSelection, LinkPathSelectionMode, ObjectRef } from "../ontology"
3
+ import { isPrimitiveSchema, primitiveTraits } from "../ontology/primitives"
3
4
  import type { OntologyDefinitionCatalog } from "../ontology/registry"
4
- import type { ObjectLink, ObjectType } from "../ontology/types"
5
+ import type { ObjectLink, ObjectType, PrimitiveSchema } from "../ontology/types"
5
6
  import type {
6
7
  ObjectReadLinkDefinitionSelection,
7
8
  ObjectReadLinkSelection,
@@ -88,17 +89,6 @@ export function compileShareAccessPlan(input: CompileShareAccessPlanInput): Shar
88
89
  return snapshotShareAccessPlan({ grants })
89
90
  }
90
91
 
91
- const SHAREABLE_PRIMITIVE_SCHEMAS = new Set([
92
- "string",
93
- "integer",
94
- "double",
95
- "decimal",
96
- "boolean",
97
- "date",
98
- "timestamp",
99
- "uuid",
100
- ])
101
-
102
92
  /**
103
93
  * V1 deliberately excludes references from shared Action params. A delegated caller cannot yet be
104
94
  * authorized to resolve arbitrary object or blob references supplied at invocation time.
@@ -112,9 +102,9 @@ function assertShareableActionParams(input: {
112
102
  const seenSchemas = new WeakSet<object>()
113
103
  const resolvingValueTypes = new Set<string>()
114
104
 
115
- const reject = (path: string, kind: "objectRef" | "fileRef"): never => {
105
+ const reject = (path: string, kind: "objectRef" | PrimitiveSchema): never => {
116
106
  throw invalid(
117
- `Share '${input.shareId}' Action '${input.actionId}' parameter '${path}' uses ${kind}. Shared Action parameters cannot contain objectRef or fileRef in V1.`
107
+ `Share '${input.shareId}' Action '${input.actionId}' parameter '${path}' uses ${kind}. Shared Action parameters cannot contain objectRef, fileRef, or userRef in V1.`
118
108
  )
119
109
  }
120
110
 
@@ -126,8 +116,8 @@ function assertShareableActionParams(input: {
126
116
 
127
117
  const walk = (schema: unknown, path: string): void => {
128
118
  if (typeof schema === "string") {
129
- if (schema === "fileRef") reject(path, "fileRef")
130
- if (!SHAREABLE_PRIMITIVE_SCHEMAS.has(schema)) malformed(path)
119
+ if (!isPrimitiveSchema(schema)) malformed(path)
120
+ else if (primitiveTraits(schema)?.shareableParam !== true) reject(path, schema)
131
121
  return
132
122
  }
133
123
  if (!isRecord(schema)) throw malformed(path)
@@ -27,6 +27,7 @@ export const ACTION_RUN_FAILURE_CODES = [
27
27
  "runtime.cancelled",
28
28
  "queue.enqueue_failed",
29
29
  "action.phase_failed",
30
+ "action.read_conflict",
30
31
  ] as const satisfies readonly [SixbErrorCode, ...SixbErrorCode[]]
31
32
 
32
33
  export type ActionRunFailureCode = (typeof ACTION_RUN_FAILURE_CODES)[number]
@@ -10,7 +10,6 @@ export type AuthStorageErrorCode =
10
10
  | "duplicate_service_account"
11
11
  | "duplicate_session"
12
12
  | "duplicate_user"
13
- | "email_link_not_allowed"
14
13
  | "expired_magic_link"
15
14
  | "expired_oidc_attempt"
16
15
  | "invalid_input"
@@ -38,8 +38,11 @@ export class InMemoryAuthAccessTokenStore implements AuthAccessTokenStore {
38
38
  const rows = [...this.state.accessTokens.values()]
39
39
  .filter((token) => token.projectId === input.projectId)
40
40
  .filter((token) => input.kind === undefined || token.kind === input.kind)
41
- .filter((token) => input.subjectType === undefined || token.subjectType === input.subjectType)
42
- .filter((token) => input.subjectId === undefined || token.subjectId === input.subjectId)
41
+ .filter(
42
+ (token) =>
43
+ input.subject === undefined ||
44
+ (token.subject.type === input.subject.type && token.subject.id === input.subject.id)
45
+ )
43
46
  .filter((token) => input.includeRevoked || !token.revokedAt)
44
47
  .sort((a, b) => compareByCreatedAt(a, b, order))
45
48
  const page = rows.slice(offset, input.limit === undefined ? undefined : offset + input.limit)
@@ -7,6 +7,7 @@ import type {
7
7
  CompleteOidcSignInInput,
8
8
  CompleteSignInResult,
9
9
  GroupMembershipRecord,
10
+ GroupMembershipSource,
10
11
  InvitationRecord,
11
12
  SessionRecord,
12
13
  SuspendUserAndRevokeSessionsInput,
@@ -30,7 +31,6 @@ import {
30
31
  cloneRecord,
31
32
  consumeMagicLinkRecord,
32
33
  consumeOidcAttemptRecord,
33
- createAccessTokenRecord,
34
34
  createAuthStorageState,
35
35
  createSessionRecord,
36
36
  deviceAuthorizationKey,
@@ -43,6 +43,7 @@ import {
43
43
  normalizeEmail,
44
44
  normalizeGroupIds,
45
45
  oidcAttemptKey,
46
+ removeGroupMembershipRecord,
46
47
  revokeActiveSessionsForUser,
47
48
  upsertGroupMembershipRecord,
48
49
  userKey,
@@ -138,24 +139,22 @@ export class InMemoryAuthStorage implements AuthStorage {
138
139
  )
139
140
  }
140
141
  if (
141
- input.accessToken.projectId !== input.projectId ||
142
- input.accessToken.subjectType !== "user" ||
143
- input.accessToken.subjectId !== authorization.approvedUserId ||
144
- input.accessToken.createdBySessionId !== authorization.approvedSessionId
142
+ input.session.projectId !== input.projectId ||
143
+ input.session.userId !== authorization.approvedUserId
145
144
  ) {
146
145
  throw new AuthStorageError(
147
146
  "invalid_device_authorization",
148
- "[Sixb] Device access token is invalid."
147
+ "[Sixb] Device session is invalid."
149
148
  )
150
149
  }
151
- const accessToken = createAccessTokenRecord(this.state, input.accessToken)
150
+ const session = createSessionRecord(this.state, input.session)
152
151
  const consumed = {
153
152
  ...authorization,
154
153
  status: "consumed" as const,
155
154
  consumedAt: new Date(input.completedAt),
156
155
  }
157
156
  this.state.deviceAuthorizations.set(key, cloneRecord(consumed))
158
- return { authorization: cloneRecord(consumed), accessToken: cloneRecord(accessToken) }
157
+ return { authorization: cloneRecord(consumed), session: cloneRecord(session) }
159
158
  }
160
159
 
161
160
  async completeMagicLinkSignIn(
@@ -222,25 +221,6 @@ export class InMemoryAuthStorage implements AuthStorage {
222
221
  )
223
222
  }
224
223
 
225
- if (
226
- shouldCreateUser &&
227
- !activeInvitation &&
228
- input.allowUserCreationWithoutInvitation &&
229
- input.requireNoActiveUsersForUserCreation &&
230
- hasActiveUsers(this.state, projectId)
231
- ) {
232
- consumeMagicLinkRecord(this.state, {
233
- projectId,
234
- id: input.magicLinkId,
235
- tokenHash: input.tokenHash,
236
- consumedAt: completedAt,
237
- })
238
- throw new AuthStorageError(
239
- "user_creation_not_allowed",
240
- `[Sixb] Magic link '${input.magicLinkId}' cannot create a user for project '${projectId}'.`
241
- )
242
- }
243
-
244
224
  validateCompleteSessionInput(this.state, projectId, input.session)
245
225
  assertSignInSessionAudience(projectId, input.session.audience, magicLink.audience)
246
226
 
@@ -283,8 +263,9 @@ export class InMemoryAuthStorage implements AuthStorage {
283
263
  projectId,
284
264
  user,
285
265
  })
286
- const memberships = this.applyManualGroups({
266
+ const memberships = this.applyGroups({
287
267
  completedAt,
268
+ source: "manual",
288
269
  groupIds: manualGroupIds,
289
270
  projectId,
290
271
  userId: user.id,
@@ -355,14 +336,6 @@ export class InMemoryAuthStorage implements AuthStorage {
355
336
  )
356
337
  }
357
338
 
358
- if (!identity && user && (!input.autoLinkByVerifiedEmail || !input.emailVerified)) {
359
- this.consumeOidcAttempt(input, completedAt, projectId)
360
- throw new AuthStorageError(
361
- "email_link_not_allowed",
362
- `[Sixb] OIDC identity cannot auto-link to user '${user.id}' for project '${projectId}'.`
363
- )
364
- }
365
-
366
339
  if (user?.status === "suspended") {
367
340
  this.consumeOidcAttempt(input, completedAt, projectId)
368
341
  throw new AuthStorageError(
@@ -371,14 +344,6 @@ export class InMemoryAuthStorage implements AuthStorage {
371
344
  )
372
345
  }
373
346
 
374
- if (shouldCreateUser && !input.emailVerified) {
375
- this.consumeOidcAttempt(input, completedAt, projectId)
376
- throw new AuthStorageError(
377
- "user_creation_not_allowed",
378
- `[Sixb] OIDC authorization attempt '${input.oidcAuthorizationAttemptId}' cannot create a user for project '${projectId}'.`
379
- )
380
- }
381
-
382
347
  if (shouldCreateUser && !activeInvitation && !input.allowUserCreationWithoutInvitation) {
383
348
  this.consumeOidcAttempt(input, completedAt, projectId)
384
349
  throw new AuthStorageError(
@@ -387,20 +352,6 @@ export class InMemoryAuthStorage implements AuthStorage {
387
352
  )
388
353
  }
389
354
 
390
- if (
391
- shouldCreateUser &&
392
- !activeInvitation &&
393
- input.allowUserCreationWithoutInvitation &&
394
- input.requireNoActiveUsersForUserCreation &&
395
- hasActiveUsers(this.state, projectId)
396
- ) {
397
- this.consumeOidcAttempt(input, completedAt, projectId)
398
- throw new AuthStorageError(
399
- "user_creation_not_allowed",
400
- `[Sixb] OIDC authorization attempt '${input.oidcAuthorizationAttemptId}' cannot create a user for project '${projectId}'.`
401
- )
402
- }
403
-
404
355
  validateCompleteSessionInput(this.state, projectId, input.session)
405
356
  assertSignInSessionAudience(projectId, input.session.audience, attempt.audience)
406
357
 
@@ -437,12 +388,19 @@ export class InMemoryAuthStorage implements AuthStorage {
437
388
  projectId,
438
389
  user,
439
390
  })
440
- const memberships = this.applyManualGroups({
391
+ const memberships = this.syncDirectoryGroups({
441
392
  completedAt,
442
- groupIds: manualGroupIds,
393
+ groupIds: input.directoryGroupIds,
443
394
  projectId,
444
395
  userId: user.id,
445
- existing: invitation.memberships,
396
+ existing: this.applyGroups({
397
+ completedAt,
398
+ source: "manual",
399
+ groupIds: manualGroupIds,
400
+ projectId,
401
+ userId: user.id,
402
+ existing: invitation.memberships,
403
+ }),
446
404
  })
447
405
 
448
406
  const nextIdentity: UserIdentityRecord = {
@@ -536,10 +494,11 @@ export class InMemoryAuthStorage implements AuthStorage {
536
494
  return { invitation, memberships }
537
495
  }
538
496
 
539
- private applyManualGroups(input: {
497
+ private applyGroups(input: {
540
498
  readonly completedAt: Date
541
499
  readonly groupIds: readonly string[]
542
500
  readonly projectId: string
501
+ readonly source: GroupMembershipSource
543
502
  readonly userId: string
544
503
  readonly existing: readonly GroupMembershipRecord[]
545
504
  }): readonly GroupMembershipRecord[] {
@@ -550,13 +509,40 @@ export class InMemoryAuthStorage implements AuthStorage {
550
509
  projectId: input.projectId,
551
510
  userId: input.userId,
552
511
  groupId,
553
- source: "manual",
512
+ source: input.source,
554
513
  createdAt: input.completedAt,
555
514
  })
556
515
  )
557
516
  }
558
517
  return memberships
559
518
  }
519
+ // Directory memberships become exactly `groupIds`. A group the user already holds from another
520
+ // source keeps that source, and memberships from other sources are never removed.
521
+ private syncDirectoryGroups(input: {
522
+ readonly completedAt: Date
523
+ readonly groupIds?: readonly string[]
524
+ readonly projectId: string
525
+ readonly userId: string
526
+ readonly existing: readonly GroupMembershipRecord[]
527
+ }): readonly GroupMembershipRecord[] {
528
+ if (!input.groupIds) {
529
+ return input.existing
530
+ }
531
+
532
+ const groupIds = normalizeGroupIds(input.groupIds)
533
+ const stale = [...this.state.groupMemberships.values()].filter(
534
+ (membership) =>
535
+ membership.projectId === input.projectId &&
536
+ membership.userId === input.userId &&
537
+ membership.source === "directory" &&
538
+ !groupIds.includes(membership.groupId)
539
+ )
540
+ for (const membership of stale) {
541
+ removeGroupMembershipRecord(this.state, membership)
542
+ }
543
+
544
+ return this.applyGroups({ ...input, groupIds, source: "directory" })
545
+ }
560
546
 
561
547
  private createSignInSession(input: {
562
548
  readonly projectId: string
@@ -602,16 +588,6 @@ function restoreMap<TKey, TValue>(target: Map<TKey, TValue>, snapshot: Map<TKey,
602
588
  }
603
589
  }
604
590
 
605
- function hasActiveUsers(state: AuthStorageState, projectId: string): boolean {
606
- for (const user of state.users.values()) {
607
- if (user.projectId === projectId && user.status === "active") {
608
- return true
609
- }
610
- }
611
-
612
- return false
613
- }
614
-
615
591
  function assertSignInSessionAudience(
616
592
  projectId: string,
617
593
  sessionAudience: string,
@@ -45,8 +45,6 @@ export class InMemoryAuthDeviceAuthorizationStore implements AuthDeviceAuthoriza
45
45
  deviceCodeHash: assertNonEmpty(input.deviceCodeHash, "Device code hash"),
46
46
  userCode: assertNonEmpty(input.userCode, "User code"),
47
47
  clientName: assertNonEmpty(input.clientName, "Client name"),
48
- tokenName: assertNonEmpty(input.tokenName, "Token name"),
49
- tokenExpiresAt: new Date(input.tokenExpiresAt),
50
48
  status: "pending",
51
49
  createdAt: new Date(input.createdAt),
52
50
  expiresAt: new Date(input.expiresAt),
@@ -1,6 +1,11 @@
1
1
  import type { AuthSessionAudience } from "../../../auth/audience"
2
2
  import { AuthStorageError } from "../errors"
3
- import type { AuthSessionStore, CreateAuthSessionInput, SessionRecord } from "../types"
3
+ import type {
4
+ AuthSessionStore,
5
+ CreateAuthSessionInput,
6
+ RotateSessionRefreshTokenResult,
7
+ SessionRecord,
8
+ } from "../types"
4
9
  import type { AuthStorageState } from "./shared"
5
10
  import {
6
11
  cloneDate,
@@ -73,6 +78,7 @@ export class InMemoryAuthSessionStore implements AuthSessionStore {
73
78
  const session = this.state.sessions.get(sessionKey(params.projectId, params.id))
74
79
  if (
75
80
  !session ||
81
+ session.bearer ||
76
82
  session.audience !== params.audience ||
77
83
  session.tokenHash !== params.tokenHash ||
78
84
  !isActiveSession(session, params.now)
@@ -83,6 +89,67 @@ export class InMemoryAuthSessionStore implements AuthSessionStore {
83
89
  return cloneRecord(session)
84
90
  }
85
91
 
92
+ async findValidByAccessTokenHash(params: {
93
+ readonly projectId: string
94
+ readonly id: string
95
+ readonly tokenHash: string
96
+ readonly now: Date
97
+ }): Promise<SessionRecord | null> {
98
+ const session = this.state.sessions.get(sessionKey(params.projectId, params.id))
99
+ if (
100
+ !session?.bearer ||
101
+ session.tokenHash !== params.tokenHash ||
102
+ session.bearer.accessExpiresAt <= params.now ||
103
+ !isActiveSession(session, params.now)
104
+ ) {
105
+ return null
106
+ }
107
+
108
+ return cloneRecord(session)
109
+ }
110
+
111
+ async rotateRefreshToken(
112
+ params: Parameters<AuthSessionStore["rotateRefreshToken"]>[0]
113
+ ): Promise<RotateSessionRefreshTokenResult> {
114
+ const key = sessionKey(params.projectId, params.id)
115
+ const session = this.state.sessions.get(key)
116
+ if (!session?.bearer || !isActiveSession(session, params.now)) {
117
+ return { status: "invalid" }
118
+ }
119
+
120
+ const { bearer } = session
121
+ const replacedRecently =
122
+ bearer.previousRefreshTokenHash === params.refreshTokenHash &&
123
+ bearer.refreshedAt !== undefined &&
124
+ params.now.getTime() - bearer.refreshedAt.getTime() <= params.reuseGraceMs
125
+ if (bearer.refreshTokenHash !== params.refreshTokenHash && !replacedRecently) {
126
+ if (bearer.previousRefreshTokenHash !== params.refreshTokenHash) {
127
+ return { status: "invalid" }
128
+ }
129
+ this.state.sessions.set(key, cloneRecord({ ...session, revokedAt: cloneDate(params.now) }))
130
+ return { status: "reused" }
131
+ }
132
+
133
+ const requestedExpiresAt = session.absoluteExpiresAt
134
+ ? new Date(Math.min(params.next.expiresAt.getTime(), session.absoluteExpiresAt.getTime()))
135
+ : params.next.expiresAt
136
+ const next: SessionRecord = {
137
+ ...session,
138
+ tokenHash: params.next.tokenHash,
139
+ expiresAt: new Date(Math.max(session.expiresAt.getTime(), requestedExpiresAt.getTime())),
140
+ lastSeenAt: cloneDate(params.now),
141
+ bearer: {
142
+ clientName: bearer.clientName,
143
+ accessExpiresAt: cloneDate(params.next.accessExpiresAt),
144
+ refreshTokenHash: params.next.refreshTokenHash,
145
+ previousRefreshTokenHash: bearer.refreshTokenHash,
146
+ refreshedAt: cloneDate(params.now),
147
+ },
148
+ }
149
+ this.state.sessions.set(key, cloneRecord(next))
150
+ return { status: "rotated", session: cloneRecord(next) }
151
+ }
152
+
86
153
  async renewIfValid(params: {
87
154
  readonly projectId: string
88
155
  readonly id: string
@@ -95,6 +162,7 @@ export class InMemoryAuthSessionStore implements AuthSessionStore {
95
162
  const session = this.state.sessions.get(key)
96
163
  if (
97
164
  !session ||
165
+ session.bearer ||
98
166
  session.audience !== params.audience ||
99
167
  session.tokenHash !== params.tokenHash ||
100
168
  !isActiveSession(session, params.now)
@@ -320,6 +320,13 @@ export function createSessionRecord(
320
320
  absoluteExpiresAt: input.absoluteExpiresAt ? cloneDate(input.absoluteExpiresAt) : undefined,
321
321
  userAgent: input.userAgent,
322
322
  ipAddress: input.ipAddress,
323
+ bearer: input.bearer
324
+ ? {
325
+ clientName: assertNonEmpty(input.bearer.clientName, "Session client name"),
326
+ accessExpiresAt: cloneDate(input.bearer.accessExpiresAt),
327
+ refreshTokenHash: assertNonEmpty(input.bearer.refreshTokenHash, "Refresh token hash"),
328
+ }
329
+ : undefined,
323
330
  }
324
331
 
325
332
  state.sessions.set(sessionKey(projectId, id), cloneRecord(session))
@@ -398,11 +405,11 @@ export function createAccessTokenRecord(
398
405
  const id = assertNonEmpty(input.id, "Access token id")
399
406
  const projectId = assertNonEmpty(input.projectId, "Project id")
400
407
  const name = assertNonEmpty(input.name, "Access token name")
401
- const subjectId = assertNonEmpty(input.subjectId, "Access token subject id")
408
+ const subjectId = assertNonEmpty(input.subject.id, "Access token subject id")
402
409
  const tokenHash = assertNonEmpty(input.tokenHash, "Access token hash")
403
410
 
404
- assertAccessTokenSubject(input.kind, input.subjectType)
405
- assertAccessTokenSubjectExists(state, projectId, input.subjectType, subjectId)
411
+ assertAccessTokenSubject(input.kind, input.subject.type)
412
+ assertAccessTokenSubjectExists(state, projectId, input.subject.type, subjectId)
406
413
 
407
414
  const key = accessTokenKey(projectId, id)
408
415
  if (state.accessTokens.has(key)) {
@@ -417,8 +424,7 @@ export function createAccessTokenRecord(
417
424
  projectId,
418
425
  name,
419
426
  kind: input.kind,
420
- subjectType: input.subjectType,
421
- subjectId,
427
+ subject: { type: input.subject.type, id: subjectId },
422
428
  tokenHash,
423
429
  groupIds: normalizeOptionalGroupIds(input.groupIds),
424
430
  createdByPrincipal: input.createdByPrincipal,
@@ -484,7 +490,7 @@ export function removeGroupMembershipRecord(
484
490
 
485
491
  function assertAccessTokenSubject(
486
492
  kind: CreateAuthAccessTokenInput["kind"],
487
- subjectType: CreateAuthAccessTokenInput["subjectType"]
493
+ subjectType: CreateAuthAccessTokenInput["subject"]["type"]
488
494
  ): void {
489
495
  if (
490
496
  (kind === "personal" && subjectType === "user") ||
@@ -502,7 +508,7 @@ function assertAccessTokenSubject(
502
508
  function assertAccessTokenSubjectExists(
503
509
  state: AuthStorageState,
504
510
  projectId: string,
505
- subjectType: CreateAuthAccessTokenInput["subjectType"],
511
+ subjectType: CreateAuthAccessTokenInput["subject"]["type"],
506
512
  subjectId: string
507
513
  ): void {
508
514
  if (subjectType === "user") {
@@ -3,7 +3,6 @@ export { AuthStorageError } from "./errors"
3
3
  export { InMemoryAuthStorage } from "./in-memory"
4
4
  export type {
5
5
  AccessTokenRecord,
6
- AccessTokenSubjectType,
7
6
  AuthAccessTokenStore,
8
7
  AuthDeviceAuthorizationStore,
9
8
  AuthGroupMembershipStore,
@@ -16,6 +15,7 @@ export type {
16
15
  AuthStorage,
17
16
  AuthUserIdentityStore,
18
17
  AuthUserStore,
18
+ BearerSessionState,
19
19
  CompleteAuthSessionInput,
20
20
  CompleteDeviceAuthorizationInput,
21
21
  CompleteDeviceAuthorizationResult,
@@ -47,6 +47,7 @@ export type {
47
47
  MagicLinkRecord,
48
48
  OidcAuthorizationAttemptRecord,
49
49
  ReconcileAuthServiceAccountGroupMembershipsInput,
50
+ RotateSessionRefreshTokenResult,
50
51
  ServiceAccountGroupMembershipRecord,
51
52
  ServiceAccountRecord,
52
53
  ServiceAccountStatus,