@sixb/core 0.1.20 → 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/index.js +10 -10
- package/dist/authorization/decision.d.ts +2 -0
- package/dist/authorization/decision.d.ts.map +1 -1
- package/dist/authorization/grant-kinds.d.ts +2 -2
- package/dist/authorization/grant-kinds.d.ts.map +1 -1
- package/dist/authorization/index.js +6 -6
- 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 +53 -47
- package/dist/bootstrap/index.js.map +2 -2
- package/dist/{chunk-xfs8x8m9.js → chunk-0bphap9y.js} +5 -5
- package/dist/{chunk-1zq2p6g0.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-t7x8dmn0.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-ren4kg2j.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-x6m907x7.js → chunk-5vems3nx.js} +5 -6
- package/dist/{chunk-x6m907x7.js.map → chunk-5vems3nx.js.map} +3 -3
- package/dist/{chunk-0rbyz4qy.js → chunk-61y5xs4p.js} +560 -164
- package/dist/{chunk-0rbyz4qy.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-d0bqz29d.js → chunk-6vb4st8k.js} +8 -4
- package/dist/{chunk-d0bqz29d.js.map → chunk-6vb4st8k.js.map} +3 -3
- package/dist/chunk-7q8t23v4.js +467 -0
- package/dist/chunk-7q8t23v4.js.map +14 -0
- package/dist/{chunk-5j58wjct.js → chunk-858emn8m.js} +6 -6
- 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-n33z5bjw.js → chunk-918wwnaa.js} +490 -24
- package/dist/{chunk-n33z5bjw.js.map → chunk-918wwnaa.js.map} +13 -11
- package/dist/{chunk-rrzt8jdy.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-6c6sn0bh.js → chunk-akzryx9h.js} +335 -1167
- package/dist/{chunk-6c6sn0bh.js.map → chunk-akzryx9h.js.map} +18 -24
- package/dist/chunk-arns890k.js +10 -0
- package/dist/chunk-arns890k.js.map +10 -0
- package/dist/{chunk-hjzdd750.js → chunk-bk9svbcq.js} +11 -11
- package/dist/{chunk-hjzdd750.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-6p49a5cq.js → chunk-c1rxbz5y.js} +3 -3
- package/dist/chunk-cfj9dfbb.js +288 -0
- package/dist/chunk-cfj9dfbb.js.map +12 -0
- package/dist/{chunk-bx9q3cwv.js → chunk-cn0fwwhy.js} +7 -7
- package/dist/{chunk-bx9q3cwv.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-9w055r5b.js → chunk-d09e3rax.js} +1 -1
- package/dist/chunk-d5rjr8c0.js +176 -0
- package/dist/chunk-d5rjr8c0.js.map +12 -0
- package/dist/{chunk-dk8tkk5f.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-gsjm1wms.js → chunk-dhdha526.js} +8 -2
- 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-way52z4h.js → chunk-e17zdm62.js} +6 -12
- package/dist/{chunk-way52z4h.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-es1gxsbf.js → chunk-f4pamkt9.js} +8 -10
- 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-d09tj99x.js → chunk-g257jwnc.js} +10 -4
- package/dist/{chunk-d09tj99x.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-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-k6q3n2sc.js → chunk-k43ct2ke.js} +20 -11
- package/dist/chunk-k43ct2ke.js.map +12 -0
- package/dist/{chunk-3t2hgbgd.js → chunk-kge7k6ey.js} +40 -8
- package/dist/chunk-kge7k6ey.js.map +15 -0
- package/dist/{chunk-tg2cw67r.js → chunk-ky3j490c.js} +2 -2
- package/dist/chunk-mjddfa7k.js +129 -0
- package/dist/chunk-mjddfa7k.js.map +12 -0
- package/dist/{chunk-vpq4shxz.js → chunk-nn5xnx3s.js} +45 -10
- package/dist/{chunk-vpq4shxz.js.map → chunk-nn5xnx3s.js.map} +7 -6
- package/dist/{chunk-0yh890a4.js → chunk-q5e5tv4b.js} +35 -7
- package/dist/{chunk-0yh890a4.js.map → chunk-q5e5tv4b.js.map} +3 -3
- package/dist/{chunk-vyf9kfqf.js → chunk-q7gn29y3.js} +1 -1
- package/dist/{chunk-yevzdx4y.js → chunk-rmakanzx.js} +10 -12
- package/dist/{chunk-yevzdx4y.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-9dmt152s.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-z4m0yz8c.js → chunk-y5tah2kf.js} +1 -1
- package/dist/{chunk-fkgc1wt8.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/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/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 +48 -41
- 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 +20 -4
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +112 -97
- 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 +25 -24
- 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/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/dataset-version-markings.d.ts +47 -0
- package/dist/security/dataset-version-markings.d.ts.map +1 -0
- package/dist/security/grants.d.ts +3 -2
- package/dist/security/grants.d.ts.map +1 -1
- package/dist/security/index.d.ts +2 -1
- 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/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.js +2 -2
- package/dist/security/redactions.d.ts +4 -1
- package/dist/security/redactions.d.ts.map +1 -1
- package/dist/security/types.d.ts +22 -2
- package/dist/security/types.d.ts.map +1 -1
- package/dist/security/validation.d.ts.map +1 -1
- package/dist/shares/internal.js +24 -23
- 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 +9 -8
- 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/sessions.d.ts +2 -1
- package/dist/storage/auth/in-memory/sessions.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 +19 -0
- 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 +11 -11
- 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 +54 -53
- 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 +13 -12
- 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 +4488 -3137
- 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 +27 -26
- 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 +25 -1
- 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/authorization/decision.ts +5 -0
- package/src/authorization/grant-kinds.ts +14 -2
- 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/errors/internal.ts +1 -0
- package/src/events/execution.ts +134 -21
- 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 +71 -3
- 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/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/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/dataset-version-markings.ts +163 -0
- package/src/security/grants.ts +39 -4
- package/src/security/index.ts +3 -0
- 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/pipeline-markings.ts +175 -0
- package/src/security/project.ts +8 -0
- package/src/security/projection-markings.ts +421 -0
- package/src/security/redactions.ts +7 -2
- package/src/security/types.ts +20 -2
- package/src/security/validation.ts +11 -4
- 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 +9 -16
- 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/sessions.ts +21 -0
- package/src/storage/auth/index.ts +2 -0
- package/src/storage/auth/types.ts +18 -0
- 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 +47 -0
- package/src/testing/execution-storage-contract.ts +147 -1
- 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/chunk-1k89ecfr.js +0 -85
- package/dist/chunk-1k89ecfr.js.map +0 -10
- package/dist/chunk-3t2hgbgd.js.map +0 -15
- package/dist/chunk-4vyr1j8f.js +0 -128
- package/dist/chunk-4vyr1j8f.js.map +0 -11
- package/dist/chunk-9gyp8hg1.js +0 -363
- package/dist/chunk-9gyp8hg1.js.map +0 -14
- package/dist/chunk-es1gxsbf.js.map +0 -13
- package/dist/chunk-gsjm1wms.js.map +0 -10
- package/dist/chunk-hkc3jct7.js.map +0 -10
- package/dist/chunk-k6q3n2sc.js.map +0 -12
- package/dist/chunk-rrzt8jdy.js.map +0 -14
- 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-xfs8x8m9.js.map → chunk-0bphap9y.js.map} +0 -0
- /package/dist/{chunk-1zq2p6g0.js.map → chunk-1cc1xaf3.js.map} +0 -0
- /package/dist/{chunk-t7x8dmn0.js.map → chunk-431pyp2c.js.map} +0 -0
- /package/dist/{chunk-c85m1hyj.js.map → chunk-447a5c0p.js.map} +0 -0
- /package/dist/{chunk-ren4kg2j.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-5j58wjct.js.map → chunk-858emn8m.js.map} +0 -0
- /package/dist/{chunk-6p49a5cq.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-9w055r5b.js.map → chunk-d09e3rax.js.map} +0 -0
- /package/dist/{chunk-dk8tkk5f.js.map → chunk-d7dnxdep.js.map} +0 -0
- /package/dist/{chunk-tg2cw67r.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-9dmt152s.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-z4m0yz8c.js.map → chunk-y5tah2kf.js.map} +0 -0
- /package/dist/{chunk-fkgc1wt8.js.map → chunk-z58tm0hm.js.map} +0 -0
|
@@ -0,0 +1,676 @@
|
|
|
1
|
+
// @bun
|
|
2
|
+
import {
|
|
3
|
+
NO_CONTRIBUTION
|
|
4
|
+
} from "./chunk-x0v3jd47.js";
|
|
5
|
+
import {
|
|
6
|
+
lineageColumn,
|
|
7
|
+
isUnknownLineage,
|
|
8
|
+
versionLineage
|
|
9
|
+
} from "./chunk-ff5xkv0p.js";
|
|
10
|
+
import {
|
|
11
|
+
runStepLineage2,
|
|
12
|
+
stepReadColumns
|
|
13
|
+
} from "./chunk-g5bvzyyr.js";
|
|
14
|
+
import {
|
|
15
|
+
SecurityValidationError2
|
|
16
|
+
} from "./chunk-jcfw4h7m.js";
|
|
17
|
+
|
|
18
|
+
// src/security/projection-markings.ts
|
|
19
|
+
function validateProjectionMarkings(projections, ontology, markings) {
|
|
20
|
+
const all = [
|
|
21
|
+
...projections.listObjects(),
|
|
22
|
+
...projections.listLinks(),
|
|
23
|
+
...projections.listTelemetry()
|
|
24
|
+
];
|
|
25
|
+
for (const projection of all) {
|
|
26
|
+
const originsOf = (column) => markings.of({ datasetId: projection.datasetId, column });
|
|
27
|
+
const violation = firstViolation(projection, ontology, (column) => [
|
|
28
|
+
...originsOf(column).keys()
|
|
29
|
+
]);
|
|
30
|
+
if (!violation)
|
|
31
|
+
continue;
|
|
32
|
+
const carries = (column) => {
|
|
33
|
+
const origins = originsOf(column);
|
|
34
|
+
return {
|
|
35
|
+
text: describeOrigins(origins, `${projection.datasetId}.${column}`),
|
|
36
|
+
inherited: [...origins.values()].some((origin) => origin.steps.length > 0)
|
|
37
|
+
};
|
|
38
|
+
};
|
|
39
|
+
throw new SecurityValidationError2(violationMessage(`[Sixb] Projection '${projection.id}'`, projection.datasetId, violation, carries));
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
function assertProjectionVersionMarkings2(input) {
|
|
43
|
+
const { projection, version, classification } = input;
|
|
44
|
+
const markingsOf = (column) => [...classification.columns.get(column) ?? []].sort();
|
|
45
|
+
const violation = firstViolation(projection, input.ontology, markingsOf);
|
|
46
|
+
if (!violation)
|
|
47
|
+
return;
|
|
48
|
+
const subject = `[Sixb] Projection '${projection.id}' cannot read version '${version.versionId}' of dataset '${version.datasetId}'`;
|
|
49
|
+
const carries = (column) => ({
|
|
50
|
+
text: `${markingList(markingsOf(column))} in this version`,
|
|
51
|
+
inherited: true
|
|
52
|
+
});
|
|
53
|
+
const conservative = classification.conservative === undefined ? "" : ` The version was classified with every marking its sources could hold, because ${classification.conservative}.`;
|
|
54
|
+
const rerun = `If the code that writes '${version.datasetId}' no longer derives these markings, rerun its pipeline.`;
|
|
55
|
+
throw new Error(`${violationMessage(subject, version.datasetId, violation, carries)}${conservative} ${rerun}`);
|
|
56
|
+
}
|
|
57
|
+
function projectionSurplus(projection, ontology, markingsOf) {
|
|
58
|
+
const properties = [];
|
|
59
|
+
const keys = [];
|
|
60
|
+
for (const violation of projectionMarkingViolations(projection, ontology, markingsOf)) {
|
|
61
|
+
switch (violation.kind) {
|
|
62
|
+
case "undeclared":
|
|
63
|
+
properties.push({
|
|
64
|
+
objectTypeId: violation.objectTypeId,
|
|
65
|
+
propertyId: violation.propertyId,
|
|
66
|
+
column: violation.column,
|
|
67
|
+
markings: violation.missing
|
|
68
|
+
});
|
|
69
|
+
break;
|
|
70
|
+
case "markedKeyColumn": {
|
|
71
|
+
const markings = markingsOf(violation.column);
|
|
72
|
+
for (const target of violation.targets) {
|
|
73
|
+
keys.push({ target, column: violation.column, role: violation.role, markings });
|
|
74
|
+
}
|
|
75
|
+
const property = violation.property;
|
|
76
|
+
if (property && violation.targets.some((target) => target.kind === "link")) {
|
|
77
|
+
properties.push({ ...property, column: violation.column, markings });
|
|
78
|
+
}
|
|
79
|
+
break;
|
|
80
|
+
}
|
|
81
|
+
case "markedKeyProperty":
|
|
82
|
+
case "telemetry":
|
|
83
|
+
break;
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
return { properties, keys };
|
|
87
|
+
}
|
|
88
|
+
function firstViolation(projection, ontology, markingsOf) {
|
|
89
|
+
const first = projectionMarkingViolations(projection, ontology, markingsOf).next();
|
|
90
|
+
return first.done ? null : first.value;
|
|
91
|
+
}
|
|
92
|
+
function* projectionMarkingViolations(projection, ontology, markingsOf) {
|
|
93
|
+
switch (projection._tag) {
|
|
94
|
+
case "ObjectProjectionDefinition": {
|
|
95
|
+
const objectType = ontology.getObjectTypeById(projection.objectTypeId);
|
|
96
|
+
if (objectType)
|
|
97
|
+
yield* objectProjectionViolations(projection, objectType, markingsOf);
|
|
98
|
+
return;
|
|
99
|
+
}
|
|
100
|
+
case "LinkProjectionDefinition":
|
|
101
|
+
yield* linkProjectionViolations(projection, markingsOf);
|
|
102
|
+
return;
|
|
103
|
+
case "TelemetryProjectionDefinition":
|
|
104
|
+
yield* telemetryProjectionViolations(projection, markingsOf);
|
|
105
|
+
return;
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
function* objectProjectionViolations(projection, objectType, markingsOf) {
|
|
109
|
+
const keyRoles = objectProjectionKeyRoles(projection, objectType);
|
|
110
|
+
for (const [propertyId, column] of Object.entries(projection.properties)) {
|
|
111
|
+
const property = objectType.properties.find((candidate) => candidate.id === propertyId);
|
|
112
|
+
const path = `${objectType.id}.${propertyId}`;
|
|
113
|
+
const keyRole = keyRoles.get(propertyId);
|
|
114
|
+
if (keyRole) {
|
|
115
|
+
if (markingsOf(column).length > 0) {
|
|
116
|
+
yield {
|
|
117
|
+
kind: "markedKeyColumn",
|
|
118
|
+
column,
|
|
119
|
+
role: keyRole.role,
|
|
120
|
+
targets: keyRole.targets,
|
|
121
|
+
property: { objectTypeId: objectType.id, propertyId }
|
|
122
|
+
};
|
|
123
|
+
} else if (property?.markings) {
|
|
124
|
+
yield { kind: "markedKeyProperty", property: path, role: keyRole.role };
|
|
125
|
+
}
|
|
126
|
+
continue;
|
|
127
|
+
}
|
|
128
|
+
const declared = new Set(property?.markings ?? []);
|
|
129
|
+
const missing = markingsOf(column).filter((markingId) => !declared.has(markingId));
|
|
130
|
+
if (missing.length > 0) {
|
|
131
|
+
yield {
|
|
132
|
+
kind: "undeclared",
|
|
133
|
+
property: path,
|
|
134
|
+
objectTypeId: objectType.id,
|
|
135
|
+
propertyId,
|
|
136
|
+
column,
|
|
137
|
+
missing
|
|
138
|
+
};
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
for (const [linkId, link] of Object.entries(projection.links)) {
|
|
142
|
+
if (link.sourceField === undefined)
|
|
143
|
+
continue;
|
|
144
|
+
const role = `keys link '${objectType.id}.${linkId}'`;
|
|
145
|
+
const target = linkTarget(objectType.id, linkId, link.targetObjectTypeId);
|
|
146
|
+
yield* markedKeyColumn(link.sourceField, role, [target], markingsOf);
|
|
147
|
+
}
|
|
148
|
+
const conflictResolution = projection.conflictResolution;
|
|
149
|
+
if (conflictResolution?.strategy === "mostRecent") {
|
|
150
|
+
const role = "decides which value wins under 'mostRecent'";
|
|
151
|
+
const target = { kind: "type", objectTypeId: objectType.id };
|
|
152
|
+
yield* markedKeyColumn(conflictResolution.sourceTimestamp, role, [target], markingsOf);
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
function* linkProjectionViolations(projection, markingsOf) {
|
|
156
|
+
const role = `keys link '${projection.sourceObjectTypeId}.${projection.linkId}'`;
|
|
157
|
+
const targets = [
|
|
158
|
+
linkTarget(projection.sourceObjectTypeId, projection.linkId, projection.targetObjectTypeId)
|
|
159
|
+
];
|
|
160
|
+
yield* markedKeyColumn(projection.sourceField, role, targets, markingsOf);
|
|
161
|
+
yield* markedKeyColumn(projection.targetField, role, targets, markingsOf);
|
|
162
|
+
}
|
|
163
|
+
function* telemetryProjectionViolations(projection, markingsOf) {
|
|
164
|
+
const columns = [
|
|
165
|
+
projection.objectIdField,
|
|
166
|
+
projection.atField,
|
|
167
|
+
...Object.values(projection.properties).flatMap((mapping) => mapping.unitField === undefined ? [mapping.valueField] : [mapping.valueField, mapping.unitField])
|
|
168
|
+
];
|
|
169
|
+
for (const column of columns) {
|
|
170
|
+
if (markingsOf(column).length > 0)
|
|
171
|
+
yield { kind: "telemetry", column };
|
|
172
|
+
}
|
|
173
|
+
}
|
|
174
|
+
function objectProjectionKeyRoles(projection, objectType) {
|
|
175
|
+
const roles = new Map;
|
|
176
|
+
for (const property of objectType.properties) {
|
|
177
|
+
if (!property.primary)
|
|
178
|
+
continue;
|
|
179
|
+
roles.set(property.id, {
|
|
180
|
+
role: `becomes the id of '${objectType.id}'`,
|
|
181
|
+
targets: [{ kind: "type", objectTypeId: objectType.id }]
|
|
182
|
+
});
|
|
183
|
+
}
|
|
184
|
+
for (const [linkId, link] of Object.entries(projection.links)) {
|
|
185
|
+
if (link.sourcePropertyId === undefined)
|
|
186
|
+
continue;
|
|
187
|
+
roles.set(link.sourcePropertyId, {
|
|
188
|
+
role: `keys link '${objectType.id}.${linkId}'`,
|
|
189
|
+
targets: [
|
|
190
|
+
...roles.get(link.sourcePropertyId)?.targets ?? [],
|
|
191
|
+
linkTarget(objectType.id, linkId, link.targetObjectTypeId)
|
|
192
|
+
]
|
|
193
|
+
});
|
|
194
|
+
}
|
|
195
|
+
return roles;
|
|
196
|
+
}
|
|
197
|
+
function linkTarget(objectTypeId, linkId, targetObjectTypeId) {
|
|
198
|
+
return { kind: "link", objectTypeId, linkId, targetObjectTypeId };
|
|
199
|
+
}
|
|
200
|
+
function* markedKeyColumn(column, role, targets, markingsOf) {
|
|
201
|
+
if (markingsOf(column).length > 0)
|
|
202
|
+
yield { kind: "markedKeyColumn", column, role, targets };
|
|
203
|
+
}
|
|
204
|
+
function violationMessage(subject, datasetId, violation, carries) {
|
|
205
|
+
const path = (column) => `${datasetId}.${column}`;
|
|
206
|
+
switch (violation.kind) {
|
|
207
|
+
case "undeclared":
|
|
208
|
+
return `${subject}: property '${violation.property}' is projected from column '${path(violation.column)}', which carries ${carries(violation.column).text}. Add markings: ${markingList(violation.missing)} to the property.`;
|
|
209
|
+
case "markedKeyColumn": {
|
|
210
|
+
const carried = carries(violation.column);
|
|
211
|
+
const inherited = carried.inherited ? `, but carries ${carried.text}` : "";
|
|
212
|
+
return `${subject}: column '${path(violation.column)}' ${violation.role} and cannot carry markings${inherited}.`;
|
|
213
|
+
}
|
|
214
|
+
case "markedKeyProperty":
|
|
215
|
+
return `${subject}: property '${violation.property}' ${violation.role} and cannot carry markings.`;
|
|
216
|
+
case "telemetry":
|
|
217
|
+
return `${subject}: column '${path(violation.column)}' carries ${carries(violation.column).text}, and telemetry projections cannot read marked columns yet.`;
|
|
218
|
+
}
|
|
219
|
+
}
|
|
220
|
+
function describeOrigins(origins, columnPath) {
|
|
221
|
+
const groups = new Map;
|
|
222
|
+
for (const [markingId, origin] of origins) {
|
|
223
|
+
const path = originPath(origin, columnPath);
|
|
224
|
+
groups.set(path, [...groups.get(path) ?? [], markingId]);
|
|
225
|
+
}
|
|
226
|
+
return [...groups].map(([path, markingIds]) => `${markingList(markingIds)}${path}`).join(" and ");
|
|
227
|
+
}
|
|
228
|
+
function originPath(origin, columnPath) {
|
|
229
|
+
const source = `${origin.column.datasetId}.${origin.column.column}`;
|
|
230
|
+
if (origin.steps.length === 0 && source === columnPath)
|
|
231
|
+
return "";
|
|
232
|
+
const steps = origin.steps.map((step) => `'${step}'`).join(", ");
|
|
233
|
+
return ` from '${source}' through ${origin.steps.length === 1 ? "step" : "steps"} ${steps}`;
|
|
234
|
+
}
|
|
235
|
+
function markingList(markings) {
|
|
236
|
+
return `[${markings.join(", ")}]`;
|
|
237
|
+
}
|
|
238
|
+
|
|
239
|
+
// src/security/marking-propagation.ts
|
|
240
|
+
function registeredSteps(pipelines) {
|
|
241
|
+
return pipelines.flatMap((pipeline) => pipeline.graph.nodes.map(({ step }) => ({ pipelineId: pipeline.id, step })));
|
|
242
|
+
}
|
|
243
|
+
function runStepLineages(datasetsById) {
|
|
244
|
+
const lineages = new Map;
|
|
245
|
+
return ({ step }) => {
|
|
246
|
+
if (step.executor.kind !== "run")
|
|
247
|
+
return;
|
|
248
|
+
let lineage = lineages.get(step);
|
|
249
|
+
if (!lineage) {
|
|
250
|
+
lineage = runStepLineage2(step, datasetsById);
|
|
251
|
+
lineages.set(step, lineage);
|
|
252
|
+
}
|
|
253
|
+
return lineage;
|
|
254
|
+
};
|
|
255
|
+
}
|
|
256
|
+
function stepLabel(entry) {
|
|
257
|
+
return `${entry.pipelineId}/${entry.step.id}`;
|
|
258
|
+
}
|
|
259
|
+
var NO_MARKINGS = new Map;
|
|
260
|
+
|
|
261
|
+
class MarkingPropagation {
|
|
262
|
+
datasetsById;
|
|
263
|
+
markings = new Map;
|
|
264
|
+
rowMarkings = new Map;
|
|
265
|
+
ordered;
|
|
266
|
+
readers = new Map;
|
|
267
|
+
known = new Map;
|
|
268
|
+
queue = new Set;
|
|
269
|
+
constructor(datasetsById, steps) {
|
|
270
|
+
this.datasetsById = datasetsById;
|
|
271
|
+
this.ordered = inDependencyOrder(steps);
|
|
272
|
+
for (const entry of steps) {
|
|
273
|
+
for (const input of new Set(Object.values(entry.step.inputs).map((dataset) => dataset.id))) {
|
|
274
|
+
appendTo(this.readers, input, entry);
|
|
275
|
+
}
|
|
276
|
+
}
|
|
277
|
+
}
|
|
278
|
+
of(ref) {
|
|
279
|
+
return this.markedColumns(ref.datasetId).get(ref.column) ?? NO_MARKINGS;
|
|
280
|
+
}
|
|
281
|
+
derive(lineageOf) {
|
|
282
|
+
for (const entry of this.ordered) {
|
|
283
|
+
if (this.known.has(entry))
|
|
284
|
+
continue;
|
|
285
|
+
const lineage = lineageOf(entry);
|
|
286
|
+
if (!lineage)
|
|
287
|
+
continue;
|
|
288
|
+
this.known.set(entry, { lineage, reads: stepReadColumns(entry.step) });
|
|
289
|
+
this.queue.add(entry);
|
|
290
|
+
}
|
|
291
|
+
for (const entry of this.queue) {
|
|
292
|
+
this.queue.delete(entry);
|
|
293
|
+
const known = this.known.get(entry);
|
|
294
|
+
if (!known || !this.apply(entry, known))
|
|
295
|
+
continue;
|
|
296
|
+
for (const reader of this.readers.get(entry.step.output.id) ?? []) {
|
|
297
|
+
if (this.known.has(reader))
|
|
298
|
+
this.queue.add(reader);
|
|
299
|
+
}
|
|
300
|
+
}
|
|
301
|
+
return this;
|
|
302
|
+
}
|
|
303
|
+
apply(entry, { lineage, reads }) {
|
|
304
|
+
const label = stepLabel(entry);
|
|
305
|
+
const rows = this.union(lineage.rows);
|
|
306
|
+
for (const input of new Set(Object.values(entry.step.inputs).map((dataset) => dataset.id))) {
|
|
307
|
+
for (const [markingId, origin] of this.rowMarkings.get(input) ?? []) {
|
|
308
|
+
if (!rows.has(markingId))
|
|
309
|
+
rows.set(markingId, origin);
|
|
310
|
+
}
|
|
311
|
+
}
|
|
312
|
+
let everyRead;
|
|
313
|
+
let changed = false;
|
|
314
|
+
const outputId = entry.step.output.id;
|
|
315
|
+
let outputRows = this.rowMarkings.get(outputId);
|
|
316
|
+
for (const [markingId, origin] of rows) {
|
|
317
|
+
if (outputRows?.has(markingId))
|
|
318
|
+
continue;
|
|
319
|
+
if (!outputRows) {
|
|
320
|
+
outputRows = new Map;
|
|
321
|
+
this.rowMarkings.set(outputId, outputRows);
|
|
322
|
+
}
|
|
323
|
+
outputRows.set(markingId, { column: origin.column, steps: [...origin.steps, label] });
|
|
324
|
+
changed = true;
|
|
325
|
+
}
|
|
326
|
+
const marked = this.markedColumns(outputId);
|
|
327
|
+
for (const { name: column } of this.datasetsById.get(outputId)?.schema.columns ?? []) {
|
|
328
|
+
const values = lineageColumn(lineage, column);
|
|
329
|
+
const valueSource = values ? this.union(values) : everyRead ?? this.union(reads);
|
|
330
|
+
if (!values)
|
|
331
|
+
everyRead = valueSource;
|
|
332
|
+
for (const source of [rows, valueSource]) {
|
|
333
|
+
for (const [markingId, origin] of source) {
|
|
334
|
+
let origins = marked.get(column);
|
|
335
|
+
if (origins?.has(markingId))
|
|
336
|
+
continue;
|
|
337
|
+
if (!origins) {
|
|
338
|
+
origins = new Map;
|
|
339
|
+
marked.set(column, origins);
|
|
340
|
+
}
|
|
341
|
+
origins.set(markingId, { column: origin.column, steps: [...origin.steps, label] });
|
|
342
|
+
changed = true;
|
|
343
|
+
}
|
|
344
|
+
}
|
|
345
|
+
}
|
|
346
|
+
return changed;
|
|
347
|
+
}
|
|
348
|
+
markedColumns(datasetId) {
|
|
349
|
+
let columns = this.markings.get(datasetId);
|
|
350
|
+
if (!columns) {
|
|
351
|
+
columns = new Map;
|
|
352
|
+
for (const column of this.datasetsById.get(datasetId)?.schema.columns ?? []) {
|
|
353
|
+
if (!column.markings?.length)
|
|
354
|
+
continue;
|
|
355
|
+
const origin = { column: { datasetId, column: column.name }, steps: [] };
|
|
356
|
+
columns.set(column.name, new Map(column.markings.map((id) => [id, origin])));
|
|
357
|
+
}
|
|
358
|
+
this.markings.set(datasetId, columns);
|
|
359
|
+
}
|
|
360
|
+
return columns;
|
|
361
|
+
}
|
|
362
|
+
union(columns) {
|
|
363
|
+
const union = new Map;
|
|
364
|
+
for (const column of columns) {
|
|
365
|
+
for (const [markingId, origin] of this.of(column)) {
|
|
366
|
+
if (!union.has(markingId))
|
|
367
|
+
union.set(markingId, origin);
|
|
368
|
+
}
|
|
369
|
+
}
|
|
370
|
+
return union;
|
|
371
|
+
}
|
|
372
|
+
}
|
|
373
|
+
function inDependencyOrder(steps) {
|
|
374
|
+
const producers = producersByDataset(steps);
|
|
375
|
+
const ordered = [];
|
|
376
|
+
const visited = new Set;
|
|
377
|
+
const visit = (entry) => {
|
|
378
|
+
if (visited.has(entry))
|
|
379
|
+
return;
|
|
380
|
+
visited.add(entry);
|
|
381
|
+
for (const input of Object.values(entry.step.inputs)) {
|
|
382
|
+
for (const producer of producers.get(input.id) ?? [])
|
|
383
|
+
visit(producer);
|
|
384
|
+
}
|
|
385
|
+
ordered.push(entry);
|
|
386
|
+
};
|
|
387
|
+
for (const entry of steps)
|
|
388
|
+
visit(entry);
|
|
389
|
+
return ordered;
|
|
390
|
+
}
|
|
391
|
+
function producersByDataset(steps) {
|
|
392
|
+
const producers = new Map;
|
|
393
|
+
for (const entry of steps)
|
|
394
|
+
appendTo(producers, entry.step.output.id, entry);
|
|
395
|
+
return producers;
|
|
396
|
+
}
|
|
397
|
+
function appendTo(map, key, value) {
|
|
398
|
+
const values = map.get(key);
|
|
399
|
+
if (values)
|
|
400
|
+
values.push(value);
|
|
401
|
+
else
|
|
402
|
+
map.set(key, [value]);
|
|
403
|
+
}
|
|
404
|
+
|
|
405
|
+
// src/security/applied-markings-contribution.ts
|
|
406
|
+
function appliedContribution(projection, source, read, context) {
|
|
407
|
+
const { datasetId, versionId } = source.datasetVersion;
|
|
408
|
+
const subject = `version '${versionId}' of '${datasetId}'`;
|
|
409
|
+
const target = projectionTarget(projection);
|
|
410
|
+
const hint = rerunHint(datasetId, read.kind === "read" ? read.version : undefined, context);
|
|
411
|
+
const every = [...context.everyMarking].sort();
|
|
412
|
+
if (read.kind === "failed") {
|
|
413
|
+
return sealed(projection.id, target, every, hint, {
|
|
414
|
+
reason: `the ${subject} it applied, which could not be read from the lake,`,
|
|
415
|
+
detail: `applied ${subject}, which could not be read from the lake: ${sentence(errorMessage(read.error))}`
|
|
416
|
+
});
|
|
417
|
+
}
|
|
418
|
+
if (read.kind === "missing") {
|
|
419
|
+
return sealed(projection.id, target, every, hint, {
|
|
420
|
+
reason: `the ${subject} it applied, which the lake no longer has,`,
|
|
421
|
+
detail: `applied ${subject}, which the lake no longer has.`
|
|
422
|
+
});
|
|
423
|
+
}
|
|
424
|
+
const { columns, conservative } = read.classification;
|
|
425
|
+
const because = conservative === undefined ? "" : ` The version was classified with every marking its sources could hold, because ${conservative}.`;
|
|
426
|
+
if (datasetId !== projection.datasetId || source.projectionRevision !== context.revisionOf(projection.id)) {
|
|
427
|
+
const markings = appliedVersionMarkings(read, context.everyMarking);
|
|
428
|
+
return sealed(projection.id, target, markings, hint, {
|
|
429
|
+
reason: `the ${subject} it applied under an earlier definition of the projection`,
|
|
430
|
+
detail: `applied ${subject} under an earlier definition of the projection, and that version carries ${markingList2(markings)}.${because}`
|
|
431
|
+
});
|
|
432
|
+
}
|
|
433
|
+
const markingsOf = (column) => [...columns.get(column) ?? []].sort();
|
|
434
|
+
const surplus = projectionSurplus(projection, context.ontology, markingsOf);
|
|
435
|
+
if (surplus.properties.length === 0 && surplus.keys.length === 0)
|
|
436
|
+
return NO_CONTRIBUTION;
|
|
437
|
+
const column = (name) => `'${datasetId}.${name}'`;
|
|
438
|
+
const seals = surplus.keys.map((key) => ({
|
|
439
|
+
target: key.target,
|
|
440
|
+
seal: {
|
|
441
|
+
projectionId: projection.id,
|
|
442
|
+
markings: key.markings,
|
|
443
|
+
reason: `in the version '${versionId}' it applied, column ${column(key.column)}, which ${key.role},`
|
|
444
|
+
}
|
|
445
|
+
}));
|
|
446
|
+
const details = [
|
|
447
|
+
...surplus.keys.map((key) => `column ${column(key.column)} ${key.role} and carries ${markingList2(key.markings)}`),
|
|
448
|
+
...surplus.properties.map((property) => `property '${property.objectTypeId}.${property.propertyId}' is projected from column ${column(property.column)}, which carries ${markingList2(property.markings)}`)
|
|
449
|
+
];
|
|
450
|
+
const consequences = [];
|
|
451
|
+
if (seals.length > 0) {
|
|
452
|
+
const markings = [...new Set(seals.flatMap(({ seal }) => seal.markings))].sort();
|
|
453
|
+
consequences.push(`${describeTargets(seals.map(({ target }) => target))} cannot be read without clearance for ${markingList2(markings)}`);
|
|
454
|
+
}
|
|
455
|
+
if (surplus.properties.length > 0) {
|
|
456
|
+
const names = surplus.properties.map((p) => `'${p.objectTypeId}.${p.propertyId}'`);
|
|
457
|
+
const verb = surplus.properties.length === 1 ? "keeps" : "keep";
|
|
458
|
+
consequences.push(`${describeNames(names)} ${verb} these markings`);
|
|
459
|
+
}
|
|
460
|
+
return {
|
|
461
|
+
properties: surplus.properties.map(({ objectTypeId, propertyId, markings }) => ({
|
|
462
|
+
objectTypeId,
|
|
463
|
+
propertyId,
|
|
464
|
+
markings
|
|
465
|
+
})),
|
|
466
|
+
seals,
|
|
467
|
+
notice: {
|
|
468
|
+
projectionId: projection.id,
|
|
469
|
+
sealed: seals.length > 0,
|
|
470
|
+
message: `[Sixb] Projection '${projection.id}' applied ${subject}, in which ${details.join("; ")}.${because} ${capitalize(consequences.join(", and "))} until the projection applies a version the code allows. ${hint}`
|
|
471
|
+
}
|
|
472
|
+
};
|
|
473
|
+
}
|
|
474
|
+
function appliedVersionMarkings(read, everyMarking) {
|
|
475
|
+
if (read.kind !== "read")
|
|
476
|
+
return [...everyMarking].sort();
|
|
477
|
+
const { columns } = read.classification;
|
|
478
|
+
return [...new Set([...columns.values()].flatMap((set) => [...set]))].sort();
|
|
479
|
+
}
|
|
480
|
+
function eventOriginMarkings(projection, origin, read, context) {
|
|
481
|
+
const { objectTypeId } = origin;
|
|
482
|
+
if (read.kind === "read" && projection.datasetId === origin.datasetId && projection.objectTypeId === objectTypeId) {
|
|
483
|
+
const { columns } = read.classification;
|
|
484
|
+
return Object.entries(projection.properties).flatMap(([propertyId, column]) => {
|
|
485
|
+
const markings = [...columns.get(column) ?? []].sort();
|
|
486
|
+
return markings.length === 0 ? [] : [{ objectTypeId, propertyId, markings }];
|
|
487
|
+
});
|
|
488
|
+
}
|
|
489
|
+
const markings = appliedVersionMarkings(read, context.everyMarking);
|
|
490
|
+
if (markings.length === 0)
|
|
491
|
+
return [];
|
|
492
|
+
return (context.ontology.getObjectTypeById(objectTypeId)?.properties ?? []).filter((property) => !property.primary).map((property) => ({ objectTypeId, propertyId: property.id, markings }));
|
|
493
|
+
}
|
|
494
|
+
function producingPipelines(pipelines) {
|
|
495
|
+
const byDataset = new Map;
|
|
496
|
+
for (const { pipelineId, step } of registeredSteps(pipelines)) {
|
|
497
|
+
if (!byDataset.has(step.output.id))
|
|
498
|
+
byDataset.set(step.output.id, pipelineId);
|
|
499
|
+
}
|
|
500
|
+
return (datasetId) => byDataset.get(datasetId);
|
|
501
|
+
}
|
|
502
|
+
function sealed(projectionId, target, markings, hint, text) {
|
|
503
|
+
if (markings.length === 0)
|
|
504
|
+
return NO_CONTRIBUTION;
|
|
505
|
+
return {
|
|
506
|
+
properties: [],
|
|
507
|
+
seals: [{ target, seal: { projectionId, markings, reason: text.reason } }],
|
|
508
|
+
notice: {
|
|
509
|
+
projectionId,
|
|
510
|
+
sealed: true,
|
|
511
|
+
message: `[Sixb] Projection '${projectionId}' ${text.detail} ${describeTargets([target])} cannot be read without clearance for ${markingList2(markings)} until the projection applies a version the code allows. ${hint}`
|
|
512
|
+
}
|
|
513
|
+
};
|
|
514
|
+
}
|
|
515
|
+
function projectionTarget(projection) {
|
|
516
|
+
return projection._tag === "ObjectProjectionDefinition" ? { kind: "type", objectTypeId: projection.objectTypeId } : {
|
|
517
|
+
kind: "link",
|
|
518
|
+
objectTypeId: projection.sourceObjectTypeId,
|
|
519
|
+
linkId: projection.linkId,
|
|
520
|
+
targetObjectTypeId: projection.targetObjectTypeId
|
|
521
|
+
};
|
|
522
|
+
}
|
|
523
|
+
function rerunHint(datasetId, version, context) {
|
|
524
|
+
const pipelineId = context.pipelineOf(datasetId) ?? (version?.producer?.kind === "pipeline" ? version.producer.id : undefined);
|
|
525
|
+
return pipelineId === undefined ? `Write a new version of '${datasetId}' to replace it.` : `Rerun pipeline '${pipelineId}' to replace it.`;
|
|
526
|
+
}
|
|
527
|
+
function describeTargets(targets) {
|
|
528
|
+
return describeNames(targets.map((target) => target.kind === "type" ? `'${target.objectTypeId}'` : `link '${target.objectTypeId}.${target.linkId}'`));
|
|
529
|
+
}
|
|
530
|
+
function describeNames(names) {
|
|
531
|
+
const unique = [...new Set(names)];
|
|
532
|
+
const last = unique.pop() ?? "";
|
|
533
|
+
return unique.length === 0 ? last : `${unique.join(", ")} and ${last}`;
|
|
534
|
+
}
|
|
535
|
+
function capitalize(text) {
|
|
536
|
+
return text.charAt(0).toUpperCase() + text.slice(1);
|
|
537
|
+
}
|
|
538
|
+
function sentence(text) {
|
|
539
|
+
return text.endsWith(".") ? text : `${text}.`;
|
|
540
|
+
}
|
|
541
|
+
function markingList2(markings) {
|
|
542
|
+
return `[${markings.join(", ")}]`;
|
|
543
|
+
}
|
|
544
|
+
function errorMessage(error) {
|
|
545
|
+
return error instanceof Error ? error.message : String(error);
|
|
546
|
+
}
|
|
547
|
+
|
|
548
|
+
// src/security/applied-markings-host.ts
|
|
549
|
+
var appliedMarkingsKey = Symbol("sixb.appliedMarkings");
|
|
550
|
+
function registerAppliedMarkings(owner, markings) {
|
|
551
|
+
const registered = owner[appliedMarkingsKey];
|
|
552
|
+
if (registered && registered !== markings) {
|
|
553
|
+
throw new Error("[Sixb] Applied markings are already registered for this owner.");
|
|
554
|
+
}
|
|
555
|
+
Object.defineProperty(owner, appliedMarkingsKey, {
|
|
556
|
+
configurable: false,
|
|
557
|
+
enumerable: false,
|
|
558
|
+
value: markings,
|
|
559
|
+
writable: false
|
|
560
|
+
});
|
|
561
|
+
}
|
|
562
|
+
function getAppliedMarkings2(owner) {
|
|
563
|
+
const markings = owner[appliedMarkingsKey];
|
|
564
|
+
if (markings)
|
|
565
|
+
return markings;
|
|
566
|
+
throw new Error("[Sixb] Applied markings are not registered for this runtime.");
|
|
567
|
+
}
|
|
568
|
+
function warmAppliedMarkings2(owner) {
|
|
569
|
+
getAppliedMarkings2(owner).current().catch((error) => {
|
|
570
|
+
console.warn(errorMessage(error));
|
|
571
|
+
});
|
|
572
|
+
}
|
|
573
|
+
|
|
574
|
+
// src/security/marking-sets.ts
|
|
575
|
+
class MarkingSets {
|
|
576
|
+
empty = new Set;
|
|
577
|
+
sets = new Map([["", this.empty]]);
|
|
578
|
+
of(markingIds) {
|
|
579
|
+
if (markingIds === undefined || Array.isArray(markingIds) && markingIds.length === 0) {
|
|
580
|
+
return this.empty;
|
|
581
|
+
}
|
|
582
|
+
const sorted = [...new Set(markingIds)].sort();
|
|
583
|
+
const key = sorted.join("\x00");
|
|
584
|
+
let set = this.sets.get(key);
|
|
585
|
+
if (!set) {
|
|
586
|
+
set = new Set(sorted);
|
|
587
|
+
this.sets.set(key, set);
|
|
588
|
+
}
|
|
589
|
+
return set;
|
|
590
|
+
}
|
|
591
|
+
union(sets) {
|
|
592
|
+
let single;
|
|
593
|
+
const ids = [];
|
|
594
|
+
for (const set of sets) {
|
|
595
|
+
if (!set || set.size === 0)
|
|
596
|
+
continue;
|
|
597
|
+
single = single === undefined && ids.length === 0 ? set : undefined;
|
|
598
|
+
ids.push(...set);
|
|
599
|
+
}
|
|
600
|
+
return single ?? this.of(ids);
|
|
601
|
+
}
|
|
602
|
+
}
|
|
603
|
+
|
|
604
|
+
// src/security/dataset-version-markings.ts
|
|
605
|
+
function createDatasetVersionMarkings(options) {
|
|
606
|
+
const sets = new MarkingSets;
|
|
607
|
+
let declared;
|
|
608
|
+
const declaredByDataset = () => declared ??= new Map(options.datasets.list().map((dataset) => [
|
|
609
|
+
dataset.id,
|
|
610
|
+
new Map(dataset.schema.columns.map((column) => [column.name, sets.of(column.markings)]))
|
|
611
|
+
]));
|
|
612
|
+
let every;
|
|
613
|
+
const everyMarking = () => every ??= sets.union([...declaredByDataset().values()].flatMap((columns) => [...columns.values()]));
|
|
614
|
+
const classify = (version) => {
|
|
615
|
+
const subject = `version '${version.versionId}' of '${version.datasetId}'`;
|
|
616
|
+
const own = declaredByDataset().get(version.datasetId);
|
|
617
|
+
if (!own)
|
|
618
|
+
return conservatively(version, `dataset '${version.datasetId}' is not registered`);
|
|
619
|
+
const lineage = versionLineage(version, options.lakeStorage);
|
|
620
|
+
if (isUnknownLineage(lineage)) {
|
|
621
|
+
return conservatively(version, lineage === version.lineage ? `the lineage of ${subject} is unknown: ${lineage.unknown}` : lineage.unknown);
|
|
622
|
+
}
|
|
623
|
+
let conservative;
|
|
624
|
+
const markingsOf = (ref) => {
|
|
625
|
+
const columns = declaredByDataset().get(ref.datasetId);
|
|
626
|
+
if (columns)
|
|
627
|
+
return columns.get(ref.column);
|
|
628
|
+
conservative ??= `dataset '${ref.datasetId}' is not registered`;
|
|
629
|
+
return everyMarking();
|
|
630
|
+
};
|
|
631
|
+
const rows = sets.union(lineage.rows.map(markingsOf));
|
|
632
|
+
const columns = new Map(version.schema.columns.map(({ name }) => {
|
|
633
|
+
const values = lineageColumn(lineage, name);
|
|
634
|
+
if (!values) {
|
|
635
|
+
conservative ??= `${subject} recorded no lineage for column '${name}'`;
|
|
636
|
+
return [name, everyMarking()];
|
|
637
|
+
}
|
|
638
|
+
return [name, sets.union([own.get(name), rows, ...values.map(markingsOf)])];
|
|
639
|
+
}));
|
|
640
|
+
return { columns, ...conservative === undefined ? {} : { conservative } };
|
|
641
|
+
};
|
|
642
|
+
const conservatively = (version, reason) => {
|
|
643
|
+
const markings = everyMarking();
|
|
644
|
+
return {
|
|
645
|
+
columns: new Map(version.schema.columns.map(({ name }) => [name, markings])),
|
|
646
|
+
conservative: reason
|
|
647
|
+
};
|
|
648
|
+
};
|
|
649
|
+
return { classify, everyMarking };
|
|
650
|
+
}
|
|
651
|
+
var datasetVersionMarkingsKey = Symbol("sixb.datasetVersionMarkings");
|
|
652
|
+
function registerDatasetVersionMarkings(owner, markings) {
|
|
653
|
+
const registered = owner[datasetVersionMarkingsKey];
|
|
654
|
+
if (registered && registered !== markings) {
|
|
655
|
+
throw new Error("[Sixb] Dataset version markings are already registered for this owner.");
|
|
656
|
+
}
|
|
657
|
+
Object.defineProperty(owner, datasetVersionMarkingsKey, {
|
|
658
|
+
configurable: false,
|
|
659
|
+
enumerable: false,
|
|
660
|
+
value: markings,
|
|
661
|
+
writable: false
|
|
662
|
+
});
|
|
663
|
+
}
|
|
664
|
+
function getDatasetVersionMarkings2(owner) {
|
|
665
|
+
const markings = owner[datasetVersionMarkingsKey];
|
|
666
|
+
if (markings)
|
|
667
|
+
return markings;
|
|
668
|
+
throw new Error("[Sixb] Dataset version markings are not registered for this runtime.");
|
|
669
|
+
}
|
|
670
|
+
function shareDatasetVersionMarkings2(source, target) {
|
|
671
|
+
registerDatasetVersionMarkings(target, getDatasetVersionMarkings2(source));
|
|
672
|
+
}
|
|
673
|
+
|
|
674
|
+
export { registeredSteps, runStepLineages, MarkingPropagation, validateProjectionMarkings, assertProjectionVersionMarkings2, describeOrigins, appliedContribution, eventOriginMarkings, producingPipelines, sentence, errorMessage, registerAppliedMarkings, getAppliedMarkings2, warmAppliedMarkings2, createDatasetVersionMarkings, registerDatasetVersionMarkings, getDatasetVersionMarkings2, shareDatasetVersionMarkings2 };
|
|
675
|
+
|
|
676
|
+
//# debugId=BCFE94079FF12A1E64756E2164756E21
|