@sixb/core 0.1.12 → 0.1.13
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/index.d.ts +3 -2
- package/dist/auth/index.d.ts.map +1 -1
- package/dist/auth/index.js +14 -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.js +1 -1
- package/dist/auth/types.d.ts +8 -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-q5gz3g2j.js → chunk-0321g649.js} +2 -16
- package/dist/{chunk-q5gz3g2j.js.map → chunk-0321g649.js.map} +2 -2
- package/dist/{chunk-e1f1sqba.js → chunk-04h4t2b5.js} +3 -3
- package/dist/{chunk-y3ev53cq.js → chunk-2fv8sajb.js} +2 -2
- package/dist/{chunk-3bnt2wna.js → chunk-2hbhn1ff.js} +1 -1
- 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-g50nxqs5.js → chunk-63fp9x3q.js} +63 -20
- package/dist/chunk-63fp9x3q.js.map +20 -0
- package/dist/{chunk-qm535afa.js → chunk-693f3zn8.js} +66 -24
- package/dist/chunk-693f3zn8.js.map +15 -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-898y24dd.js} +49 -42
- package/dist/chunk-898y24dd.js.map +15 -0
- package/dist/{chunk-7qnvhtcd.js → chunk-91wthfwe.js} +17 -17
- package/dist/{chunk-7qnvhtcd.js.map → chunk-91wthfwe.js.map} +5 -5
- package/dist/chunk-96yw3pwd.js.map +2 -2
- package/dist/{chunk-2cxv584m.js → chunk-9pfw47qx.js} +309 -204
- package/dist/chunk-9pfw47qx.js.map +44 -0
- 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-jjwhy3rs.js → chunk-a69fkrtr.js} +5 -5
- package/dist/{chunk-y1ahv8b7.js → chunk-bdhfn0ww.js} +1 -1
- package/dist/{chunk-4ph94nhd.js → chunk-bep5rrdq.js} +2 -2
- package/dist/{chunk-kept9cdd.js → chunk-bxx3ms5t.js} +1 -1
- package/dist/{chunk-xtfryrfb.js → chunk-cbn96bve.js} +2 -2
- package/dist/{chunk-nzsy3xrp.js → chunk-cvrbhvtr.js} +69 -44
- package/dist/{chunk-nzsy3xrp.js.map → chunk-cvrbhvtr.js.map} +7 -7
- package/dist/{chunk-vsg0g7h9.js → chunk-d8yes9yx.js} +304 -45
- package/dist/chunk-d8yes9yx.js.map +20 -0
- package/dist/{chunk-tg4g4zh0.js → chunk-darm7eeg.js} +9 -9
- package/dist/{chunk-tg4g4zh0.js.map → chunk-darm7eeg.js.map} +3 -3
- 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-p6r1ex7t.js → chunk-ffwvdgk1.js} +5 -13
- package/dist/chunk-ffwvdgk1.js.map +10 -0
- package/dist/{chunk-r5zythxp.js → chunk-gbcrz0gr.js} +7 -7
- package/dist/{chunk-ybhz3j9g.js → chunk-gc226ten.js} +104 -148
- package/dist/{chunk-ybhz3j9g.js.map → chunk-gc226ten.js.map} +7 -8
- package/dist/{chunk-3ghw2t5q.js → chunk-gmt22nxx.js} +10 -16
- package/dist/chunk-gmt22nxx.js.map +10 -0
- package/dist/chunk-h89wz928.js +42 -0
- package/dist/chunk-h89wz928.js.map +10 -0
- package/dist/{chunk-hkw8rykk.js → chunk-ht4a7mjg.js} +74 -4
- package/dist/chunk-ht4a7mjg.js.map +15 -0
- package/dist/{chunk-t7dzd1tm.js → chunk-jhyc777j.js} +2 -2
- package/dist/{chunk-xn686q2e.js → chunk-jmwy25mf.js} +75 -57
- package/dist/{chunk-xn686q2e.js.map → chunk-jmwy25mf.js.map} +3 -3
- package/dist/{chunk-f06sf7rr.js → chunk-k4kkp58d.js} +18 -5
- package/dist/chunk-k4kkp58d.js.map +11 -0
- 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-b768c93y.js → chunk-mf6hwpzh.js} +83 -28
- package/dist/{chunk-b768c93y.js.map → chunk-mf6hwpzh.js.map} +5 -5
- 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-n33e8dz8.js +191 -0
- package/dist/chunk-n33e8dz8.js.map +11 -0
- package/dist/chunk-rdghfsss.js.map +2 -2
- package/dist/{chunk-m7cx05vp.js → chunk-rqtdtm43.js} +126 -59
- package/dist/{chunk-m7cx05vp.js.map → chunk-rqtdtm43.js.map} +13 -12
- 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-sfypc7mk.js → chunk-s24qbp32.js} +4 -4
- 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-bg2bs62d.js → chunk-w9bp61e7.js} +5 -5
- 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-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/in-memory/access-tokens.d.ts.map +1 -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 +62 -13
- 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 +1951 -1242
- 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/index.ts +3 -2
- package/src/auth/runtime.ts +299 -277
- package/src/auth/session-cache.ts +18 -6
- package/src/auth/sessions.ts +30 -0
- package/src/auth/types.ts +7 -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/in-memory/access-tokens.ts +5 -2
- package/src/storage/auth/in-memory/auth-storage.ts +5 -8
- 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 +57 -13
- 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 +149 -62
- 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-e1f1sqba.js.map → chunk-04h4t2b5.js.map} +0 -0
- /package/dist/{chunk-y3ev53cq.js.map → chunk-2fv8sajb.js.map} +0 -0
- /package/dist/{chunk-3bnt2wna.js.map → chunk-2hbhn1ff.js.map} +0 -0
- /package/dist/{chunk-5tetw4hn.js.map → chunk-4tnrzqqh.js.map} +0 -0
- /package/dist/{chunk-jjwhy3rs.js.map → chunk-a69fkrtr.js.map} +0 -0
- /package/dist/{chunk-y1ahv8b7.js.map → chunk-bdhfn0ww.js.map} +0 -0
- /package/dist/{chunk-4ph94nhd.js.map → chunk-bep5rrdq.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-r5zythxp.js.map → chunk-gbcrz0gr.js.map} +0 -0
- /package/dist/{chunk-t7dzd1tm.js.map → chunk-jhyc777j.js.map} +0 -0
- /package/dist/{chunk-0mza4xb2.js.map → chunk-m8zkvep1.js.map} +0 -0
- /package/dist/{chunk-sfypc7mk.js.map → chunk-s24qbp32.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-bg2bs62d.js.map → chunk-w9bp61e7.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-g2gezsg5.js.map → chunk-z9h698s8.js.map} +0 -0
- /package/dist/{chunk-bfjv1adk.js.map → chunk-znw0zvy4.js.map} +0 -0
|
@@ -0,0 +1,120 @@
|
|
|
1
|
+
import type { Principal } from "../auth/types"
|
|
2
|
+
import type { UserStatus } from "../storage/auth/types"
|
|
3
|
+
import { OntologyValidationError } from "./errors"
|
|
4
|
+
import type { Schema, ValueType } from "./types"
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* Value of a `ref.user()` (`"userRef"`) schema: the principal shape, narrowed to users.
|
|
8
|
+
*
|
|
9
|
+
* It carries no display data on purpose: a name or avatar supplied by the writer would be
|
|
10
|
+
* spoofable. It grants or restricts nothing by itself either; only an explicit policy gives it a
|
|
11
|
+
* security meaning.
|
|
12
|
+
*/
|
|
13
|
+
export type UserRef = Extract<Principal, { readonly type: "user" }>
|
|
14
|
+
|
|
15
|
+
/**
|
|
16
|
+
* Build a reference to one user, for writes and query predicates:
|
|
17
|
+
* `where(({ p }) => p.assignee.eq(userRef(userId)))`.
|
|
18
|
+
*/
|
|
19
|
+
export function userRef(id: string): UserRef {
|
|
20
|
+
if (typeof id !== "string" || !id.trim()) {
|
|
21
|
+
throw new OntologyValidationError("[Sixb] User reference id must not be empty.")
|
|
22
|
+
}
|
|
23
|
+
return Object.freeze({ type: "user" as const, id })
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
/** Exactly `{ type: "user", id }` with a nonblank id and no other field. */
|
|
27
|
+
export function isUserRef(value: unknown): value is UserRef {
|
|
28
|
+
if (typeof value !== "object" || value === null || Array.isArray(value)) return false
|
|
29
|
+
const record = value as Record<string, unknown>
|
|
30
|
+
return (
|
|
31
|
+
Object.keys(record).every((key) => key === "type" || key === "id") &&
|
|
32
|
+
record.type === "user" &&
|
|
33
|
+
typeof record.id === "string" &&
|
|
34
|
+
record.id.trim().length > 0
|
|
35
|
+
)
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
/**
|
|
39
|
+
* Collect the user ids a value holds at `userRef` positions of its schema, however deeply nested.
|
|
40
|
+
*
|
|
41
|
+
* Positions whose value does not match the schema are skipped: shape validation reports them.
|
|
42
|
+
*/
|
|
43
|
+
export function collectUserRefIds(
|
|
44
|
+
schema: Schema,
|
|
45
|
+
value: unknown,
|
|
46
|
+
valueTypesById: ReadonlyMap<string, ValueType>,
|
|
47
|
+
into: Set<string>,
|
|
48
|
+
seenValueTypeIds: ReadonlySet<string> = new Set()
|
|
49
|
+
): Set<string> {
|
|
50
|
+
if (value === null || value === undefined) return into
|
|
51
|
+
if (typeof schema === "string") {
|
|
52
|
+
if (schema === "userRef" && isUserRef(value)) into.add(value.id)
|
|
53
|
+
return into
|
|
54
|
+
}
|
|
55
|
+
switch (schema.type) {
|
|
56
|
+
case "array":
|
|
57
|
+
if (Array.isArray(value)) {
|
|
58
|
+
for (const item of value) {
|
|
59
|
+
collectUserRefIds(schema.items, item, valueTypesById, into, seenValueTypeIds)
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
return into
|
|
63
|
+
case "map":
|
|
64
|
+
if (isRecord(value)) {
|
|
65
|
+
for (const item of Object.values(value)) {
|
|
66
|
+
collectUserRefIds(schema.valueSchema, item, valueTypesById, into, seenValueTypeIds)
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
return into
|
|
70
|
+
case "object":
|
|
71
|
+
if (isRecord(value)) {
|
|
72
|
+
for (const [fieldId, field] of Object.entries(schema.properties)) {
|
|
73
|
+
collectUserRefIds(field.schema, value[fieldId], valueTypesById, into, seenValueTypeIds)
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
return into
|
|
77
|
+
case "valueTypeRef": {
|
|
78
|
+
if (seenValueTypeIds.has(schema.valueTypeId)) return into
|
|
79
|
+
const resolved = schema._resolved ?? valueTypesById.get(schema.valueTypeId)?.schema
|
|
80
|
+
if (!resolved) return into
|
|
81
|
+
return collectUserRefIds(
|
|
82
|
+
resolved,
|
|
83
|
+
value,
|
|
84
|
+
valueTypesById,
|
|
85
|
+
into,
|
|
86
|
+
new Set([...seenValueTypeIds, schema.valueTypeId])
|
|
87
|
+
)
|
|
88
|
+
}
|
|
89
|
+
case "enum":
|
|
90
|
+
return into
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
/**
|
|
95
|
+
* Why `path` cannot newly reference user `id`, or `undefined` when it can.
|
|
96
|
+
*
|
|
97
|
+
* `status` is the user's status, `null` for an unknown id, or `"unverifiable"` without auth
|
|
98
|
+
* storage. Unknown and suspended users get distinct messages: the writer already holds the id, and
|
|
99
|
+
* telling "wrong id" from "suspended member" is what makes the error actionable.
|
|
100
|
+
*/
|
|
101
|
+
export function userReferenceProblem(
|
|
102
|
+
path: string,
|
|
103
|
+
id: string,
|
|
104
|
+
status: UserStatus | null | "unverifiable"
|
|
105
|
+
): string | undefined {
|
|
106
|
+
switch (status) {
|
|
107
|
+
case "active":
|
|
108
|
+
return undefined
|
|
109
|
+
case null:
|
|
110
|
+
return `[Sixb] ${path} references user '${id}', which does not exist.`
|
|
111
|
+
case "unverifiable":
|
|
112
|
+
return `[Sixb] ${path} references user '${id}', but this runtime has no auth storage to verify users. Configure storage with auth to write user references.`
|
|
113
|
+
default:
|
|
114
|
+
return `[Sixb] ${path} references user '${id}', who is ${status}. Only active users can be newly referenced; existing references are kept.`
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
function isRecord(value: unknown): value is Record<string, unknown> {
|
|
119
|
+
return typeof value === "object" && value !== null && !Array.isArray(value)
|
|
120
|
+
}
|
|
@@ -1,16 +1,5 @@
|
|
|
1
1
|
import { isPlainRecord } from "../../json"
|
|
2
|
-
|
|
3
|
-
const PRIMITIVE_SCHEMAS = new Set([
|
|
4
|
-
"string",
|
|
5
|
-
"integer",
|
|
6
|
-
"double",
|
|
7
|
-
"decimal",
|
|
8
|
-
"boolean",
|
|
9
|
-
"date",
|
|
10
|
-
"timestamp",
|
|
11
|
-
"uuid",
|
|
12
|
-
"fileRef",
|
|
13
|
-
])
|
|
2
|
+
import { isPrimitiveSchema } from "../primitives"
|
|
14
3
|
|
|
15
4
|
/** Validate a declarative schema's shape independently of the primitive that consumes it. */
|
|
16
5
|
export function assertValidSchema(
|
|
@@ -20,7 +9,7 @@ export function assertValidSchema(
|
|
|
20
9
|
visiting: Set<object> = new Set()
|
|
21
10
|
): void {
|
|
22
11
|
if (typeof schema === "string") {
|
|
23
|
-
if (
|
|
12
|
+
if (isPrimitiveSchema(schema)) {
|
|
24
13
|
return
|
|
25
14
|
}
|
|
26
15
|
throw invalid(path)
|
|
@@ -2,6 +2,7 @@ import { assertJsonValue, cloneJsonValue, type JsonValue } from "../../json"
|
|
|
2
2
|
import type { ObjectFieldSchema, Property, Schema, ValueType } from ".."
|
|
3
3
|
import { normalizeDecimalValue } from "../decimal"
|
|
4
4
|
import { OntologyValidationError } from "../errors"
|
|
5
|
+
import { isUserRef } from "../user-ref"
|
|
5
6
|
import { isRecord, resolveValueTypeSchema } from "./schema"
|
|
6
7
|
|
|
7
8
|
/**
|
|
@@ -44,7 +45,19 @@ export function normalizeSchemaValue(
|
|
|
44
45
|
return normalizeTimestampValue(value, path)
|
|
45
46
|
case "decimal":
|
|
46
47
|
return normalizeDecimal(value, path)
|
|
48
|
+
case "string":
|
|
49
|
+
case "uuid":
|
|
50
|
+
case "integer":
|
|
51
|
+
case "double":
|
|
52
|
+
case "boolean":
|
|
53
|
+
case "fileRef":
|
|
54
|
+
assertJsonValue(value, path)
|
|
55
|
+
return cloneJsonValue(value)
|
|
56
|
+
case "userRef":
|
|
57
|
+
return normalizeUserRef(value, path)
|
|
47
58
|
default:
|
|
59
|
+
// Untyped definitions can still carry an unknown string; it keeps the JSON pass-through.
|
|
60
|
+
schema satisfies never
|
|
48
61
|
assertJsonValue(value, path)
|
|
49
62
|
return cloneJsonValue(value)
|
|
50
63
|
}
|
|
@@ -139,6 +152,16 @@ function normalizeDecimal(value: unknown, path: string): string {
|
|
|
139
152
|
}
|
|
140
153
|
}
|
|
141
154
|
|
|
155
|
+
/** Rebuilds the reference in canonical field order so stored JSON compares and groups stably. */
|
|
156
|
+
function normalizeUserRef(value: unknown, path: string): JsonValue {
|
|
157
|
+
if (!isUserRef(value)) {
|
|
158
|
+
throw new OntologyValidationError(
|
|
159
|
+
`[Sixb] Property ${path} must be a user reference { type: "user", id }`
|
|
160
|
+
)
|
|
161
|
+
}
|
|
162
|
+
return { type: "user", id: value.id }
|
|
163
|
+
}
|
|
164
|
+
|
|
142
165
|
function normalizeDateLike(value: unknown, path: string): Date {
|
|
143
166
|
const date = value instanceof Date ? value : new Date(String(value))
|
|
144
167
|
if (Number.isNaN(date.getTime())) {
|
|
@@ -164,10 +187,23 @@ export function coerceSchemaValueToTyped(
|
|
|
164
187
|
}
|
|
165
188
|
|
|
166
189
|
if (typeof schema === "string") {
|
|
167
|
-
|
|
168
|
-
|
|
190
|
+
switch (schema) {
|
|
191
|
+
case "date":
|
|
192
|
+
case "timestamp":
|
|
193
|
+
return value instanceof Date ? value : new Date(String(value))
|
|
194
|
+
case "string":
|
|
195
|
+
case "uuid":
|
|
196
|
+
case "integer":
|
|
197
|
+
case "double":
|
|
198
|
+
case "decimal":
|
|
199
|
+
case "boolean":
|
|
200
|
+
case "fileRef":
|
|
201
|
+
case "userRef":
|
|
202
|
+
return value
|
|
203
|
+
default:
|
|
204
|
+
schema satisfies never
|
|
205
|
+
return value
|
|
169
206
|
}
|
|
170
|
-
return value
|
|
171
207
|
}
|
|
172
208
|
|
|
173
209
|
if (schema.type === "valueTypeRef") {
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { withFailureMessage } from "../../errors/failure-message"
|
|
2
|
-
import type { ObjectLink, ObjectType, Property, Schema, ValueType } from ".."
|
|
2
|
+
import type { ObjectLink, ObjectType, PrimitiveSchema, Property, Schema, ValueType } from ".."
|
|
3
3
|
import { OntologyValidationError } from "../errors"
|
|
4
|
+
import { primitiveTraits } from "../primitives"
|
|
4
5
|
import type { LinkToken, ObjectTypeWithPropertyTokens, PropertyToken } from "../tokens"
|
|
5
6
|
import { validateSchemaValue } from "./schema"
|
|
6
7
|
|
|
@@ -168,13 +169,34 @@ export function validatePropertyDefinitions(
|
|
|
168
169
|
): void {
|
|
169
170
|
for (const [typeId, objectType] of objectTypesById) {
|
|
170
171
|
for (const property of objectType.properties) {
|
|
171
|
-
|
|
172
|
-
if (property.mode
|
|
172
|
+
assertNoObjectRefSchema(property, `Property '${typeId}.${property.id}'`, valueTypesById)
|
|
173
|
+
if (property.mode !== "telemetry") continue
|
|
174
|
+
// Telemetry stores time-series samples, not references, even when the reference is nested.
|
|
175
|
+
const primitive = findPrimitiveSchema(
|
|
176
|
+
property.schema,
|
|
177
|
+
valueTypesById,
|
|
178
|
+
(schema) => primitiveTraits(schema)?.telemetry === false
|
|
179
|
+
)
|
|
180
|
+
if (primitive) {
|
|
173
181
|
throw new OntologyValidationError(
|
|
174
|
-
`[Sixb] Telemetry property '${property.id}' on '${typeId}' cannot use
|
|
182
|
+
`[Sixb] Telemetry property '${property.id}' on '${typeId}' cannot use ${primitive}`
|
|
175
183
|
)
|
|
176
184
|
}
|
|
177
185
|
}
|
|
186
|
+
for (const link of objectType.links) {
|
|
187
|
+
for (const property of link.properties ?? []) {
|
|
188
|
+
const path = `Link property '${typeId}.${link.id}.${property.id}'`
|
|
189
|
+
assertNoObjectRefSchema(property, path, valueTypesById)
|
|
190
|
+
// Link edits do not check that referenced users exist and are active.
|
|
191
|
+
if (
|
|
192
|
+
findPrimitiveSchema(property.schema, valueTypesById, (schema) => schema === "userRef")
|
|
193
|
+
) {
|
|
194
|
+
throw new OntologyValidationError(
|
|
195
|
+
`[Sixb] ${path} cannot use ref.user(). User references are supported on object properties only.`
|
|
196
|
+
)
|
|
197
|
+
}
|
|
198
|
+
}
|
|
199
|
+
}
|
|
178
200
|
}
|
|
179
201
|
}
|
|
180
202
|
|
|
@@ -204,42 +226,96 @@ export function validatePropertyValue(
|
|
|
204
226
|
validateSchemaValue(property.schema, value, path, valueTypesById)
|
|
205
227
|
}
|
|
206
228
|
|
|
207
|
-
|
|
229
|
+
/**
|
|
230
|
+
* First primitive anywhere inside `schema`, through arrays, maps, object fields, and value types,
|
|
231
|
+
* that `matches` accepts.
|
|
232
|
+
*/
|
|
233
|
+
export function findPrimitiveSchema(
|
|
208
234
|
schema: Schema,
|
|
209
235
|
valueTypesById: ReadonlyMap<string, ValueType>,
|
|
236
|
+
matches: (schema: PrimitiveSchema) => boolean,
|
|
210
237
|
seenValueTypeIds = new Set<string>()
|
|
211
|
-
):
|
|
212
|
-
if (schema === "fileRef") {
|
|
213
|
-
return true
|
|
214
|
-
}
|
|
215
|
-
|
|
238
|
+
): PrimitiveSchema | undefined {
|
|
216
239
|
if (typeof schema === "string") {
|
|
217
|
-
return
|
|
240
|
+
return matches(schema) ? schema : undefined
|
|
218
241
|
}
|
|
219
242
|
|
|
220
243
|
if (schema.type === "array") {
|
|
221
|
-
return
|
|
244
|
+
return findPrimitiveSchema(schema.items, valueTypesById, matches, seenValueTypeIds)
|
|
222
245
|
}
|
|
223
246
|
|
|
224
247
|
if (schema.type === "map") {
|
|
225
|
-
return
|
|
248
|
+
return findPrimitiveSchema(schema.valueSchema, valueTypesById, matches, seenValueTypeIds)
|
|
226
249
|
}
|
|
227
250
|
|
|
228
251
|
if (schema.type === "object") {
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
252
|
+
for (const field of Object.values(schema.properties)) {
|
|
253
|
+
const primitive = findPrimitiveSchema(field.schema, valueTypesById, matches, seenValueTypeIds)
|
|
254
|
+
if (primitive) return primitive
|
|
255
|
+
}
|
|
256
|
+
return undefined
|
|
232
257
|
}
|
|
233
258
|
|
|
234
259
|
if (schema.type === "valueTypeRef") {
|
|
235
260
|
if (seenValueTypeIds.has(schema.valueTypeId)) {
|
|
236
|
-
return
|
|
261
|
+
return undefined
|
|
237
262
|
}
|
|
238
263
|
|
|
239
264
|
seenValueTypeIds.add(schema.valueTypeId)
|
|
240
265
|
const resolved = schema._resolved ?? valueTypesById.get(schema.valueTypeId)?.schema
|
|
241
|
-
return resolved
|
|
266
|
+
return resolved
|
|
267
|
+
? findPrimitiveSchema(resolved, valueTypesById, matches, seenValueTypeIds)
|
|
268
|
+
: undefined
|
|
242
269
|
}
|
|
243
270
|
|
|
244
|
-
return
|
|
271
|
+
return undefined
|
|
272
|
+
}
|
|
273
|
+
|
|
274
|
+
/**
|
|
275
|
+
* `ref(ObjectType)` is a parameter schema. Untyped definitions can still pass it to `prop()`,
|
|
276
|
+
* where it would be stored as an opaque record instead of a traversable relationship.
|
|
277
|
+
*/
|
|
278
|
+
function assertNoObjectRefSchema(
|
|
279
|
+
property: Property,
|
|
280
|
+
path: string,
|
|
281
|
+
valueTypesById: ReadonlyMap<string, ValueType>
|
|
282
|
+
): void {
|
|
283
|
+
if (!containsObjectRefSchema(property.schema, valueTypesById)) return
|
|
284
|
+
throw new OntologyValidationError(
|
|
285
|
+
`[Sixb] ${path} uses ref(ObjectType), which is only for Action and Workflow parameters. Point to another object with link("${property.id}", ObjectType) instead.`
|
|
286
|
+
)
|
|
287
|
+
}
|
|
288
|
+
|
|
289
|
+
function containsObjectRefSchema(
|
|
290
|
+
schema: unknown,
|
|
291
|
+
valueTypesById: ReadonlyMap<string, ValueType>,
|
|
292
|
+
seen = new Set<unknown>()
|
|
293
|
+
): boolean {
|
|
294
|
+
if (typeof schema !== "object" || schema === null || seen.has(schema)) return false
|
|
295
|
+
seen.add(schema)
|
|
296
|
+
const node = schema as Record<string, unknown>
|
|
297
|
+
switch (node.type) {
|
|
298
|
+
case "objectRef":
|
|
299
|
+
return true
|
|
300
|
+
case "array":
|
|
301
|
+
return containsObjectRefSchema(node.items, valueTypesById, seen)
|
|
302
|
+
case "map":
|
|
303
|
+
return containsObjectRefSchema(node.valueSchema, valueTypesById, seen)
|
|
304
|
+
case "object":
|
|
305
|
+
return (
|
|
306
|
+
typeof node.properties === "object" &&
|
|
307
|
+
node.properties !== null &&
|
|
308
|
+
Object.values(node.properties).some((field) =>
|
|
309
|
+
containsObjectRefSchema((field as { schema?: unknown })?.schema, valueTypesById, seen)
|
|
310
|
+
)
|
|
311
|
+
)
|
|
312
|
+
case "valueTypeRef":
|
|
313
|
+
return containsObjectRefSchema(
|
|
314
|
+
node._resolved ?? valueTypesById.get(String(node.valueTypeId))?.schema,
|
|
315
|
+
valueTypesById,
|
|
316
|
+
seen
|
|
317
|
+
)
|
|
318
|
+
default:
|
|
319
|
+
return false
|
|
320
|
+
}
|
|
245
321
|
}
|
|
@@ -1,6 +1,13 @@
|
|
|
1
1
|
import { assertEmbeddingModelRef } from "../../models/embedding-model"
|
|
2
2
|
import type { ObjectType, Property, Schema, ValueType } from ".."
|
|
3
3
|
import { OntologyValidationError } from "../errors"
|
|
4
|
+
import {
|
|
5
|
+
isExactSearchSchema,
|
|
6
|
+
isFacetSchema,
|
|
7
|
+
isFilterableSchema,
|
|
8
|
+
isSortableSchema,
|
|
9
|
+
isTextSchema,
|
|
10
|
+
} from "../query-capabilities"
|
|
4
11
|
|
|
5
12
|
type QueryFeature = "filterable" | "sortable" | "text" | "exact" | "facet"
|
|
6
13
|
|
|
@@ -70,13 +77,13 @@ function validatePropertyQueryMetadata(
|
|
|
70
77
|
|
|
71
78
|
const schema = resolveQueryableSchema(property, ownerPath, valueTypesById)
|
|
72
79
|
|
|
73
|
-
if (query.text && !
|
|
80
|
+
if (query.text && !isTextSchema(schema)) {
|
|
74
81
|
throw new OntologyValidationError(
|
|
75
82
|
`[Sixb] Query metadata for property '${property.id}' on '${ownerPath}' enables text search, but its schema is not string-like`
|
|
76
83
|
)
|
|
77
84
|
}
|
|
78
85
|
|
|
79
|
-
if (query.exact && !
|
|
86
|
+
if (query.exact && !isExactSearchSchema(schema)) {
|
|
80
87
|
throw new OntologyValidationError(
|
|
81
88
|
`[Sixb] Query metadata for property '${property.id}' on '${ownerPath}' enables exact search, but its schema cannot be exact-matched`
|
|
82
89
|
)
|
|
@@ -130,7 +137,7 @@ function validateObjectSearchMetadata(
|
|
|
130
137
|
for (const id of profile.source) {
|
|
131
138
|
const property = requireObjectProperty(typeId, objectType, id, `search.vectors.${name}`)
|
|
132
139
|
assertStaticSearchProfileProperty(typeId, property, `search.vectors.${name}`)
|
|
133
|
-
if (!
|
|
140
|
+
if (!isTextSchema(resolveQueryableSchema(property, typeId, valueTypesById))) {
|
|
134
141
|
throw new OntologyValidationError(`[Sixb] Vector source must be text: ${typeId}.${id}`)
|
|
135
142
|
}
|
|
136
143
|
}
|
|
@@ -141,7 +148,7 @@ function validateObjectSearchMetadata(
|
|
|
141
148
|
const title = requireObjectProperty(typeId, objectType, search.title, "search.title")
|
|
142
149
|
assertStaticSearchProfileProperty(typeId, title, "search.title")
|
|
143
150
|
const schema = resolveQueryableSchema(title, typeId, valueTypesById)
|
|
144
|
-
if (!
|
|
151
|
+
if (!isTextSchema(schema)) {
|
|
145
152
|
throw new OntologyValidationError(
|
|
146
153
|
`[Sixb] Object type '${typeId}' search.title references '${title.id}', but title fields must be string-like`
|
|
147
154
|
)
|
|
@@ -243,41 +250,3 @@ function resolveSchema(
|
|
|
243
250
|
seenValueTypeIds.add(schema.valueTypeId)
|
|
244
251
|
return resolveSchema(resolved, valueTypesById, path, seenValueTypeIds)
|
|
245
252
|
}
|
|
246
|
-
|
|
247
|
-
function isTextSearchableSchema(schema: Schema): boolean {
|
|
248
|
-
if (schema === "string") return true
|
|
249
|
-
return typeof schema !== "string" && schema.type === "enum" && schema.valueType === "string"
|
|
250
|
-
}
|
|
251
|
-
|
|
252
|
-
function isExactSearchableSchema(schema: Schema): boolean {
|
|
253
|
-
if (typeof schema === "string") {
|
|
254
|
-
return schema !== "fileRef"
|
|
255
|
-
}
|
|
256
|
-
return schema.type === "enum"
|
|
257
|
-
}
|
|
258
|
-
|
|
259
|
-
function isFilterableSchema(schema: Schema): boolean {
|
|
260
|
-
return (
|
|
261
|
-
isExactSearchableSchema(schema) ||
|
|
262
|
-
(typeof schema !== "string" && (schema.type === "array" || schema.type === "map"))
|
|
263
|
-
)
|
|
264
|
-
}
|
|
265
|
-
|
|
266
|
-
function isSortableSchema(schema: Schema): boolean {
|
|
267
|
-
if (typeof schema === "string") {
|
|
268
|
-
return (
|
|
269
|
-
schema === "string" ||
|
|
270
|
-
schema === "uuid" ||
|
|
271
|
-
schema === "integer" ||
|
|
272
|
-
schema === "double" ||
|
|
273
|
-
schema === "decimal" ||
|
|
274
|
-
schema === "date" ||
|
|
275
|
-
schema === "timestamp"
|
|
276
|
-
)
|
|
277
|
-
}
|
|
278
|
-
return schema.type === "enum"
|
|
279
|
-
}
|
|
280
|
-
|
|
281
|
-
function isFacetSchema(schema: Schema): boolean {
|
|
282
|
-
return isExactSearchableSchema(schema)
|
|
283
|
-
}
|
|
@@ -3,6 +3,7 @@ import { withFailureMessage } from "../../errors/failure-message"
|
|
|
3
3
|
import type { ObjectFieldSchema, Schema, ValueType, ValueTypeRefSchema } from ".."
|
|
4
4
|
import { isDecimalString } from "../decimal"
|
|
5
5
|
import { OntologyValidationError } from "../errors"
|
|
6
|
+
import { isUserRef } from "../user-ref"
|
|
6
7
|
|
|
7
8
|
/** Recursive schema validator used by both object and link property validation. */
|
|
8
9
|
export function validateSchemaValue(
|
|
@@ -79,6 +80,21 @@ export function validateSchemaValue(
|
|
|
79
80
|
}
|
|
80
81
|
return
|
|
81
82
|
}
|
|
83
|
+
case "userRef": {
|
|
84
|
+
if (!isUserRef(value)) {
|
|
85
|
+
throw withFailureMessage(
|
|
86
|
+
new OntologyValidationError(
|
|
87
|
+
`[Sixb] Property ${path} must be a user reference { type: "user", id }`
|
|
88
|
+
),
|
|
89
|
+
`Property ${diagnosticPath} must be a user reference.`
|
|
90
|
+
)
|
|
91
|
+
}
|
|
92
|
+
return
|
|
93
|
+
}
|
|
94
|
+
default:
|
|
95
|
+
// Every primitive validates its values above. Untyped definitions can still carry an
|
|
96
|
+
// unknown string; it keeps falling through without a check.
|
|
97
|
+
schema satisfies never
|
|
82
98
|
}
|
|
83
99
|
}
|
|
84
100
|
|
package/src/predicates/types.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import type { DecimalValue } from "../ontology/decimal"
|
|
2
|
-
import type { Property, Schema } from "../ontology/types"
|
|
2
|
+
import type { PrimitiveSchema, Property, Schema } from "../ontology/types"
|
|
3
3
|
|
|
4
4
|
export type Predicate =
|
|
5
5
|
| AllPredicate
|
|
@@ -65,39 +65,49 @@ export type PredicateValueFor<TProperty extends Property> = string extends TProp
|
|
|
65
65
|
? SerializableSchemaPredicateValue<TProperty["schema"]> | null
|
|
66
66
|
: SerializableSchemaPredicateValue<TProperty["schema"]>
|
|
67
67
|
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
:
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
68
|
+
/**
|
|
69
|
+
* Rule predicate values per primitive: `equality` for `eq`/`notEq`, `ordered` for range operators.
|
|
70
|
+
* `never` rejects the operator. Indexed by `PrimitiveSchema`, so a new primitive must add a row.
|
|
71
|
+
*/
|
|
72
|
+
interface PrimitivePredicateValues {
|
|
73
|
+
string: { equality: string; ordered: never }
|
|
74
|
+
uuid: { equality: string; ordered: never }
|
|
75
|
+
date: { equality: string; ordered: never }
|
|
76
|
+
timestamp: { equality: string; ordered: never }
|
|
77
|
+
integer: { equality: number; ordered: number }
|
|
78
|
+
double: { equality: number; ordered: number }
|
|
79
|
+
decimal: { equality: DecimalValue; ordered: DecimalValue }
|
|
80
|
+
boolean: { equality: boolean; ordered: never }
|
|
81
|
+
fileRef: { equality: never; ordered: never }
|
|
82
|
+
// Rule predicates compare scalar values; a user reference supports presence checks only.
|
|
83
|
+
userRef: { equality: never; ordered: never }
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
type SerializableSchemaPredicateValue<TSchema extends Schema> = TSchema extends PrimitiveSchema
|
|
87
|
+
? PrimitivePredicateValues[TSchema] extends { equality: infer TValue }
|
|
88
|
+
? TValue
|
|
89
|
+
: never
|
|
90
|
+
: TSchema extends { readonly type: "enum"; readonly values: readonly (infer TValue)[] }
|
|
91
|
+
? Extract<TValue, PredicateValue>
|
|
92
|
+
: TSchema extends {
|
|
93
|
+
readonly type: "valueTypeRef"
|
|
94
|
+
readonly _resolved: infer TResolved extends Schema
|
|
95
|
+
}
|
|
96
|
+
? SerializableSchemaPredicateValue<TResolved>
|
|
97
|
+
: never
|
|
98
|
+
|
|
99
|
+
type OrderedSchemaPredicateValue<TSchema extends Schema> = TSchema extends PrimitiveSchema
|
|
100
|
+
? PrimitivePredicateValues[TSchema] extends { ordered: infer TValue }
|
|
101
|
+
? TValue
|
|
102
|
+
: never
|
|
103
|
+
: TSchema extends { readonly type: "enum"; readonly valueType: "integer" }
|
|
92
104
|
? number
|
|
93
|
-
: TSchema extends {
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
? OrderedSchemaPredicateValue<TResolved>
|
|
100
|
-
: never
|
|
105
|
+
: TSchema extends {
|
|
106
|
+
readonly type: "valueTypeRef"
|
|
107
|
+
readonly _resolved: infer TResolved extends Schema
|
|
108
|
+
}
|
|
109
|
+
? OrderedSchemaPredicateValue<TResolved>
|
|
110
|
+
: never
|
|
101
111
|
|
|
102
112
|
/** Ordered comparison value inferred from a concrete numeric ontology property. */
|
|
103
113
|
export type OrderedPredicateValueFor<TProperty extends Property> = string extends TProperty["id"]
|
|
@@ -108,14 +108,35 @@ type ProjectionSchemaByDatasetColumnType = {
|
|
|
108
108
|
readonly fileRef: "fileRef"
|
|
109
109
|
}
|
|
110
110
|
|
|
111
|
+
/** Projections cannot map user references yet, even nested ones; registration rejects them too. */
|
|
112
|
+
type SchemaContainsUserRef<TSchema> = TSchema extends "userRef"
|
|
113
|
+
? true
|
|
114
|
+
: TSchema extends { type: "array"; items: infer TItems }
|
|
115
|
+
? SchemaContainsUserRef<TItems>
|
|
116
|
+
: TSchema extends { type: "map"; valueSchema: infer TValue }
|
|
117
|
+
? SchemaContainsUserRef<TValue>
|
|
118
|
+
: TSchema extends { type: "object"; properties: infer TFields }
|
|
119
|
+
? true extends {
|
|
120
|
+
[K in keyof TFields]: TFields[K] extends { schema: infer TField }
|
|
121
|
+
? SchemaContainsUserRef<TField>
|
|
122
|
+
: false
|
|
123
|
+
}[keyof TFields]
|
|
124
|
+
? true
|
|
125
|
+
: false
|
|
126
|
+
: TSchema extends { type: "valueTypeRef"; _resolved: infer TResolved }
|
|
127
|
+
? SchemaContainsUserRef<TResolved>
|
|
128
|
+
: false
|
|
129
|
+
|
|
111
130
|
type DatasetColumnCompatibleWithSchema<
|
|
112
131
|
TColumnType extends DatasetColumnType,
|
|
113
132
|
TSchema extends Schema,
|
|
114
133
|
> = [ResolvedProjectionSchema<TSchema>] extends [never]
|
|
115
134
|
? false
|
|
116
|
-
:
|
|
117
|
-
?
|
|
118
|
-
:
|
|
135
|
+
: SchemaContainsUserRef<TSchema> extends true
|
|
136
|
+
? false
|
|
137
|
+
: ResolvedProjectionSchema<TSchema> extends ProjectionSchemaByDatasetColumnType[TColumnType]
|
|
138
|
+
? true
|
|
139
|
+
: false
|
|
119
140
|
|
|
120
141
|
type DatasetColumnNameCompatibleWithSchema<
|
|
121
142
|
TDataset extends DatasetDefinition,
|
|
@@ -8,7 +8,7 @@
|
|
|
8
8
|
import type { DatasetDefinition } from "../datasets"
|
|
9
9
|
import type { OntologyDefinitionCatalog } from "../ontology"
|
|
10
10
|
import type { ObjectType, Property, ValueType } from "../ontology/types"
|
|
11
|
-
import { resolveSemanticType } from "../ontology/validation"
|
|
11
|
+
import { findPrimitiveSchema, resolveSemanticType } from "../ontology/validation"
|
|
12
12
|
import { ProjectionValidationError } from "./errors"
|
|
13
13
|
import {
|
|
14
14
|
computeProjectionOwnership,
|
|
@@ -394,6 +394,20 @@ export function validateProjectionsAtStartup(
|
|
|
394
394
|
`[Sixb] ${prefix}: source mappings cannot own telemetry property "${projection.objectTypeId}.${propId}"`
|
|
395
395
|
)
|
|
396
396
|
}
|
|
397
|
+
// A dataset column cannot prove that a user exists and is active, so user references stay
|
|
398
|
+
// out of source data until a projection can resolve them.
|
|
399
|
+
if (
|
|
400
|
+
property &&
|
|
401
|
+
findPrimitiveSchema(
|
|
402
|
+
property.schema,
|
|
403
|
+
ontology.getValueTypesById(),
|
|
404
|
+
(schema) => schema === "userRef"
|
|
405
|
+
)
|
|
406
|
+
) {
|
|
407
|
+
throw new ProjectionValidationError(
|
|
408
|
+
`[Sixb] ${prefix}: property "${projection.objectTypeId}.${propId}" holds user references (ref.user()), which projections cannot map yet. Set it from an Action or a runtime edit instead.`
|
|
409
|
+
)
|
|
410
|
+
}
|
|
397
411
|
}
|
|
398
412
|
|
|
399
413
|
const primaryId = primaryByTypeId.get(projection.objectTypeId)!
|