@sixb/core 0.1.19 → 0.1.21

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 (765) hide show
  1. package/dist/actions/execution.d.ts.map +1 -1
  2. package/dist/actions/index.js +54 -47
  3. package/dist/actions/index.js.map +1 -1
  4. package/dist/actions/request.d.ts.map +1 -1
  5. package/dist/actions/run-authorization.d.ts +9 -0
  6. package/dist/actions/run-authorization.d.ts.map +1 -1
  7. package/dist/activity/connection.d.ts +62 -0
  8. package/dist/activity/connection.d.ts.map +1 -0
  9. package/dist/activity/device.d.ts +8 -0
  10. package/dist/activity/device.d.ts.map +1 -0
  11. package/dist/activity/execution.d.ts +48 -0
  12. package/dist/activity/execution.d.ts.map +1 -0
  13. package/dist/activity/service.d.ts +79 -0
  14. package/dist/activity/service.d.ts.map +1 -0
  15. package/dist/activity/shares.d.ts +24 -0
  16. package/dist/activity/shares.d.ts.map +1 -0
  17. package/dist/activity/timeline.d.ts +96 -0
  18. package/dist/activity/timeline.d.ts.map +1 -0
  19. package/dist/agents/index.d.ts +2 -1
  20. package/dist/agents/index.d.ts.map +1 -1
  21. package/dist/agents/index.js +63 -50
  22. package/dist/agents/index.js.map +1 -1
  23. package/dist/agents/request.d.ts.map +1 -1
  24. package/dist/agents/skills.d.ts.map +1 -1
  25. package/dist/agents/streams/index.js +3 -3
  26. package/dist/agents/streams/internal.js +3 -3
  27. package/dist/agents/types.d.ts +8 -8
  28. package/dist/agents/types.d.ts.map +1 -1
  29. package/dist/agents/validation.d.ts +1 -1
  30. package/dist/agents/validation.d.ts.map +1 -1
  31. package/dist/artifacts/address.d.ts +48 -0
  32. package/dist/artifacts/address.d.ts.map +1 -0
  33. package/dist/artifacts/csv.d.ts +22 -0
  34. package/dist/artifacts/csv.d.ts.map +1 -0
  35. package/dist/artifacts/errors.d.ts +11 -0
  36. package/dist/artifacts/errors.d.ts.map +1 -0
  37. package/dist/artifacts/execution.d.ts +43 -0
  38. package/dist/artifacts/execution.d.ts.map +1 -0
  39. package/dist/artifacts/frames/assets.d.ts +28 -0
  40. package/dist/artifacts/frames/assets.d.ts.map +1 -0
  41. package/dist/artifacts/frames/grants.d.ts +37 -0
  42. package/dist/artifacts/frames/grants.d.ts.map +1 -0
  43. package/dist/artifacts/frames/index.d.ts +10 -0
  44. package/dist/artifacts/frames/index.d.ts.map +1 -0
  45. package/dist/artifacts/frames/index.js +892 -0
  46. package/dist/artifacts/frames/index.js.map +14 -0
  47. package/dist/artifacts/frames/kit.d.ts +66 -0
  48. package/dist/artifacts/frames/kit.d.ts.map +1 -0
  49. package/dist/artifacts/frames/probe.d.ts +41 -0
  50. package/dist/artifacts/frames/probe.d.ts.map +1 -0
  51. package/dist/artifacts/frames/protocol.d.ts +98 -0
  52. package/dist/artifacts/frames/protocol.d.ts.map +1 -0
  53. package/dist/artifacts/frames/runtime.d.ts +13 -0
  54. package/dist/artifacts/frames/runtime.d.ts.map +1 -0
  55. package/dist/artifacts/html.d.ts +6 -0
  56. package/dist/artifacts/html.d.ts.map +1 -0
  57. package/dist/artifacts/ids.d.ts +5 -0
  58. package/dist/artifacts/ids.d.ts.map +1 -0
  59. package/dist/artifacts/index.d.ts +16 -0
  60. package/dist/artifacts/index.d.ts.map +1 -0
  61. package/dist/artifacts/index.js +125 -0
  62. package/dist/artifacts/index.js.map +10 -0
  63. package/dist/artifacts/kinds.d.ts +5 -0
  64. package/dist/artifacts/kinds.d.ts.map +1 -0
  65. package/dist/artifacts/limits.d.ts +28 -0
  66. package/dist/artifacts/limits.d.ts.map +1 -0
  67. package/dist/artifacts/outline.d.ts +44 -0
  68. package/dist/artifacts/outline.d.ts.map +1 -0
  69. package/dist/artifacts/publish/files.d.ts +15 -0
  70. package/dist/artifacts/publish/files.d.ts.map +1 -0
  71. package/dist/artifacts/publish/index.d.ts +5 -0
  72. package/dist/artifacts/publish/index.d.ts.map +1 -0
  73. package/dist/artifacts/publish/index.js +36 -0
  74. package/dist/artifacts/publish/index.js.map +9 -0
  75. package/dist/artifacts/publish/publish.d.ts +52 -0
  76. package/dist/artifacts/publish/publish.d.ts.map +1 -0
  77. package/dist/artifacts/publish/references.d.ts +27 -0
  78. package/dist/artifacts/publish/references.d.ts.map +1 -0
  79. package/dist/artifacts/publish/validate/document.d.ts +17 -0
  80. package/dist/artifacts/publish/validate/document.d.ts.map +1 -0
  81. package/dist/artifacts/publish/validate/file.d.ts +8 -0
  82. package/dist/artifacts/publish/validate/file.d.ts.map +1 -0
  83. package/dist/artifacts/publish/validate/sheet.d.ts +15 -0
  84. package/dist/artifacts/publish/validate/sheet.d.ts.map +1 -0
  85. package/dist/artifacts/publish/validate/slides.d.ts +21 -0
  86. package/dist/artifacts/publish/validate/slides.d.ts.map +1 -0
  87. package/dist/artifacts/references.d.ts +12 -0
  88. package/dist/artifacts/references.d.ts.map +1 -0
  89. package/dist/artifacts/resolve.d.ts +41 -0
  90. package/dist/artifacts/resolve.d.ts.map +1 -0
  91. package/dist/artifacts/theme.d.ts +19 -0
  92. package/dist/artifacts/theme.d.ts.map +1 -0
  93. package/dist/artifacts/warnings.d.ts +11 -0
  94. package/dist/artifacts/warnings.d.ts.map +1 -0
  95. package/dist/artifacts/workbook.d.ts +64 -0
  96. package/dist/artifacts/workbook.d.ts.map +1 -0
  97. package/dist/auth/cookies.d.ts +2 -4
  98. package/dist/auth/cookies.d.ts.map +1 -1
  99. package/dist/auth/index.d.ts +0 -2
  100. package/dist/auth/index.d.ts.map +1 -1
  101. package/dist/auth/index.js +14 -20
  102. package/dist/auth/index.js.map +1 -1
  103. package/dist/auth/runtime.d.ts +8 -10
  104. package/dist/auth/runtime.d.ts.map +1 -1
  105. package/dist/auth/session-cache.d.ts +1 -5
  106. package/dist/auth/session-cache.d.ts.map +1 -1
  107. package/dist/auth/strategy.js +1 -1
  108. package/dist/auth/types.d.ts +4 -8
  109. package/dist/auth/types.d.ts.map +1 -1
  110. package/dist/auth/validation.d.ts +0 -1
  111. package/dist/auth/validation.d.ts.map +1 -1
  112. package/dist/authorization/decision.d.ts +2 -4
  113. package/dist/authorization/decision.d.ts.map +1 -1
  114. package/dist/authorization/grant-kinds.d.ts +6 -8
  115. package/dist/authorization/grant-kinds.d.ts.map +1 -1
  116. package/dist/authorization/index.d.ts +0 -1
  117. package/dist/authorization/index.d.ts.map +1 -1
  118. package/dist/authorization/index.js +7 -11
  119. package/dist/authorization/index.js.map +1 -1
  120. package/dist/authorization/resolve.d.ts +1 -1
  121. package/dist/authorization/resolve.d.ts.map +1 -1
  122. package/dist/blob-storage/browser.js +1 -1
  123. package/dist/blob-storage/index.js +2 -2
  124. package/dist/blob-storage/internal.d.ts +1 -1
  125. package/dist/blob-storage/internal.d.ts.map +1 -1
  126. package/dist/blob-storage/internal.js +11 -5
  127. package/dist/blob-storage/internal.js.map +1 -1
  128. package/dist/blob-storage/media-type.d.ts +12 -0
  129. package/dist/blob-storage/media-type.d.ts.map +1 -1
  130. package/dist/bootstrap/index.js +54 -48
  131. package/dist/bootstrap/index.js.map +2 -2
  132. package/dist/{chunk-t6vq7bff.js → chunk-0bphap9y.js} +5 -5
  133. package/dist/{chunk-7mbzgd9m.js → chunk-1cc1xaf3.js} +3 -3
  134. package/dist/chunk-3jms7je7.js +14 -0
  135. package/dist/chunk-3jms7je7.js.map +10 -0
  136. package/dist/{chunk-s54c868q.js → chunk-3qct2mdc.js} +3 -13
  137. package/dist/chunk-3qct2mdc.js.map +12 -0
  138. package/dist/{chunk-6gmfggss.js → chunk-431pyp2c.js} +3 -3
  139. package/dist/{chunk-c85m1hyj.js → chunk-447a5c0p.js} +2 -2
  140. package/dist/chunk-48qjhh6v.js +185 -0
  141. package/dist/chunk-48qjhh6v.js.map +13 -0
  142. package/dist/{chunk-80mc0971.js → chunk-561r0yc9.js} +8 -8
  143. package/dist/{chunk-5e43w60z.js → chunk-5948n82c.js} +2 -2
  144. package/dist/{chunk-yzwja0mj.js → chunk-5hx48dnn.js} +2 -2
  145. package/dist/{chunk-tjb1mk5t.js → chunk-5vems3nx.js} +5 -6
  146. package/dist/{chunk-tjb1mk5t.js.map → chunk-5vems3nx.js.map} +3 -3
  147. package/dist/{chunk-aff7cyea.js → chunk-61y5xs4p.js} +563 -167
  148. package/dist/{chunk-aff7cyea.js.map → chunk-61y5xs4p.js.map} +12 -9
  149. package/dist/chunk-65abf64x.js +13 -0
  150. package/dist/chunk-65abf64x.js.map +10 -0
  151. package/dist/{chunk-z3y5kg1x.js → chunk-6eqsgvxk.js} +3 -3
  152. package/dist/{chunk-z3y5kg1x.js.map → chunk-6eqsgvxk.js.map} +2 -2
  153. package/dist/chunk-6rqgmkde.js +2028 -0
  154. package/dist/chunk-6rqgmkde.js.map +29 -0
  155. package/dist/{chunk-y7rqfrgg.js → chunk-6vb4st8k.js} +29 -38
  156. package/dist/chunk-6vb4st8k.js.map +23 -0
  157. package/dist/chunk-7q8t23v4.js +467 -0
  158. package/dist/chunk-7q8t23v4.js.map +14 -0
  159. package/dist/{chunk-kyzq4wy9.js → chunk-858emn8m.js} +17 -17
  160. package/dist/chunk-858emn8m.js.map +18 -0
  161. package/dist/{chunk-hvsb78a1.js → chunk-8frc8a4j.js} +26 -26
  162. package/dist/{chunk-hvsb78a1.js.map → chunk-8frc8a4j.js.map} +2 -2
  163. package/dist/{chunk-3zxk45er.js → chunk-8ncg20rd.js} +3 -68
  164. package/dist/{chunk-3zxk45er.js.map → chunk-8ncg20rd.js.map} +4 -5
  165. package/dist/{chunk-j2bp5ryw.js → chunk-918wwnaa.js} +495 -28
  166. package/dist/{chunk-j2bp5ryw.js.map → chunk-918wwnaa.js.map} +14 -12
  167. package/dist/{chunk-1f7wpmyp.js → chunk-9j4jw7as.js} +103 -110
  168. package/dist/chunk-9j4jw7as.js.map +14 -0
  169. package/dist/chunk-9kgkfg6v.js +502 -0
  170. package/dist/chunk-9kgkfg6v.js.map +14 -0
  171. package/dist/chunk-a3faa34j.js +74 -0
  172. package/dist/chunk-a3faa34j.js.map +10 -0
  173. package/dist/{chunk-ey3pyej1.js → chunk-akzryx9h.js} +347 -1174
  174. package/dist/{chunk-ey3pyej1.js.map → chunk-akzryx9h.js.map} +19 -25
  175. package/dist/chunk-arns890k.js +10 -0
  176. package/dist/chunk-arns890k.js.map +10 -0
  177. package/dist/{chunk-zrmy8zvw.js → chunk-bk9svbcq.js} +11 -11
  178. package/dist/{chunk-zrmy8zvw.js.map → chunk-bk9svbcq.js.map} +2 -2
  179. package/dist/{chunk-hkc3jct7.js → chunk-c06hmxyy.js} +2 -10
  180. package/dist/chunk-c06hmxyy.js.map +10 -0
  181. package/dist/{chunk-q1vkr2ys.js → chunk-c1rxbz5y.js} +3 -3
  182. package/dist/chunk-cfj9dfbb.js +288 -0
  183. package/dist/chunk-cfj9dfbb.js.map +12 -0
  184. package/dist/{chunk-4tcx876c.js → chunk-cn0fwwhy.js} +19 -19
  185. package/dist/{chunk-4tcx876c.js.map → chunk-cn0fwwhy.js.map} +1 -1
  186. package/dist/{chunk-gc4ntf7d.js → chunk-cwdzcv37.js} +1 -1
  187. package/dist/{chunk-fa02jy15.js → chunk-cy4mbddw.js} +1 -1
  188. package/dist/{chunk-7kg3k1m9.js → chunk-d09e3rax.js} +1 -1
  189. package/dist/chunk-d5rjr8c0.js +176 -0
  190. package/dist/chunk-d5rjr8c0.js.map +12 -0
  191. package/dist/{chunk-rhg02hxq.js → chunk-d7dnxdep.js} +3 -3
  192. package/dist/{chunk-b38szspf.js → chunk-dhcv7yxc.js} +1 -1
  193. package/dist/{chunk-b38szspf.js.map → chunk-dhcv7yxc.js.map} +1 -1
  194. package/dist/{chunk-enpsx8k5.js → chunk-dhdha526.js} +23 -21
  195. package/dist/chunk-dhdha526.js.map +10 -0
  196. package/dist/{chunk-8mx7qw3y.js → chunk-dvd2fp9q.js} +2 -2
  197. package/dist/{chunk-8mx7qw3y.js.map → chunk-dvd2fp9q.js.map} +3 -3
  198. package/dist/{chunk-bwjcehza.js → chunk-e17zdm62.js} +6 -12
  199. package/dist/{chunk-bwjcehza.js.map → chunk-e17zdm62.js.map} +3 -4
  200. package/dist/{chunk-tpn40322.js → chunk-e6k4thh5.js} +11 -10
  201. package/dist/{chunk-tpn40322.js.map → chunk-e6k4thh5.js.map} +3 -3
  202. package/dist/{chunk-tw03bsmb.js → chunk-eptrvnby.js} +224 -3
  203. package/dist/chunk-eptrvnby.js.map +12 -0
  204. package/dist/{chunk-xt1zt7gv.js → chunk-f4pamkt9.js} +30 -23
  205. package/dist/chunk-f4pamkt9.js.map +12 -0
  206. package/dist/chunk-ff5xkv0p.js +211 -0
  207. package/dist/chunk-ff5xkv0p.js.map +10 -0
  208. package/dist/{chunk-bpgy64fw.js → chunk-g257jwnc.js} +10 -4
  209. package/dist/{chunk-bpgy64fw.js.map → chunk-g257jwnc.js.map} +3 -3
  210. package/dist/chunk-g5bvzyyr.js +32 -0
  211. package/dist/chunk-g5bvzyyr.js.map +10 -0
  212. package/dist/{chunk-2jntasmh.js → chunk-hcbyfxbe.js} +25 -49
  213. package/dist/chunk-hcbyfxbe.js.map +12 -0
  214. package/dist/chunk-hke9aeen.js +9 -0
  215. package/dist/chunk-hke9aeen.js.map +10 -0
  216. package/dist/{chunk-1sr8ryzk.js → chunk-hwksyjks.js} +122 -1
  217. package/dist/{chunk-1sr8ryzk.js.map → chunk-hwksyjks.js.map} +3 -3
  218. package/dist/chunk-jcfw4h7m.js +9 -0
  219. package/dist/chunk-jcfw4h7m.js.map +10 -0
  220. package/dist/{chunk-85yvv5n0.js → chunk-k43ct2ke.js} +20 -11
  221. package/dist/chunk-k43ct2ke.js.map +12 -0
  222. package/dist/{chunk-dnmadg9k.js → chunk-kge7k6ey.js} +40 -8
  223. package/dist/chunk-kge7k6ey.js.map +15 -0
  224. package/dist/{chunk-wz0xs816.js → chunk-ky3j490c.js} +2 -2
  225. package/dist/chunk-mjddfa7k.js +129 -0
  226. package/dist/chunk-mjddfa7k.js.map +12 -0
  227. package/dist/{chunk-3gnrh4ve.js → chunk-nn5xnx3s.js} +86 -111
  228. package/dist/chunk-nn5xnx3s.js.map +40 -0
  229. package/dist/{chunk-rz53yb4v.js → chunk-q5e5tv4b.js} +35 -7
  230. package/dist/{chunk-rz53yb4v.js.map → chunk-q5e5tv4b.js.map} +3 -3
  231. package/dist/{chunk-vyf9kfqf.js → chunk-q7gn29y3.js} +1 -1
  232. package/dist/{chunk-d2ync1v3.js → chunk-rmakanzx.js} +10 -12
  233. package/dist/{chunk-d2ync1v3.js.map → chunk-rmakanzx.js.map} +3 -4
  234. package/dist/{chunk-v9xd5wzd.js → chunk-s7jg7pmn.js} +1 -1
  235. package/dist/chunk-tbc1ngpd.js +642 -0
  236. package/dist/chunk-tbc1ngpd.js.map +18 -0
  237. package/dist/chunk-twe4dx8p.js +676 -0
  238. package/dist/chunk-twe4dx8p.js.map +15 -0
  239. package/dist/{chunk-nre82s12.js → chunk-vf57cr4t.js} +2 -2
  240. package/dist/{chunk-9ybhtmg4.js → chunk-vvxtn22d.js} +1 -1
  241. package/dist/{chunk-jhm3zsa7.js → chunk-wkv3h3q7.js} +64 -2
  242. package/dist/{chunk-jhm3zsa7.js.map → chunk-wkv3h3q7.js.map} +3 -3
  243. package/dist/chunk-x0v3jd47.js +124 -0
  244. package/dist/chunk-x0v3jd47.js.map +10 -0
  245. package/dist/{chunk-7t429e3f.js → chunk-xvsc5m8n.js} +1 -1
  246. package/dist/{chunk-kg5j6fct.js → chunk-y5tah2kf.js} +1 -1
  247. package/dist/{chunk-52bk93x8.js → chunk-z58tm0hm.js} +2 -2
  248. package/dist/datasets/builders.d.ts +15 -2
  249. package/dist/datasets/builders.d.ts.map +1 -1
  250. package/dist/datasets/column-index.d.ts +7 -0
  251. package/dist/datasets/column-index.d.ts.map +1 -0
  252. package/dist/datasets/execution.d.ts +3 -2
  253. package/dist/datasets/execution.d.ts.map +1 -1
  254. package/dist/datasets/write.js +8 -8
  255. package/dist/deploy/internal.js +4 -3
  256. package/dist/deploy/internal.js.map +4 -4
  257. package/dist/deploy/services.d.ts.map +1 -1
  258. package/dist/deploy/types.d.ts +1 -2
  259. package/dist/deploy/types.d.ts.map +1 -1
  260. package/dist/error-reporting/internal.js +4 -4
  261. package/dist/errors/internal.d.ts +1 -0
  262. package/dist/errors/internal.d.ts.map +1 -1
  263. package/dist/errors/internal.js +7 -4
  264. package/dist/errors/internal.js.map +1 -1
  265. package/dist/events/execution.d.ts +12 -2
  266. package/dist/events/execution.d.ts.map +1 -1
  267. package/dist/events/index.js +4 -4
  268. package/dist/execution/agent.js +56 -49
  269. package/dist/execution/agent.js.map +1 -1
  270. package/dist/execution/authorization.d.ts.map +1 -1
  271. package/dist/execution/authorized-object-reader.d.ts +52 -11
  272. package/dist/execution/authorized-object-reader.d.ts.map +1 -1
  273. package/dist/execution/object-reader-clearance.d.ts +41 -0
  274. package/dist/execution/object-reader-clearance.d.ts.map +1 -0
  275. package/dist/execution/object-reader-ontology.d.ts +12 -0
  276. package/dist/execution/object-reader-ontology.d.ts.map +1 -0
  277. package/dist/execution/object-reader-security.d.ts +45 -0
  278. package/dist/execution/object-reader-security.d.ts.map +1 -0
  279. package/dist/execution/primitive.js +54 -47
  280. package/dist/execution/primitive.js.map +1 -1
  281. package/dist/execution/request.js +49 -42
  282. package/dist/execution/request.js.map +2 -2
  283. package/dist/http/api-routes.d.ts.map +1 -1
  284. package/dist/http/index.js +1 -1
  285. package/dist/index.d.ts +23 -7
  286. package/dist/index.d.ts.map +1 -1
  287. package/dist/index.js +111 -109
  288. package/dist/index.js.map +1 -1
  289. package/dist/lake-storage/in-memory.d.ts +1 -0
  290. package/dist/lake-storage/in-memory.d.ts.map +1 -1
  291. package/dist/lake-storage/index.d.ts +6 -3
  292. package/dist/lake-storage/index.d.ts.map +1 -1
  293. package/dist/lake-storage/index.js +21 -13
  294. package/dist/lake-storage/index.js.map +1 -1
  295. package/dist/lake-storage/lineage.d.ts +94 -0
  296. package/dist/lake-storage/lineage.d.ts.map +1 -0
  297. package/dist/lake-storage/sql-transforms.d.ts +45 -0
  298. package/dist/lake-storage/sql-transforms.d.ts.map +1 -1
  299. package/dist/lake-storage/types.d.ts +55 -1
  300. package/dist/lake-storage/types.d.ts.map +1 -1
  301. package/dist/lake-storage/version-inputs.d.ts +14 -3
  302. package/dist/lake-storage/version-inputs.d.ts.map +1 -1
  303. package/dist/maintenance/ontology-maintenance.d.ts.map +1 -1
  304. package/dist/materializer/index.js +31 -30
  305. package/dist/materializer/index.js.map +1 -1
  306. package/dist/models/execution/index.js +26 -25
  307. package/dist/models/execution/index.js.map +1 -1
  308. package/dist/objects/clearance-redaction.d.ts +27 -0
  309. package/dist/objects/clearance-redaction.d.ts.map +1 -0
  310. package/dist/objects/index.js +54 -47
  311. package/dist/objects/index.js.map +1 -1
  312. package/dist/objects/link/authorization.d.ts +8 -5
  313. package/dist/objects/link/authorization.d.ts.map +1 -1
  314. package/dist/objects/link/upsert-batch.d.ts.map +1 -1
  315. package/dist/objects/object/delete.d.ts.map +1 -1
  316. package/dist/objects/object/upsert-batch.d.ts.map +1 -1
  317. package/dist/objects/object/upsert.d.ts.map +1 -1
  318. package/dist/objects/property-clearance.d.ts +47 -24
  319. package/dist/objects/property-clearance.d.ts.map +1 -1
  320. package/dist/objects/query/clearance-admission.d.ts +10 -0
  321. package/dist/objects/query/clearance-admission.d.ts.map +1 -0
  322. package/dist/objects/query/index.js +29 -28
  323. package/dist/objects/query/index.js.map +1 -1
  324. package/dist/objects/query/link-query-clearance.d.ts +21 -0
  325. package/dist/objects/query/link-query-clearance.d.ts.map +1 -0
  326. package/dist/objects/vectors/handle.d.ts.map +1 -1
  327. package/dist/objects/vectors/profile.d.ts +5 -0
  328. package/dist/objects/vectors/profile.d.ts.map +1 -1
  329. package/dist/ontology/builders.d.ts.map +1 -1
  330. package/dist/ontology/docs-markdown.d.ts +1 -1
  331. package/dist/ontology/docs-markdown.d.ts.map +1 -1
  332. package/dist/ontology/index.js +7 -7
  333. package/dist/ontology/internal.js +4 -4
  334. package/dist/ontology/internal.js.map +1 -1
  335. package/dist/pipelines/index.d.ts +2 -0
  336. package/dist/pipelines/index.d.ts.map +1 -1
  337. package/dist/pipelines/index.js +47 -35
  338. package/dist/pipelines/index.js.map +1 -1
  339. package/dist/pipelines/lineage.d.ts +17 -0
  340. package/dist/pipelines/lineage.d.ts.map +1 -0
  341. package/dist/projections/internal.d.ts +2 -2
  342. package/dist/projections/internal.js +30 -29
  343. package/dist/projections/internal.js.map +1 -1
  344. package/dist/runtime/create.d.ts +3 -0
  345. package/dist/runtime/create.d.ts.map +1 -1
  346. package/dist/runtime/host.d.ts +6 -0
  347. package/dist/runtime/host.d.ts.map +1 -1
  348. package/dist/runtime/internal.d.ts +2 -0
  349. package/dist/runtime/internal.d.ts.map +1 -1
  350. package/dist/runtime/internal.js +46 -42
  351. package/dist/runtime/internal.js.map +1 -1
  352. package/dist/runtime/ontology-mutations.d.ts +2 -0
  353. package/dist/runtime/ontology-mutations.d.ts.map +1 -1
  354. package/dist/runtime/resolve-definitions.d.ts.map +1 -1
  355. package/dist/runtime/sixb.d.ts +8 -0
  356. package/dist/runtime/sixb.d.ts.map +1 -1
  357. package/dist/sandboxes/auth.d.ts +16 -0
  358. package/dist/sandboxes/auth.d.ts.map +1 -1
  359. package/dist/sandboxes/config.d.ts.map +1 -1
  360. package/dist/sandboxes/configuration.d.ts +26 -0
  361. package/dist/sandboxes/configuration.d.ts.map +1 -1
  362. package/dist/sandboxes/index.d.ts +1 -1
  363. package/dist/sandboxes/index.d.ts.map +1 -1
  364. package/dist/sandboxes/index.js +14 -13
  365. package/dist/sandboxes/index.js.map +1 -1
  366. package/dist/sandboxes/sandbox.d.ts +28 -5
  367. package/dist/sandboxes/sandbox.d.ts.map +1 -1
  368. package/dist/security/applied-markings-contribution.d.ts +58 -0
  369. package/dist/security/applied-markings-contribution.d.ts.map +1 -0
  370. package/dist/security/applied-markings-host.d.ts +10 -0
  371. package/dist/security/applied-markings-host.d.ts.map +1 -0
  372. package/dist/security/applied-markings-snapshot.d.ts +67 -0
  373. package/dist/security/applied-markings-snapshot.d.ts.map +1 -0
  374. package/dist/security/applied-markings.d.ts +73 -0
  375. package/dist/security/applied-markings.d.ts.map +1 -0
  376. package/dist/security/builders.d.ts.map +1 -1
  377. package/dist/security/dataset-version-markings.d.ts +47 -0
  378. package/dist/security/dataset-version-markings.d.ts.map +1 -0
  379. package/dist/security/every.d.ts +1 -4
  380. package/dist/security/every.d.ts.map +1 -1
  381. package/dist/security/grants.d.ts +4 -5
  382. package/dist/security/grants.d.ts.map +1 -1
  383. package/dist/security/index.d.ts +2 -2
  384. package/dist/security/index.d.ts.map +1 -1
  385. package/dist/security/internal.d.ts +15 -0
  386. package/dist/security/internal.d.ts.map +1 -0
  387. package/dist/security/internal.js +135 -0
  388. package/dist/security/internal.js.map +10 -0
  389. package/dist/security/marking-propagation.d.ts +62 -0
  390. package/dist/security/marking-propagation.d.ts.map +1 -0
  391. package/dist/security/marking-sets.d.ts +14 -0
  392. package/dist/security/marking-sets.d.ts.map +1 -0
  393. package/dist/security/markings.d.ts +6 -3
  394. package/dist/security/markings.d.ts.map +1 -1
  395. package/dist/security/membership-policies.d.ts.map +1 -1
  396. package/dist/security/pipeline-markings.d.ts +20 -0
  397. package/dist/security/pipeline-markings.d.ts.map +1 -0
  398. package/dist/security/project.d.ts +4 -0
  399. package/dist/security/project.d.ts.map +1 -0
  400. package/dist/security/projection-markings.d.ts +71 -0
  401. package/dist/security/projection-markings.d.ts.map +1 -0
  402. package/dist/security/public.d.ts +10 -0
  403. package/dist/security/public.d.ts.map +1 -0
  404. package/dist/security/public.js +10 -0
  405. package/dist/security/public.js.map +9 -0
  406. package/dist/security/redactions.d.ts +4 -1
  407. package/dist/security/redactions.d.ts.map +1 -1
  408. package/dist/security/registry.d.ts +0 -1
  409. package/dist/security/registry.d.ts.map +1 -1
  410. package/dist/security/types.d.ts +34 -19
  411. package/dist/security/types.d.ts.map +1 -1
  412. package/dist/security/validation.d.ts +0 -6
  413. package/dist/security/validation.d.ts.map +1 -1
  414. package/dist/shares/internal.js +25 -24
  415. package/dist/shares/internal.js.map +2 -2
  416. package/dist/storage/action-runs/failure.js +3 -3
  417. package/dist/storage/action-runs/in-memory.d.ts +4 -0
  418. package/dist/storage/action-runs/in-memory.d.ts.map +1 -1
  419. package/dist/storage/action-runs/types.d.ts +8 -0
  420. package/dist/storage/action-runs/types.d.ts.map +1 -1
  421. package/dist/storage/activity/in-memory.d.ts +55 -0
  422. package/dist/storage/activity/in-memory.d.ts.map +1 -0
  423. package/dist/storage/activity/index.d.ts +3 -0
  424. package/dist/storage/activity/index.d.ts.map +1 -0
  425. package/dist/storage/activity/policy.d.ts +96 -0
  426. package/dist/storage/activity/policy.d.ts.map +1 -0
  427. package/dist/storage/activity/types.d.ts +191 -0
  428. package/dist/storage/activity/types.d.ts.map +1 -0
  429. package/dist/storage/agents/in-memory.d.ts +4 -0
  430. package/dist/storage/agents/in-memory.d.ts.map +1 -1
  431. package/dist/storage/agents/provider.d.ts.map +1 -1
  432. package/dist/storage/agents/provider.js +2 -5
  433. package/dist/storage/agents/provider.js.map +1 -1
  434. package/dist/storage/agents/types.d.ts +10 -9
  435. package/dist/storage/agents/types.d.ts.map +1 -1
  436. package/dist/storage/ai-limits/enforcement.js +3 -3
  437. package/dist/storage/artifacts/errors.d.ts +8 -0
  438. package/dist/storage/artifacts/errors.d.ts.map +1 -0
  439. package/dist/storage/artifacts/in-memory.d.ts +34 -0
  440. package/dist/storage/artifacts/in-memory.d.ts.map +1 -0
  441. package/dist/storage/artifacts/index.d.ts +5 -0
  442. package/dist/storage/artifacts/index.d.ts.map +1 -0
  443. package/dist/storage/artifacts/record.d.ts +17 -0
  444. package/dist/storage/artifacts/record.d.ts.map +1 -0
  445. package/dist/storage/artifacts/types.d.ts +184 -0
  446. package/dist/storage/artifacts/types.d.ts.map +1 -0
  447. package/dist/storage/auth/in-memory/auth-storage.d.ts.map +1 -1
  448. package/dist/storage/auth/in-memory/magic-links.d.ts.map +1 -1
  449. package/dist/storage/auth/in-memory/oidc-attempts.d.ts.map +1 -1
  450. package/dist/storage/auth/in-memory/sessions.d.ts +2 -11
  451. package/dist/storage/auth/in-memory/sessions.d.ts.map +1 -1
  452. package/dist/storage/auth/in-memory/shared.d.ts +1 -2
  453. package/dist/storage/auth/in-memory/shared.d.ts.map +1 -1
  454. package/dist/storage/auth/index.d.ts +1 -1
  455. package/dist/storage/auth/index.d.ts.map +1 -1
  456. package/dist/storage/auth/types.d.ts +20 -17
  457. package/dist/storage/auth/types.d.ts.map +1 -1
  458. package/dist/storage/connector-connections/provider.js +2 -2
  459. package/dist/storage/executions/in-memory.d.ts +2 -1
  460. package/dist/storage/executions/in-memory.d.ts.map +1 -1
  461. package/dist/storage/executions/index.d.ts +1 -1
  462. package/dist/storage/executions/index.d.ts.map +1 -1
  463. package/dist/storage/executions/provider.d.ts +2 -0
  464. package/dist/storage/executions/provider.d.ts.map +1 -1
  465. package/dist/storage/executions/provider.js +9 -223
  466. package/dist/storage/executions/provider.js.map +3 -4
  467. package/dist/storage/executions/types.d.ts +31 -0
  468. package/dist/storage/executions/types.d.ts.map +1 -1
  469. package/dist/storage/file-upload-sessions/provider.js +12 -12
  470. package/dist/storage/in-memory/index.d.ts +8 -0
  471. package/dist/storage/in-memory/index.d.ts.map +1 -1
  472. package/dist/storage/index.d.ts +6 -4
  473. package/dist/storage/index.d.ts.map +1 -1
  474. package/dist/storage/index.js +47 -46
  475. package/dist/storage/index.js.map +1 -1
  476. package/dist/storage/internal.d.ts +3 -0
  477. package/dist/storage/internal.d.ts.map +1 -1
  478. package/dist/storage/internal.js +66 -16
  479. package/dist/storage/internal.js.map +1 -1
  480. package/dist/storage/ontology/in-memory/sources.d.ts +2 -1
  481. package/dist/storage/ontology/in-memory/sources.d.ts.map +1 -1
  482. package/dist/storage/ontology/index.d.ts +1 -1
  483. package/dist/storage/ontology/index.d.ts.map +1 -1
  484. package/dist/storage/ontology/sources.d.ts +15 -0
  485. package/dist/storage/ontology/sources.d.ts.map +1 -1
  486. package/dist/storage/projection-runs/provider.js +3 -3
  487. package/dist/storage/share-grants/in-memory.d.ts +2 -1
  488. package/dist/storage/share-grants/in-memory.d.ts.map +1 -1
  489. package/dist/storage/share-grants/index.d.ts +1 -1
  490. package/dist/storage/share-grants/index.d.ts.map +1 -1
  491. package/dist/storage/share-grants/types.d.ts +6 -0
  492. package/dist/storage/share-grants/types.d.ts.map +1 -1
  493. package/dist/storage/types.d.ts +4 -0
  494. package/dist/storage/types.d.ts.map +1 -1
  495. package/dist/storage/workflow-runs/in-memory.d.ts +4 -0
  496. package/dist/storage/workflow-runs/in-memory.d.ts.map +1 -1
  497. package/dist/storage/workflow-runs/provider.js +14 -13
  498. package/dist/storage/workflow-runs/provider.js.map +1 -1
  499. package/dist/storage/workflow-runs/types.d.ts +5 -0
  500. package/dist/storage/workflow-runs/types.d.ts.map +1 -1
  501. package/dist/syncs/index.js +35 -34
  502. package/dist/syncs/index.js.map +1 -1
  503. package/dist/testing/action-run-storage-contract.d.ts.map +1 -1
  504. package/dist/testing/activity-storage-contract.d.ts +14 -0
  505. package/dist/testing/activity-storage-contract.d.ts.map +1 -0
  506. package/dist/testing/agent-storage-contract.d.ts.map +1 -1
  507. package/dist/testing/artifact-storage-contract.d.ts +13 -0
  508. package/dist/testing/artifact-storage-contract.d.ts.map +1 -0
  509. package/dist/testing/auth-storage-contract.d.ts.map +1 -1
  510. package/dist/testing/execution-storage-contract.d.ts.map +1 -1
  511. package/dist/testing/index.d.ts +2 -0
  512. package/dist/testing/index.d.ts.map +1 -1
  513. package/dist/testing/index.js +4493 -3225
  514. package/dist/testing/index.js.map +14 -12
  515. package/dist/testing/lake-merge-storage-contract.d.ts.map +1 -1
  516. package/dist/testing/lake-storage-contract.d.ts +2 -0
  517. package/dist/testing/lake-storage-contract.d.ts.map +1 -1
  518. package/dist/testing/ontology-storage-contract.d.ts.map +1 -1
  519. package/dist/testing/share-grant-storage-contract.d.ts.map +1 -1
  520. package/dist/webhooks/internal.js +28 -27
  521. package/dist/webhooks/internal.js.map +2 -2
  522. package/dist/workers/index.js +2 -2
  523. package/dist/workflows/builders.d.ts.map +1 -1
  524. package/dist/workflows/index.js +57 -51
  525. package/dist/workflows/index.js.map +1 -1
  526. package/dist/workflows/types.d.ts +9 -0
  527. package/dist/workflows/types.d.ts.map +1 -1
  528. package/dist/workflows/validation.d.ts +7 -0
  529. package/dist/workflows/validation.d.ts.map +1 -1
  530. package/package.json +32 -2
  531. package/src/actions/execution.ts +18 -13
  532. package/src/actions/request.ts +18 -3
  533. package/src/actions/run-authorization.ts +23 -0
  534. package/src/activity/README.md +155 -0
  535. package/src/activity/connection.ts +217 -0
  536. package/src/activity/device.ts +41 -0
  537. package/src/activity/execution.ts +210 -0
  538. package/src/activity/service.ts +274 -0
  539. package/src/activity/shares.ts +62 -0
  540. package/src/activity/timeline.ts +424 -0
  541. package/src/agents/index.ts +8 -3
  542. package/src/agents/request.ts +5 -0
  543. package/src/agents/skills.ts +6 -0
  544. package/src/agents/types.ts +8 -8
  545. package/src/agents/validation.ts +2 -0
  546. package/src/artifacts/address.ts +132 -0
  547. package/src/artifacts/csv.ts +108 -0
  548. package/src/artifacts/errors.ts +21 -0
  549. package/src/artifacts/execution.ts +153 -0
  550. package/src/artifacts/frames/assets.ts +88 -0
  551. package/src/artifacts/frames/grants.ts +124 -0
  552. package/src/artifacts/frames/index.ts +15 -0
  553. package/src/artifacts/frames/kit.ts +392 -0
  554. package/src/artifacts/frames/probe.ts +309 -0
  555. package/src/artifacts/frames/protocol.ts +174 -0
  556. package/src/artifacts/frames/runtime.ts +213 -0
  557. package/src/artifacts/html.ts +25 -0
  558. package/src/artifacts/ids.ts +18 -0
  559. package/src/artifacts/index.ts +61 -0
  560. package/src/artifacts/kinds.ts +8 -0
  561. package/src/artifacts/limits.ts +27 -0
  562. package/src/artifacts/outline.ts +62 -0
  563. package/src/artifacts/publish/files.ts +87 -0
  564. package/src/artifacts/publish/index.ts +12 -0
  565. package/src/artifacts/publish/publish.ts +250 -0
  566. package/src/artifacts/publish/references.ts +130 -0
  567. package/src/artifacts/publish/validate/document.ts +114 -0
  568. package/src/artifacts/publish/validate/file.ts +19 -0
  569. package/src/artifacts/publish/validate/sheet.ts +251 -0
  570. package/src/artifacts/publish/validate/slides.ts +134 -0
  571. package/src/artifacts/references.ts +11 -0
  572. package/src/artifacts/resolve.ts +97 -0
  573. package/src/artifacts/theme.ts +116 -0
  574. package/src/artifacts/warnings.ts +10 -0
  575. package/src/artifacts/workbook.ts +315 -0
  576. package/src/auth/cookies.ts +3 -20
  577. package/src/auth/index.ts +0 -6
  578. package/src/auth/runtime.ts +59 -76
  579. package/src/auth/session-cache.ts +2 -9
  580. package/src/auth/types.ts +4 -8
  581. package/src/auth/validation.ts +0 -2
  582. package/src/authorization/decision.ts +13 -23
  583. package/src/authorization/grant-kinds.ts +33 -28
  584. package/src/authorization/index.ts +0 -1
  585. package/src/authorization/resolve.ts +10 -6
  586. package/src/blob-storage/internal.ts +1 -1
  587. package/src/blob-storage/media-type.ts +69 -0
  588. package/src/datasets/builders.ts +66 -2
  589. package/src/datasets/column-index.ts +19 -0
  590. package/src/datasets/execution.ts +23 -9
  591. package/src/deploy/services.ts +0 -1
  592. package/src/deploy/types.ts +1 -2
  593. package/src/deploy/validation.ts +3 -1
  594. package/src/errors/internal.ts +1 -0
  595. package/src/events/execution.ts +134 -21
  596. package/src/execution/authorization.ts +11 -5
  597. package/src/execution/authorized-object-reader.ts +270 -256
  598. package/src/execution/object-reader-clearance.ts +91 -0
  599. package/src/execution/object-reader-ontology.ts +63 -0
  600. package/src/execution/object-reader-security.ts +146 -0
  601. package/src/http/api-routes.ts +125 -0
  602. package/src/index.ts +72 -17
  603. package/src/lake-storage/in-memory.ts +26 -3
  604. package/src/lake-storage/index.ts +13 -1
  605. package/src/lake-storage/lineage.ts +385 -0
  606. package/src/lake-storage/sql-transforms.ts +45 -0
  607. package/src/lake-storage/types.ts +59 -1
  608. package/src/lake-storage/version-inputs.ts +35 -6
  609. package/src/maintenance/ontology-maintenance.ts +15 -0
  610. package/src/models/execution/embedding.ts +6 -6
  611. package/src/objects/clearance-redaction.ts +138 -0
  612. package/src/objects/link/authorization.ts +27 -7
  613. package/src/objects/link/remove.ts +2 -2
  614. package/src/objects/link/upsert-batch.ts +7 -5
  615. package/src/objects/link/upsert.ts +2 -2
  616. package/src/objects/object/delete.ts +2 -0
  617. package/src/objects/object/upsert-batch.ts +2 -4
  618. package/src/objects/object/upsert.ts +2 -3
  619. package/src/objects/property-clearance.ts +171 -152
  620. package/src/objects/query/clearance-admission.ts +112 -0
  621. package/src/objects/query/link-query-clearance.ts +73 -0
  622. package/src/objects/vectors/README.md +4 -0
  623. package/src/objects/vectors/handle.ts +11 -2
  624. package/src/objects/vectors/indexing-generate.ts +2 -2
  625. package/src/objects/vectors/profile.ts +5 -0
  626. package/src/ontology/builders.ts +12 -1
  627. package/src/ontology/docs-markdown.ts +1 -1
  628. package/src/pipelines/index.ts +2 -0
  629. package/src/pipelines/lineage.ts +45 -0
  630. package/src/projections/internal.ts +2 -2
  631. package/src/runtime/create.ts +4 -0
  632. package/src/runtime/host.ts +55 -0
  633. package/src/runtime/internal.ts +2 -0
  634. package/src/runtime/ontology-mutations.ts +19 -4
  635. package/src/runtime/resolve-definitions.ts +66 -3
  636. package/src/runtime/sixb.ts +18 -1
  637. package/src/sandboxes/README.md +29 -7
  638. package/src/sandboxes/auth.ts +16 -0
  639. package/src/sandboxes/config.ts +2 -7
  640. package/src/sandboxes/configuration.ts +61 -7
  641. package/src/sandboxes/index.ts +1 -0
  642. package/src/sandboxes/sandbox.ts +27 -5
  643. package/src/security/applied-markings-contribution.ts +277 -0
  644. package/src/security/applied-markings-host.ts +41 -0
  645. package/src/security/applied-markings-snapshot.ts +235 -0
  646. package/src/security/applied-markings.ts +405 -0
  647. package/src/security/builders.ts +7 -2
  648. package/src/security/dataset-version-markings.ts +163 -0
  649. package/src/security/every.ts +0 -4
  650. package/src/security/grants.ts +42 -27
  651. package/src/security/index.ts +3 -3
  652. package/src/security/internal.ts +18 -0
  653. package/src/security/marking-propagation.ts +255 -0
  654. package/src/security/marking-sets.ts +42 -0
  655. package/src/security/markings.ts +29 -178
  656. package/src/security/membership-policies.ts +3 -1
  657. package/src/security/pipeline-markings.ts +175 -0
  658. package/src/security/project.ts +8 -0
  659. package/src/security/projection-markings.ts +421 -0
  660. package/src/security/public.ts +10 -0
  661. package/src/security/redactions.ts +7 -2
  662. package/src/security/registry.ts +0 -8
  663. package/src/security/types.ts +38 -26
  664. package/src/security/validation.ts +28 -19
  665. package/src/storage/action-runs/in-memory.ts +18 -0
  666. package/src/storage/action-runs/types.ts +8 -0
  667. package/src/storage/activity/in-memory.ts +374 -0
  668. package/src/storage/activity/index.ts +27 -0
  669. package/src/storage/activity/policy.ts +430 -0
  670. package/src/storage/activity/types.ts +211 -0
  671. package/src/storage/agents/in-memory.ts +10 -0
  672. package/src/storage/agents/provider.ts +2 -13
  673. package/src/storage/agents/types.ts +10 -17
  674. package/src/storage/artifacts/errors.ts +16 -0
  675. package/src/storage/artifacts/in-memory.ts +240 -0
  676. package/src/storage/artifacts/index.ts +30 -0
  677. package/src/storage/artifacts/record.ts +200 -0
  678. package/src/storage/artifacts/types.ts +209 -0
  679. package/src/storage/auth/in-memory/auth-storage.ts +0 -18
  680. package/src/storage/auth/in-memory/magic-links.ts +0 -3
  681. package/src/storage/auth/in-memory/oidc-attempts.ts +0 -3
  682. package/src/storage/auth/in-memory/sessions.ts +22 -25
  683. package/src/storage/auth/in-memory/shared.ts +1 -10
  684. package/src/storage/auth/index.ts +2 -0
  685. package/src/storage/auth/types.ts +20 -18
  686. package/src/storage/executions/in-memory.ts +61 -1
  687. package/src/storage/executions/index.ts +3 -0
  688. package/src/storage/executions/provider.ts +12 -0
  689. package/src/storage/executions/types.ts +30 -0
  690. package/src/storage/in-memory/index.ts +16 -0
  691. package/src/storage/index.ts +63 -0
  692. package/src/storage/internal.ts +30 -0
  693. package/src/storage/ontology/in-memory/sources.ts +23 -0
  694. package/src/storage/ontology/index.ts +2 -0
  695. package/src/storage/ontology/sources.ts +17 -0
  696. package/src/storage/share-grants/in-memory.ts +8 -0
  697. package/src/storage/share-grants/index.ts +1 -0
  698. package/src/storage/share-grants/types.ts +8 -0
  699. package/src/storage/types.ts +4 -0
  700. package/src/storage/workflow-runs/in-memory.ts +16 -0
  701. package/src/storage/workflow-runs/types.ts +5 -0
  702. package/src/testing/action-run-storage-contract.ts +25 -0
  703. package/src/testing/activity-storage-contract.ts +840 -0
  704. package/src/testing/agent-storage-contract.ts +22 -21
  705. package/src/testing/artifact-storage-contract.ts +517 -0
  706. package/src/testing/auth-storage-contract.ts +61 -107
  707. package/src/testing/execution-storage-contract.ts +147 -3
  708. package/src/testing/index.ts +9 -0
  709. package/src/testing/lake-merge-storage-contract.ts +38 -0
  710. package/src/testing/lake-storage-contract.ts +247 -2
  711. package/src/testing/materializer-storage-contract.ts +1 -0
  712. package/src/testing/ontology-storage-contract.ts +57 -2
  713. package/src/testing/share-grant-storage-contract.ts +15 -0
  714. package/src/workflows/builders.ts +14 -0
  715. package/src/workflows/types.ts +9 -0
  716. package/src/workflows/validation.ts +72 -0
  717. package/dist/auth/audience.d.ts +0 -8
  718. package/dist/auth/audience.d.ts.map +0 -1
  719. package/dist/authorization/application-access.d.ts +0 -18
  720. package/dist/authorization/application-access.d.ts.map +0 -1
  721. package/dist/chunk-1f7wpmyp.js.map +0 -14
  722. package/dist/chunk-1k89ecfr.js +0 -85
  723. package/dist/chunk-1k89ecfr.js.map +0 -10
  724. package/dist/chunk-2jntasmh.js.map +0 -13
  725. package/dist/chunk-3gnrh4ve.js.map +0 -40
  726. package/dist/chunk-85yvv5n0.js.map +0 -12
  727. package/dist/chunk-9gyp8hg1.js +0 -363
  728. package/dist/chunk-9gyp8hg1.js.map +0 -14
  729. package/dist/chunk-dnmadg9k.js.map +0 -15
  730. package/dist/chunk-enpsx8k5.js.map +0 -10
  731. package/dist/chunk-hkc3jct7.js.map +0 -10
  732. package/dist/chunk-kyzq4wy9.js.map +0 -18
  733. package/dist/chunk-s16apyk9.js +0 -256
  734. package/dist/chunk-s16apyk9.js.map +0 -16
  735. package/dist/chunk-s54c868q.js.map +0 -12
  736. package/dist/chunk-tw03bsmb.js.map +0 -11
  737. package/dist/chunk-wwdfe68s.js +0 -128
  738. package/dist/chunk-wwdfe68s.js.map +0 -11
  739. package/dist/chunk-xt1zt7gv.js.map +0 -13
  740. package/dist/chunk-y7rqfrgg.js.map +0 -24
  741. package/dist/security/applications.d.ts +0 -15
  742. package/dist/security/applications.d.ts.map +0 -1
  743. package/src/auth/audience.ts +0 -28
  744. package/src/authorization/application-access.ts +0 -34
  745. package/src/security/applications.ts +0 -11
  746. /package/dist/{chunk-t6vq7bff.js.map → chunk-0bphap9y.js.map} +0 -0
  747. /package/dist/{chunk-7mbzgd9m.js.map → chunk-1cc1xaf3.js.map} +0 -0
  748. /package/dist/{chunk-6gmfggss.js.map → chunk-431pyp2c.js.map} +0 -0
  749. /package/dist/{chunk-c85m1hyj.js.map → chunk-447a5c0p.js.map} +0 -0
  750. /package/dist/{chunk-80mc0971.js.map → chunk-561r0yc9.js.map} +0 -0
  751. /package/dist/{chunk-5e43w60z.js.map → chunk-5948n82c.js.map} +0 -0
  752. /package/dist/{chunk-yzwja0mj.js.map → chunk-5hx48dnn.js.map} +0 -0
  753. /package/dist/{chunk-q1vkr2ys.js.map → chunk-c1rxbz5y.js.map} +0 -0
  754. /package/dist/{chunk-gc4ntf7d.js.map → chunk-cwdzcv37.js.map} +0 -0
  755. /package/dist/{chunk-fa02jy15.js.map → chunk-cy4mbddw.js.map} +0 -0
  756. /package/dist/{chunk-7kg3k1m9.js.map → chunk-d09e3rax.js.map} +0 -0
  757. /package/dist/{chunk-rhg02hxq.js.map → chunk-d7dnxdep.js.map} +0 -0
  758. /package/dist/{chunk-wz0xs816.js.map → chunk-ky3j490c.js.map} +0 -0
  759. /package/dist/{chunk-vyf9kfqf.js.map → chunk-q7gn29y3.js.map} +0 -0
  760. /package/dist/{chunk-v9xd5wzd.js.map → chunk-s7jg7pmn.js.map} +0 -0
  761. /package/dist/{chunk-nre82s12.js.map → chunk-vf57cr4t.js.map} +0 -0
  762. /package/dist/{chunk-9ybhtmg4.js.map → chunk-vvxtn22d.js.map} +0 -0
  763. /package/dist/{chunk-7t429e3f.js.map → chunk-xvsc5m8n.js.map} +0 -0
  764. /package/dist/{chunk-kg5j6fct.js.map → chunk-y5tah2kf.js.map} +0 -0
  765. /package/dist/{chunk-52bk93x8.js.map → chunk-z58tm0hm.js.map} +0 -0
