@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
|
@@ -0,0 +1,315 @@
|
|
|
1
|
+
import { ARTIFACT_LIMITS } from "./limits"
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* A sheet artifact is `workbook.json` and one CSV per sheet under `sheets/`. The CSV holds the
|
|
5
|
+
* values; the workbook holds what CSV can't: sheet order, column types and formats, frozen rows
|
|
6
|
+
* and columns, widths, and charts drawn from the sheets. Formulas belong in an `.xlsx` file.
|
|
7
|
+
*/
|
|
8
|
+
export const WORKBOOK_FILE = "workbook.json"
|
|
9
|
+
|
|
10
|
+
export const SHEET_COLUMN_TYPES = [
|
|
11
|
+
"text",
|
|
12
|
+
"number",
|
|
13
|
+
"currency",
|
|
14
|
+
"percent",
|
|
15
|
+
"date",
|
|
16
|
+
"link",
|
|
17
|
+
"image",
|
|
18
|
+
] as const
|
|
19
|
+
export type SheetColumnType = (typeof SHEET_COLUMN_TYPES)[number]
|
|
20
|
+
|
|
21
|
+
/** Column types whose cells are numbers, so a chart can plot them and a range can sum them. */
|
|
22
|
+
export const NUMERIC_COLUMN_TYPES: readonly SheetColumnType[] = ["number", "currency", "percent"]
|
|
23
|
+
|
|
24
|
+
export const SHEET_CHART_TYPES = ["bar", "line", "area", "pie"] as const
|
|
25
|
+
export type SheetChartType = (typeof SHEET_CHART_TYPES)[number]
|
|
26
|
+
|
|
27
|
+
export interface SheetColumnFormat {
|
|
28
|
+
readonly type: SheetColumnType
|
|
29
|
+
/** An ISO 4217 code, for a currency column. */
|
|
30
|
+
readonly currency?: string
|
|
31
|
+
/** Digits after the decimal point, for numbers, currencies, and percents. */
|
|
32
|
+
readonly decimals?: number
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
export interface WorkbookSheet {
|
|
36
|
+
readonly name: string
|
|
37
|
+
/** Rows that stay in view as the sheet scrolls, the header row included. */
|
|
38
|
+
readonly frozenRows: number
|
|
39
|
+
/** Columns that stay in view as the sheet scrolls sideways. */
|
|
40
|
+
readonly frozenColumns: number
|
|
41
|
+
/** Formats by column name; a column not named here is text. */
|
|
42
|
+
readonly columns: Readonly<Record<string, SheetColumnFormat>>
|
|
43
|
+
/** Widths in pixels by column name. */
|
|
44
|
+
readonly widths: Readonly<Record<string, number>>
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
export interface WorkbookChart {
|
|
48
|
+
/** What `#chart=<name>` names in an address; lowercase letters, digits, and hyphens. */
|
|
49
|
+
readonly name: string
|
|
50
|
+
readonly type: SheetChartType
|
|
51
|
+
readonly sheet: string
|
|
52
|
+
/** The column along the x axis, or a pie's slice labels. */
|
|
53
|
+
readonly x: string
|
|
54
|
+
/** The plotted columns: one series each, or a pie's one value column. */
|
|
55
|
+
readonly y: readonly string[]
|
|
56
|
+
readonly title?: string
|
|
57
|
+
/** Stack a bar or area chart's series. */
|
|
58
|
+
readonly stacked: boolean
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
export interface Workbook {
|
|
62
|
+
readonly sheets: readonly WorkbookSheet[]
|
|
63
|
+
readonly charts: readonly WorkbookChart[]
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
/** Where a sheet's values are, in the artifact. */
|
|
67
|
+
export function sheetFilePath(sheetName: string): string {
|
|
68
|
+
return `sheets/${sheetName}.csv`
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
/**
|
|
72
|
+
* Reads `workbook.json` into its full form: `"Revenue": "currency"` becomes
|
|
73
|
+
* `{ type: "currency" }`, a single `y` becomes a list, and defaults are filled. Returns what is
|
|
74
|
+
* wrong in words the author can act on. Whether the columns exist is checked against the CSVs.
|
|
75
|
+
*/
|
|
76
|
+
export function parseWorkbook(
|
|
77
|
+
text: string
|
|
78
|
+
): { readonly workbook: Workbook } | { readonly error: string } {
|
|
79
|
+
let value: unknown
|
|
80
|
+
try {
|
|
81
|
+
value = JSON.parse(text)
|
|
82
|
+
} catch {
|
|
83
|
+
return { error: `${WORKBOOK_FILE} is not valid JSON.` }
|
|
84
|
+
}
|
|
85
|
+
try {
|
|
86
|
+
return { workbook: readWorkbook(value) }
|
|
87
|
+
} catch (error) {
|
|
88
|
+
if (error instanceof WorkbookError) return { error: `${WORKBOOK_FILE}: ${error.message}` }
|
|
89
|
+
throw error
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
/** A number as a sheet stores it: plain digits, an optional sign, decimals, and exponent. */
|
|
94
|
+
export function parseSheetNumber(value: string): number | undefined {
|
|
95
|
+
const trimmed = value.trim()
|
|
96
|
+
if (!/^[-+]?(\d+\.?\d*|\.\d+)(e[-+]?\d+)?$/i.test(trimmed)) return undefined
|
|
97
|
+
const number = Number(trimmed)
|
|
98
|
+
return Number.isFinite(number) ? number : undefined
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
/** A date as a sheet stores it: `YYYY-MM-DD`, optionally with an ISO 8601 time. */
|
|
102
|
+
export function parseSheetDate(value: string): Date | undefined {
|
|
103
|
+
const trimmed = value.trim()
|
|
104
|
+
if (!/^\d{4}-\d{2}-\d{2}(T\d{2}:\d{2}(:\d{2}(\.\d+)?)?(Z|[-+]\d{2}:\d{2})?)?$/.test(trimmed)) {
|
|
105
|
+
return undefined
|
|
106
|
+
}
|
|
107
|
+
const date = new Date(trimmed.length === 10 ? `${trimmed}T00:00:00Z` : trimmed)
|
|
108
|
+
return Number.isNaN(date.getTime()) ? undefined : date
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
class WorkbookError extends Error {}
|
|
112
|
+
|
|
113
|
+
const SHEET_NAME_MAX = 60
|
|
114
|
+
const CHART_NAME = /^[a-z0-9][a-z0-9-]{0,39}$/
|
|
115
|
+
const CONTROL = /[\u0000-\u001f\u007f]/
|
|
116
|
+
|
|
117
|
+
function readWorkbook(value: unknown): Workbook {
|
|
118
|
+
const input = record(value, "the workbook", ["sheets", "charts"])
|
|
119
|
+
if (!Array.isArray(input.sheets) || input.sheets.length === 0) {
|
|
120
|
+
throw new WorkbookError('"sheets" must list at least one sheet.')
|
|
121
|
+
}
|
|
122
|
+
if (input.sheets.length > ARTIFACT_LIMITS.maxSheets) {
|
|
123
|
+
throw new WorkbookError(
|
|
124
|
+
`a workbook holds at most ${ARTIFACT_LIMITS.maxSheets} sheets; this one has ${input.sheets.length}.`
|
|
125
|
+
)
|
|
126
|
+
}
|
|
127
|
+
const sheets = input.sheets.map((sheet, index) => readSheet(sheet, index))
|
|
128
|
+
const names = new Set<string>()
|
|
129
|
+
for (const sheet of sheets) {
|
|
130
|
+
const key = sheet.name.toLowerCase()
|
|
131
|
+
if (names.has(key)) throw new WorkbookError(`two sheets are named '${sheet.name}'.`)
|
|
132
|
+
names.add(key)
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
const chartsInput = input.charts ?? []
|
|
136
|
+
if (!Array.isArray(chartsInput)) throw new WorkbookError('"charts" must be a list.')
|
|
137
|
+
if (chartsInput.length > ARTIFACT_LIMITS.maxCharts) {
|
|
138
|
+
throw new WorkbookError(
|
|
139
|
+
`a workbook holds at most ${ARTIFACT_LIMITS.maxCharts} charts; this one has ${chartsInput.length}.`
|
|
140
|
+
)
|
|
141
|
+
}
|
|
142
|
+
const charts = chartsInput.map((chart, index) => readChart(chart, index, sheets))
|
|
143
|
+
const chartNames = new Set<string>()
|
|
144
|
+
for (const chart of charts) {
|
|
145
|
+
if (chartNames.has(chart.name)) throw new WorkbookError(`two charts are named '${chart.name}'.`)
|
|
146
|
+
chartNames.add(chart.name)
|
|
147
|
+
}
|
|
148
|
+
return { sheets, charts }
|
|
149
|
+
}
|
|
150
|
+
|
|
151
|
+
function readSheet(value: unknown, index: number): WorkbookSheet {
|
|
152
|
+
const at = `sheet ${index + 1}`
|
|
153
|
+
const input = record(value, at, ["name", "frozenRows", "frozenColumns", "columns", "widths"])
|
|
154
|
+
const name = typeof input.name === "string" ? input.name.trim() : ""
|
|
155
|
+
if (
|
|
156
|
+
!name ||
|
|
157
|
+
name.length > SHEET_NAME_MAX ||
|
|
158
|
+
CONTROL.test(name) ||
|
|
159
|
+
/[/\\]/.test(name) ||
|
|
160
|
+
name === "." ||
|
|
161
|
+
name === ".."
|
|
162
|
+
) {
|
|
163
|
+
throw new WorkbookError(
|
|
164
|
+
`${at} needs a "name" of at most ${SHEET_NAME_MAX} characters without / or \\; its values go in sheets/<name>.csv.`
|
|
165
|
+
)
|
|
166
|
+
}
|
|
167
|
+
const sheetAt = `sheet '${name}'`
|
|
168
|
+
const columns: Record<string, SheetColumnFormat> = {}
|
|
169
|
+
for (const [column, format] of Object.entries(
|
|
170
|
+
record(input.columns ?? {}, `${sheetAt} "columns"`, null)
|
|
171
|
+
)) {
|
|
172
|
+
columns[column] = readColumnFormat(format, `${sheetAt} column '${column}'`)
|
|
173
|
+
}
|
|
174
|
+
const widths: Record<string, number> = {}
|
|
175
|
+
for (const [column, width] of Object.entries(
|
|
176
|
+
record(input.widths ?? {}, `${sheetAt} "widths"`, null)
|
|
177
|
+
)) {
|
|
178
|
+
if (typeof width !== "number" || !Number.isInteger(width) || width < 40 || width > 800) {
|
|
179
|
+
throw new WorkbookError(
|
|
180
|
+
`${sheetAt} gives column '${column}' a width of ${String(width)}; use 40 to 800 pixels.`
|
|
181
|
+
)
|
|
182
|
+
}
|
|
183
|
+
widths[column] = width
|
|
184
|
+
}
|
|
185
|
+
return {
|
|
186
|
+
name,
|
|
187
|
+
frozenRows: integer(input.frozenRows, 1, 0, 10, `${sheetAt} "frozenRows"`),
|
|
188
|
+
frozenColumns: integer(input.frozenColumns, 0, 0, 5, `${sheetAt} "frozenColumns"`),
|
|
189
|
+
columns,
|
|
190
|
+
widths,
|
|
191
|
+
}
|
|
192
|
+
}
|
|
193
|
+
|
|
194
|
+
function readColumnFormat(value: unknown, at: string): SheetColumnFormat {
|
|
195
|
+
if (typeof value === "string") return { type: columnType(value, at) }
|
|
196
|
+
const input = record(value, at, ["type", "currency", "decimals"])
|
|
197
|
+
const type = columnType(input.type, at)
|
|
198
|
+
if (input.currency !== undefined) {
|
|
199
|
+
if (type !== "currency")
|
|
200
|
+
throw new WorkbookError(`${at} sets "currency" but is not a currency column.`)
|
|
201
|
+
if (typeof input.currency !== "string" || !/^[A-Z]{3}$/.test(input.currency)) {
|
|
202
|
+
throw new WorkbookError(`${at} "currency" must be an ISO 4217 code such as "USD".`)
|
|
203
|
+
}
|
|
204
|
+
}
|
|
205
|
+
if (input.decimals !== undefined && !["number", "currency", "percent"].includes(type)) {
|
|
206
|
+
throw new WorkbookError(
|
|
207
|
+
`${at} sets "decimals" but is not a number, currency, or percent column.`
|
|
208
|
+
)
|
|
209
|
+
}
|
|
210
|
+
return {
|
|
211
|
+
type,
|
|
212
|
+
...(typeof input.currency === "string" ? { currency: input.currency } : {}),
|
|
213
|
+
...(input.decimals === undefined
|
|
214
|
+
? {}
|
|
215
|
+
: { decimals: integer(input.decimals, 0, 0, 6, `${at} "decimals"`) }),
|
|
216
|
+
}
|
|
217
|
+
}
|
|
218
|
+
|
|
219
|
+
function columnType(value: unknown, at: string): SheetColumnType {
|
|
220
|
+
if (typeof value === "string" && (SHEET_COLUMN_TYPES as readonly string[]).includes(value)) {
|
|
221
|
+
return value as SheetColumnType
|
|
222
|
+
}
|
|
223
|
+
throw new WorkbookError(
|
|
224
|
+
`${at} has type ${JSON.stringify(value)}; use one of ${SHEET_COLUMN_TYPES.join(", ")}.`
|
|
225
|
+
)
|
|
226
|
+
}
|
|
227
|
+
|
|
228
|
+
function readChart(value: unknown, index: number, sheets: readonly WorkbookSheet[]): WorkbookChart {
|
|
229
|
+
const input = record(value, `chart ${index + 1}`, [
|
|
230
|
+
"name",
|
|
231
|
+
"type",
|
|
232
|
+
"sheet",
|
|
233
|
+
"x",
|
|
234
|
+
"y",
|
|
235
|
+
"title",
|
|
236
|
+
"stacked",
|
|
237
|
+
])
|
|
238
|
+
if (typeof input.name !== "string" || !CHART_NAME.test(input.name)) {
|
|
239
|
+
throw new WorkbookError(
|
|
240
|
+
`chart ${index + 1} needs a "name" of lowercase letters, digits, and hyphens, such as "revenue".`
|
|
241
|
+
)
|
|
242
|
+
}
|
|
243
|
+
const at = `chart '${input.name}'`
|
|
244
|
+
if (!(SHEET_CHART_TYPES as readonly unknown[]).includes(input.type)) {
|
|
245
|
+
throw new WorkbookError(
|
|
246
|
+
`${at} has type ${JSON.stringify(input.type)}; use one of ${SHEET_CHART_TYPES.join(", ")}.`
|
|
247
|
+
)
|
|
248
|
+
}
|
|
249
|
+
const type = input.type as SheetChartType
|
|
250
|
+
if (typeof input.sheet !== "string" || !sheets.some((sheet) => sheet.name === input.sheet)) {
|
|
251
|
+
throw new WorkbookError(
|
|
252
|
+
`${at} names sheet ${JSON.stringify(input.sheet)}, which the workbook does not have.`
|
|
253
|
+
)
|
|
254
|
+
}
|
|
255
|
+
if (typeof input.x !== "string" || !input.x) throw new WorkbookError(`${at} needs an "x" column.`)
|
|
256
|
+
const y = typeof input.y === "string" ? [input.y] : input.y
|
|
257
|
+
if (
|
|
258
|
+
!Array.isArray(y) ||
|
|
259
|
+
y.length === 0 ||
|
|
260
|
+
!y.every((column) => typeof column === "string" && column)
|
|
261
|
+
) {
|
|
262
|
+
throw new WorkbookError(`${at} needs a "y" column, or a list of them.`)
|
|
263
|
+
}
|
|
264
|
+
if (y.length > ARTIFACT_LIMITS.maxChartSeries) {
|
|
265
|
+
throw new WorkbookError(
|
|
266
|
+
`${at} plots ${y.length} columns; a chart reads well with at most ${ARTIFACT_LIMITS.maxChartSeries}. Split it, or chart the ones that matter.`
|
|
267
|
+
)
|
|
268
|
+
}
|
|
269
|
+
if (type === "pie" && y.length !== 1)
|
|
270
|
+
throw new WorkbookError(`${at} is a pie: give it one "y" column.`)
|
|
271
|
+
if (input.stacked !== undefined && typeof input.stacked !== "boolean") {
|
|
272
|
+
throw new WorkbookError(`${at} "stacked" must be true or false.`)
|
|
273
|
+
}
|
|
274
|
+
if (input.stacked === true && type !== "bar" && type !== "area") {
|
|
275
|
+
throw new WorkbookError(`${at} is a ${type} chart; only bar and area charts stack.`)
|
|
276
|
+
}
|
|
277
|
+
if (input.title !== undefined && (typeof input.title !== "string" || input.title.length > 120)) {
|
|
278
|
+
throw new WorkbookError(`${at} "title" must be text of at most 120 characters.`)
|
|
279
|
+
}
|
|
280
|
+
return {
|
|
281
|
+
name: input.name,
|
|
282
|
+
type,
|
|
283
|
+
sheet: input.sheet,
|
|
284
|
+
x: input.x,
|
|
285
|
+
y: y as string[],
|
|
286
|
+
...(typeof input.title === "string" && input.title.trim() ? { title: input.title.trim() } : {}),
|
|
287
|
+
stacked: input.stacked === true,
|
|
288
|
+
}
|
|
289
|
+
}
|
|
290
|
+
|
|
291
|
+
function record(
|
|
292
|
+
value: unknown,
|
|
293
|
+
at: string,
|
|
294
|
+
keys: readonly string[] | null
|
|
295
|
+
): Record<string, unknown> {
|
|
296
|
+
if (typeof value !== "object" || value === null || Array.isArray(value)) {
|
|
297
|
+
throw new WorkbookError(`${at} must be an object.`)
|
|
298
|
+
}
|
|
299
|
+
const input = value as Record<string, unknown>
|
|
300
|
+
const unknownKey = keys && Object.keys(input).find((key) => !keys.includes(key))
|
|
301
|
+
if (unknownKey) {
|
|
302
|
+
throw new WorkbookError(
|
|
303
|
+
`${at} has '${unknownKey}'; it takes ${keys.map((key) => `"${key}"`).join(", ")}.`
|
|
304
|
+
)
|
|
305
|
+
}
|
|
306
|
+
return input
|
|
307
|
+
}
|
|
308
|
+
|
|
309
|
+
function integer(value: unknown, fallback: number, min: number, max: number, at: string): number {
|
|
310
|
+
if (value === undefined) return fallback
|
|
311
|
+
if (typeof value !== "number" || !Number.isInteger(value) || value < min || value > max) {
|
|
312
|
+
throw new WorkbookError(`${at} must be a whole number from ${min} to ${max}.`)
|
|
313
|
+
}
|
|
314
|
+
return value
|
|
315
|
+
}
|
package/src/auth/cookies.ts
CHANGED
|
@@ -1,9 +1,8 @@
|
|
|
1
|
-
import type { AuthSessionAudience } from "./audience"
|
|
2
|
-
import { DEFAULT_AUTH_SESSION_AUDIENCE, resolveAuthSessionAudience } from "./audience"
|
|
3
1
|
import type { AuthCookieOptions } from "./types"
|
|
4
2
|
|
|
5
|
-
|
|
6
|
-
export const
|
|
3
|
+
// The names the app's cookies had beside Atlas's, so its sessions survived Atlas leaving.
|
|
4
|
+
export const DEFAULT_SESSION_COOKIE_NAME = "sixb_session_app"
|
|
5
|
+
export const DEFAULT_CSRF_COOKIE_NAME = "sixb_csrf_app"
|
|
7
6
|
|
|
8
7
|
export interface ResolvedAuthCookieOptions {
|
|
9
8
|
readonly sessionCookieName: string
|
|
@@ -41,22 +40,6 @@ export function resolveAuthCookieOptions(
|
|
|
41
40
|
return resolved
|
|
42
41
|
}
|
|
43
42
|
|
|
44
|
-
export function resolveAuthCookieOptionsForAudience(
|
|
45
|
-
options: ResolvedAuthCookieOptions,
|
|
46
|
-
audience: AuthSessionAudience | undefined
|
|
47
|
-
): ResolvedAuthCookieOptions {
|
|
48
|
-
const resolvedAudience = resolveAuthSessionAudience(audience)
|
|
49
|
-
if (resolvedAudience === DEFAULT_AUTH_SESSION_AUDIENCE) {
|
|
50
|
-
return options
|
|
51
|
-
}
|
|
52
|
-
|
|
53
|
-
return {
|
|
54
|
-
...options,
|
|
55
|
-
sessionCookieName: `${options.sessionCookieName}_${resolvedAudience}`,
|
|
56
|
-
csrfCookieName: `${options.csrfCookieName}_${resolvedAudience}`,
|
|
57
|
-
}
|
|
58
|
-
}
|
|
59
|
-
|
|
60
43
|
export function parseCookieHeader(header: string | null): ReadonlyMap<string, string> {
|
|
61
44
|
const cookies = new Map<string, string>()
|
|
62
45
|
if (!header) {
|
package/src/auth/index.ts
CHANGED
|
@@ -9,12 +9,6 @@ export {
|
|
|
9
9
|
parseAccessTokenValue,
|
|
10
10
|
SERVICE_ACCOUNT_ACCESS_TOKEN_PREFIX,
|
|
11
11
|
} from "./access-tokens"
|
|
12
|
-
export type { AuthSessionAudience, AuthSessionAudienceOptions } from "./audience"
|
|
13
|
-
export {
|
|
14
|
-
DEFAULT_AUTH_SESSION_AUDIENCE,
|
|
15
|
-
isValidAuthSessionAudience,
|
|
16
|
-
resolveAuthSessionAudience,
|
|
17
|
-
} from "./audience"
|
|
18
12
|
export { getRequestClientAddress, setRequestClientAddress } from "./client-address"
|
|
19
13
|
export {
|
|
20
14
|
clearCsrfCookieHeader,
|
package/src/auth/runtime.ts
CHANGED
|
@@ -1,9 +1,5 @@
|
|
|
1
1
|
import { randomUUID } from "node:crypto"
|
|
2
|
-
import {
|
|
3
|
-
type AuthorizationContext,
|
|
4
|
-
canAccessApplication,
|
|
5
|
-
resolveAuthorizationContext,
|
|
6
|
-
} from "../authorization"
|
|
2
|
+
import { type AuthorizationContext, resolveAuthorizationContext } from "../authorization"
|
|
7
3
|
import {
|
|
8
4
|
canPerformMembershipOperation,
|
|
9
5
|
type GroupReference,
|
|
@@ -33,13 +29,8 @@ import {
|
|
|
33
29
|
hashAccessTokenSecret,
|
|
34
30
|
parseAccessTokenValue,
|
|
35
31
|
} from "./access-tokens"
|
|
36
|
-
import { type AuthSessionAudience, DEFAULT_AUTH_SESSION_AUDIENCE } from "./audience"
|
|
37
32
|
import { getRequestClientAddress } from "./client-address"
|
|
38
|
-
import {
|
|
39
|
-
getCookie,
|
|
40
|
-
type ResolvedAuthCookieOptions,
|
|
41
|
-
resolveAuthCookieOptionsForAudience,
|
|
42
|
-
} from "./cookies"
|
|
33
|
+
import { getCookie, type ResolvedAuthCookieOptions } from "./cookies"
|
|
43
34
|
import { AuthRuntimeError } from "./errors"
|
|
44
35
|
import { SessionCache } from "./session-cache"
|
|
45
36
|
import {
|
|
@@ -108,7 +99,6 @@ import {
|
|
|
108
99
|
isInvitationDeliveryAuthStrategy,
|
|
109
100
|
normalizePagination,
|
|
110
101
|
resolveAuthConfig,
|
|
111
|
-
resolveAuthSessionAudience,
|
|
112
102
|
resolveInvitationExpiresAt,
|
|
113
103
|
} from "./validation"
|
|
114
104
|
|
|
@@ -184,8 +174,8 @@ export class AuthRuntime {
|
|
|
184
174
|
}
|
|
185
175
|
}
|
|
186
176
|
|
|
187
|
-
getCookieOptions(
|
|
188
|
-
return
|
|
177
|
+
getCookieOptions(): ResolvedAuthCookieOptions {
|
|
178
|
+
return this.config.cookies
|
|
189
179
|
}
|
|
190
180
|
|
|
191
181
|
assertCanServeHttp(params: { readonly production: boolean }): void {
|
|
@@ -240,8 +230,6 @@ export class AuthRuntime {
|
|
|
240
230
|
return { authenticated: false, reason: "auth_disabled" }
|
|
241
231
|
}
|
|
242
232
|
|
|
243
|
-
const audience = resolveAuthSessionAudience(options.audience)
|
|
244
|
-
|
|
245
233
|
if (options.credentialSource === "any") {
|
|
246
234
|
const tokenValue = getBearerAccessTokenValue(request)
|
|
247
235
|
if (tokenValue?.startsWith(SESSION_ACCESS_TOKEN_PREFIX)) {
|
|
@@ -257,15 +245,14 @@ export class AuthRuntime {
|
|
|
257
245
|
}
|
|
258
246
|
}
|
|
259
247
|
|
|
260
|
-
return this.resolveCookieSession(request,
|
|
248
|
+
return this.resolveCookieSession(request, options.sessionActivity)
|
|
261
249
|
}
|
|
262
250
|
|
|
263
251
|
private async resolveCookieSession(
|
|
264
252
|
request: Request,
|
|
265
|
-
audience: ReturnType<typeof resolveAuthSessionAudience>,
|
|
266
253
|
activity: AuthSessionResolutionOptions["sessionActivity"]
|
|
267
254
|
): Promise<AuthSessionResult> {
|
|
268
|
-
const cookieOptions = this.getCookieOptions(
|
|
255
|
+
const cookieOptions = this.getCookieOptions()
|
|
269
256
|
const cookieValue = getCookie(request, cookieOptions.sessionCookieName)
|
|
270
257
|
if (!cookieValue) {
|
|
271
258
|
return { authenticated: false, reason: "missing_cookie" }
|
|
@@ -283,7 +270,6 @@ export class AuthRuntime {
|
|
|
283
270
|
sessionId: parts.sessionId,
|
|
284
271
|
tokenHash,
|
|
285
272
|
transport: "cookie",
|
|
286
|
-
audience,
|
|
287
273
|
nowMs,
|
|
288
274
|
})
|
|
289
275
|
if (cached) {
|
|
@@ -298,7 +284,6 @@ export class AuthRuntime {
|
|
|
298
284
|
let session = await storage.sessions.findValidByTokenHash({
|
|
299
285
|
projectId: this.projectId,
|
|
300
286
|
id: parts.sessionId,
|
|
301
|
-
audience,
|
|
302
287
|
tokenHash,
|
|
303
288
|
now,
|
|
304
289
|
})
|
|
@@ -312,7 +297,6 @@ export class AuthRuntime {
|
|
|
312
297
|
const renewed = await storage.sessions.renewIfValid({
|
|
313
298
|
projectId: this.projectId,
|
|
314
299
|
id: parts.sessionId,
|
|
315
|
-
audience,
|
|
316
300
|
tokenHash,
|
|
317
301
|
now,
|
|
318
302
|
expiresAt: this.getRenewedSessionExpiresAt(session, nowMs),
|
|
@@ -388,7 +372,6 @@ export class AuthRuntime {
|
|
|
388
372
|
this.sessionCache?.set({
|
|
389
373
|
sessionId: session.id,
|
|
390
374
|
tokenHash,
|
|
391
|
-
audience: session.audience,
|
|
392
375
|
session: result,
|
|
393
376
|
nowMs: now.getTime(),
|
|
394
377
|
sessionExpiresAtMs: session.expiresAt.getTime(),
|
|
@@ -418,8 +401,6 @@ export class AuthRuntime {
|
|
|
418
401
|
projectId: this.projectId,
|
|
419
402
|
userId: input.userId,
|
|
420
403
|
strategyId: "device",
|
|
421
|
-
// A native session belongs to no web app. The column needs a value; nothing reads it.
|
|
422
|
-
audience: DEFAULT_AUTH_SESSION_AUDIENCE,
|
|
423
404
|
tokenHash: tokens.tokenHash,
|
|
424
405
|
createdAt: input.now,
|
|
425
406
|
...this.createSessionDeadlines(input.now),
|
|
@@ -712,6 +693,11 @@ export class AuthRuntime {
|
|
|
712
693
|
caller: AuthenticatedUserRequestSession
|
|
713
694
|
): Promise<ListServiceAccountsResult> {
|
|
714
695
|
const storage = this.requireAuthStorage()
|
|
696
|
+
const scope = this.resolveMembershipPolicyScopeForUser(caller.groupIds)
|
|
697
|
+
if (scope.operations.serviceAccounts.policyIds.length === 0) {
|
|
698
|
+
return { serviceAccounts: [] }
|
|
699
|
+
}
|
|
700
|
+
|
|
715
701
|
const result = await storage.serviceAccounts.list({
|
|
716
702
|
projectId: this.projectId,
|
|
717
703
|
order: "desc",
|
|
@@ -724,11 +710,11 @@ export class AuthRuntime {
|
|
|
724
710
|
}))
|
|
725
711
|
)
|
|
726
712
|
|
|
727
|
-
// A caller only sees the service accounts
|
|
728
|
-
// listing never leaks the groups of
|
|
713
|
+
// A caller only sees the service accounts its membership policies cover, so
|
|
714
|
+
// listing never leaks the groups of accounts outside its scope.
|
|
729
715
|
return {
|
|
730
716
|
serviceAccounts: withGroups.filter(({ groupIds }) =>
|
|
731
|
-
|
|
717
|
+
canPerformMembershipOperation(scope, "serviceAccounts", groupIds)
|
|
732
718
|
),
|
|
733
719
|
}
|
|
734
720
|
}
|
|
@@ -738,11 +724,9 @@ export class AuthRuntime {
|
|
|
738
724
|
input: CreateServiceAccountInput
|
|
739
725
|
): Promise<CreateServiceAccountResult> {
|
|
740
726
|
const storage = this.requireAuthStorage()
|
|
741
|
-
// A caller can only place a service account in groups
|
|
742
|
-
const groupIds =
|
|
743
|
-
|
|
744
|
-
subject: "service account",
|
|
745
|
-
}) ?? []
|
|
727
|
+
// A caller can only place a service account in groups its `serviceAccounts` policies cover.
|
|
728
|
+
const groupIds = normalizeRequestedGroupIds(input.groupIds) ?? []
|
|
729
|
+
this.assertCanManageServiceAccountGroups(caller.groupIds, groupIds)
|
|
746
730
|
const now = new Date()
|
|
747
731
|
const serviceAccount = await storage.serviceAccounts.create({
|
|
748
732
|
id: input.id ?? `svc_${randomUUID()}`,
|
|
@@ -829,8 +813,8 @@ export class AuthRuntime {
|
|
|
829
813
|
}
|
|
830
814
|
|
|
831
815
|
// The token can only carry groups the service account already holds; the
|
|
832
|
-
// manageability check above guarantees those are
|
|
833
|
-
//
|
|
816
|
+
// manageability check above guarantees those are within the caller's
|
|
817
|
+
// `serviceAccounts` scope, so the token never reaches past that scope.
|
|
834
818
|
const groupIds = constrainRequestedGroupIds(input.groupIds, serviceAccountGroupIds, {
|
|
835
819
|
subject: "service account token",
|
|
836
820
|
})
|
|
@@ -888,12 +872,10 @@ export class AuthRuntime {
|
|
|
888
872
|
/**
|
|
889
873
|
* Resolve a service account the caller is allowed to manage.
|
|
890
874
|
*
|
|
891
|
-
* A caller
|
|
892
|
-
* the account is in ("you can manage what you could have created"). This
|
|
893
|
-
*
|
|
894
|
-
*
|
|
895
|
-
* caller's own access. Missing and non-manageable accounts raise the same
|
|
896
|
-
* error so callers cannot probe which privileged accounts exist.
|
|
875
|
+
* A caller needs a membership policy with the `serviceAccounts` operation whose scope covers every
|
|
876
|
+
* group the account is in ("you can manage what you could have created"). This confines token
|
|
877
|
+
* minting, disabling, and revocation to the groups the project's policies hand out. Missing and
|
|
878
|
+
* out-of-scope accounts raise the same error so callers cannot probe which accounts exist.
|
|
897
879
|
*/
|
|
898
880
|
private async requireManageableServiceAccount(
|
|
899
881
|
storage: AuthStorage,
|
|
@@ -903,6 +885,11 @@ export class AuthRuntime {
|
|
|
903
885
|
readonly serviceAccount: ServiceAccountRecord
|
|
904
886
|
readonly groupIds: readonly string[]
|
|
905
887
|
}> {
|
|
888
|
+
const scope = this.resolveMembershipPolicyScopeForUser(callerGroupIds)
|
|
889
|
+
if (scope.operations.serviceAccounts.policyIds.length === 0) {
|
|
890
|
+
throw missingServiceAccountsPolicyError()
|
|
891
|
+
}
|
|
892
|
+
|
|
906
893
|
const serviceAccount = await storage.serviceAccounts.getById({
|
|
907
894
|
projectId: this.projectId,
|
|
908
895
|
id: serviceAccountId,
|
|
@@ -911,7 +898,7 @@ export class AuthRuntime {
|
|
|
911
898
|
? await this.listServiceAccountGroupIds(storage, serviceAccountId)
|
|
912
899
|
: []
|
|
913
900
|
|
|
914
|
-
if (!serviceAccount || !
|
|
901
|
+
if (!serviceAccount || !canPerformMembershipOperation(scope, "serviceAccounts", groupIds)) {
|
|
915
902
|
throw new AuthStorageError(
|
|
916
903
|
"missing_service_account",
|
|
917
904
|
`[Sixb] Service account '${serviceAccountId}' not found for project '${this.projectId}'.`
|
|
@@ -975,6 +962,7 @@ export class AuthRuntime {
|
|
|
975
962
|
return {
|
|
976
963
|
// The member-admin edit-groups dialog assigns from the `assignGroups` scope.
|
|
977
964
|
groups: this.scopedGroupOptions(scope.operations.assignGroups.groupIds),
|
|
965
|
+
serviceAccountGroups: this.scopedGroupOptions(scope.operations.serviceAccounts.groupIds),
|
|
978
966
|
capabilities: membershipCapabilities(scope).holds,
|
|
979
967
|
}
|
|
980
968
|
}
|
|
@@ -1163,7 +1151,7 @@ export class AuthRuntime {
|
|
|
1163
1151
|
return { user: reactivated, groupIds, managedGroupIds }
|
|
1164
1152
|
}
|
|
1165
1153
|
|
|
1166
|
-
/** The caller's active sessions
|
|
1154
|
+
/** The caller's active sessions, most recently active first. */
|
|
1167
1155
|
async listSessions(caller: AuthenticatedUserRequestSession): Promise<readonly SessionRecord[]> {
|
|
1168
1156
|
return this.requireAuthStorage().sessions.listActiveByUserId({
|
|
1169
1157
|
projectId: this.projectId,
|
|
@@ -1195,7 +1183,7 @@ export class AuthRuntime {
|
|
|
1195
1183
|
return true
|
|
1196
1184
|
}
|
|
1197
1185
|
|
|
1198
|
-
/** End every active session of the caller
|
|
1186
|
+
/** End every active session of the caller. Returns how many ended. */
|
|
1199
1187
|
async revokeAllSessions(caller: AuthenticatedUserRequestSession): Promise<number> {
|
|
1200
1188
|
const revoked = await this.requireAuthStorage().sessions.revokeActiveForUser({
|
|
1201
1189
|
projectId: this.projectId,
|
|
@@ -1284,7 +1272,6 @@ export class AuthRuntime {
|
|
|
1284
1272
|
}
|
|
1285
1273
|
|
|
1286
1274
|
await this.assertCanInviteRecipient(strategy, authStorage, input.email, now)
|
|
1287
|
-
this.assertInvitationApplicationAccess(groupIds, destination.audience)
|
|
1288
1275
|
|
|
1289
1276
|
const invitation = await authStorage.invitations.createOrUpdateActive({
|
|
1290
1277
|
id: `inv_${randomUUID()}`,
|
|
@@ -1304,7 +1291,6 @@ export class AuthRuntime {
|
|
|
1304
1291
|
projectId: this.projectId,
|
|
1305
1292
|
authStorage,
|
|
1306
1293
|
invitation,
|
|
1307
|
-
audience: destination.audience,
|
|
1308
1294
|
returnTo: destination.returnTo,
|
|
1309
1295
|
requestOrigin: destination.requestOrigin,
|
|
1310
1296
|
revealLink: input.revealLink,
|
|
@@ -1451,27 +1437,6 @@ export class AuthRuntime {
|
|
|
1451
1437
|
return { state: "enabled" }
|
|
1452
1438
|
}
|
|
1453
1439
|
|
|
1454
|
-
private assertInvitationApplicationAccess(
|
|
1455
|
-
groupIds: readonly string[],
|
|
1456
|
-
audience: AuthSessionAudience
|
|
1457
|
-
): void {
|
|
1458
|
-
// Check only the groups this invitation assigns. Existing memberships may
|
|
1459
|
-
// be outside the caller's policy scope and must not affect this response.
|
|
1460
|
-
const roles = this.security.listResolvedRoles()
|
|
1461
|
-
const authorization = resolveAuthorizationContext({
|
|
1462
|
-
principal: { type: "user", id: "invited-user" },
|
|
1463
|
-
groupIds,
|
|
1464
|
-
roles,
|
|
1465
|
-
})
|
|
1466
|
-
|
|
1467
|
-
if (canAccessApplication(authorization, roles, audience)) return
|
|
1468
|
-
|
|
1469
|
-
throw new AuthRuntimeError(
|
|
1470
|
-
"authorization_denied",
|
|
1471
|
-
`[Sixb] Invitation groups do not grant access to application '${audience}'.`
|
|
1472
|
-
)
|
|
1473
|
-
}
|
|
1474
|
-
|
|
1475
1440
|
private async assertCanInviteRecipient(
|
|
1476
1441
|
strategy: InvitationDeliveryAuthStrategy,
|
|
1477
1442
|
authStorage: AuthStorage,
|
|
@@ -1524,6 +1489,27 @@ export class AuthRuntime {
|
|
|
1524
1489
|
)
|
|
1525
1490
|
}
|
|
1526
1491
|
|
|
1492
|
+
private assertCanManageServiceAccountGroups(
|
|
1493
|
+
callerGroupIds: readonly string[],
|
|
1494
|
+
groupIds: readonly string[]
|
|
1495
|
+
): void {
|
|
1496
|
+
const scope = this.resolveMembershipPolicyScopeForUser(callerGroupIds)
|
|
1497
|
+
|
|
1498
|
+
if (canPerformMembershipOperation(scope, "serviceAccounts", groupIds)) {
|
|
1499
|
+
return
|
|
1500
|
+
}
|
|
1501
|
+
|
|
1502
|
+
if (scope.operations.serviceAccounts.policyIds.length === 0) {
|
|
1503
|
+
throw missingServiceAccountsPolicyError()
|
|
1504
|
+
}
|
|
1505
|
+
|
|
1506
|
+
const missing = missingMembershipGroupIds(scope, "serviceAccounts", groupIds)
|
|
1507
|
+
throw new AuthRuntimeError(
|
|
1508
|
+
"authorization_denied",
|
|
1509
|
+
`[Sixb] The current user is not allowed to place service accounts in group(s): ${missing.join(", ")}.`
|
|
1510
|
+
)
|
|
1511
|
+
}
|
|
1512
|
+
|
|
1527
1513
|
private assertCanManageInvitationGroups(
|
|
1528
1514
|
callerGroupIds: readonly string[],
|
|
1529
1515
|
groupIds: readonly string[]
|
|
@@ -1590,15 +1576,11 @@ function constrainTokenGroupIds(
|
|
|
1590
1576
|
return principalGroupIds.filter((groupId) => allowed.has(groupId))
|
|
1591
1577
|
}
|
|
1592
1578
|
|
|
1593
|
-
|
|
1594
|
-
|
|
1595
|
-
|
|
1596
|
-
|
|
1597
|
-
|
|
1598
|
-
serviceAccountGroupIds: readonly string[]
|
|
1599
|
-
): boolean {
|
|
1600
|
-
const callerGroups = new Set(callerGroupIds)
|
|
1601
|
-
return serviceAccountGroupIds.every((groupId) => callerGroups.has(groupId))
|
|
1579
|
+
function missingServiceAccountsPolicyError(): AuthRuntimeError {
|
|
1580
|
+
return new AuthRuntimeError(
|
|
1581
|
+
"authorization_denied",
|
|
1582
|
+
"[Sixb] Managing service accounts needs a membership policy with the 'serviceAccounts' operation."
|
|
1583
|
+
)
|
|
1602
1584
|
}
|
|
1603
1585
|
|
|
1604
1586
|
function missingAccessTokenError(tokenId: string, projectId: string): AuthStorageError {
|
|
@@ -1701,6 +1683,7 @@ function membershipCapabilities(scope: MembershipPolicyScope): MembershipCapabil
|
|
|
1701
1683
|
invite: scope.operations.invite.policyIds.length > 0,
|
|
1702
1684
|
assignGroups: scope.operations.assignGroups.policyIds.length > 0,
|
|
1703
1685
|
suspend: scope.operations.suspend.policyIds.length > 0,
|
|
1686
|
+
serviceAccounts: scope.operations.serviceAccounts.policyIds.length > 0,
|
|
1704
1687
|
},
|
|
1705
1688
|
assignableGroupIds: [...scope.operations.assignGroups.groupIds],
|
|
1706
1689
|
covers: (operation, memberGroups) =>
|