@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
@@ -8,16 +8,19 @@ import type {
8
8
  OntologyObjectRef,
9
9
  } from "../materializer"
10
10
  import { createLinkScopeFingerprint } from "../materializer"
11
+ import { decorateObjectQueryExecutor } from "../objects/sdk/query-builder"
12
+ import type { ObjectQueryExecutor } from "../objects/sdk/query-executor"
11
13
  import { OntologyValidationError } from "../ontology/errors"
12
14
  import type { ObjectTypeWithPropertyTokens } from "../ontology/tokens"
13
- import type { ValueType } from "../ontology/types"
14
15
  import {
15
16
  assertPropertyTokenBelongsToObjectType,
16
17
  assertTelemetryProperty,
17
18
  } from "../ontology/validation"
18
19
  import { RuntimeError } from "../runtime/errors"
19
- import type { ObjectSetListInput } from "../runtime/types"
20
+ import type { ObjectReader, ObjectReadSet } from "../runtime/types"
20
21
  import type {
22
+ ExpandedLinkValue,
23
+ ExpandedObjectRow,
21
24
  ObjectLinkRow,
22
25
  ObjectRow,
23
26
  TimeseriesHistoryBatchInput,
@@ -26,21 +29,10 @@ import type {
26
29
  import type { ActionReadDependencies } from "./commit-edits"
27
30
  import type {
28
31
  ActionReadFacade,
29
- ActionReadObjectSet,
30
32
  ActionTelemetryHistorySeriesInput,
31
33
  ActionTelemetryReadFacade,
32
34
  } from "./types"
33
35
 
34
- export type ActionReadObjectSetSource = {
35
- get(id: string): Promise<unknown>
36
- query(): unknown
37
- list(input?: ObjectSetListInput): Promise<unknown>
38
- byId(id: string): {
39
- get(): Promise<unknown>
40
- listLinks(link?: { readonly id: string }): Promise<unknown>
41
- }
42
- }
43
-
44
36
  /** Runtime leaves used by the Action telemetry read adapter. */
45
37
  export interface ActionTelemetryReadSource {
46
38
  readonly resolveObjectType: (objectTypeId: string) => ObjectTypeWithPropertyTokens
@@ -54,9 +46,10 @@ export interface ActionTelemetryReadSource {
54
46
  *
55
47
  * A handler that reads one dependency twice keeps the first observation: the commit must fail when
56
48
  * current state no longer matches what the decision was made against, and the later read may already
57
- * reflect the handler's own intent. Arbitrary query phantoms stay out of this release — `query()` and
58
- * `list()` results are not turned into dependencies. Telemetry history is also a call-level snapshot,
59
- * not an edit dependency.
49
+ * reflect the handler's own intent. Objects returned by `list()` and `query()` are fenced like
50
+ * concrete reads, but query membership is not yet: an object that starts matching a query after the
51
+ * read, and aggregate results (`count()`, `exists()`, `facets()`), stay unfenced. Telemetry history
52
+ * is also a call-level snapshot, not an edit dependency.
60
53
  */
61
54
  export class ActionReadRecorder {
62
55
  private readonly objects = new Map<string, ExpectedObjectRevision>()
@@ -81,6 +74,21 @@ export class ActionReadRecorder {
81
74
  })
82
75
  }
83
76
 
77
+ /**
78
+ * Records every object a listing or query returned, including the objects its expansions attached.
79
+ *
80
+ * Rows are keyed by their own type: a traversal or subtype query returns objects of a type other
81
+ * than the one the query started from, and the commit checks each row under its exact identity.
82
+ */
83
+ observeObjectRows(rows: readonly ObjectRow[]): void {
84
+ for (const row of rows) {
85
+ this.observeObject({ objectTypeId: row.objectTypeId, primaryId: row.primaryId }, row)
86
+ for (const value of Object.values(row.links ?? {})) {
87
+ this.observeObjectRows(expandedRows(value))
88
+ }
89
+ }
90
+ }
91
+
84
92
  /**
85
93
  * Records the complete `(source, linkId)` scopes a link listing observed.
86
94
  *
@@ -159,29 +167,23 @@ export interface ActionReadFacadeOptions {
159
167
  readonly telemetry?: ActionTelemetryReadSource
160
168
  }
161
169
 
170
+ /** Exposes `reader`'s object reads to an Action handler; with `options`, each read is recorded. */
162
171
  export function createActionReadFacade(
163
- createObjectSet: <const TObjectType extends ObjectTypeWithPropertyTokens>(
164
- objectType: TObjectType
165
- ) => ActionReadObjectSetSource,
172
+ reader: ObjectReader,
166
173
  options?: ActionReadFacadeOptions
167
174
  ): ActionReadFacade {
168
- const facade = {
175
+ return {
169
176
  telemetry: createActionTelemetryReadFacade(options?.telemetry),
170
177
  objects<const TObjectType extends ObjectTypeWithPropertyTokens>(objectType: TObjectType) {
171
- return createActionReadObjectSetAdapter<TObjectType>(
172
- objectType,
173
- createObjectSet(objectType),
174
- options
175
- )
178
+ const objectSet = reader.objects(objectType)
179
+ return options ? recordObjectReads(objectType, objectSet, options) : objectSet
176
180
  },
177
181
  }
178
-
179
- return facade as ActionReadFacade
180
182
  }
181
183
 
182
184
  function createActionTelemetryReadFacade(
183
185
  source: ActionTelemetryReadSource | undefined
184
- ): ActionTelemetryReadFacade<readonly ValueType[]> {
186
+ ): ActionTelemetryReadFacade {
185
187
  const facade = {
186
188
  async historyBatch(input: {
187
189
  readonly series: readonly ActionTelemetryHistorySeriesInput[]
@@ -241,7 +243,7 @@ function createActionTelemetryReadFacade(
241
243
 
242
244
  // Cast needed at the generic token boundary: the implementation deliberately manipulates raw
243
245
  // provider values while the public facade maps every tuple position back to its property token.
244
- return facade as unknown as ActionTelemetryReadFacade<readonly ValueType[]>
246
+ return facade as unknown as ActionTelemetryReadFacade
245
247
  }
246
248
 
247
249
  function assertTelemetryBatchResultMatchesRequest(
@@ -273,60 +275,98 @@ function assertTelemetryBatchResultMatchesRequest(
273
275
  }
274
276
  }
275
277
 
276
- function createActionReadObjectSetAdapter<TObjectType extends ObjectTypeWithPropertyTokens>(
278
+ function recordObjectReads<TObjectType extends ObjectTypeWithPropertyTokens>(
277
279
  objectType: TObjectType,
278
- objectSet: ActionReadObjectSetSource,
279
- options: ActionReadFacadeOptions | undefined
280
- ): ActionReadObjectSet<TObjectType, readonly ValueType[], ObjectTypeWithPropertyTokens> {
281
- type TypedReadObjectSet = ActionReadObjectSet<
282
- TObjectType,
283
- readonly ValueType[],
284
- ObjectTypeWithPropertyTokens
285
- >
286
-
287
- async function readObject(id: string, read: () => Promise<unknown>): Promise<unknown> {
288
- const row = await read()
289
- options?.recorder.observeObject(
290
- { objectTypeId: objectType.id, primaryId: id },
291
- (row ?? null) as ObjectRow | null
292
- )
293
- return row
294
- }
280
+ objectSet: ObjectReadSet<TObjectType>,
281
+ options: ActionReadFacadeOptions
282
+ ): ObjectReadSet<TObjectType> {
283
+ const { recorder } = options
284
+ const ref = (primaryId: string): OntologyObjectRef => ({
285
+ objectTypeId: objectType.id,
286
+ primaryId,
287
+ })
295
288
 
296
289
  return {
297
- get(id) {
298
- return readObject(id, () => objectSet.get(id)) as ReturnType<TypedReadObjectSet["get"]>
290
+ async get(id) {
291
+ const row = await objectSet.get(id)
292
+ recorder.observeObject(ref(id), row && storageRow(row))
293
+ return row
299
294
  },
300
295
  query() {
301
- return objectSet.query() as ReturnType<TypedReadObjectSet["query"]>
296
+ // Recording at the executor covers every terminal of every refinement, present and future.
297
+ return decorateObjectQueryExecutor(objectSet.query(), (executor) =>
298
+ recordingExecutor(executor, recorder)
299
+ )
302
300
  },
303
- list(input) {
304
- return objectSet.list(input) as ReturnType<TypedReadObjectSet["list"]>
301
+ async list(input) {
302
+ const result = await objectSet.list(input)
303
+ recorder.observeObjectRows(result.objects.map(storageRow))
304
+ return result
305
305
  },
306
306
  byId(id) {
307
307
  const handle = objectSet.byId(id)
308
308
  return {
309
- get() {
310
- return readObject(id, () => handle.get()) as ReturnType<
311
- ReturnType<TypedReadObjectSet["byId"]>["get"]
312
- >
309
+ async get() {
310
+ const row = await handle.get()
311
+ recorder.observeObject(ref(id), row && storageRow(row))
312
+ return row
313
313
  },
314
314
  async listLinks(link) {
315
- const rows = (await handle.listLinks(link)) as readonly ObjectLinkRow[]
316
- options?.recorder.observeLinkScopes(
317
- { objectTypeId: objectType.id, primaryId: id },
315
+ const rows = await handle.listLinks(link)
316
+ recorder.observeLinkScopes(
317
+ ref(id),
318
318
  link ? [link.id] : options.resolveLinkIds(objectType.id),
319
319
  rows
320
320
  )
321
- return rows as unknown as Awaited<
322
- ReturnType<ReturnType<TypedReadObjectSet["byId"]>["listLinks"]>
323
- >
321
+ return rows
324
322
  },
325
323
  }
326
324
  },
327
325
  }
328
326
  }
329
327
 
328
+ /**
329
+ * Delegates to `executor` and records the objects its row queries return.
330
+ *
331
+ * Aggregates (`count()`, `exists()`, `facets()`) return no rows to fence; protecting their result
332
+ * needs query-level dependencies.
333
+ */
334
+ function recordingExecutor(
335
+ executor: ObjectQueryExecutor,
336
+ recorder: ActionReadRecorder
337
+ ): ObjectQueryExecutor {
338
+ return {
339
+ async list(query, listOptions) {
340
+ const result = await executor.list(query, listOptions)
341
+ recorder.observeObjectRows(result.objects.map(storageRow))
342
+ return result
343
+ },
344
+ count: (query) => executor.count(query),
345
+ exists: (query) => executor.exists(query),
346
+ facets: (query, facets) => executor.facets(query, facets),
347
+ validate: executor.validate?.bind(executor),
348
+ explain: executor.explain?.bind(executor),
349
+ }
350
+ }
351
+
352
+ /**
353
+ * Runtime reads return storage rows; the SDK row types only leave out the commit fields a fence
354
+ * needs.
355
+ */
356
+ function storageRow(row: object): ObjectRow {
357
+ return row as ObjectRow
358
+ }
359
+
360
+ function expandedRows(value: ExpandedLinkValue): readonly ObjectRow[] {
361
+ if (value === null) return []
362
+ return isExpandedRowList(value) ? value : [value]
363
+ }
364
+
365
+ // `Array.isArray` does not narrow a readonly array out of a union.
366
+ function isExpandedRowList(value: ExpandedLinkValue): value is readonly ExpandedObjectRow[] {
367
+ return Array.isArray(value)
368
+ }
369
+
330
370
  function toLinkSnapshot(row: ObjectLinkRow): EffectiveLinkSnapshot | null {
331
371
  // Rows without materializer provenance predate the commit ledger and cannot be fenced.
332
372
  if (row.lastCommitId === undefined) return null
@@ -14,6 +14,7 @@ import { ActionRunTimeoutError } from "../objects/action/errors"
14
14
  import { OntologyValidationError } from "../ontology/errors"
15
15
  import type { ObjectTypeWithPropertyTokens } from "../ontology/tokens"
16
16
  import type { SixbRuntimeContext } from "../runtime/types"
17
+ import { assertParamUsersActive } from "../shared/params/user-refs"
17
18
  import {
18
19
  ActionRunError,
19
20
  type ActionRunRecord,
@@ -159,6 +160,18 @@ export async function requestAction(
159
160
  subject,
160
161
  params: actionParams,
161
162
  runId: request.runId,
163
+ assertNewRun: () =>
164
+ assertParamUsersActive({
165
+ auth: runtime.storage.auth,
166
+ projectId,
167
+ schemas: Object.fromEntries(
168
+ Object.entries(action.params).map(([paramId, param]) => [paramId, param.schema])
169
+ ),
170
+ values: actionParams,
171
+ valueTypesById: runtime.ontology.getValueTypesById(),
172
+ describe: (paramId) => `Action param '${pathPrefix}.${paramId}'`,
173
+ invalid: (message) => new OntologyValidationError(message),
174
+ }),
162
175
  ...(authorization.type === "delegated"
163
176
  ? {
164
177
  assertCanReuseExisting: async (
@@ -30,6 +30,8 @@ interface DispatchActionRunInput {
30
30
  readonly createExecution: (executionId: string, runId: string) => Promise<CreateExecutionInput>
31
31
  /** Runs before payload comparison or retry so an existing run cannot cross authority owners. */
32
32
  readonly assertCanReuseExisting?: (storage: Storage, run: ActionRunRecord) => void | Promise<void>
33
+ /** Checks that hold only for a run this call creates; a replayed run keeps its accepted params. */
34
+ readonly assertNewRun?: () => Promise<void>
33
35
  }
34
36
 
35
37
  interface PreparedActionRun {
@@ -76,6 +78,7 @@ async function persistActionRun(
76
78
  return reuseActionRun(input, existing)
77
79
  }
78
80
 
81
+ await input.assertNewRun?.()
79
82
  const execution = await input.createExecution(`exec_${randomUUID()}`, request.runId)
80
83
  const queuedAt = new Date()
81
84
  try {
@@ -8,21 +8,13 @@ import type {
8
8
  OntologyOperationOutcome,
9
9
  } from "../../materializer"
10
10
  import type { ModelsRuntime } from "../../models/generation-types"
11
- import type { ObjectType, Property, ValueType } from "../../ontology"
11
+ import type { ObjectType, Property } from "../../ontology"
12
12
  import type { InferPropertyUnit, InferPropertyValue } from "../../ontology/inference"
13
- import type { LinkToken, ObjectTypeWithPropertyTokens, PropertyToken } from "../../ontology/tokens"
14
- import type {
15
- ListResult,
16
- ObjectQueryBuilder,
17
- ObjectSetListInput,
18
- TwinObject,
19
- } from "../../runtime/types"
13
+ import type { ObjectTypeWithPropertyTokens, PropertyToken } from "../../ontology/tokens"
14
+ import type { ObjectReader } from "../../runtime/types"
20
15
  import type { ActionPrimitiveSchemaValues } from "./params"
21
16
 
22
- export type ActionTargetObject<
23
- TObjectType extends ObjectType = ObjectType,
24
- _TValueTypes extends readonly ValueType[] = readonly ValueType[],
25
- > = {
17
+ export type ActionTargetObject<TObjectType extends ObjectType = ObjectType> = {
26
18
  readonly primaryId: string
27
19
  readonly objectTypeId: TObjectType["id"]
28
20
  readonly properties: ActionTargetPropertyBag<TObjectType>
@@ -66,45 +58,12 @@ export type ActionBinding<TObjectType extends ObjectType = ObjectType> =
66
58
  | { readonly kind: "global" }
67
59
  | { readonly kind: "object"; readonly objectType: TObjectType }
68
60
 
69
- type ActionLinkTokenForObjectType<TObjectType extends ObjectTypeWithPropertyTokens> = LinkToken<
70
- TObjectType["id"],
71
- TObjectType["links"][number]["id"],
72
- TObjectType["links"][number]["targetObjectTypeId"],
73
- TObjectType["links"][number]
74
- >
75
-
76
61
  export interface ActionRunPhaseInfo {
77
62
  readonly id: string
78
63
  readonly startedAt: Date
79
64
  readonly idempotencyKey: string
80
65
  }
81
66
 
82
- export interface ActionReadObjectByIdHandle<
83
- TObjectType extends ObjectTypeWithPropertyTokens,
84
- TValueTypes extends readonly ValueType[],
85
- > {
86
- get(): Promise<TwinObject<TObjectType, TValueTypes> | null>
87
- listLinks(link?: ActionLinkTokenForObjectType<TObjectType>): Promise<
88
- readonly {
89
- readonly linkId: string
90
- readonly targetTypeId: string
91
- readonly targetId: string
92
- readonly properties?: Readonly<Record<string, unknown>>
93
- }[]
94
- >
95
- }
96
-
97
- export interface ActionReadObjectSet<
98
- TObjectType extends ObjectTypeWithPropertyTokens,
99
- TValueTypes extends readonly ValueType[],
100
- TRegisteredObjectTypes extends ObjectTypeWithPropertyTokens = TObjectType,
101
- > {
102
- get(id: string): Promise<TwinObject<TObjectType, TValueTypes> | null>
103
- query(): ObjectQueryBuilder<TObjectType, TRegisteredObjectTypes, TValueTypes>
104
- list(input?: ObjectSetListInput): Promise<ListResult<TwinObject<TObjectType, TValueTypes>>>
105
- byId(id: string): ActionReadObjectByIdHandle<TObjectType, TValueTypes>
106
- }
107
-
108
67
  /** A telemetry-mode ontology property accepted by Action history reads. */
109
68
  export type ActionTelemetryPropertyToken = PropertyToken<
110
69
  string,
@@ -139,7 +98,6 @@ export interface ActionTelemetryHistoryBatchInput<
139
98
  export type ActionTelemetryHistoryBatchResult<
140
99
  TSeries extends
141
100
  readonly ActionTelemetryHistorySeriesInput[] = readonly ActionTelemetryHistorySeriesInput[],
142
- TValueTypes extends readonly ValueType[] = readonly ValueType[],
143
101
  > = {
144
102
  readonly [TIndex in keyof TSeries]: TSeries[TIndex] extends ActionTelemetryHistorySeriesInput<
145
103
  infer TProperty
@@ -148,17 +106,15 @@ export type ActionTelemetryHistoryBatchResult<
148
106
  readonly objectId: TSeries[TIndex]["objectId"]
149
107
  readonly property: TProperty
150
108
  readonly points: readonly {
151
- readonly value: InferPropertyValue<TProperty["property"], TValueTypes>
109
+ readonly value: InferPropertyValue<TProperty["property"]>
152
110
  readonly at: Date
153
- readonly unit?: InferPropertyUnit<TProperty["property"], TValueTypes>
111
+ readonly unit?: InferPropertyUnit<TProperty["property"]>
154
112
  }[]
155
113
  }
156
114
  : never
157
115
  }
158
116
 
159
- export type ActionTelemetryReadFacade<
160
- TValueTypes extends readonly ValueType[] = readonly ValueType[],
161
- > = {
117
+ export type ActionTelemetryReadFacade = {
162
118
  /**
163
119
  * Read several telemetry series in one provider call.
164
120
  *
@@ -167,20 +123,18 @@ export type ActionTelemetryReadFacade<
167
123
  */
168
124
  historyBatch<const TSeries extends readonly ActionTelemetryHistorySeriesInput[]>(
169
125
  input: ActionTelemetryHistoryBatchInput<TSeries>
170
- ): Promise<ActionTelemetryHistoryBatchResult<TSeries, TValueTypes>>
126
+ ): Promise<ActionTelemetryHistoryBatchResult<TSeries>>
171
127
  }
172
128
 
173
- export interface ActionReadFacade<TValueTypes extends readonly ValueType[] = readonly ValueType[]> {
174
- readonly telemetry: ActionTelemetryReadFacade<TValueTypes>
175
- objects<const TObjectType extends ObjectTypeWithPropertyTokens>(
176
- objectType: TObjectType
177
- ): ActionReadObjectSet<TObjectType, TValueTypes, ObjectTypeWithPropertyTokens>
129
+ /**
130
+ * The `read` an Action handler receives. What it reads through `objects(Type)` is recorded, and
131
+ * the commit fails if any of it changed first.
132
+ */
133
+ export interface ActionReadFacade extends ObjectReader {
134
+ readonly telemetry: ActionTelemetryReadFacade
178
135
  }
179
136
 
180
- export interface ActionTelemetryObjectSet<
181
- _TObjectType extends ObjectTypeWithPropertyTokens,
182
- _TValueTypes extends readonly ValueType[],
183
- > {
137
+ export interface ActionTelemetryObjectSet<_TObjectType extends ObjectTypeWithPropertyTokens> {
184
138
  appendTelemetryBatch(
185
139
  items: readonly {
186
140
  id: string
@@ -193,15 +147,13 @@ export interface ActionTelemetryObjectSet<
193
147
  /** Immutable blob operations available to action writeback and effects handlers. */
194
148
  export type ActionBlobContext = Pick<BlobStorage, "put" | "open" | "stat">
195
149
 
196
- export interface ActionRuntimeFacade<
197
- TValueTypes extends readonly ValueType[] = readonly ValueType[],
198
- > {
150
+ export interface ActionRuntimeFacade {
199
151
  readonly blobs: ActionBlobContext
200
152
  readonly models: ModelsRuntime
201
153
  readonly connector: ConnectorRuntime
202
154
  objects<const TObjectType extends ObjectTypeWithPropertyTokens>(
203
155
  objectType: TObjectType
204
- ): ActionTelemetryObjectSet<TObjectType, TValueTypes>
156
+ ): ActionTelemetryObjectSet<TObjectType>
205
157
  }
206
158
 
207
159
  /**
@@ -1,4 +1,5 @@
1
1
  import type { ValueType } from "../../ontology"
2
+ import type { RegisteredValueTypes } from "../../ontology/registered"
2
3
  import type {
3
4
  InferParams,
4
5
  ParamConfig,
@@ -18,5 +19,5 @@ export type ActionPrimitiveSchemaValues = ParamPrimitiveSchemaValues
18
19
  /** Action-facing compatibility name for the shared parameter inference contract. */
19
20
  export type InferActionParams<
20
21
  TParams extends ActionParamsConfig,
21
- TValueTypes extends readonly ValueType[] = [],
22
+ TValueTypes extends readonly ValueType[] = RegisteredValueTypes,
22
23
  > = InferParams<TParams, TValueTypes>
@@ -330,7 +330,7 @@ function isUsableUserAccessToken(
330
330
  userId: string,
331
331
  now: Date
332
332
  ): token is AccessTokenRecord {
333
- if (!token || token.subjectType !== "user" || token.subjectId !== userId) return false
333
+ if (!token || !principalsEqual(token.subject, { type: "user", id: userId })) return false
334
334
  return token.revokedAt === undefined && token.expiresAt.getTime() > now.getTime()
335
335
  }
336
336
 
@@ -0,0 +1,7 @@
1
+ /**
2
+ * Closes a switch over a union: the call stops compiling when a new member has no case, and throws
3
+ * if an untyped value reaches it at runtime.
4
+ */
5
+ export function assertNever(_value: never, message: string): never {
6
+ throw new Error(message)
7
+ }
@@ -0,0 +1,12 @@
1
+ // The server resolves each request's client address once, at the socket, from the peer address
2
+ // and the forwarding headers its trusted proxies wrote. Everything else reads it from here and
3
+ // never parses forwarding headers itself: a client can write any value into them.
4
+ const clientAddresses = new WeakMap<Request, string>()
5
+
6
+ export function setRequestClientAddress(request: Request, address: string): void {
7
+ clientAddresses.set(request, address)
8
+ }
9
+
10
+ export function getRequestClientAddress(request: Request): string | undefined {
11
+ return clientAddresses.get(request)
12
+ }
package/src/auth/csrf.ts CHANGED
@@ -14,20 +14,29 @@ export function isCsrfExemptMethod(method: string): boolean {
14
14
 
15
15
  export function verifyDoubleSubmitCsrf(
16
16
  request: Request,
17
- options: { readonly cookieName: string; readonly headerName?: string }
17
+ options: { readonly cookieName: string }
18
18
  ): boolean {
19
19
  if (isCsrfExemptMethod(request.method)) {
20
20
  return true
21
21
  }
22
22
 
23
- const cookieValue = getCookie(request, options.cookieName)
24
- const headerValue = request.headers.get(options.headerName ?? CSRF_HEADER_NAME)
23
+ return verifyCsrfToken(request, {
24
+ cookieName: options.cookieName,
25
+ token: request.headers.get(CSRF_HEADER_NAME),
26
+ })
27
+ }
25
28
 
26
- if (!cookieValue || !headerValue) {
29
+ /** Match a submitted CSRF token (header or form field) against the request's CSRF cookie. */
30
+ export function verifyCsrfToken(
31
+ request: Request,
32
+ options: { readonly cookieName: string; readonly token: string | null }
33
+ ): boolean {
34
+ const cookieValue = getCookie(request, options.cookieName)
35
+ if (!cookieValue || !options.token) {
27
36
  return false
28
37
  }
29
38
 
30
- return safeEqual(cookieValue, headerValue)
39
+ return safeEqual(cookieValue, options.token)
31
40
  }
32
41
 
33
42
  function safeEqual(left: string, right: string): boolean {
package/src/auth/index.ts CHANGED
@@ -15,6 +15,7 @@ export {
15
15
  isValidAuthSessionAudience,
16
16
  resolveAuthSessionAudience,
17
17
  } from "./audience"
18
+ export { getRequestClientAddress, setRequestClientAddress } from "./client-address"
18
19
  export {
19
20
  clearCsrfCookieHeader,
20
21
  clearSessionCookieHeader,
@@ -32,6 +33,7 @@ export {
32
33
  CSRF_HEADER_NAME,
33
34
  generateCsrfToken,
34
35
  isCsrfExemptMethod,
36
+ verifyCsrfToken,
35
37
  verifyDoubleSubmitCsrf,
36
38
  } from "./csrf"
37
39
  export type { AuthRuntimeErrorCode } from "./errors"
@@ -85,6 +87,7 @@ export type {
85
87
  GetMembershipOptionsResult,
86
88
  InvitationDeliveryAuthStrategy,
87
89
  InvitationDeliveryInput,
90
+ InvitationDestination,
88
91
  InvitationGroupOption,
89
92
  InvitationRecipientInput,
90
93
  InvitationRecipientResult,
@@ -92,7 +95,6 @@ export type {
92
95
  InviteDeliveryResult,
93
96
  InviteDeliveryStatus,
94
97
  InviteUserInput,
95
- InviteUserOptions,
96
98
  InviteUserResult,
97
99
  ListInvitationsInput,
98
100
  ListInvitationsResult,
@@ -133,7 +135,6 @@ export type {
133
135
  RevokePersonalAccessTokenInput,
134
136
  RevokeServiceAccountAccessTokenInput,
135
137
  RevokeServiceAccountAccessTokenResult,
136
- SecurityContext,
137
138
  ServiceAccountWithGroups,
138
139
  SixbAuthConfig,
139
140
  SuspendMemberInput,