@@ -15,7 +15,11 @@ import type {
15
15
  import { assertObjectReadOutputWithinLimit } from "../storage/objects/execution-limits"
16
16
  import { type ActionDescriptor, snapshotActionDescriptor } from "./descriptor"
17
17
  import { type RequestActionInput, requestAction } from "./request"
18
- import { canDelegationAccessActionRun } from "./run-authorization"
18
+ import {
19
+ canDelegationAccessActionRun,
20
+ canReadActionRunSubject,
21
+ unreadableActionRunTypes,
22
+ } from "./run-authorization"
19
23
  import type { ActionDefinition } from "./types"
20
24
 
21
25
  export interface ActionRunsRuntime {
@@ -130,27 +134,28 @@ export function createActionsRuntime(
130
134
  projectId,
131
135
  authority: authorization,
132
136
  run,
133
- }))))
137
+ })))) &&
138
+ (await canReadActionRunSubject(objectReader, run))
134
139
  ? release(run)
135
140
  : null
136
141
  },
137
- list: (input = {}) => {
142
+ list: async (input = {}) => {
138
143
  if (authorization.type === "denied" || authorization.type === "delegated") {
139
- return Promise.resolve({ runs: [], hasMore: false, total: 0 })
144
+ return { runs: [], hasMore: false, total: 0 }
140
145
  }
141
146
  const storage = runtime.storage.actionRuns
142
- if (!storage) return Promise.resolve({ runs: [], hasMore: false, total: 0 })
147
+ if (!storage) return { runs: [], hasMore: false, total: 0 }
148
+ if (authorization.type === "unrestricted") return storage.list({ ...input, projectId })
149
+
150
+ // Storage filters, so its pages and totals only count runs the reader can see.
151
+ const unreadable = await unreadableActionRunTypes(objectReader)
143
152
  return storage.list({
144
153
  ...input,
145
154
  projectId,
146
- actionIds:
147
- authorization.type === "principal"
148
- ? [...authorization.context.grants["apply:action"]]
149
- : undefined,
150
- objectTypeIds:
151
- authorization.type === "principal"
152
- ? [...authorization.context.grants["view:object"]]
153
- : undefined,
155
+ actionIds: [...authorization.context.grants["apply:action"]],
156
+ objectTypeIds: [...authorization.context.grants["view:object"]].filter(
157
+ (objectTypeId) => !unreadable.has(objectTypeId)
158
+ ),
154
159
  })
155
160
  },
156
161
  },
