@sixb/core 0.1.12 → 0.1.14
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/index.d.ts +2 -2
- package/dist/actions/index.d.ts.map +1 -1
- package/dist/actions/index.js +28 -26
- package/dist/actions/index.js.map +1 -1
- package/dist/actions/read-facade.d.ts +14 -16
- package/dist/actions/read-facade.d.ts.map +1 -1
- package/dist/actions/request.d.ts.map +1 -1
- package/dist/actions/run-dispatch.d.ts +2 -0
- package/dist/actions/run-dispatch.d.ts.map +1 -1
- package/dist/actions/types/context.d.ts +18 -31
- package/dist/actions/types/context.d.ts.map +1 -1
- package/dist/actions/types/params.d.ts +2 -1
- package/dist/actions/types/params.d.ts.map +1 -1
- package/dist/actions/worker.js +1 -1
- package/dist/agents/index.js +41 -39
- package/dist/agents/index.js.map +1 -1
- package/dist/agents/streams/index.js +2 -2
- package/dist/agents/streams/internal.js +2 -2
- package/dist/assert-never.d.ts +6 -0
- package/dist/assert-never.d.ts.map +1 -0
- package/dist/auth/client-address.d.ts +3 -0
- package/dist/auth/client-address.d.ts.map +1 -0
- package/dist/auth/csrf.d.ts +5 -1
- package/dist/auth/csrf.d.ts.map +1 -1
- package/dist/auth/errors.d.ts +12 -0
- package/dist/auth/errors.d.ts.map +1 -1
- package/dist/auth/index.d.ts +4 -3
- package/dist/auth/index.d.ts.map +1 -1
- package/dist/auth/index.js +16 -8
- package/dist/auth/index.js.map +1 -1
- package/dist/auth/runtime.d.ts +58 -41
- package/dist/auth/runtime.d.ts.map +1 -1
- package/dist/auth/session-cache.d.ts +10 -3
- package/dist/auth/session-cache.d.ts.map +1 -1
- package/dist/auth/sessions.d.ts +12 -0
- package/dist/auth/sessions.d.ts.map +1 -1
- package/dist/auth/strategy.d.ts +2 -0
- package/dist/auth/strategy.d.ts.map +1 -1
- package/dist/auth/strategy.js +4 -2
- package/dist/auth/strategy.js.map +1 -1
- package/dist/auth/types.d.ts +16 -15
- package/dist/auth/types.d.ts.map +1 -1
- package/dist/authorization/index.js +3 -3
- package/dist/bootstrap/index.d.ts +1 -1
- package/dist/bootstrap/index.d.ts.map +1 -1
- package/dist/bootstrap/index.js +45 -43
- package/dist/bootstrap/index.js.map +1 -1
- package/dist/bootstrap/ontology-type-manifest.d.ts +8 -0
- package/dist/bootstrap/ontology-type-manifest.d.ts.map +1 -1
- package/dist/{chunk-m7cx05vp.js → chunk-00pfcqh4.js} +126 -59
- package/dist/{chunk-m7cx05vp.js.map → chunk-00pfcqh4.js.map} +13 -12
- package/dist/{chunk-nzsy3xrp.js → chunk-16jenmzw.js} +69 -44
- package/dist/{chunk-nzsy3xrp.js.map → chunk-16jenmzw.js.map} +7 -7
- package/dist/{chunk-y3ev53cq.js → chunk-2fv8sajb.js} +2 -2
- package/dist/{chunk-q5gz3g2j.js → chunk-2jntasmh.js} +13 -16
- package/dist/{chunk-q5gz3g2j.js.map → chunk-2jntasmh.js.map} +3 -3
- package/dist/chunk-3a338wrp.js +191 -0
- package/dist/chunk-3a338wrp.js.map +11 -0
- package/dist/{chunk-ybhz3j9g.js → chunk-3fpgxpsq.js} +104 -148
- package/dist/{chunk-ybhz3j9g.js.map → chunk-3fpgxpsq.js.map} +7 -8
- package/dist/{chunk-eyjzgav0.js → chunk-3nx8vj5a.js} +6 -4
- package/dist/chunk-3nx8vj5a.js.map +12 -0
- package/dist/{chunk-5tetw4hn.js → chunk-4tnrzqqh.js} +1 -1
- package/dist/{chunk-3ghw2t5q.js → chunk-4ypbe95r.js} +10 -16
- package/dist/chunk-4ypbe95r.js.map +10 -0
- package/dist/{chunk-2cxv584m.js → chunk-6rzb1g6h.js} +358 -248
- package/dist/chunk-6rzb1g6h.js.map +44 -0
- package/dist/{chunk-7zgecwy1.js → chunk-6x0pqh32.js} +12 -1
- package/dist/{chunk-7zgecwy1.js.map → chunk-6x0pqh32.js.map} +3 -3
- package/dist/{chunk-6ma8dvzc.js → chunk-728fp090.js} +49 -42
- package/dist/chunk-728fp090.js.map +15 -0
- package/dist/chunk-96yw3pwd.js.map +2 -2
- package/dist/{chunk-4k53sm9e.js → chunk-a0073121.js} +59 -59
- package/dist/{chunk-4k53sm9e.js.map → chunk-a0073121.js.map} +5 -5
- package/dist/{chunk-y1ahv8b7.js → chunk-bdhfn0ww.js} +1 -1
- package/dist/{chunk-kept9cdd.js → chunk-bxx3ms5t.js} +1 -1
- package/dist/{chunk-xtfryrfb.js → chunk-cbn96bve.js} +2 -2
- package/dist/{chunk-vsg0g7h9.js → chunk-d8yes9yx.js} +304 -45
- package/dist/chunk-d8yes9yx.js.map +20 -0
- package/dist/{chunk-vpxss818.js → chunk-drz59ve0.js} +9 -8
- package/dist/chunk-drz59ve0.js.map +10 -0
- package/dist/{chunk-7c2g3sz9.js → chunk-dsfw1bdr.js} +5 -5
- package/dist/{chunk-7c2g3sz9.js.map → chunk-dsfw1bdr.js.map} +1 -1
- package/dist/{chunk-qm535afa.js → chunk-dv4ct8mp.js} +66 -24
- package/dist/chunk-dv4ct8mp.js.map +15 -0
- package/dist/{chunk-t7dzd1tm.js → chunk-e2c5yxfe.js} +2 -2
- package/dist/{chunk-p6r1ex7t.js → chunk-ffwvdgk1.js} +5 -13
- package/dist/chunk-ffwvdgk1.js.map +10 -0
- package/dist/{chunk-tg4g4zh0.js → chunk-gct3m1da.js} +9 -9
- package/dist/{chunk-tg4g4zh0.js.map → chunk-gct3m1da.js.map} +3 -3
- package/dist/chunk-h89wz928.js +42 -0
- package/dist/chunk-h89wz928.js.map +10 -0
- package/dist/{chunk-b768c93y.js → chunk-hj0n3c2p.js} +83 -28
- package/dist/{chunk-b768c93y.js.map → chunk-hj0n3c2p.js.map} +5 -5
- package/dist/{chunk-hkw8rykk.js → chunk-ht4a7mjg.js} +74 -4
- package/dist/chunk-ht4a7mjg.js.map +15 -0
- package/dist/{chunk-7qnvhtcd.js → chunk-hxgj4kzd.js} +17 -17
- package/dist/{chunk-7qnvhtcd.js.map → chunk-hxgj4kzd.js.map} +5 -5
- package/dist/{chunk-bg2bs62d.js → chunk-jfdggg1p.js} +5 -5
- package/dist/{chunk-f06sf7rr.js → chunk-k4kkp58d.js} +18 -5
- package/dist/chunk-k4kkp58d.js.map +11 -0
- package/dist/{chunk-e1f1sqba.js → chunk-kxea54yg.js} +3 -3
- package/dist/{chunk-2h63nrde.js → chunk-ky7zpbtt.js} +5 -7
- package/dist/{chunk-2h63nrde.js.map → chunk-ky7zpbtt.js.map} +3 -4
- package/dist/chunk-m4ehq95f.js +9 -0
- package/dist/chunk-m4ehq95f.js.map +10 -0
- package/dist/{chunk-0mza4xb2.js → chunk-m8zkvep1.js} +2 -2
- package/dist/{chunk-xn686q2e.js → chunk-ma1mhh7w.js} +75 -57
- package/dist/{chunk-xn686q2e.js.map → chunk-ma1mhh7w.js.map} +3 -3
- package/dist/{chunk-yxb4c62x.js → chunk-mr60an99.js} +3 -2
- package/dist/{chunk-yxb4c62x.js.map → chunk-mr60an99.js.map} +3 -3
- package/dist/{chunk-g50nxqs5.js → chunk-pvgpckm1.js} +63 -20
- package/dist/chunk-pvgpckm1.js.map +20 -0
- package/dist/{chunk-jjwhy3rs.js → chunk-q2xghyft.js} +5 -5
- package/dist/chunk-rdghfsss.js.map +2 -2
- package/dist/{chunk-bbaa1fet.js → chunk-rzcjp5m2.js} +7 -3
- package/dist/chunk-rzcjp5m2.js.map +25 -0
- package/dist/{chunk-hzw7yv5g.js → chunk-rzkr70gr.js} +5 -1
- package/dist/{chunk-hzw7yv5g.js.map → chunk-rzkr70gr.js.map} +3 -3
- package/dist/{chunk-axndsymr.js → chunk-tw03bsmb.js} +2 -2
- package/dist/{chunk-axndsymr.js.map → chunk-tw03bsmb.js.map} +3 -3
- package/dist/{chunk-y0v18c2j.js → chunk-vef6qa14.js} +2 -2
- package/dist/{chunk-gzt6v1ja.js → chunk-vn3yh259.js} +1 -1
- package/dist/{chunk-sfypc7mk.js → chunk-wn7mznxc.js} +4 -4
- package/dist/{chunk-r5zythxp.js → chunk-wnxabtn4.js} +7 -7
- package/dist/{chunk-4ph94nhd.js → chunk-ww185kt6.js} +2 -2
- package/dist/{chunk-3h7ctayx.js → chunk-xgptywp0.js} +4 -3
- package/dist/chunk-xgptywp0.js.map +11 -0
- package/dist/{chunk-gswwr35f.js → chunk-y487ywrv.js} +4 -4
- package/dist/{chunk-bet1rb9h.js → chunk-y6vnvayj.js} +1 -1
- package/dist/{chunk-x9tmx3fc.js → chunk-ypj2wqtj.js} +3 -6
- package/dist/{chunk-x9tmx3fc.js.map → chunk-ypj2wqtj.js.map} +4 -4
- package/dist/{chunk-3bnt2wna.js → chunk-yvf2jqj8.js} +1 -1
- package/dist/{chunk-g2gezsg5.js → chunk-z9h698s8.js} +1 -1
- package/dist/{chunk-wjffn5m4.js → chunk-zdkcdshk.js} +3 -36
- package/dist/{chunk-wjffn5m4.js.map → chunk-zdkcdshk.js.map} +3 -4
- package/dist/{chunk-bfjv1adk.js → chunk-znw0zvy4.js} +1 -1
- package/dist/edits/types.d.ts +19 -19
- package/dist/edits/types.d.ts.map +1 -1
- package/dist/error-reporting/internal.js +3 -3
- package/dist/errors/catalog.d.ts +4 -0
- package/dist/errors/catalog.d.ts.map +1 -1
- package/dist/errors/internal.js +1 -1
- package/dist/events/envelope.d.ts +0 -12
- package/dist/events/envelope.d.ts.map +1 -1
- package/dist/events/index.d.ts +1 -1
- package/dist/events/index.d.ts.map +1 -1
- package/dist/events/index.js +3 -3
- package/dist/events/service.d.ts +1 -2
- package/dist/events/service.d.ts.map +1 -1
- package/dist/events/toStoredEvent.d.ts +1 -2
- package/dist/events/toStoredEvent.d.ts.map +1 -1
- package/dist/events/types/index.d.ts +2 -1
- package/dist/events/types/index.d.ts.map +1 -1
- package/dist/execution/agent.d.ts +1 -2
- package/dist/execution/agent.d.ts.map +1 -1
- package/dist/execution/agent.js +39 -37
- package/dist/execution/agent.js.map +1 -1
- package/dist/execution/authorized-object-reader.d.ts.map +1 -1
- package/dist/execution/primitive.d.ts +1 -2
- package/dist/execution/primitive.d.ts.map +1 -1
- package/dist/execution/primitive.js +38 -36
- package/dist/execution/primitive.js.map +3 -3
- package/dist/execution/request.d.ts +1 -2
- package/dist/execution/request.d.ts.map +1 -1
- package/dist/execution/request.js +39 -37
- package/dist/execution/request.js.map +3 -3
- package/dist/index.d.ts +6 -6
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +56 -50
- package/dist/index.js.map +1 -1
- package/dist/maintenance/ontology-maintenance.d.ts +11 -1
- package/dist/maintenance/ontology-maintenance.d.ts.map +1 -1
- package/dist/materialization/errors.d.ts +3 -1
- package/dist/materialization/errors.d.ts.map +1 -1
- package/dist/materialization/events.d.ts +27 -2
- package/dist/materialization/events.d.ts.map +1 -1
- package/dist/materializer/edits/commit.d.ts.map +1 -1
- package/dist/materializer/edits/operations.d.ts +2 -1
- package/dist/materializer/edits/operations.d.ts.map +1 -1
- package/dist/materializer/edits/plan.d.ts +2 -2
- package/dist/materializer/edits/plan.d.ts.map +1 -1
- package/dist/materializer/edits/user-refs.d.ts +30 -0
- package/dist/materializer/edits/user-refs.d.ts.map +1 -0
- package/dist/materializer/effective/build-events.d.ts +2 -2
- package/dist/materializer/effective/build-events.d.ts.map +1 -1
- package/dist/materializer/execution/scope.d.ts +11 -3
- package/dist/materializer/execution/scope.d.ts.map +1 -1
- package/dist/materializer/index.js +23 -21
- package/dist/materializer/index.js.map +1 -1
- package/dist/materializer/projections/replacement-plan.d.ts +2 -0
- package/dist/materializer/projections/replacement-plan.d.ts.map +1 -1
- package/dist/materializer/telemetry/plan.d.ts +2 -2
- package/dist/materializer/telemetry/plan.d.ts.map +1 -1
- package/dist/models/execution/index.js +23 -21
- package/dist/models/execution/index.js.map +1 -1
- package/dist/models/index.js +1 -1
- package/dist/objects/execution.d.ts +21 -27
- package/dist/objects/execution.d.ts.map +1 -1
- package/dist/objects/index.js +28 -26
- package/dist/objects/index.js.map +1 -1
- package/dist/objects/query/executor.d.ts.map +1 -1
- package/dist/objects/query/index.js +27 -25
- package/dist/objects/query/index.js.map +1 -1
- package/dist/objects/query/ir.d.ts +8 -1
- package/dist/objects/query/ir.d.ts.map +1 -1
- package/dist/objects/query/scalar-values.d.ts.map +1 -1
- package/dist/objects/query/validate.d.ts.map +1 -1
- package/dist/objects/sdk/object-handle.d.ts +1 -2
- package/dist/objects/sdk/object-handle.d.ts.map +1 -1
- package/dist/objects/sdk/object-set.d.ts +2 -3
- package/dist/objects/sdk/object-set.d.ts.map +1 -1
- package/dist/objects/sdk/query-builder.d.ts +8 -10
- package/dist/objects/sdk/query-builder.d.ts.map +1 -1
- package/dist/objects/sdk/telemetry-channel.d.ts +1 -2
- package/dist/objects/sdk/telemetry-channel.d.ts.map +1 -1
- package/dist/objects/sdk/where.d.ts +2 -3
- package/dist/objects/sdk/where.d.ts.map +1 -1
- package/dist/ontology/builders.d.ts +11 -10
- package/dist/ontology/builders.d.ts.map +1 -1
- package/dist/ontology/index.d.ts +4 -2
- package/dist/ontology/index.d.ts.map +1 -1
- package/dist/ontology/index.js +6 -4
- package/dist/ontology/index.js.map +1 -1
- package/dist/ontology/inference/index.d.ts +34 -22
- package/dist/ontology/inference/index.d.ts.map +1 -1
- package/dist/ontology/internal.d.ts +1 -0
- package/dist/ontology/internal.d.ts.map +1 -1
- package/dist/ontology/internal.js +9 -7
- package/dist/ontology/internal.js.map +1 -1
- package/dist/ontology/primitives.d.ts +38 -0
- package/dist/ontology/primitives.d.ts.map +1 -0
- package/dist/ontology/query-capabilities.d.ts +38 -0
- package/dist/ontology/query-capabilities.d.ts.map +1 -0
- package/dist/ontology/refs.d.ts +23 -2
- package/dist/ontology/refs.d.ts.map +1 -1
- package/dist/ontology/registered.d.ts +16 -0
- package/dist/ontology/registered.d.ts.map +1 -0
- package/dist/ontology/registry.d.ts.map +1 -1
- package/dist/ontology/tokens.d.ts +35 -1
- package/dist/ontology/tokens.d.ts.map +1 -1
- package/dist/ontology/types.d.ts +18 -4
- package/dist/ontology/types.d.ts.map +1 -1
- package/dist/ontology/user-ref.d.ts +35 -0
- package/dist/ontology/user-ref.d.ts.map +1 -0
- package/dist/ontology/validation/definition.d.ts.map +1 -1
- package/dist/ontology/validation/index.d.ts +1 -1
- package/dist/ontology/validation/index.d.ts.map +1 -1
- package/dist/ontology/validation/normalize.d.ts.map +1 -1
- package/dist/ontology/validation/properties.d.ts +6 -1
- package/dist/ontology/validation/properties.d.ts.map +1 -1
- package/dist/ontology/validation/query.d.ts.map +1 -1
- package/dist/ontology/validation/schema.d.ts.map +1 -1
- package/dist/pipelines/index.js +26 -24
- package/dist/pipelines/index.js.map +1 -1
- package/dist/predicates/types.d.ts +53 -3
- package/dist/predicates/types.d.ts.map +1 -1
- package/dist/projections/builders.d.ts +19 -1
- package/dist/projections/builders.d.ts.map +1 -1
- package/dist/projections/internal.js +23 -21
- package/dist/projections/internal.js.map +1 -1
- package/dist/projections/validation.d.ts.map +1 -1
- package/dist/query.js +2 -2
- package/dist/queues/in-memory.d.ts +1 -1
- package/dist/queues/in-memory.d.ts.map +1 -1
- package/dist/runtime/create.d.ts +1 -1
- package/dist/runtime/create.d.ts.map +1 -1
- package/dist/runtime/host.d.ts +5 -5
- package/dist/runtime/host.d.ts.map +1 -1
- package/dist/runtime/index.d.ts +1 -1
- package/dist/runtime/index.d.ts.map +1 -1
- package/dist/runtime/internal.js +27 -25
- package/dist/runtime/internal.js.map +1 -1
- package/dist/runtime/sixb.d.ts +5 -5
- package/dist/runtime/sixb.d.ts.map +1 -1
- package/dist/runtime/types.d.ts +171 -188
- package/dist/runtime/types.d.ts.map +1 -1
- package/dist/sandboxes/index.js +5 -5
- package/dist/sandboxes/sandbox.d.ts +4 -1
- package/dist/sandboxes/sandbox.d.ts.map +1 -1
- package/dist/shared/params/types.d.ts +4 -3
- package/dist/shared/params/types.d.ts.map +1 -1
- package/dist/shared/params/user-refs.d.ts +19 -0
- package/dist/shared/params/user-refs.d.ts.map +1 -0
- package/dist/shares/compiler.d.ts.map +1 -1
- package/dist/shares/internal.js +24 -22
- package/dist/shares/internal.js.map +2 -2
- package/dist/storage/action-runs/failure.js +2 -2
- package/dist/storage/action-runs/types.d.ts +1 -1
- package/dist/storage/action-runs/types.d.ts.map +1 -1
- package/dist/storage/agents/provider.js +1 -1
- package/dist/storage/ai-limits/enforcement.js +2 -2
- package/dist/storage/auth/errors.d.ts +1 -1
- package/dist/storage/auth/errors.d.ts.map +1 -1
- package/dist/storage/auth/in-memory/access-tokens.d.ts.map +1 -1
- package/dist/storage/auth/in-memory/auth-storage.d.ts +2 -1
- package/dist/storage/auth/in-memory/auth-storage.d.ts.map +1 -1
- package/dist/storage/auth/in-memory/device-authorizations.d.ts.map +1 -1
- package/dist/storage/auth/in-memory/sessions.d.ts +8 -1
- package/dist/storage/auth/in-memory/sessions.d.ts.map +1 -1
- package/dist/storage/auth/in-memory/shared.d.ts.map +1 -1
- package/dist/storage/auth/index.d.ts +1 -1
- package/dist/storage/auth/index.d.ts.map +1 -1
- package/dist/storage/auth/types.d.ts +77 -20
- package/dist/storage/auth/types.d.ts.map +1 -1
- package/dist/storage/connector-connections/provider.js +1 -1
- package/dist/storage/executions/provider.js +1 -1
- package/dist/storage/file-upload-sessions/in-memory.d.ts +9 -18
- package/dist/storage/file-upload-sessions/in-memory.d.ts.map +1 -1
- package/dist/storage/file-upload-sessions/index.d.ts +1 -1
- package/dist/storage/file-upload-sessions/index.d.ts.map +1 -1
- package/dist/storage/file-upload-sessions/provider.d.ts +52 -0
- package/dist/storage/file-upload-sessions/provider.d.ts.map +1 -0
- package/dist/storage/file-upload-sessions/provider.js +24 -0
- package/dist/storage/file-upload-sessions/provider.js.map +9 -0
- package/dist/storage/file-upload-sessions/types.d.ts +19 -1
- package/dist/storage/file-upload-sessions/types.d.ts.map +1 -1
- package/dist/storage/file-upload-sessions/utils.d.ts +8 -2
- package/dist/storage/file-upload-sessions/utils.d.ts.map +1 -1
- package/dist/storage/index.d.ts +3 -3
- package/dist/storage/index.d.ts.map +1 -1
- package/dist/storage/index.js +29 -25
- package/dist/storage/index.js.map +1 -1
- package/dist/storage/internal.js +11 -9
- package/dist/storage/internal.js.map +1 -1
- package/dist/storage/objects/in-memory/query.d.ts.map +1 -1
- package/dist/storage/ontology/commits.d.ts +6 -2
- package/dist/storage/ontology/commits.d.ts.map +1 -1
- package/dist/storage/ontology/in-memory/materializations.d.ts.map +1 -1
- package/dist/storage/ontology/provider-work.d.ts.map +1 -1
- package/dist/storage/ontology/provider.d.ts +14 -1
- package/dist/storage/ontology/provider.d.ts.map +1 -1
- package/dist/storage/ontology/provider.js +8 -2
- package/dist/storage/ontology/provider.js.map +1 -1
- package/dist/storage/operation-scope.d.ts.map +1 -1
- package/dist/storage/operation-scope.js +1 -1
- package/dist/storage/projection-runs/provider.js +2 -2
- package/dist/storage/types.d.ts +1 -1
- package/dist/storage/types.d.ts.map +1 -1
- package/dist/storage/workflow-interventions/index.d.ts +1 -1
- package/dist/storage/workflow-interventions/index.d.ts.map +1 -1
- package/dist/storage/workflow-interventions/types.d.ts +5 -8
- package/dist/storage/workflow-interventions/types.d.ts.map +1 -1
- package/dist/storage/workflow-runs/provider.js +8 -8
- package/dist/syncs/index.js +27 -25
- package/dist/syncs/index.js.map +1 -1
- package/dist/testing/action-execution.d.ts +4 -0
- package/dist/testing/action-execution.d.ts.map +1 -1
- package/dist/testing/auth-storage-contract.d.ts.map +1 -1
- package/dist/testing/execution.d.ts +1 -2
- package/dist/testing/execution.d.ts.map +1 -1
- package/dist/testing/file-upload-session-storage-contract.d.ts +12 -0
- package/dist/testing/file-upload-session-storage-contract.d.ts.map +1 -0
- package/dist/testing/index.d.ts +2 -0
- package/dist/testing/index.d.ts.map +1 -1
- package/dist/testing/index.js +2035 -1358
- package/dist/testing/index.js.map +15 -13
- package/dist/testing/materializer-storage-contract.d.ts.map +1 -1
- package/dist/testing/object-query-contract.d.ts.map +1 -1
- package/dist/testing/ontology-contract-fixture.d.ts +8 -0
- package/dist/testing/ontology-contract-fixture.d.ts.map +1 -1
- package/dist/testing/ontology-storage-contract.d.ts.map +1 -1
- package/dist/testing/sandboxes-contract.d.ts.map +1 -1
- package/dist/testing/workflow-intervention-storage-contract.d.ts +8 -0
- package/dist/testing/workflow-intervention-storage-contract.d.ts.map +1 -0
- package/dist/webhooks/internal.js +24 -22
- package/dist/webhooks/internal.js.map +2 -2
- package/dist/webhooks/types.d.ts +2 -2
- package/dist/webhooks/types.d.ts.map +1 -1
- package/dist/workers/index.js +1 -1
- package/dist/workflows/index.js +42 -40
- package/dist/workflows/index.js.map +1 -1
- package/dist/workflows/run-dispatch.d.ts.map +1 -1
- package/dist/workflows/types.d.ts +2 -2
- package/dist/workflows/types.d.ts.map +1 -1
- package/package.json +7 -1
- package/src/actions/index.ts +0 -3
- package/src/actions/read-facade.ts +102 -62
- package/src/actions/request.ts +13 -0
- package/src/actions/run-dispatch.ts +3 -0
- package/src/actions/types/context.ts +17 -65
- package/src/actions/types/params.ts +2 -1
- package/src/agents/authority.ts +1 -1
- package/src/assert-never.ts +7 -0
- package/src/auth/client-address.ts +12 -0
- package/src/auth/csrf.ts +14 -5
- package/src/auth/errors.ts +23 -0
- package/src/auth/index.ts +4 -3
- package/src/auth/runtime.ts +353 -297
- package/src/auth/session-cache.ts +18 -6
- package/src/auth/sessions.ts +30 -0
- package/src/auth/strategy.ts +2 -0
- package/src/auth/types.ts +15 -17
- package/src/bootstrap/index.ts +1 -0
- package/src/bootstrap/ontology-type-manifest.ts +112 -60
- package/src/edits/types.ts +47 -63
- package/src/errors/catalog.ts +4 -0
- package/src/events/envelope.ts +0 -13
- package/src/events/index.ts +1 -1
- package/src/events/service.ts +1 -11
- package/src/events/toStoredEvent.ts +1 -3
- package/src/events/types/index.ts +1 -1
- package/src/execution/agent.ts +1 -2
- package/src/execution/authorized-object-reader.ts +5 -7
- package/src/execution/primitive.ts +1 -2
- package/src/execution/request.ts +1 -2
- package/src/index.ts +8 -7
- package/src/maintenance/ontology-maintenance.ts +77 -1
- package/src/materialization/errors.ts +2 -0
- package/src/materialization/events.ts +27 -2
- package/src/materializer/README.md +2 -0
- package/src/materializer/edits/commit.ts +21 -12
- package/src/materializer/edits/operations.ts +32 -4
- package/src/materializer/edits/plan.ts +4 -5
- package/src/materializer/edits/user-refs.ts +115 -0
- package/src/materializer/effective/build-events.ts +4 -5
- package/src/materializer/execution/scope.ts +40 -7
- package/src/materializer/projections/replace.ts +2 -0
- package/src/materializer/projections/replacement-plan.ts +4 -0
- package/src/materializer/telemetry/append.ts +4 -12
- package/src/materializer/telemetry/plan.ts +4 -5
- package/src/objects/execution.ts +33 -62
- package/src/objects/query/executor.ts +12 -3
- package/src/objects/query/ir.ts +7 -0
- package/src/objects/query/planner.ts +1 -0
- package/src/objects/query/scalar-values.ts +19 -0
- package/src/objects/query/validate.ts +55 -44
- package/src/objects/sdk/object-handle.ts +8 -8
- package/src/objects/sdk/object-set.ts +8 -15
- package/src/objects/sdk/query-builder.ts +59 -71
- package/src/objects/sdk/telemetry-channel.ts +6 -7
- package/src/objects/sdk/where.ts +6 -13
- package/src/ontology/builders.ts +15 -11
- package/src/ontology/index.ts +4 -0
- package/src/ontology/inference/index.ts +56 -36
- package/src/ontology/internal.ts +1 -0
- package/src/ontology/json-schema.ts +12 -0
- package/src/ontology/primitives.ts +91 -0
- package/src/ontology/query-capabilities.ts +136 -0
- package/src/ontology/refs.ts +33 -6
- package/src/ontology/registered.ts +22 -0
- package/src/ontology/registry.ts +6 -3
- package/src/ontology/tokens.ts +41 -2
- package/src/ontology/types.ts +19 -3
- package/src/ontology/user-ref.ts +120 -0
- package/src/ontology/validation/definition.ts +2 -13
- package/src/ontology/validation/index.ts +1 -0
- package/src/ontology/validation/normalize.ts +39 -3
- package/src/ontology/validation/properties.ts +95 -19
- package/src/ontology/validation/query.ts +11 -42
- package/src/ontology/validation/schema.ts +16 -0
- package/src/predicates/types.ts +43 -33
- package/src/projections/builders.ts +24 -3
- package/src/projections/validation.ts +15 -1
- package/src/runtime/create.ts +2 -2
- package/src/runtime/host.ts +10 -12
- package/src/runtime/index.ts +3 -2
- package/src/runtime/sixb.ts +13 -23
- package/src/runtime/types.ts +277 -479
- package/src/sandboxes/sandbox.ts +4 -1
- package/src/shared/params/types.ts +4 -3
- package/src/shared/params/user-refs.ts +48 -0
- package/src/shares/compiler.ts +6 -16
- package/src/storage/action-runs/types.ts +1 -0
- package/src/storage/auth/errors.ts +0 -1
- package/src/storage/auth/in-memory/access-tokens.ts +5 -2
- package/src/storage/auth/in-memory/auth-storage.ts +49 -73
- package/src/storage/auth/in-memory/device-authorizations.ts +0 -2
- package/src/storage/auth/in-memory/sessions.ts +69 -1
- package/src/storage/auth/in-memory/shared.ts +13 -7
- package/src/storage/auth/index.ts +2 -1
- package/src/storage/auth/types.ts +72 -20
- package/src/storage/executions/validation.ts +1 -1
- package/src/storage/file-upload-sessions/in-memory.ts +64 -113
- package/src/storage/file-upload-sessions/index.ts +1 -0
- package/src/storage/file-upload-sessions/provider.ts +258 -0
- package/src/storage/file-upload-sessions/types.ts +20 -1
- package/src/storage/file-upload-sessions/utils.ts +25 -9
- package/src/storage/index.ts +3 -2
- package/src/storage/objects/in-memory/query.ts +13 -3
- package/src/storage/ontology/commits.ts +6 -2
- package/src/storage/ontology/in-memory/materializations.ts +6 -34
- package/src/storage/ontology/provider-header-validation.ts +57 -0
- package/src/storage/ontology/provider-work.ts +15 -3
- package/src/storage/ontology/provider.ts +59 -1
- package/src/storage/operation-scope.ts +1 -0
- package/src/storage/types.ts +0 -1
- package/src/storage/workflow-interventions/index.ts +0 -1
- package/src/storage/workflow-interventions/types.ts +5 -9
- package/src/testing/action-execution.ts +13 -3
- package/src/testing/auth-storage-contract.ts +253 -192
- package/src/testing/execution-storage-contract.ts +1 -2
- package/src/testing/execution.ts +4 -7
- package/src/testing/file-upload-session-storage-contract.ts +335 -0
- package/src/testing/index.ts +8 -0
- package/src/testing/materializer-storage-contract.ts +86 -4
- package/src/testing/object-query-contract.ts +121 -2
- package/src/testing/ontology-contract-fixture.ts +23 -3
- package/src/testing/ontology-storage-contract.ts +58 -0
- package/src/testing/sandboxes-contract.ts +27 -0
- package/src/testing/workflow-intervention-storage-contract.ts +203 -0
- package/src/webhooks/types.ts +2 -2
- package/src/workflows/run-dispatch.ts +12 -1
- package/src/workflows/snapshot.ts +16 -7
- package/src/workflows/types.ts +2 -2
- package/dist/chunk-2cxv584m.js.map +0 -43
- package/dist/chunk-3ghw2t5q.js.map +0 -10
- package/dist/chunk-3h7ctayx.js.map +0 -11
- package/dist/chunk-6ma8dvzc.js.map +0 -15
- package/dist/chunk-bbaa1fet.js.map +0 -25
- package/dist/chunk-eyjzgav0.js.map +0 -12
- package/dist/chunk-f06sf7rr.js.map +0 -11
- package/dist/chunk-g50nxqs5.js.map +0 -18
- package/dist/chunk-hkw8rykk.js.map +0 -15
- package/dist/chunk-p6r1ex7t.js.map +0 -10
- package/dist/chunk-qm535afa.js.map +0 -15
- package/dist/chunk-vpxss818.js.map +0 -10
- package/dist/chunk-vsg0g7h9.js.map +0 -17
- /package/dist/{chunk-y3ev53cq.js.map → chunk-2fv8sajb.js.map} +0 -0
- /package/dist/{chunk-5tetw4hn.js.map → chunk-4tnrzqqh.js.map} +0 -0
- /package/dist/{chunk-y1ahv8b7.js.map → chunk-bdhfn0ww.js.map} +0 -0
- /package/dist/{chunk-kept9cdd.js.map → chunk-bxx3ms5t.js.map} +0 -0
- /package/dist/{chunk-xtfryrfb.js.map → chunk-cbn96bve.js.map} +0 -0
- /package/dist/{chunk-t7dzd1tm.js.map → chunk-e2c5yxfe.js.map} +0 -0
- /package/dist/{chunk-bg2bs62d.js.map → chunk-jfdggg1p.js.map} +0 -0
- /package/dist/{chunk-e1f1sqba.js.map → chunk-kxea54yg.js.map} +0 -0
- /package/dist/{chunk-0mza4xb2.js.map → chunk-m8zkvep1.js.map} +0 -0
- /package/dist/{chunk-jjwhy3rs.js.map → chunk-q2xghyft.js.map} +0 -0
- /package/dist/{chunk-y0v18c2j.js.map → chunk-vef6qa14.js.map} +0 -0
- /package/dist/{chunk-gzt6v1ja.js.map → chunk-vn3yh259.js.map} +0 -0
- /package/dist/{chunk-sfypc7mk.js.map → chunk-wn7mznxc.js.map} +0 -0
- /package/dist/{chunk-r5zythxp.js.map → chunk-wnxabtn4.js.map} +0 -0
- /package/dist/{chunk-4ph94nhd.js.map → chunk-ww185kt6.js.map} +0 -0
- /package/dist/{chunk-gswwr35f.js.map → chunk-y487ywrv.js.map} +0 -0
- /package/dist/{chunk-bet1rb9h.js.map → chunk-y6vnvayj.js.map} +0 -0
- /package/dist/{chunk-3bnt2wna.js.map → chunk-yvf2jqj8.js.map} +0 -0
- /package/dist/{chunk-g2gezsg5.js.map → chunk-z9h698s8.js.map} +0 -0
- /package/dist/{chunk-bfjv1adk.js.map → chunk-znw0zvy4.js.map} +0 -0
|
@@ -2,10 +2,10 @@
|
|
|
2
2
|
import {
|
|
3
3
|
normalizeSchemaValue2,
|
|
4
4
|
coerceSchemaValueToTyped2
|
|
5
|
-
} from "./chunk-
|
|
5
|
+
} from "./chunk-d8yes9yx.js";
|
|
6
6
|
import {
|
|
7
7
|
validateSchemaOrRefValue2
|
|
8
|
-
} from "./chunk-
|
|
8
|
+
} from "./chunk-drz59ve0.js";
|
|
9
9
|
import {
|
|
10
10
|
OntologyValidationError2
|
|
11
11
|
} from "./chunk-cqr3acm1.js";
|
|
@@ -9,6 +9,17 @@ class AuthRuntimeError2 extends Error {
|
|
|
9
9
|
}
|
|
10
10
|
}
|
|
11
11
|
|
|
12
|
+
class SignInRefusedError2 extends Error {
|
|
13
|
+
reason;
|
|
14
|
+
email;
|
|
15
|
+
name = "SignInRefusedError";
|
|
16
|
+
constructor(reason, message, email) {
|
|
17
|
+
super(message);
|
|
18
|
+
this.reason = reason;
|
|
19
|
+
this.email = email;
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
|
|
12
23
|
// src/auth/audience.ts
|
|
13
24
|
var DEFAULT_AUTH_SESSION_AUDIENCE2 = "atlas";
|
|
14
25
|
function isValidAuthSessionAudience2(value) {
|
|
@@ -226,20 +237,6 @@ function resolveInvitationExpiresAt(value, now) {
|
|
|
226
237
|
}
|
|
227
238
|
return expiresAt;
|
|
228
239
|
}
|
|
229
|
-
function sanitizeReturnTo(value) {
|
|
230
|
-
if (!value || !value.startsWith("/") || value.startsWith("//")) {
|
|
231
|
-
return "/";
|
|
232
|
-
}
|
|
233
|
-
try {
|
|
234
|
-
const parsed = new URL(value, "http://sixb.local");
|
|
235
|
-
if (parsed.origin !== "http://sixb.local") {
|
|
236
|
-
return "/";
|
|
237
|
-
}
|
|
238
|
-
return `${parsed.pathname}${parsed.search}${parsed.hash}`;
|
|
239
|
-
} catch {
|
|
240
|
-
return "/";
|
|
241
|
-
}
|
|
242
|
-
}
|
|
243
240
|
function assertNonEmpty3(value, label) {
|
|
244
241
|
const normalized = value.trim();
|
|
245
242
|
if (!normalized) {
|
|
@@ -319,6 +316,6 @@ function assertValidStrategy(strategy) {
|
|
|
319
316
|
}
|
|
320
317
|
}
|
|
321
318
|
|
|
322
|
-
export { AuthRuntimeError2, DEFAULT_AUTH_SESSION_AUDIENCE2, isValidAuthSessionAudience2, resolveAuthSessionAudience2, DEFAULT_SESSION_COOKIE_NAME2, DEFAULT_CSRF_COOKIE_NAME2, resolveAuthCookieOptions2, resolveAuthCookieOptionsForAudience, parseCookieHeader2, getCookie2, serializeCookie2, shouldUseSecureCookies2, createSessionCookieHeader2, createCsrfCookieHeader2, clearSessionCookieHeader2, clearCsrfCookieHeader2, DEFAULT_AUTH_SESSION_IDLE_TIMEOUT_MS2, DEFAULT_AUTH_SESSION_RENEWAL_WINDOW_MS2, DEFAULT_AUTH_INVITATION_TTL_MS2, MAX_AUTH_INVITATION_TTL_MS2, DEFAULT_AUTH_SESSION_CACHE_TTL_MS2, resolveAuthConfig2, resolveInvitationExpiresAt,
|
|
319
|
+
export { AuthRuntimeError2, SignInRefusedError2, DEFAULT_AUTH_SESSION_AUDIENCE2, isValidAuthSessionAudience2, resolveAuthSessionAudience2, DEFAULT_SESSION_COOKIE_NAME2, DEFAULT_CSRF_COOKIE_NAME2, resolveAuthCookieOptions2, resolveAuthCookieOptionsForAudience, parseCookieHeader2, getCookie2, serializeCookie2, shouldUseSecureCookies2, createSessionCookieHeader2, createCsrfCookieHeader2, clearSessionCookieHeader2, clearCsrfCookieHeader2, DEFAULT_AUTH_SESSION_IDLE_TIMEOUT_MS2, DEFAULT_AUTH_SESSION_RENEWAL_WINDOW_MS2, DEFAULT_AUTH_INVITATION_TTL_MS2, MAX_AUTH_INVITATION_TTL_MS2, DEFAULT_AUTH_SESSION_CACHE_TTL_MS2, resolveAuthConfig2, resolveInvitationExpiresAt, assertNonEmpty3, normalizePagination, isMagicLinkAuthStrategy2, isInvitationDeliveryAuthStrategy2, isOidcAuthStrategy2 };
|
|
323
320
|
|
|
324
|
-
//# debugId=
|
|
321
|
+
//# debugId=E4EC0B2B5EB9DD3264756E2164756E21
|
|
@@ -2,12 +2,12 @@
|
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../src/auth/errors.ts", "../src/auth/audience.ts", "../src/auth/cookies.ts", "../src/auth/validation.ts"],
|
|
4
4
|
"sourcesContent": [
|
|
5
|
-
"export type AuthRuntimeErrorCode =\n | \"authentication_required\"\n | \"auth_storage_missing\"\n | \"authorization_denied\"\n | \"invalid_auth_input\"\n | \"invalid_auth_config\"\n | \"rate_limited\"\n | \"production_auth_required\"\n\nexport class AuthRuntimeError extends Error {\n readonly name = \"AuthRuntimeError\"\n\n constructor(\n readonly code: AuthRuntimeErrorCode,\n message: string\n ) {\n super(message)\n }\n}\n",
|
|
5
|
+
"export type AuthRuntimeErrorCode =\n | \"authentication_required\"\n | \"auth_storage_missing\"\n | \"authorization_denied\"\n | \"invalid_auth_input\"\n | \"invalid_auth_config\"\n | \"rate_limited\"\n | \"production_auth_required\"\n\nexport class AuthRuntimeError extends Error {\n readonly name = \"AuthRuntimeError\"\n\n constructor(\n readonly code: AuthRuntimeErrorCode,\n message: string\n ) {\n super(message)\n }\n}\n\n/** Why a strategy refused someone who authenticated. Each is something a person can act on. */\nexport type SignInRefusalReason =\n | \"not_invited\"\n | \"suspended\"\n | \"domain_not_allowed\"\n | \"no_trusted_address\"\n\n/**\n * Thrown by a strategy that refuses a sign-in for a known reason. The sign-in page tells the\n * person which reason, naming `email` when there is one; `message` is for the server log.\n */\nexport class SignInRefusedError extends Error {\n readonly name = \"SignInRefusedError\"\n\n constructor(\n readonly reason: SignInRefusalReason,\n message: string,\n readonly email?: string\n ) {\n super(message)\n }\n}\n",
|
|
6
6
|
"import { AuthRuntimeError } from \"./errors\"\n\nexport const DEFAULT_AUTH_SESSION_AUDIENCE = \"atlas\"\n\nexport type AuthSessionAudience = typeof DEFAULT_AUTH_SESSION_AUDIENCE | \"app\"\n\nexport interface AuthSessionAudienceOptions {\n readonly audience?: AuthSessionAudience\n}\n\nexport function isValidAuthSessionAudience(value: string): value is AuthSessionAudience {\n return value === \"atlas\" || value === \"app\"\n}\n\nexport function resolveAuthSessionAudience(\n value: AuthSessionAudience | undefined\n): AuthSessionAudience {\n const audience = value ?? DEFAULT_AUTH_SESSION_AUDIENCE\n\n if (!isValidAuthSessionAudience(audience)) {\n throw new AuthRuntimeError(\n \"invalid_auth_config\",\n `[Sixb] Auth session audience '${audience}' is invalid. Expected 'atlas' or 'app'.`\n )\n }\n\n return audience\n}\n",
|
|
7
7
|
"import type { AuthSessionAudience } from \"./audience\"\nimport { DEFAULT_AUTH_SESSION_AUDIENCE, resolveAuthSessionAudience } from \"./audience\"\nimport type { AuthCookieOptions } from \"./types\"\n\nexport const DEFAULT_SESSION_COOKIE_NAME = \"sixb_session\"\nexport const DEFAULT_CSRF_COOKIE_NAME = \"sixb_csrf\"\n\nexport interface ResolvedAuthCookieOptions {\n readonly sessionCookieName: string\n readonly csrfCookieName: string\n readonly domain?: string\n readonly secure: boolean | \"auto\"\n readonly sameSite: \"strict\"\n readonly csrfHttpOnly: boolean\n}\n\ninterface CookieSerializationOptions {\n readonly name: string\n readonly value: string\n readonly httpOnly?: boolean\n readonly maxAge?: number\n readonly expires?: Date\n readonly domain?: string\n readonly secure?: boolean\n readonly sameSite: \"strict\"\n}\n\nexport function resolveAuthCookieOptions(\n options: AuthCookieOptions | undefined\n): ResolvedAuthCookieOptions {\n const resolved = {\n sessionCookieName: options?.sessionCookieName ?? DEFAULT_SESSION_COOKIE_NAME,\n csrfCookieName: options?.csrfCookieName ?? DEFAULT_CSRF_COOKIE_NAME,\n domain: options?.cookieDomain,\n secure: options?.secure ?? \"auto\",\n sameSite: options?.sameSite ?? \"strict\",\n csrfHttpOnly: options?.csrfHttpOnly ?? false,\n }\n\n assertValidCookieOptions(resolved)\n return resolved\n}\n\nexport function resolveAuthCookieOptionsForAudience(\n options: ResolvedAuthCookieOptions,\n audience: AuthSessionAudience | undefined\n): ResolvedAuthCookieOptions {\n const resolvedAudience = resolveAuthSessionAudience(audience)\n if (resolvedAudience === DEFAULT_AUTH_SESSION_AUDIENCE) {\n return options\n }\n\n return {\n ...options,\n sessionCookieName: `${options.sessionCookieName}_${resolvedAudience}`,\n csrfCookieName: `${options.csrfCookieName}_${resolvedAudience}`,\n }\n}\n\nexport function parseCookieHeader(header: string | null): ReadonlyMap<string, string> {\n const cookies = new Map<string, string>()\n if (!header) {\n return cookies\n }\n\n for (const part of header.split(\";\")) {\n const separator = part.indexOf(\"=\")\n if (separator <= 0) {\n continue\n }\n\n const name = part.slice(0, separator).trim()\n if (!name || cookies.has(name)) {\n continue\n }\n\n const value = part.slice(separator + 1).trim()\n cookies.set(name, value)\n }\n\n return cookies\n}\n\nexport function getCookie(request: Request, name: string): string | undefined {\n return parseCookieHeader(request.headers.get(\"cookie\")).get(name)\n}\n\nexport function serializeCookie(options: CookieSerializationOptions): string {\n const parts = [`${options.name}=${options.value}`]\n\n parts.push(\"Path=/\")\n parts.push(\"SameSite=Strict\")\n\n if (options.domain) {\n parts.push(`Domain=${options.domain}`)\n }\n\n if (options.httpOnly) {\n parts.push(\"HttpOnly\")\n }\n\n if (options.secure) {\n parts.push(\"Secure\")\n }\n\n if (options.maxAge !== undefined) {\n parts.push(`Max-Age=${Math.trunc(options.maxAge)}`)\n }\n\n if (options.expires) {\n parts.push(`Expires=${options.expires.toUTCString()}`)\n }\n\n return parts.join(\"; \")\n}\n\nexport function shouldUseSecureCookies(\n request: Request,\n options: ResolvedAuthCookieOptions\n): boolean {\n if (\n requiresSecureCookieName(options.sessionCookieName) ||\n requiresSecureCookieName(options.csrfCookieName)\n ) {\n return true\n }\n\n if (typeof options.secure === \"boolean\") {\n return options.secure\n }\n\n const url = new URL(request.url)\n if (isLocalhost(url.hostname)) {\n return false\n }\n\n return url.protocol === \"https:\" || process.env.NODE_ENV === \"production\"\n}\n\nexport function createSessionCookieHeader(params: {\n readonly request: Request\n readonly value: string\n readonly expiresAt: Date\n readonly options: ResolvedAuthCookieOptions\n}): string {\n const lifetime = resolveCookieLifetime(params.expiresAt)\n return serializeCookie({\n name: params.options.sessionCookieName,\n value: params.value,\n httpOnly: true,\n ...lifetime,\n domain: params.options.domain,\n secure: shouldUseSecureCookies(params.request, params.options),\n sameSite: params.options.sameSite,\n })\n}\n\nexport function createCsrfCookieHeader(params: {\n readonly request: Request\n readonly value: string\n readonly expiresAt: Date\n readonly options: ResolvedAuthCookieOptions\n}): string {\n const lifetime = resolveCookieLifetime(params.expiresAt)\n return serializeCookie({\n name: params.options.csrfCookieName,\n value: params.value,\n httpOnly: params.options.csrfHttpOnly,\n ...lifetime,\n domain: params.options.domain,\n secure: shouldUseSecureCookies(params.request, params.options),\n sameSite: params.options.sameSite,\n })\n}\n\nfunction resolveCookieLifetime(expiresAt: Date): {\n readonly maxAge: number\n readonly expires: Date\n} {\n const expiresAtMs = expiresAt.getTime()\n if (!Number.isFinite(expiresAtMs)) {\n throw new Error(\"[Sixb] Auth cookie expiresAt must be a valid date.\")\n }\n\n return {\n maxAge: Math.max(0, Math.floor((expiresAtMs - Date.now()) / 1000)),\n expires: new Date(expiresAtMs),\n }\n}\n\nexport function clearSessionCookieHeader(params: {\n readonly request: Request\n readonly options: ResolvedAuthCookieOptions\n}): string {\n return serializeCookie({\n name: params.options.sessionCookieName,\n value: \"\",\n httpOnly: true,\n maxAge: 0,\n expires: new Date(0),\n domain: params.options.domain,\n secure: shouldUseSecureCookies(params.request, params.options),\n sameSite: params.options.sameSite,\n })\n}\n\nexport function clearCsrfCookieHeader(params: {\n readonly request: Request\n readonly options: ResolvedAuthCookieOptions\n}): string {\n return serializeCookie({\n name: params.options.csrfCookieName,\n value: \"\",\n maxAge: 0,\n expires: new Date(0),\n domain: params.options.domain,\n secure: shouldUseSecureCookies(params.request, params.options),\n sameSite: params.options.sameSite,\n })\n}\n\nfunction isLocalhost(hostname: string): boolean {\n return hostname === \"localhost\" || hostname === \"127.0.0.1\" || hostname === \"::1\"\n}\n\nfunction assertValidCookieOptions(options: ResolvedAuthCookieOptions): void {\n assertValidCookieName(options.sessionCookieName, \"sessionCookieName\")\n assertValidCookieName(options.csrfCookieName, \"csrfCookieName\")\n\n if (options.sameSite !== \"strict\") {\n throw new Error(\"[Sixb] Auth cookie sameSite must be 'strict'.\")\n }\n\n if (\n options.domain &&\n (isHostPrefixedCookieName(options.sessionCookieName) ||\n isHostPrefixedCookieName(options.csrfCookieName))\n ) {\n throw new Error(\"[Sixb] __Host- auth cookies cannot be configured with cookieDomain.\")\n }\n\n if (\n options.secure === false &&\n (requiresSecureCookieName(options.sessionCookieName) ||\n requiresSecureCookieName(options.csrfCookieName))\n ) {\n throw new Error(\"[Sixb] __Host- auth cookies require secure cookies.\")\n }\n}\n\nfunction assertValidCookieName(name: string, label: string): void {\n if (!/^[!#$%&'*+\\-.^_`|~0-9A-Za-z]+$/.test(name)) {\n throw new Error(`[Sixb] Auth cookie ${label} '${name}' is not a valid cookie name.`)\n }\n}\n\nfunction isHostPrefixedCookieName(name: string): boolean {\n return name.startsWith(\"__Host-\")\n}\n\nfunction requiresSecureCookieName(name: string): boolean {\n return isHostPrefixedCookieName(name) || name.startsWith(\"__Secure-\")\n}\n",
|
|
8
8
|
"import { resolveAuthCookieOptions } from \"./cookies\"\nimport { AuthRuntimeError } from \"./errors\"\nimport type {\n AuthSessionOptions,\n AuthStrategy,\n InvitationDeliveryAuthStrategy,\n MagicLinkAuthStrategy,\n OidcAuthStrategy,\n ResolvedAuthConfig,\n SixbAuthConfig,\n} from \"./types\"\n\nconst DAY = 24 * 60 * 60 * 1000\n\nexport const DEFAULT_AUTH_SESSION_IDLE_TIMEOUT_MS = 30 * DAY\nexport const DEFAULT_AUTH_SESSION_RENEWAL_WINDOW_MS = 7 * DAY\nexport const DEFAULT_AUTH_INVITATION_TTL_MS = 7 * DAY\nexport const MAX_AUTH_INVITATION_TTL_MS = 30 * DAY\n/**\n * Default in-process session cache window. Short enough that a revoked session lingers\n * only briefly, long enough to collapse a burst of requests to a single auth resolution.\n */\nexport const DEFAULT_AUTH_SESSION_CACHE_TTL_MS = 5_000\n\nexport { resolveAuthSessionAudience } from \"./audience\"\n\nexport function resolveAuthConfig(config: SixbAuthConfig | undefined): ResolvedAuthConfig {\n if (!config) {\n return {\n strategy: null,\n session: resolveAuthSessionOptions(undefined),\n cookies: resolveAuthCookieOptions(undefined),\n }\n }\n\n const strategy = \"strategy\" in config ? config.strategy : config\n assertValidStrategy(strategy)\n\n return {\n strategy,\n session: resolveAuthSessionOptions(\"strategy\" in config ? config.session : undefined),\n cookies: resolveAuthCookieOptions(\"strategy\" in config ? config.cookies : undefined),\n }\n}\n\nexport function resolveInvitationExpiresAt(value: Date | undefined, now: Date): Date {\n const expiresAt = value\n ? new Date(value)\n : new Date(now.getTime() + DEFAULT_AUTH_INVITATION_TTL_MS)\n const expiresAtTime = expiresAt.getTime()\n\n if (!Number.isFinite(expiresAtTime)) {\n throw new AuthRuntimeError(\n \"invalid_auth_input\",\n \"[Sixb] Invitation expiresAt must be a valid date.\"\n )\n }\n\n if (expiresAtTime <= now.getTime()) {\n throw new AuthRuntimeError(\n \"invalid_auth_input\",\n \"[Sixb] Invitation expiresAt must be in the future.\"\n )\n }\n\n if (expiresAtTime > now.getTime() + MAX_AUTH_INVITATION_TTL_MS) {\n throw new AuthRuntimeError(\n \"invalid_auth_input\",\n \"[Sixb] Invitation expiresAt must be no more than 30 days in the future.\"\n )\n }\n\n return expiresAt\n}\n\nexport function sanitizeReturnTo(value: string | undefined): string {\n if (!value || !value.startsWith(\"/\") || value.startsWith(\"//\")) {\n return \"/\"\n }\n\n try {\n const parsed = new URL(value, \"http://sixb.local\")\n if (parsed.origin !== \"http://sixb.local\") {\n return \"/\"\n }\n\n return `${parsed.pathname}${parsed.search}${parsed.hash}`\n } catch {\n return \"/\"\n }\n}\n\nexport function assertNonEmpty(value: string, label: string): string {\n const normalized = value.trim()\n if (!normalized) {\n throw new AuthRuntimeError(\"invalid_auth_input\", `[Sixb] ${label} must be a non-empty string.`)\n }\n return normalized\n}\n\nexport function normalizePagination(input: { readonly limit?: number; readonly offset?: number }): {\n readonly limit?: number\n readonly offset: number\n} {\n if (input.limit !== undefined && (!Number.isInteger(input.limit) || input.limit < 0)) {\n throw new AuthRuntimeError(\n \"invalid_auth_input\",\n \"[Sixb] Invitation list limit must be a non-negative integer.\"\n )\n }\n\n if (input.offset !== undefined && (!Number.isInteger(input.offset) || input.offset < 0)) {\n throw new AuthRuntimeError(\n \"invalid_auth_input\",\n \"[Sixb] Invitation list offset must be a non-negative integer.\"\n )\n }\n\n return {\n limit: input.limit,\n offset: input.offset ?? 0,\n }\n}\n\nfunction resolveAuthSessionOptions(\n options: AuthSessionOptions | undefined\n): ResolvedAuthConfig[\"session\"] {\n const idleTimeoutMs = options?.idleTimeoutMs ?? DEFAULT_AUTH_SESSION_IDLE_TIMEOUT_MS\n if (!Number.isFinite(idleTimeoutMs) || idleTimeoutMs <= 0) {\n throw new AuthRuntimeError(\n \"invalid_auth_config\",\n \"[Sixb] Auth session idleTimeoutMs must be a positive finite number.\"\n )\n }\n\n const renewalWindowMs = options?.renewalWindowMs ?? DEFAULT_AUTH_SESSION_RENEWAL_WINDOW_MS\n if (!Number.isFinite(renewalWindowMs) || renewalWindowMs <= 0) {\n throw new AuthRuntimeError(\n \"invalid_auth_config\",\n \"[Sixb] Auth session renewalWindowMs must be a positive finite number.\"\n )\n }\n if (renewalWindowMs >= idleTimeoutMs) {\n throw new AuthRuntimeError(\n \"invalid_auth_config\",\n \"[Sixb] Auth session renewalWindowMs must be less than idleTimeoutMs.\"\n )\n }\n\n const absoluteTimeoutMs = options?.absoluteTimeoutMs\n if (\n absoluteTimeoutMs !== undefined &&\n (!Number.isFinite(absoluteTimeoutMs) || absoluteTimeoutMs <= 0)\n ) {\n throw new AuthRuntimeError(\n \"invalid_auth_config\",\n \"[Sixb] Auth session absoluteTimeoutMs must be a positive finite number when configured.\"\n )\n }\n if (absoluteTimeoutMs !== undefined && absoluteTimeoutMs < idleTimeoutMs) {\n throw new AuthRuntimeError(\n \"invalid_auth_config\",\n \"[Sixb] Auth session absoluteTimeoutMs must be greater than or equal to idleTimeoutMs.\"\n )\n }\n\n const cacheTtlMs = options?.cacheTtlMs ?? DEFAULT_AUTH_SESSION_CACHE_TTL_MS\n if (!Number.isFinite(cacheTtlMs) || cacheTtlMs < 0) {\n throw new AuthRuntimeError(\n \"invalid_auth_config\",\n \"[Sixb] Auth session cacheTtlMs must be a non-negative finite number.\"\n )\n }\n if (cacheTtlMs >= renewalWindowMs) {\n throw new AuthRuntimeError(\n \"invalid_auth_config\",\n \"[Sixb] Auth session cacheTtlMs must be less than renewalWindowMs.\"\n )\n }\n\n return {\n idleTimeoutMs,\n renewalWindowMs,\n ...(absoluteTimeoutMs === undefined ? {} : { absoluteTimeoutMs }),\n cacheTtlMs,\n }\n}\n\nexport function isMagicLinkAuthStrategy(\n strategy: AuthStrategy | null\n): strategy is MagicLinkAuthStrategy {\n if (!strategy || strategy.kind !== \"magicLink\") {\n return false\n }\n\n const candidate = strategy as {\n readonly requestMagicLink?: unknown\n readonly completeMagicLinkSignIn?: unknown\n }\n\n return (\n typeof candidate.requestMagicLink === \"function\" &&\n typeof candidate.completeMagicLinkSignIn === \"function\"\n )\n}\n\nexport function isInvitationDeliveryAuthStrategy(\n strategy: AuthStrategy | null\n): strategy is InvitationDeliveryAuthStrategy {\n if (!strategy) {\n return false\n }\n\n const candidate = strategy as {\n readonly deliverInvitation?: unknown\n }\n\n return typeof candidate.deliverInvitation === \"function\"\n}\n\nexport function isOidcAuthStrategy(strategy: AuthStrategy | null): strategy is OidcAuthStrategy {\n if (!strategy || strategy.kind !== \"oidc\") {\n return false\n }\n\n const candidate = strategy as {\n readonly startOidcSignIn?: unknown\n readonly completeOidcSignIn?: unknown\n }\n\n return (\n typeof candidate.startOidcSignIn === \"function\" &&\n typeof candidate.completeOidcSignIn === \"function\"\n )\n}\n\nfunction assertValidStrategy(strategy: AuthStrategy): void {\n if (!strategy.id.trim()) {\n throw new AuthRuntimeError(\"invalid_auth_config\", \"[Sixb] Auth strategy id is required.\")\n }\n}\n"
|
|
9
9
|
],
|
|
10
|
-
"mappings": ";;AASO,MAAM,0BAAyB,MAAM;AAAA,EAI/B;AAAA,EAHF,OAAO;AAAA,EAEhB,WAAW,CACA,MACT,SACA;AAAA,IACA,MAAM,OAAO;AAAA,IAHJ;AAAA;AAKb;;;
|
|
11
|
-
"debugId": "
|
|
10
|
+
"mappings": ";;AASO,MAAM,0BAAyB,MAAM;AAAA,EAI/B;AAAA,EAHF,OAAO;AAAA,EAEhB,WAAW,CACA,MACT,SACA;AAAA,IACA,MAAM,OAAO;AAAA,IAHJ;AAAA;AAKb;AAAA;AAaO,MAAM,4BAA2B,MAAM;AAAA,EAIjC;AAAA,EAEA;AAAA,EALF,OAAO;AAAA,EAEhB,WAAW,CACA,QACT,SACS,OACT;AAAA,IACA,MAAM,OAAO;AAAA,IAJJ;AAAA,IAEA;AAAA;AAIb;;;ACvCO,IAAM,iCAAgC;AAQtC,SAAS,2BAA0B,CAAC,OAA6C;AAAA,EACtF,OAAO,UAAU,WAAW,UAAU;AAAA;AAGjC,SAAS,2BAA0B,CACxC,OACqB;AAAA,EACrB,MAAM,WAAW,SAAS;AAAA,EAE1B,IAAI,CAAC,4BAA2B,QAAQ,GAAG;AAAA,IACzC,MAAM,IAAI,kBACR,uBACA,iCAAiC,kDACnC;AAAA,EACF;AAAA,EAEA,OAAO;AAAA;;;ACtBF,IAAM,+BAA8B;AACpC,IAAM,4BAA2B;AAsBjC,SAAS,yBAAwB,CACtC,SAC2B;AAAA,EAC3B,MAAM,WAAW;AAAA,IACf,mBAAmB,SAAS,qBAAqB;AAAA,IACjD,gBAAgB,SAAS,kBAAkB;AAAA,IAC3C,QAAQ,SAAS;AAAA,IACjB,QAAQ,SAAS,UAAU;AAAA,IAC3B,UAAU,SAAS,YAAY;AAAA,IAC/B,cAAc,SAAS,gBAAgB;AAAA,EACzC;AAAA,EAEA,yBAAyB,QAAQ;AAAA,EACjC,OAAO;AAAA;AAGF,SAAS,mCAAmC,CACjD,SACA,UAC2B;AAAA,EAC3B,MAAM,mBAAmB,4BAA2B,QAAQ;AAAA,EAC5D,IAAI,qBAAqB,gCAA+B;AAAA,IACtD,OAAO;AAAA,EACT;AAAA,EAEA,OAAO;AAAA,OACF;AAAA,IACH,mBAAmB,GAAG,QAAQ,qBAAqB;AAAA,IACnD,gBAAgB,GAAG,QAAQ,kBAAkB;AAAA,EAC/C;AAAA;AAGK,SAAS,kBAAiB,CAAC,QAAoD;AAAA,EACpF,MAAM,UAAU,IAAI;AAAA,EACpB,IAAI,CAAC,QAAQ;AAAA,IACX,OAAO;AAAA,EACT;AAAA,EAEA,WAAW,QAAQ,OAAO,MAAM,GAAG,GAAG;AAAA,IACpC,MAAM,YAAY,KAAK,QAAQ,GAAG;AAAA,IAClC,IAAI,aAAa,GAAG;AAAA,MAClB;AAAA,IACF;AAAA,IAEA,MAAM,OAAO,KAAK,MAAM,GAAG,SAAS,EAAE,KAAK;AAAA,IAC3C,IAAI,CAAC,QAAQ,QAAQ,IAAI,IAAI,GAAG;AAAA,MAC9B;AAAA,IACF;AAAA,IAEA,MAAM,QAAQ,KAAK,MAAM,YAAY,CAAC,EAAE,KAAK;AAAA,IAC7C,QAAQ,IAAI,MAAM,KAAK;AAAA,EACzB;AAAA,EAEA,OAAO;AAAA;AAGF,SAAS,UAAS,CAAC,SAAkB,MAAkC;AAAA,EAC5E,OAAO,mBAAkB,QAAQ,QAAQ,IAAI,QAAQ,CAAC,EAAE,IAAI,IAAI;AAAA;AAG3D,SAAS,gBAAe,CAAC,SAA6C;AAAA,EAC3E,MAAM,QAAQ,CAAC,GAAG,QAAQ,QAAQ,QAAQ,OAAO;AAAA,EAEjD,MAAM,KAAK,QAAQ;AAAA,EACnB,MAAM,KAAK,iBAAiB;AAAA,EAE5B,IAAI,QAAQ,QAAQ;AAAA,IAClB,MAAM,KAAK,UAAU,QAAQ,QAAQ;AAAA,EACvC;AAAA,EAEA,IAAI,QAAQ,UAAU;AAAA,IACpB,MAAM,KAAK,UAAU;AAAA,EACvB;AAAA,EAEA,IAAI,QAAQ,QAAQ;AAAA,IAClB,MAAM,KAAK,QAAQ;AAAA,EACrB;AAAA,EAEA,IAAI,QAAQ,WAAW,WAAW;AAAA,IAChC,MAAM,KAAK,WAAW,KAAK,MAAM,QAAQ,MAAM,GAAG;AAAA,EACpD;AAAA,EAEA,IAAI,QAAQ,SAAS;AAAA,IACnB,MAAM,KAAK,WAAW,QAAQ,QAAQ,YAAY,GAAG;AAAA,EACvD;AAAA,EAEA,OAAO,MAAM,KAAK,IAAI;AAAA;AAGjB,SAAS,uBAAsB,CACpC,SACA,SACS;AAAA,EACT,IACE,yBAAyB,QAAQ,iBAAiB,KAClD,yBAAyB,QAAQ,cAAc,GAC/C;AAAA,IACA,OAAO;AAAA,EACT;AAAA,EAEA,IAAI,OAAO,QAAQ,WAAW,WAAW;AAAA,IACvC,OAAO,QAAQ;AAAA,EACjB;AAAA,EAEA,MAAM,MAAM,IAAI,IAAI,QAAQ,GAAG;AAAA,EAC/B,IAAI,YAAY,IAAI,QAAQ,GAAG;AAAA,IAC7B,OAAO;AAAA,EACT;AAAA,EAEA,OAAO,IAAI,aAAa,YAAY;AAAA;AAG/B,SAAS,0BAAyB,CAAC,QAK/B;AAAA,EACT,MAAM,WAAW,sBAAsB,OAAO,SAAS;AAAA,EACvD,OAAO,iBAAgB;AAAA,IACrB,MAAM,OAAO,QAAQ;AAAA,IACrB,OAAO,OAAO;AAAA,IACd,UAAU;AAAA,OACP;AAAA,IACH,QAAQ,OAAO,QAAQ;AAAA,IACvB,QAAQ,wBAAuB,OAAO,SAAS,OAAO,OAAO;AAAA,IAC7D,UAAU,OAAO,QAAQ;AAAA,EAC3B,CAAC;AAAA;AAGI,SAAS,uBAAsB,CAAC,QAK5B;AAAA,EACT,MAAM,WAAW,sBAAsB,OAAO,SAAS;AAAA,EACvD,OAAO,iBAAgB;AAAA,IACrB,MAAM,OAAO,QAAQ;AAAA,IACrB,OAAO,OAAO;AAAA,IACd,UAAU,OAAO,QAAQ;AAAA,OACtB;AAAA,IACH,QAAQ,OAAO,QAAQ;AAAA,IACvB,QAAQ,wBAAuB,OAAO,SAAS,OAAO,OAAO;AAAA,IAC7D,UAAU,OAAO,QAAQ;AAAA,EAC3B,CAAC;AAAA;AAGH,SAAS,qBAAqB,CAAC,WAG7B;AAAA,EACA,MAAM,cAAc,UAAU,QAAQ;AAAA,EACtC,IAAI,CAAC,OAAO,SAAS,WAAW,GAAG;AAAA,IACjC,MAAM,IAAI,MAAM,oDAAoD;AAAA,EACtE;AAAA,EAEA,OAAO;AAAA,IACL,QAAQ,KAAK,IAAI,GAAG,KAAK,OAAO,cAAc,KAAK,IAAI,KAAK,IAAI,CAAC;AAAA,IACjE,SAAS,IAAI,KAAK,WAAW;AAAA,EAC/B;AAAA;AAGK,SAAS,yBAAwB,CAAC,QAG9B;AAAA,EACT,OAAO,iBAAgB;AAAA,IACrB,MAAM,OAAO,QAAQ;AAAA,IACrB,OAAO;AAAA,IACP,UAAU;AAAA,IACV,QAAQ;AAAA,IACR,SAAS,IAAI,KAAK,CAAC;AAAA,IACnB,QAAQ,OAAO,QAAQ;AAAA,IACvB,QAAQ,wBAAuB,OAAO,SAAS,OAAO,OAAO;AAAA,IAC7D,UAAU,OAAO,QAAQ;AAAA,EAC3B,CAAC;AAAA;AAGI,SAAS,sBAAqB,CAAC,QAG3B;AAAA,EACT,OAAO,iBAAgB;AAAA,IACrB,MAAM,OAAO,QAAQ;AAAA,IACrB,OAAO;AAAA,IACP,QAAQ;AAAA,IACR,SAAS,IAAI,KAAK,CAAC;AAAA,IACnB,QAAQ,OAAO,QAAQ;AAAA,IACvB,QAAQ,wBAAuB,OAAO,SAAS,OAAO,OAAO;AAAA,IAC7D,UAAU,OAAO,QAAQ;AAAA,EAC3B,CAAC;AAAA;AAGH,SAAS,WAAW,CAAC,UAA2B;AAAA,EAC9C,OAAO,aAAa,eAAe,aAAa,eAAe,aAAa;AAAA;AAG9E,SAAS,wBAAwB,CAAC,SAA0C;AAAA,EAC1E,sBAAsB,QAAQ,mBAAmB,mBAAmB;AAAA,EACpE,sBAAsB,QAAQ,gBAAgB,gBAAgB;AAAA,EAE9D,IAAI,QAAQ,aAAa,UAAU;AAAA,IACjC,MAAM,IAAI,MAAM,+CAA+C;AAAA,EACjE;AAAA,EAEA,IACE,QAAQ,WACP,yBAAyB,QAAQ,iBAAiB,KACjD,yBAAyB,QAAQ,cAAc,IACjD;AAAA,IACA,MAAM,IAAI,MAAM,qEAAqE;AAAA,EACvF;AAAA,EAEA,IACE,QAAQ,WAAW,UAClB,yBAAyB,QAAQ,iBAAiB,KACjD,yBAAyB,QAAQ,cAAc,IACjD;AAAA,IACA,MAAM,IAAI,MAAM,qDAAqD;AAAA,EACvE;AAAA;AAGF,SAAS,qBAAqB,CAAC,MAAc,OAAqB;AAAA,EAChE,IAAI,CAAC,iCAAiC,KAAK,IAAI,GAAG;AAAA,IAChD,MAAM,IAAI,MAAM,sBAAsB,UAAU,mCAAmC;AAAA,EACrF;AAAA;AAGF,SAAS,wBAAwB,CAAC,MAAuB;AAAA,EACvD,OAAO,KAAK,WAAW,SAAS;AAAA;AAGlC,SAAS,wBAAwB,CAAC,MAAuB;AAAA,EACvD,OAAO,yBAAyB,IAAI,KAAK,KAAK,WAAW,WAAW;AAAA;;;ACzPtE,IAAM,MAAM,KAAK,KAAK,KAAK;AAEpB,IAAM,wCAAuC,KAAK;AAClD,IAAM,0CAAyC,IAAI;AACnD,IAAM,kCAAiC,IAAI;AAC3C,IAAM,8BAA6B,KAAK;AAKxC,IAAM,qCAAoC;AAI1C,SAAS,kBAAiB,CAAC,QAAwD;AAAA,EACxF,IAAI,CAAC,QAAQ;AAAA,IACX,OAAO;AAAA,MACL,UAAU;AAAA,MACV,SAAS,0BAA0B,SAAS;AAAA,MAC5C,SAAS,0BAAyB,SAAS;AAAA,IAC7C;AAAA,EACF;AAAA,EAEA,MAAM,WAAW,cAAc,SAAS,OAAO,WAAW;AAAA,EAC1D,oBAAoB,QAAQ;AAAA,EAE5B,OAAO;AAAA,IACL;AAAA,IACA,SAAS,0BAA0B,cAAc,SAAS,OAAO,UAAU,SAAS;AAAA,IACpF,SAAS,0BAAyB,cAAc,SAAS,OAAO,UAAU,SAAS;AAAA,EACrF;AAAA;AAGK,SAAS,0BAA0B,CAAC,OAAyB,KAAiB;AAAA,EACnF,MAAM,YAAY,QACd,IAAI,KAAK,KAAK,IACd,IAAI,KAAK,IAAI,QAAQ,IAAI,+BAA8B;AAAA,EAC3D,MAAM,gBAAgB,UAAU,QAAQ;AAAA,EAExC,IAAI,CAAC,OAAO,SAAS,aAAa,GAAG;AAAA,IACnC,MAAM,IAAI,kBACR,sBACA,mDACF;AAAA,EACF;AAAA,EAEA,IAAI,iBAAiB,IAAI,QAAQ,GAAG;AAAA,IAClC,MAAM,IAAI,kBACR,sBACA,oDACF;AAAA,EACF;AAAA,EAEA,IAAI,gBAAgB,IAAI,QAAQ,IAAI,6BAA4B;AAAA,IAC9D,MAAM,IAAI,kBACR,sBACA,yEACF;AAAA,EACF;AAAA,EAEA,OAAO;AAAA;AAoBF,SAAS,eAAc,CAAC,OAAe,OAAuB;AAAA,EACnE,MAAM,aAAa,MAAM,KAAK;AAAA,EAC9B,IAAI,CAAC,YAAY;AAAA,IACf,MAAM,IAAI,kBAAiB,sBAAsB,UAAU,mCAAmC;AAAA,EAChG;AAAA,EACA,OAAO;AAAA;AAGF,SAAS,mBAAmB,CAAC,OAGlC;AAAA,EACA,IAAI,MAAM,UAAU,cAAc,CAAC,OAAO,UAAU,MAAM,KAAK,KAAK,MAAM,QAAQ,IAAI;AAAA,IACpF,MAAM,IAAI,kBACR,sBACA,8DACF;AAAA,EACF;AAAA,EAEA,IAAI,MAAM,WAAW,cAAc,CAAC,OAAO,UAAU,MAAM,MAAM,KAAK,MAAM,SAAS,IAAI;AAAA,IACvF,MAAM,IAAI,kBACR,sBACA,+DACF;AAAA,EACF;AAAA,EAEA,OAAO;AAAA,IACL,OAAO,MAAM;AAAA,IACb,QAAQ,MAAM,UAAU;AAAA,EAC1B;AAAA;AAGF,SAAS,yBAAyB,CAChC,SAC+B;AAAA,EAC/B,MAAM,gBAAgB,SAAS,iBAAiB;AAAA,EAChD,IAAI,CAAC,OAAO,SAAS,aAAa,KAAK,iBAAiB,GAAG;AAAA,IACzD,MAAM,IAAI,kBACR,uBACA,qEACF;AAAA,EACF;AAAA,EAEA,MAAM,kBAAkB,SAAS,mBAAmB;AAAA,EACpD,IAAI,CAAC,OAAO,SAAS,eAAe,KAAK,mBAAmB,GAAG;AAAA,IAC7D,MAAM,IAAI,kBACR,uBACA,uEACF;AAAA,EACF;AAAA,EACA,IAAI,mBAAmB,eAAe;AAAA,IACpC,MAAM,IAAI,kBACR,uBACA,sEACF;AAAA,EACF;AAAA,EAEA,MAAM,oBAAoB,SAAS;AAAA,EACnC,IACE,sBAAsB,cACrB,CAAC,OAAO,SAAS,iBAAiB,KAAK,qBAAqB,IAC7D;AAAA,IACA,MAAM,IAAI,kBACR,uBACA,yFACF;AAAA,EACF;AAAA,EACA,IAAI,sBAAsB,aAAa,oBAAoB,eAAe;AAAA,IACxE,MAAM,IAAI,kBACR,uBACA,uFACF;AAAA,EACF;AAAA,EAEA,MAAM,aAAa,SAAS,cAAc;AAAA,EAC1C,IAAI,CAAC,OAAO,SAAS,UAAU,KAAK,aAAa,GAAG;AAAA,IAClD,MAAM,IAAI,kBACR,uBACA,sEACF;AAAA,EACF;AAAA,EACA,IAAI,cAAc,iBAAiB;AAAA,IACjC,MAAM,IAAI,kBACR,uBACA,mEACF;AAAA,EACF;AAAA,EAEA,OAAO;AAAA,IACL;AAAA,IACA;AAAA,OACI,sBAAsB,YAAY,CAAC,IAAI,EAAE,kBAAkB;AAAA,IAC/D;AAAA,EACF;AAAA;AAGK,SAAS,wBAAuB,CACrC,UACmC;AAAA,EACnC,IAAI,CAAC,YAAY,SAAS,SAAS,aAAa;AAAA,IAC9C,OAAO;AAAA,EACT;AAAA,EAEA,MAAM,YAAY;AAAA,EAKlB,OACE,OAAO,UAAU,qBAAqB,cACtC,OAAO,UAAU,4BAA4B;AAAA;AAI1C,SAAS,iCAAgC,CAC9C,UAC4C;AAAA,EAC5C,IAAI,CAAC,UAAU;AAAA,IACb,OAAO;AAAA,EACT;AAAA,EAEA,MAAM,YAAY;AAAA,EAIlB,OAAO,OAAO,UAAU,sBAAsB;AAAA;AAGzC,SAAS,mBAAkB,CAAC,UAA6D;AAAA,EAC9F,IAAI,CAAC,YAAY,SAAS,SAAS,QAAQ;AAAA,IACzC,OAAO;AAAA,EACT;AAAA,EAEA,MAAM,YAAY;AAAA,EAKlB,OACE,OAAO,UAAU,oBAAoB,cACrC,OAAO,UAAU,uBAAuB;AAAA;AAI5C,SAAS,mBAAmB,CAAC,UAA8B;AAAA,EACzD,IAAI,CAAC,SAAS,GAAG,KAAK,GAAG;AAAA,IACvB,MAAM,IAAI,kBAAiB,uBAAuB,sCAAsC;AAAA,EAC1F;AAAA;",
|
|
11
|
+
"debugId": "E4EC0B2B5EB9DD3264756E2164756E21",
|
|
12
12
|
"names": []
|
|
13
13
|
}
|
|
@@ -0,0 +1,191 @@
|
|
|
1
|
+
// @bun
|
|
2
|
+
import {
|
|
3
|
+
principalsEqual2
|
|
4
|
+
} from "./chunk-6rzb1g6h.js";
|
|
5
|
+
import {
|
|
6
|
+
createFileUploadId2,
|
|
7
|
+
isFileUploadSessionExpired,
|
|
8
|
+
isTerminalFileUploadSessionExpired
|
|
9
|
+
} from "./chunk-h89wz928.js";
|
|
10
|
+
|
|
11
|
+
// src/storage/file-upload-sessions/errors.ts
|
|
12
|
+
class FileUploadSessionError2 extends Error {
|
|
13
|
+
reason;
|
|
14
|
+
name = "FileUploadSessionError";
|
|
15
|
+
constructor(reason, message) {
|
|
16
|
+
super(message);
|
|
17
|
+
this.reason = reason;
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
// src/storage/file-upload-sessions/provider.ts
|
|
22
|
+
class DurableFileUploadSessions2 {
|
|
23
|
+
backend;
|
|
24
|
+
constructor(backend) {
|
|
25
|
+
this.backend = backend;
|
|
26
|
+
}
|
|
27
|
+
async create(input) {
|
|
28
|
+
return this.backend.transaction(async (persistence) => {
|
|
29
|
+
const session = {
|
|
30
|
+
id: input.id ?? createFileUploadId2(),
|
|
31
|
+
projectId: input.projectId,
|
|
32
|
+
principal: input.principal,
|
|
33
|
+
strategy: input.strategy,
|
|
34
|
+
status: "pending",
|
|
35
|
+
...input.fileName === undefined ? {} : { fileName: input.fileName },
|
|
36
|
+
...input.mediaType === undefined ? {} : { mediaType: input.mediaType },
|
|
37
|
+
...input.logicalPath === undefined ? {} : { logicalPath: input.logicalPath },
|
|
38
|
+
...input.expectedSizeBytes === undefined ? {} : { expectedSizeBytes: input.expectedSizeBytes },
|
|
39
|
+
...input.expectedDigest === undefined ? {} : { expectedDigest: input.expectedDigest },
|
|
40
|
+
...input.providerUpload === undefined ? {} : { providerUpload: input.providerUpload },
|
|
41
|
+
signedParts: [],
|
|
42
|
+
createdAt: await persistence.now(),
|
|
43
|
+
expiresAt: input.expiresAt
|
|
44
|
+
};
|
|
45
|
+
if (!await persistence.insert(session)) {
|
|
46
|
+
throw new Error(`[Sixb] File upload session '${session.id}' already exists.`);
|
|
47
|
+
}
|
|
48
|
+
return session;
|
|
49
|
+
});
|
|
50
|
+
}
|
|
51
|
+
async getForPrincipal(uploadId, principal) {
|
|
52
|
+
return this.backend.read(async (persistence) => {
|
|
53
|
+
const session = await persistence.get(uploadId);
|
|
54
|
+
if (!session || !principalsEqual2(session.principal, principal)) {
|
|
55
|
+
throw new FileUploadSessionError2("not_found", "File upload session not found.");
|
|
56
|
+
}
|
|
57
|
+
const nowMs = (await persistence.now()).getTime();
|
|
58
|
+
if (isFileUploadSessionExpired(session, nowMs)) {
|
|
59
|
+
throw new FileUploadSessionError2("expired", "File upload session has expired.");
|
|
60
|
+
}
|
|
61
|
+
if (isTerminalFileUploadSessionExpired(session, nowMs)) {
|
|
62
|
+
throw new FileUploadSessionError2("not_found", "File upload session not found.");
|
|
63
|
+
}
|
|
64
|
+
return session;
|
|
65
|
+
});
|
|
66
|
+
}
|
|
67
|
+
async markUploaded(uploadId, fileRef) {
|
|
68
|
+
return this.transition(uploadId, (session) => ({ ...session, fileRef }));
|
|
69
|
+
}
|
|
70
|
+
async addSignedPart(uploadId, part) {
|
|
71
|
+
return this.transition(uploadId, (session) => ({
|
|
72
|
+
...session,
|
|
73
|
+
signedParts: [
|
|
74
|
+
...session.signedParts.filter((candidate) => candidate.partNumber !== part.partNumber),
|
|
75
|
+
part
|
|
76
|
+
].sort((left, right) => left.partNumber - right.partNumber)
|
|
77
|
+
}));
|
|
78
|
+
}
|
|
79
|
+
async complete(uploadId, fileRef) {
|
|
80
|
+
return this.transition(uploadId, (session, now) => ({
|
|
81
|
+
...session,
|
|
82
|
+
status: "completed",
|
|
83
|
+
fileRef,
|
|
84
|
+
completedAt: now
|
|
85
|
+
}));
|
|
86
|
+
}
|
|
87
|
+
async abort(uploadId) {
|
|
88
|
+
return this.transition(uploadId, (session, now) => ({
|
|
89
|
+
...session,
|
|
90
|
+
status: "aborted",
|
|
91
|
+
abortedAt: now
|
|
92
|
+
}));
|
|
93
|
+
}
|
|
94
|
+
async listAbandoned(input) {
|
|
95
|
+
if (input.projectId.trim().length === 0) {
|
|
96
|
+
throw new Error("[Sixb] File upload session listAbandoned projectId must not be blank.");
|
|
97
|
+
}
|
|
98
|
+
if (!Number.isSafeInteger(input.limit) || input.limit <= 0) {
|
|
99
|
+
throw new Error("[Sixb] File upload session listAbandoned limit must be a positive integer.");
|
|
100
|
+
}
|
|
101
|
+
return this.backend.read((persistence) => persistence.listAbandoned(input));
|
|
102
|
+
}
|
|
103
|
+
async cleanupExpired(now) {
|
|
104
|
+
return this.backend.transaction(async (persistence) => persistence.deleteReapable(now ?? await persistence.now()));
|
|
105
|
+
}
|
|
106
|
+
transition(uploadId, next) {
|
|
107
|
+
return this.backend.transaction(async (persistence) => {
|
|
108
|
+
const session = await persistence.get(uploadId);
|
|
109
|
+
if (!session) {
|
|
110
|
+
throw new FileUploadSessionError2("not_found", "File upload session not found.");
|
|
111
|
+
}
|
|
112
|
+
if (session.status !== "pending") {
|
|
113
|
+
throw new FileUploadSessionError2(session.status === "completed" ? "already_completed" : "already_aborted", `File upload session is already ${session.status}.`);
|
|
114
|
+
}
|
|
115
|
+
const updated = next(session, await persistence.now());
|
|
116
|
+
await persistence.update(updated);
|
|
117
|
+
return updated;
|
|
118
|
+
});
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
var STRATEGIES = ["server", "direct-put", "multipart"];
|
|
122
|
+
var STATUSES = ["pending", "completed", "aborted"];
|
|
123
|
+
var PRINCIPAL_TYPES = ["user", "serviceAccount", "system"];
|
|
124
|
+
function parseFileUploadSessionRow2(row) {
|
|
125
|
+
const id = text(row.id, "id", String(row.id));
|
|
126
|
+
const strategy = text(row.strategy, "strategy", id);
|
|
127
|
+
const status = text(row.status, "status", id);
|
|
128
|
+
if (!STRATEGIES.includes(strategy))
|
|
129
|
+
throw corrupt(id, `unknown strategy '${strategy}'`);
|
|
130
|
+
if (!STATUSES.includes(status))
|
|
131
|
+
throw corrupt(id, `unknown status '${status}'`);
|
|
132
|
+
const principalType = text(row.ownerPrincipalType, "ownerPrincipalType", id);
|
|
133
|
+
if (!PRINCIPAL_TYPES.includes(principalType)) {
|
|
134
|
+
throw corrupt(id, `unknown owner principal type '${principalType}'`);
|
|
135
|
+
}
|
|
136
|
+
const providerUpload = json(row.providerUpload);
|
|
137
|
+
const fileRef = json(row.fileRef);
|
|
138
|
+
const signedParts = json(row.signedParts);
|
|
139
|
+
if (!Array.isArray(signedParts))
|
|
140
|
+
throw corrupt(id, "signedParts is not an array");
|
|
141
|
+
const optional = (key, value) => value === null || value === undefined ? {} : { [key]: value };
|
|
142
|
+
return {
|
|
143
|
+
id,
|
|
144
|
+
projectId: text(row.projectId, "projectId", id),
|
|
145
|
+
principal: {
|
|
146
|
+
type: principalType,
|
|
147
|
+
id: text(row.ownerPrincipalId, "ownerPrincipalId", id)
|
|
148
|
+
},
|
|
149
|
+
strategy,
|
|
150
|
+
status,
|
|
151
|
+
...optional("fileName", row.fileName),
|
|
152
|
+
...optional("mediaType", row.mediaType),
|
|
153
|
+
...optional("logicalPath", row.logicalPath),
|
|
154
|
+
...optional("expectedSizeBytes", row.expectedSizeBytes === null || row.expectedSizeBytes === undefined ? null : Number(row.expectedSizeBytes)),
|
|
155
|
+
...optional("expectedDigest", row.expectedDigest),
|
|
156
|
+
...optional("providerUpload", providerUpload === null ? null : withExpiresAt(providerUpload, id)),
|
|
157
|
+
signedParts: signedParts.map((part) => withExpiresAt(part, id)),
|
|
158
|
+
...optional("fileRef", fileRef),
|
|
159
|
+
createdAt: date(row.createdAt, "createdAt", id),
|
|
160
|
+
expiresAt: date(row.expiresAt, "expiresAt", id),
|
|
161
|
+
...optional("completedAt", row.completedAt == null ? null : date(row.completedAt, "completedAt", id)),
|
|
162
|
+
...optional("abortedAt", row.abortedAt == null ? null : date(row.abortedAt, "abortedAt", id))
|
|
163
|
+
};
|
|
164
|
+
}
|
|
165
|
+
function json(value) {
|
|
166
|
+
return typeof value === "string" ? JSON.parse(value) : value ?? null;
|
|
167
|
+
}
|
|
168
|
+
function withExpiresAt(value, id) {
|
|
169
|
+
if (typeof value !== "object" || value === null)
|
|
170
|
+
throw corrupt(id, "nested record is not an object");
|
|
171
|
+
const record = value;
|
|
172
|
+
return { ...record, expiresAt: date(record.expiresAt, "nested expiresAt", id) };
|
|
173
|
+
}
|
|
174
|
+
function text(value, column, id) {
|
|
175
|
+
if (typeof value !== "string" || value.length === 0)
|
|
176
|
+
throw corrupt(id, `${column} is not text`);
|
|
177
|
+
return value;
|
|
178
|
+
}
|
|
179
|
+
function date(value, column, id) {
|
|
180
|
+
const parsed = value instanceof Date || typeof value === "string" ? new Date(value) : null;
|
|
181
|
+
if (!parsed || !Number.isFinite(parsed.getTime()))
|
|
182
|
+
throw corrupt(id, `${column} is not a date`);
|
|
183
|
+
return parsed;
|
|
184
|
+
}
|
|
185
|
+
function corrupt(id, reason) {
|
|
186
|
+
return new Error(`[Sixb] Stored file upload session '${id}' is invalid: ${reason}.`);
|
|
187
|
+
}
|
|
188
|
+
|
|
189
|
+
export { FileUploadSessionError2, DurableFileUploadSessions2, parseFileUploadSessionRow2 };
|
|
190
|
+
|
|
191
|
+
//# debugId=612366C739B9FA8F64756E2164756E21
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../src/storage/file-upload-sessions/errors.ts", "../src/storage/file-upload-sessions/provider.ts"],
|
|
4
|
+
"sourcesContent": [
|
|
5
|
+
"/**\n * Transport-agnostic reasons a file upload session operation can fail. Mapping a\n * reason to an HTTP status (or any other transport) is the responsibility of the\n * boundary that surfaces it, not of core.\n */\nexport type FileUploadSessionErrorReason =\n | \"not_found\"\n | \"expired\"\n | \"already_completed\"\n | \"already_aborted\"\n\n/**\n * Error for file upload session invariants and invalid state transitions.\n */\nexport class FileUploadSessionError extends Error {\n readonly name = \"FileUploadSessionError\"\n\n constructor(\n readonly reason: FileUploadSessionErrorReason,\n message: string\n ) {\n super(message)\n }\n}\n",
|
|
6
|
+
"import { type Principal, principalsEqual } from \"../../auth\"\nimport type { FileRef, SignedBlobUploadPart } from \"../../blob-storage\"\nimport { FileUploadSessionError } from \"./errors\"\nimport type {\n CreateFileUploadSessionInput,\n FileUploadSession,\n FileUploadSessionStore,\n FileUploadStatus,\n FileUploadStrategy,\n ListAbandonedFileUploadSessionsInput,\n} from \"./types\"\nimport {\n createFileUploadId,\n isFileUploadSessionExpired,\n isTerminalFileUploadSessionExpired,\n} from \"./utils\"\n\nexport { fileUploadSessionReapAt } from \"./utils\"\n\n/** Database-specific row access used by the shared upload session state machine. */\nexport interface FileUploadSessionPersistence {\n now(): Promise<Date>\n /** Returns false when the id already exists. */\n insert(session: FileUploadSession): Promise<boolean>\n /** Inside `transaction`, must lock the row until the transaction ends. */\n get(uploadId: string): Promise<FileUploadSession | null>\n update(session: FileUploadSession): Promise<void>\n /** The project's `pending` rows holding a provider upload, `expires_at <= now`, oldest first. */\n listAbandoned(input: ListAbandonedFileUploadSessionsInput): Promise<readonly FileUploadSession[]>\n /** Deletes rows whose persisted `fileUploadSessionReapAt` is `<= now`. */\n deleteReapable(now: Date): Promise<number>\n}\n\n/** Transaction and lock boundary supplied by a concrete durable storage provider. */\nexport interface FileUploadSessionPersistenceBackend {\n read<T>(run: (persistence: FileUploadSessionPersistence) => Promise<T>): Promise<T>\n transaction<T>(run: (persistence: FileUploadSessionPersistence) => Promise<T>): Promise<T>\n}\n\n/**\n * Shared durable implementation of the upload session lifecycle. Concrete providers own SQL,\n * transactions and database time; every transition and retention rule lives here so SQLite,\n * PostgreSQL and the in-memory reference cannot drift semantically.\n *\n * Every method is `async`: a storage's operation-scoped facade serializes only async methods, and\n * a plain Promise-returning method would bypass it and join whatever SQLite transaction is open.\n */\nexport class DurableFileUploadSessions implements FileUploadSessionStore {\n constructor(private readonly backend: FileUploadSessionPersistenceBackend) {}\n\n async create(input: CreateFileUploadSessionInput): Promise<FileUploadSession> {\n return this.backend.transaction(async (persistence) => {\n const session: FileUploadSession = {\n id: input.id ?? createFileUploadId(),\n projectId: input.projectId,\n principal: input.principal,\n strategy: input.strategy,\n status: \"pending\",\n ...(input.fileName === undefined ? {} : { fileName: input.fileName }),\n ...(input.mediaType === undefined ? {} : { mediaType: input.mediaType }),\n ...(input.logicalPath === undefined ? {} : { logicalPath: input.logicalPath }),\n ...(input.expectedSizeBytes === undefined\n ? {}\n : { expectedSizeBytes: input.expectedSizeBytes }),\n ...(input.expectedDigest === undefined ? {} : { expectedDigest: input.expectedDigest }),\n ...(input.providerUpload === undefined ? {} : { providerUpload: input.providerUpload }),\n signedParts: [],\n createdAt: await persistence.now(),\n expiresAt: input.expiresAt,\n }\n\n if (!(await persistence.insert(session))) {\n throw new Error(`[Sixb] File upload session '${session.id}' already exists.`)\n }\n return session\n })\n }\n\n async getForPrincipal(uploadId: string, principal: Principal): Promise<FileUploadSession> {\n return this.backend.read(async (persistence) => {\n const session = await persistence.get(uploadId)\n if (!session || !principalsEqual(session.principal, principal)) {\n throw new FileUploadSessionError(\"not_found\", \"File upload session not found.\")\n }\n\n const nowMs = (await persistence.now()).getTime()\n if (isFileUploadSessionExpired(session, nowMs)) {\n throw new FileUploadSessionError(\"expired\", \"File upload session has expired.\")\n }\n if (isTerminalFileUploadSessionExpired(session, nowMs)) {\n throw new FileUploadSessionError(\"not_found\", \"File upload session not found.\")\n }\n return session\n })\n }\n\n async markUploaded(uploadId: string, fileRef: FileRef): Promise<FileUploadSession> {\n return this.transition(uploadId, (session) => ({ ...session, fileRef }))\n }\n\n async addSignedPart(uploadId: string, part: SignedBlobUploadPart): Promise<FileUploadSession> {\n return this.transition(uploadId, (session) => ({\n ...session,\n signedParts: [\n ...session.signedParts.filter((candidate) => candidate.partNumber !== part.partNumber),\n part,\n ].sort((left, right) => left.partNumber - right.partNumber),\n }))\n }\n\n async complete(uploadId: string, fileRef: FileRef): Promise<FileUploadSession> {\n return this.transition(uploadId, (session, now) => ({\n ...session,\n status: \"completed\",\n fileRef,\n completedAt: now,\n }))\n }\n\n async abort(uploadId: string): Promise<FileUploadSession> {\n return this.transition(uploadId, (session, now) => ({\n ...session,\n status: \"aborted\",\n abortedAt: now,\n }))\n }\n\n async listAbandoned(\n input: ListAbandonedFileUploadSessionsInput\n ): Promise<readonly FileUploadSession[]> {\n if (input.projectId.trim().length === 0) {\n throw new Error(\"[Sixb] File upload session listAbandoned projectId must not be blank.\")\n }\n if (!Number.isSafeInteger(input.limit) || input.limit <= 0) {\n throw new Error(\"[Sixb] File upload session listAbandoned limit must be a positive integer.\")\n }\n return this.backend.read((persistence) => persistence.listAbandoned(input))\n }\n\n async cleanupExpired(now?: Date): Promise<number> {\n return this.backend.transaction(async (persistence) =>\n persistence.deleteReapable(now ?? (await persistence.now()))\n )\n }\n\n private transition(\n uploadId: string,\n next: (session: FileUploadSession, now: Date) => FileUploadSession\n ): Promise<FileUploadSession> {\n return this.backend.transaction(async (persistence) => {\n const session = await persistence.get(uploadId)\n if (!session) {\n throw new FileUploadSessionError(\"not_found\", \"File upload session not found.\")\n }\n if (session.status !== \"pending\") {\n throw new FileUploadSessionError(\n session.status === \"completed\" ? \"already_completed\" : \"already_aborted\",\n `File upload session is already ${session.status}.`\n )\n }\n\n const updated = next(session, await persistence.now())\n await persistence.update(updated)\n return updated\n })\n }\n}\n\nconst STRATEGIES: readonly FileUploadStrategy[] = [\"server\", \"direct-put\", \"multipart\"]\nconst STATUSES: readonly FileUploadStatus[] = [\"pending\", \"completed\", \"aborted\"]\nconst PRINCIPAL_TYPES: readonly Principal[\"type\"][] = [\"user\", \"serviceAccount\", \"system\"]\n\n/**\n * Rebuilds a session from a provider row. JSON columns may arrive parsed (jsonb) or as text\n * (SQLite); nested `expiresAt` values are revived and every other nested field passes through,\n * so blob providers can extend `providerUpload` without a migration. Fails closed on corruption.\n */\nexport function parseFileUploadSessionRow(row: {\n readonly [column: string]: unknown\n}): FileUploadSession {\n const id = text(row.id, \"id\", String(row.id))\n const strategy = text(row.strategy, \"strategy\", id) as FileUploadStrategy\n const status = text(row.status, \"status\", id) as FileUploadStatus\n if (!STRATEGIES.includes(strategy)) throw corrupt(id, `unknown strategy '${strategy}'`)\n if (!STATUSES.includes(status)) throw corrupt(id, `unknown status '${status}'`)\n const principalType = text(row.ownerPrincipalType, \"ownerPrincipalType\", id)\n if (!PRINCIPAL_TYPES.includes(principalType as Principal[\"type\"])) {\n throw corrupt(id, `unknown owner principal type '${principalType}'`)\n }\n\n const providerUpload = json(row.providerUpload)\n const fileRef = json(row.fileRef)\n const signedParts = json(row.signedParts)\n if (!Array.isArray(signedParts)) throw corrupt(id, \"signedParts is not an array\")\n\n const optional = <T>(key: string, value: T | null | undefined) =>\n value === null || value === undefined ? {} : { [key]: value }\n\n return {\n id,\n projectId: text(row.projectId, \"projectId\", id),\n principal: {\n type: principalType as Principal[\"type\"],\n id: text(row.ownerPrincipalId, \"ownerPrincipalId\", id),\n },\n strategy,\n status,\n ...optional(\"fileName\", row.fileName as string | null),\n ...optional(\"mediaType\", row.mediaType as string | null),\n ...optional(\"logicalPath\", row.logicalPath as string | null),\n ...optional(\n \"expectedSizeBytes\",\n row.expectedSizeBytes === null || row.expectedSizeBytes === undefined\n ? null\n : Number(row.expectedSizeBytes)\n ),\n ...optional(\"expectedDigest\", row.expectedDigest as string | null),\n ...optional(\n \"providerUpload\",\n providerUpload === null ? null : withExpiresAt(providerUpload, id)\n ),\n signedParts: signedParts.map((part) => withExpiresAt(part, id)) as SignedBlobUploadPart[],\n ...optional(\"fileRef\", fileRef as FileRef | null),\n createdAt: date(row.createdAt, \"createdAt\", id),\n expiresAt: date(row.expiresAt, \"expiresAt\", id),\n ...optional(\n \"completedAt\",\n row.completedAt == null ? null : date(row.completedAt, \"completedAt\", id)\n ),\n ...optional(\"abortedAt\", row.abortedAt == null ? null : date(row.abortedAt, \"abortedAt\", id)),\n } as FileUploadSession\n}\n\nfunction json(value: unknown): unknown {\n return typeof value === \"string\" ? JSON.parse(value) : (value ?? null)\n}\n\nfunction withExpiresAt<T>(value: unknown, id: string): T {\n if (typeof value !== \"object\" || value === null)\n throw corrupt(id, \"nested record is not an object\")\n const record = value as Record<string, unknown>\n return { ...record, expiresAt: date(record.expiresAt, \"nested expiresAt\", id) } as T\n}\n\nfunction text(value: unknown, column: string, id: string): string {\n if (typeof value !== \"string\" || value.length === 0) throw corrupt(id, `${column} is not text`)\n return value\n}\n\nfunction date(value: unknown, column: string, id: string): Date {\n const parsed = value instanceof Date || typeof value === \"string\" ? new Date(value) : null\n if (!parsed || !Number.isFinite(parsed.getTime())) throw corrupt(id, `${column} is not a date`)\n return parsed\n}\n\nfunction corrupt(id: string, reason: string): Error {\n return new Error(`[Sixb] Stored file upload session '${id}' is invalid: ${reason}.`)\n}\n"
|
|
7
|
+
],
|
|
8
|
+
"mappings": "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",
|
|
9
|
+
"debugId": "612366C739B9FA8F64756E2164756E21",
|
|
10
|
+
"names": []
|
|
11
|
+
}
|