@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,174 @@
|
|
|
1
|
+
import { ARTIFACT_LIMITS } from "../limits"
|
|
2
|
+
import { ARTIFACT_THEME_TOKENS } from "../theme"
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* Messages between the app and a deck in its sandboxed frame. The app asks; the frame answers
|
|
6
|
+
* each request by its id, and tells the app what happened inside it as events. Later abilities
|
|
7
|
+
* are new methods and events, not a new protocol.
|
|
8
|
+
*/
|
|
9
|
+
export const FRAME_PROTOCOL = "sixb-frame/1"
|
|
10
|
+
|
|
11
|
+
/**
|
|
12
|
+
* A deck shows one slide scaled to fit on its stage, every slide in a grid, or one slide filling
|
|
13
|
+
* the page to present it.
|
|
14
|
+
*/
|
|
15
|
+
export type DeckMode = "slide" | "overview" | "present"
|
|
16
|
+
|
|
17
|
+
/**
|
|
18
|
+
* How a frame opens, set in its URL so the first paint is right: at a slide, and with `fill`, that
|
|
19
|
+
* slide alone filling the frame with no stage around it, as a thumbnail or an embed shows it.
|
|
20
|
+
*/
|
|
21
|
+
export interface FrameStart {
|
|
22
|
+
readonly slide?: number
|
|
23
|
+
readonly fill?: boolean
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
/** The fragment that carries a frame's start: `#sixb-slide=3&sixb-fill`. */
|
|
27
|
+
export function frameStartHash(start: FrameStart): string {
|
|
28
|
+
const params: string[] = []
|
|
29
|
+
if (start.slide !== undefined && start.slide > 1)
|
|
30
|
+
params.push(`sixb-slide=${Math.round(start.slide)}`)
|
|
31
|
+
if (start.fill) params.push("sixb-fill")
|
|
32
|
+
return params.length > 0 ? `#${params.join("&")}` : ""
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
/** What the app asks of the frame. */
|
|
36
|
+
export type FrameRequest =
|
|
37
|
+
| FrameRequestOf<
|
|
38
|
+
"theme",
|
|
39
|
+
{ readonly tokens: Readonly<Record<string, string>>; readonly dark: boolean }
|
|
40
|
+
>
|
|
41
|
+
| FrameRequestOf<"goto", { readonly slide: number }>
|
|
42
|
+
| FrameRequestOf<"mode", { readonly mode: DeckMode }>
|
|
43
|
+
|
|
44
|
+
interface FrameRequestOf<Method extends string, Params> {
|
|
45
|
+
readonly protocol: typeof FRAME_PROTOCOL
|
|
46
|
+
readonly id: number
|
|
47
|
+
readonly method: Method
|
|
48
|
+
readonly params: Params
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
/** The frame's answer to one request. */
|
|
52
|
+
export interface FrameResponse {
|
|
53
|
+
readonly protocol: typeof FRAME_PROTOCOL
|
|
54
|
+
readonly id: number
|
|
55
|
+
readonly error?: string
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
/** What happened inside the frame. */
|
|
59
|
+
export type FrameEvent =
|
|
60
|
+
| FrameEventOf<"ready", { readonly slides: number }>
|
|
61
|
+
/** The reader picked a slide in the overview. */
|
|
62
|
+
| FrameEventOf<"select", { readonly slide: number }>
|
|
63
|
+
/** A key the app handles, pressed while the frame had focus. */
|
|
64
|
+
| FrameEventOf<"key", { readonly key: string }>
|
|
65
|
+
/** A link to another artifact, which opens where the reader is. */
|
|
66
|
+
| FrameEventOf<"open", { readonly address: string }>
|
|
67
|
+
/**
|
|
68
|
+
* Where the shown slide's `<sixb-embed>` boxes are, for the app to draw each over the frame: in
|
|
69
|
+
* the frame's pixels, with the scale the slide is drawn at. Empty in the overview, where an
|
|
70
|
+
* embed stays a placeholder, as it does in a filled frame, which never reports.
|
|
71
|
+
*/
|
|
72
|
+
| FrameEventOf<"embeds", { readonly embeds: readonly FrameEmbed[] }>
|
|
73
|
+
|
|
74
|
+
/** One `<sixb-embed>` on the shown slide. */
|
|
75
|
+
export interface FrameEmbed {
|
|
76
|
+
readonly address: string
|
|
77
|
+
readonly rect: {
|
|
78
|
+
readonly x: number
|
|
79
|
+
readonly y: number
|
|
80
|
+
readonly width: number
|
|
81
|
+
readonly height: number
|
|
82
|
+
}
|
|
83
|
+
/** The slide's scale: the embed is drawn at `rect / scale`, then scaled with the slide. */
|
|
84
|
+
readonly scale: number
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
interface FrameEventOf<Event extends string, Params> {
|
|
88
|
+
readonly protocol: typeof FRAME_PROTOCOL
|
|
89
|
+
readonly event: Event
|
|
90
|
+
readonly params: Params
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
/** Keys the frame passes to the app, so a deck navigates the same with focus in it or not. */
|
|
94
|
+
export const DECK_KEYS = [
|
|
95
|
+
"ArrowLeft",
|
|
96
|
+
"ArrowRight",
|
|
97
|
+
"ArrowUp",
|
|
98
|
+
"ArrowDown",
|
|
99
|
+
"PageUp",
|
|
100
|
+
"PageDown",
|
|
101
|
+
"Home",
|
|
102
|
+
"End",
|
|
103
|
+
" ",
|
|
104
|
+
"Escape",
|
|
105
|
+
] as const
|
|
106
|
+
|
|
107
|
+
/**
|
|
108
|
+
* The theme tokens the app sends into a frame, read from the viewer as it is themed: the ones an
|
|
109
|
+
* artifact's theme may set.
|
|
110
|
+
*/
|
|
111
|
+
export const FRAME_THEME_TOKENS = ARTIFACT_THEME_TOKENS
|
|
112
|
+
|
|
113
|
+
/**
|
|
114
|
+
* A message from a frame as an event, or null when it is not one this protocol sends. A deck runs
|
|
115
|
+
* its own scripts, so anything it posts is checked for the shape the app relies on: whole slide
|
|
116
|
+
* numbers, a key the app handles, finite boxes, and no more embeds than a version may record.
|
|
117
|
+
*/
|
|
118
|
+
export function parseFrameEvent(data: unknown): FrameEvent | null {
|
|
119
|
+
if (!isRecord(data) || data.protocol !== FRAME_PROTOCOL || !isRecord(data.params)) return null
|
|
120
|
+
const { params } = data
|
|
121
|
+
switch (data.event) {
|
|
122
|
+
case "ready":
|
|
123
|
+
return isCount(params.slides) ? event("ready", { slides: params.slides }) : null
|
|
124
|
+
case "select":
|
|
125
|
+
return isCount(params.slide) && params.slide > 0
|
|
126
|
+
? event("select", { slide: params.slide })
|
|
127
|
+
: null
|
|
128
|
+
case "key":
|
|
129
|
+
return typeof params.key === "string" && (DECK_KEYS as readonly string[]).includes(params.key)
|
|
130
|
+
? event("key", { key: params.key })
|
|
131
|
+
: null
|
|
132
|
+
case "open":
|
|
133
|
+
return isAddress(params.address) ? event("open", { address: params.address }) : null
|
|
134
|
+
case "embeds": {
|
|
135
|
+
const { embeds } = params
|
|
136
|
+
if (!Array.isArray(embeds) || embeds.length > ARTIFACT_LIMITS.maxReferences) return null
|
|
137
|
+
const parsed: FrameEmbed[] = []
|
|
138
|
+
for (const embed of embeds) {
|
|
139
|
+
if (!isRecord(embed) || !isAddress(embed.address) || !isRecord(embed.rect)) return null
|
|
140
|
+
const { x, y, width, height } = embed.rect
|
|
141
|
+
if (![x, y, width, height, embed.scale].every(Number.isFinite)) return null
|
|
142
|
+
if (Number(width) < 0 || Number(height) < 0 || Number(embed.scale) <= 0) return null
|
|
143
|
+
parsed.push({
|
|
144
|
+
address: embed.address,
|
|
145
|
+
rect: { x: Number(x), y: Number(y), width: Number(width), height: Number(height) },
|
|
146
|
+
scale: Number(embed.scale),
|
|
147
|
+
})
|
|
148
|
+
}
|
|
149
|
+
return event("embeds", { embeds: parsed })
|
|
150
|
+
}
|
|
151
|
+
default:
|
|
152
|
+
return null
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
|
|
156
|
+
function event<Name extends FrameEvent["event"]>(
|
|
157
|
+
name: Name,
|
|
158
|
+
params: Extract<FrameEvent, { event: Name }>["params"]
|
|
159
|
+
): FrameEvent {
|
|
160
|
+
return { protocol: FRAME_PROTOCOL, event: name, params } as FrameEvent
|
|
161
|
+
}
|
|
162
|
+
|
|
163
|
+
function isRecord(value: unknown): value is Record<string, unknown> {
|
|
164
|
+
return typeof value === "object" && value !== null
|
|
165
|
+
}
|
|
166
|
+
|
|
167
|
+
function isCount(value: unknown): value is number {
|
|
168
|
+
return Number.isSafeInteger(value) && Number(value) >= 0
|
|
169
|
+
}
|
|
170
|
+
|
|
171
|
+
/** Long enough for any address a version can record; the app resolves it before using it. */
|
|
172
|
+
function isAddress(value: unknown): value is string {
|
|
173
|
+
return typeof value === "string" && value.length <= 2048
|
|
174
|
+
}
|
|
@@ -0,0 +1,213 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The runtime the frame injects into a deck before anything else in its `<head>`. It is served as
|
|
3
|
+
* this function's own source, `(${frameRuntime})()`, so it imports nothing and names nothing
|
|
4
|
+
* outside itself: the protocol string and the keys repeat what `protocol.ts` declares, and a test
|
|
5
|
+
* holds the two together.
|
|
6
|
+
*
|
|
7
|
+
* It lays the deck out: every `section.slide` is a 1280×720 slide, shown one at a time scaled to
|
|
8
|
+
* fit, or all at once in a grid. The URL's fragment can open it at a slide, and with `sixb-fill`
|
|
9
|
+
* show that slide alone filling the frame, as a thumbnail or an embed does. It applies the theme the app sends, answers the app's requests,
|
|
10
|
+
* and tells the app about keys, picks in the overview, and links to other artifacts.
|
|
11
|
+
*/
|
|
12
|
+
export function frameRuntime(): void {
|
|
13
|
+
const PROTOCOL = "sixb-frame/1"
|
|
14
|
+
const WIDTH = 1280
|
|
15
|
+
const HEIGHT = 720
|
|
16
|
+
const KEYS = [
|
|
17
|
+
"ArrowLeft",
|
|
18
|
+
"ArrowRight",
|
|
19
|
+
"ArrowUp",
|
|
20
|
+
"ArrowDown",
|
|
21
|
+
"PageUp",
|
|
22
|
+
"PageDown",
|
|
23
|
+
"Home",
|
|
24
|
+
"End",
|
|
25
|
+
" ",
|
|
26
|
+
"Escape",
|
|
27
|
+
]
|
|
28
|
+
const root = document.documentElement
|
|
29
|
+
const start = new URLSearchParams(window.location.hash.slice(1))
|
|
30
|
+
root.classList.add("sixb-deck")
|
|
31
|
+
root.dataset.mode = start.has("sixb-fill") ? "fill" : "slide"
|
|
32
|
+
let current = Number(start.get("sixb-slide")) || 1
|
|
33
|
+
|
|
34
|
+
const slides = (): HTMLElement[] =>
|
|
35
|
+
Array.from(document.querySelectorAll<HTMLElement>("section.slide"))
|
|
36
|
+
const post = (message: Record<string, unknown>) =>
|
|
37
|
+
window.parent.postMessage({ protocol: PROTOCOL, ...message }, "*")
|
|
38
|
+
|
|
39
|
+
/** The scale that fits a slide in the window, and the one that fits a column of the grid. */
|
|
40
|
+
const fit = () => {
|
|
41
|
+
const columns = window.innerWidth < 720 ? 2 : window.innerWidth < 1100 ? 3 : 4
|
|
42
|
+
const gap = 16
|
|
43
|
+
// A slide keeps a margin around it, so its edge reads against the stage; filled or presented,
|
|
44
|
+
// it has none.
|
|
45
|
+
const margin =
|
|
46
|
+
root.dataset.mode === "fill" || root.dataset.mode === "present"
|
|
47
|
+
? 0
|
|
48
|
+
: Math.min(32, window.innerWidth * 0.04)
|
|
49
|
+
root.style.setProperty(
|
|
50
|
+
"--sixb-scale",
|
|
51
|
+
String(
|
|
52
|
+
Math.min(
|
|
53
|
+
(window.innerWidth - margin * 2) / WIDTH,
|
|
54
|
+
(window.innerHeight - margin * 2) / HEIGHT
|
|
55
|
+
)
|
|
56
|
+
)
|
|
57
|
+
)
|
|
58
|
+
root.style.setProperty("--sixb-columns", String(columns))
|
|
59
|
+
root.style.setProperty(
|
|
60
|
+
"--sixb-overview-scale",
|
|
61
|
+
String((window.innerWidth - gap * (columns + 1)) / columns / WIDTH)
|
|
62
|
+
)
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
/** The shown slide's embeds, for the app to draw over the frame; once a frame, when they move. */
|
|
66
|
+
let reported = ""
|
|
67
|
+
let reporting = false
|
|
68
|
+
const reportEmbeds = () => {
|
|
69
|
+
if (reporting || root.dataset.mode === "fill") return
|
|
70
|
+
reporting = true
|
|
71
|
+
requestAnimationFrame(() => {
|
|
72
|
+
reporting = false
|
|
73
|
+
const scale = Number(root.style.getPropertyValue("--sixb-scale")) || 1
|
|
74
|
+
const slide = root.dataset.mode === "overview" ? undefined : slides()[current - 1]
|
|
75
|
+
const embeds = Array.from(slide?.querySelectorAll("sixb-embed[src]") ?? []).map((element) => {
|
|
76
|
+
const rect = element.getBoundingClientRect()
|
|
77
|
+
return {
|
|
78
|
+
address: (element.getAttribute("src") ?? "").trim(),
|
|
79
|
+
rect: { x: rect.left, y: rect.top, width: rect.width, height: rect.height },
|
|
80
|
+
scale,
|
|
81
|
+
}
|
|
82
|
+
})
|
|
83
|
+
const next = JSON.stringify(embeds)
|
|
84
|
+
if (next === reported) return
|
|
85
|
+
reported = next
|
|
86
|
+
post({ event: "embeds", params: { embeds } })
|
|
87
|
+
})
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
const show = (slide: number) => {
|
|
91
|
+
const all = slides()
|
|
92
|
+
current = Math.min(Math.max(1, Math.round(slide) || 1), Math.max(1, all.length))
|
|
93
|
+
all.forEach((element, index) => {
|
|
94
|
+
element.toggleAttribute("data-current", index + 1 === current)
|
|
95
|
+
})
|
|
96
|
+
if (root.dataset.mode === "overview") {
|
|
97
|
+
all[current - 1]?.scrollIntoView({ block: "nearest" })
|
|
98
|
+
}
|
|
99
|
+
reportEmbeds()
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
const handle = (method: string, params: Record<string, unknown>) => {
|
|
103
|
+
switch (method) {
|
|
104
|
+
case "theme": {
|
|
105
|
+
// In the theme's layer, not inline: the deck's own CSS, unlayered, still wins.
|
|
106
|
+
const tokens = (params.tokens ?? {}) as Record<string, string>
|
|
107
|
+
const declarations = Object.entries(tokens)
|
|
108
|
+
.filter(
|
|
109
|
+
([name, value]) =>
|
|
110
|
+
/^--[a-z0-9-]+$/.test(name) && typeof value === "string" && !/[;{}<]/.test(value)
|
|
111
|
+
)
|
|
112
|
+
.map(([name, value]) => `${name}: ${value};`)
|
|
113
|
+
// The stage is the app's, in the app's colors, whatever a deck makes of its own tokens.
|
|
114
|
+
for (const [stage, token] of [
|
|
115
|
+
["--sixb-stage", "--muted"],
|
|
116
|
+
["--sixb-stage-border", "--border"],
|
|
117
|
+
["--sixb-stage-foreground", "--foreground"],
|
|
118
|
+
]) {
|
|
119
|
+
const value = declarations.find((declaration) => declaration.startsWith(`${token}:`))
|
|
120
|
+
if (value) declarations.push(`${stage}${value.slice(token.length)}`)
|
|
121
|
+
}
|
|
122
|
+
let style = document.getElementById("sixb-theme")
|
|
123
|
+
if (!style) {
|
|
124
|
+
style = document.createElement("style")
|
|
125
|
+
style.id = "sixb-theme"
|
|
126
|
+
document.head.append(style)
|
|
127
|
+
}
|
|
128
|
+
style.textContent = `@layer sixb-theme { :root { ${declarations.join(" ")} color-scheme: ${params.dark === true ? "dark" : "light"}; } }`
|
|
129
|
+
root.classList.toggle("dark", params.dark === true)
|
|
130
|
+
return
|
|
131
|
+
}
|
|
132
|
+
case "goto":
|
|
133
|
+
show(Number(params.slide))
|
|
134
|
+
return
|
|
135
|
+
case "mode":
|
|
136
|
+
if (root.dataset.mode === "fill") return
|
|
137
|
+
root.dataset.mode =
|
|
138
|
+
params.mode === "overview" || params.mode === "present" ? params.mode : "slide"
|
|
139
|
+
fit()
|
|
140
|
+
show(current)
|
|
141
|
+
return
|
|
142
|
+
default:
|
|
143
|
+
throw new Error(`Unknown method '${method}'.`)
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
|
|
147
|
+
window.addEventListener("message", (event) => {
|
|
148
|
+
if (event.source !== window.parent) return
|
|
149
|
+
const data = event.data as Record<string, unknown> | null
|
|
150
|
+
// Requests only: at the top level, as in the layout check, the frame's own answers come back
|
|
151
|
+
// to it, and answering an answer would trade error messages with itself for good.
|
|
152
|
+
if (!data || data.protocol !== PROTOCOL || typeof data.id !== "number") return
|
|
153
|
+
if (typeof data.method !== "string") return
|
|
154
|
+
try {
|
|
155
|
+
handle(String(data.method), (data.params ?? {}) as Record<string, unknown>)
|
|
156
|
+
post({ id: data.id })
|
|
157
|
+
} catch (error) {
|
|
158
|
+
post({ id: data.id, error: error instanceof Error ? error.message : String(error) })
|
|
159
|
+
}
|
|
160
|
+
})
|
|
161
|
+
|
|
162
|
+
window.addEventListener("keydown", (event) => {
|
|
163
|
+
if (event.metaKey || event.ctrlKey || event.altKey) return
|
|
164
|
+
const target = event.target as HTMLElement | null
|
|
165
|
+
if (target?.closest("input, textarea, select, [contenteditable]")) return
|
|
166
|
+
if (!KEYS.includes(event.key)) return
|
|
167
|
+
event.preventDefault()
|
|
168
|
+
post({ event: "key", params: { key: event.key } })
|
|
169
|
+
})
|
|
170
|
+
|
|
171
|
+
document.addEventListener("click", (event) => {
|
|
172
|
+
const target = event.target as HTMLElement | null
|
|
173
|
+
const link = target?.closest<HTMLAnchorElement>("a[href]")
|
|
174
|
+
if (link) {
|
|
175
|
+
const href = link.getAttribute("href") ?? ""
|
|
176
|
+
if (/^artifact:/i.test(href.trim())) {
|
|
177
|
+
event.preventDefault()
|
|
178
|
+
post({ event: "open", params: { address: href.trim() } })
|
|
179
|
+
} else if (!href.startsWith("#")) {
|
|
180
|
+
// Outside the frame: a link opens in its own tab.
|
|
181
|
+
link.target = "_blank"
|
|
182
|
+
link.rel = "noopener noreferrer"
|
|
183
|
+
}
|
|
184
|
+
return
|
|
185
|
+
}
|
|
186
|
+
if (root.dataset.mode !== "overview") return
|
|
187
|
+
const slide = target?.closest<HTMLElement>("section.slide")
|
|
188
|
+
if (!slide) return
|
|
189
|
+
post({ event: "select", params: { slide: slides().indexOf(slide) + 1 } })
|
|
190
|
+
})
|
|
191
|
+
|
|
192
|
+
window.addEventListener("resize", () => {
|
|
193
|
+
fit()
|
|
194
|
+
reportEmbeds()
|
|
195
|
+
})
|
|
196
|
+
const ready = () => {
|
|
197
|
+
slides().forEach((element, index) => {
|
|
198
|
+
element.dataset.number = String(index + 1)
|
|
199
|
+
})
|
|
200
|
+
fit()
|
|
201
|
+
show(current)
|
|
202
|
+
post({ event: "ready", params: { slides: slides().length } })
|
|
203
|
+
// Fonts and images that arrive later move what is laid out after them.
|
|
204
|
+
const resized = new ResizeObserver(reportEmbeds)
|
|
205
|
+
for (const element of Array.from(document.querySelectorAll("section.slide > *, sixb-embed"))) {
|
|
206
|
+
resized.observe(element)
|
|
207
|
+
}
|
|
208
|
+
window.addEventListener("load", reportEmbeds)
|
|
209
|
+
document.fonts?.ready.then(reportEmbeds)
|
|
210
|
+
}
|
|
211
|
+
if (document.readyState === "loading") document.addEventListener("DOMContentLoaded", ready)
|
|
212
|
+
else ready()
|
|
213
|
+
}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
const NAMED_ENTITIES: Readonly<Record<string, string>> = {
|
|
2
|
+
amp: "&",
|
|
3
|
+
lt: "<",
|
|
4
|
+
gt: ">",
|
|
5
|
+
quot: '"',
|
|
6
|
+
apos: "'",
|
|
7
|
+
nbsp: String.fromCharCode(0xa0),
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
/**
|
|
11
|
+
* Text or an attribute as the browser reads it. HTMLRewriter hands both over as written in the
|
|
12
|
+
* HTML, entities included, so `artifact:…#Q3%20&%20Q4` must read `&` before it is resolved.
|
|
13
|
+
*/
|
|
14
|
+
export function decodeHtmlEntities(value: string): string {
|
|
15
|
+
return value.replace(/&(#x[\da-f]+|#\d+|[a-z]+);/gi, (match, entity: string) => {
|
|
16
|
+
if (entity[0] !== "#") return NAMED_ENTITIES[entity.toLowerCase()] ?? match
|
|
17
|
+
const codePoint =
|
|
18
|
+
entity[1]?.toLowerCase() === "x"
|
|
19
|
+
? Number.parseInt(entity.slice(2), 16)
|
|
20
|
+
: Number(entity.slice(1))
|
|
21
|
+
return Number.isInteger(codePoint) && codePoint >= 0 && codePoint <= 0x10ffff
|
|
22
|
+
? String.fromCodePoint(codePoint)
|
|
23
|
+
: match
|
|
24
|
+
})
|
|
25
|
+
}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
// Lowercase base32 without the letters easiest to misread. Ten characters is 50 bits: short enough
|
|
2
|
+
// for the Agent to write in an address, and the store refuses the rare collision.
|
|
3
|
+
const ALPHABET = "0123456789abcdefghjkmnpqrstvwxyz"
|
|
4
|
+
|
|
5
|
+
/** A new artifact id, such as `art_k3m9q2x7tp`. */
|
|
6
|
+
export function createArtifactId(): string {
|
|
7
|
+
const bytes = crypto.getRandomValues(new Uint8Array(10))
|
|
8
|
+
let id = "art_"
|
|
9
|
+
for (const byte of bytes) id += ALPHABET[byte % ALPHABET.length]
|
|
10
|
+
return id
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
const ARTIFACT_ID = new RegExp(`^art_[${ALPHABET}]{10}$`)
|
|
14
|
+
|
|
15
|
+
/** Whether `value` has the shape of an artifact id; whether that artifact exists is another matter. */
|
|
16
|
+
export function isArtifactId(value: string): boolean {
|
|
17
|
+
return ARTIFACT_ID.test(value)
|
|
18
|
+
}
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* What a client needs to show an artifact the way publishing read it: the kinds and what each
|
|
3
|
+
* holds, the slugs its headings get, its theme, a sheet's workbook and CSV, the limits a version
|
|
4
|
+
* keeps within, the `artifact:` addresses that point into it, and the messages a viewer and a
|
|
5
|
+
* deck's frame exchange, versioned as `sixb-frame/1`. Browser-safe: no storage, no Bun APIs.
|
|
6
|
+
*/
|
|
7
|
+
|
|
8
|
+
export {
|
|
9
|
+
type ArtifactAddress,
|
|
10
|
+
type CellRange,
|
|
11
|
+
formatArtifactAddress,
|
|
12
|
+
isArtifactAddress,
|
|
13
|
+
parseArtifactAddress,
|
|
14
|
+
parseSheetPart,
|
|
15
|
+
type SheetPart,
|
|
16
|
+
} from "./address"
|
|
17
|
+
export { CsvParseError, type CsvTable, parseCsv } from "./csv"
|
|
18
|
+
export {
|
|
19
|
+
type DeckMode,
|
|
20
|
+
FRAME_PROTOCOL,
|
|
21
|
+
FRAME_THEME_TOKENS,
|
|
22
|
+
type FrameEmbed,
|
|
23
|
+
type FrameEvent,
|
|
24
|
+
type FrameRequest,
|
|
25
|
+
type FrameResponse,
|
|
26
|
+
type FrameStart,
|
|
27
|
+
frameStartHash,
|
|
28
|
+
parseFrameEvent,
|
|
29
|
+
} from "./frames/protocol"
|
|
30
|
+
export { ARTIFACT_KINDS, type ArtifactKind } from "./kinds"
|
|
31
|
+
export { ARTIFACT_LIMITS } from "./limits"
|
|
32
|
+
export {
|
|
33
|
+
type ArtifactOutline,
|
|
34
|
+
createHeadingSlugger,
|
|
35
|
+
type DocumentHeading,
|
|
36
|
+
type DocumentOutline,
|
|
37
|
+
type FileOutline,
|
|
38
|
+
type SheetOutline,
|
|
39
|
+
type SheetSummary,
|
|
40
|
+
type SlidesOutline,
|
|
41
|
+
} from "./outline"
|
|
42
|
+
export {
|
|
43
|
+
type ArtifactAddressTarget,
|
|
44
|
+
type ResolvedArtifactPart,
|
|
45
|
+
resolveArtifactAddress,
|
|
46
|
+
} from "./resolve"
|
|
47
|
+
export { ARTIFACT_THEME_FILE, type ArtifactTheme, parseArtifactTheme } from "./theme"
|
|
48
|
+
export {
|
|
49
|
+
NUMERIC_COLUMN_TYPES,
|
|
50
|
+
parseSheetDate,
|
|
51
|
+
parseSheetNumber,
|
|
52
|
+
parseWorkbook,
|
|
53
|
+
type SheetChartType,
|
|
54
|
+
type SheetColumnFormat,
|
|
55
|
+
type SheetColumnType,
|
|
56
|
+
sheetFilePath,
|
|
57
|
+
WORKBOOK_FILE,
|
|
58
|
+
type Workbook,
|
|
59
|
+
type WorkbookChart,
|
|
60
|
+
type WorkbookSheet,
|
|
61
|
+
} from "./workbook"
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
/** The kinds of artifact Sixb renders. An artifact's kind is fixed when it is created. */
|
|
2
|
+
export const ARTIFACT_KINDS = ["document", "sheet", "slides", "file"] as const
|
|
3
|
+
|
|
4
|
+
export type ArtifactKind = (typeof ARTIFACT_KINDS)[number]
|
|
5
|
+
|
|
6
|
+
export function isArtifactKind(value: unknown): value is ArtifactKind {
|
|
7
|
+
return typeof value === "string" && (ARTIFACT_KINDS as readonly string[]).includes(value)
|
|
8
|
+
}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
/** What one version may hold. Publishing refuses a version over any of these. */
|
|
2
|
+
export const ARTIFACT_LIMITS = {
|
|
3
|
+
maxFiles: 200,
|
|
4
|
+
maxFileBytes: 25 * 1024 * 1024,
|
|
5
|
+
maxVersionBytes: 100 * 1024 * 1024,
|
|
6
|
+
maxPathLength: 512,
|
|
7
|
+
maxTitleLength: 200,
|
|
8
|
+
/** A document's Markdown is parsed whole when it is published. */
|
|
9
|
+
maxDocumentBytes: 2 * 1024 * 1024,
|
|
10
|
+
maxThemeBytes: 4 * 1024,
|
|
11
|
+
maxWorkbookBytes: 256 * 1024,
|
|
12
|
+
/** A sheet's limits keep the grid quick and its charts readable. */
|
|
13
|
+
maxSheets: 20,
|
|
14
|
+
maxSheetRows: 100_000,
|
|
15
|
+
/** The viewer reads a sheet whole, and reads at most this much. */
|
|
16
|
+
maxSheetFileBytes: 5 * 1024 * 1024,
|
|
17
|
+
maxSheetColumns: 200,
|
|
18
|
+
maxCharts: 10,
|
|
19
|
+
maxChartSeries: 5,
|
|
20
|
+
/** One slice per theme chart color, so no two slices share one. */
|
|
21
|
+
maxPieSlices: 5,
|
|
22
|
+
/** A deck's `index.html` is parsed whole when it is published. */
|
|
23
|
+
maxDeckBytes: 2 * 1024 * 1024,
|
|
24
|
+
maxSlides: 100,
|
|
25
|
+
/** `artifact:` addresses one version may use. */
|
|
26
|
+
maxReferences: 200,
|
|
27
|
+
} as const
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* What a version contains, read from its files when it is published. Addresses resolve against
|
|
3
|
+
* it, and previews and hover cards show it without opening the files.
|
|
4
|
+
*/
|
|
5
|
+
export type ArtifactOutline = DocumentOutline | SheetOutline | SlidesOutline | FileOutline
|
|
6
|
+
|
|
7
|
+
export interface DocumentOutline {
|
|
8
|
+
readonly kind: "document"
|
|
9
|
+
readonly headings: readonly DocumentHeading[]
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
export interface DocumentHeading {
|
|
13
|
+
readonly depth: number
|
|
14
|
+
readonly text: string
|
|
15
|
+
/** What `#part` names in an address to this section. */
|
|
16
|
+
readonly slug: string
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
export interface SheetOutline {
|
|
20
|
+
readonly kind: "sheet"
|
|
21
|
+
readonly sheets: readonly SheetSummary[]
|
|
22
|
+
/** The names of the charts declared in the workbook. */
|
|
23
|
+
readonly charts: readonly string[]
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
export interface SheetSummary {
|
|
27
|
+
readonly name: string
|
|
28
|
+
readonly rows: number
|
|
29
|
+
readonly columns: readonly string[]
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
export interface SlidesOutline {
|
|
33
|
+
readonly kind: "slides"
|
|
34
|
+
/** One entry per slide, in order; the title is the slide's first heading. */
|
|
35
|
+
readonly slides: readonly { readonly title?: string }[]
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
export interface FileOutline {
|
|
39
|
+
readonly kind: "file"
|
|
40
|
+
readonly mediaType: string
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
/**
|
|
44
|
+
* Turns a document's heading texts, in order, into their section slugs: lowercase, punctuation
|
|
45
|
+
* dropped, spaces as hyphens, and `-1`, `-2` after a repeat. Publishing and the renderer both name
|
|
46
|
+
* sections with it, so an address to a section finds the heading the reader sees.
|
|
47
|
+
*/
|
|
48
|
+
export function createHeadingSlugger(): (text: string) => string {
|
|
49
|
+
const used = new Set<string>()
|
|
50
|
+
return (text) => {
|
|
51
|
+
const base =
|
|
52
|
+
text
|
|
53
|
+
.trim()
|
|
54
|
+
.toLowerCase()
|
|
55
|
+
.replace(/[^\p{L}\p{N}\s_-]/gu, "")
|
|
56
|
+
.replace(/\s+/g, "-") || "section"
|
|
57
|
+
let slug = base
|
|
58
|
+
for (let repeat = 1; used.has(slug); repeat += 1) slug = `${base}-${repeat}`
|
|
59
|
+
used.add(slug)
|
|
60
|
+
return slug
|
|
61
|
+
}
|
|
62
|
+
}
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
import { statFileRef } from "../../blob-storage/file-content"
|
|
2
|
+
import type { BlobStorage } from "../../blob-storage/types"
|
|
3
|
+
import { isValidFileRef } from "../../blob-storage/validation"
|
|
4
|
+
import type { ArtifactFile } from "../../storage/artifacts/types"
|
|
5
|
+
import { ArtifactRequestError } from "../errors"
|
|
6
|
+
import { ARTIFACT_LIMITS } from "../limits"
|
|
7
|
+
|
|
8
|
+
export type ArtifactBlobStorage = Pick<BlobStorage, "stat" | "open">
|
|
9
|
+
|
|
10
|
+
/**
|
|
11
|
+
* Checks a version's files before anything reads them: safe unique paths, the per-version limits,
|
|
12
|
+
* and stored bytes that match each reference.
|
|
13
|
+
*/
|
|
14
|
+
export async function checkArtifactFiles(
|
|
15
|
+
blobStorage: ArtifactBlobStorage,
|
|
16
|
+
files: readonly ArtifactFile[]
|
|
17
|
+
): Promise<void> {
|
|
18
|
+
if (files.length === 0) throw invalidArtifact("A version needs at least one file.")
|
|
19
|
+
if (files.length > ARTIFACT_LIMITS.maxFiles) {
|
|
20
|
+
throw invalidArtifact(
|
|
21
|
+
`A version holds at most ${ARTIFACT_LIMITS.maxFiles} files; this one has ${files.length}.`
|
|
22
|
+
)
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
const paths = new Set<string>()
|
|
26
|
+
let totalBytes = 0
|
|
27
|
+
for (const entry of files) {
|
|
28
|
+
if (!isArtifactPath(entry.path)) {
|
|
29
|
+
throw invalidArtifact(
|
|
30
|
+
`'${entry.path}' is not a usable file path: use a relative path with / separators, no . or .. segments, and at most ${ARTIFACT_LIMITS.maxPathLength} characters.`
|
|
31
|
+
)
|
|
32
|
+
}
|
|
33
|
+
if (paths.has(entry.path)) throw invalidArtifact(`'${entry.path}' appears twice.`)
|
|
34
|
+
paths.add(entry.path)
|
|
35
|
+
if (!isValidFileRef(entry.file)) {
|
|
36
|
+
throw invalidArtifact(`'${entry.path}' does not have a valid file reference.`)
|
|
37
|
+
}
|
|
38
|
+
if (entry.file.sizeBytes > ARTIFACT_LIMITS.maxFileBytes) {
|
|
39
|
+
throw invalidArtifact(
|
|
40
|
+
`'${entry.path}' is ${entry.file.sizeBytes} bytes; a file may be at most ${ARTIFACT_LIMITS.maxFileBytes}.`
|
|
41
|
+
)
|
|
42
|
+
}
|
|
43
|
+
totalBytes += entry.file.sizeBytes
|
|
44
|
+
}
|
|
45
|
+
if (totalBytes > ARTIFACT_LIMITS.maxVersionBytes) {
|
|
46
|
+
throw invalidArtifact(
|
|
47
|
+
`The files total ${totalBytes} bytes; a version may hold at most ${ARTIFACT_LIMITS.maxVersionBytes}.`
|
|
48
|
+
)
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
const stored = await Promise.all(files.map((entry) => statFileRef(blobStorage, entry.file)))
|
|
52
|
+
const missing = files.find((_, index) => !stored[index])
|
|
53
|
+
if (missing) throw invalidArtifact(`'${missing.path}' refers to a file that is not stored.`)
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
/** The file at `path`, read as UTF-8 text when it is no larger than `maxBytes`. */
|
|
57
|
+
export async function readArtifactText(
|
|
58
|
+
blobStorage: ArtifactBlobStorage,
|
|
59
|
+
file: ArtifactFile,
|
|
60
|
+
maxBytes: number
|
|
61
|
+
): Promise<string> {
|
|
62
|
+
if (file.file.sizeBytes > maxBytes) {
|
|
63
|
+
throw invalidArtifact(
|
|
64
|
+
`'${file.path}' is ${file.file.sizeBytes} bytes; it may be at most ${maxBytes}.`
|
|
65
|
+
)
|
|
66
|
+
}
|
|
67
|
+
const text = await new Response(await blobStorage.open(file.file.blobId)).text()
|
|
68
|
+
// A byte-order mark is not part of the text.
|
|
69
|
+
return text.charCodeAt(0) === 0xfeff ? text.slice(1) : text
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
/** Relative, `/`-separated, no empty, `.`, or `..` segment, no backslash or control character. */
|
|
73
|
+
export function isArtifactPath(path: string): boolean {
|
|
74
|
+
return (
|
|
75
|
+
typeof path === "string" &&
|
|
76
|
+
path.length > 0 &&
|
|
77
|
+
path.length <= ARTIFACT_LIMITS.maxPathLength &&
|
|
78
|
+
!path.startsWith("/") &&
|
|
79
|
+
!path.includes("\\") &&
|
|
80
|
+
!/[\u0000-\u001f\u007f]/.test(path) &&
|
|
81
|
+
path.split("/").every((segment) => segment.length > 0 && segment !== "." && segment !== "..")
|
|
82
|
+
)
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
export function invalidArtifact(message: string): ArtifactRequestError {
|
|
86
|
+
return new ArtifactRequestError("invalid_artifact", `[Sixb] ${message}`)
|
|
87
|
+
}
|