@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,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
|
-
"sources": ["../src/auth/access-tokens.ts", "../src/auth/client-address.ts", "../src/auth/csrf.ts", "../src/auth/runtime.ts", "../src/security/every.ts", "../src/actions/errors.ts", "../src/actions/validation.ts", "../src/shares/errors.ts", "../src/shares/builders.ts", "../src/security/grants.ts", "../src/security/registry.ts", "../src/storage/auth/errors.ts", "../src/storage/auth/in-memory/shared.ts", "../src/storage/auth/in-memory/access-tokens.ts", "../src/storage/auth/types.ts", "../src/storage/auth/in-memory/device-authorizations.ts", "../src/storage/auth/in-memory/group-memberships.ts", "../src/storage/auth/in-memory/identities.ts", "../src/storage/pagination.ts", "../src/storage/auth/in-memory/invitations.ts", "../src/storage/auth/in-memory/magic-links.ts", "../src/storage/auth/in-memory/oidc-attempts.ts", "../src/storage/auth/in-memory/service-account-group-memberships.ts", "../src/storage/auth/in-memory/service-accounts.ts", "../src/storage/auth/in-memory/sessions.ts", "../src/storage/auth/in-memory/users.ts", "../src/storage/auth/in-memory/auth-storage.ts", "../src/auth/session-cache.ts", "../src/auth/sessions.ts", "../src/auth/types.ts"],
|
|
3
|
+
"sources": ["../src/auth/access-tokens.ts", "../src/auth/client-address.ts", "../src/auth/csrf.ts", "../src/auth/runtime.ts", "../src/security/every.ts", "../src/actions/errors.ts", "../src/actions/validation.ts", "../src/shares/errors.ts", "../src/shares/builders.ts", "../src/security/grants.ts", "../src/security/project.ts", "../src/security/registry.ts", "../src/storage/auth/errors.ts", "../src/storage/auth/in-memory/shared.ts", "../src/storage/auth/in-memory/access-tokens.ts", "../src/storage/auth/types.ts", "../src/storage/auth/in-memory/device-authorizations.ts", "../src/storage/auth/in-memory/group-memberships.ts", "../src/storage/auth/in-memory/identities.ts", "../src/storage/pagination.ts", "../src/storage/auth/in-memory/invitations.ts", "../src/storage/auth/in-memory/magic-links.ts", "../src/storage/auth/in-memory/oidc-attempts.ts", "../src/storage/auth/in-memory/service-account-group-memberships.ts", "../src/storage/auth/in-memory/service-accounts.ts", "../src/storage/auth/in-memory/sessions.ts", "../src/storage/auth/in-memory/users.ts", "../src/storage/auth/in-memory/auth-storage.ts", "../src/auth/session-cache.ts", "../src/auth/sessions.ts", "../src/auth/types.ts"],
|
|
4
4
|
"sourcesContent": [
|
|
5
5
|
"import { createHash, randomBytes, randomUUID } from \"node:crypto\"\n\nexport const PERSONAL_ACCESS_TOKEN_PREFIX = \"sixb_pat\"\nexport const SERVICE_ACCOUNT_ACCESS_TOKEN_PREFIX = \"sixb_sat\"\n\n// The token prefix makes credentials self-identifying for operators and logs.\n// Validity, revocation, expiration, and permissions still come from storage.\nexport type AccessTokenKind = \"personal\" | \"serviceAccount\"\n\nexport interface AccessTokenParts {\n readonly kind: AccessTokenKind\n readonly tokenId: string\n readonly tokenSecret: string\n}\n\nexport interface AccessTokenCredential extends AccessTokenParts {\n readonly tokenHash: string\n readonly tokenValue: string\n}\n\nconst ACCESS_TOKEN_ID_PATTERN = /^tok_[A-Za-z0-9_-]+$/\nconst ACCESS_TOKEN_SECRET_PATTERN = /^[A-Za-z0-9_-]{32,}$/\n\nexport function generateAccessTokenSecret(): string {\n return randomBytes(32).toString(\"base64url\")\n}\n\nexport function hashAccessTokenSecret(secret: string): string {\n return createHash(\"sha256\").update(secret).digest(\"hex\")\n}\n\nexport function formatAccessTokenValue(\n kind: AccessTokenKind,\n tokenId: string,\n tokenSecret: string\n): string {\n const prefix = accessTokenPrefixForKind(kind)\n\n if (!ACCESS_TOKEN_ID_PATTERN.test(tokenId)) {\n throw new Error(\"[Sixb] Access token ids must start with 'tok_' and be URL-safe.\")\n }\n\n if (!ACCESS_TOKEN_SECRET_PATTERN.test(tokenSecret)) {\n throw new Error(\"[Sixb] Access token secrets must be at least 32 URL-safe characters.\")\n }\n\n return `${prefix}_${tokenId}.${tokenSecret}`\n}\n\nexport function parseAccessTokenValue(value: string | undefined): AccessTokenParts | null {\n // Parsing is intentionally non-throwing so auth paths can treat malformed\n // credentials exactly like missing credentials.\n if (!value) {\n return null\n }\n\n const firstDot = value.indexOf(\".\")\n if (firstDot <= 0 || firstDot !== value.lastIndexOf(\".\") || firstDot === value.length - 1) {\n return null\n }\n\n const tokenLabel = value.slice(0, firstDot)\n const tokenSecret = value.slice(firstDot + 1)\n const kind = accessTokenKindFromLabel(tokenLabel)\n if (!kind || !ACCESS_TOKEN_SECRET_PATTERN.test(tokenSecret)) {\n return null\n }\n\n const tokenId = tokenLabel.slice(`${accessTokenPrefixForKind(kind)}_`.length)\n if (!ACCESS_TOKEN_ID_PATTERN.test(tokenId)) {\n return null\n }\n\n return { kind, tokenId, tokenSecret }\n}\n\nexport function getBearerAccessTokenValue(request: Request): string | null {\n const header = request.headers.get(\"authorization\")\n if (!header) {\n return null\n }\n\n const [scheme, token, extra] = header.trim().split(/\\s+/)\n if (scheme?.toLowerCase() !== \"bearer\" || !token || extra) {\n return null\n }\n\n return token\n}\n\nexport function createAccessTokenCredential(\n kind: AccessTokenKind,\n tokenId = `tok_${randomUUID()}`\n): AccessTokenCredential {\n const tokenSecret = generateAccessTokenSecret()\n // Callers should return tokenValue once, then persist only tokenHash.\n return {\n kind,\n tokenId,\n tokenSecret,\n tokenHash: hashAccessTokenSecret(tokenSecret),\n tokenValue: formatAccessTokenValue(kind, tokenId, tokenSecret),\n }\n}\n\nfunction accessTokenPrefixForKind(kind: AccessTokenKind): string {\n switch (kind) {\n case \"personal\":\n return PERSONAL_ACCESS_TOKEN_PREFIX\n case \"serviceAccount\":\n return SERVICE_ACCOUNT_ACCESS_TOKEN_PREFIX\n }\n}\n\nfunction accessTokenKindFromLabel(label: string): AccessTokenKind | null {\n if (label.startsWith(`${PERSONAL_ACCESS_TOKEN_PREFIX}_`)) {\n return \"personal\"\n }\n\n if (label.startsWith(`${SERVICE_ACCOUNT_ACCESS_TOKEN_PREFIX}_`)) {\n return \"serviceAccount\"\n }\n\n return null\n}\n",
|
|
6
6
|
"// The server resolves each request's client address once, at the socket, from the peer address\n// and the forwarding headers its trusted proxies wrote. Everything else reads it from here and\n// never parses forwarding headers itself: a client can write any value into them.\nconst clientAddresses = new WeakMap<Request, string>()\n\nexport function setRequestClientAddress(request: Request, address: string): void {\n clientAddresses.set(request, address)\n}\n\nexport function getRequestClientAddress(request: Request): string | undefined {\n return clientAddresses.get(request)\n}\n",
|
|
@@ -11,12 +11,13 @@
|
|
|
11
11
|
"import type { ValueType } from \"../ontology\"\nimport { OntologyValidationError } from \"../ontology/errors\"\nimport type { ObjectTypeWithPropertyTokens } from \"../ontology/tokens\"\nimport { assertValidFileRefs } from \"../ontology/validation\"\nimport { coerceParamsToTyped, normalizeParams } from \"../shared/params/validation\"\nimport type { ActionRunParams } from \"../storage/action-runs\"\nimport { ActionDefinitionError } from \"./errors\"\nimport type {\n ActionDefinition,\n ActionParamsConfig,\n ActionSubject,\n GlobalActionDefinition,\n ObjectActionDefinition,\n} from \"./types\"\n\ninterface ActionValidationRuntime {\n readonly ontology: {\n getValueTypesById(): ReadonlyMap<string, ValueType>\n resolveObjectType(objectTypeId: string): ObjectTypeWithPropertyTokens\n }\n readonly actionRegistry: {\n listForType(objectType: ObjectTypeWithPropertyTokens): readonly ObjectActionDefinition[]\n }\n}\n\nexport function assertNonEmpty(value: string, field: string): void {\n if (!value.trim()) {\n throw new ActionDefinitionError(`Action ${field} must not be empty.`)\n }\n}\n\nexport function isActionDefinition(value: unknown): value is ActionDefinition {\n const binding = (value as { binding?: { kind?: unknown } } | null)?.binding\n return (\n typeof value === \"object\" &&\n value !== null &&\n (value as { kind?: unknown }).kind === \"action\" &&\n (binding?.kind === \"global\" || binding?.kind === \"object\")\n )\n}\n\nexport function isGlobalActionDefinition(value: ActionDefinition): value is GlobalActionDefinition {\n return value.binding.kind === \"global\"\n}\n\nexport function isObjectActionDefinition(value: ActionDefinition): value is ObjectActionDefinition {\n return value.binding.kind === \"object\"\n}\n\nexport function normalizeActionParams(\n runtime: Pick<ActionValidationRuntime, \"ontology\">,\n paramsConfig: ActionParamsConfig,\n params: Record<string, unknown>,\n pathPrefix: string\n): ActionRunParams {\n const normalized = normalizeParams(runtime.ontology.getValueTypesById(), paramsConfig, params, {\n kind: \"action\",\n id: pathPrefix,\n })\n assertValidFileRefs(normalized, pathPrefix)\n return normalized\n}\n\n/**\n * Re-hydrate stored action params for the handler-facing surface. Params are\n * normalized to JSON (e.g. `date`/`timestamp` -> ISO string) for storage; action\n * handler types promise `Date` for those, so this converts them back before the\n * handler runs. `objectRef` params pass through unchanged.\n */\nexport function coerceActionParamsToTyped(\n paramsConfig: ActionParamsConfig,\n params: Record<string, unknown>,\n valueTypesById: ReadonlyMap<string, ValueType>\n): Record<string, unknown> {\n return coerceParamsToTyped(paramsConfig, params, valueTypesById)\n}\n\nexport function validateActionSubject(action: ActionDefinition, subject: ActionSubject): void {\n if (isGlobalActionDefinition(action) && subject.kind !== \"none\") {\n throw new OntologyValidationError(`Action '${action.id}' does not accept an object subject.`)\n }\n}\n\nexport function resolveObjectActionSubject(params: {\n readonly runtime: ActionValidationRuntime\n readonly action: ObjectActionDefinition\n readonly subject: ActionSubject\n}): ObjectTypeWithPropertyTokens {\n const { runtime, action, subject } = params\n\n if (subject.kind !== \"object\") {\n throw new OntologyValidationError(`Action '${action.id}' requires an object subject.`)\n }\n\n const objectType = runtime.ontology.resolveObjectType(subject.objectTypeId)\n if (!actionAppliesToObjectType(runtime, action, objectType)) {\n throw new OntologyValidationError(\n `Action '${action.id}' is not valid for object type '${objectType.id}'.`\n )\n }\n\n return objectType\n}\n\nfunction actionAppliesToObjectType(\n runtime: Pick<ActionValidationRuntime, \"actionRegistry\">,\n action: ObjectActionDefinition,\n objectType: ObjectTypeWithPropertyTokens\n): boolean {\n return runtime.actionRegistry\n .listForType(objectType)\n .some((candidate) => candidate.id === action.id)\n}\n",
|
|
12
12
|
"export class ShareDefinitionError extends Error {\n readonly name = \"ShareDefinitionError\"\n}\n",
|
|
13
13
|
"import type { ObjectActionDefinition } from \"../actions\"\nimport type { ObjectTypeWithPropertyTokens } from \"../ontology\"\nimport {\n type LinkPathSelection,\n type LinkPathSelectionInput,\n type LinkPathSelectionMode,\n snapshotLinkPathSelection,\n} from \"../ontology/link-path-selection\"\nimport { ShareDefinitionError } from \"./errors\"\nimport type {\n DefineShareOptions,\n ShareActionGrant,\n ShareDefinition,\n ShareScopeGrant,\n ShareTarget,\n ShareViewGrant,\n ShareViewGrantBuilder,\n} from \"./types\"\n\nconst shareTargets = new WeakSet<object>()\n\nexport function defineShare<\n const TId extends string,\n const TTarget extends ObjectTypeWithPropertyTokens,\n const TGrants extends readonly ShareScopeGrant[],\n>(id: TId, options: DefineShareOptions<TTarget, TGrants>): ShareDefinition<TId, TTarget[\"id\"]> {\n assertNonEmpty(id, \"Share id\")\n if (!isObjectType(options.target)) {\n throw invalid(`Share '${id}' target must be an object type.`)\n }\n if (typeof options.grants !== \"function\") {\n throw invalid(`Share '${id}' grants must be a function.`)\n }\n if (options.description !== undefined && typeof options.description !== \"string\") {\n throw invalid(`Share '${id}' description must be a string.`)\n }\n\n const target = createShareTarget(options.target.id)\n let authoredGrants: readonly unknown[]\n try {\n authoredGrants = options.grants({ target })\n } catch (error) {\n if (error instanceof ShareDefinitionError) throw error\n const reason = error instanceof Error ? error.message.replace(/^\\[Sixb\\] /, \"\") : String(error)\n throw invalid(`Share '${id}' grants are invalid: ${reason}`)\n }\n if (!Array.isArray(authoredGrants) || authoredGrants.length === 0) {\n throw invalid(`Share '${id}' must declare at least one grant.`)\n }\n const grants = snapshotShareGrants(id, options.target.id, authoredGrants)\n\n return Object.freeze({\n kind: \"share\" as const,\n id,\n target: Object.freeze({ kind: \"object\" as const, objectTypeId: options.target.id }),\n grants,\n ...(options.description === undefined ? {} : { description: options.description }),\n })\n}\n\nexport function isShareDefinition(value: unknown): value is ShareDefinition {\n if (!isRecord(value) || value.kind !== \"share\" || !isNonEmpty(value.id)) return false\n if (\n !isRecord(value.target) ||\n value.target.kind !== \"object\" ||\n !isNonEmpty(value.target.objectTypeId)\n ) {\n return false\n }\n return Array.isArray(value.grants)\n}\n\n/** @internal Validate, canonicalize, and detach a definition before runtime registration/use. */\nexport function snapshotShareDefinition(value: unknown): ShareDefinition {\n try {\n if (!isRecord(value)) {\n throw invalid(\"Share definition kind must be 'share'.\")\n }\n const kind = value.kind\n const authoredId = value.id\n const target = value.target\n const authoredGrants = value.grants\n const description = value.description\n if (kind !== \"share\") {\n throw invalid(\"Share definition kind must be 'share'.\")\n }\n const id = nonEmpty(authoredId, \"Share id\")\n if (!isRecord(target)) {\n throw invalid(`Share '${id}' target must be an object type.`)\n }\n const targetKind = target.kind\n const authoredObjectTypeId = target.objectTypeId\n if (targetKind !== \"object\" || !isNonEmpty(authoredObjectTypeId)) {\n throw invalid(`Share '${id}' target must be an object type.`)\n }\n if (!Array.isArray(authoredGrants) || authoredGrants.length === 0) {\n throw invalid(`Share '${id}' must declare grants.`)\n }\n if (description !== undefined && typeof description !== \"string\") {\n throw invalid(`Share '${id}' description must be a string.`)\n }\n\n const objectTypeId = authoredObjectTypeId\n return Object.freeze({\n kind: \"share\" as const,\n id,\n target: Object.freeze({ kind: \"object\" as const, objectTypeId }),\n grants: snapshotShareGrants(id, objectTypeId, authoredGrants),\n ...(description === undefined ? {} : { description }),\n })\n } catch (error) {\n if (error instanceof ShareDefinitionError) throw error\n const reason = error instanceof Error ? error.message.replace(/^\\[Sixb\\] /, \"\") : String(error)\n throw invalid(`Share definition is invalid: ${reason}`)\n }\n}\n\n/** @internal Contextual overload used by `can.view(target)`. */\nexport function isShareTarget(value: unknown): value is ShareTarget {\n return typeof value === \"object\" && value !== null && shareTargets.has(value)\n}\n\n/** @internal Contextual overload used by `can.view(target)`. */\nexport function createShareViewGrant<TObjectTypeId extends string>(\n target: ShareTarget<TObjectTypeId>\n): ShareViewGrantBuilder<TObjectTypeId> {\n assertShareTarget(target)\n return createShareViewGrantWithLinks(target.objectTypeId, Object.freeze({ kind: \"none\" }))\n}\n\n/** @internal Contextual overload used by `can.apply(action).on(target)`. */\nexport function createShareActionGrant<TAction extends ObjectActionDefinition>(\n action: TAction,\n target: ShareTarget<TAction[\"binding\"][\"objectType\"][\"id\"]>\n): ShareActionGrant<TAction[\"id\"], TAction[\"binding\"][\"objectType\"][\"id\"]> {\n assertShareTarget(target)\n const objectTypeId = action.binding.objectType.id\n if (target.objectTypeId !== objectTypeId) {\n throw invalid(\n `Action '${action.id}' is defined on '${objectTypeId}', not Share target '${target.objectTypeId}'. Shared Actions are exact-type only in V1.`\n )\n }\n return Object.freeze({\n kind: \"action.apply\" as const,\n actionId: action.id,\n subjectObjectTypeId: target.objectTypeId,\n })\n}\n\nfunction createShareTarget<TObjectTypeId extends string>(\n objectTypeId: TObjectTypeId\n): ShareTarget<TObjectTypeId> {\n const target = { objectTypeId } as ShareTarget<TObjectTypeId>\n shareTargets.add(target)\n return Object.freeze(target)\n}\n\nfunction createShareViewGrantWithLinks<TObjectTypeId extends string>(\n targetObjectTypeId: TObjectTypeId,\n links: LinkPathSelectionMode\n): ShareViewGrantBuilder<TObjectTypeId> {\n const grant = {\n kind: \"object.view\" as const,\n targetObjectTypeId,\n links,\n } as ShareViewGrantBuilder<TObjectTypeId>\n Object.defineProperty(grant, \"withLinks\", {\n configurable: false,\n enumerable: false,\n writable: false,\n value: (...args: [links?: readonly LinkPathSelectionInput<TObjectTypeId>[]]) => {\n if (args.length === 0) {\n return freezeViewGrant(targetObjectTypeId, Object.freeze({ kind: \"all\" }))\n }\n const selected = args[0]\n if (!Array.isArray(selected)) {\n throw invalid(\"withLinks(...) expects an array, or no argument for every direct link.\")\n }\n return freezeViewGrant(\n targetObjectTypeId,\n Object.freeze({\n kind: \"selected\" as const,\n links: Object.freeze(selected.map(snapshotLinkPathSelection)),\n })\n )\n },\n })\n return Object.freeze(grant)\n}\n\nfunction freezeViewGrant<TObjectTypeId extends string>(\n targetObjectTypeId: TObjectTypeId,\n links: LinkPathSelectionMode\n): ShareViewGrant<TObjectTypeId> {\n return Object.freeze({ kind: \"object.view\" as const, targetObjectTypeId, links })\n}\n\nfunction snapshotShareGrants(\n shareId: string,\n targetObjectTypeId: string,\n authored: readonly unknown[]\n): readonly ShareScopeGrant[] {\n const grants: ShareScopeGrant[] = []\n const actionIds = new Set<string>()\n let viewCount = 0\n\n for (let index = 0; index < authored.length; index += 1) {\n const grant = authored[index]\n if (!isRecord(grant)) {\n throw invalid(`Share '${shareId}' grant ${index} must come from 'can'.`)\n }\n const kind = grant.kind\n if (kind === \"object.view\") {\n const authoredTargetObjectTypeId = grant.targetObjectTypeId\n const links = grant.links\n if (authoredTargetObjectTypeId !== targetObjectTypeId) {\n throw invalid(`Share '${shareId}' view grant must use its contextual target.`)\n }\n viewCount += 1\n if (viewCount > 1) {\n throw invalid(`Share '${shareId}' must declare exactly one view grant.`)\n }\n grants.push(\n Object.freeze({\n kind: \"object.view\" as const,\n targetObjectTypeId,\n links: snapshotLinkMode(links),\n })\n )\n continue\n }\n if (kind === \"action.apply\") {\n const actionId = grant.actionId\n const subjectObjectTypeId = grant.subjectObjectTypeId\n if (!isNonEmpty(actionId) || subjectObjectTypeId !== targetObjectTypeId) {\n throw invalid(`Share '${shareId}' action grant must apply to its contextual target.`)\n }\n if (actionIds.has(actionId)) {\n throw invalid(`Share '${shareId}' contains duplicate action '${actionId}'.`)\n }\n actionIds.add(actionId)\n grants.push(\n Object.freeze({\n kind: \"action.apply\" as const,\n actionId,\n subjectObjectTypeId: targetObjectTypeId,\n })\n )\n continue\n }\n throw invalid(`Share '${shareId}' grant ${index} must come from 'can'.`)\n }\n\n if (viewCount !== 1) {\n throw invalid(`Share '${shareId}' must declare exactly one can.view(target) grant.`)\n }\n return Object.freeze(grants)\n}\n\nfunction snapshotLinkMode(value: unknown): LinkPathSelectionMode {\n if (!isRecord(value)) throw invalid(\"Share link selection must be an object.\")\n const kind = value.kind\n const links = value.links\n if (kind === \"none\" || kind === \"all\") {\n return Object.freeze({ kind })\n }\n if (kind !== \"selected\" || !Array.isArray(links)) {\n throw invalid(\"Share link selection must be none, all, or selected links.\")\n }\n if (links.length === 0) {\n throw invalid(\"withLinks([]) is empty; omit withLinks() when no links should be shared.\")\n }\n try {\n return Object.freeze({\n kind: \"selected\" as const,\n links: snapshotLinkPaths(links),\n })\n } catch (error) {\n if (error instanceof ShareDefinitionError) throw error\n const reason = error instanceof Error ? error.message.replace(/^\\[Sixb\\] /, \"\") : String(error)\n throw invalid(`Share link selection is invalid: ${reason}`)\n }\n}\n\nfunction snapshotLinkPaths(values: readonly unknown[]): readonly LinkPathSelection[] {\n const byKey = new Map<string, LinkPathSelection>()\n for (const value of values) {\n const captured = canonicalizeLinkPath(\n snapshotLinkPathSelection(value as LinkPathSelectionInput)\n )\n const key = JSON.stringify([captured.sourceObjectTypeId, captured.linkId])\n const current = byKey.get(key)\n if (!current) {\n byKey.set(key, captured)\n continue\n }\n if (!sameLinkTargets(current.targetObjectTypeId, captured.targetObjectTypeId)) {\n throw invalid(\n `Link '${captured.sourceObjectTypeId}.${captured.linkId}' declares inconsistent targets.`\n )\n }\n byKey.set(\n key,\n Object.freeze({\n ...current,\n selection: mergeLinkModes(current.selection, captured.selection),\n })\n )\n }\n return Object.freeze([...byKey.values()])\n}\n\nfunction canonicalizeLinkPath(value: LinkPathSelection): LinkPathSelection {\n return Object.freeze({\n ...value,\n selection:\n value.selection.kind === \"selected\"\n ? Object.freeze({\n kind: \"selected\" as const,\n links: snapshotLinkPaths(value.selection.links),\n })\n : value.selection,\n })\n}\n\nfunction mergeLinkModes(\n left: LinkPathSelectionMode,\n right: LinkPathSelectionMode\n): LinkPathSelectionMode {\n if (left.kind === \"all\" || right.kind === \"all\") return Object.freeze({ kind: \"all\" })\n if (left.kind === \"none\") return right\n if (right.kind === \"none\") return left\n return Object.freeze({\n kind: \"selected\" as const,\n links: snapshotLinkPaths([...left.links, ...right.links]),\n })\n}\n\nfunction sameLinkTargets(\n left: string | readonly string[],\n right: string | readonly string[]\n): boolean {\n if (typeof left === \"string\" || typeof right === \"string\") return left === right\n return left.length === right.length && left.every((value, index) => value === right[index])\n}\n\nfunction assertShareTarget(value: unknown): asserts value is ShareTarget {\n if (!isShareTarget(value)) {\n throw invalid(\"Shared grants must use the target provided by defineShare(...).\")\n }\n}\n\nfunction isObjectType(value: unknown): value is ObjectTypeWithPropertyTokens {\n return (\n isRecord(value) &&\n isNonEmpty(value.id) &&\n Array.isArray(value.properties) &&\n Array.isArray(value.links)\n )\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === \"object\" && value !== null && !Array.isArray(value)\n}\n\nfunction isNonEmpty(value: unknown): value is string {\n return typeof value === \"string\" && value.trim().length > 0\n}\n\nfunction assertNonEmpty(value: unknown, field: string): asserts value is string {\n if (!isNonEmpty(value)) throw invalid(`${field} must not be empty.`)\n}\n\nfunction nonEmpty(value: unknown, field: string): string {\n assertNonEmpty(value, field)\n return value\n}\n\nfunction invalid(message: string): ShareDefinitionError {\n return new ShareDefinitionError(`[Sixb] ${message}`)\n}\n",
|
|
14
|
-
"/**\n * Grant builders for role definitions.\n *\n * Grants are plain data referencing runtime definitions\n * by id. They carry no enforcement logic — the authorization engine expands\n * each grant's selection into per-principal id sets at startup, so runtime\n * checks stay simple `set.has(id)` lookups.\n */\n\nimport type { ActionDefinition, ObjectActionDefinition } from \"../actions/types\"\nimport { isObjectActionDefinition } from \"../actions/validation\"\nimport type { AgentReference, AgentUsageReference } from \"../agents/types\"\nimport type { ConnectorDefinition } from \"../connectors\"\nimport type { DatasetDefinition } from \"../datasets\"\nimport type { ObjectType } from \"../ontology\"\nimport type { PipelineDefinition } from \"../pipelines\"\nimport { createShareActionGrant, createShareViewGrant, isShareTarget } from \"../shares/builders\"\nimport type {\n ShareActionGrantBuilder,\n ShareDefinition,\n ShareTarget,\n ShareViewGrantBuilder,\n} from \"../shares/types\"\nimport type { SyncDefinition } from \"../syncs\"\nimport type { WorkflowDefinition } from \"../workflows/types\"\nimport { SecurityValidationError } from \"./errors\"\nimport {\n type BreadthSelector,\n type BreadthTarget,\n definitionIdOf,\n isBreadthSelector,\n} from \"./every\"\nimport type {\n AgentRunGrant,\n AppendGrant,\n ApplyGrant,\n EditGrant,\n ManageGrant,\n ObserveGrant,\n RunGrant,\n Selection,\n ShareGrant,\n ViewGrant,\n} from \"./types\"\n\ntype GrantInput<TDefinition, TTarget extends BreadthTarget> =\n | TDefinition\n | readonly TDefinition[]\n | BreadthSelector<TTarget>\n\nconst VIEW_TARGETS = [\"object\", \"dataset\"] as const\nconst RUN_TARGETS = [\"workflow\", \"sync\", \"pipeline\"] as const\n\n/**\n * Six of the eight targets carry a `kind` discriminant naming themselves. The other two — an\n * `ObjectType` and an `ActionDefinition` — carry none, and each appears in exactly one builder that\n * allows no other undiscriminated target, so the allowed set names them unambiguously.\n */\nconst TARGET_BY_DEFINITION_KIND: Readonly<Partial<Record<string, BreadthTarget>>> = {\n dataset: \"dataset\",\n sync: \"sync\",\n pipeline: \"pipeline\",\n workflow: \"workflow\",\n connector: \"connector\",\n share: \"share\",\n}\n\nconst UNDISCRIMINATED_TARGETS: readonly BreadthTarget[] = [\"object\", \"action\"]\n\nfunction targetOfDefinition<TTarget extends BreadthTarget>(\n item: unknown,\n label: string,\n allowedTargets: readonly TTarget[]\n): TTarget {\n const kind = (item as { readonly kind?: unknown } | null)?.kind\n const discriminated = typeof kind === \"string\" ? TARGET_BY_DEFINITION_KIND[kind] : undefined\n // Recognising the kind is not the same as accepting it. `can.run(myDataset)` used to return\n // `target: \"dataset\"`, and `GRANT_KINDS[\"run:dataset\"]` does not exist, so startup died on\n // `spec.universeKey` with a `TypeError` naming neither the role nor the definition.\n if (discriminated) {\n if (!isAllowedTarget(discriminated, allowedTargets)) {\n // \"one targeting x\", not \"a x definition\": object and action start with a vowel, and\n // this string ships in a release. Same reason the selector branch below writes no article.\n throw new SecurityValidationError(\n `[Sixb] ${label} accepts ${allowedTargets.join(\" or \")} definitions, but received one targeting ${discriminated}.`\n )\n }\n return discriminated\n }\n\n const candidates = allowedTargets.filter((target) => UNDISCRIMINATED_TARGETS.includes(target))\n const only = candidates.length === 1 ? candidates[0] : undefined\n if (only) return only\n\n throw new SecurityValidationError(\n `[Sixb] ${label} accepts ${allowedTargets.join(\" or \")} definitions, but received one Sixb could not classify.`\n )\n}\n\nfunction isAllowedTarget<TTarget extends BreadthTarget>(\n target: BreadthTarget,\n allowedTargets: readonly TTarget[]\n): target is TTarget {\n return (allowedTargets as readonly BreadthTarget[]).includes(target)\n}\n\n/**\n * Every grant resolves its target and selection here, in one pass, so the two cannot disagree.\n *\n * Typing alone is not enough: a JavaScript caller, or an `as any`, would otherwise hand `can.apply`\n * an `every.object()` and get a grant over the wrong universe. Sniffing only the first element of a\n * list was not enough either — `can.run([mySync, myPipeline])` filed the pipeline's id under\n * `run:sync`, and startup validation then reported it as an unknown *sync*.\n *\n * `TTarget` is what removes the casts at the call sites: each builder passes its own allowed targets\n * and gets exactly those back, so the narrowing is proved rather than asserted.\n */\nfunction resolveGrant<TDefinition extends { readonly id?: unknown }, TTarget extends BreadthTarget>(\n input: GrantInput<TDefinition, TTarget>,\n label: string,\n allowedTargets: readonly TTarget[]\n): { readonly target: TTarget; readonly selection: Selection } {\n if (isBreadthSelector(input)) {\n if (!isAllowedTarget(input.target, allowedTargets)) {\n throw new SecurityValidationError(\n `[Sixb] ${label} accepts ${allowedTargets.join(\" or \")} selectors, but received every.${input.target}().`\n )\n }\n return { target: input.target, selection: input.selection }\n }\n\n const items = Array.isArray(input) ? input : [input as TDefinition]\n\n let target: TTarget | undefined\n for (const item of items) {\n const itemTarget = targetOfDefinition(item, label, allowedTargets)\n if (target === undefined) {\n target = itemTarget\n continue\n }\n if (itemTarget !== target) {\n throw new SecurityValidationError(\n `[Sixb] ${label} requires one target per grant, but received both ${target} and ${itemTarget} definitions. Use one grant each.`\n )\n }\n }\n // Checked after the loop rather than before it: an empty list leaves `target` unset, which is the\n // same condition, and proving it here is what lets the return type stay cast-free.\n if (target === undefined) {\n throw new SecurityValidationError(`[Sixb] ${label} requires at least one definition.`)\n }\n\n // Dedupe explicit ids up front; resolution would dedupe via Set anyway.\n const ids = [...new Set(items.map((item) => definitionIdOf(item, label)))]\n return { target, selection: { all: false, ids } }\n}\n\nfunction view<const TObjectTypeId extends string>(\n input: ShareTarget<TObjectTypeId>\n): ShareViewGrantBuilder<TObjectTypeId>\nfunction view(input: GrantInput<ObjectType, \"object\">): ViewGrant<\"object\">\nfunction view(input: GrantInput<DatasetDefinition, \"dataset\">): ViewGrant<\"dataset\">\nfunction view(\n input: ShareTarget | GrantInput<ObjectType | DatasetDefinition, \"object\" | \"dataset\">\n): ViewGrant | ShareViewGrantBuilder {\n if (isShareTarget(input)) return createShareViewGrant(input)\n const { target, selection } = resolveGrant(input, \"can.view\", VIEW_TARGETS)\n return { kind: \"grant\", capability: \"view\", target, selection }\n}\n\nfunction edit(input: GrantInput<ObjectType, \"object\">): EditGrant {\n return {\n kind: \"grant\",\n capability: \"edit\",\n selection: resolveGrant(input, \"can.edit\", [\"object\"]).selection,\n }\n}\n\nfunction append(input: GrantInput<ObjectType, \"object\">): AppendGrant {\n return {\n kind: \"grant\",\n capability: \"append\",\n selection: resolveGrant(input, \"can.append\", [\"object\"]).selection,\n }\n}\n\nfunction apply<const TAction extends ObjectActionDefinition>(\n input: TAction\n): ApplyGrant & ShareActionGrantBuilder<TAction>\nfunction apply(input: GrantInput<ActionDefinition, \"action\">): ApplyGrant\nfunction apply(input: GrantInput<ActionDefinition, \"action\">): ApplyGrant {\n const grant: ApplyGrant = {\n kind: \"grant\",\n capability: \"apply\",\n selection: resolveGrant(input, \"can.apply\", [\"action\"]).selection,\n }\n // `Array.isArray` does not narrow a readonly array. This cast restores the branch already proved\n // above; every non-selector, non-array GrantInput is one Action definition.\n const one: ActionDefinition | undefined =\n Array.isArray(input) || isBreadthSelector(input) ? undefined : (input as ActionDefinition)\n if (one && isObjectActionDefinition(one)) {\n Object.defineProperty(grant, \"on\", {\n configurable: false,\n enumerable: false,\n writable: false,\n value: (target: ShareTarget) => createShareActionGrant(one, target),\n })\n }\n return grant\n}\n\nfunction share(input: GrantInput<ShareDefinition, \"share\">): ShareGrant {\n return {\n kind: \"grant\",\n capability: \"share\",\n selection: resolveGrant(input, \"can.share\", [\"share\"]).selection,\n }\n}\n\nfunction run(input: GrantInput<WorkflowDefinition, \"workflow\">): RunGrant<\"workflow\">\nfunction run(input: GrantInput<SyncDefinition, \"sync\">): RunGrant<\"sync\">\nfunction run(input: GrantInput<PipelineDefinition, \"pipeline\">): RunGrant<\"pipeline\">\nfunction run(input: AgentReference): AgentRunGrant\nfunction run(\n input:\n | AgentReference\n | GrantInput<\n WorkflowDefinition | SyncDefinition | PipelineDefinition,\n \"workflow\" | \"sync\" | \"pipeline\"\n >\n): RunGrant | AgentRunGrant {\n if (isAgentReference(input)) {\n return { kind: \"grant\", capability: \"run\", target: \"agent\" }\n }\n const { target, selection } = resolveGrant(input, \"can.run\", RUN_TARGETS)\n return { kind: \"grant\", capability: \"run\", target, selection }\n}\n\nfunction isAgentReference(input: unknown): input is AgentReference {\n return (\n typeof input === \"object\" &&\n input !== null &&\n !Array.isArray(input) &&\n !isBreadthSelector(input) &&\n \"kind\" in input &&\n input.kind === \"agent\"\n )\n}\n\nfunction isAgentUsageReference(input: unknown): input is AgentUsageReference {\n return (\n typeof input === \"object\" &&\n input !== null &&\n !Array.isArray(input) &&\n !isBreadthSelector(input) &&\n \"kind\" in input &&\n input.kind === \"aiUsage\"\n )\n}\n\nfunction observe(input: \"logs\" | AgentUsageReference): ObserveGrant {\n if (input !== \"logs\" && !isAgentUsageReference(input)) {\n throw new SecurityValidationError('[Sixb] can.observe accepts \"logs\" or agent.usage.')\n }\n return { kind: \"grant\", capability: \"observe\", target: input === \"logs\" ? \"logs\" : \"aiUsage\" }\n}\n\nfunction manage(input: GrantInput<ConnectorDefinition, \"connector\">): ManageGrant<\"connector\">\nfunction manage(input: AgentUsageReference): ManageGrant<\"aiUsage\">\nfunction manage(\n input: GrantInput<ConnectorDefinition, \"connector\"> | AgentUsageReference\n): ManageGrant {\n if (isAgentUsageReference(input)) {\n return { kind: \"grant\", capability: \"manage\", target: \"aiUsage\" }\n }\n return {\n kind: \"grant\",\n capability: \"manage\",\n target: \"connector\",\n selection: resolveGrant(input, \"can.manage\", [\"connector\"]).selection,\n }\n}\n\nexport const can = {\n view,\n edit,\n append,\n apply,\n share,\n run,\n observe,\n manage,\n}\n",
|
|
14
|
+
"/**\n * Grant builders for role definitions.\n *\n * Grants are plain data referencing runtime definitions\n * by id. They carry no enforcement logic — the authorization engine expands\n * each grant's selection into per-principal id sets at startup, so runtime\n * checks stay simple `set.has(id)` lookups.\n */\n\nimport type { ActionDefinition, ObjectActionDefinition } from \"../actions/types\"\nimport { isObjectActionDefinition } from \"../actions/validation\"\nimport type { AgentReference, AgentUsageReference } from \"../agents/types\"\nimport type { ConnectorDefinition } from \"../connectors\"\nimport type { DatasetDefinition } from \"../datasets\"\nimport type { ObjectType } from \"../ontology\"\nimport type { PipelineDefinition } from \"../pipelines\"\nimport { createShareActionGrant, createShareViewGrant, isShareTarget } from \"../shares/builders\"\nimport type {\n ShareActionGrantBuilder,\n ShareDefinition,\n ShareTarget,\n ShareViewGrantBuilder,\n} from \"../shares/types\"\nimport type { SyncDefinition } from \"../syncs\"\nimport type { WorkflowDefinition } from \"../workflows/types\"\nimport { SecurityValidationError } from \"./errors\"\nimport {\n type BreadthSelector,\n type BreadthTarget,\n definitionIdOf,\n isBreadthSelector,\n} from \"./every\"\nimport type {\n AgentRunGrant,\n AppendGrant,\n ApplyGrant,\n EditGrant,\n ManageGrant,\n ObserveGrant,\n ProjectSurfaceReference,\n RunGrant,\n Selection,\n ShareGrant,\n ViewGrant,\n} from \"./types\"\n\ntype GrantInput<TDefinition, TTarget extends BreadthTarget> =\n | TDefinition\n | readonly TDefinition[]\n | BreadthSelector<TTarget>\n\nconst VIEW_TARGETS = [\"object\", \"dataset\"] as const\nconst RUN_TARGETS = [\"workflow\", \"sync\", \"pipeline\"] as const\n\n/**\n * Six of the eight targets carry a `kind` discriminant naming themselves. The other two — an\n * `ObjectType` and an `ActionDefinition` — carry none, and each appears in exactly one builder that\n * allows no other undiscriminated target, so the allowed set names them unambiguously.\n */\nconst TARGET_BY_DEFINITION_KIND: Readonly<Partial<Record<string, BreadthTarget>>> = {\n dataset: \"dataset\",\n sync: \"sync\",\n pipeline: \"pipeline\",\n workflow: \"workflow\",\n connector: \"connector\",\n share: \"share\",\n}\n\nconst UNDISCRIMINATED_TARGETS: readonly BreadthTarget[] = [\"object\", \"action\"]\n\nfunction targetOfDefinition<TTarget extends BreadthTarget>(\n item: unknown,\n label: string,\n allowedTargets: readonly TTarget[]\n): TTarget {\n const kind = (item as { readonly kind?: unknown } | null)?.kind\n const discriminated = typeof kind === \"string\" ? TARGET_BY_DEFINITION_KIND[kind] : undefined\n // Recognising the kind is not the same as accepting it. `can.run(myDataset)` used to return\n // `target: \"dataset\"`, and `GRANT_KINDS[\"run:dataset\"]` does not exist, so startup died on\n // `spec.universeKey` with a `TypeError` naming neither the role nor the definition.\n if (discriminated) {\n if (!isAllowedTarget(discriminated, allowedTargets)) {\n // \"one targeting x\", not \"a x definition\": object and action start with a vowel, and\n // this string ships in a release. Same reason the selector branch below writes no article.\n throw new SecurityValidationError(\n `[Sixb] ${label} accepts ${allowedTargets.join(\" or \")} definitions, but received one targeting ${discriminated}.`\n )\n }\n return discriminated\n }\n\n const candidates = allowedTargets.filter((target) => UNDISCRIMINATED_TARGETS.includes(target))\n const only = candidates.length === 1 ? candidates[0] : undefined\n if (only) return only\n\n throw new SecurityValidationError(\n `[Sixb] ${label} accepts ${allowedTargets.join(\" or \")} definitions, but received one Sixb could not classify.`\n )\n}\n\nfunction isAllowedTarget<TTarget extends BreadthTarget>(\n target: BreadthTarget,\n allowedTargets: readonly TTarget[]\n): target is TTarget {\n return (allowedTargets as readonly BreadthTarget[]).includes(target)\n}\n\n/**\n * Every grant resolves its target and selection here, in one pass, so the two cannot disagree.\n *\n * Typing alone is not enough: a JavaScript caller, or an `as any`, would otherwise hand `can.apply`\n * an `every.object()` and get a grant over the wrong universe. Sniffing only the first element of a\n * list was not enough either — `can.run([mySync, myPipeline])` filed the pipeline's id under\n * `run:sync`, and startup validation then reported it as an unknown *sync*.\n *\n * `TTarget` is what removes the casts at the call sites: each builder passes its own allowed targets\n * and gets exactly those back, so the narrowing is proved rather than asserted.\n */\nfunction resolveGrant<TDefinition extends { readonly id?: unknown }, TTarget extends BreadthTarget>(\n input: GrantInput<TDefinition, TTarget>,\n label: string,\n allowedTargets: readonly TTarget[]\n): { readonly target: TTarget; readonly selection: Selection } {\n if (isBreadthSelector(input)) {\n if (!isAllowedTarget(input.target, allowedTargets)) {\n throw new SecurityValidationError(\n `[Sixb] ${label} accepts ${allowedTargets.join(\" or \")} selectors, but received every.${input.target}().`\n )\n }\n return { target: input.target, selection: input.selection }\n }\n\n const items = Array.isArray(input) ? input : [input as TDefinition]\n\n let target: TTarget | undefined\n for (const item of items) {\n const itemTarget = targetOfDefinition(item, label, allowedTargets)\n if (target === undefined) {\n target = itemTarget\n continue\n }\n if (itemTarget !== target) {\n throw new SecurityValidationError(\n `[Sixb] ${label} requires one target per grant, but received both ${target} and ${itemTarget} definitions. Use one grant each.`\n )\n }\n }\n // Checked after the loop rather than before it: an empty list leaves `target` unset, which is the\n // same condition, and proving it here is what lets the return type stay cast-free.\n if (target === undefined) {\n throw new SecurityValidationError(`[Sixb] ${label} requires at least one definition.`)\n }\n\n // Dedupe explicit ids up front; resolution would dedupe via Set anyway.\n const ids = [...new Set(items.map((item) => definitionIdOf(item, label)))]\n return { target, selection: { all: false, ids } }\n}\n\nfunction view<const TObjectTypeId extends string>(\n input: ShareTarget<TObjectTypeId>\n): ShareViewGrantBuilder<TObjectTypeId>\nfunction view(input: GrantInput<ObjectType, \"object\">): ViewGrant<\"object\">\nfunction view(input: GrantInput<DatasetDefinition, \"dataset\">): ViewGrant<\"dataset\">\nfunction view(\n input: ShareTarget | GrantInput<ObjectType | DatasetDefinition, \"object\" | \"dataset\">\n): ViewGrant | ShareViewGrantBuilder {\n if (isShareTarget(input)) return createShareViewGrant(input)\n const { target, selection } = resolveGrant(input, \"can.view\", VIEW_TARGETS)\n return { kind: \"grant\", capability: \"view\", target, selection }\n}\n\nfunction edit(input: GrantInput<ObjectType, \"object\">): EditGrant {\n return {\n kind: \"grant\",\n capability: \"edit\",\n selection: resolveGrant(input, \"can.edit\", [\"object\"]).selection,\n }\n}\n\nfunction append(input: GrantInput<ObjectType, \"object\">): AppendGrant {\n return {\n kind: \"grant\",\n capability: \"append\",\n selection: resolveGrant(input, \"can.append\", [\"object\"]).selection,\n }\n}\n\nfunction apply<const TAction extends ObjectActionDefinition>(\n input: TAction\n): ApplyGrant & ShareActionGrantBuilder<TAction>\nfunction apply(input: GrantInput<ActionDefinition, \"action\">): ApplyGrant\nfunction apply(input: GrantInput<ActionDefinition, \"action\">): ApplyGrant {\n const grant: ApplyGrant = {\n kind: \"grant\",\n capability: \"apply\",\n selection: resolveGrant(input, \"can.apply\", [\"action\"]).selection,\n }\n // `Array.isArray` does not narrow a readonly array. This cast restores the branch already proved\n // above; every non-selector, non-array GrantInput is one Action definition.\n const one: ActionDefinition | undefined =\n Array.isArray(input) || isBreadthSelector(input) ? undefined : (input as ActionDefinition)\n if (one && isObjectActionDefinition(one)) {\n Object.defineProperty(grant, \"on\", {\n configurable: false,\n enumerable: false,\n writable: false,\n value: (target: ShareTarget) => createShareActionGrant(one, target),\n })\n }\n return grant\n}\n\nfunction share(input: GrantInput<ShareDefinition, \"share\">): ShareGrant {\n return {\n kind: \"grant\",\n capability: \"share\",\n selection: resolveGrant(input, \"can.share\", [\"share\"]).selection,\n }\n}\n\nfunction run(input: GrantInput<WorkflowDefinition, \"workflow\">): RunGrant<\"workflow\">\nfunction run(input: GrantInput<SyncDefinition, \"sync\">): RunGrant<\"sync\">\nfunction run(input: GrantInput<PipelineDefinition, \"pipeline\">): RunGrant<\"pipeline\">\nfunction run(input: AgentReference): AgentRunGrant\nfunction run(\n input:\n | AgentReference\n | GrantInput<\n WorkflowDefinition | SyncDefinition | PipelineDefinition,\n \"workflow\" | \"sync\" | \"pipeline\"\n >\n): RunGrant | AgentRunGrant {\n if (isAgentReference(input)) {\n return { kind: \"grant\", capability: \"run\", target: \"agent\" }\n }\n const { target, selection } = resolveGrant(input, \"can.run\", RUN_TARGETS)\n return { kind: \"grant\", capability: \"run\", target, selection }\n}\n\nfunction isAgentReference(input: unknown): input is AgentReference {\n return (\n typeof input === \"object\" &&\n input !== null &&\n !Array.isArray(input) &&\n !isBreadthSelector(input) &&\n \"kind\" in input &&\n input.kind === \"agent\"\n )\n}\n\nfunction isAgentUsageReference(input: unknown): input is AgentUsageReference {\n return (\n typeof input === \"object\" &&\n input !== null &&\n !Array.isArray(input) &&\n !isBreadthSelector(input) &&\n \"kind\" in input &&\n input.kind === \"aiUsage\"\n )\n}\n\ntype ObservableReference = ProjectSurfaceReference | AgentUsageReference\n\n/**\n * Every reference `can.observe` accepts, keyed by its `kind`, which is also its grant target. The\n * full `Record` is what stops a new `project` member from compiling until it is listed here.\n */\nconst OBSERVABLE_REFERENCES: Readonly<Record<ObservableReference[\"kind\"], string>> = {\n logs: \"project.logs\",\n activity: \"project.activity\",\n aiUsage: \"agent.usage\",\n}\n\nfunction isObservableReference(input: unknown): input is ObservableReference {\n return (\n typeof input === \"object\" &&\n input !== null &&\n \"kind\" in input &&\n typeof input.kind === \"string\" &&\n Object.hasOwn(OBSERVABLE_REFERENCES, input.kind)\n )\n}\n\nfunction observe(input: ObservableReference): ObserveGrant {\n const value: unknown = input\n\n // Older role files pass the string form. Point them at the reference instead of only rejecting\n // the input.\n if (value === \"logs\") {\n throw new SecurityValidationError(\n '[Sixb] can.observe(\"logs\") is now can.observe(project.logs), imported from \"@sixb/core\".'\n )\n }\n\n if (!isObservableReference(value)) {\n const accepted = Object.values(OBSERVABLE_REFERENCES).join(\" or \")\n throw new SecurityValidationError(`[Sixb] can.observe accepts ${accepted}.`)\n }\n\n return { kind: \"grant\", capability: \"observe\", target: value.kind }\n}\n\nfunction manage(input: GrantInput<ConnectorDefinition, \"connector\">): ManageGrant<\"connector\">\nfunction manage(input: AgentUsageReference): ManageGrant<\"aiUsage\">\nfunction manage(\n input: GrantInput<ConnectorDefinition, \"connector\"> | AgentUsageReference\n): ManageGrant {\n if (isAgentUsageReference(input)) {\n return { kind: \"grant\", capability: \"manage\", target: \"aiUsage\" }\n }\n return {\n kind: \"grant\",\n capability: \"manage\",\n target: \"connector\",\n selection: resolveGrant(input, \"can.manage\", [\"connector\"]).selection,\n }\n}\n\nexport const can = {\n view,\n edit,\n append,\n apply,\n share,\n run,\n observe,\n manage,\n}\n",
|
|
15
|
+
"import type { ProjectReference } from \"./types\"\n\n/** Project-wide surfaces used in security grants such as `can.observe(project.logs)`. */\nexport const project: ProjectReference = Object.freeze({\n kind: \"project\",\n logs: Object.freeze({ kind: \"logs\" }),\n activity: Object.freeze({ kind: \"activity\" }),\n})\n",
|
|
15
16
|
"import { type ResolvedRole, resolveRoleGrants } from \"../authorization\"\nimport type {\n GroupDefinition,\n MarkingDefinition,\n MembershipPolicyDefinition,\n RoleDefinition,\n} from \"./types\"\nimport { validateSecurityDefinitionsAtStartup } from \"./validation\"\n\n/** Read-only access to validated security definitions and resolved role grants. */\nexport interface SecurityDefinitionCatalog {\n listMarkings(): readonly MarkingDefinition[]\n getMarkingById(markingId: string): MarkingDefinition | null\n listGroups(): readonly GroupDefinition[]\n getGroupById(groupId: string): GroupDefinition | null\n listRoles(): readonly RoleDefinition[]\n getRoleById(roleId: string): RoleDefinition | null\n listResolvedRoles(): readonly ResolvedRole[]\n listMembershipPolicies(): readonly MembershipPolicyDefinition[]\n getMembershipPolicyById(policyId: string): MembershipPolicyDefinition | null\n}\n\nexport interface SecurityRegistryOptions {\n readonly markings?: readonly MarkingDefinition[]\n readonly groups?: readonly GroupDefinition[]\n readonly roles?: readonly RoleDefinition[]\n readonly membershipPolicies?: readonly MembershipPolicyDefinition[]\n readonly objectTypeIds?: ReadonlySet<string>\n readonly datasetIds?: ReadonlySet<string>\n readonly actionIds?: ReadonlySet<string>\n readonly workflowIds?: ReadonlySet<string>\n readonly syncIds?: ReadonlySet<string>\n readonly pipelineIds?: ReadonlySet<string>\n readonly agentAvailable?: boolean\n readonly connectorIds?: ReadonlySet<string>\n readonly shareIds?: ReadonlySet<string>\n readonly getSubTypes?: (objectTypeId: string) => readonly string[]\n}\n\nexport class SecurityRegistry implements SecurityDefinitionCatalog {\n private readonly markingsById: ReadonlyMap<string, MarkingDefinition>\n private readonly groupsById: ReadonlyMap<string, GroupDefinition>\n private readonly rolesById: ReadonlyMap<string, RoleDefinition>\n private readonly membershipPoliciesById: ReadonlyMap<string, MembershipPolicyDefinition>\n private readonly resolvedRoles: readonly ResolvedRole[]\n\n constructor(input: SecurityRegistryOptions) {\n const definitions = validateSecurityDefinitionsAtStartup({\n markings: input.markings ?? [],\n groups: input.groups ?? [],\n roles: input.roles ?? [],\n membershipPolicies: input.membershipPolicies ?? [],\n objectTypeIds: input.objectTypeIds,\n datasetIds: input.datasetIds,\n actionIds: input.actionIds,\n workflowIds: input.workflowIds,\n syncIds: input.syncIds,\n pipelineIds: input.pipelineIds,\n agentAvailable: input.agentAvailable,\n connectorIds: input.connectorIds,\n shareIds: input.shareIds,\n })\n\n const universe = {\n objectTypeIds: input.objectTypeIds ?? new Set<string>(),\n datasetIds: input.datasetIds ?? new Set<string>(),\n actionIds: input.actionIds ?? new Set<string>(),\n workflowIds: input.workflowIds ?? new Set<string>(),\n syncIds: input.syncIds ?? new Set<string>(),\n pipelineIds: input.pipelineIds ?? new Set<string>(),\n connectorIds: input.connectorIds ?? new Set<string>(),\n shareIds: input.shareIds ?? new Set<string>(),\n getSubTypes: input.getSubTypes ?? (() => []),\n }\n\n this.markingsById = definitions.markingsById\n this.groupsById = definitions.groupsById\n this.rolesById = definitions.rolesById\n this.membershipPoliciesById = definitions.membershipPoliciesById\n this.resolvedRoles = definitions.roles.map((role) => ({\n id: role.id,\n grantedToGroupIds: role.grantedToGroupIds,\n grants: resolveRoleGrants(role, universe),\n clearances: new Set(role.clearances ?? []),\n }))\n }\n\n listMarkings(): readonly MarkingDefinition[] {\n return [...this.markingsById.values()]\n }\n\n getMarkingById(markingId: string): MarkingDefinition | null {\n return this.markingsById.get(markingId) ?? null\n }\n\n listGroups(): readonly GroupDefinition[] {\n return [...this.groupsById.values()]\n }\n\n getGroupById(groupId: string): GroupDefinition | null {\n return this.groupsById.get(groupId) ?? null\n }\n\n listRoles(): readonly RoleDefinition[] {\n return [...this.rolesById.values()]\n }\n\n getRoleById(roleId: string): RoleDefinition | null {\n return this.rolesById.get(roleId) ?? null\n }\n\n listResolvedRoles(): readonly ResolvedRole[] {\n return this.resolvedRoles\n }\n\n listMembershipPolicies(): readonly MembershipPolicyDefinition[] {\n return [...this.membershipPoliciesById.values()]\n }\n\n getMembershipPolicyById(policyId: string): MembershipPolicyDefinition | null {\n return this.membershipPoliciesById.get(policyId) ?? null\n }\n}\n",
|
|
16
17
|
"export type AuthStorageErrorCode =\n | \"device_authorization_denied\"\n | \"device_authorization_limit_exceeded\"\n | \"duplicate_device_authorization\"\n | \"duplicate_access_token\"\n | \"duplicate_identity\"\n | \"duplicate_invitation\"\n | \"duplicate_magic_link\"\n | \"duplicate_oidc_attempt\"\n | \"duplicate_service_account\"\n | \"duplicate_session\"\n | \"duplicate_user\"\n | \"expired_magic_link\"\n | \"expired_oidc_attempt\"\n | \"invalid_input\"\n | \"invalid_magic_link\"\n | \"invalid_oidc_attempt\"\n | \"invalid_device_authorization\"\n | \"missing_identity\"\n | \"missing_invitation\"\n | \"missing_magic_link\"\n | \"missing_oidc_attempt\"\n | \"missing_device_authorization\"\n | \"pending_device_authorization\"\n | \"missing_access_token\"\n | \"missing_service_account\"\n | \"missing_session\"\n | \"missing_user\"\n | \"suspended_service_account\"\n | \"suspended_user\"\n | \"user_creation_not_allowed\"\n\n/**\n * Error for auth storage invariants and invalid auth state transitions.\n */\nexport class AuthStorageError extends Error {\n readonly name = \"AuthStorageError\"\n\n constructor(\n readonly code: AuthStorageErrorCode,\n message: string\n ) {\n super(message)\n }\n}\n",
|
|
17
18
|
"import { AuthStorageError } from \"../errors\"\nimport type {\n AccessTokenRecord,\n CompleteAuthSessionInput,\n CreateAuthAccessTokenInput,\n CreateAuthServiceAccountInput,\n CreateAuthSessionInput,\n DeviceAuthorizationRecord,\n GroupMembershipRecord,\n InvitationRecord,\n MagicLinkRecord,\n OidcAuthorizationAttemptRecord,\n ServiceAccountGroupMembershipRecord,\n ServiceAccountRecord,\n SessionRecord,\n UpsertAuthGroupMembershipInput,\n UpsertAuthServiceAccountGroupMembershipInput,\n UserIdentityRecord,\n UserRecord,\n} from \"../types\"\n\nexport interface AuthStorageState {\n readonly users: Map<string, UserRecord>\n readonly identities: Map<string, UserIdentityRecord>\n readonly serviceAccounts: Map<string, ServiceAccountRecord>\n readonly serviceAccountGroupMemberships: Map<string, ServiceAccountGroupMembershipRecord>\n readonly sessions: Map<string, SessionRecord>\n readonly accessTokens: Map<string, AccessTokenRecord>\n readonly invitations: Map<string, InvitationRecord>\n readonly groupMemberships: Map<string, GroupMembershipRecord>\n readonly magicLinks: Map<string, MagicLinkRecord>\n readonly oidcAuthorizationAttempts: Map<string, OidcAuthorizationAttemptRecord>\n readonly deviceAuthorizations: Map<string, DeviceAuthorizationRecord>\n}\n\nexport function createAuthStorageState(): AuthStorageState {\n return {\n users: new Map(),\n identities: new Map(),\n serviceAccounts: new Map(),\n serviceAccountGroupMemberships: new Map(),\n sessions: new Map(),\n accessTokens: new Map(),\n invitations: new Map(),\n groupMemberships: new Map(),\n magicLinks: new Map(),\n oidcAuthorizationAttempts: new Map(),\n deviceAuthorizations: new Map(),\n }\n}\n\nfunction scopedKey(...parts: readonly string[]): string {\n return JSON.stringify(parts)\n}\n\nexport function userKey(projectId: string, id: string): string {\n return scopedKey(projectId, id)\n}\n\nexport function identityKey(projectId: string, strategyId: string, subject: string): string {\n return scopedKey(projectId, strategyId, subject)\n}\n\nexport function serviceAccountKey(projectId: string, id: string): string {\n return scopedKey(projectId, id)\n}\n\nexport function serviceAccountGroupMembershipKey(\n projectId: string,\n serviceAccountId: string,\n groupId: string\n): string {\n return scopedKey(projectId, serviceAccountId, groupId)\n}\n\nexport function sessionKey(projectId: string, id: string): string {\n return scopedKey(projectId, id)\n}\n\nexport function deviceAuthorizationKey(projectId: string, id: string): string {\n return scopedKey(projectId, id)\n}\n\nexport function accessTokenKey(projectId: string, id: string): string {\n return scopedKey(projectId, id)\n}\n\nexport function invitationKey(projectId: string, id: string): string {\n return scopedKey(projectId, id)\n}\n\nexport function groupMembershipKey(projectId: string, userId: string, groupId: string): string {\n return scopedKey(projectId, userId, groupId)\n}\n\nexport function magicLinkKey(projectId: string, id: string): string {\n return scopedKey(projectId, id)\n}\n\nexport function oidcAttemptKey(projectId: string, id: string): string {\n return scopedKey(projectId, id)\n}\n\nexport function cloneRecord<T>(record: T): T {\n return structuredClone(record)\n}\n\nexport function cloneOptionalRecord<T>(record: T | null): T | null {\n return record ? cloneRecord(record) : null\n}\n\nexport function cloneDate(value: Date): Date {\n return new Date(value)\n}\n\nexport function dateOrNow(value: Date | undefined): Date {\n return value ? cloneDate(value) : new Date()\n}\n\nexport function assertNonEmpty(value: string, label: string): string {\n const normalized = value.trim()\n if (!normalized) {\n throw new AuthStorageError(\"invalid_input\", `[Sixb] ${label} must be a non-empty string.`)\n }\n return normalized\n}\n\nexport function normalizeEmail(email: string): string {\n return assertNonEmpty(email, \"Email\").toLowerCase()\n}\n\nexport function normalizeGroupIds(groupIds: readonly string[] | undefined): readonly string[] {\n return [...new Set((groupIds ?? []).map((groupId) => assertNonEmpty(groupId, \"Group id\")))]\n}\n\nexport function normalizeOptionalGroupIds(\n groupIds: readonly string[] | undefined\n): readonly string[] | undefined {\n return groupIds === undefined ? undefined : normalizeGroupIds(groupIds)\n}\n\nexport function normalizeClaims(\n claims: Readonly<Record<string, unknown>> | undefined\n): Readonly<Record<string, unknown>> | undefined {\n return claims ? cloneRecord(claims) : undefined\n}\n\nexport function compareByCreatedAt<T extends { readonly id: string; readonly createdAt: Date }>(\n a: T,\n b: T,\n order: \"asc\" | \"desc\"\n): number {\n const delta = a.createdAt.getTime() - b.createdAt.getTime()\n if (delta !== 0) {\n return order === \"asc\" ? delta : -delta\n }\n\n return order === \"asc\" ? a.id.localeCompare(b.id) : b.id.localeCompare(a.id)\n}\n\nexport function isActiveSession(session: SessionRecord, now: Date): boolean {\n return (\n !session.revokedAt &&\n session.expiresAt > now &&\n (!session.absoluteExpiresAt || session.absoluteExpiresAt > now)\n )\n}\n\nexport function isActiveAccessToken(token: AccessTokenRecord, now: Date): boolean {\n return !token.revokedAt && token.expiresAt > now\n}\n\nexport function isActiveInvitation(invitation: InvitationRecord, now: Date): boolean {\n return invitation.status === \"pending\" && invitation.expiresAt > now\n}\n\nexport function isActiveMagicLink(link: MagicLinkRecord, now: Date): boolean {\n return !link.consumedAt && !link.revokedAt && link.expiresAt > now\n}\n\nexport function getUserByEmail(\n state: AuthStorageState,\n projectId: string,\n email: string\n): UserRecord | null {\n const normalizedEmail = normalizeEmail(email)\n for (const user of state.users.values()) {\n if (user.projectId === projectId && user.email === normalizedEmail) {\n return user\n }\n }\n return null\n}\n\nexport function getActiveInvitationByEmail(\n state: AuthStorageState,\n projectId: string,\n email: string,\n now: Date\n): InvitationRecord | null {\n const normalizedEmail = normalizeEmail(email)\n const invitations = [...state.invitations.values()]\n .filter((invitation) => invitation.projectId === projectId)\n .filter((invitation) => invitation.email === normalizedEmail)\n .filter((invitation) => isActiveInvitation(invitation, now))\n .sort((a, b) => compareByCreatedAt(a, b, \"desc\"))\n\n return invitations[0] ?? null\n}\n\nexport function revokeActiveSessionsForUser(\n state: AuthStorageState,\n projectId: string,\n userId: string,\n revokedAt: Date\n): readonly SessionRecord[] {\n const revoked: SessionRecord[] = []\n\n for (const [key, session] of state.sessions) {\n if (session.projectId !== projectId || session.userId !== userId) {\n continue\n }\n\n if (!isActiveSession(session, revokedAt)) {\n continue\n }\n\n const next: SessionRecord = {\n ...session,\n revokedAt: cloneDate(revokedAt),\n }\n state.sessions.set(key, cloneRecord(next))\n revoked.push(next)\n }\n\n return revoked\n}\n\nexport function revokeActiveMagicLinksForEmail(\n state: AuthStorageState,\n projectId: string,\n email: string,\n revokedAt: Date\n): readonly MagicLinkRecord[] {\n const normalizedEmail = normalizeEmail(email)\n const revoked: MagicLinkRecord[] = []\n\n for (const [key, link] of state.magicLinks) {\n if (link.projectId !== projectId || link.email !== normalizedEmail) {\n continue\n }\n\n if (!isActiveMagicLink(link, revokedAt)) {\n continue\n }\n\n const next: MagicLinkRecord = {\n ...link,\n revokedAt: cloneDate(revokedAt),\n }\n state.magicLinks.set(key, cloneRecord(next))\n revoked.push(next)\n }\n\n return revoked\n}\n\nexport function assertSessionIdAvailable(\n state: AuthStorageState,\n projectId: string,\n sessionId: string\n): void {\n if (state.sessions.has(sessionKey(projectId, sessionId))) {\n throw new AuthStorageError(\n \"duplicate_session\",\n `[Sixb] Session '${sessionId}' already exists for project '${projectId}'.`\n )\n }\n}\n\nexport function validateCompleteSessionInput(\n state: AuthStorageState,\n projectId: string,\n session: CompleteAuthSessionInput\n): void {\n const sessionId = assertNonEmpty(session.id, \"Session id\")\n assertNonEmpty(session.tokenHash, \"Session token hash\")\n assertSessionIdAvailable(state, projectId, sessionId)\n}\n\nexport function createSessionRecord(\n state: AuthStorageState,\n input: CreateAuthSessionInput\n): SessionRecord {\n const id = assertNonEmpty(input.id, \"Session id\")\n const projectId = assertNonEmpty(input.projectId, \"Project id\")\n const userId = assertNonEmpty(input.userId, \"User id\")\n const strategyId = assertNonEmpty(input.strategyId, \"Strategy id\")\n const tokenHash = assertNonEmpty(input.tokenHash, \"Session token hash\")\n\n assertSessionIdAvailable(state, projectId, id)\n\n const session: SessionRecord = {\n id,\n projectId,\n userId,\n strategyId,\n tokenHash,\n createdAt: cloneDate(input.createdAt),\n expiresAt: cloneDate(input.expiresAt),\n absoluteExpiresAt: input.absoluteExpiresAt ? cloneDate(input.absoluteExpiresAt) : undefined,\n userAgent: input.userAgent,\n ipAddress: input.ipAddress,\n bearer: input.bearer\n ? {\n clientName: assertNonEmpty(input.bearer.clientName, \"Session client name\"),\n accessExpiresAt: cloneDate(input.bearer.accessExpiresAt),\n refreshTokenHash: assertNonEmpty(input.bearer.refreshTokenHash, \"Refresh token hash\"),\n }\n : undefined,\n }\n\n state.sessions.set(sessionKey(projectId, id), cloneRecord(session))\n return session\n}\n\nexport function createServiceAccountRecord(\n state: AuthStorageState,\n input: CreateAuthServiceAccountInput\n): ServiceAccountRecord {\n const id = assertNonEmpty(input.id, \"Service account id\")\n const projectId = assertNonEmpty(input.projectId, \"Project id\")\n const name = assertNonEmpty(input.name, \"Service account name\")\n const key = serviceAccountKey(projectId, id)\n\n if (state.serviceAccounts.has(key)) {\n throw new AuthStorageError(\n \"duplicate_service_account\",\n `[Sixb] Service account '${id}' already exists for project '${projectId}'.`\n )\n }\n\n const createdAt = dateOrNow(input.createdAt)\n const serviceAccount: ServiceAccountRecord = {\n id,\n projectId,\n name,\n description: input.description,\n status: input.status ?? \"active\",\n createdByPrincipal: input.createdByPrincipal,\n createdBySessionId: input.createdBySessionId,\n createdAt,\n updatedAt: input.updatedAt ? cloneDate(input.updatedAt) : cloneDate(createdAt),\n }\n\n state.serviceAccounts.set(key, cloneRecord(serviceAccount))\n return serviceAccount\n}\n\nexport function upsertServiceAccountGroupMembershipRecord(\n state: AuthStorageState,\n input: UpsertAuthServiceAccountGroupMembershipInput\n): ServiceAccountGroupMembershipRecord {\n const projectId = assertNonEmpty(input.projectId, \"Project id\")\n const serviceAccountId = assertNonEmpty(input.serviceAccountId, \"Service account id\")\n const groupId = assertNonEmpty(input.groupId, \"Group id\")\n if (!state.serviceAccounts.has(serviceAccountKey(projectId, serviceAccountId))) {\n throw new AuthStorageError(\n \"missing_service_account\",\n `[Sixb] Service account '${serviceAccountId}' not found for project '${projectId}'.`\n )\n }\n\n const key = serviceAccountGroupMembershipKey(projectId, serviceAccountId, groupId)\n const existing = state.serviceAccountGroupMemberships.get(key)\n if (existing) {\n return existing\n }\n\n const membership: ServiceAccountGroupMembershipRecord = {\n projectId,\n serviceAccountId,\n groupId,\n source: input.source,\n createdAt: dateOrNow(input.createdAt),\n }\n\n state.serviceAccountGroupMemberships.set(key, cloneRecord(membership))\n return membership\n}\n\nexport function createAccessTokenRecord(\n state: AuthStorageState,\n input: CreateAuthAccessTokenInput\n): AccessTokenRecord {\n const id = assertNonEmpty(input.id, \"Access token id\")\n const projectId = assertNonEmpty(input.projectId, \"Project id\")\n const name = assertNonEmpty(input.name, \"Access token name\")\n const subjectId = assertNonEmpty(input.subject.id, \"Access token subject id\")\n const tokenHash = assertNonEmpty(input.tokenHash, \"Access token hash\")\n\n assertAccessTokenSubject(input.kind, input.subject.type)\n assertAccessTokenSubjectExists(state, projectId, input.subject.type, subjectId)\n\n const key = accessTokenKey(projectId, id)\n if (state.accessTokens.has(key)) {\n throw new AuthStorageError(\n \"duplicate_access_token\",\n `[Sixb] Access token '${id}' already exists for project '${projectId}'.`\n )\n }\n\n const token: AccessTokenRecord = {\n id,\n projectId,\n name,\n kind: input.kind,\n subject: { type: input.subject.type, id: subjectId },\n tokenHash,\n groupIds: normalizeOptionalGroupIds(input.groupIds),\n createdByPrincipal: input.createdByPrincipal,\n createdBySessionId: input.createdBySessionId,\n createdAt: cloneDate(input.createdAt),\n expiresAt: cloneDate(input.expiresAt),\n }\n\n state.accessTokens.set(key, cloneRecord(token))\n return token\n}\n\nexport function upsertGroupMembershipRecord(\n state: AuthStorageState,\n input: UpsertAuthGroupMembershipInput\n): GroupMembershipRecord {\n const projectId = assertNonEmpty(input.projectId, \"Project id\")\n const userId = assertNonEmpty(input.userId, \"User id\")\n const groupId = assertNonEmpty(input.groupId, \"Group id\")\n if (!state.users.has(userKey(projectId, userId))) {\n throw new AuthStorageError(\n \"missing_user\",\n `[Sixb] User '${userId}' not found for project '${projectId}'.`\n )\n }\n\n const key = groupMembershipKey(projectId, userId, groupId)\n const existing = state.groupMemberships.get(key)\n\n if (existing) {\n return existing\n }\n\n const membership: GroupMembershipRecord = {\n projectId,\n userId,\n groupId,\n source: input.source,\n createdAt: dateOrNow(input.createdAt),\n }\n\n state.groupMemberships.set(key, cloneRecord(membership))\n return membership\n}\n\nexport function removeGroupMembershipRecord(\n state: AuthStorageState,\n params: { readonly projectId: string; readonly userId: string; readonly groupId: string }\n): GroupMembershipRecord | null {\n const projectId = assertNonEmpty(params.projectId, \"Project id\")\n const userId = assertNonEmpty(params.userId, \"User id\")\n const groupId = assertNonEmpty(params.groupId, \"Group id\")\n\n const key = groupMembershipKey(projectId, userId, groupId)\n const existing = state.groupMemberships.get(key)\n if (!existing) {\n return null\n }\n\n state.groupMemberships.delete(key)\n return existing\n}\n\nfunction assertAccessTokenSubject(\n kind: CreateAuthAccessTokenInput[\"kind\"],\n subjectType: CreateAuthAccessTokenInput[\"subject\"][\"type\"]\n): void {\n if (\n (kind === \"personal\" && subjectType === \"user\") ||\n (kind === \"serviceAccount\" && subjectType === \"serviceAccount\")\n ) {\n return\n }\n\n throw new AuthStorageError(\n \"invalid_input\",\n `[Sixb] Access token kind '${kind}' cannot target subject type '${subjectType}'.`\n )\n}\n\nfunction assertAccessTokenSubjectExists(\n state: AuthStorageState,\n projectId: string,\n subjectType: CreateAuthAccessTokenInput[\"subject\"][\"type\"],\n subjectId: string\n): void {\n if (subjectType === \"user\") {\n if (state.users.has(userKey(projectId, subjectId))) return\n throw new AuthStorageError(\n \"missing_user\",\n `[Sixb] User '${subjectId}' not found for project '${projectId}'.`\n )\n }\n\n if (state.serviceAccounts.has(serviceAccountKey(projectId, subjectId))) return\n throw new AuthStorageError(\n \"missing_service_account\",\n `[Sixb] Service account '${subjectId}' not found for project '${projectId}'.`\n )\n}\n\nexport function consumeMagicLinkRecord(\n state: AuthStorageState,\n params: {\n readonly projectId: string\n readonly id: string\n readonly tokenHash: string\n readonly consumedAt: Date\n }\n): MagicLinkRecord {\n const projectId = assertNonEmpty(params.projectId, \"Project id\")\n const id = assertNonEmpty(params.id, \"Magic link id\")\n const tokenHash = assertNonEmpty(params.tokenHash, \"Magic link token hash\")\n const key = magicLinkKey(projectId, id)\n const existing = state.magicLinks.get(key)\n\n if (!existing) {\n throw new AuthStorageError(\n \"missing_magic_link\",\n `[Sixb] Magic link '${id}' not found for project '${projectId}'.`\n )\n }\n\n if (existing.tokenHash !== tokenHash || existing.consumedAt || existing.revokedAt) {\n throw new AuthStorageError(\n \"invalid_magic_link\",\n `[Sixb] Magic link '${id}' is not valid for project '${projectId}'.`\n )\n }\n\n if (existing.expiresAt <= params.consumedAt) {\n throw new AuthStorageError(\n \"expired_magic_link\",\n `[Sixb] Magic link '${id}' is expired for project '${projectId}'.`\n )\n }\n\n const consumed: MagicLinkRecord = {\n ...existing,\n consumedAt: cloneDate(params.consumedAt),\n }\n state.magicLinks.set(key, cloneRecord(consumed))\n return consumed\n}\n\nexport function consumeOidcAttemptRecord(\n state: AuthStorageState,\n params: {\n readonly projectId: string\n readonly id: string\n readonly stateHash: string\n readonly consumedAt: Date\n }\n): OidcAuthorizationAttemptRecord {\n const projectId = assertNonEmpty(params.projectId, \"Project id\")\n const id = assertNonEmpty(params.id, \"OIDC authorization attempt id\")\n const stateHash = assertNonEmpty(params.stateHash, \"OIDC state hash\")\n const key = oidcAttemptKey(projectId, id)\n const existing = state.oidcAuthorizationAttempts.get(key)\n\n if (!existing) {\n throw new AuthStorageError(\n \"missing_oidc_attempt\",\n `[Sixb] OIDC authorization attempt '${id}' not found for project '${projectId}'.`\n )\n }\n\n if (existing.stateHash !== stateHash || existing.consumedAt) {\n throw new AuthStorageError(\n \"invalid_oidc_attempt\",\n `[Sixb] OIDC authorization attempt '${id}' is not valid for project '${projectId}'.`\n )\n }\n\n if (existing.expiresAt <= params.consumedAt) {\n throw new AuthStorageError(\n \"expired_oidc_attempt\",\n `[Sixb] OIDC authorization attempt '${id}' is expired for project '${projectId}'.`\n )\n }\n\n const consumed: OidcAuthorizationAttemptRecord = {\n ...existing,\n consumedAt: cloneDate(params.consumedAt),\n }\n state.oidcAuthorizationAttempts.set(key, cloneRecord(consumed))\n return consumed\n}\n",
|
|
18
19
|
"import { AuthStorageError } from \"../errors\"\nimport type {\n AccessTokenRecord,\n AuthAccessTokenStore,\n CreateAuthAccessTokenInput,\n ListAuthAccessTokensInput,\n ListAuthAccessTokensResult,\n} from \"../types\"\nimport type { AuthStorageState } from \"./shared\"\nimport {\n accessTokenKey,\n cloneDate,\n cloneOptionalRecord,\n cloneRecord,\n compareByCreatedAt,\n createAccessTokenRecord,\n isActiveAccessToken,\n} from \"./shared\"\n\nexport class InMemoryAuthAccessTokenStore implements AuthAccessTokenStore {\n constructor(private readonly state: AuthStorageState) {}\n\n async create(input: CreateAuthAccessTokenInput): Promise<AccessTokenRecord> {\n return cloneRecord(createAccessTokenRecord(this.state, input))\n }\n\n async getById(params: {\n readonly projectId: string\n readonly id: string\n }): Promise<AccessTokenRecord | null> {\n const record = this.state.accessTokens.get(accessTokenKey(params.projectId, params.id)) ?? null\n return cloneOptionalRecord(record)\n }\n\n async list(input: ListAuthAccessTokensInput): Promise<ListAuthAccessTokensResult> {\n const order = input.order ?? \"asc\"\n const offset = input.offset ?? 0\n const rows = [...this.state.accessTokens.values()]\n .filter((token) => token.projectId === input.projectId)\n .filter((token) => input.kind === undefined || token.kind === input.kind)\n .filter(\n (token) =>\n input.subject === undefined ||\n (token.subject.type === input.subject.type && token.subject.id === input.subject.id)\n )\n .filter((token) => input.includeRevoked || !token.revokedAt)\n .sort((a, b) => compareByCreatedAt(a, b, order))\n const page = rows.slice(offset, input.limit === undefined ? undefined : offset + input.limit)\n\n return {\n accessTokens: page.map(cloneRecord),\n hasMore: input.limit === undefined ? false : offset + input.limit < rows.length,\n total: rows.length,\n }\n }\n\n async findValidByTokenHash(params: {\n readonly projectId: string\n readonly id: string\n readonly kind: AccessTokenRecord[\"kind\"]\n readonly tokenHash: string\n readonly now: Date\n }): Promise<AccessTokenRecord | null> {\n const token = this.state.accessTokens.get(accessTokenKey(params.projectId, params.id))\n if (\n !token ||\n token.kind !== params.kind ||\n token.tokenHash !== params.tokenHash ||\n !isActiveAccessToken(token, params.now)\n ) {\n return null\n }\n\n return cloneRecord(token)\n }\n\n async revoke(params: {\n readonly projectId: string\n readonly id: string\n readonly revokedAt: Date\n }): Promise<AccessTokenRecord> {\n const key = accessTokenKey(params.projectId, params.id)\n const existing = this.state.accessTokens.get(key)\n\n if (!existing) {\n throw new AuthStorageError(\n \"missing_access_token\",\n `[Sixb] Access token '${params.id}' not found for project '${params.projectId}'.`\n )\n }\n\n const next: AccessTokenRecord = {\n ...existing,\n revokedAt: cloneDate(params.revokedAt),\n }\n this.state.accessTokens.set(key, cloneRecord(next))\n return cloneRecord(next)\n }\n\n async touch(params: {\n readonly projectId: string\n readonly id: string\n readonly lastUsedAt: Date\n readonly userAgent?: string\n readonly ipAddress?: string\n }): Promise<AccessTokenRecord> {\n const key = accessTokenKey(params.projectId, params.id)\n const existing = this.state.accessTokens.get(key)\n\n if (!existing) {\n throw new AuthStorageError(\n \"missing_access_token\",\n `[Sixb] Access token '${params.id}' not found for project '${params.projectId}'.`\n )\n }\n\n const next: AccessTokenRecord = {\n ...existing,\n lastUsedAt: cloneDate(params.lastUsedAt),\n lastUsedUserAgent: params.userAgent ?? existing.lastUsedUserAgent,\n lastUsedIpAddress: params.ipAddress ?? existing.lastUsedIpAddress,\n }\n this.state.accessTokens.set(key, cloneRecord(next))\n return cloneRecord(next)\n }\n}\n",
|
|
19
|
-
"import type { AccessTokenKind, Principal } from \"../../auth\"\nimport type { AuthorizablePrincipal } from \"../../execution/types\"\n\nexport type UserStatus = \"active\" | \"suspended\"\nexport type ServiceAccountStatus = \"active\" | \"suspended\"\nexport type InvitationStatus = \"pending\" | \"accepted\" | \"revoked\"\n/** `directory`: owned by the identity provider, and synced to its groups on every sign-in. */\nexport type GroupMembershipSource = \"invitation\" | \"manual\" | \"agent\" | \"directory\"\nexport type DeviceAuthorizationStatus = \"pending\" | \"approved\" | \"denied\" | \"consumed\"\nexport const MAX_PENDING_DEVICE_AUTHORIZATIONS = 100\n\nexport interface UserRecord {\n readonly id: string\n readonly projectId: string\n readonly email: string\n readonly displayName?: string\n readonly avatarUrl?: string\n readonly status: UserStatus\n readonly createdAt: Date\n readonly updatedAt: Date\n}\n\nexport interface UserIdentityRecord {\n readonly projectId: string\n readonly strategyId: string\n readonly subject: string\n readonly userId: string\n readonly claims?: Readonly<Record<string, unknown>>\n readonly createdAt: Date\n readonly updatedAt: Date\n}\n\nexport interface ServiceAccountRecord {\n readonly id: string\n readonly projectId: string\n readonly name: string\n readonly description?: string\n readonly status: ServiceAccountStatus\n readonly createdByPrincipal?: Principal\n readonly createdBySessionId?: string\n readonly createdAt: Date\n readonly updatedAt: Date\n}\n\nexport interface ServiceAccountGroupMembershipRecord {\n readonly projectId: string\n readonly serviceAccountId: string\n readonly groupId: string\n /** Service accounts never sign in, so no identity provider owns their memberships. */\n readonly source: Exclude<GroupMembershipSource, \"directory\">\n readonly createdAt: Date\n}\n\nexport interface SessionRecord {\n readonly id: string\n readonly projectId: string\n readonly userId: string\n readonly strategyId: string\n /** The web app a browser session belongs to. A bearer session belongs to none and ignores it. */\n readonly tokenHash: string\n readonly createdAt: Date\n readonly expiresAt: Date\n readonly absoluteExpiresAt?: Date\n readonly revokedAt?: Date\n readonly lastSeenAt?: Date\n // Best-effort client metadata captured at sign-in, for the active-sessions\n // view. Display only — never used for authorization.\n readonly userAgent?: string\n readonly ipAddress?: string\n /** Present when a native client holds the session as bearer tokens instead of a cookie. */\n readonly bearer?: BearerSessionState\n}\n\n/**\n * A native client's credentials for its session. `tokenHash` on the session is the current access\n * token's hash; the refresh token rotates on every refresh.\n */\nexport interface BearerSessionState {\n /** Self-reported client label, such as \"sixb CLI on alex-mbp\". Display only. */\n readonly clientName: string\n readonly accessExpiresAt: Date\n readonly refreshTokenHash: string\n /** The refresh token the last rotation replaced, accepted briefly in case its response was lost. */\n readonly previousRefreshTokenHash?: string\n readonly refreshedAt?: Date\n}\n\nexport type RotateSessionRefreshTokenResult =\n | { readonly status: \"rotated\"; readonly session: SessionRecord }\n /** A replaced refresh token came back after the grace window; the session is now revoked. */\n | { readonly status: \"reused\" }\n | { readonly status: \"invalid\" }\n\nexport interface AccessTokenRecord {\n readonly id: string\n readonly projectId: string\n readonly name: string\n readonly kind: AccessTokenKind\n readonly subject: AuthorizablePrincipal\n readonly tokenHash: string\n /**\n * Optional group constraint. Undefined means \"inherit every current group\";\n * an empty array means the token authenticates but has no group-derived grants.\n */\n readonly groupIds?: readonly string[]\n readonly createdByPrincipal?: Principal\n readonly createdBySessionId?: string\n readonly createdAt: Date\n readonly expiresAt: Date\n readonly revokedAt?: Date\n readonly lastUsedAt?: Date\n // Best-effort client metadata for audit/debugging. Display only.\n readonly lastUsedUserAgent?: string\n readonly lastUsedIpAddress?: string\n}\n\nexport interface InvitationRecord {\n readonly id: string\n readonly projectId: string\n readonly email: string\n readonly groupIds: readonly string[]\n readonly status: InvitationStatus\n readonly createdByPrincipal?: Principal\n readonly createdBySessionId?: string\n readonly createdAt: Date\n readonly updatedAt: Date\n readonly expiresAt: Date\n readonly acceptedAt?: Date\n readonly revokedAt?: Date\n}\n\nexport interface GroupMembershipRecord {\n readonly projectId: string\n readonly userId: string\n readonly groupId: string\n readonly source: GroupMembershipSource\n readonly createdAt: Date\n}\n\nexport interface MagicLinkRecord {\n readonly id: string\n readonly projectId: string\n readonly strategyId: string\n readonly email: string\n readonly tokenHash: string\n readonly returnTo?: string\n readonly createdAt: Date\n readonly expiresAt: Date\n readonly consumedAt?: Date\n readonly revokedAt?: Date\n}\n\nexport interface OidcAuthorizationAttemptRecord {\n readonly id: string\n readonly projectId: string\n readonly strategyId: string\n readonly stateHash: string\n readonly nonceHash: string\n readonly codeVerifier: string\n readonly returnTo?: string\n readonly createdAt: Date\n readonly expiresAt: Date\n readonly consumedAt?: Date\n}\n\nexport interface DeviceAuthorizationRecord {\n readonly id: string\n readonly projectId: string\n readonly deviceCodeHash: string\n readonly userCode: string\n readonly clientName: string\n readonly status: DeviceAuthorizationStatus\n readonly approvedUserId?: string\n readonly approvedSessionId?: string\n readonly createdAt: Date\n readonly expiresAt: Date\n readonly approvedAt?: Date\n readonly deniedAt?: Date\n readonly consumedAt?: Date\n}\n\nexport interface CreateAuthUserInput {\n readonly id: string\n readonly projectId: string\n readonly email: string\n readonly displayName?: string\n readonly avatarUrl?: string\n readonly status?: UserStatus\n readonly createdAt?: Date\n readonly updatedAt?: Date\n}\n\nexport interface UpdateAuthUserProfileInput {\n readonly projectId: string\n readonly id: string\n readonly displayName?: string\n readonly avatarUrl?: string\n readonly updatedAt?: Date\n}\n\nexport interface UpdateAuthUserStatusInput {\n readonly projectId: string\n readonly id: string\n readonly status: UserStatus\n readonly updatedAt?: Date\n}\n\nexport interface ListAuthUsersInput {\n readonly projectId: string\n readonly statuses?: readonly UserStatus[]\n readonly limit?: number\n readonly offset?: number\n readonly order?: \"asc\" | \"desc\"\n}\n\nexport interface ListAuthUsersResult {\n readonly users: readonly UserRecord[]\n readonly hasMore: boolean\n readonly total: number\n}\n\nexport interface UpsertAuthUserIdentityInput {\n readonly projectId: string\n readonly strategyId: string\n readonly subject: string\n readonly userId: string\n readonly claims?: Readonly<Record<string, unknown>>\n readonly createdAt?: Date\n readonly updatedAt?: Date\n}\n\nexport interface CreateAuthServiceAccountInput {\n readonly id: string\n readonly projectId: string\n readonly name: string\n readonly description?: string\n readonly status?: ServiceAccountStatus\n readonly createdByPrincipal?: Principal\n readonly createdBySessionId?: string\n readonly createdAt?: Date\n readonly updatedAt?: Date\n}\n\nexport interface UpdateAuthServiceAccountInput {\n readonly projectId: string\n readonly id: string\n readonly name?: string\n readonly description?: string\n readonly status?: ServiceAccountStatus\n readonly updatedAt?: Date\n}\n\nexport interface ListAuthServiceAccountsInput {\n readonly projectId: string\n readonly statuses?: readonly ServiceAccountStatus[]\n readonly limit?: number\n readonly offset?: number\n readonly order?: \"asc\" | \"desc\"\n}\n\nexport interface ListAuthServiceAccountsResult {\n readonly serviceAccounts: readonly ServiceAccountRecord[]\n readonly hasMore: boolean\n readonly total: number\n}\n\nexport interface UpsertAuthServiceAccountGroupMembershipInput {\n readonly projectId: string\n readonly serviceAccountId: string\n readonly groupId: string\n readonly source: ServiceAccountGroupMembershipRecord[\"source\"]\n readonly createdAt?: Date\n}\n\nexport interface ReconcileAuthServiceAccountGroupMembershipsInput {\n readonly projectId: string\n readonly serviceAccountId: string\n readonly groupIds: readonly string[]\n readonly source: \"agent\"\n readonly updatedAt?: Date\n}\n\nexport interface CreateAuthSessionInput {\n readonly id: string\n readonly projectId: string\n readonly userId: string\n readonly strategyId: string\n readonly tokenHash: string\n readonly createdAt: Date\n readonly expiresAt: Date\n readonly absoluteExpiresAt?: Date\n readonly userAgent?: string\n readonly ipAddress?: string\n readonly bearer?: Pick<BearerSessionState, \"clientName\" | \"accessExpiresAt\" | \"refreshTokenHash\">\n}\n\nexport interface CreateAuthAccessTokenInput {\n readonly id: string\n readonly projectId: string\n readonly name: string\n readonly kind: AccessTokenKind\n readonly subject: AuthorizablePrincipal\n readonly tokenHash: string\n readonly groupIds?: readonly string[]\n readonly createdByPrincipal?: Principal\n readonly createdBySessionId?: string\n readonly createdAt: Date\n readonly expiresAt: Date\n}\n\nexport interface ListAuthAccessTokensInput {\n readonly projectId: string\n readonly kind?: AccessTokenKind\n readonly subject?: AuthorizablePrincipal\n readonly includeRevoked?: boolean\n readonly limit?: number\n readonly offset?: number\n readonly order?: \"asc\" | \"desc\"\n}\n\nexport interface ListAuthAccessTokensResult {\n readonly accessTokens: readonly AccessTokenRecord[]\n readonly hasMore: boolean\n readonly total: number\n}\n\nexport interface CompleteAuthSessionInput {\n readonly id: string\n readonly tokenHash: string\n readonly createdAt: Date\n readonly expiresAt: Date\n readonly absoluteExpiresAt?: Date\n readonly userAgent?: string\n readonly ipAddress?: string\n}\n\nexport interface CreateOrUpdateAuthInvitationInput {\n readonly id: string\n readonly projectId: string\n readonly email: string\n readonly groupIds?: readonly string[]\n readonly createdByPrincipal?: Principal\n readonly createdBySessionId?: string\n readonly createdAt?: Date\n readonly updatedAt?: Date\n readonly expiresAt: Date\n}\n\nexport interface ListAuthInvitationsInput {\n readonly projectId: string\n readonly email?: string\n readonly statuses?: readonly InvitationStatus[]\n readonly groupIds?: readonly string[]\n readonly limit?: number\n readonly offset?: number\n readonly order?: \"asc\" | \"desc\"\n}\n\nexport interface ListAuthInvitationsResult {\n readonly invitations: readonly InvitationRecord[]\n readonly hasMore: boolean\n readonly total: number\n}\n\nexport interface UpsertAuthGroupMembershipInput {\n readonly projectId: string\n readonly userId: string\n readonly groupId: string\n readonly source: GroupMembershipSource\n readonly createdAt?: Date\n}\n\nexport interface CreateAuthMagicLinkInput {\n readonly id: string\n readonly projectId: string\n readonly strategyId: string\n readonly email: string\n readonly tokenHash: string\n readonly returnTo?: string\n readonly createdAt: Date\n readonly expiresAt: Date\n}\n\nexport interface CreateOidcAuthorizationAttemptInput {\n readonly id: string\n readonly projectId: string\n readonly strategyId: string\n readonly stateHash: string\n readonly nonceHash: string\n readonly codeVerifier: string\n readonly returnTo?: string\n readonly createdAt: Date\n readonly expiresAt: Date\n}\n\nexport interface CreateDeviceAuthorizationInput {\n readonly id: string\n readonly projectId: string\n readonly deviceCodeHash: string\n readonly userCode: string\n readonly clientName: string\n readonly createdAt: Date\n readonly expiresAt: Date\n}\n\nexport interface CompleteDeviceAuthorizationInput {\n readonly projectId: string\n readonly id: string\n readonly deviceCodeHash: string\n /** The bearer session to start for the approving user. */\n readonly session: CreateAuthSessionInput & { readonly bearer: BearerSessionState }\n readonly completedAt: Date\n}\n\nexport interface CompleteDeviceAuthorizationResult {\n readonly authorization: DeviceAuthorizationRecord\n readonly session: SessionRecord\n}\n\nexport interface CompleteMagicLinkSignInInput {\n readonly projectId: string\n readonly magicLinkId: string\n readonly tokenHash: string\n readonly completedAt: Date\n readonly newUserId: string\n readonly newUserDisplayName?: string\n readonly newUserAvatarUrl?: string\n readonly allowUserCreationWithoutInvitation?: boolean\n readonly manualGroupIds?: readonly string[]\n readonly session: CompleteAuthSessionInput\n}\n\nexport interface CompleteOidcSignInInput {\n readonly projectId: string\n readonly oidcAuthorizationAttemptId: string\n readonly stateHash: string\n readonly completedAt: Date\n readonly subject: string\n /**\n * An address the strategy has already decided to trust. Without an identity for `subject`, it\n * links the user who has this email, or claims this email's invitation for a new user.\n */\n readonly email: string\n readonly displayName?: string\n readonly avatarUrl?: string\n readonly claims?: Readonly<Record<string, unknown>>\n readonly allowUserCreationWithoutInvitation?: boolean\n readonly manualGroupIds?: readonly string[]\n /**\n * The groups the identity provider grants this user. When present, the user's `directory`\n * memberships become exactly these; memberships from any other source are never touched, and a\n * group the user already has from another source keeps it. Omitted, nothing is synced.\n */\n readonly directoryGroupIds?: readonly string[]\n readonly newUserId: string\n readonly session: CompleteAuthSessionInput\n}\n\nexport interface CompleteSignInResult {\n readonly user: UserRecord\n readonly session: SessionRecord\n readonly identity?: UserIdentityRecord\n readonly invitation?: InvitationRecord\n readonly groupMemberships: readonly GroupMembershipRecord[]\n}\n\nexport interface SuspendUserAndRevokeSessionsInput {\n readonly projectId: string\n readonly userId: string\n readonly suspendedAt: Date\n}\n\nexport interface AuthUserStore {\n create(input: CreateAuthUserInput): Promise<UserRecord>\n getById(params: { readonly projectId: string; readonly id: string }): Promise<UserRecord | null>\n getByEmail(params: {\n readonly projectId: string\n readonly email: string\n }): Promise<UserRecord | null>\n updateProfile(input: UpdateAuthUserProfileInput): Promise<UserRecord>\n updateStatus(input: UpdateAuthUserStatusInput): Promise<UserRecord>\n list(input: ListAuthUsersInput): Promise<ListAuthUsersResult>\n}\n\nexport interface AuthUserIdentityStore {\n upsert(input: UpsertAuthUserIdentityInput): Promise<UserIdentityRecord>\n getBySubject(params: {\n readonly projectId: string\n readonly strategyId: string\n readonly subject: string\n }): Promise<UserIdentityRecord | null>\n listForUser(params: {\n readonly projectId: string\n readonly userId: string\n }): Promise<readonly UserIdentityRecord[]>\n}\n\nexport interface AuthServiceAccountStore {\n create(input: CreateAuthServiceAccountInput): Promise<ServiceAccountRecord>\n getById(params: {\n readonly projectId: string\n readonly id: string\n }): Promise<ServiceAccountRecord | null>\n /** Update only the provided fields; omitted fields must remain unchanged atomically. */\n update(input: UpdateAuthServiceAccountInput): Promise<ServiceAccountRecord>\n list(input: ListAuthServiceAccountsInput): Promise<ListAuthServiceAccountsResult>\n}\n\nexport interface AuthServiceAccountGroupMembershipStore {\n upsert(\n input: UpsertAuthServiceAccountGroupMembershipInput\n ): Promise<ServiceAccountGroupMembershipRecord>\n reconcileForServiceAccount(\n input: ReconcileAuthServiceAccountGroupMembershipsInput\n ): Promise<readonly ServiceAccountGroupMembershipRecord[]>\n listForServiceAccount(params: {\n readonly projectId: string\n readonly serviceAccountId: string\n }): Promise<readonly ServiceAccountGroupMembershipRecord[]>\n listForGroup(params: {\n readonly projectId: string\n readonly groupId: string\n }): Promise<readonly ServiceAccountGroupMembershipRecord[]>\n}\n\nexport interface AuthSessionStore {\n create(input: CreateAuthSessionInput): Promise<SessionRecord>\n getById(params: {\n readonly projectId: string\n readonly id: string\n }): Promise<SessionRecord | null>\n // All active sessions for a user, most-recently-active\n // first. Backs the active-sessions view.\n listActiveByUserId(params: {\n readonly projectId: string\n readonly userId: string\n readonly now: Date\n }): Promise<readonly SessionRecord[]>\n /** A live browser (cookie) session whose secret hashes to `tokenHash`. */\n findValidByTokenHash(params: {\n readonly projectId: string\n readonly id: string\n readonly tokenHash: string\n readonly now: Date\n }): Promise<SessionRecord | null>\n /** A live bearer session whose current, unexpired access token hashes to `tokenHash`. */\n findValidByAccessTokenHash(params: {\n readonly projectId: string\n readonly id: string\n readonly tokenHash: string\n readonly now: Date\n }): Promise<SessionRecord | null>\n /**\n * Atomically replace a live bearer session's tokens. The current refresh token rotates; the one\n * it replaced also rotates within `reuseGraceMs` of that replacement. Presenting it later revokes\n * the session. `next.expiresAt` extends the idle deadline, never past the absolute one.\n */\n rotateRefreshToken(params: {\n readonly projectId: string\n readonly id: string\n readonly refreshTokenHash: string\n readonly now: Date\n readonly reuseGraceMs: number\n readonly next: {\n readonly tokenHash: string\n readonly accessExpiresAt: Date\n readonly refreshTokenHash: string\n readonly expiresAt: Date\n }\n }): Promise<RotateSessionRefreshTokenResult>\n renewIfValid(params: {\n readonly projectId: string\n readonly id: string\n readonly tokenHash: string\n readonly now: Date\n readonly expiresAt: Date\n }): Promise<SessionRecord | null>\n revoke(params: {\n readonly projectId: string\n readonly id: string\n readonly revokedAt: Date\n }): Promise<SessionRecord>\n revokeActiveForUser(params: {\n readonly projectId: string\n readonly userId: string\n readonly revokedAt: Date\n }): Promise<readonly SessionRecord[]>\n touch(params: {\n readonly projectId: string\n readonly id: string\n readonly lastSeenAt: Date\n }): Promise<SessionRecord>\n}\n\nexport interface AuthAccessTokenStore {\n create(input: CreateAuthAccessTokenInput): Promise<AccessTokenRecord>\n getById(params: {\n readonly projectId: string\n readonly id: string\n }): Promise<AccessTokenRecord | null>\n list(input: ListAuthAccessTokensInput): Promise<ListAuthAccessTokensResult>\n findValidByTokenHash(params: {\n readonly projectId: string\n readonly id: string\n readonly kind: AccessTokenKind\n readonly tokenHash: string\n readonly now: Date\n }): Promise<AccessTokenRecord | null>\n revoke(params: {\n readonly projectId: string\n readonly id: string\n readonly revokedAt: Date\n }): Promise<AccessTokenRecord>\n touch(params: {\n readonly projectId: string\n readonly id: string\n readonly lastUsedAt: Date\n readonly userAgent?: string\n readonly ipAddress?: string\n }): Promise<AccessTokenRecord>\n}\n\nexport interface AuthInvitationStore {\n createOrUpdateActive(input: CreateOrUpdateAuthInvitationInput): Promise<InvitationRecord>\n getById(params: {\n readonly projectId: string\n readonly id: string\n }): Promise<InvitationRecord | null>\n getActiveByEmail(params: {\n readonly projectId: string\n readonly email: string\n readonly now: Date\n }): Promise<InvitationRecord | null>\n list(input: ListAuthInvitationsInput): Promise<ListAuthInvitationsResult>\n accept(params: {\n readonly projectId: string\n readonly id: string\n readonly acceptedAt: Date\n }): Promise<InvitationRecord>\n revoke(params: {\n readonly projectId: string\n readonly id: string\n readonly revokedAt: Date\n }): Promise<InvitationRecord>\n}\n\nexport interface AuthGroupMembershipStore {\n upsert(input: UpsertAuthGroupMembershipInput): Promise<GroupMembershipRecord>\n /**\n * Removes a single group membership. Returns the removed record, or `null` when\n * no matching membership exists (including for a missing user). Idempotent.\n */\n remove(params: {\n readonly projectId: string\n readonly userId: string\n readonly groupId: string\n }): Promise<GroupMembershipRecord | null>\n listForUser(params: {\n readonly projectId: string\n readonly userId: string\n }): Promise<readonly GroupMembershipRecord[]>\n listForGroup(params: {\n readonly projectId: string\n readonly groupId: string\n }): Promise<readonly GroupMembershipRecord[]>\n}\n\nexport interface AuthMagicLinkStore {\n create(input: CreateAuthMagicLinkInput): Promise<MagicLinkRecord>\n getById(params: {\n readonly projectId: string\n readonly id: string\n }): Promise<MagicLinkRecord | null>\n getActiveByEmail(params: {\n readonly projectId: string\n readonly email: string\n readonly now: Date\n }): Promise<MagicLinkRecord | null>\n consume(params: {\n readonly projectId: string\n readonly id: string\n readonly tokenHash: string\n readonly consumedAt: Date\n }): Promise<MagicLinkRecord>\n revokeActiveForEmail(params: {\n readonly projectId: string\n readonly email: string\n readonly revokedAt: Date\n }): Promise<readonly MagicLinkRecord[]>\n}\n\nexport interface AuthOidcAuthorizationAttemptStore {\n create(input: CreateOidcAuthorizationAttemptInput): Promise<OidcAuthorizationAttemptRecord>\n getById(params: {\n readonly projectId: string\n readonly id: string\n }): Promise<OidcAuthorizationAttemptRecord | null>\n consume(params: {\n readonly projectId: string\n readonly id: string\n readonly stateHash: string\n readonly consumedAt: Date\n }): Promise<OidcAuthorizationAttemptRecord>\n}\n\nexport interface AuthDeviceAuthorizationStore {\n create(input: CreateDeviceAuthorizationInput): Promise<DeviceAuthorizationRecord>\n getById(params: {\n readonly projectId: string\n readonly id: string\n }): Promise<DeviceAuthorizationRecord | null>\n getByUserCode(params: {\n readonly projectId: string\n readonly userCode: string\n }): Promise<DeviceAuthorizationRecord | null>\n approve(params: {\n readonly projectId: string\n readonly id: string\n readonly userId: string\n readonly sessionId: string\n readonly approvedAt: Date\n }): Promise<DeviceAuthorizationRecord>\n deny(params: {\n readonly projectId: string\n readonly id: string\n readonly deniedAt: Date\n }): Promise<DeviceAuthorizationRecord>\n}\n\nexport interface AuthStorage {\n readonly users: AuthUserStore\n readonly identities: AuthUserIdentityStore\n readonly serviceAccounts: AuthServiceAccountStore\n readonly serviceAccountGroupMemberships: AuthServiceAccountGroupMembershipStore\n readonly sessions: AuthSessionStore\n readonly accessTokens: AuthAccessTokenStore\n readonly invitations: AuthInvitationStore\n readonly groupMemberships: AuthGroupMembershipStore\n readonly magicLinks: AuthMagicLinkStore\n readonly oidcAuthorizationAttempts: AuthOidcAuthorizationAttemptStore\n readonly deviceAuthorizations: AuthDeviceAuthorizationStore\n\n completeMagicLinkSignIn(input: CompleteMagicLinkSignInInput): Promise<CompleteSignInResult>\n completeOidcSignIn(input: CompleteOidcSignInInput): Promise<CompleteSignInResult>\n completeDeviceAuthorization(\n input: CompleteDeviceAuthorizationInput\n ): Promise<CompleteDeviceAuthorizationResult>\n suspendUserAndRevokeSessions(input: SuspendUserAndRevokeSessionsInput): Promise<UserRecord>\n}\n",
|
|
20
|
+
"import type { AccessTokenKind, Principal } from \"../../auth\"\nimport type { AuthorizablePrincipal } from \"../../execution/types\"\n\nexport type UserStatus = \"active\" | \"suspended\"\nexport type ServiceAccountStatus = \"active\" | \"suspended\"\nexport type InvitationStatus = \"pending\" | \"accepted\" | \"revoked\"\n/** `directory`: owned by the identity provider, and synced to its groups on every sign-in. */\nexport type GroupMembershipSource = \"invitation\" | \"manual\" | \"agent\" | \"directory\"\nexport type DeviceAuthorizationStatus = \"pending\" | \"approved\" | \"denied\" | \"consumed\"\nexport const MAX_PENDING_DEVICE_AUTHORIZATIONS = 100\n\nexport interface UserRecord {\n readonly id: string\n readonly projectId: string\n readonly email: string\n readonly displayName?: string\n readonly avatarUrl?: string\n readonly status: UserStatus\n readonly createdAt: Date\n readonly updatedAt: Date\n}\n\nexport interface UserIdentityRecord {\n readonly projectId: string\n readonly strategyId: string\n readonly subject: string\n readonly userId: string\n readonly claims?: Readonly<Record<string, unknown>>\n readonly createdAt: Date\n readonly updatedAt: Date\n}\n\nexport interface ServiceAccountRecord {\n readonly id: string\n readonly projectId: string\n readonly name: string\n readonly description?: string\n readonly status: ServiceAccountStatus\n readonly createdByPrincipal?: Principal\n readonly createdBySessionId?: string\n readonly createdAt: Date\n readonly updatedAt: Date\n}\n\nexport interface ServiceAccountGroupMembershipRecord {\n readonly projectId: string\n readonly serviceAccountId: string\n readonly groupId: string\n /** Service accounts never sign in, so no identity provider owns their memberships. */\n readonly source: Exclude<GroupMembershipSource, \"directory\">\n readonly createdAt: Date\n}\n\nexport interface SessionRecord {\n readonly id: string\n readonly projectId: string\n readonly userId: string\n readonly strategyId: string\n /** The web app a browser session belongs to. A bearer session belongs to none and ignores it. */\n readonly tokenHash: string\n readonly createdAt: Date\n readonly expiresAt: Date\n readonly absoluteExpiresAt?: Date\n readonly revokedAt?: Date\n readonly lastSeenAt?: Date\n // Best-effort client metadata captured at sign-in, for the active-sessions\n // view. Display only — never used for authorization.\n readonly userAgent?: string\n readonly ipAddress?: string\n /** Present when a native client holds the session as bearer tokens instead of a cookie. */\n readonly bearer?: BearerSessionState\n}\n\n/**\n * A native client's credentials for its session. `tokenHash` on the session is the current access\n * token's hash; the refresh token rotates on every refresh.\n */\nexport interface BearerSessionState {\n /** Self-reported client label, such as \"sixb CLI on alex-mbp\". Display only. */\n readonly clientName: string\n readonly accessExpiresAt: Date\n readonly refreshTokenHash: string\n /** The refresh token the last rotation replaced, accepted briefly in case its response was lost. */\n readonly previousRefreshTokenHash?: string\n readonly refreshedAt?: Date\n}\n\nexport type RotateSessionRefreshTokenResult =\n | { readonly status: \"rotated\"; readonly session: SessionRecord }\n /** A replaced refresh token came back after the grace window; the session is now revoked. */\n | { readonly status: \"reused\" }\n | { readonly status: \"invalid\" }\n\nexport interface AccessTokenRecord {\n readonly id: string\n readonly projectId: string\n readonly name: string\n readonly kind: AccessTokenKind\n readonly subject: AuthorizablePrincipal\n readonly tokenHash: string\n /**\n * Optional group constraint. Undefined means \"inherit every current group\";\n * an empty array means the token authenticates but has no group-derived grants.\n */\n readonly groupIds?: readonly string[]\n readonly createdByPrincipal?: Principal\n readonly createdBySessionId?: string\n readonly createdAt: Date\n readonly expiresAt: Date\n readonly revokedAt?: Date\n readonly lastUsedAt?: Date\n // Best-effort client metadata for audit/debugging. Display only.\n readonly lastUsedUserAgent?: string\n readonly lastUsedIpAddress?: string\n}\n\nexport interface InvitationRecord {\n readonly id: string\n readonly projectId: string\n readonly email: string\n readonly groupIds: readonly string[]\n readonly status: InvitationStatus\n readonly createdByPrincipal?: Principal\n readonly createdBySessionId?: string\n readonly createdAt: Date\n readonly updatedAt: Date\n readonly expiresAt: Date\n readonly acceptedAt?: Date\n readonly revokedAt?: Date\n}\n\nexport interface GroupMembershipRecord {\n readonly projectId: string\n readonly userId: string\n readonly groupId: string\n readonly source: GroupMembershipSource\n readonly createdAt: Date\n}\n\nexport interface MagicLinkRecord {\n readonly id: string\n readonly projectId: string\n readonly strategyId: string\n readonly email: string\n readonly tokenHash: string\n readonly returnTo?: string\n readonly createdAt: Date\n readonly expiresAt: Date\n readonly consumedAt?: Date\n readonly revokedAt?: Date\n}\n\nexport interface OidcAuthorizationAttemptRecord {\n readonly id: string\n readonly projectId: string\n readonly strategyId: string\n readonly stateHash: string\n readonly nonceHash: string\n readonly codeVerifier: string\n readonly returnTo?: string\n readonly createdAt: Date\n readonly expiresAt: Date\n readonly consumedAt?: Date\n}\n\nexport interface DeviceAuthorizationRecord {\n readonly id: string\n readonly projectId: string\n readonly deviceCodeHash: string\n readonly userCode: string\n readonly clientName: string\n readonly status: DeviceAuthorizationStatus\n readonly approvedUserId?: string\n readonly approvedSessionId?: string\n readonly createdAt: Date\n readonly expiresAt: Date\n readonly approvedAt?: Date\n readonly deniedAt?: Date\n readonly consumedAt?: Date\n}\n\nexport interface CreateAuthUserInput {\n readonly id: string\n readonly projectId: string\n readonly email: string\n readonly displayName?: string\n readonly avatarUrl?: string\n readonly status?: UserStatus\n readonly createdAt?: Date\n readonly updatedAt?: Date\n}\n\nexport interface UpdateAuthUserProfileInput {\n readonly projectId: string\n readonly id: string\n readonly displayName?: string\n readonly avatarUrl?: string\n readonly updatedAt?: Date\n}\n\nexport interface UpdateAuthUserStatusInput {\n readonly projectId: string\n readonly id: string\n readonly status: UserStatus\n readonly updatedAt?: Date\n}\n\nexport interface ListAuthUsersInput {\n readonly projectId: string\n readonly statuses?: readonly UserStatus[]\n readonly limit?: number\n readonly offset?: number\n readonly order?: \"asc\" | \"desc\"\n}\n\nexport interface ListAuthUsersResult {\n readonly users: readonly UserRecord[]\n readonly hasMore: boolean\n readonly total: number\n}\n\nexport interface UpsertAuthUserIdentityInput {\n readonly projectId: string\n readonly strategyId: string\n readonly subject: string\n readonly userId: string\n readonly claims?: Readonly<Record<string, unknown>>\n readonly createdAt?: Date\n readonly updatedAt?: Date\n}\n\nexport interface CreateAuthServiceAccountInput {\n readonly id: string\n readonly projectId: string\n readonly name: string\n readonly description?: string\n readonly status?: ServiceAccountStatus\n readonly createdByPrincipal?: Principal\n readonly createdBySessionId?: string\n readonly createdAt?: Date\n readonly updatedAt?: Date\n}\n\nexport interface UpdateAuthServiceAccountInput {\n readonly projectId: string\n readonly id: string\n readonly name?: string\n readonly description?: string\n readonly status?: ServiceAccountStatus\n readonly updatedAt?: Date\n}\n\nexport interface ListAuthServiceAccountsInput {\n readonly projectId: string\n readonly statuses?: readonly ServiceAccountStatus[]\n readonly limit?: number\n readonly offset?: number\n readonly order?: \"asc\" | \"desc\"\n}\n\nexport interface ListAuthServiceAccountsResult {\n readonly serviceAccounts: readonly ServiceAccountRecord[]\n readonly hasMore: boolean\n readonly total: number\n}\n\nexport interface UpsertAuthServiceAccountGroupMembershipInput {\n readonly projectId: string\n readonly serviceAccountId: string\n readonly groupId: string\n readonly source: ServiceAccountGroupMembershipRecord[\"source\"]\n readonly createdAt?: Date\n}\n\nexport interface ReconcileAuthServiceAccountGroupMembershipsInput {\n readonly projectId: string\n readonly serviceAccountId: string\n readonly groupIds: readonly string[]\n readonly source: \"agent\"\n readonly updatedAt?: Date\n}\n\nexport interface CreateAuthSessionInput {\n readonly id: string\n readonly projectId: string\n readonly userId: string\n readonly strategyId: string\n readonly tokenHash: string\n readonly createdAt: Date\n readonly expiresAt: Date\n readonly absoluteExpiresAt?: Date\n readonly userAgent?: string\n readonly ipAddress?: string\n readonly bearer?: Pick<BearerSessionState, \"clientName\" | \"accessExpiresAt\" | \"refreshTokenHash\">\n}\n\nexport interface CreateAuthAccessTokenInput {\n readonly id: string\n readonly projectId: string\n readonly name: string\n readonly kind: AccessTokenKind\n readonly subject: AuthorizablePrincipal\n readonly tokenHash: string\n readonly groupIds?: readonly string[]\n readonly createdByPrincipal?: Principal\n readonly createdBySessionId?: string\n readonly createdAt: Date\n readonly expiresAt: Date\n}\n\nexport interface ListAuthAccessTokensInput {\n readonly projectId: string\n readonly kind?: AccessTokenKind\n readonly subject?: AuthorizablePrincipal\n readonly includeRevoked?: boolean\n readonly limit?: number\n readonly offset?: number\n readonly order?: \"asc\" | \"desc\"\n}\n\nexport interface ListAuthAccessTokensResult {\n readonly accessTokens: readonly AccessTokenRecord[]\n readonly hasMore: boolean\n readonly total: number\n}\n\nexport interface ListAuthSessionsInput {\n readonly projectId: string\n readonly userId: string\n readonly limit: number\n /**\n * Continue a list: sessions created at or before `createdAt`, past the first `skip` of those\n * created exactly then, which the previous pages returned.\n */\n readonly before?: { readonly createdAt: Date; readonly skip: number }\n}\n\nexport interface ListAuthSessionsResult {\n readonly sessions: readonly SessionRecord[]\n readonly hasMore: boolean\n}\n\nexport interface CompleteAuthSessionInput {\n readonly id: string\n readonly tokenHash: string\n readonly createdAt: Date\n readonly expiresAt: Date\n readonly absoluteExpiresAt?: Date\n readonly userAgent?: string\n readonly ipAddress?: string\n}\n\nexport interface CreateOrUpdateAuthInvitationInput {\n readonly id: string\n readonly projectId: string\n readonly email: string\n readonly groupIds?: readonly string[]\n readonly createdByPrincipal?: Principal\n readonly createdBySessionId?: string\n readonly createdAt?: Date\n readonly updatedAt?: Date\n readonly expiresAt: Date\n}\n\nexport interface ListAuthInvitationsInput {\n readonly projectId: string\n readonly email?: string\n readonly statuses?: readonly InvitationStatus[]\n readonly groupIds?: readonly string[]\n readonly limit?: number\n readonly offset?: number\n readonly order?: \"asc\" | \"desc\"\n}\n\nexport interface ListAuthInvitationsResult {\n readonly invitations: readonly InvitationRecord[]\n readonly hasMore: boolean\n readonly total: number\n}\n\nexport interface UpsertAuthGroupMembershipInput {\n readonly projectId: string\n readonly userId: string\n readonly groupId: string\n readonly source: GroupMembershipSource\n readonly createdAt?: Date\n}\n\nexport interface CreateAuthMagicLinkInput {\n readonly id: string\n readonly projectId: string\n readonly strategyId: string\n readonly email: string\n readonly tokenHash: string\n readonly returnTo?: string\n readonly createdAt: Date\n readonly expiresAt: Date\n}\n\nexport interface CreateOidcAuthorizationAttemptInput {\n readonly id: string\n readonly projectId: string\n readonly strategyId: string\n readonly stateHash: string\n readonly nonceHash: string\n readonly codeVerifier: string\n readonly returnTo?: string\n readonly createdAt: Date\n readonly expiresAt: Date\n}\n\nexport interface CreateDeviceAuthorizationInput {\n readonly id: string\n readonly projectId: string\n readonly deviceCodeHash: string\n readonly userCode: string\n readonly clientName: string\n readonly createdAt: Date\n readonly expiresAt: Date\n}\n\nexport interface CompleteDeviceAuthorizationInput {\n readonly projectId: string\n readonly id: string\n readonly deviceCodeHash: string\n /** The bearer session to start for the approving user. */\n readonly session: CreateAuthSessionInput & { readonly bearer: BearerSessionState }\n readonly completedAt: Date\n}\n\nexport interface CompleteDeviceAuthorizationResult {\n readonly authorization: DeviceAuthorizationRecord\n readonly session: SessionRecord\n}\n\nexport interface CompleteMagicLinkSignInInput {\n readonly projectId: string\n readonly magicLinkId: string\n readonly tokenHash: string\n readonly completedAt: Date\n readonly newUserId: string\n readonly newUserDisplayName?: string\n readonly newUserAvatarUrl?: string\n readonly allowUserCreationWithoutInvitation?: boolean\n readonly manualGroupIds?: readonly string[]\n readonly session: CompleteAuthSessionInput\n}\n\nexport interface CompleteOidcSignInInput {\n readonly projectId: string\n readonly oidcAuthorizationAttemptId: string\n readonly stateHash: string\n readonly completedAt: Date\n readonly subject: string\n /**\n * An address the strategy has already decided to trust. Without an identity for `subject`, it\n * links the user who has this email, or claims this email's invitation for a new user.\n */\n readonly email: string\n readonly displayName?: string\n readonly avatarUrl?: string\n readonly claims?: Readonly<Record<string, unknown>>\n readonly allowUserCreationWithoutInvitation?: boolean\n readonly manualGroupIds?: readonly string[]\n /**\n * The groups the identity provider grants this user. When present, the user's `directory`\n * memberships become exactly these; memberships from any other source are never touched, and a\n * group the user already has from another source keeps it. Omitted, nothing is synced.\n */\n readonly directoryGroupIds?: readonly string[]\n readonly newUserId: string\n readonly session: CompleteAuthSessionInput\n}\n\nexport interface CompleteSignInResult {\n readonly user: UserRecord\n readonly session: SessionRecord\n readonly identity?: UserIdentityRecord\n readonly invitation?: InvitationRecord\n readonly groupMemberships: readonly GroupMembershipRecord[]\n}\n\nexport interface SuspendUserAndRevokeSessionsInput {\n readonly projectId: string\n readonly userId: string\n readonly suspendedAt: Date\n}\n\nexport interface AuthUserStore {\n create(input: CreateAuthUserInput): Promise<UserRecord>\n getById(params: { readonly projectId: string; readonly id: string }): Promise<UserRecord | null>\n getByEmail(params: {\n readonly projectId: string\n readonly email: string\n }): Promise<UserRecord | null>\n updateProfile(input: UpdateAuthUserProfileInput): Promise<UserRecord>\n updateStatus(input: UpdateAuthUserStatusInput): Promise<UserRecord>\n list(input: ListAuthUsersInput): Promise<ListAuthUsersResult>\n}\n\nexport interface AuthUserIdentityStore {\n upsert(input: UpsertAuthUserIdentityInput): Promise<UserIdentityRecord>\n getBySubject(params: {\n readonly projectId: string\n readonly strategyId: string\n readonly subject: string\n }): Promise<UserIdentityRecord | null>\n listForUser(params: {\n readonly projectId: string\n readonly userId: string\n }): Promise<readonly UserIdentityRecord[]>\n}\n\nexport interface AuthServiceAccountStore {\n create(input: CreateAuthServiceAccountInput): Promise<ServiceAccountRecord>\n getById(params: {\n readonly projectId: string\n readonly id: string\n }): Promise<ServiceAccountRecord | null>\n /** Update only the provided fields; omitted fields must remain unchanged atomically. */\n update(input: UpdateAuthServiceAccountInput): Promise<ServiceAccountRecord>\n list(input: ListAuthServiceAccountsInput): Promise<ListAuthServiceAccountsResult>\n}\n\nexport interface AuthServiceAccountGroupMembershipStore {\n upsert(\n input: UpsertAuthServiceAccountGroupMembershipInput\n ): Promise<ServiceAccountGroupMembershipRecord>\n reconcileForServiceAccount(\n input: ReconcileAuthServiceAccountGroupMembershipsInput\n ): Promise<readonly ServiceAccountGroupMembershipRecord[]>\n listForServiceAccount(params: {\n readonly projectId: string\n readonly serviceAccountId: string\n }): Promise<readonly ServiceAccountGroupMembershipRecord[]>\n listForGroup(params: {\n readonly projectId: string\n readonly groupId: string\n }): Promise<readonly ServiceAccountGroupMembershipRecord[]>\n}\n\nexport interface AuthSessionStore {\n create(input: CreateAuthSessionInput): Promise<SessionRecord>\n getById(params: {\n readonly projectId: string\n readonly id: string\n }): Promise<SessionRecord | null>\n // All active sessions for a user, most-recently-active\n // first. Backs the active-sessions view.\n listActiveByUserId(params: {\n readonly projectId: string\n readonly userId: string\n readonly now: Date\n }): Promise<readonly SessionRecord[]>\n /** Every session of a user, revoked and expired ones too, newest first: a sign-in history. */\n listByUserId(params: ListAuthSessionsInput): Promise<ListAuthSessionsResult>\n /** A live browser (cookie) session whose secret hashes to `tokenHash`. */\n findValidByTokenHash(params: {\n readonly projectId: string\n readonly id: string\n readonly tokenHash: string\n readonly now: Date\n }): Promise<SessionRecord | null>\n /** A live bearer session whose current, unexpired access token hashes to `tokenHash`. */\n findValidByAccessTokenHash(params: {\n readonly projectId: string\n readonly id: string\n readonly tokenHash: string\n readonly now: Date\n }): Promise<SessionRecord | null>\n /**\n * Atomically replace a live bearer session's tokens. The current refresh token rotates; the one\n * it replaced also rotates within `reuseGraceMs` of that replacement. Presenting it later revokes\n * the session. `next.expiresAt` extends the idle deadline, never past the absolute one.\n */\n rotateRefreshToken(params: {\n readonly projectId: string\n readonly id: string\n readonly refreshTokenHash: string\n readonly now: Date\n readonly reuseGraceMs: number\n readonly next: {\n readonly tokenHash: string\n readonly accessExpiresAt: Date\n readonly refreshTokenHash: string\n readonly expiresAt: Date\n }\n }): Promise<RotateSessionRefreshTokenResult>\n renewIfValid(params: {\n readonly projectId: string\n readonly id: string\n readonly tokenHash: string\n readonly now: Date\n readonly expiresAt: Date\n }): Promise<SessionRecord | null>\n revoke(params: {\n readonly projectId: string\n readonly id: string\n readonly revokedAt: Date\n }): Promise<SessionRecord>\n revokeActiveForUser(params: {\n readonly projectId: string\n readonly userId: string\n readonly revokedAt: Date\n }): Promise<readonly SessionRecord[]>\n touch(params: {\n readonly projectId: string\n readonly id: string\n readonly lastSeenAt: Date\n }): Promise<SessionRecord>\n}\n\nexport interface AuthAccessTokenStore {\n create(input: CreateAuthAccessTokenInput): Promise<AccessTokenRecord>\n getById(params: {\n readonly projectId: string\n readonly id: string\n }): Promise<AccessTokenRecord | null>\n list(input: ListAuthAccessTokensInput): Promise<ListAuthAccessTokensResult>\n findValidByTokenHash(params: {\n readonly projectId: string\n readonly id: string\n readonly kind: AccessTokenKind\n readonly tokenHash: string\n readonly now: Date\n }): Promise<AccessTokenRecord | null>\n revoke(params: {\n readonly projectId: string\n readonly id: string\n readonly revokedAt: Date\n }): Promise<AccessTokenRecord>\n touch(params: {\n readonly projectId: string\n readonly id: string\n readonly lastUsedAt: Date\n readonly userAgent?: string\n readonly ipAddress?: string\n }): Promise<AccessTokenRecord>\n}\n\nexport interface AuthInvitationStore {\n createOrUpdateActive(input: CreateOrUpdateAuthInvitationInput): Promise<InvitationRecord>\n getById(params: {\n readonly projectId: string\n readonly id: string\n }): Promise<InvitationRecord | null>\n getActiveByEmail(params: {\n readonly projectId: string\n readonly email: string\n readonly now: Date\n }): Promise<InvitationRecord | null>\n list(input: ListAuthInvitationsInput): Promise<ListAuthInvitationsResult>\n accept(params: {\n readonly projectId: string\n readonly id: string\n readonly acceptedAt: Date\n }): Promise<InvitationRecord>\n revoke(params: {\n readonly projectId: string\n readonly id: string\n readonly revokedAt: Date\n }): Promise<InvitationRecord>\n}\n\nexport interface AuthGroupMembershipStore {\n upsert(input: UpsertAuthGroupMembershipInput): Promise<GroupMembershipRecord>\n /**\n * Removes a single group membership. Returns the removed record, or `null` when\n * no matching membership exists (including for a missing user). Idempotent.\n */\n remove(params: {\n readonly projectId: string\n readonly userId: string\n readonly groupId: string\n }): Promise<GroupMembershipRecord | null>\n listForUser(params: {\n readonly projectId: string\n readonly userId: string\n }): Promise<readonly GroupMembershipRecord[]>\n listForGroup(params: {\n readonly projectId: string\n readonly groupId: string\n }): Promise<readonly GroupMembershipRecord[]>\n}\n\nexport interface AuthMagicLinkStore {\n create(input: CreateAuthMagicLinkInput): Promise<MagicLinkRecord>\n getById(params: {\n readonly projectId: string\n readonly id: string\n }): Promise<MagicLinkRecord | null>\n getActiveByEmail(params: {\n readonly projectId: string\n readonly email: string\n readonly now: Date\n }): Promise<MagicLinkRecord | null>\n consume(params: {\n readonly projectId: string\n readonly id: string\n readonly tokenHash: string\n readonly consumedAt: Date\n }): Promise<MagicLinkRecord>\n revokeActiveForEmail(params: {\n readonly projectId: string\n readonly email: string\n readonly revokedAt: Date\n }): Promise<readonly MagicLinkRecord[]>\n}\n\nexport interface AuthOidcAuthorizationAttemptStore {\n create(input: CreateOidcAuthorizationAttemptInput): Promise<OidcAuthorizationAttemptRecord>\n getById(params: {\n readonly projectId: string\n readonly id: string\n }): Promise<OidcAuthorizationAttemptRecord | null>\n consume(params: {\n readonly projectId: string\n readonly id: string\n readonly stateHash: string\n readonly consumedAt: Date\n }): Promise<OidcAuthorizationAttemptRecord>\n}\n\nexport interface AuthDeviceAuthorizationStore {\n create(input: CreateDeviceAuthorizationInput): Promise<DeviceAuthorizationRecord>\n getById(params: {\n readonly projectId: string\n readonly id: string\n }): Promise<DeviceAuthorizationRecord | null>\n getByUserCode(params: {\n readonly projectId: string\n readonly userCode: string\n }): Promise<DeviceAuthorizationRecord | null>\n approve(params: {\n readonly projectId: string\n readonly id: string\n readonly userId: string\n readonly sessionId: string\n readonly approvedAt: Date\n }): Promise<DeviceAuthorizationRecord>\n deny(params: {\n readonly projectId: string\n readonly id: string\n readonly deniedAt: Date\n }): Promise<DeviceAuthorizationRecord>\n}\n\nexport interface AuthStorage {\n readonly users: AuthUserStore\n readonly identities: AuthUserIdentityStore\n readonly serviceAccounts: AuthServiceAccountStore\n readonly serviceAccountGroupMemberships: AuthServiceAccountGroupMembershipStore\n readonly sessions: AuthSessionStore\n readonly accessTokens: AuthAccessTokenStore\n readonly invitations: AuthInvitationStore\n readonly groupMemberships: AuthGroupMembershipStore\n readonly magicLinks: AuthMagicLinkStore\n readonly oidcAuthorizationAttempts: AuthOidcAuthorizationAttemptStore\n readonly deviceAuthorizations: AuthDeviceAuthorizationStore\n\n completeMagicLinkSignIn(input: CompleteMagicLinkSignInInput): Promise<CompleteSignInResult>\n completeOidcSignIn(input: CompleteOidcSignInInput): Promise<CompleteSignInResult>\n completeDeviceAuthorization(\n input: CompleteDeviceAuthorizationInput\n ): Promise<CompleteDeviceAuthorizationResult>\n suspendUserAndRevokeSessions(input: SuspendUserAndRevokeSessionsInput): Promise<UserRecord>\n}\n",
|
|
20
21
|
"import { AuthStorageError } from \"../errors\"\nimport type {\n AuthDeviceAuthorizationStore,\n CreateDeviceAuthorizationInput,\n DeviceAuthorizationRecord,\n} from \"../types\"\nimport { MAX_PENDING_DEVICE_AUTHORIZATIONS } from \"../types\"\nimport type { AuthStorageState } from \"./shared\"\nimport {\n assertNonEmpty,\n cloneRecord,\n deviceAuthorizationKey,\n isActiveSession,\n sessionKey,\n userKey,\n} from \"./shared\"\n\nexport class InMemoryAuthDeviceAuthorizationStore implements AuthDeviceAuthorizationStore {\n constructor(private readonly state: AuthStorageState) {}\n\n async create(input: CreateDeviceAuthorizationInput): Promise<DeviceAuthorizationRecord> {\n const id = assertNonEmpty(input.id, \"Device authorization id\")\n const projectId = assertNonEmpty(input.projectId, \"Project id\")\n for (const [key, authorization] of this.state.deviceAuthorizations) {\n if (authorization.projectId === projectId && authorization.expiresAt <= input.createdAt) {\n this.state.deviceAuthorizations.delete(key)\n }\n }\n const pending = [...this.state.deviceAuthorizations.values()].filter(\n (authorization) => authorization.projectId === projectId && authorization.status === \"pending\"\n ).length\n if (pending >= MAX_PENDING_DEVICE_AUTHORIZATIONS) {\n throw new AuthStorageError(\n \"device_authorization_limit_exceeded\",\n `[Sixb] Project '${projectId}' has too many pending device authorizations.`\n )\n }\n const key = deviceAuthorizationKey(projectId, id)\n if (this.state.deviceAuthorizations.has(key)) {\n throw duplicateAuthorization(id, projectId)\n }\n const record: DeviceAuthorizationRecord = {\n id,\n projectId,\n deviceCodeHash: assertNonEmpty(input.deviceCodeHash, \"Device code hash\"),\n userCode: assertNonEmpty(input.userCode, \"User code\"),\n clientName: assertNonEmpty(input.clientName, \"Client name\"),\n status: \"pending\",\n createdAt: new Date(input.createdAt),\n expiresAt: new Date(input.expiresAt),\n }\n this.state.deviceAuthorizations.set(key, cloneRecord(record))\n return cloneRecord(record)\n }\n\n async getById(params: { readonly projectId: string; readonly id: string }) {\n const record = this.state.deviceAuthorizations.get(\n deviceAuthorizationKey(params.projectId, params.id)\n )\n return record ? cloneRecord(record) : null\n }\n\n async getByUserCode(params: { readonly projectId: string; readonly userCode: string }) {\n for (const record of this.state.deviceAuthorizations.values()) {\n if (record.projectId === params.projectId && record.userCode === params.userCode) {\n return cloneRecord(record)\n }\n }\n return null\n }\n\n async approve(params: {\n readonly projectId: string\n readonly id: string\n readonly userId: string\n readonly sessionId: string\n readonly approvedAt: Date\n }): Promise<DeviceAuthorizationRecord> {\n const record = this.requirePending(params.projectId, params.id, params.approvedAt)\n const user = this.state.users.get(userKey(params.projectId, params.userId))\n const session = this.state.sessions.get(sessionKey(params.projectId, params.sessionId))\n if (\n !user ||\n user.status !== \"active\" ||\n !session ||\n session.userId !== user.id ||\n !isActiveSession(session, params.approvedAt)\n ) {\n throw new AuthStorageError(\n \"invalid_device_authorization\",\n \"[Sixb] Device authorization requires an active user session.\"\n )\n }\n const next: DeviceAuthorizationRecord = {\n ...record,\n status: \"approved\",\n approvedUserId: assertNonEmpty(params.userId, \"Approved user id\"),\n approvedSessionId: assertNonEmpty(params.sessionId, \"Approved session id\"),\n approvedAt: new Date(params.approvedAt),\n }\n this.state.deviceAuthorizations.set(deviceAuthorizationKey(params.projectId, params.id), next)\n return cloneRecord(next)\n }\n\n async deny(params: {\n readonly projectId: string\n readonly id: string\n readonly deniedAt: Date\n }): Promise<DeviceAuthorizationRecord> {\n const record = this.requirePending(params.projectId, params.id, params.deniedAt)\n const next: DeviceAuthorizationRecord = {\n ...record,\n status: \"denied\",\n deniedAt: new Date(params.deniedAt),\n }\n this.state.deviceAuthorizations.set(deviceAuthorizationKey(params.projectId, params.id), next)\n return cloneRecord(next)\n }\n\n private requirePending(projectId: string, id: string, now: Date): DeviceAuthorizationRecord {\n const record = this.state.deviceAuthorizations.get(deviceAuthorizationKey(projectId, id))\n if (!record) {\n throw new AuthStorageError(\n \"missing_device_authorization\",\n `[Sixb] Device authorization '${id}' not found for project '${projectId}'.`\n )\n }\n if (record.status !== \"pending\" || record.expiresAt <= now) {\n throw new AuthStorageError(\n \"invalid_device_authorization\",\n `[Sixb] Device authorization '${id}' is no longer pending for project '${projectId}'.`\n )\n }\n return record\n }\n}\n\nfunction duplicateAuthorization(id: string, projectId: string): AuthStorageError {\n return new AuthStorageError(\n \"duplicate_device_authorization\",\n `[Sixb] Device authorization '${id}' already exists for project '${projectId}'.`\n )\n}\n",
|
|
21
22
|
"import type {\n AuthGroupMembershipStore,\n GroupMembershipRecord,\n UpsertAuthGroupMembershipInput,\n} from \"../types\"\nimport type { AuthStorageState } from \"./shared\"\nimport { cloneRecord, removeGroupMembershipRecord, upsertGroupMembershipRecord } from \"./shared\"\n\nexport class InMemoryAuthGroupMembershipStore implements AuthGroupMembershipStore {\n constructor(private readonly state: AuthStorageState) {}\n\n async upsert(input: UpsertAuthGroupMembershipInput): Promise<GroupMembershipRecord> {\n return cloneRecord(upsertGroupMembershipRecord(this.state, input))\n }\n\n async remove(params: {\n readonly projectId: string\n readonly userId: string\n readonly groupId: string\n }): Promise<GroupMembershipRecord | null> {\n const removed = removeGroupMembershipRecord(this.state, params)\n return removed ? cloneRecord(removed) : null\n }\n\n async listForUser(params: {\n readonly projectId: string\n readonly userId: string\n }): Promise<readonly GroupMembershipRecord[]> {\n return [...this.state.groupMemberships.values()]\n .filter((membership) => membership.projectId === params.projectId)\n .filter((membership) => membership.userId === params.userId)\n .sort((a, b) => a.groupId.localeCompare(b.groupId))\n .map(cloneRecord)\n }\n\n async listForGroup(params: {\n readonly projectId: string\n readonly groupId: string\n }): Promise<readonly GroupMembershipRecord[]> {\n return [...this.state.groupMemberships.values()]\n .filter((membership) => membership.projectId === params.projectId)\n .filter((membership) => membership.groupId === params.groupId)\n .sort((a, b) => a.userId.localeCompare(b.userId))\n .map(cloneRecord)\n }\n}\n",
|
|
22
23
|
"import type {\n AuthUserIdentityStore,\n UpsertAuthUserIdentityInput,\n UserIdentityRecord,\n} from \"../types\"\nimport type { AuthStorageState } from \"./shared\"\nimport {\n assertNonEmpty,\n cloneOptionalRecord,\n cloneRecord,\n dateOrNow,\n identityKey,\n normalizeClaims,\n} from \"./shared\"\n\nexport class InMemoryAuthUserIdentityStore implements AuthUserIdentityStore {\n constructor(private readonly state: AuthStorageState) {}\n\n async upsert(input: UpsertAuthUserIdentityInput): Promise<UserIdentityRecord> {\n const projectId = assertNonEmpty(input.projectId, \"Project id\")\n const strategyId = assertNonEmpty(input.strategyId, \"Strategy id\")\n const subject = assertNonEmpty(input.subject, \"Subject\")\n const userId = assertNonEmpty(input.userId, \"User id\")\n const key = identityKey(projectId, strategyId, subject)\n const existing = this.state.identities.get(key)\n const createdAt = existing?.createdAt ?? dateOrNow(input.createdAt)\n const identity: UserIdentityRecord = {\n projectId,\n strategyId,\n subject,\n userId,\n claims: normalizeClaims(input.claims),\n createdAt,\n updatedAt: input.updatedAt ? new Date(input.updatedAt) : existing ? new Date() : createdAt,\n }\n\n this.state.identities.set(key, cloneRecord(identity))\n return cloneRecord(identity)\n }\n\n async getBySubject(params: {\n readonly projectId: string\n readonly strategyId: string\n readonly subject: string\n }): Promise<UserIdentityRecord | null> {\n const record =\n this.state.identities.get(identityKey(params.projectId, params.strategyId, params.subject)) ??\n null\n return cloneOptionalRecord(record)\n }\n\n async listForUser(params: {\n readonly projectId: string\n readonly userId: string\n }): Promise<readonly UserIdentityRecord[]> {\n return [...this.state.identities.values()]\n .filter((identity) => identity.projectId === params.projectId)\n .filter((identity) => identity.userId === params.userId)\n .sort((a, b) => {\n const delta = a.createdAt.getTime() - b.createdAt.getTime()\n if (delta !== 0) return delta\n return `${a.strategyId}:${a.subject}`.localeCompare(`${b.strategyId}:${b.subject}`)\n })\n .map(cloneRecord)\n }\n}\n",
|
|
@@ -26,14 +27,14 @@
|
|
|
26
27
|
"import { AuthStorageError } from \"../errors\"\nimport type {\n AuthOidcAuthorizationAttemptStore,\n CreateOidcAuthorizationAttemptInput,\n OidcAuthorizationAttemptRecord,\n} from \"../types\"\nimport type { AuthStorageState } from \"./shared\"\nimport {\n assertNonEmpty,\n cloneDate,\n cloneOptionalRecord,\n cloneRecord,\n consumeOidcAttemptRecord,\n oidcAttemptKey,\n} from \"./shared\"\n\nexport class InMemoryAuthOidcAuthorizationAttemptStore\n implements AuthOidcAuthorizationAttemptStore\n{\n constructor(private readonly state: AuthStorageState) {}\n\n async create(\n input: CreateOidcAuthorizationAttemptInput\n ): Promise<OidcAuthorizationAttemptRecord> {\n const id = assertNonEmpty(input.id, \"OIDC authorization attempt id\")\n const projectId = assertNonEmpty(input.projectId, \"Project id\")\n const strategyId = assertNonEmpty(input.strategyId, \"Strategy id\")\n const stateHash = assertNonEmpty(input.stateHash, \"OIDC state hash\")\n const nonceHash = assertNonEmpty(input.nonceHash, \"OIDC nonce hash\")\n const codeVerifier = assertNonEmpty(input.codeVerifier, \"OIDC code verifier\")\n const key = oidcAttemptKey(projectId, id)\n\n if (this.state.oidcAuthorizationAttempts.has(key)) {\n throw new AuthStorageError(\n \"duplicate_oidc_attempt\",\n `[Sixb] OIDC authorization attempt '${id}' already exists for project '${projectId}'.`\n )\n }\n\n const attempt: OidcAuthorizationAttemptRecord = {\n id,\n projectId,\n strategyId,\n stateHash,\n nonceHash,\n codeVerifier,\n returnTo: input.returnTo,\n createdAt: cloneDate(input.createdAt),\n expiresAt: cloneDate(input.expiresAt),\n }\n this.state.oidcAuthorizationAttempts.set(key, cloneRecord(attempt))\n return cloneRecord(attempt)\n }\n\n async getById(params: {\n readonly projectId: string\n readonly id: string\n }): Promise<OidcAuthorizationAttemptRecord | null> {\n const record =\n this.state.oidcAuthorizationAttempts.get(oidcAttemptKey(params.projectId, params.id)) ?? null\n return cloneOptionalRecord(record)\n }\n\n async consume(params: {\n readonly projectId: string\n readonly id: string\n readonly stateHash: string\n readonly consumedAt: Date\n }): Promise<OidcAuthorizationAttemptRecord> {\n return cloneRecord(consumeOidcAttemptRecord(this.state, params))\n }\n}\n",
|
|
27
28
|
"import { AuthStorageError } from \"../errors\"\nimport type {\n AuthServiceAccountGroupMembershipStore,\n ReconcileAuthServiceAccountGroupMembershipsInput,\n ServiceAccountGroupMembershipRecord,\n UpsertAuthServiceAccountGroupMembershipInput,\n} from \"../types\"\nimport type { AuthStorageState } from \"./shared\"\nimport {\n assertNonEmpty,\n cloneRecord,\n dateOrNow,\n normalizeGroupIds,\n serviceAccountGroupMembershipKey,\n serviceAccountKey,\n upsertServiceAccountGroupMembershipRecord,\n} from \"./shared\"\n\nexport class InMemoryAuthServiceAccountGroupMembershipStore\n implements AuthServiceAccountGroupMembershipStore\n{\n constructor(private readonly state: AuthStorageState) {}\n\n async upsert(\n input: UpsertAuthServiceAccountGroupMembershipInput\n ): Promise<ServiceAccountGroupMembershipRecord> {\n return cloneRecord(upsertServiceAccountGroupMembershipRecord(this.state, input))\n }\n\n async reconcileForServiceAccount(\n input: ReconcileAuthServiceAccountGroupMembershipsInput\n ): Promise<readonly ServiceAccountGroupMembershipRecord[]> {\n const projectId = assertNonEmpty(input.projectId, \"Project id\")\n const serviceAccountId = assertNonEmpty(input.serviceAccountId, \"Service account id\")\n if (!this.state.serviceAccounts.has(serviceAccountKey(projectId, serviceAccountId))) {\n throw new AuthStorageError(\n \"missing_service_account\",\n `[Sixb] Service account '${serviceAccountId}' not found for project '${projectId}'.`\n )\n }\n\n const groupIds = normalizeGroupIds(input.groupIds)\n const desired = new Set(groupIds)\n for (const [key, membership] of this.state.serviceAccountGroupMemberships) {\n if (\n membership.projectId === projectId &&\n membership.serviceAccountId === serviceAccountId &&\n membership.source === input.source &&\n !desired.has(membership.groupId)\n ) {\n this.state.serviceAccountGroupMemberships.delete(key)\n }\n }\n\n const updatedAt = dateOrNow(input.updatedAt)\n for (const groupId of groupIds) {\n const key = serviceAccountGroupMembershipKey(projectId, serviceAccountId, groupId)\n const existing = this.state.serviceAccountGroupMemberships.get(key)\n if (existing) {\n this.state.serviceAccountGroupMemberships.set(\n key,\n cloneRecord({ ...existing, source: input.source })\n )\n continue\n }\n this.state.serviceAccountGroupMemberships.set(\n key,\n cloneRecord({\n projectId,\n serviceAccountId,\n groupId,\n source: input.source,\n createdAt: updatedAt,\n })\n )\n }\n\n return this.listForServiceAccount({ projectId, serviceAccountId })\n }\n\n async listForServiceAccount(params: {\n readonly projectId: string\n readonly serviceAccountId: string\n }): Promise<readonly ServiceAccountGroupMembershipRecord[]> {\n return [...this.state.serviceAccountGroupMemberships.values()]\n .filter((membership) => membership.projectId === params.projectId)\n .filter((membership) => membership.serviceAccountId === params.serviceAccountId)\n .sort((a, b) => a.groupId.localeCompare(b.groupId))\n .map(cloneRecord)\n }\n\n async listForGroup(params: {\n readonly projectId: string\n readonly groupId: string\n }): Promise<readonly ServiceAccountGroupMembershipRecord[]> {\n return [...this.state.serviceAccountGroupMemberships.values()]\n .filter((membership) => membership.projectId === params.projectId)\n .filter((membership) => membership.groupId === params.groupId)\n .sort((a, b) => a.serviceAccountId.localeCompare(b.serviceAccountId))\n .map(cloneRecord)\n }\n}\n",
|
|
28
29
|
"import { AuthStorageError } from \"../errors\"\nimport type {\n AuthServiceAccountStore,\n CreateAuthServiceAccountInput,\n ListAuthServiceAccountsInput,\n ListAuthServiceAccountsResult,\n ServiceAccountRecord,\n UpdateAuthServiceAccountInput,\n} from \"../types\"\nimport type { AuthStorageState } from \"./shared\"\nimport {\n assertNonEmpty,\n cloneDate,\n cloneOptionalRecord,\n cloneRecord,\n compareByCreatedAt,\n createServiceAccountRecord,\n serviceAccountKey,\n} from \"./shared\"\n\nexport class InMemoryAuthServiceAccountStore implements AuthServiceAccountStore {\n constructor(private readonly state: AuthStorageState) {}\n\n async create(input: CreateAuthServiceAccountInput): Promise<ServiceAccountRecord> {\n return cloneRecord(createServiceAccountRecord(this.state, input))\n }\n\n async getById(params: {\n readonly projectId: string\n readonly id: string\n }): Promise<ServiceAccountRecord | null> {\n const record =\n this.state.serviceAccounts.get(serviceAccountKey(params.projectId, params.id)) ?? null\n return cloneOptionalRecord(record)\n }\n\n async update(input: UpdateAuthServiceAccountInput): Promise<ServiceAccountRecord> {\n const projectId = assertNonEmpty(input.projectId, \"Project id\")\n const id = assertNonEmpty(input.id, \"Service account id\")\n const key = serviceAccountKey(projectId, id)\n const existing = this.state.serviceAccounts.get(key)\n\n if (!existing) {\n throw new AuthStorageError(\n \"missing_service_account\",\n `[Sixb] Service account '${id}' not found for project '${projectId}'.`\n )\n }\n\n const next: ServiceAccountRecord = {\n ...existing,\n name:\n input.name === undefined\n ? existing.name\n : assertNonEmpty(input.name, \"Service account name\"),\n description: input.description === undefined ? existing.description : input.description,\n status: input.status ?? existing.status,\n updatedAt: input.updatedAt ? cloneDate(input.updatedAt) : new Date(),\n }\n this.state.serviceAccounts.set(key, cloneRecord(next))\n return cloneRecord(next)\n }\n\n async list(input: ListAuthServiceAccountsInput): Promise<ListAuthServiceAccountsResult> {\n const statuses = input.statuses ? new Set(input.statuses) : null\n const order = input.order ?? \"asc\"\n const offset = input.offset ?? 0\n const rows = [...this.state.serviceAccounts.values()]\n .filter((serviceAccount) => serviceAccount.projectId === input.projectId)\n .filter((serviceAccount) => !statuses || statuses.has(serviceAccount.status))\n .sort((a, b) => compareByCreatedAt(a, b, order))\n const page = rows.slice(offset, input.limit === undefined ? undefined : offset + input.limit)\n\n return {\n serviceAccounts: page.map(cloneRecord),\n hasMore: input.limit === undefined ? false : offset + input.limit < rows.length,\n total: rows.length,\n }\n }\n}\n",
|
|
29
|
-
"import { AuthStorageError } from \"../errors\"\nimport type {\n AuthSessionStore,\n CreateAuthSessionInput,\n RotateSessionRefreshTokenResult,\n SessionRecord,\n} from \"../types\"\nimport type { AuthStorageState } from \"./shared\"\nimport {\n cloneDate,\n cloneOptionalRecord,\n cloneRecord,\n createSessionRecord,\n isActiveSession,\n revokeActiveSessionsForUser,\n sessionKey,\n} from \"./shared\"\n\nexport class InMemoryAuthSessionStore implements AuthSessionStore {\n constructor(private readonly state: AuthStorageState) {}\n\n async create(input: CreateAuthSessionInput): Promise<SessionRecord> {\n return cloneRecord(createSessionRecord(this.state, input))\n }\n\n async getById(params: {\n readonly projectId: string\n readonly id: string\n }): Promise<SessionRecord | null> {\n const record = this.state.sessions.get(sessionKey(params.projectId, params.id)) ?? null\n return cloneOptionalRecord(record)\n }\n\n async listActiveByUserId(params: {\n readonly projectId: string\n readonly userId: string\n readonly now: Date\n }): Promise<readonly SessionRecord[]> {\n return [...this.state.sessions.values()]\n .filter((session) => session.projectId === params.projectId)\n .filter((session) => session.userId === params.userId)\n .filter((session) => isActiveSession(session, params.now))\n .sort((a, b) => {\n const activity =\n (b.lastSeenAt ?? b.createdAt).getTime() - (a.lastSeenAt ?? a.createdAt).getTime()\n if (activity !== 0) return activity\n const created = b.createdAt.getTime() - a.createdAt.getTime()\n return created !== 0 ? created : b.id.localeCompare(a.id)\n })\n .map(cloneRecord)\n }\n\n async findValidByTokenHash(params: {\n readonly projectId: string\n readonly id: string\n readonly tokenHash: string\n readonly now: Date\n }): Promise<SessionRecord | null> {\n const session = this.state.sessions.get(sessionKey(params.projectId, params.id))\n if (\n !session ||\n session.bearer ||\n session.tokenHash !== params.tokenHash ||\n !isActiveSession(session, params.now)\n ) {\n return null\n }\n\n return cloneRecord(session)\n }\n\n async findValidByAccessTokenHash(params: {\n readonly projectId: string\n readonly id: string\n readonly tokenHash: string\n readonly now: Date\n }): Promise<SessionRecord | null> {\n const session = this.state.sessions.get(sessionKey(params.projectId, params.id))\n if (\n !session?.bearer ||\n session.tokenHash !== params.tokenHash ||\n session.bearer.accessExpiresAt <= params.now ||\n !isActiveSession(session, params.now)\n ) {\n return null\n }\n\n return cloneRecord(session)\n }\n\n async rotateRefreshToken(\n params: Parameters<AuthSessionStore[\"rotateRefreshToken\"]>[0]\n ): Promise<RotateSessionRefreshTokenResult> {\n const key = sessionKey(params.projectId, params.id)\n const session = this.state.sessions.get(key)\n if (!session?.bearer || !isActiveSession(session, params.now)) {\n return { status: \"invalid\" }\n }\n\n const { bearer } = session\n const replacedRecently =\n bearer.previousRefreshTokenHash === params.refreshTokenHash &&\n bearer.refreshedAt !== undefined &&\n params.now.getTime() - bearer.refreshedAt.getTime() <= params.reuseGraceMs\n if (bearer.refreshTokenHash !== params.refreshTokenHash && !replacedRecently) {\n if (bearer.previousRefreshTokenHash !== params.refreshTokenHash) {\n return { status: \"invalid\" }\n }\n this.state.sessions.set(key, cloneRecord({ ...session, revokedAt: cloneDate(params.now) }))\n return { status: \"reused\" }\n }\n\n const requestedExpiresAt = session.absoluteExpiresAt\n ? new Date(Math.min(params.next.expiresAt.getTime(), session.absoluteExpiresAt.getTime()))\n : params.next.expiresAt\n const next: SessionRecord = {\n ...session,\n tokenHash: params.next.tokenHash,\n expiresAt: new Date(Math.max(session.expiresAt.getTime(), requestedExpiresAt.getTime())),\n lastSeenAt: cloneDate(params.now),\n bearer: {\n clientName: bearer.clientName,\n accessExpiresAt: cloneDate(params.next.accessExpiresAt),\n refreshTokenHash: params.next.refreshTokenHash,\n previousRefreshTokenHash: bearer.refreshTokenHash,\n refreshedAt: cloneDate(params.now),\n },\n }\n this.state.sessions.set(key, cloneRecord(next))\n return { status: \"rotated\", session: cloneRecord(next) }\n }\n\n async renewIfValid(params: {\n readonly projectId: string\n readonly id: string\n readonly tokenHash: string\n readonly now: Date\n readonly expiresAt: Date\n }): Promise<SessionRecord | null> {\n const key = sessionKey(params.projectId, params.id)\n const session = this.state.sessions.get(key)\n if (\n !session ||\n session.bearer ||\n session.tokenHash !== params.tokenHash ||\n !isActiveSession(session, params.now)\n ) {\n return null\n }\n\n const requestedExpiresAt = session.absoluteExpiresAt\n ? new Date(Math.min(params.expiresAt.getTime(), session.absoluteExpiresAt.getTime()))\n : params.expiresAt\n const next: SessionRecord = {\n ...session,\n expiresAt: new Date(Math.max(session.expiresAt.getTime(), requestedExpiresAt.getTime())),\n lastSeenAt: cloneDate(params.now),\n }\n this.state.sessions.set(key, cloneRecord(next))\n return cloneRecord(next)\n }\n\n async revoke(params: {\n readonly projectId: string\n readonly id: string\n readonly revokedAt: Date\n }): Promise<SessionRecord> {\n const key = sessionKey(params.projectId, params.id)\n const existing = this.state.sessions.get(key)\n\n if (!existing) {\n throw new AuthStorageError(\n \"missing_session\",\n `[Sixb] Session '${params.id}' not found for project '${params.projectId}'.`\n )\n }\n\n const next: SessionRecord = {\n ...existing,\n revokedAt: cloneDate(params.revokedAt),\n }\n this.state.sessions.set(key, cloneRecord(next))\n return cloneRecord(next)\n }\n\n async revokeActiveForUser(params: {\n readonly projectId: string\n readonly userId: string\n readonly revokedAt: Date\n }): Promise<readonly SessionRecord[]> {\n return revokeActiveSessionsForUser(\n this.state,\n params.projectId,\n params.userId,\n params.revokedAt\n ).map(cloneRecord)\n }\n\n async touch(params: {\n readonly projectId: string\n readonly id: string\n readonly lastSeenAt: Date\n }): Promise<SessionRecord> {\n const key = sessionKey(params.projectId, params.id)\n const existing = this.state.sessions.get(key)\n\n if (!existing) {\n throw new AuthStorageError(\n \"missing_session\",\n `[Sixb] Session '${params.id}' not found for project '${params.projectId}'.`\n )\n }\n\n const next: SessionRecord = {\n ...existing,\n lastSeenAt: cloneDate(params.lastSeenAt),\n }\n this.state.sessions.set(key, cloneRecord(next))\n return cloneRecord(next)\n }\n}\n",
|
|
30
|
+
"import { AuthStorageError } from \"../errors\"\nimport type {\n AuthSessionStore,\n CreateAuthSessionInput,\n ListAuthSessionsInput,\n ListAuthSessionsResult,\n RotateSessionRefreshTokenResult,\n SessionRecord,\n} from \"../types\"\nimport type { AuthStorageState } from \"./shared\"\nimport {\n cloneDate,\n cloneOptionalRecord,\n cloneRecord,\n createSessionRecord,\n isActiveSession,\n revokeActiveSessionsForUser,\n sessionKey,\n} from \"./shared\"\n\nexport class InMemoryAuthSessionStore implements AuthSessionStore {\n constructor(private readonly state: AuthStorageState) {}\n\n async create(input: CreateAuthSessionInput): Promise<SessionRecord> {\n return cloneRecord(createSessionRecord(this.state, input))\n }\n\n async getById(params: {\n readonly projectId: string\n readonly id: string\n }): Promise<SessionRecord | null> {\n const record = this.state.sessions.get(sessionKey(params.projectId, params.id)) ?? null\n return cloneOptionalRecord(record)\n }\n\n async listActiveByUserId(params: {\n readonly projectId: string\n readonly userId: string\n readonly now: Date\n }): Promise<readonly SessionRecord[]> {\n return [...this.state.sessions.values()]\n .filter((session) => session.projectId === params.projectId)\n .filter((session) => session.userId === params.userId)\n .filter((session) => isActiveSession(session, params.now))\n .sort((a, b) => {\n const activity =\n (b.lastSeenAt ?? b.createdAt).getTime() - (a.lastSeenAt ?? a.createdAt).getTime()\n if (activity !== 0) return activity\n const created = b.createdAt.getTime() - a.createdAt.getTime()\n return created !== 0 ? created : b.id.localeCompare(a.id)\n })\n .map(cloneRecord)\n }\n\n async listByUserId(params: ListAuthSessionsInput): Promise<ListAuthSessionsResult> {\n const before = params.before\n const offset = before?.skip ?? 0\n const sessions = [...this.state.sessions.values()]\n .filter((session) => session.projectId === params.projectId)\n .filter((session) => session.userId === params.userId)\n .filter((session) => !before || session.createdAt <= before.createdAt)\n .sort((a, b) => {\n const created = b.createdAt.getTime() - a.createdAt.getTime()\n if (created !== 0) return created\n return a.id < b.id ? 1 : a.id > b.id ? -1 : 0\n })\n\n return {\n sessions: sessions.slice(offset, offset + params.limit).map(cloneRecord),\n hasMore: sessions.length > offset + params.limit,\n }\n }\n\n async findValidByTokenHash(params: {\n readonly projectId: string\n readonly id: string\n readonly tokenHash: string\n readonly now: Date\n }): Promise<SessionRecord | null> {\n const session = this.state.sessions.get(sessionKey(params.projectId, params.id))\n if (\n !session ||\n session.bearer ||\n session.tokenHash !== params.tokenHash ||\n !isActiveSession(session, params.now)\n ) {\n return null\n }\n\n return cloneRecord(session)\n }\n\n async findValidByAccessTokenHash(params: {\n readonly projectId: string\n readonly id: string\n readonly tokenHash: string\n readonly now: Date\n }): Promise<SessionRecord | null> {\n const session = this.state.sessions.get(sessionKey(params.projectId, params.id))\n if (\n !session?.bearer ||\n session.tokenHash !== params.tokenHash ||\n session.bearer.accessExpiresAt <= params.now ||\n !isActiveSession(session, params.now)\n ) {\n return null\n }\n\n return cloneRecord(session)\n }\n\n async rotateRefreshToken(\n params: Parameters<AuthSessionStore[\"rotateRefreshToken\"]>[0]\n ): Promise<RotateSessionRefreshTokenResult> {\n const key = sessionKey(params.projectId, params.id)\n const session = this.state.sessions.get(key)\n if (!session?.bearer || !isActiveSession(session, params.now)) {\n return { status: \"invalid\" }\n }\n\n const { bearer } = session\n const replacedRecently =\n bearer.previousRefreshTokenHash === params.refreshTokenHash &&\n bearer.refreshedAt !== undefined &&\n params.now.getTime() - bearer.refreshedAt.getTime() <= params.reuseGraceMs\n if (bearer.refreshTokenHash !== params.refreshTokenHash && !replacedRecently) {\n if (bearer.previousRefreshTokenHash !== params.refreshTokenHash) {\n return { status: \"invalid\" }\n }\n this.state.sessions.set(key, cloneRecord({ ...session, revokedAt: cloneDate(params.now) }))\n return { status: \"reused\" }\n }\n\n const requestedExpiresAt = session.absoluteExpiresAt\n ? new Date(Math.min(params.next.expiresAt.getTime(), session.absoluteExpiresAt.getTime()))\n : params.next.expiresAt\n const next: SessionRecord = {\n ...session,\n tokenHash: params.next.tokenHash,\n expiresAt: new Date(Math.max(session.expiresAt.getTime(), requestedExpiresAt.getTime())),\n lastSeenAt: cloneDate(params.now),\n bearer: {\n clientName: bearer.clientName,\n accessExpiresAt: cloneDate(params.next.accessExpiresAt),\n refreshTokenHash: params.next.refreshTokenHash,\n previousRefreshTokenHash: bearer.refreshTokenHash,\n refreshedAt: cloneDate(params.now),\n },\n }\n this.state.sessions.set(key, cloneRecord(next))\n return { status: \"rotated\", session: cloneRecord(next) }\n }\n\n async renewIfValid(params: {\n readonly projectId: string\n readonly id: string\n readonly tokenHash: string\n readonly now: Date\n readonly expiresAt: Date\n }): Promise<SessionRecord | null> {\n const key = sessionKey(params.projectId, params.id)\n const session = this.state.sessions.get(key)\n if (\n !session ||\n session.bearer ||\n session.tokenHash !== params.tokenHash ||\n !isActiveSession(session, params.now)\n ) {\n return null\n }\n\n const requestedExpiresAt = session.absoluteExpiresAt\n ? new Date(Math.min(params.expiresAt.getTime(), session.absoluteExpiresAt.getTime()))\n : params.expiresAt\n const next: SessionRecord = {\n ...session,\n expiresAt: new Date(Math.max(session.expiresAt.getTime(), requestedExpiresAt.getTime())),\n lastSeenAt: cloneDate(params.now),\n }\n this.state.sessions.set(key, cloneRecord(next))\n return cloneRecord(next)\n }\n\n async revoke(params: {\n readonly projectId: string\n readonly id: string\n readonly revokedAt: Date\n }): Promise<SessionRecord> {\n const key = sessionKey(params.projectId, params.id)\n const existing = this.state.sessions.get(key)\n\n if (!existing) {\n throw new AuthStorageError(\n \"missing_session\",\n `[Sixb] Session '${params.id}' not found for project '${params.projectId}'.`\n )\n }\n\n const next: SessionRecord = {\n ...existing,\n revokedAt: cloneDate(params.revokedAt),\n }\n this.state.sessions.set(key, cloneRecord(next))\n return cloneRecord(next)\n }\n\n async revokeActiveForUser(params: {\n readonly projectId: string\n readonly userId: string\n readonly revokedAt: Date\n }): Promise<readonly SessionRecord[]> {\n return revokeActiveSessionsForUser(\n this.state,\n params.projectId,\n params.userId,\n params.revokedAt\n ).map(cloneRecord)\n }\n\n async touch(params: {\n readonly projectId: string\n readonly id: string\n readonly lastSeenAt: Date\n }): Promise<SessionRecord> {\n const key = sessionKey(params.projectId, params.id)\n const existing = this.state.sessions.get(key)\n\n if (!existing) {\n throw new AuthStorageError(\n \"missing_session\",\n `[Sixb] Session '${params.id}' not found for project '${params.projectId}'.`\n )\n }\n\n const next: SessionRecord = {\n ...existing,\n lastSeenAt: cloneDate(params.lastSeenAt),\n }\n this.state.sessions.set(key, cloneRecord(next))\n return cloneRecord(next)\n }\n}\n",
|
|
30
31
|
"import { paginate } from \"../../pagination\"\nimport { AuthStorageError } from \"../errors\"\nimport type {\n AuthUserStore,\n CreateAuthUserInput,\n ListAuthUsersInput,\n ListAuthUsersResult,\n UpdateAuthUserProfileInput,\n UpdateAuthUserStatusInput,\n UserRecord,\n} from \"../types\"\nimport type { AuthStorageState } from \"./shared\"\nimport {\n assertNonEmpty,\n cloneDate,\n cloneOptionalRecord,\n cloneRecord,\n compareByCreatedAt,\n dateOrNow,\n getUserByEmail,\n normalizeEmail,\n userKey,\n} from \"./shared\"\n\nexport class InMemoryAuthUserStore implements AuthUserStore {\n constructor(private readonly state: AuthStorageState) {}\n\n async create(input: CreateAuthUserInput): Promise<UserRecord> {\n const id = assertNonEmpty(input.id, \"User id\")\n const projectId = assertNonEmpty(input.projectId, \"Project id\")\n const email = normalizeEmail(input.email)\n const key = userKey(projectId, id)\n\n if (this.state.users.has(key)) {\n throw new AuthStorageError(\n \"duplicate_user\",\n `[Sixb] User '${id}' already exists for project '${projectId}'.`\n )\n }\n\n if (getUserByEmail(this.state, projectId, email)) {\n throw new AuthStorageError(\n \"duplicate_user\",\n `[Sixb] User email '${email}' already exists for project '${projectId}'.`\n )\n }\n\n const createdAt = dateOrNow(input.createdAt)\n const user: UserRecord = {\n id,\n projectId,\n email,\n displayName: input.displayName,\n avatarUrl: input.avatarUrl,\n status: input.status ?? \"active\",\n createdAt,\n updatedAt: input.updatedAt ? cloneDate(input.updatedAt) : cloneDate(createdAt),\n }\n\n this.state.users.set(key, cloneRecord(user))\n return cloneRecord(user)\n }\n\n async getById(params: {\n readonly projectId: string\n readonly id: string\n }): Promise<UserRecord | null> {\n const record = this.state.users.get(userKey(params.projectId, params.id)) ?? null\n return cloneOptionalRecord(record)\n }\n\n async getByEmail(params: {\n readonly projectId: string\n readonly email: string\n }): Promise<UserRecord | null> {\n return cloneOptionalRecord(getUserByEmail(this.state, params.projectId, params.email))\n }\n\n async updateProfile(input: UpdateAuthUserProfileInput): Promise<UserRecord> {\n const key = userKey(input.projectId, input.id)\n const existing = this.state.users.get(key)\n\n if (!existing) {\n throw new AuthStorageError(\n \"missing_user\",\n `[Sixb] User '${input.id}' not found for project '${input.projectId}'.`\n )\n }\n\n const next: UserRecord = {\n ...existing,\n displayName: input.displayName,\n avatarUrl: input.avatarUrl,\n updatedAt: dateOrNow(input.updatedAt),\n }\n this.state.users.set(key, cloneRecord(next))\n return cloneRecord(next)\n }\n\n async updateStatus(input: UpdateAuthUserStatusInput): Promise<UserRecord> {\n const key = userKey(input.projectId, input.id)\n const existing = this.state.users.get(key)\n\n if (!existing) {\n throw new AuthStorageError(\n \"missing_user\",\n `[Sixb] User '${input.id}' not found for project '${input.projectId}'.`\n )\n }\n\n const next: UserRecord = {\n ...existing,\n status: input.status,\n updatedAt: dateOrNow(input.updatedAt),\n }\n this.state.users.set(key, cloneRecord(next))\n return cloneRecord(next)\n }\n\n async list(input: ListAuthUsersInput): Promise<ListAuthUsersResult> {\n if (input.statuses?.length === 0) {\n return { users: [], hasMore: false, total: 0 }\n }\n\n const statuses = input.statuses ? new Set(input.statuses) : null\n const order = input.order ?? \"desc\"\n const rows = [...this.state.users.values()]\n .filter((user) => user.projectId === input.projectId)\n .filter((user) => (statuses ? statuses.has(user.status) : true))\n .sort((a, b) => compareByCreatedAt(a, b, order))\n\n const page = paginate(rows, input)\n return {\n users: page.page.map(cloneRecord),\n hasMore: page.hasMore,\n total: page.total,\n }\n }\n}\n",
|
|
31
32
|
"import { AuthStorageError } from \"../errors\"\nimport type {\n AuthStorage,\n CompleteDeviceAuthorizationInput,\n CompleteDeviceAuthorizationResult,\n CompleteMagicLinkSignInInput,\n CompleteOidcSignInInput,\n CompleteSignInResult,\n GroupMembershipRecord,\n GroupMembershipSource,\n InvitationRecord,\n SessionRecord,\n SuspendUserAndRevokeSessionsInput,\n UserIdentityRecord,\n UserRecord,\n} from \"../types\"\nimport { InMemoryAuthAccessTokenStore } from \"./access-tokens\"\nimport { InMemoryAuthDeviceAuthorizationStore } from \"./device-authorizations\"\nimport { InMemoryAuthGroupMembershipStore } from \"./group-memberships\"\nimport { InMemoryAuthUserIdentityStore } from \"./identities\"\nimport { InMemoryAuthInvitationStore } from \"./invitations\"\nimport { InMemoryAuthMagicLinkStore } from \"./magic-links\"\nimport { InMemoryAuthOidcAuthorizationAttemptStore } from \"./oidc-attempts\"\nimport { InMemoryAuthServiceAccountGroupMembershipStore } from \"./service-account-group-memberships\"\nimport { InMemoryAuthServiceAccountStore } from \"./service-accounts\"\nimport { InMemoryAuthSessionStore } from \"./sessions\"\nimport type { AuthStorageState } from \"./shared\"\nimport {\n assertNonEmpty,\n cloneDate,\n cloneRecord,\n consumeMagicLinkRecord,\n consumeOidcAttemptRecord,\n createAuthStorageState,\n createSessionRecord,\n deviceAuthorizationKey,\n getActiveInvitationByEmail,\n getUserByEmail,\n identityKey,\n invitationKey,\n magicLinkKey,\n normalizeClaims,\n normalizeEmail,\n normalizeGroupIds,\n oidcAttemptKey,\n removeGroupMembershipRecord,\n revokeActiveSessionsForUser,\n upsertGroupMembershipRecord,\n userKey,\n validateCompleteSessionInput,\n} from \"./shared\"\nimport { InMemoryAuthUserStore } from \"./users\"\n\nexport class InMemoryAuthStorage implements AuthStorage {\n private readonly state: AuthStorageState = createAuthStorageState()\n\n readonly users = new InMemoryAuthUserStore(this.state)\n readonly identities = new InMemoryAuthUserIdentityStore(this.state)\n readonly serviceAccounts = new InMemoryAuthServiceAccountStore(this.state)\n readonly serviceAccountGroupMemberships = new InMemoryAuthServiceAccountGroupMembershipStore(\n this.state\n )\n readonly sessions = new InMemoryAuthSessionStore(this.state)\n readonly accessTokens = new InMemoryAuthAccessTokenStore(this.state)\n readonly invitations = new InMemoryAuthInvitationStore(this.state)\n readonly groupMemberships = new InMemoryAuthGroupMembershipStore(this.state)\n readonly magicLinks = new InMemoryAuthMagicLinkStore(this.state)\n readonly oidcAuthorizationAttempts = new InMemoryAuthOidcAuthorizationAttemptStore(this.state)\n readonly deviceAuthorizations = new InMemoryAuthDeviceAuthorizationStore(this.state)\n\n snapshot(): InMemoryAuthStorageSnapshot {\n return {\n users: structuredClone(this.state.users),\n identities: structuredClone(this.state.identities),\n serviceAccounts: structuredClone(this.state.serviceAccounts),\n serviceAccountGroupMemberships: structuredClone(this.state.serviceAccountGroupMemberships),\n sessions: structuredClone(this.state.sessions),\n accessTokens: structuredClone(this.state.accessTokens),\n invitations: structuredClone(this.state.invitations),\n groupMemberships: structuredClone(this.state.groupMemberships),\n magicLinks: structuredClone(this.state.magicLinks),\n oidcAuthorizationAttempts: structuredClone(this.state.oidcAuthorizationAttempts),\n deviceAuthorizations: structuredClone(this.state.deviceAuthorizations),\n }\n }\n\n restore(snapshot: InMemoryAuthStorageSnapshot): void {\n restoreMap(this.state.users, snapshot.users)\n restoreMap(this.state.identities, snapshot.identities)\n restoreMap(this.state.serviceAccounts, snapshot.serviceAccounts)\n restoreMap(this.state.serviceAccountGroupMemberships, snapshot.serviceAccountGroupMemberships)\n restoreMap(this.state.sessions, snapshot.sessions)\n restoreMap(this.state.accessTokens, snapshot.accessTokens)\n restoreMap(this.state.invitations, snapshot.invitations)\n restoreMap(this.state.groupMemberships, snapshot.groupMemberships)\n restoreMap(this.state.magicLinks, snapshot.magicLinks)\n restoreMap(this.state.oidcAuthorizationAttempts, snapshot.oidcAuthorizationAttempts)\n restoreMap(this.state.deviceAuthorizations, snapshot.deviceAuthorizations)\n }\n\n async completeDeviceAuthorization(\n input: CompleteDeviceAuthorizationInput\n ): Promise<CompleteDeviceAuthorizationResult> {\n const key = deviceAuthorizationKey(input.projectId, input.id)\n const authorization = this.state.deviceAuthorizations.get(key)\n if (!authorization) {\n throw new AuthStorageError(\n \"missing_device_authorization\",\n `[Sixb] Device authorization '${input.id}' not found for project '${input.projectId}'.`\n )\n }\n if (authorization.deviceCodeHash !== input.deviceCodeHash) {\n throw new AuthStorageError(\n \"invalid_device_authorization\",\n \"[Sixb] Invalid device authorization.\"\n )\n }\n if (authorization.status === \"pending\") {\n throw new AuthStorageError(\n \"pending_device_authorization\",\n \"[Sixb] Device authorization is pending.\"\n )\n }\n if (authorization.status === \"denied\") {\n throw new AuthStorageError(\n \"device_authorization_denied\",\n \"[Sixb] Device authorization was denied.\"\n )\n }\n if (\n authorization.status !== \"approved\" ||\n !authorization.approvedUserId ||\n !authorization.approvedSessionId ||\n authorization.expiresAt <= input.completedAt\n ) {\n throw new AuthStorageError(\n \"invalid_device_authorization\",\n \"[Sixb] Device authorization is invalid.\"\n )\n }\n if (\n input.session.projectId !== input.projectId ||\n input.session.userId !== authorization.approvedUserId\n ) {\n throw new AuthStorageError(\n \"invalid_device_authorization\",\n \"[Sixb] Device session is invalid.\"\n )\n }\n const session = createSessionRecord(this.state, input.session)\n const consumed = {\n ...authorization,\n status: \"consumed\" as const,\n consumedAt: new Date(input.completedAt),\n }\n this.state.deviceAuthorizations.set(key, cloneRecord(consumed))\n return { authorization: cloneRecord(consumed), session: cloneRecord(session) }\n }\n\n async completeMagicLinkSignIn(\n input: CompleteMagicLinkSignInInput\n ): Promise<CompleteSignInResult> {\n const projectId = assertNonEmpty(input.projectId, \"Project id\")\n const completedAt = cloneDate(input.completedAt)\n const magicLink = this.state.magicLinks.get(magicLinkKey(projectId, input.magicLinkId))\n\n if (!magicLink) {\n throw new AuthStorageError(\n \"missing_magic_link\",\n `[Sixb] Magic link '${input.magicLinkId}' not found for project '${projectId}'.`\n )\n }\n\n if (magicLink.tokenHash !== input.tokenHash || magicLink.consumedAt || magicLink.revokedAt) {\n throw new AuthStorageError(\n \"invalid_magic_link\",\n `[Sixb] Magic link '${input.magicLinkId}' is not valid for project '${projectId}'.`\n )\n }\n\n if (magicLink.expiresAt <= completedAt) {\n throw new AuthStorageError(\n \"expired_magic_link\",\n `[Sixb] Magic link '${input.magicLinkId}' is expired for project '${projectId}'.`\n )\n }\n\n const existingUser = getUserByEmail(this.state, projectId, magicLink.email)\n const activeInvitation = getActiveInvitationByEmail(\n this.state,\n projectId,\n magicLink.email,\n completedAt\n )\n const shouldCreateUser = !existingUser\n const manualGroupIds = normalizeGroupIds(input.manualGroupIds)\n\n if (existingUser?.status === \"suspended\") {\n consumeMagicLinkRecord(this.state, {\n projectId,\n id: input.magicLinkId,\n tokenHash: input.tokenHash,\n consumedAt: completedAt,\n })\n throw new AuthStorageError(\n \"suspended_user\",\n `[Sixb] User '${existingUser.id}' is suspended for project '${projectId}'.`\n )\n }\n\n if (shouldCreateUser && !activeInvitation && !input.allowUserCreationWithoutInvitation) {\n consumeMagicLinkRecord(this.state, {\n projectId,\n id: input.magicLinkId,\n tokenHash: input.tokenHash,\n consumedAt: completedAt,\n })\n throw new AuthStorageError(\n \"user_creation_not_allowed\",\n `[Sixb] Magic link '${input.magicLinkId}' cannot create a user for project '${projectId}'.`\n )\n }\n\n validateCompleteSessionInput(this.state, projectId, input.session)\n\n let newUserId: string | undefined\n if (shouldCreateUser) {\n newUserId = assertNonEmpty(input.newUserId, \"User id\")\n if (this.state.users.has(userKey(projectId, newUserId))) {\n throw new AuthStorageError(\n \"duplicate_user\",\n `[Sixb] User '${newUserId}' already exists for project '${projectId}'.`\n )\n }\n }\n\n consumeMagicLinkRecord(this.state, {\n projectId,\n id: input.magicLinkId,\n tokenHash: input.tokenHash,\n consumedAt: completedAt,\n })\n\n let user = existingUser\n if (!user) {\n user = {\n id: newUserId ?? assertNonEmpty(input.newUserId, \"User id\"),\n projectId,\n email: magicLink.email,\n displayName: input.newUserDisplayName,\n avatarUrl: input.newUserAvatarUrl,\n status: \"active\",\n createdAt: completedAt,\n updatedAt: completedAt,\n }\n this.state.users.set(userKey(projectId, user.id), cloneRecord(user))\n }\n\n const invitation = this.acceptInvitationAndApplyGroups({\n activeInvitation,\n completedAt,\n projectId,\n user,\n })\n const memberships = this.applyGroups({\n completedAt,\n source: \"manual\",\n groupIds: manualGroupIds,\n projectId,\n userId: user.id,\n existing: invitation.memberships,\n })\n\n const session = this.createSignInSession({\n projectId,\n strategyId: magicLink.strategyId,\n session: input.session,\n userId: user.id,\n })\n\n return {\n user: cloneRecord(user),\n session: cloneRecord(session),\n invitation: invitation.invitation ? cloneRecord(invitation.invitation) : undefined,\n groupMemberships: memberships.map(cloneRecord),\n }\n }\n\n async completeOidcSignIn(input: CompleteOidcSignInInput): Promise<CompleteSignInResult> {\n const projectId = assertNonEmpty(input.projectId, \"Project id\")\n const completedAt = cloneDate(input.completedAt)\n const attempt = this.state.oidcAuthorizationAttempts.get(\n oidcAttemptKey(projectId, input.oidcAuthorizationAttemptId)\n )\n\n if (!attempt) {\n throw new AuthStorageError(\n \"missing_oidc_attempt\",\n `[Sixb] OIDC authorization attempt '${input.oidcAuthorizationAttemptId}' not found for project '${projectId}'.`\n )\n }\n\n if (attempt.stateHash !== input.stateHash || attempt.consumedAt) {\n throw new AuthStorageError(\n \"invalid_oidc_attempt\",\n `[Sixb] OIDC authorization attempt '${input.oidcAuthorizationAttemptId}' is not valid for project '${projectId}'.`\n )\n }\n\n if (attempt.expiresAt <= completedAt) {\n throw new AuthStorageError(\n \"expired_oidc_attempt\",\n `[Sixb] OIDC authorization attempt '${input.oidcAuthorizationAttemptId}' is expired for project '${projectId}'.`\n )\n }\n\n const subject = assertNonEmpty(input.subject, \"Subject\")\n const email = normalizeEmail(input.email)\n const claims = normalizeClaims(input.claims)\n const identity = this.state.identities.get(identityKey(projectId, attempt.strategyId, subject))\n const activeInvitation = identity\n ? null\n : getActiveInvitationByEmail(this.state, projectId, email, completedAt)\n let user = identity\n ? (this.state.users.get(userKey(projectId, identity.userId)) ?? null)\n : getUserByEmail(this.state, projectId, email)\n const shouldCreateUser = !identity && !user\n const manualGroupIds = normalizeGroupIds(input.manualGroupIds)\n\n if (identity && !user) {\n this.consumeOidcAttempt(input, completedAt, projectId)\n throw new AuthStorageError(\n \"missing_user\",\n `[Sixb] User '${identity.userId}' not found for linked OIDC identity.`\n )\n }\n\n if (user?.status === \"suspended\") {\n this.consumeOidcAttempt(input, completedAt, projectId)\n throw new AuthStorageError(\n \"suspended_user\",\n `[Sixb] User '${user.id}' is suspended for project '${projectId}'.`\n )\n }\n\n if (shouldCreateUser && !activeInvitation && !input.allowUserCreationWithoutInvitation) {\n this.consumeOidcAttempt(input, completedAt, projectId)\n throw new AuthStorageError(\n \"user_creation_not_allowed\",\n `[Sixb] OIDC authorization attempt '${input.oidcAuthorizationAttemptId}' cannot create a user for project '${projectId}'.`\n )\n }\n\n validateCompleteSessionInput(this.state, projectId, input.session)\n\n let newUserId: string | undefined\n if (shouldCreateUser) {\n newUserId = assertNonEmpty(input.newUserId, \"User id\")\n if (this.state.users.has(userKey(projectId, newUserId))) {\n throw new AuthStorageError(\n \"duplicate_user\",\n `[Sixb] User '${newUserId}' already exists for project '${projectId}'.`\n )\n }\n }\n\n this.consumeOidcAttempt(input, completedAt, projectId)\n\n if (!user) {\n user = {\n id: newUserId ?? assertNonEmpty(input.newUserId, \"User id\"),\n projectId,\n email,\n displayName: input.displayName,\n avatarUrl: input.avatarUrl,\n status: \"active\",\n createdAt: completedAt,\n updatedAt: completedAt,\n }\n this.state.users.set(userKey(projectId, user.id), cloneRecord(user))\n }\n\n const invitation = this.acceptInvitationAndApplyGroups({\n activeInvitation,\n completedAt,\n projectId,\n user,\n })\n const memberships = this.syncDirectoryGroups({\n completedAt,\n groupIds: input.directoryGroupIds,\n projectId,\n userId: user.id,\n existing: this.applyGroups({\n completedAt,\n source: \"manual\",\n groupIds: manualGroupIds,\n projectId,\n userId: user.id,\n existing: invitation.memberships,\n }),\n })\n\n const nextIdentity: UserIdentityRecord = {\n projectId,\n strategyId: attempt.strategyId,\n subject,\n userId: user.id,\n claims,\n createdAt: identity?.createdAt ?? completedAt,\n updatedAt: completedAt,\n }\n this.state.identities.set(\n identityKey(projectId, attempt.strategyId, subject),\n cloneRecord(nextIdentity)\n )\n\n const session = this.createSignInSession({\n projectId,\n strategyId: attempt.strategyId,\n session: input.session,\n userId: user.id,\n })\n\n return {\n user: cloneRecord(user),\n session: cloneRecord(session),\n identity: cloneRecord(nextIdentity),\n invitation: invitation.invitation ? cloneRecord(invitation.invitation) : undefined,\n groupMemberships: memberships.map(cloneRecord),\n }\n }\n\n async suspendUserAndRevokeSessions(\n input: SuspendUserAndRevokeSessionsInput\n ): Promise<UserRecord> {\n const key = userKey(input.projectId, input.userId)\n const existing = this.state.users.get(key)\n\n if (!existing) {\n throw new AuthStorageError(\n \"missing_user\",\n `[Sixb] User '${input.userId}' not found for project '${input.projectId}'.`\n )\n }\n\n const next: UserRecord = {\n ...existing,\n status: \"suspended\",\n updatedAt: cloneDate(input.suspendedAt),\n }\n this.state.users.set(key, cloneRecord(next))\n revokeActiveSessionsForUser(this.state, input.projectId, input.userId, input.suspendedAt)\n\n return cloneRecord(next)\n }\n\n private acceptInvitationAndApplyGroups(input: {\n readonly activeInvitation: InvitationRecord | null\n readonly completedAt: Date\n readonly projectId: string\n readonly user: UserRecord\n }): {\n readonly invitation?: InvitationRecord\n readonly memberships: readonly GroupMembershipRecord[]\n } {\n if (!input.activeInvitation) {\n return { memberships: [] }\n }\n\n const invitation: InvitationRecord = {\n ...input.activeInvitation,\n status: \"accepted\",\n acceptedAt: input.completedAt,\n updatedAt: input.completedAt,\n }\n this.state.invitations.set(\n invitationKey(input.projectId, invitation.id),\n cloneRecord(invitation)\n )\n\n const memberships = input.activeInvitation.groupIds.map((groupId) =>\n upsertGroupMembershipRecord(this.state, {\n projectId: input.projectId,\n userId: input.user.id,\n groupId,\n source: \"invitation\",\n createdAt: input.completedAt,\n })\n )\n\n return { invitation, memberships }\n }\n\n private applyGroups(input: {\n readonly completedAt: Date\n readonly groupIds: readonly string[]\n readonly projectId: string\n readonly source: GroupMembershipSource\n readonly userId: string\n readonly existing: readonly GroupMembershipRecord[]\n }): readonly GroupMembershipRecord[] {\n const memberships = [...input.existing]\n for (const groupId of input.groupIds) {\n memberships.push(\n upsertGroupMembershipRecord(this.state, {\n projectId: input.projectId,\n userId: input.userId,\n groupId,\n source: input.source,\n createdAt: input.completedAt,\n })\n )\n }\n return memberships\n }\n // Directory memberships become exactly `groupIds`. A group the user already holds from another\n // source keeps that source, and memberships from other sources are never removed.\n private syncDirectoryGroups(input: {\n readonly completedAt: Date\n readonly groupIds?: readonly string[]\n readonly projectId: string\n readonly userId: string\n readonly existing: readonly GroupMembershipRecord[]\n }): readonly GroupMembershipRecord[] {\n if (!input.groupIds) {\n return input.existing\n }\n\n const groupIds = normalizeGroupIds(input.groupIds)\n const stale = [...this.state.groupMemberships.values()].filter(\n (membership) =>\n membership.projectId === input.projectId &&\n membership.userId === input.userId &&\n membership.source === \"directory\" &&\n !groupIds.includes(membership.groupId)\n )\n for (const membership of stale) {\n removeGroupMembershipRecord(this.state, membership)\n }\n\n return this.applyGroups({ ...input, groupIds, source: \"directory\" })\n }\n\n private createSignInSession(input: {\n readonly projectId: string\n readonly strategyId: string\n readonly session: CompleteMagicLinkSignInInput[\"session\"]\n readonly userId: string\n }): SessionRecord {\n return createSessionRecord(this.state, {\n id: input.session.id,\n projectId: input.projectId,\n userId: input.userId,\n strategyId: input.strategyId,\n tokenHash: input.session.tokenHash,\n createdAt: input.session.createdAt,\n expiresAt: input.session.expiresAt,\n absoluteExpiresAt: input.session.absoluteExpiresAt,\n userAgent: input.session.userAgent,\n ipAddress: input.session.ipAddress,\n })\n }\n\n private consumeOidcAttempt(\n input: CompleteOidcSignInInput,\n completedAt: Date,\n projectId: string\n ): void {\n consumeOidcAttemptRecord(this.state, {\n projectId,\n id: input.oidcAuthorizationAttemptId,\n stateHash: input.stateHash,\n consumedAt: completedAt,\n })\n }\n}\n\nexport type InMemoryAuthStorageSnapshot = AuthStorageState\n\nfunction restoreMap<TKey, TValue>(target: Map<TKey, TValue>, snapshot: Map<TKey, TValue>): void {\n target.clear()\n for (const [key, value] of structuredClone(snapshot)) {\n target.set(key, value)\n }\n}\n",
|
|
32
33
|
"import type { AuthenticatedAuthSession } from \"./types\"\n\ninterface SessionCacheEntry {\n readonly tokenHash: string\n readonly transport: \"cookie\" | \"bearer\"\n readonly session: AuthenticatedAuthSession\n readonly expiresAtMs: number\n}\n\nexport interface SessionCacheGetInput {\n readonly sessionId: string\n readonly tokenHash: string\n /** A cookie is only ever answered from a cookie entry, and a bearer token from a bearer entry. */\n readonly transport: \"cookie\" | \"bearer\"\n readonly nowMs: number\n}\n\nexport interface SessionCacheSetInput {\n readonly sessionId: string\n readonly tokenHash: string\n readonly nowMs: number\n readonly session: AuthenticatedAuthSession\n readonly sessionExpiresAtMs: number\n readonly sessionAbsoluteExpiresAtMs?: number\n}\n\n/**\n * Tiny in-process TTL cache for resolved auth sessions, keyed by session id.\n *\n * Every authenticated request resolves its session through the shared storage pool\n * (a session lookup plus user and group-membership reads). Under request bursts that\n * triples the pool pressure and, with a small pool, can starve the pool so the entire\n * API stalls. Caching the resolved result for a short TTL collapses those reads to one\n * per session per window.\n *\n * Safety: entries are pinned to the exact token hash and transport that produced them and\n * are never served past the session's rolling or absolute deadline. The short TTL bounds how long\n * a revoked session can linger; sign-out additionally invalidates eagerly via\n * {@link SessionCache.invalidate}.\n */\nexport class SessionCache {\n private readonly entries = new Map<string, SessionCacheEntry>()\n\n constructor(\n private readonly ttlMs: number,\n private readonly maxEntries: number = 4096\n ) {}\n\n get(input: SessionCacheGetInput): AuthenticatedAuthSession | undefined {\n const entry = this.entries.get(input.sessionId)\n if (!entry) {\n return undefined\n }\n\n if (\n entry.expiresAtMs <= input.nowMs ||\n entry.tokenHash !== input.tokenHash ||\n entry.transport !== input.transport\n ) {\n this.entries.delete(input.sessionId)\n return undefined\n }\n\n return entry.session\n }\n\n set(input: SessionCacheSetInput): void {\n // Never let a cached session outlive the real session, or a bearer session its access token.\n const bearer = input.session.session.bearer\n const expiresAtMs = Math.min(\n input.nowMs + this.ttlMs,\n input.sessionExpiresAtMs,\n input.sessionAbsoluteExpiresAtMs ?? Number.POSITIVE_INFINITY,\n bearer?.accessExpiresAt.getTime() ?? Number.POSITIVE_INFINITY\n )\n if (expiresAtMs <= input.nowMs) {\n return\n }\n\n // Re-insert so the freshest key sorts last for insertion-order LRU eviction.\n this.entries.delete(input.sessionId)\n this.entries.set(input.sessionId, {\n tokenHash: input.tokenHash,\n transport: bearer ? \"bearer\" : \"cookie\",\n session: input.session,\n expiresAtMs,\n })\n\n if (this.entries.size > this.maxEntries) {\n const oldest = this.entries.keys().next().value\n if (oldest !== undefined) {\n this.entries.delete(oldest)\n }\n }\n }\n\n invalidate(sessionId: string): void {\n this.entries.delete(sessionId)\n }\n\n /**\n * Drop every cached session for a user. Call this after a change that alters how\n * the user's session resolves (group reassignment, suspension) so the next request\n * re-reads storage instead of serving a stale principal.\n */\n invalidateUser(userId: string): void {\n for (const [sessionId, entry] of this.entries) {\n if (entry.session.user.id === userId) {\n this.entries.delete(sessionId)\n }\n }\n }\n\n clear(): void {\n this.entries.clear()\n }\n}\n",
|
|
33
34
|
"import { createHash, randomBytes, randomUUID } from \"node:crypto\"\n\nexport interface SessionCookieParts {\n readonly sessionId: string\n readonly sessionSecret: string\n}\n\nexport interface SessionCredential {\n readonly sessionId: string\n readonly sessionSecret: string\n readonly tokenHash: string\n readonly cookieValue: string\n}\n\nexport function generateSessionSecret(): string {\n return randomBytes(32).toString(\"base64url\")\n}\n\nexport function hashSessionSecret(secret: string): string {\n return createHash(\"sha256\").update(secret).digest(\"hex\")\n}\n\nexport function formatSessionCookieValue(sessionId: string, sessionSecret: string): string {\n if (!sessionId || !sessionSecret || sessionId.includes(\".\") || sessionSecret.includes(\".\")) {\n throw new Error(\"[Sixb] Session cookie values must be non-empty and must not contain '.'.\")\n }\n\n return `${sessionId}.${sessionSecret}`\n}\n\nexport function parseSessionCookieValue(value: string | undefined): SessionCookieParts | null {\n if (!value) {\n return null\n }\n\n const firstDot = value.indexOf(\".\")\n if (firstDot <= 0 || firstDot !== value.lastIndexOf(\".\") || firstDot === value.length - 1) {\n return null\n }\n\n return {\n sessionId: value.slice(0, firstDot),\n sessionSecret: value.slice(firstDot + 1),\n }\n}\n\nexport function createSessionCredential(sessionId = `ses_${randomUUID()}`): SessionCredential {\n const sessionSecret = generateSessionSecret()\n return {\n sessionId,\n sessionSecret,\n tokenHash: hashSessionSecret(sessionSecret),\n cookieValue: formatSessionCookieValue(sessionId, sessionSecret),\n }\n}\n\nexport const SESSION_ACCESS_TOKEN_PREFIX = \"sixb_at_\"\nexport const SESSION_REFRESH_TOKEN_PREFIX = \"sixb_rt_\"\n\nexport interface BearerSessionTokens {\n readonly accessToken: string\n readonly refreshToken: string\n readonly tokenHash: string\n readonly refreshTokenHash: string\n}\n\n/** Fresh access and refresh tokens for a native client's session. Only their hashes are stored. */\nexport function createBearerSessionTokens(sessionId: string): BearerSessionTokens {\n const accessSecret = generateSessionSecret()\n const refreshSecret = generateSessionSecret()\n return {\n accessToken: `${SESSION_ACCESS_TOKEN_PREFIX}${formatSessionCookieValue(sessionId, accessSecret)}`,\n refreshToken: `${SESSION_REFRESH_TOKEN_PREFIX}${formatSessionCookieValue(sessionId, refreshSecret)}`,\n tokenHash: hashSessionSecret(accessSecret),\n refreshTokenHash: hashSessionSecret(refreshSecret),\n }\n}\n\n/** The session id and secret in a bearer session token, or null when it is not one. */\nexport function parseBearerSessionToken(\n prefix: typeof SESSION_ACCESS_TOKEN_PREFIX | typeof SESSION_REFRESH_TOKEN_PREFIX,\n value: string\n): SessionCookieParts | null {\n return value.startsWith(prefix) ? parseSessionCookieValue(value.slice(prefix.length)) : null\n}\n",
|
|
34
35
|
"import type { GroupDefinition, GroupReference, MembershipOperation } from \"../security\"\nimport type {\n AccessTokenRecord,\n AuthStorage,\n CompleteAuthSessionInput,\n CompleteSignInResult,\n InvitationRecord,\n InvitationStatus,\n ServiceAccountGroupMembershipRecord,\n ServiceAccountRecord,\n SessionRecord,\n UserRecord,\n} from \"../storage/auth\"\n\nexport type Principal =\n | { readonly type: \"user\"; readonly id: string }\n | { readonly type: \"serviceAccount\"; readonly id: string }\n | { readonly type: \"system\"; readonly id: string }\n\n/**\n * The canonical principal for system-originated writes (runs triggered without a caller,\n * worker fallbacks, decode-time defaults). Import this everywhere instead of inlining a\n * `{ type: \"system\", id: \"system\" }` literal so the system identity never forks.\n */\nexport const SYSTEM_PRINCIPAL: Principal = { type: \"system\", id: \"system\" }\n\n/** Structural equality for principals (same type and id). */\nexport function principalsEqual(left: Principal, right: Principal): boolean {\n return left.type === right.type && left.id === right.id\n}\n\nexport type AuthStrategyKind = \"magicLink\" | \"oidc\" | \"dev\" | \"disabled\"\n\nexport interface AuthStrategy {\n readonly id: string\n readonly kind: AuthStrategyKind\n readonly developmentOnly?: boolean\n readonly disabled?: boolean\n readonly allowDisabledInProduction?: boolean\n}\n\nexport interface InvitationRecipientInput {\n readonly projectId: string\n readonly authStorage: AuthStorage\n readonly email: string\n readonly now?: Date\n}\n\nexport type InvitationRecipientStatus =\n | \"allowed\"\n | \"invalid_email\"\n | \"disallowed_domain\"\n | \"suspended_user\"\n | \"rate_limited\"\n\nexport interface InvitationRecipientResult {\n readonly status: InvitationRecipientStatus\n readonly email?: string\n}\n\nexport interface InvitationDeliveryInput {\n readonly projectId: string\n readonly authStorage: AuthStorage\n readonly invitation: InvitationRecord\n readonly returnTo: string\n readonly requestOrigin: string\n /** Return the delivered link once so the inviter can copy it through an approved channel. */\n readonly revealLink?: boolean\n readonly now?: Date\n}\n\nexport type AuthEmailDeliveryStatus = \"sent\" | \"skipped\" | \"rate_limited\"\n\nexport type InviteDeliveryStatus = AuthEmailDeliveryStatus | \"not_supported\"\n\nexport interface RevealedInvitationLink {\n readonly url: string\n readonly expiresAt?: Date\n}\n\nexport interface InviteDeliveryResult {\n readonly status: InviteDeliveryStatus\n /**\n * Present only when the caller explicitly requests `revealLink`. Treat this as a credential:\n * never persist it or include it in list responses, logs, or analytics.\n */\n readonly link?: RevealedInvitationLink\n}\n\nexport interface InvitationDeliveryAuthStrategy extends AuthStrategy {\n validateInvitationRecipient?(input: InvitationRecipientInput): Promise<InvitationRecipientResult>\n deliverInvitation(input: InvitationDeliveryInput): Promise<InviteDeliveryResult>\n}\n\nexport interface MagicLinkRequestInput {\n readonly projectId: string\n readonly authStorage: AuthStorage\n readonly email: string\n readonly returnTo: string\n readonly requestOrigin: string\n /**\n * Opaque hash the strategy appends to the callback URL as the `requester`\n * query param. The server keeps the preimage in a cookie on the requesting\n * browser so the callback can sign that same browser in without the extra\n * confirmation click. Omitted for deliveries with no requesting browser\n * (invitations).\n */\n readonly requesterHash?: string\n readonly now?: Date\n}\n\nexport type MagicLinkRequestStatus = AuthEmailDeliveryStatus\n\nexport interface MagicLinkRequestResult {\n readonly status: MagicLinkRequestStatus\n}\n\nexport type AuthInvitationRecipientInput = InvitationRecipientInput\n\nexport type AuthInvitationRecipientStatus = InvitationRecipientStatus\n\nexport type AuthInvitationRecipientResult = InvitationRecipientResult\n\nexport type MagicLinkInvitationRecipientInput = InvitationRecipientInput\n\nexport type MagicLinkInvitationRecipientStatus = InvitationRecipientStatus\n\nexport type MagicLinkInvitationRecipientResult = InvitationRecipientResult\n\nexport interface MagicLinkCallbackInput {\n readonly projectId: string\n readonly authStorage: AuthStorage\n readonly magicLinkId: string\n readonly token: string\n readonly session: CompleteAuthSessionInput\n readonly now?: Date\n}\n\nexport interface MagicLinkCallbackResult extends CompleteSignInResult {\n readonly returnTo: string\n}\n\nexport interface MagicLinkPeekInput {\n readonly projectId: string\n readonly authStorage: AuthStorage\n readonly magicLinkId: string\n readonly token: string\n readonly now?: Date\n}\n\nexport interface MagicLinkPeekResult {\n readonly email: string\n}\n\nexport interface MagicLinkAuthStrategy extends InvitationDeliveryAuthStrategy {\n readonly kind: \"magicLink\"\n readonly bootstrapGroupIds?: readonly string[]\n /**\n * How long issued links stay valid (ms). Lets the server align dependent\n * lifetimes (e.g. the same-device pending cookie) with the configured TTL.\n */\n readonly magicLinkTtlMs?: number\n validateInvitationRecipient?(\n input: MagicLinkInvitationRecipientInput\n ): Promise<MagicLinkInvitationRecipientResult>\n requestMagicLink(input: MagicLinkRequestInput): Promise<MagicLinkRequestResult>\n /**\n * Read-only validity check for a link the user has not confirmed yet. Must\n * never consume the token, and must apply the same rules that would make\n * {@link completeMagicLinkSignIn} fail (including token verification), so a\n * link that peeks as valid only fails to complete when raced. Returns null\n * for links that cannot complete sign-in.\n */\n peekMagicLink?(input: MagicLinkPeekInput): Promise<MagicLinkPeekResult | null>\n completeMagicLinkSignIn(input: MagicLinkCallbackInput): Promise<MagicLinkCallbackResult>\n}\n\nexport interface OidcStartSignInInput {\n readonly projectId: string\n readonly authStorage: AuthStorage\n readonly returnTo: string\n readonly requestOrigin: string\n readonly now?: Date\n}\n\nexport interface OidcStartSignInResult {\n readonly redirectTo: string\n /**\n * The `state` sent to the provider. The server keeps it in a cookie until `expiresAt` and\n * completes the callback only in the browser that holds it.\n */\n readonly state: string\n readonly expiresAt: Date\n}\n\nexport interface OidcCallbackInput {\n readonly projectId: string\n readonly authStorage: AuthStorage\n readonly requestUrl: string\n readonly requestOrigin: string\n readonly session: CompleteAuthSessionInput\n readonly now?: Date\n}\n\nexport interface OidcCallbackResult extends CompleteSignInResult {\n readonly returnTo: string\n}\n\nexport interface OidcAuthStrategy extends InvitationDeliveryAuthStrategy {\n readonly kind: \"oidc\"\n readonly bootstrapGroupIds?: readonly string[]\n startOidcSignIn(input: OidcStartSignInInput): Promise<OidcStartSignInResult>\n completeOidcSignIn(input: OidcCallbackInput): Promise<OidcCallbackResult>\n}\n\nexport interface InviteUserInput {\n readonly email: string\n readonly groups?: readonly GroupDefinition[]\n readonly groupIds?: readonly string[]\n readonly expiresAt?: Date\n /** Reveal the delivered link once in the result. Defaults to false. */\n readonly revealLink?: boolean\n}\n\nexport interface InviteUserResult {\n readonly invitation: InvitationRecord\n readonly delivery: InviteDeliveryResult\n}\n\nexport interface ListInvitationsInput {\n readonly email?: string\n readonly statuses?: readonly InvitationStatus[]\n readonly limit?: number\n readonly offset?: number\n readonly order?: \"asc\" | \"desc\"\n}\n\nexport interface ListInvitationsResult {\n readonly invitations: readonly InvitationRecord[]\n readonly hasMore: boolean\n readonly total: number\n}\n\nexport interface InvitationGroupOption {\n readonly id: string\n readonly label?: string\n readonly description?: string\n}\n\nexport type CreateInvitationCapability =\n | { readonly state: \"enabled\" }\n | {\n readonly state: \"disabled\"\n readonly reason: \"missing_membership_policy\" | \"invitation_delivery_not_supported\"\n }\n\nexport interface GetInvitationOptionsResult {\n readonly groups: readonly InvitationGroupOption[]\n readonly canInviteWithoutGroups: boolean\n readonly capabilities: {\n readonly createInvitation: CreateInvitationCapability\n }\n}\n\n/**\n * Which membership operations the caller holds at least one policy for. Coarse,\n * caller-wide capabilities used to gate top-level UI affordances; per-target\n * checks (scope over a member's current groups, self-protection) are finer.\n */\nexport interface MembershipOperationCapabilities {\n readonly invite: boolean\n readonly assignGroups: boolean\n readonly suspend: boolean\n readonly serviceAccounts: boolean\n}\n\nexport interface GetMembershipOptionsResult {\n /** Groups the caller may assign to a member (the `assignGroups` scope). */\n readonly groups: readonly InvitationGroupOption[]\n /** Groups the caller may place a service account in (the `serviceAccounts` scope). */\n readonly serviceAccountGroups: readonly InvitationGroupOption[]\n readonly capabilities: MembershipOperationCapabilities\n}\n\n/**\n * What a caller's membership policies let it do — the answer to \"may this principal invite?\".\n *\n * Resolved from group ids alone, with no HTTP request involved, so project code and tests can ask the\n * question the same way the member-admin routes do.\n */\nexport interface MembershipCapabilities {\n /** True when at least one policy grants the operation, ignoring which groups it covers. */\n readonly holds: MembershipOperationCapabilities\n /** Group ids the caller may assign to a member. */\n readonly assignableGroupIds: readonly string[]\n /**\n * Whether the caller's policy scope reaches a member currently holding exactly `memberGroups`.\n *\n * Pass definitions when your code knows the groups (`covers(\"suspend\", [teamMembers])`) and ids when\n * they came from a session or a member's stored memberships. An empty list asks the group-less case —\n * inviting someone who joins no group — which any holder of the operation may do.\n *\n * Coverage is not authorization. It is the group boundary the membership policies draw, which is what\n * a UI needs to decide whether to offer a control for a given member. The operation itself applies\n * rules this question cannot see: `suspendMember` refuses the current user, `assignGroups` also checks\n * the groups being assigned against `assignableGroupIds`, and a member's status can rule it out. Ask\n * the runtime method for the decision; ask this for the boundary.\n */\n covers(operation: MembershipOperation, memberGroups: readonly GroupReference[]): boolean\n}\n\nexport interface ListMembersInput {\n readonly limit?: number\n readonly offset?: number\n readonly order?: \"asc\" | \"desc\"\n}\n\n/** Per-target actions the caller may take on a member, after self-protection. */\nexport interface MemberCapabilities {\n readonly assignGroups: boolean\n readonly suspend: boolean\n readonly reactivate: boolean\n}\n\nexport interface MemberSummary {\n readonly user: UserRecord\n readonly groupIds: readonly string[]\n /**\n * The groups among `groupIds` that the identity provider manages. They sync at the user's next\n * sign-in, so they cannot be removed here.\n */\n readonly managedGroupIds: readonly string[]\n readonly capabilities: MemberCapabilities\n}\n\nexport interface ListMembersResult {\n readonly members: readonly MemberSummary[]\n readonly hasMore: boolean\n readonly total: number\n}\n\nexport interface UpdateMemberGroupsInput {\n readonly userId: string\n /** The desired full set of groups; additions and removals are derived from it. */\n readonly groupIds: readonly string[]\n}\n\nexport interface UpdateMemberGroupsResult {\n readonly user: UserRecord\n readonly groupIds: readonly string[]\n readonly managedGroupIds: readonly string[]\n}\n\nexport interface SuspendMemberInput {\n readonly userId: string\n}\n\nexport interface SuspendMemberResult {\n readonly user: UserRecord\n readonly groupIds: readonly string[]\n readonly managedGroupIds: readonly string[]\n}\n\nexport interface ReactivateMemberInput {\n readonly userId: string\n}\n\nexport interface ReactivateMemberResult {\n readonly user: UserRecord\n readonly groupIds: readonly string[]\n readonly managedGroupIds: readonly string[]\n}\n\n/** `\"session\"` reads only the cookie; `\"any\"` reads a bearer access token, else the cookie. */\nexport type AuthCredentialSource = \"session\" | \"any\"\n\nexport interface AuthSessionResolutionOptions {\n readonly credentialSource?: AuthCredentialSource\n /** Marks this request as eligible to renew a near-expiry browser session. */\n readonly sessionActivity?: \"foreground\"\n}\n\n/** Where an invitation link sends its recipient. */\nexport interface InvitationDestination {\n readonly requestOrigin: string\n readonly returnTo: string\n}\n\nexport interface RevokeInvitationInput {\n readonly invitationId: string\n}\n\nexport interface RevokeInvitationResult {\n readonly invitation: InvitationRecord\n}\n\nexport interface CreatePersonalAccessTokenInput {\n readonly name: string\n readonly expiresAt: Date\n readonly groupIds?: readonly string[]\n}\n\nexport interface CreateServiceAccountInput {\n readonly id?: string\n readonly name: string\n readonly description?: string\n readonly groupIds?: readonly string[]\n}\n\nexport interface CreateServiceAccountResult {\n readonly serviceAccount: ServiceAccountRecord\n readonly groupMemberships: readonly ServiceAccountGroupMembershipRecord[]\n}\n\nexport interface CreateServiceAccountAccessTokenInput {\n readonly serviceAccountId: string\n readonly name: string\n readonly expiresAt: Date\n readonly groupIds?: readonly string[]\n}\n\nexport interface CreateAccessTokenResult {\n readonly accessToken: AccessTokenRecord\n readonly tokenValue: string\n}\n\nexport interface CreateServiceAccountAccessTokenResult extends CreateAccessTokenResult {\n readonly serviceAccount: ServiceAccountRecord\n}\n\nexport interface ServiceAccountWithGroups {\n readonly serviceAccount: ServiceAccountRecord\n readonly groupIds: readonly string[]\n}\n\nexport interface ListServiceAccountsResult {\n readonly serviceAccounts: readonly ServiceAccountWithGroups[]\n}\n\nexport interface ListPersonalAccessTokensResult {\n readonly accessTokens: readonly AccessTokenRecord[]\n}\n\nexport interface ListServiceAccountAccessTokensInput {\n readonly serviceAccountId: string\n}\n\nexport interface ListServiceAccountAccessTokensResult {\n readonly serviceAccount: ServiceAccountRecord\n readonly accessTokens: readonly AccessTokenRecord[]\n}\n\nexport interface DisableServiceAccountInput {\n readonly serviceAccountId: string\n}\n\nexport interface DisableServiceAccountResult {\n readonly serviceAccount: ServiceAccountRecord\n readonly groupIds: readonly string[]\n}\n\nexport interface RevokePersonalAccessTokenInput {\n readonly tokenId: string\n}\n\nexport interface RevokeServiceAccountAccessTokenInput {\n readonly serviceAccountId: string\n readonly tokenId: string\n}\n\nexport interface RevokeAccessTokenResult {\n readonly accessToken: AccessTokenRecord\n}\n\nexport interface RevokeServiceAccountAccessTokenResult {\n readonly serviceAccount: ServiceAccountRecord\n readonly accessToken: AccessTokenRecord\n}\n\nexport interface AuthSessionOptions {\n /** How long a browser session may remain idle before it expires. Defaults to 30 days. */\n readonly idleTimeoutMs?: number\n /** How close to idle expiry a foreground request must be before renewal. Defaults to 7 days. */\n readonly renewalWindowMs?: number\n /**\n * Optional maximum lifetime that foreground activity cannot extend. Captured when the session\n * is created, so later configuration changes affect only newly issued sessions. Disabled by\n * default.\n */\n readonly absoluteTimeoutMs?: number\n /**\n * How long (ms) a resolved session is cached in-process before it is re-validated\n * against storage. Collapses the per-request auth reads (session + user + memberships)\n * during request bursts so they cannot starve the storage pool. Set to 0 to disable.\n * Defaults to {@link DEFAULT_AUTH_SESSION_CACHE_TTL_MS}.\n */\n readonly cacheTtlMs?: number\n}\n\nexport interface ResolvedAuthSessionOptions {\n readonly idleTimeoutMs: number\n readonly renewalWindowMs: number\n readonly absoluteTimeoutMs?: number\n readonly cacheTtlMs: number\n}\n\nexport interface AuthCookieOptions {\n readonly sessionCookieName?: string\n readonly csrfCookieName?: string\n readonly cookieDomain?: string\n readonly secure?: boolean | \"auto\"\n readonly sameSite?: \"strict\"\n readonly csrfHttpOnly?: boolean\n}\n\nexport type SixbAuthConfig =\n | AuthStrategy\n | {\n readonly strategy: AuthStrategy\n readonly session?: AuthSessionOptions\n readonly cookies?: AuthCookieOptions\n }\n\nexport type AuthSessionFailureReason =\n | \"auth_disabled\"\n | \"missing_cookie\"\n | \"invalid_cookie\"\n | \"invalid_access_token\"\n | \"invalid_session\"\n | \"missing_user\"\n | \"missing_service_account\"\n | \"suspended_service_account\"\n | \"suspended_user\"\n\nexport interface UnauthenticatedAuthSession {\n readonly authenticated: false\n readonly reason: AuthSessionFailureReason\n}\n\nexport interface AuthenticatedAuthSession {\n readonly authenticated: true\n readonly credentialSource: \"session\"\n readonly principal: Extract<Principal, { readonly type: \"user\" }>\n readonly user: UserRecord\n readonly session: SessionRecord\n readonly groupIds: readonly string[]\n /** Internal response hint: the rolling session deadline advanced during this request. */\n readonly sessionRenewed?: true\n}\n\nexport interface AuthenticatedUserAccessTokenSession {\n readonly authenticated: true\n readonly credentialSource: \"accessToken\"\n readonly principal: Extract<Principal, { readonly type: \"user\" }>\n readonly user: UserRecord\n readonly accessToken: AccessTokenRecord\n readonly groupIds: readonly string[]\n}\n\nexport interface AuthenticatedServiceAccountAccessTokenSession {\n readonly authenticated: true\n readonly credentialSource: \"accessToken\"\n readonly principal: Extract<Principal, { readonly type: \"serviceAccount\" }>\n readonly serviceAccount: ServiceAccountRecord\n readonly accessToken: AccessTokenRecord\n readonly groupIds: readonly string[]\n}\n\nexport type AuthSessionResult = UnauthenticatedAuthSession | AuthenticatedAuthSession\n\nexport type AuthenticatedUserRequestSession =\n | AuthenticatedAuthSession\n | AuthenticatedUserAccessTokenSession\n\nexport type AuthenticatedRequestAuthSession =\n | AuthenticatedUserRequestSession\n | AuthenticatedServiceAccountAccessTokenSession\n\nexport type AuthRequestResult = UnauthenticatedAuthSession | AuthenticatedRequestAuthSession\n\nexport interface ResolvedAuthConfig {\n readonly strategy: AuthStrategy | null\n readonly session: ResolvedAuthSessionOptions\n readonly cookies: Required<Omit<AuthCookieOptions, \"cookieDomain\">> & {\n readonly domain?: string\n }\n}\n"
|
|
35
36
|
],
|
|
36
|
-
"mappings": "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",
|
|
37
|
-
"debugId": "
|
|
37
|
+
"mappings": "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",
|
|
38
|
+
"debugId": "EE5BEC634BE73EEF64756E2164756E21",
|
|
38
39
|
"names": []
|
|
39
40
|
}
|