@@ -21,7 +21,7 @@ import {
21
21
  } from "../storage/objects/execution-limits"
22
22
  import { admitDelegatedObjectAction, assertDelegatedActionTarget } from "./delegated-admission"
23
23
  import { getActionRunExecutor } from "./run/executor"
24
- import { actionRunBelongsToShareGrant } from "./run-authorization"
24
+ import { actionRunBelongsToShareGrant, canReadActionRunSubject } from "./run-authorization"
25
25
  import { createActionRunId } from "./run-id"
26
26
  import { type ExistingActionRun, persistActionRun } from "./run-persistence"
27
27
  import type { ActionDefinition, ActionSubject } from "./types"
@@ -112,6 +112,12 @@ export async function requestAction(
112
112
 
113
113
  validateActionSubject(action, subject)
114
114
 
115
+ // A run names its subject: a principal cannot request one on a type it cannot read. The action
116
+ // itself runs as trusted code.
117
+ if (authorization.type !== "delegated" && subject.kind === "object") {
118
+ await objectReader.assertReadable({ objectTypeIds: [subject.objectTypeId] })
119
+ }
120
+
115
121
  let pathPrefix = action.id
116
122
  let objectType: ObjectTypeWithPropertyTokens | null = null
117
123
 
@@ -141,7 +147,13 @@ export async function requestAction(
141
147
 
142
148
  const payload = { actionId, subject, params: actionParams }
143
149
  const assertCanReuse = (run: ExistingActionRun) =>
144
- assertCallerMayHaveRun({ storage: runtime.storage, projectId, authorization, run })
150
+ assertCallerMayHaveRun({
151
+ storage: runtime.storage,
152
+ projectId,
153
+ authorization,
154
+ objectReader,
155
+ run,
156
+ })
145
157
  const persist = () =>
146
158
  persistActionRun({
147
159
  projectId,
@@ -201,6 +213,7 @@ async function assertCallerMayHaveRun(input: {
201
213
  readonly storage: SixbRuntimeContext["storage"]
202
214
  readonly projectId: string
203
215
  readonly authorization: ResolvedRuntimeAuthorization
216
+ readonly objectReader: SixbRuntimeContext["objectReader"]
204
217
  readonly run: ExistingActionRun
205
218
  }): Promise<void> {
206
219
  const { authorization, run } = input
@@ -213,7 +226,9 @@ async function assertCallerMayHaveRun(input: {
213
226
  run,
214
227
  grantId: authorization.delegation.grantId,
215
228
  }))
216
- : authorization.type !== "principal" || canViewActionRun(authorization.context, run)
229
+ : authorization.type !== "principal" ||
230
+ (canViewActionRun(authorization.context, run) &&
231
+ (await canReadActionRunSubject(input.objectReader, run)))
217
232
  if (!visible) {
218
233
  throw new AuthorizationError(
219
234
  `apply:action:${run.actionId}`,
@@ -1,8 +1,31 @@
1
1
  import type { ResolvedRuntimeAuthorization } from "../execution/authorization"
2
+ import { type AuthorizedObjectReader, readerClearance } from "../execution/authorized-object-reader"
2
3
  import type { Storage } from "../storage"
3
4
  import type { ActionRunRecord } from "../storage/action-runs"
4
5
  import { findPrimitiveParentRequestExecution } from "../storage/executions/run-link"
5
6
 
7
+ /**
8
+ * Whether the reader can read the object type of a run's subject under the markings of the
9
+ * versions projections applied. A run names its subject's id, so a run on a type the reader
10
+ * cannot read is hidden like one on a type it has no view grant for.
11
+ */
12
+ export async function canReadActionRunSubject(
13
+ objectReader: AuthorizedObjectReader,
14
+ run: Pick<ActionRunRecord, "subject">
15
+ ): Promise<boolean> {
16
+ if (run.subject.kind !== "object") return true
17
+ const clearance = await readerClearance(objectReader)
18
+ return clearance?.unreadableType(run.subject.objectTypeId) === undefined
19
+ }
20
+
21
+ /** The object types whose runs the reader cannot read, to leave out of a run listing. */
22
+ export async function unreadableActionRunTypes(
23
+ objectReader: AuthorizedObjectReader
24
+ ): Promise<ReadonlySet<string>> {
25
+ const clearance = await readerClearance(objectReader)
26
+ return new Set(clearance?.unreadable().types.keys())
27
+ }
28
+
6
29
  /** Check both current grant scope and immutable request provenance for a delegated Action run. */
7
30
  export async function canDelegationAccessActionRun(input: {
8
31
  readonly storage: Storage
@@ -0,0 +1,155 @@
1
+ # Activity
2
+
3
+ Internal invariants for app usage history. For setup, see the
4
+ [developer guide](../../../../docs/apps/activity.md).
5
+
6
+ ## Data model
7
+
8
+ | Record | Purpose |
9
+ | --- | --- |
10
+ | Source | Capture state of one verified session, shared by its tabs: current visit, last activity, sequence and quota window. Unrelated to `utm_source`. |
11
+ | Visit | Actor, session id, first and last activity, page-view and interaction counts and arrival attribution. A new visit starts after inactivity, or once the current one is a day old. |
12
+ | Page view | Normalized route, server receipt time and sequence within the visit. |
13
+ | Interaction | Name the app chose, normalized route, server receipt time and sequence, shared with page views. |
14
+
15
+ A source is keyed by the actor type and the session id: the `SessionRecord` id for a user, the
16
+ shared session's id for a share. Neither is a secret (a user session's token is stored as
17
+ `tokenHash`). The visit keeps the same id, so it can be joined with the execution ledger
18
+ (`authority_session_id`) and with the session's device. Reads never return it.
19
+
20
+ `page.view` is a load or a navigation and is stored. `visit.activity` is foreground activity: it
21
+ moves the visit's last activity and the source's state, counts toward the quota, and inserts
22
+ nothing, except when it opens a visit (someone back on a page after inactivity): it is then stored
23
+ as the visit's first page view, of that route. Hidden navigation is reported once visible. This is
24
+ not audit evidence.
25
+
26
+ `ui.interaction` is something the app marked, by name: it is stored, and is activity as well. Page
27
+ views and interactions take the visit's sequence in the order a batch sends them, so the timeline
28
+ reads both in one ordered, bounded pass. An interaction carries no attribution. One that opens a
29
+ visit (after the day-long cap, inactivity the browser had not seen, or a deleted visit) opens it as
30
+ activity does, on a page view of its route: that row's id is the interaction's with `.page`
31
+ appended, outside the event-id alphabet, and the visit's arrival is direct (`{}`). A retry of the
32
+ interaction is recognized by its own id, so neither row repeats.
33
+
34
+ A visit continues while its session is active and it is younger than a day
35
+ (`ACTIVITY_MAX_VISIT_MS`): the next event after either limit starts another. The cap is what lets a
36
+ period read bound `started_at` on both sides. A source whose current visit was deleted starts a
37
+ new one with its next event.
38
+
39
+ ## Capture and storage
40
+
41
+ - **Authority:** actor and session come from verified authorization only; a browser never names
42
+ either. HTTP capture takes a non-bearer cookie session or a shared-link session, nothing else.
43
+ Every read requires `can.observe(project.activity)`.
44
+ - **Atomic append:** providers serialize writes per source, including across replicas, and take
45
+ part in the storage transaction they run in. The [shared policy](../storage/activity/policy.ts)
46
+ owns deduplication, the quota, visit assignment, sequence and monotonic receipt time.
47
+ - **Retries:** an event whose id the session already stored is a retry, whether it was sent as a
48
+ page view or as the activity that opened a visit, or is an interaction: it neither extends the
49
+ visit nor uses quota, and the same id with another type, name, route or attribution fails. Other
50
+ activity is not stored, so a retried `visit.activity` counts again: it moves last activity to the
51
+ retry's receipt and uses quota. The browser gives up within about a minute, so that drift is
52
+ bounded.
53
+ - **Browser:** capture-config supplies enabled and the idle timeout once per authority; the server
54
+ stays authoritative. The in-memory queue is discarded on disposal, with at most three attempts,
55
+ one-minute expiry and ten seconds per request. A refusal (4xx) drops the batch; a 429 waits for
56
+ its `Retry-After`. Delivery and exact duration are not guaranteed.
57
+ - **Clock:** receipt time never moves back within a session, so a server clock stepping back
58
+ cannot reorder a visit.
59
+ - **Interactions:** explicit marking only, by `data-sixb-track` or `trackSixbEvent`; no
60
+ autocapture, element text, selector or value. Names are lowercase dotted segments, each starting
61
+ with a letter, at most 40 characters and without a run of four digits, 100 in all
62
+ (`ACTIVITY_INTERACTION_NAME_PATTERN`): what fails is usually a value. No pattern catches every
63
+ value; names are meant to be constants. The browser drops an invalid name and warns, for the
64
+ first 20 distinct ones; the API refuses the batch.
65
+ - **Browser interactions:** one capture-phase click listener on the document, trusted events only,
66
+ finds the marked element on the event's composed path. A click inside a disabled or
67
+ `aria-disabled` part of it is ignored, and so is a click on a label whose control is inside the
68
+ same marked element: the click the browser forwards to the control records it once. The same
69
+ name within a second is recorded once. A marked click is input, so it keeps the visit going; a
70
+ `trackSixbEvent` call is not, and is dropped once the person has been idle for the idle timeout,
71
+ so background code cannot keep a visit alive. Before the capture settings load, in a hidden tab
72
+ or on an unrecorded page, an interaction is dropped, not queued: it would otherwise reach the
73
+ server before its page view.
74
+ - **Retention:** no automatic expiration. Deleting one user's history is deleting their visits
75
+ (`user_id`), whose page views and interactions cascade, and the sources whose current visit was
76
+ one of them.
77
+
78
+ ## Attribution
79
+
80
+ | Value | Meaning |
81
+ | --- | --- |
82
+ | `{ source, medium, campaign }` | Available UTM labels, each limited to 100 characters. Missing labels stay absent. |
83
+ | `{ referrer }` | External hostname only; never a full URL. |
84
+ | `{}` | Direct arrival. |
85
+ | `null` | Not collected. |
86
+
87
+ - The first accepted event of a visit, page view or activity, fixes its attribution. A page view
88
+ keeps its own attribution only to recognize a retry.
89
+ - Later events send `{}`, so a visit started by inactivity does not inherit an old campaign. A
90
+ fresh document captures its own arrival. These are browser claims, not authorization evidence.
91
+ - Sixb redirects keep sanitized arrival metadata in per-tab, API- and authority-scoped
92
+ `sessionStorage` for 30 minutes, consumed on return. New UTMs take priority. Blocked storage
93
+ falls back to the current URL and referrer without blocking navigation.
94
+
95
+ ## Reads and counting
96
+
97
+ - **UTC everywhere.** A period `[from, to)`, at most 31 days, lists the visits it overlaps
98
+ (`started_at < to` and `last_seen_at >= from`) and counts the page views received in it. As a
99
+ visit lasts less than a day, the read also bounds `started_at >= from - 1 day`, which keeps it to
100
+ a range of the `started_at` indexes. A visit's own `pageViews` and `lastSeenAt` are the whole
101
+ visit's.
102
+ - A visit spanning midnight counts on both days, even when one of them holds only activity.
103
+ Never sum daily visits into a period total. Shares never count as identified users.
104
+ - The calendar covers one UTC year from the user's visits; days are expanded by the policy, so
105
+ every provider counts them alike.
106
+ - User filters precede counts and pagination. Display names resolve only for the accounts of
107
+ one page; no emails or other profile fields are returned. Shared visits name their link's share
108
+ definition (`actor.definitionId` on `ActivityVisitView`, never on the stored actor), from one
109
+ grant read for the page or visit; a grant that is gone leaves the grant id alone. The timeline
110
+ reuses that grant for the share connection's status.
111
+ - Visit and user cursors use last activity plus id, newest first. Ids compare byte by byte
112
+ (`COLLATE "C"` in PostgreSQL); generated visit ids are ASCII, so every provider orders them alike.
113
+ A visit's page views and interactions read by their shared sequence, the first 200 of them in
114
+ its timeline, which is the only read of one visit. Live activity can move a visit between pages,
115
+ so clients deduplicate ids and offer a refresh.
116
+
117
+ ## Timeline and connections
118
+
119
+ A visit's timeline joins it with what its session did, by the session id alone: never by user and
120
+ time range, so the same user's other browser, active at the same time, stays out.
121
+
122
+ - **Join:** roots are the executions without a parent whose verified session is the visit's,
123
+ `authority_session_id` for a user and `authority_delegation_session_id` for a share. Read-only
124
+ requests write none. Their descendants are found through `parent_execution_id`, not
125
+ `correlation_id`, which a client can set. An Agent execution copies its parent's session; requiring
126
+ no parent keeps it from counting as a root.
127
+ - **Window:** roots created in `[start - 30 s, last activity + 30 s)`, capped 30 s before the
128
+ visit's day-long limit. A click right after a return reaches the server before the activity
129
+ that opens the visit, and an action just before leaving may follow the last activity sent. Half
130
+ the shortest idle timeout keeps two visits of a session from sharing an execution. Descendants
131
+ are not time-filtered: a queued workflow or an Agent's tools may run long after the visit.
132
+ - **Entries:** page views, interactions, action runs, workflow runs and conversation Agent runs, by
133
+ time; page views and interactions in their sequence. An action execution without a recorded run
134
+ is `incomplete`: in flight, or interrupted. An Agent run's cost includes everything below it,
135
+ subagents and tools included; a Workflow's Agent steps are not conversations and have no entry.
136
+ Page views and interactions are at their server receipt, executions at their creation: the
137
+ app's steps credit an execution to the last page view before it, so one started as the page
138
+ changed can land in the neighboring step.
139
+ - **Content:** a run shows its thread's message count, never its title or messages. An action
140
+ names its object only when the viewer's own object reader returns it, so object type grants,
141
+ markings and deletion all hide it. `runVisible` says whether the viewer may read the run
142
+ itself, decided as the runs reads decide it (`canViewActionRun` and the subject type's
143
+ markings, `canViewWorkflowRun`); the app links a run only then.
144
+ - **Bounds:** 200 page views and interactions together, and 200 recorded executions, roots first
145
+ and the earliest first. Past either limit `truncated` is set and the timeline stops at the last
146
+ page view or interaction, or the last root, it kept: the cut leaves no gap where one source is
147
+ missing. One read per source: the visit, the ledger, the session, action runs, workflow runs,
148
+ Agent runs, costs, threads, and one object batch per object type.
149
+ - **Connections:** a user's sessions, revoked and expired ones too, newest first, with the device
150
+ their user agent names (browser and system only), a native client's label, and each session's
151
+ visit count and latest five visits. No address, user agent or session id is returned: the
152
+ cursor holds a creation time and how many sessions created then were returned. A share's
153
+ session has no device: its connection is the link's grant, and it reads as revoked or expired
154
+ once either the session or the grant is.
155
+
@@ -0,0 +1,217 @@
1
+ import type { SixbRuntimeContext } from "../runtime/types"
2
+ import type { ActivityVisit, StoredActivityVisitPage } from "../storage/activity/types"
3
+ import type { SessionRecord } from "../storage/auth"
4
+ import type { ShareGrantRecord } from "../storage/share-grants"
5
+ import { type ActivityDevice, describeUserAgent } from "./device"
6
+ import type { ActivityService } from "./service"
7
+
8
+ export type ActivityConnectionStatus = "active" | "expired" | "revoked"
9
+
10
+ /** A signed-in session. No address or token is kept here. */
11
+ export interface ActivitySessionConnection {
12
+ readonly type: "session"
13
+ readonly device: ActivityDevice
14
+ /** A native client's own label, such as a CLI's. */
15
+ readonly clientName?: string
16
+ readonly status: ActivityConnectionStatus
17
+ readonly createdAt: Date
18
+ readonly lastSeenAt?: Date
19
+ readonly revokedAt?: Date
20
+ }
21
+
22
+ /** The shared link a visitor opened, and the session it gave them. */
23
+ export interface ActivityShareConnection {
24
+ readonly type: "share"
25
+ readonly grantId: string
26
+ /** Absent once the link's grant is gone. */
27
+ readonly definitionId?: string
28
+ readonly status: ActivityConnectionStatus
29
+ readonly createdAt: Date
30
+ readonly revokedAt?: Date
31
+ }
32
+
33
+ export type ActivityConnection = ActivitySessionConnection | ActivityShareConnection
34
+
35
+ /** A user's sign-in, with the visits it opened. */
36
+ export interface ActivityUserConnection extends ActivitySessionConnection {
37
+ /** Every visit the session opened. */
38
+ readonly visits: number
39
+ /** Its latest visits, newest first. */
40
+ readonly latestVisits: readonly ActivityVisit[]
41
+ }
42
+
43
+ export interface ActivityConnectionsPage {
44
+ readonly connections: readonly ActivityUserConnection[]
45
+ /** Pass it back as `cursor` for the next, older connections; absent on the last page. */
46
+ readonly nextCursor?: string
47
+ }
48
+
49
+ export interface ActivityConnectionsQuery {
50
+ readonly userId: string
51
+ /** 1 to 100. Default: 20. */
52
+ readonly limit?: number
53
+ /** The previous page's `nextCursor`. */
54
+ readonly cursor?: string
55
+ }
56
+
57
+ /** Where a list of sessions continues: a creation time, and how many created then it returned. */
58
+ export interface ActivityConnectionsCursor {
59
+ readonly createdAt: Date
60
+ readonly skip: number
61
+ }
62
+
63
+ /** A user's sign-ins, newest first, revoked and expired ones too: one read per store. */
64
+ export async function readActivityConnections(
65
+ runtime: SixbRuntimeContext,
66
+ service: ActivityService,
67
+ query: ActivityConnectionsQuery,
68
+ now: Date
69
+ ): Promise<ActivityConnectionsPage> {
70
+ const { userId, limit, before } = service.connectionsQuery(query)
71
+ const sessions = runtime.storage.auth?.sessions
72
+ if (!sessions) {
73
+ return { connections: [] }
74
+ }
75
+
76
+ const page = await sessions.listByUserId({
77
+ projectId: runtime.projectId,
78
+ userId,
79
+ limit,
80
+ ...(before === undefined ? {} : { before }),
81
+ })
82
+ const visits = await service.sessionVisits({
83
+ userId,
84
+ sessionIds: page.sessions.map((session) => session.id),
85
+ })
86
+ const bySession = new Map(visits.map((entry) => [entry.sessionId, entry]))
87
+
88
+ const connections = page.sessions.map((session) => ({
89
+ ...sessionConnection(session, now),
90
+ visits: bySession.get(session.id)?.visits ?? 0,
91
+ latestVisits: bySession.get(session.id)?.latest ?? [],
92
+ }))
93
+ const last = page.sessions.at(-1)
94
+
95
+ return {
96
+ connections,
97
+ ...(page.hasMore && last
98
+ ? { nextCursor: nextConnectionsCursor(page.sessions, last, before) }
99
+ : {}),
100
+ }
101
+ }
102
+
103
+ /**
104
+ * The cursor after a page: its last creation time, and how many sessions created then this page
105
+ * and the ones before it returned. It names no session, so the session id never leaves core.
106
+ */
107
+ function nextConnectionsCursor(
108
+ sessions: readonly SessionRecord[],
109
+ last: SessionRecord,
110
+ before: ActivityConnectionsCursor | undefined
111
+ ): string {
112
+ const { createdAt } = last
113
+ const tied = sessions.filter((session) => session.createdAt.getTime() === createdAt.getTime())
114
+ const earlier = before && before.createdAt.getTime() === createdAt.getTime() ? before.skip : 0
115
+
116
+ return encodeActivityConnectionsCursor({ createdAt, skip: earlier + tied.length })
117
+ }
118
+
119
+ export function encodeActivityConnectionsCursor(cursor: ActivityConnectionsCursor): string {
120
+ return Buffer.from(JSON.stringify([cursor.createdAt.toISOString(), cursor.skip])).toString(
121
+ "base64url"
122
+ )
123
+ }
124
+
125
+ export function decodeActivityConnectionsCursor(value: string): ActivityConnectionsCursor {
126
+ try {
127
+ const parsed: unknown = JSON.parse(Buffer.from(value, "base64url").toString("utf8"))
128
+ if (Array.isArray(parsed) && parsed.length === 2) {
129
+ const [at, skip] = parsed
130
+ const createdAt = new Date(typeof at === "string" ? at : Number.NaN)
131
+ if (Number.isFinite(createdAt.getTime()) && Number.isSafeInteger(skip) && skip >= 0) {
132
+ return { createdAt, skip }
133
+ }
134
+ }
135
+ } catch {
136
+ // Reported below, like any other malformed cursor.
137
+ }
138
+ throw new Error("[Sixb] Invalid activity connections cursor.")
139
+ }
140
+
141
+ /**
142
+ * The session a visit came through: a sign-in, or a shared link, whose grant the caller read with
143
+ * the visit's share name.
144
+ */
145
+ export async function readActivityConnection(
146
+ runtime: SixbRuntimeContext,
147
+ page: StoredActivityVisitPage,
148
+ grant: ShareGrantRecord | undefined,
149
+ now: Date
150
+ ): Promise<ActivityConnection | undefined> {
151
+ const { storage, projectId } = runtime
152
+ const { actor } = page.visit
153
+
154
+ if (actor.type === "user") {
155
+ const session = await storage.auth?.sessions.getById({ projectId, id: page.sessionId })
156
+ return session ? sessionConnection(session, now) : undefined
157
+ }
158
+
159
+ const session = await storage.shareSessions?.getById({ projectId, id: page.sessionId })
160
+ if (!session) {
161
+ return undefined
162
+ }
163
+
164
+ // A session lasts no longer than its link: revoking or expiring the grant ends it too.
165
+ const revokedAt = [session.revokedAt, grant?.revokedAt]
166
+ .flatMap((at) => (at === undefined ? [] : [at.getTime()]))
167
+ .sort((left, right) => left - right)[0]
168
+ const statuses = [
169
+ connectionStatus(session, now),
170
+ ...(grant ? [connectionStatus(grant, now)] : []),
171
+ ]
172
+ const status = statuses.includes("revoked")
173
+ ? "revoked"
174
+ : statuses.includes("expired")
175
+ ? "expired"
176
+ : "active"
177
+
178
+ return {
179
+ type: "share",
180
+ grantId: actor.grantId,
181
+ ...(grant ? { definitionId: grant.definitionId } : {}),
182
+ status,
183
+ createdAt: new Date(session.createdAt),
184
+ ...(revokedAt === undefined ? {} : { revokedAt: new Date(revokedAt) }),
185
+ }
186
+ }
187
+
188
+ function connectionStatus(
189
+ session: {
190
+ readonly expiresAt: Date
191
+ readonly absoluteExpiresAt?: Date
192
+ readonly revokedAt?: Date
193
+ },
194
+ now: Date
195
+ ): ActivityConnectionStatus {
196
+ if (session.revokedAt) {
197
+ return "revoked"
198
+ }
199
+
200
+ const expired =
201
+ session.expiresAt <= now ||
202
+ (session.absoluteExpiresAt !== undefined && session.absoluteExpiresAt <= now)
203
+ return expired ? "expired" : "active"
204
+ }
205
+
206
+ /** A signed-in session as a connection, from its record and the time it is read at. */
207
+ function sessionConnection(session: SessionRecord, now: Date): ActivitySessionConnection {
208
+ return {
209
+ type: "session",
210
+ device: describeUserAgent(session.userAgent),
211
+ ...(session.bearer === undefined ? {} : { clientName: session.bearer.clientName }),
212
+ status: connectionStatus(session, now),
213
+ createdAt: new Date(session.createdAt),
214
+ ...(session.lastSeenAt === undefined ? {} : { lastSeenAt: new Date(session.lastSeenAt) }),
215
+ ...(session.revokedAt === undefined ? {} : { revokedAt: new Date(session.revokedAt) }),
216
+ }
217
+ }
@@ -0,0 +1,41 @@
1
+ /** What a user agent says about the device that signed in. Display only, never authorization. */
2
+ export interface ActivityDevice {
3
+ readonly browser?: string
4
+ readonly os?: string
5
+ }
6
+
7
+ // First match wins: Edge and Opera also name Chrome, Chrome names Safari, iOS names Mac OS X, and
8
+ // Android names Linux.
9
+ const BROWSERS: readonly (readonly [RegExp, string])[] = [
10
+ [/\bEdg(?:e|A|iOS)?\//, "Edge"],
11
+ [/\b(?:OPR|Opera)\//, "Opera"],
12
+ [/\bSamsungBrowser\//, "Samsung Internet"],
13
+ [/\b(?:Firefox|FxiOS)\//, "Firefox"],
14
+ [/\b(?:Chrome|Chromium|CriOS|HeadlessChrome)\//, "Chrome"],
15
+ [/\bVersion\/[\d.]+.*\bSafari\//, "Safari"],
16
+ ]
17
+
18
+ const SYSTEMS: readonly (readonly [RegExp, string])[] = [
19
+ [/\bWindows\b/, "Windows"],
20
+ [/\biPad\b/, "iPadOS"],
21
+ [/\b(?:iPhone|iPod)\b/, "iOS"],
22
+ [/\bAndroid\b/, "Android"],
23
+ [/\bCrOS\b/, "ChromeOS"],
24
+ [/\bMac OS X\b|\bMacintosh\b/, "macOS"],
25
+ [/\bLinux\b/, "Linux"],
26
+ ]
27
+
28
+ /** The browser and operating system a user agent names, when it names a common one. */
29
+ export function describeUserAgent(userAgent: string | undefined): ActivityDevice {
30
+ if (!userAgent) {
31
+ return {}
32
+ }
33
+
34
+ const browser = BROWSERS.find(([pattern]) => pattern.test(userAgent))?.[1]
35
+ const os = SYSTEMS.find(([pattern]) => pattern.test(userAgent))?.[1]
36
+
37
+ return {
38
+ ...(browser === undefined ? {} : { browser }),
39
+ ...(os === undefined ? {} : { os }),
40
+ }
41
+ }