@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
|
@@ -1,19 +1,12 @@
|
|
|
1
1
|
import { assertNever } from "../assert-never"
|
|
2
|
-
import { assertAuthorized, isAllowed } from "../authorization"
|
|
3
|
-
import { AuthorizationError } from "../authorization/errors"
|
|
4
|
-
import type { AuthorizationContext } from "../authorization/types"
|
|
5
2
|
import type { EmbeddingModelCatalog, RerankingModelCatalog } from "../models/catalog"
|
|
3
|
+
import type { AuthorizedOntologyView } from "../objects/authorized-ontology-view"
|
|
6
4
|
import {
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
createAuthorizedOntologyView,
|
|
10
|
-
} from "../objects/authorized-ontology-view"
|
|
11
|
-
import {
|
|
12
|
-
createClearanceQueryAdmission,
|
|
13
|
-
type PropertyClearance,
|
|
5
|
+
attachRedactions,
|
|
6
|
+
omitHiddenProperties,
|
|
14
7
|
redactObjectRow,
|
|
15
|
-
|
|
16
|
-
} from "../objects/property-clearance"
|
|
8
|
+
} from "../objects/clearance-redaction"
|
|
9
|
+
import { unreadableError } from "../objects/property-clearance"
|
|
17
10
|
import {
|
|
18
11
|
countObjects,
|
|
19
12
|
type ExecuteObjectCountInput,
|
|
@@ -31,14 +24,12 @@ import {
|
|
|
31
24
|
existsObjects,
|
|
32
25
|
facetObjects,
|
|
33
26
|
} from "../objects/query"
|
|
27
|
+
import { createClearanceQueryAdmission } from "../objects/query/clearance-admission"
|
|
34
28
|
import { ObjectQueryValidationError } from "../objects/query/errors"
|
|
35
29
|
import { validateObjectFacetRequests } from "../objects/query/executor"
|
|
36
30
|
import type { ObjectQuery } from "../objects/query/ir"
|
|
31
|
+
import { assertLinkQueryReadable } from "../objects/query/link-query-clearance"
|
|
37
32
|
import { preflightObjectQueryLinks } from "../objects/query/links"
|
|
38
|
-
import {
|
|
39
|
-
createSelectedObjectQueryAdmission,
|
|
40
|
-
type SelectedObjectQueryAdmission,
|
|
41
|
-
} from "../objects/query/selected-read-admission"
|
|
42
33
|
import {
|
|
43
34
|
type AdmittedObjectQuery,
|
|
44
35
|
composeObjectQueryAdmissions,
|
|
@@ -52,8 +43,8 @@ import {
|
|
|
52
43
|
type TelemetryHistoryReadWorkloadInput,
|
|
53
44
|
} from "../objects/telemetry/workload"
|
|
54
45
|
import type { OntologyRegistry } from "../ontology"
|
|
46
|
+
import type { AppliedMarkings } from "../security/applied-markings"
|
|
55
47
|
import type {
|
|
56
|
-
CompiledObjectReadStep,
|
|
57
48
|
LinkBatchKey,
|
|
58
49
|
ObjectFacetRequest,
|
|
59
50
|
ObjectLinkRow,
|
|
@@ -63,15 +54,11 @@ import type {
|
|
|
63
54
|
} from "../storage"
|
|
64
55
|
import { assertObjectReadOutputWithinLimit, MAX_OBJECT_READ_FACETS } from "../storage"
|
|
65
56
|
import { captureExecutionScope, resolveExecutionScopeAuthorization } from "./authorization"
|
|
66
|
-
import type {
|
|
67
|
-
|
|
68
|
-
type
|
|
69
|
-
|
|
70
|
-
readonly runtimeAuthorization: RuntimeAuthorization
|
|
71
|
-
readonly authorization?: AuthorizationContext
|
|
72
|
-
}
|
|
57
|
+
import type { Clearance, EventSources } from "./object-reader-clearance"
|
|
58
|
+
import { ObjectReaderOntology } from "./object-reader-ontology"
|
|
59
|
+
import { ObjectReaderSecurity, type ResolvedExecutionAuthority } from "./object-reader-security"
|
|
60
|
+
import type { ExecutionScope } from "./types"
|
|
73
61
|
|
|
74
|
-
type ResolvedExecutionAuthority = ReturnType<typeof resolveExecutionScopeAuthorization>
|
|
75
62
|
type GetObjectInput = Omit<Parameters<ObjectReadStorage["getByPrimaryId"]>[0], "projectId">
|
|
76
63
|
type GetObjectsInput = Omit<Parameters<ObjectReadStorage["getByPrimaryIdBatch"]>[0], "projectId">
|
|
77
64
|
type SelectObjectPropertiesInput = Parameters<ObjectReadStorage["selectsObjectProperties"]>[0]
|
|
@@ -81,6 +68,12 @@ type ListObjectsInput = Omit<Parameters<ObjectReadStorage["list"]>[0], "projectI
|
|
|
81
68
|
type ListLinksInput = Omit<Parameters<ObjectReadStorage["listLinks"]>[0], "projectId">
|
|
82
69
|
type ListLinksBatchInput = Omit<Parameters<ObjectReadStorage["listLinksBatch"]>[0], "projectId">
|
|
83
70
|
|
|
71
|
+
/** The model catalogs semantic and reranked search use. */
|
|
72
|
+
interface ObjectReaderModels {
|
|
73
|
+
readonly embedding?: EmbeddingModelCatalog
|
|
74
|
+
readonly reranking?: RerankingModelCatalog
|
|
75
|
+
}
|
|
76
|
+
|
|
84
77
|
const readerConstructionKey = Object.freeze({})
|
|
85
78
|
|
|
86
79
|
/**
|
|
@@ -89,91 +82,65 @@ const readerConstructionKey = Object.freeze({})
|
|
|
89
82
|
* The implementation class is intentionally private to this module. Its private fields make the
|
|
90
83
|
* exported instance type nominal, while the construction key prevents code that discovers the
|
|
91
84
|
* JavaScript constructor through an instance from manufacturing another reader.
|
|
85
|
+
*
|
|
86
|
+
* Its state is grouped as a project is: the ontology it resolves against, the security of the
|
|
87
|
+
* authority (its delegation and clearance included), the model catalogs search uses, and the
|
|
88
|
+
* storage it reads. Each group decides what belongs to it; the reader composes them.
|
|
92
89
|
*/
|
|
93
90
|
class AuthorizedObjectReaderImpl {
|
|
94
|
-
readonly #
|
|
95
|
-
readonly #
|
|
96
|
-
readonly #
|
|
97
|
-
readonly #ontology: OntologyRegistry
|
|
98
|
-
readonly #embeddingModels?: EmbeddingModelCatalog
|
|
99
|
-
readonly #rerankingModels?: RerankingModelCatalog
|
|
100
|
-
#ontologyView?: AuthorizedOntologyView
|
|
91
|
+
readonly #ontology: ObjectReaderOntology
|
|
92
|
+
readonly #security: ObjectReaderSecurity
|
|
93
|
+
readonly #models: ObjectReaderModels
|
|
101
94
|
readonly #storage: ObjectReadStorage
|
|
102
|
-
readonly #delegatedObjectTypeIds?: ReadonlySet<string>
|
|
103
|
-
readonly #delegatedLinkDefinitions?: ReadonlySet<string>
|
|
104
|
-
readonly #delegatedQueryAdmission?: SelectedObjectQueryAdmission
|
|
105
|
-
/** Marked properties this authority cannot read; absent when it reads every property. */
|
|
106
|
-
readonly #clearance?: PropertyClearance
|
|
107
95
|
|
|
108
96
|
constructor(
|
|
109
97
|
key: typeof readerConstructionKey,
|
|
110
98
|
input: {
|
|
111
|
-
readonly
|
|
112
|
-
readonly
|
|
113
|
-
readonly
|
|
114
|
-
readonly rerankingModels?: RerankingModelCatalog
|
|
99
|
+
readonly ontology: ObjectReaderOntology
|
|
100
|
+
readonly security: ObjectReaderSecurity
|
|
101
|
+
readonly models: ObjectReaderModels
|
|
115
102
|
readonly storage: ObjectReadStorage
|
|
116
|
-
readonly authority: ResolvedExecutionAuthority
|
|
117
103
|
}
|
|
118
104
|
) {
|
|
119
105
|
if (key !== readerConstructionKey) {
|
|
120
106
|
throw new Error("[Sixb] AuthorizedObjectReader can only be created by Core.")
|
|
121
107
|
}
|
|
122
|
-
|
|
123
|
-
this.#authorization = input.scope.authorization
|
|
124
|
-
this.#authority = input.authority
|
|
125
108
|
this.#ontology = input.ontology
|
|
126
|
-
this.#
|
|
127
|
-
this.#
|
|
109
|
+
this.#security = input.security
|
|
110
|
+
this.#models = input.models
|
|
128
111
|
this.#storage = input.storage
|
|
129
|
-
this.#delegatedObjectTypeIds =
|
|
130
|
-
input.authority.type === "delegated"
|
|
131
|
-
? new Set(input.authority.objectRead.scope.objects.map((object) => object.objectTypeId))
|
|
132
|
-
: undefined
|
|
133
|
-
this.#delegatedLinkDefinitions =
|
|
134
|
-
input.authority.type === "delegated"
|
|
135
|
-
? new Set(input.authority.objectRead.scope.steps.map(delegatedLinkDefinitionKey))
|
|
136
|
-
: undefined
|
|
137
|
-
this.#delegatedQueryAdmission =
|
|
138
|
-
input.authority.type === "delegated"
|
|
139
|
-
? createSelectedObjectQueryAdmission(input.authority.objectRead.scope)
|
|
140
|
-
: undefined
|
|
141
|
-
this.#clearance = clearanceForAuthority(input.authority, input.ontology)
|
|
142
|
-
this.#runtime = Object.freeze({
|
|
143
|
-
projectId: input.scope.execution.projectId,
|
|
144
|
-
runtimeAuthorization: input.scope.authorization,
|
|
145
|
-
...(input.authority.type === "principal" ? { authorization: input.authority.context } : {}),
|
|
146
|
-
})
|
|
147
112
|
}
|
|
148
113
|
|
|
149
114
|
static assertBound(reader: AuthorizedObjectReaderImpl, scope: ExecutionScope): void {
|
|
150
115
|
const capturedScope = captureExecutionScope(scope)
|
|
151
|
-
resolveExecutionScopeAuthorization(reader.#runtime.projectId, capturedScope)
|
|
152
|
-
if (capturedScope.authorization !== reader.#authorization) {
|
|
116
|
+
resolveExecutionScopeAuthorization(reader.#security.runtime.projectId, capturedScope)
|
|
117
|
+
if (capturedScope.authorization !== reader.#security.authorization) {
|
|
153
118
|
throw new Error(
|
|
154
119
|
"[Sixb] AuthorizedObjectReader is not bound to this exact execution authority."
|
|
155
120
|
)
|
|
156
121
|
}
|
|
157
122
|
}
|
|
158
123
|
|
|
124
|
+
/** What the reader cannot read now, for surfaces such as events that redact on their own. */
|
|
125
|
+
static async clearance(reader: AuthorizedObjectReaderImpl): Promise<Clearance> {
|
|
126
|
+
return reader.#security.clearance.current()
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
/** What the reader cannot read in an object event. */
|
|
130
|
+
static eventClearance(
|
|
131
|
+
reader: AuthorizedObjectReaderImpl,
|
|
132
|
+
sources: EventSources
|
|
133
|
+
): Clearance | Promise<Clearance> {
|
|
134
|
+
return reader.#security.clearance.forEvent(sources)
|
|
135
|
+
}
|
|
136
|
+
|
|
159
137
|
static ontologyView(reader: AuthorizedObjectReaderImpl): AuthorizedOntologyView {
|
|
160
|
-
|
|
161
|
-
reader.#ontologyView ??= createAuthorizedOntologyView({
|
|
162
|
-
ontology: reader.#ontology,
|
|
163
|
-
selection: ontologySelectionForAuthority(authority, reader.#ontology),
|
|
164
|
-
...(authority.type === "delegated"
|
|
165
|
-
? {
|
|
166
|
-
assertOutputWithinLimit: (value: unknown) =>
|
|
167
|
-
assertObjectReadOutputWithinLimit(value, authority.objectRead.limits),
|
|
168
|
-
}
|
|
169
|
-
: {}),
|
|
170
|
-
})
|
|
171
|
-
return reader.#ontologyView
|
|
138
|
+
return reader.#ontology.view()
|
|
172
139
|
}
|
|
173
140
|
|
|
174
141
|
/** Project identity carried by this nominal reader capability. */
|
|
175
142
|
get projectId(): string {
|
|
176
|
-
return this.#runtime.projectId
|
|
143
|
+
return this.#security.runtime.projectId
|
|
177
144
|
}
|
|
178
145
|
|
|
179
146
|
async getByPrimaryId(input: GetObjectInput): ReturnType<ObjectReadStorage["getByPrimaryId"]> {
|
|
@@ -181,12 +148,17 @@ class AuthorizedObjectReaderImpl {
|
|
|
181
148
|
objectTypeId: input.objectTypeId,
|
|
182
149
|
primaryId: input.primaryId,
|
|
183
150
|
})
|
|
184
|
-
this.#
|
|
151
|
+
const clearance = await this.#security.clearance.current()
|
|
152
|
+
this.#security.assertObjectTypesViewable([request.objectTypeId], clearance)
|
|
185
153
|
const row = await this.#storage.getByPrimaryId({
|
|
186
154
|
...request,
|
|
187
|
-
projectId: this.#runtime.projectId,
|
|
155
|
+
projectId: this.#security.runtime.projectId,
|
|
188
156
|
})
|
|
189
|
-
return
|
|
157
|
+
return this.#detachRows(
|
|
158
|
+
row && this.#omitHidden(row, clearance),
|
|
159
|
+
(detached) => [detached],
|
|
160
|
+
clearance
|
|
161
|
+
)
|
|
190
162
|
}
|
|
191
163
|
|
|
192
164
|
async getByPrimaryIdBatch(
|
|
@@ -198,13 +170,19 @@ class AuthorizedObjectReaderImpl {
|
|
|
198
170
|
primaryId: item.primaryId,
|
|
199
171
|
})),
|
|
200
172
|
})
|
|
201
|
-
this.#
|
|
173
|
+
const clearance = await this.#security.clearance.current()
|
|
174
|
+
this.#security.assertObjectTypesViewable(
|
|
175
|
+
request.items.map((item) => item.objectTypeId),
|
|
176
|
+
clearance
|
|
177
|
+
)
|
|
202
178
|
const rows = await this.#storage.getByPrimaryIdBatch({
|
|
203
179
|
...request,
|
|
204
|
-
projectId: this.#runtime.projectId,
|
|
180
|
+
projectId: this.#security.runtime.projectId,
|
|
205
181
|
})
|
|
206
|
-
return
|
|
207
|
-
new Map([...rows].map(([key, row]) => [key, this.#
|
|
182
|
+
return this.#detachRows(
|
|
183
|
+
new Map([...rows].map(([key, row]) => [key, this.#omitHidden(row, clearance)] as const)),
|
|
184
|
+
(detached) => detached.values(),
|
|
185
|
+
clearance
|
|
208
186
|
)
|
|
209
187
|
}
|
|
210
188
|
|
|
@@ -214,11 +192,13 @@ class AuthorizedObjectReaderImpl {
|
|
|
214
192
|
primaryId: input.primaryId,
|
|
215
193
|
propertyId: input.propertyId,
|
|
216
194
|
})
|
|
217
|
-
this.#
|
|
218
|
-
|
|
219
|
-
|
|
195
|
+
const clearance = await this.#security.clearance.current()
|
|
196
|
+
this.#security.assertObjectTypesViewable([request.objectTypeId], clearance)
|
|
197
|
+
|
|
198
|
+
if (hidesProperty(request, clearance)) return false
|
|
199
|
+
if (this.#security.authority.type !== "delegated") return true
|
|
220
200
|
const [readable] = await this.#storage.selectsObjectProperties({
|
|
221
|
-
projectId: this.#runtime.projectId,
|
|
201
|
+
projectId: this.#security.runtime.projectId,
|
|
222
202
|
items: [request],
|
|
223
203
|
})
|
|
224
204
|
return readable ?? false
|
|
@@ -234,16 +214,20 @@ class AuthorizedObjectReaderImpl {
|
|
|
234
214
|
propertyId: item.propertyId,
|
|
235
215
|
})),
|
|
236
216
|
})
|
|
237
|
-
this.#
|
|
217
|
+
const clearance = await this.#security.clearance.current()
|
|
218
|
+
this.#security.assertObjectTypesViewable(
|
|
219
|
+
request.items.map((item) => item.objectTypeId),
|
|
220
|
+
clearance
|
|
221
|
+
)
|
|
238
222
|
const selected =
|
|
239
|
-
this.#authority.type === "delegated"
|
|
223
|
+
this.#security.authority.type === "delegated"
|
|
240
224
|
? await this.#storage.selectsObjectProperties({
|
|
241
225
|
...request,
|
|
242
|
-
projectId: this.#runtime.projectId,
|
|
226
|
+
projectId: this.#security.runtime.projectId,
|
|
243
227
|
})
|
|
244
228
|
: request.items.map(() => true)
|
|
245
229
|
return request.items.map(
|
|
246
|
-
(item, index) => !
|
|
230
|
+
(item, index) => !hidesProperty(item, clearance) && selected[index] === true
|
|
247
231
|
)
|
|
248
232
|
}
|
|
249
233
|
|
|
@@ -266,7 +250,8 @@ class AuthorizedObjectReaderImpl {
|
|
|
266
250
|
orderBy: input.orderBy,
|
|
267
251
|
order: input.order,
|
|
268
252
|
})
|
|
269
|
-
const
|
|
253
|
+
const clearance = await this.#security.clearance.current()
|
|
254
|
+
const objectTypeId = this.#resolveListObjectTypes(request.objectTypeId, clearance)
|
|
270
255
|
|
|
271
256
|
// An empty type selection means "none", never "all". Short-circuiting here prevents a
|
|
272
257
|
// provider with different empty-array semantics from turning a principal read into a broad one.
|
|
@@ -277,9 +262,13 @@ class AuthorizedObjectReaderImpl {
|
|
|
277
262
|
const page = await this.#storage.list({
|
|
278
263
|
...request,
|
|
279
264
|
...(objectTypeId === undefined ? {} : { objectTypeId }),
|
|
280
|
-
projectId: this.#runtime.projectId,
|
|
265
|
+
projectId: this.#security.runtime.projectId,
|
|
281
266
|
})
|
|
282
|
-
return
|
|
267
|
+
return this.#detachRows(
|
|
268
|
+
{ ...page, objects: page.objects.map((row) => this.#omitHidden(row, clearance)) },
|
|
269
|
+
(detached) => detached.objects,
|
|
270
|
+
clearance
|
|
271
|
+
)
|
|
283
272
|
}
|
|
284
273
|
|
|
285
274
|
async listLinks(input: ListLinksInput): ReturnType<ObjectReadStorage["listLinks"]> {
|
|
@@ -289,14 +278,15 @@ class AuthorizedObjectReaderImpl {
|
|
|
289
278
|
linkId: input.linkId,
|
|
290
279
|
direction: input.direction,
|
|
291
280
|
})
|
|
292
|
-
this.#
|
|
281
|
+
const clearance = await this.#security.clearance.current()
|
|
282
|
+
this.#security.assertObjectTypesViewable([request.objectTypeId], clearance)
|
|
293
283
|
const links = detachReadResult(
|
|
294
284
|
await this.#storage.listLinks({
|
|
295
285
|
...request,
|
|
296
|
-
projectId: this.#runtime.projectId,
|
|
286
|
+
projectId: this.#security.runtime.projectId,
|
|
297
287
|
})
|
|
298
288
|
)
|
|
299
|
-
return links.filter((link) => this.#isLinkViewable(link))
|
|
289
|
+
return links.filter((link) => this.#security.isLinkViewable(link, clearance))
|
|
300
290
|
}
|
|
301
291
|
|
|
302
292
|
async listLinksBatch(
|
|
@@ -310,18 +300,22 @@ class AuthorizedObjectReaderImpl {
|
|
|
310
300
|
linkId: item.linkId,
|
|
311
301
|
})),
|
|
312
302
|
})
|
|
313
|
-
this.#
|
|
303
|
+
const clearance = await this.#security.clearance.current()
|
|
304
|
+
this.#security.assertObjectTypesViewable(
|
|
305
|
+
request.items.map((item) => item.objectTypeId),
|
|
306
|
+
clearance
|
|
307
|
+
)
|
|
314
308
|
const pages = detachReadResult(
|
|
315
309
|
await this.#storage.listLinksBatch({
|
|
316
310
|
...request,
|
|
317
|
-
projectId: this.#runtime.projectId,
|
|
311
|
+
projectId: this.#security.runtime.projectId,
|
|
318
312
|
})
|
|
319
313
|
)
|
|
320
314
|
const filtered = new Map<LinkBatchKey, ObjectLinkRow[]>()
|
|
321
315
|
for (const [key, links] of pages) {
|
|
322
316
|
filtered.set(
|
|
323
317
|
key,
|
|
324
|
-
links.filter((link) => this.#isLinkViewable(link))
|
|
318
|
+
links.filter((link) => this.#security.isLinkViewable(link, clearance))
|
|
325
319
|
)
|
|
326
320
|
}
|
|
327
321
|
return filtered
|
|
@@ -333,16 +327,21 @@ class AuthorizedObjectReaderImpl {
|
|
|
333
327
|
const query = snapshotAuthoredQuery(input.query)
|
|
334
328
|
const includeTotal = snapshotReadValue(input.includeTotal)
|
|
335
329
|
const executionQuery = this.#admitDelegatedQuery(query)?.query ?? query
|
|
330
|
+
const clearance = await this.#security.clearance.current()
|
|
336
331
|
const result = await executeObjectQuery(
|
|
337
332
|
{
|
|
338
333
|
query: executionQuery,
|
|
339
334
|
...(includeTotal === undefined ? {} : { includeTotal }),
|
|
340
|
-
projectId: this.#runtime.projectId,
|
|
335
|
+
projectId: this.#security.runtime.projectId,
|
|
341
336
|
signal: input.signal,
|
|
342
337
|
},
|
|
343
|
-
this.#queryExecutorOptions()
|
|
338
|
+
this.#queryExecutorOptions(clearance)
|
|
339
|
+
)
|
|
340
|
+
return this.#detachRows(
|
|
341
|
+
{ ...result, objects: result.objects.map((row) => this.#omitHidden(row, clearance)) },
|
|
342
|
+
(detached) => detached.objects,
|
|
343
|
+
clearance
|
|
344
344
|
)
|
|
345
|
-
return detachReadResult({ ...result, objects: result.objects.map((row) => this.#redact(row)) })
|
|
346
345
|
}
|
|
347
346
|
|
|
348
347
|
async queryLinks(
|
|
@@ -357,15 +356,15 @@ class AuthorizedObjectReaderImpl {
|
|
|
357
356
|
pageToken: input.pageToken,
|
|
358
357
|
})
|
|
359
358
|
let executionQuery = query
|
|
360
|
-
const admission = this.#
|
|
359
|
+
const admission = this.#security.delegation?.queryAdmission
|
|
361
360
|
if (admission) {
|
|
362
361
|
const preflight = preflightObjectQueryLinks(
|
|
363
|
-
{ query, ...request, projectId: this.#runtime.projectId },
|
|
364
|
-
{ ontology: this.#ontology }
|
|
362
|
+
{ query, ...request, projectId: this.#security.runtime.projectId },
|
|
363
|
+
{ ontology: this.#ontology.registry }
|
|
365
364
|
)
|
|
366
365
|
const admitted = validateObjectQueryWithAdmission(
|
|
367
366
|
preflight.validated.query,
|
|
368
|
-
{ ontology: this.#ontology, normalize: false },
|
|
367
|
+
{ ontology: this.#ontology.registry, normalize: false },
|
|
369
368
|
admission
|
|
370
369
|
)
|
|
371
370
|
admission.assertIncidentEdgeSelected({
|
|
@@ -376,10 +375,23 @@ class AuthorizedObjectReaderImpl {
|
|
|
376
375
|
})
|
|
377
376
|
executionQuery = admitted.query
|
|
378
377
|
}
|
|
378
|
+
|
|
379
|
+
const clearance = await this.#security.clearance.current()
|
|
380
|
+
if (clearance) {
|
|
381
|
+
assertLinkQueryReadable({
|
|
382
|
+
ontology: this.#ontology.registry,
|
|
383
|
+
clearance,
|
|
384
|
+
query,
|
|
385
|
+
request: { ...request, projectId: this.#security.runtime.projectId },
|
|
386
|
+
viewableByGrants: (objectTypeId) =>
|
|
387
|
+
this.#security.isObjectTypeViewable(objectTypeId, undefined),
|
|
388
|
+
})
|
|
389
|
+
}
|
|
390
|
+
|
|
379
391
|
const result = detachReadResult(
|
|
380
392
|
await executeObjectQueryLinks(
|
|
381
|
-
{ query: executionQuery, ...request, projectId: this.#runtime.projectId },
|
|
382
|
-
this.#queryExecutorOptions()
|
|
393
|
+
{ query: executionQuery, ...request, projectId: this.#security.runtime.projectId },
|
|
394
|
+
this.#queryExecutorOptions(clearance)
|
|
383
395
|
)
|
|
384
396
|
)
|
|
385
397
|
|
|
@@ -387,12 +399,18 @@ class AuthorizedObjectReaderImpl {
|
|
|
387
399
|
// its cursor and hasMore metadata describe hidden rows, so a provider contract violation must
|
|
388
400
|
// fail closed instead of returning a partially filtered page.
|
|
389
401
|
if (
|
|
390
|
-
result.objects.some(
|
|
391
|
-
|
|
402
|
+
result.objects.some(
|
|
403
|
+
(row) => !this.#security.isObjectTypeViewable(row.objectTypeId, clearance)
|
|
404
|
+
) ||
|
|
405
|
+
result.links.some((link) => !this.#security.isLinkViewable(link, clearance))
|
|
392
406
|
) {
|
|
393
407
|
throw new Error("[Sixb] Object storage returned a link page outside its authorized scope.")
|
|
394
408
|
}
|
|
395
|
-
|
|
409
|
+
|
|
410
|
+
return {
|
|
411
|
+
...result,
|
|
412
|
+
objects: result.objects.map((row) => (clearance ? redactObjectRow(row, clearance) : row)),
|
|
413
|
+
}
|
|
396
414
|
}
|
|
397
415
|
|
|
398
416
|
async count(
|
|
@@ -400,10 +418,11 @@ class AuthorizedObjectReaderImpl {
|
|
|
400
418
|
): Promise<ExecuteObjectCountResult> {
|
|
401
419
|
const query = snapshotAuthoredQuery(input.query)
|
|
402
420
|
const executionQuery = this.#admitDelegatedQuery(query)?.query ?? query
|
|
421
|
+
const clearance = await this.#security.clearance.current()
|
|
403
422
|
return detachReadResult(
|
|
404
423
|
await countObjects(
|
|
405
|
-
{ query: executionQuery, projectId: this.#runtime.projectId },
|
|
406
|
-
this.#queryExecutorOptions()
|
|
424
|
+
{ query: executionQuery, projectId: this.#security.runtime.projectId },
|
|
425
|
+
this.#queryExecutorOptions(clearance)
|
|
407
426
|
)
|
|
408
427
|
)
|
|
409
428
|
}
|
|
@@ -413,10 +432,11 @@ class AuthorizedObjectReaderImpl {
|
|
|
413
432
|
): Promise<ExecuteObjectExistsResult> {
|
|
414
433
|
const query = snapshotAuthoredQuery(input.query)
|
|
415
434
|
const executionQuery = this.#admitDelegatedQuery(query)?.query ?? query
|
|
435
|
+
const clearance = await this.#security.clearance.current()
|
|
416
436
|
return detachReadResult(
|
|
417
437
|
await existsObjects(
|
|
418
|
-
{ query: executionQuery, projectId: this.#runtime.projectId },
|
|
419
|
-
this.#queryExecutorOptions()
|
|
438
|
+
{ query: executionQuery, projectId: this.#security.runtime.projectId },
|
|
439
|
+
this.#queryExecutorOptions(clearance)
|
|
420
440
|
)
|
|
421
441
|
)
|
|
422
442
|
}
|
|
@@ -428,17 +448,17 @@ class AuthorizedObjectReaderImpl {
|
|
|
428
448
|
const facets = snapshotFacetRequests(input.facets)
|
|
429
449
|
let executionQuery = query
|
|
430
450
|
let executionFacets = facets
|
|
431
|
-
const admission = this.#
|
|
451
|
+
const admission = this.#security.delegation?.queryAdmission
|
|
432
452
|
if (admission) {
|
|
433
453
|
// Terminal arguments are ordinary validation errors, not an authorization oracle. Validate
|
|
434
454
|
// them against the canonical result shape before raising any delegated-scope denial.
|
|
435
|
-
const validated = validateObjectQuery(query, { ontology: this.#ontology })
|
|
455
|
+
const validated = validateObjectQuery(query, { ontology: this.#ontology.registry })
|
|
436
456
|
const normalizedFacets = validateObjectFacetRequests(facets, validated.result.objectTypeIds, {
|
|
437
|
-
ontology: this.#ontology,
|
|
457
|
+
ontology: this.#ontology.registry,
|
|
438
458
|
})
|
|
439
459
|
const admitted = validateObjectQueryWithAdmission(
|
|
440
460
|
validated.query,
|
|
441
|
-
{ ontology: this.#ontology, normalize: false },
|
|
461
|
+
{ ontology: this.#ontology.registry, normalize: false },
|
|
442
462
|
admission
|
|
443
463
|
)
|
|
444
464
|
normalizedFacets.forEach((facet, index) => {
|
|
@@ -452,62 +472,78 @@ class AuthorizedObjectReaderImpl {
|
|
|
452
472
|
executionQuery = admitted.query
|
|
453
473
|
executionFacets = normalizedFacets
|
|
454
474
|
}
|
|
475
|
+
const clearance = await this.#security.clearance.current()
|
|
455
476
|
return detachReadResult(
|
|
456
477
|
await facetObjects(
|
|
457
478
|
{
|
|
458
479
|
query: executionQuery,
|
|
459
480
|
facets: executionFacets,
|
|
460
|
-
projectId: this.#runtime.projectId,
|
|
481
|
+
projectId: this.#security.runtime.projectId,
|
|
461
482
|
},
|
|
462
|
-
this.#queryExecutorOptions()
|
|
483
|
+
this.#queryExecutorOptions(clearance)
|
|
463
484
|
)
|
|
464
485
|
)
|
|
465
486
|
}
|
|
466
487
|
|
|
467
488
|
/**
|
|
468
|
-
* Redact a
|
|
469
|
-
* marked values the writer never sent and cannot read.
|
|
489
|
+
* Redact the rows a write of this object type returns. An upsert returns the merged effective
|
|
490
|
+
* row, which may hold marked values the writer never sent and cannot read. Resolved before the
|
|
491
|
+
* write, which it refuses when the writer cannot read the type at all.
|
|
492
|
+
*/
|
|
493
|
+
async writtenRowRedactor(
|
|
494
|
+
objectTypeId: string
|
|
495
|
+
): Promise<<TRow extends ObjectRow>(row: TRow) => TRow> {
|
|
496
|
+
const clearance = await this.#security.clearance.current()
|
|
497
|
+
assertTargetsReadable(clearance, { objectTypeIds: [objectTypeId] })
|
|
498
|
+
return (row) => (clearance ? redactObjectRow(row, clearance) : row)
|
|
499
|
+
}
|
|
500
|
+
|
|
501
|
+
/**
|
|
502
|
+
* Refuse a write or a request that names an object type or link this authority cannot read,
|
|
503
|
+
* before any lookup: it would answer whether what it names exists, and land where the reader
|
|
504
|
+
* cannot see.
|
|
470
505
|
*/
|
|
471
|
-
|
|
472
|
-
|
|
506
|
+
async assertReadable(targets: ReadTargets): Promise<void> {
|
|
507
|
+
assertTargetsReadable(await this.#security.clearance.current(), targets)
|
|
473
508
|
}
|
|
474
509
|
|
|
475
510
|
/** Enforce the delegated response budget without exposing or recombining its limits. */
|
|
476
511
|
assertVisibleOutputWithinLimit(value: unknown): void {
|
|
477
|
-
if (this.#authority.type !== "delegated") return
|
|
478
|
-
assertObjectReadOutputWithinLimit(value, this.#authority.objectRead.limits)
|
|
512
|
+
if (this.#security.authority.type !== "delegated") return
|
|
513
|
+
assertObjectReadOutputWithinLimit(value, this.#security.authority.objectRead.limits)
|
|
479
514
|
}
|
|
480
515
|
|
|
481
516
|
/** Admit adjacent telemetry work without exposing which authority policy was selected. */
|
|
482
517
|
admitTelemetryHistoryRead(
|
|
483
518
|
input: TelemetryHistoryReadWorkloadInput
|
|
484
519
|
): TelemetryHistoryReadAdmission {
|
|
485
|
-
return admitTelemetryHistoryReadWorkload(input, this.#authority.type === "delegated")
|
|
520
|
+
return admitTelemetryHistoryReadWorkload(input, this.#security.authority.type === "delegated")
|
|
486
521
|
}
|
|
487
522
|
|
|
488
|
-
#queryExecutorOptions() {
|
|
489
|
-
const admission = this.#executorAdmission()
|
|
490
|
-
|
|
523
|
+
#queryExecutorOptions(clearance: Clearance) {
|
|
524
|
+
const admission = this.#executorAdmission(clearance)
|
|
525
|
+
|
|
526
|
+
if (this.#security.authority.type === "delegated") {
|
|
491
527
|
// The selected storage instance is the private execution capability. Passing the delegated
|
|
492
528
|
// runtime token into the generic executor would either reject this admitted query or tempt a
|
|
493
529
|
// forgeable bypass flag; neither is needed at this nominal boundary.
|
|
494
530
|
return {
|
|
495
|
-
ontology: this.#ontology,
|
|
531
|
+
ontology: this.#ontology.registry,
|
|
496
532
|
storage: this.#storage,
|
|
497
|
-
embeddingModels: this.#
|
|
498
|
-
rerankingModels: this.#
|
|
533
|
+
embeddingModels: this.#models.embedding,
|
|
534
|
+
rerankingModels: this.#models.reranking,
|
|
499
535
|
...(admission === undefined ? {} : { admission }),
|
|
500
536
|
}
|
|
501
537
|
}
|
|
502
538
|
return {
|
|
503
|
-
ontology: this.#ontology,
|
|
504
|
-
embeddingModels: this.#
|
|
505
|
-
rerankingModels: this.#
|
|
539
|
+
ontology: this.#ontology.registry,
|
|
540
|
+
embeddingModels: this.#models.embedding,
|
|
541
|
+
rerankingModels: this.#models.reranking,
|
|
506
542
|
storage: this.#storage,
|
|
507
|
-
runtimeAuthorization: this.#runtime.runtimeAuthorization,
|
|
508
|
-
...(this.#runtime.authorization === undefined
|
|
543
|
+
runtimeAuthorization: this.#security.runtime.runtimeAuthorization,
|
|
544
|
+
...(this.#security.runtime.authorization === undefined
|
|
509
545
|
? {}
|
|
510
|
-
: { authorization: this.#runtime.authorization }),
|
|
546
|
+
: { authorization: this.#security.runtime.authorization }),
|
|
511
547
|
...(admission === undefined ? {} : { admission }),
|
|
512
548
|
}
|
|
513
549
|
}
|
|
@@ -516,84 +552,59 @@ class AuthorizedObjectReaderImpl {
|
|
|
516
552
|
* The executor validates the query it runs, and that validation resolves default text fields.
|
|
517
553
|
* Every admission that narrows those fields must therefore apply there, not only beforehand.
|
|
518
554
|
*/
|
|
519
|
-
#executorAdmission(): ObjectQuerySemanticAdmission | undefined {
|
|
520
|
-
const
|
|
521
|
-
const selected = this.#
|
|
522
|
-
if (selected && clearance) return composeObjectQueryAdmissions(selected, clearance)
|
|
523
|
-
return selected ?? clearance
|
|
524
|
-
}
|
|
555
|
+
#executorAdmission(clearance: Clearance): ObjectQuerySemanticAdmission | undefined {
|
|
556
|
+
const admission = clearance && createClearanceQueryAdmission(clearance)
|
|
557
|
+
const selected = this.#security.delegation?.queryAdmission
|
|
525
558
|
|
|
526
|
-
|
|
527
|
-
return
|
|
559
|
+
if (selected && admission) return composeObjectQueryAdmissions(selected, admission)
|
|
560
|
+
return selected ?? admission
|
|
528
561
|
}
|
|
529
562
|
|
|
530
|
-
#
|
|
531
|
-
return
|
|
532
|
-
}
|
|
533
|
-
|
|
534
|
-
#admitDelegatedQuery(query: ObjectQuery): AdmittedObjectQuery | undefined {
|
|
535
|
-
if (!this.#delegatedQueryAdmission) return undefined
|
|
536
|
-
return validateObjectQueryWithAdmission(
|
|
537
|
-
query,
|
|
538
|
-
{ ontology: this.#ontology },
|
|
539
|
-
this.#delegatedQueryAdmission
|
|
540
|
-
)
|
|
563
|
+
#omitHidden<TRow extends ObjectRow>(row: TRow, clearance: Clearance): TRow {
|
|
564
|
+
return clearance ? omitHiddenProperties(row, clearance) : row
|
|
541
565
|
}
|
|
542
566
|
|
|
543
|
-
|
|
544
|
-
|
|
545
|
-
|
|
546
|
-
|
|
547
|
-
|
|
548
|
-
|
|
549
|
-
|
|
550
|
-
|
|
551
|
-
|
|
552
|
-
|
|
567
|
+
/**
|
|
568
|
+
* Detach a result whose rows went through {@link #omitHidden}, then list their redactions on
|
|
569
|
+
* the copy. Each row is deep-copied once, and never with a hidden value.
|
|
570
|
+
*/
|
|
571
|
+
#detachRows<TResult>(
|
|
572
|
+
result: TResult,
|
|
573
|
+
rows: (detached: TResult) => Iterable<ObjectRow | null>,
|
|
574
|
+
clearance: Clearance
|
|
575
|
+
): TResult {
|
|
576
|
+
const detached = detachReadResult(result)
|
|
577
|
+
if (clearance) {
|
|
578
|
+
for (const row of rows(detached)) if (row) attachRedactions(row, clearance)
|
|
553
579
|
}
|
|
554
580
|
|
|
555
|
-
|
|
556
|
-
|
|
557
|
-
|
|
581
|
+
return detached
|
|
582
|
+
}
|
|
583
|
+
|
|
584
|
+
#admitDelegatedQuery(query: ObjectQuery): AdmittedObjectQuery | undefined {
|
|
585
|
+
const admission = this.#security.delegation?.queryAdmission
|
|
586
|
+
if (!admission) return undefined
|
|
587
|
+
return validateObjectQueryWithAdmission(query, { ontology: this.#ontology.registry }, admission)
|
|
558
588
|
}
|
|
559
589
|
|
|
560
590
|
#resolveListObjectTypes(
|
|
561
|
-
requested: ListObjectsInput["objectTypeId"]
|
|
591
|
+
requested: ListObjectsInput["objectTypeId"],
|
|
592
|
+
clearance: Clearance
|
|
562
593
|
): ListObjectsInput["objectTypeId"] {
|
|
563
594
|
if (requested !== undefined) {
|
|
564
595
|
const objectTypeIds = typeof requested === "string" ? [requested] : [...new Set(requested)]
|
|
565
596
|
for (const objectTypeId of objectTypeIds) {
|
|
566
|
-
this.#ontology.resolveObjectType(objectTypeId)
|
|
597
|
+
this.#ontology.registry.resolveObjectType(objectTypeId)
|
|
567
598
|
}
|
|
568
|
-
this.#assertObjectTypesViewable(objectTypeIds)
|
|
599
|
+
this.#security.assertObjectTypesViewable(objectTypeIds, clearance)
|
|
569
600
|
return typeof requested === "string" ? requested : objectTypeIds
|
|
570
601
|
}
|
|
571
602
|
|
|
572
|
-
if (this.#authority.type === "unrestricted") return undefined
|
|
573
|
-
return this.#ontology
|
|
603
|
+
if (this.#security.authority.type === "unrestricted") return undefined
|
|
604
|
+
return this.#ontology.registry
|
|
574
605
|
.listObjectTypes()
|
|
575
606
|
.map((objectType) => objectType.id)
|
|
576
|
-
.filter((objectTypeId) => this.#isObjectTypeViewable(objectTypeId))
|
|
577
|
-
}
|
|
578
|
-
|
|
579
|
-
#isObjectTypeViewable(objectTypeId: string): boolean {
|
|
580
|
-
if (this.#authority.type === "delegated") {
|
|
581
|
-
return this.#delegatedObjectTypeIds?.has(objectTypeId) ?? false
|
|
582
|
-
}
|
|
583
|
-
return isAllowed(this.#runtime.authorization, { kind: "object.view", objectTypeId })
|
|
584
|
-
}
|
|
585
|
-
|
|
586
|
-
#isLinkViewable(link: ObjectLinkRow): boolean {
|
|
587
|
-
if (
|
|
588
|
-
!this.#isObjectTypeViewable(link.sourceTypeId) ||
|
|
589
|
-
!this.#isObjectTypeViewable(link.targetTypeId)
|
|
590
|
-
) {
|
|
591
|
-
return false
|
|
592
|
-
}
|
|
593
|
-
return (
|
|
594
|
-
this.#delegatedLinkDefinitions?.has(delegatedLinkDefinitionKey(link)) ??
|
|
595
|
-
this.#authority.type !== "delegated"
|
|
596
|
-
)
|
|
607
|
+
.filter((objectTypeId) => this.#security.isObjectTypeViewable(objectTypeId, clearance))
|
|
597
608
|
}
|
|
598
609
|
}
|
|
599
610
|
|
|
@@ -609,18 +620,27 @@ export function createAuthorizedObjectReader(input: {
|
|
|
609
620
|
readonly embeddingModels?: EmbeddingModelCatalog
|
|
610
621
|
readonly rerankingModels?: RerankingModelCatalog
|
|
611
622
|
readonly objectStorage: ObjectStorage
|
|
623
|
+
/** Markings of the dataset versions projections applied; the code's markings alone without. */
|
|
624
|
+
readonly appliedMarkings?: AppliedMarkings
|
|
612
625
|
}): AuthorizedObjectReader {
|
|
613
626
|
const scope = captureExecutionScope(input.scope)
|
|
614
627
|
const projectId = scope.execution.projectId
|
|
615
628
|
const authority = resolveExecutionScopeAuthorization(projectId, scope)
|
|
616
629
|
const storage = objectStorageForAuthority(authority, input.objectStorage)
|
|
617
630
|
const reader = new AuthorizedObjectReaderImpl(readerConstructionKey, {
|
|
618
|
-
|
|
619
|
-
|
|
620
|
-
|
|
621
|
-
|
|
631
|
+
ontology: new ObjectReaderOntology(input.ontology, authority),
|
|
632
|
+
security: new ObjectReaderSecurity({
|
|
633
|
+
authorization: scope.authorization,
|
|
634
|
+
authority,
|
|
635
|
+
projectId,
|
|
636
|
+
ontology: input.ontology,
|
|
637
|
+
...(input.appliedMarkings === undefined ? {} : { appliedMarkings: input.appliedMarkings }),
|
|
638
|
+
}),
|
|
639
|
+
models: Object.freeze({
|
|
640
|
+
...(input.embeddingModels === undefined ? {} : { embedding: input.embeddingModels }),
|
|
641
|
+
...(input.rerankingModels === undefined ? {} : { reranking: input.rerankingModels }),
|
|
642
|
+
}),
|
|
622
643
|
storage,
|
|
623
|
-
authority,
|
|
624
644
|
})
|
|
625
645
|
Object.freeze(reader)
|
|
626
646
|
return reader
|
|
@@ -640,21 +660,50 @@ export function getAuthorizedOntologyView(reader: AuthorizedObjectReader): Autho
|
|
|
640
660
|
}
|
|
641
661
|
|
|
642
662
|
/**
|
|
643
|
-
*
|
|
644
|
-
*
|
|
663
|
+
* What a reader resolved for this authority cannot read now. Events redact with it: an event of an
|
|
664
|
+
* object type the reader cannot read is not delivered, and the others are redacted like rows.
|
|
645
665
|
*/
|
|
646
|
-
function
|
|
647
|
-
|
|
648
|
-
|
|
649
|
-
|
|
650
|
-
|
|
651
|
-
|
|
652
|
-
|
|
653
|
-
|
|
654
|
-
|
|
655
|
-
|
|
656
|
-
|
|
666
|
+
export function readerClearance(reader: AuthorizedObjectReader): Promise<Clearance> {
|
|
667
|
+
return AuthorizedObjectReaderImpl.clearance(reader)
|
|
668
|
+
}
|
|
669
|
+
|
|
670
|
+
/**
|
|
671
|
+
* What a reader cannot read in an object event: the current markings, with those of the versions
|
|
672
|
+
* its values came from. A plain value for a reader those markings cannot affect, which reads no
|
|
673
|
+
* version.
|
|
674
|
+
*/
|
|
675
|
+
export function readerEventClearance(
|
|
676
|
+
reader: AuthorizedObjectReader,
|
|
677
|
+
sources: EventSources
|
|
678
|
+
): Clearance | Promise<Clearance> {
|
|
679
|
+
return AuthorizedObjectReaderImpl.eventClearance(reader, sources)
|
|
680
|
+
}
|
|
681
|
+
|
|
682
|
+
/** What a write or a request names: object types, and links by their source type. */
|
|
683
|
+
interface ReadTargets {
|
|
684
|
+
readonly objectTypeIds: readonly string[]
|
|
685
|
+
readonly links?: readonly { readonly objectTypeId: string; readonly linkId: string }[]
|
|
686
|
+
}
|
|
687
|
+
|
|
688
|
+
function assertTargetsReadable(clearance: Clearance, targets: ReadTargets): void {
|
|
689
|
+
if (!clearance) return
|
|
690
|
+
|
|
691
|
+
for (const objectTypeId of targets.objectTypeIds) {
|
|
692
|
+
const unreadable = clearance.unreadableType(objectTypeId)
|
|
693
|
+
if (unreadable) throw unreadableError(unreadable)
|
|
657
694
|
}
|
|
695
|
+
|
|
696
|
+
for (const link of targets.links ?? []) {
|
|
697
|
+
const unreadable = clearance.unreadableLink(link.objectTypeId, link.linkId)
|
|
698
|
+
if (unreadable) throw unreadableError(unreadable)
|
|
699
|
+
}
|
|
700
|
+
}
|
|
701
|
+
|
|
702
|
+
function hidesProperty(
|
|
703
|
+
item: { readonly objectTypeId: string; readonly propertyId: string },
|
|
704
|
+
clearance: Clearance
|
|
705
|
+
): boolean {
|
|
706
|
+
return clearance?.missingMarking(item.objectTypeId, item.propertyId) !== undefined
|
|
658
707
|
}
|
|
659
708
|
|
|
660
709
|
function objectStorageForAuthority(
|
|
@@ -679,41 +728,6 @@ function objectStorageForAuthority(
|
|
|
679
728
|
}
|
|
680
729
|
}
|
|
681
730
|
|
|
682
|
-
function ontologySelectionForAuthority(
|
|
683
|
-
authority: ResolvedExecutionAuthority,
|
|
684
|
-
ontology: OntologyRegistry
|
|
685
|
-
): AuthorizedOntologySelection {
|
|
686
|
-
switch (authority.type) {
|
|
687
|
-
case "unrestricted":
|
|
688
|
-
return { kind: "all" }
|
|
689
|
-
case "principal":
|
|
690
|
-
return {
|
|
691
|
-
kind: "types",
|
|
692
|
-
objectTypeIds: ontology
|
|
693
|
-
.listObjectTypes()
|
|
694
|
-
.filter((objectType) =>
|
|
695
|
-
isAllowed(authority.context, {
|
|
696
|
-
kind: "object.view",
|
|
697
|
-
objectTypeId: objectType.id,
|
|
698
|
-
})
|
|
699
|
-
)
|
|
700
|
-
.map((objectType) => objectType.id),
|
|
701
|
-
}
|
|
702
|
-
case "delegated":
|
|
703
|
-
return { kind: "selected", scope: authority.objectRead.scope }
|
|
704
|
-
}
|
|
705
|
-
}
|
|
706
|
-
|
|
707
|
-
function delegatedLinkDefinitionKey(
|
|
708
|
-
input:
|
|
709
|
-
| Pick<CompiledObjectReadStep, "sourceObjectTypeId" | "linkId" | "targetObjectTypeId">
|
|
710
|
-
| Pick<ObjectLinkRow, "sourceTypeId" | "linkId" | "targetTypeId">
|
|
711
|
-
): string {
|
|
712
|
-
return "sourceObjectTypeId" in input
|
|
713
|
-
? JSON.stringify([input.sourceObjectTypeId, input.linkId, input.targetObjectTypeId])
|
|
714
|
-
: JSON.stringify([input.sourceTypeId, input.linkId, input.targetTypeId])
|
|
715
|
-
}
|
|
716
|
-
|
|
717
731
|
/**
|
|
718
732
|
* Storage providers may optimize trusted reads with live references. Values crossing the
|
|
719
733
|
* application-facing authorization boundary must not retain them.
|