@sixb/core 0.1.12 → 0.1.13

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 (527) 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/index.d.ts +3 -2
  26. package/dist/auth/index.d.ts.map +1 -1
  27. package/dist/auth/index.js +14 -8
  28. package/dist/auth/index.js.map +1 -1
  29. package/dist/auth/runtime.d.ts +58 -41
  30. package/dist/auth/runtime.d.ts.map +1 -1
  31. package/dist/auth/session-cache.d.ts +10 -3
  32. package/dist/auth/session-cache.d.ts.map +1 -1
  33. package/dist/auth/sessions.d.ts +12 -0
  34. package/dist/auth/sessions.d.ts.map +1 -1
  35. package/dist/auth/strategy.js +1 -1
  36. package/dist/auth/types.d.ts +8 -15
  37. package/dist/auth/types.d.ts.map +1 -1
  38. package/dist/authorization/index.js +3 -3
  39. package/dist/bootstrap/index.d.ts +1 -1
  40. package/dist/bootstrap/index.d.ts.map +1 -1
  41. package/dist/bootstrap/index.js +45 -43
  42. package/dist/bootstrap/index.js.map +1 -1
  43. package/dist/bootstrap/ontology-type-manifest.d.ts +8 -0
  44. package/dist/bootstrap/ontology-type-manifest.d.ts.map +1 -1
  45. package/dist/{chunk-q5gz3g2j.js → chunk-0321g649.js} +2 -16
  46. package/dist/{chunk-q5gz3g2j.js.map → chunk-0321g649.js.map} +2 -2
  47. package/dist/{chunk-e1f1sqba.js → chunk-04h4t2b5.js} +3 -3
  48. package/dist/{chunk-y3ev53cq.js → chunk-2fv8sajb.js} +2 -2
  49. package/dist/{chunk-3bnt2wna.js → chunk-2hbhn1ff.js} +1 -1
  50. package/dist/{chunk-eyjzgav0.js → chunk-3nx8vj5a.js} +6 -4
  51. package/dist/chunk-3nx8vj5a.js.map +12 -0
  52. package/dist/{chunk-5tetw4hn.js → chunk-4tnrzqqh.js} +1 -1
  53. package/dist/{chunk-g50nxqs5.js → chunk-63fp9x3q.js} +63 -20
  54. package/dist/chunk-63fp9x3q.js.map +20 -0
  55. package/dist/{chunk-qm535afa.js → chunk-693f3zn8.js} +66 -24
  56. package/dist/chunk-693f3zn8.js.map +15 -0
  57. package/dist/{chunk-7zgecwy1.js → chunk-6x0pqh32.js} +12 -1
  58. package/dist/{chunk-7zgecwy1.js.map → chunk-6x0pqh32.js.map} +3 -3
  59. package/dist/{chunk-6ma8dvzc.js → chunk-898y24dd.js} +49 -42
  60. package/dist/chunk-898y24dd.js.map +15 -0
  61. package/dist/{chunk-7qnvhtcd.js → chunk-91wthfwe.js} +17 -17
  62. package/dist/{chunk-7qnvhtcd.js.map → chunk-91wthfwe.js.map} +5 -5
  63. package/dist/chunk-96yw3pwd.js.map +2 -2
  64. package/dist/{chunk-2cxv584m.js → chunk-9pfw47qx.js} +309 -204
  65. package/dist/chunk-9pfw47qx.js.map +44 -0
  66. package/dist/{chunk-4k53sm9e.js → chunk-a0073121.js} +59 -59
  67. package/dist/{chunk-4k53sm9e.js.map → chunk-a0073121.js.map} +5 -5
  68. package/dist/{chunk-jjwhy3rs.js → chunk-a69fkrtr.js} +5 -5
  69. package/dist/{chunk-y1ahv8b7.js → chunk-bdhfn0ww.js} +1 -1
  70. package/dist/{chunk-4ph94nhd.js → chunk-bep5rrdq.js} +2 -2
  71. package/dist/{chunk-kept9cdd.js → chunk-bxx3ms5t.js} +1 -1
  72. package/dist/{chunk-xtfryrfb.js → chunk-cbn96bve.js} +2 -2
  73. package/dist/{chunk-nzsy3xrp.js → chunk-cvrbhvtr.js} +69 -44
  74. package/dist/{chunk-nzsy3xrp.js.map → chunk-cvrbhvtr.js.map} +7 -7
  75. package/dist/{chunk-vsg0g7h9.js → chunk-d8yes9yx.js} +304 -45
  76. package/dist/chunk-d8yes9yx.js.map +20 -0
  77. package/dist/{chunk-tg4g4zh0.js → chunk-darm7eeg.js} +9 -9
  78. package/dist/{chunk-tg4g4zh0.js.map → chunk-darm7eeg.js.map} +3 -3
  79. package/dist/{chunk-vpxss818.js → chunk-drz59ve0.js} +9 -8
  80. package/dist/chunk-drz59ve0.js.map +10 -0
  81. package/dist/{chunk-7c2g3sz9.js → chunk-dsfw1bdr.js} +5 -5
  82. package/dist/{chunk-7c2g3sz9.js.map → chunk-dsfw1bdr.js.map} +1 -1
  83. package/dist/{chunk-p6r1ex7t.js → chunk-ffwvdgk1.js} +5 -13
  84. package/dist/chunk-ffwvdgk1.js.map +10 -0
  85. package/dist/{chunk-r5zythxp.js → chunk-gbcrz0gr.js} +7 -7
  86. package/dist/{chunk-ybhz3j9g.js → chunk-gc226ten.js} +104 -148
  87. package/dist/{chunk-ybhz3j9g.js.map → chunk-gc226ten.js.map} +7 -8
  88. package/dist/{chunk-3ghw2t5q.js → chunk-gmt22nxx.js} +10 -16
  89. package/dist/chunk-gmt22nxx.js.map +10 -0
  90. package/dist/chunk-h89wz928.js +42 -0
  91. package/dist/chunk-h89wz928.js.map +10 -0
  92. package/dist/{chunk-hkw8rykk.js → chunk-ht4a7mjg.js} +74 -4
  93. package/dist/chunk-ht4a7mjg.js.map +15 -0
  94. package/dist/{chunk-t7dzd1tm.js → chunk-jhyc777j.js} +2 -2
  95. package/dist/{chunk-xn686q2e.js → chunk-jmwy25mf.js} +75 -57
  96. package/dist/{chunk-xn686q2e.js.map → chunk-jmwy25mf.js.map} +3 -3
  97. package/dist/{chunk-f06sf7rr.js → chunk-k4kkp58d.js} +18 -5
  98. package/dist/chunk-k4kkp58d.js.map +11 -0
  99. package/dist/{chunk-2h63nrde.js → chunk-ky7zpbtt.js} +5 -7
  100. package/dist/{chunk-2h63nrde.js.map → chunk-ky7zpbtt.js.map} +3 -4
  101. package/dist/chunk-m4ehq95f.js +9 -0
  102. package/dist/chunk-m4ehq95f.js.map +10 -0
  103. package/dist/{chunk-0mza4xb2.js → chunk-m8zkvep1.js} +2 -2
  104. package/dist/{chunk-b768c93y.js → chunk-mf6hwpzh.js} +83 -28
  105. package/dist/{chunk-b768c93y.js.map → chunk-mf6hwpzh.js.map} +5 -5
  106. package/dist/{chunk-yxb4c62x.js → chunk-mr60an99.js} +3 -2
  107. package/dist/{chunk-yxb4c62x.js.map → chunk-mr60an99.js.map} +3 -3
  108. package/dist/chunk-n33e8dz8.js +191 -0
  109. package/dist/chunk-n33e8dz8.js.map +11 -0
  110. package/dist/chunk-rdghfsss.js.map +2 -2
  111. package/dist/{chunk-m7cx05vp.js → chunk-rqtdtm43.js} +126 -59
  112. package/dist/{chunk-m7cx05vp.js.map → chunk-rqtdtm43.js.map} +13 -12
  113. package/dist/{chunk-bbaa1fet.js → chunk-rzcjp5m2.js} +7 -3
  114. package/dist/chunk-rzcjp5m2.js.map +25 -0
  115. package/dist/{chunk-hzw7yv5g.js → chunk-rzkr70gr.js} +5 -1
  116. package/dist/{chunk-hzw7yv5g.js.map → chunk-rzkr70gr.js.map} +3 -3
  117. package/dist/{chunk-sfypc7mk.js → chunk-s24qbp32.js} +4 -4
  118. package/dist/{chunk-axndsymr.js → chunk-tw03bsmb.js} +2 -2
  119. package/dist/{chunk-axndsymr.js.map → chunk-tw03bsmb.js.map} +3 -3
  120. package/dist/{chunk-y0v18c2j.js → chunk-vef6qa14.js} +2 -2
  121. package/dist/{chunk-gzt6v1ja.js → chunk-vn3yh259.js} +1 -1
  122. package/dist/{chunk-bg2bs62d.js → chunk-w9bp61e7.js} +5 -5
  123. package/dist/{chunk-3h7ctayx.js → chunk-xgptywp0.js} +4 -3
  124. package/dist/chunk-xgptywp0.js.map +11 -0
  125. package/dist/{chunk-gswwr35f.js → chunk-y487ywrv.js} +4 -4
  126. package/dist/{chunk-bet1rb9h.js → chunk-y6vnvayj.js} +1 -1
  127. package/dist/{chunk-x9tmx3fc.js → chunk-ypj2wqtj.js} +3 -6
  128. package/dist/{chunk-x9tmx3fc.js.map → chunk-ypj2wqtj.js.map} +4 -4
  129. package/dist/{chunk-g2gezsg5.js → chunk-z9h698s8.js} +1 -1
  130. package/dist/{chunk-wjffn5m4.js → chunk-zdkcdshk.js} +3 -36
  131. package/dist/{chunk-wjffn5m4.js.map → chunk-zdkcdshk.js.map} +3 -4
  132. package/dist/{chunk-bfjv1adk.js → chunk-znw0zvy4.js} +1 -1
  133. package/dist/edits/types.d.ts +19 -19
  134. package/dist/edits/types.d.ts.map +1 -1
  135. package/dist/error-reporting/internal.js +3 -3
  136. package/dist/errors/catalog.d.ts +4 -0
  137. package/dist/errors/catalog.d.ts.map +1 -1
  138. package/dist/errors/internal.js +1 -1
  139. package/dist/events/envelope.d.ts +0 -12
  140. package/dist/events/envelope.d.ts.map +1 -1
  141. package/dist/events/index.d.ts +1 -1
  142. package/dist/events/index.d.ts.map +1 -1
  143. package/dist/events/index.js +3 -3
  144. package/dist/events/service.d.ts +1 -2
  145. package/dist/events/service.d.ts.map +1 -1
  146. package/dist/events/toStoredEvent.d.ts +1 -2
  147. package/dist/events/toStoredEvent.d.ts.map +1 -1
  148. package/dist/events/types/index.d.ts +2 -1
  149. package/dist/events/types/index.d.ts.map +1 -1
  150. package/dist/execution/agent.d.ts +1 -2
  151. package/dist/execution/agent.d.ts.map +1 -1
  152. package/dist/execution/agent.js +39 -37
  153. package/dist/execution/agent.js.map +1 -1
  154. package/dist/execution/authorized-object-reader.d.ts.map +1 -1
  155. package/dist/execution/primitive.d.ts +1 -2
  156. package/dist/execution/primitive.d.ts.map +1 -1
  157. package/dist/execution/primitive.js +38 -36
  158. package/dist/execution/primitive.js.map +3 -3
  159. package/dist/execution/request.d.ts +1 -2
  160. package/dist/execution/request.d.ts.map +1 -1
  161. package/dist/execution/request.js +39 -37
  162. package/dist/execution/request.js.map +3 -3
  163. package/dist/index.d.ts +6 -6
  164. package/dist/index.d.ts.map +1 -1
  165. package/dist/index.js +56 -50
  166. package/dist/index.js.map +1 -1
  167. package/dist/maintenance/ontology-maintenance.d.ts +11 -1
  168. package/dist/maintenance/ontology-maintenance.d.ts.map +1 -1
  169. package/dist/materialization/errors.d.ts +3 -1
  170. package/dist/materialization/errors.d.ts.map +1 -1
  171. package/dist/materialization/events.d.ts +27 -2
  172. package/dist/materialization/events.d.ts.map +1 -1
  173. package/dist/materializer/edits/commit.d.ts.map +1 -1
  174. package/dist/materializer/edits/operations.d.ts +2 -1
  175. package/dist/materializer/edits/operations.d.ts.map +1 -1
  176. package/dist/materializer/edits/plan.d.ts +2 -2
  177. package/dist/materializer/edits/plan.d.ts.map +1 -1
  178. package/dist/materializer/edits/user-refs.d.ts +30 -0
  179. package/dist/materializer/edits/user-refs.d.ts.map +1 -0
  180. package/dist/materializer/effective/build-events.d.ts +2 -2
  181. package/dist/materializer/effective/build-events.d.ts.map +1 -1
  182. package/dist/materializer/execution/scope.d.ts +11 -3
  183. package/dist/materializer/execution/scope.d.ts.map +1 -1
  184. package/dist/materializer/index.js +23 -21
  185. package/dist/materializer/index.js.map +1 -1
  186. package/dist/materializer/projections/replacement-plan.d.ts +2 -0
  187. package/dist/materializer/projections/replacement-plan.d.ts.map +1 -1
  188. package/dist/materializer/telemetry/plan.d.ts +2 -2
  189. package/dist/materializer/telemetry/plan.d.ts.map +1 -1
  190. package/dist/models/execution/index.js +23 -21
  191. package/dist/models/execution/index.js.map +1 -1
  192. package/dist/models/index.js +1 -1
  193. package/dist/objects/execution.d.ts +21 -27
  194. package/dist/objects/execution.d.ts.map +1 -1
  195. package/dist/objects/index.js +28 -26
  196. package/dist/objects/index.js.map +1 -1
  197. package/dist/objects/query/executor.d.ts.map +1 -1
  198. package/dist/objects/query/index.js +27 -25
  199. package/dist/objects/query/index.js.map +1 -1
  200. package/dist/objects/query/ir.d.ts +8 -1
  201. package/dist/objects/query/ir.d.ts.map +1 -1
  202. package/dist/objects/query/scalar-values.d.ts.map +1 -1
  203. package/dist/objects/query/validate.d.ts.map +1 -1
  204. package/dist/objects/sdk/object-handle.d.ts +1 -2
  205. package/dist/objects/sdk/object-handle.d.ts.map +1 -1
  206. package/dist/objects/sdk/object-set.d.ts +2 -3
  207. package/dist/objects/sdk/object-set.d.ts.map +1 -1
  208. package/dist/objects/sdk/query-builder.d.ts +8 -10
  209. package/dist/objects/sdk/query-builder.d.ts.map +1 -1
  210. package/dist/objects/sdk/telemetry-channel.d.ts +1 -2
  211. package/dist/objects/sdk/telemetry-channel.d.ts.map +1 -1
  212. package/dist/objects/sdk/where.d.ts +2 -3
  213. package/dist/objects/sdk/where.d.ts.map +1 -1
  214. package/dist/ontology/builders.d.ts +11 -10
  215. package/dist/ontology/builders.d.ts.map +1 -1
  216. package/dist/ontology/index.d.ts +4 -2
  217. package/dist/ontology/index.d.ts.map +1 -1
  218. package/dist/ontology/index.js +6 -4
  219. package/dist/ontology/index.js.map +1 -1
  220. package/dist/ontology/inference/index.d.ts +34 -22
  221. package/dist/ontology/inference/index.d.ts.map +1 -1
  222. package/dist/ontology/internal.d.ts +1 -0
  223. package/dist/ontology/internal.d.ts.map +1 -1
  224. package/dist/ontology/internal.js +9 -7
  225. package/dist/ontology/internal.js.map +1 -1
  226. package/dist/ontology/primitives.d.ts +38 -0
  227. package/dist/ontology/primitives.d.ts.map +1 -0
  228. package/dist/ontology/query-capabilities.d.ts +38 -0
  229. package/dist/ontology/query-capabilities.d.ts.map +1 -0
  230. package/dist/ontology/refs.d.ts +23 -2
  231. package/dist/ontology/refs.d.ts.map +1 -1
  232. package/dist/ontology/registered.d.ts +16 -0
  233. package/dist/ontology/registered.d.ts.map +1 -0
  234. package/dist/ontology/registry.d.ts.map +1 -1
  235. package/dist/ontology/tokens.d.ts +35 -1
  236. package/dist/ontology/tokens.d.ts.map +1 -1
  237. package/dist/ontology/types.d.ts +18 -4
  238. package/dist/ontology/types.d.ts.map +1 -1
  239. package/dist/ontology/user-ref.d.ts +35 -0
  240. package/dist/ontology/user-ref.d.ts.map +1 -0
  241. package/dist/ontology/validation/definition.d.ts.map +1 -1
  242. package/dist/ontology/validation/index.d.ts +1 -1
  243. package/dist/ontology/validation/index.d.ts.map +1 -1
  244. package/dist/ontology/validation/normalize.d.ts.map +1 -1
  245. package/dist/ontology/validation/properties.d.ts +6 -1
  246. package/dist/ontology/validation/properties.d.ts.map +1 -1
  247. package/dist/ontology/validation/query.d.ts.map +1 -1
  248. package/dist/ontology/validation/schema.d.ts.map +1 -1
  249. package/dist/pipelines/index.js +26 -24
  250. package/dist/pipelines/index.js.map +1 -1
  251. package/dist/predicates/types.d.ts +53 -3
  252. package/dist/predicates/types.d.ts.map +1 -1
  253. package/dist/projections/builders.d.ts +19 -1
  254. package/dist/projections/builders.d.ts.map +1 -1
  255. package/dist/projections/internal.js +23 -21
  256. package/dist/projections/internal.js.map +1 -1
  257. package/dist/projections/validation.d.ts.map +1 -1
  258. package/dist/query.js +2 -2
  259. package/dist/queues/in-memory.d.ts +1 -1
  260. package/dist/queues/in-memory.d.ts.map +1 -1
  261. package/dist/runtime/create.d.ts +1 -1
  262. package/dist/runtime/create.d.ts.map +1 -1
  263. package/dist/runtime/host.d.ts +5 -5
  264. package/dist/runtime/host.d.ts.map +1 -1
  265. package/dist/runtime/index.d.ts +1 -1
  266. package/dist/runtime/index.d.ts.map +1 -1
  267. package/dist/runtime/internal.js +27 -25
  268. package/dist/runtime/internal.js.map +1 -1
  269. package/dist/runtime/sixb.d.ts +5 -5
  270. package/dist/runtime/sixb.d.ts.map +1 -1
  271. package/dist/runtime/types.d.ts +171 -188
  272. package/dist/runtime/types.d.ts.map +1 -1
  273. package/dist/sandboxes/index.js +5 -5
  274. package/dist/sandboxes/sandbox.d.ts +4 -1
  275. package/dist/sandboxes/sandbox.d.ts.map +1 -1
  276. package/dist/shared/params/types.d.ts +4 -3
  277. package/dist/shared/params/types.d.ts.map +1 -1
  278. package/dist/shared/params/user-refs.d.ts +19 -0
  279. package/dist/shared/params/user-refs.d.ts.map +1 -0
  280. package/dist/shares/compiler.d.ts.map +1 -1
  281. package/dist/shares/internal.js +24 -22
  282. package/dist/shares/internal.js.map +2 -2
  283. package/dist/storage/action-runs/failure.js +2 -2
  284. package/dist/storage/action-runs/types.d.ts +1 -1
  285. package/dist/storage/action-runs/types.d.ts.map +1 -1
  286. package/dist/storage/agents/provider.js +1 -1
  287. package/dist/storage/ai-limits/enforcement.js +2 -2
  288. package/dist/storage/auth/in-memory/access-tokens.d.ts.map +1 -1
  289. package/dist/storage/auth/in-memory/auth-storage.d.ts.map +1 -1
  290. package/dist/storage/auth/in-memory/device-authorizations.d.ts.map +1 -1
  291. package/dist/storage/auth/in-memory/sessions.d.ts +8 -1
  292. package/dist/storage/auth/in-memory/sessions.d.ts.map +1 -1
  293. package/dist/storage/auth/in-memory/shared.d.ts.map +1 -1
  294. package/dist/storage/auth/index.d.ts +1 -1
  295. package/dist/storage/auth/index.d.ts.map +1 -1
  296. package/dist/storage/auth/types.d.ts +62 -13
  297. package/dist/storage/auth/types.d.ts.map +1 -1
  298. package/dist/storage/connector-connections/provider.js +1 -1
  299. package/dist/storage/executions/provider.js +1 -1
  300. package/dist/storage/file-upload-sessions/in-memory.d.ts +9 -18
  301. package/dist/storage/file-upload-sessions/in-memory.d.ts.map +1 -1
  302. package/dist/storage/file-upload-sessions/index.d.ts +1 -1
  303. package/dist/storage/file-upload-sessions/index.d.ts.map +1 -1
  304. package/dist/storage/file-upload-sessions/provider.d.ts +52 -0
  305. package/dist/storage/file-upload-sessions/provider.d.ts.map +1 -0
  306. package/dist/storage/file-upload-sessions/provider.js +24 -0
  307. package/dist/storage/file-upload-sessions/provider.js.map +9 -0
  308. package/dist/storage/file-upload-sessions/types.d.ts +19 -1
  309. package/dist/storage/file-upload-sessions/types.d.ts.map +1 -1
  310. package/dist/storage/file-upload-sessions/utils.d.ts +8 -2
  311. package/dist/storage/file-upload-sessions/utils.d.ts.map +1 -1
  312. package/dist/storage/index.d.ts +3 -3
  313. package/dist/storage/index.d.ts.map +1 -1
  314. package/dist/storage/index.js +29 -25
  315. package/dist/storage/index.js.map +1 -1
  316. package/dist/storage/internal.js +11 -9
  317. package/dist/storage/internal.js.map +1 -1
  318. package/dist/storage/objects/in-memory/query.d.ts.map +1 -1
  319. package/dist/storage/ontology/commits.d.ts +6 -2
  320. package/dist/storage/ontology/commits.d.ts.map +1 -1
  321. package/dist/storage/ontology/in-memory/materializations.d.ts.map +1 -1
  322. package/dist/storage/ontology/provider-work.d.ts.map +1 -1
  323. package/dist/storage/ontology/provider.d.ts +14 -1
  324. package/dist/storage/ontology/provider.d.ts.map +1 -1
  325. package/dist/storage/ontology/provider.js +8 -2
  326. package/dist/storage/ontology/provider.js.map +1 -1
  327. package/dist/storage/operation-scope.d.ts.map +1 -1
  328. package/dist/storage/operation-scope.js +1 -1
  329. package/dist/storage/projection-runs/provider.js +2 -2
  330. package/dist/storage/types.d.ts +1 -1
  331. package/dist/storage/types.d.ts.map +1 -1
  332. package/dist/storage/workflow-interventions/index.d.ts +1 -1
  333. package/dist/storage/workflow-interventions/index.d.ts.map +1 -1
  334. package/dist/storage/workflow-interventions/types.d.ts +5 -8
  335. package/dist/storage/workflow-interventions/types.d.ts.map +1 -1
  336. package/dist/storage/workflow-runs/provider.js +8 -8
  337. package/dist/syncs/index.js +27 -25
  338. package/dist/syncs/index.js.map +1 -1
  339. package/dist/testing/action-execution.d.ts +4 -0
  340. package/dist/testing/action-execution.d.ts.map +1 -1
  341. package/dist/testing/auth-storage-contract.d.ts.map +1 -1
  342. package/dist/testing/execution.d.ts +1 -2
  343. package/dist/testing/execution.d.ts.map +1 -1
  344. package/dist/testing/file-upload-session-storage-contract.d.ts +12 -0
  345. package/dist/testing/file-upload-session-storage-contract.d.ts.map +1 -0
  346. package/dist/testing/index.d.ts +2 -0
  347. package/dist/testing/index.d.ts.map +1 -1
  348. package/dist/testing/index.js +1951 -1242
  349. package/dist/testing/index.js.map +15 -13
  350. package/dist/testing/materializer-storage-contract.d.ts.map +1 -1
  351. package/dist/testing/object-query-contract.d.ts.map +1 -1
  352. package/dist/testing/ontology-contract-fixture.d.ts +8 -0
  353. package/dist/testing/ontology-contract-fixture.d.ts.map +1 -1
  354. package/dist/testing/ontology-storage-contract.d.ts.map +1 -1
  355. package/dist/testing/sandboxes-contract.d.ts.map +1 -1
  356. package/dist/testing/workflow-intervention-storage-contract.d.ts +8 -0
  357. package/dist/testing/workflow-intervention-storage-contract.d.ts.map +1 -0
  358. package/dist/webhooks/internal.js +24 -22
  359. package/dist/webhooks/internal.js.map +2 -2
  360. package/dist/webhooks/types.d.ts +2 -2
  361. package/dist/webhooks/types.d.ts.map +1 -1
  362. package/dist/workers/index.js +1 -1
  363. package/dist/workflows/index.js +42 -40
  364. package/dist/workflows/index.js.map +1 -1
  365. package/dist/workflows/run-dispatch.d.ts.map +1 -1
  366. package/dist/workflows/types.d.ts +2 -2
  367. package/dist/workflows/types.d.ts.map +1 -1
  368. package/package.json +7 -1
  369. package/src/actions/index.ts +0 -3
  370. package/src/actions/read-facade.ts +102 -62
  371. package/src/actions/request.ts +13 -0
  372. package/src/actions/run-dispatch.ts +3 -0
  373. package/src/actions/types/context.ts +17 -65
  374. package/src/actions/types/params.ts +2 -1
  375. package/src/agents/authority.ts +1 -1
  376. package/src/assert-never.ts +7 -0
  377. package/src/auth/client-address.ts +12 -0
  378. package/src/auth/csrf.ts +14 -5
  379. package/src/auth/index.ts +3 -2
  380. package/src/auth/runtime.ts +299 -277
  381. package/src/auth/session-cache.ts +18 -6
  382. package/src/auth/sessions.ts +30 -0
  383. package/src/auth/types.ts +7 -17
  384. package/src/bootstrap/index.ts +1 -0
  385. package/src/bootstrap/ontology-type-manifest.ts +112 -60
  386. package/src/edits/types.ts +47 -63
  387. package/src/errors/catalog.ts +4 -0
  388. package/src/events/envelope.ts +0 -13
  389. package/src/events/index.ts +1 -1
  390. package/src/events/service.ts +1 -11
  391. package/src/events/toStoredEvent.ts +1 -3
  392. package/src/events/types/index.ts +1 -1
  393. package/src/execution/agent.ts +1 -2
  394. package/src/execution/authorized-object-reader.ts +5 -7
  395. package/src/execution/primitive.ts +1 -2
  396. package/src/execution/request.ts +1 -2
  397. package/src/index.ts +8 -7
  398. package/src/maintenance/ontology-maintenance.ts +77 -1
  399. package/src/materialization/errors.ts +2 -0
  400. package/src/materialization/events.ts +27 -2
  401. package/src/materializer/README.md +2 -0
  402. package/src/materializer/edits/commit.ts +21 -12
  403. package/src/materializer/edits/operations.ts +32 -4
  404. package/src/materializer/edits/plan.ts +4 -5
  405. package/src/materializer/edits/user-refs.ts +115 -0
  406. package/src/materializer/effective/build-events.ts +4 -5
  407. package/src/materializer/execution/scope.ts +40 -7
  408. package/src/materializer/projections/replace.ts +2 -0
  409. package/src/materializer/projections/replacement-plan.ts +4 -0
  410. package/src/materializer/telemetry/append.ts +4 -12
  411. package/src/materializer/telemetry/plan.ts +4 -5
  412. package/src/objects/execution.ts +33 -62
  413. package/src/objects/query/executor.ts +12 -3
  414. package/src/objects/query/ir.ts +7 -0
  415. package/src/objects/query/planner.ts +1 -0
  416. package/src/objects/query/scalar-values.ts +19 -0
  417. package/src/objects/query/validate.ts +55 -44
  418. package/src/objects/sdk/object-handle.ts +8 -8
  419. package/src/objects/sdk/object-set.ts +8 -15
  420. package/src/objects/sdk/query-builder.ts +59 -71
  421. package/src/objects/sdk/telemetry-channel.ts +6 -7
  422. package/src/objects/sdk/where.ts +6 -13
  423. package/src/ontology/builders.ts +15 -11
  424. package/src/ontology/index.ts +4 -0
  425. package/src/ontology/inference/index.ts +56 -36
  426. package/src/ontology/internal.ts +1 -0
  427. package/src/ontology/json-schema.ts +12 -0
  428. package/src/ontology/primitives.ts +91 -0
  429. package/src/ontology/query-capabilities.ts +136 -0
  430. package/src/ontology/refs.ts +33 -6
  431. package/src/ontology/registered.ts +22 -0
  432. package/src/ontology/registry.ts +6 -3
  433. package/src/ontology/tokens.ts +41 -2
  434. package/src/ontology/types.ts +19 -3
  435. package/src/ontology/user-ref.ts +120 -0
  436. package/src/ontology/validation/definition.ts +2 -13
  437. package/src/ontology/validation/index.ts +1 -0
  438. package/src/ontology/validation/normalize.ts +39 -3
  439. package/src/ontology/validation/properties.ts +95 -19
  440. package/src/ontology/validation/query.ts +11 -42
  441. package/src/ontology/validation/schema.ts +16 -0
  442. package/src/predicates/types.ts +43 -33
  443. package/src/projections/builders.ts +24 -3
  444. package/src/projections/validation.ts +15 -1
  445. package/src/runtime/create.ts +2 -2
  446. package/src/runtime/host.ts +10 -12
  447. package/src/runtime/index.ts +3 -2
  448. package/src/runtime/sixb.ts +13 -23
  449. package/src/runtime/types.ts +277 -479
  450. package/src/sandboxes/sandbox.ts +4 -1
  451. package/src/shared/params/types.ts +4 -3
  452. package/src/shared/params/user-refs.ts +48 -0
  453. package/src/shares/compiler.ts +6 -16
  454. package/src/storage/action-runs/types.ts +1 -0
  455. package/src/storage/auth/in-memory/access-tokens.ts +5 -2
  456. package/src/storage/auth/in-memory/auth-storage.ts +5 -8
  457. package/src/storage/auth/in-memory/device-authorizations.ts +0 -2
  458. package/src/storage/auth/in-memory/sessions.ts +69 -1
  459. package/src/storage/auth/in-memory/shared.ts +13 -7
  460. package/src/storage/auth/index.ts +2 -1
  461. package/src/storage/auth/types.ts +57 -13
  462. package/src/storage/executions/validation.ts +1 -1
  463. package/src/storage/file-upload-sessions/in-memory.ts +64 -113
  464. package/src/storage/file-upload-sessions/index.ts +1 -0
  465. package/src/storage/file-upload-sessions/provider.ts +258 -0
  466. package/src/storage/file-upload-sessions/types.ts +20 -1
  467. package/src/storage/file-upload-sessions/utils.ts +25 -9
  468. package/src/storage/index.ts +3 -2
  469. package/src/storage/objects/in-memory/query.ts +13 -3
  470. package/src/storage/ontology/commits.ts +6 -2
  471. package/src/storage/ontology/in-memory/materializations.ts +6 -34
  472. package/src/storage/ontology/provider-header-validation.ts +57 -0
  473. package/src/storage/ontology/provider-work.ts +15 -3
  474. package/src/storage/ontology/provider.ts +59 -1
  475. package/src/storage/operation-scope.ts +1 -0
  476. package/src/storage/types.ts +0 -1
  477. package/src/storage/workflow-interventions/index.ts +0 -1
  478. package/src/storage/workflow-interventions/types.ts +5 -9
  479. package/src/testing/action-execution.ts +13 -3
  480. package/src/testing/auth-storage-contract.ts +149 -62
  481. package/src/testing/execution-storage-contract.ts +1 -2
  482. package/src/testing/execution.ts +4 -7
  483. package/src/testing/file-upload-session-storage-contract.ts +335 -0
  484. package/src/testing/index.ts +8 -0
  485. package/src/testing/materializer-storage-contract.ts +86 -4
  486. package/src/testing/object-query-contract.ts +121 -2
  487. package/src/testing/ontology-contract-fixture.ts +23 -3
  488. package/src/testing/ontology-storage-contract.ts +58 -0
  489. package/src/testing/sandboxes-contract.ts +27 -0
  490. package/src/testing/workflow-intervention-storage-contract.ts +203 -0
  491. package/src/webhooks/types.ts +2 -2
  492. package/src/workflows/run-dispatch.ts +12 -1
  493. package/src/workflows/snapshot.ts +16 -7
  494. package/src/workflows/types.ts +2 -2
  495. package/dist/chunk-2cxv584m.js.map +0 -43
  496. package/dist/chunk-3ghw2t5q.js.map +0 -10
  497. package/dist/chunk-3h7ctayx.js.map +0 -11
  498. package/dist/chunk-6ma8dvzc.js.map +0 -15
  499. package/dist/chunk-bbaa1fet.js.map +0 -25
  500. package/dist/chunk-eyjzgav0.js.map +0 -12
  501. package/dist/chunk-f06sf7rr.js.map +0 -11
  502. package/dist/chunk-g50nxqs5.js.map +0 -18
  503. package/dist/chunk-hkw8rykk.js.map +0 -15
  504. package/dist/chunk-p6r1ex7t.js.map +0 -10
  505. package/dist/chunk-qm535afa.js.map +0 -15
  506. package/dist/chunk-vpxss818.js.map +0 -10
  507. package/dist/chunk-vsg0g7h9.js.map +0 -17
  508. /package/dist/{chunk-e1f1sqba.js.map → chunk-04h4t2b5.js.map} +0 -0
  509. /package/dist/{chunk-y3ev53cq.js.map → chunk-2fv8sajb.js.map} +0 -0
  510. /package/dist/{chunk-3bnt2wna.js.map → chunk-2hbhn1ff.js.map} +0 -0
  511. /package/dist/{chunk-5tetw4hn.js.map → chunk-4tnrzqqh.js.map} +0 -0
  512. /package/dist/{chunk-jjwhy3rs.js.map → chunk-a69fkrtr.js.map} +0 -0
  513. /package/dist/{chunk-y1ahv8b7.js.map → chunk-bdhfn0ww.js.map} +0 -0
  514. /package/dist/{chunk-4ph94nhd.js.map → chunk-bep5rrdq.js.map} +0 -0
  515. /package/dist/{chunk-kept9cdd.js.map → chunk-bxx3ms5t.js.map} +0 -0
  516. /package/dist/{chunk-xtfryrfb.js.map → chunk-cbn96bve.js.map} +0 -0
  517. /package/dist/{chunk-r5zythxp.js.map → chunk-gbcrz0gr.js.map} +0 -0
  518. /package/dist/{chunk-t7dzd1tm.js.map → chunk-jhyc777j.js.map} +0 -0
  519. /package/dist/{chunk-0mza4xb2.js.map → chunk-m8zkvep1.js.map} +0 -0
  520. /package/dist/{chunk-sfypc7mk.js.map → chunk-s24qbp32.js.map} +0 -0
  521. /package/dist/{chunk-y0v18c2j.js.map → chunk-vef6qa14.js.map} +0 -0
  522. /package/dist/{chunk-gzt6v1ja.js.map → chunk-vn3yh259.js.map} +0 -0
  523. /package/dist/{chunk-bg2bs62d.js.map → chunk-w9bp61e7.js.map} +0 -0
  524. /package/dist/{chunk-gswwr35f.js.map → chunk-y487ywrv.js.map} +0 -0
  525. /package/dist/{chunk-bet1rb9h.js.map → chunk-y6vnvayj.js.map} +0 -0
  526. /package/dist/{chunk-g2gezsg5.js.map → chunk-z9h698s8.js.map} +0 -0
  527. /package/dist/{chunk-bfjv1adk.js.map → chunk-znw0zvy4.js.map} +0 -0
