@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.
- package/dist/actions/execution.d.ts.map +1 -1
- package/dist/actions/index.js +54 -47
- package/dist/actions/index.js.map +1 -1
- package/dist/actions/request.d.ts.map +1 -1
- package/dist/actions/run-authorization.d.ts +9 -0
- package/dist/actions/run-authorization.d.ts.map +1 -1
- package/dist/activity/connection.d.ts +62 -0
- package/dist/activity/connection.d.ts.map +1 -0
- package/dist/activity/device.d.ts +8 -0
- package/dist/activity/device.d.ts.map +1 -0
- package/dist/activity/execution.d.ts +48 -0
- package/dist/activity/execution.d.ts.map +1 -0
- package/dist/activity/service.d.ts +79 -0
- package/dist/activity/service.d.ts.map +1 -0
- package/dist/activity/shares.d.ts +24 -0
- package/dist/activity/shares.d.ts.map +1 -0
- package/dist/activity/timeline.d.ts +96 -0
- package/dist/activity/timeline.d.ts.map +1 -0
- package/dist/agents/index.d.ts +2 -1
- package/dist/agents/index.d.ts.map +1 -1
- package/dist/agents/index.js +63 -50
- package/dist/agents/index.js.map +1 -1
- package/dist/agents/request.d.ts.map +1 -1
- package/dist/agents/skills.d.ts.map +1 -1
- package/dist/agents/streams/index.js +3 -3
- package/dist/agents/streams/internal.js +3 -3
- package/dist/agents/types.d.ts +8 -8
- package/dist/agents/types.d.ts.map +1 -1
- package/dist/agents/validation.d.ts +1 -1
- package/dist/agents/validation.d.ts.map +1 -1
- package/dist/artifacts/address.d.ts +48 -0
- package/dist/artifacts/address.d.ts.map +1 -0
- package/dist/artifacts/csv.d.ts +22 -0
- package/dist/artifacts/csv.d.ts.map +1 -0
- package/dist/artifacts/errors.d.ts +11 -0
- package/dist/artifacts/errors.d.ts.map +1 -0
- package/dist/artifacts/execution.d.ts +43 -0
- package/dist/artifacts/execution.d.ts.map +1 -0
- package/dist/artifacts/frames/assets.d.ts +28 -0
- package/dist/artifacts/frames/assets.d.ts.map +1 -0
- package/dist/artifacts/frames/grants.d.ts +37 -0
- package/dist/artifacts/frames/grants.d.ts.map +1 -0
- package/dist/artifacts/frames/index.d.ts +10 -0
- package/dist/artifacts/frames/index.d.ts.map +1 -0
- package/dist/artifacts/frames/index.js +892 -0
- package/dist/artifacts/frames/index.js.map +14 -0
- package/dist/artifacts/frames/kit.d.ts +66 -0
- package/dist/artifacts/frames/kit.d.ts.map +1 -0
- package/dist/artifacts/frames/probe.d.ts +41 -0
- package/dist/artifacts/frames/probe.d.ts.map +1 -0
- package/dist/artifacts/frames/protocol.d.ts +98 -0
- package/dist/artifacts/frames/protocol.d.ts.map +1 -0
- package/dist/artifacts/frames/runtime.d.ts +13 -0
- package/dist/artifacts/frames/runtime.d.ts.map +1 -0
- package/dist/artifacts/html.d.ts +6 -0
- package/dist/artifacts/html.d.ts.map +1 -0
- package/dist/artifacts/ids.d.ts +5 -0
- package/dist/artifacts/ids.d.ts.map +1 -0
- package/dist/artifacts/index.d.ts +16 -0
- package/dist/artifacts/index.d.ts.map +1 -0
- package/dist/artifacts/index.js +125 -0
- package/dist/artifacts/index.js.map +10 -0
- package/dist/artifacts/kinds.d.ts +5 -0
- package/dist/artifacts/kinds.d.ts.map +1 -0
- package/dist/artifacts/limits.d.ts +28 -0
- package/dist/artifacts/limits.d.ts.map +1 -0
- package/dist/artifacts/outline.d.ts +44 -0
- package/dist/artifacts/outline.d.ts.map +1 -0
- package/dist/artifacts/publish/files.d.ts +15 -0
- package/dist/artifacts/publish/files.d.ts.map +1 -0
- package/dist/artifacts/publish/index.d.ts +5 -0
- package/dist/artifacts/publish/index.d.ts.map +1 -0
- package/dist/artifacts/publish/index.js +36 -0
- package/dist/artifacts/publish/index.js.map +9 -0
- package/dist/artifacts/publish/publish.d.ts +52 -0
- package/dist/artifacts/publish/publish.d.ts.map +1 -0
- package/dist/artifacts/publish/references.d.ts +27 -0
- package/dist/artifacts/publish/references.d.ts.map +1 -0
- package/dist/artifacts/publish/validate/document.d.ts +17 -0
- package/dist/artifacts/publish/validate/document.d.ts.map +1 -0
- package/dist/artifacts/publish/validate/file.d.ts +8 -0
- package/dist/artifacts/publish/validate/file.d.ts.map +1 -0
- package/dist/artifacts/publish/validate/sheet.d.ts +15 -0
- package/dist/artifacts/publish/validate/sheet.d.ts.map +1 -0
- package/dist/artifacts/publish/validate/slides.d.ts +21 -0
- package/dist/artifacts/publish/validate/slides.d.ts.map +1 -0
- package/dist/artifacts/references.d.ts +12 -0
- package/dist/artifacts/references.d.ts.map +1 -0
- package/dist/artifacts/resolve.d.ts +41 -0
- package/dist/artifacts/resolve.d.ts.map +1 -0
- package/dist/artifacts/theme.d.ts +19 -0
- package/dist/artifacts/theme.d.ts.map +1 -0
- package/dist/artifacts/warnings.d.ts +11 -0
- package/dist/artifacts/warnings.d.ts.map +1 -0
- package/dist/artifacts/workbook.d.ts +64 -0
- package/dist/artifacts/workbook.d.ts.map +1 -0
- package/dist/auth/cookies.d.ts +2 -4
- package/dist/auth/cookies.d.ts.map +1 -1
- package/dist/auth/index.d.ts +0 -2
- package/dist/auth/index.d.ts.map +1 -1
- package/dist/auth/index.js +14 -20
- package/dist/auth/index.js.map +1 -1
- package/dist/auth/runtime.d.ts +8 -10
- package/dist/auth/runtime.d.ts.map +1 -1
- package/dist/auth/session-cache.d.ts +1 -5
- package/dist/auth/session-cache.d.ts.map +1 -1
- package/dist/auth/strategy.js +1 -1
- package/dist/auth/types.d.ts +4 -8
- package/dist/auth/types.d.ts.map +1 -1
- package/dist/auth/validation.d.ts +0 -1
- package/dist/auth/validation.d.ts.map +1 -1
- package/dist/authorization/decision.d.ts +2 -4
- package/dist/authorization/decision.d.ts.map +1 -1
- package/dist/authorization/grant-kinds.d.ts +6 -8
- package/dist/authorization/grant-kinds.d.ts.map +1 -1
- package/dist/authorization/index.d.ts +0 -1
- package/dist/authorization/index.d.ts.map +1 -1
- package/dist/authorization/index.js +7 -11
- package/dist/authorization/index.js.map +1 -1
- package/dist/authorization/resolve.d.ts +1 -1
- package/dist/authorization/resolve.d.ts.map +1 -1
- package/dist/blob-storage/browser.js +1 -1
- package/dist/blob-storage/index.js +2 -2
- package/dist/blob-storage/internal.d.ts +1 -1
- package/dist/blob-storage/internal.d.ts.map +1 -1
- package/dist/blob-storage/internal.js +11 -5
- package/dist/blob-storage/internal.js.map +1 -1
- package/dist/blob-storage/media-type.d.ts +12 -0
- package/dist/blob-storage/media-type.d.ts.map +1 -1
- package/dist/bootstrap/index.js +54 -48
- package/dist/bootstrap/index.js.map +2 -2
- package/dist/{chunk-t6vq7bff.js → chunk-0bphap9y.js} +5 -5
- package/dist/{chunk-7mbzgd9m.js → chunk-1cc1xaf3.js} +3 -3
- package/dist/chunk-3jms7je7.js +14 -0
- package/dist/chunk-3jms7je7.js.map +10 -0
- package/dist/{chunk-s54c868q.js → chunk-3qct2mdc.js} +3 -13
- package/dist/chunk-3qct2mdc.js.map +12 -0
- package/dist/{chunk-6gmfggss.js → chunk-431pyp2c.js} +3 -3
- package/dist/{chunk-c85m1hyj.js → chunk-447a5c0p.js} +2 -2
- package/dist/chunk-48qjhh6v.js +185 -0
- package/dist/chunk-48qjhh6v.js.map +13 -0
- package/dist/{chunk-80mc0971.js → chunk-561r0yc9.js} +8 -8
- package/dist/{chunk-5e43w60z.js → chunk-5948n82c.js} +2 -2
- package/dist/{chunk-yzwja0mj.js → chunk-5hx48dnn.js} +2 -2
- package/dist/{chunk-tjb1mk5t.js → chunk-5vems3nx.js} +5 -6
- package/dist/{chunk-tjb1mk5t.js.map → chunk-5vems3nx.js.map} +3 -3
- package/dist/{chunk-aff7cyea.js → chunk-61y5xs4p.js} +563 -167
- package/dist/{chunk-aff7cyea.js.map → chunk-61y5xs4p.js.map} +12 -9
- package/dist/chunk-65abf64x.js +13 -0
- package/dist/chunk-65abf64x.js.map +10 -0
- package/dist/{chunk-z3y5kg1x.js → chunk-6eqsgvxk.js} +3 -3
- package/dist/{chunk-z3y5kg1x.js.map → chunk-6eqsgvxk.js.map} +2 -2
- package/dist/chunk-6rqgmkde.js +2028 -0
- package/dist/chunk-6rqgmkde.js.map +29 -0
- package/dist/{chunk-y7rqfrgg.js → chunk-6vb4st8k.js} +29 -38
- package/dist/chunk-6vb4st8k.js.map +23 -0
- package/dist/chunk-7q8t23v4.js +467 -0
- package/dist/chunk-7q8t23v4.js.map +14 -0
- package/dist/{chunk-kyzq4wy9.js → chunk-858emn8m.js} +17 -17
- package/dist/chunk-858emn8m.js.map +18 -0
- package/dist/{chunk-hvsb78a1.js → chunk-8frc8a4j.js} +26 -26
- package/dist/{chunk-hvsb78a1.js.map → chunk-8frc8a4j.js.map} +2 -2
- package/dist/{chunk-3zxk45er.js → chunk-8ncg20rd.js} +3 -68
- package/dist/{chunk-3zxk45er.js.map → chunk-8ncg20rd.js.map} +4 -5
- package/dist/{chunk-j2bp5ryw.js → chunk-918wwnaa.js} +495 -28
- package/dist/{chunk-j2bp5ryw.js.map → chunk-918wwnaa.js.map} +14 -12
- package/dist/{chunk-1f7wpmyp.js → chunk-9j4jw7as.js} +103 -110
- package/dist/chunk-9j4jw7as.js.map +14 -0
- package/dist/chunk-9kgkfg6v.js +502 -0
- package/dist/chunk-9kgkfg6v.js.map +14 -0
- package/dist/chunk-a3faa34j.js +74 -0
- package/dist/chunk-a3faa34j.js.map +10 -0
- package/dist/{chunk-ey3pyej1.js → chunk-akzryx9h.js} +347 -1174
- package/dist/{chunk-ey3pyej1.js.map → chunk-akzryx9h.js.map} +19 -25
- package/dist/chunk-arns890k.js +10 -0
- package/dist/chunk-arns890k.js.map +10 -0
- package/dist/{chunk-zrmy8zvw.js → chunk-bk9svbcq.js} +11 -11
- package/dist/{chunk-zrmy8zvw.js.map → chunk-bk9svbcq.js.map} +2 -2
- package/dist/{chunk-hkc3jct7.js → chunk-c06hmxyy.js} +2 -10
- package/dist/chunk-c06hmxyy.js.map +10 -0
- package/dist/{chunk-q1vkr2ys.js → chunk-c1rxbz5y.js} +3 -3
- package/dist/chunk-cfj9dfbb.js +288 -0
- package/dist/chunk-cfj9dfbb.js.map +12 -0
- package/dist/{chunk-4tcx876c.js → chunk-cn0fwwhy.js} +19 -19
- package/dist/{chunk-4tcx876c.js.map → chunk-cn0fwwhy.js.map} +1 -1
- package/dist/{chunk-gc4ntf7d.js → chunk-cwdzcv37.js} +1 -1
- package/dist/{chunk-fa02jy15.js → chunk-cy4mbddw.js} +1 -1
- package/dist/{chunk-7kg3k1m9.js → chunk-d09e3rax.js} +1 -1
- package/dist/chunk-d5rjr8c0.js +176 -0
- package/dist/chunk-d5rjr8c0.js.map +12 -0
- package/dist/{chunk-rhg02hxq.js → chunk-d7dnxdep.js} +3 -3
- package/dist/{chunk-b38szspf.js → chunk-dhcv7yxc.js} +1 -1
- package/dist/{chunk-b38szspf.js.map → chunk-dhcv7yxc.js.map} +1 -1
- package/dist/{chunk-enpsx8k5.js → chunk-dhdha526.js} +23 -21
- package/dist/chunk-dhdha526.js.map +10 -0
- package/dist/{chunk-8mx7qw3y.js → chunk-dvd2fp9q.js} +2 -2
- package/dist/{chunk-8mx7qw3y.js.map → chunk-dvd2fp9q.js.map} +3 -3
- package/dist/{chunk-bwjcehza.js → chunk-e17zdm62.js} +6 -12
- package/dist/{chunk-bwjcehza.js.map → chunk-e17zdm62.js.map} +3 -4
- package/dist/{chunk-tpn40322.js → chunk-e6k4thh5.js} +11 -10
- package/dist/{chunk-tpn40322.js.map → chunk-e6k4thh5.js.map} +3 -3
- package/dist/{chunk-tw03bsmb.js → chunk-eptrvnby.js} +224 -3
- package/dist/chunk-eptrvnby.js.map +12 -0
- package/dist/{chunk-xt1zt7gv.js → chunk-f4pamkt9.js} +30 -23
- package/dist/chunk-f4pamkt9.js.map +12 -0
- package/dist/chunk-ff5xkv0p.js +211 -0
- package/dist/chunk-ff5xkv0p.js.map +10 -0
- package/dist/{chunk-bpgy64fw.js → chunk-g257jwnc.js} +10 -4
- package/dist/{chunk-bpgy64fw.js.map → chunk-g257jwnc.js.map} +3 -3
- package/dist/chunk-g5bvzyyr.js +32 -0
- package/dist/chunk-g5bvzyyr.js.map +10 -0
- package/dist/{chunk-2jntasmh.js → chunk-hcbyfxbe.js} +25 -49
- package/dist/chunk-hcbyfxbe.js.map +12 -0
- package/dist/chunk-hke9aeen.js +9 -0
- package/dist/chunk-hke9aeen.js.map +10 -0
- package/dist/{chunk-1sr8ryzk.js → chunk-hwksyjks.js} +122 -1
- package/dist/{chunk-1sr8ryzk.js.map → chunk-hwksyjks.js.map} +3 -3
- package/dist/chunk-jcfw4h7m.js +9 -0
- package/dist/chunk-jcfw4h7m.js.map +10 -0
- package/dist/{chunk-85yvv5n0.js → chunk-k43ct2ke.js} +20 -11
- package/dist/chunk-k43ct2ke.js.map +12 -0
- package/dist/{chunk-dnmadg9k.js → chunk-kge7k6ey.js} +40 -8
- package/dist/chunk-kge7k6ey.js.map +15 -0
- package/dist/{chunk-wz0xs816.js → chunk-ky3j490c.js} +2 -2
- package/dist/chunk-mjddfa7k.js +129 -0
- package/dist/chunk-mjddfa7k.js.map +12 -0
- package/dist/{chunk-3gnrh4ve.js → chunk-nn5xnx3s.js} +86 -111
- package/dist/chunk-nn5xnx3s.js.map +40 -0
- package/dist/{chunk-rz53yb4v.js → chunk-q5e5tv4b.js} +35 -7
- package/dist/{chunk-rz53yb4v.js.map → chunk-q5e5tv4b.js.map} +3 -3
- package/dist/{chunk-vyf9kfqf.js → chunk-q7gn29y3.js} +1 -1
- package/dist/{chunk-d2ync1v3.js → chunk-rmakanzx.js} +10 -12
- package/dist/{chunk-d2ync1v3.js.map → chunk-rmakanzx.js.map} +3 -4
- package/dist/{chunk-v9xd5wzd.js → chunk-s7jg7pmn.js} +1 -1
- package/dist/chunk-tbc1ngpd.js +642 -0
- package/dist/chunk-tbc1ngpd.js.map +18 -0
- package/dist/chunk-twe4dx8p.js +676 -0
- package/dist/chunk-twe4dx8p.js.map +15 -0
- package/dist/{chunk-nre82s12.js → chunk-vf57cr4t.js} +2 -2
- package/dist/{chunk-9ybhtmg4.js → chunk-vvxtn22d.js} +1 -1
- package/dist/{chunk-jhm3zsa7.js → chunk-wkv3h3q7.js} +64 -2
- package/dist/{chunk-jhm3zsa7.js.map → chunk-wkv3h3q7.js.map} +3 -3
- package/dist/chunk-x0v3jd47.js +124 -0
- package/dist/chunk-x0v3jd47.js.map +10 -0
- package/dist/{chunk-7t429e3f.js → chunk-xvsc5m8n.js} +1 -1
- package/dist/{chunk-kg5j6fct.js → chunk-y5tah2kf.js} +1 -1
- package/dist/{chunk-52bk93x8.js → chunk-z58tm0hm.js} +2 -2
- package/dist/datasets/builders.d.ts +15 -2
- package/dist/datasets/builders.d.ts.map +1 -1
- package/dist/datasets/column-index.d.ts +7 -0
- package/dist/datasets/column-index.d.ts.map +1 -0
- package/dist/datasets/execution.d.ts +3 -2
- package/dist/datasets/execution.d.ts.map +1 -1
- package/dist/datasets/write.js +8 -8
- package/dist/deploy/internal.js +4 -3
- package/dist/deploy/internal.js.map +4 -4
- package/dist/deploy/services.d.ts.map +1 -1
- package/dist/deploy/types.d.ts +1 -2
- package/dist/deploy/types.d.ts.map +1 -1
- package/dist/error-reporting/internal.js +4 -4
- package/dist/errors/internal.d.ts +1 -0
- package/dist/errors/internal.d.ts.map +1 -1
- package/dist/errors/internal.js +7 -4
- package/dist/errors/internal.js.map +1 -1
- package/dist/events/execution.d.ts +12 -2
- package/dist/events/execution.d.ts.map +1 -1
- package/dist/events/index.js +4 -4
- package/dist/execution/agent.js +56 -49
- package/dist/execution/agent.js.map +1 -1
- package/dist/execution/authorization.d.ts.map +1 -1
- package/dist/execution/authorized-object-reader.d.ts +52 -11
- package/dist/execution/authorized-object-reader.d.ts.map +1 -1
- package/dist/execution/object-reader-clearance.d.ts +41 -0
- package/dist/execution/object-reader-clearance.d.ts.map +1 -0
- package/dist/execution/object-reader-ontology.d.ts +12 -0
- package/dist/execution/object-reader-ontology.d.ts.map +1 -0
- package/dist/execution/object-reader-security.d.ts +45 -0
- package/dist/execution/object-reader-security.d.ts.map +1 -0
- package/dist/execution/primitive.js +54 -47
- package/dist/execution/primitive.js.map +1 -1
- package/dist/execution/request.js +49 -42
- package/dist/execution/request.js.map +2 -2
- package/dist/http/api-routes.d.ts.map +1 -1
- package/dist/http/index.js +1 -1
- package/dist/index.d.ts +23 -7
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +111 -109
- package/dist/index.js.map +1 -1
- package/dist/lake-storage/in-memory.d.ts +1 -0
- package/dist/lake-storage/in-memory.d.ts.map +1 -1
- package/dist/lake-storage/index.d.ts +6 -3
- package/dist/lake-storage/index.d.ts.map +1 -1
- package/dist/lake-storage/index.js +21 -13
- package/dist/lake-storage/index.js.map +1 -1
- package/dist/lake-storage/lineage.d.ts +94 -0
- package/dist/lake-storage/lineage.d.ts.map +1 -0
- package/dist/lake-storage/sql-transforms.d.ts +45 -0
- package/dist/lake-storage/sql-transforms.d.ts.map +1 -1
- package/dist/lake-storage/types.d.ts +55 -1
- package/dist/lake-storage/types.d.ts.map +1 -1
- package/dist/lake-storage/version-inputs.d.ts +14 -3
- package/dist/lake-storage/version-inputs.d.ts.map +1 -1
- package/dist/maintenance/ontology-maintenance.d.ts.map +1 -1
- package/dist/materializer/index.js +31 -30
- package/dist/materializer/index.js.map +1 -1
- package/dist/models/execution/index.js +26 -25
- package/dist/models/execution/index.js.map +1 -1
- package/dist/objects/clearance-redaction.d.ts +27 -0
- package/dist/objects/clearance-redaction.d.ts.map +1 -0
- package/dist/objects/index.js +54 -47
- package/dist/objects/index.js.map +1 -1
- package/dist/objects/link/authorization.d.ts +8 -5
- package/dist/objects/link/authorization.d.ts.map +1 -1
- package/dist/objects/link/upsert-batch.d.ts.map +1 -1
- package/dist/objects/object/delete.d.ts.map +1 -1
- package/dist/objects/object/upsert-batch.d.ts.map +1 -1
- package/dist/objects/object/upsert.d.ts.map +1 -1
- package/dist/objects/property-clearance.d.ts +47 -24
- package/dist/objects/property-clearance.d.ts.map +1 -1
- package/dist/objects/query/clearance-admission.d.ts +10 -0
- package/dist/objects/query/clearance-admission.d.ts.map +1 -0
- package/dist/objects/query/index.js +29 -28
- package/dist/objects/query/index.js.map +1 -1
- package/dist/objects/query/link-query-clearance.d.ts +21 -0
- package/dist/objects/query/link-query-clearance.d.ts.map +1 -0
- package/dist/objects/vectors/handle.d.ts.map +1 -1
- package/dist/objects/vectors/profile.d.ts +5 -0
- package/dist/objects/vectors/profile.d.ts.map +1 -1
- package/dist/ontology/builders.d.ts.map +1 -1
- package/dist/ontology/docs-markdown.d.ts +1 -1
- package/dist/ontology/docs-markdown.d.ts.map +1 -1
- package/dist/ontology/index.js +7 -7
- package/dist/ontology/internal.js +4 -4
- package/dist/ontology/internal.js.map +1 -1
- package/dist/pipelines/index.d.ts +2 -0
- package/dist/pipelines/index.d.ts.map +1 -1
- package/dist/pipelines/index.js +47 -35
- package/dist/pipelines/index.js.map +1 -1
- package/dist/pipelines/lineage.d.ts +17 -0
- package/dist/pipelines/lineage.d.ts.map +1 -0
- package/dist/projections/internal.d.ts +2 -2
- package/dist/projections/internal.js +30 -29
- package/dist/projections/internal.js.map +1 -1
- package/dist/runtime/create.d.ts +3 -0
- package/dist/runtime/create.d.ts.map +1 -1
- package/dist/runtime/host.d.ts +6 -0
- package/dist/runtime/host.d.ts.map +1 -1
- package/dist/runtime/internal.d.ts +2 -0
- package/dist/runtime/internal.d.ts.map +1 -1
- package/dist/runtime/internal.js +46 -42
- package/dist/runtime/internal.js.map +1 -1
- package/dist/runtime/ontology-mutations.d.ts +2 -0
- package/dist/runtime/ontology-mutations.d.ts.map +1 -1
- package/dist/runtime/resolve-definitions.d.ts.map +1 -1
- package/dist/runtime/sixb.d.ts +8 -0
- package/dist/runtime/sixb.d.ts.map +1 -1
- package/dist/sandboxes/auth.d.ts +16 -0
- package/dist/sandboxes/auth.d.ts.map +1 -1
- package/dist/sandboxes/config.d.ts.map +1 -1
- package/dist/sandboxes/configuration.d.ts +26 -0
- package/dist/sandboxes/configuration.d.ts.map +1 -1
- package/dist/sandboxes/index.d.ts +1 -1
- package/dist/sandboxes/index.d.ts.map +1 -1
- package/dist/sandboxes/index.js +14 -13
- package/dist/sandboxes/index.js.map +1 -1
- package/dist/sandboxes/sandbox.d.ts +28 -5
- package/dist/sandboxes/sandbox.d.ts.map +1 -1
- package/dist/security/applied-markings-contribution.d.ts +58 -0
- package/dist/security/applied-markings-contribution.d.ts.map +1 -0
- package/dist/security/applied-markings-host.d.ts +10 -0
- package/dist/security/applied-markings-host.d.ts.map +1 -0
- package/dist/security/applied-markings-snapshot.d.ts +67 -0
- package/dist/security/applied-markings-snapshot.d.ts.map +1 -0
- package/dist/security/applied-markings.d.ts +73 -0
- package/dist/security/applied-markings.d.ts.map +1 -0
- package/dist/security/builders.d.ts.map +1 -1
- package/dist/security/dataset-version-markings.d.ts +47 -0
- package/dist/security/dataset-version-markings.d.ts.map +1 -0
- package/dist/security/every.d.ts +1 -4
- package/dist/security/every.d.ts.map +1 -1
- package/dist/security/grants.d.ts +4 -5
- package/dist/security/grants.d.ts.map +1 -1
- package/dist/security/index.d.ts +2 -2
- package/dist/security/index.d.ts.map +1 -1
- package/dist/security/internal.d.ts +15 -0
- package/dist/security/internal.d.ts.map +1 -0
- package/dist/security/internal.js +135 -0
- package/dist/security/internal.js.map +10 -0
- package/dist/security/marking-propagation.d.ts +62 -0
- package/dist/security/marking-propagation.d.ts.map +1 -0
- package/dist/security/marking-sets.d.ts +14 -0
- package/dist/security/marking-sets.d.ts.map +1 -0
- package/dist/security/markings.d.ts +6 -3
- package/dist/security/markings.d.ts.map +1 -1
- package/dist/security/membership-policies.d.ts.map +1 -1
- package/dist/security/pipeline-markings.d.ts +20 -0
- package/dist/security/pipeline-markings.d.ts.map +1 -0
- package/dist/security/project.d.ts +4 -0
- package/dist/security/project.d.ts.map +1 -0
- package/dist/security/projection-markings.d.ts +71 -0
- package/dist/security/projection-markings.d.ts.map +1 -0
- package/dist/security/public.d.ts +10 -0
- package/dist/security/public.d.ts.map +1 -0
- package/dist/security/public.js +10 -0
- package/dist/security/public.js.map +9 -0
- package/dist/security/redactions.d.ts +4 -1
- package/dist/security/redactions.d.ts.map +1 -1
- package/dist/security/registry.d.ts +0 -1
- package/dist/security/registry.d.ts.map +1 -1
- package/dist/security/types.d.ts +34 -19
- package/dist/security/types.d.ts.map +1 -1
- package/dist/security/validation.d.ts +0 -6
- package/dist/security/validation.d.ts.map +1 -1
- package/dist/shares/internal.js +25 -24
- package/dist/shares/internal.js.map +2 -2
- package/dist/storage/action-runs/failure.js +3 -3
- package/dist/storage/action-runs/in-memory.d.ts +4 -0
- package/dist/storage/action-runs/in-memory.d.ts.map +1 -1
- package/dist/storage/action-runs/types.d.ts +8 -0
- package/dist/storage/action-runs/types.d.ts.map +1 -1
- package/dist/storage/activity/in-memory.d.ts +55 -0
- package/dist/storage/activity/in-memory.d.ts.map +1 -0
- package/dist/storage/activity/index.d.ts +3 -0
- package/dist/storage/activity/index.d.ts.map +1 -0
- package/dist/storage/activity/policy.d.ts +96 -0
- package/dist/storage/activity/policy.d.ts.map +1 -0
- package/dist/storage/activity/types.d.ts +191 -0
- package/dist/storage/activity/types.d.ts.map +1 -0
- package/dist/storage/agents/in-memory.d.ts +4 -0
- package/dist/storage/agents/in-memory.d.ts.map +1 -1
- package/dist/storage/agents/provider.d.ts.map +1 -1
- package/dist/storage/agents/provider.js +2 -5
- package/dist/storage/agents/provider.js.map +1 -1
- package/dist/storage/agents/types.d.ts +10 -9
- package/dist/storage/agents/types.d.ts.map +1 -1
- package/dist/storage/ai-limits/enforcement.js +3 -3
- package/dist/storage/artifacts/errors.d.ts +8 -0
- package/dist/storage/artifacts/errors.d.ts.map +1 -0
- package/dist/storage/artifacts/in-memory.d.ts +34 -0
- package/dist/storage/artifacts/in-memory.d.ts.map +1 -0
- package/dist/storage/artifacts/index.d.ts +5 -0
- package/dist/storage/artifacts/index.d.ts.map +1 -0
- package/dist/storage/artifacts/record.d.ts +17 -0
- package/dist/storage/artifacts/record.d.ts.map +1 -0
- package/dist/storage/artifacts/types.d.ts +184 -0
- package/dist/storage/artifacts/types.d.ts.map +1 -0
- package/dist/storage/auth/in-memory/auth-storage.d.ts.map +1 -1
- package/dist/storage/auth/in-memory/magic-links.d.ts.map +1 -1
- package/dist/storage/auth/in-memory/oidc-attempts.d.ts.map +1 -1
- package/dist/storage/auth/in-memory/sessions.d.ts +2 -11
- package/dist/storage/auth/in-memory/sessions.d.ts.map +1 -1
- package/dist/storage/auth/in-memory/shared.d.ts +1 -2
- package/dist/storage/auth/in-memory/shared.d.ts.map +1 -1
- package/dist/storage/auth/index.d.ts +1 -1
- package/dist/storage/auth/index.d.ts.map +1 -1
- package/dist/storage/auth/types.d.ts +20 -17
- package/dist/storage/auth/types.d.ts.map +1 -1
- package/dist/storage/connector-connections/provider.js +2 -2
- package/dist/storage/executions/in-memory.d.ts +2 -1
- package/dist/storage/executions/in-memory.d.ts.map +1 -1
- package/dist/storage/executions/index.d.ts +1 -1
- package/dist/storage/executions/index.d.ts.map +1 -1
- package/dist/storage/executions/provider.d.ts +2 -0
- package/dist/storage/executions/provider.d.ts.map +1 -1
- package/dist/storage/executions/provider.js +9 -223
- package/dist/storage/executions/provider.js.map +3 -4
- package/dist/storage/executions/types.d.ts +31 -0
- package/dist/storage/executions/types.d.ts.map +1 -1
- package/dist/storage/file-upload-sessions/provider.js +12 -12
- package/dist/storage/in-memory/index.d.ts +8 -0
- package/dist/storage/in-memory/index.d.ts.map +1 -1
- package/dist/storage/index.d.ts +6 -4
- package/dist/storage/index.d.ts.map +1 -1
- package/dist/storage/index.js +47 -46
- package/dist/storage/index.js.map +1 -1
- package/dist/storage/internal.d.ts +3 -0
- package/dist/storage/internal.d.ts.map +1 -1
- package/dist/storage/internal.js +66 -16
- package/dist/storage/internal.js.map +1 -1
- package/dist/storage/ontology/in-memory/sources.d.ts +2 -1
- package/dist/storage/ontology/in-memory/sources.d.ts.map +1 -1
- package/dist/storage/ontology/index.d.ts +1 -1
- package/dist/storage/ontology/index.d.ts.map +1 -1
- package/dist/storage/ontology/sources.d.ts +15 -0
- package/dist/storage/ontology/sources.d.ts.map +1 -1
- package/dist/storage/projection-runs/provider.js +3 -3
- package/dist/storage/share-grants/in-memory.d.ts +2 -1
- package/dist/storage/share-grants/in-memory.d.ts.map +1 -1
- package/dist/storage/share-grants/index.d.ts +1 -1
- package/dist/storage/share-grants/index.d.ts.map +1 -1
- package/dist/storage/share-grants/types.d.ts +6 -0
- package/dist/storage/share-grants/types.d.ts.map +1 -1
- package/dist/storage/types.d.ts +4 -0
- package/dist/storage/types.d.ts.map +1 -1
- package/dist/storage/workflow-runs/in-memory.d.ts +4 -0
- package/dist/storage/workflow-runs/in-memory.d.ts.map +1 -1
- package/dist/storage/workflow-runs/provider.js +14 -13
- package/dist/storage/workflow-runs/provider.js.map +1 -1
- package/dist/storage/workflow-runs/types.d.ts +5 -0
- package/dist/storage/workflow-runs/types.d.ts.map +1 -1
- package/dist/syncs/index.js +35 -34
- package/dist/syncs/index.js.map +1 -1
- package/dist/testing/action-run-storage-contract.d.ts.map +1 -1
- package/dist/testing/activity-storage-contract.d.ts +14 -0
- package/dist/testing/activity-storage-contract.d.ts.map +1 -0
- package/dist/testing/agent-storage-contract.d.ts.map +1 -1
- package/dist/testing/artifact-storage-contract.d.ts +13 -0
- package/dist/testing/artifact-storage-contract.d.ts.map +1 -0
- package/dist/testing/auth-storage-contract.d.ts.map +1 -1
- package/dist/testing/execution-storage-contract.d.ts.map +1 -1
- package/dist/testing/index.d.ts +2 -0
- package/dist/testing/index.d.ts.map +1 -1
- package/dist/testing/index.js +4493 -3225
- package/dist/testing/index.js.map +14 -12
- package/dist/testing/lake-merge-storage-contract.d.ts.map +1 -1
- package/dist/testing/lake-storage-contract.d.ts +2 -0
- package/dist/testing/lake-storage-contract.d.ts.map +1 -1
- package/dist/testing/ontology-storage-contract.d.ts.map +1 -1
- package/dist/testing/share-grant-storage-contract.d.ts.map +1 -1
- package/dist/webhooks/internal.js +28 -27
- package/dist/webhooks/internal.js.map +2 -2
- package/dist/workers/index.js +2 -2
- package/dist/workflows/builders.d.ts.map +1 -1
- package/dist/workflows/index.js +57 -51
- package/dist/workflows/index.js.map +1 -1
- package/dist/workflows/types.d.ts +9 -0
- package/dist/workflows/types.d.ts.map +1 -1
- package/dist/workflows/validation.d.ts +7 -0
- package/dist/workflows/validation.d.ts.map +1 -1
- package/package.json +32 -2
- package/src/actions/execution.ts +18 -13
- package/src/actions/request.ts +18 -3
- package/src/actions/run-authorization.ts +23 -0
- package/src/activity/README.md +155 -0
- package/src/activity/connection.ts +217 -0
- package/src/activity/device.ts +41 -0
- package/src/activity/execution.ts +210 -0
- package/src/activity/service.ts +274 -0
- package/src/activity/shares.ts +62 -0
- package/src/activity/timeline.ts +424 -0
- package/src/agents/index.ts +8 -3
- package/src/agents/request.ts +5 -0
- package/src/agents/skills.ts +6 -0
- package/src/agents/types.ts +8 -8
- package/src/agents/validation.ts +2 -0
- package/src/artifacts/address.ts +132 -0
- package/src/artifacts/csv.ts +108 -0
- package/src/artifacts/errors.ts +21 -0
- package/src/artifacts/execution.ts +153 -0
- package/src/artifacts/frames/assets.ts +88 -0
- package/src/artifacts/frames/grants.ts +124 -0
- package/src/artifacts/frames/index.ts +15 -0
- package/src/artifacts/frames/kit.ts +392 -0
- package/src/artifacts/frames/probe.ts +309 -0
- package/src/artifacts/frames/protocol.ts +174 -0
- package/src/artifacts/frames/runtime.ts +213 -0
- package/src/artifacts/html.ts +25 -0
- package/src/artifacts/ids.ts +18 -0
- package/src/artifacts/index.ts +61 -0
- package/src/artifacts/kinds.ts +8 -0
- package/src/artifacts/limits.ts +27 -0
- package/src/artifacts/outline.ts +62 -0
- package/src/artifacts/publish/files.ts +87 -0
- package/src/artifacts/publish/index.ts +12 -0
- package/src/artifacts/publish/publish.ts +250 -0
- package/src/artifacts/publish/references.ts +130 -0
- package/src/artifacts/publish/validate/document.ts +114 -0
- package/src/artifacts/publish/validate/file.ts +19 -0
- package/src/artifacts/publish/validate/sheet.ts +251 -0
- package/src/artifacts/publish/validate/slides.ts +134 -0
- package/src/artifacts/references.ts +11 -0
- package/src/artifacts/resolve.ts +97 -0
- package/src/artifacts/theme.ts +116 -0
- package/src/artifacts/warnings.ts +10 -0
- package/src/artifacts/workbook.ts +315 -0
- package/src/auth/cookies.ts +3 -20
- package/src/auth/index.ts +0 -6
- package/src/auth/runtime.ts +59 -76
- package/src/auth/session-cache.ts +2 -9
- package/src/auth/types.ts +4 -8
- package/src/auth/validation.ts +0 -2
- package/src/authorization/decision.ts +13 -23
- package/src/authorization/grant-kinds.ts +33 -28
- package/src/authorization/index.ts +0 -1
- package/src/authorization/resolve.ts +10 -6
- package/src/blob-storage/internal.ts +1 -1
- package/src/blob-storage/media-type.ts +69 -0
- package/src/datasets/builders.ts +66 -2
- package/src/datasets/column-index.ts +19 -0
- package/src/datasets/execution.ts +23 -9
- package/src/deploy/services.ts +0 -1
- package/src/deploy/types.ts +1 -2
- package/src/deploy/validation.ts +3 -1
- package/src/errors/internal.ts +1 -0
- package/src/events/execution.ts +134 -21
- package/src/execution/authorization.ts +11 -5
- package/src/execution/authorized-object-reader.ts +270 -256
- package/src/execution/object-reader-clearance.ts +91 -0
- package/src/execution/object-reader-ontology.ts +63 -0
- package/src/execution/object-reader-security.ts +146 -0
- package/src/http/api-routes.ts +125 -0
- package/src/index.ts +72 -17
- package/src/lake-storage/in-memory.ts +26 -3
- package/src/lake-storage/index.ts +13 -1
- package/src/lake-storage/lineage.ts +385 -0
- package/src/lake-storage/sql-transforms.ts +45 -0
- package/src/lake-storage/types.ts +59 -1
- package/src/lake-storage/version-inputs.ts +35 -6
- package/src/maintenance/ontology-maintenance.ts +15 -0
- package/src/models/execution/embedding.ts +6 -6
- package/src/objects/clearance-redaction.ts +138 -0
- package/src/objects/link/authorization.ts +27 -7
- package/src/objects/link/remove.ts +2 -2
- package/src/objects/link/upsert-batch.ts +7 -5
- package/src/objects/link/upsert.ts +2 -2
- package/src/objects/object/delete.ts +2 -0
- package/src/objects/object/upsert-batch.ts +2 -4
- package/src/objects/object/upsert.ts +2 -3
- package/src/objects/property-clearance.ts +171 -152
- package/src/objects/query/clearance-admission.ts +112 -0
- package/src/objects/query/link-query-clearance.ts +73 -0
- package/src/objects/vectors/README.md +4 -0
- package/src/objects/vectors/handle.ts +11 -2
- package/src/objects/vectors/indexing-generate.ts +2 -2
- package/src/objects/vectors/profile.ts +5 -0
- package/src/ontology/builders.ts +12 -1
- package/src/ontology/docs-markdown.ts +1 -1
- package/src/pipelines/index.ts +2 -0
- package/src/pipelines/lineage.ts +45 -0
- package/src/projections/internal.ts +2 -2
- package/src/runtime/create.ts +4 -0
- package/src/runtime/host.ts +55 -0
- package/src/runtime/internal.ts +2 -0
- package/src/runtime/ontology-mutations.ts +19 -4
- package/src/runtime/resolve-definitions.ts +66 -3
- package/src/runtime/sixb.ts +18 -1
- package/src/sandboxes/README.md +29 -7
- package/src/sandboxes/auth.ts +16 -0
- package/src/sandboxes/config.ts +2 -7
- package/src/sandboxes/configuration.ts +61 -7
- package/src/sandboxes/index.ts +1 -0
- package/src/sandboxes/sandbox.ts +27 -5
- package/src/security/applied-markings-contribution.ts +277 -0
- package/src/security/applied-markings-host.ts +41 -0
- package/src/security/applied-markings-snapshot.ts +235 -0
- package/src/security/applied-markings.ts +405 -0
- package/src/security/builders.ts +7 -2
- package/src/security/dataset-version-markings.ts +163 -0
- package/src/security/every.ts +0 -4
- package/src/security/grants.ts +42 -27
- package/src/security/index.ts +3 -3
- package/src/security/internal.ts +18 -0
- package/src/security/marking-propagation.ts +255 -0
- package/src/security/marking-sets.ts +42 -0
- package/src/security/markings.ts +29 -178
- package/src/security/membership-policies.ts +3 -1
- package/src/security/pipeline-markings.ts +175 -0
- package/src/security/project.ts +8 -0
- package/src/security/projection-markings.ts +421 -0
- package/src/security/public.ts +10 -0
- package/src/security/redactions.ts +7 -2
- package/src/security/registry.ts +0 -8
- package/src/security/types.ts +38 -26
- package/src/security/validation.ts +28 -19
- package/src/storage/action-runs/in-memory.ts +18 -0
- package/src/storage/action-runs/types.ts +8 -0
- package/src/storage/activity/in-memory.ts +374 -0
- package/src/storage/activity/index.ts +27 -0
- package/src/storage/activity/policy.ts +430 -0
- package/src/storage/activity/types.ts +211 -0
- package/src/storage/agents/in-memory.ts +10 -0
- package/src/storage/agents/provider.ts +2 -13
- package/src/storage/agents/types.ts +10 -17
- package/src/storage/artifacts/errors.ts +16 -0
- package/src/storage/artifacts/in-memory.ts +240 -0
- package/src/storage/artifacts/index.ts +30 -0
- package/src/storage/artifacts/record.ts +200 -0
- package/src/storage/artifacts/types.ts +209 -0
- package/src/storage/auth/in-memory/auth-storage.ts +0 -18
- package/src/storage/auth/in-memory/magic-links.ts +0 -3
- package/src/storage/auth/in-memory/oidc-attempts.ts +0 -3
- package/src/storage/auth/in-memory/sessions.ts +22 -25
- package/src/storage/auth/in-memory/shared.ts +1 -10
- package/src/storage/auth/index.ts +2 -0
- package/src/storage/auth/types.ts +20 -18
- package/src/storage/executions/in-memory.ts +61 -1
- package/src/storage/executions/index.ts +3 -0
- package/src/storage/executions/provider.ts +12 -0
- package/src/storage/executions/types.ts +30 -0
- package/src/storage/in-memory/index.ts +16 -0
- package/src/storage/index.ts +63 -0
- package/src/storage/internal.ts +30 -0
- package/src/storage/ontology/in-memory/sources.ts +23 -0
- package/src/storage/ontology/index.ts +2 -0
- package/src/storage/ontology/sources.ts +17 -0
- package/src/storage/share-grants/in-memory.ts +8 -0
- package/src/storage/share-grants/index.ts +1 -0
- package/src/storage/share-grants/types.ts +8 -0
- package/src/storage/types.ts +4 -0
- package/src/storage/workflow-runs/in-memory.ts +16 -0
- package/src/storage/workflow-runs/types.ts +5 -0
- package/src/testing/action-run-storage-contract.ts +25 -0
- package/src/testing/activity-storage-contract.ts +840 -0
- package/src/testing/agent-storage-contract.ts +22 -21
- package/src/testing/artifact-storage-contract.ts +517 -0
- package/src/testing/auth-storage-contract.ts +61 -107
- package/src/testing/execution-storage-contract.ts +147 -3
- package/src/testing/index.ts +9 -0
- package/src/testing/lake-merge-storage-contract.ts +38 -0
- package/src/testing/lake-storage-contract.ts +247 -2
- package/src/testing/materializer-storage-contract.ts +1 -0
- package/src/testing/ontology-storage-contract.ts +57 -2
- package/src/testing/share-grant-storage-contract.ts +15 -0
- package/src/workflows/builders.ts +14 -0
- package/src/workflows/types.ts +9 -0
- package/src/workflows/validation.ts +72 -0
- package/dist/auth/audience.d.ts +0 -8
- package/dist/auth/audience.d.ts.map +0 -1
- package/dist/authorization/application-access.d.ts +0 -18
- package/dist/authorization/application-access.d.ts.map +0 -1
- package/dist/chunk-1f7wpmyp.js.map +0 -14
- package/dist/chunk-1k89ecfr.js +0 -85
- package/dist/chunk-1k89ecfr.js.map +0 -10
- package/dist/chunk-2jntasmh.js.map +0 -13
- package/dist/chunk-3gnrh4ve.js.map +0 -40
- package/dist/chunk-85yvv5n0.js.map +0 -12
- package/dist/chunk-9gyp8hg1.js +0 -363
- package/dist/chunk-9gyp8hg1.js.map +0 -14
- package/dist/chunk-dnmadg9k.js.map +0 -15
- package/dist/chunk-enpsx8k5.js.map +0 -10
- package/dist/chunk-hkc3jct7.js.map +0 -10
- package/dist/chunk-kyzq4wy9.js.map +0 -18
- package/dist/chunk-s16apyk9.js +0 -256
- package/dist/chunk-s16apyk9.js.map +0 -16
- package/dist/chunk-s54c868q.js.map +0 -12
- package/dist/chunk-tw03bsmb.js.map +0 -11
- package/dist/chunk-wwdfe68s.js +0 -128
- package/dist/chunk-wwdfe68s.js.map +0 -11
- package/dist/chunk-xt1zt7gv.js.map +0 -13
- package/dist/chunk-y7rqfrgg.js.map +0 -24
- package/dist/security/applications.d.ts +0 -15
- package/dist/security/applications.d.ts.map +0 -1
- package/src/auth/audience.ts +0 -28
- package/src/authorization/application-access.ts +0 -34
- package/src/security/applications.ts +0 -11
- /package/dist/{chunk-t6vq7bff.js.map → chunk-0bphap9y.js.map} +0 -0
- /package/dist/{chunk-7mbzgd9m.js.map → chunk-1cc1xaf3.js.map} +0 -0
- /package/dist/{chunk-6gmfggss.js.map → chunk-431pyp2c.js.map} +0 -0
- /package/dist/{chunk-c85m1hyj.js.map → chunk-447a5c0p.js.map} +0 -0
- /package/dist/{chunk-80mc0971.js.map → chunk-561r0yc9.js.map} +0 -0
- /package/dist/{chunk-5e43w60z.js.map → chunk-5948n82c.js.map} +0 -0
- /package/dist/{chunk-yzwja0mj.js.map → chunk-5hx48dnn.js.map} +0 -0
- /package/dist/{chunk-q1vkr2ys.js.map → chunk-c1rxbz5y.js.map} +0 -0
- /package/dist/{chunk-gc4ntf7d.js.map → chunk-cwdzcv37.js.map} +0 -0
- /package/dist/{chunk-fa02jy15.js.map → chunk-cy4mbddw.js.map} +0 -0
- /package/dist/{chunk-7kg3k1m9.js.map → chunk-d09e3rax.js.map} +0 -0
- /package/dist/{chunk-rhg02hxq.js.map → chunk-d7dnxdep.js.map} +0 -0
- /package/dist/{chunk-wz0xs816.js.map → chunk-ky3j490c.js.map} +0 -0
- /package/dist/{chunk-vyf9kfqf.js.map → chunk-q7gn29y3.js.map} +0 -0
- /package/dist/{chunk-v9xd5wzd.js.map → chunk-s7jg7pmn.js.map} +0 -0
- /package/dist/{chunk-nre82s12.js.map → chunk-vf57cr4t.js.map} +0 -0
- /package/dist/{chunk-9ybhtmg4.js.map → chunk-vvxtn22d.js.map} +0 -0
- /package/dist/{chunk-7t429e3f.js.map → chunk-xvsc5m8n.js.map} +0 -0
- /package/dist/{chunk-kg5j6fct.js.map → chunk-y5tah2kf.js.map} +0 -0
- /package/dist/{chunk-52bk93x8.js.map → chunk-z58tm0hm.js.map} +0 -0
package/src/actions/execution.ts
CHANGED
|
@@ -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 {
|
|
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
|
|
144
|
+
return { runs: [], hasMore: false, total: 0 }
|
|
140
145
|
}
|
|
141
146
|
const storage = runtime.storage.actionRuns
|
|
142
|
-
if (!storage) return
|
|
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
|
-
|
|
148
|
-
|
|
149
|
-
|
|
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
|
},
|
package/src/actions/request.ts
CHANGED
|
@@ -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({
|
|
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" ||
|
|
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
|
+
}
|