@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,163 @@
|
|
|
1
|
+
import type { DatasetDefinition } from "../datasets/types"
|
|
2
|
+
import { isUnknownLineage, lineageColumn, versionLineage } from "../lake-storage/lineage"
|
|
3
|
+
import type { DatasetColumnRef, DatasetVersion, LakeStorage } from "../lake-storage/types"
|
|
4
|
+
import { MarkingSets } from "./marking-sets"
|
|
5
|
+
|
|
6
|
+
/** Markings of each column of one dataset version. A column without markings has an empty set. */
|
|
7
|
+
export type VersionColumnMarkings = ReadonlyMap<string, ReadonlySet<string>>
|
|
8
|
+
|
|
9
|
+
export interface VersionClassification {
|
|
10
|
+
readonly columns: VersionColumnMarkings
|
|
11
|
+
/**
|
|
12
|
+
* Why part of the version was classified conservatively, with every marking it could hold.
|
|
13
|
+
* Absent when every column was classified from its lineage.
|
|
14
|
+
*/
|
|
15
|
+
readonly conservative?: string
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
/**
|
|
19
|
+
* Markings each version of a dataset carries.
|
|
20
|
+
*
|
|
21
|
+
* Markings are never stored. A column carries the markings its registered dataset declares, and
|
|
22
|
+
* those every column its lineage lists declares. The version records that lineage resolved across
|
|
23
|
+
* every upstream step and every row it keeps (`DatasetVersion.lineage`), so a version keeps the
|
|
24
|
+
* classification of the code that produced it, and classifying it reads no other version.
|
|
25
|
+
*
|
|
26
|
+
* Wherever the record does not say what a column holds (no lineage on a pipeline version, or on
|
|
27
|
+
* any version of a provider that does not declare `recordsLineage`, an unknown history, a column
|
|
28
|
+
* it does not list, a dataset no longer registered) the column is classified with every marking
|
|
29
|
+
* the project declares.
|
|
30
|
+
*/
|
|
31
|
+
export interface DatasetVersionMarkings {
|
|
32
|
+
classify(version: DatasetVersion): VersionClassification
|
|
33
|
+
/**
|
|
34
|
+
* Every marking declared on a registered column. Every classification, conservative ones
|
|
35
|
+
* included, is drawn from it, so a reader cleared for all of it needs no classification. Empty
|
|
36
|
+
* when the project declares no column markings.
|
|
37
|
+
*/
|
|
38
|
+
everyMarking(): ReadonlySet<string>
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
export interface DatasetVersionMarkingsOptions {
|
|
42
|
+
readonly datasets: { list(): readonly DatasetDefinition[] }
|
|
43
|
+
/** The lake the versions are read from: whether it records lineage on every version. */
|
|
44
|
+
readonly lakeStorage: Pick<LakeStorage, "recordsLineage">
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
export function createDatasetVersionMarkings(
|
|
48
|
+
options: DatasetVersionMarkingsOptions
|
|
49
|
+
): DatasetVersionMarkings {
|
|
50
|
+
const sets = new MarkingSets()
|
|
51
|
+
|
|
52
|
+
// Built on first use: a host that never classifies a version pays nothing for it.
|
|
53
|
+
let declared: ReadonlyMap<string, ReadonlyMap<string, ReadonlySet<string>>> | undefined
|
|
54
|
+
const declaredByDataset = () =>
|
|
55
|
+
(declared ??= new Map(
|
|
56
|
+
options.datasets
|
|
57
|
+
.list()
|
|
58
|
+
.map((dataset) => [
|
|
59
|
+
dataset.id,
|
|
60
|
+
new Map(dataset.schema.columns.map((column) => [column.name, sets.of(column.markings)])),
|
|
61
|
+
])
|
|
62
|
+
))
|
|
63
|
+
|
|
64
|
+
/**
|
|
65
|
+
* Every marking a registered column declares: what a column may hold where its record does not
|
|
66
|
+
* say. The pipelines that wrote it may have read datasets the current code no longer reads, so
|
|
67
|
+
* nothing narrower is safe.
|
|
68
|
+
*/
|
|
69
|
+
let every: ReadonlySet<string> | undefined
|
|
70
|
+
const everyMarking = () =>
|
|
71
|
+
(every ??= sets.union(
|
|
72
|
+
[...declaredByDataset().values()].flatMap((columns) => [...columns.values()])
|
|
73
|
+
))
|
|
74
|
+
|
|
75
|
+
const classify = (version: DatasetVersion): VersionClassification => {
|
|
76
|
+
const subject = `version '${version.versionId}' of '${version.datasetId}'`
|
|
77
|
+
const own = declaredByDataset().get(version.datasetId)
|
|
78
|
+
|
|
79
|
+
// No definition says what its columns declare: they may hold anything a column declares.
|
|
80
|
+
if (!own) return conservatively(version, `dataset '${version.datasetId}' is not registered`)
|
|
81
|
+
|
|
82
|
+
const lineage = versionLineage(version, options.lakeStorage)
|
|
83
|
+
if (isUnknownLineage(lineage)) {
|
|
84
|
+
// A reason core derived names this version. A recorded one names where the lineage was
|
|
85
|
+
// lost: upstream, or, for a provider that could not decode it, this version's own record.
|
|
86
|
+
return conservatively(
|
|
87
|
+
version,
|
|
88
|
+
lineage === version.lineage
|
|
89
|
+
? `the lineage of ${subject} is unknown: ${lineage.unknown}`
|
|
90
|
+
: lineage.unknown
|
|
91
|
+
)
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
let conservative: string | undefined
|
|
95
|
+
const markingsOf = (ref: DatasetColumnRef): ReadonlySet<string> | undefined => {
|
|
96
|
+
const columns = declaredByDataset().get(ref.datasetId)
|
|
97
|
+
if (columns) return columns.get(ref.column)
|
|
98
|
+
conservative ??= `dataset '${ref.datasetId}' is not registered`
|
|
99
|
+
return everyMarking()
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
const rows = sets.union(lineage.rows.map(markingsOf))
|
|
103
|
+
const columns = new Map(
|
|
104
|
+
version.schema.columns.map(({ name }) => {
|
|
105
|
+
const values = lineageColumn(lineage, name)
|
|
106
|
+
if (!values) {
|
|
107
|
+
conservative ??= `${subject} recorded no lineage for column '${name}'`
|
|
108
|
+
return [name, everyMarking()]
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
return [name, sets.union([own.get(name), rows, ...values.map(markingsOf)])]
|
|
112
|
+
})
|
|
113
|
+
)
|
|
114
|
+
|
|
115
|
+
return { columns, ...(conservative === undefined ? {} : { conservative }) }
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
const conservatively = (version: DatasetVersion, reason: string): VersionClassification => {
|
|
119
|
+
const markings = everyMarking()
|
|
120
|
+
return {
|
|
121
|
+
columns: new Map(version.schema.columns.map(({ name }) => [name, markings])),
|
|
122
|
+
conservative: reason,
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
|
|
126
|
+
return { classify, everyMarking }
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
// ── Host capability ─────────────────────────────────────────
|
|
130
|
+
|
|
131
|
+
const datasetVersionMarkingsKey: unique symbol = Symbol("sixb.datasetVersionMarkings")
|
|
132
|
+
|
|
133
|
+
interface DatasetVersionMarkingsOwner {
|
|
134
|
+
readonly [datasetVersionMarkingsKey]?: DatasetVersionMarkings
|
|
135
|
+
}
|
|
136
|
+
|
|
137
|
+
/** One classifier per host, so every reader shares the markings it reads from the definitions. */
|
|
138
|
+
export function registerDatasetVersionMarkings(
|
|
139
|
+
owner: object,
|
|
140
|
+
markings: DatasetVersionMarkings
|
|
141
|
+
): void {
|
|
142
|
+
const registered = (owner as DatasetVersionMarkingsOwner)[datasetVersionMarkingsKey]
|
|
143
|
+
if (registered && registered !== markings) {
|
|
144
|
+
throw new Error("[Sixb] Dataset version markings are already registered for this owner.")
|
|
145
|
+
}
|
|
146
|
+
|
|
147
|
+
Object.defineProperty(owner, datasetVersionMarkingsKey, {
|
|
148
|
+
configurable: false,
|
|
149
|
+
enumerable: false,
|
|
150
|
+
value: markings,
|
|
151
|
+
writable: false,
|
|
152
|
+
})
|
|
153
|
+
}
|
|
154
|
+
|
|
155
|
+
export function getDatasetVersionMarkings(owner: object): DatasetVersionMarkings {
|
|
156
|
+
const markings = (owner as DatasetVersionMarkingsOwner)[datasetVersionMarkingsKey]
|
|
157
|
+
if (markings) return markings
|
|
158
|
+
throw new Error("[Sixb] Dataset version markings are not registered for this runtime.")
|
|
159
|
+
}
|
|
160
|
+
|
|
161
|
+
export function shareDatasetVersionMarkings(source: object, target: object): void {
|
|
162
|
+
registerDatasetVersionMarkings(target, getDatasetVersionMarkings(source))
|
|
163
|
+
}
|
package/src/security/every.ts
CHANGED
|
@@ -20,7 +20,6 @@ import type { ShareDefinition } from "../shares"
|
|
|
20
20
|
import type { SyncDefinition } from "../syncs"
|
|
21
21
|
import type { WorkflowDefinition } from "../workflows/types"
|
|
22
22
|
import { SecurityValidationError } from "./errors"
|
|
23
|
-
import type { ApplicationDefinition } from "./types"
|
|
24
23
|
|
|
25
24
|
/** Capability targets a breadth selector can range over. */
|
|
26
25
|
export const BREADTH_TARGETS = [
|
|
@@ -30,7 +29,6 @@ export const BREADTH_TARGETS = [
|
|
|
30
29
|
"workflow",
|
|
31
30
|
"sync",
|
|
32
31
|
"pipeline",
|
|
33
|
-
"application",
|
|
34
32
|
"connector",
|
|
35
33
|
"share",
|
|
36
34
|
] as const
|
|
@@ -44,7 +42,6 @@ interface BreadthTargetInput {
|
|
|
44
42
|
workflow: WorkflowDefinition
|
|
45
43
|
sync: SyncDefinition
|
|
46
44
|
pipeline: PipelineDefinition
|
|
47
|
-
application: ApplicationDefinition
|
|
48
45
|
connector: ConnectorDefinition
|
|
49
46
|
share: ShareDefinition
|
|
50
47
|
}
|
|
@@ -106,7 +103,6 @@ export const every = {
|
|
|
106
103
|
workflow: (): BreadthSelector<"workflow"> => all("workflow"),
|
|
107
104
|
sync: (): BreadthSelector<"sync"> => all("sync"),
|
|
108
105
|
pipeline: (): BreadthSelector<"pipeline"> => all("pipeline"),
|
|
109
|
-
application: (): BreadthSelector<"application"> => all("application"),
|
|
110
106
|
connector: (): BreadthSelector<"connector"> => all("connector"),
|
|
111
107
|
share: (): BreadthSelector<"share"> => all("share"),
|
|
112
108
|
}
|
package/src/security/grants.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Grant builders for role definitions.
|
|
3
3
|
*
|
|
4
|
-
* Grants are plain data referencing
|
|
4
|
+
* Grants are plain data referencing runtime definitions
|
|
5
5
|
* by id. They carry no enforcement logic — the authorization engine expands
|
|
6
6
|
* each grant's selection into per-principal id sets at startup, so runtime
|
|
7
7
|
* checks stay simple `set.has(id)` lookups.
|
|
@@ -31,14 +31,13 @@ import {
|
|
|
31
31
|
isBreadthSelector,
|
|
32
32
|
} from "./every"
|
|
33
33
|
import type {
|
|
34
|
-
AccessGrant,
|
|
35
34
|
AgentRunGrant,
|
|
36
35
|
AppendGrant,
|
|
37
|
-
ApplicationDefinition,
|
|
38
36
|
ApplyGrant,
|
|
39
37
|
EditGrant,
|
|
40
38
|
ManageGrant,
|
|
41
39
|
ObserveGrant,
|
|
40
|
+
ProjectSurfaceReference,
|
|
42
41
|
RunGrant,
|
|
43
42
|
Selection,
|
|
44
43
|
ShareGrant,
|
|
@@ -54,7 +53,7 @@ const VIEW_TARGETS = ["object", "dataset"] as const
|
|
|
54
53
|
const RUN_TARGETS = ["workflow", "sync", "pipeline"] as const
|
|
55
54
|
|
|
56
55
|
/**
|
|
57
|
-
*
|
|
56
|
+
* Six of the eight targets carry a `kind` discriminant naming themselves. The other two — an
|
|
58
57
|
* `ObjectType` and an `ActionDefinition` — carry none, and each appears in exactly one builder that
|
|
59
58
|
* allows no other undiscriminated target, so the allowed set names them unambiguously.
|
|
60
59
|
*/
|
|
@@ -63,7 +62,6 @@ const TARGET_BY_DEFINITION_KIND: Readonly<Partial<Record<string, BreadthTarget>>
|
|
|
63
62
|
sync: "sync",
|
|
64
63
|
pipeline: "pipeline",
|
|
65
64
|
workflow: "workflow",
|
|
66
|
-
application: "application",
|
|
67
65
|
connector: "connector",
|
|
68
66
|
share: "share",
|
|
69
67
|
}
|
|
@@ -82,7 +80,7 @@ function targetOfDefinition<TTarget extends BreadthTarget>(
|
|
|
82
80
|
// `spec.universeKey` with a `TypeError` naming neither the role nor the definition.
|
|
83
81
|
if (discriminated) {
|
|
84
82
|
if (!isAllowedTarget(discriminated, allowedTargets)) {
|
|
85
|
-
// "one targeting x", not "a x definition":
|
|
83
|
+
// "one targeting x", not "a x definition": object and action start with a vowel, and
|
|
86
84
|
// this string ships in a release. Same reason the selector branch below writes no article.
|
|
87
85
|
throw new SecurityValidationError(
|
|
88
86
|
`[Sixb] ${label} accepts ${allowedTargets.join(" or ")} definitions, but received one targeting ${discriminated}.`
|
|
@@ -158,11 +156,6 @@ function resolveGrant<TDefinition extends { readonly id?: unknown }, TTarget ext
|
|
|
158
156
|
return { target, selection: { all: false, ids } }
|
|
159
157
|
}
|
|
160
158
|
|
|
161
|
-
function access(input: GrantInput<ApplicationDefinition, "application">): AccessGrant {
|
|
162
|
-
const { selection } = resolveGrant(input, "can.access", ["application"])
|
|
163
|
-
return { kind: "grant", capability: "access", target: "application", selection }
|
|
164
|
-
}
|
|
165
|
-
|
|
166
159
|
function view<const TObjectTypeId extends string>(
|
|
167
160
|
input: ShareTarget<TObjectTypeId>
|
|
168
161
|
): ShareViewGrantBuilder<TObjectTypeId>
|
|
@@ -266,17 +259,45 @@ function isAgentUsageReference(input: unknown): input is AgentUsageReference {
|
|
|
266
259
|
)
|
|
267
260
|
}
|
|
268
261
|
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
262
|
+
type ObservableReference = ProjectSurfaceReference | AgentUsageReference
|
|
263
|
+
|
|
264
|
+
/**
|
|
265
|
+
* Every reference `can.observe` accepts, keyed by its `kind`, which is also its grant target. The
|
|
266
|
+
* full `Record` is what stops a new `project` member from compiling until it is listed here.
|
|
267
|
+
*/
|
|
268
|
+
const OBSERVABLE_REFERENCES: Readonly<Record<ObservableReference["kind"], string>> = {
|
|
269
|
+
logs: "project.logs",
|
|
270
|
+
activity: "project.activity",
|
|
271
|
+
aiUsage: "agent.usage",
|
|
272
|
+
}
|
|
273
|
+
|
|
274
|
+
function isObservableReference(input: unknown): input is ObservableReference {
|
|
275
|
+
return (
|
|
276
|
+
typeof input === "object" &&
|
|
277
|
+
input !== null &&
|
|
278
|
+
"kind" in input &&
|
|
279
|
+
typeof input.kind === "string" &&
|
|
280
|
+
Object.hasOwn(OBSERVABLE_REFERENCES, input.kind)
|
|
281
|
+
)
|
|
282
|
+
}
|
|
283
|
+
|
|
284
|
+
function observe(input: ObservableReference): ObserveGrant {
|
|
285
|
+
const value: unknown = input
|
|
286
|
+
|
|
287
|
+
// Older role files pass the string form. Point them at the reference instead of only rejecting
|
|
288
|
+
// the input.
|
|
289
|
+
if (value === "logs") {
|
|
290
|
+
throw new SecurityValidationError(
|
|
291
|
+
'[Sixb] can.observe("logs") is now can.observe(project.logs), imported from "@sixb/core".'
|
|
292
|
+
)
|
|
272
293
|
}
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
target,
|
|
278
|
-
selection: { all: false, ids: [target] },
|
|
294
|
+
|
|
295
|
+
if (!isObservableReference(value)) {
|
|
296
|
+
const accepted = Object.values(OBSERVABLE_REFERENCES).join(" or ")
|
|
297
|
+
throw new SecurityValidationError(`[Sixb] can.observe accepts ${accepted}.`)
|
|
279
298
|
}
|
|
299
|
+
|
|
300
|
+
return { kind: "grant", capability: "observe", target: value.kind }
|
|
280
301
|
}
|
|
281
302
|
|
|
282
303
|
function manage(input: GrantInput<ConnectorDefinition, "connector">): ManageGrant<"connector">
|
|
@@ -285,12 +306,7 @@ function manage(
|
|
|
285
306
|
input: GrantInput<ConnectorDefinition, "connector"> | AgentUsageReference
|
|
286
307
|
): ManageGrant {
|
|
287
308
|
if (isAgentUsageReference(input)) {
|
|
288
|
-
return {
|
|
289
|
-
kind: "grant",
|
|
290
|
-
capability: "manage",
|
|
291
|
-
target: "aiUsage",
|
|
292
|
-
selection: { all: false, ids: ["aiUsage"] },
|
|
293
|
-
}
|
|
309
|
+
return { kind: "grant", capability: "manage", target: "aiUsage" }
|
|
294
310
|
}
|
|
295
311
|
return {
|
|
296
312
|
kind: "grant",
|
|
@@ -301,7 +317,6 @@ function manage(
|
|
|
301
317
|
}
|
|
302
318
|
|
|
303
319
|
export const can = {
|
|
304
|
-
access,
|
|
305
320
|
view,
|
|
306
321
|
edit,
|
|
307
322
|
append,
|
package/src/security/index.ts
CHANGED
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
export { applications } from "./applications"
|
|
2
1
|
export type {
|
|
3
2
|
DefineGroupOptions,
|
|
4
3
|
DefineMarkingOptions,
|
|
@@ -17,13 +16,12 @@ export {
|
|
|
17
16
|
missingMembershipGroupIds,
|
|
18
17
|
resolveMembershipPolicyScope,
|
|
19
18
|
} from "./membership-policies"
|
|
19
|
+
export { project } from "./project"
|
|
20
20
|
export type { SecurityDefinitionCatalog, SecurityRegistryOptions } from "./registry"
|
|
21
21
|
export { SecurityRegistry } from "./registry"
|
|
22
22
|
export type {
|
|
23
|
-
AccessGrant,
|
|
24
23
|
AgentRunGrant,
|
|
25
24
|
AppendGrant,
|
|
26
|
-
ApplicationDefinition,
|
|
27
25
|
ApplyGrant,
|
|
28
26
|
EditGrant,
|
|
29
27
|
GrantCapability,
|
|
@@ -37,6 +35,8 @@ export type {
|
|
|
37
35
|
MembershipPolicyDefinition,
|
|
38
36
|
ObserveGrant,
|
|
39
37
|
ObserveGrantTarget,
|
|
38
|
+
ProjectReference,
|
|
39
|
+
ProjectSurfaceReference,
|
|
40
40
|
RedactionReason,
|
|
41
41
|
Redactions,
|
|
42
42
|
RegisteredSecurityDefinitions,
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Marking plumbing for this repo's hosts and workers, not for app authors.
|
|
3
|
+
*
|
|
4
|
+
* `checkPipelineMarkings` is the SQL preflight the API server and CLI run before serving. The
|
|
5
|
+
* projection worker shares the host's version classifier with `shareDatasetVersionMarkings`, then
|
|
6
|
+
* classifies each pinned version and refuses one with `assertProjectionVersionMarkings`. The API
|
|
7
|
+
* server reads the versions projections applied ahead of its first request with
|
|
8
|
+
* `warmAppliedMarkings`, and the CLI reports what they add with `getAppliedMarkings`.
|
|
9
|
+
*/
|
|
10
|
+
export { getAppliedMarkings, warmAppliedMarkings } from "./applied-markings-host"
|
|
11
|
+
export type {
|
|
12
|
+
DatasetVersionMarkings,
|
|
13
|
+
VersionClassification,
|
|
14
|
+
VersionColumnMarkings,
|
|
15
|
+
} from "./dataset-version-markings"
|
|
16
|
+
export { getDatasetVersionMarkings, shareDatasetVersionMarkings } from "./dataset-version-markings"
|
|
17
|
+
export { checkPipelineMarkings } from "./pipeline-markings"
|
|
18
|
+
export { assertProjectionVersionMarkings } from "./projection-markings"
|
|
@@ -0,0 +1,255 @@
|
|
|
1
|
+
import type { DatasetDefinition } from "../datasets/types"
|
|
2
|
+
import { lineageColumn } from "../lake-storage/lineage"
|
|
3
|
+
import type { DatasetColumnLineage, DatasetColumnRef } from "../lake-storage/types"
|
|
4
|
+
import { runStepLineage, stepReadColumns } from "../pipelines/lineage"
|
|
5
|
+
import type { PipelineDefinition, PipelineStepDefinition } from "../pipelines/types"
|
|
6
|
+
|
|
7
|
+
/** A step of a registered pipeline. A step reused by two pipelines is two registered steps. */
|
|
8
|
+
export interface RegisteredStep {
|
|
9
|
+
readonly pipelineId: string
|
|
10
|
+
readonly step: PipelineStepDefinition
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
/** The column that declares a marking, and the steps it went through to reach a column. */
|
|
14
|
+
export interface MarkingOrigin {
|
|
15
|
+
readonly column: DatasetColumnRef
|
|
16
|
+
/** `pipeline/step`, upstream first. Empty when the column declares the marking itself. */
|
|
17
|
+
readonly steps: readonly string[]
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
/** Each marking a column carries, with one path it arrived by. */
|
|
21
|
+
export type ColumnMarkingOrigins = ReadonlyMap<string, MarkingOrigin>
|
|
22
|
+
|
|
23
|
+
/** Markings of every column of every registered dataset, derived from the definitions. */
|
|
24
|
+
export interface DatasetMarkings {
|
|
25
|
+
/** Empty for a column without markings or that is not registered. */
|
|
26
|
+
of(column: DatasetColumnRef): ColumnMarkingOrigins
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
export function registeredSteps(
|
|
30
|
+
pipelines: readonly PipelineDefinition[]
|
|
31
|
+
): readonly RegisteredStep[] {
|
|
32
|
+
return pipelines.flatMap((pipeline) =>
|
|
33
|
+
pipeline.graph.nodes.map(({ step }) => ({ pipelineId: pipeline.id, step }))
|
|
34
|
+
)
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
/** Lineage of each `run` step, built once per step object; undefined for other steps. */
|
|
38
|
+
export function runStepLineages(
|
|
39
|
+
datasetsById: ReadonlyMap<string, DatasetDefinition>
|
|
40
|
+
): (entry: RegisteredStep) => DatasetColumnLineage | undefined {
|
|
41
|
+
const lineages = new Map<PipelineStepDefinition, DatasetColumnLineage>()
|
|
42
|
+
|
|
43
|
+
return ({ step }) => {
|
|
44
|
+
if (step.executor.kind !== "run") return undefined
|
|
45
|
+
|
|
46
|
+
let lineage = lineages.get(step)
|
|
47
|
+
if (!lineage) {
|
|
48
|
+
lineage = runStepLineage(step, datasetsById)
|
|
49
|
+
lineages.set(step, lineage)
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
return lineage
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
export function stepLabel(entry: RegisteredStep): string {
|
|
57
|
+
return `${entry.pipelineId}/${entry.step.id}`
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
type MutableOrigins = Map<string, MarkingOrigin>
|
|
61
|
+
|
|
62
|
+
const NO_MARKINGS: ColumnMarkingOrigins = new Map()
|
|
63
|
+
|
|
64
|
+
interface KnownLineage {
|
|
65
|
+
readonly lineage: DatasetColumnLineage
|
|
66
|
+
/** What a column the lineage does not list depends on. */
|
|
67
|
+
readonly reads: readonly DatasetColumnRef[]
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
/**
|
|
71
|
+
* Markings each column carries according to the registered definitions: the ones it declares, and
|
|
72
|
+
* the ones each step derives from the columns it depends on, once that step's lineage is known.
|
|
73
|
+
*
|
|
74
|
+
* What decided the rows of a step's inputs decides the rows of its output, whether or not the step
|
|
75
|
+
* reads a column of that input: `SELECT count(*) FROM rich` reveals which rows `rich` holds. So
|
|
76
|
+
* each dataset also keeps the markings of its row dependencies, and every output column of a step
|
|
77
|
+
* carries those of every input it reads, as the lineage each version records does.
|
|
78
|
+
*
|
|
79
|
+
* A step may read its own output and a dataset may have several producers, so a step whose output
|
|
80
|
+
* gains a marking queues the steps that read that output, until nothing changes. Lineage can be
|
|
81
|
+
* added in rounds: each round only revisits what the new lineage reaches.
|
|
82
|
+
*/
|
|
83
|
+
export class MarkingPropagation implements DatasetMarkings {
|
|
84
|
+
private readonly datasetsById: ReadonlyMap<string, DatasetDefinition>
|
|
85
|
+
/** Marked columns only, by dataset, built when a dataset is first looked at. */
|
|
86
|
+
private readonly markings = new Map<string, Map<string, MutableOrigins>>()
|
|
87
|
+
/** Markings of what decides each dataset's rows, for datasets a step writes. */
|
|
88
|
+
private readonly rowMarkings = new Map<string, MutableOrigins>()
|
|
89
|
+
private readonly ordered: readonly RegisteredStep[]
|
|
90
|
+
private readonly readers = new Map<string, RegisteredStep[]>()
|
|
91
|
+
private readonly known = new Map<RegisteredStep, KnownLineage>()
|
|
92
|
+
private readonly queue = new Set<RegisteredStep>()
|
|
93
|
+
|
|
94
|
+
constructor(
|
|
95
|
+
datasetsById: ReadonlyMap<string, DatasetDefinition>,
|
|
96
|
+
steps: readonly RegisteredStep[]
|
|
97
|
+
) {
|
|
98
|
+
this.datasetsById = datasetsById
|
|
99
|
+
this.ordered = inDependencyOrder(steps)
|
|
100
|
+
|
|
101
|
+
for (const entry of steps) {
|
|
102
|
+
for (const input of new Set(Object.values(entry.step.inputs).map((dataset) => dataset.id))) {
|
|
103
|
+
appendTo(this.readers, input, entry)
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
of(ref: DatasetColumnRef): ColumnMarkingOrigins {
|
|
109
|
+
return this.markedColumns(ref.datasetId).get(ref.column) ?? NO_MARKINGS
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
/**
|
|
113
|
+
* Derive markings through every step `lineageOf` knows the lineage of. A step it returns null
|
|
114
|
+
* for derives nothing until a later call knows it.
|
|
115
|
+
*/
|
|
116
|
+
derive(lineageOf: (entry: RegisteredStep) => DatasetColumnLineage | null): this {
|
|
117
|
+
for (const entry of this.ordered) {
|
|
118
|
+
if (this.known.has(entry)) continue
|
|
119
|
+
|
|
120
|
+
const lineage = lineageOf(entry)
|
|
121
|
+
if (!lineage) continue
|
|
122
|
+
|
|
123
|
+
this.known.set(entry, { lineage, reads: stepReadColumns(entry.step) })
|
|
124
|
+
this.queue.add(entry)
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
for (const entry of this.queue) {
|
|
128
|
+
this.queue.delete(entry)
|
|
129
|
+
const known = this.known.get(entry)
|
|
130
|
+
if (!known || !this.apply(entry, known)) continue
|
|
131
|
+
|
|
132
|
+
// Entries added while iterating a Set are visited, so the queue drains in this loop.
|
|
133
|
+
for (const reader of this.readers.get(entry.step.output.id) ?? []) {
|
|
134
|
+
if (this.known.has(reader)) this.queue.add(reader)
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
return this
|
|
139
|
+
}
|
|
140
|
+
|
|
141
|
+
/** Whether the output's rows or any output column gained a marking. */
|
|
142
|
+
private apply(entry: RegisteredStep, { lineage, reads }: KnownLineage): boolean {
|
|
143
|
+
const label = stepLabel(entry)
|
|
144
|
+
const rows = this.union(lineage.rows)
|
|
145
|
+
|
|
146
|
+
for (const input of new Set(Object.values(entry.step.inputs).map((dataset) => dataset.id))) {
|
|
147
|
+
for (const [markingId, origin] of this.rowMarkings.get(input) ?? []) {
|
|
148
|
+
if (!rows.has(markingId)) rows.set(markingId, origin)
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
|
|
152
|
+
let everyRead: ReadonlyMap<string, MarkingOrigin> | undefined
|
|
153
|
+
let changed = false
|
|
154
|
+
|
|
155
|
+
const outputId = entry.step.output.id
|
|
156
|
+
let outputRows = this.rowMarkings.get(outputId)
|
|
157
|
+
|
|
158
|
+
for (const [markingId, origin] of rows) {
|
|
159
|
+
if (outputRows?.has(markingId)) continue
|
|
160
|
+
if (!outputRows) {
|
|
161
|
+
outputRows = new Map()
|
|
162
|
+
this.rowMarkings.set(outputId, outputRows)
|
|
163
|
+
}
|
|
164
|
+
|
|
165
|
+
outputRows.set(markingId, { column: origin.column, steps: [...origin.steps, label] })
|
|
166
|
+
changed = true
|
|
167
|
+
}
|
|
168
|
+
|
|
169
|
+
const marked = this.markedColumns(outputId)
|
|
170
|
+
for (const { name: column } of this.datasetsById.get(outputId)?.schema.columns ?? []) {
|
|
171
|
+
const values = lineageColumn(lineage, column)
|
|
172
|
+
const valueSource = values ? this.union(values) : (everyRead ?? this.union(reads))
|
|
173
|
+
if (!values) everyRead = valueSource
|
|
174
|
+
|
|
175
|
+
for (const source of [rows, valueSource]) {
|
|
176
|
+
for (const [markingId, origin] of source) {
|
|
177
|
+
let origins = marked.get(column)
|
|
178
|
+
if (origins?.has(markingId)) continue
|
|
179
|
+
if (!origins) {
|
|
180
|
+
origins = new Map()
|
|
181
|
+
marked.set(column, origins)
|
|
182
|
+
}
|
|
183
|
+
|
|
184
|
+
origins.set(markingId, { column: origin.column, steps: [...origin.steps, label] })
|
|
185
|
+
changed = true
|
|
186
|
+
}
|
|
187
|
+
}
|
|
188
|
+
}
|
|
189
|
+
|
|
190
|
+
return changed
|
|
191
|
+
}
|
|
192
|
+
|
|
193
|
+
private markedColumns(datasetId: string): Map<string, MutableOrigins> {
|
|
194
|
+
let columns = this.markings.get(datasetId)
|
|
195
|
+
if (!columns) {
|
|
196
|
+
columns = new Map()
|
|
197
|
+
for (const column of this.datasetsById.get(datasetId)?.schema.columns ?? []) {
|
|
198
|
+
if (!column.markings?.length) continue
|
|
199
|
+
|
|
200
|
+
const origin = { column: { datasetId, column: column.name }, steps: [] }
|
|
201
|
+
columns.set(column.name, new Map(column.markings.map((id) => [id, origin])))
|
|
202
|
+
}
|
|
203
|
+
|
|
204
|
+
this.markings.set(datasetId, columns)
|
|
205
|
+
}
|
|
206
|
+
|
|
207
|
+
return columns
|
|
208
|
+
}
|
|
209
|
+
|
|
210
|
+
/** Every marking of these columns, each with the first origin found. */
|
|
211
|
+
private union(columns: readonly DatasetColumnRef[]): MutableOrigins {
|
|
212
|
+
const union: MutableOrigins = new Map()
|
|
213
|
+
for (const column of columns) {
|
|
214
|
+
for (const [markingId, origin] of this.of(column)) {
|
|
215
|
+
if (!union.has(markingId)) union.set(markingId, origin)
|
|
216
|
+
}
|
|
217
|
+
}
|
|
218
|
+
return union
|
|
219
|
+
}
|
|
220
|
+
}
|
|
221
|
+
|
|
222
|
+
/** Producers before consumers, so most markings arrive by their shortest path. */
|
|
223
|
+
function inDependencyOrder(steps: readonly RegisteredStep[]): readonly RegisteredStep[] {
|
|
224
|
+
const producers = producersByDataset(steps)
|
|
225
|
+
const ordered: RegisteredStep[] = []
|
|
226
|
+
const visited = new Set<RegisteredStep>()
|
|
227
|
+
|
|
228
|
+
const visit = (entry: RegisteredStep): void => {
|
|
229
|
+
if (visited.has(entry)) return
|
|
230
|
+
|
|
231
|
+
visited.add(entry)
|
|
232
|
+
for (const input of Object.values(entry.step.inputs)) {
|
|
233
|
+
for (const producer of producers.get(input.id) ?? []) visit(producer)
|
|
234
|
+
}
|
|
235
|
+
|
|
236
|
+
ordered.push(entry)
|
|
237
|
+
}
|
|
238
|
+
|
|
239
|
+
for (const entry of steps) visit(entry)
|
|
240
|
+
return ordered
|
|
241
|
+
}
|
|
242
|
+
|
|
243
|
+
function producersByDataset(
|
|
244
|
+
steps: readonly RegisteredStep[]
|
|
245
|
+
): ReadonlyMap<string, readonly RegisteredStep[]> {
|
|
246
|
+
const producers = new Map<string, RegisteredStep[]>()
|
|
247
|
+
for (const entry of steps) appendTo(producers, entry.step.output.id, entry)
|
|
248
|
+
return producers
|
|
249
|
+
}
|
|
250
|
+
|
|
251
|
+
function appendTo<TValue>(map: Map<string, TValue[]>, key: string, value: TValue): void {
|
|
252
|
+
const values = map.get(key)
|
|
253
|
+
if (values) values.push(value)
|
|
254
|
+
else map.set(key, [value])
|
|
255
|
+
}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shared, immutable sets of marking ids.
|
|
3
|
+
*
|
|
4
|
+
* Every column of every resolved version holds one of a handful of distinct sets, so each distinct
|
|
5
|
+
* set is created once and compared by identity.
|
|
6
|
+
*/
|
|
7
|
+
export class MarkingSets {
|
|
8
|
+
readonly empty: ReadonlySet<string> = new Set()
|
|
9
|
+
private readonly sets = new Map<string, ReadonlySet<string>>([["", this.empty]])
|
|
10
|
+
|
|
11
|
+
of(markingIds: Iterable<string> | undefined): ReadonlySet<string> {
|
|
12
|
+
// Most columns carry no marking.
|
|
13
|
+
if (markingIds === undefined || (Array.isArray(markingIds) && markingIds.length === 0)) {
|
|
14
|
+
return this.empty
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
const sorted = [...new Set(markingIds)].sort()
|
|
18
|
+
const key = sorted.join("\u0000")
|
|
19
|
+
|
|
20
|
+
let set = this.sets.get(key)
|
|
21
|
+
if (!set) {
|
|
22
|
+
set = new Set(sorted)
|
|
23
|
+
this.sets.set(key, set)
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
return set
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
/** The union of sets this instance created. */
|
|
30
|
+
union(sets: Iterable<ReadonlySet<string> | undefined>): ReadonlySet<string> {
|
|
31
|
+
let single: ReadonlySet<string> | undefined
|
|
32
|
+
const ids: string[] = []
|
|
33
|
+
|
|
34
|
+
for (const set of sets) {
|
|
35
|
+
if (!set || set.size === 0) continue
|
|
36
|
+
single = single === undefined && ids.length === 0 ? set : undefined
|
|
37
|
+
ids.push(...set)
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
return single ?? this.of(ids)
|
|
41
|
+
}
|
|
42
|
+
}
|