@@ -1,4 +1,5 @@
1
- import type { EventActor } from "../../events/envelope"
1
+ import type { AuthorizablePrincipal } from "../../execution/types"
2
+ import type { EventExecutor } from "../../materialization/events"
2
3
  import type {
3
4
  EditCommitResult,
4
5
  OntologyMaterializationOrigin,
@@ -57,7 +58,10 @@ interface OntologyCommitFields {
57
58
  readonly requestHash: string
58
59
  readonly executionId: string
59
60
  readonly origin: OntologyMaterializationOrigin
60
- readonly actor?: EventActor
61
+ /** Principal on whose behalf the execution ran, copied from `ExecutionRecord.requestedBy`. */
62
+ readonly requestedBy?: AuthorizablePrincipal
63
+ /** Workload that wrote the commit, copied from its execution. */
64
+ readonly executor: EventExecutor
61
65
  readonly ontologyRevision: string
62
66
  readonly projectionRevision?: string
63
67
  readonly ownershipHash?: string
@@ -64,6 +64,9 @@ import type {
64
64
  import type { OntologyMaterializationEvent } from "../outbox"
65
65
  import {
66
66
  appendScopeSnapshot,
67
+ assertExpectedLinkRevision,
68
+ assertExpectedLinkScopeRevision,
69
+ assertExpectedObjectRevision,
67
70
  assertMaterializationHeader,
68
71
  finishScopeAccumulator,
69
72
  type ProviderMaterializationTransactionLifecycle,
@@ -217,12 +220,7 @@ export class InMemoryOntologyMaterializationStorage implements OntologyMateriali
217
220
  expectedScopeRevisions.get(key) ??
218
221
  this.computeEffectiveLinkScope(input.commit.projectId, expected.source, expected.linkId)
219
222
  expectedScopeRevisions.set(key, current)
220
- if (current.fingerprint !== expected.fingerprint) {
221
- throw new MaterializationConflictError(
222
- "effective-state",
223
- `Expected link scope changed for ${expected.source.objectTypeId}:${expected.source.primaryId}.${expected.linkId}.`
224
- )
225
- }
223
+ assertExpectedLinkScopeRevision(current.fingerprint, expected)
226
224
  }
227
225
  for (const expected of input.expected.points) this.assertPoint(expected, input.commit.projectId)
228
226
 
@@ -1039,20 +1037,7 @@ export class InMemoryOntologyMaterializationStorage implements OntologyMateriali
1039
1037
  expected.ref.objectTypeId,
1040
1038
  expected.ref.primaryId
1041
1039
  )
1042
- if (!expected.exists) {
1043
- if (row)
1044
- throw new MaterializationConflictError(
1045
- "effective-state",
1046
- `Expected object ${objectRefKey(expected.ref)} to be absent.`
1047
- )
1048
- return
1049
- }
1050
- if (!row || row.version !== expected.version || row.lastCommitId !== expected.lastCommitId) {
1051
- throw new MaterializationConflictError(
1052
- "effective-state",
1053
- `Expected object ${objectRefKey(expected.ref)} changed.`
1054
- )
1055
- }
1040
+ assertExpectedObjectRevision(row ?? null, expected)
1056
1041
  }
1057
1042
 
1058
1043
  private async assertLink(expected: ExpectedLinkRevision, projectId: string): Promise<void> {
@@ -1067,20 +1052,7 @@ export class InMemoryOntologyMaterializationStorage implements OntologyMateriali
1067
1052
  targetTypeId: expected.ref.target.objectTypeId,
1068
1053
  targetId: expected.ref.target.primaryId,
1069
1054
  })
