@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,235 @@
|
|
|
1
|
+
import type { ProjectionKeyTarget } from "./projection-markings"
|
|
2
|
+
|
|
3
|
+
/** Why readers lacking some markings cannot read an object type or a link. */
|
|
4
|
+
export interface AppliedSeal {
|
|
5
|
+
readonly projectionId: string
|
|
6
|
+
readonly markings: ReadonlySet<string>
|
|
7
|
+
/** What carries the marking, completed by "carries marking 'm'" in messages. */
|
|
8
|
+
readonly reason: string
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
export interface AppliedLinkSeals {
|
|
12
|
+
readonly objectTypeId: string
|
|
13
|
+
readonly linkId: string
|
|
14
|
+
readonly targetObjectTypeId: string
|
|
15
|
+
readonly seals: readonly AppliedSeal[]
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
export interface AppliedMarkingsNotice {
|
|
19
|
+
readonly projectionId: string
|
|
20
|
+
/** Whether the projection makes an object type or a link unreadable, not only properties. */
|
|
21
|
+
readonly sealed: boolean
|
|
22
|
+
readonly message: string
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
/**
|
|
26
|
+
* What the applied versions add to the ontology's markings.
|
|
27
|
+
*
|
|
28
|
+
* Every reader of a host shares one snapshot and the clearances resolved for it, so a snapshot is
|
|
29
|
+
* immutable all the way down: its maps and sets refuse writes.
|
|
30
|
+
*/
|
|
31
|
+
export interface AppliedMarkingsSnapshot {
|
|
32
|
+
/** Surplus markings by object type, then property. */
|
|
33
|
+
readonly properties: ReadonlyMap<string, ReadonlyMap<string, ReadonlySet<string>>>
|
|
34
|
+
/** Object types readers lacking a seal's markings cannot read. */
|
|
35
|
+
readonly types: ReadonlyMap<string, readonly AppliedSeal[]>
|
|
36
|
+
/** Links, by {@link appliedLinkKey}, readers lacking a seal's markings cannot read. */
|
|
37
|
+
readonly links: ReadonlyMap<string, AppliedLinkSeals>
|
|
38
|
+
/** Every marking above: a reader cleared for all of them reads what the code allows. */
|
|
39
|
+
readonly markings: ReadonlySet<string>
|
|
40
|
+
/** One per projection whose applied version adds markings, for diagnostics. */
|
|
41
|
+
readonly notices: readonly AppliedMarkingsNotice[]
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
export function appliedLinkKey(objectTypeId: string, linkId: string): string {
|
|
45
|
+
return `${objectTypeId}\0${linkId}`
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
/** What one applied version adds, as plain data so that equal results serialize equally. */
|
|
49
|
+
export interface AppliedContribution {
|
|
50
|
+
readonly properties: readonly {
|
|
51
|
+
readonly objectTypeId: string
|
|
52
|
+
readonly propertyId: string
|
|
53
|
+
readonly markings: readonly string[]
|
|
54
|
+
}[]
|
|
55
|
+
readonly seals: readonly {
|
|
56
|
+
readonly target: ProjectionKeyTarget
|
|
57
|
+
readonly seal: {
|
|
58
|
+
readonly projectionId: string
|
|
59
|
+
readonly markings: readonly string[]
|
|
60
|
+
readonly reason: string
|
|
61
|
+
}
|
|
62
|
+
}[]
|
|
63
|
+
readonly notice?: AppliedMarkingsNotice
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
/** An applied version that adds nothing. */
|
|
67
|
+
export const NO_CONTRIBUTION: AppliedContribution = Object.freeze({
|
|
68
|
+
properties: Object.freeze([]),
|
|
69
|
+
seals: Object.freeze([]),
|
|
70
|
+
})
|
|
71
|
+
|
|
72
|
+
export const NO_APPLIED_MARKINGS: AppliedMarkingsSnapshot = Object.freeze({
|
|
73
|
+
properties: readonlyMap(new Map()),
|
|
74
|
+
types: readonlyMap(new Map()),
|
|
75
|
+
links: readonlyMap(new Map()),
|
|
76
|
+
markings: readonlySet(new Set<string>()),
|
|
77
|
+
notices: Object.freeze([]),
|
|
78
|
+
})
|
|
79
|
+
|
|
80
|
+
/** One snapshot from the contributions of every applied version, in projection order. */
|
|
81
|
+
export function assembleAppliedMarkings(
|
|
82
|
+
contributions: readonly AppliedContribution[]
|
|
83
|
+
): AppliedMarkingsSnapshot {
|
|
84
|
+
if (contributions.length === 0) return NO_APPLIED_MARKINGS
|
|
85
|
+
|
|
86
|
+
const properties = new Map<string, Map<string, Set<string>>>()
|
|
87
|
+
const types = new Map<string, AppliedSeal[]>()
|
|
88
|
+
const links = new Map<string, AppliedLinkSeals & { seals: AppliedSeal[] }>()
|
|
89
|
+
const markings = new Set<string>()
|
|
90
|
+
const notices: AppliedMarkingsNotice[] = []
|
|
91
|
+
|
|
92
|
+
for (const contribution of contributions) {
|
|
93
|
+
for (const { objectTypeId, propertyId, markings: added } of contribution.properties) {
|
|
94
|
+
const byProperty = properties.get(objectTypeId) ?? new Map<string, Set<string>>()
|
|
95
|
+
properties.set(objectTypeId, byProperty)
|
|
96
|
+
|
|
97
|
+
const set = byProperty.get(propertyId) ?? new Set<string>()
|
|
98
|
+
byProperty.set(propertyId, set)
|
|
99
|
+
|
|
100
|
+
for (const markingId of added) {
|
|
101
|
+
set.add(markingId)
|
|
102
|
+
markings.add(markingId)
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
for (const { target, seal: data } of contribution.seals) {
|
|
107
|
+
const seal: AppliedSeal = Object.freeze({
|
|
108
|
+
...data,
|
|
109
|
+
markings: readonlySet(new Set(data.markings)),
|
|
110
|
+
})
|
|
111
|
+
|
|
112
|
+
for (const markingId of data.markings) markings.add(markingId)
|
|
113
|
+
|
|
114
|
+
if (target.kind === "type") {
|
|
115
|
+
types.set(target.objectTypeId, [...(types.get(target.objectTypeId) ?? []), seal])
|
|
116
|
+
continue
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
const key = appliedLinkKey(target.objectTypeId, target.linkId)
|
|
120
|
+
const existing = links.get(key)
|
|
121
|
+
if (existing) existing.seals.push(seal)
|
|
122
|
+
else {
|
|
123
|
+
links.set(key, {
|
|
124
|
+
objectTypeId: target.objectTypeId,
|
|
125
|
+
linkId: target.linkId,
|
|
126
|
+
targetObjectTypeId: target.targetObjectTypeId,
|
|
127
|
+
seals: [seal],
|
|
128
|
+
})
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
if (contribution.notice) notices.push(Object.freeze({ ...contribution.notice }))
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
return Object.freeze({
|
|
136
|
+
properties: readonlyMap(
|
|
137
|
+
new Map(
|
|
138
|
+
[...properties].map(([objectTypeId, byProperty]) => [
|
|
139
|
+
objectTypeId,
|
|
140
|
+
readonlyMap(
|
|
141
|
+
new Map([...byProperty].map(([propertyId, set]) => [propertyId, readonlySet(set)]))
|
|
142
|
+
),
|
|
143
|
+
])
|
|
144
|
+
)
|
|
145
|
+
),
|
|
146
|
+
types: readonlyMap(
|
|
147
|
+
new Map([...types].map(([objectTypeId, seals]) => [objectTypeId, Object.freeze(seals)]))
|
|
148
|
+
),
|
|
149
|
+
links: readonlyMap(
|
|
150
|
+
new Map(
|
|
151
|
+
[...links].map(([key, link]) => [
|
|
152
|
+
key,
|
|
153
|
+
Object.freeze({ ...link, seals: Object.freeze(link.seals) }),
|
|
154
|
+
])
|
|
155
|
+
)
|
|
156
|
+
),
|
|
157
|
+
markings: readonlySet(markings),
|
|
158
|
+
notices: Object.freeze(notices),
|
|
159
|
+
})
|
|
160
|
+
}
|
|
161
|
+
|
|
162
|
+
/**
|
|
163
|
+
* The snapshot with these properties' markings added: what an object event reads under, given the
|
|
164
|
+
* markings its origin version carries on them.
|
|
165
|
+
*/
|
|
166
|
+
export function withPropertyMarkings(
|
|
167
|
+
snapshot: AppliedMarkingsSnapshot,
|
|
168
|
+
added: AppliedContribution["properties"]
|
|
169
|
+
): AppliedMarkingsSnapshot {
|
|
170
|
+
if (added.length === 0) return snapshot
|
|
171
|
+
|
|
172
|
+
const properties = new Map<string, Map<string, Set<string>>>(
|
|
173
|
+
[...snapshot.properties].map(([objectTypeId, byProperty]) => [
|
|
174
|
+
objectTypeId,
|
|
175
|
+
new Map([...byProperty].map(([propertyId, set]) => [propertyId, new Set(set)])),
|
|
176
|
+
])
|
|
177
|
+
)
|
|
178
|
+
|
|
179
|
+
const markings = new Set(snapshot.markings)
|
|
180
|
+
for (const { objectTypeId, propertyId, markings: ids } of added) {
|
|
181
|
+
const byProperty = properties.get(objectTypeId) ?? new Map<string, Set<string>>()
|
|
182
|
+
properties.set(objectTypeId, byProperty)
|
|
183
|
+
|
|
184
|
+
const set = byProperty.get(propertyId) ?? new Set<string>()
|
|
185
|
+
byProperty.set(propertyId, set)
|
|
186
|
+
|
|
187
|
+
for (const markingId of ids) {
|
|
188
|
+
set.add(markingId)
|
|
189
|
+
markings.add(markingId)
|
|
190
|
+
}
|
|
191
|
+
}
|
|
192
|
+
|
|
193
|
+
return Object.freeze({
|
|
194
|
+
...snapshot,
|
|
195
|
+
properties: readonlyMap(
|
|
196
|
+
new Map(
|
|
197
|
+
[...properties].map(([objectTypeId, byProperty]) => [
|
|
198
|
+
objectTypeId,
|
|
199
|
+
readonlyMap(
|
|
200
|
+
new Map([...byProperty].map(([propertyId, set]) => [propertyId, readonlySet(set)]))
|
|
201
|
+
),
|
|
202
|
+
])
|
|
203
|
+
)
|
|
204
|
+
),
|
|
205
|
+
markings: readonlySet(markings),
|
|
206
|
+
})
|
|
207
|
+
}
|
|
208
|
+
|
|
209
|
+
/**
|
|
210
|
+
* A map that refuses writes. `Object.freeze` alone leaves a map's entries writable through its
|
|
211
|
+
* methods, so they are shadowed by ones that throw, and then frozen.
|
|
212
|
+
*/
|
|
213
|
+
function readonlyMap<TKey, TValue>(map: Map<TKey, TValue>): ReadonlyMap<TKey, TValue> {
|
|
214
|
+
return Object.freeze(
|
|
215
|
+
Object.defineProperties(map, {
|
|
216
|
+
set: { value: refuseWrite },
|
|
217
|
+
delete: { value: refuseWrite },
|
|
218
|
+
clear: { value: refuseWrite },
|
|
219
|
+
})
|
|
220
|
+
)
|
|
221
|
+
}
|
|
222
|
+
|
|
223
|
+
function readonlySet<TValue>(set: Set<TValue>): ReadonlySet<TValue> {
|
|
224
|
+
return Object.freeze(
|
|
225
|
+
Object.defineProperties(set, {
|
|
226
|
+
add: { value: refuseWrite },
|
|
227
|
+
delete: { value: refuseWrite },
|
|
228
|
+
clear: { value: refuseWrite },
|
|
229
|
+
})
|
|
230
|
+
)
|
|
231
|
+
}
|
|
232
|
+
|
|
233
|
+
function refuseWrite(): never {
|
|
234
|
+
throw new TypeError("[Sixb] Applied markings are immutable.")
|
|
235
|
+
}
|
|
@@ -0,0 +1,405 @@
|
|
|
1
|
+
import type { LakeStorage } from "../lake-storage/types"
|
|
2
|
+
import type { OntologyDefinitionCatalog } from "../ontology/registry"
|
|
3
|
+
import type { PipelineDefinition } from "../pipelines/types"
|
|
4
|
+
import type { ProjectionDefinitionCatalog } from "../projections/registry"
|
|
5
|
+
import type { OntologySourceStorage } from "../storage/ontology"
|
|
6
|
+
import {
|
|
7
|
+
type AppliedVersionRead,
|
|
8
|
+
appliedContribution,
|
|
9
|
+
type EventOriginRef,
|
|
10
|
+
errorMessage,
|
|
11
|
+
eventOriginMarkings,
|
|
12
|
+
producingPipelines,
|
|
13
|
+
type SourceProjection,
|
|
14
|
+
sentence,
|
|
15
|
+
} from "./applied-markings-contribution"
|
|
16
|
+
import {
|
|
17
|
+
type AppliedContribution,
|
|
18
|
+
type AppliedMarkingsSnapshot,
|
|
19
|
+
assembleAppliedMarkings,
|
|
20
|
+
NO_APPLIED_MARKINGS,
|
|
21
|
+
NO_CONTRIBUTION,
|
|
22
|
+
withPropertyMarkings,
|
|
23
|
+
} from "./applied-markings-snapshot"
|
|
24
|
+
import type { DatasetVersionMarkings } from "./dataset-version-markings"
|
|
25
|
+
|
|
26
|
+
/**
|
|
27
|
+
* Objects keep the markings of the dataset version they were projected from.
|
|
28
|
+
*
|
|
29
|
+
* Startup checks the code: each projected property declares the markings its column carries. The
|
|
30
|
+
* objects a projection applied may predate that code. When a property stops declaring a marking
|
|
31
|
+
* its applied version still carries on the column, the objects still hold those values. Until the
|
|
32
|
+
* projection applies a version the code allows, each such property keeps the marking (its
|
|
33
|
+
* surplus), and an object type or link whose key column carries markings is unreadable to readers
|
|
34
|
+
* lacking them, like a type they have no view grant for.
|
|
35
|
+
*
|
|
36
|
+
* Lifecycle: the snapshot is read when a read needs it, with no background work.
|
|
37
|
+
* - A read reads it with one storage query for the projections' active sources; only projections
|
|
38
|
+
* whose applied version or definition changed are classified again. A project whose columns
|
|
39
|
+
* carry no marking reads nothing.
|
|
40
|
+
* - A read uses a snapshot younger than {@link APPLIED_MARKINGS_FRESH_MS}. An older one, up to
|
|
41
|
+
* {@link APPLIED_MARKINGS_MAX_AGE_MS}, is used while one refresh runs behind the read. Past that
|
|
42
|
+
* age, or before any snapshot, the read waits for a refresh and fails if it fails or hangs past
|
|
43
|
+
* the same bound. Other servers so see a newly applied version within seconds.
|
|
44
|
+
* - A host that applies a projection invalidates the snapshot, so its next read refreshes first:
|
|
45
|
+
* `sixb dev` sees a version at once.
|
|
46
|
+
*/
|
|
47
|
+
export interface AppliedMarkings {
|
|
48
|
+
/** Whether readers with these clearances can be denied anything the code alone allows. */
|
|
49
|
+
affects(clearances: ReadonlySet<string>): boolean
|
|
50
|
+
/** The current snapshot, refreshed on demand. */
|
|
51
|
+
current(): Promise<AppliedMarkingsSnapshot>
|
|
52
|
+
/** A projection applied a version in this process: the next read refreshes first. */
|
|
53
|
+
invalidate(): void
|
|
54
|
+
/**
|
|
55
|
+
* The snapshot with the markings an object event's origin version carries on the properties
|
|
56
|
+
* its projection maps: the event holds that version's values, whatever version the projection
|
|
57
|
+
* applied since. Reads each version once, keeping the last few.
|
|
58
|
+
*/
|
|
59
|
+
forEventOrigin(
|
|
60
|
+
snapshot: AppliedMarkingsSnapshot,
|
|
61
|
+
origin: EventOriginRef
|
|
62
|
+
): Promise<AppliedMarkingsSnapshot>
|
|
63
|
+
/**
|
|
64
|
+
* The snapshot with every marking a column declares on each property a projection maps to this
|
|
65
|
+
* type: what an object event's earlier values read under. They are the values an update or a
|
|
66
|
+
* deletion replaced, and the projected values an action or a direct write recorded. They came
|
|
67
|
+
* from versions projections applied before, which no event records, so they read like a version
|
|
68
|
+
* that cannot be read. Like the objects they wrote, a projection the code no longer declares
|
|
69
|
+
* marks nothing.
|
|
70
|
+
*/
|
|
71
|
+
forEarlierValues(snapshot: AppliedMarkingsSnapshot, objectTypeId: string): AppliedMarkingsSnapshot
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
export interface AppliedMarkingsOptions {
|
|
75
|
+
readonly projectId: string
|
|
76
|
+
readonly ontology: Pick<OntologyDefinitionCatalog, "getObjectTypeById">
|
|
77
|
+
readonly projections: Pick<ProjectionDefinitionCatalog, "listObjects" | "listLinks">
|
|
78
|
+
/** The revision of a projection's current definition. */
|
|
79
|
+
readonly revisionOf: (projectionId: string) => string
|
|
80
|
+
readonly pipelines: readonly PipelineDefinition[]
|
|
81
|
+
readonly versionMarkings: DatasetVersionMarkings
|
|
82
|
+
readonly lakeStorage: Pick<LakeStorage, "getVersion">
|
|
83
|
+
readonly sources: Pick<OntologySourceStorage, "listActive">
|
|
84
|
+
/** A monotonic clock in milliseconds. */
|
|
85
|
+
readonly now?: () => number
|
|
86
|
+
/** For this repo's tests: the bound past which a read waits, and a refresh fails. */
|
|
87
|
+
readonly maxAgeMs?: number
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
/** Origin versions, and snapshots combined with them, kept for the events read next. */
|
|
91
|
+
const EVENT_ORIGINS_KEPT = 64
|
|
92
|
+
|
|
93
|
+
/** A read uses a snapshot younger than this as it is. */
|
|
94
|
+
export const APPLIED_MARKINGS_FRESH_MS = 5_000
|
|
95
|
+
/** A read waits for a snapshot older than this, and a refresh that takes longer fails. */
|
|
96
|
+
export const APPLIED_MARKINGS_MAX_AGE_MS = 10_000
|
|
97
|
+
|
|
98
|
+
interface ProjectionState {
|
|
99
|
+
/** The applied version and revision the contribution was computed for. */
|
|
100
|
+
readonly key: string
|
|
101
|
+
/** The version could not be read: seal now, read it again on the next refresh. */
|
|
102
|
+
readonly retry: boolean
|
|
103
|
+
readonly contribution: AppliedContribution
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
export function createAppliedMarkings(options: AppliedMarkingsOptions): AppliedMarkings {
|
|
107
|
+
const maxAgeMs = options.maxAgeMs ?? APPLIED_MARKINGS_MAX_AGE_MS
|
|
108
|
+
const freshMs = Math.min(APPLIED_MARKINGS_FRESH_MS, maxAgeMs / 2)
|
|
109
|
+
const now = options.now ?? (() => performance.now())
|
|
110
|
+
const versionMarkings = options.versionMarkings
|
|
111
|
+
let pipelineOf: ((datasetId: string) => string | undefined) | undefined
|
|
112
|
+
|
|
113
|
+
let snapshot: AppliedMarkingsSnapshot | undefined
|
|
114
|
+
let fingerprint: string | undefined
|
|
115
|
+
let refreshedAt = 0
|
|
116
|
+
let states = new Map<string, ProjectionState>()
|
|
117
|
+
let generation = 0
|
|
118
|
+
let refreshedGeneration = -1
|
|
119
|
+
let inflight: Promise<void> | undefined
|
|
120
|
+
|
|
121
|
+
// Only the latest refresh may publish: one past its deadline is abandoned.
|
|
122
|
+
let latestRun = 0
|
|
123
|
+
let failing = false
|
|
124
|
+
const warned = new Set<string>()
|
|
125
|
+
|
|
126
|
+
const refresh = (): Promise<void> => {
|
|
127
|
+
if (inflight) return inflight
|
|
128
|
+
|
|
129
|
+
latestRun += 1
|
|
130
|
+
const run = latestRun
|
|
131
|
+
|
|
132
|
+
let timer: ReturnType<typeof setTimeout> | undefined
|
|
133
|
+
const deadline = new Promise<never>((_resolve, reject) => {
|
|
134
|
+
timer = setTimeout(() => {
|
|
135
|
+
latestRun += 1
|
|
136
|
+
reject(
|
|
137
|
+
new Error(
|
|
138
|
+
`[Sixb] Reading the dataset versions projections applied took longer than ${maxAgeMs / 1000}s.`
|
|
139
|
+
)
|
|
140
|
+
)
|
|
141
|
+
}, maxAgeMs)
|
|
142
|
+
timer.unref?.()
|
|
143
|
+
})
|
|
144
|
+
|
|
145
|
+
const work = read(run)
|
|
146
|
+
// The deadline may settle first; the abandoned read must not report an unhandled rejection.
|
|
147
|
+
work.catch(() => {})
|
|
148
|
+
|
|
149
|
+
inflight = Promise.race([work, deadline]).finally(() => {
|
|
150
|
+
clearTimeout(timer)
|
|
151
|
+
inflight = undefined
|
|
152
|
+
})
|
|
153
|
+
|
|
154
|
+
return inflight
|
|
155
|
+
}
|
|
156
|
+
|
|
157
|
+
const read = async (run: number) => {
|
|
158
|
+
const startedAt = now()
|
|
159
|
+
const startedGeneration = generation
|
|
160
|
+
|
|
161
|
+
const active = await options.sources.listActive({ projectId: options.projectId })
|
|
162
|
+
const applied = new Map(active.map((source) => [source.source.projectionId, source]))
|
|
163
|
+
const projections: readonly SourceProjection[] = [
|
|
164
|
+
...options.projections.listObjects(),
|
|
165
|
+
...options.projections.listLinks(),
|
|
166
|
+
]
|
|
167
|
+
|
|
168
|
+
const next = new Map<string, ProjectionState>()
|
|
169
|
+
await Promise.all(
|
|
170
|
+
projections.map(async (projection) => {
|
|
171
|
+
const projectionId = projection.id
|
|
172
|
+
|
|
173
|
+
// A source the code no longer declares is read under the code's markings.
|
|
174
|
+
const source = applied.get(projectionId)
|
|
175
|
+
if (!source) return
|
|
176
|
+
|
|
177
|
+
const key = JSON.stringify([
|
|
178
|
+
source.datasetVersion.datasetId,
|
|
179
|
+
source.datasetVersion.versionId,
|
|
180
|
+
source.projectionRevision,
|
|
181
|
+
])
|
|
182
|
+
|
|
183
|
+
const previous = states.get(projectionId)
|
|
184
|
+
if (previous && previous.key === key && !previous.retry) {
|
|
185
|
+
next.set(projectionId, previous)
|
|
186
|
+
return
|
|
187
|
+
}
|
|
188
|
+
|
|
189
|
+
const version = await readVersion(source.datasetVersion)
|
|
190
|
+
pipelineOf ??= producingPipelines(options.pipelines)
|
|
191
|
+
const contribution = appliedContribution(projection, source, version, {
|
|
192
|
+
ontology: options.ontology,
|
|
193
|
+
revisionOf: options.revisionOf,
|
|
194
|
+
everyMarking: versionMarkings.everyMarking(),
|
|
195
|
+
pipelineOf,
|
|
196
|
+
})
|
|
197
|
+
|
|
198
|
+
next.set(projectionId, { key, retry: version.kind !== "read", contribution })
|
|
199
|
+
})
|
|
200
|
+
)
|
|
201
|
+
|
|
202
|
+
if (run !== latestRun) return
|
|
203
|
+
|
|
204
|
+
states = next
|
|
205
|
+
failing = false
|
|
206
|
+
publish(next)
|
|
207
|
+
refreshedAt = startedAt
|
|
208
|
+
refreshedGeneration = startedGeneration
|
|
209
|
+
}
|
|
210
|
+
|
|
211
|
+
/** Read and classify a version; a version that cannot be read is sealed, then read again. */
|
|
212
|
+
const readVersion = async (ref: {
|
|
213
|
+
readonly datasetId: string
|
|
214
|
+
readonly versionId: string
|
|
215
|
+
}): Promise<AppliedVersionRead> => {
|
|
216
|
+
try {
|
|
217
|
+
const version = await options.lakeStorage.getVersion(ref.datasetId, ref.versionId)
|
|
218
|
+
if (!version) return { kind: "missing" }
|
|
219
|
+
return { kind: "read", version, classification: versionMarkings.classify(version) }
|
|
220
|
+
} catch (error) {
|
|
221
|
+
return { kind: "failed", error }
|
|
222
|
+
}
|
|
223
|
+
}
|
|
224
|
+
|
|
225
|
+
const publish = (next: ReadonlyMap<string, ProjectionState>) => {
|
|
226
|
+
const contributions = [...next]
|
|
227
|
+
.sort(([left], [right]) => (left < right ? -1 : left > right ? 1 : 0))
|
|
228
|
+
.flatMap(([, state]) => (state.contribution === NO_CONTRIBUTION ? [] : [state.contribution]))
|
|
229
|
+
const nextFingerprint = JSON.stringify(contributions)
|
|
230
|
+
|
|
231
|
+
// Equal content keeps the same object, so clearances resolved for it stay cached.
|
|
232
|
+
if (snapshot && nextFingerprint === fingerprint) return
|
|
233
|
+
|
|
234
|
+
snapshot = assembleAppliedMarkings(contributions)
|
|
235
|
+
fingerprint = nextFingerprint
|
|
236
|
+
|
|
237
|
+
const sealed = new Set(
|
|
238
|
+
snapshot.notices.filter((notice) => notice.sealed).map((notice) => notice.projectionId)
|
|
239
|
+
)
|
|
240
|
+
|
|
241
|
+
// A projection sealed again after it was cleared warns again.
|
|
242
|
+
for (const projectionId of warned) if (!sealed.has(projectionId)) warned.delete(projectionId)
|
|
243
|
+
|
|
244
|
+
for (const notice of snapshot.notices) {
|
|
245
|
+
if (!notice.sealed || warned.has(notice.projectionId)) continue
|
|
246
|
+
warned.add(notice.projectionId)
|
|
247
|
+
console.warn(notice.message)
|
|
248
|
+
}
|
|
249
|
+
}
|
|
250
|
+
|
|
251
|
+
/** One refresh behind reads that keep using the snapshot; a failure is reported once a streak. */
|
|
252
|
+
const refreshBehind = () => {
|
|
253
|
+
if (inflight) return
|
|
254
|
+
refresh().catch((error: unknown) => {
|
|
255
|
+
if (failing) return
|
|
256
|
+
failing = true
|
|
257
|
+
console.warn(
|
|
258
|
+
`[Sixb] Could not read the dataset versions projections applied: ${sentence(errorMessage(error))} Reads keep the markings read before for up to ${maxAgeMs / 1000}s, then fail until it succeeds.`
|
|
259
|
+
)
|
|
260
|
+
})
|
|
261
|
+
}
|
|
262
|
+
|
|
263
|
+
const current = async (): Promise<AppliedMarkingsSnapshot> => {
|
|
264
|
+
if (versionMarkings.everyMarking().size === 0) return NO_APPLIED_MARKINGS
|
|
265
|
+
|
|
266
|
+
// An invalidation during a refresh is only covered by a refresh that starts after it.
|
|
267
|
+
for (let attempt = 0; attempt < 3; attempt += 1) {
|
|
268
|
+
if (snapshot && refreshedGeneration === generation) {
|
|
269
|
+
const age = now() - refreshedAt
|
|
270
|
+
if (age < freshMs) return snapshot
|
|
271
|
+
if (age <= maxAgeMs) {
|
|
272
|
+
refreshBehind()
|
|
273
|
+
return snapshot
|
|
274
|
+
}
|
|
275
|
+
}
|
|
276
|
+
|
|
277
|
+
try {
|
|
278
|
+
await refresh()
|
|
279
|
+
} catch (error) {
|
|
280
|
+
if (snapshot && now() - refreshedAt <= maxAgeMs) return snapshot
|
|
281
|
+
throw new Error(
|
|
282
|
+
`[Sixb] Cannot read the dataset versions projections applied, so markings cannot be enforced: ${errorMessage(error)}`,
|
|
283
|
+
{ cause: error }
|
|
284
|
+
)
|
|
285
|
+
}
|
|
286
|
+
}
|
|
287
|
+
|
|
288
|
+
if (!snapshot) throw new Error("[Sixb] Applied markings were not read.")
|
|
289
|
+
return snapshot
|
|
290
|
+
}
|
|
291
|
+
|
|
292
|
+
// A version's classification never changes. One that could not be read is read again.
|
|
293
|
+
const originVersions = new Map<string, Promise<AppliedVersionRead>>()
|
|
294
|
+
const readOriginVersion = (origin: EventOriginRef): Promise<AppliedVersionRead> => {
|
|
295
|
+
const key = JSON.stringify([origin.datasetId, origin.datasetVersionId])
|
|
296
|
+
let version = originVersions.get(key)
|
|
297
|
+
|
|
298
|
+
if (version) {
|
|
299
|
+
originVersions.delete(key)
|
|
300
|
+
} else {
|
|
301
|
+
const read = readVersion({ datasetId: origin.datasetId, versionId: origin.datasetVersionId })
|
|
302
|
+
void read.then((result) => {
|
|
303
|
+
if (result.kind === "failed" && originVersions.get(key) === read) originVersions.delete(key)
|
|
304
|
+
})
|
|
305
|
+
version = read
|
|
306
|
+
}
|
|
307
|
+
|
|
308
|
+
keep(originVersions, key, version)
|
|
309
|
+
return version
|
|
310
|
+
}
|
|
311
|
+
|
|
312
|
+
const combined = new WeakMap<AppliedMarkingsSnapshot, Map<string, AppliedMarkingsSnapshot>>()
|
|
313
|
+
const forEventOrigin = async (snapshot: AppliedMarkingsSnapshot, origin: EventOriginRef) => {
|
|
314
|
+
const projection = options.projections
|
|
315
|
+
.listObjects()
|
|
316
|
+
.find((candidate) => candidate.id === origin.projectionId)
|
|
317
|
+
|
|
318
|
+
// Like the objects it wrote, an event of a projection the code no longer declares is read
|
|
319
|
+
// under the markings the code declares.
|
|
320
|
+
if (!projection) return snapshot
|
|
321
|
+
|
|
322
|
+
const read = await readOriginVersion(origin)
|
|
323
|
+
const key = JSON.stringify([
|
|
324
|
+
origin.projectionId,
|
|
325
|
+
origin.datasetId,
|
|
326
|
+
origin.datasetVersionId,
|
|
327
|
+
origin.objectTypeId,
|
|
328
|
+
read.kind,
|
|
329
|
+
])
|
|
330
|
+
|
|
331
|
+
let bySnapshot = combined.get(snapshot)
|
|
332
|
+
const cached = bySnapshot?.get(key)
|
|
333
|
+
if (cached) return cached
|
|
334
|
+
|
|
335
|
+
const result = withPropertyMarkings(
|
|
336
|
+
snapshot,
|
|
337
|
+
eventOriginMarkings(projection, origin, read, {
|
|
338
|
+
ontology: options.ontology,
|
|
339
|
+
everyMarking: versionMarkings.everyMarking(),
|
|
340
|
+
})
|
|
341
|
+
)
|
|
342
|
+
|
|
343
|
+
// Equal snapshots share resolved clearances; a failed read is not kept.
|
|
344
|
+
if (read.kind !== "failed") {
|
|
345
|
+
bySnapshot ??= new Map()
|
|
346
|
+
combined.set(snapshot, bySnapshot)
|
|
347
|
+
keep(bySnapshot, key, result)
|
|
348
|
+
}
|
|
349
|
+
|
|
350
|
+
return result
|
|
351
|
+
}
|
|
352
|
+
|
|
353
|
+
const earlier = new WeakMap<AppliedMarkingsSnapshot, Map<string, AppliedMarkingsSnapshot>>()
|
|
354
|
+
const forEarlierValues = (snapshot: AppliedMarkingsSnapshot, objectTypeId: string) => {
|
|
355
|
+
let byType = earlier.get(snapshot)
|
|
356
|
+
const cached = byType?.get(objectTypeId)
|
|
357
|
+
if (cached) return cached
|
|
358
|
+
|
|
359
|
+
const primary = options.ontology
|
|
360
|
+
.getObjectTypeById(objectTypeId)
|
|
361
|
+
?.properties.find((property) => property.primary)?.id
|
|
362
|
+
const projected = options.projections
|
|
363
|
+
.listObjects()
|
|
364
|
+
.filter((projection) => projection.objectTypeId === objectTypeId)
|
|
365
|
+
.flatMap((projection) => Object.keys(projection.properties))
|
|
366
|
+
|
|
367
|
+
const markings = [...versionMarkings.everyMarking()].sort()
|
|
368
|
+
const result = withPropertyMarkings(
|
|
369
|
+
snapshot,
|
|
370
|
+
[...new Set(projected)]
|
|
371
|
+
.filter((propertyId) => propertyId !== primary)
|
|
372
|
+
.map((propertyId) => ({ objectTypeId, propertyId, markings }))
|
|
373
|
+
)
|
|
374
|
+
|
|
375
|
+
byType ??= new Map()
|
|
376
|
+
earlier.set(snapshot, byType)
|
|
377
|
+
keep(byType, objectTypeId, result)
|
|
378
|
+
return result
|
|
379
|
+
}
|
|
380
|
+
|
|
381
|
+
return {
|
|
382
|
+
forEventOrigin,
|
|
383
|
+
forEarlierValues,
|
|
384
|
+
affects: (clearances) => {
|
|
385
|
+
for (const markingId of versionMarkings.everyMarking()) {
|
|
386
|
+
if (!clearances.has(markingId)) return true
|
|
387
|
+
}
|
|
388
|
+
return false
|
|
389
|
+
},
|
|
390
|
+
current,
|
|
391
|
+
// Also before the first snapshot: a read in flight may have listed the sources before it.
|
|
392
|
+
invalidate: () => {
|
|
393
|
+
generation += 1
|
|
394
|
+
},
|
|
395
|
+
}
|
|
396
|
+
}
|
|
397
|
+
|
|
398
|
+
/** Insert as the newest entry, dropping the oldest past the bound. */
|
|
399
|
+
function keep<TValue>(map: Map<string, TValue>, key: string, value: TValue): void {
|
|
400
|
+
map.set(key, value)
|
|
401
|
+
if (map.size <= EVENT_ORIGINS_KEPT) return
|
|
402
|
+
|
|
403
|
+
const oldest = map.keys().next().value
|
|
404
|
+
if (oldest !== undefined) map.delete(oldest)
|
|
405
|
+
}
|
package/src/security/builders.ts
CHANGED
|
@@ -39,7 +39,12 @@ export interface DefineMembershipPolicyOptions {
|
|
|
39
39
|
readonly can: readonly MembershipOperation[]
|
|
40
40
|
}
|
|
41
41
|
|
|
42
|
-
const MEMBERSHIP_OPERATIONS = new Set<MembershipOperation>([
|
|
42
|
+
const MEMBERSHIP_OPERATIONS = new Set<MembershipOperation>([
|
|
43
|
+
"invite",
|
|
44
|
+
"assignGroups",
|
|
45
|
+
"suspend",
|
|
46
|
+
"serviceAccounts",
|
|
47
|
+
])
|
|
43
48
|
|
|
44
49
|
function assertNonEmptyArray<T>(value: readonly T[], field: string): void {
|
|
45
50
|
if (value.length === 0) {
|
|
@@ -65,7 +70,7 @@ function membershipOperationsFrom(
|
|
|
65
70
|
return operations.map((operation) => {
|
|
66
71
|
if (!MEMBERSHIP_OPERATIONS.has(operation)) {
|
|
67
72
|
throw new SecurityValidationError(
|
|
68
|
-
`[Sixb] ${field} must contain only membership operations: invite, assignGroups, suspend.`
|
|
73
|
+
`[Sixb] ${field} must contain only membership operations: invite, assignGroups, suspend, serviceAccounts.`
|
|
69
74
|
)
|
|
70
75
|
}
|
|
71
76
|
|