@astrale-os/kernel-core 0.9.0-beta.9 → 0.9.0
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/auth/authority/accept.js +4 -0
- package/dist/auth/authority/admission/admission.d.ts +4 -1
- package/dist/auth/authority/admission/admission.js +46 -147
- package/dist/auth/authority/admission/index.d.ts +1 -1
- package/dist/auth/authority/admission/index.js +1 -1
- package/dist/auth/authority/admission/references.d.ts +13 -0
- package/dist/auth/authority/admission/references.js +38 -0
- package/dist/auth/authority/admission/term.d.ts +6 -0
- package/dist/auth/authority/admission/term.js +60 -0
- package/dist/auth/authority/admission/wire.d.ts +8 -0
- package/dist/auth/authority/admission/wire.js +33 -0
- package/dist/auth/authority/canonical.d.ts +2 -0
- package/dist/auth/authority/canonical.js +15 -0
- package/dist/auth/authority/index.d.ts +9 -2
- package/dist/auth/authority/index.js +6 -1
- package/dist/auth/authority/language/index.d.ts +3 -1
- package/dist/auth/authority/language/index.js +1 -0
- package/dist/auth/authority/language/predicate.d.ts +31 -16
- package/dist/auth/authority/language/predicate.js +1 -1
- package/dist/auth/authority/language/program.d.ts +21 -0
- package/dist/auth/authority/language/program.js +2 -0
- package/dist/auth/authority/normalization/index.d.ts +1 -1
- package/dist/auth/authority/normalization/index.js +1 -1
- package/dist/auth/authority/normalization/normalize.d.ts +2 -0
- package/dist/auth/authority/normalization/normalize.js +38 -16
- package/dist/auth/authority/ownership.optimization.d.ts +8 -0
- package/dist/auth/authority/ownership.optimization.js +83 -0
- package/dist/auth/authority/prepare-binder-body.d.ts +4 -0
- package/dist/auth/authority/prepare-binder-body.js +31 -0
- package/dist/auth/authority/program.d.ts +28 -0
- package/dist/auth/authority/program.js +191 -0
- package/dist/auth/authority/semantics/class-authority.d.ts +8 -0
- package/dist/auth/authority/semantics/class-authority.js +26 -0
- package/dist/auth/authority/semantics/composition.d.ts +46 -0
- package/dist/auth/authority/semantics/composition.js +150 -0
- package/dist/auth/authority/semantics/failure.d.ts +21 -0
- package/dist/auth/authority/semantics/failure.js +10 -0
- package/dist/auth/authority/semantics/index.d.ts +13 -0
- package/dist/auth/authority/semantics/index.js +6 -0
- package/dist/auth/authority/semantics/interpret.d.ts +41 -0
- package/dist/auth/authority/semantics/interpret.js +388 -0
- package/dist/auth/authority/semantics/residual.d.ts +32 -0
- package/dist/auth/authority/semantics/residual.js +166 -0
- package/dist/auth/authority/semantics/snapshot.d.ts +40 -0
- package/dist/auth/authority/semantics/terms.d.ts +22 -0
- package/dist/auth/authority/semantics/terms.js +96 -0
- package/dist/auth/authority/semantics/vocabulary.d.ts +19 -0
- package/dist/auth/context/context.d.ts +4 -3
- package/dist/auth/expression/authoring/builder.d.ts +2 -11
- package/dist/auth/expression/authoring/builder.js +1 -45
- package/dist/auth/expression/authoring/index.d.ts +1 -1
- package/dist/auth/expression/authoring/index.js +1 -1
- package/dist/auth/expression/index.d.ts +1 -2
- package/dist/auth/expression/index.js +1 -2
- package/dist/auth/expression/language/identity-expression.d.ts +2 -22
- package/dist/auth/grant/index.d.ts +1 -1
- package/dist/auth/grant/index.js +1 -1
- package/dist/auth/grant/resolved/admission.d.ts +4 -3
- package/dist/auth/grant/resolved/admission.js +23 -13
- package/dist/auth/grant/resolved/grant.d.ts +1 -1
- package/dist/auth/grant/resolved/index.d.ts +1 -1
- package/dist/auth/grant/resolved/index.js +1 -1
- package/dist/auth/grant/unresolved/admission.d.ts +4 -1
- package/dist/auth/grant/unresolved/admission.js +27 -67
- package/dist/auth/grant/unresolved/limits.d.ts +2 -4
- package/dist/auth/grant/unresolved/limits.js +1 -5
- package/dist/auth/identity/admission.js +11 -3
- package/dist/auth/identity/identity.d.ts +15 -3
- package/dist/auth/identity/index.d.ts +1 -1
- package/dist/auth/index.d.ts +4 -4
- package/dist/auth/index.js +1 -1
- package/dist/auth/jwk/index.d.ts +1 -1
- package/dist/auth/jwk/index.js +1 -1
- package/dist/auth/jwk/thumbprint.d.ts +2 -0
- package/dist/auth/jwk/thumbprint.js +12 -6
- package/dist/auth/register/fingerprint/fingerprint.d.ts +25 -0
- package/dist/auth/register/fingerprint/fingerprint.js +31 -0
- package/dist/auth/register/fingerprint/index.d.ts +2 -0
- package/dist/auth/register/index.d.ts +5 -0
- package/dist/auth/register/request/admission.d.ts +3 -0
- package/dist/auth/register/request/admission.js +103 -0
- package/dist/auth/register/request/index.d.ts +3 -0
- package/dist/auth/register/request/limits.d.ts +6 -0
- package/dist/auth/register/request/limits.js +6 -0
- package/dist/auth/register/request/request.d.ts +19 -0
- package/dist/auth/{provision → register}/request/self-issuer.d.ts +1 -1
- package/dist/auth/{provision → register}/request/self-issuer.js +1 -1
- package/dist/auth/register/result/index.d.ts +1 -0
- package/dist/auth/register/result/result.d.ts +10 -0
- package/dist/auth/register/result/result.js +1 -0
- package/dist/callable/contract/body.d.ts +10 -0
- package/dist/callable/contract/body.js +7 -0
- package/dist/callable/contract/index.d.ts +2 -1
- package/dist/callable/contract/index.js +1 -1
- package/dist/callable/contract/output.d.ts +18 -2
- package/dist/callable/index.d.ts +3 -2
- package/dist/callable/index.js +2 -1
- package/dist/callable/invocation/call.d.ts +16 -2
- package/dist/callable/invocation/call.js +41 -1
- package/dist/callable/invocation/index.d.ts +1 -1
- package/dist/callable/invocation/index.js +1 -1
- package/dist/callable/invocation/result.d.ts +10 -3
- package/dist/dns-label.d.ts +1 -2
- package/dist/dns-label.js +2 -3
- package/dist/graph/graph/graph.d.ts +1 -5
- package/dist/graph/graph/graph.js +3 -27
- package/dist/graph/graph/index.d.ts +2 -4
- package/dist/graph/graph/index.js +2 -3
- package/dist/graph/graph/model/codec.js +4 -4
- package/dist/graph/graph/model/index.d.ts +1 -1
- package/dist/graph/graph/model/index.js +1 -1
- package/dist/graph/graph/model/model.d.ts +7 -7
- package/dist/graph/graph/model/model.js +6 -6
- package/dist/graph/graph/model/wire.d.ts +58 -78
- package/dist/graph/graph/model/wire.js +18 -19
- package/dist/graph/mutate/authoring/builder.d.ts +2 -2
- package/dist/graph/mutate/authoring/builder.js +2 -2
- package/dist/graph/mutate/authoring/create.js +13 -5
- package/dist/graph/mutate/index.d.ts +1 -1
- package/dist/graph/mutate/language/codec.js +3 -3
- package/dist/graph/mutate/language/model.d.ts +4 -4
- package/dist/graph/mutate/language/wire.d.ts +226 -215
- package/dist/graph/mutate/language/wire.js +42 -47
- package/dist/graph/mutate/result/index.d.ts +4 -3
- package/dist/graph/mutate/result/index.js +8 -6
- package/dist/graph/mutate/result/wire.d.ts +4 -4
- package/dist/graph/mutate/result/wire.js +7 -4
- package/dist/graph/node/identity/id.d.ts +0 -4
- package/dist/graph/node/identity/id.js +0 -5
- package/dist/graph/node/identity/order.js +20 -0
- package/dist/graph/path/authoring/path.d.ts +8 -5
- package/dist/graph/path/authoring/path.js +21 -3
- package/dist/graph/path/language/model.d.ts +8 -3
- package/dist/graph/path/language/syntax.js +23 -8
- package/dist/graph/query/authoring/builder.js +37 -5
- package/dist/graph/query/authoring/model.d.ts +20 -1
- package/dist/graph/query/index.d.ts +4 -2
- package/dist/graph/query/index.js +1 -0
- package/dist/graph/query/language/codec.js +18 -3
- package/dist/graph/query/language/fingerprint.js +8 -0
- package/dist/graph/query/language/model.d.ts +22 -4
- package/dist/graph/query/language/wire.d.ts +124 -114
- package/dist/graph/query/language/wire.js +54 -47
- package/dist/graph/query/order/index.d.ts +53 -0
- package/dist/graph/query/order/index.js +79 -0
- package/dist/graph/query/reference/evaluate.d.ts +1 -0
- package/dist/graph/query/reference/evaluate.js +39 -52
- package/dist/graph/query/result/index.js +1 -1
- package/dist/graph/query/result/wire.d.ts +93 -94
- package/dist/graph/query/result/wire.js +20 -20
- package/dist/graph/reconcile/condition/model.d.ts +2 -2
- package/dist/graph/reconcile/condition/references.d.ts +0 -1
- package/dist/graph/reconcile/condition/references.js +4 -4
- package/dist/graph/reconcile/correspondence.d.ts +9 -8
- package/dist/graph/reconcile/evidence.d.ts +2 -2
- package/dist/graph/reconcile/mutation/assess.d.ts +2 -1
- package/dist/graph/reconcile/observation.d.ts +4 -3
- package/dist/graph/reconcile/planning/canonical.d.ts +6 -0
- package/dist/graph/reconcile/planning/canonical.js +28 -0
- package/dist/graph/reconcile/planning/context.d.ts +3 -3
- package/dist/graph/reconcile/planning/model.d.ts +8 -4
- package/dist/graph/reconcile/planning/plan.js +2 -1
- package/dist/schema/authority/authority-relation.js +3 -0
- package/dist/schema/authority/claims.d.ts +24 -25
- package/dist/schema/authority/claims.js +8 -8
- package/dist/schema/authority/governed-by.d.ts +16 -91
- package/dist/schema/authority/governed-by.js +1 -1
- package/dist/schema/authority/operation-node.d.ts +27 -13
- package/dist/schema/authority/operations.d.ts +8 -168
- package/dist/schema/authority/policy.d.ts +27 -15
- package/dist/schema/authority/vocabulary.d.ts +3 -0
- package/dist/schema/authority/vocabulary.js +25 -0
- package/dist/schema/callables/entrypoint.d.ts +32 -0
- package/dist/schema/callables/entrypoint.js +12 -0
- package/dist/schema/callables/execution.d.ts +569 -0
- package/dist/schema/callables/execution.js +32 -0
- package/dist/schema/callables/function.d.ts +3400 -55
- package/dist/schema/callables/function.js +6 -4
- package/dist/schema/callables/index.d.ts +2 -1
- package/dist/schema/callables/index.js +2 -1
- package/dist/schema/callables/method-of.d.ts +18 -143
- package/dist/schema/callables/method-of.js +2 -2
- package/dist/schema/callables/view.d.ts +83 -51
- package/dist/schema/definitions/class.d.ts +45 -33
- package/dist/schema/definitions/extends.d.ts +16 -110
- package/dist/schema/definitions/instance-of.d.ts +17 -69
- package/dist/schema/domain/domain.d.ts +3343 -148
- package/dist/schema/domain/domain.js +6 -3
- package/dist/schema/domain/of-domain.d.ts +18 -192
- package/dist/schema/domain/of-domain.js +1 -1
- package/dist/schema/identity/composition.d.ts +5 -0
- package/dist/schema/identity/composition.js +5 -0
- package/dist/schema/identity/identity.d.ts +225 -122
- package/dist/schema/identity/identity.js +3 -4
- package/dist/schema/index.d.ts +1 -0
- package/dist/schema/index.js +1 -0
- package/dist/schema/installation/operation-id.d.ts +1 -2
- package/dist/schema/installation/operation-id.js +2 -4
- package/dist/schema/introspection/index.d.ts +1 -1
- package/dist/schema/introspection/language.d.ts +12 -28
- package/dist/schema/kernel/projection/callables.js +2 -3
- package/dist/schema/kernel/projection/core.d.ts +7 -0
- package/dist/schema/kernel/projection/core.js +51 -0
- package/dist/schema/kernel/projection/definitions.d.ts +13 -0
- package/dist/schema/kernel/projection/definitions.js +71 -0
- package/dist/schema/kernel/projection/index.d.ts +3 -3
- package/dist/schema/kernel/projection/index.js +2 -2
- package/dist/schema/kernel/projection/methods.d.ts +5 -0
- package/dist/schema/kernel/projection/methods.js +41 -0
- package/dist/schema/kernel/projection/part.d.ts +34 -0
- package/dist/schema/kernel/projection/part.js +42 -0
- package/dist/schema/kernel/projection/paths.d.ts +6 -0
- package/dist/schema/kernel/projection/{keys.js → paths.js} +12 -14
- package/dist/schema/kernel/projection/project.d.ts +4 -2
- package/dist/schema/kernel/projection/project.js +33 -258
- package/dist/schema/kernel/projection/properties.d.ts +11 -0
- package/dist/schema/kernel/projection/properties.js +36 -0
- package/dist/schema/kernel/projection/relations.d.ts +7 -0
- package/dist/schema/kernel/projection/relations.js +61 -0
- package/dist/schema/kernel/projection/types.d.ts +28 -2
- package/dist/schema/kernel/schema.d.ts +9008 -4939
- package/dist/schema/kernel/schema.js +12 -8
- package/dist/schema/kernel/syscalls/contracts/admit.d.ts +15 -12
- package/dist/schema/kernel/syscalls/contracts/admit.js +16 -9
- package/dist/schema/kernel/syscalls/contracts/blob.d.ts +31 -0
- package/dist/schema/kernel/syscalls/contracts/blob.js +24 -0
- package/dist/schema/kernel/syscalls/contracts/can.d.ts +19 -8
- package/dist/schema/kernel/syscalls/contracts/can.js +12 -4
- package/dist/schema/kernel/syscalls/contracts/delegate.d.ts +6 -7
- package/dist/schema/kernel/syscalls/contracts/delegate.js +5 -5
- package/dist/schema/kernel/syscalls/contracts/execution.d.ts +300 -0
- package/dist/schema/kernel/syscalls/contracts/execution.js +116 -0
- package/dist/schema/kernel/syscalls/contracts/expected.d.ts +5 -0
- package/dist/schema/kernel/syscalls/contracts/expected.js +9 -0
- package/dist/schema/kernel/syscalls/contracts/identity.d.ts +18 -19
- package/dist/schema/kernel/syscalls/contracts/identity.js +6 -7
- package/dist/schema/kernel/syscalls/contracts/impersonate.d.ts +6 -0
- package/dist/schema/kernel/syscalls/contracts/impersonate.js +4 -0
- package/dist/schema/kernel/syscalls/contracts/index.d.ts +6 -3
- package/dist/schema/kernel/syscalls/contracts/index.js +6 -3
- package/dist/schema/kernel/syscalls/contracts/install.d.ts +309 -217
- package/dist/schema/kernel/syscalls/contracts/install.js +68 -26
- package/dist/schema/kernel/syscalls/contracts/installation.d.ts +70 -351
- package/dist/schema/kernel/syscalls/contracts/installation.js +29 -67
- package/dist/schema/kernel/syscalls/contracts/introspect.d.ts +11 -15
- package/dist/schema/kernel/syscalls/contracts/introspect.js +8 -15
- package/dist/schema/kernel/syscalls/contracts/journal.d.ts +26 -27
- package/dist/schema/kernel/syscalls/contracts/journal.js +15 -15
- package/dist/schema/kernel/syscalls/contracts/mint.d.ts +5 -7
- package/dist/schema/kernel/syscalls/contracts/mint.js +4 -5
- package/dist/schema/kernel/syscalls/contracts/mutate.d.ts +243 -224
- package/dist/schema/kernel/syscalls/contracts/mutate.js +7 -1
- package/dist/schema/kernel/syscalls/contracts/query.d.ts +239 -222
- package/dist/schema/kernel/syscalls/contracts/query.js +17 -15
- package/dist/schema/kernel/syscalls/contracts/register.d.ts +20 -0
- package/dist/schema/kernel/syscalls/contracts/register.js +24 -0
- package/dist/schema/kernel/syscalls/contracts/uninstall.d.ts +55 -148
- package/dist/schema/kernel/syscalls/contracts/uninstall.js +7 -5
- package/dist/schema/kernel/syscalls/contracts/view-host-requirements.d.ts +17 -0
- package/dist/schema/kernel/syscalls/contracts/view-host-requirements.js +40 -0
- package/dist/schema/kernel/syscalls/contracts/view-resolve.d.ts +27 -28
- package/dist/schema/kernel/syscalls/contracts/view-resolve.js +16 -24
- package/dist/schema/kernel/syscalls/contracts/whoami.d.ts +19 -20
- package/dist/schema/kernel/syscalls/contracts/whoami.js +2 -2
- package/dist/schema/kernel/syscalls/contracts/whois.d.ts +22 -23
- package/dist/schema/kernel/syscalls/contracts/whois.js +3 -3
- package/dist/schema/kernel/syscalls/declarations/admit.d.ts +18 -18
- package/dist/schema/kernel/syscalls/declarations/admit.js +3 -3
- package/dist/schema/kernel/syscalls/declarations/can.d.ts +19 -14
- package/dist/schema/kernel/syscalls/declarations/can.js +4 -4
- package/dist/schema/kernel/syscalls/declarations/delegate.d.ts +9 -12
- package/dist/schema/kernel/syscalls/declarations/delegate.js +4 -4
- package/dist/schema/kernel/syscalls/declarations/download.d.ts +12 -0
- package/dist/schema/kernel/syscalls/declarations/download.js +10 -0
- package/dist/schema/kernel/syscalls/declarations/execution.d.ts +255 -0
- package/dist/schema/kernel/syscalls/declarations/execution.js +52 -0
- package/dist/schema/kernel/syscalls/declarations/impersonate.d.ts +9 -0
- package/dist/schema/kernel/syscalls/declarations/impersonate.js +12 -0
- package/dist/schema/kernel/syscalls/declarations/index.d.ts +1079 -1323
- package/dist/schema/kernel/syscalls/declarations/index.js +18 -2
- package/dist/schema/kernel/syscalls/declarations/install.d.ts +85 -172
- package/dist/schema/kernel/syscalls/declarations/install.js +7 -3
- package/dist/schema/kernel/syscalls/declarations/introspect.d.ts +8 -19
- package/dist/schema/kernel/syscalls/declarations/introspect.js +3 -4
- package/dist/schema/kernel/syscalls/declarations/journal.d.ts +29 -31
- package/dist/schema/kernel/syscalls/declarations/journal.js +4 -2
- package/dist/schema/kernel/syscalls/declarations/mint.d.ts +8 -13
- package/dist/schema/kernel/syscalls/declarations/mint.js +5 -5
- package/dist/schema/kernel/syscalls/declarations/mutate.d.ts +239 -256
- package/dist/schema/kernel/syscalls/declarations/mutate.js +4 -2
- package/dist/schema/kernel/syscalls/declarations/query.d.ts +236 -260
- package/dist/schema/kernel/syscalls/declarations/query.js +4 -2
- package/dist/schema/kernel/syscalls/declarations/register.d.ts +23 -0
- package/dist/schema/kernel/syscalls/declarations/register.js +10 -0
- package/dist/schema/kernel/syscalls/declarations/uninstall.d.ts +51 -153
- package/dist/schema/kernel/syscalls/declarations/uninstall.js +6 -2
- package/dist/schema/kernel/syscalls/declarations/upload.d.ts +15 -0
- package/dist/schema/kernel/syscalls/declarations/upload.js +10 -0
- package/dist/schema/kernel/syscalls/declarations/use-policy.d.ts +4 -0
- package/dist/schema/kernel/syscalls/declarations/use-policy.js +9 -0
- package/dist/schema/kernel/syscalls/declarations/view-resolve.d.ts +30 -37
- package/dist/schema/kernel/syscalls/declarations/view-resolve.js +5 -3
- package/dist/schema/kernel/syscalls/declarations/whoami.d.ts +22 -26
- package/dist/schema/kernel/syscalls/declarations/whoami.js +3 -3
- package/dist/schema/kernel/syscalls/declarations/whois.d.ts +25 -29
- package/dist/schema/kernel/syscalls/declarations/whois.js +5 -3
- package/dist/schema/kernel/syscalls/descriptors/execution.d.ts +303 -0
- package/dist/schema/kernel/syscalls/descriptors/execution.js +11 -0
- package/dist/schema/kernel/syscalls/descriptors/function.d.ts +8 -2
- package/dist/schema/kernel/syscalls/descriptors/functions.d.ts +3 -1
- package/dist/schema/kernel/syscalls/descriptors/functions.js +3 -1
- package/dist/schema/kernel/syscalls/descriptors/identity.d.ts +47 -13
- package/dist/schema/kernel/syscalls/descriptors/identity.js +2 -1
- package/dist/schema/kernel/syscalls/descriptors/index.d.ts +2 -1
- package/dist/schema/kernel/syscalls/descriptors/index.js +2 -1
- package/dist/schema/kernel/syscalls/descriptors/results/view-resolution.d.ts +5 -2
- package/dist/schema/kernel/syscalls/descriptors/results/view-resolution.js +8 -38
- package/dist/schema/kernel/syscalls/descriptors/view.d.ts +11 -9
- package/dist/schema/kernel/syscalls/index.d.ts +2 -2
- package/dist/schema/kernel/syscalls/index.js +2 -2
- package/dist/schema/kernel/syscalls/references/execution.d.ts +55 -0
- package/dist/schema/kernel/syscalls/references/execution.js +13 -0
- package/dist/schema/kernel/syscalls/references/functions.d.ts +12 -2
- package/dist/schema/kernel/syscalls/references/functions.js +3 -1
- package/dist/schema/kernel/syscalls/references/identity.d.ts +9 -0
- package/dist/schema/kernel/syscalls/references/identity.js +1 -0
- package/dist/schema/kernel/syscalls/references/index.d.ts +2 -1
- package/dist/schema/kernel/syscalls/references/index.js +2 -1
- package/dist/schema/meta/created-by.d.ts +32 -0
- package/dist/schema/meta/created-by.js +17 -0
- package/dist/schema/meta/descriptable.d.ts +13 -11
- package/dist/schema/meta/edge.d.ts +5 -9
- package/dist/schema/meta/iconable.d.ts +13 -11
- package/dist/schema/meta/index.d.ts +1 -0
- package/dist/schema/meta/index.js +1 -0
- package/dist/schema/meta/named.d.ts +13 -9
- package/dist/schema/meta/node.d.ts +9 -1
- package/dist/schema/meta/remotable.d.ts +15 -22
- package/dist/schema/meta/statused.d.ts +13 -7
- package/dist/schema/meta/timestamped.d.ts +14 -12
- package/package.json +9 -7
- package/dist/auth/expression/normalization/canonicalize.d.ts +0 -7
- package/dist/auth/expression/normalization/canonicalize.js +0 -102
- package/dist/auth/expression/normalization/index.d.ts +0 -2
- package/dist/auth/expression/normalization/index.js +0 -2
- package/dist/auth/expression/normalization/raise-denials.d.ts +0 -3
- package/dist/auth/expression/normalization/raise-denials.js +0 -59
- package/dist/auth/provision/fingerprint/fingerprint.d.ts +0 -9
- package/dist/auth/provision/fingerprint/fingerprint.js +0 -33
- package/dist/auth/provision/fingerprint/index.d.ts +0 -2
- package/dist/auth/provision/index.d.ts +0 -5
- package/dist/auth/provision/request/admission.d.ts +0 -3
- package/dist/auth/provision/request/admission.js +0 -125
- package/dist/auth/provision/request/index.d.ts +0 -3
- package/dist/auth/provision/request/request.d.ts +0 -29
- package/dist/auth/provision/result/index.d.ts +0 -1
- package/dist/auth/provision/result/result.d.ts +0 -12
- package/dist/graph/graph/navigation/error.d.ts +0 -12
- package/dist/graph/graph/navigation/error.js +0 -20
- package/dist/graph/graph/navigation/index.d.ts +0 -2
- package/dist/graph/graph/navigation/index.js +0 -1
- package/dist/graph/graph/navigation/model.d.ts +0 -15
- package/dist/schema/callables/view-for.d.ts +0 -296
- package/dist/schema/callables/view-for.js +0 -12
- package/dist/schema/kernel/projection/keys.d.ts +0 -3
- package/dist/schema/kernel/projection/path.d.ts +0 -2
- package/dist/schema/kernel/projection/path.js +0 -140
- package/dist/schema/kernel/syscalls/contracts/provision.d.ts +0 -292
- package/dist/schema/kernel/syscalls/contracts/provision.js +0 -19
- package/dist/schema/kernel/syscalls/declarations/define.d.ts +0 -5
- package/dist/schema/kernel/syscalls/declarations/define.js +0 -7
- package/dist/schema/kernel/syscalls/declarations/provision.d.ts +0 -296
- package/dist/schema/kernel/syscalls/declarations/provision.js +0 -8
- /package/dist/auth/{provision/request/request.js → authority/semantics/snapshot.js} +0 -0
- /package/dist/auth/{provision/result/index.js → authority/semantics/vocabulary.js} +0 -0
- /package/dist/auth/{provision → register}/fingerprint/index.js +0 -0
- /package/dist/auth/{provision → register}/index.js +0 -0
- /package/dist/auth/{provision → register}/request/index.js +0 -0
- /package/dist/auth/{provision/result/result.js → register/request/request.js} +0 -0
- /package/dist/{graph/graph/navigation/model.js → auth/register/result/index.js} +0 -0
|
@@ -1,21 +1,30 @@
|
|
|
1
1
|
import * as portable from '@astrale-os/kernel-dsl/value';
|
|
2
2
|
import { NodeId } from '../../../graph/node/index.js';
|
|
3
3
|
import { AuthValueError } from '../../error.js';
|
|
4
|
-
import { canonicalize as canonicalizeGrant } from '../../grant/index.js';
|
|
5
4
|
import { admitAuthorityExpr, limits } from '../admission/index.js';
|
|
6
5
|
import { AUTHORITY_PREDICATE_VERSION } from '../language/index.js';
|
|
6
|
+
import { ownCanonical, ownedExpression, ownsExpression } from '../ownership.optimization.js';
|
|
7
7
|
/** Validate and canonicalize one authority expression into its versioned crossing envelope. */
|
|
8
8
|
export function canonicalize(expr) {
|
|
9
|
-
const
|
|
9
|
+
const owned = ownedExpression(expr);
|
|
10
|
+
if (owned !== undefined)
|
|
11
|
+
return owned;
|
|
12
|
+
const admitted = admitAuthorityExpr(portable.acceptForRead(expr));
|
|
10
13
|
return canonicalizeAdmitted(admitted);
|
|
11
14
|
}
|
|
12
15
|
export function canonicalizeAdmitted(expr) {
|
|
13
|
-
return Object.freeze({
|
|
16
|
+
return ownCanonical(Object.freeze({
|
|
14
17
|
version: AUTHORITY_PREDICATE_VERSION,
|
|
15
18
|
predicate: normalize(expr, '/predicate', new Set(), false),
|
|
16
|
-
});
|
|
19
|
+
}));
|
|
20
|
+
}
|
|
21
|
+
/** Internal scoped normalization; this body is not a closed owned authority expression. */
|
|
22
|
+
export function normalizeBinderBodyAdmitted(expr) {
|
|
23
|
+
return normalize(expr, '/predicate/where', new Set(), true);
|
|
17
24
|
}
|
|
18
25
|
function normalize(expr, path, locals, subjectBound) {
|
|
26
|
+
if (ownsExpression(expr))
|
|
27
|
+
return expr;
|
|
19
28
|
switch (expr.op) {
|
|
20
29
|
case 'true':
|
|
21
30
|
case 'false':
|
|
@@ -33,17 +42,24 @@ function normalize(expr, path, locals, subjectBound) {
|
|
|
33
42
|
case 'all':
|
|
34
43
|
case 'any':
|
|
35
44
|
return normalizeBoolean(expr.op, expr.predicates, path, locals, subjectBound);
|
|
36
|
-
case '
|
|
45
|
+
case 'as':
|
|
37
46
|
return Object.freeze({
|
|
38
|
-
op: '
|
|
39
|
-
|
|
47
|
+
op: 'as',
|
|
48
|
+
identity: NodeId(expr.identity),
|
|
40
49
|
where: normalize(expr.where, `${path}/where`, locals, true),
|
|
41
50
|
});
|
|
51
|
+
case 'same-node': {
|
|
52
|
+
const left = normalizeTerm(expr.left);
|
|
53
|
+
const right = normalizeTerm(expr.right);
|
|
54
|
+
return Object.freeze(compare(portable.json.serialize(left), portable.json.serialize(right)) <= 0
|
|
55
|
+
? { op: 'same-node', left, right }
|
|
56
|
+
: { op: 'same-node', left: right, right: left });
|
|
57
|
+
}
|
|
42
58
|
case 'related':
|
|
43
59
|
return Object.freeze({
|
|
44
60
|
op: 'related',
|
|
45
61
|
source: normalizeTerm(expr.source),
|
|
46
|
-
|
|
62
|
+
via: normalizeClasses(expr.via),
|
|
47
63
|
target: normalizeTerm(expr.target),
|
|
48
64
|
...(expr.repeat === undefined ? {} : { repeat: Object.freeze({ ...expr.repeat }) }),
|
|
49
65
|
});
|
|
@@ -71,12 +87,6 @@ function normalize(expr, path, locals, subjectBound) {
|
|
|
71
87
|
class: Object.freeze({ ...expr.class }),
|
|
72
88
|
evidence: expr.evidence,
|
|
73
89
|
});
|
|
74
|
-
case 'domain-control':
|
|
75
|
-
return Object.freeze({
|
|
76
|
-
op: 'domain-control',
|
|
77
|
-
identity: normalizeTerm(expr.identity),
|
|
78
|
-
origin: expr.origin,
|
|
79
|
-
});
|
|
80
90
|
}
|
|
81
91
|
}
|
|
82
92
|
function normalizeBoolean(op, input, path, locals, subjectBound) {
|
|
@@ -95,7 +105,8 @@ function normalizeBoolean(op, input, path, locals, subjectBound) {
|
|
|
95
105
|
for (const expr of flattened) {
|
|
96
106
|
if (expr.op === identity)
|
|
97
107
|
continue;
|
|
98
|
-
|
|
108
|
+
// Admission and normalization own these detached subtrees; sorting does not lose that proof.
|
|
109
|
+
unique.set(portable.json.serializeAdmitted(expr), expr);
|
|
99
110
|
}
|
|
100
111
|
const predicates = [...unique.entries()]
|
|
101
112
|
.sort(([left], [right]) => compare(left, right))
|
|
@@ -119,6 +130,8 @@ function normalizeTerm(term) {
|
|
|
119
130
|
return Object.freeze({ kind: 'class', ref: Object.freeze({ ...term.ref }) });
|
|
120
131
|
case 'domain':
|
|
121
132
|
return Object.freeze({ kind: 'domain', origin: term.origin });
|
|
133
|
+
case 'ref':
|
|
134
|
+
return Object.freeze({ kind: 'ref', ref: Object.freeze({ ...term.ref }) });
|
|
122
135
|
case 'core':
|
|
123
136
|
return Object.freeze({ kind: 'core', ref: Object.freeze({ ...term.ref }) });
|
|
124
137
|
case 'local':
|
|
@@ -128,7 +141,16 @@ function normalizeTerm(term) {
|
|
|
128
141
|
}
|
|
129
142
|
}
|
|
130
143
|
function normalizeLocal(local) {
|
|
131
|
-
|
|
144
|
+
if (local.kind === 'any')
|
|
145
|
+
return Object.freeze({ id: local.id, kind: 'any' });
|
|
146
|
+
return Object.freeze({ id: local.id, kind: 'classes', classes: normalizeClasses(local.classes) });
|
|
147
|
+
}
|
|
148
|
+
function normalizeClasses(input) {
|
|
149
|
+
const classes = new Map(input.map((ref) => [classKey(ref), Object.freeze({ ...ref })]));
|
|
150
|
+
return Object.freeze([...classes.entries()].sort(([left], [right]) => compare(left, right)).map(([, ref]) => ref));
|
|
151
|
+
}
|
|
152
|
+
function classKey(ref) {
|
|
153
|
+
return `${ref.origin}:${ref.kind}.${ref.name}`;
|
|
132
154
|
}
|
|
133
155
|
function compare(left, right) {
|
|
134
156
|
return left < right ? -1 : left > right ? 1 : 0;
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { type AuthorityExpr, type AuthorityPredicate } from './language/index.js';
|
|
2
|
+
/** Called only by the owner after detachment, admission and immutable normalization. */
|
|
3
|
+
export declare function ownCanonical(predicate: AuthorityPredicate): AuthorityPredicate;
|
|
4
|
+
/** Closed subprograms retain their lexical proof when composed outside another local binder. */
|
|
5
|
+
export declare function ownsExpression(expression: unknown, remainingDepth?: number): boolean;
|
|
6
|
+
/** Rewrap only owner-proven closed expressions, never a leaf borrowed from a lexical binder. */
|
|
7
|
+
export declare function ownedExpression(expression: AuthorityExpr): AuthorityPredicate | undefined;
|
|
8
|
+
export declare function ownsCanonical(input: unknown): boolean;
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
import * as portable from '@astrale-os/kernel-dsl/value';
|
|
2
|
+
import { AUTHORITY_PREDICATE_VERSION, } from './language/index.js';
|
|
3
|
+
// Static construction provenance only. No evaluated authority or graph facts live here.
|
|
4
|
+
const canonical = new WeakSet();
|
|
5
|
+
const expressions = new WeakMap();
|
|
6
|
+
const depths = new WeakMap();
|
|
7
|
+
/** Called only by the owner after detachment, admission and immutable normalization. */
|
|
8
|
+
export function ownCanonical(predicate) {
|
|
9
|
+
// Carry immutable structural provenance through containing Plans as well as Core calls.
|
|
10
|
+
// The normalized envelope can exceed a portable boundary's default budget even when the
|
|
11
|
+
// constructor's expression fits. In that case retain Core ownership only: a later crossing
|
|
12
|
+
// still applies its own limits, without adding a new constructor failure here.
|
|
13
|
+
try {
|
|
14
|
+
predicate = Object.freeze({
|
|
15
|
+
...predicate,
|
|
16
|
+
predicate: portable.acceptImmutable(predicate.predicate),
|
|
17
|
+
});
|
|
18
|
+
predicate = portable.acceptImmutable(predicate);
|
|
19
|
+
}
|
|
20
|
+
catch (cause) {
|
|
21
|
+
if (!(cause instanceof portable.BoundaryError) || cause.code !== 'VALUE_LIMIT')
|
|
22
|
+
throw cause;
|
|
23
|
+
}
|
|
24
|
+
canonical.add(predicate);
|
|
25
|
+
retainClosedExpression(predicate.predicate);
|
|
26
|
+
expressions.set(predicate.predicate, predicate);
|
|
27
|
+
return predicate;
|
|
28
|
+
}
|
|
29
|
+
/** Closed subprograms retain their lexical proof when composed outside another local binder. */
|
|
30
|
+
export function ownsExpression(expression, remainingDepth = Infinity) {
|
|
31
|
+
if (expression === null ||
|
|
32
|
+
typeof expression !== 'object' ||
|
|
33
|
+
!expressions.has(expression))
|
|
34
|
+
return false;
|
|
35
|
+
if (remainingDepth === Infinity)
|
|
36
|
+
return true;
|
|
37
|
+
const value = expression;
|
|
38
|
+
return expressionDepth(value) <= remainingDepth;
|
|
39
|
+
}
|
|
40
|
+
function expressionDepth(expression) {
|
|
41
|
+
const known = depths.get(expression);
|
|
42
|
+
if (known !== undefined)
|
|
43
|
+
return known;
|
|
44
|
+
const children = expression.op === 'all' || expression.op === 'any'
|
|
45
|
+
? expression.predicates
|
|
46
|
+
: expression.op === 'not'
|
|
47
|
+
? [expression.predicate]
|
|
48
|
+
: expression.op === 'as' || expression.op === 'exists'
|
|
49
|
+
? [expression.where]
|
|
50
|
+
: [];
|
|
51
|
+
const depth = children.length === 0 ? 0 : 1 + Math.max(...children.map(expressionDepth));
|
|
52
|
+
depths.set(expression, depth);
|
|
53
|
+
return depth;
|
|
54
|
+
}
|
|
55
|
+
/** Rewrap only owner-proven closed expressions, never a leaf borrowed from a lexical binder. */
|
|
56
|
+
export function ownedExpression(expression) {
|
|
57
|
+
const known = expressions.get(expression);
|
|
58
|
+
if (known === undefined)
|
|
59
|
+
return undefined;
|
|
60
|
+
if (known !== null)
|
|
61
|
+
return known;
|
|
62
|
+
const predicate = ownCanonical(Object.freeze({
|
|
63
|
+
version: AUTHORITY_PREDICATE_VERSION,
|
|
64
|
+
predicate: expression,
|
|
65
|
+
}));
|
|
66
|
+
expressions.set(expression, predicate);
|
|
67
|
+
return predicate;
|
|
68
|
+
}
|
|
69
|
+
function retainClosedExpression(expression) {
|
|
70
|
+
if (expressions.has(expression))
|
|
71
|
+
return;
|
|
72
|
+
expressions.set(expression, null);
|
|
73
|
+
if (expression.op === 'all' || expression.op === 'any') {
|
|
74
|
+
for (const child of expression.predicates)
|
|
75
|
+
retainClosedExpression(child);
|
|
76
|
+
}
|
|
77
|
+
else if (expression.op === 'not')
|
|
78
|
+
retainClosedExpression(expression.predicate);
|
|
79
|
+
// An identity binder or existential is closed, but its body may depend on its binder.
|
|
80
|
+
}
|
|
81
|
+
export function ownsCanonical(input) {
|
|
82
|
+
return input !== null && typeof input === 'object' && canonical.has(input);
|
|
83
|
+
}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import type { IdentityId } from '../identity/index.js';
|
|
2
|
+
import type { AuthorityExpr, AuthorityPredicate } from './language/index.js';
|
|
3
|
+
/** Prepare one body in a fresh subject scope, independently of the Identity it will bind. */
|
|
4
|
+
export declare function prepareBinderBody(where: AuthorityExpr): (identity: IdentityId) => AuthorityPredicate;
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import * as portable from '@astrale-os/kernel-dsl/value';
|
|
2
|
+
import { isNodeId } from '../../graph/node/index.js';
|
|
3
|
+
import { AuthValueError } from '../error.js';
|
|
4
|
+
import { admitBinderBody } from './admission/index.js';
|
|
5
|
+
import { AUTHORITY_PREDICATE_VERSION } from './language/index.js';
|
|
6
|
+
import { normalizeBinderBodyAdmitted } from './normalization/index.js';
|
|
7
|
+
import { ownCanonical } from './ownership.optimization.js';
|
|
8
|
+
/** Prepare one body in a fresh subject scope, independently of the Identity it will bind. */
|
|
9
|
+
export function prepareBinderBody(where) {
|
|
10
|
+
const admitted = admitBinderBody(portable.acceptForRead(where));
|
|
11
|
+
const body = portable.acceptImmutable(normalizeBinderBodyAdmitted(admitted));
|
|
12
|
+
return identityBinder(body);
|
|
13
|
+
}
|
|
14
|
+
// A distinct closure scope retains only the normalized body, never an initial Identity or input.
|
|
15
|
+
function identityBinder(where) {
|
|
16
|
+
return (identity) => {
|
|
17
|
+
// Charge the entire expression on every binding, including the body and its outer container.
|
|
18
|
+
const value = portable.acceptForRead({ op: 'as', identity, where });
|
|
19
|
+
return ownCanonical(Object.freeze({
|
|
20
|
+
version: AUTHORITY_PREDICATE_VERSION,
|
|
21
|
+
predicate: Object.freeze({ op: 'as', identity: identityOf(value.identity), where }),
|
|
22
|
+
}));
|
|
23
|
+
};
|
|
24
|
+
}
|
|
25
|
+
// The same failure ordinary canonicalization reports for a malformed binder Identity.
|
|
26
|
+
function identityOf(input) {
|
|
27
|
+
if (!isNodeId(input)) {
|
|
28
|
+
throw new AuthValueError('AUTHORITY_PREDICATE_INVALID', 'Expected one canonical IdentityId', '/predicate/identity');
|
|
29
|
+
}
|
|
30
|
+
return input;
|
|
31
|
+
}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import type { ClassRef } from '@astrale-os/kernel-dsl/v1/addressing';
|
|
2
|
+
import type { AuthorityPredicate } from './language/index.js';
|
|
3
|
+
import { type AuthorityProgram, type PredicateRef } from './language/index.js';
|
|
4
|
+
/** Collect one plan's predicates, then close them into one canonical program. */
|
|
5
|
+
export interface AuthorityProgramBuilder {
|
|
6
|
+
/**
|
|
7
|
+
* Reserve a provisional handle. A thunk is compiled only when `finish` selects its handle, so a
|
|
8
|
+
* planner may reserve programs for positions it later drops.
|
|
9
|
+
*/
|
|
10
|
+
intern(predicate: AuthorityPredicate | (() => AuthorityPredicate)): PredicateRef;
|
|
11
|
+
/** Close over the used handles (every reserved handle by default); the builder then closes. */
|
|
12
|
+
finish(used?: Iterable<PredicateRef>): ClosedAuthorityProgram;
|
|
13
|
+
}
|
|
14
|
+
export interface ClosedAuthorityProgram {
|
|
15
|
+
readonly program: AuthorityProgram;
|
|
16
|
+
/** Final ordinal of one used provisional handle. Equal predicates share one ordinal. */
|
|
17
|
+
ref(handle: PredicateRef): PredicateRef;
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* Start one plan's program over the concrete Identity Classes Runtime closed from the pinned
|
|
21
|
+
* Registry. Equal predicate sets always close to equal programs: members are canonical, unique and
|
|
22
|
+
* sorted by their canonical JSON text, so equal meaning yields equal plans.
|
|
23
|
+
*/
|
|
24
|
+
export declare function createAuthorityProgram(identities: readonly ClassRef[]): AuthorityProgramBuilder;
|
|
25
|
+
/** Re-admit one crossing or persisted program; an owned program is returned as is. */
|
|
26
|
+
export declare function acceptProgram(input: unknown): AuthorityProgram;
|
|
27
|
+
/** True exactly for an in-range ordinal of `program`. */
|
|
28
|
+
export declare function isPredicateRef(program: AuthorityProgram, value: unknown): value is PredicateRef;
|
|
@@ -0,0 +1,191 @@
|
|
|
1
|
+
import { patterns } from '@astrale-os/kernel-dsl/v1/addressing';
|
|
2
|
+
import * as portable from '@astrale-os/kernel-dsl/value';
|
|
3
|
+
import { AuthValueError } from '../error.js';
|
|
4
|
+
import { accept } from './accept.js';
|
|
5
|
+
import { AUTHORITY_PREDICATE_VERSION, AUTHORITY_PROGRAM_VERSION, } from './language/index.js';
|
|
6
|
+
import { ownsCanonical } from './ownership.optimization.js';
|
|
7
|
+
/** Programs closed by this owner; admission of an owned program is an identity check. */
|
|
8
|
+
const owned = new WeakSet();
|
|
9
|
+
/**
|
|
10
|
+
* Start one plan's program over the concrete Identity Classes Runtime closed from the pinned
|
|
11
|
+
* Registry. Equal predicate sets always close to equal programs: members are canonical, unique and
|
|
12
|
+
* sorted by their canonical JSON text, so equal meaning yields equal plans.
|
|
13
|
+
*/
|
|
14
|
+
export function createAuthorityProgram(identities) {
|
|
15
|
+
const classes = canonicalIdentities(identities);
|
|
16
|
+
const entries = [];
|
|
17
|
+
const handles = new Map();
|
|
18
|
+
let closed = false;
|
|
19
|
+
return Object.freeze({
|
|
20
|
+
intern(predicate) {
|
|
21
|
+
if (closed)
|
|
22
|
+
throw new TypeError('Authority program is already closed.');
|
|
23
|
+
let handle = handles.get(predicate);
|
|
24
|
+
if (handle === undefined) {
|
|
25
|
+
handle = entries.length;
|
|
26
|
+
entries.push(predicate);
|
|
27
|
+
handles.set(predicate, handle);
|
|
28
|
+
}
|
|
29
|
+
return handle;
|
|
30
|
+
},
|
|
31
|
+
finish(used) {
|
|
32
|
+
if (closed)
|
|
33
|
+
throw new TypeError('Authority program is already closed.');
|
|
34
|
+
closed = true;
|
|
35
|
+
const selected = new Set(used ?? entries.keys());
|
|
36
|
+
const keys = new Map();
|
|
37
|
+
const members = new Map();
|
|
38
|
+
for (const handle of [...selected].sort((left, right) => left - right)) {
|
|
39
|
+
const entry = entries[handle];
|
|
40
|
+
if (entry === undefined)
|
|
41
|
+
throw new TypeError('Unknown provisional Authority handle.');
|
|
42
|
+
const value = typeof entry === 'function' ? entry() : entry;
|
|
43
|
+
const predicate = ownsCanonical(value) ? value : accept(value);
|
|
44
|
+
const key = portable.json.serializeAdmitted(predicate.predicate);
|
|
45
|
+
keys.set(handle, key);
|
|
46
|
+
if (!members.has(key))
|
|
47
|
+
members.set(key, predicate.predicate);
|
|
48
|
+
}
|
|
49
|
+
const sorted = [...members.keys()].sort(compare);
|
|
50
|
+
const ordinals = new Map(sorted.map((key, ordinal) => [key, ordinal]));
|
|
51
|
+
const program = own({
|
|
52
|
+
version: AUTHORITY_PROGRAM_VERSION,
|
|
53
|
+
identities: classes,
|
|
54
|
+
predicates: Object.freeze(sorted.map((key) => members.get(key))),
|
|
55
|
+
});
|
|
56
|
+
return Object.freeze({
|
|
57
|
+
program,
|
|
58
|
+
ref(handle) {
|
|
59
|
+
const key = keys.get(handle);
|
|
60
|
+
if (key === undefined)
|
|
61
|
+
throw new TypeError('Authority handle was not closed.');
|
|
62
|
+
return ordinals.get(key);
|
|
63
|
+
},
|
|
64
|
+
});
|
|
65
|
+
},
|
|
66
|
+
});
|
|
67
|
+
}
|
|
68
|
+
/** Re-admit one crossing or persisted program; an owned program is returned as is. */
|
|
69
|
+
export function acceptProgram(input) {
|
|
70
|
+
if (input !== null && typeof input === 'object' && owned.has(input)) {
|
|
71
|
+
return input;
|
|
72
|
+
}
|
|
73
|
+
try {
|
|
74
|
+
const value = portable.accept(input);
|
|
75
|
+
if (value === null || Array.isArray(value) || typeof value !== 'object') {
|
|
76
|
+
invalid('', 'Expected an authority program object');
|
|
77
|
+
}
|
|
78
|
+
const record = value;
|
|
79
|
+
exact(record, ['identities', 'predicates', 'version'], '');
|
|
80
|
+
if (record.version !== AUTHORITY_PROGRAM_VERSION) {
|
|
81
|
+
invalid('/version', `Unsupported authority program version ${String(record.version)}`);
|
|
82
|
+
}
|
|
83
|
+
if (!Array.isArray(record.identities))
|
|
84
|
+
invalid('/identities', 'Expected an array');
|
|
85
|
+
const identities = record.identities.map((entry, index) => identityClass(entry, `/identities/${index}`));
|
|
86
|
+
const keys = identities.map(classKey);
|
|
87
|
+
for (let index = 1; index < keys.length; index++) {
|
|
88
|
+
if (compare(keys[index - 1], keys[index]) >= 0) {
|
|
89
|
+
invalid(`/identities/${index}`, 'Expected sorted unique Identity Classes');
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
if (!Array.isArray(record.predicates))
|
|
93
|
+
invalid('/predicates', 'Expected an array');
|
|
94
|
+
let previous;
|
|
95
|
+
const predicates = record.predicates.map((entry, index) => {
|
|
96
|
+
const path = `/predicates/${index}`;
|
|
97
|
+
let predicate;
|
|
98
|
+
try {
|
|
99
|
+
predicate = accept({ version: AUTHORITY_PREDICATE_VERSION, predicate: entry });
|
|
100
|
+
}
|
|
101
|
+
catch (cause) {
|
|
102
|
+
const pointer = cause instanceof AuthValueError ? cause.path.replace(/^\/predicate/u, '') : '';
|
|
103
|
+
throw new AuthValueError('AUTHORITY_PROGRAM_INVALID', 'Expected a canonical predicate', `${path}${pointer}`, {
|
|
104
|
+
cause,
|
|
105
|
+
});
|
|
106
|
+
}
|
|
107
|
+
const key = portable.json.serializeAdmitted(predicate.predicate);
|
|
108
|
+
if (key !== portable.json.serializeAdmitted(entry)) {
|
|
109
|
+
invalid(path, 'Expected a canonical predicate');
|
|
110
|
+
}
|
|
111
|
+
if (previous !== undefined && compare(previous, key) >= 0) {
|
|
112
|
+
invalid(path, 'Expected sorted unique predicates');
|
|
113
|
+
}
|
|
114
|
+
previous = key;
|
|
115
|
+
return predicate.predicate;
|
|
116
|
+
});
|
|
117
|
+
return own({
|
|
118
|
+
version: AUTHORITY_PROGRAM_VERSION,
|
|
119
|
+
identities: Object.freeze(identities),
|
|
120
|
+
predicates: Object.freeze(predicates),
|
|
121
|
+
});
|
|
122
|
+
}
|
|
123
|
+
catch (cause) {
|
|
124
|
+
if (cause instanceof AuthValueError && cause.code === 'AUTHORITY_PROGRAM_INVALID')
|
|
125
|
+
throw cause;
|
|
126
|
+
const path = cause instanceof portable.BoundaryError ? cause.pointer : '';
|
|
127
|
+
throw new AuthValueError('AUTHORITY_PROGRAM_INVALID', 'Expected a canonical authority program', path, {
|
|
128
|
+
cause,
|
|
129
|
+
});
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
/**
|
|
133
|
+
* Retain the portable owner's immutable proof when the program fits its default bounds, so a
|
|
134
|
+
* read-only containing Plan capture keeps this identity; otherwise retain Core ownership only.
|
|
135
|
+
*/
|
|
136
|
+
function own(value) {
|
|
137
|
+
let program = Object.freeze(value);
|
|
138
|
+
try {
|
|
139
|
+
program = portable.acceptImmutable(program);
|
|
140
|
+
}
|
|
141
|
+
catch (cause) {
|
|
142
|
+
if (!(cause instanceof portable.BoundaryError) || cause.code !== 'VALUE_LIMIT')
|
|
143
|
+
throw cause;
|
|
144
|
+
}
|
|
145
|
+
owned.add(program);
|
|
146
|
+
return program;
|
|
147
|
+
}
|
|
148
|
+
/** True exactly for an in-range ordinal of `program`. */
|
|
149
|
+
export function isPredicateRef(program, value) {
|
|
150
|
+
return (Number.isSafeInteger(value) &&
|
|
151
|
+
value >= 0 &&
|
|
152
|
+
value < program.predicates.length);
|
|
153
|
+
}
|
|
154
|
+
function canonicalIdentities(input) {
|
|
155
|
+
const classes = new Map();
|
|
156
|
+
input.forEach((ref, index) => {
|
|
157
|
+
const value = identityClass(ref, `/identities/${index}`);
|
|
158
|
+
classes.set(classKey(value), value);
|
|
159
|
+
});
|
|
160
|
+
return Object.freeze([...classes.entries()].sort(([left], [right]) => compare(left, right)).map(([, ref]) => ref));
|
|
161
|
+
}
|
|
162
|
+
function identityClass(input, path) {
|
|
163
|
+
if (input === null || Array.isArray(input) || typeof input !== 'object') {
|
|
164
|
+
invalid(path, 'Expected a Class reference');
|
|
165
|
+
}
|
|
166
|
+
const value = input;
|
|
167
|
+
exact(value, ['kind', 'name', 'origin'], path);
|
|
168
|
+
if (value.kind !== 'class' ||
|
|
169
|
+
typeof value.origin !== 'string' ||
|
|
170
|
+
!patterns.origin.test(value.origin) ||
|
|
171
|
+
typeof value.name !== 'string' ||
|
|
172
|
+
!patterns.memberName.test(value.name)) {
|
|
173
|
+
invalid(path, 'Expected a canonical Class reference');
|
|
174
|
+
}
|
|
175
|
+
return Object.freeze({ origin: value.origin, kind: 'class', name: value.name });
|
|
176
|
+
}
|
|
177
|
+
function classKey(ref) {
|
|
178
|
+
return `${ref.origin}:${ref.kind}.${ref.name}`;
|
|
179
|
+
}
|
|
180
|
+
function exact(value, expected, path) {
|
|
181
|
+
const actual = Object.keys(value).sort(compare);
|
|
182
|
+
if (actual.length !== expected.length || actual.some((key, index) => key !== expected[index])) {
|
|
183
|
+
invalid(path, `Expected exactly ${expected.join(', ')}`);
|
|
184
|
+
}
|
|
185
|
+
}
|
|
186
|
+
function compare(left, right) {
|
|
187
|
+
return left < right ? -1 : left > right ? 1 : 0;
|
|
188
|
+
}
|
|
189
|
+
function invalid(path, message) {
|
|
190
|
+
throw new AuthValueError('AUTHORITY_PROGRAM_INVALID', message, path);
|
|
191
|
+
}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { AuthorityExpr, Requirement } from '../language/index.js';
|
|
2
|
+
import type { AuthorityVocabulary } from './vocabulary.js';
|
|
3
|
+
/**
|
|
4
|
+
* The meaning of `class-authority`. `owner` holds when the identity is the Domain that declares
|
|
5
|
+
* the Class. `allowed` holds for that owner, or when a capability Edge for the operation leads
|
|
6
|
+
* from the identity to the Class projection.
|
|
7
|
+
*/
|
|
8
|
+
export declare function classAuthorityMeaning(requirement: Requirement, vocabulary: AuthorityVocabulary): AuthorityExpr;
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The meaning of `class-authority`. `owner` holds when the identity is the Domain that declares
|
|
3
|
+
* the Class. `allowed` holds for that owner, or when a capability Edge for the operation leads
|
|
4
|
+
* from the identity to the Class projection.
|
|
5
|
+
*/
|
|
6
|
+
export function classAuthorityMeaning(requirement, vocabulary) {
|
|
7
|
+
const owner = {
|
|
8
|
+
op: 'same-node',
|
|
9
|
+
left: requirement.identity,
|
|
10
|
+
right: { kind: 'domain', origin: requirement.class.origin },
|
|
11
|
+
};
|
|
12
|
+
if (requirement.evidence === 'owner')
|
|
13
|
+
return owner;
|
|
14
|
+
return {
|
|
15
|
+
op: 'any',
|
|
16
|
+
predicates: [
|
|
17
|
+
owner,
|
|
18
|
+
{
|
|
19
|
+
op: 'related',
|
|
20
|
+
source: requirement.identity,
|
|
21
|
+
via: [vocabulary.capabilities[requirement.operation]],
|
|
22
|
+
target: { kind: 'class', ref: requirement.class },
|
|
23
|
+
},
|
|
24
|
+
],
|
|
25
|
+
};
|
|
26
|
+
}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import type { NodeId } from '../../../graph/node/index.js';
|
|
2
|
+
import type { ClassRef } from '../language/index.js';
|
|
3
|
+
import type { AuthoritySnapshot } from './snapshot.js';
|
|
4
|
+
import type { AuthorityVocabulary } from './vocabulary.js';
|
|
5
|
+
/** Ceilings a backend places on one binder's composition; overflow is a failure, never false. */
|
|
6
|
+
export interface CompositionLimits {
|
|
7
|
+
readonly compositionNodes: number;
|
|
8
|
+
readonly compositionEdges: number;
|
|
9
|
+
}
|
|
10
|
+
/**
|
|
11
|
+
* Composed status of one Identity. `full` is the complete truth, `positive` ignores exclusions,
|
|
12
|
+
* and `denied` records an exclusion that was reached in positive position.
|
|
13
|
+
*/
|
|
14
|
+
export interface CompositionStatus {
|
|
15
|
+
readonly full: boolean;
|
|
16
|
+
readonly positive: boolean;
|
|
17
|
+
readonly denied: boolean;
|
|
18
|
+
}
|
|
19
|
+
/** One binder's live composition: every Identity reachable from its root. */
|
|
20
|
+
export interface CompositionClosure {
|
|
21
|
+
readonly root: NodeId;
|
|
22
|
+
/** Closure members, root first, in breadth-first order. */
|
|
23
|
+
readonly identities: readonly NodeId[];
|
|
24
|
+
/** False when the closure contains a cycle; the binder is then false. */
|
|
25
|
+
readonly acyclic: boolean;
|
|
26
|
+
/**
|
|
27
|
+
* Fold the closure children first from one leaf decision per member. Every member's leaf is
|
|
28
|
+
* decided. Undefined when the closure is cyclic.
|
|
29
|
+
*/
|
|
30
|
+
status(leaf: (identity: NodeId) => boolean): CompositionStatus | undefined;
|
|
31
|
+
/**
|
|
32
|
+
* The binder's decision, `allowed` of `status`, from leaves of which some are unknown
|
|
33
|
+
* (undefined): the same fold in Kleene's strong three-valued logic, so a decision it returns is
|
|
34
|
+
* the one every value of the unknown leaves gives (`decide3_sound` of `proofs/Authority.lean`).
|
|
35
|
+
* Undefined when they can change it. A cyclic closure is false.
|
|
36
|
+
*/
|
|
37
|
+
decide(leaf: (identity: NodeId) => boolean | undefined): boolean | undefined;
|
|
38
|
+
}
|
|
39
|
+
/** A binder admits its Identity when its composed status is positive and not denied. */
|
|
40
|
+
export declare function allowed(status: CompositionStatus): boolean;
|
|
41
|
+
/**
|
|
42
|
+
* Close the composition of one binder root: the outgoing `extends_with`, `constrained_by` and
|
|
43
|
+
* `excluded_from` Edges, followed transitively. The root must be live and every member must have a
|
|
44
|
+
* concrete Identity Class of `identities`; otherwise the composition is invalid, not false.
|
|
45
|
+
*/
|
|
46
|
+
export declare function closeComposition(root: NodeId, snapshot: AuthoritySnapshot, vocabulary: AuthorityVocabulary, identities: readonly ClassRef[], limits?: CompositionLimits): CompositionClosure;
|