1070
- if (!expected.exists) {
1071
- if (row)
1072
- throw new MaterializationConflictError(
1073
- "effective-state",
1074
- `Expected link ${linkRefKey(expected.ref)} to be absent.`
1075
- )
1076
- return
1077
- }
1078
- if (!row || row.lastCommitId !== expected.lastCommitId) {
1079
- throw new MaterializationConflictError(
1080
- "effective-state",
1081
- `Expected link ${linkRefKey(expected.ref)} changed.`
1082
- )
1083
- }
1055
+ assertExpectedLinkRevision(row?.lastCommitId, expected)
1084
1056
  }
1085
1057
 
1086
1058
  private assertPoint(expected: ExpectedTimeseriesPointRevision, projectId: string): void {
@@ -38,6 +38,55 @@ function assertCommitEnvelope(commit: OntologyCommitWrite): void {
38
38
  assertNonblank(commit.executionId, "Materialization execution id")
39
39
  assertNonblank(commit.ontologyRevision, "Materialization ontology revision")
40
40
  assertTimestamp(commit.committedAt, "Materialization commit time")
41
+ assertCommitAttribution(commit)
42
+ }
43
+
44
+ /** Shape only: the Materializer copies both values from the execution it has already verified. */
45
+ function assertCommitAttribution(commit: OntologyCommitWrite): void {
46
+ const { requestedBy, executor } = commit
47
+ if (requestedBy !== undefined) {
48
+ if (requestedBy.type !== "user" && requestedBy.type !== "serviceAccount") {
49
+ invalidCorrelation("Materialization requester must be a user or service account.")
50
+ }
51
+ assertNonblank(requestedBy.id, "Materialization requester id")
52
+ }
53
+
54
+ switch (executor?.type) {
55
+ case "request":
56
+ assertNonblank(executor.requestId, "Materialization executor request id")
57
+ return
58
+ case "primitive":
59
+ assertNonblank(executor.kind, "Materialization executor primitive kind")
60
+ assertNonblank(executor.id, "Materialization executor primitive id")
61
+ assertNonblank(executor.runId, "Materialization executor run id")
62
+ return
63
+ case "agent":
64
+ assertNonblank(executor.runId, "Materialization executor Agent run id")
65
+ return
66
+ case "kernel":
67
+ assertNonblank(executor.operation?.type, "Materialization executor kernel operation")
68
+ return
69
+ default:
70
+ invalidCorrelation("Materialization executor is invalid.")
71
+ }
72
+ }
73
+
74
+ /** A governed or projected write is attributed to exactly the primitive run that owns it. */
75
+ function assertPrimitiveExecutor(
76
+ commit: OntologyCommitWrite,
77
+ kind: "action" | "projection",
78
+ id: string,
79
+ runId: string
80
+ ): void {
81
+ const { executor } = commit
82
+ if (
83
+ executor.type !== "primitive" ||
84
+ executor.kind !== kind ||
85
+ executor.id !== id ||
86
+ executor.runId !== runId
87
+ ) {
88
+ invalidCorrelation(`Commit ${kind} origin does not match its executor.`)
89
+ }
41
90
  }
42
91
 
43
92
  function assertEditCommit(commit: OntologyCommitWrite, intent: EditOntologyCommitIntent): void {
@@ -47,6 +96,7 @@ function assertEditCommit(commit: OntologyCommitWrite, intent: EditOntologyCommi
47
96
  case "action":
48
97
  assertNonblank(commit.origin.actionId, "Action origin action id")
49
98
  assertNonblank(commit.origin.runId, "Action origin run id")
99
+ assertPrimitiveExecutor(commit, "action", commit.origin.actionId, commit.origin.runId)
50
100
  return
51
101
  case "runtime":
52
102
  assertNonblank(commit.origin.requestId, "Runtime origin request id")
@@ -77,6 +127,12 @@ function assertProjectionCommit(
77
127
  ) {
78
128
  invalidCorrelation("Projection commit origin does not match its dataset version.")
79
129
  }
130
+ assertPrimitiveExecutor(
131
+ commit,
132
+ "projection",
133
+ commit.origin.projectionId,
134
+ commit.origin.projectionRunId
135
+ )
80
136
  }
81
137
 
82
138
  function assertTelemetryCommit(
@@ -142,6 +198,7 @@ function assertProjectionTelemetryCommit(
142
198
  if (origin.batchOrdinal !== source.batchOrdinal) {
143
199
  invalidCorrelation("Projection telemetry origin does not match its batch ordinal.")
144
200
  }
201
+ assertPrimitiveExecutor(commit, "projection", origin.projectionId, origin.projectionRunId)
145
202
  }
146
203
 
147
204
  function assertProjectionTelemetryBatch(
@@ -9,6 +9,7 @@ import {
9
9
  objectRefKey,
10
10
  telemetryPointKey,
11
11
  } from "../../materialization/refs"
12
+ import type { OntologyCommitWrite } from "./commits"
12
13
  import {
13
14
  type ExactTimeseriesPointWrite,
14
15
  type MaterializationCardinalityOccupantWorkRecord,
@@ -107,8 +108,7 @@ export function assertWorkRecord(
107
108
  record.draft.commitId !== header.commit.id ||
108
109
  record.draft.occurredAt !== header.commit.committedAt ||
109
110
  stableJsonStringify(record.draft.origin) !== stableJsonStringify(header.commit.origin) ||
110
- stableJsonStringify(record.draft.actor ?? null) !==
111
- stableJsonStringify(header.commit.actor ?? null)
111
+ !sameAttribution(record.draft, header.commit)
112
112
  ) {
113
113
  throw new MaterializationValidationError("Materialization event work is invalid.")
114
114
  }
@@ -312,7 +312,7 @@ function assertOutboxCorrelation(
312
312
  value.availableAt !== commit.committedAt ||
313
313
  value.createdAt !== commit.committedAt ||
314
314
  stableJsonStringify(envelope.origin) !== stableJsonStringify(commit.origin) ||
315
- stableJsonStringify(envelope.actor ?? null) !== stableJsonStringify(commit.actor ?? null) ||
315
+ !sameAttribution(envelope, commit) ||
316
316
  !Number.isSafeInteger(envelope.commitOrdinal) ||
317
317
  envelope.commitOrdinal < 0 ||
318
318
  envelope.id !== createEventId(commit.projectId, commit.id, envelope.commitOrdinal)
@@ -347,3 +347,15 @@ function assertLinkRefEqual(left: OntologyLinkRef, right: OntologyLinkRef, label
347
347
  invalidCorrelation(`${label} row and expected references differ.`)
348
348
  }
349
349
  }
350
+
351
+ /** Events carry exactly the attribution of the commit that produced them. */
352
+ function sameAttribution(
353
+ event: Pick<OntologyCommitWrite, "requestedBy" | "executor">,
354
+ commit: Pick<OntologyCommitWrite, "requestedBy" | "executor">
355
+ ): boolean {
356
+ return (
357
+ stableJsonStringify(event.requestedBy ?? null) ===
358
+ stableJsonStringify(commit.requestedBy ?? null) &&
359
+ stableJsonStringify(event.executor) === stableJsonStringify(commit.executor)
360
+ )
361
+ }
@@ -6,10 +6,13 @@ import {
6
6
  } from "../../materialization/errors"
7
7
  import type {
8
8
  EffectiveLinkSnapshot,
9
+ ExpectedLinkRevision,
10
+ ExpectedLinkScopeRevision,
11
+ ExpectedObjectRevision,
9
12
  OntologyLinkRef,
10
13
  OntologyObjectRef,
11
14
  } from "../../materialization/model"
12
- import { projectionEntityKey } from "../../materialization/refs"
15
+ import { linkRefKey, objectRefKey, projectionEntityKey } from "../../materialization/refs"
13
16
  import type { OntologyCommitOriginSelector, OntologyCommitWrite } from "./commits"
14
17
  import type {
15
18
  FinalizeMaterializationInput,
@@ -485,6 +488,61 @@ export function effectiveConflict(message: string): MaterializationConflictError
485
488
  return new MaterializationConflictError("effective-state", message)
486
489
  }
487
490
 
491
+ /**
492
+ * Rejects a commit whose expected object no longer matches its current effective row.
493
+ *
494
+ * Every provider checks commit expectations through these helpers, so a failed expectation is always
495
+ * the `expectation` conflict kind: an Action run reports exactly that kind as a read conflict.
496
+ */
497
+ export function assertExpectedObjectRevision(
498
+ current: { readonly version: number; readonly lastCommitId: string | null } | null,
499
+ expected: ExpectedObjectRevision
500
+ ): void {
501
+ if (!expected.exists) {
502
+ if (current) {
503
+ throw expectationConflict(`Expected object ${objectRefKey(expected.ref)} to be absent.`)
504
+ }
505
+ return
506
+ }
507
+ if (
508
+ !current ||
509
+ current.version !== expected.version ||
510
+ current.lastCommitId !== expected.lastCommitId
511
+ ) {
512
+ throw expectationConflict(`Expected object ${objectRefKey(expected.ref)} changed.`)
513
+ }
514
+ }
515
+
516
+ /** `currentLastCommitId` is `undefined` when the link has no effective row. */
517
+ export function assertExpectedLinkRevision(
518
+ currentLastCommitId: string | null | undefined,
519
+ expected: ExpectedLinkRevision
520
+ ): void {
521
+ if (!expected.exists) {
522
+ if (currentLastCommitId !== undefined) {
523
+ throw expectationConflict(`Expected link ${linkRefKey(expected.ref)} to be absent.`)
524
+ }
525
+ return
526
+ }
527
+ if (currentLastCommitId === undefined || currentLastCommitId !== expected.lastCommitId) {
528
+ throw expectationConflict(`Expected link ${linkRefKey(expected.ref)} changed.`)
529
+ }
530
+ }
531
+
532
+ export function assertExpectedLinkScopeRevision(
533
+ currentFingerprint: string | undefined,
534
+ expected: ExpectedLinkScopeRevision
535
+ ): void {
536
+ if (currentFingerprint === expected.fingerprint) return
537
+ throw expectationConflict(
538
+ `Expected link scope changed for ${expected.source.objectTypeId}:${expected.source.primaryId}.${expected.linkId}.`
539
+ )
540
+ }
541
+
542
+ function expectationConflict(message: string): MaterializationConflictError {
543
+ return new MaterializationConflictError("expectation", message)
544
+ }
545
+
488
546
  export function materializationWorkColumns(record: MaterializationWorkRecord): {
489
547
  readonly lane: "none" | "apply" | "cardinality" | "event"
490
548
  readonly majorOrder: number
@@ -206,6 +206,7 @@ export function createAuthOperationScope<T extends AuthStorage>(
206
206
  groupMemberships: createOperationScopedFacade(target.groupMemberships, scope),
207
207
  magicLinks: createOperationScopedFacade(target.magicLinks, scope),
208
208
  oidcAuthorizationAttempts: createOperationScopedFacade(target.oidcAuthorizationAttempts, scope),
209
+ deviceAuthorizations: createOperationScopedFacade(target.deviceAuthorizations, scope),
209
210
  }) as T
210
211
  }
211
212
 
@@ -300,7 +300,6 @@ export type {
300
300
  ListWorkflowInterventionsInput,
301
301
  ListWorkflowInterventionsResult,
302
302
  SubmitWorkflowInterventionInput,
303
- WorkflowInterventionActor,
304
303
  WorkflowInterventionRecord,
305
304
  WorkflowInterventionStatus,
306
305
  WorkflowInterventionStorage,
@@ -7,7 +7,6 @@ export type {
7
7
  ListWorkflowInterventionsInput,
8
8
  ListWorkflowInterventionsResult,
9
9
  SubmitWorkflowInterventionInput,
10
- WorkflowInterventionActor,
11
10
  WorkflowInterventionRecord,
12
11
  WorkflowInterventionStatus,
13
12
  WorkflowInterventionStorage,
@@ -1,12 +1,8 @@
1
+ import type { Principal } from "../../auth"
1
2
  import type { WorkflowIOSnapshot } from "../workflow-runs"
2
3
 
3
4
  export type WorkflowInterventionStatus = "pending" | "submitted" | "cancelled" | "expired"
4
5
 
5
- export interface WorkflowInterventionActor {
6
- readonly principalType: "user" | "serviceAccount" | "system"
7
- readonly principalId: string
8
- }
9
-
10
6
  export interface WorkflowInterventionRecord {
11
7
  readonly id: string
12
8
  readonly projectId: string
@@ -23,10 +19,10 @@ export interface WorkflowInterventionRecord {
23
19
  readonly requestedAt: Date
24
20
  readonly expiresAt?: Date
25
21
  readonly submittedAt?: Date
26
- readonly submittedBy?: WorkflowInterventionActor
22
+ readonly submittedBy?: Principal
27
23
  readonly response?: WorkflowIOSnapshot
28
24
  readonly cancelledAt?: Date
29
- readonly cancelledBy?: WorkflowInterventionActor
25
+ readonly cancelledBy?: Principal
30
26
  readonly expiredAt?: Date
31
27
  }
32
28
 
@@ -51,14 +47,14 @@ export interface SubmitWorkflowInterventionInput {
51
47
  readonly id: string
52
48
  readonly response: WorkflowIOSnapshot
53
49
  readonly submittedAt?: Date
54
- readonly submittedBy?: WorkflowInterventionActor
50
+ readonly submittedBy?: Principal
55
51
  }
56
52
 
57
53
  export interface CancelWorkflowInterventionInput {
58
54
  readonly projectId: string
59
55
  readonly id: string
60
56
  readonly cancelledAt?: Date
61
- readonly cancelledBy?: WorkflowInterventionActor
57
+ readonly cancelledBy?: Principal
62
58
  }
63
59
 
64
60
  export interface ExpireWorkflowInterventionInput {
@@ -1,4 +1,4 @@
1
- import type { TrustedPrimitiveRef } from "../execution"
1
+ import type { AuthorizablePrincipal, TrustedPrimitiveRef } from "../execution"
2
2
  import type { ActionRunRecord, QueueActionRunInput, Storage } from "../storage"
3
3
  import type { ExecutionStorage } from "../storage/executions"
4
4
 
@@ -11,6 +11,8 @@ export async function createTestActionExecution(
11
11
  readonly runId: string
12
12
  readonly executionId?: string
13
13
  readonly requesterGroupIds?: readonly string[]
14
+ /** Must name an existing auth principal. The parent request then carries its authority. */
15
+ readonly requestedBy?: AuthorizablePrincipal
14
16
  }
15
17
  ): Promise<string> {
16
18
  const parentExecutionId = `test_request_execution:${input.runId}`
@@ -24,22 +26,28 @@ export async function createTestActionExecution(
24
26
  const existing = await executions.getById({ projectId: input.projectId, id: executionId })
25
27
  if (existing) return executionId
26
28
 
29
+ const requestedBy = input.requestedBy
27
30
  const parent = await executions.getById({ projectId: input.projectId, id: parentExecutionId })
28
31
  if (!parent) {
29
32
  await executions.create({
30
33
  id: parentExecutionId,
31
34
  requesterGroupIds: input.requesterGroupIds ?? [],
32
35
  projectId: input.projectId,
36
+ ...(requestedBy === undefined ? {} : { requestedBy }),
33
37
  executor: { type: "request", requestId: `test_request:${input.runId}` },
34
38
  source: { type: "http", requestId: `test_request:${input.runId}` },
35
39
  correlationId: `test_correlation:${input.runId}`,
36
- authorizationRef: { type: "disabled" },
40
+ authorizationRef:
41
+ requestedBy === undefined
42
+ ? { type: "disabled" }
43
+ : { type: "principal", principal: requestedBy },
37
44
  })
38
45
  }
39
46
  await executions.create({
40
47
  id: executionId,
41
48
  requesterGroupIds: input.requesterGroupIds ?? [],
42
49
  projectId: input.projectId,
50
+ ...(requestedBy === undefined ? {} : { requestedBy }),
43
51
  executor: { type: "primitive", kind: primitive.kind, runId: primitive.runId },
44
52
  source: { type: "execution", executionId: parentExecutionId },
45
53
  correlationId: `test_correlation:${input.runId}`,
@@ -54,6 +62,7 @@ export async function queueTestActionRun(
54
62
  storage: Pick<Storage, "actionRuns" | "executions">,
55
63
  input: Omit<QueueActionRunInput, "executionId"> & {
56
64
  readonly requesterGroupIds?: readonly string[]
65
+ readonly requestedBy?: AuthorizablePrincipal
57
66
  }
58
67
  ): Promise<ActionRunRecord> {
59
68
  if (!storage.actionRuns) throw new Error("Action run storage is not configured for this test.")
@@ -62,7 +71,8 @@ export async function queueTestActionRun(
62
71
  actionId: input.actionId,
63
72
  runId: input.id,
64
73
  requesterGroupIds: input.requesterGroupIds,
74
+ ...(input.requestedBy === undefined ? {} : { requestedBy: input.requestedBy }),
65
75
  })
66
- const { requesterGroupIds: _groups, ...run } = input
76
+ const { requesterGroupIds: _groups, requestedBy: _requestedBy, ...run } = input
67
77
  return storage.actionRuns.queue({ ...run, executionId })
68
78
  }